Compare commits

...

3,204 commits

Author SHA1 Message Date
rich2014
b1f7784288 UPD: update Finder Icon in Modern ToolBar on macOS 2026-06-21 16:07:30 +08:00
rich2014
b2d943430e UPD: when copying files from iCloud to Stash, set the App MountPoint path to the App path 2026-06-21 11:01:57 +08:00
rich2014
c393e90939 FIX: the resources cleaned up issue in Wcx/Zip 2026-06-20 22:28:17 +08:00
rich2014
59e3bdce3c FIX: the issue that resources were not properly cleaned up when user canceled in MultiArchive/7z 2026-06-20 22:14:23 +08:00
rich2014
ed6d2a875d FIX: CurrentFileFrom/CurrentFileTo update in MultiArchive/7z 2026-06-20 16:45:23 +08:00
rich2014
35c02857da UPD: more accurate TotalFiles and TotalBytes in TarWriter 2026-06-20 16:38:14 +08:00
rich2014
b8cd177ba3 FIX: DoneBytes error caused by enabling OperationProgressHandler() in oneByOne mode in MultiArchive/7z 2026-06-20 16:35:52 +08:00
rich2014
f857fb19fd FIX: progress calc in MultiArchive/7z 2026-06-20 15:10:03 +08:00
rich2014
e26d1c1cdb FIX: progress calc in Wcx/zip 2026-06-20 09:44:14 +08:00
rich2014
10428e142b FIX: progress calc in TarWriter 2026-06-20 09:40:54 +08:00
rich2014
64a37d0c69 DEL: remove TTarWriter.ProcessTree() (TarBegin/TarFiles/TarEnd instead) 2026-06-19 14:59:59 +08:00
rich2014
54d6654ad1 UPD: improve sourcePath/targetPath when copying from iCloud to MultiArchive/7z 2026-06-18 21:21:42 +08:00
rich2014
0e7285f3e0 UPD: after copying files to Wcx/Zip, reload all FileViews that have that Wcx/Zip open 2026-06-18 13:12:53 +08:00
rich2014
487a3602cc UPD: disable flatview in Stash 2026-06-18 09:22:19 +08:00
rich2014
780a53bffc FIX: dangling(FMultiArcItem) and leak(FOutputParser) in uMultiArchiveFileSource 2026-06-18 09:06:41 +08:00
rich2014
44b1ebfb9a UPD: refactor to merge self doPackFilesOneByOne() and doMultiPackFiles() 2026-06-17 22:47:09 +08:00
rich2014
a26474651f UPD: Maintaining the correct destination path structure when copying multiple files from Virtual FileSource with '%F' to MultiArchive/7z 2026-06-17 19:48:29 +08:00
rich2014
2f70adb75b FIX: the issue that iCloud can't be packed by MultiArchive/7z 2026-06-17 16:29:57 +08:00
rich2014
af2894c6ef UPD: Maintaining the correct destination path structure when copying multiple files from Virtual FileSource to MultiArchive/Tar 2026-06-17 15:29:19 +08:00
rich2014
887f34e670 UPD: improve removeFiles handling in ArchiveCopyInOperation 2026-06-17 13:25:11 +08:00
rich2014
b2cb9435c5 UPD: Maintaining the correct destination path structure when copying multiple files from Virtual FileSource to MultiArchive/7z 2026-06-17 11:56:32 +08:00
rich2014
9b4c0854da UPD: apply 'cm_openstash' in TStashFileSource.GetMainIcon() 2026-06-17 09:38:53 +08:00
rich2014
6d0fcfee45 ADD: support iconName/svg in DarwinImage 2026-06-17 09:36:27 +08:00
rich2014
9597fcd28d UPD: Maintaining the correct destination path structure when copying multiple files from Virtual FileSource to Wcx/Tar 2026-06-17 08:26:45 +08:00
rich2014
55006f111a ADD: TarBegin/TarFiles/TarEnd in TarWriter to support ProcessFilesWithMultiRootPath() 2026-06-17 08:26:45 +08:00
Alexander Koblov
e853d5237e UPD: Russian language file 2026-06-16 18:32:59 +03:00
rich2014
81f889e677 FIX: If a temporary tar file is generated during the pack process, and the user subsequently cancels, the temporary tar file will not be deleted 2026-06-15 22:36:26 +08:00
rich2014
dae67778de UPD: simplify TWcxArchiveCopyInOperation.MainExecute() by ProcessFilesWithMultiRootPath() 2026-06-15 22:27:11 +08:00
rich2014
630c19c2f2 ADD: ProcessFilesWithMultiRootPath() in uArchiveFileSourceUtil 2026-06-15 22:25:32 +08:00
rich2014
35304eb238 FIX: the issue that FArcFileList in WcxArchiveFileSource was not cleared after the ArchiveFile were removed 2026-06-15 13:12:25 +08:00
rich2014
9b49371938 ADD: Count() in TThreadObjectList 2026-06-15 13:08:57 +08:00
rich2014
9add69adef UPD: improve packFileOneByOne() to packFilesPathByPath() in uWcxArchiveCopyInOperation 2026-06-14 23:32:59 +08:00
rich2014
dd3f3f70db ADD: sort() in TFiles 2026-06-14 23:32:04 +08:00
rich2014
77a97865cf FIX: pack files from Stash to iCloud 2026-06-14 19:32:12 +08:00
Alexander Koblov
4cc05afbf0 UPD: DCTheme icon theme cache file 2026-06-14 14:24:44 +03:00
Alexander Koblov
d586796cc0 ADD: Stash actions icons 2026-06-14 14:24:44 +03:00
rich2014
fda9362805 ADD: apply fsoPack/TFileSourceProcessor in cm_PackFiles() to support various FileSources 2026-06-14 13:49:06 +08:00
rich2014
be807fdb54 ADD: support fsoPack in TMountedFileSourceProcessor/iCloud 2026-06-14 13:26:16 +08:00
rich2014
4594d225d5 ADD: support fsoPack in TSearchResultFileSourceProcessor 2026-06-14 13:25:22 +08:00
rich2014
7db7e41489 ADD: support fsoPack in TStashFileSourceProcessor 2026-06-14 13:24:41 +08:00
rich2014
53f9c3c42f ADD: fsoPack/TDefaultFileSourceProcessor.consultPackOperation() 2026-06-14 10:25:38 +08:00
VenusGirl❤
9cabced1e8
UPD: Korean language file (#2928) 2026-06-13 23:59:57 +03:00
Alexander Koblov
ef570c9af4 FIX: Background context menu in the special file sources (like search results) 2026-06-13 16:24:28 +03:00
Alexander Koblov
1d49ade80b ADD: Stash context menu items 2026-06-13 15:17:35 +03:00
rich2014
3276638149 UPD: simplify TMountedFileSourceProcessor.detectIfSupportOperation() by TFiles.params.files.allFilesAtSamePath() 2026-06-12 19:24:41 +08:00
rich2014
969fc8d240 UPD: improve copying multi difference paths from Search Result 2026-06-12 19:21:57 +08:00
rich2014
33bf56ea9b UPD: improve copying multi difference paths from Stash FileSource 2026-06-12 19:20:59 +08:00
rich2014
34013fda7d UPD: Maintaining the correct destination path structure when copying multiple files from Virtual FileSource to Wcx/Zip 2026-06-12 19:19:14 +08:00
rich2014
e9c05e6aaf ADD: infrastructure for Virtual FileSource in TFiles 2026-06-12 19:18:59 +08:00
rich2014
a260581a01 FIX: the issue that the List would refresh multiple times after updating the Archive (trigger EFileSourceOperationAborting) 2026-06-12 08:30:57 +08:00
rich2014
3e869b4d9a FIX: TStashFileSource.GetMainIcon() in Stash on Windows 2026-06-12 08:29:35 +08:00
Alexander Koblov
818a171374 FIX: Stash context menu 2026-06-11 21:53:56 +03:00
rich2014
9781239310 UPD: '..' returns the path that does not end with PathDelimiter #2924 2026-06-11 09:39:34 +08:00
rich2014
39ef1ea0f3 FIX: the issue related to '..' at the top of FileSource #2922 2026-06-11 00:31:41 +08:00
rich2014
56a26c8568 UPD: improve prompt in TfrmMain.MoveFiles() 2026-06-10 19:41:41 +08:00
rich2014
7a22f56648 UPD: replace with fspDirectAccess for better compatibility with various FileSources in TMountedFileSourceProcessor 2026-06-10 19:40:54 +08:00
rich2014
888b9ee558 FIX: remove fspSearchable from TSearchResultFileSource.GetProperties() if it's created from Wcx/Zip 2026-06-10 19:39:55 +08:00
rich2014
5dec42098a FIX: the issue of moving files from SearchResult 2026-06-10 19:24:44 +08:00
rich2014
55299c7771 FIX: the issue of copying files from SearchResult 2026-06-10 18:51:44 +08:00
rich2014
18bc5f7a6e FIX: consultResult may be changed by the subclass 2026-06-10 15:05:23 +08:00
rich2014
0439ed958b UPD: add fspImmutable for immutable File Source (eg. search result) 2026-06-09 18:11:18 +08:00
rich2014
de67618dd8 ADD/StashFS: step-31: improve TStashFileSourceProcessor 2026-06-09 18:11:08 +08:00
rich2014
ed2cc821b2 UPD: the buttons in Modern ToolBar can be enabled or disabled based on FileSource.Properties on macOS 2026-06-09 13:29:59 +08:00
rich2014
bebe20e6f9 UPD: remove unreachable code in TFileSystemFileSourceProcessor.consultCopyOperation() 2026-06-09 10:20:20 +08:00
rich2014
e9f3c49ed8 ADD/StashFS: step-30: forbid Copying/Moving between Stash FileViews 2026-06-09 10:09:44 +08:00
rich2014
0702ce507b UPD: remove unused units 2026-06-09 09:48:30 +08:00
rich2014
d47f5f91af ADD/StashFS: step-29: support multi-thread in StashFilesBackend 2026-06-09 09:47:21 +08:00
rich2014
cf6e1725e1 ADD/StashFS: step-28: support Copy/Move options 2026-06-09 09:30:40 +08:00
rich2014
145a333a44 ADD/StashFS: step-27: improve context menu and path name 2026-06-09 08:33:51 +08:00
rich2014
08cc9d88c4 UPD: update zh_TW 2026-06-09 08:33:51 +08:00
rich2014
ec5afcc3b0 UPD: update zh_CN 2026-06-09 08:33:51 +08:00
rich2014
f2ffcd3e56 ADD/StashFS: step-26: i18n 2026-06-09 08:33:51 +08:00
rich2014
f08d3af019 ADD/StashFS: step-25: add cm_RemoveFromStash/cm_EmptyStash 2026-06-09 08:33:51 +08:00
rich2014
89ce532f2c ADD/StashFS: step-24: add actOpenStash/cm_OpenStash/"Open Stash" Menu Item, 2026-06-09 08:33:51 +08:00
rich2014
b5ceffa7c4 ADD/StashFS: step-23: support Move Files 2026-06-09 08:33:51 +08:00
rich2014
de9e30608c FIX: keep the handling of OperationOptionsUIClass consistent with CopyFiles() in MoveFiles 2026-06-09 08:33:51 +08:00
Alexander Koblov
33ec2efc9f UPD: DCTheme icon theme 2026-06-08 20:11:01 +03:00
rich2014
733fb94cd7 UPD: replace with fspSaveableLoadable for better compatibility with various FileSources in TFileView.SaveConfiguration() 2026-06-08 11:37:51 +08:00
rich2014
5ccb678297 UPD: replace with fspDirectAccess for better compatibility with various FileSources in ShowExtractDlg() 2026-06-08 10:44:39 +08:00
rich2014
a7e860aa16 UPD: implement GetRealPath() in SearchResultFileSource/StashFileSource 2026-06-08 10:08:43 +08:00
rich2014
a3b021ee76 UPD: replace with CurrentRealPath() for better compatibility with various FileSources in UpdatePrompt() 2026-06-08 09:49:59 +08:00
rich2014
32a3016ee0 ADD/StashFS: step-22: support execute/testArchive 2026-06-08 09:31:21 +08:00
rich2014
f5b670bc2d UPD: replace the check on TFileSystemFileSource with fspDirectAccess in cm_FileProperties and TestArchive. 2026-06-08 09:30:30 +08:00
rich2014
4e7a2ccba3 ADD/StashFS: step-21: support wipe/split/combine/calcStatistics 2026-06-08 00:02:14 +08:00
rich2014
160cf95492 FIX: the potential file list exception that might be triggered when adding a FileSource (eg. Search Result)
it's done by clearing the current file list that shouldn't be cloned, as they will be replaced during AddFileSource
2026-06-07 18:41:53 +08:00
rich2014
76e7585c30 FIX: the issue that original file list and new file list competed for updates when changing folders in FileView
it's because the original file list was not cleared, and there was another update before the new file list was loaded
2026-06-07 18:35:10 +08:00
rich2014
714d00fcec UPD: use GoToPrevHistory instead of RemoveCurrentFileSource to navigate to the parent when the current FileSource is at the Root 2026-06-07 10:16:39 +08:00
rich2014
d843b84a80 FIX: the '..' issue in TFile.SplitIntoNameAndExtension() 2026-06-06 16:36:14 +08:00
rich2014
19bfc7bc06 UPD: change the default terminal parameter from '%D' to '%d0' on macOS 2026-06-06 16:36:10 +08:00
rich2014
5af28c634e UPD: improve handling when ".." is selected in ReplaceVarParams() 2026-06-06 16:36:07 +08:00
rich2014
c007bfa8e8 ADD/StashFS: step-20: forbid creating directories 2026-06-06 16:36:03 +08:00
rich2014
7e82c17bcf ADD/StashFS: step-19: support deleting files 2026-06-06 16:35:59 +08:00
rich2014
9f4bca8c66 FIX: Compilation error on Windows and Linux 2026-06-05 23:56:37 +08:00
rich2014
b32aac982c ADD/StashFS: step-18: improve in TStashFileSource.IsSupportedPath()/TrailingPathDelimiter 2026-06-05 22:57:11 +08:00
rich2014
744a272ba7 ADD/StashFS: step-17: support search in Stash 2026-06-05 22:57:07 +08:00
rich2014
09c3f0de70 ADD/StashFS: step-16: support GetCustomIcon()/GetDisplayFileName() 2026-06-05 22:57:03 +08:00
rich2014
6a1bb39235 ADD/StashFS: step-15: enable StashFileSource 2026-06-05 20:29:02 +08:00
rich2014
4e5db6ccf0 ADD/StashFS: step-14: synchronize Stash changes across each FileViews of the StashFileSource 2026-06-05 20:02:51 +08:00
rich2014
8ba4152f6d FIX: the FileSource that requires singleton may also be created multiple times (FileSystem/iCloud/Stash)
1. turn GetFileSource() to virtual, and apply it in TFileView.LoadConfiguration()
2. add Address in TVfsModule, and apply it in uFileSourceUtil.ChooseFileSource()
2026-06-05 20:02:44 +08:00
rich2014
edccfff2c2 ADD/StashFS: step-13: remove "Add to Stash" in ContextMenu in StashFileSource 2026-06-05 12:06:28 +08:00
rich2014
ee966f872f ADD/StashFS: step-12: "Add to Stash" in ContextMenu/Internal command/Short Cuts 2026-06-05 11:18:20 +08:00
rich2014
a6cdd5849a ADD/StashFS: step-11: addPaths in StashFilesBackend 2026-06-05 11:18:17 +08:00
rich2014
0a146e0119 ADD/StashFS: step-10: context menu for StashFileSource (Remove Stash Items/Empty Stash) 2026-06-05 11:18:13 +08:00
rich2014
89154db05d ADD/StashFS: step-9: improve StashFilesBackend 2026-06-05 11:18:06 +08:00
rich2014
2347cc3f30 ADD/StashFS: step-8: register Stash to VFS 2026-06-05 08:55:40 +08:00
rich2014
3764ee267c ADD/StashFS: step-7: support reload when files changed 2026-06-05 08:54:40 +08:00
rich2014
7749d73320 ADD/StashFS: step-6: remove files that no longer exist from Stash in TStashListOperation 2026-06-05 08:54:34 +08:00
rich2014
a5a8437211 ADD/StashFS: step-5: support rename in StashFileSource 2026-06-05 08:54:30 +08:00
rich2014
6ace022260 ADD/StashFS: step-4: support Change Path in StashFileSource (eliminate TSearchResultFileSource workaround) 2026-06-05 08:54:25 +08:00
rich2014
7084211fc6 ADD/StashFS: step-3: base uStashFileSource 2026-06-05 08:54:18 +08:00
rich2014
bdfb57b282 ADD/StashFS: step-2: base uStashFileSourceOperation 2026-06-05 08:54:04 +08:00
rich2014
844cfd64a8 ADD/StashFS: step-1: base uStashFilesBackend 2026-06-05 08:53:45 +08:00
rich2014
7f6e77ae73 UPD: apply TDCCocoaModernFormUtils to simplify code 2026-06-02 13:39:52 +08:00
rich2014
e864d3458a UPD: update zh_TW 2026-06-02 13:12:09 +08:00
rich2014
da0d4e5c56 UPD: update zh_CN 2026-06-02 13:05:44 +08:00
rich2014
05b135967a UPD: improve the tips of Privilege on macOS 2026-06-02 12:50:05 +08:00
rich2014
a62f046a94 ADD: check if Full Disk Access permission has been granted, if so hide the Privilege Button on the ToolBar 2026-06-02 12:11:27 +08:00
rich2014
05c1e0e6bb ADD: TDarwinApplicationUtil.hasFullDiskAccess() on macOS 2026-06-02 11:56:03 +08:00
rich2014
98533a9d15 ADD: fspSearchable to TFileSourceProperties, and appy in TMainCommands.cm_Search() 2026-06-01 23:10:44 +08:00
rich2014
b1426fd06d ADD: support search files in SearchResultFileSource 2026-06-01 21:20:30 +08:00
rich2014
df9eb65110 ADD: implement AddSearchPath() in TSearchResultFileSource 2026-06-01 21:19:30 +08:00
rich2014
fe307c98e4 UPD: move AddSearchPath() from LocalFileSource into FileSource 2026-06-01 21:18:24 +08:00
rich2014
214e61eb13 FIX: the state of cmbFindPathStart may be incorrect when FindDlg reopened 2026-06-01 20:01:21 +08:00
rich2014
4bde5beaee UPD: fine-tune filename in TfrmFileProperties 2026-06-01 10:19:59 +08:00
rich2014
ef92d2660b UPD: fine-tune TFileSource.GetFilesForPathAndType() 2026-06-01 10:12:12 +08:00
rich2014
9213dd929e FIX: the issue of not clearing the files when handling invalid paths in MountedListOperation 2026-06-01 10:04:59 +08:00
rich2014
d61293302e UPD: comparison can be performed even for TFiles without AttributesProperty in FilesSortFoldersFirst() 2026-06-01 09:47:46 +08:00
rich2014
523c15e297 FIX: the persistent sorting issue in FilesSortFoldersFirst() that was incorrect when comparing two regular files 2026-06-01 09:42:16 +08:00
rich2014
d2971bd587 UPD: improve in TFileSource.GetFilesForPathAndType() 2026-05-31 23:31:23 +08:00
rich2014
1682fc7690 DEL: restore uOSUtils, remove GetFilesInDir() 2026-05-31 23:31:23 +08:00
rich2014
ef724fa7d2 ADD: implement IKASPathEditMate in TfrmCopyDlg, autocomplete is supported on various file sources 2026-05-31 23:31:23 +08:00
rich2014
5267c3387f ADD: implement IKASPathEditMate in TFileViewHeader, autocomplete is supported on various file sources 2026-05-31 23:31:23 +08:00
rich2014
8db33ee722 ADD: IKASPathEditMate in KASPathEdit for further refactor 2026-05-31 23:31:23 +08:00
rich2014
879ef8c6da ADD: GetFilesForPathAndType() in IFileSource, and implement it in TFileSource base on GetFiles() 2026-05-31 23:31:23 +08:00
Alexander Koblov
7bcf801792 ADD: JSONC highlighter (issue #2898) 2026-05-31 16:58:48 +03:00
Alexander Koblov
f5ed3acdfa DEL: Blurry icons 2026-05-31 16:47:39 +03:00
rich2014
c0e020f675 FIX: Compilation error, revert GetFilesInDir() from DCOSUtils into OSUtils 2026-05-31 10:28:45 +08:00
rich2014
a588ff1c95 FIX: the issue of incorrect path Auto Complete in the Copy/Move Dialog 2026-05-31 08:41:45 +08:00
rich2014
701927f0de FIX: the issue of incorrect path Auto Complete in the KASEditPath of FileView 2026-05-31 08:41:44 +08:00
rich2014
5b7cddf5c5 UPD: decouple file functionality from KASPathEdit by TKASPathEditGetFilesFunc, and remove GetFilesInDir() 2026-05-31 08:41:44 +08:00
rich2014
ed931d1894 UPD: copy GetFilesInDir() from KASPathEdit into DCOSUtils to further refactor 2026-05-31 08:41:44 +08:00
VenusGirl❤
c25aeeafb6
UPD: Korean language file (#2900) 2026-05-30 23:44:21 +03:00
Alexander Koblov
5d2ec82799 UPD: Russian language file 2026-05-30 21:03:26 +03:00
Alexander Koblov
0b6f62b153 DEL: Obsolete code 2026-05-30 20:10:53 +03:00
Alexander Koblov
7af7de1d8a FIX: Workaround - missing arrows on the toolbar buttons under Qt6 (issue #2750) 2026-05-30 18:40:46 +03:00
Alexander Koblov
b5f9bae122 FIX: Malformed parameter 2026-05-30 17:03:28 +03:00
Alexander Koblov
7c0b46c0e7 FIX: Wrong scaling (Gtk3) 2026-05-30 16:51:30 +03:00
Alexander Koblov
7d1f047d86 UPD: Korean language file (fixes #2853) 2026-05-30 16:12:21 +03:00
Alexander Koblov
2e4316dd39 UPD: Language files 2026-05-30 16:08:18 +03:00
Alexander Koblov
4178f6e58f ADD: Display RabbitVCS and GVfs emblems when overlay icons enabled 2026-05-30 13:48:46 +03:00
Alexander Koblov
b51733f25e UPD: Always display overlay icons for symbolic links, like other file managers (issue #2854) 2026-05-30 12:51:32 +03:00
Alexander Koblov
45895ad0ed ADD: More extensions to INI highlighter (issue #2898) 2026-05-30 12:45:37 +03:00
Alexander Koblov
0fa82eceb8 UPD: Wfx-plugins - read-only check 2026-05-29 23:27:54 +03:00
Alexander Koblov
d90959dbf0 UPD: Wfx-plugins - display read-only delete confirmation only for files with NTFS attributes 2026-05-29 20:06:09 +03:00
Alexander Koblov
56098e1312 ADD: Editor - Word wrap option (fixes #2886) 2026-05-29 19:59:01 +03:00
rich2014
b05b79bc9a FIX: in the FileViewHeader, the PathEdit will be in the wrong position when the address is visible 2026-05-29 21:56:09 +08:00
rich2014
3fabe6aef5 FIX: Name may be empty in virtual FileSource (root path in Mounted Drive) 2026-05-29 10:44:45 +08:00
Alexander Koblov
6b1a346caa FIX: Build snapshots 2026-05-28 20:49:27 +03:00
EH
3e601a1940
FIX: Virtual terminal - AutoFollow off-by-one and clear resets viewport (#2876) 2026-05-28 20:41:25 +03:00
rich2014
0ec7b7e32b FIX: the issue that TKASCDEdit could not gain focus when clicked 2026-05-28 17:30:15 +08:00
EH
307a682f27
FIX: SyncDirs — enable smooth progress bars (#2893)
Co-authored-by: heredie <heredie@localhost>
2026-05-26 20:46:25 +03:00
EH
adb32099c9
FIX: SyncDirs — preserve symlink timestamps on Linux (bug #3) (#2888) 2026-05-26 20:45:53 +03:00
EH
59607049b2
FIX: SyncDirs — preserve symlink follow/skip choice across file batches (#2887)
When TreeBuilder.BuildFromFiles() runs and the user answers 'follow all'
or 'skip all', the choice is stored in TreeBuilder.FSymLinkOption.
But after FreeAndNil(TreeBuilder) the choice was lost, so each new batch
of files started fresh with gOperationOptionSymLinks (default: ask), and
the dialog re-appeared for every symlink in every subsequent batch.

Fix: write back TreeBuilder.SymLinkOption to Self.SymLinkOption before
freeing the builder so the answer carries forward.

Co-authored-by: heredie <heredie@localhost>
2026-05-26 11:53:55 +03:00
rich2014
246f410673 UPD: simplified expression in UpdateRenameFileEditPosition() 2026-05-26 14:07:44 +08:00
rich2014
92fdf16192 UPD: update i18n for LCL 2026-05-26 14:04:55 +08:00
rich2014
a4c174d5ba UPD: update i18n for LCL 2026-05-25 12:29:43 +08:00
EH
6123a21ed0
FIX: Zip plugin - allow cancelling TAR archive packing mid-operation (#2874)
* FIX: zip plugin - allow cancelling TAR archive packing mid-operation

TAbTarArchive.SaveArchive iterated all items without ever checking
the abort flag, making it impossible to cancel a TAR/TGZ/TBZ2 pack
operation until all files had been written.

Add a DoArchiveProgress call with abort check after each item in the
save loop, identical to the pattern already used in TAbZipArchive.SaveArchive
(abziptyp.pas) and in all extract loops (abarctyp.pas).

When the user cancels, EAbUserAbort is raised, caught in PackFilesW,
and the incomplete archive is deleted if it did not exist before packing.

* FIX: zip plugin - prevent crash on TAR abort inside GZip archive

When TAbUserAbort propagates out of TAbTarArchive.SaveArchive (e.g.
from the abort check added to the save loop), it exits the IsGzippedTar
branch of TAbGzipArchive.SaveArchive without calling SwapToGzip. The
outer finally block then compares FStream (which equals FTarStream,
possibly nil) with NewStream (FGzStream) and incorrectly frees
NewStream. The destructor later calls SwapToGzip (restoring FStream to
the already-freed FGzStream) and then frees FStream a second time,
causing an access violation.

Fix: compare FGzStream instead of FStream in the finally condition.
FGzStream always holds the original gzip stream reference and is never
changed by SwapToTar/SwapToGzip, so the NewStream ownership check is
correct regardless of which swap state the archive is in.

---------

Co-authored-by: heredie <heredie@localhost>
2026-05-23 12:12:23 +03:00
rich2014
10a51f880a UPD: adjust vert alignment type in FileView in Lazarus 4.99 2026-05-23 10:55:00 +08:00
rich2014
617493ec78 UPD: fine-tune the position of the Inplace Rename Button on macOS 2026-05-22 11:33:26 +08:00
rich2014
4843768305 UPD: simplify vert alignment in edtRename in FileView in Lazarus 4.99 2026-05-22 10:47:48 +08:00
PhoebosL
d0140b8834
UPD: NormalizeAccentedChar function (#2865)
* UPD: NormalizeAccentedChar function

Changes in function logic to improve its performance especially in quick search / filter
 instead of Result := Result + cWorkingChar, which allocates memory on each iteration
the changed function in PR now works like so
allocate memory for string -> fill in accent-striped characters -> trim excess of space

* Update uaccentsutils.pas

---------

Co-authored-by: Alexander Koblov <alexx2000@mail.ru>
2026-05-21 10:01:52 +03:00
rich2014
27ca1b3be0 UPD: update zh_CN/zh_TW 2026-05-19 17:58:40 +08:00
rich2014
5e7a25c691 UPD: i18n for 'Open with default App' Modern ToolBar Item in ViewForm on macOS 2026-05-19 14:41:00 +08:00
rich2014
0291126ba2 ADD: 'Open with default App' Modern ToolBar Item in ViewForm on macOS 2026-05-19 14:40:21 +08:00
rich2014
7cf22b45ea FIX: the issue of misaligned image positions after cropping in ViewerForm 2026-05-19 12:40:23 +08:00
rich2014
8918485f72 FIX: Image.Cursor switching issue in ViewerForm 2026-05-19 12:12:32 +08:00
rich2014
f695bd75ae UPD: Remove unnecessary checks on ToolBar1.Visible; checks on btnHightlight.Down are sufficient (especially since ToolBar1 is always hidden on macOS) 2026-05-19 11:32:05 +08:00
rich2014
c6ff324ae8 UPD: refactor UndoXXX into TNormalizedRect in ViewerForm 2026-05-19 10:11:45 +08:00
rich2014
ebbe447b1d FIX: the issue of the selection exceed bounds in Highlight 2026-05-19 09:42:27 +08:00
rich2014
8c3e18eee8 FIX: macOS does not support XOR; when eliminating the selection in Highlight, redrawing is used instead of XOR 2026-05-19 08:47:52 +08:00
rich2014
961eeb5e24 FIX: the issue with incorrect direction when drawing FocusRect in ViewerForm 2026-05-19 08:47:52 +08:00
rich2014
acf007f698 UPD: simplify drawing Rectangle/Ellipse 2026-05-19 08:47:52 +08:00
Alexander Koblov
ab77a7183f FIX: Lazarus 4.6 compatibility 2026-05-18 19:16:56 +03:00
rich2014
e49ddec96c UPD: refactor Undo Rect calc 2026-05-18 21:39:48 +08:00
rich2014
e7d8c81a34 FIX: the issue with incorrect direction when drawing rectangles/ellipses in ViewerForm 2026-05-18 18:19:08 +08:00
rich2014
9088062dec FIX: the issue with incorrect restore area when drawing rectangles/ellipses in ViewerForm 2026-05-18 17:15:47 +08:00
rich2014
77a97a25ed UPD: i18n for Highlight/Paint Modern ToolBar Item in ViewerForm 2026-05-18 12:57:59 +08:00
rich2014
e0f075beea UPD: i18n for GIF Modern ToolBar Item in ViewerForm 2026-05-18 12:57:35 +08:00
rich2014
34c7eb23c0 UPD: i18n for Modern ToolBar Item on middle side in ViewerForm 2026-05-18 12:28:06 +08:00
rich2014
44a15d3e09 UPD: i18n for Modern ToolBar Item on left side in ViewerForm 2026-05-18 11:49:08 +08:00
rich2014
79ccbfddb3 UPD: move translateItemConfig() from ucocoamodernformconfig_editor to ucocoamodernformconfig 2026-05-18 11:47:41 +08:00
rich2014
72d5efc80e UPD: adjust some Icons in Modern Tool Bar in ViewerForm on macOS 2026-05-18 11:09:32 +08:00
rich2014
6e5a8a4d21 UPD: hide the LCL Toolbar in ViewerForm on macOS 11+ again 2026-05-17 22:52:49 +08:00
rich2014
f0a56568d1 ADD: check Slide/PenWidth Modern Form ToolBar selected menu Item in ViewerForm on macOS 2026-05-17 22:44:09 +08:00
rich2014
ec59b39ddb UPD: Lazarus/Cocoa 4.99 compatible 2026-05-17 20:07:08 +08:00
rich2014
91d2178bc7 UPD: don't active quicksearch/filter when Fn Key held 2026-05-16 15:38:20 +08:00
rich2014
d8426b25b6 ADD: support 'Fn' key as modifier for ShortCut on macOS 2026-05-16 15:36:30 +08:00
Alexander Koblov
837cc08394 FIX: Process commands with single quotes (fixes #2862) 2026-05-15 17:40:43 +03:00
Alexander Koblov
d03fa06aee FIX: KASButton - incorrect enabled state 2026-05-15 17:40:43 +03:00
rich2014
198b296abc UPD: improve Paint Modern Tool Bar Item in ViewerForm on macOS 2026-05-15 20:50:46 +08:00
rich2014
65d7f5180c UPD: improve PenColor Modern Tool Bar Item in ViewerForm on macOS 2026-05-15 19:18:56 +08:00
Alexander Koblov
d002cdc373 UPD: Dialog position 2026-05-14 18:29:57 +03:00
Alexander Koblov
7c34dfe389 FIX: Blurry icons 2026-05-14 18:27:51 +03:00
rich2014
043cb97b90 UPD: apply ColorWell in PenColor Modern Tool Bar Item in ViewerForm on macOS 2026-05-14 21:40:55 +08:00
rich2014
97ca989239 UPD: apply emphasize icon in HighLight/Paint Modern Tool Bar Item in ViewerForm on macOS 2026-05-12 20:40:27 +08:00
rich2014
7851fb014f UPD: simplify Gif/Slide Modern Tool Bar Item Icon switching in ViewerForm on macOS base on the new version of Lazaurs 2026-05-12 11:18:19 +08:00
rich2014
be400728aa UPD: disable minimize button in Modeless Form on macOS
on macOS, it's inconvenient to restore minimized non-MainForms, and they're easily forgotten.
it's more convenient to switch between the forms by Command+`, rather than minimizing them.
2026-05-12 11:13:46 +08:00
rich2014
b44064eb2c FIX: fullscreen in ViewerForm 2026-05-12 09:11:58 +08:00
Alexander Koblov
d9920c2839 UPD: Snapshots workflow 2026-05-11 12:10:46 +03:00
rich2014
a5bf4ea880 UPD: improve Resize Modern Tool Bar Item on macOS 2026-05-10 22:49:32 +08:00
rich2014
9d285f8e4b UPD: on macOS, changed Slide Modern Tool Bar Item to the fixed Part (left side), it should work for any file type, not only image 2026-05-10 22:25:12 +08:00
rich2014
12d6002a70 FIX: TimerViewer related in ViewerForm on macOS 2026-05-10 22:22:02 +08:00
rich2014
e5926d7329 FIX: the enabled state of the tool bar items in ViewerForm on macOS 2026-05-10 18:22:56 +08:00
rich2014
b3f9dd2b3f FIX: the issue of Full Screen in ViewerForm 2026-05-10 18:22:03 +08:00
rich2014
b7ea4cdf03 FIX: the issue of attaching/deattaching image edit toolbar on macOS 2026-05-10 09:44:41 +08:00
rich2014
015e8f3ff5 UPD: support entering full-screen by the window's native button in ViewerForm 2026-05-09 23:30:44 +08:00
rich2014
4d6c1e86ad UPD: hide the LCL Toolbar in ViewerForm on macOS 11+ (because of the native Toolbar) 2026-05-09 22:15:35 +08:00
rich2014
c550a0443d UPD: auto hide Modern Form Style ToolBar in Full Screen in Viewer Form on macOS 2026-05-09 21:01:22 +08:00
Alexander Koblov
2b8a209a21 UPD: Use icons from image list 2026-05-09 14:38:54 +03:00
Alexander Koblov
ecf3b8196a FIX: Hide menus icons size option under Qt 2026-05-09 14:38:54 +03:00
rich2014
ae48e071ca ADD: actions to the Slide Modern ToolBar Items in ViewerForm on macOS 11+ 2026-05-09 17:49:55 +08:00
rich2014
e4931b1235 ADD: actions to the Resize Modern ToolBar Items in ViewerForm on macOS 11+ 2026-05-09 12:42:01 +08:00
rich2014
bbb0653d14 ADD: actions to the Paint Modern ToolBar Items in ViewerForm on macOS 11+ 2026-05-09 12:42:01 +08:00
rich2014
2c401b9945 ADD: actions to the HighLight Modern ToolBar Items in ViewerForm on macOS 11+ 2026-05-09 12:42:01 +08:00
rich2014
75954f00f6 ADD: actions to the GIF Modern ToolBar Items in ViewerForm on macOS 11+ 2026-05-09 12:42:01 +08:00
rich2014
c753d6f3cc ADD: actions to the Zoom/Rotate Modern ToolBar Items in ViewerForm on macOS 11+ 2026-05-09 12:42:01 +08:00
rich2014
35ac84e565 ADD: actions to the Preview/Control Modern ToolBar Items in ViewerForm on macOS 11+ 2026-05-09 12:42:01 +08:00
rich2014
765825f714 ADD: support dynamic attach/deattach Image ToolBar Items in ViewerForm 2026-05-09 12:42:01 +08:00
rich2014
cb25db5dac ADD: facilities for dynamically attaching/deattaching ToolBar Items 2026-05-09 12:42:01 +08:00
rich2014
765391e798 ADD: Modern Form Toolbar (UI only) for ViewerForm on macOS 11+ 2026-05-09 12:42:01 +08:00
Alexander Koblov
d2a14e9c26 FIX: Blurry icons 2026-05-08 21:13:36 +03:00
Alexander Koblov
93b08bfeca UPD: Use icons from image list 2026-05-08 17:18:02 +03:00
Alexander Koblov
1cf4aa5876 UPD: DCTheme icon theme cache file 2026-05-08 17:15:36 +03:00
Alexander Koblov
eb40609250 ADD: Lua 5.5 compatibility 2026-05-08 00:14:01 +03:00
Alexander Koblov
151b8faf18 FIX: Viewer - crash under macOS (issue #2815) 2026-05-07 21:28:07 +03:00
Alexander Koblov
84fbc76bb3 FIX: Load history items with leading or trailing space 2026-05-07 00:32:28 +03:00
Demetrius flavious
092b9c716b
UPD: Move DirectoryHotList to localconfig.xml (#2796) 2026-05-07 00:27:26 +03:00
Alexander Koblov
31ea6a2032 UPD: Snapshots workflow 2026-05-06 18:06:15 +03:00
Alexander Koblov
e748d401cc FIX: Remove ScrollWidth (fixes #2847) 2026-05-06 18:02:28 +03:00
Alexander Koblov
a48a556ee6 FIX: Enable auto-sizing 2026-05-05 23:09:12 +03:00
Alexander Koblov
22020d2e85 FIX: Controls alignment 2026-05-05 22:06:18 +03:00
Alexander Koblov
b812db501c FIX: KASButton - draw gray icon when button disabled 2026-05-05 21:24:03 +03:00
Alexander Koblov
b90bfebe33 UPD: Restored the filter icon 2026-05-05 20:46:28 +03:00
Alexander Koblov
f9108d3e0c UPD: Use TKASButton control 2026-05-05 20:38:56 +03:00
Alexander Koblov
6ab558fbef FIX: Lazarus 4.6 compatibility 2026-05-05 20:08:41 +03:00
rich2014
86cb17aa1b FIX: Compilation Temporary with Lazarus 4.99 2026-05-05 12:15:28 +08:00
rich2014
218e68fc40 FIX: the issue that withExt was still being overridden by parameters when the inplace rename editor was already active 2026-05-05 09:40:41 +08:00
Alexander Koblov
dced7dd931 FIX: Build snapshots 2026-05-04 18:23:10 +03:00
rich2014
ad51ed749e UPD: the default gExtraLineSpan is larger on macOS 2026-05-03 23:04:18 +08:00
rich2014
5f8743c335 UPD: update zh_TW 2026-05-03 22:44:51 +08:00
rich2014
1d9a690049 UPD: update zh_CN 2026-05-03 22:43:35 +08:00
rich2014
5383506866 ADD: add 'ExtraLineSpan' setting in Options - Files views extra 2026-05-03 16:33:41 +08:00
rich2014
685a15bcdf UPD: fine-tune the position of the Inplace Rename Button in Columns View Mode 2026-05-02 09:58:31 +08:00
rich2014
c7784ec536 UPD: the inline editor will not occupy the Extension Column when cm_RenameOnly is called with extension=no in Columns View Mode 2026-05-01 23:31:02 +08:00
rich2014
c202082fa9 ADD: 'extension' param for cm_RenameOnly #2597 2026-05-01 16:26:59 +08:00
rich2014
5b2f484fd7 ADD: WithExt in TFileViewWithMainCtrl 2026-05-01 16:14:23 +08:00
Alexander Koblov
3838d61125 FIX: Detect Wayland under Qt6 < 6.9.1 (issue #2752) 2026-04-23 01:44:22 +03:00
Alexander Koblov
d561e7f146 FIX: Enable auto-sizing 2026-04-21 21:21:34 +03:00
Alexander Koblov
3b1c244ed9 UPD: DCTheme icon theme 2026-04-21 20:14:21 +03:00
Alexander Koblov
26733e1ad9 UPD: DCTheme icon theme 2026-04-21 19:36:33 +03:00
Alexander Koblov
b95e3a0aa4 UPD: Use icons from image list 2026-04-20 18:55:31 +03:00
Alexander Koblov
92a94be1a8 UPD: DCTheme icon theme 2026-04-20 18:22:57 +03:00
Alexander Koblov
028529f5d4 FIX: Multi-rename - preset with leading space dropping the space (fixes #1734) 2026-04-20 17:49:44 +03:00
Alexander Koblov
6f9517675e UPD: Use icons from image list 2026-04-20 17:46:07 +03:00
Alexander Koblov
f8cec8aa5b FIX: Blurry icons 2026-04-19 18:44:29 +03:00
Alexander Koblov
cd0df9ff03 UPD: Use icons from image list 2026-04-19 18:29:23 +03:00
Alexander Koblov
ef5b6ce6f5 UPD: Use icons from image list 2026-04-19 18:02:59 +03:00
Alexander Koblov
60e0f669fd UPD: DCTheme icon theme cache file 2026-04-19 15:06:22 +03:00
Alexander Koblov
72e8732ed6 UPD: Use icons from image list 2026-04-19 15:00:05 +03:00
Alexander Koblov
84f71abbc0 UPD: DCTheme icon theme 2026-04-19 15:00:05 +03:00
Alexander Koblov
bc6c15ca9a ADD: Load media-playback-start icon 2026-04-19 15:00:05 +03:00
Alexander Koblov
09e7229cc8 ADD: Load auto-complete icon 2026-04-19 15:00:05 +03:00
Alexander Koblov
7283d74399 UPD: Use icons from image list 2026-04-19 15:00:05 +03:00
Alexander Koblov
5c4f6d0299 FIX: Blurry icons 2026-04-19 15:00:05 +03:00
Alexander Koblov
3ddb204fdc UPD: DCTheme icon theme 2026-04-19 15:00:05 +03:00
rich2014
5e067cbc0b FIX: new version Lazarus compatibility 2026-04-19 17:59:32 +08:00
Alexander Koblov
a20e0931b3 UPD: Buttons use icons from the image list 2026-04-19 00:50:23 +03:00
Alexander Koblov
0368a6e40d ADD: Load open-picture-dialog icon 2026-04-18 21:12:48 +03:00
Alexander Koblov
a9d0801efb UPD: DCTheme icon theme 2026-04-18 21:04:39 +03:00
Alexander Koblov
3916b3abcb UPD: Load buttons icons only from internal theme 2026-04-18 20:19:40 +03:00
Alexander Koblov
1deb745de2 ADD: Capability to load icons only from internal theme 2026-04-18 20:15:23 +03:00
Alexander Koblov
408e76e69a UPD: Use Lazarus buttons icons under Qt6 2026-04-18 20:01:05 +03:00
Alexander Koblov
8a253a806f FIX: Blurry icons 2026-04-18 18:03:35 +03:00
Alexander Koblov
9e4df1c980 UPD: Use some icons from image list 2026-04-18 16:57:10 +03:00
Alexander Koblov
fa2b57c453 ADD: Load buttons icons 2026-04-18 16:38:14 +03:00
Alexander Koblov
c9325738aa ADD: Button icons 2026-04-18 16:31:38 +03:00
Alexander Koblov
b171ec1f3a ADD: KASButton - image list support 2026-04-18 14:36:05 +03:00
Alexander Koblov
96c53ce2d9 DEL: Obsolete workaround 2026-04-18 14:07:37 +03:00
Jozef Gaal
0673a19546
UPD: Slovak language (#2836) 2026-04-17 23:55:57 +03:00
Alexander Koblov
b33bb79302 FIX: Blurry TBitBtn icons under Qt6 with Lazarus 4.6 2026-04-12 13:09:00 +03:00
Alexander Koblov
13c1a12a8e UPD: Controls alignment 2026-04-12 12:34:13 +03:00
Alexander Koblov
147cbde8d0 FIX: Default icons size 2026-04-11 23:46:26 +03:00
Alexander Koblov
f8dd7d0751 FIX: Blurry buttons icons 2026-04-11 16:45:17 +03:00
Alexander Koblov
bc7d7207fe FIX: Controls alignment 2026-04-11 15:58:11 +03:00
Alexander Koblov
f9f2487868 ADD: TKASPanel and TKASGroupBox controls 2026-04-11 15:19:00 +03:00
rich2014
1d4f994af8 FIX: the issue where the Caret Height is incorrect when 'Show as Text' in fViewer 2026-04-07 12:46:39 +08:00
rich2014
ea416ee321 UPD: set Application.ShowMenuGlyphs as the main switch for IconsInMenu to avoid inconsistencies across menus. 2026-04-05 18:36:01 +08:00
rich2014
4c4d9ee02d UPD: set gsmAlways for "Open With" Context Menu Item 2026-04-05 17:52:46 +08:00
rich2014
a41beeaf38 UPD: update zh_TW 2026-04-05 16:45:50 +08:00
rich2014
7eb4b23263 UPD: update zh_CN 2026-04-05 16:11:54 +08:00
rich2014
d98f8e642d FIX: the issue that the Image excess imgCommandIcon bound in frmMainCommandsDlg on Retina Display 2026-04-05 16:03:50 +08:00
Alexander Koblov
6be67cfb80 UPD: Russian language file 2026-04-04 14:32:12 +03:00
Alexander Koblov
b4ee7f9206 UPD: Language files 2026-04-04 14:29:28 +03:00
Alexander Koblov
4fd4024661 UPD: Snapshots workflow 2026-04-04 14:22:46 +03:00
rich2014
b9ae1a170f FIX: the issue that the Image excess sbtnIcon bound on Retina Display 2026-04-04 16:52:03 +08:00
Alexander Koblov
0a66df886b FIX: Draw icon with the correct size when scaling used 2026-04-02 19:45:49 +03:00
Alexander Koblov
4faeb6a6fc FIX: Wrong icon button state 2026-04-02 18:15:52 +03:00
rich2014
870bdf8b91 FIX: the Icon/Button Size in Preview in fViewer 2026-04-02 12:10:05 +08:00
rich2014
70f946eb7a FIX af11aa3: the Icon Display Size in ContextMenu in fEditor 2026-04-02 12:02:37 +08:00
rich2014
4a0514711e FIX af11aa3: the Icon Display Size in ContextMenu and Button in fDiffer 2026-04-02 12:01:18 +08:00
Alexander Koblov
5c8e18b7f9 UPD: Minimal Lazarus version 2026-03-31 18:23:20 +03:00
Alexander Koblov
814f6dfc6c FIX: Load Argon2 parameters 2026-03-31 18:21:31 +03:00
Alexander Koblov
067161fc93 ADD: SyncDirs - selected color option 2026-03-29 17:10:40 +03:00
Alexander Koblov
c6c6c0c15a ADD: SyncDirs - selected color option 2026-03-29 16:56:37 +03:00
Alexander Koblov
af11aa348b FIX: Blurry icons in viewer/editor/differ (issue #2752) 2026-03-29 15:31:05 +03:00
rich2014
d572592446 UPD: update zh_TW 2026-03-28 15:13:02 +08:00
rich2014
e451308c6c UPD: update zh_CN 2026-03-28 12:02:26 +08:00
rich2014
a13ab41a13 FIX: the issue of Services SubMenu in Context Popup Menu #2217 2026-03-27 23:35:19 +08:00
rich2014
0d43aa44d8 FIX: keyCode for F4/F6 in uDarwinFNKey macOS 15+ 2026-03-27 23:28:33 +08:00
rich2014
f98b9a8ece ADD: prompt for gForceFunctionKey authorization after startup 2026-03-27 17:05:14 +08:00
rich2014
41576ba31b ADD: gForceFunctionKey Options 2026-03-27 16:57:11 +08:00
rich2014
6d96a149f3 ADD: FNKeyTap util in TDarwinApplicationUtil 2026-03-27 12:48:10 +08:00
rich2014
79e7e7014a ADD: TDarwinFNKeyTap for #2790 2026-03-27 12:46:27 +08:00
rich2014
ae575fa1c9 FIX: Compilation on macOS 2026-03-25 11:45:25 +08:00
Alexander Koblov
56dea7477d ADD: Find files - select drives button 2026-03-24 20:14:19 +03:00
Alexander Koblov
b6579cd71b UPD: Greek language file 2026-03-22 21:55:42 +03:00
Alexander Koblov
55e92df88e FIX: Alt+Letters typing mode (issue #2785) 2026-03-22 20:53:17 +03:00
rich2014
0bdad89796 UPD: new version Lazarus compatibility 2026-03-20 21:45:11 +08:00
Alexander Koblov
2b0d593338 UPD: Zip - set owner/group before mode 2026-03-18 20:24:52 +03:00
rich2014
62ebd48f22 UPD: new version Lazarus compatibility 2026-03-18 17:07:15 +08:00
Alexander Koblov
3c19843873 ADD: Zip - restore owner when extract from TAR archive (Unix) 2026-03-17 22:45:01 +03:00
Alexander Koblov
214957c269 ADD: Sample wcx-plugin 2026-03-16 17:07:02 +03:00
Alexander Koblov
698d682e04 FIX: cm_OpenArchive behavior for registered extensions 2026-03-16 17:04:18 +03:00
Alexander Koblov
a8ebb41c81 FIX: CanYouHandleThisFile function result type 2026-03-16 16:23:12 +03:00
Alexander Koblov
de6219e1e6 ADD: Viewer - fast rotate and mirror functions for 32 bit images 2026-03-15 15:16:25 +03:00
Alexander Koblov
3666aba90b FIX: Incorrect image colors after rotation (fixes #2783) 2026-03-14 15:16:36 +03:00
Alexander Koblov
6c28e7e324 ADD: MacCloud to fpmake.pp 2026-03-14 12:33:12 +03:00
Alexander Koblov
40ddf63248 FIX: Try to fix build under macOS x86_64 2026-03-14 12:22:52 +03:00
Alexander Koblov
f5b45359e0 UPD: Viewer - don't use standalone scrollbar controls (fixes #2646) 2026-03-13 20:58:20 +03:00
Alexander Koblov
9805aa9184 FIX: Don't call SetFocus when it's not necessary 2026-03-13 20:58:20 +03:00
rich2014
fd4a7ba777 UPD: new version Lazarus compatibility 2026-03-13 22:52:25 +08:00
Alexander Koblov
06669eeed7 FIX: Invalid expression 2026-03-12 23:56:11 +03:00
Alexander Koblov
2551f0b972 ADD: Option to change visual representation of Tab character in Editor (issue #2780) 2026-03-12 15:41:56 +03:00
Alexander Koblov
1b573d4694 FIX: Use a correct scaling with .ico and .svg icons 2026-03-10 19:43:38 +03:00
Alexander Koblov
0e1f6fffd8 FIX: Detect current icon theme under KDE 2026-03-10 16:26:32 +03:00
Alexander Koblov
cd2367212b FIX: Multi-rename - invalid presets group box state (issue #2778) 2026-03-10 13:24:57 +03:00
Alexander Koblov
61a976d182 FIX: File association settings section crash (fixes #2777) 2026-03-10 13:22:26 +03:00
Alexander Koblov
731071daec FIX: Differ - crash when compare a very long lines (fixed #2640) 2026-03-09 15:03:26 +03:00
Alexander Koblov
beb65d5fa6 FIX: Controls alignment 2026-03-09 15:03:26 +03:00
rich2014
cf8a766615 UPD: new version Lazarus compatibility 2026-03-09 19:56:04 +08:00
Alexander Koblov
24ffc65d16 FIX: Controls alignment 2026-03-07 15:42:16 +03:00
Alexander Koblov
db2d2e7da6 FIX: Linux snapshot file name 2026-03-07 14:23:48 +03:00
Alexander Koblov
ce6f5b42e0 UPD: Prepare GTK3 support 2026-03-07 14:19:38 +03:00
Alexander Koblov
f54be93165 FIX: Controls alignment 2026-03-07 14:16:57 +03:00
Alexander Koblov
448e3d2d75 FIX: Wayland detection (fixes #2773) 2026-03-05 19:28:17 +03:00
Alexander Koblov
4947949834 ADD: Build Linux GTK3 snapshot 2026-03-04 20:08:06 +03:00
Alexander Koblov
7367b66385 UPD: Allow to use GTK3 with Lazarus 4.99 2026-03-04 18:40:39 +03:00
Alexander Koblov
f8342e72a1 FIX: Crash with invalid default format settings (fixes #2772) 2026-03-04 18:26:13 +03:00
axis6404
5f6bfb8b5a
FIX: Emoji comparison in TStringListEx #2762 (#2769) 2026-03-01 13:52:46 +03:00
Alexander Koblov
e608cef4bf FIX: Build under macOS 2026-03-01 00:48:14 +03:00
Alexander Koblov
6199cb56f8 FIX: Can't delete to the trash bin in symlinked directories on different partitions (fixes #2770) 2026-02-28 18:33:34 +03:00
Alexander Koblov
1cd11e5813 FIX: Function result does not specified 2026-02-27 20:19:14 +03:00
Alexander Koblov
b0912aa7e3 FIX: Display target archive name when "put in the TAR archive first" option enabled 2026-02-26 21:37:27 +03:00
Alexander Koblov
1bb5c37eb8 ADD: Capability to change bottom progress bar colors
ADD: Use different bottom progress bar colors in the light and dark modes (fixes #2607)
2026-02-25 18:08:32 +03:00
Alexander Koblov
4816772ac3 DEL: Invalid special paths 2026-02-24 17:57:10 +03:00
Alexander Koblov
927ed4ad8d FIX: Crash with Lazarus 4.99 (fixes #2764) 2026-02-24 17:54:33 +03:00
Alexander Koblov
7155a8a61f FIX: Don't add duplicate resolutions 2026-02-23 22:39:47 +03:00
Alexander Koblov
1fdad400b9 UPD: DCTheme icon theme cache file 2026-02-23 22:04:03 +03:00
Alexander Koblov
cb9b8f797a ADD: Main toolbar scalable icons 2026-02-23 21:49:44 +03:00
Alexander Koblov
10bf49637e ADD: Main toolbar scalable icons 2026-02-23 19:50:24 +03:00
Alexander Koblov
904eb2d016 ADD: Main toolbar scalable icons 2026-02-23 19:06:54 +03:00
Alexander Koblov
79f551a74d ADD: Main toolbar scalable icons 2026-02-23 14:28:19 +03:00
Alexander Koblov
3b6d4d1180 FIX: Don't use buggy UTF8CompareStr function 2026-02-23 12:44:32 +03:00
Alexander Koblov
63b7fd155f FIX: Emoji comparison in TStringListEx (fixes #2762) 2026-02-23 12:28:20 +03:00
Alexander Koblov
dd391e22b7 FIX: Crash with Lazarus 4.99 (issue #2764) 2026-02-23 00:09:45 +03:00
Alexander Koblov
76d4ba16ec FIX: Blurry icons in viewer/editor/differ (issue #2752) 2026-02-22 16:44:55 +03:00
Alexander Koblov
c5b48c6db0 ADD: Qt6+Wayland - fractional scaling support (issue #2752) 2026-02-22 16:13:40 +03:00
Raman Sinclair
3f9e3d35a4
FIX: Main window loses focus after confirming file/folder deletion (fixes #2160) (#2760) 2026-02-21 12:38:55 +03:00
Alexander Koblov
1419f3aaac FIX: Crash when copy files to GIO file system 2026-02-19 19:08:15 +03:00
VenusGirl❤
ea8928907e
ADD: Korean language file (#2754) 2026-02-16 22:51:17 +03:00
Igor Labutin
410c0a1c99
FIX: Unicode normalization in Synchronize Dirs on MacOS (fixes #1752) (#2747) 2026-02-16 22:50:00 +03:00
Alexander Koblov
a2e63d01b6 UPD: GIO - Google Drive support (issue #187) 2026-02-15 16:38:55 +03:00
Alexander Koblov
25c4e77e39 ADD: GIO - Google Drive support (fixes #187) 2026-02-15 15:56:26 +03:00
Alexander Koblov
e5d1c0b305 FIX: Close tab by hotkey (fixes #2662) 2026-02-15 14:12:37 +03:00
Alexander Koblov
2aea141aff FIX: Viewer - wrong selection when text contains a tab character and horizontal scroll is enabled 2026-02-14 16:06:13 +03:00
Alexander Koblov
f2eb7513c8 FIX: Zip - remove a partial archive on cancel (fixes #1260) 2026-02-14 15:13:03 +03:00
Alexander Koblov
506b6b0d74 FIX: Copy image data to the target when source and target are different objects 2026-02-14 13:16:21 +03:00
rich2014
d4b78d952e UPD: Avoid unnecessary conversions in uGraphics.BitmapConvert() 2026-02-12 10:55:55 +08:00
rich2014
0952d72006 FIX: the potential byte order incompatibility issue when viewed as Graphics (eg. transparent PNG) on macOS 2026-02-12 10:55:01 +08:00
Alexander Koblov
707dbe43b5
UPD: Snapshots workflow 2026-02-11 18:52:14 +03:00
Alexander Koblov
6b4b0c84e4 UPD: Snapshots workflow 2026-02-08 22:15:26 +03:00
Alexander Koblov
67b86b6195 UPD: Publish snapshots at GitHub 2026-02-08 20:12:09 +03:00
Alexander Koblov
65119380d7 UPD: Snapshots scripts 2026-02-07 16:18:29 +03:00
Alexander Koblov
32c34dc006 FIX: Crash on editing icon file name in the file associations (fixes #2731) 2026-02-07 15:19:29 +03:00
Alexander Koblov
285e7ba1f8 UPD: Refactoring, Lazarus 4.5 support 2026-02-07 13:51:51 +03:00
Alexander Koblov
284a5aab24 UPD: Prepare GTK3 support 2026-02-07 01:28:36 +03:00
Alexander Koblov
86b2d918bb FIX: Drag and drop format priority (fixes #2740) 2026-02-06 23:56:19 +03:00
rich2014
c39d3974be UPD: support Vert Align Center Rename in-place in FileView 2026-02-04 18:18:06 +08:00
Alexander Koblov
6c9a21c2c7 FIX: Open local help files with space in the path (Windows) 2026-01-31 12:42:57 +03:00
rich2014
186e70881f UPD: make icons clearer on Retina display 2026-01-30 21:53:42 +08:00
rich2014
c1f3a21978 UPD: show LCL Toolbar in Differ and Editor when gModernUI=False 2026-01-30 18:58:07 +08:00
rich2014
09b6398aaa ADD #2729: support disabling Modern Form on macOS 2026-01-29 22:18:55 +08:00
rich2014
e0c6adf681 UPD: lazy load Menu Item for GoBackward / GoForward on macOS 2026-01-29 12:20:44 +08:00
rich2014
758c204864 UPD: lazy load Menu Item for GoBackward / GoForward on macOS 2026-01-29 12:20:29 +08:00
rich2014
46ad6779c1 UPD: add prefix to the key of NSImage cache in TDarwinImageCacheManager on macOS 2026-01-28 12:06:51 +08:00
rich2014
fd02b5c048 UPD: auto update GoBackward/GoForward Tool Bar Menu after Dark/Light is Switched on macOS 2026-01-28 12:02:17 +08:00
rich2014
3952582346 UPD: move Theme monitoring into TDawinImageCacheManager on macOS 2026-01-28 12:02:00 +08:00
rich2014
61d51b21fa UPD: apply NSImage Cache and simplifythe related on macOS 2026-01-28 12:01:46 +08:00
rich2014
2596a2582d ADD: support NSImage cache in TDarwinImageCacheManager on macOS 2026-01-28 12:01:29 +08:00
rich2014
68304a6949 FIX: replace TFPDataHashTable to TFPObjectHashTable and fix memory leak in TDarwinImageCacheManager on macOS 2026-01-28 12:01:12 +08:00
rich2014
43315118f2 ADD: 'Show All' Menu Item for GoForward Menu on macOS (add missing code) 2026-01-28 07:38:59 +08:00
rich2014
61d2ecbc1f ADD: 'Show All' Menu Item for GoForward Menu on macOS 2026-01-28 00:06:40 +08:00
rich2014
e4c8873b33 ADD: 'Show All' Menu Item for GoBackward Menu on macOS 2026-01-27 23:17:45 +08:00
rich2014
f103ead98b FIX: missing 'override' signature for TWfxPluginFileSource.GetCustomIcon() 2026-01-27 17:34:14 +08:00
rich2014
02ecead8d5 FIX: the issue that clicking a file to rename on macOS 2026-01-27 11:46:28 +08:00
rich2014
65936a489e FIX: grid may be not updated when right clicking on macOS 2026-01-27 11:46:28 +08:00
Alexander Koblov
1697f71867 ADD: Warning header to long name alert message
UPD: Display long name alert message under Windows only (useless in other systems)
2026-01-26 20:48:10 +03:00
rich2014
80c74dd049 FIX: the issue that TFile.MacOSSpecific may be not loaded on macOS, introduced @c1cfc8493 2026-01-26 23:31:14 +08:00
rich2014
d925b50f38 ADD: add a limit to the number of menu items in GoForward/GoBackward Modern Form Toolbar on macOS 11+ 2026-01-26 22:38:44 +08:00
rich2014
c6bd4d10f2 ADD: support dark/light switch in DarwinImageCacheManager 2026-01-26 20:53:06 +08:00
rich2014
285b91bb7a ADD: support multi-thread in DarwinImageCacheManager 2026-01-26 20:52:49 +08:00
rich2014
3793d5a118 UPD: apply darwinImageCache in SearchResultFileSource 2026-01-26 18:52:00 +08:00
rich2014
37e7749fe8 UPD: split image cache for Ext and Fullpath as NameSpace on macOS 2026-01-26 18:51:47 +08:00
rich2014
8d784194e6 UPD: apply DarwinImageCacheManager in SmartFolderSearchResultFileSource 2026-01-26 18:51:26 +08:00
rich2014
3102018072 UPD: improve TDarwinImageCacheManager.copyIconForFileExt() 2026-01-26 18:51:12 +08:00
rich2014
d4ed1c0042 UPD: apply DarwinImageCacheManager for App Icon in iCloudDrive 2026-01-26 18:50:53 +08:00
rich2014
e462115f6a ADD: copyImageForNSImage() in DarwinImageCacheManager 2026-01-26 18:50:32 +08:00
rich2014
e3d501af4b UPD: apply DarwinImageCacheManager for Root in iCloudDrive 2026-01-26 18:50:15 +08:00
rich2014
748d20a584 UPD: apply DarwinImageCacheManager in uArchiveFileSource 2026-01-26 18:50:00 +08:00
rich2014
0e8632c63e ADD: a pure image cache on macOS 2026-01-26 18:49:43 +08:00
rich2014
97b8f1e4e6 UPD: Destroy the watcher at the appropriate time when needed in iCloudDrive 2026-01-26 01:13:47 +08:00
rich2014
6371bf2df8 UPD: don't Destory the watcher immediately after removePath to avoid the lag caused by frequent destruction and creation of watchers in iCloudDrive 2026-01-26 00:48:59 +08:00
Alexander Koblov
93a164ecca FIX: Don't create a modal form handle twice 2026-01-25 19:15:20 +03:00
Alexander Koblov
293a827834 FIX: Remove obsolete workaround (fixes #2726) 2026-01-25 16:55:09 +03:00
Alexander Koblov
44c05b6a65 FIX: Lazarus 4.99 compatibility 2026-01-25 12:15:48 +03:00
rich2014
8a36e69eba FIX: the issue of frmMain losing focus in extreme cases, it can now recover focus automatically 2026-01-25 17:06:03 +08:00
rich2014
c3d6a09ac6 FIX: file relocate issue in FileView (eg. iCloud Drive) 2026-01-25 08:32:15 +08:00
rich2014
ddb9a6c2b0 FIX: filename in Hint in FileView (eg. iCloud Drive) 2026-01-25 08:09:38 +08:00
Alexander Koblov
fcf07a7ebb FIX: Lazarus 4.99 compatibility 2026-01-25 00:50:51 +03:00
Alexander Koblov
039946e768 FIX: Lazarus 4.99 compatibility 2026-01-25 00:39:44 +03:00
rich2014
828829ff70 UPD: mission accomplished, Revert "UPD: logs for debugging on macOS" 2026-01-24 21:00:23 +08:00
rich2014
18a2b676cc FIX: eliminate unnecessary constant focusing Main Control on macOS 2026-01-24 20:56:18 +08:00
rich2014
87eae46ea8 UPD: update icloud download Icon 2026-01-24 20:47:31 +08:00
rich2014
f24e4fdaa8 FIX: the debug logs on macOS, issue #2725 2026-01-24 18:06:55 +08:00
rich2014
80a332c42f UPD: return the size set NSImage in TDarwinImageUtil.getBestWithSize() 2026-01-24 08:20:14 +08:00
rich2014
f7ca812c3c UPD: apply TDarwinImageUtil.getBestFromFileContentWithSize() in iCloudDrive 2026-01-24 08:13:27 +08:00
rich2014
58a09913c9 UPD: support autoDark in TSearchResultFileSource.GetCustomIcon() 2026-01-24 08:06:58 +08:00
rich2014
95a8e46db2 UPD: support autoDark in TDarwinImageUtil.getBestFromFileContentWithSize() 2026-01-24 08:01:01 +08:00
rich2014
b680e8aa77 FIX: compile error (#2724) 2026-01-24 07:33:58 +08:00
rich2014
ce8d4cfc15 UPD: simplify the code in TDarwinFileViewHistoryUtil 2026-01-23 23:56:49 +08:00
rich2014
60aedea303 UPD: eliminate redundant code in SmartFolderSearchResultFileSource 2026-01-23 23:56:00 +08:00
rich2014
ea58f2c931 ADD: GetDisplayFileName() in SearchResultFileSource and derived 2026-01-23 23:48:23 +08:00
rich2014
fd0d3f161d ADD: GetCustomIcon() supports combined tags in TFinderSearchResultFileSource() on macOS 2026-01-23 23:13:22 +08:00
rich2014
797c6f6553 ADD: GetCustomIcon() in SmartFolderSearchResultFileSource 2026-01-23 22:26:07 +08:00
rich2014
d56a7ed764 UPD: split TFinderSearchResultFileSource into TFinderTagSearchResultFileSource and TSmartFolderSearchResultFileSource 2026-01-23 22:01:24 +08:00
rich2014
e48c97b9e8 ADD: Color Icon by GetCustomIcon() in TFinderSearchResultFileSource() on macOS 2026-01-23 21:16:12 +08:00
rich2014
985fab5f00 UPD: refactor TDarwinFinderUtil.createMenuRoundImage() as public function 2026-01-23 21:01:01 +08:00
Richard Boß
e22b633ffa
FIX: Windows compile error (#2723)
* Add Graphics unit to usearchresultfilesource.pas

fix compilation error on Windows

* Add Graphics unit to uarchivefilesource.pas

fix compilation error on Windows

* Remove unused Graphics import on DARWIN

cleanup
2026-01-23 08:21:57 +08:00
rich2014
17c092540d FIX: gThumbSize should be used in zoomInSmallPreview() in ThumbFileView 2026-01-23 00:28:12 +08:00
rich2014
907d25467f FIX: git misoperation @ ab390e9 2026-01-23 00:13:54 +08:00
rich2014
ab390e93ce UPD: in thumbnail view, if the preview is too small, zoom in to gIconsSize to maintain a normal visual, especially on Retina Display 2026-01-22 23:37:06 +08:00
rich2014
b9573559b9 FIX: correct the matching of dtVirtual in FindMatchingDrive() 2026-01-22 20:07:00 +08:00
rich2014
a8c875ec27 UPD: the Icon Size in GoBackward/GoForward Menu conforms to gIconsInMenusSize 2026-01-22 00:21:00 +08:00
rich2014
ce6f58dbda ADD/FTP: support Icon for '/' in FsExtractCustomIconW() 2026-01-22 00:18:46 +08:00
Alexander Koblov
ec27554fad FIX: FTP - save connection with implicit FTPS (fixes #2717) 2026-01-21 18:39:12 +03:00
rich2014
8166903a49 FIX: the issue that focus switching multiple by removing unnecessary LCLCOCOA-specific code in FileView 2026-01-21 21:57:19 +08:00
rich2014
1e406c4e06 FIX: should not get Finder Tag for '..' 2026-01-21 21:23:30 +08:00
rich2014
98ef204fab FIX: Modern Form ToolBar Item Icon compatible with macOS 11 2026-01-21 21:11:35 +08:00
rich2014
f75fbdaecf ADD: GetCustomIcon() in SearchResultFileSource 2026-01-21 21:07:00 +08:00
rich2014
529c9a1fc7 UPD: improve GetCustomIcon() in iCloudDriveFileSource 2026-01-21 20:06:57 +08:00
rich2014
c63d8cd385 ADD: GetCustomIcon() in VfsFileSource 2026-01-21 20:06:42 +08:00
rich2014
a4b91314c4 ADD: menu for History(GoBackward/GoForward) Modern Form ToolBar Item on macOS 2026-01-21 20:06:31 +08:00
rich2014
d7d1828978 ADD: GetCustomIcon() in iCloudDriveFileSource 2026-01-21 20:06:16 +08:00
rich2014
67218a975d ADD: GetCustomIcon() in ArchiveFileSource 2026-01-21 20:05:55 +08:00
rich2014
ccfeba379b UPD: improve DarwinImage 2026-01-21 20:05:40 +08:00
rich2014
2c6b559f8b ADD: GetCustomIcon() in WfxPluginFileSource 2026-01-21 20:05:24 +08:00
rich2014
e464e57171 ADD: GetCustomIcon() in FileSource (overload, by path, return TBitmap) 2026-01-21 20:05:08 +08:00
rich2014
2aa0cc9212 ADD: support converting TBitmap to NSImage on macOS 2026-01-20 23:43:04 +08:00
rich2014
a980dc77a4 ADD/MacCloud: support Icon for '/' in FsExtractCustomIconW() 2026-01-20 23:14:51 +08:00
rich2014
71c2d63aa8 FIX/MacCloud: Trailing PathDelim in Remote Path Parser 2026-01-20 23:12:59 +08:00
rich2014
9f8c2c9dd7 UPD: refactor code from TPixMapManager to TDarwinImageUtil.getBitmapForExt() on macOS 2026-01-20 18:43:36 +08:00
rich2014
8d5395ab65 UPD: refactor TPixMapManager.GetMimeIcon() on macOS 2026-01-20 18:43:36 +08:00
rich2014
395cebd3bb UPD: in accordance with naming conventions, the caller of TDarwinImageUtil.getBestWithSize() is not responsible for releasing memory 2026-01-20 18:43:36 +08:00
rich2014
b1a181df1d UPD: refactor macOS-related image code from uPixMapManager to uDarwinImage 2026-01-20 18:43:36 +08:00
rich2014
da809f4be8 FIX: memory leaks in TPixMapManager.CheckAddFileUniqueIcon() on macOS 2026-01-20 18:43:36 +08:00
Alexander Koblov
ce0ef49b18 FIX: Lazarus 4.4 compatibility 2026-01-19 20:41:50 +03:00
rich2014
78a45e234c UPD: lclstrconsts.ru.po updated from lazarus/lcl/languages 2026-01-19 18:21:39 +08:00
rich2014
3da73c7785 UPD: improve FileDialog selection in "Open With - Other..." on macOS 2026-01-19 18:07:07 +08:00
rich2014
b753e8b668 UPD: improve FileDialog selection in Plugins Options 2026-01-19 17:28:03 +08:00
rich2014
550867896d UPD: a switch is shown for Users to choose between selecting either the File Package itself or the files within the File Package on macOS 2026-01-19 17:24:59 +08:00
rich2014
e206e475c2 UPD: File Packages can't be selected when select a real file on macOS 2026-01-19 17:18:18 +08:00
rich2014
36dcb932d0 UPD: File Packages and their internal directories can now be selected when choosing a directory on macOS 2026-01-19 16:53:42 +08:00
rich2014
5835c60a79 DEL: remove the global settings of "Shows File Packages Switch" for more precise control on macOS 2026-01-19 16:37:10 +08:00
rich2014
443c057ec9 ADD: "Shows File Packages Switch" in FileDialog to access contents in File Packages(eg. .app Bundles) on macOS 2026-01-19 00:28:27 +08:00
rich2014
41099979ed UPD: lclstrconsts.*.po updated from lazarus/lcl/languages 2026-01-18 23:45:50 +08:00
Alexander Koblov
88ca967887 ADD: Anti-sleep - Linux support 2026-01-18 00:25:07 +03:00
Alexander Koblov
54b1f61c60 ADD: Anti-sleep unit 2026-01-17 23:07:21 +03:00
Alexander Koblov
d2451b17e0 UPD: Korean language file (fixes #2710) 2026-01-17 19:19:03 +03:00
Alexander Koblov
ca9e169610 UPD: Russian language file 2026-01-17 19:15:49 +03:00
Alexander Koblov
a445ba431c FIX: Disable main menu shortcuts when Alt+Letter keys are used somewhere (issue #1327) 2026-01-17 18:41:42 +03:00
Alexander Koblov
7991af0a06 FIX: Disable main menu shortcuts when Alt+Letter keys are used somewhere (fixes #1327) 2026-01-17 18:34:14 +03:00
Alexander Koblov
0524bcd4e8 FIX: Zip - extract Unix symbolic links under Windows (fixes #2659) 2026-01-17 16:55:28 +03:00
Alexander Koblov
53a3a51976 ADD: CreateSymLinkUnix function 2026-01-17 16:32:34 +03:00
rich2014
e8ed94f129 UPD: update zh_TW 2026-01-15 11:35:46 +08:00
rich2014
b90e846b7c UPD: update zh_CN 2026-01-15 11:35:45 +08:00
rich2014
7e233b001a FIX: the title/hint of CopyRightToLeft/CopyLeftToRight in Differ Form 2026-01-15 11:35:45 +08:00
Alexander Koblov
694b14cf43 UPD: Enable Chinese online help 2026-01-14 18:59:42 +03:00
rich2014
624384091f FIX: some File Dialog Filter format error 2026-01-14 21:57:17 +08:00
Alexander Koblov
9c80e25bb4 FIX: SetFileTime parameters (fixes #2697) 2026-01-13 18:51:59 +03:00
Alexander Koblov
8fbde876e5 FIX: GetFileIndexFromCursor function result (fixes #2699) 2026-01-13 18:20:55 +03:00
rich2014
121e7ad777 UPD: Smart Folders are now opened in the original tab to avoid creating too many unnecessary tabs 2026-01-13 22:41:38 +08:00
rich2014
3ba2a35462 UPD: add 32x32 icons to ilEditorImages for Retina 2026-01-13 01:06:38 +08:00
rich2014
a502dc40de UPD: update Icon of Configuration Button in the ToolBar of Editor on macOS 11+ 2026-01-13 00:00:53 +08:00
rich2014
931f24fcdb UPD: the buttons can be auto enabled/disabled in Differ Form native ToolBar on macOS 2026-01-12 18:12:57 +08:00
Alexander Koblov
fcba5ce8ee UPD: SyncDirs - use separate file mask history (fixes #2696) 2026-01-11 21:32:11 +03:00
rich2014
1072d4d8b2 UPD: set gButtonBar default value to False on macOS
1. hide the LCL toolbar, main interface is more native
2. it only take affect when a new installation has no configuration file
3. users can enable it in the options at any time
2026-01-11 21:38:55 +08:00
rich2014
c98327bd5e UPD: update default ShortCuts in Viewer/Editor on macOS 2026-01-11 21:23:16 +08:00
rich2014
6a832f75f3 UPD: update Icon of Save Button in the ToolBar of Editor on macOS 11+ 2026-01-11 20:49:21 +08:00
rich2014
4730243941 UPD: hide the LCL Toolbar in EditorForm on macOS 11+ (because of the native Toolbar) 2026-01-11 20:45:57 +08:00
rich2014
2648c2bed2 ADD: base ShortCut for Edit in DifferForm 2026-01-11 17:49:26 +08:00
rich2014
91322b9506 ADD: Modern Form Toolbar for DifferForm on macOS 11+ 2026-01-11 15:37:29 +08:00
rich2014
4ec86ca2f1 UPD: divide Modern Form Config into three .inc files: Common / MainForm / EditorMain. 2026-01-10 23:46:21 +08:00
Alexander Koblov
8e147eeefc FIX: Compilation for non macOS 2026-01-10 15:53:31 +03:00
rich2014
c1cfc84933 UPD #2695: speeding up by macOS property lazy loading on macOS 2026-01-10 10:46:30 +08:00
rich2014
f56d2b3219 UPD: determine whether to display icons in the menu by gIconsInMenus in TfrmDiffer and TfrmEditor 2026-01-10 00:29:11 +08:00
rich2014
8c47d3cfc6 UPD: ShortCut name in Modern Form Toolbar Button on macOS 11+ 2026-01-10 00:03:51 +08:00
rich2014
937321ccd5 ADD: ShortCut tips for EditorForm Modern Form Toolbar on macOS11+ 2026-01-09 22:57:02 +08:00
rich2014
3229e8a7b1 ADD: i18n for EditorForm Modern Form Toolbar on macOS11+ 2026-01-09 22:44:09 +08:00
rich2014
15e1e82887 UPD: hide the LCL Toolbar in EditorForm on macOS 11+ (because of the native Toolbar) 2026-01-09 19:30:37 +08:00
rich2014
56b1f70baa ADD: Modern Form Toolbar for EditorForm on macOS 11+ 2026-01-09 19:14:07 +08:00
rich2014
dd22c4ff7c UPD: make all form titlebar more native and modern on macOS 11+ 2026-01-09 19:08:03 +08:00
rich2014
da0410a472 UPD: remove reference to CocoaTextEdits base on the new version of Lazaurs 2026-01-08 20:23:36 +08:00
rich2014
4acde0cbe7 UPD: better prompt in Map Network Drive dialog 2026-01-08 20:23:22 +08:00
Alexander Koblov
0575cff75e UPD: Dutch language file 2026-01-07 23:41:44 +03:00
rich2014
20c86c58bf FIX: StretchBitmap() related on retina display 2026-01-07 21:55:30 +08:00
rich2014
3d4dc7d6fc FIX: fix the issue of mismatching to “/” when using a non-FileSystem FileSource 2026-01-07 21:54:56 +08:00
rich2014
a2518d930f ADD: default hotkey ⌘+W for cm_CloseTab in Main on macOS 2026-01-07 21:54:26 +08:00
Alexander Koblov
3e09c8c56b FIX: Verify checksum - assign OnCreate event (fixes #1894) 2026-01-07 13:41:59 +03:00
Alexander Koblov
ee29c08428 ADD: Verify checksum - use log font, close by enter key (issue #1894) 2026-01-07 01:11:29 +03:00
rich2014
6d25dc8bcc UPD: in MultiRename, when the regular expression is correct, edFind is restored to clDefault (which is better than clWindow/clWindowText) 2026-01-06 23:02:32 +08:00
Alexander Koblov
c2b20fe970 UPD: Russian language file 2026-01-06 15:39:24 +03:00
Alexander Koblov
f7911094b3 UPD: Verify checksum - hide right margin 2026-01-06 13:24:59 +03:00
rich2014
e7c9b0579a UPD: move pasteImageToFile from uMainCommands to uClipboard 2026-01-06 00:16:35 +08:00
Alexander Koblov
3ebc9c7d7e ADD: FTP - custom icons 2026-01-05 17:42:10 +03:00
Alexander Koblov
3a6893dc51 FIX: Use normalized strings when compare file names with wildcard under macOS (fixes #2674) 2026-01-05 13:57:30 +03:00
rich2014
0bb904d006 UPD: the buttons can be enabled or disabled based on FileSource on macOS 2026-01-05 18:13:08 +08:00
rich2014
d0d51b6474 UPD: the Backward/Forward buttons can be enabled or disabled based on history 2026-01-05 18:13:07 +08:00
rich2014
c6e5bf89db UPD: update zh_TW 2026-01-05 18:13:07 +08:00
rich2014
87e20b5615 UPD: update zh_CN 2026-01-05 18:13:07 +08:00
rich2014
1a99e510c8 ADD: i18n for Backward/Forward Button 2026-01-05 18:13:07 +08:00
rich2014
8f5977e63b ADD: default hotkeys for cm_ViewHistoryPrev / cm_ViewHistoryNext in Main on macOS 2026-01-05 18:13:07 +08:00
rich2014
dd3d54ca31 ADD: add ShortCut String to tips for Backward/Forward button on macOS 2026-01-05 18:13:07 +08:00
rich2014
6208c4a832 ADD: Modern Form Style - Backward/Forward button for macOS 11+ 2026-01-05 18:13:06 +08:00
Alexander Koblov
9dad38408a UPD: FTP - language files 2026-01-04 14:25:20 +03:00
Alexander Koblov
a46139cea0 ADD: FTP - more strings translation 2026-01-04 14:25:20 +03:00
rich2014
a8c21bc879 ADD: support paste image from Clipboard to file directly (Command+V) on macOS 2026-01-04 18:44:15 +08:00
rich2014
6f46526451 UPD: Lazarus/StrToNSString() to (Native)Cocoa/StringToNSString() 2026-01-03 10:46:41 +08:00
rich2014
54d6fd516b UPD: improve error and exception logging on macOS 2026-01-03 10:35:52 +08:00
rich2014
cff28911e5 UPD: remove circle references between uDarwinFinderModel and uDarwinFile 2026-01-03 10:18:52 +08:00
rich2014
f6dcf0fd46 UPD: more file error log on macOS 2026-01-03 09:35:39 +08:00
rich2014
900342d648 UPD #2675: improve searching in subpath in iCloud Drive 2026-01-02 18:50:01 +08:00
rich2014
a971639d45 ADD #2675: better searching in iCloud Drive 2026-01-02 18:28:11 +08:00
rich2014
e8ec4ecb01 FIX #2675: the Start Path in Search Dialog in some FileSource (ie. TMountedFileSource) 2026-01-02 17:23:44 +08:00
rich2014
aff2d61421 UPD: refactor in uDarwinClipboard 2026-01-01 23:09:20 +08:00
rich2014
d6f468ddd4 UPD: remove circle references between uClipboard and uDarwinClipboard 2026-01-01 22:07:22 +08:00
rich2014
59a8e395ed UPD: refactoring macOS related from uClipboard to uDarwinClipboard 2026-01-01 21:30:25 +08:00
rich2014
5cac3685fd UPD: logs for debugging on macOS 2025-12-31 18:48:13 +08:00
rich2014
e69d6ee4c2 UPD: refactoring to eliminate duplicate doCellEnhancedDraw() in FileView 2025-12-31 18:48:08 +08:00
rich2014
5fd8496570 UPD: refactoring to eliminate duplicate calcTextHeight() in FileView 2025-12-31 18:45:02 +08:00
rich2014
cc00605fa5 UPD: refactoring to eliminate duplicate doFileSourceDrawCell() in FileView 2025-12-31 18:45:02 +08:00
rich2014
3fa8359330 UPD: refactoring to eliminate duplicate onDrawCell() in FileView 2025-12-31 18:45:01 +08:00
rich2014
1f48c04e20 FIX: the decoration issue by adding multiColumns to the Grid. 2025-12-31 18:45:01 +08:00
rich2014
5e32ec839b UPD: minor optimizations and cleanup on macOS 2025-12-31 18:45:01 +08:00
Alexander Koblov
8eafe61176 UPD: Korean language file (fixes #2664) 2025-12-31 13:11:05 +03:00
Alexander Koblov
66cfdbda08 UPD: Greek language file 2025-12-31 13:07:36 +03:00
rich2014
5cfe18488d UPD: refactoring to eliminate duplicate code in FileView 2025-12-30 21:38:34 +08:00
rich2014
cfb5e4862c UPD: abstract decoration related to ConvertToDecorationRect() 2025-12-30 21:38:17 +08:00
rich2014
f7628a0bdc UPD: refactoring common code to uFileViewBaseGrid 2025-12-30 21:37:47 +08:00
rich2014
d7ef000c3f UPD: refactor calcTextHeight in uThumbFileView 2025-12-30 21:37:24 +08:00
rich2014
ef11c19b3a ADD: in ThumbsFileView, support downloading by clicking the download icon in iCloud Drive 2025-12-30 21:37:06 +08:00
rich2014
07993f1073 UPD: display Finder Tags and other decorations in different areas depending on the FileView 2025-12-30 21:36:35 +08:00
rich2014
e89f669e14 ADD: initial support for displaying Finder tags and iCloud download icon in ThumbsFileView 2025-12-30 21:36:19 +08:00
rich2014
52a699fbd7 UPD: simplify OnDrawCell related base on TFileSourceUIParams 2025-12-29 20:02:24 +08:00
rich2014
9fac3ef5e8 UPD: simplify OnDrawCell related in FileView 2025-12-29 19:57:34 +08:00
rich2014
50f1403445 UPD: improve the adaptability of setting OnDrawCell related to FileView on macOS 2025-12-29 19:55:44 +08:00
rich2014
b22a7b989f UPD: more robust error log on macOS 2025-12-24 22:15:49 +08:00
Alexander Koblov
c32db48c03 FIX: EDateOutOfRange exception with negative Unix time (fixes #2666) 2025-12-22 18:46:26 +03:00
Alexander Koblov
190825e653 UPD: Release workflow 2025-12-21 13:00:14 +03:00
rich2014
e21165673b FIX: the issue in TFileView.calcFileHashKey() in flatview mode on macOS 2025-12-20 22:37:17 +08:00
rich2014
e4c57d8571 UPD: refactoring to eliminate duplicate code in TFileSystemWatcherImpl.handleFSEvent() 2025-12-20 22:15:48 +08:00
rich2014
f3254ee10b UPD: refactoring common watcher related from uiCloudDrive to uDarwinDC 2025-12-20 22:07:22 +08:00
rich2014
2f33d5a553 UPD: simplify theme mode determining based on the new Lazarus/Cocoa version 2025-12-19 23:56:32 +08:00
rich2014
c97c74fb02 UPD: simplify theme related based on the new Lazarus/Cocoa version 2025-12-18 21:28:40 +08:00
rich2014
a49dff7e67 FIX: via asynchronously closing tabs, fix potential issues that might arise from directly closing tabs during event handling 2025-12-12 23:30:04 +08:00
rich2014
ef6fdd2e70 UPD: remove some unused unit references 2025-12-11 21:34:10 +08:00
rich2014
7437b9b09f UPD: eliminate the dependency on fmain in uDarwinFileView 2025-12-11 21:33:11 +08:00
rich2014
9c54344b94 DEL: remove uAppleMagnifiedModeFix 2025-12-11 21:32:56 +08:00
rich2014
fbd2aa3bc8 UPD: unify darwin related naming 2025-12-11 21:30:01 +08:00
rich2014
32c962239f DEL: remove uMyDarwin 2025-12-11 18:12:56 +08:00
rich2014
4d0a1966cf UPD: refactoring serviceMenu from uMyDarwin to uDarwinApplication 2025-12-11 18:12:34 +08:00
rich2014
7f80cfcb70 UPD: refactoring onMainMenuCreate from uMyDarwin to uDarwinApplication 2025-12-11 18:12:11 +08:00
rich2014
693f887652 UPD: comments for TDarwinAarch64Statfs 2025-12-11 10:12:38 +08:00
rich2014
116e7cebe7 UPD: refactoring FileView from uMyDarwin to uDarwinFileView 2025-12-11 10:12:38 +08:00
Alexander Koblov
a9b86231be FIX: Paste real files from clipboard (fixes #2651) 2025-12-10 18:38:38 +03:00
Alexander Koblov
f88cdb4f0c FIX: Paste directory from clipboard (issue #2647) 2025-12-10 18:27:59 +03:00
rich2014
b75ac1e82f UPD: refactoring Panel from uMyDarwin to uDarwinPanel 2025-12-10 22:28:06 +08:00
rich2014
8c5274e6ff UPD: refactoring Statfs Fix from uMyDarwin to uDarwinIO 2025-12-10 21:44:42 +08:00
rich2014
ec2bf46f7f UPD: refactoring Application related from uMyDarwin to uDarwinApplication again 2025-12-10 21:20:52 +08:00
rich2014
30b6ae5006 UPD: refactoring File related from uMyDarwin to uDarwinFileUtil again 2025-12-10 20:28:12 +08:00
j2969719
039bc46b18
ADD: cm_SetSortMode command (#2642) 2025-12-10 08:29:36 +03:00
rich2014
83d2cfa181 UPD: refactoring File related from uMyDarwin to uDarwinFileUtil 2025-12-09 23:16:57 +08:00
rich2014
241b97596f UPD: rename Driver to Drive in i18n 2025-12-09 22:37:30 +08:00
rich2014
136b57b087 UPD: rename Driver to Drive 2025-12-09 22:14:57 +08:00
rich2014
7a76524516 UPD: refactoring uDarwinSimpleFSWatch from uMyDarwin 2025-12-09 19:40:10 +08:00
rich2014
90b43d186a UPD: ignore duplicate theme change notification on macOS 2025-12-09 18:52:55 +08:00
rich2014
1f383b0c61 ADD: support theme changed notify caused by Color Options Dialog on macOS 2025-12-09 18:51:23 +08:00
rich2014
2c903ca7c6 ADD: support dynamic update download icon based on the theme in iCloud Drive on macOS 2025-12-09 18:50:07 +08:00
rich2014
d30198ece1 UPD: support multi theme observer on macOS 2025-12-09 18:49:42 +08:00
j2969719
4abf44f32a
UPD: C SDK (#2634) 2025-12-09 09:17:58 +03:00
rich2014
37ac87a2d7 UPD: in Dark mode, improve the visibility of download icon in iCloud Drive on macOS 2025-12-08 22:53:53 +08:00
rich2014
babc01608c ADD: uDarwinImageUtil on macOS 2025-12-08 22:53:47 +08:00
rich2014
62bff9e3f8 UPD: refactor uDarwinFileUtil 2025-12-08 22:13:53 +08:00
rich2014
5e3f93306b UPD: refactoring uDarwinFileUtil from uMyDarwin 2025-12-08 22:13:16 +08:00
rich2014
ab2648bd75 UPD: refactor uDarwinApplication 2025-12-08 22:12:18 +08:00
rich2014
2f2c660fb5 UPD: refactoring uDarwinApplication from uMyDarwin 2025-12-08 22:11:26 +08:00
rich2014
bf7876dfb4 FIX: memory leak in ContextMenu/Services on macOS 2025-12-08 22:09:40 +08:00
rich2014
0ae14457a9 FIX: in the Font Options, an incorrect save prompt may appear if the initial font size is 0
it's because the initial value is 0 when calculating the fingerprint, and it has been set to the minimum value after initialization.
2025-12-07 11:12:10 +08:00
rich2014
c8e9765bb1 FIX: the issue of hashKey in TSearchResultFileSource (files in TSearchResultFileSource do not have a unified parent path) 2025-12-06 15:34:07 +08:00
rich2014
c791c0e801 UPD: update zh_TW 2025-12-06 15:19:47 +08:00
rich2014
c0b5cc3370 UPD: update zh_CN 2025-12-06 15:19:42 +08:00
rich2014
d33483ada3 UPD: add doSearchFiles() to eliminate duplicate code related to Finder Search on macOS 2025-12-06 10:34:58 +08:00
rich2014
8ddadf237f UPD: replace onSearchFinderTagComplete() with darwinSearchResultHandler 2025-12-06 10:08:06 +08:00
rich2014
db6a60377d UPD: refactor names related to Finder Search on macOS 2025-12-06 10:05:44 +08:00
rich2014
61e91c79bc ADD: support searchScopes for Smart Folder on macOS 2025-12-05 22:33:06 +08:00
rich2014
b4b0064ae6 ADD: Smart Folder to "gotoFolder" Menu on macOS 2025-12-05 22:17:56 +08:00
rich2014
2102e7b543 ADD: support opening Smart Folders on macOS 2025-12-05 21:57:43 +08:00
Alexander Koblov
8c370fd8ea FIX: Hang when read from a named pipe (fixes #2639) 2025-12-04 19:25:16 +03:00
rich2014
b10bd5609f FIX: the issue of arbitrary truncation in multibyte encoding in IsInPath(), the root cause of #2631 2025-12-03 18:19:11 +08:00
j2969719
c00716896c
ADD: cm_RenameTab param (#2633) 2025-12-03 10:40:18 +03:00
Alexander Koblov
228802bb5d FIX: Remove read-only temporary files (fixes #2632) 2025-12-02 18:16:32 +03:00
Alexander Koblov
2688fd8499 FIX: Double plugin initialization (issue #2616) 2025-12-02 18:14:43 +03:00
Alexander Koblov
ca615d4c84 FIX: Crash with empty file name (fixes #2631) 2025-12-01 21:39:19 +03:00
Alexander Koblov
f27b7f8526 FIX: Use normalized strings when compare file names under macOS (fixes #1981) 2025-12-01 18:59:57 +03:00
rich2014
aa4b99f3a1 UDP: Fine-tuning the color table for Finder Tags in Menu 2025-12-01 23:41:32 +08:00
rich2014
1d4dbdd445 UDP: Fine-tuning the color table for Finder Tags in Editor 2025-12-01 23:41:32 +08:00
rich2014
4d8e71ad11 UDP: don't display colorless Finder Tags in FileView, more consistency with Finder 2025-12-01 23:41:32 +08:00
rich2014
6b806a8026 UPD: add special decoration Finder Tag colors 2025-12-01 23:41:32 +08:00
Alexander Koblov
16e9b1d647 FIX: DCDateTimeUtils - arithmetic overflow (fixes #2627) 2025-12-01 17:59:26 +03:00
rich2014
cc02b71009 UPD: refactor finder tag color names 2025-12-01 00:27:52 +08:00
rich2014
29f146f1e3 UPD: remove dotFinderTagNSColors in uDarwinFinderModelUtil 2025-11-30 23:15:46 +08:00
rich2014
332700d57f UPD: apply menu color for FinderTag in Tag Editor, more consistent with Finder 2025-11-30 23:05:06 +08:00
rich2014
efbe003174 UPD: apply menu color for FinderTag in Search Menu on macOS 2025-11-30 23:00:48 +08:00
rich2014
124c8b7f02 UPD: apply menu color for FinderTag in Context Menu, more consistent with Finder 2025-11-30 22:37:36 +08:00
rich2014
b3866c95c8 ADD: add colors for FinderTag in Menus 2025-11-30 22:36:41 +08:00
rich2014
172c054ce7 UDP: remove unnecessary unit 2025-11-30 22:36:06 +08:00
Jozef Gaal
06fe73ec27
UPD: Slovak language (#2628) 2025-11-30 12:41:49 +03:00
Alexander Koblov
542cbb925a UPD: German language file 2025-11-29 12:43:01 +03:00
Alexander Koblov
79cc65f739 UPD: Argon2 default parameters 2025-11-27 18:04:50 +03:00
Alexander Koblov
15c0c27e79 ADD: Calculate key transformation at least one time 2025-11-25 21:14:47 +03:00
Alexander Koblov
50af183b70 UPD: Language files 2025-11-25 19:22:19 +03:00
Alexander Koblov
9a0044e532 UPD: Use 'main' password instead 'master' 2025-11-25 19:15:26 +03:00
dependabot[bot]
6d3060aaf2
UPD: Bump actions/checkout from 5 to 6 (#2625)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-25 18:29:48 +03:00
rich2014
57123c9be6 UPD: improve the postion of Sharing Service Picker Popover on macOS 13+ 2025-11-23 14:58:57 +08:00
rich2014
8c0b8c1497 UPD: restore to min 11.0 on macOS-Intel (caused by the github compilation environment, DC itself supports macOS 10.11) 2025-11-23 14:58:56 +08:00
Alexander Koblov
0b7aecc0de UPD: German language file 2025-11-22 16:41:54 +03:00
Alexander Koblov
2f6fb62ff1 UPD: Version number 2025-11-22 15:23:33 +03:00
Alexander Koblov
934bef9782 FIX: Copy into symbolic link to directory (fixes #2175) 2025-11-22 14:47:39 +03:00
Alexander Koblov
6ace980bb0 FIX: SingleByteEncoding function 2025-11-22 13:36:17 +03:00
Alexander Koblov
9f34950c19 UPD: Use Argon2 key derivation function 2025-11-22 13:26:29 +03:00
Alexander Koblov
011609f694 UPD: Argon2 self-test 2025-11-21 23:47:29 +03:00
Alexander Koblov
032168b178 FIX: Argon2 function 2025-11-21 23:15:35 +03:00
Alexander Koblov
e3629ca47a UPD: Language files 2025-11-21 20:34:28 +03:00
Alexander Koblov
da7412bc4d UPD: Project file 2025-11-21 20:14:25 +03:00
Alexander Koblov
60a46c8bed ADD: Master key input dialog localization 2025-11-21 20:13:15 +03:00
Alexander Koblov
5e5652faa4 UPD: Find files - enable case sensitive option with regular expression text search (fixes #2620) 2025-11-20 23:35:12 +03:00
Alexander Koblov
6e10b42d44 ADD: Master key input dialog 2025-11-19 19:05:07 +03:00
Alexander Koblov
9732afd824 UPD: Argon2 preparation 2025-11-19 18:50:45 +03:00
Alexander Koblov
2c83cfb5c4 UPD: Speed-up Argon2 function 2025-11-17 18:36:37 +03:00
rich2014
67e45056e7 UPD: apply lightweight Volumn Observer instead of Path Watcher for DriveWatch on macOS 2025-11-17 22:28:16 +08:00
rich2014
9a251c24de ADD: Volumn Observer what base on notificationCenter on macOS 2025-11-17 22:25:00 +08:00
rich2014
c89eaf833b UPD: restore to min 10.11 on macOS-Intel 2025-11-17 15:34:02 +08:00
rich2014
b9d9ec7cd4 UPD: update unique Icon of file after updated in TFileView.UpdateFile() on macOS 2025-11-17 15:15:47 +08:00
rich2014
ae0ec15558 UPD: update unique Icon of file in TPixMapManager.CheckAddFileUniqueIcon() on macOS 2025-11-17 15:15:47 +08:00
Alexander Koblov
1f1b6f3757 UPD: Use macOS 14 to build snapshots 2025-11-16 15:41:47 +03:00
Alexander Koblov
e4ba749929 ADD: Option to copy file backward without prompt (fixes #2611) 2025-11-15 13:53:12 +03:00
rich2014
961a7e2cf3 UPD: reusing defined types 2025-11-13 21:20:32 +08:00
rich2014
c42d1d171f ADD: add the retry mechanism for TDarwinIOVolumns.createVolumns() 2025-11-13 21:20:32 +08:00
flxkid
5e2980926e
ADD: Virtual file drag-and-drop and clipboard paste support (#2577)
* Add virtual file drag-and-drop and clipboard paste support

Adds support for virtual file operations using Windows CFSTR_FILEDESCRIPTOR and CFSTR_FILECONTENTS formats. Enables file transfers from sources like VMware Fusion Mac-to-Windows clipboard, Remote Desktop, and OneDrive placeholders.

Changes to uOleDragDrop.pas:

- Fix memory leaks: Add missing ReleaseStgMedium and GlobalUnlock calls

- Change GetDropFileGroupFilenames to class function for clipboard reuse

- Change SaveCfuContentToFile to class function for clipboard reuse

- Wrap operations in try-finally blocks for proper cleanup

Changes to uClipboard.pas:

- Add OLE clipboard support via OleGetClipboard and IDataObject

- Check for CFSTR_FILEDESCRIPTORW/CFSTR_FILEGROUPDESCRIPTOR formats

- Extract virtual files using drag-and-drop extraction logic

- Detect lazy materialization and delegate to Windows Shell paste

- Keep clipboard open for normal files to support lazy materialization

Tested with VMware Fusion running ARM-based Windows guests. May also work for other virtual file scenarios that were not available for testing.

All existing CF_HDROP operations continue to work unchanged.

---------

Co-authored-by: Alexander Koblov <alexx2000@mail.ru>
2025-11-13 09:02:40 +03:00
rich2014
feafbef9d7 FIX: leaks in TDarwinIOVolumns.createVolumns() 2025-11-12 23:16:01 +08:00
Alexander Koblov
d534491ef7
FIX: Build macOS aarch64 snapshot 2025-11-12 16:07:06 +03:00
Alexander Koblov
a37eb3c678 UPD: Snapshots workflow 2025-11-11 18:21:41 +03:00
Alexander Koblov
bb311c3553 UPD: Snapshots workflow 2025-11-11 18:17:48 +03:00
Alexander Koblov
3f588131d4 UPD: Sample plugin 2025-11-11 18:17:02 +03:00
rich2014
49576ac7ee FIX: TDarwinDriverWatcher.tryAddDrive() 2025-11-11 23:00:49 +08:00
rich2014
6233fbefd4 UPD: refactor darwinIO related 2025-11-10 16:40:19 +08:00
rich2014
5ce97db777 ADD: distinguishing between dtRemovable and dtRemovableUsb on macOS 2025-11-10 16:38:37 +08:00
rich2014
148ea14905 FIX: bug in CompareDrives() 2025-11-10 00:27:23 +08:00
rich2014
a22ef72883 FIX: the issue that the Image control might not refresh in QuickView
for example, when switching from viewing text to image, pnlImage is hidden, updating Image.picture and then making pnlImage visible, the Image might not refresh
2025-11-09 23:41:54 +08:00
rich2014
5b418b05bc UPD: local hard disks come before removable hard disk when sorting 2025-11-09 12:08:25 +08:00
rich2014
876d0d2333 UPD: distinguishing between local hard disks and removable disks 2025-11-09 12:05:42 +08:00
rich2014
1f86b7cd73 UPD: use the pointer instead of the Statfs record to avoid unnecessary copying in TDriveWatcher.GetDrivesList() 2025-11-09 12:03:28 +08:00
rich2014
663df1faa1 UPD: add comments for Darwin IO unit 2025-11-09 11:51:28 +08:00
rich2014
64eddc20ce DEL: GetVolumeName() and DiskArbitration on macOS 2025-11-08 23:14:08 +08:00
rich2014
417989d64b UPD: improve support for root '/' in TDriveWatcher.GetDrivesList() on macOS 2025-11-08 23:14:03 +08:00
rich2014
a02a84c5de ADD: enable IOKit for full support of APFS bootable system/data volume in TDriveWatcher.GetDrivesList() on macOS 2025-11-08 23:13:53 +08:00
rich2014
36ea15b9be ADD: IOKit for APFS bootable system/data Volumn on macOS 2025-11-08 23:13:04 +08:00
Alexander Koblov
a6c06d7866 FIX: Pixelated icons under Windows (issue #2584) 2025-11-04 19:25:45 +03:00
Alexander Koblov
396d7b541a UPD: Zip - Better suspicious symbolic links handling 2025-11-04 15:05:06 +03:00
Alexander Koblov
9370d9ec7c FIX: Wrong "From" path when copying from .b64 (issue #1639) 2025-11-03 14:18:22 +03:00
Alexander Koblov
c1e7ea2106 UPD: Use BLAKE3 under AArch64 2025-11-03 13:45:53 +03:00
Alexander Koblov
e315432918 UPD: Default plugins list version number 2025-11-03 13:42:25 +03:00
Alexander Koblov
93788497b9 FIX: GioFileSource - Copy files between different locations (fixes #2469) 2025-11-02 16:13:01 +03:00
Alexander Koblov
84088e1139 FIX: Compilation for non macOS (fixes #2581) 2025-11-02 15:00:28 +03:00
Faludi Zoltán
b36c755362
UPD: Hungarian language file (#2553) 2025-11-02 14:51:56 +03:00
Alexander Koblov
1f0fe20177 FIX: KAScrypt - TDCP_blockcipher128.IncCounter 2025-11-02 13:51:09 +03:00
Alexander Koblov
344b0b786b FIX: Zip - When reading archives replace relative paths by underlines 2025-11-02 13:46:22 +03:00
Alexander Koblov
520c66620e UPD: Zip - Do not extract symbolic links that point outside the target directory 2025-11-02 13:46:21 +03:00
Alexander Koblov
3316ac227f ADD: Lua - SysUtils.Execute function 2025-11-01 19:50:11 +03:00
Alexander Koblov
31b58a086c FIX: Compilation for non macOS (fixes #2581) 2025-11-01 19:26:38 +03:00
rich2014
ff6aed5311 UPD: support Retina in KASToolbar (use TImageList as the image source to support Retina) 2025-10-31 13:44:56 +08:00
rich2014
1420d10aca UPD: support Retina in Thumbnails Cache 2025-10-29 23:40:37 +08:00
rich2014
8d37f93ab5 UPD: support Retina in Thumbnails File View 2025-10-29 16:57:58 +08:00
rich2014
b9c57a912b UPD: refactor scale factor related 2025-10-29 15:54:39 +08:00
rich2014
251444ef38 UPD: remove IconSize from 24 to 32 in TPixMapManager.GetMimeIcon() on macOS 2025-10-29 12:05:29 +08:00
rich2014
ca3738ae73 UPD: refactor Retina related 2025-10-28 12:21:37 +08:00
rich2014
c78f665cd5 UPD: support Retina in Icon Options Dialog 2025-10-28 12:18:09 +08:00
rich2014
8cf46f7b0a UPD: support Retina in Drive List 2025-10-28 12:17:33 +08:00
rich2014
8bbb10317a UPD: support Retina in Drive Button in Disk Panel 2025-10-28 12:16:19 +08:00
rich2014
4a63633d36 UPD: support Retina in TPixMapManager.LoadThemeIcon() 2025-10-28 12:14:16 +08:00
rich2014
632c724605 FIX: zip plugins compile error on UNIX(and not Linux), issue #2571 2025-10-27 15:23:13 +08:00
Alexander Koblov
a8e1440aea ADD: Zip - more accurate time support (fixes #2555) 2025-10-25 21:38:27 +03:00
Alexander Koblov
863b4e92b9 ADD: DCDateTimeUtils - additional functions 2025-10-25 16:55:54 +03:00
Alexander Koblov
dfdaa9cdbd UPD: Korean language file (fixes #2564) 2025-10-25 14:53:10 +03:00
Alexander Koblov
4ff6ff14dd UPD: DCDateTimeUtils - better time zone support (Unix) 2025-10-25 14:44:57 +03:00
rich2014
5275b991f4 UPD: 'Mac OS X' to 'macOS' in About Dialog 2025-10-24 21:35:33 +08:00
rich2014
a3813e74e6 UPD: improve unmounting drivers 2025-10-23 20:58:37 +08:00
rich2014
f316514d6c UPD: add tag related error log on macOS 2025-10-22 22:39:29 +08:00
rich2014
b607af5a5a FIX: the AutoRefresh issue on APFS bootable volumes on external drives 2025-10-21 21:44:39 +08:00
rich2014
0c34a9cad0 UPD: new Icon for macOS, better than before on macOS 15, issue #2552 2025-10-20 17:23:01 +08:00
rich2014
0ba15fa523 UPD: make application icons best in both "FileView" and "Open With" 2025-10-19 23:24:00 +08:00
rich2014
76685248d1 UPD: dont't show Splash Form by default (in line with macOS usage) 2025-10-19 22:34:10 +08:00
rich2014
2c0ec09624 UPD: support gIconsInMenusSize in "Open With" Menu 2025-10-19 21:56:41 +08:00
rich2014
9200ae0a7c FIX: support app icons on macOS 26.1 #2519
NSBMPFileType to NSPNGFileType
2025-10-19 21:49:45 +08:00
rich2014
0d6c9f0027 UPD: revert Debug code, issue #2519 2025-10-18 23:38:06 +08:00
rich2014
46229c3af3 UPD: add log in TFileListBuilder.Execute() for Debug, issue #2519 2025-10-18 21:42:42 +08:00
rich2014
5ec21c44c6 UPD: add Exception Handle in TPixMapManager.CheckAddFileUniqueIcon() for Debug, issue #2519 2025-10-18 18:37:16 +08:00
rich2014
7bc7f6f687 UPD: add Exception Handle in TFileListBuilder.Execute() for Debug, issue #2519 2025-10-18 17:17:52 +08:00
rich2014
f96c26d465 UPD: new Icon for macOS, issue #2552 2025-10-18 17:07:47 +08:00
rich2014
6463dce0cd FIX: Finder Tag on macOS 14+
https://github.com/doublecmd/doublecmd/discussions/2506
2025-10-17 17:00:55 +08:00
Alexander Koblov
4b4b38eb97 FIX: Zip - synchronize central directory header with local file header (fixes #2542) 2025-10-13 21:58:14 +03:00
rich2014
13cf4d30f0 FIX: on macOS, fix the issue that the icons in the context "Open With" menu were not clear on Retina screens by new LCL/Cocoa #2519 2025-10-12 21:28:25 +08:00
rich2014
186be92aa7 ADD: support app icons on macOS 26 #2519 2025-10-11 19:30:37 +08:00
Alexander Koblov
bc9d0074d2 ADD: SevenZip - install plugin under Linux (experimental) 2025-10-11 13:39:55 +03:00
rich2014
22a8fdb239 ADD: support Finder Tag on macOS 15.6+
https://github.com/doublecmd/doublecmd/discussions/2506
2025-10-10 22:00:56 +08:00
Alexander Koblov
ae1fbea502 UPD: German language file 2025-10-07 21:31:48 +03:00
Alexander Koblov
df0bf0f830 FIX: Dark mode - draw toolbar separators 2025-10-07 21:25:31 +03:00
Alexander Koblov
7009356f41 UPD: Language files 2025-10-07 20:42:05 +03:00
Alexander Koblov
1a30861c1a UPD: Project file (I18N options) 2025-10-07 20:36:31 +03:00
Yuri Lychakov
13b9fbf425
UPD: Modified LGPL for uwin32widgetsetdark.pas (#2533)
The copyright holder has generously approved the addition of a static linking exception to the license (as in the LCL).
2025-10-07 20:29:47 +03:00
Alexander Koblov
9eb3025704 ADD: SHA3 use AVX2 2025-10-05 14:31:37 +03:00
Alexander Koblov
f28d472fcd UPD: Language files 2025-10-04 17:21:18 +03:00
Alexander Koblov
70b656b88d ADD: Option to display free space label at the drive bar (issue #2498) 2025-10-04 16:46:34 +03:00
Alexander Koblov
99f6e06c78 ADD: TKASLabelItem class 2025-10-04 16:15:43 +03:00
Alexander Koblov
24c8539069 UPD: Optimize verify checksum operation 2025-10-04 15:21:11 +03:00
Alexander Koblov
44f38d82ac ADD: Multi-rename - replace also in file extensions option 2025-10-04 14:17:18 +03:00
Alexander Koblov
0f9f752cc5 FIX: Don't use flock function, it does not work correct with network file systems (issue #2018) 2025-10-03 01:12:47 +03:00
Alexander Koblov
8c705a5c17 UPD: Disable fcopyfile function 2025-10-03 01:12:47 +03:00
Alexander Koblov
80fcc0e63f FIX: Saving universal-highlighter colors settings (fixes #2514) 2025-10-01 20:37:26 +03:00
Alexander Koblov
5cb3b065a2 ADD: TKASToolLabel control 2025-10-01 20:37:26 +03:00
Alexander Koblov
df447bf704 UPD: Use fcopyfile function under macOS (issues #2018, #2526) 2025-09-30 21:02:53 +03:00
Alexander Koblov
78467ea00d UPD: KAScrypt - refactoring 2025-09-27 19:55:03 +03:00
Alexander Koblov
85f15abb5a FIX: FTP - execute SIZE command in the binary mode (fixes #2510) 2025-09-21 18:36:26 +03:00
Alexander Koblov
69b61db9ac FIX: FTP - remove warnings, refactoring 2025-09-21 18:36:25 +03:00
rich2014
b9d921e555 UPD: move TDarwinFileUtil from uDarwinFileUtil to DCDarwin 2025-09-21 21:57:09 +08:00
rich2014
47c57a80a5 ADD #2500: support copying extended attributes 2025-09-21 21:45:15 +08:00
Alexander Koblov
09d1d9edb9 UPD: Default plugins 2025-09-21 00:10:17 +03:00
Alexander Koblov
21a7e06543 ADD: Zip - extract from brotli compressed files (.br) 2025-09-20 22:12:38 +03:00
Alexander Koblov
55481eda5b ADD: DCClasses unit 2025-09-20 22:11:40 +03:00
Alexander Koblov
3ad188b21f ADD: Zip - Brotli decompression support 2025-09-20 17:07:25 +03:00
Alexander Koblov
87fb9821e4 ADD: SHA512 use AVX2 2025-09-19 21:06:39 +03:00
Alexander Koblov
2390474e16 UPD: Refactoring, clean up 2025-09-19 20:59:05 +03:00
Alexander Koblov
47c5b6efd9 ADD: SHA256 use ARM64CE 2025-09-17 21:09:27 +03:00
Alexander Koblov
84c311a648 FIX: Zip - progress calculation 2025-09-15 20:21:23 +03:00
Alexander Koblov
77c3f9f94b FIX: Don't normalize path delimiters for terminal commands 2025-09-14 13:27:47 +03:00
Alexander Koblov
e192d3b8bd FIX: Use _SC_NPROCESSORS_CONF constant 2025-09-14 01:46:08 +03:00
Alexander Koblov
62843e9999 ADD: Zip - don't show file size for files which don't have a size (issue #2497) 2025-09-14 00:29:30 +03:00
Alexander Koblov
9bb0036c76 ADD: BLAKE3 use NEON 2025-09-13 17:26:29 +03:00
Alexander Koblov
fe40648730 UPD: Language files 2025-09-07 19:15:25 +03:00
Alexander Koblov
10fdf45d15 UPD: Use BLAKE3 under x86_64 2025-09-07 19:10:39 +03:00
Alexander Koblov
a6a23740d8 UPD: Greek language file 2025-09-06 17:08:03 +03:00
Alexander Koblov
9136d3b0e5 UPD: Calculate checksum dialog 2025-09-06 16:03:21 +03:00
Mihaly Nyilas
f7d43f7196
UPD: Hungarian language file, with some fixes (#2487) 2025-09-06 16:02:39 +03:00
Alexander Koblov
66d9f04d01 FIX: Viewer - crash with zero size virtual file (issue #2373) 2025-09-04 20:47:38 +03:00
dependabot[bot]
77e8eb5b0f
UPD: Bump actions/checkout from 4 to 5 (#2459)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-18 08:32:02 +03:00
rich2014
bbc9f423c7 UPD: set home for initial path on macOS (since the executable is in the APP bundle) 2025-08-10 12:44:38 +08:00
rich2014
dbbe18c493 UPD: GetHomeDir() on macOS 2025-08-10 12:31:23 +08:00
Alexander Koblov
b5d031ea5d FIX: Copy version information with line-ending at the end 2025-08-09 18:13:46 +03:00
Alexander Koblov
9b108c114b FIX: Lazarus 4.99 compatibility 2025-08-07 20:24:35 +03:00
Alexander Koblov
a60dc187b9 UPD: Extension API version 2025-08-03 18:28:33 +03:00
Alexander Koblov
0ff4de4985 UPD: Use CeUtf16ToUtf8 function (issue #2374) 2025-08-03 15:13:29 +03:00
Alexander Koblov
c55234ff76 UPD: Refactoring version information 2025-08-03 14:59:53 +03:00
Alexander Koblov
e459a57623 FIX: Clear search template description after deleting all templates (fixes #2437) 2025-08-03 13:43:08 +03:00
Alexander Koblov
5ab603bcfe FIX: Scroll line by line with cursor movement 2025-08-02 22:32:49 +03:00
Alexander Koblov
2cefe63169 FIX: GioGetMimeType function with zero size file 2025-08-02 01:34:09 +03:00
Alexander Koblov
25aa9b6549 UPD: Use Wayland under Qt6 >= 6.9.1 2025-08-02 01:34:09 +03:00
Alexander Koblov
44b35f2e19 ADD: Flush doublecmd.xml to the disk 2025-07-31 18:53:16 +03:00
Alexander Koblov
d1623e070d FIX: Crash on start with corrupted doublecmd.xml (issue #2430) 2025-07-31 18:43:55 +03:00
rich2014
dbc4d890b7 ADD: apply gZoomWithCtrlWheel elsewhere 2025-07-21 23:12:10 +08:00
Alexander Koblov
a935e89722 FIX: Viewer - Image rotate 2025-07-20 01:35:56 +03:00
Alexander Koblov
5a23bd3f6e UPD: Viewer - speed up the first rotate (based on Exif metadata) 2025-07-19 14:06:54 +03:00
Alexander Koblov
fcab889b63 FIX: Warnings 2025-07-19 13:46:17 +03:00
Alexander Koblov
4ea0ad56e6 FIX: Viewer - incorrect image scaling (issue #2412) 2025-07-19 13:44:23 +03:00
VenusGirl❤
99736408af
UPD: Korean language file doublecmd.ko.po (#2415) 2025-07-17 21:02:03 +03:00
rich2014
a9b269838a FIX: the issue with horizontal scrolling in File Panel, issue #2409 2025-07-17 18:37:35 +08:00
rich2014
1803271df8 ADD: default hotkeys for cm_ShowSysFiles / cm_Options / cm_Open / cm_ChangeDirToParent on macOS 2025-07-17 18:36:07 +08:00
rich2014
c92e859470 UPD: languages for 'Zoom' in Editor 2025-07-16 21:51:40 +08:00
rich2014
c601d25df2 ADD: default hotkeys for cm_ZoomIn / cm_ZoomOut in Editor 2025-07-16 21:50:45 +08:00
rich2014
614ca55830 ADD: apply gZoomWithCtrlWheel in Editor 2025-07-16 21:50:29 +08:00
rich2014
f308690452 ADD: actZoomIn / actZoomOut in Editor 2025-07-16 21:50:08 +08:00
rich2014
0244357e5b ADD: cm_ZoomIn / cm_ZoomOut in Editor 2025-07-16 21:49:35 +08:00
Skif-off
6b7b2e6e43
UPD: Russian language file (#2405) 2025-07-16 09:21:02 +03:00
rich2014
b1b0d4e17e UPD: remove unused TfrmViewer.pnlTextMouseWheelUp()
pnlTextMouseWheelUp() should be a legacy issue and will not be called. also, there is only pnlTextMouseWheelUp() but no pnlTextMouseWheelDown().
2025-07-15 23:12:34 +08:00
rich2014
0ab9538c99 ADD: apply Zoom Functions in Viewer 2025-07-15 23:12:34 +08:00
rich2014
560720d95f ADD: unified Zoom Functions in Viewer 2025-07-15 23:12:34 +08:00
rich2014
8f4d30daf4 ADD: default hotkeys for cm_ZoomIn / cm_ZoomOut in Viewer 2025-07-15 23:12:34 +08:00
rich2014
f65507b9ae FIX: possible crash when selecting the Viewer category in the Hotkeys Option dialog 2025-07-15 23:12:34 +08:00
Alexander Koblov
654eae2e0c FIX: Set focus on the right mouse button click (fixes #2395) 2025-07-14 20:25:59 +03:00
rich2014
e5c6b6112a UPD: languages for 'Zoom' 2025-07-15 00:10:43 +08:00
rich2014
7d2f308d2f UPD: update zh_TW 2025-07-15 00:10:25 +08:00
rich2014
262ee2c518 UPD: update zh_CN 2025-07-15 00:10:08 +08:00
rich2014
99e099e3d9 ADD: apply gZoomWithCtrlWheel to FileView 2025-07-15 00:09:53 +08:00
rich2014
0bcdb51956 ADD: gZoomWithCtrlWheel and Option for Zoom With Scroll Wheel 2025-07-15 00:09:37 +08:00
Alexander Koblov
fa8d20dd4b FIX: Possible crash on form close 2025-07-13 13:53:51 +03:00
rich2014
0a277a0ec3 UPD: remove duplicate code related to cmMainFontZoomIn / MainFontZoomOut 2025-07-12 21:52:49 +08:00
rich2014
85c202f0c8 UPD: i18n for cm_MainFontZoomIn / cm_MainFontZoomOut 2025-07-12 18:32:11 +08:00
rich2014
6013171566 ADD: icons for cm_MainFontZoomIn / cm_MainFontZoomOut 2025-07-12 16:56:00 +08:00
rich2014
c87f41c8cb ADD: default ShortCuts for cm_MainFontZoomIn / cm_MainFontZoomOut 2025-07-12 16:55:22 +08:00
rich2014
613627e391 ADD: cm_MainFontZoomIn / cm_MainFontZoomOut 2025-07-12 16:54:42 +08:00
Mihaly Nyilas
13d57aab25
UPD: Hungarian language file (#2383) 2025-07-08 00:34:52 +03:00
Alexander Koblov
671c12a090 UPD: German language file 2025-07-08 00:13:53 +03:00
Alexander Koblov
ceb271de20 UPD: Use GifView component instead GifAnim (fixes #814) 2025-07-08 00:08:22 +03:00
rich2014
0286f2e71f FIX: 3 language files for typo "iCloud Drive" 2025-07-05 09:08:44 +08:00
rich2014
2d71b3d9ae UPD: update zh_TW 2025-07-05 09:04:09 +08:00
rich2014
fa6d5b8a95 UPD: update zh_CN 2025-07-05 09:03:59 +08:00
rich2014
834b5b4f0d UPD: update zh_CN 2025-07-05 08:53:32 +08:00
rich2014
01778e34b3 FIX: typo "iCloud Drive" 2025-07-04 21:28:06 +08:00
rich2014
132b74341e UPD: expand the applicable scope of TDarwinFileUtil.cloneFile(), macOS < 10.13 / APFS / File Size 2025-07-02 18:20:28 +08:00
rich2014
e2f09416b2 ADD: apply TDarwinFileUtil.cloneFile() in TFileSystemOperationHelper.CopyFile() on macOS
1. dramatically improve file copy speed on APFS
2. supports copying macOS specific attributes
2025-07-01 18:24:19 +08:00
rich2014
14dc146845 ADD: add system native copyfile() to support clone file on macOS 2025-07-01 18:21:31 +08:00
rich2014
c625ff7b31 UPD: improve Icons for Special Folders on macOS 2025-06-30 22:40:46 +08:00
rich2014
45dc9d6c40 ADD: improve Icons for the files in Special Folders on macOS 2025-06-29 22:23:44 +08:00
rich2014
ed9e9882fe UPD: improve Icons for the Folders with special ext on macOS 2025-06-29 18:52:04 +08:00
rich2014
a601c76280 ADD: show Icon for Executable file without ext on macOS 2025-06-29 18:51:59 +08:00
Alexander Koblov
d70586be97 UPD: German language file 2025-06-29 00:50:48 +03:00
Alexander Koblov
89f42755c7 UPD: libunrar build script 2025-06-28 16:28:21 +03:00
Alexander Koblov
ab25a1ccd3 ADD: libunrar build script 2025-06-28 14:45:55 +03:00
Alexander Koblov
bf062ab594 ADD: FTP - CLNT command support 2025-06-27 22:54:38 +03:00
rich2014
0f4ca8230c UPD: Improv drive watch on macOS
1. on slow networks or devices, fstab is not updated immediately after /Volumes changes
2. after detecting a drive change, the fixed wait time of 1 second is changed to multiple wait times in sequence
2025-06-27 21:32:58 +08:00
rich2014
9df79dc94a FIX: udarwinfswatch: the issue that when monitoring the root directory, changes in the second-level directory were also matched 2025-06-27 21:27:09 +08:00
rich2014
b27864fe36 UPD: MacCloud/Options: the width of the Connection List changes with the Splitter 2025-06-27 21:21:03 +08:00
rich2014
91f98d59f0 FIX: MacCloud: the issue that when revoke token, it may need to get token first 2025-06-27 21:11:45 +08:00
rich2014
91d1d605c3 FIX: MacCloud: the issue in OAuth2 RefreshToken() 2025-06-26 22:11:43 +08:00
Alexander Koblov
9010859c6f UPD: German language file 2025-06-25 21:18:26 +03:00
Alexander Koblov
8a316d20d5 FIX: Everything - stop search 2025-06-25 21:16:52 +03:00
Alexander Koblov
a5ead39c74 FIX: FsExtractCustomIcon with directory 2025-06-25 21:16:52 +03:00
rich2014
1836be8ebf UPD: MacCLoud: hide 0 size for Connections in the File Panel 2025-06-24 20:47:08 +08:00
rich2014
79ba3f946e ADD: MacCloud/Icon: support FsExtractCustomIconW() 2025-06-23 19:15:00 +08:00
rich2014
42588e4d1a ADD: MacCloud/Icon: support FsExtractCustomIconW() 2025-06-23 19:14:25 +08:00
Alexander Koblov
242c3808b6 FIX: Wrong default icon when FsExtractCustomIcon returns FS_ICON_USEDEFAULT 2025-06-22 22:14:28 +03:00
Alexander Koblov
eeb249c216 FIX: Build under macOS 2025-06-22 21:56:33 +03:00
Alexander Koblov
9e690e36ee UPD: Sample.wfx plugin 2025-06-22 20:18:10 +03:00
Alexander Koblov
a824defefe ADD: FsExtractCustomIcon function support 2025-06-22 20:11:11 +03:00
rich2014
4e993732ef UPD: load app bundle icon by Cocoa Api on macOS 2025-06-18 22:47:09 +08:00
rich2014
75e59c056f UPD: show system native Icon for zip file on macOS 2025-06-18 21:45:24 +08:00
rich2014
d184c1af5a ADD #2342: support Custom File Icon on macOS 2025-06-17 22:20:09 +08:00
rich2014
c28ce65eef ADD: getMacOSFileUniqueIcon() on macOS 2025-06-17 22:15:52 +08:00
Alexander Koblov
2bdc88ee2b FIX: File creation time is changed to now when file is moved (fixes #2020) 2025-06-15 13:41:18 +03:00
Alexander Koblov
a6f85c0c0b FIX: Diacritics list 2025-06-15 13:32:18 +03:00
Alexander Koblov
14698a233e FIX: ListLoad - pass directory name with trailing slash (fixes #2041) 2025-06-14 18:53:35 +03:00
Alexander Koblov
558a802ad6 UPD: Optimize Windows mask matching 2025-06-13 16:48:43 +03:00
Skif-off
4e330b2f0c
UPD: Russian language file (#2365) 2025-06-13 12:29:20 +03:00
Alexander Koblov
d65eae6bf0 UPD: Language files 2025-06-13 01:21:28 +03:00
Alexander Koblov
6d34bc2488 ADD: Quick Search - ignore diacritics and ligatures option 2025-06-13 01:19:47 +03:00
Alexander Koblov
7ed5986ea4 UPD: Language files 2025-06-13 01:02:31 +03:00
Alexander Koblov
f31c0b329f FIX: TMask - update template 2025-06-13 00:58:22 +03:00
Alexander Koblov
ba08ab16cd FIX: NormalizeAccentedChar function 2025-06-13 00:55:33 +03:00
Alexander Koblov
4aee2b6d28 ADD: Quick Search - capability to ignore diacritics and ligatures 2025-06-13 00:51:59 +03:00
Alexander Koblov
9b94cfa173 UPD: Diacritics list 2025-06-12 22:13:55 +03:00
Alexander Koblov
c7c71055d6 UPD: Language files 2025-06-12 21:39:47 +03:00
Alexander Koblov
b240bbd2fc UPD: German language file 2025-06-12 21:39:47 +03:00
Alexander Koblov
31d84586e4 UPD: Differ - message box buttons captions 2025-06-12 21:39:47 +03:00
Alexander Koblov
36104f797a FIX: Inplace renaming when clicking twice on a name does not work in the Brief View (fixes #2185) 2025-06-12 15:13:00 +03:00
Alexander Koblov
8769a5a248 FIX: Number pad 0 is recognized as a symbol when used as a hotkey (fixes #2277) 2025-06-08 01:58:08 +03:00
Alexander Koblov
86fba75d0c ADD: Differ - collapse a home directory in the message box (issue #2345) 2025-06-07 16:17:26 +03:00
Alexander Koblov
dd23c55109 UPD: Release workflow 2025-06-07 16:05:48 +03:00
Alexander Koblov
3c9894fca3 FIX: Range check error (fixes #2338) 2025-06-04 20:02:54 +03:00
rich2014
2baeda7ec9 UPD: potential memory out-of-bounds detection in Plugin Extension 2025-06-02 18:48:27 +08:00
rich2014
abc64806bb UPD: MacCloud: replace deprecated Cocoa API selectRow_byExtendingSelection 2025-06-02 18:48:27 +08:00
Alexander Koblov
f6ff7d1337 FIX: Rename - select to filename fails in some circumstances (issue #2332) 2025-06-02 00:12:33 +03:00
VenusGirl❤
0312823fc4
UPD: Korean language file (#2331) 2025-06-01 18:49:31 +03:00
Alexander Koblov
4154968832 FIX: Invalid checkboxes state (fixes #2330) 2025-06-01 17:49:35 +03:00
Alexander Koblov
11b5e330f5 UPD: Language files 2025-06-01 15:36:42 +03:00
Alexander Koblov
548a665a91 FIX: Invalid menu shortcuts (issue #2321) 2025-06-01 15:34:09 +03:00
Alexander Koblov
4800956d1f ADD: Show error message when user tries to change a target location (issue #2327) 2025-06-01 15:20:05 +03:00
Alexander Koblov
fe99ab9321 FIX: Differ - wrong toolbar buttons sequence 2025-06-01 13:31:34 +03:00
Alexander Koblov
8c7dea1c64 FIX: File types colors dialog gets cropped when resizing window (fixes #2328) 2025-06-01 12:36:47 +03:00
Alexander Koblov
1af6bd6f7d FIX: Windows XP compatibility 2025-06-01 01:04:14 +03:00
Alexander Koblov
caa29d7c64 UPD: RegExpr library 2025-05-31 20:26:31 +03:00
Alexander Koblov
e96a6460b4 FIX: Viewer - crash with an invalid regular expression 2025-05-31 17:41:22 +03:00
Alexander Koblov
f63a5a93c5 FIX: Find files - crash with an invalid regular expression (issue #2249) 2025-05-31 17:33:58 +03:00
Alexander Koblov
983ba7624c FIX: mbFileAge function 2025-05-31 13:01:23 +03:00
Alexander Koblov
e1415be85c UPD: Optimize .svg files size 2025-05-31 12:53:33 +03:00
Alexander Koblov
986415c38b ADD: Update icon-theme.cache time 2025-05-31 02:19:32 +03:00
Alexander Koblov
dd657ed8a1 FIX: Viewer - random crash with enabled caret under Qt (issue #2265) 2025-05-31 01:17:04 +03:00
Alexander Koblov
be4128e1df ADD: Update icon-theme.cache time 2025-05-29 00:42:46 +03:00
Alexander Koblov
ad0672ff54 ADD: Update icon-theme.cache time 2025-05-28 22:39:03 +03:00
Alexander Koblov
ff6124bb62 ADD: DCTheme icon theme cache file 2025-05-28 21:55:09 +03:00
Alexander Koblov
7a86a84846 UPD: Use optimized .svg icons instead .svgz (follow the icon theme specification) 2025-05-28 21:41:39 +03:00
Alexander Koblov
e7f9679e06 FIX: Viewer - enable save action only in the image view mode (fixes #2323) 2025-05-28 21:31:50 +03:00
Alexander Koblov
90222158e1 FIX: Cannot focus a disabled or invisible window 2025-05-26 23:45:33 +03:00
Alexander Koblov
5fc4cb2e0c FIX: TransferLeft and Right commands do not work with folder symbolic links (fixes #2308) 2025-05-25 13:11:45 +03:00
Alexander Koblov
52fed0fea1 FIX: Use Xwayland with Qt6 version (issue #2290) 2025-05-24 12:15:34 +03:00
Alexander Koblov
53f2fb6bc5 FIX: _SC_NPROCESSORS_ONLN constant value (Linux) 2025-05-23 20:02:09 +03:00
Alexander Koblov
569a0d1181 FIX: ELayoutException: TControl.InvalidatePreferredSize loop detected (fixes #2169) 2025-05-23 17:57:34 +03:00
rich2014
7d4a31c5a2 ADD: MacCloud/S3: step-154: improve list buckets 2025-05-22 18:54:43 +08:00
rich2014
0acfc8b593 ADD: MacCloud/Options: step-153: more clear notes 2025-05-22 18:54:27 +08:00
rich2014
9c49da4e58 ADD: MacCloud/Options: step-152: notes configurable 2025-05-22 18:54:14 +08:00
rich2014
6c27f206fd ADD: MacCloud/BackBlazeB2: step-151: MainIcon 2025-05-22 18:53:59 +08:00
rich2014
952f41a93e ADD: MacCloud/BackBlazeB2: step-150: regions.json 2025-05-22 18:53:46 +08:00
rich2014
eb628cd8f4 ADD: MacCloud/S3: step-149: BackBlaze B2 2025-05-22 18:53:33 +08:00
rich2014
5aa91266c3 UPD: MacCloud/Options: step-148: remove spaces from user input 2025-05-21 21:05:04 +08:00
rich2014
e63af3136e ADD: MacCloud/Upyun: step-147: MainIcon 2025-05-21 21:04:49 +08:00
rich2014
866f2dea27 ADD: MacCloud/Upyun: step-146: i18n 2025-05-21 21:04:36 +08:00
rich2014
07f3afffbd ADD: MacCloud/S3: step-145: Upyun USS 2025-05-21 21:04:20 +08:00
rich2014
fdfab7d552 ADD: MacCloud/QiniuKODO: step-144: regions.json 2025-05-21 21:04:05 +08:00
rich2014
5773d1e154 ADD: MacCloud/QiniuKODO: step-143: MainIcon 2025-05-21 21:03:48 +08:00
rich2014
b4e572d064 ADD: MacCloud/QiniuKODO: step-142: i18n 2025-05-21 21:03:35 +08:00
rich2014
4e617c8837 ADD: MacCloud/S3: step-141: Qiniu KODO 2025-05-21 21:03:29 +08:00
rich2014
2fd63c6e40 UPD: MacCloud/Options: Improve keyboard accessibility 2025-05-20 18:34:35 +08:00
rich2014
193340675c ADD: MacCloud/HuaweiOBS: step-140: i18n for regions.json 2025-05-20 18:34:13 +08:00
rich2014
6e5cf95b48 ADD: MacCloud/TencentCOS: step-139: i18n for regions.json 2025-05-20 18:33:59 +08:00
rich2014
63e90f669f ADD: MacCloud/AmazonS3: step-138: i18n for regions.json 2025-05-20 18:33:35 +08:00
rich2014
2507356c85 ADD: MacCloud/AliyunOSS: step-137: i18n for regions.json 2025-05-19 21:44:22 +08:00
rich2014
57a1857c2e ADD: MacCloud/i18n: step-136: i18n for regions.json 2025-05-19 21:44:18 +08:00
rich2014
cb0681810d ADD: Plugin Extension LanguageID for i18n 2025-05-19 21:44:14 +08:00
rich2014
b4f6bc0c4f UPD: MacCloud/i18n: zh_CN language 2025-05-19 21:44:04 +08:00
rich2014
3a5e716fc1 UPD: MacCloud/i18n: enable <Add New Connection> i18n 2025-05-19 21:43:36 +08:00
rich2014
c2ac156832 UPD: MacCloud/i18n: enable CloudDriver displayName i18n 2025-05-19 21:43:15 +08:00
Alexander Koblov
0ead73a7ae UPD: SFTP - use a more optimal write buffer size 2025-05-18 21:35:42 +03:00
Alexander Koblov
41468186ae UPD: Enable JPEG XL image format reader (Windows) 2025-05-18 19:56:38 +03:00
Alexander Koblov
09e7273a18 UPD: Enable JPEG XL image format reader (Linux) 2025-05-18 14:57:30 +03:00
Alexander Koblov
c0cba942e6 ADD: Use an additional library search path (Windows) 2025-05-18 14:51:55 +03:00
Alexander Koblov
4598b563f0 ADD: JPEG XL image format reader 2025-05-18 13:53:06 +03:00
Alexander Koblov
a3cd2d8864 DEL: Obsolete unit 2025-05-18 13:21:16 +03:00
Alexander Koblov
47f04c0f9a FIX: Execute QCoreApplication_setAttribute only once 2025-05-18 13:04:09 +03:00
rich2014
dab6537415 ADD: MacCloud/i18n: step-135: update install.sh 2025-05-18 16:45:18 +08:00
rich2014
ae40018d57 ADD: MacCloud/i18n: step-134: zh_CN language 2025-05-18 16:42:10 +08:00
rich2014
ad4ccd76c9 ADD: MacCloud/i18n: step-133: enable i18n in WFX 2025-05-18 16:20:19 +08:00
rich2014
aa410f0ce6 ADD: MacCloud/i18n: step-132: enable i18n in project 2025-05-18 16:19:51 +08:00
Alexander Koblov
4b65262579 UPD: Use mbLoadLibraryEx function 2025-05-18 00:32:21 +03:00
Alexander Koblov
c8e99df6c3 FIX: mbLoadLibraryEx function 2025-05-18 00:29:35 +03:00
Alexander Koblov
9a5583c989 ADD: Swift syntax highlighter 2025-05-17 16:52:31 +03:00
Alexander Koblov
888b239508 ADD: YAML syntax highlighter 2025-05-17 15:16:09 +03:00
Alexander Koblov
6127c19b04 FIX: Viewer - find-dialog has ugly buttons look (fixes #2301) 2025-05-17 13:13:11 +03:00
rich2014
d52b753e4b FIX: MacCloud/Options: the issue when there is no Connection 2025-05-17 17:47:29 +08:00
Alexander Koblov
1bea1a28b2 ADD: Print an icons loading time 2025-05-16 23:54:40 +03:00
Alexander Koblov
c962b5eda0 ADD: Load theme icons list from cache (issue #2297) 2025-05-16 23:49:58 +03:00
rich2014
d86594afdf FIX: MacCloud: step-131: the issue with Copying/Moving From/To Connections 2025-05-16 18:20:16 +08:00
rich2014
3ff7b289fc ADD: MacCloud/S3: step-130: support move/rename file 2025-05-16 18:19:36 +08:00
rich2014
f7cd7a12d2 FIX: MacCloud/S3: the issue in TS3Client.clone() 2025-05-15 21:52:59 +08:00
Alexander Koblov
96c6e03cf4 UPD: Update plugins if default plugins list version is changed 2025-05-14 23:59:53 +03:00
Alexander Koblov
f98f7b9f39 UPD: German language file 2025-05-14 23:51:07 +03:00
Alexander Koblov
19b8645d60 ADD: Default plugins list version number 2025-05-14 23:49:58 +03:00
rich2014
ea18f522d4 ADD: MacCloud/S3: step-129: support multi-thread for Buckets 2025-05-14 21:35:31 +08:00
Alexander Koblov
3879f1658d FIX: Partial write 2025-05-13 20:19:03 +03:00
rich2014
559982ac5a ADD: MacCloud: step-128: update to default plugins 2025-05-13 22:21:15 +08:00
rich2014
1d9bbe474f ADD: MacCloud/S3: step-127: support HeadBucket API in HuaweiOBS 2025-05-13 22:20:34 +08:00
rich2014
84a2000f2c UPD: MacCloud/S3: exception handle in TWFXS3PropertyView.saveConnection() 2025-05-13 22:20:19 +08:00
rich2014
4e65f7feae ADD: MacCloud/S3: step-126: improve getAllBuckets() 2025-05-13 22:20:16 +08:00
rich2014
f36c3e9af4 ADD: MacCloud/Options: step-125: check connection params in S3 Options Window 2025-05-13 22:20:11 +08:00
rich2014
35d1d92111 ADD: MacCloud/OneDriver: step-124: accout config 2025-05-11 23:21:39 +08:00
rich2014
8938ce9547 UPD: MacCloud/Options: step-123: improve Options Window 2025-05-11 23:21:39 +08:00
rich2014
13aec9f5b0 ADD: MacCloud/S3: step-122: support multi-bucket in Amazones3/AliyunOSS/TencentCOS/HuaweiBOS 2025-05-11 23:21:38 +08:00
rich2014
800834e213 ADD: MacCloud/S3: step-121: support multi-bucket in CopyObject 2025-05-11 23:21:38 +08:00
rich2014
30a311f100 ADD: MacCloud/S3: step-120: support multi-bucket in Delete 2025-05-11 23:21:38 +08:00
rich2014
2abf7b5dfe ADD: MacCloud/S3: step-119: support multi-bucket in Download 2025-05-11 23:21:38 +08:00
rich2014
d9b7c60ec5 ADD: MacCloud/S3: step-118: support multi-bucket in Upload 2025-05-11 23:21:38 +08:00
rich2014
52c1991160 ADD: MacCloud/S3: step-117: support multi-bucket in CreateFolder 2025-05-11 23:21:38 +08:00
rich2014
5761433e56 ADD: MacCloud/S3: step-116: s3BuckPathHelper() for multi-bucket 2025-05-11 23:21:38 +08:00
rich2014
85445cfa0a ADD: MacCloud/S3: step-115: support multi-bucket in ListFolder 2025-05-11 23:21:38 +08:00
Alexander Koblov
0b21444c15 FIX: Find files - load encodings from search template 2025-05-11 12:24:37 +03:00
Alexander Koblov
7c707e3343 UPD: Snapshots workflow 2025-05-08 19:05:08 +03:00
rich2014
6afa92c16e ADD: MacCloud/Box: step-114: remove BOX clientSecret from source code and configuration files 2025-05-08 21:52:35 +08:00
rich2014
da741beba6 ADD: MacCloud/S3: step-113: support STS Temporary Security Token 2025-05-08 21:52:35 +08:00
rich2014
9dd8223e0a UPD: MacCloud/Options: move (User Custom) to the top in S3 region list 2025-05-08 21:52:35 +08:00
rich2014
c04880a305 ADD: MacCloud/HuaweiOBS: step-112: MainIcon 2025-05-08 21:52:35 +08:00
rich2014
d44cffdf26 ADD: MacCloud/HuaweiOBS: step-111: regions.json 2025-05-08 21:52:35 +08:00
rich2014
57737f8d98 ADD: MacCloud/S3: step-110: Huawei OBS 2025-05-08 21:52:35 +08:00
rich2014
393498aad7 UPD: MacCloud/Options: step-109: ake the CloudDrivers selection menu more user friendly 2025-05-08 21:52:35 +08:00
rich2014
9eac2290a0 UPD: MacCloud/Util: step-108: '+' in Url Path Encode 2025-05-08 21:52:35 +08:00
rich2014
c1be767702 ADD: MacCloud/S3Compatible: step-107: MainIcon 2025-05-08 21:52:35 +08:00
rich2014
7a31edc6c8 ADD: MacCloud/S3: step-106: S3 Compatible Cloud Driver 2025-05-08 21:52:35 +08:00
rich2014
c8f96e5594 ADD: MacCloud/AmazonS3: step-105: MainIcon 2025-05-08 21:52:35 +08:00
rich2014
09ba77774a UPD: MacCloud/S3: regions.json for AliyunOSS / TencentCOS 2025-05-08 21:52:35 +08:00
rich2014
e8c6106ee1 ADD: MacCloud/AmazonS3: step-104: regions.json 2025-05-08 21:52:35 +08:00
rich2014
cbb3409a14 ADD: MacCloud/S3: step-103: Amazon S3 Cloud Driver 2025-05-08 21:52:35 +08:00
rich2014
e8154a4e48 FIX: MacCloud/DropBox: unicode escape issue when upload large file 2025-05-08 21:52:35 +08:00
rich2014
4b54c96820 UPD: MacCloud: remove Content-Range header setting in TMiniHttpClient.doUpload()
for Amazon S3 Rest Api compatibility
2025-05-08 21:52:35 +08:00
rich2014
f72f67ea94 UPD: MacCloud/S3: setting single-line textField with habits 2025-05-08 21:52:35 +08:00
rich2014
5ea14acc4c UPD: MacCloud/S3: step-102: abstract clone() from Subclass Class to TS3Client 2025-05-08 21:52:35 +08:00
rich2014
8a82b341ff ADD: MacCloud/TencentCOS: step-101: MainIcon 2025-05-08 21:52:35 +08:00
rich2014
a3ef77dd87 ADD: MacCloud/TencentCOS: step-100: regions.json 2025-05-08 21:52:35 +08:00
rich2014
53749a439a ADD: MacCloud/S3: step-99: S3 Cloud Driver - TencentCOS 2025-05-08 21:52:35 +08:00
rich2014
2f7f150698 UPD: MacCloud/S3: step-98: simplify unnecessary different configurations for each S3 Driver 2025-05-08 21:52:35 +08:00
rich2014
38b3410422 UPD: MacCloud/S3: enhance compatibility with other S3 service providers 2025-05-08 21:52:35 +08:00
rich2014
838532a46b UPD: MacCloud/S3: remove unnecessary code 2025-05-08 21:52:35 +08:00
rich2014
17ae7acf9e ADD: MacCloud/AliyunOSS: step-97: regions.json 2025-05-08 21:52:35 +08:00
rich2014
e9f502857c ADD: MacCloud/Options: step-96: support user custom region and endpoint for S3 2025-05-08 21:52:35 +08:00
rich2014
eacda61c40 ADD: MacCloud/Options: step-95: support region list for S3 2025-05-08 21:52:35 +08:00
rich2014
6efa81c146 ADD: MacCloud/Options: step-94: add switch between asterisk/plainText display of Secret 2025-05-08 21:52:35 +08:00
rich2014
d6ba03b324 FIX: MacCloud/Options: addButton / removeButton / splitView 2025-05-08 21:52:35 +08:00
rich2014
cfb951952f ADD: MacCloud/Options: step-93: Options for S3 2025-05-08 21:52:35 +08:00
rich2014
c797022d0e UPD: MacCloud/Options: step-92: divide uWFXOptions into Core / Window / Property 2025-05-08 21:52:35 +08:00
rich2014
30acda2f89 FIX: MacCloud: memory leaks in Cloud Driver clone 2025-05-08 21:52:35 +08:00
rich2014
0fad673442 UPD: MacCloud: step-91: extract OAuth2 related from uCloudDriver to uOAuth2Core / uOAuth2Auth / uOAuth2Client 2025-05-08 21:52:35 +08:00
rich2014
748805d1bf ADD: MacCloud: step-90: AliyunOSS MainIcon 2025-05-08 21:52:35 +08:00
rich2014
3d81441df2 ADD: MacCloud/S3: step-89: S3 config 2025-05-08 21:52:35 +08:00
rich2014
a9ee5843d9 UPD: MacCloud/S3: step-88: refactor source file hierarchy 2025-05-08 21:52:35 +08:00
rich2014
ee5d9df872 ADD: MacCloud/S3: step-87: the first S3 Cloud Driver - AliyunOSS 2025-05-08 21:52:35 +08:00
rich2014
27b84a6af6 UPD: MacCloud/S3: step-86: The S3 configuration is more reasonably divided into Driver-level, Connection-level, and Account-level 2025-05-08 21:52:35 +08:00
rich2014
93eb7dfd83 UPD: MacCloud/S3: step-85: S3 refactor 2025-05-08 21:52:35 +08:00
rich2014
4f3d0b787e UPD: MacCloud: step-84: clearly distinguish WFX-related and Cloud Driver-related through naming 2025-05-08 21:52:35 +08:00
rich2014
eb982a259d ADD: MacCloud/S3: step-83: S3 basic 2025-05-08 21:52:35 +08:00
rich2014
e868e89be3 ADD: MacCloud/S3: step-82: AWS signature 2025-05-08 21:52:35 +08:00
rich2014
27dc71e24e ADD: MacCloud: step-81: xml util 2025-05-08 21:52:35 +08:00
rich2014
8cc89f6444 UPD: MacCloud: step-80: unify the reference of Http Authorization Header 2025-05-08 21:52:35 +08:00
rich2014
eced841224 UPD: MacCloud: step-79: for the previous four Cloud Drivers, extract TTokenCloudDriver / TCloudDriverAuthSession / TTokenCloudDriverConfig abstract layer 2025-05-08 21:52:35 +08:00
rich2014
96265e6ba3 ADD: MacCloud: step-78: improve http 2025-05-08 21:52:35 +08:00
rich2014
b2435efdd4 ADD: MacCloud: step-77: improve util 2025-05-08 21:52:35 +08:00
rich2014
17f7252190 ADD: MacCloud/Box: step-76: Box MainIcon 2025-05-08 21:52:35 +08:00
rich2014
f6063ca243 FIX: MacCloud/Box: TCloudDriverOAuth2SecretSession.clone() 2025-05-08 21:52:35 +08:00
rich2014
f4b2a489cc ADD: MacCloud/Box: step-75: Box Config 2025-05-08 21:52:35 +08:00
rich2014
25363fbaba UPD: MacCloud/Box: step-74: refactor to TBoxPathComponents 2025-05-08 21:52:35 +08:00
rich2014
204959be99 UPD: MacCloud/Box: step-73: refactor to uBoxClientUtil 2025-05-08 21:52:35 +08:00
rich2014
9f23878344 ADD: MacCloud/Box: step-72: Box pathToID 2025-05-08 21:52:35 +08:00
rich2014
3cdc7fd78a ADD: MacCloud/Box: step-71: Box basic 2025-05-08 21:52:35 +08:00
rich2014
7517fe2c0b ADD: MacCloud: step-70: enhanced Cloud Driver 2025-05-08 21:52:35 +08:00
rich2014
966d98c4dc ADD: MacCloud: step-69: support http post multipart/form-data 2025-05-08 21:52:35 +08:00
rich2014
d6e5e3b730 ADD: MacCloud: step-68: enhanced util 2025-05-08 21:52:34 +08:00
rich2014
f188356232 FIX: MacCloud/OneDrive: ListFolder path related 2025-05-08 21:52:34 +08:00
rich2014
f8862b158d UPD: MacCloud: convert + to %2B in url query, improve compatibility 2025-05-08 21:52:34 +08:00
rich2014
53e69da298 UPD: update zh_TW 2025-05-08 21:52:34 +08:00
rich2014
89ab4208ff UPD: update zh_CN 2025-05-08 21:52:34 +08:00
rich2014
f23a994413 ADD: apply NETWORK in Modern Form ToolBar on macOS 2025-05-08 21:52:34 +08:00
rich2014
90e2454947 UPD: MacCloud: remove the dependency on LazUtils 2025-05-08 21:52:34 +08:00
rich2014
c92279a612 UPD: MacCloud: notes 2025-05-08 21:52:34 +08:00
rich2014
51dd337a6c ADD: MacCloud: step-67: MacCloud ico in VFS list 2025-05-08 21:52:34 +08:00
rich2014
b34191cef7 ADD: MacCloud/OneDrive: step-66: One Drive MainIcon 2025-05-08 21:52:34 +08:00
rich2014
60d8139b30 ADD: MacCloud/OneDrive: step-65: One Drive config 2025-05-08 21:52:34 +08:00
rich2014
972b5c2d37 ADD: MacCloud/OneDrive: step-64: One Drive basic 2025-05-08 21:52:34 +08:00
rich2014
27f1f3ec5b ADD: MacCloud: step-63: add scope for TCloudDriverAuthPKCESession 2025-05-08 21:52:34 +08:00
rich2014
1bcf3c3519 ADD: MacCloud: step-62: improve http client 2025-05-08 21:52:34 +08:00
rich2014
f38b8013f2 UPD: MacCloud/Yandex: remove unnecessary access token settings 2025-05-08 21:52:34 +08:00
rich2014
e2ac4dd768 UPD: MacCloud: step-61: improve error handing 2025-05-08 21:52:34 +08:00
Alexander Koblov
5b2c3b9334 UPD: Allow a hard and symbolic link creation from search results 2025-05-08 13:25:18 +03:00
Alexander Koblov
c676d62ec3 ADD: Viewer - allow cm_WrapText command in the code view mode (experimental) 2025-05-08 12:53:38 +03:00
Alexander Koblov
ea52d64c6e FIX: Create a symbolic link when extract a ZIP-archive under Windows (issue #2298) 2025-05-08 12:20:40 +03:00
Alexander Koblov
c81160caf0 ADD: Use BCryptGenRandom function under Windows Vista+ 2025-05-06 20:55:26 +03:00
Alexander Koblov
e2a810c962 FIX: Don't allow a control codes in the file names under Windows (fixes #2285) 2025-05-06 20:51:01 +03:00
rumia
859c1fd568 FIX: LANG: zh_CN: Fix translations 2025-05-01 12:58:03 +08:00
Alexander Koblov
bfc1931ecd FIX: Build under FreeBSD 2025-04-20 17:59:19 +03:00
Alexander Koblov
29e886a671 FIX: JavaScript highlighter extensions 2025-04-20 12:39:15 +03:00
Dan Dascalescu
316e0c37d8
FIX: JavaScript highligher spelling, extensions (#2180) 2025-04-20 12:17:18 +03:00
Alexander Koblov
a9e9c7d17c UPD: Snapshots workflow 2025-04-19 16:19:40 +03:00
Alexander Koblov
e573e66ec7 FIX: Display special folder icons only in the "All associated + EXE/LNK" mode (Windows) 2025-04-19 14:58:37 +03:00
Alexander Koblov
c072da45b5 UPD: DetectEncoding - return a normalized encoding name 2025-04-19 14:41:19 +03:00
Alexander Koblov
15ef437b1e UPD: Release workflow 2025-04-19 14:05:21 +03:00
Alexander Koblov
e457ffa8ee
UPD: Snapshots workflow 2025-04-19 13:42:23 +03:00
Alexander Koblov
7c3fdc636a UPD: Copyright year 2025-04-19 00:54:20 +03:00
Alexander Koblov
67da3fbabb UPD: Librsvg library search algorithm 2025-04-18 23:56:52 +03:00
Alexander Koblov
2dd9817eb9 UPD: mbLoadLibraryEx function 2025-04-18 22:59:05 +03:00
Alexander Koblov
ab26e0eafb UPD: GetModuleHandleW function 2025-04-18 21:30:29 +03:00
rich2014
168ce6ed8e UPD: MacCloud: step-60: extract common code for TDropBoxClient / TYandexClient 2025-04-16 22:30:00 +08:00
rich2014
d6844eb919 UPD: MacCloud: step-59: extract common code for Downlaod / Upload / CreateFolder / Delete / CopyOrMove 2025-04-16 16:06:18 +08:00
rich2014
8c50148b40 UPD: MacCloud: step-58: extract common code to TCloudDriverListFolderSession / TCloudDriverDefaultLister 2025-04-16 15:31:04 +08:00
rich2014
ad45e74c24 UPD: MacCloud: step-57: unify TCloudDriverAuthPKCESession 2025-04-16 14:44:09 +08:00
rich2014
95815cfdeb UPD: MacCloud: step-56: unify EDropBoxException to ECloudDriverException 2025-04-16 14:44:05 +08:00
rich2014
f374448de0 UPD: MacCloud: step-55: unify TDropBoxResult to TCloudDriverResult 2025-04-16 14:43:19 +08:00
rich2014
b891864ac8 UPD: MacCloud: step-54: unify TDropBoxConfig to TCloudDriverConfig 2025-04-16 14:43:15 +08:00
rich2014
118d9e49a3 UPD: MacCloud: step-53: unify TDropBoxToken to TCloudDriverToken 2025-04-16 14:43:03 +08:00
rich2014
468a4ac676 FIX: MacCloud: filenames issue in uploading progress 2025-04-16 14:42:36 +08:00
rich2014
817ffc71a8 UPD: MacCloud/Options: step-52: specific Cloud Driver Name in notes 2025-04-16 14:42:26 +08:00
rich2014
d5eb924ff8 ADD: MacCloud/Options: step-51: support multiple Cloud Driver configurations 2025-04-16 14:42:22 +08:00
rich2014
e4f8460467 FIX: MacCloud: step-50: correctly reimplement FsFindFirst/Next/Close related 2025-04-16 14:42:18 +08:00
rich2014
dd8f11320a UPD: MacCloud: step-49: move the parts of uMacCloudCore not related to WFX into uCloudDriver 2025-04-16 14:42:13 +08:00
rich2014
f9fdb82a95 UPD: MacCloud/Http step-48: improve HttpClient 2025-04-16 14:42:06 +08:00
rich2014
303c013b75 ADD: MacCloud/Yandex step-47: HttpClient supports ContentRange upload in chunks 2025-04-16 14:42:01 +08:00
rich2014
4a66a7cda7 ADD: MacCloud/Yandex step-46: Yandex MainIcon 2025-04-16 14:41:57 +08:00
rich2014
5935a15497 ADD: MacCloud/Yandex step-45: Yandex Config 2025-04-16 14:41:30 +08:00
rich2014
7c92023496 ADD: MacCloud/Yandex step-44: Yandex Basic 2025-04-16 14:41:21 +08:00
rich2014
4224c96ac5 ADD: MacCloud step-43: HttpClient support various Method 2025-04-16 14:41:07 +08:00
rich2014
c28c1713cf ADD: MacCloud step-42: HttpClient becomes more flexible 2025-04-16 14:41:01 +08:00
rich2014
04418aad3c UPD: MacCloud step-41: refactor http and util 2025-04-16 14:40:39 +08:00
Alexander Koblov
63b392d46c FIX: FTP - show error message when cannot load/save settings (fixes #2264) 2025-04-12 20:50:17 +03:00
Alexander Koblov
685f55b514 ADD: TFileStreamEx.Create - show system error message 2025-04-12 20:47:54 +03:00
Alexander Koblov
ae0ea18747 FIX: Explorer preview plugin compilation 2025-04-12 13:57:38 +03:00
Alexander Koblov
4b4b721b60 FIX: Wfx-plugins - don't show file time for files which don't have a time 2025-04-12 13:44:36 +03:00
Alexander Koblov
3e8adb9b93 ADD: Use built-in HEIC decoder in Windows 11 24H2 2025-04-12 12:39:50 +03:00
Alexander Koblov
0f43599f75 FIX: Viewer - remove a border in the full screen view (fixes #2235) 2025-04-11 23:05:11 +03:00
Alexander Koblov
d3f15d726c ADD: FTP - better SSH-handshake error logging 2025-04-10 20:23:36 +03:00
Alexander Koblov
5932fb6658 ADD: Get OneDrive folders from registry 2025-04-10 20:23:35 +03:00
rich2014
47c73f5db7 UPD: MacCloud/DropBox: update install.sh 2025-04-10 23:38:51 +08:00
rich2014
20c7de422d UPD: MacCloud/DropBox step-40: move CloudRootDriver and DropBoxClient to drivers folder 2025-04-10 23:20:49 +08:00
rich2014
265223acdb ADD: MacCloud/DropBox step-39: support ESC and Command+W in Options Dialog 2025-04-10 22:39:35 +08:00
rich2014
6218ba73cf ADD: MacCloud/DropBox step-39: handling for duplicate named Connection 2025-04-10 22:23:49 +08:00
rich2014
3393195b20 UPD: MacCloud/DropBox step-39: split TCloudDriver into TCloudDriverBase and TCloudDriver
avoid TCloudRootDriver from becoming an abstract class
2025-04-10 22:21:55 +08:00
rich2014
59bc178c81 UPD: MacCloud/DropBox step-38: improve exception handling and eliminate duplicate code 2025-04-10 22:18:56 +08:00
rich2014
3faad8190a ADD: MacCloud/DropBox step-37: rename(F2) / create(F7) / delete(F8) Connections 2025-04-10 22:15:20 +08:00
rich2014
860d6e75c2 ADD: MacCloud/DropBox step-36: support logo in Options Dialog 2025-04-10 22:11:30 +08:00
rich2014
42a5d38e1a ADD: MacCloud/DropBox step-35: introduce Extension to replace FsSetDefaultParams 2025-04-10 22:10:10 +08:00
Alexander Koblov
68d1c6e4e1 FIX: Lazarus 4.99 compatibility 2025-04-09 21:59:22 +03:00
Alexander Koblov
db4feb4e0a UPD: Don't use SMB1 under Windows 10+ 2025-04-09 20:02:52 +03:00
rich2014
4fc4944856 UPD: MacCloud/DropBox: improve error handling 2025-04-09 22:26:43 +08:00
rich2014
790b0ce677 ADD: MacCloud/DropBox step-34: save/restore tokens from macOS Key Chains 2025-04-09 20:05:21 +08:00
rich2014
81766500af ADD: MacCloud/DropBox step-33: ICloudDriverObserver for token update 2025-04-09 20:03:37 +08:00
rich2014
ab1cd6e039 ADD: MacCloud/DropBox step-32: Key Chains Utils 2025-04-09 20:01:21 +08:00
rich2014
e04e484f4a ADD: MacCloud/DropBox step-31: load/save drivers/connections to MacCloud.json 2025-04-08 00:34:17 +08:00
rich2014
03f27f9f4f ADD: MacCloud/DropBox step-30: save drivers to MacCloud.json 2025-04-07 23:19:20 +08:00
rich2014
b8c8f04c7d ADD: MacCloud/DropBox step-29: prepare for MacCloud.json 2025-04-07 22:16:58 +08:00
rich2014
36682a19b8 ADD: MacCloud/DropBox step-28: file time for connections 2025-04-07 00:42:05 +08:00
Alexander Koblov
e38813f8d5 FIX: Lazarus 4.99 compatibility 2025-04-06 19:13:13 +03:00
rich2014
086e813e25 UPD: MacCloud/DropBox: improve background of Options Dialog 2025-04-06 18:19:57 +08:00
rich2014
8d01df8ed7 UPD: MacCloud/DropBox: add TLogUtil.logError() 2025-04-06 16:32:13 +08:00
rich2014
ca3dfa26f2 ADD: MacCloud/DropBox step-27: implement DropBox revoke token 2025-04-06 16:28:24 +08:00
rich2014
3090277c21 ADD: MacCloud/DropBox step-26: support unauthorize 2025-04-06 15:47:12 +08:00
rich2014
6ba66fdb58 UPD: MacCloud/DropBox step-25: the opening of the options window 2025-04-06 12:58:51 +08:00
rich2014
ed66c0791f ADD: MacCloud/DropBox step-24: Options Dialog basic functions 2025-04-06 11:56:15 +08:00
rich2014
90604a968f UPD: MacCloud/DropBox step-23: the infrastructure for managing Cloud Connection 2025-04-06 11:52:01 +08:00
rich2014
302c1e8450 ADD: MacCloud/DropBox step-22: add clone to TCloudDriver 2025-04-06 11:48:27 +08:00
rich2014
6e3f51de3e UPD: MacCloud/DropBox: remove generics, cause duplicate binary code 2025-04-06 11:46:41 +08:00
rich2014
87fb5ab444 FIX: MacCloud/DropBox: bugs in FsRemoveDirW() and constructor TCloudConnectionManager.Create() 2025-04-06 11:46:41 +08:00
rich2014
59edd9c5eb UPD: MacCloud/DropBox: change scheme to 'cloud' 2025-04-06 11:46:41 +08:00
rich2014
e6ef5e1e1f ADD: MacCloud/DropBox step-21: full support for FsExecuteFileW() 2025-04-06 11:46:41 +08:00
rich2014
0ba234f544 ADD: MacCloud/DropBox step-20: Extend the path to /Connection/RemovePath for multi-accounts and multi-CloudDrivers 2025-04-06 11:46:41 +08:00
rich2014
33322aade1 ADD: MacCloud/DropBox step-19: options dialog UI 2025-04-06 11:46:41 +08:00
rich2014
9e74a0f0f5 ADD: MacCloud/DropBox step-18: virtual files(connects) in the root directory 2025-04-06 11:46:41 +08:00
rich2014
aae7a16ecb UPD: MacCloud/DropBox: remove the duplicate definition of TQueryItemsDictonary 2025-04-06 11:46:41 +08:00
rich2014
c1c4d7620d UPD: MacCloud/DropBox: improve time conversion 2025-04-06 11:46:41 +08:00
Alexander Koblov
b7b47b21c1 UPD: Use a new toolbar control 2025-04-05 15:02:41 +03:00
Alexander Koblov
b6128fae02 FIX: Viewer - wrong toolbar buttons sequence 2025-04-05 14:54:58 +03:00
rich2014
a2aa63ef07 UPD: MacCloud/DropBox step-17: decoupling Cloud and DropBox to prepare for multi-accounts and multi-CloudDrivers 2025-04-02 22:19:07 +08:00
rich2014
b20a971928 UPD: MacCloud/DropBox step-16: Split the utility code from MacCloudFunc to uMacCloudUtil 2025-04-02 21:57:34 +08:00
rich2014
34a54ef00f FIX: MacCloud/DropBox: fix some issues in DropBoxClient 2025-04-01 20:44:40 +08:00
rich2014
64ac6f77d9 FIX: MacCloud/DropBox: fix http method in TMiniHttpClient 2025-04-01 20:43:47 +08:00
rich2014
a472549ec6 ADD: MacCloud/DropBox step-15: support upload large file > 150MB 2025-04-01 20:42:44 +08:00
rich2014
69ddc0e41b UPD: MacCloud/DropBox step-14: improve TJsonUtil 2025-04-01 20:38:11 +08:00
Alexander Koblov
caf1d3f080 FIX: Enable resource sharing between the OpenGL contexts (needs by plugins) 2025-03-31 20:58:50 +03:00
rich2014
011a32cdb4 ADD: MacCloud/DropBox step-13: add TMiniHttpClient.uploadRange() for upload file > 150MB 2025-03-31 23:17:35 +08:00
rich2014
27cfb71656 ADD: MacCloud/DropBox step-12: add NSFileRangeInputStream for upload file > 150MB 2025-03-31 22:38:04 +08:00
Alexander Koblov
f103e65144 UPD: Icon theme 2025-03-30 23:08:31 +03:00
rich2014
aa7853a4c5 UPD: update instatll/darwin/install.sh for MacCloud/DropBox 2025-03-30 22:32:15 +08:00
rich2014
2f80408d4f UPD: update plugins/build.sh for MacCloud/DropBox 2025-03-30 21:33:15 +08:00
rich2014
afd10c3c40 UPD: MacCloud/DropBox step-11: update official DC DropBox Account data 2025-03-30 21:33:08 +08:00
rich2014
50bad64956 UPD: MacCloud/DropBox: improve exception handling in FsFindFirstW / FsFindNextW / FsFindClose 2025-03-30 21:33:01 +08:00
rich2014
5f8dc675be ADD: MacCloud/DropBox step-10: support multi-threaded access and update token 2025-03-30 21:32:56 +08:00
rich2014
c3af2a6e20 UPD: MacCloud/DropBox step-9: improve token related exception handling mechanism 2025-03-30 21:32:53 +08:00
rich2014
6c84829a7e ADD: MacCloud/DropBox step-8: automatically reauthorize when AccessToken expires 2025-03-30 21:32:49 +08:00
rich2014
fa123d6f2b FIX: MacCloud/DropBox: correctly cancel watching the OAuth2 URL when the user cancels the waiting authorization dialog 2025-03-30 21:32:44 +08:00
rich2014
fc2d65af65 ADD: MacCloud/DropBox step-7: Error and Exception handling mechanisms 2025-03-30 21:32:39 +08:00
rich2014
6c8971858f FIX: MacCloud/DropBox: authorization may not be done on the main thread (since NSAlert needs to run on the main thread) 2025-03-30 21:32:34 +08:00
rich2014
f1b4f2204f FIX: MacCloud/DropBox: potential out-of-bounds issues in TStringUtil.stringToWidechars() 2025-03-30 21:32:29 +08:00
rich2014
d266e7a484 ADD: MacCloud/DropBox step-6: add MacCloud/DropBox plugin to Default 2025-03-30 21:32:25 +08:00
rich2014
ce1131af8b ADD: MacCloud/DropBox step-5: MacCloud plugin 2025-03-30 21:32:21 +08:00
rich2014
b42e2503e7 ADD: MacCloud/DropBox step-4: basic DropBox client 2025-03-30 21:32:16 +08:00
rich2014
f053d334fe ADD: MacCloud/DropBox step-3: basic http client 2025-03-30 21:32:11 +08:00
rich2014
e5ba69a40e ADD: MacCloud/DropBox step-2: basic utils 2025-03-30 21:32:07 +08:00
rich2014
7a974dde4c ADD: MacCloud/DropBox step-1: basic extensions to CocoaAll 2025-03-30 21:32:01 +08:00
Alexander Koblov
e701968cd1 FIX: Viewer - crash with unreadable file 2025-03-30 01:59:54 +03:00
Alexander Koblov
4d1130f775 ADD: Toolbars scalable icons 2025-03-30 00:46:46 +03:00
Alexander Koblov
3a4700e991 FIX: Viewer - wrong toolbar buttons sequence 2025-03-29 01:28:43 +03:00
Alexander Koblov
a57bc9a2a8 ADD: Toolbars scalable icons 2025-03-29 01:24:29 +03:00
Alexander Koblov
4b17c073d1 ADD: GTK3 support 2025-03-28 23:19:00 +03:00
Alexander Koblov
9de6dd5593 ADD: HWND type definition 2025-03-28 23:19:00 +03:00
Alexander Koblov
16a870fcd9 ADD: GTK3 support 2025-03-28 23:19:00 +03:00
Alexander Koblov
92bd7df527 FIX: Crash under GTK3 2025-03-28 23:19:00 +03:00
Alexander Koblov
1049fd9722 UPD: Editor toolbar 2025-03-27 20:54:25 +03:00
Alexander Koblov
3c8ef9d9f2 ADD: Toolbars scalable icons 2025-03-27 00:32:13 +03:00
Alexander Koblov
704f2f2b04 ADD: Register large toolbar icons 2025-03-27 00:03:48 +03:00
Alexander Koblov
d39ea6e021 DEL: Standard files 2025-03-26 21:10:17 +03:00
Alexander Koblov
5ca7cc68c2 UPD: libpcre2 build script 2025-03-26 21:10:17 +03:00
Alexander Koblov
f333a88e0e FIX: Crash at the start with debug build 2025-03-25 19:57:10 +03:00
Alexander Koblov
de1b4d1042 FIX: Crash at the start with debug build 2025-03-25 19:54:40 +03:00
Alexander Koblov
5cedc12d24 FIX: OneDrive sync status icon overlays not showing (fixes #474) 2025-03-24 23:56:25 +03:00
1vanK
650187bcc9
FIX: Shift+Enter when path has a space (#2241) (fixes #1966) 2025-03-24 23:03:50 +03:00
Alexander Koblov
98cc551cf8 UPD: Microsoft Photos bug workaround 2025-03-23 22:53:40 +03:00
Alexander Koblov
656b459b2a UPD: Image32 library 2025-03-23 21:11:06 +03:00
Alexander Koblov
e89064de97 FIX: Build under ARM64 (macOS) 2025-03-22 19:07:18 +03:00
Alexander Koblov
37b0a3ff8b FIX: Find files with long file names under macOS 2025-03-22 18:33:29 +03:00
Alexander Koblov
5f981d0e4e UPD: German language file 2025-03-22 00:20:14 +03:00
Alexander Koblov
48136147e9 ADD: Viewer - display control characters in the DOS encoding (like code page 437) 2025-03-19 21:49:49 +03:00
Alexander Koblov
3bd0a10816 UPD: Unit description 2025-03-19 21:49:49 +03:00
VenusGirl❤
005c84c2d7
UPD: Korean language file (#2227) 2025-03-19 21:43:51 +03:00
Alexander Koblov
f7ba104e48 FIX: Image file associated to Windows Photos opens only when there are no spaces in file name/path (fixes #2188) 2025-03-19 20:30:59 +03:00
Skif-off
97e1b60a00
UPD: Russian language file (#2216) 2025-03-14 12:49:00 +03:00
rich2014
c27ceed26e FIX: memory leaks in iCloudDriverConfigUtil.save(), icloud.json 2025-03-13 14:57:33 +08:00
Alexander Koblov
8fd3f87802 UPD: Forgotten file 2025-03-12 13:04:24 +03:00
Alexander Koblov
ca531db075 FIX: Viewer - disable unavailable menu items 2025-03-12 13:04:07 +03:00
Alexander Koblov
97ed0aff36 UPD: Language files 2025-03-12 12:47:08 +03:00
Alexander Koblov
f513e32f72 FIX: Plugins WFX text woefully out of date (fixes #2127) 2025-03-12 12:42:18 +03:00
Alexander Koblov
33c8b5e56a UPD: Use a more user-friendly plugins descriptions 2025-03-12 12:35:14 +03:00
Alexander Koblov
a2d8afae68 FIX: Changing the extensions for a highlighter and clicking Apply doesn't save them (fixes #2182) 2025-03-12 12:04:21 +03:00
Alexander Koblov
32532a344c FIX: Viewer - disable unavailable menu items 2025-03-12 11:50:42 +03:00
Alexander Koblov
3180cb924c FIX: Viewer - disable unavailable menu items (issue #2212) 2025-03-12 01:05:55 +03:00
Alexander Koblov
2bc4832f21 ADD: Open bookmark files which links to directory (issue #2211) 2025-03-11 18:40:03 +03:00
Alexander Koblov
fd6d5a8085 FIX: GVFS - Overwrite only older files (fixes #2201) 2025-03-09 12:51:31 +03:00
Skif-off
86ccf0da86
UPD: Russian language file (#2206) 2025-03-08 12:49:27 +03:00
Alexander Koblov
1a84836c2e FIX: Wrong content type guess (issue #2195) 2025-03-08 12:41:41 +03:00
rich2014
761075921e UPD: update zh_TW 2025-03-08 10:54:10 +08:00
rich2014
ae6f64172d UPD: update zh_CN 2025-03-08 10:54:06 +08:00
Alexander Koblov
46ee816f8b UPD: German language file 2025-03-08 00:18:25 +03:00
rich2014
87a9ba1190 UPD: optimize trackpad wheel scrolling #2191 2025-03-05 23:26:32 +08:00
Alexander Koblov
3119015cfe FIX: Build under non-macOS 2025-03-04 20:49:38 +03:00
Alexander Koblov
158b022c2d UPD: Language files 2025-03-04 20:47:02 +03:00
Alexander Koblov
979b935cf8 ADD: Show additional info in the Editor status bar (fixes #1796) 2025-03-04 20:46:01 +03:00
rich2014
7f66cd4b13 UPD: in ICompareByName(), if the Name of both files is empty, use FullPath instead 2025-03-05 00:02:06 +08:00
rich2014
8d6f960a67 ADD: open the corresponding folder when double-clicking the App in iCloud Options 2025-03-04 22:30:41 +08:00
rich2014
13893bdd1e ADD: enable iCloud options frame 2025-03-04 22:30:03 +08:00
rich2014
2f7d5f9b43 UPD: optimize the process of loading and saving iCloud.json 2025-03-04 18:05:11 +08:00
rich2014
9e3007bc71 ADD: iCloud Options frame (show list) 2025-03-04 17:02:44 +08:00
rich2014
aa392b45fc ADD: iCloudDriverUtil.createAllApps() 2025-03-04 16:59:38 +08:00
rich2014
9fbaf75cb3 UPD: split common modules from iCloudDriver to iCloudDriveUtil 2025-03-04 08:48:15 +08:00
rich2014
6feaa94ad5 FIX: copy / cut / paste in iCloudDriver 2025-03-02 18:28:45 +08:00
rich2014
d336d6eb73 ADD: Added TFileSourceConsultPhase to accurately distinguish between source and target phases, because Source FileSource may be equal to Target FileSource 2025-03-02 18:18:26 +08:00
rich2014
de5c4b90a7 ADD: support FileSource Relocation Event
only for iCloudDriver currently, it's to keep the selected files in iCloud Driver from being unselected before and after downloading.

background: due to the implementation mechanism of Apple iCloud Driver, the local file name will change before and after the file is downloaded.
2025-03-02 16:53:43 +08:00
rich2014
4aeb2801a3 ADD: add the common Event notification mechanism for FileSource (by improving the original one that is only related to Reload Event) 2025-03-02 07:12:47 +08:00
rich2014
9263696889 FIX: disable renaming on files that cannot be renamed (such as MountPoint in iCloudDriver) 2025-03-02 07:07:51 +08:00
rich2014
c15e209c8b ADD: support Terminal in iCloudDriver 2025-03-01 18:15:01 +08:00
Alexander Koblov
85faf82d4b FIX: Read a special characters from doublecmd.xml (fixes #2176) 2025-02-28 20:15:56 +03:00
Alexander Koblov
39cbab00eb FIX: Copy WSL/Cygwin symbolic links (issue #2171) 2025-02-28 20:00:34 +03:00
Alexander Koblov
67d210711b ADD: Read WSL/Cygwin symbolic link target (issue #2171) 2025-02-28 19:58:18 +03:00
rich2014
2d32109c71 UPD: in the context menu of iCloudDriver, optimize download status with multiple files 2025-02-27 19:50:13 +08:00
rich2014
e139fcb5ee FIX: simplify code and avoid memory leaks 2025-02-27 19:50:13 +08:00
rich2014
562b9f6a21 ADD: automatically generate iCloud.json 2025-02-27 19:50:13 +08:00
Alexander Koblov
c3f34eee6f FIX: Copy symbolic link attributes under Windows (issue #2171) 2025-02-26 21:59:32 +03:00
rich2014
e692f4ae02 ADD: iCloud.json for iCloudDriver configuration 2025-02-26 22:36:39 +08:00
rich2014
c73ca8d67e UPD: make iCloudDriver Configurable 2025-02-26 22:36:39 +08:00
Alexander Koblov
c9d62203f0 UPD: German language file 2025-02-26 00:17:40 +03:00
rich2014
e3dd9f0212 FIX: make TiCloudDriverFileSource stateless 2025-02-24 22:39:56 +08:00
rich2014
7050048a4f FIX: address in TiCloudDriverFileSource.GetFileSource() 2025-02-24 22:29:53 +08:00
rich2014
1647bed358 FIX: repeat prompt @1512763 2025-02-23 21:56:49 +08:00
rich2014
dc58700a62 UPD: update zh_TW 2025-02-23 21:56:48 +08:00
rich2014
f71e7005a3 UPD: update zh_CN 2025-02-23 21:56:48 +08:00
rich2014
492432ecca UPD: i18n for @1512763 2025-02-23 21:56:48 +08:00
rich2014
7b29ac1016 ADD: detect unsupported copy operation and prompt 2025-02-23 21:56:48 +08:00
Alexander Koblov
0c47b49589 FIX: Viewer - wrong text wrapping (fixes #2183) 2025-02-23 14:14:41 +03:00
rich2014
31c3a76a20 ADD: finder tags edit panel i18n 2025-02-23 19:01:07 +08:00
rich2014
d22b9b7205 ADD: support editing finder tag for multiple files in edit panel on macOS 2025-02-23 18:43:50 +08:00
rich2014
2fcad93c54 ADD: support showing finder tag for multiple files in edit panel on macOS 2025-02-23 14:12:21 +08:00
rich2014
1459890d03 ADD: support setting finder tag for multiple files in context menu on macOS 2025-02-22 21:17:16 +08:00
rich2014
320203a892 UPD: extract util functions from uMyDarwin to uDarwinUtil 2025-02-22 21:17:16 +08:00
Alexander Koblov
52ee174822 FIX: Copy relative symbolic links under Windows (issue #2171) 2025-02-22 13:54:36 +03:00
Alexander Koblov
1489df8e00 FIX: Deleting a Favorite can produce a "is not a valid GUID value" (issue #315) 2025-02-22 13:54:36 +03:00
rich2014
4cca685782 UPD: update zh_TW 2025-02-22 11:08:50 +08:00
rich2014
b9afd1aed0 UPD: update zh_CN 2025-02-22 11:02:27 +08:00
rich2014
30fb9859fb UPD: iCloudDriver i18n 2025-02-22 10:57:05 +08:00
rich2014
9e4bb1a0ed ADD: fscrCancel related 2025-02-21 23:28:00 +08:00
rich2014
2cc56c8e9a ADD: add confirmation dialog if user copies undownloaded files from iCloud Driver 2025-02-21 23:27:15 +08:00
rich2014
4271e23fa3 UPD: improve TSeedFileUtil.isSeedFiles() 2025-02-21 23:09:18 +08:00
Alexander Koblov
7d7a729773 FIX: Crash with absolute symbolic links (GVFS) 2025-02-15 13:14:41 +03:00
Alexander Koblov
8134add0e6 ADD: Copy directory time (GVFS) 2025-02-15 12:53:18 +03:00
Alexander Koblov
4c77384257 ADD: Warn about unsaved changes in the file types colors 2025-02-12 00:04:52 +03:00
Alexander Koblov
a5606c0f88 UPD: Optimize file types colors editing interface (issue #1078) 2025-02-11 23:47:43 +03:00
rich2014
6ed1cf6f2a FIX: TFileView.calcFileHashKey() with TMountedFileSource 2025-02-11 21:36:47 +08:00
rich2014
fe1a5bdc02 UPD: add isSeedFile properties to TFileMacOSSpecificProperty 2025-02-11 21:36:47 +08:00
rich2014
1c734ca812 UPD: prepare to add macOS Specific properties to TFileMacOSSpecificProperty 2025-02-11 21:36:47 +08:00
Alexander Koblov
1b1ca89bc1 FIX: Get monospace font under Linux (fixes #2062) 2025-02-10 21:05:10 +03:00
Alexander Koblov
7c80c8ab23 FIX: Wrong statistics when copying to phone (issue #2154) 2025-02-10 20:02:53 +03:00
rich2014
cf00e81423 FIX: add default method in TDefaultFileSourceWatcher #2155 2025-02-10 08:37:36 +08:00
Alexander Koblov
5dcae55b24 UPD: ShowInputMultiSelectListBox function 2025-02-09 18:22:15 +03:00
Alexander Koblov
ddba18df8b ADD: Load system icon with an absolute path 2025-02-09 17:15:17 +03:00
rich2014
81e899136b ADD: support multi thread in TFinderTags 2025-02-09 21:43:03 +08:00
rich2014
5857acf7f7 ADD: support multi thread in TFileSourceManager 2025-02-09 21:43:03 +08:00
rich2014
665ab1eae2 ADD: support multi thread in TiCloudDriverWatcher 2025-02-09 21:43:03 +08:00
rich2014
43a71cc64d ADD: fully support file change monitoring in iCloudDriver 2025-02-09 21:43:03 +08:00
rich2014
e04afa0b3e ADD: fspMounted in TFileSourceProperties 2025-02-09 21:43:03 +08:00
rich2014
176a05ac34 UPD: continue to remove dependency of TFileSystemWatcher in FileView 2025-02-09 21:43:03 +08:00
rich2014
2f11c164d3 UPD: refactor File Watcher, remove dependency of TFileSystemWatcher in FileView 2025-02-09 21:43:03 +08:00
Alexander Koblov
788c934f43 FIX: Restore focus after exit from quick search (issue #2152) 2025-02-09 15:05:28 +03:00
Alexander Koblov
f1d0a2c9d9 FIX: Disable preview in the quick view mode 2025-02-09 12:49:26 +03:00
Alexander Koblov
d3a2c1b0d4 ADD: Load folder system icon under Linux when an absolute icon file name used (fixes #2061) 2025-02-08 14:50:22 +03:00
Alexander Koblov
2c335a3e53 FIX: Calculator dialog colors 2025-02-07 23:41:02 +03:00
Alexander Koblov
17e12cb48b ADD: Gtk3 - drag & drop support 2025-02-07 20:32:35 +03:00
rich2014
766e2fe93c FIX: should not get Finder Tag for '..' 2025-02-07 23:08:24 +08:00
rich2014
039ca6e1c0 FIX: Finder Color Tag in FileView 2025-02-05 21:36:32 +08:00
rich2014
9084333d35 ADD: support download directory in iCloudDriver 2025-02-04 11:03:26 +08:00
rich2014
79627b1c8b UPD: refactor TSeedFileUtil in iCloudDriver 2025-02-04 10:06:49 +08:00
rich2014
5aaa6bc54a UPD: extract TSeedFileUtil from TiCloudDriverFileSource 2025-02-04 09:58:29 +08:00
rich2014
2385f18866 UPD: improve detection of seed file in iCloudDriver 2 2025-02-04 00:02:05 +08:00
rich2014
a2e5b0eb2b UPD: improve detection of seed file in iCloudDriver 2025-02-03 22:58:23 +08:00
Skif-off
e8a19a4569
UPD: Russian language file (#2142) 2025-02-02 18:08:22 +03:00
Alexander Koblov
62d6fb32c8 UPD: German language file 2025-02-02 14:51:21 +03:00
Alexander Koblov
8c1c69a4af UPD: libssh2 build script 2025-02-02 14:51:21 +03:00
Alexander Koblov
30e0176b75 UPD: Zip - refactoring 2025-02-02 14:51:21 +03:00
Alexander Koblov
5a5b826bd0 ADD: Get icon theme name under GTK 2025-02-02 13:55:46 +03:00
Alexander Koblov
11f8742da2 FIX: Compatibility with Lazarus 4.99 2025-01-31 21:44:58 +03:00
rich2014
8f9205e017 ADD: support create(New) File in TMountedFileSource 2025-01-31 17:47:45 +08:00
rich2014
e11490874b ADD: support create Directory in TMountedFileSource 2025-01-31 17:25:57 +08:00
rich2014
cf490dbd34 FIX: macOS 11- compatibility, remove NSImage.imageWithSystemSymbolName_accessibilityDescription() 2025-01-31 15:32:08 +08:00
Alexander Koblov
054cebe599 FIX: Zip - Invalid pointer operation 2025-01-30 22:06:28 +03:00
Alexander Koblov
dcde783795 UPD: Zip - speed up .zip extraction 2025-01-30 21:51:27 +03:00
Alexander Koblov
255ecc7bda DEL: Obsolete units 2025-01-30 21:03:25 +03:00
rich2014
1182709542 FIX: iCloudDriverFileSource Main Icon Path 2025-01-31 01:02:36 +08:00
rich2014
8648f21105 FIX: Relative Target Path with fsoCopy/fsoMove in TMountedFileSource 2025-01-31 00:23:16 +08:00
rich2014
8c47809d2c ADD: support fsoMove from TFileSystemFileSource to TMountedFileSource 2025-01-30 22:31:32 +08:00
rich2014
282fb12b7a ADD: icon for iCloud Driver (in Vfs List) 2025-01-30 17:59:28 +08:00
rich2014
319c47f67d UPD/fsoCopy: set targetPath for mountPoint in TMountedFileSource for TWcxArchiveFileSource 2025-01-30 11:30:03 +08:00
rich2014
e7fbe1dd56 FIX: TFile with empty file in ArchiveFileSource related 2025-01-30 11:29:59 +08:00
rich2014
40f5251161 ADD: support fsoCopy from TMountedFileSource to TWcxArchiveFileSource 2025-01-30 11:29:46 +08:00
rich2014
bf477c59d6 UPD: getMountPointFromPath() in TMountedFileSource 2025-01-30 11:29:36 +08:00
rich2014
ece67c1b0a UPD: remove dependency of iCloudDriver in FileView 2025-01-30 11:29:32 +08:00
rich2014
5f40088c3f ADD: add iCloudDriver as VfsModule 2025-01-30 11:29:29 +08:00
rich2014
1db3bb54e4 UPD: zh_TW language file 2025-01-28 23:16:48 +08:00
rich2014
64b655d292 UPD: zh_CN language file 2025-01-28 23:16:44 +08:00
rich2014
64cd59ecef UPD: i18n for iCloud Driver 2025-01-28 23:16:34 +08:00
Alexander Koblov
4fe27b1287 FIX: Zip - Use new Deflate64 decoder (fixes #2115) 2025-01-27 23:26:32 +03:00
rich2014
490d850cd1 FIX: remove iCloudDriver's dependency on CurrentWorkingDirectory 2025-01-27 23:46:00 +08:00
rich2014
0894245130 FIX: compilation on not macOS 2025-01-27 22:55:47 +08:00
rich2014
7b21584aa5 FIX: working directory in TiCloudDriverUIHandler.draw() 2025-01-27 17:49:25 +08:00
rich2014
c9c61eeba3 ADD: support loading iCloud Drive on restart 2025-01-27 17:37:43 +08:00
rich2014
5c44a8c628 FIX: calling ApplyRenameMask in ugiofilesourceutil 2025-01-27 16:54:05 +08:00
rich2014
19e82d61ce UPD: refactor GetFileName() from TiCloudFileSource to TMountedFileSource 2025-01-27 15:38:42 +08:00
rich2014
345ea783dc ADD: set CreationTimeProperty in FillFromStat() of uFileSystemSource 2025-01-27 14:24:02 +08:00
rich2014
bd01ba90fd ADD: apply iCloud Driver in Modern Form ToolBar 2025-01-27 14:03:26 +08:00
rich2014
3d8c2a7192 ADD: add used apps to iCloud Driver 2025-01-27 14:01:57 +08:00
rich2014
5e4d553cb4 ADD: support clicking the iCloud download Icon on the seed file to Download in BriefView 2025-01-27 13:35:39 +08:00
rich2014
7d5a6bdb56 FIX: the iCloud icon is not displayed at non-first columns in BriefView 2025-01-27 12:19:09 +08:00
rich2014
3f9c6229e9 ADD: draw iCloud related Icons in BriefView 2025-01-27 11:44:43 +08:00
rich2014
ecc7ec746b FIX: clicking on the Header of FileView in iCloud Drivers 2025-01-27 11:04:33 +08:00
rich2014
ff8c8e908c ADD: add check whether MountPoint exists 2025-01-27 11:02:31 +08:00
rich2014
d0d70e5fa8 ADD: adjust the TFile corresponding to MountPoint in TMountedListOperation 2025-01-27 10:27:05 +08:00
rich2014
2958b138f9 ADD: apply TFileSource.GetFileName() 2025-01-27 10:27:05 +08:00
rich2014
ca378ab948 ADD: abstract TFile.Name into FileSource. different FileSources can process FileName differently. 2025-01-27 10:27:05 +08:00
Alexander Koblov
5b60341ad7 ADD: Zip - New Deflate64 decoder (issue #2115) 2025-01-26 19:10:51 +03:00
Alexander Koblov
4913c46b61 FIX: Build under GTK2 2025-01-23 20:20:37 +03:00
VenusGirl❤
4b5988ae34
UPD: Korean language file (#2104) 2025-01-21 08:33:21 +03:00
Alexander Koblov
6dd5b5a1d6 UPD: Portugal translation (issue #2099) 2025-01-19 22:30:54 +03:00
Alexander Koblov
af46d2f076 UPD: Slovak language (fixes #2092) 2025-01-19 22:30:29 +03:00
Alexander Koblov
e682a876de ADD: SevenZip - check library version 2025-01-19 16:55:43 +03:00
Alexander Koblov
a0eaa37f04 FIX: Copy and paste files with a newline character (fixes #2085) 2025-01-18 15:19:00 +03:00
Alexander Koblov
7475060655 UPD: Try to create .dmg package 5 times 2025-01-18 12:55:19 +03:00
Alexander Koblov
afa8faf711 ADD: Editor toolbar scalable icons 2025-01-17 23:01:37 +03:00
Alexander Koblov
37c22c3ef4 UPD: Use close_range function (issue #2004) 2025-01-17 20:02:35 +03:00
Alexander Koblov
05f3ab8446 ADD: CloseRange function 2025-01-17 18:34:01 +03:00
Alexander Koblov
e853cdadd9 FIX: Viewer - don't show empty cells in the thumbnails view 2025-01-16 17:47:31 +03:00
Alexander Koblov
884720a573 FIX: Viewer - zoom image by mouse wheel 2025-01-15 18:11:38 +03:00
Alexander Koblov
d2b624be18 FIX: Limit max file descriptor number (fixes #2004) 2025-01-14 21:40:45 +03:00
Alexander Koblov
5fbaae7732 FIX: Wrong icon size 2025-01-13 20:01:45 +03:00
Alexander Koblov
a15f560ea3 FIX: Invalid SVG scaling (fixes #2068) 2025-01-13 19:55:59 +03:00
Alexander Koblov
38a5f529d9 FIX: Viewer - preview thumbnail vertical space (issue #2070) 2025-01-12 16:10:08 +03:00
Alexander Koblov
e1fbd5c089 FIX: Hitting Tab key when Quick Preview open applies focus both file panes (fixes #2079) 2025-01-12 14:42:33 +03:00
Alexander Koblov
8914e6cd13 ADD: Allow to use archive icon from built-in theme 2025-01-12 14:25:13 +03:00
Alexander Koblov
b267d10937 FIX: Initialize uSystem before Interfaces 2025-01-12 14:00:33 +03:00
Alexander Koblov
7a4ac40739 UPD: Initialize OnGetApplicationName early 2025-01-12 13:54:09 +03:00
Alexander Koblov
4fc93d275c FIX: Unable to make a privileged operation if app's executable has non-default file name in linux (fixes #2071) 2025-01-12 13:43:04 +03:00
Alexander Koblov
671df91744 ADD: Prepare to disable a GTK2 workaround 2025-01-11 15:18:31 +03:00
Alexander Koblov
2a2862c0f1 FIX: Crash under GTK2 (fixes #2069) 2025-01-11 15:14:27 +03:00
Alexander Koblov
026e9755d8 UPD: GetSystemFolderIcon function under Linux 2025-01-11 14:56:44 +03:00
Alexander Koblov
85d1985b9f ADD: JSON highlighter 2025-01-08 19:33:25 +03:00
Alexander
3cff308d7b
ADD: QML syntax highlighter (#2040) 2025-01-08 18:45:15 +03:00
Alexander Koblov
0c65eea9dd
UPD: Try to create .dmg package 5 times 2025-01-08 16:31:36 +03:00
Alexander Koblov
0135b6d4e8 FIX: Load folder system icon under Linux (fixes #2061) 2025-01-08 13:38:17 +03:00
Alexander Koblov
cad083f6e8 FIX: Read fonts settings from xml-config (fixes #2052) 2025-01-07 16:01:01 +03:00
Skif-off
fdcc704ced
UPD: Russian language file (#2032) 2025-01-05 22:12:20 +03:00
Alexander Koblov
a79429eedc FIX: Hotkey list background is not cleared (fixes #2044) 2025-01-05 21:53:26 +03:00
Alexander Koblov
17fb9dcb9d FIX: The height of color ComboBox is too small (fixes #2043) 2025-01-05 21:21:08 +03:00
rich2014
18d4448ed2 ADD: support clicking the iCloud download Icon on the seed file to Download (like Finder) 2025-01-03 01:15:45 +08:00
rich2014
d597ee49b6 ADD: implement CurrentWorkingDirectory in TMountedFileSource 2025-01-01 02:09:13 +08:00
rich2014
76f1bc9d07 ADD: draw overlay APP icon in iCloud Driver 2025-01-01 02:09:13 +08:00
rich2014
dc3a68d907 ADD: filesource in TFileSourceUIParams 2025-01-01 02:09:13 +08:00
rich2014
69e928ea09 ADD: add IconRect into drawing params in uColumnsFileView.TDrawGridEx.DrawCell() 2025-01-01 02:09:13 +08:00
Alexander Koblov
4f3ec507f6 FIX: Copy via a temporary directory 2024-12-31 15:25:57 +03:00
Alexander Koblov
b2a3fa2686 FIX: Extract from archive (fixes #2039) 2024-12-31 15:04:51 +03:00
rich2014
112ffaa593 UPD: refactor TFileSourceUIHandler related 2024-12-30 00:15:34 +08:00
rich2014
3340404a90 UPD: display 'iCloud Download Icon' and 'Tag Color Icon' for seed file in sequence in iCloud Driver 2024-12-29 23:44:43 +08:00
rich2014
f2ed08ba7a ADD: display iCloud Download Icon for seed file in iCloud Driver 2024-12-29 22:14:00 +08:00
rich2014
ace08aa36d ADD: UI infrastructure related to FileSource 2024-12-29 22:13:59 +08:00
Alexander
a769421642
ADD: Kotlin syntax highlighter (#2034) 2024-12-29 16:04:24 +03:00
Alexander Koblov
bbf030a6aa FIX: WinToUnixFileAttr function 2024-12-29 14:04:56 +03:00
Alexander Koblov
87f8ba928f FIX: Crash on startup under Windows (fixes #2033) 2024-12-29 13:53:35 +03:00
Alexander Koblov
6ad950c95e UPD: Everything plugin 2024-12-29 13:28:59 +03:00
rich2014
30d8b77eda FIX: the issue when Copying / Moving files without confirm dialog #2035 2024-12-29 10:20:13 +08:00
Alexander Koblov
c7cf06829c FIX: WCX - restore directory attributes after CloseArchive 2024-12-28 17:33:34 +03:00
VenusGirl❤
a233c69f15
UPD: Korean language file (#2031) 2024-12-28 16:16:30 +03:00
rich2014
8b70e6bb1b FIX: the issue of calling TFileSystemWatcher.RemoveWatch() @ 3ecba99 2024-12-28 20:42:08 +08:00
rich2014
3ecba99193 ADD: enable watching real path in TFileView 2024-12-28 20:36:12 +08:00
rich2014
b57192405f ADD: support File Watch in TMountedFileSource (and iCloud Driver) 2024-12-28 20:32:37 +08:00
rich2014
c586f5f5ba ADD: realPath / virtualPath in TFileSystemFileSource, for FileSystem Watch 2024-12-28 20:30:47 +08:00
rich2014
47fa44ef6b UPD: show '..' instead of DisplayName with '..' in iCloudDriver 2024-12-27 21:30:28 +08:00
rich2014
67c9fc946b ADD: add Download Now / Remove Download into contextMenu in iCloudDriver 2024-12-27 21:23:35 +08:00
rich2014
68112b7fdd FIX: compilation on windows 2024-12-27 17:32:57 +08:00
rich2014
e900156fb1 ADD: GetDisplayFileName() in iCloudDriver 2024-12-26 22:43:23 +08:00
rich2014
86caadb164 ADD: GetDisplayName to FileSource (display file name depends on different FileSources) 2024-12-26 22:40:41 +08:00
rich2014
b0ad1a0c51 ADD: in iCloudDriver, files ending with .icloud are undownloaded cloud files, not non-displayed system files. 2024-12-26 19:27:45 +08:00
rich2014
27d3a8eee1 UPD: refactor IsSysFile/IsHidden from TFile to FileSource (it depends on different FileSources) 2024-12-26 19:11:47 +08:00
rich2014
eca52c6459 UPD: better support for target path begin with '..' in F5 / F6 2024-12-25 21:04:07 +08:00
rich2014
7c9c1dc94b UPD: refactor method name in FileSourceManager and FileSourceProcessor 2024-12-24 20:59:58 +08:00
rich2014
de6fa6ce31 ADD: support iCloudDriver to correctly get file at root 2024-12-24 00:12:45 +08:00
rich2014
3540c79f99 ADD: TMountedFileSource and iCloudDrivers support jumping to parent path 2024-12-24 00:10:30 +08:00
rich2014
19b046aefe ADD: decompose FileSourceProcessor into two stages 2024-12-23 23:48:25 +08:00
Ihar Areshchankau
7491784318
ADD: Built-in editor menu item "Edit - Time/Date". (#2016) 2024-12-23 09:09:13 +03:00
Alexander Koblov
4879122cdc
FIX: Copy files (fixes #2022) 2024-12-23 09:08:27 +03:00
rich2014
c0629daf08 FIX: fsoCopy in Archive Files 2024-12-22 17:32:20 +08:00
rich2014
cbedb26d4f UPD: refactor TMountedFileSource to inherit TFileSystemFileSource base on FileSourceProcessor 2024-12-21 20:53:54 +08:00
rich2014
ae3d2abeaf UPD: apply FileSourceManager in TfrmMain.CopyFiles(), support fsoCopy for TMountedFileSource 2024-12-21 16:56:27 +08:00
rich2014
b8a101a71c UPD: add fsoCopy logic to TDefaultFileSourceProcessor/TFileSystemFileSourceProcessor/TMountedFileSourceProcessor 2024-12-21 16:56:27 +08:00
rich2014
d578945573 UPD: refactor FileSource Processor to support more operations 2024-12-21 16:56:27 +08:00
Alexander Koblov
0b3b2deb89 ADD: Display GTK3 version 2024-12-19 21:31:32 +03:00
Alexander Koblov
63cd93783a DEL: Invalid version information 2024-12-19 21:07:18 +03:00
rich2014
b031cf6133 FIX: the issue of moving file to other path #2017 2024-12-19 21:41:49 +08:00
Alexander Koblov
d5b2c51a67 FIX: Viewer - problem with RegEx search, it cannot find 'qt' case-insensitive (fixes #2012) 2024-12-16 20:14:14 +03:00
Alexander Koblov
530aafdc2d FIX: Extra semicolon after "then" 2024-12-15 00:17:02 +03:00
Alexander Koblov
f0f2b02c53 FIX: Quick view panel crash (fixes #2011) 2024-12-14 16:18:50 +03:00
Alexander Koblov
01a66177ec FIX: Free Pascal 3.3.1 compatibility 2024-12-08 22:32:00 +03:00
j2969719
5b04565930
UPD: Use -sfx switch for rar (#1996) 2024-12-08 19:55:11 +03:00
Alexander Koblov
561e10ab32 UPD: Language files 2024-12-08 13:12:52 +03:00
Alexander Koblov
537ffde16d UPD: Korean language file 2024-12-08 13:06:42 +03:00
Alexander Koblov
ebed22101e FIX: Use UTF8StringReplace 2024-12-08 12:26:00 +03:00
Alexander Koblov
eb2bf85573 FIX: Multi-line pattern search option state 2024-12-08 12:06:37 +03:00
VenusGirl❤
beb512835e
UPD: Korean language files (#1993) 2024-11-30 22:11:15 +03:00
Alexander Koblov
d6d54dfb93 ADD: Toolbar - line break separator style 2024-11-30 21:32:01 +03:00
rich2014
3df9f5260c ADD: refactor FileSource - step 4: apply FileSourceManager in fMain, support fsoMove for TMountedFileSource 2024-12-01 00:19:50 +08:00
rich2014
0c10a9c033 ADD: refactor FileSource - step 4: support fsoMove logic for TMountedFileSource 2024-12-01 00:16:47 +08:00
rich2014
7d664ad53c ADD: refactor FileSource - step 3: move fsoMove logic into TSearchResultFileSourceProcessor (from fMain) 2024-12-01 00:12:53 +08:00
rich2014
7fcceac697 ADD: refactor FileSource - step 2: move fsoMove logic into TDefaultFileSourceProcessor (from fMain) 2024-12-01 00:11:14 +08:00
rich2014
52a3869fcb ADD: refactor FileSource - step 1: add FileSourceManager/FileSourceProcessor infrastructure 2024-12-01 00:08:22 +08:00
Alexander Koblov
1c09afa958 ADD: Try to create .dmg package multiple times 2024-11-30 14:57:50 +03:00
Alexander Koblov
a899cf77a9 UPD: Release workflow 2024-11-30 14:56:09 +03:00
Alexander Koblov
dbfd5abb79 UPD: Sound notifications - disable by default 2024-11-30 00:13:50 +03:00
Alexander Koblov
01420e301e DEL: Unused files 2024-11-29 21:02:49 +03:00
Alexander Koblov
3eeb0aeaa0 DEL: Unused unit 2024-11-29 21:02:49 +03:00
Alexander Koblov
8f0d4a4907 FIX: Create archive from another archive content 2024-11-29 20:20:51 +03:00
Alexander Koblov
db7dfa19fb FIX: Don't check a disk free space for file systems which don't have a disk size (issue #753) 2024-11-27 23:41:20 +03:00
Alexander Koblov
1dfd10e789 ADD: Try to create .dmg package multiple times 2024-11-27 21:44:24 +03:00
Alexander Koblov
d1d437c9cc FIX: Load search template with content plugins 2024-11-26 20:41:43 +03:00
Alexander Koblov
8b8dff2137 FIX: SevenZip - crash on exit 2024-11-26 00:02:44 +03:00
rich2014
118ea526d4 ADD: support fsoDelete in TMountedFileSource 2024-11-25 22:19:41 +08:00
Alexander Koblov
45402ba3d1 UPD: PackInfoDlg - file size formatting 2024-11-24 23:15:16 +03:00
Alexander Koblov
9ee1109693 UPD: Use CompareDateTime when compare DateTime fields 2024-11-24 22:50:31 +03:00
Alexander Koblov
863cebc19a FIX: Load DateTime from search template 2024-11-24 22:30:43 +03:00
Alexander Koblov
e69ffe017d FIX: Crash on search template loading 2024-11-24 21:39:38 +03:00
rich2014
fabb04cd75 ADD: support fsoCopy in TMountedFileSource 2024-11-24 21:18:01 +08:00
rich2014
df3652d707 ADD: support fsoCopyIn in TMountedFileSource 2024-11-24 21:09:59 +08:00
rich2014
e6e0e083fa UPD: refactor getRealPath() to TMountedFileSource 2024-11-24 21:07:31 +08:00
Alexander Koblov
6ec5f573b9 ADD: RPM - dependencies information 2024-11-24 14:37:13 +03:00
j2969719
2cacca2c3a
UPD: WDX search user interface (#1839) 2024-11-24 13:09:50 +03:00
Alexander Koblov
23252a36f9 UPD: Disable modification of temporary archives 2024-11-23 23:36:53 +03:00
Alexander Koblov
5405d59451 UPD: Zip - create TAR arcives in the GNU format by default 2024-11-23 16:20:05 +03:00
rich2014
eac96f8c71 FIX: standardize the path in getMacOSDisplayNameFromPath() 2024-11-23 19:24:12 +08:00
rich2014
f046c9f085 ADD: iCloud Driver basic functions 2024-11-19 23:17:26 +08:00
rich2014
17eeef8253 ADD: iCloud Driver FileSource Infrastructure base on Mounted FileSource 2024-11-19 22:51:38 +08:00
rich2014
dd1e211985 ADD: Mounted FileSource Infrastructure 2024-11-19 22:46:54 +08:00
Alexander Koblov
5736695059 ADD: SevenZip - language files 2024-11-18 20:12:02 +03:00
Alexander Koblov
27e6888b2c ADD: SevenZip - translate resource strings 2024-11-17 23:57:15 +03:00
Alexander Koblov
16756b6362 FIX: SevenZip - configuration dialog TAB order 2024-11-17 21:37:54 +03:00
Alexander Koblov
38abc6ffc4 UPD: SevenZip - move initialization to ExtensionInitialize procedure 2024-11-17 21:31:29 +03:00
Alexander Koblov
566d2397bf ADD: SevenZip - new archive formats (v15.14) 2024-11-17 21:10:52 +03:00
Alexander Koblov
f827859854 FIX: SevenZip - extract empty files (issue #1672) 2024-11-17 18:20:53 +03:00
Alexander Koblov
1521d9dfda FIX: SevenZip - memory leak 2024-11-17 18:19:05 +03:00
Alexander Koblov
e5f21889fe ADD: SevenZip - new archive formats (v15.14) 2024-11-17 17:57:05 +03:00
Alexander Koblov
ef6d192b0f ADD: SevenZip - Unix support 2024-11-17 16:45:10 +03:00
Alexander Koblov
59517f8caa UPD: SevenZip - prepare Unix support (step 8) 2024-11-17 16:18:55 +03:00
Alexander Koblov
2c7934f31e FIX: DialogAPI - show dialog from a non-main thread 2024-11-16 14:56:27 +03:00
Alexander Koblov
b75946dc55 UPD: Publish sysconf function 2024-11-16 14:52:04 +03:00
Alexander Koblov
eb00ca2cf5 UPD: SevenZip - prepare Unix support (step 7) 2024-11-12 20:00:51 +03:00
Alexander Koblov
b9e5f1a772 UPD: SyncDirs - file size formatting 2024-11-12 19:49:09 +03:00
Skif-off
85034e987f
UPD: Russian language file (#1969) 2024-11-11 09:24:19 +03:00
VenusGirl❤
e2b68b6e53
UPD: Korean language file doublecmd.ko.po (#1965) 2024-11-10 22:24:10 +03:00
Alexander Koblov
1845694471 FIX: Snapshots uploading when a target files don't exists 2024-11-10 22:21:15 +03:00
Alexander Koblov
5c6b46f892 UPD: SevenZip - prepare Unix support (step 6) 2024-11-10 19:44:46 +03:00
Alexander Koblov
86b19c2b10 UPD: SevenZip - prepare Unix support 2024-11-10 18:28:30 +03:00
Alexander Koblov
f2b3345653 UPD: SevenZip - prepare Unix support 2024-11-10 15:55:45 +03:00
Alexander Koblov
9066702bc4 UPD: SevenZip - prepare Unix support 2024-11-10 13:33:05 +03:00
Alexander Koblov
057eb0ac96 FIX: SevenZip - get directory attributes 2024-11-10 13:29:14 +03:00
Alexander Koblov
503584708b UPD: CheckPhotosVersion - optimization 2024-11-10 11:56:25 +03:00
Alexander Koblov
defc205605 FIX: Create *.dmg under macOS 13+ 2024-11-09 16:29:33 +03:00
Alexander Koblov
4c8aa72a3c ADD: Open images in the Microsoft Photos application starting with version 2024.11050.3002.0 and above 2024-11-09 14:53:11 +03:00
j2969719
f11392854a
UPD: Dont show maximize button in filecopy dialogs (#1959) 2024-11-08 22:24:30 +03:00
Alexander Koblov
8996c1bc15 UPD: Disable Samba plugin 2024-11-08 21:19:44 +03:00
Alexander Koblov
e1733465be FIX: NFS - ignore fmShareDenyWrite (issue #1964) 2024-11-08 21:02:40 +03:00
Alexander Koblov
4e1ead1789 FIX: Don't show a progress for operations with ShowProgress:= False 2024-11-08 20:55:29 +03:00
Alexander Koblov
9ec8f9d483 ADD: Viewer - calculate a folder size 2024-11-06 21:25:43 +03:00
j2969719
fd70dbe29a
ADD: MultiArc - check exitstatus on list parsing (#1936) 2024-11-04 22:08:15 +03:00
Alexander Koblov
edb8bab9f4 UPD: Snapshots workflow 2024-11-04 21:29:53 +03:00
Alexander Koblov
36378feaa6 ADD: SevenZip - long file name support 2024-11-04 21:27:21 +03:00
Alexander Koblov
51161fb569 FIX: SevenZip - get plugin path 2024-11-04 21:25:03 +03:00
Alexander Koblov
e86a46ae17 UPD: Release workflow 2024-11-04 21:00:29 +03:00
Alexander Koblov
9d35e96060 UPD: SevenZip - prepare Unix support 2024-11-04 20:54:20 +03:00
Alexander Koblov
77e3fc8445 ADD: SevenZip - long file name support (issue #1672) 2024-11-04 20:34:44 +03:00
Alexander Koblov
275d06df1b UPD: German language files 2024-11-03 23:44:51 +03:00
Alexander Koblov
a60bd9b79d FIX: Memory leak 2024-11-03 23:29:08 +03:00
rich2014
d498e63c20 FIX: leaks in MacPreview 2024-11-01 21:34:00 +08:00
rich2014
c357c055ea UDP: zh_TW language file 2024-11-01 19:05:34 +08:00
rich2014
2073688c09 UDP: zh_CN language file 2024-11-01 19:05:30 +08:00
rich2014
3f86f6d14e UPD: i18n for rsMenuMacOSGrantPermissionToSupportFinderTags 2024-11-01 19:05:26 +08:00
rich2014
51de0fb1c2 ADD: if Finder Tags access permission is missing, the Colored Tags Menu Item in the context menu changes to prompt for authorization on macOS
on macOS 15, APP needs authorization to access Finder Tags
2024-11-01 19:05:22 +08:00
Alexander Koblov
8ae7b5ca3a ADD: SevenZip - self-extract module 2024-10-31 23:33:43 +03:00
rich2014
d28cd151f6 UPD: support dynamic search menu(sidebar finder tags) in Modern Form Style Tool Bar 2024-10-31 21:40:21 +08:00
Alexander Koblov
7e347cffcd FIX: Viewer - code mode and a byte order mark 2024-10-29 22:18:03 +03:00
Alexander Koblov
5951ace48d FIX: FTP - Build under Haiku 2024-10-28 23:37:09 +03:00
Alexander Koblov
600edcc021 FIX: Create symbolic link - forward error code (Windows) 2024-10-28 21:40:16 +03:00
Alexander Koblov
dd7128a35f ADD: Create symbolic link error - skip all button 2024-10-28 21:07:26 +03:00
j2969719
ab42674559
ADD: MultiArc - cleaning chars in size string w/o additional helpers (#1883) 2024-10-28 09:08:53 +03:00
Alexander Koblov
df4164b626 ADD: FTP - Print address resolving status 2024-10-27 18:30:51 +03:00
Alexander Koblov
2aa9fe2f5a FIX: FTP - ResolveName under macOS (issue #1604) 2024-10-27 18:30:51 +03:00
rich2014
47cffccc5e UPD: Finder Tags are only etrieved once when loading the file list, avoiding loading it every time drawCell() is called 2024-10-27 19:46:18 +08:00
rich2014
85510ee9b6 UPD: reimplement drawTagsAsDecoration() with fpMacOSFinderTag 2024-10-27 19:35:35 +08:00
rich2014
e960d880e3 ADD: fpMacOSFinderTag in TFilePropertyType 2024-10-27 19:33:37 +08:00
Alexander Koblov
3b22b4b5c6 UPD: Language files 2024-10-27 14:13:13 +03:00
Alexander Koblov
6b46a2f4cd FIX: Main menu - "Network" and "Favorites" do not have an underlined letter (fixes #1841) 2024-10-27 14:13:13 +03:00
j2969719
9d0bdc0224
UPD: WCX - disable options that were not reported in plugin caps (#1945) 2024-10-27 13:35:47 +03:00
Alexander Koblov
0b35d32a7a FIX: DC does not close "Options" on pressing ESC after you selected "Tooltips" section (fixes #1929) 2024-10-27 13:30:34 +03:00
Alexander Koblov
1b72f53617 UPD: Network file source - remove a standard port from address 2024-10-27 13:21:51 +03:00
Alexander Koblov
d9887075e2 ADD: UnixFileTimeToFileTime function 2024-10-26 19:21:06 +03:00
Alexander Koblov
dc3fd9c5ab FIX: GLib warning 2024-10-26 19:03:19 +03:00
j2969719
a7093dbd96
UPD: MultiArc - If day or month not set, make mtime invalid (#1863) 2024-10-26 15:14:58 +03:00
rich2014
69663f87a0 UPD: zh_CN language file 2024-10-26 19:36:18 +08:00
Alexander Koblov
e43bfc3c57 UPD: German language file 2024-10-26 14:30:21 +03:00
Alexander Koblov
8e7dcd1477 FIX: Crash on viewing directory symlink on Linux (fixes #1942) 2024-10-26 13:58:22 +03:00
Alexander Koblov
1e1a01ef2a UPD: Network file source - don't display an invalid file size and time 2024-10-26 13:50:26 +03:00
Alexander Koblov
f43748ee0e FIX: Memory leak 2024-10-26 13:48:26 +03:00
Alexander Koblov
ebeafd8089 FIX: Network file source - use a pretty names 2024-10-26 01:01:02 +03:00
rich2014
b8ec3221fd UPD: improve the way that 'Go' menu icons are setup to be compatible with macOS 14+ 2024-10-25 22:14:08 +08:00
rich2014
6396d2e625 UPD: zh_TW language file 2024-10-24 22:56:15 +08:00
rich2014
9ed0246608 UPD: zh_CN language file 2024-10-24 22:48:50 +08:00
rich2014
51d5596f24 UPD: i18n for 'Search for combined tags' 2024-10-24 22:42:21 +08:00
rich2014
50c505da51 FIX: the issue when no tag selected in 'Search for combined finder tags' on macOS 2024-10-24 22:40:41 +08:00
rich2014
cee9297f07 FIX: memory leaks related to Finder Tags Popover on macOS 2024-10-24 21:06:54 +08:00
rich2014
f56c649302 ADD: search for combined finder tags 2024-10-24 21:06:54 +08:00
Alexander Koblov
12adaeca8a ADD: Simple network file source (via GIO) 2024-10-23 20:19:24 +03:00
rich2014
c199a7d36e UPD: include tag name in search result tab name on macOS 2024-10-22 22:37:56 +08:00
rich2014
fbb7f756e0 ADD: color round in Modern Form Style ToolBar - Search Menu on macOS 2024-10-22 21:02:35 +08:00
j2969719
b86380aaa5
UPD: Always suggest tar option by default if multiple files selected; suggest separate archives option if single file selected to preserve file extension (#1892) 2024-10-22 09:00:35 +03:00
Alexander Koblov
ddcfc127f0
FIX: Compiling 2024-10-22 08:55:27 +03:00
Skif-off
4adfa52f83
UPD: More correct sorting of the "Path" and "Link to" fields. (#1884) 2024-10-22 08:41:04 +03:00
j2969719
d616b527db
FIX: MultiArc - crash on discard click (#1934) 2024-10-22 08:37:37 +03:00
Alexander Koblov
0544f3b046 FIX: Options visibility 2024-10-21 20:46:21 +03:00
Alexander Koblov
5e40d547ea UPD: Language files 2024-10-21 20:01:10 +03:00
Alexander Koblov
60e6ddd2c6 ADD: Create separate checksum file for each directory 2024-10-21 19:55:20 +03:00
rich2014
b3625ffa47 ADD: support Finder Tag for macOS 14+ 2024-10-20 19:10:14 +08:00
rich2014
904e910e8b FIX: ContextMenu crash if the finder tag name is not found 2024-10-20 16:16:46 +08:00
Alexander Koblov
093d191417 UPD: Greek language file 2024-10-19 13:57:06 +03:00
VenusGirl❤
8ed19f0763
UPD: Korean language file doublecmd.ko.po (#1920) 2024-10-19 13:55:02 +03:00
Alexander Koblov
14abe92c63 FIX: Background context menu font (fixes #1917) 2024-10-17 21:14:47 +03:00
rich2014
aa41a1d75c ADD: support searching by Finder Tag Name Menu in Modern Form Style ToolBar on macOS 2024-10-18 00:20:16 +08:00
rich2014
10393c3bfe ADD: support base function of searching by finder tag name 2024-10-18 00:18:35 +08:00
rich2014
5952e6e4a5 ADD: support sidebar property in Finder Tag Model 2024-10-18 00:11:08 +08:00
Skif-off
feee22e21c
UPD: Russian translation (#1916) 2024-10-15 20:34:36 +03:00
dependabot[bot]
114f1cae6c
UPD: Bump actions/checkout from 3 to 4 (#1915) 2024-10-14 09:04:36 +03:00
Artem V. Ageev
395278e637
ADD: Dependabot (#1913) 2024-10-13 18:16:19 +03:00
rich2014
44f5493321 FIX: focused state of the cell when calling OnDrawCell() 2024-10-13 23:03:22 +08:00
rich2014
45f448f99c UPD: enable XAttr change monitoring, eg. Finder Tag Changed 2024-10-13 22:03:53 +08:00
rich2014
82eb373ee7 ADD: draw Finder Tags as Decorative Icons in BriefView mode 2024-10-13 21:18:43 +08:00
rich2014
1478a5eea4 ADD: improve OnCellDraw setting in ColumnView mode 2024-10-13 18:42:39 +08:00
rich2014
4509e71249 ADD: draw Finder Tags as Decorative Icons at FileName Column in ColumnView mode 2024-10-13 18:42:34 +08:00
Alexander Koblov
45f7a74bd5 UPD: Enable elevation under macOS (experimental) 2024-10-13 00:52:26 +03:00
Alexander Koblov
1b39c9b210 FIX: Elevation - Verify child/parent process under macOS 2024-10-13 00:35:34 +03:00
Alexander Koblov
3469361f2a FIX: Elevation - EAGAIN error code processing 2024-10-13 00:35:34 +03:00
Alexander Koblov
9cf517b4e7 UPD: Italian language file 2024-10-12 21:55:50 +03:00
Alexander Koblov
d174021001 UPD: German language file 2024-10-12 21:46:55 +03:00
Alexander Koblov
13abc11239 FIX: Hang on TServerListnerThread.Destroy 2024-10-12 20:57:21 +03:00
rich2014
ad44f75025 ADD #1265: active Edit shortcut for Sharing, eg. Command+C / Command+V 2024-10-12 19:02:05 +08:00
rich2014
6ff4d166b5 FIX: refresh Favorite Finder Color Tags Menu View in ContextMenu on old macOS version 2024-10-12 19:01:43 +08:00
rich2014
ea812adf0d UPD: zh_TW language updated 2024-10-11 19:41:00 +08:00
rich2014
5d886afbca UPD: zh_CN language updated 2024-10-11 19:27:10 +08:00
rich2014
a69813350f UPD: i18n for Finder Tag Menu 2024-10-11 19:20:35 +08:00
rich2014
36aed0e126 FIX: Initialize WidgetSet in advance 2024-10-11 19:06:16 +08:00
rich2014
697f88ddcb UPD: add const for Finder Menu Item in ContextMenu on macOS 2024-10-11 19:02:09 +08:00
rich2014
cbb4b2fa5b UPD: optimize memory release in ContextMenu on macOS 2024-10-11 19:01:41 +08:00
rich2014
95be3520aa ADD: dynamically update caption of Finder Menu Item in ContextMenu on macOS 2024-10-11 19:01:18 +08:00
rich2014
00163720f1 ADD: add Favorite Finder Color Tags Menu View to ContextMenu on macOS (clickable) 2024-10-11 00:12:34 +08:00
rich2014
97149bfbf5 ADD: add Favorite Finder Color Tags Menu View to ContextMenu on macOS (showing only, not clickable yet) 2024-10-10 23:11:52 +08:00
Alexander Koblov
c0b4c5521f FIX: Get current icon theme name 2024-10-09 20:36:17 +03:00
Alexander Koblov
2ef5b6c33d UPD: German language file 2024-10-08 20:13:50 +03:00
j2969719
99829590d9
ADD: MultiArc - IgnoreString support (#1881) 2024-10-08 08:23:01 +03:00
VenusGirl❤
ec5c977d2d
UPD: Korean language file doublecmd.ko.po (#1904) 2024-10-08 08:16:25 +03:00
j2969719
f9a5214df4
FIX: Tooltip (#1905) 2024-10-07 23:26:30 +03:00
j2969719
d62505b057
ADD: MultriArc - comment parsing (#1880) 2024-10-07 20:01:30 +03:00
rich2014
2cce7e3845 ADD: get Favorite Finder Tags 2024-10-07 23:17:51 +08:00
rich2014
638f4a7997 UPD: refactor Finder Tag related code to separate Model and UI 2024-10-07 21:35:07 +08:00
j2969719
0110f2b639
UPD: MultiArc - fill size props for mafFileNameList (#1882) 2024-10-07 08:30:01 +03:00
Alexander Koblov
7d85724eeb UPD: German language file 2024-10-06 23:13:24 +03:00
Alexander Koblov
1bf48d63dd FIX: Labels and panels background color 2024-10-06 20:06:44 +03:00
Alexander Koblov
3fc2fa3428 FIX: Labels background color (issue #1885) 2024-10-06 00:21:41 +03:00
Alexander Koblov
87ae081b9b FIX: TKASCDEdit - ReadOnly flag 2024-10-05 21:37:43 +03:00
Alexander Koblov
f018766903 FIX: Compiling 2024-10-05 19:17:30 +03:00
Alexander Koblov
c13e3a07e6 UPD: Don't show '*' in the tabs list menu (issues #1890, #1784) 2024-10-05 18:40:47 +03:00
kongomongo
5eb2756f09
ADD: Make cMaxStringItems configurable (and rename it to gMaxStringItems) (#1867) 2024-10-05 15:38:40 +03:00
Alexander Koblov
56611a51ca FIX: Pack using hidden archivers 2024-10-05 15:32:10 +03:00
j2969719
d51ac676f4
ADD: MultiArc - Show as normal files option (#1860) 2024-10-05 14:57:15 +03:00
Alexander Koblov
66dedd742c FIX: Panels background color (issue #1889) 2024-10-05 13:53:47 +03:00
Alexander Koblov
f5a67b9883 FIX: Panels background color (issue #1889) 2024-10-05 13:38:25 +03:00
rich2014
04babd85e2 FIX #1887: the background color of the button panel 2024-10-05 12:46:59 +08:00
j2969719
1271cd1a68
ADD: MultiArc - AskHistory support (#1838) 2024-10-04 20:44:44 +03:00
rich2014
61b3f9cae3 FIX #1885: the background color in fFileProperties 2024-10-04 23:45:04 +08:00
rich2014
6394f21656 FIX #1885: the background color of the button panel in fFileProperties and fCheckSumVerify 2024-10-04 22:59:10 +08:00
rich2014
6c24641cd5 FIX: the issue when no item in the list is selected in TfrmCheckSumCalc #1817 2024-10-04 21:45:24 +08:00
rich2014
d067998bed ADD: support Finder Tag - step 23: better compatibility with macOS 11- NSTableView style 2024-10-04 21:15:38 +08:00
rich2014
53086dbf8c ADD: support Finder Tag - step 22: change to case insensitive 2024-10-04 20:30:29 +08:00
rich2014
5f3ea44844 ADD: support Finder Tag - step 21: add to context menu 2024-10-04 20:08:22 +08:00
rich2014
b5af91a15b ADD: support Finder Tag - step 20: add support for macOS 11- 2024-10-04 20:03:29 +08:00
rich2014
6a99fd2ebb UPD: zh_TW language updated 2024-10-03 14:23:49 +08:00
rich2014
27e4b32d30 UPD: zh_CN language updated 2024-10-03 14:09:59 +08:00
rich2014
7acc44c2c6 UPD: i18n for new control in Modern Form style (ulng) 2024-10-03 14:09:18 +08:00
rich2014
0b102f7897 UPD: i18n for new control in Modern Form style 2024-10-03 00:49:49 +08:00
Alexander Koblov
ea75da6f0b Revert "UPD: FTP - assign connection remote path as virtual drive root (issue #1665)"
This reverts commit 67c5d3a2b1.
2024-10-01 21:45:53 +03:00
Alexander Koblov
c42011485b ADD: Drag and drop - option to move instead copy (fixes #271) 2024-10-01 21:44:14 +03:00
rich2014
432f7edd29 ADD: support Finder Tag - step 19: add filename label 2024-10-02 00:46:29 +08:00
Alexander Koblov
dabd5fbdc2 ADD: Play sounds using GStreamer under Linux/FreeBSD 2024-09-30 20:19:55 +03:00
j2969719
df4c16a213
FIX: Unix attr color (#1871) 2024-09-29 22:56:35 +03:00
Alexander Koblov
ef94d8327b ADD: Play sounds using SDL2 under Linux/FreeBSD 2024-09-29 20:16:46 +03:00
rich2014
9c26a1cd5e ADD: Modern Form Style - add compare/sync/edit control for macOS 11+ 2024-09-29 23:05:49 +08:00
rich2014
5291ed3c35 ADD: Modern Form Style - "Full Disk Access" button for macOS 11+ 2024-09-29 21:13:38 +08:00
rich2014
bc6e961a0d ADD: support Finder Tag - step 17: UI is more consistent with Finder 2024-09-29 20:34:24 +08:00
Alexander Koblov
67c5d3a2b1 UPD: FTP - assign connection remote path as virtual drive root (issue #1665) 2024-09-29 14:55:14 +03:00
rich2014
7f1fb46919 ADD: support Finder Tag - step 17: Enter key to confirm 2024-09-28 23:06:41 +08:00
Alexander Koblov
480f7f6181 FIX: Remove ScrollWidth (issue #1817) 2024-09-27 20:31:07 +03:00
Alexander Koblov
3293676910 FIX: SFTP - execute command in the current directory 2024-09-27 18:28:42 +03:00
Alexander Koblov
d298af4453 FIX: Reset busy flag on abort 2024-09-27 18:25:36 +03:00
rich2014
fc6c26f151 ADD: support Finder Tag - step 16: the editing text that is exactly the same as the token can be retained in the filter list 2024-09-26 21:31:09 +08:00
rich2014
f32ab111d6 ADD: support Finder Tag - step 15: remove duplicate tags 2024-09-26 21:30:30 +08:00
rich2014
c4b07ba6dd ADD: support Finder Tag - step 14: update token by setObjectValue(), avoid multiple updates caused by modifying text content 2024-09-26 21:30:13 +08:00
Alexander Koblov
ab74407105 UPD: Slovak language file (fixes #1862) 2024-09-25 22:29:34 +03:00
Alexander Koblov
76eecf639c ADD: SyncDirs - display compare by content operation progress 2024-09-25 22:06:27 +03:00
Skif-off
731cf1cfb0
ADD: Sound notifications: enable/disable feature; environment variables in paths. (#1866) 2024-09-25 20:12:07 +03:00
Alexander Koblov
a0eac93139 FIX: History - save a last active file when open archive 2024-09-25 20:09:44 +03:00
rich2014
6f8f46b058 ADD: support Finder Tag - step 13: make editor and filterList automatically resize 2024-09-25 23:43:09 +08:00
rich2014
c75b3b2716 ADD: support Finder Tag - step 12: improve font and const 2024-09-25 22:01:01 +08:00
j2969719
9a290fd289
UPD: MultiArc - When ExtractWithoutPath is not supported unpack file by file into a tempdir. (#1850) 2024-09-25 11:44:15 +03:00
bovirus
0261d283f4
UPD: Improve installer script (#1852) 2024-09-24 21:19:36 +03:00
VenusGirl❤
9a7768549d
UPD: Korean language file doublecmd.ko.po (#1861) 2024-09-24 21:01:58 +03:00
rich2014
1bfec1424c FIX: color in Filter List of Finder Tag Edit Panel 2024-09-24 23:28:56 +08:00
rich2014
2b8ec129ed ADD: support Finder Tag - step 12: improve FilterList UI & Interactivity 2024-09-24 22:11:42 +08:00
rich2014
e1336aa137 ADD: support Finder Tag - step 11: select token by Mouse 2024-09-24 20:52:12 +08:00
rich2014
967dcff2c3 ADD: support Finder Tag - step 10: select token by Keyboard 2024-09-24 19:54:56 +08:00
Alexander Koblov
e906196a37 UPD: Load Double Commander icon from resources 2024-09-23 20:43:27 +03:00
rich2014
0d38c4e9f0 ADD: support Finder Tag - step 8: dynamically update filter lists 2024-09-24 00:26:24 +08:00
Alexander Koblov
466cca2851 FIX: SyncDirs - template with exclude directories 2024-09-23 19:01:43 +03:00
Alexander Koblov
5adb793286 FIX: Reset mouse state (after using extra buttons) 2024-09-23 18:50:33 +03:00
rich2014
69196478bc ADD: support Finder Tag - step 8: add filter list view to Edit Panel 2024-09-23 22:33:41 +08:00
Alexander Koblov
62dd19e08b FIX: Synchronize directories - the vertical scroll bar will not update the content of the list view when dragged with the mouse (fixes #1855) 2024-09-22 22:10:15 +03:00
Alexander Koblov
483bbef8db FIX: Don't show virtual folders 2024-09-22 13:59:09 +03:00
Alexander Koblov
81af12959d FIX: Access Violation when open TAR archive (fixes #1849) 2024-09-22 13:08:58 +03:00
rich2014
c470b315a6 ADD: support Finder Tag - step 7: fix the issue about text selection 2024-09-22 16:32:47 +08:00
rich2014
4807910fd7 ADD: support Finder Tag - step 6: improve in dark mode 2024-09-21 23:59:18 +08:00
Skif-off
11d29e883e
FIX: RemoveQuotation: Skip spaces when removing quotation without splitting into arguments (Unix-like OS). (#1843) 2024-09-21 14:55:49 +03:00
rich2014
1b7a57f97c ADD: support Finder Tag - step 6: improve tag UI (color/size/RoundRect) 2024-09-21 16:51:35 +08:00
j2969719
931341c272
FIX: MultiArc - Use FixExeExt if the path to the fallback executable is specified. (#1847) 2024-09-20 23:47:12 +03:00
Alexander Koblov
e32c0398f3 FIX: The function "Show Occupied Space" does not distinguish between 0-size directories and non-accessible directories (issue #1846) 2024-09-20 20:55:56 +03:00
rich2014
fe369a3749 ADD: support Finder Tag - step 5: add/delete/save tags 2024-09-20 23:40:58 +08:00
rich2014
0604dcb6c7 ADD: support Finder Tag - step 4: get all tags from finder database, enable tag color 2024-09-20 21:11:02 +08:00
rich2014
1a9bbd1626 ADD: support Finder Tag - step 3: prepare for tag color 2024-09-20 19:03:43 +08:00
Alexander Koblov
5a76864932 UPD: German language file 2024-09-19 22:30:42 +03:00
Alexander Koblov
b0297748ab ADD: DialogAPI - Read/write a complex properties 2024-09-19 22:19:07 +03:00
Alexander Koblov
1da73f2809 FIX: Viewer - Ctrl+End (go to file end) goes incorrect (fixes #817) 2024-09-19 20:44:51 +03:00
Alexander Koblov
792e73b463 ADD: Better hotkey conflict detection (issue #1841) 2024-09-19 20:40:05 +03:00
rich2014
8f922a5408 ADD: support Finder Tag - step 2: show tags (without color) 2024-09-19 23:55:25 +08:00
rich2014
cbadb275d4 ADD: support Finder Tag - step 1: Modern Form Style skeleton 2024-09-19 21:20:37 +08:00
j2969719
960cbad7fb
UPD: Progressbar state (#1834)
* UPD: Don't show text and don't make the progressbar normal when testing archive or if ProcessDataProc didn't touch it.
2024-09-19 08:41:55 +03:00
Alexander Koblov
f9c2c136ae ADD: Create directory - option to disable auto-complete (fixes #1494) 2024-09-18 22:16:52 +03:00
Alexander Koblov
0a5de71113 ADD: DialogAPI - CreateComponent function 2024-09-18 21:44:13 +03:00
Alexander Koblov
c0c13d5e17 FIX: FileIsUnixExecutable function result with zero size file 2024-09-18 21:08:48 +03:00
Alexander Koblov
9bb9d0f9bc FIX: Disable workaround with Lazarus >= 3.2 2024-09-18 20:37:36 +03:00
Alexander Koblov
210959a833 ADD: DialogAPI - SetProperty/GetProperty functions 2024-09-17 20:21:32 +03:00
j2969719
1c6a71258c
ADD: MultiArc - FallBackArchivers (#1837) 2024-09-17 00:07:21 +03:00
Alexander Koblov
fa9bf4e35b UPD: Allocate space using an independent property 2024-09-16 23:56:50 +03:00
Alexander Koblov
f462a30d51 FIX: Free Pascal >= 3.0 compatibility 2024-09-16 21:08:32 +03:00
rich2014
a5bc7dfcca UPD: zh_TW language updated for Modern Form Style 2024-09-15 20:23:20 +08:00
rich2014
83d6e44848 UPD: i18n for the folder name in Modern Form style 2024-09-15 19:31:20 +08:00
rich2014
8e5ddb0d7d UPD: zh_CN language updated for Modern Form Style 2024-09-15 17:31:04 +08:00
rich2014
b96e143afe UPD: i18n for Modern Form style 2024-09-15 17:18:44 +08:00
Alexander Koblov
27aec457a7 UPD: XXH3-128 speed up 2024-09-14 21:35:28 +03:00
Alexander Koblov
73fe99b49c FIX: Build under non-macOS 2024-09-14 18:32:38 +03:00
Alexander Koblov
013c11bf3c UPD: XXH3-128 hash extension 2024-09-14 18:24:44 +03:00
Alexander Koblov
ea8c59fed2 ADD: XXH3-128 hash algorithm (#issue #1779) 2024-09-14 17:38:01 +03:00
rich2014
1a136c7754 UPD: preparing for modern Form style i18n 2024-09-14 19:22:08 +08:00
j2969719
9e26803e53
UPD: Hide invalid props (#1832) 2024-09-13 20:31:43 +03:00
rich2014
bb504347c8 UPD: improve the Icon in 'Go' ToolBarItem Menu 2024-09-13 21:48:37 +08:00
rich2014
2448a1002d UPD: Modern Form Style - simplify the code for CommandMenuItem 2024-09-12 23:49:18 +08:00
rich2014
3c8fa58a14 ADD: Option+Space ShortCut for macOS QuickLook 2024-09-12 22:25:54 +08:00
rich2014
4c93d2f80b UPD: Lazarus running on macOS 11- supported to compile Double Commander 2024-09-12 20:42:37 +08:00
rich2014
276c76a512 ADD: trash path in Modern Form Style - Common Dir 2024-09-11 21:44:25 +08:00
rich2014
38c7971ea1 UPD: optimize APP Icon
1. use the Icon in the APP bundle instead of the Icon in the LCL Project
2. cancel setting setRepresentedURL to avoid blank Icon in titlebar
2024-09-10 23:38:15 +08:00
rich2014
436669e5d5 ADD: Modern Form Style - Common Dir control for macOS 11+ 2024-09-10 23:31:29 +08:00
rich2014
12f387d9c1 ADD: Modern Form Style - reorganize the layout of some controls for macOS 11+ 2024-09-10 23:04:13 +08:00
rich2014
378d3e829d ADD: Modern Form Style - Search Files Control for macOS 11+ 2024-09-10 23:03:55 +08:00
rich2014
d4268a4c84 ADD: Modern Form Style - Terminal Control for macOS 11+ 2024-09-10 23:03:35 +08:00
rich2014
35ff5616f3 ADD: Modern Form Style - Quick Look Panel Control for macOS 11+ 2024-09-10 23:03:19 +08:00
rich2014
29cc734aaa FIX: fix the filepath that need escaping 2024-09-10 23:03:04 +08:00
rich2014
352c0168db ADD: Modern Form Style - Menu Control for macOS 11+ 2024-09-10 00:31:18 +08:00
rich2014
2a15152286 ADD: Modern Form Style - Show Infol In Finder Control for macOS 11+ 2024-09-10 00:22:56 +08:00
rich2014
ef764c8ae9 ADD: Modern Form Style - Reveal In Finder Control for macOS 11+ 2024-09-10 00:22:05 +08:00
rich2014
cc0bb25644 ADD: Modern Form Style - Refresh Control for macOS 11+ 2024-09-09 16:12:45 +08:00
rich2014
0033be0732 ADD: Modern Form Style - MultiName Control for macOS 11+ 2024-09-09 16:12:40 +08:00
rich2014
d2882db5ee ADD: Modern Form Style - AirDop Control for macOS 11+ 2024-09-09 16:12:36 +08:00
rich2014
9310362d06 FIX #1819: TfrmMain.NSServiceMenuGetFilenames may be called before the FileView is fully created on macOS 13+ 2024-09-09 09:56:55 +08:00
rich2014
22783fa3d2 ADD: Modern Form Style - Swap Panels Control for macOS 11+ 2024-09-09 01:10:46 +08:00
rich2014
a2f339fb24 ADD: Modern Form Style - Share Control for macOS 11+ 2024-09-09 00:31:46 +08:00
rich2014
e8b4058d84 UPD: on Cocoa, change the return type of NSServiceMenuGetFilenames() from TStringList to TStringArray 2024-09-09 00:30:52 +08:00
Alexander Koblov
d7bbc55b20 UPD: Polish translation 2024-09-08 19:23:21 +03:00
Skif-off
d575e6a708
ADD: Lua - ExpandVar, GetPluginField, GoToFile (DC); ExpandEnv, FileSetTime, GetFileProperty, RemoveDirectory (SysUtils) (#1810) 2024-09-08 13:41:53 +03:00
rich2014
8114032450 ADD: Modern Form Style - ShowMode Group Item Control for macOS 11+ 2024-09-08 02:10:33 +08:00
rich2014
8dfa4a52f9 ADD: Modern Form Style - Horz/Vert Split Toogle Button for macOS 11+ 2024-09-08 02:10:09 +08:00
rich2014
c05b9e6a66 ADD: Modern Form Style - Tree View Toogle Button for macOS 11+ 2024-09-08 02:08:55 +08:00
rich2014
d011b40705 ADD: Modern Form Style infrastructure for macOS 11+ 2024-09-08 02:07:57 +08:00
Alexander Koblov
b99af5fc32 FIX: Set focus by eight mouse button (Qt) 2024-09-07 13:21:57 +03:00
Alexander Koblov
a489af1a7c FIX: Extend cell width if text is not fitting into column under Qt (issue #1811) 2024-09-07 13:21:57 +03:00
Alexander Koblov
65b46ae819 FIX: Wrong text decoding in internal differ tool (fixes #1816) 2024-09-07 01:29:04 +03:00
Alexander Koblov
718d279ea7 UPD: Speed up checksum calculation 2024-09-06 23:55:48 +03:00
Alexander Koblov
7d644055cd UPD: KAScrypt - clean up 2024-09-04 20:23:43 +03:00
Alexander Koblov
855fbfe8f8 UPD: BLAKE3 - synchronize asm-code with upstream 2024-09-04 20:16:06 +03:00
Alexander Koblov
c159f39a8a FIX: Drive list - non-letter hotkeys (Windows) 2024-08-27 21:30:10 +03:00
Alexander Koblov
3df381014e FIX: Overwrite older (fixes #1786) 2024-08-26 00:15:41 +03:00
rich2014
de5e1d44e0 UPD: adapt macOS APP Menu related code to the new version of Lazarus/Cocoa 2024-08-22 21:08:42 +08:00
Alexander Koblov
9f5efd0547 FIX: Swapping panels causes the drive name in the inactive panel to be inconsistent (fixes #1723) 2024-08-21 17:22:19 +03:00
Alexander Koblov
a1402335f2 ADD: mbFileGetTime function 2024-08-21 14:00:02 +03:00
Alexander Koblov
81616d392e UPD: Hungarian translation (fixes #1758) 2024-08-16 23:04:06 +03:00
Alexander Koblov
e60cfd00a3 FIX: Build macOS releases 2024-08-15 22:16:03 +03:00
Alexander Koblov
82e33bb641 UPD: Differ - use new mbFileIsText function 2024-08-14 20:47:21 +03:00
Alexander Koblov
12528b977c ADD: Viewer - don't use code mode with binary files (issue #1778) 2024-08-14 20:40:09 +03:00
Alexander Koblov
72481da2ea ADD: mbFileIsText function 2024-08-14 20:35:10 +03:00
Alexander Koblov
1812ed6e47
FIX: Build macOS snapshots 2024-08-13 08:23:22 +03:00
Alexander Koblov
1ee7a6b2b8 FIX: Viewer - Incorrect selection offset after search in Text mode (issue #1755) 2024-08-12 21:31:51 +03:00
Alexander Koblov
fcca7ac789 ADD: Show system (root) drive under macOS (fixes #1640) 2024-08-11 15:09:32 +03:00
Alexander Koblov
fa88664159 ADD: Use arrow-down/up to rename next/previous file in list when renaming (feature #1147) 2024-08-09 22:36:32 +03:00
Alexander Koblov
1a6b8338af UPD: Relocate some Linux specific code 2024-08-03 16:12:41 +03:00
Alexander Koblov
06af97c346 FIX: Range check error 2024-08-02 21:21:58 +03:00
Alexander Koblov
fefa77a1b0 ADD: Feature [0002306] Notification about the end of a long running operation (step 2) 2024-07-31 20:34:43 +03:00
Alexander Koblov
27849c0dcd ADD: Feature [0002306] Notification about the end of a long running operation (step 1) 2024-07-30 23:58:53 +03:00
Alexander Koblov
a07d47b1c5 ADD: Play sound unit 2024-07-30 20:27:52 +03:00
Alexander Koblov
fcbdf75482 Revert "FIX: SevenZip - password dialog priority"
This reverts commit 0aef56bc46.
2024-07-29 22:07:32 +03:00
Alexander Koblov
048a8511a5 UPD: Use DirHistoryCount with context menu only 2024-07-29 22:05:22 +03:00
rich2014
8d886d686d UPD: Uniform Type Identifiers framework supported on x86_64
use -weak_framework instead of linkframework
2024-07-29 22:48:35 +08:00
Alexander Koblov
f3d000321f ADD: Navigation through directory global history menu 2024-07-27 14:28:34 +03:00
Alexander Koblov
0092c7afa7 ADD: Make DirHistoryCount configurable (fixes #1736) 2024-07-25 15:00:05 +03:00
Alexander Koblov
f21aa9cc86 FIX: Don't reload file list on brightness level of inactive panel change (fixes #1760) 2024-07-23 13:23:01 +03:00
Alexander Koblov
74e742c26b FIX: Don't show dark mode settings under old Windows versions (fixes #1760) 2024-07-23 13:15:11 +03:00
rich2014
30336f33c0 FIX: set MACOSX_DEPLOYMENT_TARGET=10.11 in create_packages.mac to keep it consistent with other scripts
extractdwrflnfo didn't support 10.5
2024-07-18 20:51:00 +08:00
Alexander Koblov
752d3c9f23 FIX: Zip - crash on file replace with some .tar archives (fixes #1744) 2024-07-14 14:43:20 +03:00
xBZZZZ
661859913c
FIX: IntToStrTS when ThousandSeparator is NUL (#1738)
also simplify IntToStrTS (smaller, less variables)
2024-07-11 20:31:06 +03:00
Alexander Koblov
06a5cc8fa2 UPD: Don't hide folders with system attribute under Windows (fixes #1741) 2024-07-07 13:10:54 +03:00
Alexander Koblov
e650495a5a UPD: Use LC_CTYPE to determine locale under Linux 2024-07-06 13:20:43 +03:00
Alexander Koblov
7e2421de3e FIX: Cmd key named as Winkey on DC for macOS (fixes #1733) 2024-07-06 13:17:00 +03:00
rich2014
900b369d5c UPD: detect Encoding by the first 4KB in Viewer, keep consistent with the Editor 2024-07-03 23:11:55 +08:00
Alexander Koblov
6f44e95e14 FIX: FileAllocate function 2024-07-01 20:20:55 +03:00
rich2014
4f4c53dcb1 UPD: encoding name mapping for Chinese, Japanese, and Korean in MyDetectCodePageType() 2024-07-01 22:32:24 +08:00
rich2014
dc2d77a5bf Fix: subtle synchronization issue related to Grids in DisplayFileListChanged() 2024-07-01 22:09:07 +08:00
Alexander Koblov
c4ae646f00 FIX: Don't use pre-allocation of disk space on the FAT32 under Linux (fixes #1739) 2024-06-30 14:31:54 +03:00
Alexander Koblov
005b798a92 FIX: Disk toolbar width 2024-06-28 20:27:53 +03:00
Alexander Koblov
55da32615a FIX: Mouse cursor action indicators graphical issues (fixes #1729) 2024-06-27 20:19:11 +03:00
Alexander Koblov
aad26e8f14 UPD: Don't change disk toolbar size and position according to file panels splitter 2024-06-26 19:44:39 +03:00
Alexander Koblov
2782b26b07 UPD: Publish TKASToolPanel.OnResize property 2024-06-24 20:44:07 +03:00
Alexander Koblov
6270e0920a ADD: Open images in the Microsoft Photos application under Windows 11 (build >= 22631) 2024-06-24 20:38:27 +03:00
Alexander Koblov
8422b1b077 ADD: Icons cm_ShowTabsList and cm_MapNetworkDrive 2024-06-21 22:02:14 +03:00
Alexander Koblov
a0a9221472 FIX: Access denied checking (fixes #1725) 2024-06-21 21:54:26 +03:00
Alexander Koblov
2a57395f58 ADD: SyncDirs - stop compare by content 2024-06-21 21:49:09 +03:00
Skif-off
f822e0751b
ADD: SyncDirs: 'Unknown' filter (#1728) 2024-06-21 21:37:31 +03:00
Alexander Koblov
ce960e0774 UPD: About - link colors 2024-06-20 20:50:13 +03:00
Alexander Koblov
e410909169 FIX: System language detection (issue #1724) 2024-06-20 18:04:07 +03:00
Alexander Koblov
ecb6bd85e9 UPD: Language files 2024-06-19 21:21:24 +03:00
Alexander Koblov
6e187ef760 ADD: Map Network Drive command (fixes #1720) 2024-06-19 21:15:27 +03:00
Alexander Koblov
cd3746da5e ADD: Don't show extensions for special items 2024-06-19 19:54:33 +03:00
Alexander Koblov
8c857bd6d2 FIX: Project file 2024-06-19 19:46:07 +03:00
Alexander Koblov
caae56af3e ADD: UnRAR - more accurate time support 2024-06-16 15:09:09 +03:00
Alexander Koblov
d0f9193461 ADD: Zip - more accurate time support (fixes #1700) 2024-06-16 15:06:02 +03:00
Alexander Koblov
1b9671eda7 ADD: Wcx-plugins - more accurate time support 2024-06-16 15:03:29 +03:00
Alexander Koblov
573515e601 FIX: Mount drive 2024-06-16 13:25:48 +03:00
Alexander Koblov
24edd85df6 UPD: Use TFileTimeEx type 2024-06-16 12:41:02 +03:00
Alexander Koblov
035cee8d76 FIX: Allow negative Unix-time (issue #1700) 2024-06-15 12:55:12 +03:00
Alexander Koblov
dde35d68dd UPD: Use TFileTimeEx type 2024-06-15 12:43:21 +03:00
Alexander Koblov
80d4477cc0 UPD: UnRAR - RARHeaderDataEx type 2024-06-14 22:37:06 +03:00
Arkanoid1973
1780ca370d
UPD: French translation (#1712) 2024-06-14 20:31:10 +03:00
Alexander Koblov
f996c38bed FIX: Renaming through the context menu in place stopped working (fixes #1711) 2024-06-14 20:28:23 +03:00
Alexander Koblov
fca1db719a UPD: Release workflow 2024-06-12 13:39:02 +03:00
VenusGirl❤
4094688e42
UPD: Korean language file doublecmd.ko.po (#1709) 2024-06-11 21:33:24 +03:00
Arkanoid1973
4b978d231e
UPD: French translation (#1708) 2024-06-11 20:47:42 +03:00
Alexander Koblov
eb05d249ce ADD: Go highlighter 2024-06-11 20:39:55 +03:00
Alexander Koblov
4c4a425a52 FIX: Russian language file 2024-06-10 20:16:08 +03:00
rich2014
0f2e388a29 FIX: mouse Scroll Lines limit in Options (min=1 and max=0 before, not follow LCL specifications) 2024-06-10 14:16:45 +08:00
Alexander Koblov
193dc62a3a FIX: Delete-window auto-size (fixes #1667) 2024-06-09 18:30:34 +03:00
Alexander Koblov
ce4eb5ebb0 FIX: Open/Save dialogs all files filter 2024-06-09 11:50:15 +03:00
Alexander Koblov
22110c33c7 FIX: Build under Windows (fixes #1702) 2024-06-07 22:41:22 +03:00
rich2014
01c8c0c81b FIX #1680: Internal Viewer crashes on macOS
in FPC 3.2.2, there are some bugs in Iconvert().
use the fixed Iconvert() instead of the FPC version on macOS.
2024-06-02 01:28:35 +08:00
Alexander Koblov
044706b658 FIX: Wrong default path for rar extension in WCX plugin for macOS (fixes #1697) 2024-06-01 13:53:10 +03:00
Alexander Koblov
a56d313b34 FIX: Deleting is extremely slow under KDE (issue #812) 2024-05-29 21:03:24 +03:00
Alexander Koblov
64c0ae2933 UPD: Viewer - multi-byte encoding list 2024-05-29 20:59:52 +03:00
Alexander Koblov
a2da252b19 ADD: Viewer - show text in the selected single-byte encoding in the hex, dec and bin modes (fixes #1674) 2024-05-28 21:59:46 +03:00
rich2014
3a72a90799 ADD: #1424 Dock Menu item "New Window" i18n 2024-05-28 22:58:03 +08:00
rich2014
cdf070569b ADD: Dock Menu item "New Window" on macOS 2024-05-28 22:36:07 +08:00
rich2014
93e4fafb3a UPD: zh_CN language updated 2024-05-28 00:22:08 +08:00
Alexander Koblov
520e337f7f FIX: Dark mode - don't cache theme data (issue #1238) 2024-05-27 18:08:16 +03:00
Alexander Koblov
519d4c4c41 FIX: Dark mode - multiple rows of tabs 2024-05-27 18:08:16 +03:00
rich2014
5fadb85903 UPD: simplify APP menu related codes with new version of Lazarus 2024-05-27 22:53:53 +08:00
rich2014
2a8513c243 UPD: "Services" was changed to reference the language pack of LCL 2024-05-27 22:48:47 +08:00
rich2014
5c38b38460 UPD: lclstrconsts.*.po updated from lazarus/lcl/languages
it needs to be updated for menu title i18n on macOS
2024-05-27 22:46:01 +08:00
Alexander Koblov
a404e2ffe7 FIX: Right-click on the smartphone icon (fixes #1647) 2024-05-25 17:29:54 +03:00
Alexander Koblov
92b83bfb0d UPD: Snapshots workflow 2024-05-25 14:41:20 +03:00
Alexander Koblov
1286c4fc42 FIX: Mark unsupported variable-width encodings 2024-05-25 13:56:09 +03:00
Alexander Koblov
c0ff9250bf FIX: Copy extended attributes when move files (fixes #1670) 2024-05-23 21:13:04 +03:00
Alexander Koblov
4ae5fc08b2 UPD: FTP - disable unavailable option 2024-05-21 23:09:06 +03:00
Alexander Koblov
84f1a960b1 FIX: FTP - Access violation if you try to "Quick connect" when you are already connected (fixes #1664) 2024-05-21 23:06:43 +03:00
Alexander Koblov
3fb10a1a5b UPD: Belarusian language file 2024-05-21 23:05:38 +03:00
Alexander Koblov
afc3a9fc9b UPD: FTP - clean up 2024-05-20 23:21:50 +03:00
Alexander Koblov
28b2254601 ADD: FTP - protocol drop-down list (issue #1604) 2024-05-20 23:13:54 +03:00
Jozef Gaal
f633ea144c
UPD: Slovak language file (#1649) 2024-05-20 22:15:03 +03:00
Mihaly Nyilas
a6a0398111
UPD: Hungarian translation (#1591) 2024-05-20 22:14:14 +03:00
Alexander Koblov
6f9218adcb FIX: Wfx-plugins - don't allow forbidden symbols in the plugin name (issue #1655) 2024-05-20 21:45:50 +03:00
Alexander Koblov
28152ec7f9 FIX: FTP - opens incorrect path when quick connection used (issue #1654) 2024-05-20 21:40:05 +03:00
Alexander Koblov
01cc57a338 FIX: FTP - don't print an error when not necessary (fixes #1656) 2024-05-20 20:38:57 +03:00
Alexander Koblov
e83d6a320d ADD: Debian source package build script 2024-05-19 14:55:12 +03:00
Alexander Koblov
d2416cc2a4 FIX: FTP - detect encoding before getting current directory 2024-05-19 13:48:08 +03:00
Alexander Koblov
4763aaa86e ADD: SSH+SCP - open current directory when remote directory is not specified 2024-05-15 20:30:11 +03:00
Alexander Koblov
832462f36a ADD: Wcx-plugins - don't show file time for files with zero time (fixes #1634) 2024-05-11 16:50:59 +03:00
Alexander Koblov
508d8c9ada FIX: FTP - possible buffer overflow 2024-05-11 14:47:35 +03:00
Alexander Koblov
65e72c0d31 FIX: Packing shows "Copying" instead of "Packing" (fixes #1626) 2024-05-09 19:22:06 +03:00
Alexander Koblov
94d501e320 ADD: Base64 - don't show original file size, it is unknown (issue #1630) 2024-05-09 17:50:59 +03:00
Alexander Koblov
024b0d632f ADD: WCX-plugins - Don't show zero file size when size is unknown 2024-05-09 17:46:50 +03:00
Alexander Koblov
159a91ab61 ADD: Base64 - display a packed size 2024-05-09 12:59:31 +03:00
Alexander Koblov
8ea19a565c FIX: DialogBoxParam function 2024-05-05 00:32:40 +03:00
Alexander Koblov
fb40c7c4a9 ADD: SFTP - open current directory when remote directory is not specified 2024-05-04 15:21:08 +03:00
Alexander Koblov
4cdf3f0e6c FIX: Run in terminal option default value (fixes #504) 2024-05-04 13:33:39 +03:00
Alexander Koblov
a19d3c3ad5 FIX: Multiarc copy Copying dialog shows incorrect speed and time remaining on the first copy start (fixes #1609) 2024-05-04 12:48:30 +03:00
Alexander Koblov
6fc5d04149 FIX: Multiarc does not update the "Copying" dialog with "From" / "To" information on the start of the archive extraction (fixes #1606) 2024-05-04 00:00:53 +03:00
Alexander Koblov
f92077f4e2 UPD: Unrar library (fixes #1592) 2024-05-03 22:37:07 +03:00
Alexander Koblov
c96e552037 FIX: Thousands separator in file size does not respect the system setting (fixes #1602) 2024-05-02 21:02:41 +03:00
Alexander Koblov
b6621eeb75 ADD: Homebrew libraries path to run-time libraries search path (issue #227) 2024-05-02 20:16:27 +03:00
Alexander Koblov
ddd1dd1377 UPD: Don't execute MS Photos with elevation 2024-05-02 18:07:36 +03:00
Alexander Koblov
dae59469ce FIX: Default button height under non macOS 2024-05-02 18:05:21 +03:00
Alexander Koblov
344b8eb21f DEL: Unused units 2024-05-01 20:30:55 +03:00
Alexander Koblov
61a1b24712 FIX: Case sensitive "cd" command (fixes #1577) 2024-05-01 20:29:22 +03:00
Alexander Koblov
d0c00d792e ADD: Open images in the Microsoft Photos application using WinRT APIs 2024-05-01 17:09:43 +03:00
rich2014
4f0eb9bc9e FIX #1593: height of some Buttons on macOS (refer to the implementation in TfrmButtonForm) 2024-05-01 18:53:09 +08:00
Alexander Koblov
693f0883cb FIX: FitFileName function under Qt and Lazarus 3.x 2024-04-28 19:19:15 +03:00
rich2014
69ab554ba5 FIX: background color of some Buttons (issue #1593) 2024-04-28 20:51:40 +08:00
Alexander Koblov
6099cdc228 FIX: Multiple b64 registration in plugins (fixes #1598) 2024-04-27 22:17:05 +03:00
Alexander Koblov
68a12f8e7a FIX: Terminal settings has wrong default path to Terminal.app (fixes #1595) 2024-04-27 00:20:50 +03:00
Alexander Koblov
0afd35e6fd UPD: Debian control file 2024-04-20 13:18:50 +03:00
Alexander Koblov
39d7cecdbc FIX: Label font color 2024-04-20 12:52:07 +03:00
Alexander Koblov
d2bef610d8 FIX: MacPreview - open only supported file types (issue #1481) 2024-04-18 21:35:10 +03:00
Alexander Koblov
c4c8e69189 FIX: Viewer - zoom image 2024-04-18 17:56:07 +03:00
Alexander Koblov
8725b8ceac FIX: Cannot delete a file from .tar.bz2 archive (fixes #1582) 2024-04-16 17:58:01 +03:00
Alexander Koblov
5a48d0b603 ADD: Ability to handle long paths for zip archiver (issue #1581) 2024-04-15 20:43:54 +03:00
Alexander Koblov
44abcdeb4a FIX: Lazarus 3.99 compatibility 2024-04-12 00:00:06 +03:00
Lars The
629473c426
UPD: Reorder special folders names (#1573)
Cosmetic rearrangement of the different special folder names for better understanding of the source code.
2024-04-11 21:53:33 +03:00
Alexander Koblov
f7333011bb FIX: Access violation on Tab - Close All Tabs (fixes #1570) 2024-04-11 21:17:24 +03:00
Alexander Koblov
e751c2ded2 FIX: Rebuild multiarc.ini (fixes #1568) 2024-04-10 21:21:38 +03:00
Alexander Koblov
ef9ae898a0 FIX: Rename folder using same name but different capitalization (fixes #1569) 2024-04-10 20:50:34 +03:00
Alexander Koblov
73059633f0 UPD: Italian language file 2024-04-09 21:14:24 +03:00
Alexander Koblov
2128ec073e UPD: Don't show unavailable context menu items (issue #1564) 2024-04-09 21:07:49 +03:00
Alexander Koblov
0bed1bda2d UPD: Zip - speed up .zip creation 2024-04-09 20:56:13 +03:00
Alexander Koblov
1ee04fc7c1 FIX: Create new column set identifier when save as 2024-04-08 22:09:42 +03:00
Alexander Koblov
f4da7688ba FIX: Default column set identifier 2024-04-08 20:38:24 +03:00
Alexander Koblov
cde5faedf4 FIX: System language detection under macOS (fixes #1560) 2024-04-08 18:20:05 +03:00
Alexander Koblov
6e413a96dc FIX: Warnings 2024-04-06 13:38:58 +03:00
Alexander Koblov
e4a5db79db ADD: Haiku install script 2024-04-06 12:58:20 +03:00
Alexander Koblov
fea28f382b ADD: Capability to set custom decimal separator 2024-04-04 21:17:36 +03:00
xBZZZZ
0f1f582578
FIX: Use cmem unit before cthreads unit (#1553) (#1553) 2024-04-02 20:35:06 +03:00
Alexander Koblov
17c4b7f460 FIX: Disable auto-refresh when Double Commander window is in the background (issue #606) 2024-03-31 13:13:06 +03:00
Alexander Koblov
69a8ec935f UPD: Optimization, refactoring 2024-03-30 20:58:55 +03:00
Alexander Koblov
b3f06168fa UPD: Enable libheif image reader (issue #1538) 2024-03-30 20:31:36 +03:00
Alexander Koblov
4c78fe6214 FIX: Read AVIF using libheif image reader (issue #1538) 2024-03-30 20:28:50 +03:00
Alexander Koblov
a685367b0c UPD: Disable libheif image reader, it works wrong with some images from https://github.com/link-u/avif-sample-images (issue #1538) 2024-03-30 14:55:15 +03:00
Alexander Koblov
37e268c3f8 FIX: Double Commander crashes when trying to view AVIF image (issue #1538) 2024-03-30 14:55:15 +03:00
Alexander Koblov
070a667cc9 UPD: Store cache in the program directory in portable mode 2024-03-29 21:20:52 +03:00
Alexander Koblov
c6e5f13764 DEL: Obsolete addons (fixes #1545) 2024-03-29 20:43:35 +03:00
Alexander Koblov
b80b584700 UPD: Use Command+Drag&Drop to move under macOS (fixes #1536) 2024-03-29 20:41:54 +03:00
Alexander Koblov
e2cf8a099d FIX: Set focus on mouse click (Lazarus 3.x) 2024-03-27 20:48:25 +03:00
Alexander Koblov
26023ec1ed UPD: Clean up 2024-03-23 18:51:41 +03:00
Alexander Koblov
205dd3cada FIX: List index (0) out of bounds 2024-03-23 16:19:52 +03:00
Alexander Koblov
f9313ed71c FIX: Set focus on mouse click (Lazarus 3.x) 2024-03-23 14:31:57 +03:00
Alexander Koblov
09238c8615 FIX: Disable unavailable options 2024-03-20 20:38:04 +03:00
Alexander Koblov
72ac5aed61 ADD: Viewer - Max code size limit (fixes #1461) 2024-03-20 20:29:49 +03:00
Alexander Koblov
7bfe465048 ADD: cm_Edit - capability to open file under cursor ('cursor' parameter) 2024-03-16 16:22:50 +03:00
Alexander Koblov
1b39937de7 FIX: Lazarus 3.99 compatibility 2024-03-16 13:30:03 +03:00
Alexander Koblov
9db5a98161 UPD: Clean up 2024-03-16 00:22:57 +03:00
Alexander Koblov
c42cd75da9 FIX: Comparing files by content locks up DC (issue #1527) 2024-03-14 23:59:57 +03:00
Alexander Koblov
2f4a17518e UPD: Enable create separate archives when multiply files selected only (issue #1523) 2024-03-13 20:20:00 +03:00
j2969719
ed485edd9d
FIX: FTP - SSH checkbox (#1488) 2024-03-10 14:08:15 +03:00
Alexander Koblov
6c84cb59d6 FIX: Open .tar.gz archives 2024-03-09 12:40:20 +03:00
Alexander Koblov
a8a855d7f3 ADD: Edit path by double click (option) 2024-03-08 22:27:11 +03:00
Alexander Koblov
bcf728ee89 ADD: Zip - optimize .tar.gz handling (fixes #471) 2024-03-05 22:10:09 +03:00
Alexander Koblov
05b14ee6c4 FIX: Zip - open .bz2, .xz and .zst archives 2024-03-04 18:31:21 +03:00
Alexander Koblov
2927a95b64 UPD: Zip - refactoring 2024-03-03 14:35:56 +03:00
Alexander Koblov
1da29f4779 FIX: Different color status bars in Options when using QT version in GTK DE (fixes #1456) 2024-03-02 20:11:28 +03:00
Alexander Koblov
8374f75385 Revert "ADD: Zip - determine tarballs with double extension"
This reverts commit 4fe92d8254.
2024-03-02 19:40:27 +03:00
Alexander Koblov
4fe92d8254 ADD: Zip - determine tarballs with double extension 2024-03-02 17:54:13 +03:00
Alexander Koblov
4e4887033e ADD: Zip - optimize tarballs handling (fixes #458) 2024-03-02 17:49:03 +03:00
Graham Inggs
849760f020
Update clean.sh (#1504)
Clean temporary files plugins/wcx/unrar/lib/rarlng.rsj and plugins/wfx/ftp/lib/ftppropdlg.lfm
2024-03-02 17:32:51 +03:00
Alexander Koblov
184c870c79 UPD: Project files 2024-03-01 23:53:33 +03:00
Alexander Koblov
2e0343433d FIX: Verify after copy under macOS 2024-02-29 23:25:25 +03:00
Alexander Koblov
cdbb2852f6 ADD: Viewer - open file under cursor by Shift+F3 (fixes #1276) 2024-02-29 21:04:29 +03:00
Alexander Koblov
2c94aa22b8 ADD: Verify after copy under macOS 2024-02-27 22:35:08 +03:00
Alexander Koblov
3b8e210e6a FIX: Build with RabbitVCS define 2024-02-27 20:54:21 +03:00
Alexander Koblov
cf2bf7f7f0 UPD: Project files 2024-02-27 20:52:37 +03:00
Alexander Koblov
d5c2c59798 FIX: Unreachable code 2024-02-27 20:35:01 +03:00
Alexander Koblov
e01d5186f7 FIX: Skip button 2024-02-27 20:32:16 +03:00
Alexander Koblov
c3b3644a57 ADD: Skip all when copy/move a file to itself 2024-02-27 20:28:51 +03:00
Alexander Koblov
b1e6a248eb FIX: Directory check condition 2024-02-23 12:46:46 +03:00
Alexander Koblov
46c39f0024 UPD: Exif-wdx - use non-localized field names for storage 2024-02-23 12:17:17 +03:00
Alexander Koblov
74b3763c56 ADD: Allow rename confirm by mouse click outside edit field 2024-02-22 20:11:56 +03:00
Alexander Koblov
4dbffb2748 FIX: Free Pascal 3.2.3 compatibility 2024-02-22 19:53:31 +03:00
Alexander Koblov
b9079e7827 FIX: Differ - binary mode 2024-02-21 19:48:11 +03:00
Alexander Koblov
f83d70f253 FIX: Differ - binary mode (wrong memory read) 2024-02-20 19:53:07 +03:00
Alexander Koblov
71725d1bd0 FIX: Differ - text mode modal dialog 2024-02-20 19:45:39 +03:00
Alexander Koblov
2a971d683c ADD: FTP - IPv6 support (issue #1483) 2024-02-17 20:37:09 +03:00
rich2014
1734d761b7 Fix #1484: file permissions of Info.plist 2024-02-17 22:59:27 +08:00
Alexander Koblov
384cac5495 ADD: WMP-plugin - save/restore volume level 2024-02-17 16:56:46 +03:00
Alexander Koblov
b7c4cb1584 ADD: Rust highlighter 2024-02-17 14:50:06 +03:00
Alexander Koblov
cfd166f052 UPD: Greek language file 2024-02-16 22:40:48 +03:00
Alexander Koblov
5229bfc66e UPD: Java script highlighter 2024-02-16 20:31:58 +03:00
Alexander Koblov
d8462d0ec5 UPD: C# highlighter 2024-02-16 19:53:04 +03:00
Alexander Koblov
a5009f63af FIX: Apply color settings 2024-02-13 22:43:55 +03:00
Alexander Koblov
c2804dc2cd FIX: Quick view - initial viewer size 2024-02-11 01:25:12 +03:00
Alexander Koblov
741e55c0ea FIX: Viewer - wrong initial image size and position 2024-02-09 22:03:17 +03:00
Alexander Koblov
d308ae7e30 UPD: Polish language file 2024-02-06 23:10:22 +03:00
Alexander Koblov
4b4c1c13dc UPD: COMMANDER_INI_PATH environment variable value 2024-02-06 22:02:44 +03:00
Alexander Koblov
2215be969b FIX: Viewer - reset regular expression search state 2024-02-06 21:54:04 +03:00
Alexander Koblov
bf4138f198 FIX: Multi-Rename Tool - []] template (issue #1469) 2024-02-05 19:55:54 +03:00
rich2014
2a04efd4db FIX: DefaultFormatSettings needs to be initialized again on macOS (issue #1465) 2024-02-04 21:16:04 +08:00
Alexander Koblov
912420fb32 FIX: Wrong decimal separator (issue #1465) 2024-02-03 19:58:04 +03:00
Alexander Koblov
7adcd8647e FIX: Don't load icon theme twice 2024-02-02 20:52:52 +03:00
Skif-off
a1b3b967b7
ADD: Lua - LazUtf8.DetectEncoding and SysUtils.GetTempName functions (#1464) 2024-02-01 08:40:25 +03:00
Alexander Koblov
3d32638970 FIX: Editor - find/replace switch 2024-01-28 14:41:10 +03:00
Alexander Koblov
c439aac266 FIX: Interface freeze when call directory hotlist with inaccessible network drive (issue #1441) 2024-01-27 17:37:48 +03:00
Alexander Koblov
8b4d9a068e FIX: ExpandAbsolutePath function (fixes #412) 2024-01-27 16:23:27 +03:00
Alexander Koblov
0522508448 FIX: ExpandAbsolutePath function (fixes #412) 2024-01-27 15:57:26 +03:00
Alexander Koblov
573441fc15 FIX: Source bitmap is too small 2024-01-27 14:41:29 +03:00
Alexander Koblov
56b24e5765 ADD: Templates menu sorting 2024-01-27 14:37:55 +03:00
Alexander Koblov
e4cdb921d0 FIX: Invalid typecast 2024-01-27 14:36:01 +03:00
rich2014
b5e943d659 FIX #1451: autoplay in MacPreview 2024-01-25 22:43:00 +08:00
Alexander Koblov
b137622398 FIX: Differ - initial line differences colors 2024-01-23 19:59:18 +03:00
Alexander Koblov
77a83234a7 UPD: Use system thousand separator (issue #1449) 2024-01-21 18:41:00 +03:00
Alexander Koblov
8ec446d80e FIX: TUnixFileTime under Windows 2024-01-21 13:39:07 +03:00
Alexander Koblov
192ccfd999 ADD: Extract Zstandard archives with a large dictionary 2024-01-20 14:49:02 +03:00
Alexander Koblov
785ccd8bf2 ADD: COMMANDER_EXE and COMMANDER_INI_PATH environment variables 2024-01-20 14:18:32 +03:00
Alexander Koblov
e350e9b7ff DEL: Debug message 2024-01-18 20:55:20 +03:00
Alexander Koblov
3685bb0a86 FIX: ELayoutException: Position range overflow (issue #769, #1358) 2024-01-18 20:51:01 +03:00
Alexander Koblov
3793a548f7 FIX: ELayoutException: Position range overflow (issue #736) 2024-01-18 20:42:25 +03:00
Alexander Koblov
0aef56bc46 FIX: SevenZip - password dialog priority 2024-01-16 00:13:56 +03:00
Alexander Koblov
8b8e78a00c UPD: Enable overlay icons by default under Unix 2024-01-16 00:02:12 +03:00
Alexander Koblov
57059c125b FIX: Quick View - Access violation 2024-01-15 20:22:02 +03:00
Alexander Koblov
6bbfb62293 FIX: Lua - use lua_isnumber function 2024-01-14 18:20:53 +03:00
Alexander Koblov
889e685389 UPD: Use DebugLn instead WriteLn (issue #361) 2024-01-14 14:34:45 +03:00
Alexander Koblov
39de6b76f5 FIX: Renaming file breaks the visible length of the other file names (fixes #321) 2024-01-14 13:59:59 +03:00
Alexander Koblov
33078fd3dc FIX: Window title with non-english characters (fixes #1442) 2024-01-13 00:42:06 +03:00
Alexander Koblov
285bb31d19 FIX: Bug [0001417] Changed sorting settings aren't applied immediately 2024-01-12 22:01:43 +03:00
Alexander Koblov
434ac259d4 FIX: Skip archive icon when clear system icon cache 2024-01-12 21:47:58 +03:00
Skif-off
cc11730617
ADD: Lua - Dialogs.InputListBox will also return the index of selected item. (#1440) 2024-01-11 06:15:44 +03:00
rich2014
9c7051bb86 FIX #1433: Accelerator key (&) supportted in Menu with new version of Lazarus 2024-01-08 21:49:24 +08:00
VenusGirl❤
7617271824
UPD: Korean language file doublecmd.ko.po (#1434) 2024-01-07 15:52:38 +03:00
rich2014
ecac177983 FIX: memory leaks in Share on MacOS 2024-01-07 13:29:20 +08:00
rich2014
e3c9945296 UPD: "Open with" menu items sorting refactored on macOS 2024-01-07 12:39:41 +08:00
rich2014
64d65252c1 UDP: getOtherAppFromDialog() refactored in uShellContextMenu on macOS 2024-01-07 00:07:09 +08:00
rich2014
b73086ff95 ADD #1430: "Open with" multiple files supported 2024-01-06 23:36:06 +08:00
rich2014
1b3f41012b UPD: replace ExecCmdFork() with LSOpenFromURLSpec() which supports opening multiple files 2024-01-06 22:34:00 +08:00
Alexander Koblov
ec477e54af UPD: German language file 2024-01-05 17:58:13 +03:00
Alexander Koblov
227c802540 UPD: Header painting 2024-01-05 15:34:21 +03:00
Alexander Koblov
b3e2248d8e ADD: Grid line color option 2024-01-05 14:56:11 +03:00
Skif-off
09863ff767
UPD: Russian translation (#1428) 2024-01-05 14:07:19 +03:00
Alexander Koblov
69b20f461f UPD: About dialog 2024-01-05 13:42:46 +03:00
rich2014
a1dd16a8cf UPD: install.txt in dmg for macOS updated 2024-01-05 00:21:14 +08:00
Alexander Koblov
b6ebe3a061 UPD: Language files 2024-01-04 19:15:33 +03:00
Alexander Koblov
fc76f3016c ADD: Show list of all open tabs as a menu 2024-01-04 15:03:20 +03:00
rich2014
0942269b58 UPD: Manually running snapshots script 2024-01-04 00:10:11 +08:00
rich2014
32d712532f UPD: Chinese language file doublecmd.zh_TW.po 2024-01-03 23:57:33 +08:00
rich2014
6adb88ea72 UPD: dmg related scripts updated 2024-01-03 23:48:19 +08:00
rich2014
92456b7880 UPD: create beautiful dmg for macOS 2024-01-03 22:27:53 +08:00
rich2014
e5dd28249d ADD: dmg stuff for macOS 2024-01-03 22:27:53 +08:00
rich2014
986983e9c9 ADD: create-dmg script for macOS 2024-01-03 22:27:53 +08:00
Alexander Koblov
745ae87f4a UPD: Language files 2024-01-03 17:15:40 +03:00
Alexander Koblov
5f16ea304c FIX: Mount point link state (issue #406) 2024-01-03 17:11:59 +03:00
Alexander Koblov
ba24fc8d9a FIX: Mount point bug (fixes #406) 2024-01-03 16:30:08 +03:00
VenusGirl❤
c853cc8eeb
UPD: Korean language file doublecmd.ko.po (#1426) 2024-01-03 13:37:43 +03:00
Skif-off
10830c02ef
UPD: Russian translation (#1427) 2024-01-03 13:36:36 +03:00
Alexander Koblov
794b8e694f UPD: Copyright year 2024-01-02 20:13:37 +03:00
Alexander Koblov
d2bbc98e36 FIX: Alt+Z ambiguous in Polish (fixes #1421) 2024-01-02 19:53:03 +03:00
rich2014
7242b41828 UPD: file format i18n 2024-01-01 00:24:21 +08:00
rich2014
5c842621bd UPD: file format supported in "Other..." dialog 2023-12-31 23:22:01 +08:00
rich2014
80bd221119 ADD: support closing windows with Command+W on macOS 2023-12-31 22:42:34 +08:00
Alexander Koblov
a3ee638979 ADD: Clear system icon cache on file association change 2023-12-30 16:45:16 +03:00
Alexander Koblov
20a161d513 ADD: TStringHashListUtf8.Remove method 2023-12-30 16:35:46 +03:00
Alexander Koblov
0d3d2e7990 FIX: Incomplete thumbnail after auto refresh (issue #1409) 2023-12-30 15:25:56 +03:00
Alexander Koblov
ce720efcfd FIX: Don't cache icons of encrypted files 2023-12-28 22:24:57 +03:00
Alexander Koblov
70fcb79d64 ADD: Scalable folder icon 2023-12-28 18:06:24 +03:00
Alexander Koblov
695ec01ba4 FIX: Default shortcut icons 2023-12-28 18:03:37 +03:00
VenusGirl❤
0cae3b4aef
UPD: Korean language file lclstrconsts.ko.po (#1419)
Correct some spelling and typos
2023-12-26 21:34:27 +03:00
VenusGirl❤
ea6e1b113e
UPD: Korean language file doublecmd.ko.po (#1418)
Correct some spelling and typos
2023-12-26 21:33:42 +03:00
Alexander Koblov
34b882e036 FIX: AddSpecial function (GTK2) 2023-12-26 20:19:23 +03:00
rich2014
c127237193 UPD: debug code removed in TShellContextMenu.FillOpenWithSubMenu() 2023-12-26 21:55:38 +08:00
rich2014
c84e7af695 UPD: Refactor and Simplify menu Delimiter related code 2023-12-26 20:22:12 +08:00
rich2014
cebe949469 UPD: Refactor and Simplify code using CocoaApi instead of Low Level CF Functions in TShellContextMenu.FillOpenWithSubMenu() 2023-12-26 20:17:52 +08:00
rich2014
990501fedd FIX: "Other..." is not added if “Open with" is empty 2023-12-26 20:12:36 +08:00
Alexander Koblov
6b26bf3ddc FIX: Build under Unix 2023-12-26 00:16:16 +03:00
Alexander Koblov
549e8c2550 ADD: Menu translation 2023-12-25 23:36:07 +03:00
Alexander Koblov
9cdef48085 DEL: Obsolete icons 2023-12-25 22:13:48 +03:00
Alexander Koblov
edd65a1abe UPD: Show overlay icons (option behavior) 2023-12-25 22:13:48 +03:00
Alexander Koblov
98fa9d96a2 ADD: BitmapMerge procedure 2023-12-25 22:13:48 +03:00
VenusGirl❤
f16b70c480
ADD: Korean language audioinfo.lng (#1416) 2023-12-25 22:13:23 +03:00
VenusGirl❤
a155953d97
ADD: Korean language file ftp.ko.po (#1415) 2023-12-25 22:12:32 +03:00
VenusGirl❤
f693b23df2
ADD: Korean language file zip.ko.po (#1414) 2023-12-25 22:12:02 +03:00
VenusGirl❤
71ac3ad873
ADD: Korean language file unrar.ko.po (#1413) 2023-12-25 22:11:34 +03:00
VenusGirl❤
b305ddcc31
UPD: Korean language file doublecmd.ko.po (#1412)
Correct all mistranslated errors and complete translation of added untranslated strings
2023-12-25 22:10:43 +03:00
VenusGirl❤
dd3c5e3054
UPD: Korean language file lclstrconsts.ko.po (#1411) 2023-12-25 22:09:26 +03:00
rich2014
2471e90557 ADD: "Other..." added to "Open with" on macOS 2023-12-26 00:17:31 +08:00
rich2014
4573198ba4 UPD #1301: "Open with" menu item ordered, keep consistent with Finder 2023-12-25 23:26:26 +08:00
rich2014
1e9a0bb736 UPD: enable DisplayName on macOS, eg. LSCopyDisplayNameForURL() in "OpenWith" ContextMenu 2023-12-25 22:13:11 +08:00
Alexander Koblov
872078e178 UPD: Highlight active tab (issue #1351) 2023-12-24 15:44:41 +03:00
Alexander Koblov
0fefd265c3 UPD: Highlight active tab (issue #1351) 2023-12-24 15:25:09 +03:00
Alexander Koblov
7635906a13 ADD: Install instruction (macOS) 2023-12-24 14:37:25 +03:00
Alexander Koblov
3ba096d853 UPD: DialogAPI - DialogBoxParam function 2023-12-23 23:58:09 +03:00
Alexander Koblov
5c863fcd2e UPD: Project file (required packages versions) 2023-12-23 23:45:44 +03:00
Alexander Koblov
ff93132469 DEL: Obsolete icon 2023-12-23 22:57:47 +03:00
Alexander Koblov
43bf9df753 FIX: List index out of bounds 2023-12-23 22:55:15 +03:00
Alexander Koblov
4f7eb489a3 FIX: Access violation 2023-12-23 15:23:40 +03:00
Alexander Koblov
cae3081623 ADD: Quick View - status bar popup menu 2023-12-23 14:10:19 +03:00
Alexander Koblov
0ed4d7436a FIX: Division by zero 2023-12-23 13:22:31 +03:00
Alexander Koblov
29ebd0850b UPD: Language files 2023-12-22 22:21:47 +03:00
Alexander Koblov
ed6e5e94b9 ADD: Viewer - Plugins menu 2023-12-22 22:20:58 +03:00
Alexander Koblov
a896af9641 FIX: Windows XP compatibility 2023-12-22 20:54:35 +03:00
Alexander Koblov
dfbfb2d351 UPD: Lazarus version 2023-12-22 20:49:45 +03:00
rich2014
f11073847b UPD: UPD: jump to Home directory instead of Exe directory after decteting the driver unmounted, Keep it consistent with unmouting in DC 2023-12-22 23:39:04 +08:00
Alexander Koblov
021fe137a1 FIX: Update tree view options (hidden objects) 2023-12-21 23:55:27 +03:00
Alexander Koblov
c01d0c0336 UPD: Application bundle icon 2023-12-21 20:05:24 +03:00
rich2014
a50a39b4b7 FIX: the issue that Drive Name changes cannot be automatically updated.
replace kqueue with FSEvent, keep consistent with file monitoring technology.
completely remove dependence on kqueue now.
2023-12-22 00:46:26 +08:00
rich2014
9d7a07b50a ADD: class TSimpleDarwinFSWatcher added 2023-12-21 01:07:01 +08:00
rich2014
2e5b4845de Fix: crash on startup, introduced by 919f3a4, cthreads/cmem should be the first unit 2023-12-21 01:05:52 +08:00
rich2014
1e38a54f66 UPD #1289: change to be case insensitive in Drive List on MacOS 2023-12-21 00:41:31 +08:00
VenusGirl❤
ebbc60642a
Update doublecmd.iss (#1398) 2023-12-20 18:42:04 +03:00
Alexander Koblov
50e61222c3 FIX: Shift+Drag icon from main toolbar to middle toolbar error (fixes #1403) 2023-12-20 18:19:10 +03:00
Alexander Koblov
fb22e6ef95 UPD: Use SafeLoadLibrary function 2023-12-20 18:17:28 +03:00
Alexander Koblov
919f3a4e18 UPD: Initialize error mode early (issue #473) 2023-12-20 18:16:40 +03:00
Alexander Koblov
fe02b0adc8 UPD: Application bundle icon 2023-12-19 21:03:40 +03:00
rich2014
bb2a2a7575 FIX: DragDrop issue when switching APP by Command+Tab on MacOS 2023-12-20 00:18:59 +08:00
Alexander Koblov
211a9b894e FIX: Show macfuse drives (issue #1046) 2023-12-17 22:08:56 +03:00
VenusGirl❤
52c0b84d65
Update lclstrconsts.ko.po (#1397)
Korean update
2023-12-17 22:08:21 +03:00
Alexander Koblov
71d735b2df UPD: Speed up file copying and moving with verify (fixes #1000) 2023-12-17 21:15:29 +03:00
Alexander Koblov
6429138092 ADD: Highlight active tab (issue #1351) 2023-12-17 13:48:10 +03:00
Skif-off
bd9285a1db
ADD: SyncDirs: 'DateTimeFormat' parameter (#1396) 2023-12-17 01:03:52 +03:00
Alexander Koblov
be9ccaa59e FIX: Zip - Don't set attributes when extract symbolic links (fixes #1393) 2023-12-16 14:43:10 +03:00
Alexander Koblov
a3783c6e42 FIX: Release package name format 2023-12-16 13:29:31 +03:00
Alexander Koblov
217222c196 UPD: German language file 2023-12-14 20:41:05 +03:00
rich2014
5fc72aa950 UPD: Simplified Chinese translation 2023-12-15 00:13:56 +08:00
rich2014
3fc926159e UPD: Share to 'Share...' on MacOS 2023-12-14 23:43:56 +08:00
rich2014
b0f249691c UPD: ListToNSArray() refactored to be consistent with ListToNSUrlArray() 2023-12-14 20:01:16 +08:00
rich2014
0cea3e61bd UPD: showMacOSSharingServiceMenu() refactored 2023-12-14 19:59:55 +08:00
rich2014
7b0923c1f7 FIX: memory leaks in Share on MacOS 2023-12-14 19:52:51 +08:00
Alexander Koblov
a6cdf056fc FIX: Bug [0002348] Cannot open empty zip files 2023-12-13 20:29:23 +03:00
Alexander Koblov
fcaa6a5ee8 UPD: Language files 2023-12-13 20:21:38 +03:00
rich2014
a2872814e3 ADD: ContextMenu "Share" i18n 2023-12-13 23:02:43 +08:00
rich2014
0c3f996e0e ADD: Share ContextMenu supported on MacOS 2023-12-13 20:23:37 +08:00
Alexander Koblov
8d11b30b5c UPD: FTP - Component name 2023-12-12 22:04:49 +03:00
Alexander Koblov
5669554329 UPD: Unrar - MsgChoiceBox function 2023-12-12 22:00:35 +03:00
Alexander Koblov
1fdccb4e36 UPD: DialogAPI - MsgChoiceBox function 2023-12-12 21:58:34 +03:00
Alexander Koblov
9bc15f97b2 ADD: DialogAPI - TSynEdit control messages 2023-12-12 20:54:30 +03:00
Alexander Koblov
e9d43cf414 FIX: FTP - Show file properties dialog 2023-12-11 19:38:25 +03:00
Alexander Koblov
f0320f65ce ADD: FTP - Show file properties dialog 2023-12-10 22:42:29 +03:00
Alexander Koblov
1d3f9bdd83 ADD: FTP - Show file overwrite dialog (remote copy) 2023-12-10 19:10:33 +03:00
Alexander Koblov
8883b6936a ADD: FTP - copy files between remote directories (SSH) 2023-12-10 18:57:14 +03:00
Alexander Koblov
66bc5720c5 FIX: Quick View - view file with same name and different path in flat view mode 2023-12-10 13:08:17 +03:00
Alexander Koblov
8834eb44e7 UPD: German language file 2023-12-09 14:51:45 +03:00
Alexander Koblov
0f6cf04319 ADD: Unrar - Show error message when Rar executable not found (fixes #1388) 2023-12-09 14:48:03 +03:00
Alexander Koblov
dfa30dbf62 UPD: INI file highlighter - hash sign comments (minimal Lazarus version) 2023-12-09 00:52:26 +03:00
Alexander Koblov
ca1bf8c4b0 FIX: Custom columns - Load inactive mark color (fixes #1389) 2023-12-08 19:50:24 +03:00
Alexander Koblov
47fd6c736b FIX: File not found exception 2023-12-05 19:58:07 +03:00
Alexander Koblov
0f062a7138 FIX: Drag&Drop into PowerPro 2023-12-05 00:16:15 +03:00
Alexander Koblov
766792120e UPD: Wfx-plugin header 2023-12-04 23:08:06 +03:00
Alexander Koblov
7c398cfca6 UPD: KAScrypt description 2023-12-04 22:42:12 +03:00
Alexander Koblov
950c479527 UPD: Rename DCPcrypt to KAScrypt 2023-12-04 20:25:15 +03:00
Alexander Koblov
74fcee4467 ADD: INI file highlighter - enable hash sign comments 2023-12-03 19:57:36 +03:00
Alexander Koblov
91b57011ee FIX: Build under 32 bit 2023-12-03 17:03:38 +03:00
Alexander Koblov
acf3d13b64 FIX: Drag-and-dropping a picture (JPG, PNG, ...) from Firefox to Double Commander changes the type to BMP (fixes #1383) 2023-12-03 14:46:38 +03:00
Alexander Koblov
93f57286d3 FIX: HTTP Browser plugin compatibility 2023-12-03 14:46:38 +03:00
Alexander Koblov
822bb09f8f ADD: Editor - disable save action with read-only file (fixes #1379) 2023-12-03 12:22:18 +03:00
Alexander Koblov
7720dd970e ADD: FileIsReadOnly function 2023-12-03 12:17:07 +03:00
Alexander Koblov
a0c19151b5 FIX: Hangs when cannot open/create file with elevation (issue #1379) 2023-12-02 23:19:36 +03:00
Skif-off
4cbf094658
UPD: Russian translation (#1382) 2023-12-02 21:24:07 +03:00
Alexander Koblov
02edc2c392 UPD: Language files 2023-12-02 19:04:15 +03:00
Alexander Koblov
fef6ce8dc2 UPD: Language files 2023-12-02 18:13:21 +03:00
Alexander Koblov
a509abc40d UPD: Prepare GTK3 support 2023-12-02 18:08:58 +03:00
Alexander Koblov
3998581673 FIX: Range check error 2023-12-02 15:41:12 +03:00
Alexander Koblov
99b821e879 UPD: Refactoring 2023-12-02 13:12:36 +03:00
Alexander Koblov
5cb86ee55b FIX: Default hash file format (issue #1183) 2023-12-01 20:29:34 +03:00
Alexander Koblov
cc19b745ae ADD: Capability to choose hash file format (fixes #1183) 2023-11-30 22:56:05 +03:00
rich2014
84c5074511 Fix #1350: Access violation in hot keys options dialog 2023-11-29 23:00:59 +08:00
Alexander Koblov
fc91f7c954 FIX: Quick View - load next file with plugins 2023-11-28 19:53:35 +03:00
Alexander Koblov
4b6bfe3345 FIX: Save last error 2023-11-28 19:51:34 +03:00
Alexander Koblov
0d6d4d4e94 FIX: Differ - Invalid type cast (fixes #1374) 2023-11-27 20:17:01 +03:00
Alexander Koblov
d067079e0a FIX: Bug [0001778] WLX plugin Imagine lock current directory 2023-11-26 16:22:06 +03:00
Alexander Koblov
9e97bc10d5 ADD: FTP - SSH-agent authentication (issue #1133) 2023-11-26 13:27:56 +03:00
Demetrius flavious
4d8b7b8b16
FIX: Shell execute for parent directory (fixes #1354) (#1364) 2023-11-25 17:32:50 +03:00
Alexander Koblov
d34dfa7339 UPD: German language file 2023-11-25 16:56:01 +03:00
Alexander Koblov
cad91f4210 UPD: Disable debug messages (fixes #1370) 2023-11-24 20:41:13 +03:00
rich2014
b43710b786 FIX: Lazarus/Lcl/Cocoa compatibility 2023-11-22 01:50:43 +08:00
Alexander Koblov
539c6215d7 FIX: Close button autosize (fixes #1368) 2023-11-21 20:21:18 +03:00
Alexander Koblov
3ef7774bdf UPD: Clean up 2023-11-20 19:57:13 +03:00
Alexander Koblov
6443c5b638 FIX: Drawing icons without alpha channel 2023-11-20 18:20:25 +03:00
Alexander Koblov
1a1f2e58f0 UPD: Read version number from project file 2023-11-19 21:32:24 +03:00
Alexander Koblov
f7b4475541 FIX: Lazarus 3.0 compatibility (workaround) 2023-11-19 21:14:24 +03:00
rich2014
79900ca898 FIX: Lazarus/Lcl/Cocoa compatibility 2023-11-19 22:01:32 +08:00
Alexander Koblov
7281a8d6ec FIX: Build under Windows 2023-11-19 15:35:18 +03:00
Alexander Koblov
0d97682dc6 FIX: Plugins under Haiku x86_64 (workaround) 2023-11-19 14:50:42 +03:00
Demetrius flavious
2c58fbdc14
ADD: custom directory separator when copying file names to clipboard (#1352) 2023-11-19 11:18:12 +03:00
Alexander Koblov
30c36c5de0 FIX: FTP - Warning about TLS support 2023-11-18 16:31:12 +03:00
Alexander Koblov
6a57688876 FIX: Internal editor F4 edit crash (issue #1358) 2023-11-18 13:39:44 +03:00
Alexander Koblov
ceeffbaef6 ADD: FTP - OpenSSL 3 support 2023-11-18 11:19:30 +03:00
Alexander Koblov
e3d7ac1a0f UPD: Synapse library 2023-11-18 11:18:07 +03:00
Alexander Koblov
6fe082419e ADD: FTP - Print TLS details 2023-11-17 20:33:30 +03:00
Alexander Koblov
e39d537380 ADD: FTP - reuse ssl session for data connection (GnuTLS) 2023-11-17 20:30:47 +03:00
Alexander Koblov
0c25b15d41 FIX: FTP - Don't load GnuTLS library when other already used 2023-11-16 19:12:29 +03:00
Alexander Koblov
5493a63874 UPD: FTP - Rewrote GnuTLS units 2023-11-16 18:20:23 +03:00
Alexander Koblov
3a2045b399 UPD: FTP - Synapse blcksock unit 2023-11-16 18:11:23 +03:00
Alexander Koblov
072063b8a8 FIX: Viewer - Prevent view directory in the non-local file system 2023-11-15 22:34:06 +03:00
Alexander Koblov
e56beb368f UPD: Set run-time library search path (fixes #276, #1316) 2023-11-15 20:33:24 +03:00
Alexander Koblov
7d70bc3539 ADD: Hotkey for queue button in the confirmation dialogs (fixes #1232) 2023-11-15 18:16:29 +03:00
Alexander Koblov
6e544ccfc7 UPD: FTP - Disable Schannel TLS/SSL (fixes #437) 2023-11-14 21:01:26 +03:00
Alexander Koblov
7168ebf8c8 FIX: Number of different files not updated during the directory comparison (fixes #328) 2023-11-14 20:56:27 +03:00
Alexander Koblov
522e3d507f ADD: Export DC_CONFIG_PATH environment variable 2023-11-14 18:18:56 +03:00
Alexander Koblov
6bb8c1c67f UPD: Set run-time library search path (fixes #276, #1316) 2023-11-14 18:09:03 +03:00
Alexander Koblov
db18ea0f38 FIX: Native dark mode flags (Windows >= 10) 2023-11-13 21:05:11 +03:00
Alexander Koblov
7ed543a1c5 FIX: Don't load same wlx-plugin multiple times 2023-11-13 20:07:12 +03:00
Alexander Koblov
8e155150a9 FIX: Differ shows "identical" on different files (fixes #1338) 2023-11-12 15:15:52 +03:00
Alexander Koblov
c299330174 UPD: Language files 2023-11-11 14:30:08 +03:00
Alexander Koblov
ece8367329 FIX: Differ shows "identical" on different files (fixes #1338) 2023-11-11 14:29:01 +03:00
Alexander Koblov
1705059397 FIX: Crash with libfontconfig under Linux i386 2023-11-06 20:12:35 +03:00
Alexander Koblov
24838d18f3 ADD: TFileSystemWatcher.Features function 2023-11-04 14:19:42 +03:00
Skif-off
38e7edf2cd
ADD: Editor - 'Group Undo' option (#1331) 2023-11-04 13:59:21 +03:00
Alexander Koblov
f5539c640a FIX: Cannot extract symbolic links from ZIP archives (fixes #1332) 2023-11-04 13:55:02 +03:00
Alexander Koblov
d5f3755e61 FIX: Cannot extract symbolic links from ZIP archives (fixes #1332) 2023-11-04 13:24:29 +03:00
Alexander Koblov
bb213486a3 UPD: Unrar - Language files 2023-10-31 20:37:45 +03:00
Alexander Koblov
3b7ddb2524 ADD: Unrar 7 support 2023-10-31 20:34:58 +03:00
Alexander Koblov
8dee95cc1b UPD: mbReadFileToString function 2023-10-31 20:11:44 +03:00
Alexander Koblov
566b1b75e4 ADD: DialogAPI - MsgChoiceBox and DialogBoxParam functions 2023-10-31 20:05:57 +03:00
Alexander Koblov
236c6a143f ADD: Allow to view directories by cm_View (fixes #1323) 2023-10-29 16:56:38 +03:00
Alexander Koblov
4265a6089b FIX: Refresh a file list after file rename in the flat view mode (issue #1322) 2023-10-29 16:12:13 +03:00
Alexander Koblov
76a5f8025b FIX: Access violation on attempt to edit directory in file search results (fixes #949) 2023-10-27 19:41:35 +03:00
Alexander Koblov
5777435901 FIX: Non-integer input using audioinfo Search plugin causes error/crash (fixes #922) 2023-10-27 19:39:20 +03:00
Alexander Koblov
d4742bcb40 FIX: About dialog - close button position 2023-10-27 19:36:29 +03:00
Alexander Koblov
d80d94ef3e FIX: About dialog - close button position 2023-10-26 22:11:37 +03:00
Alexander Koblov
585e804c10 UPD: Create hardlink and symlink dialogs 2023-10-25 23:18:28 +03:00
Alexander Koblov
28d13ee123 FIX: Environment variables are case sensitive under Unix 2023-10-25 22:26:35 +03:00
Alexander Koblov
fe32a00340 ADD: Network connect button (fixes #265) 2023-10-25 22:22:41 +03:00
Alexander Koblov
0991a28b23 UPD: Combine files - show dialog at the main form center 2023-10-25 22:10:48 +03:00
Alexander Koblov
0946eb1a47 FIX: Combine files dialog autosize 2023-10-25 21:59:12 +03:00
Alexander Koblov
bea36afb82 UPD: About dialog 2023-10-25 20:23:41 +03:00
Alexander Koblov
6c21e2adb8 FIX: Buttons autosize 2023-10-25 19:32:30 +03:00
Alexander Koblov
25ec4cc253 FIX: Buttons autosize 2023-10-25 19:21:49 +03:00
Alexander Koblov
997407ba22 FIX: Symlink form autosize 2023-10-25 19:05:24 +03:00
Alexander Koblov
3c3f408f70 UPD: GetCurrentIconTheme function 2023-10-23 21:38:31 +03:00
Alexander Koblov
9f1a98a1b8 ADD: Fly desktop environment 2023-10-23 21:30:45 +03:00
Alexander Koblov
d6248457c5 FIX: Save XML-config into symbolic link 2023-10-21 21:53:26 +03:00
Alexander Koblov
7f38508f46 FIX: Save XML-config into symbolic link 2023-10-21 17:03:13 +03:00
Alexander Koblov
63dd485b34 ADD: Set process current directory when execute <?..?> command 2023-10-21 13:21:39 +03:00
Alexander Koblov
fbb03850c5 UPD: Use TempFileSystemFileSource 2023-10-21 01:34:23 +03:00
Alexander Koblov
27f7173c53 FIX: File full path corruption 2023-10-21 00:41:46 +03:00
Alexander Koblov
dec24438eb ADD: Viewer - allow quick view using internal associations with '{!DC-VIEWER}' command 2023-10-21 00:31:54 +03:00
Alexander Koblov
9d9157e6e1 UPD: Viewer - load previous/next file hotkeys 2023-10-20 21:11:53 +03:00
Alexander Koblov
10823479aa ADD: Viewer - SynEdit use editor settings 2023-10-20 20:48:17 +03:00
Alexander Koblov
e3a3e63dba ADD: Viewer - SynEdit use editor settings 2023-10-19 18:18:22 +03:00
Alexander Koblov
2d581148ee ADD: Feature [0001289] Store tabs in a separate config file 2023-10-19 18:13:49 +03:00
rich2014
f6a7835bd7 Fix #1312: Key Event eaten by QLPreviewView 2023-10-15 15:07:39 +08:00
rich2014
f4a5ad5ef0 Fix: Cocoa/TKASPathEdit: call AutoComplete() only when changed by user now 2023-10-14 21:25:13 +08:00
rich2014
41d9b7e830 UPD: SplashForm: simplify Panel using default color, compatible with new version of Lazarus
1. adapt to new version on cocoa
2. the appearance on all platforms remains the same
3. see also: f49aedaf1f
2023-10-14 21:25:13 +08:00
Alexander Koblov
27d7666e45 ADD: Viewer - scroll by up/down/pageup/pagedown/left/right keys when caret disabled 2023-10-14 00:55:18 +03:00
Alexander Koblov
4cf86dd929 FIX: FileSystemWatcher - 'rename' event under Linux 2023-10-13 19:57:31 +03:00
Mihaly Nyilas
2ff00ae905
UPD: Hungarian language file (#1314) 2023-10-11 23:19:29 +03:00
Alexander Koblov
d8bc7ce213 UPD: TXzDecompressionStream.Seek function 2023-10-09 19:45:44 +03:00
Alexander Koblov
a7f80e5fd1 FIX: Range check error (fixes #1292) 2023-10-09 19:36:06 +03:00
Alexander Koblov
493987e2e4 UPD: Don't show menu separator when it's not required 2023-10-09 18:39:38 +03:00
Alexander Koblov
f4c82e3c7a FIX: Crash - configure custom columns (issue #1310) 2023-10-09 18:37:02 +03:00
Alexander Koblov
f586b0c1cc FIX: Wrong rows height 2023-10-08 23:50:26 +03:00
Alexander Koblov
c968b0de67 FIX: ELayoutException: Position range overflow (issue #736) 2023-10-08 17:25:46 +03:00
Alexander Koblov
873d4fcd5c FIX: Build deb_wdx 2023-10-08 16:19:58 +03:00
Alexander Koblov
6ee8e81d6d ADD: Open with other from flatpak sandbox (issue #309)
FIX: Memory leak
2023-10-08 13:01:58 +03:00
Alexander Koblov
dc49a59a9c FIX: Test archive operation progress 2023-10-08 01:24:47 +03:00
Alexander Koblov
bf1a1e61df UPD: Zip - readme.txt 2023-10-07 19:25:59 +03:00
Alexander Koblov
5c0192a445 UPD: Zip - increase buffer size 2023-10-07 19:07:55 +03:00
Alexander Koblov
34841ed2c8 UPD: Better archive file operations progress indication 2023-10-07 18:54:07 +03:00
Alexander Koblov
d0a4cbd864 FIX: Zip - show correct compression progress
ADD: Zip - create .tar.* archives at one step
2023-10-07 18:51:45 +03:00
Alexander Koblov
c7c51230d1 ADD: Zip - show total progress when compress 2023-10-06 20:22:02 +03:00
Alexander Koblov
f89ab9056e ADD: Zip - show total progress when extract 2023-10-06 19:31:23 +03:00
Alexander Koblov
dca8d10726 ADD: Operation progress - show only percent when size unknown 2023-10-06 19:19:32 +03:00
Alexander Koblov
0ec75f36bc FIX: Read image using libturbojpeg library under macOS (fixes #1300) 2023-10-04 20:30:04 +03:00
Alexander Koblov
9c22daae6a FIX: Loading the same Thumbnails multiple times in TThumbFileView (fixes #1295) 2023-10-02 20:11:08 +03:00
rich2014
9bb0aea519 UDP: treat wsFullScreen as Maximized when saving Main Form WindowState 2023-10-01 20:41:05 +08:00
rich2014
bb0f0026b5 UPD: Cocoa: workaround code about WindowState removed by new Lcl/Cocoa version 2023-10-01 20:32:22 +08:00
Alexander Koblov
ad3298dd23 UPD: Don't open X-display under Wayland 2023-09-30 14:02:09 +03:00
Alexander Koblov
dd9704a8a3 ADD: Move file to trash from flatpak sandbox (issue #309) 2023-09-30 11:22:48 +03:00
Alexander Koblov
6a8b3fe1d5 ADD: O_PATH constant 2023-09-30 11:05:44 +03:00
Alexander Koblov
782d208d9b FIX: Build under non macOS 2023-09-29 22:48:18 +03:00
Alexander Koblov
337c6ef4dc FIX: Wrong byte order when read JPEG image using libturbojpeg under macOS (issue #1290) 2023-09-29 22:37:47 +03:00
rich2014
7f5efba427 FIX & UPD #1290: generate thumbnails by system native QuickLook on MacOS 2023-09-29 14:37:09 +08:00
Alexander Koblov
e81933aff0 ADD: Viewer - scroll by up/down keys when caret disabled (fixes #1267) 2023-09-28 23:01:38 +03:00
Alexander Koblov
70262a35d4 FIX: Don't expand a virtual path under Windows 2023-09-28 19:45:56 +03:00
Alexander Koblov
5712b87023 UPD: Use xdg-open to open files from flatpak sandbox (issue #309) 2023-09-28 19:41:39 +03:00
Alexander Koblov
1efe181fd2 FIX: Don't show garbage mounts from flatpak sandbox (issue #309) 2023-09-28 18:26:41 +03:00
Alexander Koblov
ed026035ed UPD: Don't show directory change error on start 2023-09-26 23:36:02 +03:00
Alexander Koblov
aee27d7f2e FIX: Drag&Drop - move file when drop it on the tab by left + right mouse button (fixes #1287) 2023-09-25 20:03:16 +03:00
rich2014
cf0fd59892 UPD: AutoRefresh: further optimize the processing of sub-directory events
fswatch does not callback with sub-directory events, when no directory has FlatView enabled (most of the time)
2023-09-25 23:08:21 +08:00
rich2014
b40d8f44de UPD #1278: About and Preferences added to AppMenu 2023-09-25 18:40:12 +08:00
rich2014
1f71a393a3 FIX: SplashForm: OnCLose missed before 2023-09-25 18:37:42 +08:00
Alexander Koblov
7abd581bc3 FIX: ShowModal function 2023-09-24 22:19:03 +03:00
Alexander Koblov
ee83513936 UPD: Viewer - don't show print menu when unavailable (fixes #1291) 2023-09-24 21:59:54 +03:00
rich2014
c2d947bf17 Fix #1274: the windows are not correctly enabled after multiple ShowModal() 2023-09-24 23:01:32 +08:00
Alexander Koblov
ce81d4bbde FIX: Find files - search hex sequence 2023-09-23 22:05:30 +03:00
rich2014
8a52783969 Fix: AutoRefresh: compilation issue on Windows and Linux 2023-09-23 22:27:17 +08:00
rich2014
8494d60e8a UPD #1266: AutoRefresh: subdirectory events are only handled in FlatView mode 2023-09-23 21:47:23 +08:00
Alexander Koblov
443fc6d370 FIX: Portable any map graphic format reader 2023-09-22 20:57:01 +03:00
Alexander Koblov
bba5731565 FIX: Sorting files/folders ignores Case sensitivity on Cyrillic names (fixes #1277) 2023-09-21 20:45:20 +03:00
Matej
f78d4171bb
Update lclstrconsts.sl.po (#1261)
Updated Slovenian translation.
2023-09-19 08:04:00 +03:00
Alexander Koblov
4ee3818bb8 FIX: Empty dir size in status bar calculates to -1 (fixes #1268) 2023-09-17 14:52:44 +03:00
Alexander Koblov
5605cc3d8a FIX: ImageMagick 7 compatibility
FIX: Crash on close when ImageMagick not found
2023-09-17 14:47:23 +03:00
Alexander Koblov
d98d27d833 FIX: Drag&Drop - restore selection of active file when start drag with control key pressed 2023-09-14 20:39:25 +03:00
Demetrius flavious
b26aba0b28
Fix: missing 'mbExpandFileName' invocations for 273759d1 for issue #130 (#1259) 2023-09-12 21:20:18 +03:00
Alexander Koblov
e9835c734d ADD: Haiku support 2023-09-09 18:02:33 +03:00
Demetrius flavious
273759d119
Fix: directory change to non-normalized paths - issue #130 (#1061) 2023-09-09 17:19:41 +03:00
Alexander Koblov
0115f01430 ADD: Zip - save password to cache (issue #1254) 2023-09-09 14:55:04 +03:00
Alexander Koblov
f3f6a20fbb FIX: Files associations made in KDE doesn't affect Double Commander (fixes #637) 2023-09-09 13:42:43 +03:00
Alexander Koblov
e2e3ac9031 FIX: Change zip plugin configuration force quits (fixes #1233) 2023-09-09 13:34:21 +03:00
Alexander Koblov
4b16ac8d95 UPD: Language files 2023-09-08 23:03:37 +03:00
Alexander Koblov
7b3df5558d FIX: Quick View - focus wrong control when load file from archive (issue #1254) 2023-09-08 22:43:12 +03:00
Alexander Koblov
8d04bf014d FIX: Wrong background with gtk2 theme Gnome OSX-IV-1.3 (fixes #32) 2023-09-08 21:25:41 +03:00
rich2014
b2129d7790 UPD: remove unnecessary code, and improve MainForm display 2023-09-03 19:22:37 +08:00
rich2014
623185b685 UPD & FIX: handle Splash Form consistently across all platforms, especially on MacOS
1. more Lazarus’ idioms for SplashForm (like Lazarus IDE)
2. SplashForm can be shown correctly on MacOS
3. improved display of SplashForm in Gt2k
4. tested on Win32, Gtk2, Qt5, Cocoa
2023-09-03 19:20:36 +08:00
Matej
6b55aa43f0
Update doublecmd.sl.po (#1248)
This is an update to Slovenian translation. I get an error, when Previewing the changes, but have no idea how to resolve it.
2023-09-02 14:29:59 +03:00
Alexander Koblov
15c1cc8fdf FIX: Viewer find skips first matching occurrence (fixes #1250) 2023-08-31 21:54:01 +03:00
Alexander Koblov
a815a476e6 FIX: Load libheif.dll and it dependencies from the same path 2023-08-31 20:08:51 +03:00
Alexander Koblov
9f2e26306e ADD: Load library from system PATH 2023-08-31 20:07:02 +03:00
Paul Gessos
0fc983fe24
Update doublecmd.el.po until line 4200 (#1247) 2023-08-30 07:14:06 +03:00
Alexander Koblov
65cc9a9597 UPD: Sort icons color 2023-08-19 13:33:27 +03:00
Alexander Koblov
4e98bfd650 ADD: Build snapshots with unrar library 2023-08-18 22:06:14 +03:00
Alexander Koblov
d1d603bcdf ADD: Build snapshots with unrar library 2023-08-18 22:02:06 +03:00
Alexander Koblov
e9172af6ee FIX: Crash with invalid file view type (fixes #1231) 2023-08-18 21:22:08 +03:00
sitiom
4c4ea18ca7
Change Winget Releaser job to ubuntu-latest (#1230) 2023-08-18 08:19:18 +03:00
Alexander Koblov
e663df72d5 FIX: SyncDirs - create target subdirectory (fixes #1227) 2023-08-16 21:17:48 +03:00
Alexander Koblov
33014e2afd FIX: Date & Time formatting in Options default preset cannot get it back if change it (fixes #1225) 2023-08-15 21:39:59 +03:00
Alexander Koblov
7c1296856c FIX: SevenZip - heap corruption 2023-08-15 19:48:22 +03:00
Alexander Koblov
315b3f0e0d FIX: SevenZip - double-free (VT_BSTR) 2023-08-14 19:58:35 +03:00
Alexander Koblov
de65350e17 FIX: cm_AddPlugin - case insensitive pluginst.inf check 2023-08-13 15:18:35 +03:00
Alexander Koblov
27a9940505 UPD: File properties dialog - enable user/group autocomplete 2023-08-12 16:37:10 +03:00
Alexander Koblov
16e028c05f FIX: Folder size within disk images not shown (fixes #1219) 2023-08-12 14:14:37 +03:00
Alexander Koblov
3627522862 FIX: Changing the "Open as" encoding of a newly created file clears text editor (fixes #1001) 2023-08-10 23:32:13 +03:00
Alexander Koblov
6de0f92dcb UPD: File properties dialog - allow manual user/group change 2023-08-10 19:29:06 +03:00
Graham Inggs
10c259525e
Update clean.sh (#1214)
Clean temporary file plugins/wcx/zip/lib/ZipLng.rsj
2023-08-09 16:25:10 +03:00
Alexander Koblov
050945901d UPD: Read version number from doublecmd.lpi 2023-08-08 21:02:23 +03:00
Alexander Koblov
c8c2d0faf8 ADD: Show portable devices in the drive list (issue #1211) 2023-08-07 22:15:22 +03:00
Alexander Koblov
c9186d1e81 FIX: Zip - crash in the options dialog 2023-08-06 18:00:33 +03:00
rich2014
bcef15a228 UPD: asterisk added to the hint to mark the Tab Locked 2023-08-06 09:38:44 +08:00
Alexander Koblov
70bdd45fa4 FIX: Combining to file with one of the part's full name fails with deleting this part (fixes #1198) 2023-08-05 20:09:30 +03:00
rich2014
bc8f7ac3c2 FIX #1195: wrong hint is shown when Mouse Move in the blank of the TabControl 2023-08-05 22:04:25 +08:00
rich2014
421417a09b UPD: hint in TFileViewHeader improved 2023-08-05 21:47:59 +08:00
rich2014
623358eb14 Fix #1187: wrong height of Header in empty TColumnsFileView 2023-08-05 21:42:52 +08:00
Alexander Koblov
85720b46e3 UPD: Install scripts (Windows) 2023-08-05 10:56:46 +03:00
Alexander Koblov
74c15bb648 FIX: Read zero minor version 2023-08-05 00:33:32 +03:00
Alexander Koblov
354eae9bcb FIX: Broken link icon with cm_FlatViewSel 2023-08-04 22:25:48 +03:00
rich2014
c1d4cebee4 Fix: wrong hints of PathLabel 2023-08-04 23:35:57 +08:00
Alexander Koblov
fac7aade70 ADD: Create *.msi package 2023-08-03 23:35:17 +03:00
Alexander Koblov
182981fb0c FIX: [0001897] MSI Installer Does Not Ask for Installation Destination (issue #611) 2023-08-03 23:34:44 +03:00
Alexander Koblov
13f9a14f4f UPD: GVFS - don't unescape drive path 2023-08-02 22:16:48 +03:00
Alexander Koblov
9ed66b26ce FIX: Exif - don't show invalid date 2023-08-02 22:04:43 +03:00
Alexander Koblov
06391ac736 FIX: Unix mode 2023-08-02 20:13:54 +03:00
Alexander Koblov
7beaff2b48 FIX: Publish to WinGet 2023-08-02 20:09:53 +03:00
Alexander Koblov
c6f455c676 ADD: Release workflow (macOS) 2023-08-02 20:07:23 +03:00
rich2014
889d3c705a FIX #1184: Cancel Button in fQuickSearch 2023-08-02 18:26:18 +08:00
Alexander Koblov
d7cbbfac0e UPD: Polish translation 2023-08-01 23:29:27 +03:00
Alexander Koblov
d5255624c6 UPD: Beta version number format 2023-08-01 23:28:08 +03:00
Alexander Koblov
185c437877 UPD: Beta version number format 2023-07-31 20:00:42 +03:00
Alexander Koblov
9ae1cbc152 FIX: Exif plugin - detect string 2023-07-31 19:30:01 +03:00
Alexander Koblov
0be7fae2bd UPD: Disable 'last search' button at start (fixes #176) 2023-07-31 19:28:39 +03:00
Alexander Koblov
03483a1044 FIX: Hotkey labels from Keys show up in toolbar hover info tags (fixes #1044) 2023-07-30 13:57:24 +03:00
Alexander Koblov
f036b26454 FIX: Text viewer cannot show text with filesize>=2G (fixes #958) 2023-07-30 00:09:36 +03:00
Alexander Koblov
dd927285d0 FIX: The symbolic link to the directory appears twice during synchronization (fixes #1053) 2023-07-29 23:35:19 +03:00
Alexander Koblov
ef08388b48 UPD: Use GitHub Discussions to suggest a new feature or improvement 2023-07-29 18:34:45 +03:00
Alexander Koblov
b07956b2cf UPD: Lazarus version 2023-07-29 17:13:10 +03:00
Alexander Koblov
de1ca78cc3 FIX: About dialog - crash 2023-07-29 15:33:07 +03:00
Alexander Koblov
274c712458 UPD: German language file 2023-07-29 15:27:42 +03:00
rich2014
ab64636e64 Fix: ESC handle in Ask Dialog 2023-07-26 21:52:24 +08:00
rich2014
ba2c077600 UPD: simplify the reference to NSAPP 2023-07-25 22:04:27 +08:00
rich2014
39b5ed90bc UPD: Cocoa: workaround code about edtCommand removed by new Lcl/Cocoa version 2023-07-23 18:54:22 +08:00
rich2014
8359ee6da1 Fix: ESC handle in About Dialog 2023-07-23 18:32:18 +08:00
Alexander Koblov
2efbd8515c FIX: AudioInfo - don't show invalid 'Track (zero-filled)' field 2023-07-21 12:10:47 +03:00
Alexander Koblov
27e23900bf FIX: AudioInfo - read track number 2023-07-21 11:41:49 +03:00
Alexander Koblov
b9b1e6fc03 FIX: ColorBox vertical spacing 2023-07-21 11:16:30 +03:00
Alexander Koblov
266dd8593a FIX: Build under Haiku 2023-07-20 15:35:25 +03:00
Alexander Koblov
e09a5ad052 UPD: Free Pascal and Lazarus versions 2023-07-20 15:31:01 +03:00
Alexander Koblov
b322c5c0b3 UPD: Version number 2023-07-20 13:49:13 +03:00
Alexander Koblov
3e11343e8b UPD: Language files 2023-07-20 13:32:49 +03:00
Alexander Koblov
8645144181 FIX: Align controls 2023-07-20 13:21:54 +03:00
Alexander Koblov
a35a851291 FIX: Crash in the options dialog 2023-07-20 11:59:53 +03:00
Alexander Koblov
844a067b16 FIX: KASColorBoxButton - disabled font color 2023-07-20 00:40:31 +03:00
Alexander Koblov
6476cee4e1 UPD: File panels colors options page - use KASColorBoxButton 2023-07-19 22:08:39 +03:00
rich2014
22f507f9e8 Fix: dark mode setting compatible with MacOS older than 10.14 2023-07-19 22:39:27 +08:00
Alexander Koblov
07e1f76a4c ADD: PowerShell highlighter - sample source 2023-07-19 16:27:33 +03:00
Alexander Koblov
7ce51f3b2e DEL: Lua - CanonicalOrder and NormalizeNFD functions 2023-07-19 16:27:33 +03:00
Alexander Koblov
353edf1a84 UPD: KASColorBoxButton - optimize preferred size calculation 2023-07-19 16:27:32 +03:00
Alexander Koblov
3d0d88c498 UPD: Tree View Menu Color options page - use KASColorBoxButton 2023-07-19 16:27:32 +03:00
rich2014
e8fc1181a5 ADD: Dark Mode Setting in Colors Dialog by user supported on MacOS 2023-07-19 19:29:39 +08:00
rich2014
ce61424ae6 ADD: dark or light mode set by api on MacOS 2023-07-19 19:28:11 +08:00
rich2014
a4a14fb34b Fix: Dark Mode Setting not saved 2023-07-19 19:24:50 +08:00
Alexander Koblov
e8f7fafdff UPD: KASColorBoxButton - optimize preferred size calculation 2023-07-19 13:20:02 +03:00
Alexander Koblov
abbdbcba27 FIX: Install wcx-plugins with several extensions 2023-07-18 22:08:47 +03:00
Alexander Koblov
49c7afa4fb UPD: Shell file source - disable copy/move operations (they do not work with portable devices) 2023-07-18 22:05:13 +03:00
Alexander Koblov
2fbb593b0c UPD: Language files 2023-07-17 19:47:39 +03:00
Alexander Koblov
ec0bf953dc FIX: Untranslatable string 2023-07-17 19:47:38 +03:00
Skif-off
a47057c850
UPD: Russian translation (#1047) 2023-07-17 19:47:09 +03:00
Alexander Koblov
0ad3eee488 FIX: Execute file with space in the name (Unix) 2023-07-17 13:50:30 +03:00
Alexander Koblov
51445616e5 UPD: About dialog 2023-07-16 20:30:26 +03:00
Alexander Koblov
a32ce24a11 UPD: Language files 2023-07-16 20:20:18 +03:00
Alexander Koblov
9e4973f1c1 UPD: File properties dialog - rearrange file times, rename 2023-07-16 20:17:50 +03:00
Alexander Koblov
32556a9edc FIX: Convert script 2023-07-16 18:28:44 +03:00
Alexander Koblov
1c74b5ebad UPD: Store default configuration files in the separate directory 2023-07-16 16:33:48 +03:00
Alexander Koblov
1c562093ed FIX: Move configuration files when directory already exists 2023-07-16 14:37:48 +03:00
Alexander Koblov
b4ad423371 ADD: Store configuration files in the 'settings' subdirectory (portable mode) 2023-07-16 14:02:41 +03:00
Alexander Koblov
e361d26216 UPD: Move ExtractRootDir function to DCOSUtils 2023-07-16 12:49:02 +03:00
Alexander Koblov
deb2937a95 UPD: Lua - speed optimization 2023-07-15 17:50:42 +03:00
Alexander Koblov
afb865d8ac ADD: Lua - Char library 2023-07-15 17:44:11 +03:00
Alexander Koblov
3d0546e9b9 UPD: KASColorBoxButton - publish some properties 2023-07-15 16:52:53 +03:00
Alexander Koblov
8daa08de29 UPD: File types colors options page - use KASColorBoxButton 2023-07-15 16:28:05 +03:00
Alexander Koblov
0197ad2a7a UPD: KASColorBoxButton - use KASButton 2023-07-15 16:24:18 +03:00
Alexander Koblov
3c6e710446 ADD: KASButton - default size 2023-07-15 15:53:10 +03:00
Alexander Koblov
cf2248470b UPD: KASColorBoxButton - spacing 2023-07-15 15:53:09 +03:00
Alexander Koblov
f2d30ecce0 FIX: Lazarus 3.99 compatibility 2023-07-15 15:31:49 +03:00
Alexander Koblov
8299f5c453 UPD: Portugal translation (fixes #1041) 2023-07-14 23:45:07 +03:00
Alexander Koblov
cef1e497e2 ADD: Create highlighters.xml backup on configuration version change 2023-07-14 20:55:40 +03:00
Alexander Koblov
8f8fa5a062 FIX: Memory leaks 2023-07-14 20:35:59 +03:00
rich2014
580d08db2e Fix: compilation issue with the latest version of Lazarus 2023-07-14 23:19:27 +08:00
Alexander Koblov
3cbe43db6a ADD: Viewer - show auto reload state in the status bar 2023-07-13 20:35:21 +03:00
Alexander Koblov
e525264b32 ADD: FTP - write to log libssh2 error message when authentication failed 2023-07-13 20:30:45 +03:00
Alexander Koblov
fe4d01aa0b FIX: Lua >= 5.3 compatibility 2023-07-12 22:16:58 +03:00
Alexander Koblov
3d4529d1b5 ADD: KASColorBoxButton - allow default color 2023-07-12 20:13:47 +03:00
Alexander Koblov
c6c812fa85 FIX: FTP - Show error when authentication failed
ADD: FTP - Show error when only one key configured
2023-07-12 19:35:14 +03:00
Alexander Koblov
3dc144d2e2 FIX: JSON-Pack utility 2023-07-11 23:03:27 +03:00
Alexander Koblov
39cabbae06 ADD: Convert script - aarch64 support 2023-07-11 22:57:07 +03:00
Alexander Koblov
506dc37944 UPD: Language resource file 2023-07-11 22:54:53 +03:00
Alexander Koblov
97f0941fe2 ADD: Compute signature of TKASColorBox 2023-07-11 22:43:40 +03:00
Alexander Koblov
b635c03750 UPD: Viewer - save image as (default directory and file name) 2023-07-11 21:36:58 +03:00
Alexander Koblov
0795a9e353 UPD: Language files 2023-07-11 21:31:28 +03:00
Alexander Koblov
71eb345989 ADD: Additional color settings 2023-07-11 20:44:24 +03:00
Alexander Koblov
a15f42b182 ADD: KASColorBox and KASColorBoxButton components 2023-07-11 19:32:45 +03:00
Alexander Koblov
28d76913cb UPD: Options dialog initial size 2023-07-09 21:05:24 +03:00
Alexander Koblov
cdff4679e0 UPD: Backup file name 2023-07-09 20:59:52 +03:00
Alexander Koblov
22f40b4864 FIX: Viewer - save image as (save jpeg as new jpeg, save image with upper case extension) 2023-07-09 19:29:32 +03:00
Alexander Koblov
b03d176fa3 ADD: Install plugins from archive via cm_AddPlugin action 2023-07-09 13:45:58 +03:00
Alexander Koblov
56b6f9a035 UPD: Store light and dark color settings separately (step 4) 2023-07-09 11:45:10 +03:00
Alexander Koblov
73823d7694 FIX: Action cm_ToggleFullscreenConsole 2023-07-08 23:29:56 +03:00
Alexander Koblov
60283a3305 ADD: Create doublecmd.xml backup on configuration version change 2023-07-08 20:01:41 +03:00
Alexander Koblov
acd0bab58a ADD: Store light and dark color settings separately (step 3) 2023-07-08 19:31:01 +03:00
Hermholtz
5cd1e33cd2
FIX: Check string length in cm_ToggleSelectionInName (fixes #1030) (#1031) 2023-07-04 08:32:07 +03:00
Alexander Koblov
bbf2e402c4 UPD: Serbian language file 2023-07-02 17:23:51 +03:00
Alexander Koblov
1f5b10c8ad FIX: Use case insensitive compare when necessary (fixes #1029) 2023-07-02 17:04:39 +03:00
Alexander Koblov
1991eb36e2 ADD: Get icon theme name from Qt (fixes #1023) 2023-07-01 13:00:38 +03:00
Alexander Koblov
0dc158b75f ADD: Default JPEG quality option (patch by Skif_off) 2023-06-29 22:42:57 +03:00
rich2014
b8c37ea812 Fix: Cocoa: TKASPathEdit AutoComplete on MacOS 2023-06-25 00:11:48 +08:00
Alexander Koblov
f11df0168b UPD: Exif - convert string date time to TDateTime 2023-06-20 21:10:13 +03:00
Alexander Koblov
1761ce3c67 FIX: Exif - read short string tags 2023-06-19 19:24:59 +03:00
Alexander Koblov
d39cdc867c UPD: Use PIDL in the shell operations 2023-06-19 19:21:42 +03:00
Alexander Koblov
a0a21007dd FIX: Skipping existing files while copying vs estimated remaining time (fixes #1018) 2023-06-17 12:45:06 +03:00
rich2014
3e75dd0515 UPD: Cocoa: LCLCOCOA in TFileViewNotebook.DragDrop() removed by new Lcl/Cocoa version 2023-06-16 06:52:37 +08:00
Alexander Koblov
f058e835f8 FIX: Lazarus 2.3 compatibility 2023-06-15 20:47:43 +03:00
rich2014
2aeda2741c
Fix #1009: Cocoa: Cursor related code removed by new Lcl/Cocoa version (#1017) 2023-06-10 18:57:09 +03:00
Alexander Koblov
756d34e13b ADD: Abort shell operations 2023-06-10 18:36:12 +03:00
Alexander Koblov
fd24b9c490 FIX: Range check error with negative UNIX-time (fixes #1011) 2023-06-08 22:05:46 +03:00
Alexander Koblov
c95db12ac9 FIX: Delete directory operation 2023-06-06 22:18:46 +03:00
Alexander Koblov
c6322a03ee UPD: Use "parsing" name to get objects 2023-06-06 22:01:39 +03:00
Skif-off
9c6c7779af
UPD: dctheme: Add cm_savefiledetailstofile.png, upd cm_flatview.png and cm_flatviewsel.png. (#1008) 2023-06-06 18:33:56 +03:00
rich2014
977abbe1c9
UPD: Cocoa: TCocoaWSCustomComboBoxEx removed by new Lcl/Cocoa version (#1007) 2023-06-06 06:28:26 +03:00
Alexander Koblov
e3ce5e7dfa UPD: Better error checking, refactoring 2023-06-05 21:19:41 +03:00
Alexander Koblov
24a137d660 FIX: Lazarus 2.3 compatibility 2023-06-05 20:42:11 +03:00
Alexander Koblov
8ed520c49b UPD: Show portable device icons 2023-06-05 20:28:32 +03:00
Alexander Koblov
b91de2796c FIX: Show file names with extension 2023-06-05 20:00:35 +03:00
Alexander Koblov
9bb276ea1f UPD: Shell file source root path 2023-06-04 22:08:37 +03:00
Alexander Koblov
402ce8339c UPD: Register shell file source before network 2023-06-04 21:54:22 +03:00
Alexander Koblov
1313993d9a UPD: Don't show change file properties dialog when no properties to change 2023-06-04 20:52:25 +03:00
Alexander Koblov
701100336d ADD: Shell folder file source (computer drive overview) 2023-06-04 15:14:20 +03:00
Alexander Koblov
a9842bc16d FIX: Quick view crash with '..' item 2023-06-01 20:31:26 +03:00
Alexander Koblov
523d93004d FIX: Change owner and group 2023-06-01 20:16:08 +03:00
Alexander Koblov
7cb10120bd FIX: Lazarus 2.3 compatibility 2023-05-29 22:41:15 +03:00
Alexander Koblov
951201dca5 ADD: Multi-rename - remove item capability 2023-05-28 11:49:26 +03:00
Alexander Koblov
6033aa7b57 ADD: Save file details to file action 2023-05-27 11:25:46 +03:00
Alexander Koblov
48865cfec4 FIX: Case-insensitive sorting 2023-05-25 19:09:56 +03:00
Alexander Koblov
bf64771da5 UPD: SynUniHighlighter - clean up 2023-05-24 21:25:35 +03:00
Alexander Koblov
bb843448fb ADD: JSON-Pack utility 2023-05-22 22:46:15 +03:00
Alexander Koblov
94c14dcdf1 UPD: Default highlighters colors file 2023-05-22 22:22:36 +03:00
Alexander Koblov
6d332241cc FIX: Import old highlighters config 2023-05-22 21:14:57 +03:00
Alexander Koblov
42f42f1a37 ADD: Store light and dark color settings separately (step 2) 2023-05-21 22:25:32 +03:00
Alexander Koblov
3380ed4cd9 FIX: Bug [0002452] When opening directories/files on slow drives the wrong item is selected 2023-05-19 21:02:09 +03:00
Alexander Koblov
a4b1d79bfd FIX: Drag&Drop - restore selection of active file when start drag with control key pressed 2023-05-19 20:11:58 +03:00
Alexander Koblov
c250b1412f ADD: TSynAttributes.ToString method 2023-05-16 18:53:39 +03:00
Alexander Koblov
1bbb2fadae ADD: Pass command line arguments 2023-05-15 23:08:27 +03:00
Alexander Koblov
723e7aa8cd UPD: File size format 2023-05-15 23:07:06 +03:00
Alexander Koblov
8593084163 FIX: Confirm rename button (Qt) 2023-05-15 21:56:20 +03:00
Alexander Koblov
afd829613d UPD: Use same size format everywhere 2023-05-15 20:00:03 +03:00
rich2014
89ceb79167
Fix: memory leaks in TfrmFileProperties (#985) 2023-05-15 19:16:42 +03:00
rich2014
5112f21e1d
UPD: notes removed with LCL updated (#984) 2023-05-15 19:16:32 +03:00
Alexander Koblov
b9d56d4890 FIX: Save gradient indicator option 2023-05-14 23:44:47 +03:00
rich2014
91b781861c
FIX: QuickViewPanel: focus wrong control when QuickSearch or QuickFilter (#962) 2023-05-14 21:10:33 +03:00
Alexander Koblov
bec6bf0a09 FIX: Links and media type visibility
ADD: Show creation time under Linux
2023-05-13 13:59:37 +03:00
Alexander Koblov
4fdde40a88 FIX: Viewer - don't activate window on auto reload 2023-05-11 18:21:45 +03:00
Alexander Koblov
624c646142 FIX: Load old colors from doublecmd.xml 2023-05-08 16:44:54 +03:00
Alexander Koblov
4eb3db4aa0 UPD: Colors.json - do not quote object keys 2023-05-08 14:18:43 +03:00
Alexander Koblov
b908cc031c FIX: Crash on colors.json saving 2023-05-07 17:15:18 +03:00
Alexander Koblov
58b1e59967 FIX: Build under Linux 2023-05-07 16:43:46 +03:00
Alexander Koblov
89c7913ba9 ADD: Store light and dark color settings separately (step 1) 2023-05-07 15:09:08 +03:00
rich2014
6f7839398b
FIX: memory leaks in IFileResource.RetrieveProperties() (#979) 2023-05-07 15:06:48 +03:00
rich2014
4ed2ab73c8
UPD: workaround for IME in TCocoaWSCustomComboBoxEx are removed by the update of Lazarus Lcl (issue 40008) (#978) 2023-05-07 15:06:20 +03:00
rich2014
c3d53982ad
FIX: memory leaks in udarwinfswatch (#977) 2023-05-07 12:12:27 +03:00
rich2014
951f4047db
UPD: workaround for IME in fileview (F2) are removed by the update of Lazarus Lcl (issue 40008) (#975) 2023-05-07 12:12:15 +03:00
rich2014
5b7d7a4a8b
UPD: workaround for IME in pathedit are removed by the update of Lazarus Lcl (issue 40008) (#973) 2023-05-06 21:03:07 +03:00
rich2014
3258d4f1ee
FIX: memory leaks in uMyDarwin (#972) 2023-05-06 21:02:57 +03:00
rich2014
0675f4a1c6
FIX: memory leaks in TIconTheme.Create() (#969) 2023-05-06 15:54:24 +03:00
rich2014
359b5e8106
ADD: FileTime: at least millisecond supported on Linux and MacOS (#955) 2023-05-06 15:49:35 +03:00
Alexander Koblov
9d96e3116a FIX: Don't follow cyclic symbolic links 2023-05-06 14:35:25 +03:00
Alexander Koblov
77c81279cb FIX: Viewer - slow navigation with overlong lines (issue #926) 2023-05-06 14:15:08 +03:00
Alexander Koblov
be79194c15 FIX: Possible access violation 2023-05-06 13:59:55 +03:00
Alexander Koblov
464abdd5fb UPD: File properties dialog - don't stretch first column 2023-05-06 13:42:26 +03:00
Alexander Koblov
9759af8ed9 DEL: Duplicate code, Exif reader already registered as WDX-plugin 2023-05-06 13:40:32 +03:00
Alexander Koblov
6246b879eb ADD: SyncDirs - option to disable file mask saving 2023-05-06 12:55:27 +03:00
rich2014
ab06932925
FIX: fswatch sync issue on MacOS (#968) 2023-05-05 20:36:56 +03:00
Alexander Koblov
766954de3a ADD: Get monospace font using libfontconfig (fixes #587) 2023-05-04 22:55:14 +03:00
Oleg
25332b94aa
FIX: MacOS crash in fswatch (#967) 2023-05-04 21:53:25 +03:00
rich2014
c56d1f88e8
FIX #963: AutoRefresh: realpath issue on MacOS (#965) 2023-05-02 14:28:51 +03:00
rich2014
51ca918fab
FIX #539: FileProp Dialog: may refer to unfinished controls in Form creating (#960) 2023-05-01 13:49:52 +03:00
rich2014
25ee5c367f
FIX #954: AutoRefresh: symlink issue on MacOS (#959) 2023-05-01 13:47:44 +03:00
Alexander Koblov
69fe6f35f0 FIX: System file properties dialog timeout 2023-04-30 13:25:02 +03:00
Wes
f733324983
dcpcrypt2.pas : upstream hash fix for large files (#956) 2023-04-30 12:15:28 +03:00
Alexander Koblov
15ba1f1ef6 UPD: File propertis dialog (issue #593) 2023-04-28 12:26:46 +03:00
Alexander Koblov
70e039ee08 ADD: Show unknown user/group as number 2023-04-28 11:39:23 +03:00
Skif-off
56c0e08b7f
UPD: Russian translation (#953) 2023-04-28 11:32:20 +03:00
Alexander Koblov
bd712065ff FIX: Change owner 2023-04-28 11:03:02 +03:00
rich2014
0c0e67d1cd
ADD: CreationTime Column Supported on MacOS (#952) 2023-04-27 17:10:11 +03:00
rich2014
8df9e16896
UPD: LANG: FileProperties translations (#951) 2023-04-27 15:29:00 +03:00
Alexander Koblov
f8fe4b695b FIX: Show creation time under Linux 2023-04-27 15:25:14 +03:00
rich2014
4aaf99db9a
ADD: SetFileProperties Dialog: Creation Time can be modified on MacOS (#944) 2023-04-27 12:15:39 +03:00
rich2014
61928be495
FIX: .gitignore: all "doublecmd" folders are incorrectly ignored (#943) 2023-04-27 11:41:15 +03:00
rich2014
c0e361b6f4
FIX #937: CommandLine text is incorrectly all selected on MacOS (#942) 2023-04-17 20:41:54 +03:00
rich2014
92a24d1666
UPD: ShowFileProperties: show Creation time on MacOS (#939) 2023-04-17 14:27:54 +03:00
Alexander Koblov
83ab4849ca UPD: German language file 2023-04-16 20:11:50 +03:00
Alexander Koblov
2d3e4d6760 FIX: Viewer - SynEdit gutter separator colors 2023-04-16 20:10:29 +03:00
rich2014
55191ab158
UPD: jump to Home directory instead of Root directory after unmounting the driver (#863) 2023-04-16 20:09:12 +03:00
rich2014
aa9ef42524
FIX & UPD: copy file with CreationTime on MacOS (intel CPU supported) (#938) 2023-04-16 16:22:15 +03:00
Alexander Koblov
f39ef47de5 FIX: Memory leak 2023-04-16 13:07:26 +03:00
Alexander Koblov
9bd6e100a7 UPD: Encoding button position 2023-04-16 00:17:31 +03:00
Alexander Koblov
20d1ccd840 ADD: Feature [0001425] Search the contents of files (Alt-F7) in several encodings simultaneously 2023-04-15 23:44:02 +03:00
rich2014
3c48189d0f
UPD: DARWIN: unmount driver (#921) 2023-04-15 20:29:01 +03:00
Alexander Koblov
01c28667f1 FIX: Function ApplyRenameMask works wrong with non-ASCII characters 2023-04-15 11:52:15 +03:00
Alexander Koblov
fdc5110da0 UPD: Workflows 2023-04-15 00:26:13 +03:00
Andrey
91decf00bf
Fix: Sorting after first install and small refactoring (#883) 2023-04-13 20:10:20 +03:00
rich2014
0cebfc8874
FIX: copy file with CreationTime on MacOS (temp patch for intel CPU) (#935) 2023-04-13 20:08:23 +03:00
Alexander Koblov
c4a2d9086d FIX: Last row padding color 2023-04-12 23:11:20 +03:00
Alexander Koblov
382d1e19a5 UPD: Optimize search duplicates by hash (issue #933) 2023-04-12 20:55:13 +03:00
Alexander Koblov
9b49a08ae0 UPD: Optimize search duplicates by hash (issue #933) 2023-04-12 20:34:04 +03:00
rich2014
3fca6107fd
ADD: copy file with CreationTime on MacOS (#932) 2023-04-12 19:36:28 +03:00
Alexander Koblov
0611623c6a FIX: Crash BLAKE2 calculation under macOS using AVX (issue #299) 2023-04-10 21:01:19 +03:00
Andrey
71c025201b
UPD: adding padding for file list in FileView to the bottom and to the right for column right text alignment (#886) 2023-04-09 18:20:15 +03:00
Alexander Koblov
a737ed112a UPD: PowerShell highlighter 2023-04-09 00:08:10 +03:00
Alexander Koblov
09a8813a97 ADD: Simple Power Shell highlighter 2023-04-07 20:55:38 +03:00
Alexander Koblov
293b4c421c FIX: Compiling 2023-04-06 21:52:40 +03:00
Alexander Koblov
79eab5d847 FIX: Differ - find next 2023-04-06 20:22:28 +03:00
Alexander Koblov
29f8b3fd76 ADD: Viewer - allow cm_ShowCaret command in the code view mode 2023-04-06 19:34:01 +03:00
Alexander Koblov
cb10f5758b FIX: Viewer - auto SynEdit mask 2023-04-06 18:54:44 +03:00
Alexander Koblov
92fb7d3e0f ADD: Viewer - force code mode flag 2023-04-06 18:08:09 +03:00
Alexander Koblov
d10ab72d73 ADD: Viewer - new commands hotkeys 2023-04-05 22:44:48 +03:00
Alexander Koblov
ddfb4d6559 ADD: Viewer - go to line command (code viewer mode) 2023-04-05 22:42:00 +03:00
Alexander Koblov
d5f75ac218 FIX: Editor - find next 2023-04-05 21:45:32 +03:00
Alexander Koblov
ef938c58ef ADD: Viewer - syntax highlighting (fixes #300) 2023-04-05 21:45:32 +03:00
rich2014
e92751dd2e
UPD: LANG: zh_CN: translations (#919) 2023-04-05 18:24:31 +03:00
rich2014
35a8964a1e
UPD: LANG: zh_TW: a large number of commonly used translations added and improved (#917) 2023-04-04 20:45:33 +03:00
Alexander Koblov
10795e755e FIX: Fill folder thumbnail background by transparent color (issue #913) 2023-04-03 22:08:55 +03:00
rich2014
6779bc6962
FIX: LANG: zh_CN: translations (#906) 2023-04-02 21:49:40 +03:00
rich2014
45d8e7afd5
UPD: LANG: zh_CN: missing translations added (#904) 2023-04-02 15:53:43 +03:00
Alexander Koblov
f7ed64c03c FIX: Build under macOS 2023-04-02 15:51:57 +03:00
Alexander Koblov
a7c2148857 UPD: WinGet Releaser version 2023-04-02 14:14:54 +03:00
Alexander Koblov
f70bf1b9ef ADD: SystemItemProperties option 2023-04-01 20:10:24 +03:00
iglezz
010170096a
ADD: 'RedirectSection' key support for TC ini (#897) 2023-04-01 11:54:46 +03:00
Alexander Koblov
f8ed9e49b4 UPD: Slovak language file (fixes #892) 2023-04-01 11:52:43 +03:00
iglezz
f2556401eb
fix Ctrl+WheelUp bug when font size = MinValue (#898) 2023-04-01 11:13:30 +03:00
Alexander Koblov
dbf091f593 ADD: Show desktop environment specific file properties dialog 2023-03-30 18:39:41 +03:00
Andrey
a9803b5cfe
FIX: Default color button to bottom and add default to Theeshold color for drive space (#889) 2023-03-27 21:26:41 +03:00
Mansur Lutfullin
4aa732ae54
ADD: Config of default context actions (#856) 2023-03-27 21:19:02 +03:00
rich2014
0d1d537121
FIX: key ESC/RETURN handled in Options Dialog & KasPathEdit (#880)
* FIX: key ESC/RETURN handled in Options Dialog & KasPathEdit

* FIX: FormCloseQuery only when key ESCAPE in Options Dialog
2023-03-25 12:37:35 +03:00
Andrey
2d04c4b609
UPD: Columns text alignment like values (#841) 2023-03-21 08:11:29 +03:00
Alexander Koblov
eb658393d6 UPD: Editor - use Modified property to control changes 2023-03-19 16:24:37 +03:00
rich2014
aca3ce5d19
FIX: FileProperties would be incorrectly closed by Button "Skip this File" (#875) 2023-03-19 16:14:16 +03:00
rich2014
7bf9a08253
FIX: Cocoa: Exception raised when DoubleClick in TfrmOptionsCustomColumns on MacOS (#877) 2023-03-19 14:37:43 +03:00
rich2014
f286ee0300
FIX: Key Return handled in TKASPathEdit.handleSpecialKeys() (#876) 2023-03-19 14:36:55 +03:00
rich2014
3d73cf4fb7
FIX: file icon issue in FileProperties Form (#868) 2023-03-18 13:05:16 +03:00
rich2014
6d025ca72b
UPD: faster response to file changed events on MacOS (#870) 2023-03-16 22:47:49 +03:00
Alexander Koblov
864652b8f3 FIX: WFX-API functions prototypes 2023-03-15 19:51:31 +03:00
rich2014
005872a231
UPD: AutoRefresh: smarter visual blinking in TFileView.UpdateFile (#867) 2023-03-15 19:50:48 +03:00
rich2014
718a687010
FIX: COCOA: notebook issue during startup (#864) 2023-03-12 20:18:00 +03:00
Andrey
465f210411
UPD: Free space indicator (#859) 2023-03-12 20:17:37 +03:00
rich2014
1f194109fa
FIX: COCOA: Exception in ComboBox (#861) 2023-03-11 12:44:27 +03:00
rich2014
cea024e9c1
UPD: fine-tuning syntax in udarwinfswatch (#858) 2023-03-08 20:40:57 +03:00
rich2014
9102adb18d
FIX: COCOA: AutoComplete issue in IME input state in TCocoaWSCustomComboBoxEx (#857) 2023-03-08 20:40:17 +03:00
rich2014
6e7989793f
FIX: AutoRefresh: update directory correctly in FlatView mode on MacOS (#852) 2023-03-08 16:10:09 +03:00
Mansur
bdd2e71bf7
UPD: Auto shortcuts in the tree view (#854) 2023-03-07 23:35:34 +03:00
Alexander Koblov
b188817eed UPD: TComboBoxAutoWidth - width calculation algorithm 2023-03-06 21:30:29 +03:00
Alexander Koblov
d4fc718f8f ADD: AudioInfo - bit depth field 2023-03-06 14:55:13 +03:00
Alexander Koblov
a16bfe13f4 FIX: Drive free space label alignment 2023-03-06 11:31:18 +03:00
rich2014
a5946bdb03
UPD: add .DS_Store to .gitignore (#851) 2023-03-05 18:18:55 +03:00
rich2014
78e02cd094
UPD: DARWIN: reduce deepCopy in fswatch on MacOS (#850) 2023-03-05 18:18:36 +03:00
rich2014
f6787d623c
FIX: check Main Thread before Synchronize() when DoWatcherEvent in uFileSystemWatcher (#849) 2023-03-05 18:18:18 +03:00
Alexander Koblov
5d35beec40 ADD: DialogAPI - TDirectoryEdit control 2023-03-05 13:51:14 +03:00
rich2014
9c28083ccd
UPD: FileSystemWatch: compatible with previous versions of MacOS 10.13 (#848) 2023-03-05 12:53:25 +03:00
rich2014
ded18fd7a4
FIX: MultiRename: FileName & Extension fields not updated on MacOS (#834) 2023-03-05 12:52:28 +03:00
rich2014
409cdae2bf
UPD: DARWIN: Renamed Event supported in fswatch on MacOS (#847) 2023-03-05 10:43:51 +03:00
Alexander Koblov
615823d2e8 ADD: DialogAPI - DM_GETTEXT/DM_SETTEXT for TCheckBox 2023-03-04 23:56:04 +03:00
Alexander Koblov
3b0cb68bae UPD: DialogAPI - refactoring 2023-03-04 23:56:03 +03:00
Alexander Koblov
9aa7dda9a4 ADD: DialogAPI - timer component 2023-03-04 23:56:03 +03:00
Andrey
cf83c96f73
FIX: Drive list popup for Linux (#843)
* FIX: Drive list popup for Linux

Correct total size for mounted network devices and non mounted [optical] drives.
P.S. Changes in uudev.pas is not necessary but I think it'll bring to error in the future.

* better solution
2023-03-04 23:13:46 +03:00
Andrey
d2f4833559
Update .gitignore (#844)
Add main exec file for Linux
2023-03-04 23:11:09 +03:00
Alexander Koblov
25ec33e563 FIX: Find files - find text in the drive root (issue #839) 2023-03-04 18:13:56 +03:00
Alexander Koblov
a30b7c5793 ADD: DialogAPI - send DN_CLOSE message 2023-03-02 22:56:25 +03:00
Alexander Koblov
0af8dacf2e FIX: Options - selection reset with Lazarus 2.3 2023-03-02 22:29:23 +03:00
Alexander Koblov
13bd3ce79b ADD: Zip - .tzst extension 2023-02-28 21:46:17 +03:00
Alexander Koblov
b0b901287d UPD: Main window - open help index by F1 key 2023-02-28 20:10:01 +03:00
Alexander Koblov
2150343460 UPD: AudioInfo - return empty string instead ft_fieldempty 2023-02-28 18:42:56 +03:00
Alexander Koblov
b2dc3cb380 FIX: Default language file name 2023-02-28 18:41:37 +03:00
Alexander Koblov
6cd0d89f28 UPD: Language files 2023-02-27 22:38:04 +03:00
Alexander Koblov
df2b6a6c05 UPD: Lazarus translation resource files 2023-02-27 22:32:09 +03:00
Alexander Koblov
37d1ebd601 FIX: Limit filter width (include help button) 2023-02-27 22:29:33 +03:00
Andrey
4d07f5a03c
ADD: Button Help for Options (#835)
* ADD: Button Help for Options

1. Added HelpKeywords for remaining pages.
2. Added Help button to show that you open Help. Button will be invisible when no HelpKeyword.
3. Some small changes: Default and Cancel for TAttributesEdit and change owner for calling from Option page (because when Position=poOwnerFormCenter the owner have to be properly set to avoid showing not at the center as it was before).
2023-02-27 22:13:30 +03:00
Alexander Koblov
b50740cef7 FIX: Zip - crash on compression when libzstd not found 2023-02-26 14:16:19 +03:00
Alexander Koblov
735cf33d5b ADD: Zip - translate resource strings 2023-02-25 17:23:18 +03:00
Alexander Koblov
18536d96a9 ADD: ExtensionAPI - TranslateString function 2023-02-25 17:16:55 +03:00
Alexander Koblov
47680a5cc6 FIX: AudioInfo - read ID3v2.4 with UTF-16 encoding 2023-02-25 14:09:41 +03:00
Alexander Koblov
0e85cbb10a UPD: Optimize resource strings translation 2023-02-25 13:09:40 +03:00
Alexander Koblov
594c2beaba FIX: Zip - wrong checksum 2023-02-25 12:12:10 +03:00
Alexander Koblov
70187320b1 UPD: Language files 2023-02-25 12:00:23 +03:00
Alexander Koblov
8c46e8b089 ADD: Zip - capability to change compression settings of all supported formats 2023-02-25 12:00:23 +03:00
Alexander Koblov
e128e03eb8 UPD: Debian package 2023-02-23 19:19:51 +03:00
Alexander Koblov
7c6b433ade FIX: Default language file name 2023-02-23 19:12:29 +03:00
Alexander Koblov
bd70e87647 UPD: TreeFilterEdit width 2023-02-23 19:11:08 +03:00
Alexander Koblov
09762d955d FIX: Unpacking file from zip with entering empty destination (fixes #826) 2023-02-23 14:11:01 +03:00
Alexander Koblov
0f01e5e19a FIX: DC ignores WDX plugin file detection string when searching (fixes #833) 2023-02-23 12:22:38 +03:00
Alexander Koblov
f09c9de84e UPD: Allow to use icon from pixmaps.txt for .ico 2023-02-22 21:10:04 +03:00
Alexander Koblov
fceb298cd5 FIX: MinimizeFilePath and Unicode file name 2023-02-22 20:42:24 +03:00
Andrey
2999eb3e5a
UPD: Better looking for command line (#825) 2023-02-22 20:36:05 +03:00
Andrey
8b9ac49d43
Fix: Bug with no init Size and strange Disk size for ex. with network and optical drive (#818) 2023-02-21 20:39:35 +03:00
Alexander Koblov
6cf2d25f7b FIX: Load RSVG library and it dependencies from the same path (fixes #752) 2023-02-19 17:28:12 +03:00
rich2014
5756b711b3
ADD: AutoRefresh: subdir in FlatView Mode supported on MacOS (#815)
* FIX: ufileview in FlatView mode: issues when there are files with the same name in different subdirectories

* ADD: AutoRefresh: subdir in FlatView Mode supported on MacOS
2023-02-19 15:40:25 +03:00
Alexander Koblov
9181487d58 FIX: Overwrite dialog - bad file size formatting 2023-02-19 00:16:13 +03:00
Alexander Koblov
3e0c814e41 ADD: Context help links for several options pages 2023-02-19 00:12:55 +03:00
Alexander Koblov
17c85f1c51 UPD: Overwrite dialog - rearrange buttons 2023-02-18 15:29:17 +03:00
Alexander Koblov
71b938edb3 DEL: Unused unit 2023-02-18 13:20:19 +03:00
Alexander Koblov
cb15de0993 ADD: Find files - exclude directories with absolute path 2023-02-18 13:17:35 +03:00
Alexander Koblov
6361f6577b FIX: Locked tabs - reuse existing tab when possible (with archive) 2023-02-18 13:17:35 +03:00
Andrey
0085139487
UPD: Format file sizes and counts in file dialogs (v.2) (#816)
Now DC uses options for file size when file replacing and also format number of files according to regional settings of OS.
2023-02-18 13:07:55 +03:00
Alexander Koblov
ccb6556486 FIX: Find files - exclude multiple relative subdirectories 2023-02-15 19:18:40 +03:00
Alexander Koblov
0f90c2580b UPD: Zip - speed up .zipx creation 2023-02-14 20:17:39 +03:00
Alexander Koblov
c018bcf38e UPD: ImageMagick library version list 2023-02-14 20:05:17 +03:00
Alexander Koblov
7159dd4ddd UPD: Zip - doublecmd.diff 2023-02-13 19:17:52 +03:00
Alexander Koblov
4c027c42a9 FIX: Incorrect .tar.gz archive reading: same directory appears multiple time (fixes #809) 2023-02-13 19:10:09 +03:00
Alexander Koblov
1012ae0bff ADD: MultiArc - don't show file size when it has been parsed incorrectly 2023-02-12 17:20:47 +03:00
Alexander Koblov
ff22ea0858 ADD: FTP - don't show size for connections 2023-02-12 12:57:12 +03:00
Alexander Koblov
4034e74fc6 ADD: Wfx-plugins - don't show file size for files which don't have a size 2023-02-12 12:55:40 +03:00
Alexander Koblov
9825c04bdc ADD: FTP - capability to create connection copy 2023-02-12 11:59:45 +03:00
Alexander Koblov
968840e517 FIX: Search in the options dialog with English language (fixes #25) 2023-02-11 23:54:13 +03:00
Alexander Koblov
7dde2b22f8 ADD: Search in the options dialog (fixes #25) 2023-02-11 19:09:14 +03:00
Alexander Koblov
5b532f960e FIX: Bug [0002289] Folder size shown as <DIR> instead of zero for empty folder
ADD: Show '--' while calculating and '??' before calculating folder size (fixes #806)
2023-02-11 13:10:08 +03:00
Alexander Koblov
e16fe1545c ADD: Visual elements manifest 2023-02-10 22:03:01 +03:00
Alexander Koblov
bf821d801d ADD: Context help links for several options pages 2023-02-10 22:03:01 +03:00
Peter Marquardt
8b056faaa6
ADD: Support parsing of /etc/os-release (#804) 2023-02-10 21:23:57 +03:00
Alexander Koblov
c02a52a93f ADD: Context help links for several options pages 2023-02-09 20:05:49 +03:00
Alexander Koblov
87b3f26dc7 FIX: Combine Files - problems with combining to archive or the same folder (issue #800) 2023-02-07 21:43:28 +03:00
Alexander Koblov
0e42b40551 FIX: Range check error 2023-02-05 13:28:05 +03:00
Alexander Koblov
893456c914 UPD: Optimize WEBP loading speed 2023-02-05 13:16:03 +03:00
Alexander Koblov
9b9c4d3165 UPD: ImageMagick library version list 2023-02-05 13:06:55 +03:00
rich2014
60872747af
UPD: TFile.IsSysFile: 'Icon'#$0D is system/hidden file on MacOS (#787) 2023-02-01 19:52:57 +03:00
Alexander Koblov
0c6273c3cf FIX: Unconditional file overwrite on Shift + F4 when name has trailing whitespace (fixes #786) 2023-02-01 18:43:50 +03:00
rich2014
3f24ecd1a1
ADD: Auto Refresh: options supported on MacOS (#785) 2023-01-31 22:00:25 +03:00
rich2014
367640095f
UPD: FileSystemWatch: fine-tuning File-Level update on MacOS (#784) 2023-01-30 19:58:13 +03:00
rich2014
6fac154b58
ADD: FileSystemWatch: File-Level update supported on MacOS (#781) 2023-01-29 21:09:36 +03:00
Alexander Koblov
2547f20e2e UPD: Language files 2023-01-29 15:17:06 +03:00
Alexander Koblov
69a7371e77 UPD: Language files 2023-01-28 20:48:21 +03:00
Alexander Koblov
1e8d9fd8aa ADD: Feature [0001459] Verify checksum with white-spaces 2023-01-28 20:42:17 +03:00
Alexander Koblov
a9b8d285a9 FIX: Ctrl+Z doesn't undo graphical operation (fixes #773) 2023-01-28 17:31:25 +03:00
rich2014
b64db68314
UPD: ShortCuts: 11 keys added to uKeyboard for Windows and MacOS (#761) 2023-01-28 13:11:34 +03:00
rich2014
89a67cb0d9
ADD: FileSystemWatcher: use fsevents instead of kqueue/kevent on MacOS (#777) 2023-01-28 12:36:53 +03:00
Alexander Koblov
cb9b79a26d FIX: Viewer - Slow case insensitive backward search with single byte encoding 2023-01-27 21:26:10 +03:00
rich2014
b713966bd9
FIX: TFileViewNotebook.DestroyAllPages: remove page by Tabs.Delete() (#764) 2023-01-21 11:19:52 +03:00
Alexander Koblov
070c2ed38c FIX: IsTotalCommanderSeemsRunning function 2023-01-20 22:07:42 +03:00
rich2014
b0dbe66b78
UPD: Improve directories display in QuickView (#759) 2023-01-19 21:27:22 +03:00
Alexander Koblov
6edfa91d49 UPD: Line-endings 2023-01-19 21:17:15 +03:00
Alexander Koblov
b62904aeb1 FIX: Unset 'text' attribute for '*.bat' 2023-01-19 21:12:20 +03:00
Alexander Koblov
6e65b86140 FIX: Warning message about not enough space when copying to ramfs (fixes #753) 2023-01-19 20:38:29 +03:00
rich2014
1fbdc9cb16
FIX: issues about Terminal (#756) 2023-01-19 20:12:32 +03:00
Alexander Koblov
e4ca93fee2 ADD: FileSystemWatcher - 'rename' event under Linux 2023-01-16 21:25:15 +03:00
rich2014
5e10739f1d
Comments: Add six notes to optimize codes in the future (#754) 2023-01-15 00:33:02 +03:00
Alexander Koblov
c741965bec FIX: Bug [0001400] 2023-01-11 18:55:43 +03:00
Alexander Koblov
8032bedfbc FIX: Viewer - save/restore viewer mode 2023-01-11 18:54:24 +03:00
Alexander Koblov
29fa477ad5 ADD: Feature [0002558] 2023-01-09 21:29:16 +03:00
Alexander Koblov
9c146772d4 UPD: Create TTempFileSystemFileSource in the GetTempFolder directory 2023-01-09 21:21:22 +03:00
Alexander Koblov
2a795329a7 FIX: Viewer - TWinControl.CreateWnd creating Handle during loading 2023-01-09 21:07:50 +03:00
Alexander Koblov
7a4d08f3ef FIX: Editor - update encoding name in the status bar 2023-01-09 21:06:05 +03:00
Alexander Koblov
502f95d4a3 UPD: Slovak translation 2023-01-08 17:17:45 +03:00
Alexander Koblov
6301cec665 UPD: SpeedButton - use native button style (fixes #747) 2023-01-08 16:04:42 +03:00
Alexander Koblov
c0cf037fae FIX: ComboBox text color (issue #747) 2023-01-08 13:43:37 +03:00
Alexander Koblov
e43e3842f7 ADD: Ask before exit (issue #744) 2023-01-07 17:40:57 +03:00
Alexander Koblov
6b689bedc6 UPD: Russian language file 2023-01-07 14:35:45 +03:00
Alexander Koblov
4e41285416 ADD: Force text mode when open internal Viewer (fixes #745) 2023-01-07 14:31:48 +03:00
Alexander Koblov
4f0171cec8 UPD: Copyright year 2023-01-07 14:15:18 +03:00
rich2014
0761817cfe
FIX: COCOA: Window state was not properly restored on startup (#740) 2023-01-05 16:50:24 +03:00
Alexander Koblov
10b0daca57 UPD: DCTheme 2023-01-05 16:05:35 +03:00
Alexander Koblov
8f3a4efae1 ADD: Multi-rename needs more sophisticated skip/overwrite options (issue #739) 2023-01-05 15:11:25 +03:00
rich2014
e5c415f661
FIX: the order of closing FileView and closing QuickView (#738) 2023-01-04 11:20:07 +03:00
rich2014
716cbbd9ee
FIX: DARWIN: Cursor not reset in Reactive Application on MacOS 13 again (#732) (#734) 2022-12-25 16:04:32 +03:00
rich2014
6e25b07251
FIX: DARWIN: Cursor not reset in Reactive Application on MacOS 13 (#732) 2022-12-25 11:40:36 +03:00
rich2014
7d80562c86
FIX: DARWIN: Cursor not reset in new Active Window on MacOS 13 (#729) 2022-12-24 16:09:13 +03:00
Alexander Koblov
92899fb35f ADD: WSL to virtual file system list 2022-12-22 19:49:17 +03:00
Alexander Koblov
4fcd9159a3 UPD: Use IsWow64Process or IsWow64Process2 2022-12-22 18:54:55 +03:00
rich2014
404518d428
FIX: COCOA: cursor in MainControl(Grid) may be always in waiting state (fixes #699) 2022-12-22 18:49:16 +03:00
Alexander Koblov
b3bd295976 FIX: Viewer does not display KOI8 (fixes #726) 2022-12-21 22:35:07 +03:00
Alexander Koblov
048d0fcbd5 UPD: Publish IsWow64 function, use IsWow64Process2 2022-12-21 22:35:06 +03:00
Alexander Koblov
d660b14965 FIX: AudioInfo - read IDv2.4 with UTF-8 encoding (fixes #723) 2022-12-18 23:18:09 +03:00
rich2014
b670bd59dc
FIX #621: FindDlg: buttons not shown (#717)
* FIX: FindDlg: buttons not shown cause by TabSheet height calculation error (ReCalc)
2022-12-18 11:51:23 +03:00
Alexander Koblov
c7f24a7d69 UPD: SVG - enable font rendering 2022-12-14 20:44:11 +03:00
Alexander Koblov
8f5d58e6b0 UPD: Language files 2022-12-13 22:24:56 +03:00
Alexander Koblov
c7d12c821c UPD: Move rsDarkModeOptions resource string to language unit 2022-12-13 22:20:57 +03:00
Alexander Koblov
cd52866a71 ADD: Show progress form when connect network drive 2022-12-13 21:55:39 +03:00
Alexander Koblov
62ef434c02 FIX: DC appearance in Windows Task Manager (fixes #714) 2022-12-13 20:54:22 +03:00
Alexander Koblov
199e3c7567 UPD: Check file name on the local file system only (issue #709) 2022-12-13 19:49:04 +03:00
Gitoffthelawn
dce939ed9a
UPD: Added clarifications (#713) 2022-12-12 19:42:27 +03:00
Alexander Koblov
70e8b41fbe FIX: Don't load CPU when no active operations (fixes #606) 2022-12-12 19:14:28 +03:00
Alexander Koblov
755adbed3a ADD: Image32 component to build scripts 2022-12-11 14:29:34 +03:00
Alexander Koblov
31ff1941ef UPD: Hash file icon 2022-12-11 14:25:34 +03:00
Alexander Koblov
a1d12ad3b9 FIX: Compiling 2022-12-11 14:12:57 +03:00
Alexander Koblov
2d6bc5cb60 ADD: Vector image unit 2022-12-11 13:16:57 +03:00
Alexander Koblov
0a744ab5e5 ADD: Native SVG reader via Image32 graphic library 2022-12-11 12:37:45 +03:00
Alexander Koblov
5752a5bd1a ADD: Image32 component to build scripts 2022-12-11 12:22:37 +03:00
Alexander Koblov
49730bd3c9 FIX: Image32 - Add to project uses section 2022-12-11 12:19:55 +03:00
Alexander Koblov
7c91787361 ADD: Image32 graphic library 2022-12-10 12:06:55 +03:00
Alexander Koblov
b8e13477b0 UPD: Optimize SVG rendering speed 2022-12-07 18:50:53 +03:00
rich2014
7a2df05953
FIX: MacOS: color not updated in FileView after theme changed (#702) 2022-12-06 19:26:44 +03:00
Alexander Koblov
49f29d47a3 FIX: Extract files with zero UNIX time 2022-12-05 19:01:43 +03:00
Alexander Koblov
45046c24b7 FIX: Range check error 2022-12-05 18:46:24 +03:00
Alexander Koblov
3e12228de9 UPD: Use TWfxFileTime 2022-12-05 18:21:19 +03:00
Alexander Koblov
81e1cee3b8 FIX: Bug [0002644] Closing an unavailable FTP connection not possible 2022-12-05 18:16:06 +03:00
Alexander Koblov
8062c9b330 UPD: Use BeginWaitCursor / EndWaitCursor 2022-12-04 19:27:36 +03:00
Alexander Koblov
3efb7085a5 UPD: Use BeginWaitCursor / EndWaitCursor (issue #699) 2022-12-04 17:55:00 +03:00
Alexander Koblov
585536e1bc ADD: About dialog window MinWidth/MinHeight size (issue #450) 2022-12-04 13:28:22 +03:00
Alexander Koblov
6eab16f107 ADD: Issue templates 2022-12-04 12:58:20 +03:00
Alexander Koblov
624872ea0d FIX: Restore focus when open virtual file system list 2022-12-04 00:27:33 +03:00
Alexander Koblov
1404bb0a0a
UPD: Create disk image with HFS+ file system (issue #698) 2022-12-04 00:02:26 +03:00
AlkaliX
02a004568d
FIX: Find files, make title nicer #685 (#695) 2022-12-03 11:30:43 +03:00
Alexander Koblov
bbf1a28b9a FIX: Line-endings 2022-12-02 20:28:02 +03:00
Alexander Koblov
faee14c230 ADD: FTP - save private key passphrase to cache (issue #697) 2022-12-02 20:26:40 +03:00
Alexander Koblov
bf76a5e357 DEL: Obsolete doublecmd.ext.example 2022-12-01 18:06:12 +03:00
Alexander Koblov
292af3689d UPD: Move pasdoc to doc/pasdoc 2022-11-30 20:49:51 +03:00
Alexander Koblov
f21f59c9ef ADD: GitHub license file (fixes #660) 2022-11-30 20:31:09 +03:00
Alexander Koblov
a26bb27431 DEL: Obsolete units 2022-11-30 20:19:08 +03:00
Corvus
d1d1e7de28
ADD: show link targets in status bar (#684) 2022-11-29 20:48:36 +03:00
Alexander Koblov
a193935b47 FIX: Zip - open small Gzip archive 2022-11-29 18:53:05 +03:00
rich2014
2b8b62045e
FIX: FileView: missing call to TOrderedFileView.OnChangeActiveFille() (#690) 2022-11-29 18:52:02 +03:00
Alexander Koblov
60b371b742 ADD: File system watcher implementation (Haiku) 2022-11-28 22:22:00 +03:00
rich2014
cc3ca9662f
FIX: TFileViewNotebook.DestroyAllPages: algorithm of tabs.clear() (#681) 2022-11-28 18:55:48 +03:00
Alexander Koblov
e1653703aa FIX: Error when browsing folder with Exif date 0-0-0 (fixes #693) 2022-11-28 18:53:43 +03:00
Alexander Koblov
c331779bb7 UPD: Polish language file 2022-11-27 19:33:04 +03:00
Alexander Koblov
c7dce345a0 FIX: Remove symlink to directory directly when move to trash failed (fixes #686) 2022-11-27 14:29:43 +03:00
rich2014
8904de8ff4
FIX: DARWIN: unmount driver compatible with MacOS 13 (#689) 2022-11-27 13:28:47 +03:00
Alexander Koblov
253f6be979 UPD: Clean up 2022-11-27 12:42:40 +03:00
Alexander Koblov
81243371f8 UPD: DoCreatePreviewText - speed optimization 2022-11-27 12:36:50 +03:00
Alexander Koblov
583c0c1b93 FIX: GetLanguageName hangs with invalid language file 2022-11-27 12:26:42 +03:00
rich2014
52a9d37f9c
ADD: DARWIN: new FileSystemType 'lifs' supported in MacOS 13 (#687) 2022-11-26 22:07:40 +03:00
rich2014
8d21868557
FIX: QuickView: Not exiting PluginMode when receiving empty string in TfrmViewer.LoadFile() (#683) 2022-11-26 13:59:16 +03:00
Alexander Koblov
1ea6337cb3 ADD: Move to trash under Haiku 2022-11-26 12:34:47 +03:00
Alexander Koblov
35e9c5f016 UPD: Clean up 2022-11-26 12:34:47 +03:00
Alexander Koblov
8a8eccf5f4 UPD: ShellExecute - call '/bin/open' directly 2022-11-26 12:34:47 +03:00
Alexander Koblov
4a0e9aacd3 UPD: Use mbFindDirectory to get system folders 2022-11-26 12:34:47 +03:00
Alexander Koblov
a9cb957984 ADD: mbFileWriteXattr function 2022-11-26 12:34:47 +03:00
Alexander Koblov
cfad170205 ADD: Copy extended attributes under Haiku 2022-11-26 12:34:47 +03:00
Alexander Koblov
cd08bd6527 ADD: mbFindDirectory function 2022-11-26 12:34:47 +03:00
Alexander Koblov
9a7a9e420b ADD: DCHaiku unit 2022-11-26 12:34:47 +03:00
Alexander Koblov
754c939756 ADD: Editor - FindWordAtCursor option 2022-11-25 21:08:00 +03:00
Alexander Koblov
df934be35d UPD: Language files 2022-11-25 18:40:03 +03:00
Corvus
9413a2fe14
ADD: Show [brackets] around directories names in the status bar if nothing is selected. (#677) 2022-11-24 22:05:03 +03:00
Alexander Koblov
8291f84b0b FIX: Button Help is truncated (fixes #630) 2022-11-22 22:58:32 +03:00
Alexander Koblov
7067d0c264 ADD: Viewer - auto copy option 2022-11-22 21:48:09 +03:00
Alexander Koblov
ae217a9a15
UPD: Don't build snapshot on pull request 2022-11-22 21:38:33 +03:00
rich2014
fb6fbebe45
UPD: MacPreview: change extension comparison to case insensitive (#676) 2022-11-22 19:59:44 +03:00
Alexander Koblov
17cde7acf7 UPD: Greek translation 2022-11-21 21:18:10 +03:00
Alexander Koblov
e764195603 UPD: Project group 2022-11-21 21:13:05 +03:00
Alexander Koblov
2a9b62f720 FIX: Unique instance under Haiku 2022-11-21 20:26:29 +03:00
Alexander Koblov
559b0f6719 FIX: Don't load the unversioned libcrypto under macOS (issue #674) 2022-11-20 22:22:29 +03:00
Alexander Koblov
6c0ce761c4 FIX: Crash on add attributes (Lazarus 2.3) 2022-11-20 12:17:40 +03:00
Alexander Koblov
9ff705ef69 ADD: FTP - Haiku support 2022-11-20 12:17:40 +03:00
Alexander Koblov
3232137533 UPD: OpenSSL library versions (issue #674) 2022-11-20 10:45:24 +03:00
Alexander Koblov
371d365006 ADD: Show drives list under Haiku 2022-11-20 00:16:37 +03:00
Alexander Koblov
a254670e22 FIX: Don't print desktop environment under Haiku 2022-11-20 00:12:21 +03:00
Alexander Koblov
93182723b2 FIX: Compiler directives 2022-11-20 00:10:12 +03:00
Alexander Koblov
0ed4d17eca ADD: ShellExecute function implementation under Haiku 2022-11-20 00:06:26 +03:00
Alexander Koblov
9e928de068 ADD: Haiku default terminal and monospace font 2022-11-18 23:13:50 +03:00
Alexander Koblov
3c27673101 ADD: Show Haiku in the version info 2022-11-18 23:13:50 +03:00
Alexander Koblov
ebd030ca48 ADD: Haiku initial support 2022-11-18 23:13:49 +03:00
Alexander Koblov
0bcb9b1d7c ADD: TKASButtonPanel - SameWidth and SameHeight properties 2022-11-17 21:41:07 +03:00
Alexander Koblov
e947887a37 ADD: GitHub action which build and publish snapshots (macOS) 2022-11-17 19:56:54 +03:00
Alexander Koblov
0877b3d46d FIX: Sync dirs - ignoring subdirectories when search with template (issue #670) 2022-11-16 18:46:00 +03:00
Alexander Koblov
2e816982e3 FIX: EInvalidOperation: [TCustomForm.SetFocus] frmFindDlg:TfrmFindDlg Can not focus 2022-11-15 19:57:34 +03:00
Alexander Koblov
33da665e83 ADD: Push language files with LF line-ending 2022-11-15 19:43:28 +03:00
Alexander Koblov
0244f621ff UPD: Language files 2022-11-15 19:29:06 +03:00
Alexander Koblov
e4ffd90626 UPD: Rename lclstrconsts.po to lclstrconsts.pot
DEL: Duplicate language file (ua -> uk)
2022-11-15 19:20:07 +03:00
Alexander Koblov
58b831f3c8 UPD: Show splash form on primary monitor 2022-11-15 19:09:44 +03:00
Alexander Koblov
d39cb6dfcb FIX: Confirmation dialog appears on the wrong display in a multi monitor config (fixes #633) 2022-11-15 19:09:00 +03:00
Alexander Koblov
fc8306f639 UPD: Unrar - Refactoring
ADD: Unrar - GetBackgroundFlags function (fixes #665)
2022-11-14 21:41:36 +03:00
Alexander Koblov
35abf6c493 ADD: Base64 - GetBackgroundFlags function (issue #665) 2022-11-14 18:45:08 +03:00
Alexander Koblov
4d85d6d474 ADD: Zip - GetBackgroundFlags function (issue #665) 2022-11-14 18:41:32 +03:00
Alexander Koblov
ee8b06ae53 ADD: Qt 6 widgetset support (fixes #402) 2022-11-13 20:38:18 +03:00
Alexander Koblov
0fa7d382e0 UPD: Language files 2022-11-13 18:20:15 +03:00
Alexander Koblov
7197276efe UPD: Rename doublecmd.po to doublecmd.pot 2022-11-13 16:46:55 +03:00
Alexander Koblov
4d80ae37ec ADD: Editor - block indent option 2022-11-13 16:28:34 +03:00
Alexander Koblov
c9f89e3901 FIX: Don't display ejected flash drive 2022-11-13 15:34:06 +03:00
Alexander Koblov
5f40423726 ADD: Eject disk using GIO 2022-11-12 22:07:23 +03:00
Alexander Koblov
98f845c47a ADD: Eject disk using UDisks2 2022-11-12 21:09:39 +03:00
Alexander Koblov
d4d81bea22 DEL: UDisks1 specific code 2022-11-12 17:36:43 +03:00
Alexander Koblov
2bf92ea130 UPD: Clean up and update udev unit 2022-11-11 23:45:58 +03:00
Alexander Koblov
82960ca5a8 UPD: Dirty low limit (issue #308) 2022-11-10 19:53:55 +03:00
Alexander Koblov
9955b928c8 ADD: Save to cache dirty limit 2022-11-09 22:20:17 +03:00
Alexander Koblov
b0379a1f48 ADD: Use auto sync when copy files to NFS share (issue #308) 2022-11-09 20:57:59 +03:00
Alexander Koblov
ac0154c2c4 ADD: TFileStreamEx - AutoSync property 2022-11-09 20:54:41 +03:00
Alexander Koblov
4a13fe207e ADD: Smart extract option (issue #3) 2022-11-05 19:34:03 +03:00
Alexander Koblov
056efc6fa8 ADD: In viewer, show in the title collapsed filename (fixes #164) 2022-11-05 12:40:44 +03:00
Alexander Koblov
9a2ffad84e FIX: Field "100" in this form is not fit by width (fixes #631) 2022-11-05 12:13:24 +03:00
Alexander Koblov
eeb0e3b1b9 UPD: Improve the LongInStatus setting (fixes #614) 2022-11-05 00:12:06 +03:00
Alexander Koblov
8c95a30424 ADD: Feature [0002299] Access to WSL directory in Win 1903 2022-11-02 18:13:59 +03:00
Alexander Koblov
6d8420b479 FIX: Viewer - draw last line (issue #652) 2022-11-02 18:12:07 +03:00
Skif-off
4c33e15ccc
UPD: Russian translation (#655) 2022-10-31 22:19:42 +03:00
Alexander Koblov
35498b579e FIX: Viewer - dribbling of lowest line when window height is resized (fixes #652) 2022-10-30 19:37:25 +03:00
Alexander Koblov
5fdcad2fec UPD: ExtractDlg - improve the layout (fixes #628) 2022-10-29 15:57:34 +03:00
Alexander Koblov
a9db7bc228 UPD: Convert Info.plist to UTF-8 encoding 2022-10-29 13:51:36 +03:00
Skif-off
085a2e1e87
UPD: uWDXModule: List of language codes (translation support). (#650) 2022-10-28 18:06:22 +03:00
Alexander Koblov
6201b8bed5 FIX: Wrong focus when load search template 2022-10-21 18:58:46 +03:00
Alexander Koblov
61807cc96d FIX: Restore plugin operator in the search templates (fixes #644) 2022-10-21 18:43:43 +03:00
Alexander Koblov
cce0428eef FIX: Find files dialog - disabled controls (Windows) 2022-10-19 18:24:14 +03:00
rich2014
38ffadf2d7
UPD: FindDlg: improve some inconvenience problems (#632) 2022-10-17 09:12:28 +03:00
Alexander Koblov
d016db9302 FIX: Change default text encoding 2022-10-14 21:10:21 +03:00
Alexander Koblov
12dde068bc FIX: Remove UseConfigInProgramDir from doublecmd.xml 2022-10-14 21:04:34 +03:00
rich2014
1cf21e5ab0
FIX: COCOA: garbled when editing in FileViewHeader (#620) 2022-10-14 20:49:35 +03:00
rich2014
f49deb13bf
FIX: FindDlg: the buttons are not displayed because the height of the FindDlg Form is insufficient after upgrading to LCL2.3 (#626) 2022-10-06 19:13:24 +03:00
Alexander Koblov
b5a932b3bb DEL: Unneeded files (fixes #616) 2022-10-03 18:55:00 +03:00
Alexander Koblov
78ab65dac1 FIX: Main window class 2022-10-03 18:50:12 +03:00
Alexander Koblov
defe1e12bd DEL: Unused components 2022-10-02 13:41:52 +03:00
Alexander Koblov
f588cc1d17 FIX: Lazarus 2.3 compatibility 2022-10-02 12:41:17 +03:00
rich2014
0136ca6fcd
FIX: DARWIN: MacPreview: workaournd for the bug of MacOS Quick Look (#618) 2022-10-02 12:38:39 +03:00
Vedant
5113c698f6
Update winget.yml (#613) 2022-09-30 19:18:49 +03:00
rseleven
91dc4b0f38
formatting: Info.plist (#612)
Co-authored-by: Roman Petrov <rapetrov@sbercloud.ru>
2022-09-30 19:18:27 +03:00
rich2014
4b9cc4ac45
UPD: the last part of the text in the TEdit is automatically selected, when selecting from AutoComplete ListBox in KASPathEdit (#600) 2022-09-30 10:54:49 +03:00
rich2014
314df3b099
FIX: fix the problem of displaying wrong hint text in QuickViewPanel (#610) 2022-09-27 19:56:45 +03:00
Antikruk
2b4d77b85c
UPD: Belarusian translation (#609) 2022-09-27 19:11:33 +03:00
rich2014
29e8e51516
UPD: DARWIN: enable MacPreview wlx-plugin (#608)
* UPD: DARWIN: enable MacPreview wlx-plugin

* UPD: DARWIN: add MacPreview.wlx into udefaultplugins.UpdatePlugins()
2022-09-26 21:14:07 +03:00
Alexander Koblov
c612db2577 UPD: Differ - move auto-compare option to doublecmd.xml (fixes #607) 2022-09-26 21:10:06 +03:00
rich2014
5ea1a59cbb
ADD: DARWIN: add a WlxPlugin MacPreview (#603)
* ADD: DARWIN: add a WlxPlugin MacPreview, implemented using MacOS Native QuickLook Preview

* UPD: Plugin name modified and authors added in the remarks
2022-09-26 08:28:02 +03:00
rich2014
16c9b94fda
ADD: DARWIN COCOA: implement ResizeWindow in TWlxModule (#602) 2022-09-25 21:20:33 +03:00
rich2014
75b707fae5
UPD: COCOA: more proper showing and hiding of AutoComplete ListBox in KASPathEdit (#598) 2022-09-20 21:28:51 +03:00
Alexander Koblov
8bbaf929ae ADD: Tools - load 32x32 toolbar icons 2022-09-20 19:28:23 +03:00
Alexander Koblov
7c5d57cdb3 UPD: INSTALL.txt 2022-09-19 22:40:35 +03:00
Alexander Koblov
09f989d4f7 ADD: Show filename in status bar when nothing is selected (fixes #207) 2022-09-19 18:32:48 +03:00
Alexander Koblov
87a7647472 ADD: Lua - show error when script file not found
ADD: Lua - setenv/unsetenv functions (patch by NorbertJh)
2022-09-18 20:50:42 +03:00
Alexander Koblov
db3fbd8f3e ADD: Multi-rename - load names from clipboard 2022-09-18 20:21:51 +03:00
Alexander Koblov
85d5c093d5 UPD: Use new GetTempName function 2022-09-18 20:10:10 +03:00
Alexander Koblov
ea7eb6972c UPD: GetTempName function 2022-09-18 20:10:09 +03:00
Alexander Koblov
f0efd22342 ADD: Smart extract option (issue #3) 2022-09-18 17:21:39 +03:00
Alexander Koblov
a03be982f8 UPD: Parse .hlg files with xrfPreserveWhiteSpace option enabled 2022-09-18 17:21:39 +03:00
Alexander Koblov
d739808f0c ADD: DialogAPI - DM_SETPASSWORDCHAR message 2022-09-18 17:21:39 +03:00
rich2014
135eff3413
UDP: COCOA: more suitable ClientHeight of autocomplete window (#592) 2022-09-18 17:21:12 +03:00
rich2014
3576a6c165
UPD: Refactor TEditButtonEx and TFileViewWithMainCtrl (#585)
* UPD: Refactor TEditButtonEx and TFileViewWithMainCtrl (refer to the implementation of KASPathEdit)

* FIX: WIN32: add the related codes of VK_RIGHT and VK_LEFT back
2022-09-18 16:56:23 +03:00
rich2014
abaa9b57f0
FIX: COCOA: mouse event lost in AutoComplete Window in KASPathEdit (THintWindow) (#591) 2022-09-18 15:32:52 +03:00
Vedant
d6ac8c7bdb
Create winget.yml (#487) 2022-09-18 11:56:50 +03:00
Alexander Koblov
d3669d5c32 UPD: SevenZip - refactoring 2022-09-17 14:07:40 +03:00
Alexander Koblov
181997bf08 FIX: SevenZip - update password visibility on "show password" change 2022-09-17 13:03:45 +03:00
Alexander Koblov
4c3d47527d UPD: Polish language file 2022-09-16 18:54:31 +03:00
Alexander Koblov
a0bd0ad760 ADD: Show progress when open inner archive from archive 2022-09-16 18:52:12 +03:00
Alexander Koblov
6011f09b10 FIX: Zip - gzip unpack progress 2022-09-16 18:41:40 +03:00
Alexander Koblov
8cd00f4a05 FIX: Zip - slow gzip-file opening 2022-09-16 18:41:22 +03:00
Alexander Koblov
2f916f9b6d UPD: Duplicate highlighters - better naming scheme 2022-09-15 22:48:48 +03:00
Alexander Koblov
82b6f6ec0b UPD: Speed up gzip-archive creation/modification 2022-09-15 21:27:10 +03:00
Alexander Koblov
bb3a0d5ee3 ADD: Show duplicate external highlighters 2022-09-15 21:10:48 +03:00
Alexander Koblov
952ceb722e ADD: Zip - show gzip compression progress 2022-09-14 21:19:16 +03:00
Alexander Koblov
c2c6590ae4 FIX: Zip - extract concatenated gzip archive
UPD: Zip - use fast CRC32 function
2022-09-14 19:00:07 +03:00
Alexander Koblov
633bccdba1 UPD: CRC32 - use static constant array 2022-09-14 18:30:30 +03:00
BLUEnLIVE
e4c8ecdbbf
Update doublecmd.ko.po (#583)
Translation was partly missing.
2022-09-14 07:52:55 +03:00
Alexander Koblov
664c3a32a5 FIX: Drives bar right click properties missing functions (fixes #580) 2022-09-13 19:56:54 +03:00
Alexander Koblov
37f25c86ef FIX: External and internal highlighter name conflict 2022-09-13 18:29:56 +03:00
rich2014
e5de7955fc
FIX: COCOA: kaspathedit in IME state (#570) 2022-09-12 21:23:00 +03:00
Alexander Koblov
7914bc89be FIX: ANSI encoding in the file list % variables 2022-09-11 22:37:13 +03:00
Alexander Koblov
dd3ee2639b UPD: Speed up zip-archive creation/modification 2022-09-11 18:59:51 +03:00
Alexander Koblov
1e03f05284 UPD: Zip - doublecmd.diff 2022-09-11 18:59:51 +03:00
Alexander Koblov
a09f62e6dd DEL: Unneeded patches 2022-09-11 14:50:16 +03:00
Alexander Koblov
4ed7362c07 ADD: SFTP - Show used encryption methods 2022-09-10 13:28:11 +03:00
Alexander Koblov
e41241b8bd UPD: Hash verification - skip '#' comments 2022-09-10 12:43:16 +03:00
Alexander Koblov
c6c5fbaed7 UPD: Zip - project file 2022-09-10 12:20:45 +03:00
Alexander Koblov
b858e33b17 FIX: Zip - unpack encrypted (AES) archive 2022-09-10 12:17:06 +03:00
Alexander Koblov
199450b197 FIX: Zip - unpack progress (file > 2 GB) 2022-09-10 12:15:19 +03:00
rich2014
443b62a6a2
UPD: F7-mkdir: improve the layout (label example overlay buttons occasionally) (#555) 2022-09-09 23:53:01 +03:00
rich2014
9f80bf961c
UPD: PathLabel: add highlight calling in MouseEnter (#571) 2022-09-06 20:21:47 +03:00
Alexander Koblov
f4ba5ad05d UPD: Language files 2022-09-04 21:32:56 +03:00
Alexander Koblov
d8725969ff FIX: Controls autosize 2022-09-03 12:48:23 +03:00
Alexander Koblov
7c73897c15 UPD: MultiArc configuration file 2022-09-03 12:26:47 +03:00
Alexander Koblov
626dec1239 FIX: Commit forgotten file 2022-09-02 23:30:48 +03:00
Alexander Koblov
556253d4b3 FIX: TShellFolder.EnumObjects 2022-09-02 23:29:58 +03:00
Alexander Koblov
8e619273a4 ADD: Editor - show bookmarks 2022-09-02 23:04:29 +03:00
Alexander Koblov
ba9804ae0a ADD: Show file properties dialog for multiple objects from different path 2022-09-02 22:14:21 +03:00
Alexander Koblov
5464a345c3 ADD: Show context menu for multiple objects from different path 2022-09-02 22:14:20 +03:00
Alexander Koblov
e2aecba435 FIX: Process running state 2022-08-28 19:47:48 +03:00
Alexander Koblov
b22ac36b40 UPD: Bevel style 2022-08-28 19:45:31 +03:00
Alexander Koblov
f6e99c46c6 FIX: Process running state 2022-08-28 14:32:40 +03:00
Alexander Koblov
d3547ad222 FIX: Packer name lost 2022-08-28 12:44:34 +03:00
rich2014
97e33a8601
FIX: PathLabel: HighLightPos calculation error, when PathDelim is next to Chinese (#560) 2022-08-27 11:38:17 +03:00
Alexander Koblov
822f92ab8e UPD: Language files 2022-08-24 22:02:19 +03:00
Alexander Koblov
40c7b0d68a ADD: Default single-byte text encoding option 2022-08-24 21:42:24 +03:00
Alexander Koblov
5fa5fb0ae3 FIX: Deleting of last picture file in QuickView mode (fixes #546) 2022-08-23 18:28:31 +03:00
Alexander Koblov
ec855c4d0f ADD: Context menu - always show "New->Directory" and "New->File" menu items (fixes #559) 2022-08-22 22:47:16 +03:00
rich2014
00dad2ecf7
FIX: DARWIN: set MACOSX_DEPLOYMENT_TARGET to 11.0 on aarch64 CPU_TARGET (#558) 2022-08-22 18:51:41 +03:00
rich2014
b8c0ddbb26
FIX: COCOA: EditButton: VK_ESCAPE in IME state (#556) 2022-08-22 08:08:30 +03:00
rich2014
856f4198d2
UPD: hold ALT key while dragdropping, popup ask menu (Copy/Move/Create Link/...), especially useful on Macs (due to lack of right mouse button) (#510) 2022-08-21 19:38:08 +03:00
rich2014
00ebc24d95
FIX: COCOA: EditButton: VK_RETURN in IME state (#550) 2022-08-21 19:06:20 +03:00
rich2014
75c4e74fb7
FIX: F7-mkdir: VK_ESCAPE VK_RETURN in IME state (#553) 2022-08-21 18:45:52 +03:00
rich2014
98f6133de3
FIX: DARWIN: aarch64: Mount Driver <no label> (TStatFS bug of FPC RTL issue 39873) (#554) 2022-08-21 18:37:07 +03:00
Alexander Koblov
1d3ba73af4 FIX: SevenZip - create 7-Zip archive with PPMd compression method 2022-08-20 14:32:14 +03:00
rich2014
2dffc7af80
FIX: COCOA: "Select file name without extension when renaming" doesn't work (#545) 2022-08-17 19:03:20 +03:00
rich2014
d15db00f20
FIX: COCOA: controls position error in CopyMoveDlg (#543) (fixes #341) 2022-08-17 18:31:08 +03:00
Alexander Koblov
c13c40bd32 FIX: SevenZip - MessageBox text encoding 2022-08-15 22:00:21 +03:00
rich2014
d6fae8a557
UPD: MascOS: "Services" i18n translation (#540)
* UPD: MascOS: "Services" i18n translation

* FIX: Services in ru.po
2022-08-10 20:39:57 +03:00
rich2014
f6ae8bc46b
UPD: Refactor: remove Duplicate Code in uClipboard (#541) 2022-08-10 19:57:03 +03:00
rich2014
ec621657ff
UPD: MacOS: Service PopUp Menu i18n (#538) 2022-08-10 18:30:52 +03:00
rich2014
b944c7d35b
ADD: MacOS: add System Services Sub Menu to PopupMenu (#536) 2022-08-10 14:51:49 +03:00
Alexander Koblov
6fc22a2bff FIX: Error change filename in copy operation (fixes #503) 2022-08-09 21:56:31 +03:00
rich2014
6f1561ffbe
ADD: integration with MacOS Main Menu (#535)
* ADD: MacOS: Service Menu skeleton

* Add: MacOS: Service Menu process files
2022-08-09 18:59:08 +03:00
Alexander Koblov
29cea47087 FIX: Zip - update time extra fields (fixes #492) 2022-08-09 18:50:38 +03:00
rich2014
cf0e895b45
ADD: added integration with MacOS (#530)
* ADD: MacOS: added integration with MacOS. using the system context 'services' menu, reveal selected folder or file in Double Commander (for all apps including Finder.app)

* FIX: Free Resource
2022-08-08 21:23:37 +03:00
Alexander Koblov
cb21bfedb8 ADD: Show in the properties dialog which addon/plugin used to open archive 2022-08-07 11:39:22 +03:00
Nick Korotysh
5f5704382c
FIX: use ad-hoc signing, fixes "Double Commander is damaged" on ARM-based Macs (#523) 2022-08-06 13:04:56 +03:00
Alexander Koblov
8d01d3cd10 UPD: Project file 2022-08-06 12:48:25 +03:00
Alexander Koblov
6ea44db451 FIX: Extract encrypted RAR archive when password contains non-ASCII characters 2022-08-06 12:48:25 +03:00
rich2014
d688c5e5fe
FIX: DARWIN: load the icon file content by native method (#513)
* FIX: DARWIN: load the icon file content by native method, support all MacOS ICNS formats (bitmap/png/jpeg), and avoid limited image formats support of Lazarus

* FIX: DARWIN: OpenWithSubMenu ImageList not free
2022-08-03 18:43:34 +03:00
Alexander Koblov
aca79a3b30 FIX: Abort FileSourceOperation 2022-08-01 19:13:35 +03:00
Alexander Koblov
cd3db6e871 FIX: Select duplicates dialog (wrong selection in the last group) 2022-08-01 19:11:55 +03:00
Alexander Koblov
38342adcc2 FIX: SevenZip - Create .zip archives 2022-07-31 22:33:59 +03:00
Alexander Koblov
60e4418a84 FIX: DC_CONFIG_PATH value 2022-07-31 22:19:00 +03:00
Alexander Koblov
6995fe0c30 FIX: Command line parameter '--debug-log' (Lazarus >= 2.2) 2022-07-31 18:44:20 +03:00
rich2014
99347219e2
FIX: get app icon filename by native method, support Binary format of Info.plist, replace the original HACK code (#511) 2022-07-16 20:27:04 +03:00
Alexander Koblov
00ea415c48 FIX: Unrar - don't rewrite configuration file 2022-07-15 18:12:16 +03:00
Alexander Koblov
0c49b02fb2 UPD: Disable create archive inside other archive (function not supported) 2022-07-14 22:51:40 +03:00
Alexander Koblov
afa1f40635 ADD: Allow to change archiver options when copy into archive 2022-07-14 22:21:28 +03:00
Alexander Koblov
9d468c8aca FIX: SevenZip - save configuration when path contains non ASCII characters 2022-07-14 18:41:28 +03:00
Alexander Koblov
cb5357bf45 FIX: Unrar - save configuration when path contains non ASCII characters 2022-07-14 18:31:24 +03:00
Alexander Koblov
a350294645 FIX: Line-endings 2022-07-13 20:00:13 +03:00
Alexander Koblov
6b0199f74e FIX: Line-endings 2022-07-12 20:42:55 +03:00
rich
8055793373 FIX: GUI becomes unresponsive or freezes when deleting large numbers of files, especially on slow storage devices 2022-07-10 23:09:53 +03:00
rich
37bce52dc9 FIX: in "Synchronize directories", KASProgressBar isn't reset while synchronize again 2022-07-10 23:09:53 +03:00
rich
20e6fe69e5 UPD: Cocoa: show progress by Caption (make up a lack of KASProgressBar on Cocoa) 2022-07-10 23:09:53 +03:00
rich
74cfa08245 FIX #481: Cocoa: hard to see in "Synchronize directories" (transparent background by "clDefault" color) 2022-07-10 23:09:53 +03:00
Alexander Koblov
710c2d6cc2 FIX: Error Access Violation in "Directory Hotlist" (fixes #491) 2022-07-08 18:45:20 +03:00
Alexander Koblov
c1e9164dc1 FIX: Remove UseConfigInProgramDir from doublecmd.xml 2022-07-08 18:26:40 +03:00
Alexander Koblov
0172748aef FIX: Path to doublecmd.cfg 2022-07-08 18:10:51 +03:00
Alexander Koblov
7164b4edac FIX: Error Access Violation in "Directory Hotlist" (fixes #491) 2022-07-07 22:07:46 +03:00
Alexander Koblov
178f2bf71b UPD: Enable native Wayland support (Qt5, Lazarus >= 2.2.0) 2022-07-07 21:35:21 +03:00
Alexander Koblov
ee10799e62 FIX: Build under Linux (Qt5) 2022-07-06 20:31:23 +03:00
Alexander Koblov
1f4a43dc75 FIX: Line-endings 2022-07-06 20:21:59 +03:00
Alexander Koblov
1266bfcdba UPD: Store doublecmd.cfg near doublecmd.xml 2022-07-06 20:13:40 +03:00
Alexander Koblov
70f990d3dd UPD: Refactoring 2022-07-05 22:17:42 +03:00
rich2014
29571938ce
ADD: DARWIN: copy/cut/paste files perfectly, true file format instead of text string, no matter inside dc or on external apps (MacOs 10.5 compatibility) (#494)
* UDP: Refactor uClipboard to add darwin support later

* ADD: DARWIN: Clipboard base support

* ADD: DARWIN: add copy/cut files perfectly, true file format instead of text string, no matter inside dc or on external apps (MacOs 10.5 compatibility)

* ADD: DARWIN: add copy/cut files perfectly, true file format instead of text string, no matter inside dc or on external apps (MacOs 10.5 compatibility)

Co-authored-by: rich <102933068+rich222222@users.noreply.github.com>
2022-07-05 19:05:13 +03:00
Alexander Koblov
0f8f9f3563 FIX: Rename file on copy 2022-07-05 18:58:40 +03:00
rich2014
6ed8b87722
FIX: DARWIN: incorrectly setting the AllowDropFiles property, preventing dragdrop files from external apps (#493) 2022-07-03 19:09:33 +03:00
Alexander Koblov
d056097608 UPD: Clean up
FIX: Wrong lParam value
2022-07-01 22:29:28 +03:00
Alexander Koblov
f3e558ca31 UPD: Enable RichView plugin 2022-07-01 22:04:43 +03:00
Alexander Koblov
6b976b54b5 ADD: RichView plugin 2022-07-01 21:57:15 +03:00
Alexander Koblov
c44d56ace6 FIX: Viewer - hang on view corrupted .gif 2022-06-30 21:38:17 +03:00
Alexander Koblov
03e6a989d9 FIX: Zip - extract file with long name (> 100) from .tar archive in the pax format 2022-06-27 20:39:24 +03:00
Alexander Koblov
c3f0f99774 ADD: Zip - show bzip2/zstd/xz compression/decompression progress 2022-06-21 21:35:33 +03:00
rich2014
15d5af3910
FIX: Cocoa: FileViewNotebook will fall into chaos, caused by popup menu after DblClick on tabs (#477) 2022-06-19 00:03:41 +03:00
Alexander Koblov
7b23ccf8a9 FIX: Tree view menu height (exclude task bar) 2022-06-18 15:56:49 +03:00
Alexander Koblov
ff2732ac56 FIX: ExcludeBackPathDelimiter with drive root 2022-06-17 19:20:55 +03:00
Alexander Koblov
4b7187f153 ADD: Save volume size history 2022-06-14 19:24:19 +03:00
Alexander Koblov
73be93a767 UPD: Copyright year 2022-06-14 19:24:09 +03:00
Alexander Koblov
ac90cd8e54 FIX: Save create directories history 2022-06-14 19:21:06 +03:00
rich2014
a0ce8876f8
UPD: Cocoa: switch panel and tab more like on windows(when mouse down) (#467)
Co-authored-by: rich <102933068+rich222222@users.noreply.github.com>
2022-06-13 13:51:49 +03:00
Alexander Koblov
9cdebe8103 UPD: Create separate archives - request password and volume size only once 2022-06-12 22:02:42 +03:00
Alexander Koblov
8f581caf47 UPD: Use tilde symbol as revision delimiter 2022-06-12 15:48:47 +03:00
Alexander Koblov
27282fdf9b FIX: FPC 3.0.4 compatibility 2022-06-12 15:32:24 +03:00
Alexander Koblov
4aaa48f26e FIX: Range check error 2022-06-12 15:22:52 +03:00
Alexander Koblov
3b924f92d3 UPD: More compact main window title 2022-06-12 11:58:15 +03:00
rich2014
668c341a07
FIX: Cocoa: according page not actived after tab moved(dragdrop) (#466)
Co-authored-by: rich <102933068+rich222222@users.noreply.github.com>
2022-06-12 10:41:38 +03:00
Gitoffthelawn
f1ece5b23c
UPD: Improve readability and formatting (#465) 2022-06-11 23:06:00 +03:00
Alexander Koblov
3ac210bfa2 FIX: Viewer - double toolbar border (issue #463) 2022-06-11 23:00:37 +03:00
Alexander Koblov
ec782edbeb FIX: Delete folder from trash 2022-06-08 22:46:08 +03:00
Alexander Koblov
1e183face9 UPD: Virtual terminal - enable wrap lines by default 2022-06-08 19:10:13 +03:00
Alexander Koblov
a142f22e12 ADD: Viewer - scroll to the end on auto reload on 2022-06-06 18:48:40 +03:00
Alexander Koblov
cb775c18a3 ADD: Trash - Reload file list after restore command 2022-06-06 18:40:44 +03:00
Alexander Koblov
346ce45c8d UPD: Use DCDebug function 2022-06-05 15:09:48 +03:00
Alexander Koblov
3426aa0009 ADD: Simple trash file source (via GIO) 2022-06-05 15:09:48 +03:00
Alexander Koblov
66a7c4ea94 ADD: FileSource specific context menu 2022-06-05 15:09:48 +03:00
Alexander Koblov
d703cf254a FIX: FPC 3.0.4 compatibility 2022-06-05 12:54:46 +03:00
Alexander Koblov
239299b0ce ADD: MultiArc - ZPAQ archiver (fixes #447) 2022-06-05 11:49:47 +03:00
Alexander Koblov
fc02782353 UPD: Polish translation 2022-06-05 10:59:40 +03:00
Alexander Koblov
2648beba60 UPD: Splash screen icon 2022-06-03 23:59:35 +03:00
Alexander Koblov
81852154c1 UPD: Language files 2022-06-03 23:24:42 +03:00
Alexander Koblov
e933679fe3 ADD: Early config file
ADD: Feature [0001272] Option to turn off splash screen
2022-06-03 23:11:10 +03:00
Alexander Koblov
3d6a63cb79 UPD: About dialog icon (fixes #444) 2022-06-02 22:39:17 +03:00
btwise
1202e30332
UPD: Chinese translation (#439)
* Added incomplete Chinese localization translation

* Add FTP Chinese localization file

* fix chinese translate

* fix chinese translate

* update translate for zh_CN

* fix chinese translate

* fix chinese translate

* Update doublecmd.zh_CN.po
2022-05-31 19:19:47 +03:00
Alexander Koblov
d6d6b8d534 UPD: Polish translation 2022-05-29 20:44:45 +03:00
Alexander Koblov
8a070a870b UPD: Use GraphUtil unit 2022-05-26 22:06:26 +03:00
Alexander Koblov
b16a081b61 UPD: German language file 2022-05-26 19:47:55 +03:00
Alexander Koblov
4d474627ad FIX: Dark mode - MessageDlg color 2022-05-25 22:37:02 +03:00
Alexander Koblov
9d0bc637be FIX: Viewer - Office XML did not take into account word wrap mode 2022-05-25 19:15:42 +03:00
Alexander Koblov
2c28d3debe FIX: FPC 3.0.4 compatibility (fixes #385) 2022-05-24 19:49:29 +03:00
Alexander Koblov
f6e99ae76c FIX: Dark mode - find files dialog blinking on second show 2022-05-23 22:07:02 +03:00
Alexander Koblov
ebca80cb93 UPD: Polish translation 2022-05-23 19:14:03 +03:00
Alexander Koblov
83b9820bd5 UPD: Language files 2022-05-23 19:09:14 +03:00
Alexander Koblov
4e35349e3d ADD: Dark mode - force enabled option 2022-05-23 19:07:12 +03:00
Alexander Koblov
d9d4d08db1 UPD: German language file 2022-05-22 14:45:20 +03:00
Alexander Koblov
55ec158a2d ADD: BSD reversed mode checksum file format (fixes #349) 2022-05-22 12:02:18 +03:00
Alexander Koblov
c47eef0226 UPD: Project file 2022-05-21 22:36:19 +03:00
Alexander Koblov
0acb85988c UPD: Language files 2022-05-21 22:34:26 +03:00
Alexander Koblov
d2a5413a1b FIX: Save highlighters 2022-05-21 22:15:18 +03:00
Alexander Koblov
9e3a5f02cc UPD: Hungarian translation (fixes #436) 2022-05-21 22:05:38 +03:00
Alexander Koblov
1adeef8785 ADD: Option to disable dark mode 2022-05-21 22:03:02 +03:00
Alexander Koblov
665cbc8c93 UPD: C# highlighter 2022-05-21 18:48:43 +03:00
Alexander Koblov
06498ad1a0 ADD: Allow SynUniSyn change colors 2022-05-21 18:26:28 +03:00
WhiteChairFromIkea
b636e42eea
FIX: Reset filter field everytime when gaining focus (fixes #274)
Co-authored-by: WhiteChairFromIkea <dainius.mazuika@gmailcom>
2022-05-17 20:27:00 +03:00
Alexander Koblov
2780c2f874 FIX: Template submenu - skip misconfigured path (fixes #431) 2022-05-15 22:07:47 +03:00
rich2014
88fc722d37
FIX #419: Cocoa: Exception raised after directory opened in new Tab with double click (Cannot focus a disabled or invisible window) (#420)
Co-authored-by: rich <102933068+rich222222@users.noreply.github.com>
2022-05-14 12:14:09 +03:00
Alexander Koblov
75b5547627 ADD: Dark mode - paint hot header 2022-05-13 19:19:22 +03:00
Alexander Koblov
82f21b7a4b FIX: Save active columns set (fixes #430) 2022-05-12 22:23:23 +03:00
Alexander Koblov
bca8cc68d5 UPD: Viewer - don't save window size when close window from full screen mode 2022-05-12 19:52:53 +03:00
Alexander Koblov
82b892a637 FIX: SynUniHighlighter - load color schemes from file 2022-05-12 18:32:02 +03:00
Alexander Koblov
41ab0a8cbe UPD: Use appropriate blink color for recently modified files (depends on color lightness) 2022-05-11 21:57:45 +03:00
Alexander Koblov
fa96f7b026 ADD: Dark mode - paint hot checkbox and radiobutton 2022-05-11 21:18:44 +03:00
Alexander Koblov
8fd2b7c994 ADD: Dark mode - paint hot tab
FIX: Dark mode - paint left tab
2022-05-11 21:06:32 +03:00
Alexander Koblov
2a9efb18c0 UPD: Dark mode - paint tabs like native 2022-05-11 19:33:50 +03:00
Alexander Koblov
05a0430294 ADD: Viewer - options to change transparency colors 2022-05-10 13:10:21 +03:00
Alexander Koblov
7e4ecc1174 UPD: Viewer - make zoom and stretch independent 2022-05-09 18:08:02 +03:00
Alexander Koblov
55965ccdcb ADD: Viewer - image show transparency option 2022-05-09 17:50:33 +03:00
Alexander Koblov
dfa6271249 DEL: Unused units 2022-05-09 17:27:41 +03:00
Alexander Koblov
f75c0bee94 UPD: Use constant string 2022-05-09 16:40:31 +03:00
Alexander Koblov
9813338928 UPD: Use documented DwmSetWindowAttribute function 2022-05-09 16:25:19 +03:00
Alexander Koblov
50f9f16d52 UPD: Clean up 2022-05-09 16:25:19 +03:00
Alexander Koblov
aedd590bb2 UPD: Enable OpenOffice thumbnails 2022-05-08 23:35:09 +03:00
Alexander Koblov
421a2cf54f ADD: Windows imaging component support 2022-05-07 13:28:21 +03:00
Graham Inggs
8719f538b8
FIX: TUnixTime and TUnixMode for MIPS and PowerPC (#427) 2022-05-06 19:22:39 +03:00
Alexander Koblov
fd6d73d866 FIX: Viewer - save image stretch mode when exit from quick view 2022-05-05 20:15:17 +03:00
Alexander Koblov
73bd6d7f62 ADD: Viewer - image stretch mode to context menu 2022-05-05 19:45:07 +03:00
Alexander Koblov
dc16e3da04 UPD: Viewer - set stretch only large by default on 2022-05-05 19:09:44 +03:00
Alexander Koblov
205b82c132 ADD: Viewer - image stretch mode hotkeys 2022-05-05 19:06:56 +03:00
Alexander Koblov
e93ea09e72 FIX: Copy dialog - controls spacing 2022-05-03 18:18:39 +03:00
Nick Korotysh
8b38608e9a
UPD: update app homepage url in all installers resources (#425) 2022-05-03 17:49:51 +03:00
Alexander Koblov
54d67fa0ab FIX: Hide service mount points 2022-05-03 15:19:12 +03:00
Alexander Koblov
5451867f64 FIX: Zip - save Unix file attributes (fixes #424) 2022-05-03 12:08:01 +03:00
Alexander Koblov
c900435676 UPD: Dark mode - active disk button color 2022-05-02 23:14:18 +03:00
Alexander Koblov
a2f0906fc0 FIX: SynEdit gutter separator colors 2022-05-02 12:47:28 +03:00
Alexander Koblov
75fb9cadfb FIX: Windows 2000 compatibility 2022-05-02 12:05:36 +03:00
Richard Boß
f55c2407ea
UPD: Dark mode - border color for checkbox & radio button (#418) 2022-05-02 12:02:05 +03:00
Richard Boß
2ee47c593c
UPD: Dark mode - graytext color (#417) 2022-05-02 12:01:45 +03:00
Richard Boß
95616d96ab
UPD: Dark mode - selected tab background color (#416) 2022-05-02 12:01:33 +03:00
Richard Boß
d4d6522d51
UPD: Dark mode - menu separator lines (#415) 2022-05-01 16:06:26 +03:00
Alexander Koblov
fd3b2888fb UPD: Viewer - resize button position 2022-04-30 17:09:27 +03:00
Nick Korotysh
ca86095205
ADD: GenericName key to .desktop file (#414) 2022-04-30 13:45:28 +03:00
Alexander Koblov
c06b99b99f UPD: Dark mode - Radio button border color 2022-04-30 13:10:00 +03:00
Alexander Koblov
f18aa24659 UPD: Dark mode - check box painting 2022-04-30 12:55:18 +03:00
Alexander Koblov
297693a4a7 UPD: Start button glyph 2022-04-28 23:06:46 +03:00
Alexander Koblov
b36265ca8f UPD: Allow dark mode under Windows 11 Insider Preview 2022-04-26 22:32:23 +03:00
Alexander Koblov
869c6c645c UPD: Tree view - use same line color as expand sign (issue #405) 2022-04-26 21:17:17 +03:00
Alexander Koblov
f8511fbf4a FIX: View images (dark mode) 2022-04-26 21:05:04 +03:00
Alexander Koblov
a5b95d3089 FIX: Draw tree view expand sign (fixes #405) 2022-04-25 20:16:59 +03:00
Alexander Koblov
eb676ec561 FIX: Viewer - blinking on the file reload (Windows 11) 2022-04-25 20:16:59 +03:00
Alexander Koblov
3f3343856c FIX: Reserve space for second and the rest files (Linux) 2022-04-24 18:08:30 +03:00
Alexander Koblov
4363a1eb9b UPD: Component address 2022-04-24 17:05:03 +03:00
Alexander Koblov
9dff11c0be DEL: Wrong hint 2022-04-24 17:00:18 +03:00
Alexander Koblov
b657a2ce72 FIX: Dark title bar color (Windows 10 1809) 2022-04-24 12:03:20 +03:00
Alexander Koblov
d2142ef5f8 ADD: Native dark mode support (Windows >= 10) 2022-04-23 22:04:39 +03:00
Alexander Koblov
54c8cd9c3c UPD: Polish translation 2022-04-23 16:59:18 +03:00
Alexander Koblov
c127b62d6d UPD: Language files 2022-04-19 18:59:23 +03:00
Alexander Koblov
f2213b9e21 ADD: Create directory dialog - support extended syntax 2022-04-19 18:56:18 +03:00
Alexander Koblov
1223200f2d UPD: Language files 2022-04-16 11:39:28 +03:00
Alexander Koblov
ecba46346d ADD: Feature [0002367] Add Find, Replace and Goto line commands to Compare files 2022-04-16 11:22:46 +03:00
Alexander Koblov
439bd9ef66 UPD: Rewrite editor search dialog 2022-04-16 11:22:20 +03:00
Alexander Koblov
038b4d5c67 ADD: Ignore skipped files (issue #365) 2022-04-10 20:39:09 +03:00
Alexander Koblov
c3b1ce8636 UPD: Language files 2022-04-10 13:46:20 +03:00
Alexander Koblov
f398072a13 ADD: Confirmation when accidentally pressed Esc during copying/moving/etc (fixes #393) 2022-04-10 11:39:50 +03:00
Alexander Koblov
cd4bc7d234 ADD: Assembler highlighter 2022-04-09 21:06:39 +03:00
Alexander Koblov
9161dd623b UPD: Language files 2022-04-09 20:21:06 +03:00
Alexander Koblov
1d7e6737fe ADD: Multi-rename - only replace the first occurrence of the search string 2022-04-09 20:14:13 +03:00
Alexander Koblov
4214e67bfd UPD: Language files 2022-04-09 17:02:28 +03:00
Alexander Koblov
d89b2cf458 ADD: Multi-rename - case sensitive find and replace 2022-04-09 16:56:01 +03:00
Alexander Koblov
56b1eff92e UPD: MultiArc - execute list command from archive directory 2022-04-06 21:17:58 +03:00
Alexander Koblov
7d90b0852f FIX: Long delay with locked network path 2022-04-05 20:28:12 +03:00
Alexander Koblov
9c73674c83 ADD: Viewer plugins - itm_fit and itm_fontstyle support 2022-04-02 20:33:42 +03:00
Alexander Koblov
3972b94de8 ADD: Viewer plugins - itm_center and itm_wrap support 2022-04-02 19:38:04 +03:00
Alexander Koblov
d7abdecdba ADD: Viewer plugins - lcp_ansi and lcp_ascii support 2022-04-02 18:52:36 +03:00
Alexander Koblov
5f0ae995a5 FIX: A non-Latin folder name is not shown correctly in the title bar (fixes #354) 2022-04-02 17:00:01 +03:00
Alexander Koblov
811266e6c3 ADD: Don't allow rename file to the name with a dot at the end (Windows) 2022-04-02 12:35:18 +03:00
Alexander Koblov
1418d99735 FIX: Issue [0002028] Narrow tabs and shorten titles if too many tabs 2022-04-02 12:21:37 +03:00
Alexander Koblov
adefbd9868 ADD: Viewer - switch to office view mode in the quick view 2022-04-02 11:33:33 +03:00
Alexander Koblov
5e637aab68 FIX: Viewer - active mode state with wrap text enabled 2022-04-02 11:29:15 +03:00
Alexander Koblov
ce91c081d6 UPD: German language file 2022-03-27 20:21:41 +03:00
larinsv
f5809a23f5
FIX: FPC 3.3 compatibility (#385) 2022-03-27 20:21:21 +03:00
larinsv
988ece57d0
ADD: RegExpr validation for UTF8 encoded files in TfrmFindDlg.InvalidRegExpr method (#386)
* FIX: Trimming string length after calling pcre2_get_error_message

* ADD: Added ExecRegExpr function to uregexpru unit

* FIX: Added regexpr validation for UTF8 encoded files in TfrmFindDlg.InvalidRegExpr method
2022-03-27 14:06:31 +03:00
Alexander Koblov
cfb35ac986 ADD: Viewer - cm_ShowOffice hotkey 2022-03-26 11:44:23 +03:00
Alexander Koblov
e58e4a2dd0 UPD: Language files 2022-03-26 11:40:56 +03:00
Alexander Koblov
4eeecc980b ADD: Viewer - Wrap text option 2022-03-26 11:37:15 +03:00
Alexander Koblov
d14e0c6edc UPD: Language files 2022-03-25 21:38:43 +03:00
Alexander Koblov
231aee8184 ADD: Viewer - Office XML (text only) mode 2022-03-25 18:43:47 +03:00
Skif-off
c265df60f0
ADD: Lua - GetAbsolutePath, GetRelativePath functions (#382) 2022-03-24 19:57:17 +03:00
Alexander Koblov
9b479b805d FIX: Find files - use correct regular expression engine 2022-03-08 11:25:36 +03:00
Alexander Koblov
69f755015d ADD: RegExp - Unicode categories support 2022-03-08 11:23:27 +03:00
Alexander Koblov
8d57c7cc58 FIX: Poorly adjusted columns in Synchronize Directories (fixes #371) 2022-03-06 15:52:14 +03:00
Alexander Koblov
b6e156e88c ADD: Determine Windows 11 by build number (fixes #367) 2022-02-28 18:05:48 +03:00
Alexander Koblov
e0c273b8b1 UPD: German language file 2022-02-24 22:01:01 +03:00
Alexander Koblov
52b34362e3 UPD: German language files 2022-02-23 13:12:55 +03:00
Skif-off
2d737125cf
UPD: Russian translation (#362) 2022-02-22 18:39:43 +03:00
Alexander Koblov
5266114277 UPD: Language files 2022-02-21 18:50:27 +03:00
Alexander Koblov
68ca7d2b3e FIX: Status bar font caption 2022-02-21 18:33:10 +03:00
Alexander Koblov
f6a40943ec UPD: Allow zero (default) font size 2022-02-21 18:23:25 +03:00
Alexander Koblov
5cb0beaa39 ADD: Capability to change status bar font 2022-02-20 23:04:07 +03:00
Alexander Koblov
a5846ca9ff UPD: Virtual terminal - speed up scroll by mouse wheel 2022-02-20 23:01:35 +03:00
Alexander Koblov
778c9d11ad FIX: Virtual terminal - scroll by mouse wheel under GTK2 2022-02-20 19:12:13 +03:00
Alexander Koblov
7bb31a9a58 FIX: Virtual terminal - update caret position on resize 2022-02-20 19:01:12 +03:00
Alexander Koblov
6212dae17a UPD: Polish translation 2022-02-20 11:07:14 +03:00
Alexander Koblov
2c4fc33449 ADD: Virtual terminal - wide characters support 2022-02-19 14:20:22 +03:00
Pjotr123
179adb1a6e
Update doublecmd.nl.po: major revision of the Dutch translation (#360) 2022-02-19 11:04:29 +03:00
Alexander Koblov
c6204e1a60 FIX: Invalid library in the uses clause 2022-02-17 19:20:16 +03:00
Alexander Koblov
8561e212b7 ADD: cm_CopyNetNamesToClip icon 2022-02-16 20:37:47 +03:00
Alexander Koblov
ea734d9404 UPD: German language file 2022-02-16 20:19:39 +03:00
Alexander Koblov
90bc6fab5e FIX: Build under macOS 2022-02-16 19:24:41 +03:00
Alexander Koblov
2a69adfc53 ADD: TAR - read mtime from PAX headers 2022-02-16 18:36:46 +03:00
Alexander Koblov
11c5234aae FIX: Range check error 2022-02-16 18:08:09 +03:00
Alexander Koblov
ed3de09bcc FIX: Renaming/deletion a file in a smb:// location brings cursor to the top of file list (issue #350) 2022-02-15 21:47:41 +03:00
Alexander Koblov
609f81b7c6 FIX: Build under Linux 2022-02-14 19:21:31 +03:00
Alexander Koblov
e8dbd17144 UPD: Language strings 2022-02-14 19:03:08 +03:00
Alexander Koblov
37612fb89a UPD: Language files 2022-02-14 19:01:50 +03:00
Alexander Koblov
1319848425 ADD: cm_CopyNetNamesToClip internal command (fixes #352) 2022-02-14 18:49:01 +03:00
Alexander Koblov
4cf98dccdc UPD: Enable dark mode (limited) under unsupported Windows versions 2022-02-14 18:35:17 +03:00
Beexx
490e2604e6
UPD: French translation (#346)
Several improvements in French translation (use verbs at infinitive, add missing translations...).
2022-02-08 20:39:00 +03:00
Alexander Koblov
f781d434a5 ADD: Detect string - FIND() and FINDI() functions support 2022-02-08 20:18:21 +03:00
Alexander Koblov
ed9de0cda9 FIX: Get detect string 2022-02-08 19:40:16 +03:00
Alexander Koblov
98573bca46 UPD: Speed optimization 2022-02-08 19:06:20 +03:00
Alexander Koblov
29baad41de ADD: Detect string - parse [x] expression, refactoring 2022-02-08 19:04:08 +03:00
Alexander Koblov
16aebab1bf UPD: Prepare native dark mode support (Windows >= 10) 2022-02-07 19:14:04 +03:00
Alexander Koblov
705aa37bb1 FIX: Use case insensitive search 2022-02-07 19:12:26 +03:00
Alexander Koblov
29440a2db0 UPD: Refactoring 2022-02-06 13:38:47 +03:00
Alexander Koblov
3f4f630332 FIX: IContextMenu::InvokeCommand ignore E_FAIL return code (fixes #345) 2022-02-06 12:04:28 +03:00
Alexander Koblov
dff82972f2 FIX: Lazarus 2.0.12 compatibility 2022-02-05 21:20:47 +03:00
Alexander Koblov
8558e73836 FIX: Viewer - folder view text color 2022-02-05 20:05:41 +03:00
Alexander Koblov
762565d5eb DEL: Obsolete unbz2 plugin 2022-02-05 18:15:44 +03:00
Alexander Koblov
7dc29ef651 DEL: Move gvfs plugin to plugins repo 2022-02-05 14:15:17 +03:00
Alexander Koblov
71bb4d22f9 UPD: Base64 - use 76 symbols line length like other tools 2022-02-04 19:55:06 +03:00
Alexander Koblov
8c1dc7de0d FIX: Base64 - decoding progress 2022-02-04 18:54:13 +03:00
Alexander Koblov
29d0510f1a FIX: Extract operation progress 2022-02-04 18:42:59 +03:00
Alexander Koblov
3dce6c57b9 UPD: Base64 - increase performance 2022-02-04 18:41:16 +03:00
Alexander Koblov
dab1c72661 ADD: Base64 - cancel operation 2022-02-03 21:57:23 +03:00
Alexander Koblov
53a45c7b6d FIX: Base64 - build under Unix 2022-02-03 21:05:51 +03:00
Alexander Koblov
3581256bad ADD: Base64 to default plugins 2022-02-03 20:09:12 +03:00
Alexander Koblov
61127e7c63 ADD: Base64 plugin to build and install scripts 2022-02-03 19:47:21 +03:00
Alexander Koblov
6e73727125 UPD: Base64 - better header processing 2022-02-03 19:35:22 +03:00
Alexander Koblov
827ea3fbe0 ADD: Base64 - verify header 2022-02-02 22:46:18 +03:00
Alexander Koblov
cb5c744996 DEL: Move xpi_wdx to plugins repo 2022-02-02 20:45:28 +03:00
Alexander Koblov
e0e2fb0553 ADD: Base64 encode/decode plugin 2022-02-02 19:42:04 +03:00
Alexander Koblov
0ae9f96e8e UPD: Move GetNextLine function to doublecmd_common package 2022-02-02 18:46:59 +03:00
Alexander Koblov
410984ed20 FIX: Changing the case in FAT32 filesystem (fixes #327) 2022-02-01 19:28:22 +03:00
Alexander Koblov
fd7348ca23 FIX: Viewer - selection when text is scrolled horizontally 2022-01-31 18:19:59 +03:00
Alexander Koblov
dd56403d1c UPD: Terminal - use double buffering 2022-01-30 16:58:31 +03:00
Alexander Koblov
b0289a6f0e FIX: Wrong file selected after rename (fixes #339) 2022-01-30 14:09:39 +03:00
Alexander Koblov
197679f8e6 UPD: Replace ExtraLineSpacing by ExtraLineSpan for uniformity 2022-01-30 11:14:35 +03:00
Alexander Koblov
dd75f9103c FIX: Viewer - selection invisible characters in the text mode 2022-01-30 11:11:29 +03:00
Alexander Koblov
65df20cb4b FIX: Compiling under 64 bit 2022-01-29 16:48:32 +03:00
Alexander Koblov
b4664cf31f ADD: Viewer - load options LeftMargin and ExtraLineSpacing from configuration file (issue #338) 2022-01-29 16:01:24 +03:00
Alexander Koblov
69579d4625 ADD: Viewer - left margin option (issue #338) 2022-01-29 15:52:19 +03:00
Alexander Koblov
96f858f9ae FIX: Viewer - double byte text can have only even position (issue #338) 2022-01-29 13:36:55 +03:00
Alexander Koblov
778a5b0530 ADD: Viewer - ExtraLineSpacing option (issue #338) 2022-01-29 13:06:15 +03:00
Alexander Koblov
98bdde4e1f FIX: cm_ReloadFavoriteTabs Crash (fixes #236) 2022-01-27 20:34:11 +03:00
Alexander Koblov
840312d5f7 FIX: Different rightclick behaviour 0.9.10 and 1.0.0 alpha (fixes #105) 2022-01-26 20:29:20 +03:00
Alexander Koblov
583eaaf323 FIX: Terminal - paint without double buffering 2022-01-26 19:08:36 +03:00
Alexander Koblov
e0d66891c5 FIX: Terminal - access violation 2022-01-24 20:04:17 +03:00
Alexander Koblov
e51f4fa0df UPD: Terminal - better buffer overflow checking ADD: Terminal - erase screen left sequence 2022-01-24 18:52:22 +03:00
Alexander Koblov
ad8ee310b7 FIX: Terminal - crash 2022-01-23 14:08:38 +03:00
Alexander Koblov
d2b2920c29 FIX: Zip - use GMT time if available when extract 2022-01-19 20:53:03 +03:00
Alexander Koblov
fe7d3d64d7 FIX: Viewer - auto-reload using internal view mode only 2022-01-18 18:25:08 +03:00
Alexander Koblov
e663163af2 FIX: Replace file in the TAR archive 2022-01-17 19:12:00 +03:00
Alexander Koblov
110b04a8a3 UPD: Synchronize LCL translation 2022-01-09 15:46:16 +03:00
larinsv
67e8fa01c1
ADD: Find and replace using RegEx in UTF8 encoded files (#323)
* ADD: Implemented TRegExprU.ReplaceAll

* ADD: Implemented TRegExprEx.ReplaceAll

* UPD: Processing EncodingDefault (probably as UTF8) in TRegExprEx.ChangeEncoding

* ADD: Ability to set encoding immediately in the TRegExprEx.Create

* UPD: Allow find and replace text using RegEx in UTF8 encoded files
2022-01-09 15:32:50 +03:00
Alexander Koblov
430afd91ee UPD: Several fixes 2022-01-08 14:27:05 +03:00
Alexander Koblov
ea61dd9800 FIX: Move the cursor to the home position 2022-01-08 13:15:14 +03:00
Alexander Koblov
4d6faa30c0 FIX: Correctly process partial characters 2022-01-08 12:37:43 +03:00
Alexander Koblov
6100ef57f9 FIX: Scroll Up/Down with scrolling region 2022-01-07 22:47:21 +03:00
Alexander Koblov
8e0ab9a8cd ADD: Cursor next/previous line sequence 2022-01-07 21:04:16 +03:00
Alexander Koblov
32d37efad0 UPD: Show/hide console by Ctrl+O 2022-01-07 18:53:10 +03:00
Alexander Koblov
7db27cc2c8 UPD: Show/hide console by Ctrl+O 2022-01-07 18:46:12 +03:00
Alexander Koblov
84cbade919 UPD: Optimization 2022-01-07 17:59:32 +03:00
Alexander Koblov
edb79158fd FIX: Disable bold mode 2022-01-07 17:19:37 +03:00
Alexander Koblov
6e258b78aa FIX: Escape key handling 2022-01-07 17:01:39 +03:00
Alexander Koblov
f124b25986 FIX: RabbitVCS - ignore invalid json answer 2022-01-07 14:12:32 +03:00
Alexander Koblov
bffeb175a1 FIX: Update scrollbars 2022-01-05 22:03:11 +03:00
Alexander Koblov
76eaebb4f7 FIX: Auto-Wrap sequence
ADD: DEC Line Drawing charset
2022-01-05 20:49:40 +03:00
Alexander Koblov
acbf304fa7 FIX: Repaint on screen buffer change 2022-01-05 19:38:09 +03:00
Alexander Koblov
68bab18a4b ADD: Delete character sequence 2022-01-05 19:28:50 +03:00
Alexander Koblov
06eeed2ba3 FIX: Deleting a Favorite can produce a "is not a valid GUID value" (fixes #315) 2022-01-05 15:17:19 +03:00
Alexander Koblov
db3250b905 ADD: Soft reset sequence 2022-01-05 14:38:04 +03:00
Alexander Koblov
9d3682bd5d ADD: Insert/delete line sequences 2022-01-05 13:57:40 +03:00
Alexander Koblov
0325c4a073 ADD: Reverse line feed sequence 2022-01-03 13:01:29 +03:00
Alexander Koblov
27459aa040 FIX: Show caret under GTK2 2022-01-02 20:20:14 +03:00
Alexander Koblov
509b1d508f UPD: Set focus to console on Ctrl+O 2022-01-02 18:28:25 +03:00
Alexander Koblov
769a376b36 FIX: Update scroll range 2022-01-02 18:10:34 +03:00
Alexander Koblov
e0cd28431f ADD: Set scroll range 2022-01-02 17:23:24 +03:00
Alexander Koblov
dfacf9536f ADD: Alternate buffer support 2022-01-02 15:30:49 +03:00
Alexander Koblov
6a2b0a9d80 ADD: ScrollUp, ScrollDown sequences 2022-01-02 15:07:40 +03:00
Alexander Koblov
1961d78976 FIX: Erase commands should use current colors 2022-01-02 13:48:53 +03:00
Alexander Koblov
37caad876f UPD: Better UTF-8 handling 2022-01-02 12:56:31 +03:00
Alexander Koblov
e5f9ea26db ADD: Keypad sequences 2022-01-02 00:50:24 +03:00
Alexander Koblov
1fa30ac140 ADD: Designate Character Set sequences 2022-01-02 00:45:38 +03:00
Alexander Koblov
ff58c15f6f UPD: Disable wrap by default
FIX: Cursor keys under GTK2
2022-01-02 00:23:50 +03:00
Alexander Koblov
85637f161e FIX: Lazarus 2.0.12 compatibility 2022-01-02 00:07:28 +03:00
Alexander Koblov
4d8f7b95a5 UPD: Use new virtual terminal control 2022-01-01 17:24:17 +03:00
Alexander Koblov
5b707edbdb ADD: New virtual terminal control 2022-01-01 17:16:06 +03:00
Alexander Koblov
de65d29811 FIX: Lazarus 2.3 compatibility 2021-12-31 10:47:36 +03:00
Kaleb Luedtke
2462a1b2af
Feat: Add Version Pubilsher to ARP Entries (#310) 2021-12-29 21:55:05 +03:00
Alexander Koblov
2632f5ef8a UPD: Greek translation 2021-12-27 22:32:58 +03:00
Alexander Koblov
de6ea6c013 FIX: Zero-length file comparison does not end (fixes #301) 2021-12-24 23:29:10 +03:00
Alexander Koblov
4d4d8d992a FIX: WfxPlugins - copy out file with invalid time (Linux) 2021-12-15 21:45:06 +03:00
Alexander Koblov
cc5252d8d5 FIX: Don't show invalid time in set attributes dialog 2021-12-14 19:09:51 +03:00
Skif-off
499845a2b9
ADD: pixmaps.txt: New file types: Lua script (lua), presentations (odp, ppt, pptx) (#292) 2021-12-12 20:12:04 +03:00
Skif-off
d47181e17a
UPD: DC icon theme: "mimetypes", "places" and other small changes. (#291)
ADD: cm_loadlist, "mimetypes" 48x48, "places" 48x48 (index.theme was also updated), text-x-lua, x-office-presentation.
2021-12-12 19:32:26 +03:00
Alexander Koblov
dcac75bb8e FIX: FsContentGetDefaultView - restore previous view mode 2021-12-12 13:13:33 +03:00
Alexander Koblov
0af05fa411 ADD: Wfx-plugins - don't show file time for files with zero time 2021-12-11 12:48:36 +03:00
Alexander Koblov
549edc5703 FIX: Multi-rename - refresh replace test on preset change 2021-12-11 12:16:14 +03:00
Alexander Koblov
d1b749b2a7 FIX: Copy window size wrong on Linux (fixes #261) 2021-12-09 21:47:56 +03:00
Jongpil Kim
569f6fde89
UPD: Korean translation (#285)
* UPD: Korean translation

* UPD: Korean translation

Co-authored-by: Jongpil Kim <jongpil.kim@mt-solution.net>
2021-12-09 09:54:04 +03:00
Alexander Koblov
44292fdacc FIX: Show columns sets from current and general file systems only 2021-12-08 18:38:11 +03:00
Alexander Koblov
987bcfa124 FIX: Restore previous file view mode 2021-12-05 18:28:23 +03:00
Alexander Koblov
fe39bff758 FIX: XMLConfig - preserve white space 2021-12-05 13:28:02 +03:00
Alexander Koblov
9c517fc282 FIX: WfxPlugins - don't copy invalid time 2021-12-04 20:38:59 +03:00
Alexander Koblov
44121c1b32 FIX: Wrong data size when drag & drop text to file panel 2021-12-04 13:16:55 +03:00
Alexander Koblov
dd6aebb99f ADD: Command cm_LoadList 2021-12-03 20:12:41 +03:00
Alexander Koblov
ed797fe36d ADD: HEIC image format support (via libheif) 2021-12-03 18:37:40 +03:00
Alexander Koblov
2d0ae94da0 ADD: FsContentGetDefaultView - 'size' field units support 2021-12-01 19:12:06 +03:00
Alexander Koblov
341b6a7c4d FIX: Command cm_SrcOpenDrives does not work 2021-12-01 18:41:03 +03:00
Alexander Koblov
1af5eb67de ADD: FsContentGetDefaultView - 'writetime' field support 2021-11-30 22:58:34 +03:00
Alexander Koblov
fb3812bf5b FIX: Bad icon rendering 2021-11-30 22:27:47 +03:00
Alexander Koblov
5031bb52ee ADD: FTP - don't show time for connections 2021-11-30 19:21:06 +03:00
Alexander Koblov
b8c3b0a6f8 FIX: Wfx-plugins - don't show file time for files which don't have a time 2021-11-30 19:16:08 +03:00
Jongpil Kim
58b149c68d
UPD: Korean translation (#279)
Co-authored-by: Jongpil Kim <jongpil.kim@mt-solution.net>
2021-11-30 18:51:12 +03:00
Alexander Koblov
f1ae96cc3a ADD: FsContentGetDefaultView function support 2021-11-28 13:40:28 +03:00
Alexander Koblov
c131611fef FIX: Error when sending search results of duplicate files to the listbox (fixes #273) 2021-11-26 20:08:36 +03:00
Alexander Koblov
6aef9f423a UPD: Slovak translation 2021-11-21 23:01:52 +03:00
Alexander Koblov
740b7143f4 FIX: Changing the icons theme does not work on doublecmd-qt5 in archlinux (fixes #264) 2021-11-21 12:39:31 +03:00
Skif-off
175ffc8ec1
UPD: Some icons (sharpness, replacing, etc.) (#268) 2021-11-20 13:26:48 +03:00
Skif-off
29f2e6b640
ADD: pixmaps.txt: Office Open XML (docx, xlsx) (#267) 2021-11-19 17:10:38 +03:00
Alexander Koblov
93eab094c6 FIX: Crash on disable drive panels 2021-11-09 19:19:25 +03:00
Alexander Koblov
c9baafdb36 FIX: Don't use UTF8Decode/UTF8Encode functions (fixes #245) 2021-11-09 19:13:55 +03:00
Alexander Koblov
57ba2a297f FIX: Don't use UTF8Decode/UTF8Encode functions (issue #245) 2021-11-08 18:47:30 +03:00
Alexander Koblov
7a7454fbfb ADD: WMP plugin - .wma and .wmv extensions 2021-11-08 18:09:14 +03:00
Alexander Koblov
9b7b9c0bbf FIX: Drive free space label/indicator blinking 2021-11-06 23:49:03 +03:00
Alexander Koblov
6634673d7e ADD: Install script - aarch64 support 2021-11-06 18:24:45 +03:00
Alexander Koblov
60033ba0dd FIX: Compiling with Free Pascal 3.0.4 and Windows 2021-11-06 15:42:54 +03:00
Alexander Koblov
6bc914cbb3 ADD: Support *.svg icons when load from standard theme (issue #246) 2021-11-05 19:15:13 +03:00
Alexander Koblov
4053f55e49 UPD: Change shortcut "Alt+`" to "Alt+0" for the "cm_ActivateTabByIndex" 2021-11-05 17:09:56 +03:00
Alexander Koblov
94b7e95ac0 FIX: Multi-rename presets button width 2021-11-05 14:25:56 +03:00
Alexander Koblov
b3302a594d ADD: Glyph support to TKASButton 2021-11-05 14:25:56 +03:00
Alexander Koblov
ff6f89e618 ADD: Auto-detect default terminal emulator 2021-11-05 14:25:54 +03:00
Alexander Koblov
137c2af384 ADD: Determine KDE also by "plasma" session 2021-11-03 20:57:47 +03:00
Alexander Koblov
540aaddc54 FIX: Read icon theme from ~ / .kde4 for backward compatibility 2021-11-03 20:57:47 +03:00
Alexander Koblov
62220e1b98 FIX: Erratic behaviour with cm_syncchangedir in toolbar (fixes #238) 2021-11-01 22:26:59 +03:00
Alexander Koblov
72c9708cfa FIX: Don't remove only SevenZipDlg.res (fixes #234) 2021-10-31 11:21:15 +03:00
Alexander Koblov
554a216fa3 FIX: File mode 2021-10-31 11:10:46 +03:00
Alexander Koblov
c4fcd808e3 UPD: Controls alignment 2021-10-31 11:02:44 +03:00
Alexander Koblov
6200919152 UPD: Rearrange buttons 2021-10-31 10:30:35 +03:00
Alexander Koblov
68c9d3e35e UPD: Hungarian translation (fixes #233) 2021-10-30 22:38:15 +03:00
Alexander Koblov
282cdc710d UPD: INSTALL.txt 2021-10-30 22:37:16 +03:00
Alexander Koblov
0b5d0c917e FIX: Default button height 2021-10-30 22:36:47 +03:00
Alexander Koblov
0871a92aef FIX: Dialogue needs to resize for multirename (fixes #228) 2021-10-30 15:07:03 +03:00
Alexander Koblov
e763ccc916 FIX: Build under linux-arm 2021-10-28 20:38:48 +03:00
Alexander Koblov
93942be43b FIX: Double Commander 1.0.0_beta (Qt5) failed to launch: Exception=Duplicate icon format (fixes #206) 2021-10-28 19:48:59 +03:00
Alexander Koblov
78d28932af FIX: FTP - long delay with some ftps servers 2021-10-28 18:07:39 +03:00
Alexander Koblov
2226f12be6 FIX: Autorename source and target shortcut key conflict (fixes #223) 2021-10-26 18:47:42 +03:00
Alexander Koblov
72ca6065fd FIX: Push correct window handle to plugins (Qt5) 2021-10-26 18:31:10 +03:00
Alexander Koblov
7eb9ce780f FIX: Ignore floating point division by zero (fixes #224) 2021-10-25 19:06:33 +03:00
Alexander Koblov
4a3442ca80 UPD: Default title style 2021-10-24 22:10:52 +03:00
Alexander Koblov
fa1ebb7e80 DEL: KDE4 specific code 2021-10-24 22:07:28 +03:00
Alexander Koblov
707b77a43e UPD: Default fonts size 2021-10-24 21:47:29 +03:00
Alexander Koblov
9cececd39b UPD: Optimization 2021-10-23 21:20:59 +03:00
GitHub42p
0633ceaaca
FIX: Sort order in "Synchronize dirs" (fixes #173) 2021-10-23 21:11:35 +03:00
Alexander Koblov
b1269ed4d0 FIX: FTP modified files are stored with unchanged date (fixes #218) 2021-10-23 14:13:48 +03:00
Alexander Koblov
ff7d514f15 FIX: Elevation does not work under standard user account (fixes #217) 2021-10-23 13:36:23 +03:00
Alexander Koblov
4e3a509e8e FIX: FTP - use mbFileExists function and TFileStreamEx class (fixes #213) 2021-10-23 13:36:23 +03:00
Ars Masiuk
d250e256f6
Update doublecmd.uk.po (#216)
Typo fixed
2021-10-21 22:51:52 +03:00
Alexander Koblov
59f8237282 FIX: Don't use flock function with all Samba variants (fixes #213) 2021-10-21 18:51:38 +03:00
Alexander Koblov
f79147d9a9 FIX: Context menu parent (fixes #208) 2021-10-19 20:14:41 +03:00
Alexander Koblov
aa9b6fc691 FIX: Use fmCreate when rewrite file 2021-10-17 11:01:49 +03:00
Alexander Koblov
4c05a60d6c ADD: Icons cm_MoveTabLeft and cm_MoveTabRight 2021-10-17 00:41:51 +03:00
Alexander Koblov
a9f34dcb7b UPD: Install script 2021-10-16 14:59:44 +03:00
Alexander Koblov
ab0ffc4f72 UPD: Patch file 2021-10-16 14:07:20 +03:00
Alexander Koblov
6fd35a5209 FIX: Remove temporary file 2021-10-16 13:32:23 +03:00
Alexander Koblov
e38d7eeadf UPD: Default plugins 2021-10-16 13:32:22 +03:00
Alexander Koblov
9abafa32f7 UPD: Default option value 2021-10-16 12:38:41 +03:00
Alexander Koblov
c16eaa1e43 UPD: Install scripts 2021-10-16 12:17:49 +03:00
Alexander Koblov
89d8c1c82b ADD: Feature request: add keyboard shortcuts for moving active tab left / right (issue #200) 2021-10-15 23:51:05 +03:00
Alexander Koblov
329482974f FIX: Disable tooltip edit with empty file type list 2021-10-14 20:18:08 +03:00
Alexander Koblov
d8f0c46538 UPD: Version number 2021-10-10 14:10:02 +03:00
1709 changed files with 310748 additions and 242104 deletions

4
.gitattributes vendored
View file

@ -1,2 +1,4 @@
*.sh text eol=lf
*.bat text eol=crlf
*.bat -text
language/*.po text eol=lf

34
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View file

@ -0,0 +1,34 @@
name: "Bug report"
labels: [bug]
description: Report a bug or unexpected behavior
body:
- type: markdown
attributes:
value: |
Before filling a new bug, please use the [search form](https://doublecmd.sourceforge.io/mantisbt/view_all_bug_page.php) to try to locate similar bugs at the old bug tracker.
See [Making a bug report](https://github.com/doublecmd/doublecmd/wiki/Making-a-bug-report) page for guidelines on how to make a good bug report.
- type: textarea
attributes:
label: Version
placeholder: |
Double Commander
Version: 1.0.9
Revision: 222
Commit: a844456e4
Build date: 2022/12/03
Lazarus: 2.2.5.0
FPC: 3.2.2
Platform: x86_64-Win64-win32/win64
OS version: Windows 10 22H2 x86_64
description: |
Choose `Menu → Help → About` to find out.
validations:
required: true
- type: textarea
attributes:
label: Description
placeholder: Detailed description
validations:
required: true

9
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,9 @@
blank_issues_enabled: false
contact_links:
- name: Feature request
url: https://github.com/doublecmd/doublecmd/discussions/categories/suggestions
about: Please use GitHub Discussions to suggest a new feature or improvement
- name: I have a question about Double Commander
url: https://github.com/doublecmd/doublecmd/discussions/categories/general
about: Please use GitHub Discussions to ask questions

7
.github/dependabot.yml vendored Normal file
View file

@ -0,0 +1,7 @@
---
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

112
.github/scripts/create_release.sh vendored Executable file
View file

@ -0,0 +1,112 @@
#!/bin/bash
# The new package will be saved here
PACK_DIR=$PWD/doublecmd-release
# Temp dir for creating *.dmg package
BUILD_PACK_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d)
# Save revision number
DC_REVISION=$(install/linux/update-revision.sh ./ ./)
# Read version number
DC_MAJOR=$(grep 'MajorVersionNr' src/doublecmd.lpi | grep -o '[0-9.]\+')
DC_MINOR=$(grep 'MinorVersionNr' src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0)
DC_MICRO=$(grep 'RevisionNr' src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0)
DC_VER=$DC_MAJOR.$DC_MINOR.$DC_MICRO
# Set widgetset
export lcl=cocoa
mkdir -p $PACK_DIR
# 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
chmod 644 $(pwd)/doublecmd.app/Contents/Info.plist
build_unrar()
{
DEST_DIR=$(pwd)/install/darwin/lib/$CPU_TARGET
pushd /tmp/unrar
make clean lib CXXFLAGS+="-std=c++14 -DSILENT --target=$TARGET" LDFLAGS+="-dylib --target=$TARGET"
mkdir -p $DEST_DIR && mv libunrar.so $DEST_DIR/libunrar.dylib
popd
}
build_doublecmd()
{
# Build all components of Double Commander
./build.sh release
# Copy libraries
cp -a install/darwin/lib/$CPU_TARGET/*.dylib ./
# Prepare *.dmg package
mkdir -p $BUILD_PACK_DIR
install/darwin/install.sh $BUILD_PACK_DIR
pushd $BUILD_PACK_DIR
mv doublecmd.app 'Double Commander.app'
codesign --deep --force --verify --verbose --sign '-' 'Double Commander.app'
popd
# Create *.dmg package
HDI_TRY=1
while [ $HDI_TRY -le 5 ]; do
echo "Try to create a package $HDI_TRY ..."
# Bug: https://github.com/actions/runner-images/issues/7522
echo Killing XProtect...; sudo pkill -9 XProtect >/dev/null || true;
echo Waiting for XProtect process...; while pgrep XProtect; do sleep 3; done;
install/darwin/create-dmg/create-dmg \
--volname "Double Commander" \
--volicon "$BUILD_PACK_DIR/.VolumeIcon.icns" \
--background "$BUILD_PACK_DIR/.background/bg.jpg" \
--window-pos 200 200 \
--window-size 680 366 \
--text-size 16 \
--icon-size 128 \
--icon "Double Commander.app" 110 120 \
--app-drop-link 360 120 \
--icon "install.txt" 566 123 \
--icon ".background" 100 500 \
"$PACK_DIR/doublecmd-$DC_VER.$lcl.$CPU_TARGET.dmg" \
"$BUILD_PACK_DIR/"
if [ $? -eq 0 ]; then
break
fi
HDI_TRY=$((HDI_TRY+1))
sleep 10
done
# Clean DC build dir
./clean.sh
rm -f *.dylib
rm -rf $BUILD_PACK_DIR
}
# Set processor architecture
export CPU_TARGET=aarch64
export TARGET=arm64-apple-darwin
# Set minimal Mac OS X target version
export MACOSX_DEPLOYMENT_TARGET=11.0
build_unrar
build_doublecmd
# Set processor architecture
export CPU_TARGET=x86_64
export TARGET=x86_64-apple-darwin
# Set minimal Mac OS X target version
export MACOSX_DEPLOYMENT_TARGET=11.0
build_unrar
build_doublecmd

70
.github/scripts/create_snapshot.bat vendored Normal file
View file

@ -0,0 +1,70 @@
rem The new package will be created from here
set BUILD_PACK_DIR=%TEMP%\doublecmd-release
rem The new package will be saved here
set PACK_DIR=%CD%\doublecmd-release
rem Prepare target dir
mkdir %PACK_DIR%
rem Get revision number
call src\platform\git2revisioninc.exe.cmd %CD%
echo %REVISION%> %PACK_DIR%\revision.txt
rem Read version number
for /f tokens^=2delims^=^" %%a in ('findstr "MajorVersionNr" src\doublecmd.lpi') do (set DC_MAJOR=%%a)
for /f tokens^=2delims^=^" %%a in ('findstr "MinorVersionNr" src\doublecmd.lpi') do (set DC_MINOR=%%a)
for /f tokens^=2delims^=^" %%a in ('findstr "RevisionNr" src\doublecmd.lpi') do (set DC_MICRO=%%a)
if [%DC_MINOR%] == [] set DC_MINOR=0
if [%DC_MICRO%] == [] set DC_MICRO=0
set DC_VER=%DC_MAJOR%.%DC_MINOR%.%DC_MICRO%
rem Change log
git log -n 10 --format="%%h %%al %%ai%%n%%s%%n" > %PACK_DIR%\changelog.txt
rem Get libraries
pushd install
curl -o windows.7z -L https://github.com/doublecmd/external/raw/main/windows.7z
"%ProgramFiles%\7-Zip\7z.exe" x windows.7z
del /Q windows.7z
popd
rem Set processor architecture
set CPU_TARGET=i386
set OS_TARGET=win32
call :doublecmd
rem Set processor architecture
set CPU_TARGET=x86_64
set OS_TARGET=win64
call :doublecmd
GOTO:EOF
:doublecmd
rem Build all components of Double Commander
call build.bat darkwin
rem Copy libraries
copy install\windows\lib\%CPU_TARGET%\*.dll %CD%\
copy install\windows\lib\%CPU_TARGET%\winpty-agent.exe %CD%\
rem Prepare install dir
mkdir %BUILD_PACK_DIR%
rem Prepare install files
call install\windows\install.bat
rem Create *.7z archive
"%ProgramFiles%\7-Zip\7z.exe" a -mx9 %PACK_DIR%\doublecmd-%DC_VER%.r%REVISION%.%CPU_TARGET%-%OS_TARGET%.7z %DC_INSTALL_DIR%\*
rem Clean
del /Q *.dll
del /Q *.exe
call clean.bat
rm -rf %BUILD_PACK_DIR%
GOTO:EOF

55
.github/scripts/create_snapshot.lnx vendored Executable file
View file

@ -0,0 +1,55 @@
#!/bin/bash
# The new package will be saved here
PACK_DIR=$PWD/doublecmd-release
# Temp dir for creating *.tar.xz package
BUILD_PACK_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d)
# Save revision number
DC_REVISION=$(install/linux/update-revision.sh ./ ./)
# Read version number
DC_MAJOR=$(grep 'MajorVersionNr' src/doublecmd.lpi | grep -o '[0-9.]\+')
DC_MINOR=$(grep 'MinorVersionNr' src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0)
DC_MICRO=$(grep 'RevisionNr' src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0)
DC_VER=$DC_MAJOR.$DC_MINOR.$DC_MICRO
# Get libraries
pushd install
wget https://github.com/doublecmd/external/raw/main/linux.tar.gz
tar xzf linux.tar.gz
rm -f linux.tar.gz
popd
# Set widgetset
export lcl=gtk3
# Set processor architecture
export CPU_TARGET=$(fpc -iTP)
build_doublecmd()
{
# Build all components of Double Commander
./build.sh release
# Copy libraries
cp -a install/linux/lib/$CPU_TARGET/*.so ./
# Create *.tar.xz package
mkdir -p $BUILD_PACK_DIR
install/linux/install.sh --portable-prefix=$BUILD_PACK_DIR
pushd $BUILD_PACK_DIR
# Set run-time library search path
patchelf --set-rpath '$ORIGIN' doublecmd/doublecmd
tar -cJf $PACK_DIR/doublecmd-$DC_VER-$DC_REVISION.$lcl.$CPU_TARGET.tar.xz doublecmd
popd
# Clean DC build dir
./clean.sh
rm -rf $BUILD_PACK_DIR
}
mkdir -p $PACK_DIR
build_doublecmd

112
.github/scripts/create_snapshot.sh vendored Executable file
View file

@ -0,0 +1,112 @@
#!/bin/bash
# The new package will be saved here
PACK_DIR=$PWD/doublecmd-release
# Temp dir for creating *.dmg package
BUILD_PACK_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d)
# Save revision number
DC_REVISION=$(install/linux/update-revision.sh ./ ./)
# Read version number
DC_MAJOR=$(grep 'MajorVersionNr' src/doublecmd.lpi | grep -o '[0-9.]\+')
DC_MINOR=$(grep 'MinorVersionNr' src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0)
DC_MICRO=$(grep 'RevisionNr' src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0)
DC_VER=$DC_MAJOR.$DC_MINOR.$DC_MICRO
# Get libraries
pushd install
wget https://github.com/doublecmd/external/raw/main/darwin.tar.gz
tar xzf darwin.tar.gz
rm -f darwin.tar.gz
popd
# Set widgetset
export lcl=cocoa
# 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
chmod 644 $(pwd)/doublecmd.app/Contents/Info.plist
build_doublecmd()
{
# Build all components of Double Commander
./build.sh release
# Copy libraries
cp -a install/darwin/lib/$CPU_TARGET/*.dylib ./
# Prepare *.dmg package
mkdir -p $BUILD_PACK_DIR
install/darwin/install.sh $BUILD_PACK_DIR
pushd $BUILD_PACK_DIR
mv doublecmd.app 'Double Commander.app'
codesign --deep --force --verify --verbose --sign '-' 'Double Commander.app'
popd
# Create *.dmg package
HDI_TRY=0
HDI_MAX=5
while true; do
HDI_TRY=$((HDI_TRY+1))
echo "Try to create a package $HDI_TRY ..."
# Bug: https://github.com/actions/runner-images/issues/7522
echo Killing XProtect...; sudo pkill -9 XProtect >/dev/null || true;
echo Waiting for XProtect process...; while pgrep XProtect; do sleep 3; done;
sudo install/darwin/create-dmg/create-dmg \
--volname "Double Commander" \
--volicon "$BUILD_PACK_DIR/.VolumeIcon.icns" \
--background "$BUILD_PACK_DIR/.background/bg.jpg" \
--window-pos 200 200 \
--window-size 680 366 \
--text-size 16 \
--icon-size 128 \
--icon "Double Commander.app" 110 120 \
--app-drop-link 360 120 \
--icon "install.txt" 566 123 \
--icon ".background" 100 500 \
"$PACK_DIR/doublecmd-$DC_VER-$DC_REVISION.$lcl.$CPU_TARGET.dmg" \
"$BUILD_PACK_DIR/"
if [ $? -eq 0 ]; then
break
fi
if [ $HDI_TRY -eq $HDI_MAX ]; then
break
fi
sleep 10
done
# Clean DC build dir
./clean.sh
rm -rf $BUILD_PACK_DIR
}
mkdir -p $PACK_DIR
echo $DC_REVISION > $PACK_DIR/revision.php
# Set processor architecture
export CPU_TARGET=aarch64
# Set minimal Mac OS X target version
export MACOSX_DEPLOYMENT_TARGET=11.0
build_doublecmd
# Set processor architecture
export CPU_TARGET=x86_64
# Set minimal Mac OS X target version
export MACOSX_DEPLOYMENT_TARGET=11.0
build_doublecmd

32
.github/scripts/upload_snapshot.sh vendored Executable file
View file

@ -0,0 +1,32 @@
#!/bin/bash
echo $OSTYPE
echo "$SSH_PRIVATE_KEY" > ssh_key
echo "cd /home/project-web/doublecmd/htdocs/snapshots" > upload_snapshot.txt
echo "lcd doublecmd-release" >> upload_snapshot.txt
if [[ "$OSTYPE" == "msys" ]]; then
icacls.exe ssh_key //inheritance:r
echo "-rm *.7z" >> upload_snapshot.txt
echo "put *.7z" >> upload_snapshot.txt
echo "put *.txt" >> upload_snapshot.txt
else
chmod 0600 ssh_key
echo "-rm *.dmg" >> upload_snapshot.txt
echo "put *.dmg" >> upload_snapshot.txt
echo "put *.php" >> upload_snapshot.txt
fi
echo "quit" >> upload_snapshot.txt
sftp -o StrictHostKeyChecking=no -i ssh_key -b upload_snapshot.txt $REMOTE_USER@$REMOTE_HOST
rm -f ssh_key upload_snapshot.txt

58
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,58 @@
name: build-release
on:
workflow_dispatch:
release:
types: [prereleased, released]
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
build-mac:
runs-on: macos-14
steps:
- name: Install Free Pascal
uses: doublecmd/lazarus-install@mac
with:
lazarus-version: "stable"
- name: Get Lazarus source
uses: actions/checkout@v6
with:
repository: 'fpc/Lazarus'
ref: 'fixes_4'
- name: Build and install Lazarus
run: |
make all
sudo make install
- name: Create Lazarus config
run: |
sudo mkdir -p /etc/lazarus
sudo cp tools/install/macosx/environmentoptions.xml /etc/lazarus/environmentoptions.xml
sudo sed -i -e "s|_PPCARCH_|fpc|g; s|/Developer/lazarus|/usr/local/share/lazarus|g" /etc/lazarus/environmentoptions.xml
- name: Checkout source
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Download unrar source code
run: wget https://www.rarlab.com/rar/unrarsrc-7.2.3.tar.gz -O /tmp/unrarsrc.tar.gz
- name: Extract unrar source code
run: cd /tmp && tar xzf unrarsrc.tar.gz
- name: Build packages
run: ./.github/scripts/create_release.sh
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
file: doublecmd-release/doublecmd*.dmg
tag: ${{ github.ref }}
overwrite: true
file_glob: true

155
.github/workflows/snapshots.yml vendored Normal file
View file

@ -0,0 +1,155 @@
name: build-snapshot
on:
workflow_dispatch:
push:
paths:
- 'components/**'
- 'plugins/**'
- 'sdk/**'
- 'src/**'
branches:
- master
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
build-mac:
runs-on: macos-14
steps:
- name: Install Free Pascal
uses: doublecmd/lazarus-install@mac
with:
lazarus-version: "stable"
- name: Get Lazarus source
uses: actions/checkout@v6
with:
repository: 'fpc/Lazarus'
- name: Build and install Lazarus
run: |
make all
sudo make install
- name: Create Lazarus config
run: |
mkdir -p $HOME/.lazarus
cp tools/install/macosx/environmentoptions.xml $HOME/.lazarus/environmentoptions.xml
sed -i -e "s|_PPCARCH_|fpc|g; s|/Developer/lazarus|/usr/local/share/lazarus|g" $HOME/.lazarus/environmentoptions.xml
- name: Checkout source
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Prepare source
run: sed -i -e "s|BOX_CLIENT_SECRET = '\*'|BOX_CLIENT_SECRET = '$BOX_CLIENT_SECRET'|g" plugins/wfx/MacCloud/src/drivers/oauth2/box/uboxclient.pas
env:
BOX_CLIENT_SECRET: ${{ secrets.BOX_CLIENT_SECRET }}
- name: Build packages
run: ./.github/scripts/create_snapshot.sh
- name: Share data between jobs
uses: actions/upload-artifact@v7
with:
name: snapshot-mac
retention-days: 1
compression-level: 0
path: doublecmd-release/doublecmd*.dmg
build-win:
runs-on: windows-latest
steps:
- name: Install Lazarus
uses: doublecmd/lazarus-install@win
with:
lazarus-version: "stable"
- name: Checkout source
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Restore timestamps
uses: chetan/git-restore-mtime-action@v2
- name: Build packages
run: ./.github/scripts/create_snapshot.bat
- name: Share data between jobs
uses: actions/upload-artifact@v7
with:
name: snapshot-win
retention-days: 1
compression-level: 0
path: doublecmd-release/*
build-lin:
runs-on: ubuntu-22.04
steps:
- name: Install dependencies
run: |
sudo apt update
sudo apt install fpc patchelf libgtk-3-dev libdbus-1-dev
- name: Get Lazarus source
uses: actions/checkout@v6
with:
repository: 'fpc/Lazarus'
- name: Build and install Lazarus
run: |
make all
sudo make install
- name: Create Lazarus config
run: |
mkdir -p $HOME/.lazarus
cp tools/install/linux/environmentoptions.xml $HOME/.lazarus/environmentoptions.xml
sed -i -e "s|__LAZARUSDIR__|/usr/local/share/lazarus|g" $HOME/.lazarus/environmentoptions.xml
- name: Checkout source
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Build packages
run: ./.github/scripts/create_snapshot.lnx
- name: Share data between jobs
uses: actions/upload-artifact@v7
with:
name: snapshot-lin
retention-days: 1
compression-level: 0
path: doublecmd-release/doublecmd*.tar.xz
upload:
needs: [build-win, build-mac, build-lin]
runs-on: ubuntu-latest
environment: snapshots
steps:
- name: Download artifacts
uses: actions/download-artifact@v8
with:
merge-multiple: true
- name: Save revision number
run: echo "REVISION=$(cat revision.txt)" >> "$GITHUB_ENV"
shell: bash
- name: Upload binaries to snapshots
uses: svenstaro/upload-release-action@v2
with:
repo_name: doublecmd/snapshots
repo_token: ${{ secrets.SNAPSHOTS }}
file: ./*
release_name: Revision ${{ env.REVISION }}
tag: ${{ env.REVISION }}
body: ${{ vars.BODY }}
overwrite: true
file_glob: true

13
.github/workflows/winget.yml vendored Normal file
View file

@ -0,0 +1,13 @@
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: alexx2000.DoubleCommander
installers-regex: '\.msi$'
token: ${{ secrets.WINGET_TOKEN }}

3
.gitignore vendored
View file

@ -15,6 +15,8 @@
*.dsx
*.w?x
units/
/doublecmd
tools/extractdwrflnfo
# Lazarus autogenerated files (duplicated info)
*.rst
@ -31,3 +33,4 @@ lib/
# Application bundle for Mac OS
*.app/
.DS_Store

361
LICENSE.md Normal file
View file

@ -0,0 +1,361 @@
### 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.
### 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 an idea of what it does.
Copyright (C) yyyy 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](https://www.gnu.org/licenses/lgpl.html) instead of this
License.

View file

@ -1,37 +1,29 @@
**Double Commander** is a [free](https://www.gnu.org/philosophy/free-sw.html) cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas.
**Double Commander** is a [free](https://www.gnu.org/philosophy/free-sw.html) cross-platform open source file manager with two panels side by side (or one above the other). It is inspired by Total Commander and features some innovative new ideas.
Double Commander can be run on several platforms and operating systems.
It supports 32-bit and 64-bit processors. See [Supported platforms](https://github.com/doublecmd/doublecmd/wiki/Supported-platforms)
for a complete list.
See Double Commander in action in the [Gallery](https://doublecmd.sourceforge.io/gallery).
See Double Commander in action in the [Screenshot Gallery](https://doublecmd.sourceforge.io/gallery).
## Where to start
- Download
### Download
Go to [Double Commander download page](https://sourceforge.net/p/doublecmd/wiki/Download) to download the latest release.
Go to the [Double Commander download page](https://sourceforge.net/p/doublecmd/wiki/Download) to download the latest release.
<!-- -->
You can check the latest version on the [Versions](https://github.com/doublecmd/doublecmd/wiki/Versions) page.
See if Double Commander is supported for your platform on the [Supported
platforms](https://github.com/doublecmd/doublecmd/wiki/Supported-platforms) page.
- Develop
### Develop
For more information on the development of Double Commander,
see the [Development](https://github.com/doublecmd/doublecmd/wiki/Development) page.
### Discuss
If you want to get more information on development of Double Commander
see [Development](https://github.com/doublecmd/doublecmd/wiki/Development) page.
Go to our [forum](https://doublecmd.h1n.ru) for discussions. There are English and Russian sections.
- Discuss
Go to our [forum](https://doublecmd.h1n.ru) for discussions. There are English and Russian
sections.
Also check out the various [news feeds](https://github.com/doublecmd/doublecmd/wiki/News-feeds) that are available, if you
want to stay up-to-date with the project.
If you want to stay up-to-date with the project, you can check out the available [news feeds](https://github.com/doublecmd/doublecmd/wiki/News-feeds).

180
build.bat
View file

@ -1,82 +1,98 @@
@echo off
rem Add Lazarus installation to path
if [%LAZARUS_HOME%] == [] set LAZARUS_HOME=D:\Alexx\Prog\FreePascal\Lazarus
set PATH=%LAZARUS_HOME%;%PATH%
rem You can execute this script with different parameters:
rem components - compiling components needed for doublecmd
rem doublecmd - compiling doublecmd only (release mode)
rem plugins - compiling all doublecmd plugins
rem debug - compiling components, plugins and doublecmd (debug mode)
rem release - compile in release 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 not "%LCL_PLATFORM%" == "" (
set DC_ARCH=%DC_ARCH% --ws=%LCL_PLATFORM%
)
if "%1"=="components" ( call :components
) else (
if "%1"=="plugins" ( call :plugins
) else (
if "%1"=="beta" ( call :release
) else (
if "%1"=="doublecmd" ( call :doublecmd
) else (
if "%1"=="release" ( call :release
) else (
if "%1"=="debug" ( call :debug
) else (
if "%1"=="" ( call :release
) else (
echo ERROR: Mode not defined: %1
echo Available modes: components, plugins, doublecmd, release, debug
)))))))
pause
GOTO:EOF
:components
call components\build.bat
GOTO:EOF
:plugins
call plugins\build.bat
GOTO:EOF
:release
call :components
call :plugins
call :doublecmd
GOTO:EOF
:debug
call :components
call :plugins
rem Build Double Commander
call :replace_old
lazbuild src\doublecmd.lpi --bm=debug %DC_ARCH%
GOTO:EOF
:doublecmd
rem Build Double Commander
call :replace_old
lazbuild src\doublecmd.lpi --bm=release %DC_ARCH%
rem Build Dwarf LineInfo Extractor
lazbuild tools\extractdwrflnfo.lpi
rem Extract debug line info
tools\extractdwrflnfo doublecmd.dbg
GOTO:EOF
:replace_old
del /Q doublecmd.exe.old
ren doublecmd.exe doublecmd.exe.old
GOTO:EOF
@echo off
rem Add Lazarus installation to path
if [%LAZARUS_HOME%] == [] set LAZARUS_HOME=D:\Alexx\Prog\FreePascal\Lazarus
set PATH=%LAZARUS_HOME%;%PATH%
rem You can execute this script with different parameters:
rem components - compiling components needed for doublecmd
rem doublecmd - compiling doublecmd only (release mode)
rem plugins - compiling all doublecmd plugins
rem debug - compiling components, plugins and doublecmd (debug mode)
rem release - compile in release 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 not "%LCL_PLATFORM%" == "" (
set DC_ARCH=%DC_ARCH% --ws=%LCL_PLATFORM%
)
if "%1"=="components" ( call :components
) else (
if "%1"=="plugins" ( call :plugins
) else (
if "%1"=="beta" ( call :release
) else (
if "%1"=="doublecmd" ( call :doublecmd
) else (
if "%1"=="release" ( call :release
) else (
if "%1"=="darkwin" ( call :darkwin
) else (
if "%1"=="debug" ( call :debug
) else (
if "%1"=="" ( call :release
) else (
echo ERROR: Mode not defined: %1
echo Available modes: components, plugins, doublecmd, release, darkwin, debug
))))))))
GOTO:EOF
:components
call components\build.bat
GOTO:EOF
:plugins
call plugins\build.bat
GOTO:EOF
:release
call :components
call :plugins
call :doublecmd
GOTO:EOF
:debug
call :components
call :plugins
rem Build Double Commander
call :replace_old
lazbuild src\doublecmd.lpi --bm=debug %DC_ARCH%
GOTO:EOF
:doublecmd
rem Build Double Commander
call :replace_old
lazbuild src\doublecmd.lpi --bm=release %DC_ARCH%
call :extract
GOTO:EOF
:darkwin
call :components
call :plugins
rem Build Double Commander
call :replace_old
lazbuild src\doublecmd.lpi --bm=darkwin %DC_ARCH%
call :extract
GOTO:EOF
:extract
rem Build Dwarf LineInfo Extractor
lazbuild tools\extractdwrflnfo.lpi
rem Extract debug line info
tools\extractdwrflnfo doublecmd.dbg
GOTO:EOF
:replace_old
del /Q doublecmd.exe.old
ren doublecmd.exe doublecmd.exe.old
GOTO:EOF

124
clean.bat
View file

@ -1,65 +1,61 @@
@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
@del /Q /S plugins\*.w?x
@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\sevenzip\lib\*.*
@del /Q /S plugins\wcx\torrent\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\wdx\audioinfo\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\preview\lib\*.*
@del /Q /S plugins\wlx\simplewlx\lib\*.*
@del /Q /S plugins\wlx\WlxMplayer\lib\*.*
@echo Remove backup files
@del /Q /S plugins\*.*~
@del /Q /S plugins\*.bak
@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\synunihighlighter\lib\*.*
@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
@del /Q /S plugins\*.w?x
@del /Q /S plugins\dsx\DSXLocate\lib\*.*
@del /Q /S plugins\wcx\base64\lib\*.*
@del /Q /S plugins\wcx\cpio\lib\*.*
@del /Q /S plugins\wcx\deb\lib\*.*
@del /Q /S plugins\wcx\rpm\lib\*.*
@del /Q /S plugins\wcx\sevenzip\lib\*.*
@del /Q /S plugins\wcx\torrent\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\audioinfo\lib\*.*
@del /Q /S plugins\wfx\ftp\lib\*.*
@del /Q /S plugins\wfx\sample\lib\*.*
@del /Q /S plugins\wlx\preview\lib\*.*
@del /Q /S plugins\wlx\richview\lib\*.*
@del /Q /S plugins\wlx\simplewlx\lib\*.*
@del /Q /S plugins\wlx\wmp\lib\*.*
@echo Remove backup files
@del /Q /S plugins\*.*~
@del /Q /S plugins\*.bak
@echo Clean up components output directories
@del /Q /S components\chsdet\lib\*.*
@del /Q /S components\kascrypt\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\synunihighlighter\lib\*.*
@del /Q /S components\virtualterminal\lib\*.*
@echo Done.

View file

@ -5,14 +5,15 @@ rm -f units/*/*
# Clean up components output directories
rm -rf components/chsdet/lib/*
rm -rf components/CmdLine/lib/*
rm -rf components/dcpcrypt/lib/*
rm -rf components/kascrypt/lib/*
rm -rf components/doublecmd/lib/*
rm -rf components/gifanim/lib/*
rm -rf components/Image32/lib/*
rm -rf components/KASToolBar/lib/*
rm -rf components/multithreadprocs/lib/*
rm -rf components/viewer/lib/*
rm -rf components/synunihighlighter/lib/*
rm -rf components/virtualterminal/lib/*
# Clean up all temporary files
find . -iname '*.compiled' -delete
@ -21,14 +22,17 @@ find . -iname '*.o' -delete
find plugins -iname '*.w?x' -delete
find plugins -iname '*.dsx' -delete
find plugins -iname '*.or' -delete
find plugins -iname '*.res' -not -path "*/src/*" -delete
find plugins -iname '*.res' -not -path "*/sevenzip/src/*" -delete
find plugins -iname '*.a' -delete
rm -f src/doublecmd.res doublecmd
rm -f tools/extractdwrflnfo
rm -f plugins/wcx/unrar/lib/rarconfdlg.lfm
rm -f plugins/wcx/unrar/lib/rarlng.rsj
rm -f plugins/wcx/zip/lib/ZipConfDlg.lfm
rm -f plugins/wcx/zip/lib/ZipLng.rsj
rm -f plugins/wcx/zip/lib/abresstring.rs?
rm -f plugins/wfx/ftp/lib/FtpConfDlg.lfm
rm -f plugins/wfx/ftp/lib/ftppropdlg.lfm
rm -f plugins/wfx/samba/lib/smbauthdlg.lfm
# Remove debug files

View file

@ -1,674 +0,0 @@
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>.

View file

@ -1,165 +0,0 @@
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.

View file

@ -1,201 +0,0 @@
<?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>

View file

@ -1,18 +0,0 @@
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.

View file

@ -1,47 +0,0 @@
<?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>

View file

@ -1,21 +0,0 @@
{ This file was automatically created by Lazarus. Do not edit!
This source is only used to compile and install the package.
}
unit cmdbox;
interface
uses
uCmdBox, LazarusPackageIntf;
implementation
procedure Register;
begin
RegisterUnit('uCmdBox', @uCmdBox.Register);
end;
initialization
RegisterPackage('cmdbox', @Register);
end.

View file

@ -1,59 +0,0 @@
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

View file

@ -1,19 +0,0 @@
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
]);

View file

@ -1,39 +0,0 @@
/* 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 */
"````````````````````````",
"`......................`",
"`..`...`....`..``...``.`",
"`.`..`.`....`..`.`.`...`",
"`.`.....`..```.``..`...`",
"`.`..`..`..`.`.`.`.`...`",
"`..`.....`.`.`.``...``.`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`.````.................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"`......................`",
"````````````````````````"
};

File diff suppressed because it is too large Load diff

View file

@ -1,137 +0,0 @@
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

View file

@ -1,81 +0,0 @@
{ 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
]);

View file

@ -1,239 +0,0 @@
{ 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.

View file

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<Package Version="5">
<Name Value="Image32"/>
<Author Value="Angus Johnson"/>
<AutoUpdate Value="Manually"/>
<CompilerOptions>
<Version Value="11"/>
<SearchPaths>
<IncludeFiles Value="source;source/Clipper2"/>
<OtherUnitFiles Value="source;source/Clipper2"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Conditionals Value="if (TargetCPU &lt;> &apos;arm&apos;) then
begin
CustomOptions += &apos;-fPIC&apos;;
UsageCustomOptions += &apos;-fPIC&apos;;
end"/>
</CompilerOptions>
<Description Value="Image32 is a comprehensive 2D graphics library written entirely in Delphi Pascal, and without dependencies on other libraries. It provides an extensive range of image manipulation and drawing functions that includes text rendering through native parsing of truetype font files."/>
<License Value="Boost Software License - Version 1.0"/>
<Version Major="4" Minor="8" Release="1"/>
<Files>
<Item>
<Filename Value="source/Img32.Draw.pas"/>
<UnitName Value="Img32.Draw"/>
</Item>
<Item>
<Filename Value="source/Img32.Extra.pas"/>
<UnitName Value="Img32.Extra"/>
</Item>
<Item>
<Filename Value="source/Img32.Fmt.SVG.pas"/>
<UnitName Value="Img32.Fmt.SVG"/>
</Item>
<Item>
<Filename Value="source/Img32.inc"/>
<Type Value="Include"/>
</Item>
<Item>
<Filename Value="source/Img32.pas"/>
<UnitName Value="Img32"/>
</Item>
<Item>
<Filename Value="source/Img32.Resamplers.pas"/>
<UnitName Value="Img32.Resamplers"/>
</Item>
<Item>
<Filename Value="source/Img32.SVG.Core.pas"/>
<UnitName Value="Img32.SVG.Core"/>
</Item>
<Item>
<Filename Value="source/Img32.SVG.HashConsts.inc"/>
<Type Value="Include"/>
</Item>
<Item>
<Filename Value="source/Img32.SVG.HtmlColorConsts.inc"/>
<Type Value="Include"/>
</Item>
<Item>
<Filename Value="source/Img32.SVG.HtmlHashConsts.inc"/>
<Type Value="Include"/>
</Item>
<Item>
<Filename Value="source/Img32.SVG.HtmlValues.inc"/>
<Type Value="Include"/>
</Item>
<Item>
<Filename Value="source/Img32.SVG.Path.pas"/>
<UnitName Value="Img32.SVG.Path"/>
</Item>
<Item>
<Filename Value="source/Img32.SVG.Reader.pas"/>
<UnitName Value="Img32.SVG.Reader"/>
</Item>
<Item>
<Filename Value="source/Img32.Text.pas"/>
<UnitName Value="Img32.Text"/>
</Item>
<Item>
<Filename Value="source/Img32.Transform.pas"/>
<UnitName Value="Img32.Transform"/>
</Item>
<Item>
<Filename Value="source/Img32.Vector.pas"/>
<UnitName Value="Img32.Vector"/>
</Item>
<Item>
<Filename Value="source/Clipper2/Clipper.Core.pas"/>
<UnitName Value="Clipper.Core"/>
</Item>
<Item>
<Filename Value="source/Clipper2/Clipper.Engine.pas"/>
<UnitName Value="Clipper.Engine"/>
</Item>
<Item>
<Filename Value="source/Clipper2/Clipper.inc"/>
<Type Value="Include"/>
</Item>
<Item>
<Filename Value="source/Clipper2/Clipper.Minkowski.pas"/>
<UnitName Value="Clipper.Minkowski"/>
</Item>
<Item>
<Filename Value="source/Clipper2/Clipper.Offset.pas"/>
<UnitName Value="Clipper.Offset"/>
</Item>
<Item>
<Filename Value="source/Clipper2/Clipper.pas"/>
<UnitName Value="Clipper"/>
</Item>
<Item>
<Filename Value="source/Clipper2/Clipper.RectClip.pas"/>
<UnitName Value="Clipper.RectClip"/>
</Item>
</Files>
<RequiredPkgs>
<Item>
<PackageName Value="LCL"/>
</Item>
<Item>
<PackageName Value="FCL"/>
</Item>
</RequiredPkgs>
<UsageOptions>
<IncludePath Value="source"/>
<UnitPath Value="$(PkgOutDir);source;source/Clipper2"/>
</UsageOptions>
<PublishOptions>
<Version Value="2"/>
<UseFileFilters Value="True"/>
</PublishOptions>
</Package>
</CONFIG>

View file

@ -0,0 +1,18 @@
{ This file was automatically created by Lazarus. Do not edit!
This source is only used to compile and install the package.
}
unit Image32;
{$warn 5023 off : no warning about unused units}
interface
uses
Img32.Draw, Img32.Extra, Img32.Fmt.SVG, Img32, Img32.Resamplers,
Img32.SVG.Core, Img32.SVG.Path, Img32.SVG.Reader, Img32.Text,
Img32.Transform, Img32.Vector, Clipper.Core, Clipper.Engine,
Clipper.Minkowski, Clipper.Offset, Clipper, Clipper.RectClip;
implementation
end.

View file

@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,9 @@
# Image32
A 2D graphics library written in Delphi Pascal
https://github.com/AngusJohnson/Image32
Version: 4.8.1 (2025/01/18)
Author: Angus Johnson

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,133 @@
unit Clipper.Minkowski;
(*******************************************************************************
* Author : Angus Johnson *
* Date : 21 December 2023 *
* Copyright : Angus Johnson 2010-2022 *
* Purpose : Minkowski Addition and Difference *
* License : http://www.boost.org/LICENSE_1_0.txt *
*******************************************************************************)
{$I Clipper.inc}
interface
uses
Classes, Math, Clipper.Core;
function MinkowskiSum(const Pattern, Path: TPath64;
PathIsClosed: Boolean): TPaths64; overload;
function MinkowskiSum(const Pattern, Path: TPathD;
PathIsClosed: Boolean; decimalPlaces: integer = 2): TPathsD; overload;
function MinkowskiDiff(const path1, path2: TPath64): TPaths64; overload;
function MinkowskiDiff(const Pattern, Path: TPathD;
PathIsClosed: Boolean; decimalPlaces: integer): TPathsD; overload;
implementation
uses
Clipper;
function AddPoints(val1, val2: TPoint64): TPoint64;
{$IFDEF INLINING} inline; {$ENDIF}
begin
Result.X := val1.X + val2.X;
Result.Y := val1.Y + val2.Y;
end;
//------------------------------------------------------------------------------
function SubtractPoints(val1, val2: TPoint64): TPoint64;
{$IFDEF INLINING} inline; {$ENDIF}
begin
Result.X := val1.X - val2.X;
Result.Y := val1.Y - val2.Y;
end;
//------------------------------------------------------------------------------
function Minkowski(const Base, Path: TPath64;
IsSum: Boolean; IsClosed: Boolean): TPaths64;
var
i,j,k,g,h, delta, baseLen, pathLen: integer;
tmp: TPaths64;
quad: TPath64;
begin
delta := Iif(IsClosed, 0 , 1);
baseLen := Length(Base);
pathLen := Length(Path);
setLength(tmp, pathLen);
for i := 0 to pathLen -1 do
begin
setLength(tmp[i], baseLen);
if IsSum then
for j := 0 to baseLen -1 do
tmp[i][j] := AddPoints(Path[i], Base[j])
else
for j := 0 to baseLen -1 do
tmp[i][j] := SubtractPoints(Path[i], Base[j]);
end;
SetLength(quad, 4);
SetLength(Result, (pathLen - delta) * baseLen);
g := Iif(IsClosed, pathLen - 1, 0);
for i := delta to pathLen - 1 do
begin
h := baseLen - 1;
k := (i - delta) * baseLen;
for j := 0 to baseLen - 1 do
begin
quad[0] := tmp[g][h];
quad[1] := tmp[i][h];
quad[2] := tmp[i][(j)];
quad[3] := tmp[g][(j)];
if not IsPositive(quad) then
Result[k + j] := ReversePath(quad) else
Result[k + j] := copy(quad, 0, 4);
h := j;
end;
g := i;
end;
end;
//------------------------------------------------------------------------------
function MinkowskiSum(const Pattern, Path: TPath64; PathIsClosed: Boolean): TPaths64;
begin
Result := Union( Minkowski(Pattern, Path, true, PathIsClosed), frNonZero);
end;
//------------------------------------------------------------------------------
function MinkowskiSum(const Pattern, Path: TPathD;
PathIsClosed: Boolean; decimalPlaces: integer): TPathsD;
var
tmp: TPaths64;
scale: double;
begin
scale := Power(10, decimalPlaces);
tmp := Union( Minkowski(ScalePath(Pattern, scale),
ScalePath(Path, scale), true, PathIsClosed), frNonZero);
Result := ScalePathsD(tmp, 1/scale);
end;
//------------------------------------------------------------------------------
function MinkowskiDiff(const path1, path2: TPath64): TPaths64;
begin
Result := Union( Minkowski(path1, path2, false, true), frNonZero);
end;
//------------------------------------------------------------------------------
function MinkowskiDiff(const Pattern, Path: TPathD;
PathIsClosed: Boolean; decimalPlaces: integer): TPathsD;
var
tmp: TPaths64;
scale: double;
begin
scale := Power(10, decimalPlaces);
tmp := Union( Minkowski(ScalePath(Pattern, scale),
ScalePath(Path, scale), false, PathIsClosed), frNonZero);
Result := ScalePathsD(tmp, 1/scale);
end;
//------------------------------------------------------------------------------
end.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,39 @@
///////////////////////////////////////////////////////////////////////////////
//USER DEFINED PREPROCESSOR DIRECTIVES
///////////////////////////////////////////////////////////////////////////////
//For user defined Z-coordinates, defined in Clipper's 'SetZ' callback event
{.$DEFINE USINGZ}
///////////////////////////////////////////////////////////////////////////////
//COMPILER DIFINED PREPROCESSOR DIRECTIVES (ie. do not touch ;))
///////////////////////////////////////////////////////////////////////////////
{$IFDEF FPC}
{$DEFINE INLINING}
{$MODE DELPHI}
{$ELSE}
{$IF COMPILERVERSION < 14}
Requires Delphi version 6 or above.
{$IFEND}
{$IF COMPILERVERSION >= 18} //Delphi 2007
{$DEFINE RECORD_METHODS}
{$DEFINE STRICT}
{$IF COMPILERVERSION >= 19} //Delphi 2009
//While "inlining" is supported from D2005, it's buggy (see QC41166) until D2009
{$DEFINE INLINING}
{$IF COMPILERVERSION >= 23} //Delphi XE2+
{$DEFINE XPLAT_GENERICS}
{$DEFINE ROUNDINGMODE}
{$IF COMPILERVERSION >= 24} //Delphi XE3+
{$LEGACYIFEND ON}
{$IFEND}
{$IFEND}
{$IFEND}
{$IFEND}
{$ENDIF}
{$IFDEF DEBUG}
{$UNDEF INLINING}
{$ENDIF}

View file

@ -0,0 +1,972 @@
unit Clipper;
(*******************************************************************************
* Author : Angus Johnson *
* Date : 7 May 2024 *
* Website : http://www.angusj.com *
* Copyright : Angus Johnson 2010-2024 *
* Purpose : This module provides a simple interface to the Clipper Library *
* License : http://www.boost.org/LICENSE_1_0.txt *
*******************************************************************************)
interface
{$I Clipper.inc}
uses
Math, SysUtils, Classes,
Clipper.Core, Clipper.Engine, Clipper.Offset, Clipper.RectClip;
// A number of structures defined in other units are redeclared here
// so those units won't also need to be declared in your own units clauses.
type
TClipper = Clipper.Engine.TClipper64;
TClipper64 = Clipper.Engine.TClipper64;
TPoint64 = Clipper.Core.TPoint64;
TRect64 = Clipper.Core.TRect64;
TPath64 = Clipper.Core.TPath64;
TPaths64 = Clipper.Core.TPaths64;
TPointD = Clipper.Core.TPointD;
TRectD = Clipper.Core.TRectD;
TPathD = Clipper.Core.TPathD;
TPathsD = Clipper.Core.TPathsD;
TFillRule = Clipper.Core.TFillRule;
TPolyTree64 = Clipper.Engine.TPolyTree64;
TPolyTreeD = Clipper.Engine.TPolyTreeD;
TJoinType = Clipper.Offset.TJoinType;
TEndType = Clipper.Offset.TEndType;
TArrayOfInt64 = array of Int64;
const
frEvenOdd = Clipper.Core.frEvenOdd;
frNonZero = Clipper.Core.frNonZero;
frPositive = Clipper.Core.frPositive;
frNegative = Clipper.Core.frNegative;
jtBevel = Clipper.Offset.jtBevel;
jtSquare = Clipper.Offset.jtSquare;
jtRound = Clipper.Offset.jtRound;
jtMiter = Clipper.Offset.jtMiter;
etPolygon = Clipper.Offset.etPolygon;
etJoined = Clipper.Offset.etJoined;
etButt = Clipper.Offset.etButt;
etSquare = Clipper.Offset.etSquare;
etRound = Clipper.Offset.etRound;
ctNone = Clipper.Core.ctNoClip;
ctIntersection = Clipper.Core.ctIntersection;
ctUnion = Clipper.Core.ctUnion;
ctDifference = Clipper.Core.ctDifference;
ctXor = Clipper.Core.ctXor;
function BooleanOp(clipType: TClipType;
const subjects, clips: TPaths64; fillRule: TFillRule): TPaths64; overload;
function BooleanOp(clipType: TClipType; const subjects, clips:
TPathsD; fillRule: TFillRule; decimalPrec: integer = 2): TPathsD; overload;
procedure BooleanOp(clipType: TClipType; const subjects, clips: TPaths64;
fillRule: TFillRule; polytree: TPolyTree64); overload;
function Intersect(const subjects, clips: TPaths64;
fillRule: TFillRule): TPaths64; overload;
function Union(const subjects, clips: TPaths64;
fillRule: TFillRule): TPaths64; overload;
function Union(const subjects: TPaths64;
fillRule: TFillRule): TPaths64; overload;
function Difference(const subjects, clips: TPaths64;
fillRule: TFillRule): TPaths64; overload;
function XOR_(const subjects, clips: TPaths64;
fillRule: TFillRule): TPaths64; overload;
function Intersect(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD; overload;
function Union(const subjects: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD; overload;
function Union(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD; overload;
function Difference(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD; overload;
function XOR_(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD; overload;
function InflatePaths(const paths: TPaths64; delta: Double;
jt: TJoinType = jtRound; et: TEndType = etPolygon;
MiterLimit: double = 2.0; ArcTolerance: double = 0.0): TPaths64; overload;
function InflatePaths(const paths: TPathsD; delta: Double;
jt: TJoinType = jtRound; et: TEndType = etPolygon;
miterLimit: double = 2.0; precision: integer = 2;
ArcTolerance: double = 0.0): TPathsD; overload;
// RectClip: for closed paths only (otherwise use RectClipLines)
function RectClip(const rect: TRect64; const path: TPath64): TPath64; overload;
function RectClip(const rect: TRect64; const paths: TPaths64): TPaths64; overload;
function RectClip(const rect: TRectD; const path: TPathD; precision: integer = 2): TPathD; overload;
function RectClip(const rect: TRectD; const paths: TPathsD; precision: integer = 2): TPathsD; overload;
function RectClipLines(const rect: TRect64;
const path: TPath64): TPaths64; overload;
function RectClipLines(const rect: TRect64;
const paths: TPaths64): TPaths64; overload;
function RectClipLines(const rect: TRectD; const path: TPathD;
precision: integer = 2): TPathsD; overload;
function RectClipLines(const rect: TRectD; const paths: TPathsD;
precision: integer = 2): TPathsD; overload;
function TranslatePath(const path: TPath64; dx, dy: Int64): TPath64; overload;
function TranslatePath(const path: TPathD; dx, dy: double): TPathD; overload;
function TranslatePaths(const paths: TPaths64; dx, dy: Int64): TPaths64; overload;
function TranslatePaths(const paths: TPathsD; dx, dy: double): TPathsD; overload;
function MinkowskiSum(const pattern, path: TPath64;
pathIsClosed: Boolean): TPaths64; overload;
function MinkowskiSum(const pattern, path: TPathD;
pathIsClosed: Boolean): TPathsD; overload;
function PolyTreeToPaths64(PolyTree: TPolyTree64): TPaths64;
function PolyTreeToPathsD(PolyTree: TPolyTreeD): TPathsD;
function PathToString(const p: TPath64;
indentSpaces: integer = 0; pointsPerRow: integer = 0): string; overload;
function PathToString(const p: TPathD; decimals: integer;
indentSpaces: integer = 0; pointsPerRow: integer = 0): string; overload;
function PathsToString(const p: TPaths64;
indentSpaces: integer = 0; pointsPerRow: integer = 0): string; overload;
function PathsToString(const p: TPathsD; decimals: integer;
indentSpaces: integer = 0; pointsPerRow: integer = 0): string; overload;
//ShowPolyTreeStructure: only useful when debugging
procedure ShowPolyTreeStructure(polytree: TPolyTree64; strings: TStrings); overload;
procedure ShowPolyTreeStructure(polytree: TPolyTreeD; strings: TStrings); overload;
function MakePath(const ints: array of Int64): TPath64; overload;
function MakePathD(const dbls: array of double): TPathD; overload;
function TrimCollinear(const p: TPath64;
isOpenPath: Boolean = false): TPath64; overload;
function TrimCollinear(const path: TPathD;
precision: integer; isOpenPath: Boolean = false): TPathD; overload;
function PointInPolygon(const pt: TPoint64; const polygon: TPath64):
TPointInPolygonResult;
function SimplifyPath(const path: TPath64;
shapeTolerance: double; isClosedPath: Boolean = true): TPath64; overload;
function SimplifyPaths(const paths: TPaths64;
shapeTolerance: double; isClosedPath: Boolean = true): TPaths64; overload;
function SimplifyPath(const path: TPathD; shapeTolerance: double;
isClosedPath: Boolean = true; decimalPrecision: integer = 2): TPathD; overload;
function SimplifyPaths(const paths: TPathsD; shapeTolerance: double;
isClosedPath: Boolean = true; decimalPrecision: integer = 2): TPathsD; overload;
implementation
uses
Clipper.Minkowski;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
{$IFDEF USINGZ}
function MakePath(const ints: array of Int64): TPath64;
var
i, len: integer;
begin
len := length(ints) div 3;
SetLength(Result, len);
for i := 0 to len -1 do
begin
Result[i].X := ints[i*3];
Result[i].Y := ints[i*3 +1];
Result[i].z := ints[i*3 +2];
end;
end;
//------------------------------------------------------------------------------
function MakePathD(const dbls: array of double): TPathD; overload;
var
i, len: integer;
begin
len := length(dbls) div 3;
SetLength(Result, len);
for i := 0 to len -1 do
begin
Result[i].X := dbls[i*3];
Result[i].Y := dbls[i*3 +1];
Result[i].Z := Round(dbls[i*3 +2]);
end;
end;
//------------------------------------------------------------------------------
{$ELSE}
function MakePath(const ints: array of Int64): TPath64;
var
i, len: integer;
begin
len := length(ints) div 2;
SetLength(Result, len);
for i := 0 to len -1 do
begin
Result[i].X := ints[i*2];
Result[i].Y := ints[i*2 +1];
end;
end;
//------------------------------------------------------------------------------
function MakePathD(const dbls: array of double): TPathD; overload;
var
i, len: integer;
begin
len := length(dbls) div 2;
SetLength(Result, len);
for i := 0 to len -1 do
begin
Result[i].X := dbls[i*2];
Result[i].Y := dbls[i*2 +1];
end;
end;
//------------------------------------------------------------------------------
{$ENDIF}
procedure AddPolyNodeToPaths(Poly: TPolyPath64; var Paths: TPaths64);
var
i: Integer;
begin
if (Length(Poly.Polygon) > 0) then
begin
i := Length(Paths);
SetLength(Paths, i +1);
Paths[i] := Poly.Polygon;
end;
for i := 0 to Poly.Count - 1 do
AddPolyNodeToPaths(Poly[i], Paths);
end;
//------------------------------------------------------------------------------
function PolyTreeToPaths64(PolyTree: TPolyTree64): TPaths64;
begin
Result := nil;
AddPolyNodeToPaths(PolyTree, Result);
end;
//------------------------------------------------------------------------------
procedure AddPolyNodeToPathsD(Poly: TPolyPathD; var Paths: TPathsD);
var
i: Integer;
begin
if (Length(Poly.Polygon) > 0) then
begin
i := Length(Paths);
SetLength(Paths, i +1);
Paths[i] := Poly.Polygon;
end;
for i := 0 to Poly.Count - 1 do
AddPolyNodeToPathsD(Poly[i], Paths);
end;
//------------------------------------------------------------------------------
function PolyTreeToPathsD(PolyTree: TPolyTreeD): TPathsD;
begin
Result := nil;
AddPolyNodeToPathsD(PolyTree, Result);
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function BooleanOp(clipType: TClipType;
const subjects, clips: TPaths64; fillRule: TFillRule): TPaths64;
begin
with TClipper64.Create do
try
AddSubject(subjects);
AddClip(clips);
Execute(clipType, fillRule, Result);
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function BooleanOp(clipType: TClipType; const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD;
begin
with TClipperD.Create(decimalPrec) do
try
AddSubject(subjects);
AddClip(clips);
Execute(clipType, fillRule, Result);
finally
Free;
end;
end;
//------------------------------------------------------------------------------
procedure BooleanOp(clipType: TClipType; const subjects, clips: TPaths64;
fillRule: TFillRule; polytree: TPolyTree64);
var
dummy: TPaths64;
begin
with TClipper64.Create do
try
AddSubject(subjects);
AddClip(clips);
Execute(clipType, fillRule, polytree, dummy);
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function Intersect(const subjects, clips: TPaths64; fillRule: TFillRule): TPaths64;
begin
Result := BooleanOp(ctIntersection, subjects, clips, fillRule);
end;
//------------------------------------------------------------------------------
function Union(const subjects, clips: TPaths64; fillRule: TFillRule): TPaths64;
begin
Result := BooleanOp(ctUnion, subjects, clips, fillRule);
end;
//------------------------------------------------------------------------------
function Union(const subjects: TPaths64; fillRule: TFillRule): TPaths64;
begin
Result := BooleanOp(ctUnion, subjects, nil, fillRule);
end;
//------------------------------------------------------------------------------
function Difference(const subjects, clips: TPaths64; fillRule: TFillRule): TPaths64;
begin
Result := BooleanOp(ctDifference, subjects, clips, fillRule);
end;
//------------------------------------------------------------------------------
function XOR_(const subjects, clips: TPaths64; fillRule: TFillRule): TPaths64;
begin
Result := BooleanOp(ctXor, subjects, clips, fillRule);
end;
//------------------------------------------------------------------------------
function Intersect(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD;
begin
Result := BooleanOp(ctIntersection, subjects, clips, fillRule, decimalPrec);
end;
//------------------------------------------------------------------------------
function Union(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD;
begin
Result := BooleanOp(ctUnion, subjects, clips, fillRule, decimalPrec);
end;
//------------------------------------------------------------------------------
function Union(const subjects: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD;
begin
Result := BooleanOp(ctUnion, subjects, nil, fillRule, decimalPrec);
end;
//------------------------------------------------------------------------------
function Difference(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD;
begin
Result := BooleanOp(ctDifference, subjects, clips, fillRule, decimalPrec);
end;
//------------------------------------------------------------------------------
function XOR_(const subjects, clips: TPathsD;
fillRule: TFillRule; decimalPrec: integer = 2): TPathsD;
begin
Result := BooleanOp(ctXor, subjects, clips, fillRule, decimalPrec);
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function InflatePaths(const paths: TPaths64; delta: Double;
jt: TJoinType; et: TEndType; MiterLimit: double;
ArcTolerance: double): TPaths64;
var
co: TClipperOffset;
begin
co := TClipperOffset.Create(MiterLimit, ArcTolerance);
try
co.AddPaths(paths, jt, et);
co.Execute(delta, Result);
finally
co.free;
end;
end;
//------------------------------------------------------------------------------
function InflatePaths(const paths: TPathsD; delta: Double;
jt: TJoinType; et: TEndType; miterLimit: double;
precision: integer; ArcTolerance: double): TPathsD;
var
pp: TPaths64;
scale, invScale: double;
begin
CheckPrecisionRange(precision);
scale := Power(10, precision);
invScale := 1/scale;
pp := ScalePaths(paths, scale, scale);
with TClipperOffset.Create(miterLimit, ArcTolerance) do
try
AddPaths(pp, jt, et);
Execute(delta * scale, pp); // reuse pp to receive the solution.
finally
free;
end;
Result := ScalePathsD(pp, invScale, invScale);
end;
//------------------------------------------------------------------------------
function RectClip(const rect: TRect64;
const path: TPath64): TPath64;
var
paths: TPaths64;
begin
SetLength(paths, 1);
paths[0] := path;
paths := RectClip(rect, paths);
if Assigned(paths) then
Result := paths[0] else
Result := nil;
end;
//------------------------------------------------------------------------------
function RectClip(const rect: TRect64; const paths: TPaths64): TPaths64;
begin
Result := nil;
if rect.IsEmpty then Exit;
with TRectClip64.Create(rect) do
try
Result := Execute(paths);
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function RectClip(const rect: TRectD; const path: TPathD; precision: integer): TPathD;
var
scale: double;
tmpPath: TPath64;
rec: TRect64;
begin
Result := nil;
if not rect.Intersects(GetBounds(path)) then Exit;
CheckPrecisionRange(precision);
scale := Math.Power(10, precision);
rec := Rect64(ScaleRect(rect, scale));
tmpPath := ScalePath(path, scale);
tmpPath := RectClip(rec, tmpPath);
Result := ScalePathD(tmpPath, 1/scale);
end;
//------------------------------------------------------------------------------
function RectClip(const rect: TRectD; const paths: TPathsD; precision: integer): TPathsD;
var
scale: double;
tmpPaths: TPaths64;
rec: TRect64;
begin
CheckPrecisionRange(precision);
scale := Math.Power(10, precision);
rec := Rect64(ScaleRect(rect, scale));
tmpPaths := ScalePaths(paths, scale);
with TRectClip64.Create(rec) do
try
tmpPaths := Execute(tmpPaths);
finally
Free;
end;
Result := ScalePathsD(tmpPaths, 1/scale);
end;
//------------------------------------------------------------------------------
function RectClipLines(const rect: TRect64; const path: TPath64): TPaths64;
var
tmp: TPaths64;
begin
Result := nil;
SetLength(tmp, 1);
tmp[0] := path;
with TRectClipLines64.Create(rect) do
try
Result := Execute(tmp);
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function RectClipLines(const rect: TRect64; const paths: TPaths64): TPaths64;
begin
Result := nil;
if rect.IsEmpty then Exit;
with TRectClipLines64.Create(rect) do
try
Result := Execute(paths);
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function RectClipLines(const rect: TRectD;
const path: TPathD; precision: integer): TPathsD;
var
scale: double;
tmpPath: TPath64;
tmpPaths: TPaths64;
rec: TRect64;
begin
Result := nil;
if not rect.Intersects(GetBounds(path)) then Exit;
CheckPrecisionRange(precision);
scale := Math.Power(10, precision);
rec := Rect64(ScaleRect(rect, scale));
tmpPath := ScalePath(path, scale);
tmpPaths := RectClipLines(rec, tmpPath);
Result := ScalePathsD(tmpPaths, 1/scale);
end;
//------------------------------------------------------------------------------
function RectClipLines(const rect: TRectD; const paths: TPathsD;
precision: integer = 2): TPathsD;
var
scale: double;
tmpPaths: TPaths64;
rec: TRect64;
begin
Result := nil;
if rect.IsEmpty then Exit;
CheckPrecisionRange(precision);
scale := Math.Power(10, precision);
rec := Rect64(ScaleRect(rect, scale));
tmpPaths := ScalePaths(paths, scale);
with TRectClipLines64.Create(rec) do
try
tmpPaths := Execute(tmpPaths);
finally
Free;
end;
Result := ScalePathsD(tmpPaths, 1/scale);
end;
//------------------------------------------------------------------------------
function TranslatePath(const path: TPath64; dx, dy: Int64): TPath64;
var
i, len: integer;
begin
len := length(path);
setLength(result, len);
for i := 0 to len -1 do
begin
result[i].x := path[i].x + dx;
result[i].y := path[i].y + dy;
end;
end;
//------------------------------------------------------------------------------
function TranslatePath(const path: TPathD; dx, dy: double): TPathD;
var
i, len: integer;
begin
len := length(path);
setLength(result, len);
for i := 0 to len -1 do
begin
result[i].x := path[i].x + dx;
result[i].y := path[i].y + dy;
end;
end;
//------------------------------------------------------------------------------
function TranslatePaths(const paths: TPaths64; dx, dy: Int64): TPaths64;
var
i, len: integer;
begin
len := length(paths);
setLength(result, len);
for i := 0 to len -1 do
begin
result[i] := TranslatePath(paths[i], dx, dy);
end;
end;
//------------------------------------------------------------------------------
function TranslatePaths(const paths: TPathsD; dx, dy: double): TPathsD;
var
i, len: integer;
begin
len := length(paths);
setLength(result, len);
for i := 0 to len -1 do
begin
result[i] := TranslatePath(paths[i], dx, dy);
end;
end;
//------------------------------------------------------------------------------
function MinkowskiSum(const pattern, path: TPath64;
pathIsClosed: Boolean): TPaths64;
begin
Result := Clipper.Minkowski.MinkowskiSum(pattern, path, pathIsClosed);
end;
//------------------------------------------------------------------------------
function MinkowskiSum(const pattern, path: TPathD;
pathIsClosed: Boolean): TPathsD;
begin
Result := Clipper.Minkowski.MinkowskiSum(pattern, path, pathIsClosed);
end;
//------------------------------------------------------------------------------
function PathToString(const p: TPath64;
indentSpaces: integer; pointsPerRow: integer): string;
var
i, highI: Integer;
spaces: string;
begin
spaces := StringOfChar(' ', indentSpaces);
Result := spaces;
highI := high(p);
if highI < 0 then Exit;
for i := 0 to highI -1 do
begin
Result := Result + format('%d,%d, ',[p[i].X,p[i].Y]);
if (pointsPerRow > 0) and ((i + 1) mod pointsPerRow = 0) then
Result := Result + #10 + spaces;
end;
Result := Result + format('%d,%d',[p[highI].X,p[highI].Y]);
end;
//------------------------------------------------------------------------------
function PathToString(const p: TPathD; decimals: integer;
indentSpaces: integer; pointsPerRow: integer): string;
var
i, highI: Integer;
spaces: string;
begin
spaces := StringOfChar(' ', indentSpaces);
Result := '';
highI := high(p);
if highI < 0 then Exit;
for i := 0 to highI -1 do
Result := Result + format('%1.*n,%1.*n, ',
[decimals, p[i].X, decimals, p[i].Y]);
Result := Result + format('%1.*n,%1.*n',[
decimals, p[highI].X, decimals, p[highI].Y]);
end;
//------------------------------------------------------------------------------
function PathsToString(const p: TPaths64;
indentSpaces: integer = 0; pointsPerRow: integer = 0): string;
var
i: integer;
begin
Result := '';
for i := 0 to High(p) do
Result := Result + PathToString(p[i], indentSpaces, pointsPerRow) + #10#10;
end;
//------------------------------------------------------------------------------
function PathsToString(const p: TPathsD; decimals: integer;
indentSpaces: integer = 0; pointsPerRow: integer = 0): string;
var
i: integer;
begin
Result := '';
for i := 0 to High(p) do
Result := Result + PathToString(p[i], indentSpaces, pointsPerRow) + #10#10;
end;
//------------------------------------------------------------------------------
procedure ShowPolyPathStructure64(pp: TPolyPath64; level: integer;
strings: TStrings);
var
i: integer;
spaces, plural: string;
begin
spaces := StringOfChar(' ', level * 2);
if pp.Count = 1 then plural := '' else plural := 's';
if pp.IsHole then
strings.Add(Format('%sA hole containing %d polygon%s', [spaces, pp.Count, plural]))
else
strings.Add(Format('%sA polygon containing %d hole%s', [spaces, pp.Count, plural]));
for i := 0 to pp.Count -1 do
if pp.child[i].Count> 0 then
ShowPolyPathStructure64(pp.child[i], level + 1, strings);
end;
//------------------------------------------------------------------------------
procedure ShowPolyTreeStructure(polytree: TPolyTree64; strings: TStrings);
var
i: integer;
begin
if polytree.Count = 1 then
strings.Add('Polytree with just 1 polygon.') else
strings.Add(Format('Polytree with just %d polygons.', [polytree.Count]));
for i := 0 to polytree.Count -1 do
if polytree[i].Count > 0 then
ShowPolyPathStructure64(polytree[i], 1, strings);
end;
//------------------------------------------------------------------------------
procedure ShowPolyPathStructureD(pp: TPolyPathD; level: integer; strings: TStrings);
var
i: integer;
spaces, plural: string;
begin
spaces := StringOfChar(' ', level * 2);
if pp.Count = 1 then plural := '' else plural := 's';
if pp.IsHole then
strings.Add(Format('%sA hole containing %d polygon%s', [spaces, pp.Count, plural]))
else
strings.Add(Format('%sA polygon containing %d hole%s', [spaces, pp.Count, plural]));
for i := 0 to pp.Count -1 do
if pp.child[i].Count> 0 then
ShowPolyPathStructureD(pp.child[i], level + 1, strings);
end;
//------------------------------------------------------------------------------
procedure ShowPolyTreeStructure(polytree: TPolyTreeD; strings: TStrings);
var
i: integer;
begin
if polytree.Count = 1 then
strings.Add('Polytree with just 1 polygon.') else
strings.Add(Format('Polytree with just %d polygons.', [polytree.Count]));
for i := 0 to polytree.Count -1 do
if polytree[i].Count > 0 then
ShowPolyPathStructureD(polytree[i], 1, strings);
end;
//------------------------------------------------------------------------------
function TrimCollinear(const p: TPath64; isOpenPath: Boolean = false): TPath64;
var
i,j, len: integer;
begin
len := Length(p);
i := 0;
if not isOpenPath then
begin
while (i < len -1) and
IsCollinear(p[len -1], p[i], p[i+1]) do inc(i);
while (i < len -1) and
IsCollinear(p[len -2], p[len -1], p[i]) do dec(len);
end;
if (len - i < 3) then
begin
if not isOpenPath or (len < 2) or PointsEqual(p[0], p[1]) then
Result := nil else
Result := p;
Exit;
end;
SetLength(Result, len -i);
Result[0] := p[i];
j := 0;
for i := i+1 to len -2 do
if not IsCollinear(result[j], p[i], p[i+1]) then
begin
inc(j);
result[j] := p[i];
end;
if isOpenPath then
begin
inc(j);
result[j] := p[len-1];
end
else if not IsCollinear(result[j], p[len-1], result[0]) then
begin
inc(j);
result[j] := p[len-1];
end else
begin
while (j > 1) and
IsCollinear(result[j-1], result[j], result[0]) do dec(j);
if j < 2 then j := -1;
end;
SetLength(Result, j +1);
end;
//------------------------------------------------------------------------------
function TrimCollinear(const path: TPathD;
precision: integer; isOpenPath: Boolean = false): TPathD;
var
p: TPath64;
scale: double;
begin
scale := power(10, precision);
p := ScalePath(path, scale);
p := TrimCollinear(p, isOpenPath);
Result := ScalePathD(p, 1/scale);
end;
//------------------------------------------------------------------------------
function PointInPolygon(const pt: TPoint64;
const polygon: TPath64): TPointInPolygonResult;
begin
Result := Clipper.Core.PointInPolygon(pt, polygon);
end;
//------------------------------------------------------------------------------
function DistanceSqrd(const pt1, pt2: TPoint64): double;
{$IFDEF INLINE} inline; {$ENDIF}
var
x1,y1,x2,y2: double;
begin
// nb: older versions of Delphi don't allow explicit typcasting
x1 := pt1.X; y1 := pt1.Y;
x2 := pt2.X; y2 := pt2.Y;
result := Sqr(x1 - x2) + Sqr(y1 - y2);
end;
//------------------------------------------------------------------------------
function PerpendicDistSqrd(const pt, line1, line2: TPoint64): double;
{$IFDEF INLINE} inline; {$ENDIF}
var
a,b,c,d: double;
begin
a := pt.X - line1.X;
b := pt.Y - line1.Y;
c := line2.X - line1.X;
d := line2.Y - line1.Y;
result := Iif((c = 0) and (d = 0),
0, Sqr(a * d - c * b) / (c * c + d * d));
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
type
PSimplifyRec = ^TSimplifyRec;
TSimplifyRec = record
pt : TPoint64;
pdSqrd : double;
prev : PSimplifyRec;
next : PSimplifyRec;
//isEnd : Boolean;
end;
function SimplifyPath(const path: TPath64;
shapeTolerance: double; isClosedPath: Boolean): TPath64;
var
i, highI, minHigh: integer;
tolSqrd: double;
srArray: array of TSimplifyRec;
first, last: PSimplifyRec;
begin
Result := nil;
highI := High(path);
minHigh := Iif(isClosedPath, 2, 1);
if highI < minHigh then Exit;
SetLength(srArray, highI +1);
with srArray[0] do
begin
pt := path[0];
prev := @srArray[highI];
next := @srArray[1];
pdSqrd := Iif(isClosedPath,
PerpendicDistSqrd(path[0], path[highI], path[1]), invalidD);
end;
with srArray[highI] do
begin
pt := path[highI];
prev := @srArray[highI-1];
next := @srArray[0];
pdSqrd := Iif(isClosedPath,
PerpendicDistSqrd(path[highI], path[highI-1], path[0]), invalidD);
end;
for i := 1 to highI -1 do
with srArray[i] do
begin
pt := path[i];
prev := @srArray[i-1];
next := @srArray[i+1];
pdSqrd := PerpendicDistSqrd(path[i], path[i-1], path[i+1]);
end;
first := @srArray[0];
last := first.prev;
tolSqrd := Sqr(shapeTolerance);
while first <> last do
begin
if (first.pdSqrd > tolSqrd) or
(first.next.pdSqrd < first.pdSqrd) then
begin
first := first.next;
Continue;
end;
dec(highI);
first.prev.next := first.next;
first.next.prev := first.prev;
last := first.prev;
first := last.next;
if first.next = first.prev then break;
last.pdSqrd := PerpendicDistSqrd(last.pt, last.prev.pt, first.pt);
first.pdSqrd := PerpendicDistSqrd(first.pt, last.pt, first.next.pt);
end;
if highI < minHigh then Exit;
if not isClosedPath then first := @srArray[0];
SetLength(Result, highI +1);
for i := 0 to HighI do
begin
Result[i] := first.pt;
first := first.next;
end;
end;
//------------------------------------------------------------------------------
function SimplifyPaths(const paths: TPaths64;
shapeTolerance: double; isClosedPath: Boolean): TPaths64;
var
i, len: integer;
begin
len := Length(paths);
SetLength(Result, len);
for i := 0 to len -1 do
result[i] := SimplifyPath(paths[i], shapeTolerance, isClosedPath);
end;
//------------------------------------------------------------------------------
function SimplifyPath(const path: TPathD; shapeTolerance: double;
isClosedPath: Boolean; decimalPrecision: integer): TPathD;
var
p: TPath64;
scale: double;
begin
scale := power(10, decimalPrecision);
p := ScalePath(path, scale);
p := SimplifyPath(p, shapeTolerance, isClosedPath);
Result := ScalePathD(p, 1/scale);
end;
//------------------------------------------------------------------------------
function SimplifyPaths(const paths: TPathsD; shapeTolerance: double;
isClosedPath: Boolean; decimalPrecision: integer): TPathsD;
var
pp: TPaths64;
scale: double;
begin
scale := power(10, decimalPrecision);
pp := ScalePaths(paths, scale);
pp := SimplifyPaths(pp, shapeTolerance, isClosedPath);
Result := ScalePathsD(pp, 1/scale);
end;
//------------------------------------------------------------------------------
end.

View file

@ -0,0 +1,197 @@
unit Img32.Clipper2;
(*******************************************************************************
* Author : Angus Johnson *
* Version : 4.7 *
* Date : 6 January 2025 *
* Website : http://www.angusj.com *
* Copyright : Angus Johnson 2019-2025 *
* Purpose : Wrapper module for the Clipper library *
* License : http://www.boost.org/LICENSE_1_0.txt *
*******************************************************************************)
interface
uses
Img32, Img32.Draw, Img32.Vector, Clipper.Offset;
//nb: InflatePath assumes that there's consistent winding where
//outer paths wind in one direction and inner paths in the other
type
TClipperEndType = Clipper.Offset.TEndType;
function ClipperEndType(endStyle: TEndStyle): TClipperEndType;
function InflatePath(const path: TPathD; delta: Double;
joinStyle: TJoinStyle = jsAuto; endType: TClipperEndType = etPolygon;
miterLimit: double = 2.0; arcTolerance: double = 0.0;
minEdgeLength: double = 0.25): TPathsD;
function InflatePaths(const paths: TPathsD; delta: Double;
joinStyle: TJoinStyle = jsAuto; endType: TClipperEndType = etPolygon;
miterLimit: double = 2.0; arcTolerance: double = 0.0;
minEdgeLength: double = 0): TPathsD;
//UnionPolygon: removes self-intersections
function UnionPolygon(const polygon: TPathD;
fillRule: TFillRule): TPathsD;
function UnionPolygons(const polygons: TPathsD;
fillRule: TFillRule): TPathsD; overload;
function UnionPolygons(const polygon1, polygon2: TPathD;
fillRule: TFillRule): TPathsD; overload;
function UnionPolygons(const polygons1, polygons2: TPathsD;
fillRule: TFillRule): TPathsD; overload;
function IntersectPolygons(const polygons1, polygons2: TPathsD;
fillRule: TFillRule): TPathsD;
function DifferencePolygons(const polygons1, polygons2: TPathsD;
fillRule: TFillRule): TPathsD;
const
etPolygon = Clipper.Offset.etPolygon;
etJoined = Clipper.Offset.etJoined;
etButt = Clipper.Offset.etButt;
etSquare = Clipper.Offset.etSquare;
etRound = Clipper.Offset.etRound;
implementation
uses Clipper, Clipper.Core, Clipper.Engine;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function ClipperEndType(endStyle: TEndStyle): TClipperEndType;
begin
case endStyle of
esPolygon: Result := etJoined;
esButt: Result := etButt;
esSquare: Result := etSquare;
else Result := etRound;
end;
end;
//------------------------------------------------------------------------------
function InflatePath(const path: Img32.TPathD;
delta: Double; joinStyle: TJoinStyle; endType: TClipperEndType;
miterLimit: double; arcTolerance: double; minEdgeLength: double): Img32.TPathsD;
var
paths: Img32.TPathsD;
begin
setLength(paths, 1);
paths[0] := path;
Result := InflatePaths(paths, delta, joinStyle, endType,
miterLimit, arcTolerance, minEdgeLength);
end;
//------------------------------------------------------------------------------
function InflatePaths(const paths: Img32.TPathsD;
delta: Double; joinStyle: TJoinStyle; endType: TClipperEndType;
miterLimit: double; arcTolerance: double; minEdgeLength: double): Img32.TPathsD;
var
jt: Clipper.Offset.TJoinType;
begin
case joinStyle of
jsSquare : jt := jtSquare;
jsButt : jt := jtBevel;
jsMiter : jt := jtMiter;
jsRound : jt := jtRound;
else if endType = etRound then jt := jtRound
else jt := jtSquare;
end;
Result := Img32.TPathsD(Clipper.InflatePaths(
Clipper.Core.TPathsD(paths), delta, jt, endType));
end;
//------------------------------------------------------------------------------
function UnionPolygon(const polygon: Img32.TPathD;
fillRule: Img32.Vector.TFillRule): Img32.TPathsD;
begin
with TClipperD.Create do
try
AddSubject(Clipper.Core.TPathD(polygon));
Execute(ctUnion,
Clipper.Core.TFillRule(fillRule), Clipper.Core.TPathsD(result));
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function UnionPolygons(const polygons: Img32.TPathsD;
fillRule: Img32.Vector.TFillRule): Img32.TPathsD;
begin
with TClipperD.Create do
try
AddSubject(Clipper.Core.TPathsD(polygons));
Execute(ctUnion,
Clipper.Core.TFillRule(fillRule), Clipper.Core.TPathsD(result));
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function UnionPolygons(const polygon1, polygon2: Img32.TPathD;
fillRule: Img32.Vector.TFillRule): Img32.TPathsD;
begin
with TClipperD.Create do
try
AddSubject(Clipper.Core.TPathD(polygon1));
AddClip(Clipper.Core.TPathD(polygon2));
Execute(ctUnion,
Clipper.Core.TFillRule(fillRule), Clipper.Core.TPathsD(result));
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function UnionPolygons(const polygons1, polygons2: Img32.TPathsD;
fillRule: Img32.Vector.TFillRule): Img32.TPathsD;
begin
with TClipperD.Create do
try
AddSubject(Clipper.Core.TPathsD(polygons1));
AddClip(Clipper.Core.TPathsD(polygons2));
Execute(ctUnion,
Clipper.Core.TFillRule(fillRule), Clipper.Core.TPathsD(result));
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function IntersectPolygons(const polygons1, polygons2: Img32.TPathsD;
fillRule: Img32.Vector.TFillRule): Img32.TPathsD;
begin
with TClipperD.Create do
try
AddSubject(Clipper.Core.TPathsD(polygons1));
AddClip(Clipper.Core.TPathsD(polygons2));
Execute(ctIntersection,
Clipper.Core.TFillRule(fillRule), Clipper.Core.TPathsD(result));
finally
Free;
end;
end;
//------------------------------------------------------------------------------
function DifferencePolygons(const polygons1, polygons2: Img32.TPathsD;
fillRule: Img32.Vector.TFillRule): Img32.TPathsD;
begin
with TClipperD.Create do
try
AddSubject(Clipper.Core.TPathsD(polygons1));
AddClip(Clipper.Core.TPathsD(polygons2));
Execute(ctDifference,
Clipper.Core.TFillRule(fillRule), Clipper.Core.TPathsD(result));
finally
Free;
end;
end;
//------------------------------------------------------------------------------
end.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,477 @@
unit Img32.Fmt.SVG;
(*******************************************************************************
* Author : Angus Johnson *
* Version : 4.7 *
* Date : 6 January 2025 *
* Website : http://www.angusj.com *
* Copyright : Angus Johnson 2019-2025 *
* Purpose : SVG file format extension for TImage32 *
* License : http://www.boost.org/LICENSE_1_0.txt *
*******************************************************************************)
interface
{$I Img32.inc}
uses
{$IFDEF MSWINDOWS} Windows, {$ENDIF}
{$IF NOT DEFINED(NEWPOSFUNC) OR DEFINED(FPC)} StrUtils, {$IFEND}
{$IFDEF UNICODE} AnsiStrings, {$ENDIF}
SysUtils, Classes, Math,
{$IFDEF XPLAT_GENERICS} Generics.Collections, Generics.Defaults, {$ENDIF}
Img32, Img32.Vector, Img32.SVG.Core, Img32.SVG.Reader
{$IF DEFINED(USING_LCL)}, Types{$IFEND}
;
type
TImageFormat_SVG = class(TImageFormat)
public
class function IsValidImageStream(stream: TStream): Boolean; override;
function LoadFromStream(stream: TStream;
img32: TImage32; imgIndex: integer = 0): Boolean; override;
// SaveToStream: not implemented for SVG streams
procedure SaveToStream(stream: TStream;
img32: TImage32; quality: integer = 0); override;
class function CanCopyToClipboard: Boolean; override;
class function CopyToClipboard(img32: TImage32): Boolean; override;
class function CanPasteFromClipboard: Boolean; override;
class function PasteFromClipboard(img32: TImage32): Boolean; override;
end;
TSvgListObject = class
xml : string;
name : string;
end;
TSvgImageList32 = class(TInterfacedObj, INotifySender)
private
fReader : TSvgReader;
{$IFDEF XPLAT_GENERICS}
fList : TList<TSvgListObject>;
{$ELSE}
fList : TList;
{$ENDIF}
fDefWidth : integer;
fDefHeight : integer;
fRecipientList : TRecipients;
fUpdateCnt : integer;
{$IFDEF MSWINDOWS}
fResName : string;
procedure SetResName(const resName: string);
{$ENDIF}
procedure SetDefWidth(value: integer);
procedure SetDefHeight(value: integer);
protected
procedure Changed; virtual;
procedure BeginUpdate;
procedure EndUpdate;
procedure NotifyRecipients(notifyFlag: TImg32Notification);
public
constructor Create;
destructor Destroy; override;
procedure Clear;
function Count: integer;
function Find(const aName: string): integer;
procedure AddRecipient(recipient: INotifyRecipient);
procedure DeleteRecipient(recipient: INotifyRecipient);
function CreateImage(index: integer): TImage32;
procedure GetImage(index: integer; image: TImage32); overload;
procedure GetImage(index: integer; image: TImage32; out aName: string); overload;
procedure Add(const aName, xml: string);
procedure AddFromFile(const aName, filename: string);
procedure AddFromResource(const aName, resName: string; resType: PChar);
procedure Insert(index: integer; const name, xml: string);
procedure Move(currentIndex, newIndex: integer);
procedure Delete(index: integer);
property DefaultWidth: integer read fDefWidth write SetDefWidth;
property DefaultHeight: integer read fDefHeight write SetDefHeight;
{$IFDEF MSWINDOWS}
property ResourceName: string read fResName write SetResName;
{$ENDIF}
end;
implementation
//------------------------------------------------------------------------------
// Three routines used to enumerate a resource type
//------------------------------------------------------------------------------
function Is_IntResource(lpszType: PChar): Boolean;
begin
Result := NativeUInt(lpszType) shr 16 = 0;
end;
//------------------------------------------------------------------------------
function ResourceNameToString(lpszName: PChar): string;
begin
if Is_IntResource(lpszName) then
Result := '#' + IntToStr(NativeUInt(lpszName)) else
Result := lpszName;
end;
//------------------------------------------------------------------------------
function EnumResNameProc(hModule: HMODULE; lpszType, lpszName: PChar;
lParam: NativeInt): Boolean; stdcall;
var
n: string;
begin
n:= ResourceNameToString(lpszName);
TSvgImageList32(lParam).AddFromResource(n, n, lpszType);
Result := true;
end;
//------------------------------------------------------------------------------
// TSvgImageList32
//------------------------------------------------------------------------------
constructor TSvgImageList32.Create;
begin
fReader := TSvgReader.Create;
{$IFDEF XPLAT_GENERICS}
fList := TList<TSvgListObject>.Create;
{$ELSE}
fList := TList.Create;
{$ENDIF}
end;
//------------------------------------------------------------------------------
destructor TSvgImageList32.Destroy;
begin
NotifyRecipients(inDestroy);
Clear;
fList.Free;
fReader.Free;
inherited;
end;
//------------------------------------------------------------------------------
{$IFDEF MSWINDOWS}
procedure TSvgImageList32.SetResName(const resName: string);
begin
if fResName = resName then Exit;
fResName := resName;
BeginUpdate;
try
Clear;
EnumResourceNames(HInstance, PChar(resName), @EnumResNameProc, lParam(self));
finally
EndUpdate;
end;
end;
//------------------------------------------------------------------------------
{$ENDIF}
function TSvgImageList32.Count: integer;
begin
result := fList.Count;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.Clear;
var
i: integer;
begin
for i := 0 to fList.Count -1 do
TSvgListObject(fList[i]).Free;
fList.Clear;
Changed;
end;
//------------------------------------------------------------------------------
function TSvgImageList32.Find(const aName: string): integer;
var
i: integer;
begin
for i := 0 to fList.Count -1 do
with TSvgListObject(fList[i]) do
if SameText(name, aName) then
begin
Result := i;
Exit;
end;
Result := -1;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.GetImage(index: integer; image: TImage32; out aName: string);
begin
if not Assigned(image) or (index < 0) or (index >= count) then Exit;
if image.IsEmpty then
image.SetSize(fDefWidth, fDefHeight);
with TSvgListObject(fList[index]) do
begin
fReader.LoadFromString(xml);
aName := name;
end;
fReader.DrawImage(image, true);
end;
//------------------------------------------------------------------------------
function TSvgImageList32.CreateImage(index: integer): TImage32;
begin
Result := TImage32.Create(DefaultWidth, DefaultHeight);
GetImage(index, Result);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.GetImage(index: integer; image: TImage32);
var
dummy: string;
begin
GetImage(index, image, dummy);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.Add(const aName, xml: string);
begin
Insert(count, aName, xml);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.AddFromFile(const aName, filename: string);
begin
if not FileExists(filename) then Exit;
with TStringList.Create do
try
LoadFromFile(filename);
Self.Insert(Self.Count, aName, Text);
finally
Free;
end;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.AddFromResource(const aName, resName: string; resType: PChar);
var
rs: TResourceStream;
ansi: AnsiString;
begin
rs := TResourceStream.Create(hInstance, resName, resType);
try
SetLength(ansi, rs.Size);
rs.Read(ansi[1], rs.Size);
Self.Insert(Self.Count, aName, string(ansi));
finally
rs.Free;
end;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.Insert(index: integer; const name, xml: string);
var
lo: TSvgListObject;
begin
if index < 0 then index := 0
else if index > Count then index := Count;
lo := TSvgListObject.Create;
lo.name := name;
lo.xml := xml;
fList.Insert(index, lo);
Changed;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.Move(currentIndex, newIndex: integer);
begin
fList.Move(currentIndex, newIndex);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.Delete(index: integer);
begin
TSvgListObject(fList[index]).Free;
fList.Delete(index);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.BeginUpdate;
begin
inc(fUpdateCnt);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.EndUpdate;
begin
dec(fUpdateCnt);
if fUpdateCnt = 0 then Changed;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.Changed;
begin
if (fUpdateCnt = 0) then
NotifyRecipients(inStateChange);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.SetDefWidth(value: integer);
begin
if fDefWidth = value then Exit;
fDefWidth := value;
Changed;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.SetDefHeight(value: integer);
begin
if fDefHeight = value then Exit;
fDefHeight := value;
Changed;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.AddRecipient(recipient: INotifyRecipient);
var
len: integer;
begin
len := Length(fRecipientList);
SetLength(fRecipientList, len+1);
fRecipientList[len] := Recipient;
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.DeleteRecipient(recipient: INotifyRecipient);
var
i, highI: integer;
begin
highI := High(fRecipientList);
i := highI;
while (i >= 0) and (fRecipientList[i] <> Recipient) do dec(i);
if i < 0 then Exit;
if i < highI then
System.Move(fRecipientList[i+1], fRecipientList[i],
(highI - i) * SizeOf(INotifyRecipient));
SetLength(fRecipientList, highI);
end;
//------------------------------------------------------------------------------
procedure TSvgImageList32.NotifyRecipients(notifyFlag: TImg32Notification);
var
i: integer;
begin
if fUpdateCnt > 0 then Exit;
for i := High(fRecipientList) downto 0 do
try
//when destroying in a finalization section
//it's possible for recipients to have been destroyed
//without their destructors being called.
fRecipientList[i].ReceiveNotification(self, notifyFlag);
except
end;
end;
//------------------------------------------------------------------------------
// Loading (reading) SVG images from file ...
//------------------------------------------------------------------------------
function TImageFormat_SVG.LoadFromStream(stream: TStream;
img32: TImage32; imgIndex: integer = 0): Boolean;
var
r: TRectWH;
sx: double;
begin
with TSvgReader.Create do
try
Result := LoadFromStream(stream);
if not Result then Exit;
r := RootElement.viewboxWH;
img32.BeginUpdate;
try
if img32.IsEmpty then
begin
with RootElement do
if Width.IsValid and Height.IsValid then
img32.SetSize(
Round(Width.GetValue(defaultSvgWidth, 0)),
Round(Height.GetValue(defaultSvgHeight, 0)))
else if not r.IsEmpty then
img32.SetSize(Round(r.Width), Round(r.Height))
else
img32.SetSize(defaultSvgWidth, defaultSvgHeight);
end
else if not r.IsEmpty then
begin
// scale the SVG to best fit the image dimensions
sx := GetScaleForBestFit(r.Width, r.Height, img32.Width, img32.Height);
img32.SetSize(Round(r.Width * sx), Round(r.Height * sx));
end;
//draw the SVG image to fit inside the canvas
DrawImage(img32, True);
finally
img32.EndUpdate;
end;
finally
Free;
end;
end;
//------------------------------------------------------------------------------
// Saving (writing) SVG images to file (not currently implemented) ...
//------------------------------------------------------------------------------
class function TImageFormat_SVG.IsValidImageStream(stream: TStream): Boolean;
var
i, savedPos, len: integer;
buff: array [1..1024] of AnsiChar;
begin
Result := false;
savedPos := stream.Position;
len := Min(1024, stream.Size - savedPos);
stream.Read(buff[1], len);
stream.Position := savedPos;
for i := 1 to len -4 do
begin
if buff[i] < #9 then Exit
else if (buff[i] = '<') and
(buff[i +1] = 's') and
(buff[i +2] = 'v') and
(buff[i +3] = 'g') then
begin
Result := true;
break;
end;
end;
end;
//------------------------------------------------------------------------------
procedure TImageFormat_SVG.SaveToStream(stream: TStream;
img32: TImage32; quality: integer);
begin
//not enabled
end;
//------------------------------------------------------------------------------
class function TImageFormat_SVG.CanCopyToClipboard: Boolean;
begin
Result := false;
end;
//------------------------------------------------------------------------------
class function TImageFormat_SVG.CopyToClipboard(img32: TImage32): Boolean;
begin
Result := false;
end;
//------------------------------------------------------------------------------
class function TImageFormat_SVG.CanPasteFromClipboard: Boolean;
begin
Result := false;
end;
//------------------------------------------------------------------------------
class function TImageFormat_SVG.PasteFromClipboard(img32: TImage32): Boolean;
begin
Result := false;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
initialization
TImage32.RegisterImageFormatClass('SVG', TImageFormat_SVG, cpLow);
end.

View file

@ -0,0 +1,863 @@
unit Img32.Resamplers;
(*******************************************************************************
* Author : Angus Johnson *
* Version : 4.8 *
* Date : 10 January 2025 *
* Website : http://www.angusj.com *
* Copyright : Angus Johnson 2019-2025 *
* Purpose : For image transformations (scaling, rotating etc.) *
* License : http://www.boost.org/LICENSE_1_0.txt *
*******************************************************************************)
interface
{$I Img32.inc}
uses
SysUtils, Classes, Math, Img32;
// Premultiplies the alpha channel into the color channels from pSrc and stores
// it into pDst. pSrc and pDst can be the same pointer.
procedure PremultiplyAlpha(pSrc, pDst: PARGB; count: nativeint); overload;
// BoxDownSampling: As the name implies, is only intended for image
// down-sampling (ie shrinking images) where it performs a little better
// than other resamplers which tend toward pixelation. Nevertheless, this
// routine is inferior to other resamplers when performing other
// types of transformations (ie when enlarging, rotating, and skewing images),
// so BoxDownSampling should not be used as a general purpose resampler.
procedure BoxDownSampling(Image: TImage32; scale: double); overload;
procedure BoxDownSampling(Image: TImage32; scaleX, scaleY: double); overload;
procedure BoxDownSampling(Image: TImage32; newWidth, newHeight: Integer); overload;
procedure BoxDownSampling(Image, TargetImage: TImage32; scale: double); overload;
procedure BoxDownSampling(Image, TargetImage: TImage32; scaleX, scaleY: double); overload;
procedure BoxDownSampling(Image, TargetImage: TImage32; newWidth, newHeight: Integer); overload;
procedure NearestNeighborResize(Image: TImage32; newWidth, newHeight: Integer); overload;
procedure NearestNeighborResize(Image, TargetImage: TImage32; newWidth, newHeight: Integer); overload;
procedure ResamplerResize(Image: TImage32; newWidth, newHeight: Integer); overload;
procedure ResamplerResize(Image, TargetImage: TImage32; newWidth, newHeight: Integer); overload;
// The following general purpose resamplers are registered below:
// function NearestResampler(img: TImage32; x, y: double): TColor32;
// function BilinearResample(img: TImage32; x, y: double): TColor32;
// function BicubicResample (img: TImage32; x, y: double): TColor32;
// function WeightedBilinear(img: TImage32; x, y: double): TColor32;
implementation
uses
Img32.Transform;
var
sinWeighted: array [0..255] of Cardinal;
//------------------------------------------------------------------------------
// NearestNeighbor resampler
//------------------------------------------------------------------------------
function NearestResampler(img: TImage32; x, y: double): TColor32;
var
xi, yi: integer;
begin
xi := Round(x); yi := Round(y);
if (xi < 0) or (yi < 0) or (xi >= img.Width) or (yi >= img.Height) then
Result := clNone32 else
Result := img.Pixels[xi + yi * img.Width];
end;
//------------------------------------------------------------------------------
// BiLinear resampler
//------------------------------------------------------------------------------
function BilinearResample(img: TImage32; x, y: double): TColor32;
var
iw, ih: integer;
xx, yy, xR, yB: integer;
weight: integer;
pixels: TArrayOfColor32;
weightedColor: TWeightedColor;
xf, yf: double;
begin
iw := img.Width;
ih := img.Height;
pixels := img.Pixels;
if (x < 0) then
begin
if (x < -0.5) then
begin
xf := -x;
end else
begin
x := 0;
xf := 0;
end;
xx := 0;
xR := 0;
end else
begin
xf := 1-frac(x);
if x >= iw -1 then
begin
xx := iw -1;
xR := xx;
end else
begin
xx := Trunc(x);
xR := xx +1;
end;
end;
if (y < 0) then
begin
if (y < -0.5) then
begin
yf := -y;
end else
begin
y := 0;
yf := 0;
end;
yy := 0;
yB := 0;
end else
begin
yf := 1-frac(y);
if y >= ih -1 then
begin
yy := ih -1;
yB := yy;
end else
begin
yy := Trunc(y);
yB := yy +1;
end;
end;
weightedColor.Reset;
weight := Round(xf * yf * 255); //top-left
if weight > 0 then
begin
if (x < 0) or (y < 0) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xx + yy * iw], weight);
end;
weight := Round((1-xf) * yf * 255); //top-right
if weight > 0 then
begin
if (x > iw - 0.5) or (y < 0) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xR + yy * iw], weight);
end;
weight := Round(xf * (1-yf) * 255); //bottom-left
if weight > 0 then
begin
if (x < 0) or (y > ih - 0.5) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xx + yB * iw], weight);
end;
weight := Round((1-xf) * (1-yf) * 255); //bottom-right
if weight > 0 then
begin
if (x > iw - 0.5) or (y > ih - 0.5) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xR + yB * iw], weight);
end;
Result := weightedColor.Color;
end;
//------------------------------------------------------------------------------
// WeightedBilinearResample: A modified bilinear resampler that's
// less blurry but also a little more pixelated.
function WeightedBilinearResample(img: TImage32; x, y: double): TColor32;
var
iw, ih: integer;
xx, yy, xR, yB: integer;
weight: integer;
pixels: TArrayOfColor32;
weightedColor: TWeightedColor;
xf, yf: double;
begin
iw := img.Width;
ih := img.Height;
pixels := img.Pixels;
if (x < 0) then
begin
if (x < -0.5) then
begin
xf := -x;
end else
begin
x := 0;
xf := 0;
end;
xx := 0;
xR := 0;
end else
begin
xf := 1-frac(x);
if x >= iw -1 then
begin
xx := iw -1;
xR := xx;
end else
begin
xx := Trunc(x);
xR := xx +1;
end;
end;
if (y < 0) then
begin
if (y < -0.5) then
begin
yf := -y;
end else
begin
y := 0;
yf := 0;
end;
yy := 0;
yB := 0;
end else
begin
yf := 1-frac(y);
if y >= ih -1 then
begin
yy := ih -1;
yB := yy;
end else
begin
yy := Trunc(y);
yB := yy +1;
end;
end;
weightedColor.Reset;
weight := sinWeighted[Round(xf * yf * 255)]; //top-left
if weight > 0 then
begin
if (x < 0) or (y < 0) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xx + yy * iw], weight);
end;
weight := sinWeighted[Round((1-xf) * yf * 255)]; //top-right
if weight > 0 then
begin
if (x > iw - 0.5) or (y < 0) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xR + yy * iw], weight);
end;
weight := sinWeighted[Round(xf * (1-yf) * 255)]; //bottom-left
if weight > 0 then
begin
if (x < 0) or (y > ih - 0.5) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xx + yB * iw], weight);
end;
weight := sinWeighted[Round((1-xf) * (1-yf) * 255)]; //bottom-right
if weight > 0 then
begin
if (x > iw - 0.5) or (y > ih - 0.5) then
weightedColor.AddWeight(weight) else
weightedColor.Add(pixels[xR + yB * iw], weight);
end;
Result := weightedColor.Color;
end;
//------------------------------------------------------------------------------
// BiCubic resampler
//------------------------------------------------------------------------------
type
TBiCubicEdgeAdjust = (eaCenterFill,
eaPreStart, eaStart, eaPostStart, eaEnd, eaPostEnd);
var
byteFrac: array [0..255] of double;
byteFracSq: array [0..255] of double;
byteFracCubed: array [0..255] of double;
//------------------------------------------------------------------------------
function CubicInterpolate(aclr: PColor32;
t: Byte; bce: TBiCubicEdgeAdjust): TColor32;
var
a,b,c,d: PARGB;
q: TARGB;
aa, bb, m0, m1: double;
t1, t2, t3: double;
res: TARGB absolute Result;
const
clTrans: TColor32 = clNone32;
begin
case bce of
eaPreStart:
begin
a := @clTrans;
b := @clTrans;
c := PARGB(aclr);
d := c;
end;
eaStart:
begin
Result := aclr^;
Exit;
end;
eaPostStart:
begin
a := PARGB(aclr);
b := a;
Inc(aclr);
c := PARGB(aclr);
d := c;
end;
eaEnd:
begin
Inc(aclr);
Result := aclr^;
Exit;
end;
eaPostEnd:
begin
Inc(aclr);
a := PARGB(aclr);
b := a;
c := @clTrans;
d := @clTrans;
end;
else
begin
a := PARGB(aclr);
Inc(aclr);
b := PARGB(aclr);
Inc(aclr);
c := PARGB(aclr);
Inc(aclr);
d := PARGB(aclr);
end;
end;
if (b.A = 0) and (c.A = 0) then
begin
result := clNone32;
Exit;
end
else if (b = c) then
begin
result := b.Color;
Exit;
end
else if b.A = 0 then
begin
// ignore differences between b & c's color channels
q := c^;
q.A := 0;
b := @q;
end;
if c.A = 0 then
begin
// ignore differences between b & c's color channels
q := b^;
q.A := 0;
c := @q;
end;
t1 := byteFrac[t];
t2 := byteFracSq[t];
t3 := byteFracCubed[t];
// find piecewise bicubic interpolation between pixel_b and pixel_c
// at point 't' (as byte div 255) ...
// given parametric equation aa(t^3) + bb(t^2) + cc(t)+ dd = 0
// where t(0) = pixel_b and t(1) = pixel_c
// let m1 = slope at pixel_b (using slope of pixel_c - pixel_a)
// let m2 = slope at pixel_c (using slope of pixel_d - pixel_b)
// then t(0) = aa(0^3) + bb(0^2) + cc(0) + dd = dd
// then t(1) = aa(1^3) + bb(1^2) + cc(1) + dd = aa + bb + cc + dd
// differentiating parametic equation at t'(0) and t'(1) ...
// t'(0) = m0 = 3*aa(0^2) + 2*bb(0) + cc = cc
// t'(1) = m1 = 3*aa(1^2) + 2*bb(1) + cc = 3*aa + 2*bb + cc
// t(0) = dd ::EQ1
// t(1) = aa+bb+cc+dd ::EQ2
// t'(0) = cc ::EQ3
// t'(1) = 3*aa + 2*bb + cc ::EQ4
// solving simultaneous equations
// aa = 2*t(0) -2*t(1) +t'(0) +t'(1)
// bb = 3*t(1) -3*t(0) -2*t'(0) -t'(1)
// cc = m0
// dd = t(0)
m0 {aka t'(0)} := (c.A - a.A) /2;
m1 {aka t'(1)} := (d.A - b.A) /2;
aa := 2*b.A - 2*c.A + m0 + m1;
bb := 3*c.A -3*b.A -2*m0 - m1;
Res.A := ClampByte(aa*t3 + bb*t2 + m0*t1 + b.A);
m0 := (c.R - a.R) /2;
m1 := (d.R - b.R) /2;
aa := 2*b.R - 2*c.R + m0 + m1;
bb := 3*c.R -3*b.R -2*m0 - m1;
Res.R := ClampByte(aa*t3 + bb*t2 + m0*t1 + b.R);
m0 := (c.G - a.G) /2;
m1 := (d.G - b.G) /2;
aa := 2*b.G - 2*c.G + m0 + m1;
bb := 3*c.G -3*b.G -2*m0 - m1;
Res.G := ClampByte(aa*t3 + bb*t2 + m0*t1 + b.G);
m0 := (c.B - a.B) /2;
m1 := (d.B - b.B) /2;
aa := 2*b.B - 2*c.B + m0 + m1;
bb := 3*c.B -3*b.B -2*m0 - m1;
Res.B := ClampByte(aa*t3 + bb*t2 + m0*t1 + b.B);
end;
//------------------------------------------------------------------------------
function BicubicResample(img: TImage32; x, y: double): TColor32;
var
i, pi, iw, ih, last: Integer;
c: array[0..3] of TColor32;
xFrac, yFrac: byte;
bceX, bceY: TBiCubicEdgeAdjust;
begin
iw := img.Width;
ih := img.Height;
last := iw * ih -1;
if x < 1 then
begin
if x < -0.5 then
begin
xFrac := Round((1+x) *255);
bceX := eaPreStart;
end
else if (x < 0) or
((iw = 1) and (x < 0.5)) then
begin
x := 0;
xFrac := 0;
bceX := eaStart;
end
else if (iw = 1) and (x > 0.5) then
begin
// the following is a workaround to avoid the increment in eaPostEnd
bceX := eaPreStart; // ie anti-aliase but without increment
xFrac := Round((1-x) *127); // reversed because 'end' not 'start'
end else
begin
xFrac := Round(frac(x) *255);
bceX := eaPostStart;
end;
end else
begin
xFrac := Round(frac(x) *255);
if x > iw - 1 then
begin
if x > iw - 0.5 then bceX := eaPostEnd
else bceX := eaEnd
end
else
bceX := eaCenterFill;
end;
if y < 1 then
begin
if y < -0.5 then
begin
yFrac := Round((1+y) *255);
bceY := eaPreStart;
end
else if (y < 0) or
((ih = 1) and (y < 0.5)) then
begin
y := 0;
yFrac := 0;
bceY := eaStart;
end
else if (ih = 1) and (y > 0.5) then
begin
// the following is a workaround to avoid the increment in eaPostEnd
bceY := eaPreStart; // ie anti-aliase but without increment
yFrac := Round((1-y) *127); // reversed because 'end' not 'start'
end else
begin
yFrac := Round(frac(y) *255);
bceY := eaPostStart;
end;
end else
begin
yFrac := Round(frac(y) *255);
if y > ih - 1 then
begin
if y > ih - 0.5 then bceY := eaPostEnd
else bceY := eaEnd
end
else
bceY := eaCenterFill;
end;
x := Max(0, Min(iw -1, x -1));
y := Max(0, Min(ih -1, y -1));
pi := Trunc(y) * iw + Trunc(x);
for i := 0 to 3 do
begin
c[i] := CubicInterpolate(@img.Pixels[pi], xFrac, bceX);
inc(pi, iw);
if pi > last then break;
end;
Result := CubicInterpolate(@c[0], yFrac, bceY);
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
{$RANGECHECKS OFF} // negative index usage for Delphi 7-2007
procedure PremultiplyAlpha(pSrc, pDst: PARGB; count: nativeint);
var
a: byte;
tab: PByteArray;
c: TColor32;
s, d: PColor32Array;
begin
if count = 0 then exit;
// Use negative index trick
inc(pSrc, count);
inc(pDst, count);
count := -count;
// This function is optmized with the assumption that if a pixel has a certain
// alpha channel, then the propability that the following pixels have the same
// alpha channel, is very high.
c := PColor32Array(pSrc)[count];
a := c shr 24;
while True do
begin
case a of
0: // Special handling for 0 => color becomes black
begin
// Win32: Load stack variable into CPU register
s := PColor32Array(pSrc);
d := PColor32Array(pDst);
while True do
begin
d[count] := 0;
inc(count);
if count = 0 then exit;
c := s[count];
a := c shr 24;
if a <> 0 then break;
end;
end;
255: // Special handling for 255 => no color change
begin
// Win32: Load stack variable into CPU register
s := PColor32Array(pSrc);
d := PColor32Array(pDst);
if s = d then // if source=dest, we can skip writing to d
begin
while True do
begin
//d[count] := c; // skip the write
inc(count);
if count = 0 then exit;
c := s[count];
a := c shr 24;
if a <> 255 then break;
end;
end
else
begin
while True do
begin
d[count] := c;
inc(count);
if count = 0 then exit;
c := s[count];
a := c shr 24;
if a <> 255 then break;
end;
end;
end;
else
// Premultiply the alpha channel
// Win32: Load stack variable into CPU register
s := PColor32Array(pSrc);
// Win32: This line "breaks" Delphi's register allocator
//d := PColor32Array(pDst);
while True do
begin
tab := @MulTable[a];
c := (c and $FF000000) or
(tab[Byte(c shr 16)] shl 16) or
(tab[Byte(c shr 8)] shl 8) or
(tab[Byte(c )] );
//d[count] := c;
PColor32Array(pDst)[count] := c;
inc(count);
if count = 0 then exit;
c := s[count];
a := c shr 24;
if (a = 0) or (a = 255) then break;
end;
end;
end;
end;
{$IFDEF RANGECHECKS_ENABLED}
{$RANGECHECKS ON}
{$ENDIF RANGECHECKS_ENABLED}
//------------------------------------------------------------------------------
// BoxDownSampling and related functions
//------------------------------------------------------------------------------
function GetWeightedColor(const srcBits: TArrayOfColor32;
x256, y256, xx256, yy256, maxX: Integer): TColor32;
var
i, j, xi, yi, xxi, yyi, weight: Integer;
xf, yf, xxf, yyf: cardinal;
color: TWeightedColor;
begin
//This function performs 'box sampling' and differs from GetWeightedPixel
//(bilinear resampling) in one important aspect - it accommodates weighting
//any number of pixels (rather than just adjacent pixels) and this produces
//better image quality when significantly downsizing.
//Note: there's no range checking here, so the precondition is that the
//supplied boundary values are within the bounds of the srcBits array.
color.Reset;
xi := x256 shr 8; xf := x256 and $FF;
yi := y256 shr 8; yf := y256 and $FF;
xxi := xx256 shr 8; xxf := xx256 and $FF;
yyi := yy256 shr 8; yyf := yy256 and $FF;
//1. average the corners ...
weight := (($100 - xf) * ($100 - yf)) shr 8;
color.Add(srcBits[xi + yi * maxX], weight);
weight := (xxf * ($100 - yf)) shr 8;
if (weight <> 0) then color.Add(srcBits[xxi + yi * maxX], weight);
weight := (($100 - xf) * yyf) shr 8;
if (weight <> 0) then color.Add(srcBits[xi + yyi * maxX], weight);
weight := (xxf * yyf) shr 8;
if (weight <> 0) then color.Add(srcBits[xxi + yyi * maxX], weight);
//2. average the edges
if (yi +1 < yyi) then
begin
xf := $100 - xf;
for i := yi + 1 to yyi - 1 do
color.Add(srcBits[xi + i * maxX], xf);
if (xxf <> 0) then
for i := yi + 1 to yyi - 1 do
color.Add(srcBits[xxi + i * maxX], xxf);
end;
if (xi + 1 < xxi) then
begin
yf := $100 - yf;
for i := xi + 1 to xxi - 1 do
color.Add(srcBits[i + yi * maxX], yf);
if (yyf <> 0) then
for i := xi + 1 to xxi - 1 do
color.Add(srcBits[i + yyi * maxX], yyf);
end;
//3. average the non-fractional pixel 'internals' ...
for i := xi + 1 to xxi - 1 do
for j := yi + 1 to yyi - 1 do
color.Add(srcBits[i + j * maxX], $100);
//4. finally get the weighted color ...
if color.AddCount = 0 then
Result := srcBits[xi + yi * maxX] else
Result := color.Color;
end;
//------------------------------------------------------------------------------
procedure BoxDownSampling(Image: TImage32; scaleX, scaleY: double);
begin
BoxDownSampling(Image, Image, scaleX, scaleY);
end;
//------------------------------------------------------------------------------
procedure BoxDownSampling(Image: TImage32; scale: double);
begin
BoxDownSampling(Image, Image, scale);
end;
//------------------------------------------------------------------------------
procedure BoxDownSampling(Image: TImage32; newWidth, newHeight: Integer);
begin
BoxDownSampling(Image, Image, newWidth, newHeight);
end;
//------------------------------------------------------------------------------
procedure BoxDownSampling(Image, TargetImage: TImage32; scaleX, scaleY: double);
begin
BoxDownSampling(Image, TargetImage,
Max(1, Integer(Round(Image.Width * scaleX))),
Max(1, Integer(Round(Image.Height * scaleY))));
end;
//------------------------------------------------------------------------------
procedure BoxDownSampling(Image, TargetImage: TImage32; scale: double);
begin
BoxDownSampling(Image, TargetImage,
Max(1, Integer(Round(Image.Width * scale))),
Max(1, Integer(Round(Image.Height * scale))));
end;
//------------------------------------------------------------------------------
procedure BoxDownSampling(Image, TargetImage: TImage32; newWidth, newHeight: Integer);
var
x,y, x256,y256,xx256,yy256: Integer;
sx,sy: double;
tmp: TArrayOfColor32;
pc: PColor32;
scaledX: TArrayOfInteger;
begin
sx := Image.Width/newWidth * 256;
sy := Image.Height/newHeight * 256;
NewColor32Array(tmp, newWidth * newHeight, True);
NewIntegerArray(scaledX, newWidth, True);
for x := 0 to newWidth -1 do
scaledX[x] := Round((x+1) * sx);
y256 := 0;
pc := @tmp[0];
for y := 0 to newHeight - 1 do
begin
x256 := 0;
yy256 := Round((y+1) * sy);
for x := 0 to newWidth - 1 do
begin
xx256 := scaledX[x];
pc^ := GetWeightedColor(Image.Pixels,
x256, y256, xx256, yy256, Image.Width);
x256 := xx256;
inc(pc);
end;
y256 := yy256;
end;
TargetImage.AssignPixelArray(tmp, newWidth, newHeight);
end;
//------------------------------------------------------------------------------
procedure NearestNeighborResize(Image: TImage32; newWidth, newHeight: Integer);
begin
NearestNeighborResize(Image, Image, newWidth, newHeight);
end;
//------------------------------------------------------------------------------
procedure NearestNeighborResize(Image, TargetImage: TImage32; newWidth, newHeight: Integer);
var
x, y, offset: Integer;
scaledXi, scaledYiOffset: TArrayOfInteger;
tmp: TArrayOfColor32;
pc: PColor32;
pixels: TArrayOfColor32;
begin
//this NearestNeighbor code is slightly more efficient than
//the more general purpose one in Img32.Resamplers
if (newWidth = Image.Width) and (newHeight = Image.Height) then
begin
if TargetImage <> Image then TargetImage.Assign(Image);
Exit;
end;
NewColor32Array(tmp, newWidth * newHeight, True);
//get scaled X & Y values once only (storing them in lookup arrays) ...
NewIntegerArray(scaledXi, newWidth, True);
for x := 0 to newWidth -1 do
scaledXi[x] := (x * Image.Width) div newWidth;
NewIntegerArray(scaledYiOffset, newHeight, True);
SetLength(scaledYiOffset, newHeight);
for y := 0 to newHeight -1 do
//scaledYiOffset[y] := Round(y * Image.Height / newHeight) * Image.Width;
scaledYiOffset[y] := ((y * Image.Height) div newHeight) * Image.Width;
pc := @tmp[0];
pixels := Image.Pixels;
for y := 0 to newHeight - 1 do
begin
offset := scaledYiOffset[y];
for x := 0 to newWidth - 1 do
begin
pc^ := pixels[scaledXi[x] + offset];
inc(pc);
end;
end;
TargetImage.AssignPixelArray(tmp, newWidth, newHeight);
end;
//------------------------------------------------------------------------------
procedure ResamplerResize(Image: TImage32; newWidth, newHeight: Integer);
begin
ResamplerResize(Image, Image, newWidth, newHeight);
end;
//------------------------------------------------------------------------------
procedure ResamplerResize(Image, TargetImage: TImage32; newWidth, newHeight: Integer);
var
mat: TMatrixD;
begin
mat := IdentityMatrix;
MatrixScale(mat, newWidth/Image.Width, newHeight/Image.Height);
AffineTransformImage(Image, TargetImage, mat);
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure InitByteExponents;
var
i: integer;
const
inv255 : double = 1/255;
inv255sqrd : double = 1/(255*255);
inv255cubed: double = 1/(255*255*255);
piDiv256 : double = Pi / 256;
begin
for i := 0 to 255 do
begin
byteFrac[i] := i *inv255;
byteFracSq[i] := i*i *inv255sqrd;
byteFracCubed[i] := i*i*i *inv255cubed;
sinWeighted[i] := Round((Sin(i * piDiv256 - Pi/2) +1) /2 * 255);
end;
end;
//------------------------------------------------------------------------------
initialization
InitByteExponents;
rNearestResampler := RegisterResampler(NearestResampler, 'NearestNeighbor');
rBilinearResampler := RegisterResampler(BilinearResample, 'Bilinear');
rBicubicResampler := RegisterResampler(BicubicResample, 'HermiteBicubic');
rWeightedBilinear := RegisterResampler(WeightedBilinearResample, 'WeightedBilinear');
DefaultResampler := rBilinearResampler;
end.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,205 @@
const
hAmplitude = $DA119D26; // Amplitude
hArial = $EC47D4A0; // Arial
harithmetic = $978C7D6F; // arithmetic
hAtop = $7655315D; // Atop
hauto_045_start_045_reverse = $EE4545A2; // auto-start-reverse
hBackgroundAlpha = $DA55EB83; // BackgroundAlpha
hBackgroundImage = $0313D8C9; // BackgroundImage
hBaseline = $C7461648; // Baseline
hbaseline_045_shift = $56FA5107; // baseline-shift
hBevel = $BF36E150; // Bevel
hBold = $2F420533; // Bold
hBolder = $9C928BF1; // Bolder
hButt = $B619E60B; // Butt
hCDATA = $FF50BB67; // CDATA
hCircle = $C6AE4953; // Circle
hClass = $E45C07DD; // Class
hClip_045_path = $B6C7D97A; // Clip-path
hClippath = $241B0E0D; // Clippath
hcollapse = $22A7B0EC; // collapse
hColor = $E953FD29; // Color
hCurrentColor = $5B8F31B0; // CurrentColor
hCx = $B5177A89; // Cx
hCy = $A6DCDE14; // Cy
hD = $2350C685; // D
hDarken = $3DD2B17F; // Darken
hDefs = $A819FE18; // Defs
hdiffuseConstant = $08AD9D7D; // diffuseConstant
hDiscrete = $ECBBCCA1; // Discrete
hDisplay = $17D82A47; // Display
hDx = $6798DE45; // Dx
hDy = $776B7DEA; // Dy
hEllipse = $30C7994A; // Ellipse
hEnd = $B0C485D7; // End
hEntity = $395039A9; // Entity
hExponent = $D8013FFD; // Exponent
hfeBlend = $751904B9; // feBlend
hfeColorMatrix = $C0C4CF02; // feColorMatrix
hfeComponentTransfer = $8B01CCC8; // feComponentTransfer
hfeComposite = $E652E33C; // feComposite
hfeDefuseLighting = $D9F6C722; // feDefuseLighting
hfeDropShadow = $16269B00; // feDropShadow
hfeFlood = $0B6C5F4E; // feFlood
hfeFuncA = $2EA47C9E; // feFuncA
hfeFuncB = $1C5DD811; // feFuncB
hfeFuncG = $E45FE81A; // feFuncG
hfeFuncR = $F8BB10C8; // feFuncR
hfeGaussianBlur = $B2225552; // feGaussianBlur
hfeImage = $905096A0; // feImage
hfeMerge = $A2C358C0; // feMerge
hfeMergeNode = $F5F1E90F; // feMergeNode
hfeOffset = $04493A72; // feOffset
hfePointLight = $D3FFCCA4; // fePointLight
hfeSpecularLighting = $577C6E4B; // feSpecularLighting
hFill = $A3AAAB69; // Fill
hFill_045_Opacity = $18000C02; // Fill-Opacity
hFill_045_Rule = $5264679F; // Fill-Rule
hFilter = $49DC73B3; // Filter
hflood_045_color = $4E87F3B3; // flood-color
hflood_045_opacity = $691CCD42; // flood-opacity
hFlowRegion = $822E901A; // FlowRegion
hFlowRoot = $A802ADFD; // FlowRoot
hFont = $21461EC6; // Font
hFont_045_Family = $371C9BE4; // Font-Family
hFont_045_Size = $8BFECA77; // Font-Size
hFont_045_Style = $4CBDA7BE; // Font-Style
hFont_045_Weight = $EF7234B4; // Font-Weight
hFx = $D6733A04; // Fx
hFy = $A4AD5675; // Fy
hG = $3593EB0B; // G
hGradientTransform = $5B6A9CF7; // GradientTransform
hGradientUnits = $07DD34B6; // GradientUnits
hGramma = $302368DC; // Gramma
hHeight = $52FDF336; // Height
hhidden = $4C4D777D; // hidden
hHref = $8E926F4B; // Href
hId = $1B60404D; // Id
hImage = $D58C8637; // Image
hIn = $4D5FA44B; // In
hIn2 = $FBFE02B1; // In2
hIntercept = $7CBB607F; // Intercept
hItalic = $F07E7786; // Italic
hJustify = $13E85AB8; // Justify
hK1 = $33176D43; // K1
hK2 = $DD11C139; // K2
hK3 = $CF4B25AC; // K3
hK4 = $77CCF6AD; // K4
hkernelUnitLength = $3B25E980; // kernelUnitLength
hletter_045_spacing = $5130BCF5; // letter-spacing
hLighten = $85E826DE; // Lighten
hLighter = $CCEDB4E8; // Lighter
hlighting_045_color = $B4114C27; // lighting-color
hLine = $7A6D718F; // Line
hline_045_through = $1C703CCD; // line-through
hLinear = $39327DA3; // Linear
hLinearGradient = $C16E9BCD; // LinearGradient
hMarker = $72660BE9; // Marker
hMarker_045_End = $B06101FD; // Marker-End
hMarker_045_Mid = $FD95C733; // Marker-Mid
hMarker_045_Start = $CF854A0E; // Marker-Start
hMarkerHeight = $10360978; // MarkerHeight
hMarkerWidth = $EF8DF427; // MarkerWidth
hMask = $FAF8F32F; // Mask
hMatrix = $31E3AD46; // Matrix
hMiddle = $80732990; // Middle
hMiter = $33868A3B; // Miter
hMode = $68155C83; // Mode
hMonospace = $049AE941; // Monospace
hMultiply = $9110BAC4; // Multiply
hNone = $1D632BA1; // None
hNormal = $4F485502; // Normal
hObjectBoundingBox = $3D4B4519; // ObjectBoundingBox
hOffset = $A13C79EF; // Offset
hOpacity = $D9394F28; // Opacity
hOperator = $AA661628; // Operator
hOrient = $EFF6C65A; // Orient
hOut = $12067E90; // Out
hOver = $C9B82D21; // Over
hOverflow_045_Wrap = $C0B6980D; // Overflow-Wrap
hOverlay = $383BEA5E; // Overlay
hPad = $4A0CAD48; // Pad
hPath = $AD8A7AB5; // Path
hPattern = $FF0BFA79; // Pattern
hPatternContentUnits = $C6D9BCA5; // PatternContentUnits
hPatternTransform = $7051BE8C; // PatternTransform
hPatternUnits = $2FDF622C; // PatternUnits
hPoints = $87F41B44; // Points
hPolygon = $509667FD; // Polygon
hPolyline = $58B3D280; // Polyline
hR = $26014BE2; // R
hRadialGradient = $B0D7E1F9; // RadialGradient
hRect = $FA3BCBEA; // Rect
hReflect = $98BC393E; // Reflect
hRefX = $00C1DE46; // RefX
hRefY = $480CECDB; // RefY
hRepeat = $FF80069D; // Repeat
hResult = $47CD519F; // Result
hRotate = $E8A48E19; // Rotate
hRound = $323B0E24; // Round
hRx = $3ABF70F3; // Rx
hRy = $0C7D9470; // Ry
hSans = $DE5518F6; // Sans
hSans_045_Serif = $95106804; // Sans-Serif
hScreen = $207A08BB; // Screen
hSerif = $B88D4332; // Serif
hSlope = $4774735C; // Slope
hSourceAlpha = $F891B958; // SourceAlpha
hSourceGraphic = $A4DB1DC2; // SourceGraphic
hspace = $488AD9F6; // space
hspecularExponent = $93D520E8; // specularExponent
hSpreadMethod = $A08CEB57; // SpreadMethod
hSquare = $20E48144; // Square
hStart = $84DC271F; // Start
hStartOffset = $688E51A0; // StartOffset
hstdDeviation = $00D13F6A; // stdDeviation
hStop = $930CA7F2; // Stop
hStop_045_Color = $9FD6E0BE; // Stop-Color
hStop_045_Opacity = $FC7751F2; // Stop-Opacity
hStroke = $E04ABDF3; // Stroke
hStroke_045_DashArray = $795F2D78; // Stroke-DashArray
hStroke_045_DashOffset = $A418B357; // Stroke-DashOffset
hstroke_045_linecap = $29D0178F; // stroke-linecap
hstroke_045_linejoin = $79642287; // stroke-linejoin
hstroke_045_miterlimit = $16C29890; // stroke-miterlimit
hStroke_045_Opacity = $D237C6B5; // Stroke-Opacity
hStroke_045_Width = $AFF671ED; // Stroke-Width
hStyle = $A9473AB4; // Style
hSub = $1B3C1FFA; // Sub
hSuper = $9C5EE034; // Super
hsurfaceScale = $EA29CC4F; // surfaceScale
hSvg = $ED67C37E; // Svg
hSwitch = $D60E64BB; // Switch
hSymbol = $07754611; // Symbol
hTable = $AB55E184; // Table
hTableValues = $2F999AD9; // TableValues
hText = $7F3B51AB; // Text
hText_045_Anchor = $D0D82FE8; // Text-Anchor
hText_045_Decoration = $3BC20862; // Text-Decoration
hTextArea = $0A75EDBF; // TextArea
hTextLength = $DA75EDC0; // TextLength
hTextPath = $18F2748E; // TextPath
hTimes = $FF0E1FBE; // Times
hTransform = $A0930B32; // Transform
hTSpan = $33C1F865; // TSpan
hType = $3165B05D; // Type
hUnderline = $70D1B303; // Underline
hUrl = $BC113F8C; // Url
hUse = $65736EEA; // Use
hUserSpaceOnUse = $3D19F8A4; // UserSpaceOnUse
hValues = $33429E55; // Values
hViewbox = $AEF665C8; // Viewbox
hVisibility = $9F832B01; // Visibility
hvisible = $96C79D31; // visible
hWhite_045_Space = $0A1C0679; // White-Space
hWidth = $96BEECA0; // Width
hWord_045_Break = $A99E7C27; // Word-Break
hX = $9303A5E5; // X
hX1 = $74A7DE27; // X1
hX2 = $168E21F1; // X2
hXlink_058_Href = $2BDA798B; // Xlink:Href
hXor = $4D86273A; // Xor
hY = $80950108; // Y
hY1 = $7F247680; // Y1
hY2 = $6DE3D3FF; // Y2
hZ = $B6606C9E; // Z

View file

@ -0,0 +1,150 @@
const
ColorConsts: array[0..147] of TColorConst = (
(ColorName: 'aliceblue'; ColorValue: $FFF0F8FF),
(ColorName: 'antiquewhite'; ColorValue: $FFFAEBD7),
(ColorName: 'aqua'; ColorValue: $FF00FFFF),
(ColorName: 'aquamarine'; ColorValue: $FF7FFFD4),
(ColorName: 'azure'; ColorValue: $FFF0FFFF),
(ColorName: 'beige'; ColorValue: $FFF5F5DC),
(ColorName: 'bisque'; ColorValue: $FFFFE4C4),
(ColorName: 'black'; ColorValue: $FF000000),
(ColorName: 'blanchedalmond'; ColorValue: $FFFFEBCD),
(ColorName: 'blue'; ColorValue: $FF0000FF),
(ColorName: 'blueviolet'; ColorValue: $FF8A2BE2),
(ColorName: 'brown'; ColorValue: $FFA52A2A),
(ColorName: 'burlywood'; ColorValue: $FFDEB887),
(ColorName: 'cadetblue'; ColorValue: $FF5F9EA0),
(ColorName: 'chartreuse'; ColorValue: $FF7FFF00),
(ColorName: 'chocolate'; ColorValue: $FFD2691E),
(ColorName: 'coral'; ColorValue: $FFFF7F50),
(ColorName: 'cornflowerblue'; ColorValue: $FF6495ED),
(ColorName: 'cornsilk'; ColorValue: $FFFFF8DC),
(ColorName: 'crimson'; ColorValue: $FFDC143C),
(ColorName: 'currentcolor'; ColorValue: $00010002),
(ColorName: 'cyan'; ColorValue: $FF00FFFF),
(ColorName: 'darkblue'; ColorValue: $FF00008B),
(ColorName: 'darkcyan'; ColorValue: $FF008B8B),
(ColorName: 'darkgoldenrod'; ColorValue: $FFB8860B),
(ColorName: 'darkgray'; ColorValue: $FFA9A9A9),
(ColorName: 'darkgreen'; ColorValue: $FF006400),
(ColorName: 'darkgrey'; ColorValue: $FFA9A9A9),
(ColorName: 'darkkhaki'; ColorValue: $FFBDB76B),
(ColorName: 'darkmagenta'; ColorValue: $FF8B008B),
(ColorName: 'darkolivegreen'; ColorValue: $FF556B2F),
(ColorName: 'darkorange'; ColorValue: $FFFF8C00),
(ColorName: 'darkorchid'; ColorValue: $FF9932CC),
(ColorName: 'darkred'; ColorValue: $FF8B0000),
(ColorName: 'darksalmon'; ColorValue: $FFE9967A),
(ColorName: 'darkseagreen'; ColorValue: $FF8FBC8F),
(ColorName: 'darkslateblue'; ColorValue: $FF483D8B),
(ColorName: 'darkslategray'; ColorValue: $FF2F4F4F),
(ColorName: 'darkslategrey'; ColorValue: $FF2F4F4F),
(ColorName: 'darkturquoise'; ColorValue: $FF00CED1),
(ColorName: 'darkviolet'; ColorValue: $FF9400D3),
(ColorName: 'deeppink'; ColorValue: $FFFF1493),
(ColorName: 'deepskyblue'; ColorValue: $FF00BFFF),
(ColorName: 'dimgray'; ColorValue: $FF696969),
(ColorName: 'dimgrey'; ColorValue: $FF696969),
(ColorName: 'dodgerblue'; ColorValue: $FF1E90FF),
(ColorName: 'firebrick'; ColorValue: $FFB22222),
(ColorName: 'floralwhite'; ColorValue: $FFFFFAF0),
(ColorName: 'forestgreen'; ColorValue: $FF228B22),
(ColorName: 'fuchsia'; ColorValue: $FFFF00FF),
(ColorName: 'gainsboro'; ColorValue: $FFDCDCDC),
(ColorName: 'ghostwhite'; ColorValue: $FFF8F8FF),
(ColorName: 'gold'; ColorValue: $FFFFD700),
(ColorName: 'goldenrod'; ColorValue: $FFDAA520),
(ColorName: 'gray'; ColorValue: $FF808080),
(ColorName: 'green'; ColorValue: $FF008000),
(ColorName: 'greenyellow'; ColorValue: $FFADFF2F),
(ColorName: 'grey'; ColorValue: $FF808080),
(ColorName: 'honeydew'; ColorValue: $FFF0FFF0),
(ColorName: 'hotpink'; ColorValue: $FFFF69B4),
(ColorName: 'indianred'; ColorValue: $FFCD5C5C),
(ColorName: 'indigo'; ColorValue: $FF4B0082),
(ColorName: 'ivory'; ColorValue: $FFFFFFF0),
(ColorName: 'khaki'; ColorValue: $FFF0E68C),
(ColorName: 'lavender'; ColorValue: $FFE6E6FA),
(ColorName: 'lavenderblush'; ColorValue: $FFFFF0F5),
(ColorName: 'lawngreen'; ColorValue: $FF7CFC00),
(ColorName: 'lemonchiffon'; ColorValue: $FFFFFACD),
(ColorName: 'lightblue'; ColorValue: $FFADD8E6),
(ColorName: 'lightcoral'; ColorValue: $FFF08080),
(ColorName: 'lightcyan'; ColorValue: $FFE0FFFF),
(ColorName: 'lightgoldenrodyellow'; ColorValue: $FFFAFAD2),
(ColorName: 'lightgray'; ColorValue: $FFD3D3D3),
(ColorName: 'lightgreen'; ColorValue: $FF90EE90),
(ColorName: 'lightgrey'; ColorValue: $FFD3D3D3),
(ColorName: 'lightpink'; ColorValue: $FFFFB6C1),
(ColorName: 'lightsalmon'; ColorValue: $FFFFA07A),
(ColorName: 'lightseagreen'; ColorValue: $FF20B2AA),
(ColorName: 'lightskyblue'; ColorValue: $FF87CEFA),
(ColorName: 'lightslategray'; ColorValue: $FF778899),
(ColorName: 'lightslategrey'; ColorValue: $FF778899),
(ColorName: 'lightsteelblue'; ColorValue: $FFB0C4DE),
(ColorName: 'lightyellow'; ColorValue: $FFFFFFE0),
(ColorName: 'lime'; ColorValue: $FF00FF00),
(ColorName: 'limegreen'; ColorValue: $FF32CD32),
(ColorName: 'linen'; ColorValue: $FFFAF0E6),
(ColorName: 'magenta'; ColorValue: $FFFF00FF),
(ColorName: 'maroon'; ColorValue: $FF800000),
(ColorName: 'mediumaquamarine'; ColorValue: $FF66CDAA),
(ColorName: 'mediumblue'; ColorValue: $FF0000CD),
(ColorName: 'mediumorchid'; ColorValue: $FFBA55D3),
(ColorName: 'mediumpurple'; ColorValue: $FF9370DB),
(ColorName: 'mediumseagreen'; ColorValue: $FF3CB371),
(ColorName: 'mediumslateblue'; ColorValue: $FF7B68EE),
(ColorName: 'mediumspringgreen'; ColorValue: $FF00FA9A),
(ColorName: 'mediumturquoise'; ColorValue: $FF48D1CC),
(ColorName: 'mediumvioletred'; ColorValue: $FFC71585),
(ColorName: 'midnightblue'; ColorValue: $FF191970),
(ColorName: 'mintcream'; ColorValue: $FFF5FFFA),
(ColorName: 'mistyrose'; ColorValue: $FFFFE4E1),
(ColorName: 'moccasin'; ColorValue: $FFFFE4B5),
(ColorName: 'navajowhite'; ColorValue: $FFFFDEAD),
(ColorName: 'navy'; ColorValue: $FF000080),
(ColorName: 'none'; ColorValue: $0),
(ColorName: 'oldlace'; ColorValue: $FFFDF5E6),
(ColorName: 'olive'; ColorValue: $FF808000),
(ColorName: 'olivedrab'; ColorValue: $FF6B8E23),
(ColorName: 'orange'; ColorValue: $FFFFA500),
(ColorName: 'orangered'; ColorValue: $FFFF4500),
(ColorName: 'orchid'; ColorValue: $FFDA70D6),
(ColorName: 'palegoldenrod'; ColorValue: $FFEEE8AA),
(ColorName: 'palegreen'; ColorValue: $FF98FB98),
(ColorName: 'paleturquoise'; ColorValue: $FFAFEEEE),
(ColorName: 'palevioletred'; ColorValue: $FFDB7093),
(ColorName: 'papayawhip'; ColorValue: $FFFFEFD5),
(ColorName: 'peachpuff'; ColorValue: $FFFFDAB9),
(ColorName: 'peru'; ColorValue: $FFCD853F),
(ColorName: 'pink'; ColorValue: $FFFFC0CB),
(ColorName: 'plum'; ColorValue: $FFDDA0DD),
(ColorName: 'powderblue'; ColorValue: $FFB0E0E6),
(ColorName: 'purple'; ColorValue: $FF800080),
(ColorName: 'red'; ColorValue: $FFFF0000),
(ColorName: 'rosybrown'; ColorValue: $FFBC8F8F),
(ColorName: 'royalblue'; ColorValue: $FF4169E1),
(ColorName: 'saddlebrown'; ColorValue: $FF8B4513),
(ColorName: 'salmon'; ColorValue: $FFFA8072),
(ColorName: 'sandybrown'; ColorValue: $FFF4A460),
(ColorName: 'seagreen'; ColorValue: $FF2E8B57),
(ColorName: 'seashell'; ColorValue: $FFFFF5EE),
(ColorName: 'sienna'; ColorValue: $FFA0522D),
(ColorName: 'silver'; ColorValue: $FFC0C0C0),
(ColorName: 'skyblue'; ColorValue: $FF87CEEB),
(ColorName: 'slateblue'; ColorValue: $FF6A5ACD),
(ColorName: 'slategray'; ColorValue: $FF708090),
(ColorName: 'slategrey'; ColorValue: $FF708090),
(ColorName: 'springgreen'; ColorValue: $FF00FF7F),
(ColorName: 'steelblue'; ColorValue: $FF4682B4),
(ColorName: 'tan'; ColorValue: $FFD2B48C),
(ColorName: 'teal'; ColorValue: $FF008080),
(ColorName: 'thistle'; ColorValue: $FFD8BFD8),
(ColorName: 'tomato'; ColorValue: $FFFF6347),
(ColorName: 'turquoise'; ColorValue: $FF40E0D0),
(ColorName: 'violet'; ColorValue: $FFEE82EE),
(ColorName: 'wheat'; ColorValue: $FFF5DEB3),
(ColorName: 'white'; ColorValue: $FFFFFFFF),
(ColorName: 'whitesmoke'; ColorValue: $FFF5F5F5),
(ColorName: 'yellow'; ColorValue: $FFFFFF00),
(ColorName: 'yellowgreen'; ColorValue: $FF9ACD32));

View file

@ -0,0 +1,202 @@
const
h_038_aacute = $C40CD1AC; // &aacute
h_038_Aacute_ = $849FF409; // &Aacute
h_038_acirc = $840D1F02; // &acirc
h_038_Acirc_ = $7F451D3E; // &Acirc
h_038_acute = $2680A5D5; // &acute
h_038_aelig = $3D929B9C; // &aelig
h_038_AElig_ = $61DC6137; // &AElig
h_038_agrave = $CA183FB7; // &agrave
h_038_Agrave_ = $F4CF5768; // &Agrave
h_038_alefsym = $6808FBEB; // &alefsym
h_038_alpha = $EC092241; // &alpha
h_038_Alpha_ = $66CC6726; // &Alpha
h_038_amp = $037B88FA; // &amp
h_038_and = $62F7C96D; // &and
h_038_ang = $938EAA9A; // &ang
h_038_apos = $22CA8797; // &apos
h_038_aring = $21C30C85; // &aring
h_038_Aring_ = $E12CC5CC; // &Aring
h_038_ast = $57D2388E; // &ast
h_038_asymp = $98C2269E; // &asymp
h_038_atilde = $C6B2E000; // &atilde
h_038_Atilde_ = $01CDB917; // &Atilde
h_038_auml = $614FA447; // &auml
h_038_Auml_ = $9677EFF3; // &Auml
h_038_bigcup = $B6CD4440; // &bigcup
h_038_bigvee = $03DC1C48; // &bigvee
h_038_bigwedge = $A7E74E34; // &bigwedge
h_038_brvbar = $D0BFD065; // &brvbar
h_038_bull = $C248AC08; // &bull
h_038_cap = $CC74A0B4; // &cap
h_038_ccedil = $A3A63E8D; // &ccedil
h_038_Ccedil_ = $DDCB49C7; // &Ccedil
h_038_cedil = $573159F9; // &cedil
h_038_cent = $E9BF1FFA; // &cent
h_038_Cent_ = $577BC371; // &Cent
h_038_centerdot = $2DFD2629; // &centerdot
h_038_clubs = $6BB65CA1; // &clubs
h_038_cong = $F0C66C02; // &cong
h_038_Cong_ = $AE6DC6E9; // &Cong
h_038_copy = $010005D9; // &copy
h_038_Copy_ = $EF3C2855; // &Copy
h_038_cup = $002CC197; // &cup
h_038_curren = $0DF89EA4; // &curren
h_038_Curren_ = $DE0CAB36; // &Curren
h_038_dagger = $7656FFBF; // &dagger
h_038_Dagger_ = $D0B7CF56; // &Dagger
h_038_darr = $96C9CD3E; // &darr
h_038_Darr_ = $6F934755; // &Darr
h_038_deg = $3DF5EABA; // &deg
h_038_diams = $A9A6FD96; // &diams
h_038_divide = $CAF03BB9; // &divide
h_038_dollar = $D9E72A5D; // &dollar
h_038_dotsquare = $C3397AE0; // &dotsquare
h_038_eacute = $B054C095; // &eacute
h_038_Eacute_ = $FA18A8B9; // &Eacute
h_038_ecirc = $F6524191; // &ecirc
h_038_Ecirc_ = $5C7D8715; // &Ecirc
h_038_egrave = $34A4D3BE; // &egrave
h_038_Egrave_ = $0C9283D5; // &Egrave
h_038_empty = $FBD5F648; // &empty
h_038_emsp = $E2F82BAC; // &emsp
h_038_ensp = $5AE82EFD; // &ensp
h_038_equiv = $FBDA3E8C; // &equiv
h_038_eth = $61C393B2; // &eth
h_038_ETH_ = $371CECCD; // &ETH
h_038_euml = $831CC155; // &euml
h_038_Euml_ = $B12AEDB4; // &Euml
h_038_euro = $8E9DCA23; // &euro
h_038_exist = $60EF4BBD; // &exist
h_038_fnof = $27A6853B; // &fnof
h_038_forall = $00CFD7CA; // &forall
h_038_frac12 = $AFAB928E; // &frac12
h_038_frac14 = $D13ED5B4; // &frac14
h_038_frac34 = $26F38364; // &frac34
h_038_ge = $3FE463F0; // &ge
h_038_gt = $0FD403D4; // &gt
h_038_harr = $228B0A67; // &harr
h_038_hArr_ = $C3485709; // &hArr
h_038_hearts = $C2D7805D; // &hearts
h_038_hellip = $3B6A2517; // &hellip
h_038_iacute = $B2178DF7; // &iacute
h_038_Iacute_ = $33FE3E74; // &Iacute
h_038_icirc = $F728EACE; // &icirc
h_038_Icirc_ = $68FEF48B; // &Icirc
h_038_iexcl = $8C9BEDEB; // &iexcl
h_038_igrave = $BE24CE59; // &igrave
h_038_Igrave_ = $865EE18F; // &Igrave
h_038_image = $A3B28075; // &image
h_038_infin = $2A0C2732; // &infin
h_038_int = $0CE86696; // &int
h_038_iquest = $FF64EBE5; // &iquest
h_038_isin = $35015C96; // &isin
h_038_iuml = $B0B2544F; // &iuml
h_038_Iuml_ = $3311D951; // &Iuml
h_038_lang = $9C5C37A0; // &lang
h_038_laquo = $C884260F; // &laquo
h_038_larr = $0F0233CE; // &larr
h_038_lceil = $0E7A49B4; // &lceil
h_038_ldquo = $471C971F; // &ldquo
h_038_le = $451E7194; // &le
h_038_lfloor = $77C9F190; // &lfloor
h_038_lowast = $A79F8857; // &lowast
h_038_loz = $65CA22E4; // &loz
h_038_lsquo = $F1ECC4BC; // &lsquo
h_038_lt = $2F63C61B; // &lt
h_038_macr = $321199A1; // &macr
h_038_mdash = $A7E292F7; // &mdash
h_038_micro = $361E671A; // &micro
h_038_middot = $451E45D5; // &middot
h_038_minus = $AA0B27F0; // &minus
h_038_nbsp = $B80B19D4; // &nbsp
h_038_ndash = $1BE48A01; // &ndash
h_038_ne = $8ABC7A9F; // &ne
h_038_ni = $3462CDED; // &ni
h_038_not = $6571D361; // &not
h_038_notin = $C267D23D; // &notin
h_038_nsub = $3173CA9F; // &nsub
h_038_nsube = $1AD041BF; // &nsube
h_038_nsup = $71994AED; // &nsup
h_038_nsupe = $0BF489BB; // &nsupe
h_038_ntilde = $8EFF31C4; // &ntilde
h_038_Ntilde_ = $70995F88; // &Ntilde
h_038_oacute = $7C30558E; // &oacute
h_038_Oacute_ = $EC941630; // &Oacute
h_038_ocirc = $F453A7D7; // &ocirc
h_038_Ocirc_ = $1B62B2F0; // &Ocirc
h_038_ograve = $7412F9CF; // &ograve
h_038_Ograve_ = $CC3707A0; // &Ograve
h_038_oplus = $83A0D7E5; // &oplus
h_038_or = $0B850432; // &or
h_038_ordf = $634ADF56; // &ordf
h_038_ordm = $2326DF17; // &ordm
h_038_oslash = $F5890720; // &oslash
h_038_oSlash_ = $D81B4F6F; // &oSlash
h_038_otilde = $A8F53BA4; // &otilde
h_038_Otilde_ = $1222634D; // &Otilde
h_038_otimes = $60D268D0; // &otimes
h_038_ouml = $E1690926; // &ouml
h_038_Ouml_ = $10A4C723; // &Ouml
h_038_para = $908DCE0A; // &para
h_038_part = $9EF86AD3; // &part
h_038_percnt = $32B29175; // &percnt
h_038_permil = $8BDC8C51; // &permil
h_038_perp = $91CB5D3A; // &perp
h_038_phi = $B6BD54CC; // &phi
h_038_pi = $1C659BC3; // &pi
h_038_plus = $F31E4F4F; // &plus
h_038_plusmn = $DED28303; // &plusmn
h_038_pound = $FA3E1E4A; // &pound
h_038_prime = $C00FD683; // &prime
h_038_Prime_ = $343E35F0; // &Prime
h_038_prop = $FBA00FBD; // &prop
h_038_quot = $3EF3A069; // &quot
h_038_radic = $E3557A8E; // &radic
h_038_rang = $E665B199; // &rang
h_038_raquo = $CB0641C1; // &raquo
h_038_rarr = $4EB6874D; // &rarr
h_038_Rarr_ = $E8708758; // &Rarr
h_038_rceil = $71227E13; // &rceil
h_038_rdquo = $0E641212; // &rdquo
h_038_real = $CBC6DF72; // &real
h_038_reg = $9A362741; // &reg
h_038_rfloor = $BF3EE28E; // &rfloor
h_038_rsquo = $3B95A919; // &rsquo
h_038_sdot = $B6410D51; // &sdot
h_038_sect = $DBCD5E27; // &sect
h_038_shy = $C5EDE58D; // &shy
h_038_sigma = $7E384D95; // &sigma
h_038_sim = $37602F84; // &sim
h_038_spades = $9B527690; // &spades
h_038_sub = $945E4A23; // &sub
h_038_sube = $EFD32218; // &sube
h_038_sum = $F4A00AC9; // &sum
h_038_sup = $23086799; // &sup
h_038_sup1 = $FDB1BC70; // &sup1
h_038_sup2 = $EBC8189D; // &sup2
h_038_sup3 = $D2D3E6BD; // &sup3
h_038_supe = $379D3036; // &supe
h_038_szlig = $F47D8D0F; // &szlig
h_038_there4 = $F447995B; // &there4
h_038_thinsp = $E9E04445; // &thinsp
h_038_thorn = $56DCFD2E; // &thorn
h_038_THORN_ = $182FE89F; // &THORN
h_038_times = $432DB063; // &times
h_038_trade = $F7216429; // &trade
h_038_uacute = $05E35265; // &uacute
h_038_Uacute_ = $35F6CEC7; // &Uacute
h_038_uarr = $D0A59EAE; // &uarr
h_038_Uarr_ = $05F25B6E; // &Uarr
h_038_ucirc = $C896F030; // &ucirc
h_038_Ucirc_ = $2DC48084; // &Ucirc
h_038_ugrave = $6383FA6E; // &ugrave
h_038_Ugrave_ = $4A2102A0; // &Ugrave
h_038_uml = $98C50DEB; // &uml
h_038_uuml = $5E1AD134; // &uuml
h_038_Uuml_ = $6DFDCE3C; // &Uuml
h_038_yacute = $45BAD69D; // &yacute
h_038_Yacute_ = $9AF55263; // &Yacute
h_038_yen = $087FF08F; // &yen
h_038_yuml = $152D09A6; // &yuml
h_038_Yuml_ = $DD9EA01E; // &Yuml

View file

@ -0,0 +1,111 @@
//hash identifiers with appended underscores refer to
//case sensitive string values (ie they contain capitals)
h_038_aacute : val := 225;
h_038_aacute_ : val := 193;
h_038_acirc : val := 226;
h_038_acirc_ : val := 194;
h_038_acute : val := 180;
h_038_aelig : val := 230;
h_038_aelig_ : val := 198;
h_038_agrave : val := 224;
h_038_agrave_ : val := 192;
h_038_alefsym : val := $2135;
h_038_alpha : val := $3B1;
h_038_Alpha_ : val := $391;
h_038_amp : val := $26;
h_038_apos : val := $27;
h_038_aring_ : val := 197;
h_038_aring : val := 229;
h_038_ast : val := $2A;
h_038_atilde_ : val := 195;
h_038_atilde : val := 227;
h_038_auml_ : val := 196;
h_038_auml : val := 228;
h_038_bull : val := $2022;
h_038_cap : val := $2229;
h_038_clubs : val := $2663;
h_038_cup : val := $222A;
h_038_brvbar : val := 166;
h_038_ccedil : val := 231;
h_038_cedil : val := 184;
h_038_cent : val := 162;
h_038_copy : val := 169;
h_038_curren : val := 164;
h_038_deg : val := 176;
h_038_diams : val := $2666;
h_038_divide : val := $F7;
h_038_eacute_ : val := 201;
h_038_eacute : val := 233;
h_038_ecirc_ : val := 202;
h_038_ecirc : val := 234;
h_038_egrave : val := 232;
h_038_egrave_ : val := 200;
h_038_eth : val := 240;
h_038_euml_ : val := 203;
h_038_euml : val := 235;
h_038_euro : val := 128;
h_038_frac12 : val := 189;
h_038_frac14 : val := 188;
h_038_frac34 : val := 190;
h_038_ge : val := $2265;
h_038_gt : val := $3E;
h_038_hearts : val := $2665;
h_038_iacute_ : val := 205;
h_038_iacute : val := 237;
h_038_icirc_ : val := 206;
h_038_icirc : val := 238;
h_038_iexcl : val := 161;
h_038_igrave_ : val := 204;
h_038_igrave : val := 236;
h_038_int : val := $222B;
h_038_iquest : val := 191;
h_038_iuml_ : val := 207;
h_038_iuml : val := 239;
h_038_laquo : val := 171;
h_038_le : val := $2264;
h_038_lt : val := $3C;
h_038_macr : val := 175;
h_038_micro : val := 181;
h_038_middot : val := 183;
h_038_nbsp : val := 32;
h_038_not : val := 172;
h_038_ntilde : val := 241;
h_038_oacute_ : val := 211;
h_038_oacute : val := 243;
h_038_ocirc_ : val := 212;
h_038_ocirc : val := 244;
h_038_ograve_ : val := 210;
h_038_ograve : val := 242;
h_038_ordf : val := 170;
h_038_ordm : val := 186;
h_038_oslash : val := 248;
h_038_otilde_ : val := 213;
h_038_otilde : val := 245;
h_038_ouml_ : val := 214;
h_038_ouml : val := 246;
h_038_para : val := 182;
h_038_plusmn : val := 177;
h_038_pound : val := 163;
h_038_quot : val := $22;
h_038_raquo : val := 187;
h_038_reg : val := 174;
h_038_sect : val := 167;
h_038_shy : val := 173;
h_038_spades : val := $2660;
h_038_sup1 : val := 185;
h_038_sup2 : val := 178;
h_038_sup3 : val := 179;
h_038_szlig : val := 223;
h_038_thorn : val := 254;
h_038_times : val := 215;
h_038_uacute_ : val := 218;
h_038_uacute : val := 250;
h_038_ucirc : val := 251;
h_038_ucirc_ : val := 219;
h_038_ugrave_ : val := 217;
h_038_ugrave : val := 249;
h_038_uml : val := 168;
h_038_uuml_ : val := 220;
h_038_uuml : val := 252;
h_038_yacute : val := 253;
h_038_yen : val := 165;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,121 @@
// While "storage" is still technically experimental,
// it does allow file system storage of layered objects etc
// Comment out the following preprocessor define if you do wish to
// use storage (eg to compile the experimental 'CtrlDemo' in Examples).
{$DEFINE NO_STORAGE}
// default rotation direction is clockwise with positive angles
{.$DEFINE CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES}
// Image downsampling occurs when images are reduced in size, and the default downsampling
// function is 'BoxDownSampling'. When downsampling, this function generally produces much
// clearer images than general purpose resamplers (which are much better at upsampling,
// and doing other affine transformations). However, if for some reason you do wish to use
// a general purpose resampler while downsampling, then comment out (ie disable) this define.
{$DEFINE USE_DOWNSAMPLER_AUTOMATICALLY}
// The SimplifyPath and SimplifyPaths functions have changed. Specifically the last
// parameter has changed from IsOpenPath to IsClosedPath, though the default has also
// changed from false to true which should minimise any inconvenience. This change was
// made to remove an inconsistency with other functions that all contain an IsClosedPath
// parameter. However, if this change is going to create havoc for some reason, then
// the following (somewhat temporary) define can be enabled.
{.$DEFINE USE_OLD_SIMPLIFYPATHS}
//USING_VCL_LCL - using either Delphi Visual Component Library or Lazarus Component Library
//is required if using the TImage32Panel component
//and adds a few extra library features (eg copying to and from TBitmap objects)
{$IF DEFINED(FPC)}
{$MACRO ON}
{$DEFINE USING_LCL}
{.$DEFINE USING_VCL_LCL}
{$DEFINE COMPILERVERSION:= 17}
{$ELSEIF declared(FireMonkeyVersion) OR DEFINED(FRAMEWORK_FMX)}
{$DEFINE USING_FMX}
{$ELSE}
{$DEFINE USING_VCL}
{$DEFINE USING_VCL_LCL}
{$IFEND}
{$IFDEF FPC}
{$MODE DELPHI}
{$DEFINE ABSTRACT_CLASSES}
{$DEFINE RECORD_METHODS}
{$DEFINE PBYTE}
{$DEFINE NEWPOSFUNC}
{$DEFINE SUPPORTS_POINTERMATH}
{$DEFINE CLASS_STATIC}
{.$DEFINE UITYPES}
{$DEFINE NESTED_TYPES}
{$IFNDEF DEBUG}
{$DEFINE INLINE}
{$DEFINE INLINE_COMPATIBLE}
{$ENDIF}
{$DEFINE DELPHI_PNG}
{$IFDEF WINDOWS}
{$DEFINE MSWINDOWS}
{$ENDIF}
{$ELSE}
{$IF COMPILERVERSION < 15}
Your version of Delphi is not supported (Image32 requires Delphi version 7 or above)
{$IFEND}
{$IF COMPILERVERSION < 23}
{$DEFINE CPUX86} // CPUX86 was added in Delphi XE2 (added Win64 compiler)
{$IFEND}
{$IF COMPILERVERSION >= 17} //Delphi 2005
{$IFNDEF DEBUG}
{$DEFINE INLINE} //added inlining
{$ENDIF}
{$DEFINE NESTED_TYPES} //added nested types & nested constants
{$IF COMPILERVERSION >= 18} //Delphi 2006
{$DEFINE ABSTRACT_CLASSES} //added abstract classes
{$DEFINE REPORTMEMORYLEAKS} //added ReportMemoryLeaksOnShutdown
{$WARN SYMBOL_PLATFORM OFF}
{$DEFINE SETSIZE} //added TBitmap.SetSize
{$IF COMPILERVERSION >= 18.5} //Delphi 2007
{$DEFINE RECORD_METHODS} //added records with methods
{$DEFINE DELPHI_PNG} //added PNG support
{$DEFINE DELPHI_GIF} //added GIF support
{$DEFINE MAINFORMONTASKBAR} //added TApplication.MainFormOnTaskbar
{$if CompilerVersion >= 20} //Delphi 2009
{$DEFINE PBYTE} //added PByte
{$DEFINE CHARINSET} //added CharInSet function
{$DEFINE EXIT_PARAM} //added Exit(value)
{$DEFINE ALPHAFORMAT} //added TBitmap.AlphaFormat property
{$DEFINE SUPPORTS_POINTERMATH} //added {$POINTERMATH ON/OFF}
{$DEFINE CLASS_STATIC} //added class static methods
{$IF COMPILERVERSION >= 21} //Delphi 2010
{$IFNDEF DEBUG}
{$DEFINE INLINE_COMPATIBLE} //avoid compiler bug with INLINE in Delphi 2005-2009 ("incompatible type")
{$ENDIF}
{$DEFINE GESTURES} //added screen gesture support
{$IF COMPILERVERSION >= 23} //DelphiXE2
{$DEFINE USES_NAMESPACES}
{$DEFINE FORMATSETTINGS}
{$DEFINE TROUNDINGMODE}
{$DEFINE UITYPES} //added UITypes unit
{$DEFINE XPLAT_GENERICS} //cross-platform generics support
{$DEFINE STYLESERVICES} //added StyleServices unit
{$IF COMPILERVERSION >= 24} //DelphiXE3
{$LEGACYIFEND ON}
{$DEFINE NEWPOSFUNC}
{$DEFINE ZEROBASEDSTR}
{$IF COMPILERVERSION >= 25} //DelphiXE4
{$LEGACYIFEND ON} //avoids compiler warning
{$IFEND}
{$IFEND}
{$IFEND}
{$IFEND}
{$IFEND}
{$IFEND}
{$IFEND}
{$IFEND}
{$ENDIF}
{$IFOPT Q+}
{$DEFINE OVERFLOWCHECKS_ENABLED}
{$ENDIF}
{$IFOPT R+}
{$DEFINE RANGECHECKS_ENABLED}
{$ENDIF}

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Control like TButton which does not steal focus on click
Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2021-2026 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
@ -27,7 +27,7 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
Buttons, Themes;
Buttons, Themes, Types, ImgList, LMessages;
type
@ -36,6 +36,21 @@ type
TKASButton = class(TPanel)
private
FState: TButtonState;
FShowCaption: Boolean;
FMouseInControl: Boolean;
FButtonGlyph: TButtonGlyph;
FImageChangeLink: TChangeLink;
private
function GetGlyph: TBitmap;
function GetImageWidth: Integer;
function IsGlyphStored: Boolean;
procedure SetGlyph(AValue: TBitmap);
function GetImageIndex: TImageIndex;
function GetImages: TCustomImageList;
procedure SetImageWidth(AValue: Integer);
procedure SetShowCaption(AValue: Boolean);
procedure SetImageIndex(AValue: TImageIndex);
procedure SetImages(AValue: TCustomImageList);
function GetDrawDetails: TThemedElementDetails;
protected
procedure Paint; override;
@ -47,8 +62,24 @@ type
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
protected
function GetGlyphSize: TSize;
procedure GlyphChanged(Sender: TObject);
procedure ImageListChange(Sender: TObject);
class function GetControlClassDefaultSize: TSize; override;
procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
procedure CMEnabledChanged(var Message: TLMessage); message CM_ENABLEDCHANGED;
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
published
property Action;
property Images: TCustomImageList read GetImages write SetImages;
property ImageIndex: TImageIndex read GetImageIndex write SetImageIndex default -1;
property ImageWidth: Integer read GetImageWidth write SetImageWidth default 0;
property Glyph: TBitmap read GetGlyph write SetGlyph stored IsGlyphStored;
property ShowCaption: Boolean read FShowCaption write SetShowCaption default True;
end;
procedure Register;
@ -56,13 +87,16 @@ procedure Register;
implementation
uses
LCLType, LCLProc, LCLIntf;
LCLType, LCLProc, LCLIntf, ActnList, GraphType;
procedure Register;
begin
RegisterComponents('KASComponents',[TKASButton]);
end;
const
UpState: array[Boolean] of TButtonState = (bsUp, bsHot);
{ TKASButton }
procedure TKASButton.DoEnter;
@ -97,10 +131,91 @@ begin
Result := ThemeServices.GetElementDetails(Detail)
end;
procedure TKASButton.SetShowCaption(AValue: Boolean);
begin
if FShowCaption = AValue then Exit;
FShowCaption:= AValue;
Invalidate;
end;
function TKASButton.GetGlyph: TBitmap;
begin
Result:= FButtonGlyph.Glyph;
end;
function TKASButton.GetImageIndex: TImageIndex;
begin
Result:= FButtonGlyph.ExternalImageIndex;
end;
function TKASButton.GetImages: TCustomImageList;
begin
Result:= FButtonGlyph.ExternalImages;
end;
function TKASButton.GetImageWidth: Integer;
begin
Result:= FButtonGlyph.ExternalImageWidth;
end;
function TKASButton.IsGlyphStored: Boolean;
var
Act: TCustomAction;
begin
if Action <> nil then
begin
Result:= True;
Act:= TCustomAction(Action);
if (Act.ActionList <> nil) and (Act.ActionList.Images <> nil) and
(Act.ImageIndex >= 0) and (Act.ImageIndex < Act.ActionList.Images.Count) then
Result := False;
end
else Result:= (FButtonGlyph.Glyph <> nil) and (not FButtonGlyph.Glyph.Empty) and
(FButtonGlyph.Glyph.Width > 0) and (FButtonGlyph.Glyph.Height > 0);
end;
procedure TKASButton.SetGlyph(AValue: TBitmap);
begin
FButtonGlyph.Glyph := AValue;
InvalidatePreferredSize;
AdjustSize;
end;
procedure TKASButton.SetImageIndex(AValue: TImageIndex);
begin
FButtonGlyph.ExternalImageIndex:= AValue;
end;
procedure TKASButton.SetImages(AValue: TCustomImageList);
begin
if FButtonGlyph.ExternalImages <> nil then
begin
FButtonGlyph.ExternalImages.UnRegisterChanges(FImageChangeLink);
FButtonGlyph.ExternalImages.RemoveFreeNotification(Self);
end;
FButtonGlyph.ExternalImages := AValue;
if FButtonGlyph.ExternalImages <> nil then
begin
FButtonGlyph.ExternalImages.FreeNotification(Self);
FButtonGlyph.ExternalImages.RegisterChanges(FImageChangeLink);
end;
InvalidatePreferredSize;
AdjustSize;
end;
procedure TKASButton.SetImageWidth(AValue: Integer);
begin
FButtonGlyph.ExternalImageWidth:= AValue;
InvalidatePreferredSize;
AdjustSize;
end;
procedure TKASButton.Paint;
var
APoint: TPoint;
SysFont: TFont;
PaintRect: TRect;
AGlyphSize: TSize;
TextFlags: Integer;
Details: TThemedElementDetails;
begin
@ -109,7 +224,7 @@ begin
ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect);
PaintRect := ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect);
if Caption <> EmptyStr then
if FShowCaption and (Caption <> EmptyStr) then
begin
TextFlags := DT_CENTER or DT_VCENTER;
if UseRightToLeftReading then begin
@ -128,12 +243,23 @@ begin
Canvas.Brush.Style := bsClear;
DrawText(Canvas.Handle, PChar(Caption), Length(Caption), PaintRect, TextFlags);
end;
end
else begin
AGlyphSize:= GetGlyphSize;
if (AGlyphSize.CX > 0) and (AGlyphSize.CY > 0) then
begin
APoint.X:= (PaintRect.Width - AGlyphSize.CX) div 2;
APoint.Y:= (PaintRect.Height - AGlyphSize.CY) div 2;
FButtonGlyph.Draw(Canvas, PaintRect, APoint, FState, True, 0, Font.PixelsPerInch, GetCanvasScaleFactor);
end;
end;
end;
procedure TKASButton.MouseEnter;
begin
inherited MouseEnter;
FMouseInControl:= True;
FState:= bsHot;
Invalidate;
end;
@ -141,6 +267,7 @@ end;
procedure TKASButton.MouseLeave;
begin
inherited MouseLeave;
FMouseInControl:= False;
FState:= bsUp;
Invalidate;
end;
@ -182,10 +309,112 @@ begin
Invalidate;
end;
function TKASButton.GetGlyphSize: TSize;
var
AIndex: Integer;
AEffect: TGraphicsDrawEffect;
AImageRes: TScaledImageListResolution;
begin
if (FButtonGlyph.Glyph.Empty) and ((Images = nil) or (ImageIndex = -1)) then
begin
Result.CX:= 0;
Result.CY:= 0;
Exit;
end;
FButtonGlyph.GetImageIndexAndEffect(Low(TButtonState), Font.PixelsPerInch,
GetCanvasScaleFactor, AImageRes, AIndex, AEffect);
Result.CX:= AImageRes.Width;
Result.CY:= AImageRes.Height;
end;
procedure TKASButton.GlyphChanged(Sender: TObject);
begin
InvalidatePreferredSize;
AdjustSize;
end;
procedure TKASButton.ImageListChange(Sender: TObject);
begin
if Sender = Images then Invalidate;
end;
class function TKASButton.GetControlClassDefaultSize: TSize;
begin
Result.CX := 23;
Result.CY := 22;
end;
procedure TKASButton.ActionChange(Sender: TObject; CheckDefaults: Boolean);
begin
inherited ActionChange(Sender, CheckDefaults);
if Sender is TCustomAction then
begin
with TCustomAction(Sender) do
begin
if (Glyph.Empty) and (ActionList <> nil) and (ActionList.Images <> nil) and
(ImageIndex >= 0) and (ImageIndex < ActionList.Images.Count) then
ActionList.Images.GetBitmap(ImageIndex, Glyph);
end;
end;
end;
procedure TKASButton.CMEnabledChanged(var Message: TLMessage);
begin
if Enabled then
FState:= UpState[FMouseInControl]
else begin
FState:= bsDisabled;
end;
inherited CMEnabledChanged(Message);
end;
procedure TKASButton.CalculatePreferredSize(var PreferredWidth,
PreferredHeight: Integer; WithThemeSpace: Boolean);
var
PaintRect: TRect;
ClientRect: TRect;
AGlyphSize: TSize;
Details: TThemedElementDetails;
begin
inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace);
AGlyphSize:= GetGlyphSize;
if (AGlyphSize.CX > 0) and (AGlyphSize.CY > 0) then
begin
Details:= GetDrawDetails;
PaintRect:= TRect.Create(0, 0, 32, 32);
ClientRect:= ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect);
PreferredWidth:= Abs(PaintRect.Width - ClientRect.Width) + AGlyphSize.CX;
PreferredHeight:= Abs(PaintRect.Height - ClientRect.Height) + AGlyphSize.CY;
end;
end;
constructor TKASButton.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
FButtonGlyph := TButtonGlyph.Create;
FButtonGlyph.NumGlyphs := 1;
FButtonGlyph.OnChange := GlyphChanged;
FButtonGlyph.IsDesigning := csDesigning in ComponentState;
FImageChangeLink := TChangeLink.Create;
FImageChangeLink.OnChange := ImageListChange;
FShowCaption:= True;
TabStop:= True;
end;
destructor TKASButton.Destroy;
begin
FreeAndNil(FButtonGlyph);
FreeAndNil(FImageChangeLink);
inherited Destroy;
end;
end.

View file

@ -12,9 +12,17 @@ type
{ TKASButtonPanel }
TKASButtonPanel = class(TPanel)
private
FSameWidth: Boolean;
FSameHeight: Boolean;
protected
procedure ButtonsAutoSize;
procedure DoAutoSize; override;
public
constructor Create(TheOwner: TComponent); override;
published
property SameWidth: Boolean read FSameWidth write FSameWidth default True;
property SameHeight: Boolean read FSameHeight write FSameHeight default True;
end;
procedure Register;
@ -44,8 +52,8 @@ begin
AControl:= Controls[Index];
if AControl is TCustomButton then
begin
if AControl.Width > AMaxWidth then AMaxWidth:= AControl.Width;
if AControl.Height > AMaxHeight then AMaxHeight:= AControl.Height;
if FSameWidth and (AControl.Width > AMaxWidth) then AMaxWidth:= AControl.Width;
if FSameHeight and (AControl.Height > AMaxHeight) then AMaxHeight:= AControl.Height;
end;
end;
for Index:= 0 to ControlCount - 1 do
@ -53,8 +61,8 @@ begin
AControl:= Controls[Index];
if AControl is TCustomButton then
begin
AControl.Constraints.MinWidth:= AMaxWidth;
AControl.Constraints.MinHeight:= AMaxHeight;
if FSameWidth then AControl.Constraints.MinWidth:= AMaxWidth;
if FSameHeight then AControl.Constraints.MinHeight:= AMaxHeight;
end;
end;
end;
@ -62,7 +70,15 @@ end;
procedure TKASButtonPanel.DoAutoSize;
begin
inherited DoAutoSize;
if AutoSize then ButtonsAutosize;
if csDesigning in ComponentState then Exit;
if AutoSize and (FSameWidth or FSameHeight) then ButtonsAutosize;
end;
constructor TKASButtonPanel.Create(TheOwner: TComponent);
begin
FSameWidth:= True;
FSameHeight:= True;
inherited Create(TheOwner);
end;
end.

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Custom edit control with the look and feel like TLabel
Copyright (C) 2017-2018 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2017-2024 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
@ -26,7 +26,7 @@ unit KASCDEdit;
interface
uses
Classes, SysUtils, LResources, Controls, Graphics, Dialogs, Types,
Classes, SysUtils, LazVersion, LResources, Controls, Graphics, Dialogs, Types,
Menus, CustomDrawnControls, CustomDrawnDrawers, CustomDrawn_Common;
type
@ -58,6 +58,9 @@ type
procedure SelectAll;
procedure CopyToClipboard;
published
property Color default clDefault;
property Cursor default crIBeam;
property ReadOnly default True;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
@ -104,12 +107,7 @@ end;
procedure TKASCDDrawer.DrawEditBackground(ADest: TCanvas; ADestPos: TPoint;
ASize: TSize; AState: TCDControlState; AStateEx: TCDEditStateEx);
begin
// The background
ADest.Pen.Style := psSolid;
ADest.Pen.Color := AStateEx.RGBColor;
ADest.Brush.Style := bsSolid;
ADest.Brush.Color := AStateEx.RGBColor;
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
// None
end;
procedure TKASCDDrawer.DrawEdit(ADest: TCanvas; ASize: TSize;
@ -122,10 +120,8 @@ var
lTextLeftSpacing, lTextTopSpacing, lTextBottomSpacing: Integer;
lTextColor: TColor;
i, lVisibleLinesCount: Integer;
AClipRect: TRect;
begin
// Background
DrawEditBackground(ADest, Point(0, 0), ASize, AState, AStateEx);
// General text configurations which apply to all lines
// Configure the text color
if csfEnabled in AState then
@ -168,10 +164,10 @@ begin
// The text
ADest.Pen.Style := psClear;
ADest.Brush.Style := bsClear;
lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lControlTextLen);
// ToDo: Implement multi-line selection
if (AStateEx.SelLength = 0) or (AStateEx.SelStart.Y <> AStateEx.VisibleTextStart.Y+i) then
begin
lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lControlTextLen);
ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText);
end
// Text and Selection
@ -186,22 +182,18 @@ begin
lSelLength := AStateEx.SelLength;
if lSelLength < 0 then lSelLength := lSelLength * -1;
// Text right of the selection
// Draw a normal text
ADest.Font.Color := lTextColor;
ADest.Brush.Color := AStateEx.RGBColor;
lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lControlTextLen);
ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText);
// The selection text
// Draw a selected text
ADest.Brush.Color := clHighlight;
ADest.Font.Color := clHighlightText;
lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lSelLeftPos + lSelLength);
ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText);
// Text left of the selection
ADest.Font.Color := lTextColor;
ADest.Brush.Color := AStateEx.RGBColor;
lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lSelLeftPos-AStateEx.VisibleTextStart.X + 1);
// Calculate a clip rect
AClipRect := ADest.ClipRect;
AClipRect.Left := ADest.TextWidth(UTF8Copy(lVisibleText, 1, lSelLeftPos));
AClipRect.Right := ADest.TextWidth(UTF8Copy(lVisibleText, 1, lSelLeftPos + lSelLength));
IntersectClipRect(ADest.Handle, AClipRect.Left, AClipRect.Top, AClipRect.Right, AClipRect.Bottom);
ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText);
end;
end;
@ -382,6 +374,10 @@ begin
end;
end;
end;
if ReadOnly and (Key in [VK_BACK, VK_DELETE]) then
begin
Key:= 0;
end;
inherited KeyDown(Key, Shift);
end;
@ -389,10 +385,11 @@ constructor TKASCDEdit.Create(AOwner: TComponent);
begin
CreatePopupMenu;
inherited Create(AOwner);
Color:= clForm;
ReadOnly:= True;
Cursor:= crIBeam;
Color:= clDefault;
DrawStyle:= dsExtra1;
ControlStyle:= ControlStyle + [csParentBackground] - [csOpaque];
end;
procedure TKASCDEdit.MouseMove(Shift: TShiftState; X, Y: integer);
@ -415,6 +412,12 @@ begin
begin
inherited MouseDown(Button, Shift, X, Y);
{$IF Laz_FullVersion >= 4990000}
// see also LCL 4b41b7a:
// customdrawn: remove redundant SetFocus from TCDControl.MouseDown
SetFocus();
{$ENDIF}
FDragDropStarted := True;
// Caret positioning

View file

@ -4,7 +4,7 @@
Extended ComboBox classes
Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com)
Copyright (C) 2015-2017 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2015-2023 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
@ -28,7 +28,11 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
LCLVersion;
ColorBox, Buttons, LMessages, Types, KASButton;
const
DEF_COLOR_STYLE = [cbStandardColors, cbExtendedColors,
cbSystemColors, cbPrettyNames];
type
@ -46,14 +50,64 @@ type
TComboBoxAutoWidth = class(TComboBox)
protected
procedure CalculatePreferredSize(
var PreferredWidth, PreferredHeight: Integer;
WithThemeSpace: Boolean); override;
procedure CalculateSize(MaxWidth: Integer; var NeededWidth: Integer);
{$if lcl_fullversion >= 1070000}
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer;
WithThemeSpace: Boolean); override;
procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double); override;
{$endif}
end;
{ TKASColorBox }
TKASColorBox = class(TColorBox)
protected
procedure SetCustomColor(AColor: TColor);
function PickCustomColor: Boolean; override;
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer;
WithThemeSpace: Boolean); override;
procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double); override;
public
constructor Create(AOwner: TComponent); override;
published
property DefaultColorColor default clNone;
property Style default DEF_COLOR_STYLE;
end;
{ TKASColorBoxButton }
TKASColorBoxButton = class(TCustomControl)
private
function GetSelected: TColor;
function GetStyle: TColorBoxStyle;
function GetOnChange: TNotifyEvent;
function GetColorDialog: TColorDialog;
procedure SetSelected(AValue: TColor);
procedure SetStyle(AValue: TColorBoxStyle);
procedure SetOnChange(AValue: TNotifyEvent);
procedure SetColorDialog(AValue: TColorDialog);
protected
FButton: TKASButton;
FColorBox: TKASColorBox;
procedure DoAutoSize; override;
procedure EnabledChanged; override;
procedure ButtonClick(Sender: TObject);
class function GetControlClassDefaultSize: TSize; override;
procedure CMParentColorChanged(var Message: TLMessage); message CM_PARENTCOLORCHANGED;
public
constructor Create(AOwner: TComponent); override;
procedure SetFocus; override;
function Focused: Boolean; override;
property Selected: TColor read GetSelected write SetSelected default clBlack;
published
property Align;
property Anchors;
property TabOrder;
property Constraints;
property BorderSpacing;
property AutoSize default True;
property OnChange: TNotifyEvent read GetOnChange write SetOnChange;
property ColorDialog: TColorDialog read GetColorDialog write SetColorDialog;
property Style: TColorBoxStyle read GetStyle write SetStyle default DEF_COLOR_STYLE;
end;
procedure Register;
@ -65,7 +119,94 @@ uses
procedure Register;
begin
RegisterComponents('KASComponents',[TComboBoxWithDelItems, TComboBoxAutoWidth]);
RegisterComponents('KASComponents',[TComboBoxWithDelItems, TComboBoxAutoWidth,
TKASColorBox, TKASColorBoxButton]);
end;
procedure CalculateSize(ComboBox: TCustomComboBox;
var PreferredWidth: Integer; PreferredHeight: Integer);
var
DC: HDC;
R: TRect;
I, M: Integer;
Flags: Cardinal;
OldFont: HGDIOBJ;
MaxWidth: Integer;
LabelText: String;
Idx: Integer = -1;
begin
with ComboBox do
begin
MaxWidth:= Constraints.MinMaxWidth(10000);
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
PreferredWidth := 1;
Exit;
end;
DC := GetDC(Parent.Handle);
try
LabelText:= LabelText + 'W';
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);
PreferredWidth := (R.Right - R.Left) + PreferredHeight;
finally
ReleaseDC(Parent.Handle, DC);
end;
end;
end;
function CalculateHeight(ComboBox: TCustomComboBox): Integer;
var
DC: HDC;
R: TRect;
Flags: Cardinal;
OldFont: HGDIOBJ;
LabelText: String;
MaxHeight: Integer;
begin
with ComboBox do
begin
MaxHeight:= Constraints.MinMaxHeight(10000);
DC := GetDC(Parent.Handle);
try
LabelText:= Items.Text;
R := Rect(0, 0, 10000, MaxHeight);
OldFont := SelectObject(DC, HGDIOBJ(Font.Reference.Handle));
Flags := DT_CALCRECT or DT_EXPANDTABS or DT_SINGLELINE;
DrawText(DC, PChar(LabelText), Length(LabelText), R, Flags);
SelectObject(DC, OldFont);
Result := (R.Bottom - R.Top);
finally
ReleaseDC(Parent.Handle, DC);
end;
end;
end;
{ TComboBoxWithDelItems }
@ -91,75 +232,235 @@ end;
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);
CalculateSize(Self, PreferredWidth, PreferredHeight);
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;
{$if lcl_fullversion >= 1070000}
procedure TComboBoxAutoWidth.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double);
begin
// Don't auto adjust horizontal layout
inherited DoAutoAdjustLayout(AMode, 1.0, AYProportion);
end;
{$endif}
{ TKASColorBox }
procedure TKASColorBox.SetCustomColor(AColor: TColor);
var
Index: Integer;
begin
for Index:= Ord(cbCustomColor in Style) to Items.Count - 1 do
begin
if Colors[Index] = AColor then
begin
Selected:= AColor;
Exit;
end;
end;
if cbCustomColor in Style then
begin
Items.Objects[0]:= TObject(PtrInt(AColor));
end;
Items.AddObject('$' + HexStr(AColor, 8), TObject(PtrInt(AColor)));
Selected:= AColor;
end;
function TKASColorBox.PickCustomColor: Boolean;
begin
Result:= inherited PickCustomColor;
SetCustomColor(Colors[0]);
end;
procedure TKASColorBox.CalculatePreferredSize(var PreferredWidth,
PreferredHeight: Integer; WithThemeSpace: Boolean);
begin
inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace);
if csDesigning in ComponentState then Exit;
if (Parent = nil) or (not Parent.HandleAllocated) then Exit;
if (csSubComponent in ComponentStyle) then
begin
ItemHeight:= CalculateHeight(Self);
if (Parent.Anchors * [akLeft, akRight] = [akLeft, akRight]) then
Exit;
end;
CalculateSize(Self, PreferredWidth, PreferredHeight);
PreferredWidth+= ColorRectWidth + ColorRectOffset;
end;
procedure TKASColorBox.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double);
begin
if AMode in [lapAutoAdjustWithoutHorizontalScrolling, lapAutoAdjustForDPI] then
begin
if ColorRectWidthStored then
ColorRectWidth:= Round(ColorRectWidth * AXProportion);
end;
// Don't auto adjust horizontal layout
inherited DoAutoAdjustLayout(AMode, 1.0, AYProportion);
end;
constructor TKASColorBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Style:= DEF_COLOR_STYLE;
DefaultColorColor:= clNone;
end;
{ TKASColorBoxButton }
function TKASColorBoxButton.GetSelected: TColor;
begin
Result:= FColorBox.Selected;
end;
function TKASColorBoxButton.GetStyle: TColorBoxStyle;
begin
Result:= FColorBox.Style;
end;
function TKASColorBoxButton.GetOnChange: TNotifyEvent;
begin
Result:= FColorBox.OnChange;
end;
function TKASColorBoxButton.GetColorDialog: TColorDialog;
begin
Result:= FColorBox.ColorDialog;
end;
procedure TKASColorBoxButton.SetSelected(AValue: TColor);
begin
FColorBox.SetCustomColor(AValue);
end;
procedure TKASColorBoxButton.SetStyle(AValue: TColorBoxStyle);
begin
FColorBox.Style:= AValue;
end;
procedure TKASColorBoxButton.SetOnChange(AValue: TNotifyEvent);
begin
FColorBox.OnChange:= AValue;
end;
procedure TKASColorBoxButton.SetColorDialog(AValue: TColorDialog);
begin
FColorBox.ColorDialog:= AValue;
end;
procedure TKASColorBoxButton.DoAutoSize;
begin
inherited DoAutoSize;
FButton.Constraints.MinWidth:= FButton.Height;
end;
procedure TKASColorBoxButton.EnabledChanged;
begin
if Enabled then
FColorBox.Font.Color:= clDefault
else begin
FColorBox.Font.Color:= clGrayText;
end;
inherited EnabledChanged;
end;
procedure TKASColorBoxButton.ButtonClick(Sender: TObject);
Var
FreeDialog: Boolean;
begin
if csDesigning in ComponentState then Exit;
with FColorBox do
begin
FreeDialog:= (ColorDialog = nil);
if FreeDialog then
begin
ColorDialog:= TColorDialog.Create(GetTopParent);
end;
try
with ColorDialog do
begin
Color:= FColorBox.Selected;
if Execute Then
begin
FColorBox.SetCustomColor(Color);
Invalidate;
end;
end;
finally
if FreeDialog Then
begin
ColorDialog.Free;
ColorDialog:= nil;
end;
end;
end;
end;
class function TKASColorBoxButton.GetControlClassDefaultSize: TSize;
begin
Result:= TKASColorBox.GetControlClassDefaultSize;
Result.cx += Result.cy;
end;
procedure TKASColorBoxButton.CMParentColorChanged(var Message: TLMessage);
begin
if inherited ParentColor then
begin
inherited SetColor(Parent.Color);
inherited ParentColor:= True;
end;
end;
constructor TKASColorBoxButton.Create(AOwner: TComponent);
begin
FButton:= TKASButton.Create(Self);
FColorBox:= TKASColorBox.Create(Self);
inherited Create(AOwner);
ControlStyle:= ControlStyle + [csNoFocus];
BorderStyle:= bsNone;
TabStop:= True;
inherited TabStop:= False;
with FColorBox do
begin
SetSubComponent(True);
Align:= alClient;
ParentColor:= False;
ParentFont:= True;
Parent:= Self;
end;
with FButton do
begin
Align:= alRight;
Caption:= '..';
BorderSpacing.Left:= 2;
OnClick:= @ButtonClick;
Parent:= Self;
end;
AutoSize:= True;
Color:= clWindow;
inherited ParentColor:= True;
end;
procedure TKASColorBoxButton.SetFocus;
begin
FColorBox.SetFocus;
end;
function TKASColorBoxButton.Focused: Boolean;
begin
Result:= FColorBox.Focused;
end;
end.

View file

@ -0,0 +1,312 @@
unit KASComCtrls;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls, ComCtrls, Graphics, Dialogs;
type
{ TToolButtonClr }
TToolButtonClr = class(TToolButton)
private
FButtonColor: TColor;
FColorDialog: TColorDialog;
procedure SetButtonColor(AValue: TColor);
protected
procedure Paint; override;
procedure ShowColorDialog;
public
constructor Create(TheOwner: TComponent); override;
procedure Click; override;
property ButtonColor: TColor read FButtonColor write SetButtonColor;
end;
{ TToolBarAdv }
TToolBarAdv = class(TToolBar)
private
FToolBarFlags: TToolBarFlags;
protected
procedure CalculatePreferredSize(var PreferredWidth,
PreferredHeight: Integer;
{%H-}WithThemeSpace: Boolean); override;
procedure AlignControls({%H-}AControl: TControl;
var RemainingClientRect: TRect); override;
function WrapButtons(UseSize: Integer; out NewWidth,
NewHeight: Integer; Simulate: Boolean): Boolean;
end;
procedure Register;
implementation
uses
Math;
{ TToolButtonClr }
procedure TToolButtonClr.SetButtonColor(AValue: TColor);
begin
if FButtonColor <> AValue then
begin
FButtonColor:= AValue;
Invalidate;
end;
end;
procedure TToolButtonClr.Paint;
var
ARect, IconRect: TRect;
begin
inherited Paint;
if (FToolBar <> nil) and (ClientWidth > 0) and (ClientHeight > 0) then
begin
ARect:= ClientRect;
IconRect.Left:= (ARect.Width - FToolBar.ImagesWidth) div 2;
IconRect.Top:= (ARect.Height - FToolBar.ImagesWidth) div 2;
IconRect.Right:= IconRect.Left + FToolBar.ImagesWidth;
IconRect.Bottom:= IconRect.Top + FToolBar.ImagesWidth;
if Enabled then
begin
Canvas.Brush.Style:= bsSolid;
Canvas.Brush.Color:= FButtonColor
end
else begin
Canvas.Brush.Color:= clGrayText;
Canvas.Brush.Style:= bsDiagCross;
end;
Canvas.Pen.Color:= clBtnText;
Canvas.Rectangle(IconRect);
end;
end;
procedure TToolButtonClr.ShowColorDialog;
begin
if not Enabled then Exit;
if (FColorDialog = nil) then
begin
FColorDialog := TColorDialog.Create(Self);
end;
FColorDialog.Color := ButtonColor;
if FColorDialog.Execute then
begin
ButtonColor := FColorDialog.Color;
end;
end;
constructor TToolButtonClr.Create(TheOwner: TComponent);
begin
FButtonColor:= clRed;
inherited Create(TheOwner);
end;
procedure TToolButtonClr.Click;
begin
inherited Click;
ShowColorDialog;
end;
{ TToolBarAdv }
procedure TToolBarAdv.CalculatePreferredSize(var PreferredWidth,
PreferredHeight: Integer; WithThemeSpace: Boolean);
begin
if IsVertical then
WrapButtons(Height, PreferredWidth, PreferredHeight, True)
else
WrapButtons(Width, PreferredWidth, PreferredHeight, True);
end;
procedure TToolBarAdv.AlignControls(AControl: TControl;
var RemainingClientRect: TRect);
var
NewWidth, NewHeight: integer;
begin
if tbfPlacingControls in FToolBarFlags then exit;
Include(FToolBarFlags, tbfPlacingControls);
DisableAlign;
try
AdjustClientRect(RemainingClientRect);
if IsVertical then
WrapButtons(Height, NewWidth, NewHeight, False)
else
WrapButtons(Width, NewWidth, NewHeight, False);
finally
Exclude(FToolBarFlags, tbfPlacingControls);
EnableAlign;
end;
end;
function TToolBarAdv.WrapButtons(UseSize: Integer; out NewWidth,
NewHeight: Integer; Simulate: Boolean): Boolean;
var
ARect: TRect;
X, Y: Integer;
Vertical: Boolean;
LeftToRight: Boolean;
CurControl: TControl;
StartX, StartY: Integer;
FRowWidth, FRowHeight: Integer;
procedure CalculatePosition;
var
NewBounds: TRect;
StartedAtRowStart: Boolean;
begin
if IsVertical then
begin
NewBounds := Bounds(X, Y, FRowWidth, CurControl.Height);
repeat
if (not Wrapable) or
(NewBounds.Top = StartY) or
(NewBounds.Bottom <= ARect.Bottom) then
begin
// control fits into the column
X := NewBounds.Left;
Y := NewBounds.Top;
Break;
end;
// try next column
NewBounds.Top := StartY;
NewBounds.Bottom := NewBounds.Top + CurControl.Height;
Inc(NewBounds.Left, FRowWidth);
Inc(NewBounds.Right, FRowWidth);
until False;
end
else begin
StartedAtRowStart := (X = StartX);
if LeftToRight then
NewBounds := Bounds(X, Y, CurControl.Width, FRowHeight)
else begin
NewBounds := Bounds(X - CurControl.Width, Y, CurControl.Width, FRowHeight);
end;
repeat
if (not Wrapable) or
(StartedAtRowStart) or
(LeftToRight and ((NewBounds.Left = StartX) or (NewBounds.Right <= ARect.Right))) or
((not LeftToRight) and ((NewBounds.Right = StartX) or (NewBounds.Left >= ARect.Left))) then
begin
// control fits into the row
X := NewBounds.Left;
Y := NewBounds.Top;
Break;
end;
StartedAtRowStart := True;
// try next row
if LeftToRight then
begin
NewBounds.Left := StartX;
NewBounds.Right := NewBounds.Left + CurControl.Width;
end else begin
NewBounds.Right := StartX;
NewBounds.Left := NewBounds.Right - CurControl.Width;
end;
Inc(NewBounds.Top, FRowHeight);
Inc(NewBounds.Bottom, FRowHeight);
until False;
end;
end;
var
I: Integer;
W, H: Integer;
CurClientRect: TRect;
AdjustClientFrame: TRect;
begin
NewWidth := 0;
NewHeight := 0;
Result := True;
Vertical := IsVertical;
FRowWidth:= ButtonWidth;
FRowHeight:= ButtonHeight;
if Vertical then
begin
LeftToRight := True;
end
else begin
LeftToRight := not UseRightToLeftAlignment;
end;
DisableAlign;
BeginUpdate;
try
CurClientRect := ClientRect;
if Vertical then
Inc(CurClientRect.Bottom, UseSize - Height)
else begin
Inc(CurClientRect.Right, UseSize - Width);
end;
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
if Vertical or LeftToRight then
StartX := ARect.Left
else begin
StartX := ARect.Right;
end;
StartY := ARect.Top;
X := StartX;
Y := StartY;
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
if LeftToRight then
NewWidth := Max(NewWidth, X + W + AdjustClientFrame.Right)
else begin
NewWidth := Max(NewWidth, ARect.Right - X + ARect.Left + AdjustClientFrame.Right);
end;
NewHeight := Max(NewHeight, Y + H + AdjustClientFrame.Bottom);
// step to next position
if IsVertical then
Inc(Y, H)
else if LeftToRight then
Inc(X, W);
end;
finally
EndUpdate;
EnableAlign;
end;
end;
procedure Register;
begin
RegisterComponents('KASComponents', [TToolBarAdv]);
RegisterNoIcon([TToolButtonClr]);
end;
end.

View file

@ -26,8 +26,8 @@
"/>
<License Value="GNU GPL 2
"/>
<Version Major="1" Minor="9" Release="3"/>
<Files Count="10">
<Version Major="1" Minor="10"/>
<Files Count="12">
<Item1>
<Filename Value="kastoolbar.pas"/>
<HasRegisterProc Value="True"/>
@ -77,6 +77,16 @@
<HasRegisterProc Value="True"/>
<UnitName Value="KASButtonPanel"/>
</Item10>
<Item11>
<Filename Value="kascomctrls.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="KASComCtrls"/>
</Item11>
<Item12>
<Filename Value="kascontrols.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="kascontrols"/>
</Item12>
</Files>
<CompatibilityMode Value="True"/>
<RequiredPkgs Count="3">

View file

@ -10,7 +10,7 @@ interface
uses
KASToolBar, KASProgressBar, KASPathEdit, KASToolItems, KASComboBox,
KASCDEdit, KASStatusBar, KASToolPanel, KASButton, KASButtonPanel,
LazarusPackageIntf;
KASComCtrls, KASControls, LazarusPackageIntf;
implementation
@ -25,6 +25,8 @@ begin
RegisterUnit('KASToolPanel', @KASToolPanel.Register);
RegisterUnit('KASButton', @KASButton.Register);
RegisterUnit('KASButtonPanel', @KASButtonPanel.Register);
RegisterUnit('KASComCtrls', @KASComCtrls.Register);
RegisterUnit('KASControls', @KASControls.Register);
end;
initialization

View file

@ -0,0 +1,89 @@
unit KASControls;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls, StdCtrls, ExtCtrls;
type
{ TKASPanel }
TKASPanel = class(TPanel)
private
FOnAutoSize: TNotifyEvent;
protected
procedure DoAutoSize; override;
published
property OnAutoSize: TNotifyEvent read FOnAutoSize write FOnAutoSize;
end;
{ TKASGroupBox }
TKASGroupBox = class(TGroupBox)
private
FOnAutoSize: TNotifyEvent;
protected
procedure DoAutoSize; override;
published
property OnAutoSize: TNotifyEvent read FOnAutoSize write FOnAutoSize;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('KASComponents', [TKASPanel, TKASGroupBox]);
end;
procedure LabelsAutoSize(Self: TWinControl);
var
Index: Integer;
AControl: TControl;
begin
with Self do
begin
DisableAutoSizing;
for Index:= 0 to ControlCount - 1 do
begin
AControl:= Controls[Index];
if (not (AControl is TLabel)) and Assigned(AControl.AnchorSide[akTop].Control) then
begin
if AControl.AnchorSide[akTop].Control is TLabel then
AControl.AnchorSide[akTop].Control.Constraints.MinHeight:= AControl.Height;
end;
end;
EnableAutoSizing;
end;
end;
{ TKASPanel }
procedure TKASPanel.DoAutoSize;
begin
inherited DoAutoSize;
if not (csDesigning in ComponentState) then
begin
LabelsAutoSize(Self);
if Assigned(FOnAutoSize) then FOnAutoSize(Self);
end;
end;
{ TKASGroupBox }
procedure TKASGroupBox.DoAutoSize;
begin
inherited DoAutoSize;
if not (csDesigning in ComponentState) then
begin
LabelsAutoSize(Self);
if Assigned(FOnAutoSize) then FOnAutoSize(Self);
end;
end;
end.

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Path edit class with auto complete feature
Copyright (C) 2012-2021 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2012-2022 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
@ -22,47 +22,86 @@
unit KASPathEdit;
{$mode delphi}
{$interfaces corba}
{$IF DEFINED(LCLCOCOA)}
{$modeswitch objectivec1}
{$ENDIF}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
ShellCtrls, LCLType;
ShellCtrls, LCLType, LCLVersion
{$IF DEFINED(LCLCOCOA)}
, CocoaAll, CocoaWindows
{$ENDIF}
;
type
{ TKASPathEditGetFilesFunc }
TKASPathEditGetFilesFunc = Procedure (
const path: String;
const types: TObjectTypes;
const sort: TFileSortType;
files: TStringList );
{ IKASPathEditMate }
IKASPathEditMate = interface
function getFilesAtPath(
const path: String;
const types: TObjectTypes;
const sort: TFileSortType ): TStringList;
end;
{ TKASPathEdit }
TKASPathEdit = class(TEdit)
private
FMate: IKASPathEditMate;
FKeyDown: Word;
FBasePath: String;
FListBox: TListBox;
FPanel: THintWindow;
FAutoComplete: Boolean;
FGetFilesFunc: TKASPathEditGetFilesFunc;
FStringList: TStringList;
FObjectTypes: TObjectTypes;
FFileSortType: TFileSortType;
private
procedure setTextAndSelect( newText:String );
procedure handleSpecialKeys( var Key: Word );
procedure handleUpKey;
procedure handleDownKey;
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
function isShowingListBox(): Boolean; inline;
procedure ShowListBox;
procedure HideListBox;
protected
{$IF DEFINED(LCLWIN32)}
procedure CreateWnd; override;
{$ENDIF}
{$IF DEFINED(LCLCOCOA)}
procedure TextChanged; override;
{$ENDIF}
procedure DoExit; override;
procedure VisibleChanged; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyUpAfterInterface(var Key: Word; Shift: TShiftState); override;
public
onKeyESCAPE: TNotifyEvent;
onKeyRETURN: TNotifyEvent;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property GetFilesFunc: TKASPathEditGetFilesFunc read FGetFilesFunc write FGetFilesFunc;
property Mate: IKASPathEditMate read FMate write FMate;
published
property ObjectTypes: TObjectTypes read FObjectTypes write SetObjectTypes;
property FileSortType: TFileSortType read FFileSortType write FFileSortType;
@ -112,80 +151,20 @@ begin
RegisterComponents('KASComponents', [TKASPathEdit]);
end;
function FilesSortAlphabet(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result:= CompareFilenames(List[Index1], List[Index2]);
end;
function FilesSortFoldersFirst(List: TStringList; Index1, Index2: Integer): Integer;
var
Attr1, Attr2: IntPtr;
begin
Attr1:= IntPtr(List.Objects[Index1]);
Attr2:= IntPtr(List.Objects[Index2]);
if (Attr1 and faDirectory <> 0) and (Attr2 and faDirectory <> 0) then
Result:= CompareFilenames(List[Index1], List[Index2])
else begin
if (Attr1 and faDirectory <> 0) then
Result:= -1
else begin
Result:= 1;
end;
end;
end;
procedure GetFilesInDir(const ABaseDir: String; AMask: String; AObjectTypes: TObjectTypes;
AResult: TStringList; AFileSortType: TFileSortType);
var
ExcludeAttr: Integer;
SearchRec: TSearchRec;
{$IF DEFINED(MSWINDOWS)}
ErrMode : LongWord;
{$ENDIF}
begin
{$IF DEFINED(MSWINDOWS)}
ErrMode:= SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOALIGNMENTFAULTEXCEPT or SEM_NOGPFAULTERRORBOX or SEM_NOOPENFILEERRORBOX);
try
{$ENDIF}
if FindFirst(ABaseDir + AMask, faAnyFile, SearchRec) = 0 then
begin
ExcludeAttr:= 0;
if not (otHidden in AObjectTypes) then
ExcludeAttr:= ExcludeAttr or faHidden;
if not (otFolders in AObjectTypes) then
ExcludeAttr:= ExcludeAttr or faDirectory;
repeat
if (SearchRec.Attr and ExcludeAttr <> 0) then
Continue;
if (SearchRec.Name = '.') or (SearchRec.Name = '..')then
Continue;
if (SearchRec.Attr and faDirectory = 0) and not (otNonFolders in AObjectTypes) then
Continue;
AResult.AddObject(SearchRec.Name, TObject(IntPtr(SearchRec.Attr)));
until FindNext(SearchRec) <> 0;
if AResult.Count > 0 then
begin
case AFileSortType of
fstAlphabet: AResult.CustomSort(@FilesSortAlphabet);
fstFoldersFirst: AResult.CustomSort(@FilesSortFoldersFirst);
end;
end;
end;
SysUtils.FindClose(SearchRec);
{$IF DEFINED(MSWINDOWS)}
finally
SetErrorMode(ErrMode);
end;
{$ENDIF}
end;
{ TKASPathEdit }
function TKASPathEdit.isShowingListBox(): Boolean;
begin
Result:= FPanel<>nil;
end;
procedure TKASPathEdit.AutoComplete(const Path: String);
{$IF LCL_FULLVERSION < 4990000}
const
AFlags: array[Boolean] of TMaskOptions = (
[moDisableSets], [moDisableSets, moCaseSensitive]
);
{$ENDIF}
var
I: Integer;
AMask: TMask;
@ -198,39 +177,49 @@ begin
BasePath:= ExtractFilePath(Path);
if CompareFilenames(FBasePath, BasePath) <> 0 then
begin
FStringList.Clear;
FreeAndNil(FStringList);
FBasePath:= BasePath;
GetFilesInDir(BasePath, AllFilesMask, FObjectTypes, FStringList, FFileSortType);
if Assigned(FMate) then
FStringList:= FMate.getFilesAtPath(BasePath, FObjectTypes, FFileSortType);
end;
if (FStringList.Count > 0) then
begin
FListBox.Items.BeginUpdate;
try
// Check mask and make absolute file name
AMask:= TMask.Create(ExtractFileName(Path) + '*',
FileNameCaseSensitive);
for I:= 0 to FStringList.Count - 1 do
begin
if AMask.Matches(FStringList[I]) then
FListBox.Items.Add(BasePath + FStringList[I]);
end;
AMask.Free;
finally
FListBox.Items.EndUpdate;
end;
if FListBox.Items.Count > 0 then
if (FStringList=nil) or (FStringList.Count<=0) then
Exit;
FListBox.Items.BeginUpdate;
try
// Check mask and make absolute file name
AMask:= TMask.Create(ExtractFileName(Path) + '*',
{$IF LCL_FULLVERSION < 4990000}
AFlags[FileNameCaseSensitive]
{$ELSE}
FileNameCaseSensitive
{$ENDIF}
);
for I:= 0 to FStringList.Count - 1 do
begin
ShowListBox;
// 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;
if AMask.Matches(FStringList[I]) then
FListBox.Items.Add(BasePath + FStringList[I]);
end;
AMask.Free;
finally
FListBox.Items.EndUpdate;
end;
if FListBox.Items.Count = 0 then HideListBox;
if FListBox.Items.Count > 0 then
begin
ShowListBox;
// Calculate ListBox height
with FListBox.ItemRect(0) do
I:= Bottom - Top; // TListBox.ItemHeight sometimes don't work under GTK2
with FListBox do
begin
{$IF NOT DEFINED(LCLCOCOA)}
if Items.Count = 1 then
FPanel.ClientHeight:= Self.Height
else
FPanel.ClientHeight:= I * IfThen(Items.Count > 10, 11, Items.Count + 1);
{$ELSE}
FPanel.ClientHeight:= I * IfThen(Items.Count > 10, 11, Items.Count + 1) + trunc(i/2);
{$ENDIF}
end;
end;
end;
@ -256,8 +245,7 @@ procedure TKASPathEdit.ListBoxClick(Sender: TObject);
begin
if FListBox.ItemIndex >= 0 then
begin
Text:= FListBox.Items[FListBox.ItemIndex];
SelStart:= UTF8Length(Text);
setTextAndSelect( FListBox.Items[FListBox.ItemIndex] );
HideListBox;
SetFocus;
end;
@ -268,11 +256,24 @@ begin
FListBox.ItemIndex:= FListBox.ItemAtPos(Classes.Point(X, Y), True);
end;
{$IF DEFINED(LCLCOCOA)}
procedure cocoaNeedMouseEvent( hintWindow: THintWindow );
var
cnt: TCocoaWindowContent;
begin
cnt:= TCocoaWindowContent( hintWindow.Handle );
cnt.window.setIgnoresMouseEvents( false );
end;
{$ENDIF}
procedure TKASPathEdit.ShowListBox;
begin
if (FPanel = nil) then
if not isShowingListBox() then
begin
FPanel:= THintWindow.Create(Self);
{$IF DEFINED(LCLCOCOA)}
cocoaNeedMouseEvent(FPanel);
{$ENDIF}
FPanel.Color:= clDefault;
FListBox.Parent:= FPanel;
@ -292,7 +293,7 @@ end;
procedure TKASPathEdit.HideListBox;
begin
if (FPanel <> nil) then
if isShowingListBox() then
begin
FPanel.Visible:= False;
FListBox.Parent:= nil;
@ -312,6 +313,32 @@ end;
{$ENDIF}
{$IF DEFINED(LCLCOCOA)}
procedure TKASPathEdit.TextChanged;
begin
Inherited;
if not Modified then
Exit;
if FAutoComplete then
AutoComplete(Text);
end;
{$ENDIF}
procedure TKASPathEdit.setTextAndSelect( newText:String );
var
start: Integer;
begin
if Pos(Text,newText) > 0 then
start:= UTF8Length(Text)
else
start:= UTF8Length(ExtractFilePath(Text));
Text:= newText;
SelStart:= start;
SelLength:= UTF8Length(Text)-SelStart;
end;
procedure TKASPathEdit.DoExit;
begin
HideListBox;
@ -324,6 +351,56 @@ begin
inherited VisibleChanged;
end;
procedure TKASPathEdit.handleSpecialKeys( var Key: Word );
begin
if isShowingListBox() then begin
HideListBox;
Key:= 0;
end else begin
if Key=VK_ESCAPE then begin
if Assigned(onKeyESCAPE) then begin
onKeyESCAPE( self );
Key:= 0;
end;
end else begin
if Assigned(onKeyRETURN) then begin
onKeyRETURN( self );
Key:= 0;
end;
end;
end;
end;
procedure TKASPathEdit.handleUpKey;
begin
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
setTextAndSelect( FListBox.Items[FListBox.ItemIndex] )
else
setTextAndSelect( ExtractFilePath(Text) );
end;
procedure TKASPathEdit.handleDownKey;
begin
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
setTextAndSelect( FListBox.Items[FListBox.ItemIndex] )
else
setTextAndSelect( ExtractFilePath(Text) );
end;
procedure TKASPathEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
FKeyDown:= Key;
@ -331,44 +408,21 @@ begin
VK_ESCAPE,
VK_RETURN,
VK_SELECT:
begin
HideListBox;
end;
handleSpecialKeys( Key );
VK_UP:
if Assigned(FPanel) then
if isShowingListBox() 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);
handleUpKey();
end;
VK_DOWN:
if Assigned(FPanel) then
if isShowingListBox() 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);
handleDownKey();
end;
end;
inherited KeyDown(Key, Shift);
{$IFDEF LCLGTK2}
// Workaround for GTK2 - up and down arrows moving through controls.
@ -378,6 +432,7 @@ end;
procedure TKASPathEdit.KeyUpAfterInterface(var Key: Word; Shift: TShiftState);
begin
{$IF not DEFINED(LCLCOCOA)}
if (FKeyDown = Key) and FAutoComplete and not (Key in [VK_ESCAPE, VK_RETURN, VK_SELECT, VK_UP, VK_DOWN]) then
begin
if Modified then
@ -386,6 +441,7 @@ begin
AutoComplete(Text);
end;
end;
{$ENDIF}
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.
@ -398,8 +454,6 @@ constructor TKASPathEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FStringList:= TStringList.Create;
FListBox:= TListBox.Create(Self);
FListBox.TabStop:= False;
FListBox.Align:= alClient;

View file

@ -43,6 +43,9 @@ uses
{$IFDEF LCLQT5}
, qt5, qtwidgets
{$ENDIF}
{$IFDEF LCLQT6}
, qt6, qtwidgets
{$ENDIF}
;
type
@ -157,7 +160,7 @@ procedure TKASProgressBar.SetProgress(CurrentValue: Int64; MaxValue: Int64;
var
wText: String;
{$ENDIF}
{$IF DEFINED(LCLQT) OR DEFINED(LCLQT5)}
{$IF DEFINED(LCLQT) OR DEFINED(LCLQT5) OR DEFINED(LCLQT6)}
var
wText: WideString;
{$ENDIF}
@ -199,7 +202,7 @@ begin
// 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}
{$IF DEFINED(LCLQT) OR DEFINED(LCLQT5)}
{$IF DEFINED(LCLQT) OR DEFINED(LCLQT5) OR DEFINED(LCLQT6)}
{
%p - is replaced by the percentage completed.
%v - is replaced by the current value.

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Toolbar panel class
Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru)
contributors:
2012 Przemyslaw Nagay (cobines@gmail.com)
@ -33,7 +33,7 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, ComCtrls,
Graphics, Dialogs, ExtCtrls, Buttons, FileUtil, Menus,
DCXmlConfig, KASToolItems, LCLVersion;
DCXmlConfig, KASToolItems, LCLVersion, LMessages;
type
TOnToolButtonClick = procedure (Sender: TObject) of object;
@ -58,19 +58,23 @@ type
FOverlay: TBitmap;
FToolItem: TKASToolItem;
function GetToolBar: TKASToolBar;
function GetGlyphBitmap: TBitmap;
procedure SetGlyphBitmap(bitmap: TBitmap);
protected
procedure CalculatePreferredSize(var PreferredWidth,
PreferredHeight: integer; WithThemeSpace: Boolean); override;
function DrawGlyph(ACanvas: TCanvas; const AClient: TRect; const AOffset: TPoint;
AState: TButtonState; ATransparent: Boolean; BiDiFlags: Longint): TRect; override;
procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
procedure CMHintShow(var Message: TLMessage); message CM_HINTSHOW;
public
constructor Create(AOwner: TComponent; Item: TKASToolItem); reintroduce;
constructor Create(AOwner: TComponent; Item: TKASToolItem); reintroduce; virtual;
destructor Destroy; override;
procedure Click; override;
public
property ToolBar: TKASToolBar read GetToolBar;
property ToolItem: TKASToolItem read FToolItem;
property Glyph: TBitmap read GetGlyphBitmap write SetGlyphBitmap;
end;
{ TKASToolDivider }
@ -80,6 +84,17 @@ type
procedure CalculatePreferredSize(var PreferredWidth,
PreferredHeight: integer; WithThemeSpace: Boolean); override;
procedure Paint; override;
public
constructor Create(AOwner: TComponent; Item: TKASToolItem); override;
end;
{ TKASToolLabel }
TKASToolLabel = class(TKASToolButton)
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent; Item: TKASToolItem); override;
end;
{ TKASToolBar }
@ -164,7 +179,9 @@ type
procedure RemoveButton(Button: TKASToolButton);
procedure RemoveToolItemExecutor(ExecuteFunction: TOnToolItemExecute);
procedure UncheckAllButtons;
function GlyphBitmapSize: Integer;
procedure UpdateIcon(ToolButton: TKASToolButton);
procedure UpdateIconWithBitmap(ToolButton: TKASToolButton; bitmap: TBitmap);
procedure UseItems(AItems: TKASToolBarItems);
procedure LoadConfiguration(Config: TXmlConfig; RootNode: TXmlNode;
@ -203,7 +220,7 @@ procedure Register;
implementation
uses
Themes, Types, Math, ActnList, DCOSUtils;
Themes, Types, Math, ActnList, LCLType, LCLIntf, DCOSUtils;
type
PToolItemExecutor = ^TToolItemExecutor;
@ -217,6 +234,29 @@ begin
RegisterComponents('KASComponents',[TKASToolBar]);
end;
function findScaleFactorByFirstForm: Double;
begin
Result:= 1;
if Screen.FormCount > 0 then
Result:= Screen.Forms[0].GetCanvasScaleFactor();
end;
function findScaleFactorByControl( control: TControl ): Double;
var
topParent: TControl;
begin
if Assigned(control) then begin
topParent:= control.GetTopParent;
if Assigned(topParent) then
control:= topParent;
if (control is TWinControl) and TWinControl(control).HandleAllocated then begin
Result:= control.GetCanvasScaleFactor;
Exit;
end;
end;
Result:= findScaleFactorByFirstForm();
end;
{ TKASToolBar }
procedure TKASToolBar.InsertButton(InsertAt: Integer; ToolButton: TKASToolButton);
@ -286,14 +326,19 @@ var
procedure CalculatePosition;
var
NewBounds: TRect;
ALineBreak: Boolean;
begin
ALineBreak:= (CurControl is TKASToolDivider) and (not FShowDividerAsButton) and
(TKASToolDivider(CurControl).FToolItem is TKASSeparatorItem) and
(TKASSeparatorItem(TKASToolDivider(CurControl).FToolItem).Style = kssLineBreak);
if IsVertical then
begin
NewBounds := Bounds(x, y, FRowWidth, CurControl.Height);
repeat
if (not Wrapable) or
(NewBounds.Bottom <= ARect.Bottom) or
(NewBounds.Top = StartY) then
(NewBounds.Top = StartY) or
((NewBounds.Bottom <= ARect.Bottom) and not ALineBreak) then
begin
// control fits into the column
x := NewBounds.Left;
@ -312,8 +357,8 @@ var
NewBounds := Bounds(x, y, CurControl.Width, FRowHeight);
repeat
if (not Wrapable) or
(NewBounds.Right <= ARect.Right) or
(NewBounds.Left = StartX) then
(NewBounds.Left = StartX) or
((NewBounds.Right <= ARect.Right) and not ALineBreak) then
begin
// control fits into the row
x := NewBounds.Left;
@ -546,10 +591,18 @@ begin
if FGlyphSize = AValue then Exit;
FGlyphSize:= AValue;
self.Images.Clear;
self.images.Width:= GlyphBitmapSize;
self.images.Height:= GlyphBitmapSize;
self.ImagesWidth:= FGlyphSize;
Self.Images.Scaled := (findScaleFactorByControl(Self) > 1.0);
BeginUpdate;
try
for I := 0 to ButtonList.Count - 1 do
for I := 0 to ButtonList.Count - 1 do begin
TKASToolButton(ButtonList[i]).ImageIndex:= -1;
UpdateIcon(TKASToolButton(ButtonList[i]));
end;
finally
EndUpdate;
end;
@ -728,7 +781,8 @@ begin
ToolButton.FOverlay := FOnLoadButtonOverlay(ToolButton.ToolItem, FGlyphSize div 2, clBtnFace);
end;
ToolButton.Glyph.Assign(Bitmap);
if Assigned(Bitmap) then
self.UpdateIconWithBitmap(ToolButton, Bitmap);
finally
Bitmap.Free;
end;
@ -737,6 +791,18 @@ begin
end;
end;
procedure TKASToolBar.UpdateIconWithBitmap(ToolButton: TKASToolButton;
bitmap: TBitmap);
begin
if ToolButton.ImageIndex < 0 then begin
ToolButton.Images:= self.Images;
ToolButton.ImageIndex:= self.Images.Add( bitmap, nil );
ToolButton.ImageWidth:= self.ImagesWidth;
end else begin
self.Images.Replace( ToolButton.ImageIndex, bitmap, nil );
end;
end;
procedure TKASToolBar.UseItems(AItems: TKASToolBarItems);
var
i: Integer;
@ -827,7 +893,8 @@ end;
constructor TKASToolBar.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
FGlyphSize:= 16; // by default
self.images:= TImageList.Create(self);
self.GlyphSize:= 16; // by default
FUpdateCount:= 0;
FButtonWidth := 23;
FButtonHeight := 22;
@ -848,6 +915,10 @@ begin
begin
Result := TKASToolDivider.Create(Self, Item);
end
else if Item is TKASLabelItem then
begin
Result := TKASToolLabel.Create(Self, Item);
end
else
begin
Result := TKASToolButton.Create(Self, Item);
@ -1025,12 +1096,18 @@ begin
Buttons[I].Down:= False;
end;
function TKASToolBar.GlyphBitmapSize: Integer;
begin
Result:= Round(FGlyphSize * findScaleFactorByControl(self));
end;
{ TKASToolButton }
procedure TKASToolButton.CalculatePreferredSize(var PreferredWidth,
PreferredHeight: integer; WithThemeSpace: Boolean);
var
TextSize: TSize;
iconWidth: Integer;
begin
if (Parent = nil) then
inherited
@ -1048,7 +1125,10 @@ begin
begin
// Size to extent of the icon + caption.
TextSize := Canvas.TextExtent(Caption);
PreferredWidth := Max(TextSize.cx + Glyph.Width + 16, PreferredWidth);
iconWidth := self.ImageWidth;
if iconWidth = 0 then
iconWidth := Glyph.Width;
PreferredWidth := Max(TextSize.cx + iconWidth + 16, PreferredWidth);
PreferredHeight := Max(TextSize.cy + 4, PreferredHeight);
end;
end;
@ -1089,6 +1169,17 @@ begin
end;
end;
procedure TKASToolButton.CMHintShow(var Message: TLMessage);
begin
if (ActionLink <> nil) and FToolItem.ActionHint then
begin
inherited CMHintShow(Message);
end
else begin
DoOnShowHint(TCMHintShow(Message).HintInfo);
end;
end;
constructor TKASToolButton.Create(AOwner: TComponent; Item: TKASToolItem);
begin
inherited Create(AOwner);
@ -1111,22 +1202,44 @@ begin
Result := Parent as TKASToolBar;
end;
function TKASToolButton.GetGlyphBitmap: TBitmap;
begin
Result:= Inherited Glyph;
end;
procedure TKASToolButton.SetGlyphBitmap(bitmap: TBitmap);
begin
self.ToolBar.UpdateIconWithBitmap(self, bitmap);
end;
{ TKASToolDivider }
procedure TKASToolDivider.CalculatePreferredSize(var PreferredWidth,
PreferredHeight: integer; WithThemeSpace: Boolean);
var
ASize: Integer;
begin
if Assigned(Parent) and (Parent is TKASToolBar) and
(not TKASSeparatorItem(FToolItem).Style) and
(not TKASToolBar(Parent).FShowDividerAsButton) then
begin
if ToolBar.IsVertical then
if (TKASSeparatorItem(FToolItem).Style = kssSeparator) then
ASize:= 5
else if (TKASSeparatorItem(FToolItem).Style = kssLineBreak) then
ASize:= 0
else begin
ASize:= -1;
end;
if ASize < 0 then
begin
PreferredHeight := 5;
inherited;
end
else if ToolBar.IsVertical then
begin
PreferredHeight := ASize;
PreferredWidth := ToolBar.FRowWidth;
end
else begin
PreferredWidth := 5;
PreferredWidth := ASize;
PreferredHeight := ToolBar.FRowHeight;
end;
end
@ -1142,7 +1255,7 @@ begin
if Assigned(Parent) and (Parent is TKASToolBar) and
not TKASToolBar(Parent).FShowDividerAsButton then
begin
if TKASSeparatorItem(FToolItem).Style then Exit;
if TKASSeparatorItem(FToolItem).Style > kssSeparator then Exit;
DividerRect:= ClientRect;
@ -1185,5 +1298,46 @@ begin
inherited Paint;
end;
constructor TKASToolDivider.Create(AOwner: TComponent; Item: TKASToolItem);
begin
inherited Create(AOwner, Item);
ControlStyle:= ControlStyle + [csAutoSize0x0];
end;
{ TKASToolLabel }
procedure TKASToolLabel.Paint;
const
cAlignment: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
R: TRect;
Flags: Longint;
LabelText: String;
begin
R:= ClientRect;
Canvas.Font:= Font;
LabelText:= Caption;
InflateRect(R, -8, 0);
Canvas.Brush.Color:= Color;
Canvas.Brush.Style:= bsClear;
Flags:= DT_EXPANDTABS or DT_VCENTER;
Flags:= Flags or DT_SINGLELINE or DT_NOPREFIX;
if UseRightToLeftReading then
begin
Flags:= Flags or DT_RTLREADING;
end;
Flags:= Flags or cAlignment[BidiFlipAlignment(Self.Alignment, UseRightToLeftAlignment)];
DrawText(Canvas.Handle, PAnsiChar(LabelText), Length(LabelText), R, Flags or DT_NOCLIP);
end;
constructor TKASToolLabel.Create(AOwner: TComponent; Item: TKASToolItem);
begin
inherited Create(AOwner, Item);
AutoSize:= True;
end;
end.

View file

@ -35,6 +35,8 @@ type
TOnLoadToolItem = procedure (Item: TKASToolItem) of object;
TKASSeparatorStyle = (kssSeparator, kssDivider, kssLineBreak);
{$interfaces corba}
IToolOwner = interface
['{A7908D38-1E13-4E8D-8FA7-8830A2FF9290}']
@ -62,6 +64,7 @@ type
FAction: TBasicAction;
property ToolOwner: IToolOwner read FToolOwner;
public
function ActionHint: Boolean; virtual;
procedure Assign(OtherItem: TKASToolItem); virtual;
function CheckExecute(ToolItemID: String): Boolean; virtual;
function Clone: TKASToolItem; virtual; abstract;
@ -81,7 +84,7 @@ type
TKASSeparatorItem = class(TKASToolItem)
public
Style: Boolean;
Style: TKASSeparatorStyle;
procedure Assign(OtherItem: TKASToolItem); override;
function Clone: TKASToolItem; override;
function ConfigNodeName: String; override;
@ -94,6 +97,8 @@ type
{ TKASNormalItem }
TKASNormalItem = class(TKASToolItem)
private
FShortcutsHint: Boolean;
strict private
FID: String; // Unique identificator of the button
function GetID: String;
@ -105,6 +110,7 @@ type
Icon: String;
Text: String;
Hint: String;
function ActionHint: Boolean; override;
procedure Assign(OtherItem: TKASToolItem); override;
function CheckExecute(ToolItemID: String): Boolean; override;
function Clone: TKASToolItem; override;
@ -136,6 +142,10 @@ type
property SubItems: TKASToolBarItems read FItems;
end;
{ TKASLabelItem }
TKASLabelItem = class(TKASNormalItem);
{ TKASToolBarItems }
TKASToolBarItems = class
@ -183,6 +193,11 @@ uses
{ TKASToolItem }
function TKASToolItem.ActionHint: Boolean;
begin
Result := True;
end;
procedure TKASToolItem.Assign(OtherItem: TKASToolItem);
begin
FUserData := OtherItem.FUserData;
@ -404,13 +419,20 @@ begin
end;
procedure TKASSeparatorItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader);
var
OldStyle: Boolean;
AStyle: array[Boolean] of TKASSeparatorStyle = (kssSeparator, kssDivider);
begin
Style := Config.GetValue(Node, 'Style', False);
if Config.TryGetValue(Node, 'Style', OldStyle) then
Style := AStyle[OldStyle]
else begin
Style := TKASSeparatorStyle(Config.GetValue(Node, 'Style', Integer(kssSeparator)));
end;
end;
procedure TKASSeparatorItem.SaveContents(Config: TXmlConfig; Node: TXmlNode);
begin
Config.AddValue(Node, 'Style', Style);
Config.AddValue(Node, 'Style', Integer(Style));
end;
{ TKASNormalItem }
@ -481,8 +503,10 @@ function TKASNormalItem.GetShortcutsHint: String;
begin
if Assigned(FToolOwner) then
Result := FToolOwner.GetToolItemShortcutsHint(Self)
else
else begin
Result := '';
end;
FShortcutsHint := (Length(Result) > 0);
end;
procedure TKASNormalItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader);
@ -525,6 +549,11 @@ begin
Config.AddValueDef(Node, 'Text', Text, '');
end;
function TKASNormalItem.ActionHint: Boolean;
begin
Result := not FShortcutsHint;
end;
{ TKASToolBarItems }
constructor TKASToolBarItems.Create;

View file

@ -8,13 +8,23 @@ uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Toolwin;
type
{ TKASToolPanel }
TKASToolPanel = class(TToolWindow)
public
constructor Create(TheOwner: TComponent); override;
published
property Align default alNone;
property Anchors;
property AutoSize;
property BorderSpacing;
property ChildSizing;
property EdgeBorders default [ebTop];
property EdgeInner;
property EdgeOuter;
property OnResize;
property TabOrder;
property Visible;
end;
@ -27,4 +37,12 @@ begin
RegisterComponents('KASComponents',[TKASToolPanel]);
end;
{ TKASToolPanel }
constructor TKASToolPanel.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
EdgeBorders:= [ebTop];
end;
end.

View file

@ -1,18 +1,19 @@
@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%
lazbuild synunihighlighter\synuni.lpk %DC_ARCH%
popd
@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 multithreadprocs\multithreadprocslaz.lpk %DC_ARCH%
lazbuild kascrypt\kascrypt.lpk %DC_ARCH%
lazbuild doublecmd\doublecmd_common.lpk %DC_ARCH%
lazbuild Image32\Image32.lpk %DC_ARCH%
lazbuild KASToolBar\kascomp.lpk %DC_ARCH%
lazbuild viewer\viewerpackage.lpk %DC_ARCH%
lazbuild gifview\gifview.lpk %DC_ARCH%
lazbuild synunihighlighter\synuni.lpk %DC_ARCH%
lazbuild virtualterminal\virtualterminal.lpk %DC_ARCH%
popd

View file

@ -25,14 +25,15 @@ fi
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 kascrypt/kascrypt.lpk $DC_ARCH
$lazbuild doublecmd/doublecmd_common.lpk $DC_ARCH
$lazbuild Image32/Image32.lpk $DC_ARCH
$lazbuild KASToolBar/kascomp.lpk $DC_ARCH
$lazbuild viewer/viewerpackage.lpk $DC_ARCH
$lazbuild gifanim/pkg_gifanim.lpk $DC_ARCH
$lazbuild gifview/gifview.lpk $DC_ARCH
$lazbuild synunihighlighter/synuni.lpk $DC_ARCH
$lazbuild virtualterminal/virtualterminal.lpk $DC_ARCH
cd $basedir
# Remove temporary file

View file

@ -7,7 +7,7 @@ Based on Mozilla's i18n component - https://dxr.mozilla.org/mozilla/source/exten
-----------State
Version 0.2.9 stable.
Copyright (C) 2011-2019 Alexander Koblov
The latest version can be found at https://sourceforge.net/p/doublecmd/code/HEAD/tree/trunk/components/chsdet/.
The latest version can be found at https://github.com/doublecmd/doublecmd/tree/master/components/chsdet/.
-----------Original
Based on

View file

@ -1,32 +0,0 @@
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
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

View file

@ -1,440 +0,0 @@
LazarusResources.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
]);

View file

@ -1,220 +0,0 @@
LazarusResources.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
]);

View file

@ -1,203 +0,0 @@
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[ 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;

View file

@ -1,272 +0,0 @@
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[ 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;

View file

@ -1,339 +0,0 @@
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[ 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;

View file

@ -1,5 +0,0 @@
CRC / HASH / HMAC
http://www.wolfgang-ehrhardt.de/crchash_en.html
crc_hash_2016-05-01.zip
Some modifications done for Double Commander (see doublecmd.diff).

View file

@ -1,103 +0,0 @@
Index: kperm_64.inc
===================================================================
--- kperm_64.inc (revision 6895)
+++ kperm_64.inc (working copy)
@@ -33,10 +33,14 @@
{---------------------------------------------------------------------------}
+{$IFDEF FPC}
+ {$MACRO ON} {$DEFINE RotL:= RolQWord}
+{$ELSE}
function RotL(x: u64bit; c: integer): u64bit; {$ifdef HAS_INLINE} inline; {$endif}
begin
RotL := (x shl c) or (x shr (64-c));
end;
+{$ENDIF}
{---------------------------------------------------------------------------}
Index: sha1.pas
===================================================================
--- sha1.pas
+++ sha1.pas
@@ -106,7 +106,7 @@
{$i STD.INC}
-{$ifdef BIT64}
+{$ifndef CPUI386}
{$ifndef PurePascal}
{$define PurePascal}
{$endif}
Index: sha3.pas
===================================================================
--- sha3.pas (revision 6895)
+++ sha3.pas (working copy)
@@ -6,6 +6,15 @@
{$i STD.INC}
+{$ifdef FPC}
+ {$ifdef CPUI386}
+ {$define USE_MMXCODE}
+ {$endif}
+ {$ifdef CPU64}
+ {$define USE_64BITCODE}
+ {$endif}
+{$endif}
+
{.$define USE_64BITCODE} {Use 64-bit for Keccak permutation}
{.$define USE_MMXCODE } {Use MMX for Keccak permutation, contributed by Eric Grange}
{.$define USE_MMX_AKP } {Use MMX for Keccak permutation, contributed by Anna Kaliszewicz / payl}
Index: scrypt.pas
===================================================================
--- scrypt.pas (revision 7740)
+++ scrypt.pas (working copy)
@@ -90,7 +90,7 @@
implementation
uses
- sha256; {Register SHA256 for HMAC-SHA256}
+ SHA3_512; {Register SHA3_512 for HMAC_SHA3_512}
type
TLA16 = array[0..15] of longint;
@@ -361,14 +361,14 @@
{---------------------------------------------------------------------------}
-function pbkfd2_hmac_sha256(pPW: pointer; pLen: word; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer;
- {-Derive key DK from password pPW using salt and iteration count C using (hmac-)sha256}
+function pbkdf2_hmac_sha3_512(pPW: pointer; pLen: word; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer;
+ {-Derive key DK from password pPW using salt and iteration count C using hmac_sha3_512}
var
phash: PHashDesc;
begin
- {Note: pbkdf2 will return error indicator phash=nil if _SHA256 is not found!}
- phash := FindHash_by_ID(_SHA256);
- pbkfd2_hmac_sha256 := pbkdf2(phash,pPW,pLen,salt,sLen,C,DK,dkLen);
+ {Note: pbkdf2 will return error indicator phash=nil if _SHA3_512 is not found!}
+ phash := FindHash_by_ID(_SHA3_512);
+ pbkdf2_hmac_sha3_512 := pbkdf2(phash,pPW,pLen,salt,sLen,C,DK,dkLen);
end;
@@ -418,7 +418,7 @@
pV := malloc(sV);
pXY := malloc(sXY);
if (pB<>nil) and (pV<>nil) and (pXY<>nil) then begin
- err := pbkfd2_hmac_sha256(pPW, pLen, salt, sLen, 1, pB^, sB);
+ err := pbkdf2_hmac_sha3_512(pPW, pLen, salt, sLen, 1, pB^, sB);
if err=0 then begin
pw := pB;
for i:=0 to p-1 do begin
@@ -425,7 +425,7 @@
smix(pw, r, N, pV, pXY);
inc(Ptr2Inc(pw), r*128);
end;
- err := pbkfd2_hmac_sha256(pPW, pLen, pB, sB, 1, DK, dKlen);
+ err := pbkdf2_hmac_sha3_512(pPW, pLen, pB, sB, 1, DK, dKlen);
end;
scrypt_kdf := err;
end

View file

@ -1,143 +0,0 @@
{
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.

View file

@ -1,503 +0,0 @@
{******************************************************************************}
{* 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.

View file

@ -1,130 +0,0 @@
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
= 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.

View file

@ -1,18 +0,0 @@
{ 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.

View file

@ -22,6 +22,9 @@
unit DCBasicTypes;
{$mode objfpc}{$H+}
{$modeswitch advancedrecords}
interface
type
@ -32,25 +35,50 @@ type
TWinFileTime = QWord; // NTFS time (UTC) (2 x DWORD)
TDosFileTime = LongInt; // MS-DOS time (local)
TUnixFileTime = Int64; // UNIX time (UTC)
{$IFDEF MSWINDOWS}
TFileTime = TWinFileTime;
TFileTimeEx = TFileTime;
{$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}
TFileTime = TUnixFileTime;
TUnixFileTime = TFileTime;
TFileTimeEx = record
public
sec: int64;
nanosec: int64;
public
constructor create( aSec:int64; aNanosec:int64=0 );
class operator =(l,r : TFileTimeEx): Boolean;
end;
{$ENDIF}
PFileTime = ^TFileTime;
PWinFileTime = ^TWinFileTime;
const
TFileTimeExNull: TFileTimeEx = {$IFDEF MSWINDOWS} 0 {$ELSE} (sec:0; nanosec:-1) {$ENDIF};
implementation
{$IF not DEFINED(MSWINDOWS)}
constructor TFileTimeEx.Create(aSec: Int64; aNanosec: Int64);
begin
Self.sec:= aSec;
Self.nanosec:= aNanosec;
if Self.nanosec < 0 then
Self.nanosec := 0
else if Self.nanosec > 999999999 then
begin
Self.nanosec := 999999999;
end;
end;
class operator TFileTimeEx.=(l,r : TFileTimeEx): Boolean;
begin
Result:= (l.sec=r.sec) and (l.nanosec=r.nanosec);
end;
{$ENDIF}
end.

View file

@ -0,0 +1,30 @@
unit DCClasses;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, NullStream;
type
{ TNullStreamEx }
TNullStreamEx = class(TNullStream)
public
function Write(const Buffer; Count: LongInt): LongInt; override;
end;
implementation
{ TNullStreamEx }
function TNullStreamEx.Write(const Buffer; Count: LongInt): LongInt;
begin
Result:= Count;
inherited Write(Buffer, Count);
end;
end.

147
components/doublecmd/dcclassesutf8.pas Normal file → Executable file
View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
This module contains classes with UTF8 file names support.
Copyright (C) 2008-2019 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2008-2024 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
@ -28,31 +28,43 @@ unit DCClassesUtf8;
interface
uses
Classes, RtlConsts, SysUtils, IniFiles;
Classes, RtlConsts, SysUtils, IniFiles, Math;
type
{ TFileStreamEx class }
TFileStreamEx = class(THandleStream)
private
FDirty: Int64;
FAutoSync: Boolean;
FDirtyLimit: Int64;
procedure SetAutoSync(AValue: Boolean);
protected
FFileName: String;
procedure SetSize64(const NewSize: Int64); override;
procedure Sync(AWritten: Int64);
procedure SetCapacity(const NewCapacity: Int64);
public
constructor Create(const AFileName: String; Mode: LongWord); virtual; overload;
destructor Destroy; override;
function Flush: Boolean;
function Read(var Buffer; Count: LongInt): LongInt; override;
function Write(const Buffer; Count: LongInt): LongInt; override;
property DirtyLimit: Int64 read FDirtyLimit write FDirtyLimit;
property AutoSync: Boolean read FAutoSync write SetAutoSync;
property Capacity: Int64 write SetCapacity;
property FileName: String read FFileName;
end;
end;
{ TStringListEx }
TStringListEx = class(TStringList)
protected
function DoCompareText(const S1, S2: String): PtrInt; override;
public
function IndexOfValue(const Value: String): Integer;
procedure LoadFromFile(const FileName: String); override;
procedure SaveToFile(const FileName: String); override;
end;
end;
{ TIniFileEx }
@ -60,8 +72,8 @@ type
private
FReadOnly: Boolean;
public
constructor Create(const AFileName: String; Mode: Word); virtual;
constructor Create(const AFileName: String; AEscapeLineFeeds : Boolean = False); override;
constructor Create(const AFileName: String; Mode: Word; AOptions: TIniFileOptions = []); virtual;
constructor Create(const AFileName: String; AOptions: TIniFileOptions = []); override;
procedure UpdateFile; override;
public
property ReadOnly: Boolean read FReadOnly;
@ -70,13 +82,84 @@ type
implementation
uses
DCOSUtils;
DCOSUtils, DCConvertEncoding;
{ TFileStreamEx }
procedure TFileStreamEx.SetSize64(const NewSize: Int64);
procedure TFileStreamEx.SetAutoSync(AValue: Boolean);
const
DIRTY_LIMIT = 1024 * 1024;
begin
FileAllocate(Handle, NewSize);
FAutoSync:= AValue;
if AValue and (FDirtyLimit = 0) then
begin
FDirtyLimit:= DIRTY_LIMIT;
end;
end;
procedure TFileStreamEx.Sync(AWritten: Int64);
const
TARGET_LATENCY_LOW = 900;
TARGET_LATENCY_HIGH = 1100;
DIRTY_LIMIT_LOW = 512 * 1024;
DIRTY_LIMIT_HIGH = MaxLongInt + 1;
var
T1, T2: QWord;
Elapsed: Double;
Slowdown: Double;
begin
FDirty+= AWritten;
if FDirty < FDirtyLimit then
Exit;
FDirty:= 0;
T1:= GetTickCount64;
if not FileFlushData(Handle) then
Exit;
T2:= GetTickCount64;
Elapsed:= (T2 - T1);
if (Elapsed > TARGET_LATENCY_HIGH) then
begin
if (FDirtyLimit > DIRTY_LIMIT_LOW) then
begin
Slowdown:= Elapsed / TARGET_LATENCY_HIGH;
if (Slowdown > 2) then
FDirtyLimit := Round(FDirtyLimit / Slowdown)
else begin
FDirtyLimit := Round(FDirtyLimit * 0.7);
end;
if (FDirtyLimit < DIRTY_LIMIT_LOW) then
FDirtyLimit := DIRTY_LIMIT_LOW
else begin
FDirtyLimit := (FDirtyLimit div 4096 * 4096);
end;
end;
end
else if (Elapsed < TARGET_LATENCY_LOW) then
begin
if FDirtyLimit < DIRTY_LIMIT_HIGH then
begin
FDirtyLimit := Round(FDirtyLimit * 1.3);
if (FDirtyLimit > DIRTY_LIMIT_HIGH) then
FDirtyLimit := DIRTY_LIMIT_HIGH
else begin
FDirtyLimit := (FDirtyLimit div 4096 * 4096);
end;
end;
end;
end;
procedure TFileStreamEx.SetCapacity(const NewCapacity: Int64);
begin
FileAllocate(Handle, NewCapacity);
end;
constructor TFileStreamEx.Create(const AFileName: String; Mode: LongWord);
@ -87,15 +170,15 @@ begin
begin
AHandle:= mbFileCreate(AFileName, Mode);
if AHandle = feInvalidHandle then
raise EFCreateError.CreateFmt(SFCreateError, [AFileName])
raise EFCreateError.CreateFmt(SFCreateError + LineEnding + mbSysErrorMessage, [AFileName])
else
inherited Create(AHandle);
end
else
begin
begin
AHandle:= mbFileOpen(AFileName, Mode);
if AHandle = feInvalidHandle then
raise EFOpenError.CreateFmt(SFOpenError, [AFilename])
raise EFOpenError.CreateFmt(SFOpenError + LineEnding + mbSysErrorMessage , [AFilename])
else
inherited Create(AHandle);
end;
@ -121,8 +204,37 @@ begin
raise EReadError.Create(mbSysErrorMessage(GetLastOSError));
end;
function TFileStreamEx.Write(const Buffer; Count: LongInt): LongInt;
begin
Result:= inherited Write(Buffer, Count);
if FAutoSync and (Result > 0) then Sync(Result);
end;
{ TStringListEx }
function TStringListEx.DoCompareText(const S1, S2: String): PtrInt;
var
U1, U2: UnicodeString;
begin
U1:= CeUtf8ToUtf16(S1);
U2:= CeUtf8ToUtf16(S2);
if CaseSensitive then
begin
Result:= UnicodeCompareStr(U1, U2);
if Result = 0 then
begin
Result := CompareMemRange(Pointer(U1), Pointer(U2), Min(Length(U1), Length(U2)) * SizeOf(WideChar));
if Result = 0 then
Result := Length(U1) - Length(U2);
end
end
else
begin
Result:= UnicodeCompareText(U1, U2);
end;
end;
function TStringListEx.IndexOfValue(const Value: String): Integer;
var
iStart: LongInt;
@ -174,13 +286,14 @@ end;
{ TIniFileEx }
constructor TIniFileEx.Create(const AFileName: String; Mode: Word);
constructor TIniFileEx.Create(const AFileName: String; Mode: Word;
AOptions: TIniFileOptions);
var
slLines : TStringListEx;
begin
FReadOnly := ((Mode and $03) = fmOpenRead);
inherited Create(EmptyStr);
inherited Create(EmptyStr, AOptions);
if ((Mode and $03) <> fmOpenWrite) then
begin
@ -198,7 +311,7 @@ begin
Rename(AFileName, False);
end;
constructor TIniFileEx.Create(const AFileName: String; AEscapeLineFeeds: Boolean);
constructor TIniFileEx.Create(const AFileName: String; AOptions: TIniFileOptions);
var
Mode: Word;
begin
@ -209,7 +322,7 @@ begin
else begin
Mode := fmOpenRead or fmShareDenyNone;
end;
Create(AFileName, Mode);
Create(AFileName, Mode, AOptions);
end;
procedure TIniFileEx.UpdateFile;

View file

@ -61,18 +61,21 @@ function CeTryDecode(const aValue: AnsiString; aCodePage: Cardinal;
{$ELSEIF DEFINED(UNIX)}
var
SystemEncodingUtf8: Boolean = False;
SystemLanguage, SystemEncoding, SystemLocale: String;
SystemEncoding, SystemLocale: String;
{$ENDIF}
var
SystemLanguage: String;
implementation
uses
{$IF DEFINED(UNIX)}
iconvenc_dyn
LazUTF8
{$IF DEFINED(DARWIN)}
, MacOSAll, CocoaAll
, dc_iconvenc_dyn, MacOSAll, CocoaAll, StrUtils
{$ELSE}
, UnixCP
, iconvenc_dyn, UnixCP
{$ENDIF}
{$ELSEIF DEFINED(MSWINDOWS)}
Windows
@ -165,9 +168,11 @@ begin
L:= Length(Source);
if L = 0 then Exit('');
SetLength(Result, L + 1);
L:= Utf8ToUnicode(PUnicodeChar(Result), L + 1, PAnsiChar(Source), L);
if L > 0 then
SetLength(Result, L - 1)
if (ConvertUTF8ToUTF16(PUnicodeChar(Result), L + 1, PAnsiChar(Source), L,
[toInvalidCharToSymbol], L) = trNoError) then
begin
SetLength(Result, L - 1);
end
else begin
SetLength(Result, 0);
end;
@ -194,9 +199,11 @@ begin
L:= Length(Source);
if (L = 0) then Exit('');
SetLength(Result, L * 3);
L:= UnicodeToUtf8(PAnsiChar(Result), Length(Result) + 1, PUnicodeChar(Source), L);
if L > 0 then
SetLength(Result, L - 1)
if (ConvertUTF16ToUTF8(PAnsiChar(Result), Length(Result) + 1, PUnicodeChar(Source), L,
[toInvalidCharToSymbol], L) = trNoError) then
begin
SetLength(Result, L - 1);
end
else begin
SetLength(Result, 0);
end;
@ -282,7 +289,7 @@ var
UnicodeResult: UnicodeString;
begin
if CeTryDecode(Source, CP_OEMCP, UnicodeResult) then
Result:= UTF8Encode(UnicodeResult)
Result:= CeUtf16ToUtf8(UnicodeResult)
else
Result:= Source;
end;
@ -291,7 +298,7 @@ function Utf82Oem(const Source: String): RawByteString;
var
AnsiResult: AnsiString;
begin
if CeTryEncode(UTF8Decode(Source), CP_OEMCP, False, AnsiResult) then
if CeTryEncode(CeUtf8ToUtf16(Source), CP_OEMCP, False, AnsiResult) then
Result:= AnsiResult
else
Result:= Source;
@ -320,6 +327,8 @@ begin
end;
procedure Initialize;
var
Buffer: array[1..4] of AnsiChar;
begin
CeOemToSys:= @OEM2Ansi;
CeSysToOem:= @Ansi2OEM;
@ -331,6 +340,9 @@ begin
CeUtf8ToAnsi:= @UTF82Sys;
CeSysToUtf8:= @Sys2UTF8;
CeUtf8ToSys:= @UTF82Sys;
if GetLocaleInfo(GetUserDefaultLCID, LOCALE_SABBREVLANGNAME, @Buffer[1], 4) > 0 then
SystemLanguage := LowerCase(Copy(Buffer, 1, 2));
end;
{$ELSEIF DEFINED(UNIX)}
@ -375,6 +387,7 @@ begin
begin
// Crop to terminating zero
SystemLanguage:= PAnsiChar(SystemLanguage);
SystemLanguage:= Copy2Symb(SystemLanguage, '-');
// Get system country
CurrentLocale:= NSLocale.currentLocale();
Country:= NSString(CurrentLocale.objectForKey(NSLocaleCountryCode)).UTF8String;
@ -394,7 +407,7 @@ begin
Lang:= SysUtils.GetEnvironmentVariable('LC_ALL');
if Length(Lang) = 0 then
begin
Lang:= SysUtils.GetEnvironmentVariable('LC_MESSAGES');
Lang:= SysUtils.GetEnvironmentVariable('LC_CTYPE');
if Length(Lang) = 0 then
begin
Lang:= SysUtils.GetEnvironmentVariable('LANG');

View file

@ -0,0 +1,171 @@
unit DCDarwin;
{$mode delphi}
{$packrecords c}
{$pointermath on}
{$modeswitch objectivec1}
interface
uses
Classes, SysUtils, DCBasicTypes, CocoaAll, BaseUnix;
const
CLOSE_RANGE_CLOEXEC = (1 << 2);
function CloseRange(first: cuint; last: cuint; flags: cint): cint; cdecl;
function mbFileCopyXattr(const Source, Target: String): Boolean;
// MacOS File Utils
function MacosFileSetCreationTime( const path:String; const birthtime:TFileTimeEx ): Boolean;
type
{ TDarwinFileUtil }
TDarwinFileUtil = class
class function cloneFile( const fromPath: String; const toPath: String; const size: Int64 ): Boolean;
end;
implementation
uses
DCUnix;
type
proc_fdinfo = record
proc_fd: Int32;
proc_fdtype: UInt32;
end;
Pproc_fdinfo = ^proc_fdinfo;
const
PROC_PIDLISTFDS = 1;
PROC_PIDLISTFD_SIZE = SizeOf(proc_fdinfo);
const
NSAppKitVersionNumber10_13 = 1561;
const
COPYFILE_ACL = 1 shl 0;
COPYFILE_STAT = 1 shl 1;
COPYFILE_XATTR = 1 shl 2;
COPYFILE_DATA = 1 shl 3;
COPYFILE_SECURITY = COPYFILE_STAT or COPYFILE_ACL;
COPYFILE_METADATA = COPYFILE_SECURITY or COPYFILE_XATTR;
COPYFILE_ALL = COPYFILE_METADATA or COPYFILE_DATA;
COPYFILE_UNLINK = 1 shl 21;
COPYFILE_CLONE = 1 shl 24;
COPYFILE_CLONE_FORCE = 1 shl 25;
type
copyfile_state_t_o = record
end;
copyfile_state_t = ^copyfile_state_t_o;
copyfile_flags_t = UInt32;
function copyfile( const fromPath: pchar; const toPath: pchar; state: copyfile_state_t; flags: copyfile_flags_t ): Integer;
cdecl; external name 'copyfile';
function proc_pidinfo(pid: cint; flavor: cint; arg: cuint64; buffer: pointer; buffersize: cint): cint; cdecl; external 'proc';
function CloseRange(first: cuint; last: cuint; flags: cint): cint; cdecl;
var
I: cint;
Handle: cint;
ProcessId: TPid;
bufferSize: cint;
pidInfo: Pproc_fdinfo;
begin
Result:= -1;
ProcessId:= FpGetpid;
bufferSize:= proc_pidinfo(ProcessId, PROC_PIDLISTFDS, 0, nil, 0);
pidInfo:= GetMem(bufferSize);
if Assigned(pidInfo) then
begin
bufferSize:= proc_pidinfo(ProcessId, PROC_PIDLISTFDS, 0, pidInfo, bufferSize);
for I:= 0 to (bufferSize div PROC_PIDLISTFD_SIZE) - 1 do
begin
Handle:= pidInfo[I].proc_fd;
if (Handle >= first) and (Handle <= last) then
begin
if (flags and CLOSE_RANGE_CLOEXEC <> 0) then
FileCloseOnExec(Handle)
else begin
FileClose(Handle);
end;
end;
end;
Result:= 0;
FreeMem(pidInfo);
end;
end;
function mbFileCopyXattr(const Source, Target: String): Boolean;
var
ret: Integer;
begin
Writeln( '>>3> mbFileCopyXattr' );
ret:= copyfile( pchar(Source), pchar(Target), nil, COPYFILE_XATTR );
fpseterrno( ret );
Result:= (ret=0);
end;
function StringToNSString(const S: String): NSString;
begin
Result:= NSString(NSString.stringWithUTF8String(PAnsiChar(S)));
end;
function MacosFileSetCreationTime( const path:String; const birthtime:TFileTimeEx ): Boolean;
var
seconds: Double;
attrs: NSMutableDictionary;
nsPath: NSString;
begin
Result:= true;
if birthtime = TFileTimeExNull then exit;
seconds:= birthtime.sec.ToDouble + birthtime.nanosec.ToDouble / (1000.0*1000.0*1000.0);
attrs:= NSMutableDictionary.dictionaryWithCapacity( 1 );
attrs.setValue_forKey( NSDate.dateWithTimeIntervalSince1970(seconds), NSFileCreationDate );
nsPath:= StringToNSString( path );
Result:= NSFileManager.defaultManager.setAttributes_ofItemAtPath_error( attrs, nsPath, nil );
end;
{ TDarwinFileUtil }
// the copyfile() api has two advantages:
// 1. dramatically improve file copy speed on APFS
// 2. supports copying macOS specific attributes
// therefore, we should try copyfile() as much as possible on macOS
class function TDarwinFileUtil.cloneFile( const fromPath: String; const toPath: String; const size: Int64 ): Boolean;
const
NO_CALLBACK_MAXSIZE = 20*1024*1024; // 20MB
var
flags: copyfile_flags_t;
ret: Integer;
begin
Result:= False;
flags:= COPYFILE_ALL;
// call copyfile() when:
// 1. macOS < 10.13 and filesize <= MAX_SIZE (copy only)
// 2. macOS >= 10.13 and filesize > MAX_SIZE (clone only, fail fast)
// 3. macOS >= 10.13 and filesize <= MAX_SIZE (try clone, then copy)
if NSAppKitVersionNumber < NSAppKitVersionNumber10_13 then begin
if size > NO_CALLBACK_MAXSIZE then
Exit;
end else begin
if size > NO_CALLBACK_MAXSIZE then
flags:= flags or COPYFILE_CLONE_FORCE or COPYFILE_UNLINK
else
flags:= flags or COPYFILE_CLONE;
end;
ret:= copyfile( pchar(fromPath), pchar(toPath), nil, flags );
Result:= (ret=0);
end;
end.

View file

@ -4,7 +4,7 @@
Date and time functions.
Copyright (C) 2009-2012 Przemysław Nagay (cobines@gmail.com)
Copyright (C) 2017-2018 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2017-2025 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
@ -22,7 +22,8 @@
unit DCDateTimeUtils;
{$mode objfpc}{$H+}
{$mode objfpc}
{$H+}{$R-}{$Q-}
interface
@ -31,12 +32,21 @@ uses
{$IF DEFINED(MSWINDOWS)}
, Windows
{$ELSEIF DEFINED(UNIX)}
, UnixUtil, DCUnix
, Unix, UnixUtil, DCUnix
{$ENDIF}
;
const
DATE_TIME_NULL = TDateTime(2958466.0);
function FileTimeToDateTime(FileTime : DCBasicTypes.TFileTime) : TDateTime;
function FileTimeToDateTimeEx(FileTime : DCBasicTypes.TFileTimeEx) : TDateTime;
function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime;
function DateTimeToFileTimeEx(DateTime : TDateTime) : DCBasicTypes.TFileTimeEx;
function FileTimeToWinFileTime(FileTime : DCBasicTypes.TFileTime) : TWinFileTime;
function FileTimeExToWinFileTime(FileTime : DCBasicTypes.TFileTimeEx) : TWinFileTime;
function WinFileTimeToFileTimeEx(FileTime: TWinFileTime) : DCBasicTypes.TFileTimeEx;
{en
Converts system specific UTC time to local time.
@ -90,11 +100,22 @@ function DosToWinTime(const DosTime: TDosFileTime; var WinTime: TWinFileTime): L
{$ENDIF}
function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime;
{$IFDEF UNIX}
function UnixFileTimeToDateTimeEx(UnixTime: DCBasicTypes.TFileTimeEx) : TDateTime;
{$ENDIF}
function DateTimeToUnixFileTime(DateTime: TDateTime) : TUnixFileTime;
function DateTimeToUnixFileTimeEx(DateTime: TDateTime) : DCBasicTypes.TFileTimeEx;
function UnixFileTimeToFileTime(UnixTime: TUnixFileTime): DCBasicTypes.TFileTime;
function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime;
function DosTimeToUnixFileTime(DosTime: TDosFileTime): TUnixFileTime;
function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime;
function WinFileTimeToUnixTime(WinTime: TWinFileTime) : TUnixFileTime;
function WinFileTimeToDosTime(FileTime: TWinFileTime): TDosFileTime;
function DosTimeToWinFileTime(FileTime: TDosFileTime): TWinFileTime;
function WcxFileTimeToFileTime(WcxTime: LongInt): DCBasicTypes.TFileTime; inline;
function FileTimeToWcxFileTime(FileTime: DCBasicTypes.TFileTime): LongInt; inline;
function WcxFileTimeToDateTime(WcxTime: LongInt): TDateTime;
@ -134,6 +155,8 @@ uses
const
UnixWinEpoch = TWinFileTime($019DB1DED53E8000); // Unix epoch start
MinWinUnixSec = (0 - TUnixFileTime(UnixWinEpoch div 10000000 - 1));
MaxWinUnixSec = TUnixFileTime(High(TWinFileTime) div 10000000 - 1);
const { Short names of months. }
ShortMonthNames: TMonthNameArray = ('Jan','Feb','Mar','Apr','May','Jun',
@ -225,6 +248,21 @@ begin
end;
{$ENDIF}
function FileTimeToDateTimeEx(FileTime : DCBasicTypes.TFileTimeEx) : TDateTime;
{$IF DEFINED(MSWINDOWS)}
begin
Result := WinFileTimeToDateTime(FileTime);
end;
{$ELSEIF DEFINED(UNIX)}
begin
Result := UnixFileTimeToDateTimeEx(FileTime);
end;
{$ELSE}
begin
Result := 0;
end;
{$ENDIF}
function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime; inline;
{$IF DEFINED(MSWINDOWS)}
begin
@ -240,6 +278,73 @@ begin
end;
{$ENDIF}
function DateTimeToFileTimeEx(DateTime : TDateTime) : DCBasicTypes.TFileTimeEx; inline;
{$IF DEFINED(MSWINDOWS)}
begin
Result := DateTimeToWinFileTime(DateTime);
end;
{$ELSEIF DEFINED(UNIX)}
begin
Result := DateTimeToUnixFileTimeEx(DateTime);
end;
{$ELSE}
begin
Result := 0;
end;
{$ENDIF}
function FileTimeToWinFileTime(FileTime: DCBasicTypes.TFileTime): TWinFileTime; inline;
{$IF DEFINED(MSWINDOWS)}
begin
Result:= TWinFileTime(FileTime)
end;
{$ELSEIF DEFINED(UNIX)}
begin
Result:= UnixFileTimeToWinTime(TUnixFileTime(FileTime));
end;
{$ENDIF}
function FileTimeExToWinFileTime(FileTime: DCBasicTypes.TFileTimeEx): TWinFileTime;
{$IF DEFINED(MSWINDOWS)}
begin
Result:= TWinFileTime(FileTime)
end;
{$ELSEIF DEFINED(UNIX)}
begin
if (FileTime.Sec > MaxWinUnixSec) then
Result:= High(TWinFileTime)
else if (FileTime.Sec < MinWinUnixSec) then
Result:= Low(TWinFileTime)
else begin
Result:= UnixWinEpoch + FileTime.sec * 10000000 + FileTime.nanosec div 100;
end;
end;
{$ENDIF}
function WinFileTimeToFileTimeEx(FileTime: TWinFileTime): DCBasicTypes.TFileTimeEx;
{$IF DEFINED(MSWINDOWS)}
begin
Result := TFileTimeEx(FileTime);
end;
{$ELSEIF DEFINED(UNIX)}
begin
if (FileTime >= UnixWinEpoch) then
begin
Result.Sec:= Int64((FileTime - UnixWinEpoch) div 10000000);
Result.NanoSec:= Int64((FileTime - UnixWinEpoch) mod 10000000) * 100;
end
else begin
Result.Sec:= (Int64(FileTime) - Int64(UnixWinEpoch)) div 10000000;
if (Result.Sec = 0) then
Result.NanoSec:= 0
else begin
Result.NanoSec:= (Int64(UnixWinEpoch - FileTime) mod 10000000) * 100;
if (Result.NanoSec > 0) then Result.NanoSec:= 1000000000 - Result.NanoSec;
end;
end;
end;
{$ENDIF}
function FileTimeToLocalFileTime(const FileTime: DCBasicTypes.TFileTime;
out LocalFileTime: DCBasicTypes.TFileTime): LongBool;
{$IFDEF MSWINDOWS}
@ -292,9 +397,7 @@ function WinFileTimeToDateTime(ft : TWinFileTime) : TDateTime;
{$IF DEFINED(MSWINDOWS)}
var
lpUniversalTime, lpLocalTime: TSystemTime;
{$ENDIF}
begin
{$IF DEFINED(MSWINDOWS)}
if (Win32MajorVersion > 5) then
begin
FileTimeToSystemTime(@ft, @lpUniversalTime);
@ -302,20 +405,22 @@ begin
Result := SystemTimeToDateTime(lpLocalTime);
end
else
{$ENDIF}
begin
WinFileTimeToLocalFileTime(ft,ft);
Result := (ft / 864000000000.0) - 109205.0;
end;
end;
{$ELSE}
begin
Result := FileTimeToDateTimeEx(WinFileTimeToFileTimeEx(ft));
end;
{$ENDIF}
function DateTimeToWinFileTime(dt : TDateTime) : TWinFileTime;
{$IF DEFINED(MSWINDOWS)}
var
lpUniversalTime, lpLocalTime: TSystemTime;
{$ENDIF}
begin
{$IF DEFINED(MSWINDOWS)}
if (Win32MajorVersion > 5) then
begin
DateTimeToSystemTime(dt, lpLocalTime);
@ -323,12 +428,16 @@ begin
SystemTimeToFileTime(@lpUniversalTime, @Result);
end
else
{$ENDIF}
begin
Result := Round((Extended(dt) + 109205.0) * 864000000000.0);
WinLocalFileTimeToFileTime(Result, Result);
end;
end;
{$ELSE}
begin
Result := FileTimeExToWinFileTime(DateTimeToFileTimeEx(dt));
end;
{$ENDIF}
function DosFileTimeToDateTime(const DosTime: TDosFileTime): TDateTime;
var
@ -369,10 +478,16 @@ var
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);
// Outside DOS file date year range
if (Yr < 1980) then
Yr := 1980
else if (Yr > 2107) then
begin
Yr := 2107;
end;
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;
@ -431,12 +546,22 @@ begin
end;
{$ENDIF}
function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime;
{$IF DEFINED(UNIX)}
function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime;
var
filetime: DCBasicTypes.TFileTimeEx;
begin
filetime:= TFileTimeEx.create(UnixTime);
Result:= UnixFileTimeToDateTimeEx(filetime);
end;
function UnixFileTimeToDateTimeEx(UnixTime: DCBasicTypes.TFileTimeEx) : TDateTime;
var
ATime: TTimeStruct;
Milliseconds: Word;
begin
if (fpLocalTime(@UnixTime, @ATime) = nil) then
if (fpLocalTime(@UnixTime.sec, @ATime) = nil) then
Exit(UnixEpoch);
ATime.tm_mon += 1;
@ -449,10 +574,17 @@ begin
if ATime.tm_sec > 59 then
ATime.tm_sec := 59;
if (UnixTime.nanosec > 999000000) then
Milliseconds := 999
else begin
Milliseconds := Round( Extended(UnixTime.nanosec) / (1000.0 * 1000.0) );
end;
Result := ComposeDateTime(EncodeDate(ATime.tm_year, ATime.tm_mon, ATime.tm_mday),
EncodeTime(ATime.tm_hour, ATime.tm_min, ATime.tm_sec, 0));
EncodeTime(ATime.tm_hour, ATime.tm_min, ATime.tm_sec, milliseconds));
end;
{$ELSE}
function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime;
var
WinFileTime: TWinFileTime;
begin
@ -464,13 +596,28 @@ end;
function DateTimeToUnixFileTime(DateTime : TDateTime): TUnixFileTime;
{$IF DEFINED(UNIX)}
var
AUnixTime: TFileTimeEx;
begin
AUnixTime:= DateTimeToUnixFileTimeEx(DateTime);
Result:= TUnixFileTime(AUnixTime.Sec);
end;
{$ELSE}
var
WinFileTime: TWinFileTime;
begin
WinFileTime:= DateTimeToWinFileTime(DateTime);
Result:= WinFileTimeToUnixTime(WinFileTime);
end;
{$ENDIF}
function DateTimeToUnixFileTimeEx(DateTime : TDateTime): DCBasicTypes.TFileTimeEx;
{$IF DEFINED(UNIX)}
var
AUnixTime: TTime;
ATime: TTimeStruct;
Year, Month, Day: Word;
Hour, Minute, Second, MilliSecond: Word;
begin
if DateTime < UnixEpoch then
raise EDateOutOfRange.Create(DateTime);
DecodeDate(DateTime, Year, Month, Day);
DecodeTime(DateTime, Hour, Minute, Second, MilliSecond);
@ -484,10 +631,14 @@ begin
ATime.tm_min:= Minute;
ATime.tm_sec:= Second;
Result:= fpMkTime(@ATime);
AUnixTime:= fpMkTime(@ATime);
if Result = DCBasicTypes.TFileTime(-1) then
raise EDateOutOfRange.Create(DateTime)
if (AUnixTime = -1) then
Result:= TFileTimeExNull
else begin
if (AUnixTime < 0) then MilliSecond:= 0;
Result:= TFileTimeEx.Create(AUnixTime, MilliSecond * 1000 * 1000);
end;
end;
{$ELSE}
var
@ -498,11 +649,25 @@ begin
end;
{$ENDIF}
function UnixFileTimeToFileTime(UnixTime: TUnixFileTime): DCBasicTypes.TFileTime; inline;
begin
{$IF DEFINED(MSWINDOWS)}
Result:= UnixFileTimeToWinTime(UnixTime);
{$ELSE}
Result:= UnixTime;
{$ENDIF}
end;
function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime;
begin
Result := DateTimeToDosFileTime(UnixFileTimeToDateTime(UnixTime));
end;
function DosTimeToUnixFileTime(DosTime: TDosFileTime): TUnixFileTime;
begin
Result:= DateTimeToUnixFileTime(DosFileTimeToDateTime(DosTime));
end;
function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime;
var
WinFileTime: TWinFileTime;
@ -520,6 +685,16 @@ begin
Result:= TUnixFileTime((WinTime - UnixWinEpoch) div 10000000);
end;
function WinFileTimeToDosTime(FileTime: TWinFileTime): TDosFileTime;
begin
Result := DateTimeToDosFileTime(WinFileTimeToDateTime(FileTime));
end;
function DosTimeToWinFileTime(FileTime: TDosFileTime): TWinFileTime;
begin
Result := DateTimeToWinFileTime(DosFileTimeToDateTime(FileTime));
end;
function WcxFileTimeToFileTime(WcxTime: LongInt): DCBasicTypes.TFileTime;
begin
{$IF DEFINED(MSWINDOWS)}

View file

@ -34,8 +34,10 @@ const
FILE_ATTRIBUTE_READONLY = $0001;
FILE_ATTRIBUTE_HIDDEN = $0002;
FILE_ATTRIBUTE_SYSTEM = $0004;
FILE_ATTRIBUTE_VOLUME = $0008;
FILE_ATTRIBUTE_DIRECTORY = $0010;
FILE_ATTRIBUTE_ARCHIVE = $0020;
FILE_ATTRIBUTE_DEVICE = $0040;
FILE_ATTRIBUTE_NORMAL = $0080;
FILE_ATTRIBUTE_TEMPORARY = $0100;
FILE_ATTRIBUTE_SPARSE_FILE = $0200;
@ -80,6 +82,8 @@ const
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;
S_IRUGO = S_IRUSR or S_IRGRP or S_IROTH;
S_IWUGO = S_IWUSR or S_IWGRP or S_IWOTH;
S_IXUGO = S_IXUSR or S_IXGRP or S_IXOTH;
{ POSIX setuid(), setgid(), and sticky bit }
@ -99,6 +103,7 @@ const
function WinToUnixFileAttr(Attr: TFileAttrs): TFileAttrs;
function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs;
function UnixToWcxFileAttr(Attr: TFileAttrs): TFileAttrs;
function WinToWcxFileAttr(Attr: TFileAttrs): TFileAttrs;
function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs;
function SingleStrToFileAttr(sAttr: String): TFileAttrs;
@ -186,13 +191,14 @@ 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 or S_IXUGO
else
Result := Result or S_IFDIR or S_IXUGO or S_IWUSR
else begin
Result := Result or S_IFREG;
if (Attr and faReadOnly) = 0 then
Result := Result or S_IWUSR;
end;
end;
function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs;
@ -227,6 +233,17 @@ begin
{$ENDIF}
end;
function WinToWcxFileAttr(Attr: TFileAttrs): TFileAttrs;
begin
{$IF DEFINED(UNIX)}
Result := WinToUnixFileAttr(Attr);
{$ELSEIF DEFINED(MSWINDOWS)}
Result := Attr;
{$ELSE}
Result := 0;
{$ENDIF}
end;
function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs;
begin
Result := UnixToWinFileAttr(Attr);

View file

@ -0,0 +1,278 @@
{
Double Commander
-------------------------------------------------------------------------
This unit contains Haiku specific functions
Copyright (C) 2022 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 DCHaiku;
{$mode objfpc}{$H+}
{$packrecords c}
interface
uses
Classes, SysUtils, BaseUnix, Unix;
// fcntl.h
const
O_NOTRAVERSE = $2000;
// TypeConstants.h
const
B_STRING_TYPE = $43535452; // 'CSTR'
// fs_attr.h
type
attr_info = record
type_: cuint32;
size: coff_t;
end;
Tattr_info = attr_info;
Pattr_info = ^attr_info;
function fs_remove_attr(fd: cint; attribute: PAnsiChar): cint; cdecl; external clib;
function fs_stat_attr(fd: cint; attribute: pansichar; attrInfo: Pattr_info): cint; cdecl; external clib;
function fs_open_attr(path: pansichar; attribute: pansichar;
type_: cuint32; openMode: cint): cint; cdecl; external clib;
function fs_fopen_attr(fd: cint; attribute: pansichar;
type_: cuint32; openMode: cint): cint; cdecl; external clib;
function fs_close_attr(fd: cint): cint; cdecl; external clib;
function fs_open_attr_dir(path: pansichar): pDir; cdecl; external clib;
function fs_lopen_attr_dir(path: pansichar): pDir; cdecl; external clib;
function fs_fopen_attr_dir(fd: cint): pDir; cdecl; external clib;
function fs_close_attr_dir(dir: pDir): cint; cdecl; external clib;
function fs_read_attr_dir(dir: pDir): pDirent; cdecl; external clib;
// OS.h
const
B_OS_NAME_LENGTH = 32;
// StorageDefs.h
const
B_FILE_NAME_LENGTH = 256;
// fs_info.h
const
B_FS_IS_READONLY = $00000001;
B_FS_IS_REMOVABLE = $00000002;
B_FS_IS_PERSISTENT = $00000004;
B_FS_IS_SHARED = $00000008;
type
Tfs_info = record
dev: dev_t;
root: ino_t;
flags: cuint32;
block_size: coff_t;
io_size: coff_t;
total_blocks: coff_t;
free_blocks: coff_t;
total_nodes: coff_t;
free_nodes: coff_t;
device_name: array[0..127] of AnsiChar;
volume_name: array[0..Pred(B_FILE_NAME_LENGTH)] of AnsiChar;
fsh_name: array[0..Pred(B_OS_NAME_LENGTH)] of AnsiChar;
end;
Pfs_info = ^Tfs_info;
function dev_for_path(path: PAnsiChar): dev_t; cdecl; external clib;
function next_dev(pos: pcint32): dev_t; cdecl; external clib;
function fs_stat_dev(dev: dev_t; info: Pfs_info): cint; cdecl; external clib;
// FindDirectory.h
const
B_TRASH_DIRECTORY = 1;
B_USER_DIRECTORY = 3000;
B_USER_SETTINGS_DIRECTORY = 3006;
B_USER_DATA_DIRECTORY = 3012;
B_USER_CACHE_DIRECTORY = 3013;
function find_directory(which: cuint32; volume: dev_t; createIt: cbool;
pathString: PAnsiChar; length: cint32): status_t; cdecl; external clib;
function mbFileCopyXattr(const Source, Target: String): Boolean;
function mbFileWriteXattr(const FileName, AttrName, Value: String): Boolean;
function mbFindDirectory(which: cuint32; volume: dev_t; createIt: cbool; out pathString: String): Boolean;
implementation
uses
DCUnix, DCConvertEncoding;
function mbFileOpen(const FileName: String; Flags: cInt): THandle;
begin
repeat
Result:= fpOpen(FileName, Flags or O_CLOEXEC);
until (Result <> -1) or (fpgeterrno <> ESysEINTR);
end;
function mbFileGetXattr(hFile: THandle): TStringArray;
var
DirPtr: pDir;
PtrDirEnt: pDirent;
Index: Integer = 0;
begin
Result:= Default(TStringArray);
DirPtr:= fs_fopen_attr_dir(hFile);
if Assigned(DirPtr) then
try
SetLength(Result, 512);
PtrDirEnt:= fs_read_attr_dir(DirPtr);
while PtrDirEnt <> nil do
begin
Result[Index]:= StrPas(PtrDirEnt^.d_name);
Inc(Index);
if (Index > High(Result)) then
begin
SetLength(Result, Length(Result) * 2);
end;
PtrDirEnt:= fs_read_attr_dir(DirPtr);
end;
finally
fs_close_attr_dir(DirPtr);
end;
SetLength(Result, Index);
end;
function mbFileWriteXattr(const FileName, AttrName, Value: String): Boolean;
var
hAttr: cint;
ALen: Integer;
hTarget: THandle;
begin
hTarget:= mbFileOpen(FileName, O_RDWR or O_NOTRAVERSE);
Result:= (hTarget <> feInvalidHandle);
if Result then
begin
hAttr:= fs_fopen_attr(hTarget, PAnsiChar(AttrName),
B_STRING_TYPE, O_CREAT or O_TRUNC or O_WRONLY);
Result:= (hAttr <> feInvalidHandle);
if Result then
begin
ALen:= Length(Value) + 1;
Result:= (FileWrite(hAttr, PAnsiChar(Value)^, ALen) = ALen);
fs_close_attr(hAttr);
end;
FileClose(hTarget);
end;
end;
function mbFileCopyXattr(const Source, Target: String): Boolean;
var
AData: TBytes;
Index: Integer;
Names: TStringArray;
AttrName: PAnsiChar;
AttrInfo: Tattr_info;
hSource, hTarget: THandle;
function ReadAttr(hFile: cint; attribute: pansichar): Boolean;
var
hAttr: THandle;
begin
hAttr:= fs_fopen_attr(hFile, attribute, attrInfo.type_, O_RDONLY);
Result:= (hAttr <> feInvalidHandle);
if Result then
begin
Result:= (FileRead(hAttr, AData[0], attrInfo.size) = attrInfo.size);
fs_close_attr(hAttr);
end;
end;
function WriteAttr(hFile: cint; attribute: pansichar): Boolean;
var
hAttr: THandle;
begin
hAttr:= fs_fopen_attr(hFile, attribute, attrInfo.type_, O_CREAT or O_WRONLY);
Result:= (hAttr <> feInvalidHandle);
if Result then
begin
Result:= (FileWrite(hAttr, AData[0], attrInfo.size) = attrInfo.size);
fs_close_attr(hAttr);
end;
end;
begin
hSource:= mbFileOpen(Source, O_RDONLY or O_NOTRAVERSE);
Result:= (hSource <> feInvalidHandle);
if Result then
begin
hTarget:= mbFileOpen(Target, O_RDWR or O_NOTRAVERSE);
Result:= (hTarget <> feInvalidHandle);
if Result then
begin
// Remove attributes from target
Names:= mbFileGetXattr(hTarget);
for Index:= 0 to High(Names) do
begin
fs_remove_attr(hTarget, PAnsiChar(Names[Index]));
end;
SetLength(AData, $FFFF);
Names:= mbFileGetXattr(hSource);
for Index:= 0 to High(Names) do
begin
AttrName:= PAnsiChar(Names[Index]);
if (fs_stat_attr(hSource, AttrName, @AttrInfo) >= 0) then
begin
if (AttrInfo.size > Length(AData)) then
begin
SetLength(AData, AttrInfo.size);
end;
Result:= ReadAttr(hSource, AttrName);
if Result then
begin
Result:= WriteAttr(hTarget, AttrName);
if not Result then Break;
end;
end;
end;
FileClose(hTarget);
end;
FileClose(hSource);
end;
end;
function mbFindDirectory(which: cuint32; volume: dev_t; createIt: cbool; out
pathString: String): Boolean;
var
APath: array[0..MAX_PATH] of AnsiChar;
begin
Result:= find_directory(which, volume, createIt, APath, MAX_PATH) >= 0;
if Result then begin
pathString:= CeSysToUtf8(APath);
end;
end;
end.

View file

@ -0,0 +1,68 @@
unit DCJsonConfig;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpJson;
type
{ TJsonConfig }
TJsonConfig = class
private
FRoot: TJSONObject;
public
constructor Create;
destructor Destroy; override;
procedure SaveToFile(const FileName: String);
procedure LoadFromFile(const FileName: String);
property Root: TJSONObject read FRoot;
end;
implementation
uses
DCClassesUtf8;
{ TJsonConfig }
constructor TJsonConfig.Create;
begin
FRoot:= TJSONObject.Create;
end;
destructor TJsonConfig.Destroy;
begin
inherited Destroy;
FRoot.Free;
end;
procedure TJsonConfig.SaveToFile(const FileName: String);
begin
with TStringListEx.Create do
try
Text:= FRoot.FormatJSON([foDoNotQuoteMembers]);
SaveToFile(FileName);
finally
Free;
end;
end;
procedure TJsonConfig.LoadFromFile(const FileName: String);
var
AStream: TFileStreamEx;
begin
AStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone);
try
FreeAndNil(FRoot);
FRoot:= GetJSON(AStream, True) as TJSONObject;
finally
AStream.Free;
end;
end;
end.

View file

@ -0,0 +1,213 @@
{
Double Commander
-------------------------------------------------------------------------
This unit contains Linux specific functions
Copyright (C) 2023 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 program. If not, see <https://www.gnu.org/licenses/>
}
unit DCLinux;
{$mode objfpc}{$H+}
{$packrecords c}
interface
uses
Classes, SysUtils, BaseUnix, Unix;
const
CLOSE_RANGE_CLOEXEC = (1 << 2);
const
FS_IOC_GETFLAGS = $80086601;
FS_IOC_SETFLAGS = $40086602;
(*
* Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
*)
FS_SECRM_FL = $00000001; //* Secure deletion */
FS_UNRM_FL = $00000002; //* Undelete */
FS_COMPR_FL = $00000004; //* Compress file */
FS_SYNC_FL = $00000008; //* Synchronous updates */
FS_IMMUTABLE_FL = $00000010; //* Immutable file */
FS_APPEND_FL = $00000020; //* Writes to file may only append */
FS_NODUMP_FL = $00000040; //* Do not dump file */
FS_NOATIME_FL = $00000080; //* Do not update atime */
FS_FL_USER_VISIBLE = $0003DFFF; //* User visible flags */
FS_FL_USER_MODIFIABLE = $000380FF; //* User modifiable flags */
type
TFlagName = record
Flag: UInt32;
Name: AnsiChar;
end;
const
FlagsName: array[1..8] of TFlagName = (
(Flag: FS_SECRM_FL; Name: 's'),
(Flag: FS_UNRM_FL; Name: 'u'),
(Flag: FS_SYNC_FL; Name: 'S'),
(Flag: FS_IMMUTABLE_FL; Name: 'i'),
(Flag: FS_APPEND_FL; Name: 'a'),
(Flag: FS_NODUMP_FL; Name: 'd'),
(Flag: FS_NOATIME_FL; Name: 'A'),
(Flag: FS_COMPR_FL; Name: 'c')
);
function FormatFileFlags(Flags: UInt32): String;
function FileGetFlags(Handle: THandle; out Flags: UInt32): Boolean;
function mbFileGetFlags(const FileName: String; out Flags: UInt32): Boolean;
function mbFileGetXattr(const FileName: String): TStringArray;
function mbFileCopyXattr(const Source, Target: String): Boolean;
implementation
uses
InitC, DCConvertEncoding, DCOSUtils;
function lremovexattr(const path, name: PAnsiChar): cint; cdecl; external clib;
function llistxattr(const path: PAnsiChar; list: PAnsiChar; size: csize_t): ssize_t; cdecl; external clib;
function lgetxattr(const path, name: PAnsiChar; value: Pointer; size: csize_t): ssize_t; cdecl; external clib;
function lsetxattr(const path, name: PAnsiChar; const value: Pointer; size: csize_t; flags: cint): cint; cdecl; external clib;
function FormatFileFlags(Flags: UInt32): String;
var
Index: Integer;
begin
Result:=StringOfChar('-', Length(FlagsName));
for Index:= 1 to High(FlagsName) do
begin
if Flags and FlagsName[Index].Flag <> 0 then
begin
Result[Index]:= FlagsName[Index].Name;
end;
end;
end;
function FileGetFlags(Handle: THandle; out Flags: UInt32): Boolean;
begin
Result:= (FpIOCtl(Handle, FS_IOC_GETFLAGS, @Flags) >= 0);
end;
function mbFileGetFlags(const FileName: String; out Flags: UInt32): Boolean;
var
Handle: THandle;
begin
Handle:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone);
Result:= Handle <> feInvalidHandle;
if Result then
begin
Result:= (FpIOCtl(Handle, FS_IOC_GETFLAGS, @Flags) >= 0);
FileClose(Handle);
end;
end;
function mbFileGetXattr(const FileName: String): TStringArray;
var
AList: String;
ALength: ssize_t;
AFileName: String;
begin
SetLength(AList, MaxSmallint);
Result:= Default(TStringArray);
AFileName:= CeUtf8ToSys(FileName);
ALength:= llistxattr(PAnsiChar(AFileName), Pointer(AList), Length(AList));
if (ALength < 0) then
begin
if (fpgetCerrno <> ESysERANGE) then
begin
fpseterrno(fpgetCerrno);
Exit;
end
else begin
ALength:= llistxattr(PAnsiChar(AFileName), nil, 0);
if ALength < 0 then
begin
fpseterrno(fpgetCerrno);
Exit;
end;
SetLength(AList, ALength);
ALength:= llistxattr(PAnsiChar(AFileName), Pointer(AList), ALength);
if ALength < 0 then
begin
fpseterrno(fpgetCerrno);
Exit;
end;
end;
end;
if (ALength > 0) then
begin
SetLength(AList, ALength - 1);
Result:= AList.Split(#0);
end;
end;
function mbFileCopyXattr(const Source, Target: String): Boolean;
var
Value: String;
Index: Integer;
ALength: ssize_t;
Names: TStringArray;
ASource, ATarget: String;
begin
Result:= True;
ASource:= CeUtf8ToSys(Source);
ATarget:= CeUtf8ToSys(Target);
// Remove attributes from target
Names:= mbFileGetXattr(Target);
for Index:= 0 to High(Names) do
begin
lremovexattr(PAnsiChar(ATarget), PAnsiChar(Names[Index]));
end;
SetLength(Value, MaxSmallint);
Names:= mbFileGetXattr(Source);
for Index:= 0 to High(Names) do
begin
ALength:= lgetxattr(PAnsiChar(ASource), PAnsiChar(Names[Index]), Pointer(Value), Length(Value));
if (ALength < 0) then
begin
if (fpgetCerrno <> ESysERANGE) then
begin
fpseterrno(fpgetCerrno);
Exit(False);
end
else begin
ALength:= lgetxattr(PAnsiChar(ASource), PAnsiChar(Names[Index]), nil, 0);
if ALength < 0 then
begin
fpseterrno(fpgetCerrno);
Exit(False);
end;
SetLength(Value, ALength);
ALength:= lgetxattr(PAnsiChar(ASource), PAnsiChar(Names[Index]), Pointer(Value), Length(Value));
if ALength < 0 then
begin
fpseterrno(fpgetCerrno);
Exit(False);
end;
end;
end;
if (lsetxattr(PAnsiChar(ATarget), PAnsiChar(Names[Index]), Pointer(Value), ALength, 0) < 0) then
begin
fpseterrno(fpgetCerrno);
Exit(fpgeterrno = ESysEOPNOTSUPP);
end;
end;
end;
end.

View file

@ -89,5 +89,6 @@ const
BALLOON_KVM_MAGIC = $13661366;
ZSMALLOC_MAGIC = $58295829;
{ manually added }
SMB2_MAGIC_NUMBER = $fe534d42;
CIFS_MAGIC_NUMBER = $ff534d42;

View file

@ -4,7 +4,7 @@
This unit contains functions to work with hard and symbolic links
on the NTFS file system.
Copyright (C) 2012-2017 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2012-2025 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
@ -17,8 +17,7 @@
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
License along with this library. If not, see <https://www.gnu.org/licenses/>.
}
unit DCNtfsLinks;
@ -40,8 +39,11 @@ const
FSCTL_SET_REPARSE_POINT = $000900A4;
FSCTL_GET_REPARSE_POINT = $000900A8;
FSCTL_DELETE_REPARSE_POINT = $000900AC;
// WSL and Cygwin symbolic link
IO_REPARSE_TAG_LX_SYMLINK = $A000001D;
const
LX_SYMLINK_HEADER_SIZE = 4;
REPARSE_DATA_HEADER_SIZE = 8;
MOUNT_POINT_HEADER_SIZE = 8;
FILE_DOES_NOT_EXIST = DWORD(-1);
@ -68,6 +70,11 @@ type
PathBuffer: array[0..0] of WCHAR;
end;
TLxSymlinkReparseBuffer = record
FileType: DWORD;
PathBuffer: array[0..0] of AnsiChar;
end;
TGenericReparseBuffer = record
DataBuffer: array[0..0] of UCHAR;
end;
@ -79,7 +86,8 @@ type
case Integer of
0: (SymbolicLinkReparseBuffer: TSymbolicLinkReparseBuffer);
1: (MountPointReparseBuffer: TMountPointReparseBuffer);
2: (GenericReparseBuffer: TGenericReparseBuffer);
2: (LxSymlinkReparseBuffer: TLxSymlinkReparseBuffer);
3: (GenericReparseBuffer: TGenericReparseBuffer);
end;
TReparseDataBuffer = REPARSE_DATA_BUFFER;
PReparseDataBuffer = ^REPARSE_DATA_BUFFER;
@ -95,7 +103,7 @@ type
@param(ALinkName The name of the symbolic link)
@returns(The function returns @true if successful, @false otherwise)
}
function CreateSymLink(const ATargetName, ALinkName: UnicodeString): Boolean;
function CreateSymLink(const ATargetName, ALinkName: UnicodeString; Attr: UInt32): 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.
@ -112,6 +120,13 @@ function CreateHardLink(const AFileName, ALinkName: UnicodeString): Boolean;
@returns(The function returns @true if successful, @false otherwise)
}
function ReadSymLink(const aSymlinkFileName: UnicodeString; out aTargetFileName: UnicodeString): Boolean;
{en
Creates a WSL/Cygwin symbolic link.
@param(aTargetFileName The name of the existing file)
@param(aSymlinkFileName The name of the symbolic link)
@returns(The function returns @true if successful, @false otherwise)
}
function CreateSymLinkUnix(const aTargetFileName: String; const aSymlinkFileName: UnicodeString): Boolean;
implementation
@ -250,6 +265,7 @@ function _CreateSymLink_Old(aTargetFileName, aSymlinkFileName: UnicodeString): B
var
hDevice: THandle;
lpInBuffer: PReparseDataBuffer;
dwLastError,
nInBufferSize,
dwPathBufferSize: DWORD;
wsNativeFileName: UnicodeString;
@ -261,7 +277,11 @@ begin
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(False);
if hDevice = INVALID_HANDLE_VALUE then
begin
dwLastError:= GetLastError;
Exit(False);
end;
if Pos(wsLongFileNamePrefix, aTargetFileName) <> 1 then
wsNativeFileName:= wsNativeFileNamePrefix + aTargetFileName
else begin
@ -288,15 +308,19 @@ begin
0, // nOutBufferSize
lpBytesReturned, // lpBytesReturned
nil); // OVERLAPPED structure
if not Result then dwLastError:= GetLastError;
FreeMem(lpInBuffer);
CloseHandle(hDevice);
finally
if not Result then RemoveDirectoryW(PWideChar(aSymlinkFileName));
if not Result then
begin
RemoveDirectoryW(PWideChar(aSymlinkFileName));
SetLastError(dwLastError);
end;
end;
end;
function CreateSymLink(const ATargetName, ALinkName: UnicodeString): Boolean;
function CreateSymLink(const ATargetName, ALinkName: UnicodeString; Attr: UInt32): Boolean;
var
dwAttributes: DWORD;
lpFilePart: LPWSTR = nil;
@ -315,7 +339,11 @@ begin
AFullPathName:= ATargetName;
end;
end;
dwAttributes:= Windows.GetFileAttributesW(PWideChar(AFullPathName));
if (Attr <> FILE_DOES_NOT_EXIST) then
dwAttributes:= Attr
else begin
dwAttributes:= Windows.GetFileAttributesW(PWideChar(AFullPathName));
end;
if dwAttributes = FILE_DOES_NOT_EXIST then Exit;
if HasNewApi = False then
begin
@ -337,11 +365,61 @@ begin
end;
end;
function ReadSymLink(const aSymlinkFileName: UnicodeString; out aTargetFileName: UnicodeString): Boolean;
function CreateSymLinkUnix(const aTargetFileName: String; const aSymlinkFileName: UnicodeString): Boolean;
var
hDevice: THandle;
dwLastError: DWORD;
nInBufferSize: DWORD;
dwPathBufferSize: DWORD;
lpBytesReturned: DWORD = 0;
lpInBuffer: PReparseDataBuffer;
begin
hDevice:= CreateFileW(PWideChar(aSymlinkFileName),
GENERIC_WRITE, 0, nil, CREATE_NEW,
FILE_FLAG_OPEN_REPARSE_POINT, 0);
if hDevice = INVALID_HANDLE_VALUE then Exit(False);
dwPathBufferSize:= Length(aTargetFileName);
nInBufferSize:= REPARSE_DATA_HEADER_SIZE + LX_SYMLINK_HEADER_SIZE + dwPathBufferSize;
lpInBuffer:= GetMem(nInBufferSize);
ZeroMemory(lpInBuffer, nInBufferSize);
with lpInBuffer^, lpInBuffer^.LxSymlinkReparseBuffer do
begin
FileType:= 2; // symbolic link
ReparseTag:= IO_REPARSE_TAG_LX_SYMLINK;
ReparseDataLength:= LX_SYMLINK_HEADER_SIZE + dwPathBufferSize;
CopyMemory(@PathBuffer[0], @aTargetFileName[1], Length(aTargetFileName));
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
// File system does not support reparse points
// Create a normal file with the link target inside
if (not Result) and (GetLastError = ERROR_INVALID_FUNCTION) then
begin
Result:= (FileWrite(hDevice, aTargetFileName[1], dwPathBufferSize) = dwPathBufferSize);
if Result then SetFileAttributesW(PWideChar(aSymlinkFileName), FILE_ATTRIBUTE_SYSTEM);
end;
if not Result then dwLastError:= GetLastError;
FreeMem(lpInBuffer);
CloseHandle(hDevice);
if not Result then
begin
DeleteFileW(PWideChar(aSymlinkFileName));
SetLastError(dwLastError);
end;
end;
function ReadSymLink(const aSymlinkFileName: UnicodeString; out aTargetFileName: UnicodeString): Boolean;
var
L: Integer;
hDevice: THandle;
dwFileAttributes: DWORD;
caOutBuffer: array[0..4095] of Byte;
caOutBuffer: array[0..MaxSmallint] of Byte;
lpOutBuffer: TReparseDataBuffer absolute caOutBuffer;
pwcTargetFileName: PWideChar;
lpBytesReturned: DWORD = 0;
@ -389,6 +467,13 @@ begin
SetLength(aTargetFileName, SubstituteNameLength div SizeOf(WideChar));
CopyMemory(PWideChar(aTargetFileName), pwcTargetFileName, SubstituteNameLength);
end;
IO_REPARSE_TAG_LX_SYMLINK:
with lpOutBuffer.LxSymlinkReparseBuffer do
begin
L:= lpOutBuffer.ReparseDataLength - SizeOf(FileType);
SetLength(aTargetFileName, L + 1);
SetLength(aTargetFileName, MultiByteToWideChar(CP_UTF8, 0, @PathBuffer[0], L, PWideChar(aTargetFileName), L + 1));
end;
end;
if Pos(wsNetworkFileNamePrefix, aTargetFileName) = 1 then
Delete(aTargetFileName, 2, Length(wsNetworkFileNamePrefix) - 2)

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
This unit contains platform dependent functions dealing with operating system.
Copyright (C) 2006-2021 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2006-2025 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
@ -31,6 +31,15 @@ uses
{$IFDEF UNIX}
, BaseUnix, DCUnix
{$ENDIF}
{$IFDEF LINUX}
, DCLinux
{$ENDIF}
{$IFDEF DARWIN}
, DCDarwin
{$ENDIF}
{$IFDEF HAIKU}
, DCHaiku
{$ENDIF}
{$IFDEF MSWINDOWS}
, JwaWinBase, Windows
{$ENDIF}
@ -40,6 +49,7 @@ const
fmOpenSync = $10000;
fmOpenDirect = $20000;
fmOpenNoATime = $40000;
fmOpenSpecial = $80000;
{$IF DEFINED(UNIX)}
ERROR_NOT_SAME_DEVICE = ESysEXDEV;
@ -47,6 +57,8 @@ const
ERROR_NOT_SAME_DEVICE = Windows.ERROR_NOT_SAME_DEVICE;
{$ENDIF}
FileNameNormalized = {$IFDEF DARWIN}True{$ELSE}False{$ENDIF};
type
TFileMapRec = record
FileHandle : System.THandle;
@ -93,7 +105,7 @@ type
PCopyAttributesResult = ^TCopyAttributesResult;
const
faInvalidAttributes: TFileAttrs = TFileAttrs(-1);
faInvalidAttributes = TFileAttrs(-1);
CopyAttributesOptionCopyAll = [caoCopyAttributes, caoCopyTime, caoCopyOwnership];
{en
@ -108,6 +120,12 @@ function FPS_ISDIR(iAttr: TFileAttrs) : Boolean;
@returns(@true if file is a symbolic link, @false otherwise)
}
function FPS_ISLNK(iAttr: TFileAttrs) : Boolean;
{en
Is file a regular file
@param(iAttr File attributes)
@returns(@true if file is a regular file, @false otherwise)
}
function FPS_ISREG(iAttr: TFileAttrs) : Boolean;
{en
Is file executable
@param(sFileName File name)
@ -139,10 +157,19 @@ function FileIsReadOnly(iAttr: TFileAttrs): Boolean; inline;
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.
If PathPrefix is '/tmp/myfile' then files '/tmp/myfile~XXXXXX.tmp' are tried.
The path '/tmp' must already exist.)
}
function GetTempName(PathPrefix: String): String;
function GetTempName(PathPrefix: String; Extension: String = 'tmp'): String;
{en
Find file in the system PATH
}
function FindInSystemPath(var FileName: String): Boolean;
{en
Extract file root directory
@param(FileName File name)
}
function ExtractRootDir(const FileName: String): String;
(* File mapping/unmapping routines *)
{en
@ -158,6 +185,8 @@ function MapFile(const sFileName : String; out FileMapRec : TFileMapRec) : Boole
}
procedure UnMapFile(var FileMapRec : TFileMapRec);
function NormalizeFileName(const Source: String): String;
{en
Convert from console to UTF8 encoding.
}
@ -169,16 +198,23 @@ function mbFileCreate(const FileName: String): System.THandle; overload; inline;
function mbFileCreate(const FileName: String; Mode: LongWord): System.THandle; overload; inline;
function mbFileCreate(const FileName: String; Mode, Rights: LongWord): System.THandle; overload;
function mbFileAge(const FileName: String): DCBasicTypes.TFileTime;
function mbFileGetTime(const FileName: String): DCBasicTypes.TFileTimeEx;
// On success returns True.
// nanoseconds supported
function mbFileGetTime(const FileName: String;
var ModificationTime: DCBasicTypes.TFileTime;
var CreationTime : DCBasicTypes.TFileTime;
var LastAccessTime : DCBasicTypes.TFileTime): Boolean;
var ModificationTime: DCBasicTypes.TFileTimeEx;
var CreationTime : DCBasicTypes.TFileTimeEx;
var LastAccessTime : DCBasicTypes.TFileTimeEx): Boolean;
// On success returns True.
function mbFileSetTime(const FileName: String;
ModificationTime: DCBasicTypes.TFileTime;
CreationTime : DCBasicTypes.TFileTime = 0;
LastAccessTime : DCBasicTypes.TFileTime = 0): Boolean;
// nanoseconds supported
function mbFileSetTimeEx(const FileName: String;
ModificationTime: DCBasicTypes.TFileTimeEx;
CreationTime : DCBasicTypes.TFileTimeEx;
LastAccessTime : DCBasicTypes.TFileTimeEx): 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.
@ -208,6 +244,7 @@ function mbFileSize(const FileName: String): Int64;
function FileGetSize(Handle: System.THandle): Int64;
function FileFlush(Handle: System.THandle): Boolean;
function FileFlushData(Handle: System.THandle): Boolean;
function FileIsReadOnlyEx(Handle: System.THandle): Boolean;
function FileAllocate(Handle: System.THandle; Size: Int64): Boolean;
{ Directory handling functions}
function mbGetCurrentDir: String;
@ -237,6 +274,7 @@ function mbGetEnvironmentString(Index : Integer) : String;
function mbExpandEnvironmentStrings(const FileName: String): String;
function mbGetEnvironmentVariable(const sName: String): String;
function mbSetEnvironmentVariable(const sName, sValue: String): Boolean;
function mbUnsetEnvironmentVariable(const sName: String): Boolean;
function mbSysErrorMessage: String; overload; inline;
function mbSysErrorMessage(ErrorCode: Integer): String; overload;
{en
@ -244,6 +282,7 @@ function mbSysErrorMessage(ErrorCode: Integer): String; overload;
}
function mbGetModuleName(Address: Pointer = nil): String;
function mbLoadLibrary(const Name: String): TLibHandle;
function mbLoadLibraryEx(const Name: String): TLibHandle;
function SafeGetProcAddress(Lib: TLibHandle; const ProcName: AnsiString): Pointer;
{en
Reads the concrete file's name that the link points to.
@ -277,7 +316,7 @@ function CreateHardLink(const Path, LinkName: String) : Boolean;
@param(LinkName Name of symbolic link)
@returns(The function returns @true if successful, @false otherwise)
}
function CreateSymLink(const Path, LinkName: string) : Boolean;
function CreateSymLink(const Path, LinkName: string; Attr: UInt32 = faInvalidAttributes) : Boolean;
{en
Read destination of symbolic link
@param(LinkName Name of symbolic link)
@ -301,6 +340,9 @@ uses
{$ENDIF}
{$IF DEFINED(UNIX)}
Unix, dl,
{$ENDIF}
{$IF DEFINED(DARWIN)}
LazFileUtils,
{$ENDIF}
DCStrUtils, LazUTF8;
@ -365,8 +407,6 @@ const
O_SYNC or O_DIRECT);
{$ENDIF}
(*Is Directory*)
function FPS_ISDIR(iAttr: TFileAttrs) : Boolean; inline;
{$IFDEF MSWINDOWS}
begin
@ -374,12 +414,10 @@ begin
end;
{$ELSE}
begin
Result := BaseUnix.FPS_ISDIR(iAttr);
Result := BaseUnix.FPS_ISDIR(TMode(iAttr));
end;
{$ENDIF}
(*Is Link*)
function FPS_ISLNK(iAttr: TFileAttrs) : Boolean; inline;
{$IFDEF MSWINDOWS}
begin
@ -387,7 +425,18 @@ begin
end;
{$ELSE}
begin
Result := BaseUnix.FPS_ISLNK(iAttr);
Result := BaseUnix.FPS_ISLNK(TMode(iAttr));
end;
{$ENDIF}
function FPS_ISREG(iAttr: TFileAttrs) : Boolean; inline;
{$IFDEF MSWINDOWS}
begin
Result := (iAttr and FILE_ATTRIBUTE_DIRECTORY = 0);
end;
{$ELSE}
begin
Result := BaseUnix.FPS_ISREG(TMode(iAttr));
end;
{$ENDIF}
@ -468,54 +517,59 @@ function mbFileCopyAttr(const sSrc, sDst: String;
): TCopyAttributesOptions;
{$IFDEF MSWINDOWS}
var
Attr : TFileAttrs;
Attr: TWin32FileAttributeData;
Option: TCopyAttributesOption;
ModificationTime, CreationTime, LastAccessTime: DCBasicTypes.TFileTime;
begin
Result := [];
if not GetFileAttributesExW(PWideChar(UTF16LongName(sSrc)), GetFileExInfoStandard, @Attr) then
begin
Result := Options;
if Assigned(Errors) then
begin
for Option in Result do
Errors^[Option]:= GetLastOSError;
end;
Exit;
end;
if [caoCopyAttributes, caoCopyAttrEx] * Options <> [] then
begin
Attr := mbFileGetAttr(sSrc);
if Attr <> faInvalidAttributes then
if (not (caoCopyAttributes in Options)) and (Attr.dwFileAttributes and faDirectory = 0) then
Attr.dwFileAttributes := (Attr.dwFileAttributes or faArchive);
if (caoRemoveReadOnlyAttr in Options) and ((Attr.dwFileAttributes and faReadOnly) <> 0) then
Attr.dwFileAttributes := (Attr.dwFileAttributes and not faReadOnly);
if not mbFileSetAttr(sDst, Attr.dwFileAttributes) then
begin
if (not (caoCopyAttributes in Options)) and (Attr and faDirectory = 0) then
Attr := (Attr or faArchive);
if (caoRemoveReadOnlyAttr in Options) and ((Attr and faReadOnly) <> 0) then
Attr := (Attr and not faReadOnly);
if not mbFileSetAttr(sDst, Attr) then
begin
Include(Result, caoCopyAttributes);
if Assigned(Errors) then Errors^[caoCopyAttributes]:= GetLastOSError;
end;
end
else begin
Include(Result, caoCopyAttributes);
if Assigned(Errors) then Errors^[caoCopyAttributes]:= GetLastOSError;
end;
end;
if caoCopyXattributes in Options then
if not FPS_ISLNK(Attr.dwFileAttributes) then
begin
if not mbFileCopyXattr(sSrc, sDst) then
if (caoCopyXattributes in Options) then
begin
Include(Result, caoCopyXattributes);
if Assigned(Errors) then Errors^[caoCopyXattributes]:= GetLastOSError;
if not mbFileCopyXattr(sSrc, sDst) then
begin
Include(Result, caoCopyXattributes);
if Assigned(Errors) then Errors^[caoCopyXattributes]:= GetLastOSError;
end;
end;
end;
if [caoCopyTime, caoCopyTimeEx] * Options <> [] then
begin
if not mbFileGetTime(sSrc, ModificationTime, CreationTime, LastAccessTime) then
if ([caoCopyTime, caoCopyTimeEx] * Options <> []) then
begin
Include(Result, caoCopyTime);
if Assigned(Errors) then Errors^[caoCopyTime]:= GetLastOSError;
end
else begin
if not (caoCopyTime in Options) then
begin
CreationTime:= 0;
LastAccessTime:= 0;
end
else begin
CreationTime:= DCBasicTypes.TFileTime(Attr.ftCreationTime);
LastAccessTime:= DCBasicTypes.TFileTime(Attr.ftLastAccessTime);
end;
ModificationTime:= DCBasicTypes.TFileTime(Attr.ftLastWriteTime);
if not mbFileSetTime(sDst, ModificationTime, CreationTime, LastAccessTime) then
begin
@ -537,11 +591,13 @@ end;
{$ELSE} // *nix
var
Option: TCopyAttributesOption;
StatInfo : BaseUnix.Stat;
utb : BaseUnix.TUTimBuf;
StatInfo : TDCStat;
modificationTime: TFileTimeEx;
creationTime: TFileTimeEx;
lastAccessTime: TFileTimeEx;
mode : TMode;
begin
if fpLStat(UTF8ToSys(sSrc), StatInfo) < 0 then
if DC_fpLStat(UTF8ToSys(sSrc), StatInfo) < 0 then
begin
Result := Options;
if Assigned(Errors) then
@ -563,14 +619,33 @@ begin
if Assigned(Errors) then Errors^[caoCopyOwnership]:= GetLastOSError;
end;
end;
if caoCopyTime in Options then
begin
if DC_SymLinkSetTime(sDst, StatInfo.mtime, StatInfo.atime) = false then
begin
Include(Result, caoCopyTime);
if Assigned(Errors) then Errors^[caoCopyTime]:= GetLastOSError;
end;
end;
{$IF DEFINED(HAIKU)}
if caoCopyXattributes in Options then
begin
if not mbFileCopyXattr(sSrc, sDst) then
begin
Include(Result, caoCopyXattributes);
if Assigned(Errors) then Errors^[caoCopyXattributes]:= GetLastOSError;
end;
end;
{$ENDIF}
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
modificationTime:= StatInfo.mtime;
lastAccessTime:= StatInfo.atime;
creationTime:= StatInfo.birthtime;
if DC_FileSetTime(sDst, modificationTime, creationTime, lastAccessTime) = false then
begin
Include(Result, caoCopyTime);
if Assigned(Errors) then Errors^[caoCopyTime]:= GetLastOSError;
@ -598,7 +673,7 @@ begin
end;
end;
{$IFDEF LINUX}
{$IF DEFINED(LINUX) or DEFINED(DARWIN) or DEFINED(HAIKU)}
if caoCopyXattributes in Options then
begin
if not mbFileCopyXattr(sSrc, sDst) then
@ -613,22 +688,65 @@ begin
end;
{$ENDIF}
function GetTempName(PathPrefix: String): String;
function GetTempName(PathPrefix: String; Extension: String): String;
const
MaxTries = 100;
var
FileName: String;
TryNumber: Integer = 0;
begin
if PathPrefix = '' then
PathPrefix := GetTempDir;
PathPrefix := GetTempDir
else begin
FileName:= ExtractOnlyFileName(PathPrefix);
PathPrefix:= ExtractFilePath(PathPrefix);
// Generated file name should be less the maximum file name length
if (Length(FileName) > 0) then PathPrefix += UTF8Copy(FileName, 1, 48) + '~';
end;
if (Length(Extension) > 0) then
begin
if (not StrBegins(Extension, ExtensionSeparator)) then
Extension := ExtensionSeparator + Extension;
end;
repeat
Result := PathPrefix + IntToStr(System.Random(MaxInt)); // or use CreateGUID()
Result := PathPrefix + IntToStr(System.Random(MaxInt)) + Extension;
Inc(TryNumber);
if TryNumber = MaxTries then
Exit('');
until not mbFileSystemEntryExists(Result);
end;
function FindInSystemPath(var FileName: String): Boolean;
var
I: Integer;
Path, FullName: String;
Value: TDynamicStringArray;
begin
Path:= mbGetEnvironmentVariable('PATH');
Value:= SplitString(Path, PathSeparator);
for I:= Low(Value) to High(Value) do
begin
FullName:= IncludeTrailingPathDelimiter(Value[I]) + FileName;
if mbFileExists(FullName) then
begin
FileName:= FullName;
Exit(True);
end;
end;
Result:= False;
end;
function ExtractRootDir(const FileName: String): String;
{$IFDEF UNIX}
begin
Result:= ExcludeTrailingPathDelimiter(FindMountPointPath(ExcludeTrailingPathDelimiter(FileName)));
end;
{$ELSE}
begin
Result:= ExtractFileDrive(FileName);
end;
{$ENDIF}
function MapFile(const sFileName : String; out FileMapRec : TFileMapRec) : Boolean;
{$IFDEF MSWINDOWS}
begin
@ -743,6 +861,17 @@ begin
end;
{$ENDIF}
function NormalizeFileName(const Source: String): String; inline;
{$IF DEFINED(DARWIN)}
begin
Result:= GetDarwinNormalizedFileName(Source);
end;
{$ELSE}
begin
Result:= Source;
end;
{$ENDIF}
function ConsoleToUTF8(const Source: String): RawByteString;
{$IFDEF MSWINDOWS}
begin
@ -766,12 +895,14 @@ begin
if (Mode and fmOpenNoATime <> 0) then
begin
if (Result <> feInvalidHandle) then
SetFileTime(Result, nil, @ft, @ft)
SetFileTime(Result, nil, @ft, nil)
else if GetLastError = ERROR_ACCESS_DENIED then
Result := mbFileOpen(FileName, Mode and not fmOpenNoATime);
end;
end;
{$ELSE}
var
Info: BaseUnix.Stat;
begin
repeat
Result:= fpOpen(UTF8ToSys(FileName), AccessModes[Mode and 3] or
@ -780,7 +911,28 @@ begin
if Result <> feInvalidHandle then
begin
FileCloseOnExec(Result);
Result:= FileLock(Result, Mode and $FF);
if (Mode and fmOpenSpecial = 0) then
begin
if fpFStat(Result, Info) = 0 then
begin
if FPS_ISFIFO(Info.st_mode) then
begin
FileClose(Result);
errno:= ESysEINVAL;
Exit(feInvalidHandle);
end;
end;
end;
{$IF DEFINED(DARWIN)}
if (Mode and (fmOpenSync or fmOpenDirect) <> 0) then
begin
if (FpFcntl(Result, F_NOCACHE, 1) = -1) then
begin
FileClose(Result);
Exit(feInvalidHandle);
end;
end;
{$ENDIF}
end;
end;
{$ENDIF}
@ -811,7 +963,16 @@ begin
if Result <> feInvalidHandle then
begin
FileCloseOnExec(Result);
Result:= FileLock(Result, Mode and $FF);
{$IF DEFINED(DARWIN)}
if (Mode and (fmOpenSync or fmOpenDirect) <> 0) then
begin
if (FpFcntl(Result, F_NOCACHE, 1) = -1) then
begin
FileClose(Result);
Exit(feInvalidHandle);
end;
end;
{$ENDIF}
end;
end;
{$ENDIF}
@ -822,31 +983,38 @@ var
Handle: System.THandle;
FindData: TWin32FindDataW;
begin
Handle := FindFirstFileW(PWideChar(UTF16LongName(FileName)), FindData);
Handle:= FindFirstFileW(PWideChar(UTF16LongName(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;
begin
Windows.FindClose(Handle);
Exit(DCBasicTypes.TFileTime(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}
Result:= DCBasicTypes.TFileTime(Info.st_mtime)
else begin
Result:= DCBasicTypes.TFileTime(-1);
end;
end;
{$ENDIF}
function mbFileGetTime(const FileName: String): DCBasicTypes.TFileTimeEx;
var
CreationTime, LastAccessTime: DCBasicTypes.TFileTimeEx;
begin
if not mbFileGetTime(FileName, Result, CreationTime, LastAccessTime) then
Result:= TFileTimeExNull;
end;
function mbFileGetTime(const FileName: String;
var ModificationTime: DCBasicTypes.TFileTime;
var CreationTime : DCBasicTypes.TFileTime;
var LastAccessTime : DCBasicTypes.TFileTime): Boolean;
var ModificationTime: DCBasicTypes.TFileTimeEx;
var CreationTime : DCBasicTypes.TFileTimeEx;
var LastAccessTime : DCBasicTypes.TFileTimeEx): Boolean;
{$IFDEF MSWINDOWS}
var
Handle: System.THandle;
@ -872,14 +1040,18 @@ begin
end;
{$ELSE}
var
StatInfo : BaseUnix.Stat;
StatInfo : TDCStat;
begin
Result := fpLStat(UTF8ToSys(FileName), StatInfo) >= 0;
Result := DC_fpLStat(UTF8ToSys(FileName), StatInfo) >= 0;
if Result then
begin
LastAccessTime := StatInfo.st_atime;
ModificationTime := StatInfo.st_mtime;
CreationTime := StatInfo.st_ctime;
ModificationTime:= StatInfo.mtime;
LastAccessTime:= StatInfo.atime;
{$IF DEFINED(DARWIN)}
CreationTime:= StatInfo.birthtime;
{$ELSE}
CreationTime:= StatInfo.ctime;
{$ENDIF}
end;
end;
{$ENDIF}
@ -889,6 +1061,27 @@ function mbFileSetTime(const FileName: String;
CreationTime : DCBasicTypes.TFileTime = 0;
LastAccessTime : DCBasicTypes.TFileTime = 0): Boolean;
{$IFDEF MSWINDOWS}
begin
Result:= mbFileSetTimeEx(FileName, ModificationTime, CreationTime, LastAccessTime);
end;
{$ELSE}
var
NewModificationTime: DCBasicTypes.TFileTimeEx;
NewCreationTime : DCBasicTypes.TFileTimeEx;
NewLastAccessTime : DCBasicTypes.TFileTimeEx;
begin
NewModificationTime:= specialize IfThen<TFileTimeEx>(ModificationTime<>0, TFileTimeEx.create(ModificationTime), TFileTimeExNull);
NewCreationTime:= specialize IfThen<TFileTimeEx>(CreationTime<>0, TFileTimeEx.create(CreationTime), TFileTimeExNull);
NewLastAccessTime:= specialize IfThen<TFileTimeEx>(LastAccessTime<>0, TFileTimeEx.create(LastAccessTime), TFileTimeExNull);
Result:= mbFileSetTimeEx(FileName, NewModificationTime, NewCreationTime, NewLastAccessTime);
end;
{$ENDIF}
function mbFileSetTimeEx(const FileName: String;
ModificationTime: DCBasicTypes.TFileTimeEx;
CreationTime : DCBasicTypes.TFileTimeEx;
LastAccessTime : DCBasicTypes.TFileTimeEx): Boolean;
{$IFDEF MSWINDOWS}
var
Handle: System.THandle;
PWinModificationTime: Windows.LPFILETIME = nil;
@ -929,14 +1122,14 @@ begin
end;
{$ELSE}
var
t: TUTimBuf;
CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime: DCBasicTypes.TFileTime;
CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime: DCBasicTypes.TFileTimeEx;
begin
if mbFileGetTime(FileName,CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime) then
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);
if ModificationTime<>TFileTimeExNull then CurrentModificationTime:= ModificationTime;
if CreationTime<>TFileTimeExNull then CurrentCreationTime:= CreationTime;
if LastAccessTime<>TFileTimeExNull then CurrentLastAccessTime:= LastAccessTime;
Result := DC_FileSetTime(FileName, CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime);
end
else
begin
@ -1120,11 +1313,27 @@ end;
function mbRenameFile(const OldName: String; NewName: String): Boolean;
{$IFDEF MSWINDOWS}
var
wOldName,
wNewName: UnicodeString;
wTmpName,
wOldName, wNewName: UnicodeString;
begin
wNewName:= UTF16LongName(NewName);
wOldName:= UTF16LongName(OldName);
// Workaround: Windows >= 10 can't change only filename case on the FAT
if (Win32MajorVersion >= 10) and UnicodeSameText(wOldName, wNewName) then
begin
wTmpName:= GetFileSystemType(OldName);
if UnicodeSameText('FAT32', wTmpName) or UnicodeSameText('exFAT', wTmpName) then
begin
wTmpName:= UTF16LongName(GetTempName(OldName));
Result:= MoveFileExW(PWChar(wOldName), PWChar(wTmpName), 0);
if Result then
begin
Result:= MoveFileExW(PWChar(wTmpName), PWChar(wNewName), 0);
if not Result then MoveFileExW(PWChar(wTmpName), PWChar(wOldName), 0);
end;
Exit;
end;
end;
Result:= MoveFileExW(PWChar(wOldName), PWChar(wNewName), MOVEFILE_REPLACE_EXISTING);
end;
{$ELSE}
@ -1157,8 +1366,10 @@ begin
// (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
// subdirectories" ("number of all entries" under macOS) in that directory,
// plus its special entries '.' and '..';
// hard links to directories are not supported on Linux
// or Windows anyway (on macOS 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
@ -1172,14 +1383,7 @@ 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
@ -1274,14 +1478,48 @@ begin
end;
{$ENDIF}
function FileIsReadOnlyEx(Handle: System.THandle): Boolean;
{$IF DEFINED(MSWINDOWS)}
var
Info: BY_HANDLE_FILE_INFORMATION;
begin
if GetFileInformationByHandle(Handle, Info) then
Result:= (Info.dwFileAttributes and (faReadOnly or faHidden or faSysFile) <> 0)
else
Result:= False;
end;
{$ELSEIF DEFINED(LINUX)}
var
Flags: UInt32;
begin
if FileGetFlags(Handle, Flags) then
begin
if (Flags and (FS_IMMUTABLE_FL or FS_APPEND_FL) <> 0) then
Exit(True);
end;
Result:= False;
end;
{$ELSE}
begin
Result:= False;
end;
{$ENDIF}
function FileAllocate(Handle: System.THandle; Size: Int64): Boolean;
{$IF DEFINED(LINUX)}
var
Ret: cint;
Sta: TStat;
StaFS: TStatFS;
begin
if (Size > 0) then
begin
repeat
Ret:= fpfStatFS(Handle, @StaFS);
until (Ret <> -1) or (fpgeterrno <> ESysEINTR);
// FAT32 does not support a fast allocation
if (StaFS.fstype = MSDOS_SUPER_MAGIC) then
Exit(False);
repeat
Ret:= fpFStat(Handle, Sta);
until (Ret <> -1) or (fpgeterrno <> ESysEINTR);
@ -1291,7 +1529,7 @@ begin
Sta.st_size:= (Size + Sta.st_blksize - 1) and not (Sta.st_blksize - 1);
repeat
Ret:= fpFAllocate(Handle, 0, 0, Sta.st_size);
until (Ret <> -1) or (fpgeterrno <> ESysEINTR) or (fpgeterrno <> ESysEAGAIN);
until (Ret <> -1) or (fpgeterrno <> ESysEINTR);
end;
end;
Result:= FileTruncate(Handle, Size);
@ -1408,14 +1646,22 @@ begin
Result := mbFileGetAttr(Path) <> faInvalidAttributes;
end;
function mbCompareFileNames(const FileName1, FileName2: String): Boolean; inline;
{$IF DEFINED(WINDOWS) OR DEFINED(DARWIN)}
function mbCompareFileNames(const FileName1, FileName2: String): Boolean;
{$IF DEFINED(DARWIN)}
begin
Result:= (WideCompareText(UTF8Decode(FileName1), UTF8Decode(FileName2)) = 0);
if (Length(FileName1) = 0) or (Length(FileName2) = 0) then
Result:= (FileName1 = FileName2)
else begin
Result:= CompareFilenamesIgnoreCase(FileName1, FileName2) = 0;
end;
end;
{$ELSEIF DEFINED(MSWINDOWS)}
begin
Result:= (UnicodeCompareText(CeUtf8ToUtf16(FileName1), CeUtf8ToUtf16(FileName2)) = 0);
end;
{$ELSE}
begin
Result:= (WideCompareStr(UTF8Decode(FileName1), UTF8Decode(FileName2)) = 0);
Result:= (UnicodeCompareStr(CeUtf8ToUtf16(FileName1), CeUtf8ToUtf16(FileName2)) = 0);
end;
{$ENDIF}
@ -1531,7 +1777,7 @@ var
wsResult: UnicodeString;
begin
SetLength(wsResult, MaxSmallInt + 1);
dwSize:= ExpandEnvironmentStringsW(PWideChar(UTF8Decode(FileName)), PWideChar(wsResult), MaxSmallInt);
dwSize:= ExpandEnvironmentStringsW(PWideChar(CeUtf8ToUtf16(FileName)), PWideChar(wsResult), MaxSmallInt);
if (dwSize = 0) or (dwSize > MaxSmallInt) then
Result:= FileName
else begin
@ -1554,7 +1800,7 @@ begin
if EqualPos = 0 then Continue;
EnvName:= Copy(EnvVar, 1, EqualPos - 1);
EnvValue:= Copy(EnvVar, EqualPos + 1, MaxInt);
Result:= StringReplace(Result, '$' + EnvName, EnvValue, [rfReplaceAll, rfIgnoreCase]);
Result:= StringReplace(Result, '$' + EnvName, EnvValue, [rfReplaceAll]);
Inc(Index);
end;
end;
@ -1569,7 +1815,7 @@ var
dwResult: DWORD;
begin
Result := EmptyStr;
wsName := UTF8Decode(sName);
wsName := CeUtf8ToUtf16(sName);
dwResult := GetEnvironmentVariableW(PWideChar(wsName), @smallBuf[0], Length(smallBuf));
if dwResult > Length(smallBuf) then
begin
@ -1599,8 +1845,8 @@ var
wsName,
wsValue: UnicodeString;
begin
wsName:= UTF8Decode(sName);
wsValue:= UTF8Decode(sValue);
wsName:= CeUtf8ToUtf16(sName);
wsValue:= CeUtf8ToUtf16(sValue);
Result:= SetEnvironmentVariableW(PWideChar(wsName), PWideChar(wsValue));
end;
{$ELSE}
@ -1609,6 +1855,20 @@ begin
end;
{$ENDIF}
function mbUnsetEnvironmentVariable(const sName: String): Boolean;
{$IFDEF MSWINDOWS}
var
wsName: UnicodeString;
begin
wsName:= CeUtf8ToUtf16(sName);
Result:= SetEnvironmentVariableW(PWideChar(wsName), NIL);
end;
{$ELSE}
begin
Result:= (unsetenv(PAnsiChar(CeUtf8ToSys(sName))) = 0);
end;
{$ENDIF}
function mbSysErrorMessage: String;
begin
Result := mbSysErrorMessage(GetLastOSError);
@ -1657,21 +1917,74 @@ end;
function mbLoadLibrary(const Name: String): TLibHandle;
{$IFDEF MSWINDOWS}
var
dwMode: DWORD;
dwErrCode: DWORD;
sRememberPath: String;
begin
dwMode:= SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOOPENFILEERRORBOX);
try
//Some plugins using DLL(s) in their directory are loaded correctly only if "CurrentDir" is poining their location.
//Also, TC switch "CurrentDir" to their directory when loading them. So let's do the same.
sRememberPath:=GetCurrentDir;
SetCurrentDir(ExcludeTrailingPathDelimiter(ExtractFilePath(Name)));
Result:= LoadLibraryW(PWideChar(UTF8Decode(Name)));
// Some plugins using DLL(s) in their directory are loaded correctly only if "CurrentDir" is poining their location.
// Also, TC switch "CurrentDir" to their directory when loading them. So let's do the same.
sRememberPath:= GetCurrentDir;
SetCurrentDir(ExtractFileDir(Name));
Result:= SafeLoadLibrary(CeUtf8ToUtf16(Name));
dwErrCode:= GetLastError;
finally
SetErrorMode(dwMode);
SetCurrentDir(sRememberPath);
SetLastError(dwErrCode);
end;
end;
{$ELSE}
begin
Result:= TLibHandle(dlopen(PChar(UTF8ToSys(Name)), RTLD_LAZY));
Result:= SafeLoadLibrary(CeUtf8ToSys(Name));
end;
{$ENDIF}
function mbLoadLibraryEx(const Name: String): TLibHandle;
{$IF DEFINED(MSWINDOWS)}
const
PATH_ENV = 'PATH';
var
dwFlags:DWORD;
APath: String;
APathType: TPathType;
usName: UnicodeString;
begin
usName:= CeUtf8ToUtf16(Name);
APathType:= GetPathType(Name);
if CheckWin32Version(10) or (GetProcAddress(GetModuleHandleW(Kernel32), 'AddDllDirectory') <> nil) then
begin
if APathType <> ptAbsolute then
dwFlags:= 0
else begin
dwFlags:= LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR;
end;
Result:= LoadLibraryExW(PWideChar(usName), 0, dwFlags or LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
end
else begin
APath:= mbGetEnvironmentVariable(PATH_ENV);
try
if APathType <> ptAbsolute then
SetDllDirectoryW(PWideChar(''))
else begin
SetDllDirectoryW(PWideChar(ExtractFileDir(usName)));
end;
try
SetEnvironmentVariableW(PATH_ENV, nil);
Result:= LoadLibraryW(PWideChar(usName));
finally
SetDllDirectoryW(nil);
end;
finally
mbSetEnvironmentVariable(PATH_ENV, APath);
end;
end;
end;
{$ELSE}
begin
Result:= SafeLoadLibrary(CeUtf8ToSys(Name));
end;
{$ENDIF}
@ -1782,14 +2095,14 @@ begin
end;
{$ENDIF}
function CreateSymLink(const Path, LinkName: string) : Boolean;
function CreateSymLink(const Path, LinkName: string; Attr: UInt32): Boolean;
{$IFDEF MSWINDOWS}
var
wsPath, wsLinkName: UnicodeString;
begin
wsPath:= UTF8Decode(Path);
wsPath:= CeUtf8ToUtf16(Path);
wsLinkName:= UTF16LongName(LinkName);
Result:= DCNtfsLinks.CreateSymlink(wsPath, wsLinkName);
Result:= DCNtfsLinks.CreateSymlink(wsPath, wsLinkName, Attr);
end;
{$ELSE}
begin

Some files were not shown because too many files have changed in this diff Show more