Martin Prikryl 21 years ago
parent
commit
6664ffbdd1
100 changed files with 1005 additions and 2340 deletions
  1. 3 3
      DragExt.bpr
  2. BIN
      DragExt.res
  3. 5 5
      WinSCP3.bpr
  4. BIN
      WinSCP3.res
  5. 55 12
      components/UnixDriveView.cpp
  6. 4 1
      components/UnixDriveView.h
  7. 6 6
      core/Common.cpp
  8. 13 1
      core/FileOperationProgress.cpp
  9. 1 0
      core/FileOperationProgress.h
  10. 10 32
      core/HierarchicalStorage.cpp
  11. 4 2
      core/HierarchicalStorage.h
  12. 22 10
      core/RemoteFiles.cpp
  13. 9 2
      core/RemoteFiles.h
  14. 3 3
      core/ScpFileSystem.cpp
  15. 117 74
      core/SessionData.cpp
  16. 6 5
      core/SessionData.h
  17. 21 14
      core/SftpFileSystem.cpp
  18. 3 3
      core/SftpFileSystem.h
  19. 9 10
      core/Terminal.cpp
  20. 50 128
      forms/CustomScpExplorer.cpp
  21. 5 12
      forms/CustomScpExplorer.h
  22. 5 0
      forms/FullSynchronize.cpp
  23. 1 0
      forms/FullSynchronize.dfm
  24. 1 0
      forms/FullSynchronize.h
  25. 3 1
      forms/Login.cpp
  26. 9 9
      forms/Login.dfm
  27. 4 0
      forms/MessageDlg.cpp
  28. 0 880
      forms/NonVisual.cpp.bak
  29. 4 8
      forms/ScpCommander.cpp
  30. 0 249
      forms/ScpCommander.h.bak
  31. 6 0
      forms/Synchronize.cpp
  32. 1 0
      forms/Synchronize.dfm
  33. 1 0
      forms/Synchronize.h
  34. 0 123
      general/DragDrop_B5.bpk
  35. 0 139
      general/DriveDir_B5.bpk
  36. 0 128
      general/Moje_B5.bpk
  37. BIN
      general/filemanager toolset/DirImg.res
  38. 0 352
      general/moje komponenty/CompThread.pas
  39. 2 2
      makefile
  40. 123 0
      packages/DragDrop_B5.bpk
  41. 0 0
      packages/DragDrop_B5.cpp
  42. 0 0
      packages/DragDrop_B5.res
  43. 139 0
      packages/DriveDir_B5.bpk
  44. 0 0
      packages/DriveDir_B5.cpp
  45. 0 0
      packages/DriveDir_B5.res
  46. 128 0
      packages/Moje_B5.bpk
  47. 0 0
      packages/Moje_B5.cpp
  48. 0 0
      packages/Moje_B5.res
  49. 0 0
      packages/dragndrop/DragDrop.dcr
  50. 0 0
      packages/dragndrop/DragDrop.pas
  51. 0 0
      packages/dragndrop/DragDropBitmap.dcr
  52. 0 0
      packages/dragndrop/DragDropBitmap.pas
  53. 0 0
      packages/dragndrop/DragDropFiles.dcr
  54. 0 0
      packages/dragndrop/DragDropFiles.pas
  55. 0 0
      packages/dragndrop/DragDropFilesEx.dcr
  56. 0 0
      packages/dragndrop/DragDropFilesEx.pas
  57. 0 0
      packages/dragndrop/DragDropText.dcr
  58. 0 0
      packages/dragndrop/DragDropText.pas
  59. 0 0
      packages/dragndrop/DragDropURL.dcr
  60. 0 0
      packages/dragndrop/DragDropURL.pas
  61. 0 0
      packages/dragndrop/Index.htm
  62. 0 0
      packages/dragndrop/ListSort.dcr
  63. 0 0
      packages/dragndrop/ListSort.pas
  64. 0 0
      packages/dragndrop/PIDL.pas
  65. 0 0
      packages/dragndrop/TDragDrop.htm
  66. 0 0
      packages/dragndrop/TDragDropBitmap.htm
  67. 0 0
      packages/dragndrop/TDragDropFiles.htm
  68. 0 0
      packages/dragndrop/TDragDropFilesEx.htm
  69. 0 0
      packages/dragndrop/TDragDropText.htm
  70. 0 0
      packages/dragndrop/TDragDropURL.htm
  71. 0 0
      packages/filemng/BaseUtils.pas
  72. 1 0
      packages/filemng/CustomDirView.hpp
  73. 48 30
      packages/filemng/CustomDirView.pas
  74. 7 0
      packages/filemng/CustomDriveView.hpp
  75. 87 5
      packages/filemng/CustomDriveView.pas
  76. 0 0
      packages/filemng/CustomPathComboBox.pas
  77. 0 0
      packages/filemng/CustomUnixDirView.pas
  78. 0 0
      packages/filemng/DirImg.rc
  79. 0 0
      packages/filemng/DirView.dcr
  80. 3 1
      packages/filemng/DirView.hpp
  81. 8 0
      packages/filemng/DirView.pas
  82. 0 0
      packages/filemng/DirViewColProperties.pas
  83. 0 0
      packages/filemng/DriveView.dcr
  84. 0 1
      packages/filemng/DriveView.hpp
  85. 78 89
      packages/filemng/DriveView.pas
  86. 0 0
      packages/filemng/FileChanges.pas
  87. 0 0
      packages/filemng/FileOperator.dcr
  88. 0 0
      packages/filemng/FileOperator.pas
  89. 0 0
      packages/filemng/IEComboBox.dcr
  90. 0 0
      packages/filemng/IEComboBox.pas
  91. 0 0
      packages/filemng/IEDriveInfo.pas
  92. 0 0
      packages/filemng/IEListView.pas
  93. 0 0
      packages/filemng/IEPathComboBox.pas
  94. 0 0
      packages/filemng/ListExt.pas
  95. 0 0
      packages/filemng/MaskSearch.pas
  96. 0 0
      packages/filemng/PIDL.pas
  97. 0 0
      packages/filemng/ResStrings.pas
  98. 0 0
      packages/filemng/ShellDialogs.pas
  99. 0 0
      packages/filemng/UnixDirViewColProperties.pas
  100. 0 0
      packages/my/AssociatedStatusBar.pas

+ 3 - 3
DragExt.bpr

@@ -62,7 +62,7 @@ AutoIncBuild=1
 MajorVer=1
 MinorVer=1
 Release=2
-Build=38
+Build=39
 Debug=0
 PreRelease=0
 Special=0
@@ -74,13 +74,13 @@ CodePage=1252
 [Version Info Keys]
 CompanyName=Martin Prikryl
 FileDescription=Drag&Drop shell extension for WinSCP
-FileVersion=1.1.2.38
+FileVersion=1.1.2.39
 InternalName=dragext
 LegalCopyright=(c) 2004 Martin Prikryl
 LegalTrademarks=
 OriginalFilename=dragext.dll
 ProductName=WinSCP
-ProductVersion=3.6.5.0
+ProductVersion=3.6.6.0
 Comments=
 WWW=http://winscp.sourceforge.net/
 

BIN
DragExt.res


+ 5 - 5
WinSCP3.bpr

@@ -99,8 +99,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=6
-Release=5
-Build=232
+Release=6
+Build=234
 Debug=0
 PreRelease=0
 Special=0
@@ -112,13 +112,13 @@ CodePage=1252
 [Version Info Keys]
 CompanyName=Martin Prikryl
 FileDescription=Windows SCP/SFTP client
-FileVersion=3.6.5.232
+FileVersion=3.6.6.234
 InternalName=winscp3
 LegalCopyright=(c) 2000-2004 Martin Prikryl
 LegalTrademarks=
-OriginalFilename=winscp365.exe
+OriginalFilename=winscp366.exe
 ProductName=WinSCP
-ProductVersion=3.6.5.0
+ProductVersion=3.6.6.0
 WWW=http://winscp.sourceforge.net/
 
 [Compiler]

BIN
WinSCP3.res


+ 55 - 12
components/UnixDriveView.cpp

@@ -48,11 +48,16 @@ __fastcall TCustomUnixDriveView::TCustomUnixDriveView(TComponent* Owner) :
   FPrevSelected = NULL;
   DDAllowMove = false;
   FShowInaccesibleDirectories = true;
+  FDummyDragFile = NULL;
 }
 //---------------------------------------------------------------------------
 __fastcall TCustomUnixDriveView::~TCustomUnixDriveView()
 {
   Terminal = NULL;
+  if (FDummyDragFile != NULL)
+  {
+    SAFE_DESTROY(FDummyDragFile);
+  }
 }
 //---------------------------------------------------------------------------
 void __fastcall TCustomUnixDriveView::CreateWnd()
@@ -340,6 +345,22 @@ TRemoteFile * __fastcall TCustomUnixDriveView::NodeFile(const TTreeNode * Node)
   return static_cast<TNodeData*>(Node->Data)->File;
 }
 //---------------------------------------------------------------------------
+TRemoteFile * __fastcall TCustomUnixDriveView::NodeFileForce(TTreeNode * Node)
+{
+  TRemoteFile * File = NodeFile(Node);
+
+  if (File == NULL)
+  {
+    SAFE_DESTROY(FDummyDragFile);
+    FDummyDragFile = new TRemoteDirectoryFile();
+    FDummyDragFile->FileName = Node->Text;
+    FDummyDragFile->FullFileName = NodePathName(Node);
+    File = FDummyDragFile;
+  }
+
+  return File;
+}
+//---------------------------------------------------------------------------
 void __fastcall TCustomUnixDriveView::Delete(TTreeNode * Node)
 {
   TNodeData * Data = NULL;
@@ -465,7 +486,7 @@ TStrings * __fastcall TCustomUnixDriveView::DragFileList()
   {
     #ifndef DESIGN_ONLY
     FileList->AddObject(ExcludeTrailingBackslash(NodePathName(DragNode)),
-      NodeFile(DragNode));
+      NodeFileForce(DragNode));
     #endif
   }
   catch(...)
@@ -498,25 +519,26 @@ AnsiString __fastcall TCustomUnixDriveView::NodePathName(TTreeNode * Node)
   return NodeData(Node)->Directory;
 }
 //---------------------------------------------------------------------------
-bool __fastcall TCustomUnixDriveView::NodeCanDrag(TTreeNode * Node)
+void __fastcall TCustomUnixDriveView::ClearDragFileList(TFileList * FileList)
 {
-  TRemoteFile * File = NodeFile(Node);
-  return (File != NULL);
+  if (FDummyDragFile != NULL)
+  {
+    SAFE_DESTROY(FDummyDragFile);
+  }
+  TCustomDriveView::ClearDragFileList(FileList);
 }
 //---------------------------------------------------------------------------
 void __fastcall TCustomUnixDriveView::AddToDragFileList(TFileList * FileList,
   TTreeNode * Node)
 {
-  TRemoteFile * File = NodeFile(Node);
-  if (File != NULL)
+  AnsiString FileName = NodePathName(Node);
+  TRemoteFile * File = NodeFileForce(Node);
+
+  if (OnDDDragFileName != NULL)
   {
-    AnsiString FileName = NodePathName(Node);
-    if (OnDDDragFileName != NULL)
-    {
-      OnDDDragFileName(this, File, FileName);
-    }
-    FileList->AddItem(NULL, FileName);
+    OnDDDragFileName(this, File, FileName);
   }
+  FileList->AddItem(NULL, FileName);
 }
 //---------------------------------------------------------------------------
 AnsiString __fastcall TCustomUnixDriveView::NodePath(TTreeNode * Node)
@@ -551,6 +573,27 @@ TColor __fastcall TCustomUnixDriveView::NodeColor(TTreeNode * Node)
   return Result;
 }
 //---------------------------------------------------------------------------
+Word __fastcall TCustomUnixDriveView::NodeOverlayIndexes(TTreeNode * Node)
+{
+#ifndef DESIGN_ONLY
+  Word Result = oiNoOverlay;
+  // Cannot query root node for file
+  if (Node->Parent != NULL)
+  {
+    TRemoteFile * File = NodeFile(Node);
+    if ((File != NULL) && (File->IsSymLink))
+    {
+      // broken link cannot probably happen anyway
+      // as broken links are treated as files
+      Result |= File->BrokenLink ? oiBrokenLink : oiLink;
+    }
+  }
+  return Result;
+#else
+  return 0;
+#endif
+}
+//---------------------------------------------------------------------------
 void __fastcall TCustomUnixDriveView::GetImageIndex(TTreeNode * Node)
 {
   TCustomDriveView::GetImageIndex(Node);

+ 4 - 1
components/UnixDriveView.h

@@ -46,6 +46,7 @@ protected:
   inline TNodeData * __fastcall NodeData(const TTreeNode * Node);
   inline TRemoteFileList * __fastcall NodeFileList(const TTreeNode * Node);
   inline TRemoteFile * __fastcall NodeFile(const TTreeNode * Node);
+  inline TRemoteFile * __fastcall NodeFileForce(TTreeNode * Node);
   inline bool __fastcall NodeIsHidden(const TTreeNode * Node);
   inline bool __fastcall NodeCanDelete(TTreeNode * Node);
 
@@ -63,9 +64,10 @@ protected:
 	virtual bool __fastcall NodeIsRecycleBin(TTreeNode * Node);
 	virtual bool __fastcall NodePathExists(TTreeNode * Node);
 	virtual TColor __fastcall NodeColor(TTreeNode * Node);
-	virtual bool __fastcall NodeCanDrag(TTreeNode * Node);
 	virtual TTreeNode * __fastcall FindPathNode(AnsiString Path);
   virtual void __fastcall GetImageIndex(TTreeNode * Node);
+  virtual Word __fastcall NodeOverlayIndexes(TTreeNode * Node);
+  virtual void __fastcall ClearDragFileList(TFileList * FileList);
   virtual void __fastcall AddToDragFileList(TFileList * FileList, TTreeNode * Node);
 
 	virtual void __fastcall ValidateDirectoryEx(TTreeNode * Node,
@@ -93,6 +95,7 @@ private:
   bool FDDAllowMove;
   TDDDragFileName FOnDDDragFileName;
   bool FShowInaccesibleDirectories;
+  TRemoteFile * FDummyDragFile;
 
   bool __fastcall IsRootNameStored();
   void __fastcall SetShowInaccesibleDirectories(bool value);

+ 6 - 6
core/Common.cpp

@@ -313,7 +313,7 @@ AnsiString __fastcall StrToHex(const AnsiString Str)
 //---------------------------------------------------------------------------
 AnsiString __fastcall HexToStr(const AnsiString Hex)
 {
-  static AnsiString Digits = "01234556789ABCDEF";
+  static AnsiString Digits = "0123456789ABCDEF";
   AnsiString Result;
   int L, P1, P2;
   L = Hex.Length();
@@ -715,14 +715,14 @@ int __fastcall CancelAnswer(int Answers)
   {
     Result = qaCancel;
   }
-  else if ((Answers & qaAbort) != 0)
-  {
-    Result = qaAbort;
-  }
   else if ((Answers & qaNo) != 0)
   {
     Result = qaNo;
   }
+  else if ((Answers & qaAbort) != 0)
+  {
+    Result = qaAbort;
+  }
   else if ((Answers & qaOK) != 0)
   {
     Result = qaOK;
@@ -730,7 +730,7 @@ int __fastcall CancelAnswer(int Answers)
   else
   {
     assert(false);
-    Result = qaOK;
+    Result = qaCancel;
   }
   return Result;
 }

+ 13 - 1
core/FileOperationProgress.cpp

@@ -217,7 +217,19 @@ void __fastcall TFileOperationProgressType::SetTransferSize(__int64 ASize)
 {
   TransferSize = ASize;
   DoProgress();
-} 
+}
+//---------------------------------------------------------------------------
+void __fastcall TFileOperationProgressType::ChangeTransferSize(__int64 ASize)
+{
+  // reflect change on file size (due to text transfer mode conversion particulary)
+  // on total transfer size
+  if (TotalSizeSet)
+  {
+    TotalSize += (ASize - TransferSize); 
+  }
+  TransferSize = ASize;
+  DoProgress();
+}
 //---------------------------------------------------------------------------
 void __fastcall TFileOperationProgressType::AddTransfered(__int64 ASize,
   bool AddToTotals)

+ 1 - 0
core/FileOperationProgress.h

@@ -93,6 +93,7 @@ public:
   void __fastcall SetAsciiTransfer(bool AAsciiTransfer);
   void __fastcall SetResumeStatus(TResumeStatus AResumeStatus);
   void __fastcall SetTransferSize(__int64 ASize);
+  void __fastcall ChangeTransferSize(__int64 ASize);
   void __fastcall SetTotalSize(__int64 ASize);
   void __fastcall Start(TFileOperation AOperation,
     TOperationSide ASide, int ACount, bool ADragDrop = false,

+ 10 - 32
core/HierarchicalStorage.cpp

@@ -117,38 +117,6 @@ bool __fastcall THierarchicalStorage::HasSubKeys()
   return Result;
 }
 //---------------------------------------------------------------------------
-bool __fastcall THierarchicalStorage::KeyExists(const AnsiString SubKey)
-{
-  bool Result;
-  TStrings * SubKeys = new TStringList();
-  try
-  {
-    GetSubKeyNames(SubKeys);
-    Result = (SubKeys->IndexOf(SubKey) >= 0);
-  }
-  __finally
-  {
-    delete SubKeys;
-  }
-  return Result;
-}
-//---------------------------------------------------------------------------
-bool __fastcall THierarchicalStorage::ValueExists(const AnsiString Value)
-{
-  bool Result;
-  TStrings * Values = new TStringList();
-  try
-  {
-    GetValueNames(Values);
-    Result = (Values->IndexOf(Value) >= 0);
-  }
-  __finally
-  {
-    delete Values;
-  }
-  return Result;
-}
-//---------------------------------------------------------------------------
 void __fastcall THierarchicalStorage::ReadValues(Classes::TStrings* Strings,
   bool MaintainKeys)
 {
@@ -586,6 +554,16 @@ void __fastcall TIniFileStorage::GetValueNames(Classes::TStrings* Strings)
   return FIniFile->ReadSection(CurrentSection, Strings);
 }
 //---------------------------------------------------------------------------
+bool __fastcall TIniFileStorage::KeyExists(const AnsiString SubKey)
+{
+  return FIniFile->SectionExists(CurrentSubKey + SubKey);
+}
+//---------------------------------------------------------------------------
+bool __fastcall TIniFileStorage::ValueExists(const AnsiString Value)
+{
+  return FIniFile->ValueExists(CurrentSection, Value);
+}
+//---------------------------------------------------------------------------
 bool __fastcall TIniFileStorage::DeleteValue(const AnsiString Name)
 {
   FIniFile->DeleteKey(CurrentSection, Name);

+ 4 - 2
core/HierarchicalStorage.h

@@ -20,8 +20,8 @@ public:
   virtual void __fastcall GetSubKeyNames(Classes::TStrings* Strings) = 0;
   virtual void __fastcall GetValueNames(Classes::TStrings* Strings) = 0;
   bool __fastcall HasSubKeys();
-  virtual bool __fastcall KeyExists(const AnsiString SubKey);
-  virtual bool __fastcall ValueExists(const AnsiString Value);
+  virtual bool __fastcall KeyExists(const AnsiString SubKey) = 0;
+  virtual bool __fastcall ValueExists(const AnsiString Value) = 0;
   virtual void __fastcall RecursiveDeleteSubKey(const AnsiString Key);
   virtual void __fastcall ReadValues(Classes::TStrings* Strings, bool MaintainKeys = false);
   virtual void __fastcall WriteValues(Classes::TStrings* Strings, bool MaintainKeys = false);
@@ -125,6 +125,8 @@ public:
   virtual bool __fastcall DeleteSubKey(const AnsiString SubKey);
   virtual bool __fastcall DeleteValue(const AnsiString Name);
   virtual void __fastcall GetSubKeyNames(Classes::TStrings* Strings);
+  virtual bool __fastcall KeyExists(const AnsiString SubKey);
+  virtual bool __fastcall ValueExists(const AnsiString Value);
 
   virtual int __fastcall BinaryDataSize(const AnsiString Name);
 

+ 22 - 10
core/RemoteFiles.cpp

@@ -651,14 +651,21 @@ AnsiString __fastcall TRemoteFile::GetListingStr()
 //---------------------------------------------------------------------------
 AnsiString __fastcall TRemoteFile::GetFullFileName()
 {
-  assert(Terminal);
-  assert(Directory != NULL);
-  AnsiString Path;
-  if (IsParentDirectory) Path = Directory->ParentPath;
-    else
-  if (IsDirectory) Path = UnixIncludeTrailingBackslash(Directory->FullDirectory + FileName);
-    else Path = Directory->FullDirectory + FileName;
-  return Terminal->TranslateLockedPath(Path, true);
+  if (FFullFileName.IsEmpty())
+  {
+    assert(Terminal);
+    assert(Directory != NULL);
+    AnsiString Path;
+    if (IsParentDirectory) Path = Directory->ParentPath;
+      else
+    if (IsDirectory) Path = UnixIncludeTrailingBackslash(Directory->FullDirectory + FileName);
+      else Path = Directory->FullDirectory + FileName;
+    return Terminal->TranslateLockedPath(Path, true);
+  }
+  else
+  {
+    return FFullFileName;
+  }
 }
 //---------------------------------------------------------------------------
 Integer __fastcall TRemoteFile::GetAttr()
@@ -679,14 +686,19 @@ void __fastcall TRemoteFile::SetTerminal(TTerminal * value)
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
-__fastcall TRemoteParentDirectory::TRemoteParentDirectory() : TRemoteFile()
+__fastcall TRemoteDirectoryFile::TRemoteDirectoryFile() : TRemoteFile()
 {
-  FileName = PARENTDIRECTORY;
   Modification = Now();
   LastAccess = Modification;
   Type = 'D';
   Size = 0;
 }
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+__fastcall TRemoteParentDirectory::TRemoteParentDirectory() : TRemoteDirectoryFile()
+{
+  FileName = PARENTDIRECTORY;
+}
 //=== TRemoteFileList ------------------------------------------------------
 __fastcall TRemoteFileList::TRemoteFileList():
   TObjectList()

+ 9 - 2
core/RemoteFiles.h

@@ -37,6 +37,7 @@ private:
   Char FType;
   bool FSelected;
   bool FCyclicLink;
+  AnsiString FFullFileName;
   int __fastcall GetAttr();
   bool __fastcall GetBrokenLink();
   bool __fastcall GetIsDirectory() const;
@@ -94,7 +95,7 @@ public:
   __property TTerminal * Terminal = { read = FTerminal, write = SetTerminal };
   __property Char Type = { read = GetType, write = SetType };
   __property bool Selected  = { read=FSelected, write=FSelected };
-  __property AnsiString FullFileName  = { read=GetFullFileName };
+  __property AnsiString FullFileName  = { read = GetFullFileName, write = FFullFileName };
   __property int IconIndex = { read = GetIconIndex };
   __property bool IsHidden = { read = GetIsHidden };
   __property bool IsParentDirectory = { read = GetIsParentDirectory };
@@ -103,7 +104,13 @@ public:
   __property AnsiString Extension  = { read=GetExtension };
 };
 //---------------------------------------------------------------------------
-class TRemoteParentDirectory : public TRemoteFile
+class TRemoteDirectoryFile : public TRemoteFile
+{
+public:
+  __fastcall TRemoteDirectoryFile();
+};
+//---------------------------------------------------------------------------
+class TRemoteParentDirectory : public TRemoteDirectoryFile
 {
 public:
   __fastcall TRemoteParentDirectory();

+ 3 - 3
core/ScpFileSystem.cpp

@@ -1419,11 +1419,11 @@ void __fastcall TSCPFileSystem::SCPSource(const AnsiString FileName,
             __int64 X = OperationProgress->LocalSize;
             X *= AsciiBuf.Size;
             X /= OperationProgress->LocalyUsed;
-            OperationProgress->SetTransferSize(X);
+            OperationProgress->ChangeTransferSize(X);
           }
             else
           {
-            OperationProgress->SetTransferSize(0);
+            OperationProgress->ChangeTransferSize(0);
           }
         }
 
@@ -1468,7 +1468,7 @@ void __fastcall TSCPFileSystem::SCPSource(const AnsiString FileName,
             FTerminal->LogEvent(FORMAT("Sending ASCII data (%ud bytes)",
               (AsciiBuf.Size)));
             // Should be equal, just in case it's rounded (see above)
-            OperationProgress->SetTransferSize(AsciiBuf.Size);
+            OperationProgress->ChangeTransferSize(AsciiBuf.Size);
             while (!OperationProgress->IsTransferDone())
             {
               FTerminal->Send(

+ 117 - 74
core/SessionData.cpp

@@ -62,7 +62,6 @@ void __fastcall TSessionData::Default()
   ProxyUsername = "";
   ProxyPassword = "";
   ProxyTelnetCommand = "connect %host %port\\n";
-  //ProxySOCKSVersion = 5;
   ProxyDNS = asAuto;
   ProxyLocalhost = false;
 
@@ -327,14 +326,20 @@ void __fastcall TSessionData::Load(THierarchicalStorage * Storage)
     {
       FPassword = Storage->ReadString("Password", FPassword);
     }
+    // Putty uses PingIntervalSecs
+    int PingIntervalSecs = Storage->ReadInteger("PingIntervalSecs", -1);
+    if (PingIntervalSecs < 0)
+    {
+      PingIntervalSecs = Storage->ReadInteger("PingIntervalSec", PingInterval%60);
+    }
     PingInterval =
       Storage->ReadInteger("PingInterval", PingInterval/60)*60 +
-      Storage->ReadInteger("PingIntervalSec", PingInterval%60);
+      PingIntervalSecs;
     PingType = static_cast<TPingType>
       (Storage->ReadInteger("PingType", PingInterval > 0 ? ptNullPacket : ptOff));
     if (PingInterval == 0)
     {
-      PingInterval = 60;
+      PingInterval = 30;
     }
     Timeout = Storage->ReadInteger("Timeout", Timeout);
     AgentFwd = Storage->ReadBool("AgentFwd", AgentFwd);
@@ -402,7 +407,7 @@ void __fastcall TSessionData::Load(THierarchicalStorage * Storage)
     ProxyUsername = Storage->ReadString("ProxyUsername", ProxyUsername);
     FProxyPassword = Storage->ReadString("ProxyPassword", FProxyPassword);
     ProxyTelnetCommand = Storage->ReadStringRaw("ProxyTelnetCommand", ProxyTelnetCommand);
-    ProxyDNS = TAutoSwitch((Storage->ReadInteger("ProxyDNS", ProxyDNS) + 1) % 3);
+    ProxyDNS = TAutoSwitch((Storage->ReadInteger("ProxyDNS", (ProxyDNS + 2) % 3) + 1) % 3);
     ProxyLocalhost = Storage->ReadBool("ProxyLocalhost", ProxyLocalhost);
 
     #define READ_BUG(BUG) \
@@ -437,69 +442,88 @@ void __fastcall TSessionData::Load(THierarchicalStorage * Storage)
   FModified = false;
 }
 //---------------------------------------------------------------------
-void __fastcall TSessionData::Save(THierarchicalStorage * Storage, bool PuttyExport)
+void __fastcall TSessionData::Save(THierarchicalStorage * Storage,
+  bool PuttyExport, const TSessionData * Default)
 {
   if (Modified && Storage->OpenSubKey(StorageKey, true))
   {
-    Storage->WriteString("HostName", HostName);
-    Storage->WriteInteger("PortNumber", PortNumber);
-    Storage->WriteString("UserName", UserName);
-    if (!Configuration->DisablePasswordStoring && !PuttyExport)
+    #define WRITE_DATA_EX(TYPE, NAME, PROPERTY, CONV) \
+      if ((Default != NULL) && (CONV(Default->PROPERTY) == CONV(PROPERTY))) \
+      { \
+        Storage->DeleteValue(NAME); \
+      } \
+      else \
+      { \
+        Storage->Write ## TYPE(NAME, CONV(PROPERTY)); \
+      }
+    #define WRITE_DATA_CONV(TYPE, NAME, PROPERTY) WRITE_DATA_EX(TYPE, NAME, PROPERTY, WRITE_DATA_CONV_FUNC)
+    #define WRITE_DATA(TYPE, PROPERTY) WRITE_DATA_EX(TYPE, #PROPERTY, PROPERTY, )
+
+    WRITE_DATA(String, HostName);
+    WRITE_DATA(Integer, PortNumber);
+    WRITE_DATA(String, UserName);
+    if (!Configuration->DisablePasswordStoring && !PuttyExport && !Password.IsEmpty())
+    {
+      WRITE_DATA_EX(String, "Password", FPassword, );
+    }
+    else
     {
-      Storage->WriteString("Password", FPassword);
+      Storage->DeleteValue("Password");
     }
-    Storage->WriteInteger("PingInterval", PingInterval/60);
-    Storage->WriteInteger("PingIntervalSec", PingInterval%60);
+    WRITE_DATA_EX(Integer, "PingInterval", PingInterval / 60, );
+    WRITE_DATA_EX(Integer, "PingIntervalSecs", PingInterval % 60, );
+    Storage->DeleteValue("PingIntervalSec"); // obsolete
+    // store PingType always as it does not have fixed default
     Storage->WriteInteger("PingType", PingType);
-    Storage->WriteInteger("Timeout", Timeout);
-    Storage->WriteBool("AgentFwd", AgentFwd);
-    Storage->WriteBool("AuthTIS", AuthTIS);
-    Storage->WriteBool("AuthKI", AuthKI);
-    Storage->WriteBool("AuthKIPassword", AuthKIPassword);
-    Storage->WriteBool("Compression", Compression);
-    Storage->WriteInteger("SshProt", SshProt);
-    Storage->WriteBool("Ssh2DES", Ssh2DES);
-    Storage->WriteString("Cipher", CipherList);
-
-    Storage->WriteBool("TcpNoDelay", TcpNoDelay);
+    WRITE_DATA(Integer, Timeout);
+    WRITE_DATA(Bool, AgentFwd);
+    WRITE_DATA(Bool, AuthTIS);
+    WRITE_DATA(Bool, AuthKI);
+    WRITE_DATA(Bool, AuthKIPassword);
+    WRITE_DATA(Bool, Compression);
+    WRITE_DATA(Integer, SshProt);
+    WRITE_DATA(Bool, Ssh2DES);
+    WRITE_DATA_EX(String, "Cipher", CipherList, );
+
+    WRITE_DATA(Bool, TcpNoDelay);
 
     if (PuttyExport)
     {
-      Storage->WriteStringRaw("PublicKeyFile", PublicKeyFile);
+      WRITE_DATA(StringRaw, PublicKeyFile);
     }
     else
     {
-      Storage->WriteBool("AuthGSSAPI", AuthGSSAPI);
-      Storage->WriteString("PublicKeyFile", PublicKeyFile);
-      Storage->WriteInteger("FSProtocol", FSProtocol);
-      Storage->WriteString("LocalDirectory", LocalDirectory);
-      Storage->WriteString("RemoteDirectory", RemoteDirectory);
-      Storage->WriteBool("UpdateDirectories", UpdateDirectories);
-      Storage->WriteBool("CacheDirectories", CacheDirectories);
-      Storage->WriteBool("CacheDirectoryChanges", CacheDirectoryChanges);
-      Storage->WriteBool("PreserveDirectoryChanges", PreserveDirectoryChanges);
-
-      Storage->WriteBool("ResolveSymlinks", ResolveSymlinks);
-      Storage->WriteBool("ConsiderDST", ConsiderDST);
-      Storage->WriteBool("LockInHome", LockInHome);
+      WRITE_DATA(Bool, AuthGSSAPI);
+      WRITE_DATA(String, PublicKeyFile);
+      WRITE_DATA(Integer, FSProtocol);
+      WRITE_DATA(String, LocalDirectory);
+      WRITE_DATA(String, RemoteDirectory);
+      WRITE_DATA(Bool, UpdateDirectories);
+      WRITE_DATA(Bool, CacheDirectories);
+      WRITE_DATA(Bool, CacheDirectoryChanges);
+      WRITE_DATA(Bool, PreserveDirectoryChanges);
+
+      WRITE_DATA(Bool, ResolveSymlinks);
+      WRITE_DATA(Bool, ConsiderDST);
+      WRITE_DATA(Bool, LockInHome);
       // Special is never stored (if it would, login dialog must be modified not to
       // duplicate Special parameter when Special session is loaded and then stored
       // under different name)
-      // Storage->WriteBool("Special", Special);
-      Storage->WriteString("Shell", Shell);
-      Storage->WriteBool("ClearAliases", ClearAliases);
-      Storage->WriteBool("UnsetNationalVars", UnsetNationalVars);
-      Storage->WriteBool("AliasGroupList", AliasGroupList);
-      Storage->WriteBool("IgnoreLsWarnings", IgnoreLsWarnings);
-      Storage->WriteBool("Scp1Compatibility", Scp1Compatibility);
-      Storage->WriteFloat("TimeDifference", TimeDifference);
-
-      Storage->WriteString("ReturnVar", ReturnVar);
-      Storage->WriteBool("LookupUserGroups", LookupUserGroups);
-      Storage->WriteInteger("EOLType", EOLType);
+      // WRITE_DATA(Bool, Special);
+      WRITE_DATA(String, Shell);
+      WRITE_DATA(Bool, ClearAliases);
+      WRITE_DATA(Bool, UnsetNationalVars);
+      WRITE_DATA(Bool, AliasGroupList);
+      WRITE_DATA(Bool, IgnoreLsWarnings);
+      WRITE_DATA(Bool, Scp1Compatibility);
+      WRITE_DATA(Float, TimeDifference);
+
+      WRITE_DATA(String, ReturnVar);
+      WRITE_DATA(Bool, LookupUserGroups);
+      WRITE_DATA(Integer, EOLType);
     }
 
-    Storage->WriteInteger("ProxyMethod", ProxyMethod);
+    WRITE_DATA(Integer, ProxyMethod);
     if (PuttyExport)
     {
       // support for Putty 0.53b and older
@@ -528,15 +552,23 @@ void __fastcall TSessionData::Save(THierarchicalStorage * Storage, bool PuttyExp
       Storage->WriteInteger("ProxyType", ProxyType);
       Storage->WriteInteger("ProxySOCKSVersion", ProxySOCKSVersion);
     }
-    Storage->WriteString("ProxyHost", ProxyHost);
-    Storage->WriteInteger("ProxyPort", ProxyPort);
-    Storage->WriteString("ProxyUsername", ProxyUsername);
-    Storage->WriteString("ProxyPassword", FProxyPassword);
-    Storage->WriteStringRaw("ProxyTelnetCommand", ProxyTelnetCommand);
-    Storage->WriteInteger("ProxyDNS", (ProxyDNS+2) % 3);
-    Storage->WriteBool("ProxyLocalhost", ProxyLocalhost);
-
-    #define WRITE_BUG(BUG) Storage->WriteInteger("Bug"#BUG, 2 - Bug[sb##BUG]);
+    else
+    {
+      Storage->DeleteValue("ProxyType"); 
+      Storage->DeleteValue("ProxySOCKSVersion");
+    }
+    WRITE_DATA(String, ProxyHost);
+    WRITE_DATA(Integer, ProxyPort);
+    WRITE_DATA(String, ProxyUsername);
+    WRITE_DATA_EX(String, "ProxyPassword", FProxyPassword, );
+    WRITE_DATA(StringRaw, ProxyTelnetCommand);
+    #define WRITE_DATA_CONV_FUNC(X) (((X) + 2) % 3)
+    WRITE_DATA_CONV(Integer, "ProxyDNS", ProxyDNS);
+    #undef WRITE_DATA_CONV_FUNC
+    WRITE_DATA(Bool, ProxyLocalhost);
+
+    #define WRITE_DATA_CONV_FUNC(X) (2 - (X))
+    #define WRITE_BUG(BUG) WRITE_DATA_CONV(Integer, "Bug" #BUG, Bug[sb##BUG]);
     WRITE_BUG(Ignore1);
     WRITE_BUG(PlainPW1);
     WRITE_BUG(RSA1);
@@ -546,18 +578,21 @@ void __fastcall TSessionData::Save(THierarchicalStorage * Storage, bool PuttyExp
     WRITE_BUG(DHGEx2);
     WRITE_BUG(PKSessID2);
     #undef WRITE_BUG
+    #undef WRITE_DATA_CONV_FUNC
+
+    Storage->DeleteValue("BuggyMAC");
 
     if (PuttyExport)
     {
-      Storage->WriteString("Protocol", ProtocolStr);
+      WRITE_DATA_EX(String, "Protocol", ProtocolStr, );
     }
 
     if (!PuttyExport)
     {
-      Storage->WriteInteger("SFTPSymlinkBug", SFTPSymlinkBug);
-      
-      Storage->WriteString("CustomParam1", CustomParam1);
-      Storage->WriteString("CustomParam2", CustomParam2);
+      WRITE_DATA(Integer, SFTPSymlinkBug);
+
+      WRITE_DATA(String, CustomParam1);
+      WRITE_DATA(String, CustomParam2);
     }
 
     Storage->CloseSubKey();
@@ -847,7 +882,7 @@ void __fastcall TSessionData::SetCipher(int Index, TCipher value)
   SET_SESSION_PROPERTY(Ciphers[Index]);
 }
 //---------------------------------------------------------------------
-TCipher __fastcall TSessionData::GetCipher(int Index)
+TCipher __fastcall TSessionData::GetCipher(int Index) const
 {
   assert(Index >= 0 && Index < CIPHER_COUNT);
   return FCiphers[Index];
@@ -881,7 +916,7 @@ void __fastcall TSessionData::SetCipherList(AnsiString value)
   }
 }
 //---------------------------------------------------------------------
-AnsiString __fastcall TSessionData::GetCipherList()
+AnsiString __fastcall TSessionData::GetCipherList() const
 {
   AnsiString Result;
   for (int Index = 0; Index < CIPHER_COUNT; Index++)
@@ -974,7 +1009,7 @@ void __fastcall TSessionData::SetProtocolStr(AnsiString value)
   }
 }
 //---------------------------------------------------------------------
-AnsiString __fastcall TSessionData::GetProtocolStr()
+AnsiString __fastcall TSessionData::GetProtocolStr() const
 {
   for (int Index = 0; backends[Index].name != NULL; Index++)
   {
@@ -1143,7 +1178,7 @@ void __fastcall TSessionData::SetBug(TSshBug Bug, TAutoSwitch value)
   SET_SESSION_PROPERTY(Bugs[Bug]);
 }
 //---------------------------------------------------------------------
-TAutoSwitch __fastcall TSessionData::GetBug(TSshBug Bug)
+TAutoSwitch __fastcall TSessionData::GetBug(TSshBug Bug) const
 {
   assert(Bug >= 0 && Bug < LENOF(FBugs));
   return FBugs[Bug];
@@ -1258,14 +1293,22 @@ void __fastcall TStoredSessionList::Load()
 //---------------------------------------------------------------------
 void __fastcall TStoredSessionList::Save(THierarchicalStorage * Storage)
 {
-  for (int Index = 0; Index < Count+HiddenCount; Index++)
+  TSessionData * FactoryDefaults = new TSessionData("");
+  try
+  {
+    for (int Index = 0; Index < Count+HiddenCount; Index++)
+    {
+      TSessionData *SessionData = (TSessionData *)Items[Index];
+      if (SessionData->Modified)
+        SessionData->Save(Storage, false, FactoryDefaults);
+    }
+    if (FDefaultSettings->Modified)
+      FDefaultSettings->Save(Storage, false, FactoryDefaults);
+  }
+  __finally
   {
-    TSessionData *SessionData = (TSessionData *)Items[Index];
-    if (SessionData->Modified)
-      SessionData->Save(Storage);
+    delete FactoryDefaults;
   }
-  if (FDefaultSettings->Modified)
-    FDefaultSettings->Save(Storage);
 }
 //---------------------------------------------------------------------
 void __fastcall TStoredSessionList::Save(AnsiString aKey)

+ 6 - 5
core/SessionData.h

@@ -108,11 +108,11 @@ private:
   void __fastcall SetSshProt(TSshProt value);
   void __fastcall SetSsh2DES(bool value);
   void __fastcall SetCipher(int Index, TCipher value);
-  TCipher __fastcall GetCipher(int Index);
+  TCipher __fastcall GetCipher(int Index) const;
   void __fastcall SetPublicKeyFile(AnsiString value);
 
   void __fastcall SetProtocolStr(AnsiString value);
-  AnsiString __fastcall GetProtocolStr();
+  AnsiString __fastcall GetProtocolStr() const;
   bool __fastcall GetCanLogin();
   void __fastcall SetPingIntervalDT(TDateTime value);
   TDateTime __fastcall GetPingIntervalDT();
@@ -148,7 +148,7 @@ private:
   void __fastcall SetTcpNoDelay(bool value);
   AnsiString __fastcall GetSshProtStr();
   void __fastcall SetCipherList(AnsiString value);
-  AnsiString __fastcall GetCipherList();
+  AnsiString __fastcall GetCipherList() const;
   void __fastcall SetProxyMethod(TProxyMethod value);
   void __fastcall SetProxyHost(AnsiString value);
   void __fastcall SetProxyPort(int value);
@@ -159,7 +159,7 @@ private:
   void __fastcall SetProxyLocalhost(bool value);
   AnsiString __fastcall GetProxyPassword();
   void __fastcall SetBug(TSshBug Bug, TAutoSwitch value);
-  TAutoSwitch __fastcall GetBug(TSshBug Bug);
+  TAutoSwitch __fastcall GetBug(TSshBug Bug) const;
   AnsiString __fastcall GetSessionKey();
   void __fastcall SetCustomParam1(AnsiString value);
   void __fastcall SetCustomParam2(AnsiString value);
@@ -177,7 +177,8 @@ public:
   void __fastcall NonPersistant();
   virtual void __fastcall StoreToConfig(void * config);
   void __fastcall Load(THierarchicalStorage * Storage);
-  void __fastcall Save(THierarchicalStorage * Storage, bool PuttyExport = false);
+  void __fastcall Save(THierarchicalStorage * Storage, bool PuttyExport,
+    const TSessionData * Default = NULL);
   void __fastcall Remove();
   virtual void __fastcall Assign(TPersistent * Source);
   bool __fastcall ParseUrl(AnsiString Url, int Params, AnsiString * FileName);

+ 21 - 14
core/SftpFileSystem.cpp

@@ -65,6 +65,9 @@ const int asEOF =           1 << SSH_FX_EOF;
 const int asOpUnsupported = 1 << SSH_FX_OP_UNSUPPORTED;
 const int asNoSuchFile =    1 << SSH_FX_NO_SUCH_FILE;
 const int asAll = 0xFFFF;
+
+const int tfFirstLevel =   0x01;
+const int tfNewDirectory = 0x02;
 //---------------------------------------------------------------------------
 #define GET_32BIT(cp) \
     (((unsigned long)(unsigned char)(cp)[0] << 24) | \
@@ -923,7 +926,7 @@ protected:
         BlockBuf.Convert(FTerminal->Configuration->LocalEOLType,
           FFileSystem->GetEOL(), cpRemoveCtrlZ);
         // update transfer size with difference arised from EOL conversion
-        OperationProgress->SetTransferSize(OperationProgress->TransferSize -
+        OperationProgress->ChangeTransferSize(OperationProgress->TransferSize -
           PrevBufSize + BlockBuf.Size);
       }
 
@@ -999,7 +1002,7 @@ struct TSinkFileParams
   int Params;
   TFileOperationProgressType * OperationProgress;
   bool Skipped;
-  int Level;
+  unsigned int Flags;
 };
 //===========================================================================
 __fastcall TSFTPFileSystem::TSFTPFileSystem(TTerminal * ATerminal):
@@ -2341,7 +2344,8 @@ void __fastcall TSFTPFileSystem::CopyToRemote(TStrings * FilesToCopy,
               FileNameOnly, true);
           }
         }
-        SFTPSource(FileName, FullTargetDir, CopyParam, Params, OperationProgress, 0);
+        SFTPSource(FileName, FullTargetDir, CopyParam, Params, OperationProgress,
+          tfFirstLevel);
         Success = true;
       }
       catch(EScpSkipFile & E)
@@ -2506,7 +2510,7 @@ bool TSFTPFileSystem::SFTPConfirmResume(const AnsiString DestFileName,
 //---------------------------------------------------------------------------
 void __fastcall TSFTPFileSystem::SFTPSource(const AnsiString FileName,
   const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params,
-  TFileOperationProgressType * OperationProgress, int Level)
+  TFileOperationProgressType * OperationProgress, unsigned int Flags)
 {
   AnsiString OnlyFileName = ExtractFileName(FileName);
 
@@ -2534,7 +2538,7 @@ void __fastcall TSFTPFileSystem::SFTPSource(const AnsiString FileName,
   if (OpenParams.LocalFileAttrs & faDirectory)
   {
     SFTPDirectorySource(IncludeTrailingBackslash(FileName), TargetDir,
-      OpenParams.LocalFileAttrs, CopyParam, Params, OperationProgress, Level);
+      OpenParams.LocalFileAttrs, CopyParam, Params, OperationProgress, Flags);
   }
   else
   {
@@ -2544,7 +2548,7 @@ void __fastcall TSFTPFileSystem::SFTPSource(const AnsiString FileName,
       assert(File);
 
       AnsiString DestFileName = CopyParam->ChangeFileName(OnlyFileName,
-        osLocal, Level == 0);
+        osLocal, FLAGSET(Flags, tfFirstLevel));
       AnsiString DestFullName = LocalCanonify(TargetDir + DestFileName);
       AnsiString DestPartinalFullName;
       bool ResumeAllowed;
@@ -2570,6 +2574,7 @@ void __fastcall TSFTPFileSystem::SFTPSource(const AnsiString FileName,
           " transfer mode selected.");
 
       ResumeAllowed = !OperationProgress->AsciiTransfer &&
+        FLAGCLEAR(Flags, tfNewDirectory) &&
         CopyParam->AllowResume(OperationProgress->LocalSize) &&
         IsCapable(fcRename);
       OperationProgress->SetResumeStatus(ResumeAllowed ? rsEnabled : rsDisabled);
@@ -2899,10 +2904,11 @@ void __fastcall TSFTPFileSystem::SFTPCloseRemote(const AnsiString Handle,
 //---------------------------------------------------------------------------
 void __fastcall TSFTPFileSystem::SFTPDirectorySource(const AnsiString DirectoryName,
   const AnsiString TargetDir, int Attrs, const TCopyParamType * CopyParam,
-  int Params, TFileOperationProgressType * OperationProgress, int Level)
+  int Params, TFileOperationProgressType * OperationProgress, unsigned int Flags)
 {
   AnsiString DestDirectoryName = CopyParam->ChangeFileName(
-    ExtractFileName(ExcludeTrailingBackslash(DirectoryName)), osLocal, Level == 0);
+    ExtractFileName(ExcludeTrailingBackslash(DirectoryName)), osLocal,
+    FLAGSET(Flags, tfFirstLevel));
   AnsiString DestFullName = UnixIncludeTrailingBackslash(TargetDir + DestDirectoryName);
 
   OperationProgress->SetFile(DirectoryName);
@@ -2935,6 +2941,7 @@ void __fastcall TSFTPFileSystem::SFTPDirectorySource(const AnsiString DirectoryN
       Properties.Rights = CopyParam->RemoteFileRights(Attrs);
     }
     FTerminal->CreateDirectory(DestFullName, &Properties);
+    Flags |= tfNewDirectory;
   }
 
   int FindAttrs = faReadOnly | faHidden | faSysFile | faDirectory | faArchive;
@@ -2954,7 +2961,7 @@ void __fastcall TSFTPFileSystem::SFTPDirectorySource(const AnsiString DirectoryN
       if ((SearchRec.Name != ".") && (SearchRec.Name != ".."))
       {
         SFTPSource(FileName, DestFullName, CopyParam, Params, OperationProgress,
-          Level + 1);
+          Flags & ~tfFirstLevel);
       }
     }
     catch (EScpSkipFile &E)
@@ -3006,7 +3013,7 @@ void __fastcall TSFTPFileSystem::CopyToLocal(TStrings * FilesToCopy,
       try
       {
         SFTPSink(LocalCanonify(FileName), File, FullTargetDir, CopyParam,
-          Params, OperationProgress, 0);
+          Params, OperationProgress, tfFirstLevel);
         Success = true;
       }
       catch(EScpSkipFile & E)
@@ -3032,7 +3039,7 @@ void __fastcall TSFTPFileSystem::CopyToLocal(TStrings * FilesToCopy,
 void __fastcall TSFTPFileSystem::SFTPSink(const AnsiString FileName,
   const TRemoteFile * File, const AnsiString TargetDir,
   const TCopyParamType * CopyParam, int Params,
-  TFileOperationProgressType * OperationProgress, int Level)
+  TFileOperationProgressType * OperationProgress, unsigned int Flags)
 {
   AnsiString OnlyFileName = UnixExtractFileName(FileName);
 
@@ -3049,7 +3056,7 @@ void __fastcall TSFTPFileSystem::SFTPSink(const AnsiString FileName,
   OperationProgress->SetFile(OnlyFileName);
 
   AnsiString DestFileName = CopyParam->ChangeFileName(OnlyFileName,
-    osRemote, Level == 0);
+    osRemote, FLAGSET(Flags, tfFirstLevel));
   AnsiString DestFullName = TargetDir + DestFileName;
 
   if (File->IsDirectory)
@@ -3071,7 +3078,7 @@ void __fastcall TSFTPFileSystem::SFTPSink(const AnsiString FileName,
       SinkFileParams.Params = Params;
       SinkFileParams.OperationProgress = OperationProgress;
       SinkFileParams.Skipped = false;
-      SinkFileParams.Level = Level + 1;
+      SinkFileParams.Flags = Flags & ~tfFirstLevel;
 
       FTerminal->ProcessDirectory(FileName, SFTPSinkFile, &SinkFileParams);
 
@@ -3448,7 +3455,7 @@ void __fastcall TSFTPFileSystem::SFTPSinkFile(AnsiString FileName,
   try
   {
     SFTPSink(FileName, File, Params->TargetDir, Params->CopyParam,
-      Params->Params, Params->OperationProgress, Params->Level);
+      Params->Params, Params->OperationProgress, Params->Flags);
   }
   catch(EScpSkipFile & E)
   {

+ 3 - 3
core/SftpFileSystem.h

@@ -103,7 +103,7 @@ protected:
 
   void __fastcall SFTPSource(const AnsiString FileName,
     const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params,
-    TFileOperationProgressType * OperationProgress, int Level);
+    TFileOperationProgressType * OperationProgress, unsigned int Flags);
   AnsiString __fastcall SFTPOpenRemoteFile(const AnsiString & FileName,
     unsigned int OpenType, __int64 Size = -1);
   int __fastcall SFTPOpenRemote(void * AOpenParams, void * /*Param2*/);
@@ -112,7 +112,7 @@ protected:
     bool TransferFinished);
   void __fastcall SFTPDirectorySource(const AnsiString DirectoryName,
     const AnsiString TargetDir, int /*Attrs*/, const TCopyParamType * CopyParam,
-    int Params, TFileOperationProgressType * OperationProgress, int Level);
+    int Params, TFileOperationProgressType * OperationProgress, unsigned int Flags);
   void __fastcall SFTPConfirmOverwrite(const AnsiString FileName,
     bool TargetBiggerThanSource, TFileOperationProgressType * OperationProgress,
     TSFTPOverwriteMode & Mode, const TOverwriteFileParams * FileParams);
@@ -121,7 +121,7 @@ protected:
   void __fastcall SFTPSink(const AnsiString FileName,
     const TRemoteFile * File, const AnsiString TargetDir,
     const TCopyParamType * CopyParam, int Params,
-    TFileOperationProgressType * OperationProgress, int Level);
+    TFileOperationProgressType * OperationProgress, unsigned int Flags);
   void __fastcall SFTPSinkFile(AnsiString FileName,
     const TRemoteFile * File, void * Param);
   char * __fastcall GetEOL() const; 

+ 9 - 10
core/Terminal.cpp

@@ -2111,16 +2111,16 @@ bool __fastcall TTerminal::CopyToRemote(TStrings * FilesToCopy,
     OperationProgress.Start((Params & cpDelete ? foMove : foCopy), osLocal,
       FilesToCopy->Count, Params & cpDragDrop, TargetDir);
 
-    if (CopyParam->CalculateSize)
-    {
-      OperationProgress.SetTotalSize(Size);
-    }
-
     OperationProgress.YesToNewer = FLAGSET(Params, cpNewerOnly);
 
     FOperationProgress = &OperationProgress;
     try
     {
+      if (CopyParam->CalculateSize)
+      {
+        OperationProgress.SetTotalSize(Size);
+      }
+
       AnsiString UnlockedTargetDir = TranslateLockedPath(TargetDir, false);
       BeginTransaction();
       try
@@ -2211,16 +2211,15 @@ bool __fastcall TTerminal::CopyToLocal(TStrings * FilesToCopy,
       OperationProgress.Start((Params & cpDelete ? foMove : foCopy), osRemote,
         FilesToCopy->Count, Params & cpDragDrop, TargetDir);
 
-      if (TotalSizeKnown)
-      {
-        OperationProgress.SetTotalSize(TotalSize);
-      }
-
       OperationProgress.YesToNewer = FLAGSET(Params, cpNewerOnly);
 
       FOperationProgress = &OperationProgress;
       try
       {
+        if (TotalSizeKnown)
+        {
+          OperationProgress.SetTotalSize(TotalSize);
+        }
 
         try
         {

+ 50 - 128
forms/CustomScpExplorer.cpp

@@ -13,7 +13,6 @@
 #include <ScpMain.h>
 #include <FileSystems.h>
 #include <TextsWin.h>
-#include <DiscMon.hpp>
 
 #include <VCLCommon.h>
 #include <Log.h>
@@ -128,8 +127,7 @@ __fastcall TCustomScpExplorerForm::TCustomScpExplorerForm(TComponent* Owner):
   FDelayedDeletionTimer = NULL;
   FDelayedDeletionList = new TStringList();
   FDDFileList = NULL;
-
-  FSynchronizeMonitor = NULL;
+  FPendingTempSpaceWarn = false;
 
   FQueueStatus = NULL;
   FQueueStatusSection = new TCriticalSection();
@@ -514,6 +512,18 @@ void __fastcall TCustomScpExplorerForm::CreateParams(TCreateParams & Params)
 void __fastcall TCustomScpExplorerForm::FileOperationProgress(
   TFileOperationProgressType & ProgressData, TCancelStatus & /*Cancel*/)
 {
+  // Download to temporary local directory
+  if (FPendingTempSpaceWarn && ProgressData.InProgress && ProgressData.TotalSizeSet)
+  {
+    bool Continue = true;
+    FPendingTempSpaceWarn = false;
+    DoWarnLackOfTempSpace(ProgressData.Directory, ProgressData.TotalSize, Continue);
+    if (!Continue)
+    {
+      Abort();
+    }
+  }
+
   // operation is being executed and we still didn't show up progress form
   if (ProgressData.InProgress && !FProgressForm)
   {
@@ -577,7 +587,7 @@ void __fastcall TCustomScpExplorerForm::DoOperationFinished(
   bool DragDrop, const AnsiString FileName, bool Success,
   bool & DisconnectWhenComplete)
 {
-  if ((FSynchronizeMonitor == NULL) && !FAutoOperation)
+  if (!FAutoOperation)
   {
     // no selection on "/upload", form servers only as event handler
     // (it is not displayed)
@@ -1863,7 +1873,8 @@ bool __fastcall TCustomScpExplorerForm::DoSynchronizeDirectories(
   Params.Params = GUIConfiguration->SynchronizeParams;
   Params.Recurse = GUIConfiguration->SynchronizeRecurse;
   bool SaveSettings = false;
-  bool Result = DoSynchronizeDialog(Params, SynchronizeStartStop, SaveSettings);
+  TSynchronizeController Controller(&DoSynchronize);
+  bool Result = DoSynchronizeDialog(Params, Controller.StartStop, SaveSettings);
   if (Result)
   {
     if (SaveSettings)
@@ -1877,95 +1888,24 @@ bool __fastcall TCustomScpExplorerForm::DoSynchronizeDirectories(
   return Result;
 }
 //---------------------------------------------------------------------------
-void __fastcall TCustomScpExplorerForm::SynchronizeStartStop(TObject * /*Sender*/,
-  bool Start, const TSynchronizeParamType & Params, TSynchronizeAbortEvent OnAbort)
-{
-  if (Start)
-  {
-    try
-    {
-      FSynchronizeParams = Params;
-      assert(OnAbort);
-      FSynchronizeAbort = OnAbort;
-      FSynchronizeMonitor = new TDiscMonitor(this);
-      FSynchronizeMonitor->SubTree = false;
-      TMonitorFilters Filters;
-      Filters << moFilename << moLastWrite;
-      if (FSynchronizeParams.Recurse)
-      {
-        Filters << moDirName;
-      }
-      FSynchronizeMonitor->Filters = Filters;
-      FSynchronizeMonitor->AddDirectory(FSynchronizeParams.LocalDirectory,
-        FSynchronizeParams.Recurse);
-      FSynchronizeMonitor->OnChange = SynchronizeChange;
-      FSynchronizeMonitor->OnInvalid = SynchronizeInvalid;
-      FSynchronizeMonitor->Open();
-    }
-    catch(...)
-    {
-      //SAFE_DESTROY(FSynchronizeMonitor);
-      throw;
-    }
-  }
-  else
-  {
-    assert(FSynchronizeMonitor != NULL);
-    SAFE_DESTROY(FSynchronizeMonitor);
-  }
-}
-//---------------------------------------------------------------------------
-void __fastcall TCustomScpExplorerForm::SynchronizeChange(
-  TObject * /*Sender*/, const AnsiString Directory)
+void __fastcall TCustomScpExplorerForm::DoSynchronize(
+  TSynchronizeController * /*Sender*/, const AnsiString LocalDirectory,
+  const AnsiString RemoteDirectory, const TSynchronizeParamType & Params)
 {
   try
   {
-    AnsiString RemoteDirectory;
-    AnsiString RootLocalDirectory;
-    RootLocalDirectory = IncludeTrailingBackslash(FSynchronizeParams.LocalDirectory);
-    RemoteDirectory = UnixIncludeTrailingBackslash(FSynchronizeParams.RemoteDirectory);
-
-    AnsiString LocalDirectory = IncludeTrailingBackslash(Directory);
-
-    assert(LocalDirectory.SubString(1, RootLocalDirectory.Length()) ==
-      RootLocalDirectory);
-    RemoteDirectory = RemoteDirectory +
-      ToUnixPath(LocalDirectory.SubString(RootLocalDirectory.Length() + 1,
-        LocalDirectory.Length() - RootLocalDirectory.Length()));
-
     TCopyParamType CopyParam = GUIConfiguration->CopyParam;
     CopyParam.PreserveTime = true;
+
     Synchronize(LocalDirectory, RemoteDirectory, smRemote, CopyParam,
-      FSynchronizeParams.Params | TTerminal::spNoRecurse | TTerminal::spUseCache |
-        TTerminal::spDelayProgress);
+      Params.Params | TTerminal::spNoRecurse | TTerminal::spUseCache |
+      TTerminal::spDelayProgress);
   }
   catch(Exception & E)
   {
     ShowExtendedExceptionEx(Terminal, &E);
-    SynchronizeAbort(dynamic_cast<EFatal*>(&E) != NULL);
-  }
-}
-//---------------------------------------------------------------------------
-void __fastcall TCustomScpExplorerForm::SynchronizeAbort(bool Close)
-{
-  FSynchronizeMonitor->Close();
-  assert(FSynchronizeAbort);
-  FSynchronizeAbort(this, Close);
-}
-//---------------------------------------------------------------------------
-void __fastcall TCustomScpExplorerForm::SynchronizeInvalid(
-  TObject * /*Sender*/, const AnsiString Directory)
-{
-  if (!Directory.IsEmpty())
-  {
-    SimpleErrorDialog(FMTLOAD(WATCH_ERROR_DIRECTORY, (Directory)));
-  }
-  else
-  {
-    SimpleErrorDialog(LoadStr(WATCH_ERROR_GENERAL));
+    throw;
   }
-
-  SynchronizeAbort(false);
 }
 //---------------------------------------------------------------------------
 void __fastcall TCustomScpExplorerForm::FullSynchronizeDirectories()
@@ -2119,23 +2059,14 @@ void __fastcall TCustomScpExplorerForm::DoWarnLackOfTempSpace(
     if (!ADrive.IsEmpty())
     {
       __int64 FreeSpace = DiskFree((Byte)(ADrive[1]-'A'+1));
-      Integer MessageRes = 0;
-      if (RequiredSpace >= 0)
-      {
-        __int64 RequiredWithReserve;
-        RequiredWithReserve = (__int64)(RequiredSpace * WinConfiguration->DDWarnLackOfTempSpaceRatio);
-        if (FreeSpace < RequiredWithReserve) MessageRes = DD_WARN_LACK_OF_TEMP_SPACE;
-      }
-      else
-      {
-        MessageRes = DD_WARN_UNKNOWN_TEMP_SPACE;
-      }
-
-      if (MessageRes)
+      assert(RequiredSpace >= 0);
+      __int64 RequiredWithReserve;
+      RequiredWithReserve = (__int64)(RequiredSpace * WinConfiguration->DDWarnLackOfTempSpaceRatio);
+      if (FreeSpace < RequiredWithReserve)
       {
         int Result;
         TMessageParams Params(mpNeverAskAgainCheck);
-        Result = MessageDialog(FMTLOAD(MessageRes, (Path,
+        Result = MessageDialog(FMTLOAD(DD_WARN_LACK_OF_TEMP_SPACE, (Path,
           FormatBytes(FreeSpace), FormatBytes(RequiredSpace))),
           qtWarning, qaYes | qaNo, 0, &Params);
 
@@ -2523,7 +2454,7 @@ void __fastcall TCustomScpExplorerForm::RemoteFileControlFileOperation(
   {
     RemoteDriveView->UpdateDropTarget();
   }
-  if (DropSourceControl == RemoteDriveView)
+  if ((Operation == foMove) && (DropSourceControl == RemoteDriveView))
   {
     RemoteDriveView->UpdateDropSource();
   }
@@ -2718,45 +2649,36 @@ void __fastcall TCustomScpExplorerForm::RemoteFileControlDDTargetDrop()
     }
 
     // TargetDir is set when dropped on local file control
-    bool TemporaryDownload = TargetDir.IsEmpty();
-    bool Continue = true;
-
-    if (TemporaryDownload)
+    // (this was workaround for legacy dirview event handling, now it should be
+    // made prettier)
+    if (TargetDir.IsEmpty())
     {
-      DoWarnLackOfTempSpace(TempDir, FDDTotalSize, Continue);
       TargetDir = TempDir;
-    }
 
-    if (Continue)
-    {
-      if (TemporaryDownload)
+      if (ForceDirectories(TargetDir))
       {
-        if (ForceDirectories(TargetDir))
+        assert(Terminal && !TargetDir.IsEmpty());
+        // do not attempt to warn unless we know total transfer size
+        FPendingTempSpaceWarn = CopyParams.CalculateSize;
+        try
         {
-          assert(Terminal && !TargetDir.IsEmpty());
-          try
-          {
-            // cpNewerOnly has no efect here,
-            // as we download to empty temp directory
-            int Params = cpDragDrop |
-              (Type == ttMove ? cpDelete : 0);
-            Terminal->CopyToLocal(FDDFileList, TargetDir, &CopyParams,
-              Params);
-          }
-          __finally
-          {
-            AddDelayedDirectoryDeletion(TargetDir, WinConfiguration->DDDeleteDelay);
-          }
+          // cpNewerOnly has no efect here,
+          // as we download to empty temp directory
+          int Params = cpDragDrop |
+            (Type == ttMove ? cpDelete : 0);
+          Terminal->CopyToLocal(FDDFileList, TargetDir, &CopyParams,
+            Params);
         }
-        else
+        __finally
         {
-          throw Exception(FMTLOAD(DD_DIR_EXCEPTION, (TargetDir)));
+          FPendingTempSpaceWarn = false;
+          AddDelayedDirectoryDeletion(TargetDir, WinConfiguration->DDDeleteDelay);
         }
       }
-    }
-    else
-    {
-      Abort();
+      else
+      {
+        throw Exception(FMTLOAD(DD_DIR_EXCEPTION, (TargetDir)));
+      }
     }
   }
 }

+ 5 - 12
forms/CustomScpExplorer.h

@@ -29,10 +29,7 @@ class TTerminalQueueStatus;
 class TQueueItem;
 class TQueueItemProxy;
 class TQueueController;
-namespace Discmon
-{
-class TDiscMonitor;
-}
+class TSynchronizeController;
 //---------------------------------------------------------------------------
 enum TActionAllowed { aaShortCut, aaUpdate, aaExecute };
 enum TActionFlag { afLocal = 1, afRemote = 2, afExplorer = 4 , afCommander = 8 };
@@ -153,10 +150,8 @@ private:
   bool FRefreshRemoteDirectory;
   TListItem * FQueueActedItem;
   TQueueController * FQueueController;
-  TSynchronizeParamType FSynchronizeParams;
-  Discmon::TDiscMonitor * FSynchronizeMonitor;
-  TSynchronizeAbortEvent FSynchronizeAbort;
   int FLastDropEffect;
+  bool FPendingTempSpaceWarn;
 
   bool __fastcall GetEnableFocusedOperation(TOperationSide Side);
   bool __fastcall GetEnableSelectedOperation(TOperationSide Side);
@@ -221,14 +216,12 @@ protected:
     AnsiString & RemoteDirectory, TSynchronizeMode & Mode);
   bool __fastcall DoSynchronizeDirectories(AnsiString & LocalDirectory,
     AnsiString & RemoteDirectory);
-  void __fastcall SynchronizeStartStop(TObject * Sender, bool Start,
-    const TSynchronizeParamType & Params, TSynchronizeAbortEvent OnAbort);
-  void __fastcall SynchronizeChange(TObject * Sender, const AnsiString Directory);
-  void __fastcall SynchronizeInvalid(TObject * Sender, const AnsiString Directory);
+  void __fastcall DoSynchronize(TSynchronizeController * Sender,
+    const AnsiString LocalDirectory, const AnsiString RemoteDirectory,
+    const TSynchronizeParamType & Params);
   void __fastcall Synchronize(const AnsiString LocalDirectory,
     const AnsiString RemoteDirectory, TSynchronizeMode Mode,
     const TCopyParamType & CopyParam, int Params);
-  void __fastcall SynchronizeAbort(bool Close);
   virtual void __fastcall BatchStart(void *& Storage);
   virtual void __fastcall BatchEnd(void * Storage);
   void __fastcall ExecuteFileOperation(TFileOperation Operation, TOperationSide Side,

+ 5 - 0
forms/FullSynchronize.cpp

@@ -204,4 +204,9 @@ void __fastcall TFullSynchronizeDialog::TransferPreferencesButtonClick(
   DoPreferencesDialog(pmTransfer);
 }
 //---------------------------------------------------------------------------
+void __fastcall TFullSynchronizeDialog::FormShow(TObject * /*Sender*/)
+{
+  UpdateControls();
+}
+//---------------------------------------------------------------------------
 

+ 1 - 0
forms/FullSynchronize.dfm

@@ -14,6 +14,7 @@ object FullSynchronizeDialog: TFullSynchronizeDialog
   OldCreateOrder = False
   Position = poMainFormCenter
   OnCloseQuery = FormCloseQuery
+  OnShow = FormShow
   DesignSize = (
     396
     265)

+ 1 - 0
forms/FullSynchronize.h

@@ -37,6 +37,7 @@ __published:
   void __fastcall DirectoryEditKeyDown(TObject *Sender, WORD &Key,
     TShiftState Shift);
   void __fastcall TransferPreferencesButtonClick(TObject *Sender);
+  void __fastcall FormShow(TObject *Sender);
   
 private:
   int FParams;

+ 3 - 1
forms/Login.cpp

@@ -310,7 +310,9 @@ void __fastcall TLoginDialog::LoadSession(TSessionData * aSessionData)
     }
 
     // Bugs tab
-    #define LOAD_BUG_COMBO(BUG) Bug ## BUG ## Combo->ItemIndex = 2 - aSessionData->Bug[sb ## BUG]
+    #define LOAD_BUG_COMBO(BUG) \
+      Bug ## BUG ## Combo->ItemIndex = 2 - aSessionData->Bug[sb ## BUG]; \
+      if (Bug ## BUG ## Combo->ItemIndex < 0) Bug ## BUG ## Combo->ItemIndex = 0
     LOAD_BUG_COMBO(Ignore1);
     LOAD_BUG_COMBO(PlainPW1);
     LOAD_BUG_COMBO(RSA1);

+ 9 - 9
forms/Login.dfm

@@ -1023,7 +1023,7 @@ object LoginDialog: TLoginDialog
             Width = 73
             Height = 21
             Alignment = taRightJustify
-            MaxValue = 60
+            MaxValue = 3600
             MinValue = 1
             MaxLength = 2
             TabOrder = 3
@@ -1364,7 +1364,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 0
           end
           object BugPlainPW1Combo: TComboBox
@@ -1374,7 +1374,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 1
           end
           object BugRSA1Combo: TComboBox
@@ -1384,7 +1384,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 2
           end
           object BugHMAC2Combo: TComboBox
@@ -1394,7 +1394,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 3
           end
           object BugDeriveKey2Combo: TComboBox
@@ -1404,7 +1404,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 4
           end
           object BugRSAPad2Combo: TComboBox
@@ -1414,7 +1414,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 5
           end
           object BugDHGEx2Combo: TComboBox
@@ -1424,7 +1424,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 6
           end
           object BugPKSessID2Combo: TComboBox
@@ -1434,7 +1434,7 @@ object LoginDialog: TLoginDialog
             Height = 21
             Style = csDropDownList
             Anchors = [akLeft, akTop, akRight]
-            ItemHeight = 0
+            ItemHeight = 13
             TabOrder = 7
           end
         end

+ 4 - 0
forms/MessageDlg.cpp

@@ -137,6 +137,10 @@ TForm * __fastcall TMessageForm::Create(const AnsiString & Msg,
   {
     CancelButton = mbNo;
   }
+  else if (Buttons.Contains(mbAbort))
+  {
+    CancelButton = mbAbort;
+  }
   else
   {
     CancelButton = mbOK;

+ 0 - 880
forms/NonVisual.cpp.bak

@@ -1,880 +0,0 @@
-//---------------------------------------------------------------------------
-#include <vcl.h>
-#pragma hdrstop
-
-#include "NonVisual.h"
-
-#include <Common.h>
-#include <ScpMain.h>
-#include <TextsWin.h>
-
-#include <Log.h>
-#include <Interface.h>
-#include "WinConfiguration.h"
-#include "TerminalManager.h"
-//---------------------------------------------------------------------------
-#pragma package(smart_init)
-#pragma resource "*.dfm"
-TNonVisualDataModule *NonVisualDataModule;
-//---------------------------------------------------------------------------
-#define SCPCOMMANDER ((TScpCommanderForm *)ScpExplorer)
-#define UPDEX(HandleAction, Condition, OtherEnabled, OtherDisabled) if (Action == HandleAction) { \
-  ((TCustomAction *)Action)->Enabled = (Condition); \
-  if (((TCustomAction *)Action)->Enabled) { OtherEnabled; } else { OtherDisabled; }; \
-  Handled = true; } else
-#define UPD(HandleAction, Condition) if (Action == HandleAction) { \
-  ((TCustomAction *)Action)->Enabled = (Condition); Handled = true; } else
-#define EXE(HandleAction, Command) if (Action == HandleAction) { \
-  Command; Handled = true; } else
-#define UPDACT(HandleAction, Command) EXE(HandleAction, Command)
-#define UPDCOMP(COMP) if (Action == COMP ## Action) { COMP ## Action->Enabled = true; \
-  COMP ## Action->Checked = ScpExplorer->ComponentVisible[fc ## COMP]; Handled = true; } else
-#define EXECOMP(COMP) EXE(COMP ## Action, \
-  ScpExplorer->ComponentVisible[fc ## COMP] = !ScpExplorer->ComponentVisible[fc ## COMP] )
-#define COLPROPS(SIDE) \
-  ((TCustomDirViewColProperties*)ScpExplorer->DirView(os ## SIDE)->ColProperties)
-#define UPDSORT(SIDE, PREFIX, COL) if (Action == SIDE ## SortBy ## COL ## Action) { \
-  SIDE ## SortBy ## COL ## Action->Enabled = true; Handled = true; \
-  SIDE ## SortBy ## COL ## Action->Checked = (COLPROPS(SIDE)->SortColumn == PREFIX ## COL); } else
-#define EXESORT(SIDE, PREFIX, COL) EXE(SIDE ## SortBy ## COL ## Action, \
-    if (COLPROPS(SIDE)->SortColumn == PREFIX ## COL) \
-      COLPROPS(SIDE)->SortAscending = !COLPROPS(SIDE)->SortAscending; \
-    else COLPROPS(SIDE)->SortColumn = PREFIX ## COL )
-#define UPDSORTA(SIDE) if (Action == SIDE ## SortAscendingAction) { \
-  SIDE ## SortAscendingAction->Enabled = true; Handled = true; \
-  SIDE ## SortAscendingAction->Checked = COLPROPS(SIDE)->SortAscending; } else
-#define EXESORTA(SIDE) EXE(SIDE ## SortAscendingAction, \
-  COLPROPS(SIDE)->SortAscending = !COLPROPS(SIDE)->SortAscending; )
-#define UPDSORTC(LPREFIX, LCOL, RPREFIX, RCOL) if (Action == CurrentSortBy ## RCOL ## Action) { \
-  CurrentSortBy ## RCOL ## Action->Enabled = ScpExplorer->AllowedAction((TAction *)Action, aaShortCut); \
-  if (CurrentSortBy ## RCOL ## Action->Enabled) { \
-    if (ScpExplorer->DirView(osCurrent) == ScpExplorer->DirView(osRemote)) \
-         CurrentSortBy ## RCOL ## Action->Checked = (COLPROPS(Current)->SortColumn == RPREFIX ## RCOL); \
-    else CurrentSortBy ## RCOL ## Action->Checked = (COLPROPS(Current)->SortColumn == LPREFIX ## LCOL); \
-  } else CurrentSortBy ## RCOL ## Action->Checked =  false; Handled = true; } else
-#define EXESORTC(COL, LCOL, RCOL) \
-  EXE(CurrentSortBy ## COL ## Action, \
-    Integer NewSortCol = \
-      ((ScpExplorer->DirView(osCurrent) == ScpExplorer->DirView(osRemote)) ? RCOL : LCOL); \
-    if (COLPROPS(Current)->SortColumn == NewSortCol) \
-      COLPROPS(Current)->SortAscending = !COLPROPS(Current)->SortAscending; \
-    else COLPROPS(Current)->SortColumn = NewSortCol \
-  )
-#define UPDSHCOL(SIDE, PREFIX, COL) \
-  EXE(ShowHide ## SIDE ## COL ## ColumnAction, \
-    ShowHide ## SIDE ## COL ## ColumnAction->Checked = COLPROPS(SIDE)->Visible[PREFIX ## COL])
-#define EXESHCOL(SIDE, PREFIX, COL) \
-  EXE(ShowHide ## SIDE ## COL ## ColumnAction, \
-    COLPROPS(SIDE)->Visible[PREFIX ## COL] = !COLPROPS(SIDE)->Visible[PREFIX ## COL])
-//---------------------------------------------------------------------------
-__fastcall TNonVisualDataModule::TNonVisualDataModule(TComponent* Owner)
-        : TDataModule(Owner)
-{
-  FListColumn = NULL;
-  FSessionIdleTimerExecuting = false;
-  FIdle = true;
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::LogActionsUpdate(
-      TBasicAction *Action, bool &Handled)
-{
-  TLogMemo * LogMemo = TTerminalManager::Instance()->LogMemo;
-  bool ValidLogMemo = LogMemo && LogMemo->Parent;
-  UPD(LogClearAction, ValidLogMemo && LogMemo->Lines->Count)
-  UPD(LogSelectAllAction, ValidLogMemo && LogMemo->Lines->Count &&
-    LogMemo->SelLength != LogMemo->Lines->Text.Length())
-  UPD(LogCopyAction, ValidLogMemo && LogMemo->SelLength)
-
-  UPD(LogCloseAction, Configuration->Logging && (WinConfiguration->LogView == lvWindow))
-  ;
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::LogActionsExecute(
-      TBasicAction *Action, bool &Handled)
-{
-  assert(FIdle);
-  FIdle = false;
-
-  try
-  {
-    TLogMemo * LogMemo = TTerminalManager::Instance()->LogMemo;
-    assert(LogMemo && LogMemo->Parent);
-    EXE(LogClearAction, LogMemo->SessionLog->Clear())
-    EXE(LogSelectAllAction, LogMemo->SelectAll())
-    EXE(LogCopyAction, LogMemo->CopyToClipboard())
-
-    EXE(LogCloseAction, WinConfiguration->LogView = lvNone)
-    ;
-  }
-  __finally
-  {
-    FIdle = true;
-  }
-  
-  DoIdle();
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
-      TBasicAction *Action, bool &Handled)
-{
-  if (!ScpExplorer || !ScpExplorer->AllowedAction((TAction *)Action, aaUpdate))
-  {
-    ((TAction *)Action)->Enabled = false;
-    Handled = true;
-    return;
-  }
-  // CURRENT DIRVIEW
-  bool EnableSelectedOperation = ScpExplorer->EnableSelectedOperation[osCurrent];
-  bool EnableFocusedOperation = ScpExplorer->EnableFocusedOperation[osCurrent];
-  // focused operation
-  UPD(CurrentCopyFocusedAction, EnableFocusedOperation)
-  UPD(CurrentMoveFocusedAction, EnableFocusedOperation)
-  UPD(CurrentDeleteFocusedAction, EnableFocusedOperation)
-  UPD(CurrentPropertiesFocusedAction, EnableFocusedOperation)
-  UPD(RemoteMoveToFocusedAction, EnableFocusedOperation && (DirView(osRemote) == DirView(osCurrent)))
-  // file operation
-  UPD(CurrentRenameAction, EnableFocusedOperation &&
-    ((ScpExplorer->HasDirView[osLocal] && DirView(osLocal) == DirView(osCurrent)) ||
-      ScpExplorer->Terminal->IsCapable[fcRename]))
-  UPD(CurrentEditAction, EnableFocusedOperation &&
-    !WinConfiguration->DisableOpenEdit &&
-    !DirView(osCurrent)->ItemIsDirectory(DirView(osCurrent)->ItemFocused))
-  UPD(CurrentEditAlternativeAction, EnableFocusedOperation &&
-    !WinConfiguration->DisableOpenEdit &&
-    !DirView(osCurrent)->ItemIsDirectory(DirView(osCurrent)->ItemFocused) &&
-    (WinConfiguration->Editor.Editor == edExternal || !WinConfiguration->Editor.ExternalEditor.IsEmpty()))
-  UPD(CurrentOpenAction, EnableFocusedOperation &&
-    !WinConfiguration->DisableOpenEdit &&
-    !DirView(osCurrent)->ItemIsDirectory(DirView(osCurrent)->ItemFocused))
-  UPD(AddEditLinkAction, ScpExplorer->Terminal &&
-    (DirView(osCurrent) != DirView(osRemote) ||
-     (ScpExplorer->Terminal->IsCapable[fcResolveSymlink] &&
-      ScpExplorer->Terminal->IsCapable[fcSymbolicLink])))
-  // selected operaton
-  UPD(CurrentCopyAction, EnableSelectedOperation)
-  UPD(CurrentMoveAction, EnableSelectedOperation)
-  UPD(CurrentDeleteAction, EnableSelectedOperation)
-  UPD(CurrentPropertiesAction, EnableSelectedOperation)
-  UPD(RemoteMoveToAction, EnableSelectedOperation && (DirView(osRemote) == DirView(osCurrent)))
-  UPD(FileListToCommandLineAction, EnableSelectedOperation &&
-    ((DirView(osLocal) == DirView(osCurrent)) || ScpExplorer->Terminal->IsCapable[fcAnyCommand]))
-  UPD(FileListToClipboardAction, EnableSelectedOperation)
-  UPD(FullFileListToClipboardAction, EnableSelectedOperation)
-  // directory
-  UPD(CurrentCreateDirAction, true)
-  // selection
-  UPD(SelectOneAction, DirView(osCurrent)->FilesCount)
-  UPD(SelectAction, DirView(osCurrent)->FilesCount)
-  UPD(UnselectAction, DirView(osCurrent)->SelCount)
-  UPD(SelectAllAction, DirView(osCurrent)->FilesCount)
-  UPD(InvertSelectionAction, DirView(osCurrent)->FilesCount)
-  UPD(ClearSelectionAction, DirView(osCurrent)->SelCount)
-  UPD(PasteAction, DirView(osCurrent)->CanPasteFromClipBoard())
-
-  //style
-  UPDACT(CurrentCycleStyleAction,
-    CurrentCycleStyleAction->ImageIndex = 8 + (DirView(osCurrent)->ViewStyle + 1) % 4)
-  #define STYLEACTION(Style) UPDACT(Current ## Style ## Action, \
-    Current ## Style ## Action->Checked = (DirView(osCurrent)->ViewStyle == vs ## Style))
-  STYLEACTION(Icon)
-  STYLEACTION(SmallIcon)
-  STYLEACTION(List)
-  STYLEACTION(Report)
-  #undef STYLEACTION
-
-  // REMOTE+LOCAL
-  // back/forward
-  #define HISTORYACTION(SIDE, DIRECTION, HINTFMT, DELTA) \
-    UPDEX(SIDE ## DIRECTION ## Action, (DirView(os ## SIDE)->DIRECTION ## Count > 0), \
-    SIDE ## DIRECTION ## Action->Hint = FMTLOAD(HINTFMT, (DirView(os ## SIDE)->HistoryPath[DELTA])), \
-    SIDE ## DIRECTION ## Action->Hint = "")
-  HISTORYACTION(Local, Back, EXPLORER_BACK_HINT, -1)
-  HISTORYACTION(Local, Forward, EXPLORER_FORWARD_HINT, 1)
-  HISTORYACTION(Remote, Back, EXPLORER_BACK_HINT, -1)
-  HISTORYACTION(Remote, Forward, EXPLORER_FORWARD_HINT, 1)
-  #undef HISTORYACTION
-  #define PANEL_ACTIONS(SIDE) \
-    UPD(SIDE ## ParentDirAction, !DirView(os ## SIDE)->IsRoot) \
-    UPD(SIDE ## RootDirAction, !DirView(os ## SIDE)->IsRoot) \
-    UPD(SIDE ## HomeDirAction, true) \
-    UPD(SIDE ## RefreshAction, DirView(os ## SIDE)->DirOK) \
-    UPD(SIDE ## OpenDirAction, true) \
-    UPD(SIDE ## ChangePathAction, true) \
-    UPD(SIDE ## AddBookmarkAction, true) \
-    UPD(SIDE ## PathToClipboardAction, true)
-  PANEL_ACTIONS(Local)
-  PANEL_ACTIONS(Remote)
-  #undef PANEL_ACTIONS
-  UPD(LocalExploreDirectoryAction, true)
-
-  // HELP
-  UPD(AboutAction, true)
-  UPD(HomepageAction, true)
-  UPD(HistoryPageAction, true)
-  UPD(RequirementsPageAction, true)
-  UPD(ForumPageAction, true)
-  UPD(CheckForUpdatesAction, true)
-  UPD(DonatePageAction, true)
-
-  // VIEW
-  UPDCOMP(StatusBar)
-  UPDCOMP(ToolBar)
-  UPDCOMP(LocalStatusBar)
-  UPDCOMP(RemoteStatusBar)
-  UPDCOMP(CommandLinePanel)
-  UPDCOMP(RemoteTree)
-  UPDCOMP(LocalTree)
-  UPDCOMP(ExplorerMenuBand)
-  UPDCOMP(ExplorerAddressBand)
-  UPDCOMP(ExplorerToolbarBand)
-  UPDCOMP(ExplorerSelectionBand)
-  UPDCOMP(ExplorerSessionBand)
-  UPDCOMP(ExplorerPreferencesBand)
-  UPDCOMP(ExplorerSortBand)
-  UPDCOMP(CommanderMenuBand)
-  UPDCOMP(CommanderSessionBand)
-  UPDCOMP(CommanderPreferencesBand)
-  UPDCOMP(CommanderSelectionBand)
-  UPDCOMP(CommanderToolbarBand)
-  UPDCOMP(CommanderSortBand)
-  UPDCOMP(CommanderCommandsBand)
-  UPDCOMP(CommanderLocalHistoryBand)
-  UPDCOMP(CommanderLocalNavigationBand)
-  UPDCOMP(CommanderRemoteHistoryBand)
-  UPDCOMP(CommanderRemoteNavigationBand)
-
-  UPD(GoToCommandLineAction, true)
-  UPD(GoToTreeAction, true)
-  UPDEX(ViewLogAction, Configuration->Logging,
-    ViewLogAction->Checked = (WinConfiguration->LogView == lvWindow),
-    ViewLogAction->Checked = false )
-  UPDEX(ShowHiddenFilesAction, true,
-    ShowHiddenFilesAction->Checked = WinConfiguration->ShowHiddenFiles, )
-  UPD(PreferencesAction, true)
-
-  // SORT
-  UPDSORTA(Local)
-  UPDSORT(Local, dv, Name)
-  UPDSORT(Local, dv, Ext)
-  UPDSORT(Local, dv, Size)
-  UPDSORT(Local, dv, Type)
-  UPDSORT(Local, dv, Changed)
-  UPDSORT(Local, dv, Attr)
-  UPDSORTA(Remote)
-  UPDSORT(Remote, uv, Name)
-  UPDSORT(Remote, uv, Ext)
-  UPDSORT(Remote, uv, Size)
-  UPDSORT(Remote, uv, Changed)
-  UPDSORT(Remote, uv, Rights)
-  UPDSORT(Remote, uv, Owner)
-  UPDSORT(Remote, uv, Group)
-  UPDSORTA(Current)
-  UPDSORTC(dv, Name, uv, Name)
-  UPDSORTC(dv, Ext, uv, Ext)
-  UPDSORTC(dv, Size, uv, Size)
-  #define uvType uvName /* no type columns on remote panel */
-  UPDSORTC(dv, Type, uv, Type)
-  #undef uvType
-  UPDSORTC(dv, Changed, uv, Changed)
-  UPDSORTC(dv, Attr, uv, Rights)
-  UPDSORTC(dv, Name, uv, Owner)
-  UPDSORTC(dv, Name, uv, Group)
-  #define COLVIEWPROPS ((TCustomDirViewColProperties*)(((TCustomDirView*)(((TListColumns*)(ListColumn->Collection))->Owner()))->ColProperties))
-  UPDEX(SortColumnAscendingAction, (ListColumn != NULL), SortColumnAscendingAction->Checked =
-    (COLVIEWPROPS->SortColumn == ListColumn->Index) && COLVIEWPROPS->SortAscending, /*assert(false)*/  )
-  UPDEX(SortColumnDescendingAction, (ListColumn != NULL), SortColumnDescendingAction->Checked =
-    (COLVIEWPROPS->SortColumn == ListColumn->Index) && !COLVIEWPROPS->SortAscending, /*assert(false)*/ )
-  #undef COLVIEWPROPS
-
-  // SHOW/HIDE COLUMN
-  UPDSHCOL(Local, dv, Name)
-  UPDSHCOL(Local, dv, Ext)
-  UPDSHCOL(Local, dv, Size)
-  UPDSHCOL(Local, dv, Type)
-  UPDSHCOL(Local, dv, Changed)
-  UPDSHCOL(Local, dv, Attr)
-  UPDSHCOL(Remote, uv, Name)
-  UPDSHCOL(Remote, uv, Ext)
-  UPDSHCOL(Remote, uv, Size)
-  UPDSHCOL(Remote, uv, Changed)
-  UPDSHCOL(Remote, uv, Rights)
-  UPDSHCOL(Remote, uv, Owner)
-  UPDSHCOL(Remote, uv, Group)
-  UPD(HideColumnAction, (ListColumn != NULL))
-
-  // SESSION
-  UPD(NewSessionAction, true)
-  UPD(CloseSessionAction, true)
-  UPD(SavedSessionsAction, (StoredSessions->Count > 0))
-  UPD(OpenedSessionsAction, true)
-  UPD(SaveCurrentSessionAction, true)
-
-  // COMMAND
-  UPD(CompareDirectoriesAction, true)
-  UPD(SynchronizeAction, true)
-  UPD(FullSynchronizeAction, true)
-  UPD(ConsoleAction, ScpExplorer->Terminal && ScpExplorer->Terminal->IsCapable[fcAnyCommand])
-  UPD(PuttyAction, true)
-  UPD(SynchronizeBrowsingAction, true)
-  UPD(CloseApplicationAction, true)
-  UPD(FileSystemInfoAction, true)
-  UPD(ClearCachesAction, (ScpExplorer->Terminal != NULL) && !ScpExplorer->Terminal->AreCachesEmpty)
-
-  // CUSTOM COMMANDS
-  UPD(CustomCommandsAction,
-    (ScpExplorer->DirView(osCurrent) == ScpExplorer->DirView(osRemote)) &&
-    ScpExplorer->Terminal && ScpExplorer->Terminal->IsCapable[fcAnyCommand])
-  UPD(CustomCommandsCustomizeAction, true)
-
-  // QUEUE
-  #define UPDQUEUE(OPERATION) UPD(Queue ## OPERATION ## Action, \
-    ScpExplorer->AllowQueueOperation(qo ## OPERATION))
-  UPDQUEUE(GoTo)
-  UPDQUEUE(Preferences)
-  UPDEX(QueueItemQueryAction, ScpExplorer->AllowQueueOperation(qoItemQuery),
-    ((TAction *)Action)->Visible = true, ((TAction *)Action)->Visible = false)
-  UPDEX(QueueItemErrorAction, ScpExplorer->AllowQueueOperation(qoItemError),
-    ((TAction *)Action)->Visible = true, ((TAction *)Action)->Visible = false)
-  UPDEX(QueueItemPromptAction, ScpExplorer->AllowQueueOperation(qoItemPrompt),
-    ((TAction *)Action)->Visible = true, ((TAction *)Action)->Visible = false)
-  UPDQUEUE(ItemDelete)
-  UPDQUEUE(ItemExecute)
-  UPDQUEUE(ItemUp)
-  UPDQUEUE(ItemDown)
-  #undef UPDQUEUE
-  UPDACT(QueueToggleShowAction,
-    ((TAction *)Action)->Checked = ScpExplorer->ComponentVisible[fcQueueView])
-  #define QUEUEACTION(SHOW) UPDACT(Queue ## SHOW ## Action, \
-    ((TAction *)Action)->Checked = WinConfiguration->QueueView.Show == qv ## SHOW)
-  QUEUEACTION(Show)
-  QUEUEACTION(HideWhenEmpty)
-  QUEUEACTION(Hide)
-  #undef QUEUEACTION
-  UPDCOMP(CommanderPreferencesBand)
-  UPDACT(QueueToolbarAction,
-    ((TAction *)Action)->Enabled = ScpExplorer->ComponentVisible[fcQueueView];
-    ((TAction *)Action)->Checked = ScpExplorer->ComponentVisible[fcQueueToolbar]);
-  ;
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::ExplorerActionsExecute(
-      TBasicAction *Action, bool &Handled)
-{
-  assert(ScpExplorer);
-  if (!ScpExplorer->AllowedAction((TAction *)Action, aaExecute))
-  {
-    Handled = true;
-    return;
-  }
-  
-  assert(FIdle);
-  FIdle = false;
-  try
-  {
-    // focused operation
-    EXE(CurrentCopyFocusedAction, ScpExplorer->ExecuteFileOperation(foCopy, osCurrent, true))
-    EXE(CurrentMoveFocusedAction, ScpExplorer->ExecuteFileOperation(foMove, osCurrent, true))
-    EXE(CurrentDeleteFocusedAction, ScpExplorer->ExecuteFileOperation(foDelete, osCurrent, true))
-    EXE(CurrentPropertiesFocusedAction, ScpExplorer->ExecuteFileOperation(foSetProperties, osCurrent, true))
-    EXE(RemoteMoveToFocusedAction, ScpExplorer->ExecuteFileOperation(foRemoteMove, osCurrent, true))
-    // operation
-    EXE(CurrentCopyAction, ScpExplorer->ExecuteFileOperation(foCopy, osCurrent, false))
-    EXE(CurrentMoveAction, ScpExplorer->ExecuteFileOperation(foMove, osCurrent, false))
-    EXE(CurrentEditAction, ScpExplorer->ExecuteFile(osCurrent, efEditor))
-    EXE(CurrentEditAlternativeAction, ScpExplorer->ExecuteFile(osCurrent, efAlternativeEditor))
-    EXE(CurrentOpenAction, ScpExplorer->ExecuteCurrentFile())
-    EXE(AddEditLinkAction, ScpExplorer->AddEditLink())
-    EXE(CurrentRenameAction, ScpExplorer->ExecuteFileOperation(foRename, osCurrent, false))
-    EXE(CurrentDeleteAction, ScpExplorer->ExecuteFileOperation(foDelete, osCurrent, false))
-    EXE(CurrentPropertiesAction, ScpExplorer->ExecuteFileOperation(foSetProperties, osCurrent, false))
-    EXE(RemoteMoveToAction, ScpExplorer->ExecuteFileOperation(foRemoteMove, osCurrent, false))
-    EXE(FileListToCommandLineAction, ScpExplorer->PanelExport(osCurrent, peFileList, pedCommandLine))
-    EXE(FileListToClipboardAction, ScpExplorer->PanelExport(osCurrent, peFileList, pedClipboard))
-    EXE(FullFileListToClipboardAction, ScpExplorer->PanelExport(osCurrent, peFullFileList, pedClipboard))
-    // directory
-    EXE(CurrentCreateDirAction, ScpExplorer->CreateDirectory(osCurrent))
-    //selection
-    EXE(SelectOneAction, DirView(osCurrent)->SelectCurrentItem(DirView(osCurrent)->NortonLike))
-    EXE(SelectAction, DirView(osCurrent)->DoSelectByMask(true))
-    EXE(UnselectAction, DirView(osCurrent)->DoSelectByMask(false))
-    EXE(SelectAllAction, DirView(osCurrent)->SelectAll(smAll))
-    EXE(InvertSelectionAction, DirView(osCurrent)->SelectAll(smInvert))
-    EXE(ClearSelectionAction, DirView(osCurrent)->SelectAll(smNone))
-    EXE(PasteAction, DirView(osCurrent)->PasteFromClipBoard())
-
-    // style
-    EXE(CurrentCycleStyleAction,
-      if (DirView(osCurrent)->ViewStyle == vsReport) DirView(osCurrent)->ViewStyle = vsIcon;
-        else DirView(osCurrent)->ViewStyle = (TViewStyle)(DirView(osCurrent)->ViewStyle + 1);
-    )
-    #define STYLEACTION(Style) EXE(Current ## Style ## Action, \
-      DirView(osCurrent)->ViewStyle = vs ## Style)
-    STYLEACTION(Icon)
-    STYLEACTION(SmallIcon)
-    STYLEACTION(List)
-    STYLEACTION(Report)
-    #undef STYLEACTION
-
-    #define PANEL_ACTIONS(SIDE) \
-      EXE(SIDE ## BackAction, DirView(os ## SIDE)->HistoryGo(-1)) \
-      EXE(SIDE ## ForwardAction, DirView(os ## SIDE)->HistoryGo(1)) \
-      EXE(SIDE ## ParentDirAction, DirView(os ## SIDE)->ExecuteParentDirectory()) \
-      EXE(SIDE ## RootDirAction, DirView(os ## SIDE)->ExecuteRootDirectory()) \
-      EXE(SIDE ## HomeDirAction, DirView(os ## SIDE)->ExecuteHomeDirectory()) \
-      EXE(SIDE ## RefreshAction, DirView(os ## SIDE)->ReloadDirectory()) \
-      EXE(SIDE ## OpenDirAction, ScpExplorer->OpenDirectory(os ## SIDE)) \
-      EXE(SIDE ## ChangePathAction, ScpExplorer->ChangePath(os ## SIDE)) \
-      EXE(SIDE ## AddBookmarkAction, ScpExplorer->AddBookmark(os ## SIDE)) \
-      EXE(SIDE ## PathToClipboardAction, ScpExplorer->PanelExport(os ## SIDE, pePath, pedClipboard))
-    PANEL_ACTIONS(Local)
-    PANEL_ACTIONS(Remote)
-    #undef PANEL_ACTIONS
-    EXE(LocalExploreDirectoryAction, ScpExplorer->ExploreLocalDirectory())
-
-    //HELP
-    EXE(AboutAction, DoAboutDialog(Configuration))
-    EXE(HomepageAction, OpenBrowser(LoadStr(HOMEPAGE_URL)))
-    EXE(HistoryPageAction, OpenBrowser(LoadStr(HISTORY_URL)))
-    EXE(RequirementsPageAction, OpenBrowser(LoadStr(REQUIREMENTS_URL)))
-    EXE(ForumPageAction, OpenBrowser(LoadStr(FORUM_URL)))
-    EXE(CheckForUpdatesAction, CheckForUpdates())
-    EXE(DonatePageAction, OpenBrowser(LoadStr(DONATE_URL)))
-
-    // VIEW
-    EXECOMP(StatusBar)
-    EXECOMP(ToolBar)
-    EXECOMP(LocalStatusBar)
-    EXECOMP(RemoteStatusBar)
-    EXECOMP(ExplorerMenuBand)
-    EXECOMP(ExplorerAddressBand)
-    EXECOMP(ExplorerToolbarBand)
-    EXECOMP(ExplorerSelectionBand)
-    EXECOMP(ExplorerSessionBand)
-    EXECOMP(ExplorerPreferencesBand)
-    EXECOMP(ExplorerSortBand)
-    EXECOMP(CommanderMenuBand)
-    EXECOMP(CommanderSessionBand)
-    EXECOMP(CommanderPreferencesBand)
-    EXECOMP(CommanderSelectionBand)
-    EXECOMP(CommanderToolbarBand)
-    EXECOMP(CommanderSortBand)
-    EXECOMP(CommanderCommandsBand)
-    EXECOMP(CommanderLocalHistoryBand)
-    EXECOMP(CommanderLocalNavigationBand)
-    EXECOMP(CommanderRemoteHistoryBand)
-    EXECOMP(CommanderRemoteNavigationBand)
-    EXECOMP(CommandLinePanel)
-    EXECOMP(RemoteTree)
-    EXECOMP(LocalTree)
-    EXE(GoToCommandLineAction, ScpExplorer->GoToCommandLine())
-    EXE(GoToTreeAction, ScpExplorer->GoToTree())
-
-    EXE(ViewLogAction, WinConfiguration->LogView =
-      (WinConfiguration->LogView == lvNone ? lvWindow : lvNone) )
-    EXE(ShowHiddenFilesAction, WinConfiguration->ShowHiddenFiles = !WinConfiguration->ShowHiddenFiles)
-    EXE(PreferencesAction, DoPreferencesDialog(pmDefault) )
-
-    #define COLVIEWPROPS ((TCustomDirViewColProperties*)(((TCustomDirView*)(((TListColumns*)(ListColumn->Collection))->Owner()))->ColProperties))
-    // SORT
-    EXESORTA(Local)
-    EXESORT(Local, dv, Name)
-    EXESORT(Local, dv, Ext)
-    EXESORT(Local, dv, Size)
-    EXESORT(Local, dv, Type)
-    EXESORT(Local, dv, Changed)
-    EXESORT(Local, dv, Attr)
-    EXESORTA(Remote)
-    EXESORT(Remote, uv, Name)
-    EXESORT(Remote, uv, Ext)
-    EXESORT(Remote, uv, Size)
-    EXESORT(Remote, uv, Changed)
-    EXESORT(Remote, uv, Rights)
-    EXESORT(Remote, uv, Owner)
-    EXESORT(Remote, uv, Group)
-    EXESORTA(Current)
-    EXESORTC(Name, dvName, uvName)
-    EXESORTC(Ext, dvExt, uvExt)
-    EXESORTC(Size, dvSize, uvSize)
-    EXESORTC(Type, dvType, uvName)
-    EXESORTC(Changed, dvChanged, uvChanged)
-    EXESORTC(Rights, dvAttr, uvRights)
-    EXESORTC(Owner, dvName, uvOwner)
-    EXESORTC(Group, dvName, uvGroup)
-    EXE(SortColumnAscendingAction, assert(ListColumn);
-      COLVIEWPROPS->SortColumn = ListColumn->Index; COLVIEWPROPS->SortAscending = true; ListColumn = NULL )
-    EXE(SortColumnDescendingAction, assert(ListColumn);
-      COLVIEWPROPS->SortColumn = ListColumn->Index; COLVIEWPROPS->SortAscending = false; ListColumn = NULL )
-
-    // SHOW/HIDE COLUMN
-    EXESHCOL(Local, dv, Name)
-    EXESHCOL(Local, dv, Ext)
-    EXESHCOL(Local, dv, Size)
-    EXESHCOL(Local, dv, Type)
-    EXESHCOL(Local, dv, Changed)
-    EXESHCOL(Local, dv, Attr)
-    EXESHCOL(Remote, uv, Name)
-    EXESHCOL(Remote, uv, Ext)
-    EXESHCOL(Remote, uv, Size)
-    EXESHCOL(Remote, uv, Changed)
-    EXESHCOL(Remote, uv, Rights)
-    EXESHCOL(Remote, uv, Owner)
-    EXESHCOL(Remote, uv, Group)
-    EXE(HideColumnAction, assert(ListColumn);
-      COLVIEWPROPS->Visible[ListColumn->Index] = false; ListColumn = NULL )
-    #undef COLVIEWPROPS
-
-    // SESSION
-    EXE(NewSessionAction, ScpExplorer->NewSession())
-    EXE(CloseSessionAction, ScpExplorer->CloseSession())
-    EXE(SavedSessionsAction, CreateSessionListMenu())
-    EXE(OpenedSessionsAction, )
-    EXE(SaveCurrentSessionAction, ScpExplorer->SaveCurrentSession())
-
-    // COMMAND
-    EXE(CompareDirectoriesAction, ScpExplorer->CompareDirectories())
-    EXE(SynchronizeAction, ScpExplorer->SynchronizeDirectories())
-    EXE(FullSynchronizeAction, ScpExplorer->FullSynchronizeDirectories())
-    EXE(ConsoleAction, ScpExplorer->OpenConsole())
-    EXE(PuttyAction, ScpExplorer->OpenInPutty())
-    EXE(SynchronizeBrowsingAction, )
-    EXE(CloseApplicationAction, ScpExplorer->Close())
-    EXE(FileSystemInfoAction, DoFileSystemInfoDialog(ScpExplorer->Terminal))
-    EXE(ClearCachesAction, ScpExplorer->Terminal->ClearCaches())
-
-    // CUSTOM COMMANDS
-    EXE(CustomCommandsAction, CreateCustomCommandsMenu(CustomCommandsAction))
-    EXE(CustomCommandsCustomizeAction, DoPreferencesDialog(pmCustomCommands))
-
-    // QUEUE
-    #define EXEQUEUE(OPERATION) EXE(Queue ## OPERATION ## Action, \
-      ScpExplorer->ExecuteQueueOperation(qo ## OPERATION))
-    EXEQUEUE(GoTo)
-    EXEQUEUE(Preferences)
-    EXEQUEUE(ItemQuery)
-    EXEQUEUE(ItemError)
-    EXEQUEUE(ItemPrompt)
-    EXEQUEUE(ItemDelete)
-    EXEQUEUE(ItemExecute)
-    EXEQUEUE(ItemUp)
-    EXEQUEUE(ItemDown)
-    #undef EXEQUEUE
-    EXE(QueueToggleShowAction,
-      TQueueViewConfiguration Config = WinConfiguration->QueueView;
-      Config.Show = ScpExplorer->ComponentVisible[fcQueueView] ? qvHide : qvShow;
-      WinConfiguration->QueueView = Config)
-    #define QUEUEACTION(SHOW) EXE(Queue ## SHOW ## Action, \
-      TQueueViewConfiguration Config = WinConfiguration->QueueView; \
-      Config.Show = qv ## SHOW; WinConfiguration->QueueView = Config)
-    QUEUEACTION(Show)
-    QUEUEACTION(HideWhenEmpty)
-    QUEUEACTION(Hide)
-    #undef QUEUEACTION
-    EXECOMP(QueueToolbar);
-    ;
-  }
-  __finally
-  {
-    FIdle = true;
-  }
-
-  DoIdle();
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::UpdateNonVisibleActions()
-{
-  // following actions needs to be updated even when all clients
-  // are invisible, so the queue list toolbar button can be shown
-  NonVisualDataModule->QueueItemQueryAction->Update();
-  NonVisualDataModule->QueueItemErrorAction->Update();
-  NonVisualDataModule->QueueItemPromptAction->Update();
-}
-//---------------------------------------------------------------------------
-#define CTRL TShiftState() << ssCtrl
-#define ALT TShiftState() << ssAlt
-#define SHIFT TShiftState() << ssShift
-#define CTRLSHIFT TShiftState() << ssCtrl << ssShift
-#define CTRLALT TShiftState() << ssCtrl << ssAlt
-#define NONE TShiftState()
-void __fastcall TNonVisualDataModule::ExplorerShortcuts()
-{
-  // Directory
-  CurrentCreateDirAction->ShortCut = ShortCut('D', CTRL);
-  // File operation
-  CurrentRenameAction->ShortCut = ShortCut(VK_F2, NONE);
-  CurrentEditAction->ShortCut = ShortCut('E', CTRL);
-  CurrentEditAlternativeAction->ShortCut = ShortCut('E', CTRLSHIFT);
-  AddEditLinkAction->ShortCut = ShortCut('L', CTRLALT);
-  // Focused operation
-  CurrentCopyFocusedAction->ShortCut = ShortCut('C', CTRL);
-  CurrentMoveFocusedAction->ShortCut = ShortCut('M', CTRL);
-  CurrentDeleteFocusedAction->ShortCut = ShortCut(VK_DELETE, NONE);
-  CurrentPropertiesFocusedAction->ShortCut = ShortCut(VK_RETURN, ALT);
-  RemoteMoveToFocusedAction->ShortCut = ShortCut('M', CTRLALT);
-  // remote directory
-  RemoteOpenDirAction->ShortCut = ShortCut('O', CTRL);
-  RemoteRefreshAction->ShortCut = ShortCut(VK_F5, NONE);
-  RemoteHomeDirAction->ShortCut = ShortCut('H', CTRL);
-  // selected operation
-  CurrentCopyAction->ShortCut = CurrentCopyFocusedAction->ShortCut;
-  CurrentMoveAction->ShortCut = CurrentMoveFocusedAction->ShortCut;
-  CurrentDeleteAction->ShortCut = CurrentDeleteFocusedAction->ShortCut;
-  CurrentPropertiesAction->ShortCut = CurrentPropertiesFocusedAction->ShortCut;
-  RemoteMoveToAction->ShortCut = ShortCut('M', CTRLALT);
-  // selection
-  SelectAction->ShortCut = ShortCut(VK_ADD, NONE);
-  UnselectAction->ShortCut = ShortCut(VK_SUBTRACT, NONE);
-  SelectAllAction->ShortCut = ShortCut('A', CTRL);
-  InvertSelectionAction->ShortCut = ShortCut(VK_MULTIPLY, NONE);
-  ClearSelectionAction->ShortCut = ShortCut('L', CTRL);
-
-  CloseApplicationAction->ShortCut = ShortCut(VK_F4, ALT);
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::CommanderShortcuts()
-{
-  // Directory
-  CurrentCreateDirAction->ShortCut = ShortCut(VK_F7, NONE);
-  // File operation
-  CurrentRenameAction->ShortCut = ShortCut(VK_F2, NONE);
-  CurrentEditAction->ShortCut = ShortCut(VK_F4, NONE);
-  CurrentEditAlternativeAction->ShortCut = ShortCut(VK_F4, SHIFT);
-  AddEditLinkAction->ShortCut = ShortCut(VK_F6, ALT);
-  // Focused operation
-  CurrentCopyFocusedAction->ShortCut = ShortCut(VK_F5, NONE);
-  CurrentMoveFocusedAction->ShortCut = ShortCut(VK_F6, NONE);
-  CurrentDeleteFocusedAction->ShortCut = ShortCut(VK_F8, NONE);
-  CurrentPropertiesFocusedAction->ShortCut = ShortCut(VK_F9, NONE);
-  RemoteMoveToFocusedAction->ShortCut = ShortCut(VK_F6, SHIFT);
-  // remote directory
-  RemoteOpenDirAction->ShortCut = ShortCut('O', CTRL);
-  RemoteRefreshAction->ShortCut = ShortCut('R', CTRL);
-  RemoteHomeDirAction->ShortCut = ShortCut('H', CTRL);
-  RemotePathToClipboardAction->ShortCut = ShortCut(VK_OEM_6 /* ] */, CTRL);
-  // local directory
-  LocalOpenDirAction->ShortCut = RemoteOpenDirAction->ShortCut;
-  LocalRefreshAction->ShortCut = RemoteRefreshAction->ShortCut;
-  LocalHomeDirAction->ShortCut = RemoteHomeDirAction->ShortCut;
-  LocalPathToClipboardAction->ShortCut = ShortCut(VK_OEM_4 /* [ */, CTRL);
-  // selected operation
-  CurrentCopyAction->ShortCut = CurrentCopyFocusedAction->ShortCut;
-  CurrentMoveAction->ShortCut = CurrentMoveFocusedAction->ShortCut;
-  CurrentDeleteAction->ShortCut = CurrentDeleteFocusedAction->ShortCut;
-  CurrentDeleteAction->SecondaryShortCuts->Clear();
-  CurrentDeleteAction->SecondaryShortCuts->Add(ShortCutToText(ShortCut(VK_DELETE, NONE)));
-  CurrentPropertiesAction->ShortCut = CurrentPropertiesFocusedAction->ShortCut;
-  RemoteMoveToAction->ShortCut = ShortCut(VK_F6, SHIFT);
-  // selection
-  SelectOneAction->ShortCut = VK_INSERT;
-  SelectAction->ShortCut = ShortCut(VK_ADD, NONE);
-  UnselectAction->ShortCut = ShortCut(VK_SUBTRACT, NONE);
-  SelectAllAction->ShortCut = ShortCut('A', CTRL);
-  InvertSelectionAction->ShortCut = ShortCut(VK_MULTIPLY, NONE);
-  ClearSelectionAction->ShortCut = ShortCut('L', CTRL);
-
-  CloseApplicationAction->ShortCut = ShortCut(VK_F10, NONE);
-}
-#undef CTRL
-#undef ALT
-#undef NONE
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::SetScpExplorer(TCustomScpExplorerForm * value)
-{
-  FScpExplorer = value;
-  SessionIdleTimer->Enabled = (FScpExplorer != NULL);
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::SessionIdleTimerTimer(
-      TObject */*Sender*/)
-{
-  DoIdle();
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::DoIdle()
-{
-  if (!FSessionIdleTimerExecuting)
-  {
-    FSessionIdleTimerExecuting = true;
-    try
-    {
-      assert(ScpExplorer);
-      ScpExplorer->Idle(FIdle);
-    }
-    __finally
-    {
-      FSessionIdleTimerExecuting = false;
-    }
-  }
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::CreateCustomCommandsMenu(TAction * Action)
-{
-  assert(Action);
-  TMenuItem * Menu = dynamic_cast<TMenuItem *>(Action->ActionComponent);
-  if (Menu)
-  {
-    int PrevCount = Menu->Count;
-    for (int Index = 0; Index < WinConfiguration->CustomCommands->Count; Index++)
-    {
-      AnsiString Description = WinConfiguration->CustomCommands->Names[Index];
-      AnsiString Command = WinConfiguration->CustomCommands->Values[Description];
-
-      TMenuItem * Item = new TMenuItem(Menu);
-      Item->Caption = Description;
-      Item->Tag = Index;
-      if (Menu == RemoteDirViewCustomCommandsMenu)
-      {
-        Item->Tag = Item->Tag | 0x0100;
-      }
-      Item->Hint = FMTLOAD(CUSTOM_COMMAND_HINT,
-        (StringReplace(Description, "&", "", TReplaceFlags() << rfReplaceAll)));
-      Item->OnClick = CustomCommandClick;
-      Menu->Add(Item);
-    }
-
-    TMenuItem * Item;
-    if (WinConfiguration->CustomCommands->Count)
-    {
-      Item = new TMenuItem(Menu);
-      Item->Caption = "-";
-      Item->Hint = "E";
-      Menu->Add(Item);
-    }
-
-    Item = new TMenuItem(Menu);
-    Item->Action = CustomCommandsCustomizeAction;
-    Menu->Add(Item);
-
-    for (int Index = 0; Index < PrevCount; Index++)
-    {
-      Menu->Delete(0);
-    }
-  }
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::CustomCommandClick(TObject * Sender)
-{
-  TMenuItem * Item = dynamic_cast<TMenuItem *>(Sender);
-  assert(Item);
-  AnsiString CommandName;
-  CommandName = WinConfiguration->CustomCommands->Names[Item->Tag & 0x00FF];
-  ScpExplorer->ExecuteFileOperation(foCustomCommand, osRemote,
-    (Item->Tag & 0xFF00) != 0, false, &CommandName);
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::CreateSessionListMenu()
-{
-  int PrevCount = SavedSessionsMenu->Count;
-  StoredSessions->Load();
-  for (int Index = 0; Index < StoredSessions->Count; Index++)
-  {
-    TSessionData * Data = StoredSessions->Sessions[Index];
-    TMenuItem * Item = new TMenuItem(SavedSessionsMenu);
-    Item->Caption = Data->Name;
-    Item->Tag = Index;
-    Item->Hint = FMTLOAD(SAVEDSESSION_HINT, (Data->Name));
-    Item->OnClick = SessionItemClick;
-    SavedSessionsMenu->Add(Item);
-  }
-  for (int Index = 0; Index < PrevCount; Index++)
-  {
-    SavedSessionsMenu->Delete(0);
-  }
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::SessionItemClick(TObject * Sender)
-{
-  assert(StoredSessions && (((TMenuItem *)Sender)->Tag < StoredSessions->Count));
-  ScpExplorer->OpenStoredSession(StoredSessions->Sessions[((TMenuItem *)Sender)->Tag]);
-}
-//---------------------------------------------------------------------------
-TShortCut __fastcall TNonVisualDataModule::OpenSessionShortCut(int Index)
-{
-  if (Index >= 0 && Index < 10)
-  {
-    return ShortCut((Word)(Index < 9 ? '0' + 1 + Index : '0'),
-      TShiftState() << ssAlt);
-  }
-  else
-  {
-    return scNone;
-  }
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::CreateOpenedSessionListMenu()
-{
-  TTerminalManager * Manager = TTerminalManager::Instance();
-  TStrings * TerminalList = Manager->TerminalList;
-  int PrevCount = OpenedSessionsMenu->Count;
-  for (int Index = 0; Index < TerminalList->Count; Index++)
-  {
-    TTerminal * Terminal = dynamic_cast<TTerminal *>(TerminalList->Objects[Index]);
-    assert(Terminal);
-    TMenuItem * Item = new TMenuItem(this);
-    Item->Caption = TerminalList->Strings[Index];
-    Item->Tag = int(Terminal);
-    Item->Hint = FMTLOAD(OPENEDSESSION_HINT, (Item->Caption));
-    Item->Checked = (Manager->ActiveTerminal == Terminal);
-    Item->ShortCut = OpenSessionShortCut(Index);
-    Item->OnClick = OpenedSessionItemClick;
-    OpenedSessionsMenu->Add(Item);
-  }
-  for (int Index = 0; Index < PrevCount; Index++)
-  {
-    OpenedSessionsMenu->Delete(0);
-  }
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::OpenedSessionItemClick(TObject * Sender)
-{
-  TTerminalManager::Instance()->ActiveTerminal = (TTerminal*)(((TMenuItem *)Sender)->Tag);
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::OpenBrowser(AnsiString URL)
-{
-  ShellExecute(Application->Handle, "open", URL.c_str(), NULL, NULL, SW_SHOWNORMAL);
-}
-//---------------------------------------------------------------------------
-void __fastcall TNonVisualDataModule::QueuePopupPopup(TObject * /*Sender*/)
-{
-  TAction * Action = NULL;
-  bool HideFirstLine = true;
-
-  switch (ScpExplorer->DefaultQueueOperation())
-  {
-    case qoItemQuery:
-      Action = QueueItemQueryAction;
-      HideFirstLine = false;
-      break;
-
-    case qoItemError:
-      Action = QueueItemErrorAction;
-      HideFirstLine = false;
-      break;
-
-    case qoItemPrompt:
-      Action = QueueItemPromptAction;
-      HideFirstLine = false;
-      break;
-
-    case qoItemExecute:
-      Action = QueueItemExecuteAction;
-      break;
-  }
-
-  TMenuItem * Item;
-  for (int Index = 0; Index < QueuePopup->Items->Count; Index++)
-  {
-    Item = QueuePopup->Items->Items[Index];
-    Item->Default = (Action != NULL) && (Item->Action == Action);
-    if (Item->Caption == "-")
-    {
-      Item->Visible = !HideFirstLine;
-      HideFirstLine = false;
-    }
-  }
-}
-//---------------------------------------------------------------------------
-
-
-
-

+ 4 - 8
forms/ScpCommander.cpp

@@ -1207,19 +1207,15 @@ void __fastcall TScpCommanderForm::PathLabelDblClick(TObject * Sender)
 void __fastcall TScpCommanderForm::LocalPathLabelGetStatus(
   TCustomPathLabel * /*Sender*/, bool & Active)
 {
-  if (LocalDriveView->Focused())
-  {
-    Active = true;
-  }
+  // this strange form is here to make borland compiler work :-)
+  Active = Active || LocalDriveView->Focused();
 }
 //---------------------------------------------------------------------------
 void __fastcall TScpCommanderForm::RemotePathLabelGetStatus(
   TCustomPathLabel * /*Sender*/, bool & Active)
 {
-  if (RemoteDriveView->Focused())
-  {
-    Active = true;
-  }
+  // this strange form is here to make borland compiler work :-)
+  Active = Active || RemoteDriveView->Focused();
 }
 //---------------------------------------------------------------------------
 

+ 0 - 249
forms/ScpCommander.h.bak

@@ -1,249 +0,0 @@
-//---------------------------------------------------------------------------
-#ifndef ScpCommanderH
-#define ScpCommanderH
-//---------------------------------------------------------------------------
-#include "CustomScpExplorer.h"
-
-#include <Classes.hpp>
-#include <Controls.hpp>
-#include <StdCtrls.hpp>
-#include <Forms.hpp>
-#include <AssociatedStatusBar.hpp>
-#include <CustomDirView.hpp>
-#include <CustomUnixDirView.hpp>
-#include <IEListView.hpp>
-#include <NortonLikeListView.hpp>
-#include <UnixDirView.h>
-#include <ComCtrls.hpp>
-#include <ExtCtrls.hpp>
-#include <ToolWin.hpp>
-#include <DirView.hpp>
-#include <CustomPathComboBox.hpp>
-#include <IEComboBox.hpp>
-#include <IEPathComboBox.hpp>
-#include <PathLabel.hpp>
-#include <UnixPathComboBox.h>
-#include <ToolbarPanel.hpp>
-
-#include <WinInterface.h>
-
-#include "HistoryComboBox.hpp"
-#include "CustomDriveView.hpp"
-#include "DriveView.hpp"
-#include "UnixDriveView.h"
-//---------------------------------------------------------------------------
-class TScpCommanderForm : public TCustomScpExplorerForm
-{
-__published:
-  TSplitter *Splitter;
-  TPanel *LocalPanel;
-  TAssociatedStatusBar *LocalStatusBar;
-  TDirView *LocalDirView;
-  TPathLabel *LocalPathLabel;
-  TPathLabel *RemotePathLabel;
-  TCoolBar *LocalCoolBar;
-  TCoolBar *RemoteCoolBar;
-  TToolbarPanel *ToolbarPanel;
-  TStatusBar *StatusBar;
-  TToolBar *MenuToolBar;
-  TToolButton *ToolButton2;
-  TToolButton *ToolButton19;
-  TToolButton *ToolButton1;
-  TToolButton *ToolButton3;
-  TToolButton *ToolButton4;
-  TToolBar *SelectionToolbar;
-  TToolButton *ToolButton23;
-  TToolButton *ToolButton24;
-  TToolButton *ToolButton25;
-  TToolButton *ToolButton26;
-  TToolButton *ToolButton28;
-  TToolButton *ToolButton29;
-  TToolBar *PreferencesToolbar;
-  TToolButton *ToolButton33;
-  TToolButton *ToolButton35;
-  TToolButton *ToolButton36;
-  TToolBar *SessionToolbar;
-  TToolButton *ToolButton30;
-  TToolButton *ToolButton31;
-  TToolButton *ToolButton32;
-  TToolButton *SavedSessionsButton;
-  TToolBar *CommandToolBar;
-  TToolButton *ToolButton5;
-  TToolButton *ToolButton6;
-  TToolButton *ToolButton17;
-  TToolButton *ToolButton27;
-  TToolButton *ToolButton34;
-  TToolButton *ToolButton16;
-  TToolButton *ToolButton37;
-  TToolButton *ToolButton38;
-  TToolBar *ToolBar1;
-  TToolButton *LocalBackButton;
-  TToolButton *LocalForwardButton;
-  TToolBar *ToolBar2;
-  TToolButton *ToolButton57;
-  TToolButton *ToolButton58;
-  TToolButton *ToolButton59;
-  TToolButton *ToolButton60;
-  TToolButton *ToolButton61;
-  TToolButton *ToolButton62;
-  TToolBar *ToolBar3;
-  TToolButton *RemoteBackButton;
-  TToolButton *RemoteForwardButton;
-  TToolBar *ToolBar4;
-  TToolButton *ToolButton87;
-  TToolButton *ToolButton88;
-  TToolButton *ToolButton89;
-  TToolButton *ToolButton90;
-  TToolButton *ToolButton91;
-  TToolButton *ToolButton92;
-  TToolButton *ToolButton7;
-  TToolBar *SortToolbar;
-  TToolButton *ToolButton8;
-  TToolButton *ToolButton9;
-  TToolButton *ToolButton10;
-  TToolButton *ToolButton11;
-  TToolButton *ToolButton13;
-  TToolButton *ToolButton15;
-  TToolButton *ToolButton12;
-  TToolButton *ToolButton14;
-  TToolButton *ToolButton18;
-  TToolButton *ToolButton20;
-  TToolButton *ToolButton21;
-  TToolButton *ToolButton22;
-  TToolBar *CommandsToolbar;
-  TToolButton *ToolButton39;
-  TToolButton *ToolButton40;
-  TToolButton *ToolButton41;
-  TToolBar *ToolBar5;
-  TIEPathComboBox *LocalPathComboBox;
-  TToolBar *ToolBar6;
-  TUnixPathComboBox *RemotePathComboBox;
-  TToolButton *ToolButton42;
-  TToolButton *ToolButton43;
-  TToolButton *ToolButton44;
-  TToolButton *ToolButton45;
-  TToolButton *ToolButton46;
-  TToolButton *ToolButton47;
-  TToolButton *ToolButton48;
-  TComboBox *SessionCombo;
-  TToolButton *ToolButton49;
-  TToolButton *ToolButton51;
-  TPanel *CommandLinePanel;
-  THistoryComboBox *CommandLineCombo;
-  TPathLabel *CommandLineLabel;
-  TLabel *CommandLinePromptLabel;
-  TToolButton *ToolButton50;
-  TDriveView *LocalDriveView;
-  TSplitter *LocalPanelSplitter;
-  TToolButton *ToolButton68;
-  TToolButton *ToolButton69;
-  void __fastcall SplitterMoved(TObject *Sender);
-  void __fastcall SplitterCanResize(TObject *Sender, int &NewSize,
-    bool &Accept);
-  void __fastcall SplitterDblClick(TObject *Sender);
-  void __fastcall PanelSplitterDblClick(TObject * Sender);
-  void __fastcall PathComboBoxCloseUp(TObject *Sender,
-    bool Canceled);
-  void __fastcall LocalDirViewExecFile(TObject *Sender, TListItem *Item,
-    bool &AllowExec);
-  void __fastcall LocalFileControlDDDragEnter(TObject *Sender,
-    IDataObject *DataObj, int grfKeyState, TPoint &Point,
-    int &dwEffect, bool &Accept);
-  void __fastcall DirViewLoaded(TObject *Sender);
-  void __fastcall SessionComboCloseUp(TObject *Sender);
-  void __fastcall LocalFileControlDDDragOver(TObject *Sender, int grfKeyState,
-    TPoint &Point, int &dwEffect);
-  void __fastcall LocalFileControlDDFileOperation(TObject *Sender,
-    int dwEffect, AnsiString SourcePath, AnsiString TargetPath,
-    bool &DoOperation);
-  void __fastcall RemoteFileControlDDFileOperationExecuted(TObject *Sender,
-    int dwEffect, AnsiString SourcePath, AnsiString TargetPath);
-  void __fastcall CommandLineComboKeyDown(TObject *Sender, WORD &Key,
-    TShiftState Shift);
-  void __fastcall CommandLineComboDropDown(TObject *Sender);
-  void __fastcall CommandLineComboEnter(TObject *Sender);
-  void __fastcall CommandLineComboExit(TObject *Sender);
-  void __fastcall LocalDirViewDDTargetHasDropHandler(TObject *Sender,
-    TListItem *Item, int &Effect, bool &DropHandler);
-  void __fastcall StatusBarDblClick(TObject *Sender);
-  void __fastcall LocalFileControlDDMenuPopup(TObject *Sender, HMENU AMenu,
-    IDataObject *DataObj, int AMinCustCmd, int grfKeyState, TPoint &pt);
-  void __fastcall PathLabelDblClick(TObject *Sender);
-  void __fastcall LocalDirViewEnter(TObject *Sender);
-  void __fastcall LocalPathLabelGetStatus(TCustomPathLabel *Sender,
-          bool &Active);
-  void __fastcall RemotePathLabelGetStatus(TCustomPathLabel *Sender,
-          bool &Active);
-  void __fastcall LocalDriveViewEnter(TObject *Sender);
-
-private:
-  TCustomDirView * FDirViewToSelect;
-  float FLastLocalPanelWidth;
-  float FLocalPanelWidth;
-  int FLastWidth;
-  bool FSynchronisingBrowse;
-  TStrings * FInternalDDDownloadList;
-  AnsiString FPrevPath[2];
-  bool FFirstTerminal;
-  AnsiString FDDExtTarget;
-  bool FCommandLineComboPopulated;
-
-  void __fastcall SetLocalPanelWidth(float value);
-  float __fastcall GetLocalPanelWidth();
-
-protected:
-  virtual bool __fastcall CopyParamDialog(TTransferDirection Direction,
-    TTransferType Type, bool DragDrop, TStrings * FileList,
-    AnsiString & TargetDirectory, TGUICopyParamType & CopyParam, bool Confirm);
-  virtual TCustomDirView * __fastcall DirView(TOperationSide Side);
-  TControl * __fastcall GetComponent(Byte Component);
-  virtual void __fastcall RestoreFormParams();
-  virtual void __fastcall RestoreParams();
-  virtual void __fastcall FixControlsPlacement();
-  virtual void __fastcall TerminalChanged();
-  virtual void __fastcall ConfigurationChanged();
-  virtual bool __fastcall GetHasDirView(TOperationSide Side);
-  void __fastcall UpdateControls();
-  virtual void __fastcall FileOperationProgress(
-    TFileOperationProgressType & ProgressData, TCancelStatus & Cancel);
-  virtual void __fastcall DoOpenDirectoryDialog(TOpenDirectoryMode Mode,
-    TOperationSide Side);
-  bool __fastcall InternalDDDownload(AnsiString & TargetDirectory);
-  virtual void __fastcall DDGetTarget(AnsiString & Directory);
-  virtual void __fastcall DDExtInitDrag(TFileList * FileList, bool & Created);
-  virtual void __fastcall SideEnter(TOperationSide Side);
-  void __fastcall SaveCommandLine();
-  void __fastcall ExecuteCommandLine();
-  virtual void __fastcall PanelExportStore(TOperationSide Side,
-    TPanelExport Export, TPanelExportDestination Destination,
-    TStringList * ExportData);
-  void __fastcall CommandLinePopulate();
-  virtual int __fastcall GetStaticComponentsHeight();
-  DYNAMIC void __fastcall Resize();
-  DYNAMIC void __fastcall DoShow();
-  virtual void __fastcall BatchStart(void *& Storage);
-  virtual void __fastcall BatchEnd(void * Storage);
-  virtual bool __fastcall IsFileControl(TObject * Control, TOperationSide Side);
-  virtual void __fastcall ReloadLocalDirectory(const AnsiString Directory = "");
-  virtual bool __fastcall PanelOperation(TOperationSide Side, bool DragDrop);
-
-public:
-  __fastcall TScpCommanderForm(TComponent* Owner);
-  virtual __fastcall ~TScpCommanderForm();
-  
-  virtual void __fastcall AddEditLink();
-  virtual bool __fastcall AllowedAction(TAction * Action, TActionAllowed Allowed);
-  virtual void __fastcall ChangePath(TOperationSide Side);
-  virtual void __fastcall CompareDirectories();
-  virtual void __fastcall UpdateSessionData(TSessionData * Data = NULL);
-  virtual void __fastcall SynchronizeDirectories();
-  virtual void __fastcall FullSynchronizeDirectories();
-  virtual void __fastcall StoreParams();
-  virtual void __fastcall ExploreLocalDirectory();
-  virtual void __fastcall GoToCommandLine();
-  virtual void __fastcall GoToTree();
-  virtual void __fastcall OpenConsole(AnsiString Command = "");
-  __property float LocalPanelWidth = { read = GetLocalPanelWidth, write = SetLocalPanelWidth };
-};
-//---------------------------------------------------------------------------
-#endif

+ 6 - 0
forms/Synchronize.cpp

@@ -223,4 +223,10 @@ bool __fastcall TSynchronizeDialog::GetSaveSettings()
 {
   return SaveSettingsCheck->Checked;
 }
+//---------------------------------------------------------------------------
+void __fastcall TSynchronizeDialog::FormShow(TObject * /*Sender*/)
+{
+  UpdateControls();
+}
+//---------------------------------------------------------------------------
 

+ 1 - 0
forms/Synchronize.dfm

@@ -13,6 +13,7 @@ object SynchronizeDialog: TSynchronizeDialog
   Font.Style = []
   OldCreateOrder = False
   Position = poMainFormCenter
+  OnShow = FormShow
   DesignSize = (
     396
     264)

+ 1 - 0
forms/Synchronize.h

@@ -39,6 +39,7 @@ __published:
   void __fastcall StartButtonClick(TObject *Sender);
   void __fastcall StopButtonClick(TObject *Sender);
   void __fastcall MinimizeButtonClick(TObject *Sender);
+  void __fastcall FormShow(TObject *Sender);
 
 private:
   TSynchronizeParamType FParams;

+ 0 - 123
general/DragDrop_B5.bpk

@@ -1,123 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<!-- C++Builder XML Project -->
-<PROJECT>
-  <MACROS>
-    <VERSION value="BCB.06.00"/>
-    <PROJECT value="..\lib\DragDrop_B5.bpl"/>
-    <OBJFILES value="DragDrop_B5.obj &quot;Drag and Drop Components\DragDrop.obj&quot; &quot;Drag and Drop Components\DragDropBitmap.obj&quot; 
-      &quot;Drag and Drop Components\DragDropFiles.obj&quot; &quot;Drag and Drop Components\DragDropFilesEx.obj&quot; 
-      &quot;Drag and Drop Components\DragDropText.obj&quot; &quot;Drag and Drop Components\DragDropURL.obj&quot; &quot;Drag and Drop Components\ListSort.obj&quot; 
-      &quot;Drag and Drop Components\PIDL.obj&quot;"/>
-    <RESFILES value="DragDrop_B5.res &quot;Drag and Drop Components\DragDrop.dcr&quot; 
-      &quot;Drag and Drop Components\DragDropBitmap.dcr&quot; 
-      &quot;Drag and Drop Components\DragDropFiles.dcr&quot; 
-      &quot;Drag and Drop Components\DragDropFilesEx.dcr&quot; 
-      &quot;Drag and Drop Components\DragDropText.dcr&quot; &quot;Drag and Drop Components\ListSort.dcr&quot;"/>
-    <DEFFILE value=""/>
-    <RESDEPEN value="$(RESFILES)"/>
-    <LIBFILES value=""/>
-    <LIBRARIES value="adortl.lib bcb2kaxserver.lib bcbie.lib bcbsmp.lib
-      bdecds.lib bdertl.lib cds.lib dbexpress.lib dbrtl.lib dbxcds.lib
-      dclocx.lib dsnap.lib ibxpress.lib indy.lib inet.lib inetdb.lib
-      inetdbbde.lib inetdbxpress.lib nmfast.lib qrpt.lib soaprtl.lib tee.lib
-      teedb.lib teeqr.lib teeui.lib vcldb.lib vcldbx.lib visualdbclx.lib
-      xmlrtl.lib"/>
-    <SPARELIBS value="adortl.lib bcb2kaxserver.lib bcbie.lib bcbsmp.lib
-      bdecds.lib bdertl.lib cds.lib dbexpress.lib dbrtl.lib dbxcds.lib
-      dclocx.lib dsnap.lib ibxpress.lib indy.lib inet.lib inetdb.lib
-      inetdbbde.lib inetdbxpress.lib nmfast.lib qrpt.lib rtl.lib soaprtl.lib
-      tee.lib teedb.lib teeqr.lib teeui.lib vcl.lib vcldb.lib vcldbx.lib
-      visualdbclx.lib xmlrtl.lib"/>
-    <PACKAGES value="rtl.bpi vcl.bpi"/>
-    <PATHCPP value=".;"/>
-    <PATHPAS value=".;&quot;Drag and Drop Components&quot;"/>
-    <PATHRC value=".;"/>
-    <PATHASM value=".;"/>
-    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
-    <RELEASELIBPATH value="$(BCB)\lib\release"/>
-    <LINKER value="ilink32"/>
-    <USERDEFINES value=""/>
-    <SYSDEFINES value="NO_STRICT;USEPACKAGES"/>
-    <MAINSOURCE value="DragDrop_B5.cpp"/>
-    <INCLUDEPATH value="&quot;Drag and Drop Components&quot;;$(BCB)\include;$(BCB)\include\vcl"/>
-    <LIBPATH value="..\lib\;&quot;Drag and Drop Components&quot;;$(BCB)\lib\obj;$(BCB)\lib"/>
-    <WARNINGS value="-w-par"/>
-    <OTHERFILES value=""/>
-  </MACROS>
-  <OPTIONS>
-    <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~1\lib\vcl60.csm -Hc -Q -w -Vx -Ve -X- 
-      -a8 -b- -k- -vi -c -tWM"/>
-    <PFLAGS value="  -$Y- -$L- -$D- -$C- -$A8 -v -JPHNE -M"/>
-    <RFLAGS value=""/>
-    <AFLAGS value="/mx /w2 /zn"/>
-    <LFLAGS value="-I -D&quot;Drag and Drop Components&quot; -aa -Tpp -x -Gn -Gl -Gi"/>
-    <OTHERFILES value=""/>
-  </OPTIONS>
-  <LINKER>
-    <ALLOBJ value="c0pkg32.obj $(PACKAGES) sysinit.obj $(OBJFILES)"/>
-    <ALLRES value="$(RESFILES)"/>
-    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
-    <OTHERFILES value=""/>
-  </LINKER>
-  <FILELIST>
-      <FILE FILENAME="DragDrop_B5.cpp" FORMNAME="" UNITNAME="DragDrop_B5" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="DragDrop_B5.res" FORMNAME="" UNITNAME="DragDrop_B5" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDrop.pas" FORMNAME="" UNITNAME="DragDrop" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDrop.dcr" FORMNAME="" UNITNAME="DragDrop" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropBitmap.pas" FORMNAME="" UNITNAME="DragDropBitmap" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropBitmap.dcr" FORMNAME="" UNITNAME="DragDropBitmap" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropFiles.pas" FORMNAME="" UNITNAME="DragDropFiles" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropFiles.dcr" FORMNAME="" UNITNAME="DragDropFiles" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropFilesEx.pas" FORMNAME="" UNITNAME="DragDropFilesEx" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropFilesEx.dcr" FORMNAME="" UNITNAME="DragDropFilesEx" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropText.pas" FORMNAME="" UNITNAME="DragDropText" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropText.dcr" FORMNAME="" UNITNAME="DragDropText" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\DragDropURL.pas" FORMNAME="" UNITNAME="DragDropURL" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\ListSort.pas" FORMNAME="" UNITNAME="ListSort" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\ListSort.dcr" FORMNAME="" UNITNAME="ListSort" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Drag and Drop Components\PIDL.pas" FORMNAME="" UNITNAME="PIDL" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="rtl.bpi" FORMNAME="" UNITNAME="rtl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="vcl.bpi" FORMNAME="" UNITNAME="vcl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-  </FILELIST>
-  <BUILDTOOLS>
-  </BUILDTOOLS>
-
-  <IDEOPTIONS>
-[Version Info]
-IncludeVerInfo=1
-AutoIncBuild=0
-MajorVer=1
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1029
-CodePage=1250
-
-[Version Info Keys]
-CompanyName=
-FileDescription=
-FileVersion=1.0.0.0
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=1.0.0.0
-Comments=
-
-[Compiler]
-ShowInfoMsgs=1
-LinkDebugVcl=0
-LinkCGLIB=0
-
-[Linker]
-LibPrefix=
-LibSuffix=
-LibVersion=
-  </IDEOPTIONS>
-</PROJECT>

+ 0 - 139
general/DriveDir_B5.bpk

@@ -1,139 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<!-- C++Builder XML Project -->
-<PROJECT>
-  <MACROS>
-    <VERSION value="BCB.06.00"/>
-    <PROJECT value="..\lib\DriveDir_B5.bpl"/>
-    <OBJFILES value="DriveDir_B5.obj &quot;Filemanager Toolset\DirView.obj&quot; &quot;Filemanager Toolset\DriveView.obj&quot; 
-      &quot;Filemanager Toolset\FileOperator.obj&quot; &quot;Filemanager Toolset\IEComboBox.obj&quot; &quot;Filemanager Toolset\BaseUtils.obj&quot; 
-      &quot;Filemanager Toolset\FileChanges.obj&quot; &quot;Filemanager Toolset\MaskSearch.obj&quot; &quot;Filemanager Toolset\IEListView.obj&quot; 
-      &quot;Filemanager Toolset\IEDriveInfo.obj&quot; &quot;Filemanager Toolset\ShellDialogs.obj&quot; 
-      &quot;Filemanager Toolset\DirViewColProperties.obj&quot; &quot;Filemanager Toolset\CustomDirView.obj&quot; 
-      &quot;Filemanager Toolset\CustomUnixDirView.obj&quot; &quot;Filemanager Toolset\UnixDirViewColProperties.obj&quot; 
-      &quot;Filemanager Toolset\CustomPathComboBox.obj&quot; &quot;Filemanager Toolset\IEPathComboBox.obj&quot; 
-      &quot;Filemanager Toolset\ListExt.obj&quot; &quot;Filemanager Toolset\CustomDriveView.obj&quot;"/>
-    <RESFILES value="DriveDir_B5.res &quot;Filemanager Toolset\DirView.dcr&quot; 
-      &quot;Filemanager Toolset\DriveView.dcr&quot; &quot;Filemanager Toolset\FileOperator.dcr&quot; 
-      &quot;Filemanager Toolset\IEComboBox.dcr&quot; &quot;Filemanager Toolset\DirImg.res&quot;"/>
-    <DEFFILE value=""/>
-    <RESDEPEN value="$(RESFILES)"/>
-    <LIBFILES value=""/>
-    <LIBRARIES value="adortl.lib bcb2kaxserver.lib bdecds.lib bdertl.lib
-      cds.lib dbexpress.lib dbrtl.lib dbxcds.lib dclocx.lib dsnap.lib
-      ibxpress.lib indy.lib inet.lib inetdb.lib inetdbbde.lib inetdbxpress.lib
-      nmfast.lib qrpt.lib soaprtl.lib tee.lib teedb.lib teeqr.lib teeui.lib
-      vcldb.lib vcldbx.lib visualdbclx.lib xmlrtl.lib"/>
-    <SPARELIBS value="DragDrop_B5.lib Moje_B5.lib adortl.lib
-      bcb2kaxserver.lib bcbie.lib bcbsmp.lib bdecds.lib bdertl.lib cds.lib
-      dbexpress.lib dbrtl.lib dbxcds.lib dclocx.lib dsnap.lib ibxpress.lib
-      indy.lib inet.lib inetdb.lib inetdbbde.lib inetdbxpress.lib nmfast.lib
-      qrpt.lib rtl.lib soaprtl.lib tee.lib teedb.lib teeqr.lib teeui.lib
-      vcl.lib vcldb.lib vcldbx.lib visualdbclx.lib xmlrtl.lib"/>
-    <PACKAGES value="DragDrop_B5.bpi Moje_B5.bpi bcbie.bpi bcbsmp.bpi
-      rtl.bpi vcl.bpi vclx.bpi"/>
-    <PATHCPP value=".;"/>
-    <PATHPAS value=".;&quot;Filemanager Toolset&quot;"/>
-    <PATHRC value=".;&quot;Filemanager Toolset&quot;"/>
-    <PATHASM value=".;"/>
-    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
-    <RELEASELIBPATH value="$(BCB)\lib\release"/>
-    <LINKER value="ilink32"/>
-    <USERDEFINES value="OLD_DND;NORTON_LIKE"/>
-    <SYSDEFINES value="NO_STRICT;USEPACKAGES"/>
-    <MAINSOURCE value="DriveDir_B5.cpp"/>
-    <INCLUDEPATH value="&quot;Filemanager Toolset&quot;;&quot;Drag and Drop Components&quot;;&quot;Moje komponenty&quot;;$(BCB)\include;$(BCB)\include\vcl"/>
-    <LIBPATH value="..\lib\;&quot;Filemanager Toolset&quot;;&quot;Drag and Drop Components&quot;;&quot;Moje komponenty&quot;;$(BCB)\lib\obj;$(BCB)\lib;$(BCB)\Source\ToolsAPI"/>
-    <WARNINGS value="-wuse -w-par"/>
-    <OTHERFILES value=""/>
-  </MACROS>
-  <OPTIONS>
-    <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~1\lib\vcl60.csm -Hc -Vx -Ve -X- -a8 -b- 
-      -k- -vi -c -tWM"/>
-    <PFLAGS value="  -$Y- -$L- -$D- -$A8 -v -JPHNE -M"/>
-    <RFLAGS value=""/>
-    <AFLAGS value="/mx /w2 /zn"/>
-    <LFLAGS value="-I -D&quot;Filemanager Toolset&quot; -aa -Tpp -GD -s -Gn -Gl -Gi -M"/>
-    <OTHERFILES value=""/>
-  </OPTIONS>
-  <LINKER>
-    <ALLOBJ value="c0pkg32.obj $(PACKAGES) sysinit.obj $(OBJFILES)"/>
-    <ALLRES value="$(RESFILES)"/>
-    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
-    <OTHERFILES value=""/>
-  </LINKER>
-  <FILELIST>
-      <FILE FILENAME="DriveDir_B5.cpp" FORMNAME="" UNITNAME="DriveDir_B5" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="DriveDir_B5.res" FORMNAME="" UNITNAME="DriveDir_B5" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\DirView.pas" FORMNAME="" UNITNAME="DirView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\DirView.dcr" FORMNAME="" UNITNAME="DirView" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\DriveView.pas" FORMNAME="" UNITNAME="DriveView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\DriveView.dcr" FORMNAME="" UNITNAME="DriveView" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\FileOperator.pas" FORMNAME="" UNITNAME="FileOperator" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\FileOperator.dcr" FORMNAME="" UNITNAME="FileOperator" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\IEComboBox.pas" FORMNAME="" UNITNAME="IEComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\IEComboBox.dcr" FORMNAME="" UNITNAME="IEComboBox" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\BaseUtils.pas" FORMNAME="" UNITNAME="BaseUtils" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\FileChanges.pas" FORMNAME="" UNITNAME="FileChanges" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\MaskSearch.pas" FORMNAME="" UNITNAME="MaskSearch" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\IEListView.pas" FORMNAME="" UNITNAME="IEListView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\IEDriveInfo.pas" FORMNAME="" UNITNAME="IEDriveInfo" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\ShellDialogs.pas" FORMNAME="" UNITNAME="ShellDialogs" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\DirViewColProperties.pas" FORMNAME="" UNITNAME="DirViewColProperties" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\CustomDirView.pas" FORMNAME="" UNITNAME="CustomDirView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\CustomUnixDirView.pas" FORMNAME="" UNITNAME="CustomUnixDirView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\UnixDirViewColProperties.pas" FORMNAME="" UNITNAME="UnixDirViewColProperties" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\CustomPathComboBox.pas" FORMNAME="" UNITNAME="CustomPathComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\IEPathComboBox.pas" FORMNAME="" UNITNAME="IEPathComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\ListExt.pas" FORMNAME="" UNITNAME="ListExt" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="rtl.bpi" FORMNAME="" UNITNAME="rtl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="vcl.bpi" FORMNAME="" UNITNAME="vcl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="vclx.bpi" FORMNAME="" UNITNAME="vclx" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="bcbsmp.bpi" FORMNAME="" UNITNAME="bcbsmp" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="bcbie.bpi" FORMNAME="" UNITNAME="bcbie" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\DirImg.rc" FORMNAME="" UNITNAME="DirImg.rc" CONTAINERID="RC" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje_B5.bpi" FORMNAME="" UNITNAME="Moje_B5" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="DragDrop_B5.bpi" FORMNAME="" UNITNAME="DragDrop_B5" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Filemanager Toolset\CustomDriveView.pas" FORMNAME="" UNITNAME="CustomDriveView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-  </FILELIST>
-  <BUILDTOOLS>
-  </BUILDTOOLS>
-
-  <IDEOPTIONS>
-[Version Info]
-IncludeVerInfo=1
-AutoIncBuild=0
-MajorVer=1
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1029
-CodePage=1250
-
-[Version Info Keys]
-CompanyName=
-FileDescription=
-FileVersion=1.0.0.0
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=1.0.0.0
-Comments=
-
-[Compiler]
-ShowInfoMsgs=1
-LinkDebugVcl=0
-LinkCGLIB=0
-
-[Linker]
-LibPrefix=
-LibSuffix=
-LibVersion=
-  </IDEOPTIONS>
-</PROJECT>

+ 0 - 128
general/Moje_B5.bpk

@@ -1,128 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<!-- C++Builder XML Project -->
-<PROJECT>
-  <MACROS>
-    <VERSION value="BCB.06.00"/>
-    <PROJECT value="..\lib\Moje_B5.bpl"/>
-    <OBJFILES value="Moje_B5.obj &quot;Moje komponenty\AssociatedStatusBar.obj&quot; 
-      &quot;Moje komponenty\HistoryComboBox.obj&quot; &quot;Moje komponenty\ListViewColProperties.obj&quot; 
-      &quot;Moje komponenty\MoreButton.obj&quot; &quot;Moje komponenty\NortonLikeListView.obj&quot; 
-      &quot;Moje komponenty\PathLabel.obj&quot; &quot;Moje komponenty\ToolbarPanel.obj&quot; &quot;Moje komponenty\UpDownEdit.obj&quot; 
-      &quot;Moje komponenty\ComboEdit.obj&quot; &quot;Moje komponenty\XPGroupBox.obj&quot; &quot;Moje komponenty\PasswordEdit.obj&quot; 
-      &quot;Moje komponenty\ResourceModule.obj&quot; &quot;Moje komponenty\CompThread.obj&quot; &quot;Moje komponenty\DiscMon.obj&quot;"/>
-    <RESFILES value="Moje_B5.res &quot;Moje komponenty\HistoryComboBox.dcr&quot; 
-      &quot;Moje komponenty\NortonLikeListView.dcr&quot; &quot;Moje komponenty\PathLabel.dcr&quot; &quot;Moje komponenty\DiscMon.dcr&quot;"/>
-    <DEFFILE value=""/>
-    <RESDEPEN value="$(RESFILES)"/>
-    <LIBFILES value=""/>
-    <LIBRARIES value="adortl.lib bcb2kaxserver.lib bdecds.lib bdertl.lib
-      cds.lib dbexpress.lib dbrtl.lib dbxcds.lib dclocx.lib dsnap.lib
-      ibxpress.lib indy.lib inet.lib inetdb.lib inetdbbde.lib inetdbxpress.lib
-      nmfast.lib qrpt.lib soaprtl.lib tee.lib teedb.lib teeqr.lib teeui.lib
-      vcldb.lib vcldbx.lib visualdbclx.lib xmlrtl.lib"/>
-    <SPARELIBS value="adortl.lib bcb2kaxserver.lib bcbie.lib bcbsmp.lib
-      bdecds.lib bdertl.lib cds.lib dbexpress.lib dbrtl.lib dbxcds.lib
-      dclocx.lib dsnap.lib ibxpress.lib indy.lib inet.lib inetdb.lib
-      inetdbbde.lib inetdbxpress.lib nmfast.lib qrpt.lib rtl.lib soaprtl.lib
-      tee.lib teedb.lib teeqr.lib teeui.lib vcl.lib vcldb.lib vcldbx.lib
-      visualdbclx.lib xmlrtl.lib"/>
-    <PACKAGES value="bcbie.bpi bcbsmp.bpi rtl.bpi vcl.bpi vclx.bpi"/>
-    <PATHCPP value=".;"/>
-    <PATHPAS value=".;&quot;Moje komponenty&quot;"/>
-    <PATHRC value=".;"/>
-    <PATHASM value=".;"/>
-    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
-    <RELEASELIBPATH value="$(BCB)\lib\release"/>
-    <LINKER value="ilink32"/>
-    <USERDEFINES value=""/>
-    <SYSDEFINES value="NO_STRICT;USEPACKAGES"/>
-    <MAINSOURCE value="Moje_B5.cpp"/>
-    <INCLUDEPATH value="&quot;Moje komponenty&quot;;$(BCB)\include;$(BCB)\include\vcl"/>
-    <LIBPATH value="..\lib\;&quot;Moje komponenty&quot;;$(BCB)\lib\obj;$(BCB)\lib;$(BCB)\Source\ToolsAPI"/>
-    <WARNINGS value="-wuse -w-par"/>
-    <OTHERFILES value=""/>
-  </MACROS>
-  <OPTIONS>
-    <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~1\lib\vcl60.csm -Hc -Q -w -Vx -Ve -X- 
-      -a8 -b- -k- -vi -c -tWM"/>
-    <PFLAGS value="  -$Y- -$L- -$D- -$C- -$A8 -v -JPHNE -M"/>
-    <RFLAGS value=""/>
-    <AFLAGS value="/mx /w2 /zn"/>
-    <LFLAGS value="-I -D&quot;Martin's components&quot; -aa -Tpp -x -Gn -Gl -Gi"/>
-    <OTHERFILES value=""/>
-  </OPTIONS>
-  <LINKER>
-    <ALLOBJ value="c0pkg32.obj $(PACKAGES) sysinit.obj $(OBJFILES)"/>
-    <ALLRES value="$(RESFILES)"/>
-    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
-    <OTHERFILES value=""/>
-  </LINKER>
-  <FILELIST>
-      <FILE FILENAME="Moje_B5.cpp" FORMNAME="" UNITNAME="Moje_B5" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje_B5.res" FORMNAME="" UNITNAME="Moje_B5" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="rtl.bpi" FORMNAME="" UNITNAME="rtl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="vcl.bpi" FORMNAME="" UNITNAME="vcl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="vclx.bpi" FORMNAME="" UNITNAME="vclx" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="bcbsmp.bpi" FORMNAME="" UNITNAME="bcbsmp" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="bcbie.bpi" FORMNAME="" UNITNAME="bcbie" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\AssociatedStatusBar.pas" FORMNAME="" UNITNAME="AssociatedStatusBar" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\HistoryComboBox.pas" FORMNAME="" UNITNAME="HistoryComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\HistoryComboBox.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\ListViewColProperties.pas" FORMNAME="" UNITNAME="ListViewColProperties" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\MoreButton.pas" FORMNAME="" UNITNAME="MoreButton" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\NortonLikeListView.pas" FORMNAME="" UNITNAME="NortonLikeListView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\NortonLikeListView.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\PathLabel.pas" FORMNAME="" UNITNAME="PathLabel" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\PathLabel.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\ToolbarPanel.pas" FORMNAME="" UNITNAME="ToolbarPanel" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\UpDownEdit.pas" FORMNAME="" UNITNAME="UpDownEdit" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\ComboEdit.pas" FORMNAME="" UNITNAME="ComboEdit" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\XPGroupBox.pas" FORMNAME="" UNITNAME="XPGroupBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\PasswordEdit.pas" FORMNAME="" UNITNAME="PasswordEdit" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\ResourceModule.pas" FORMNAME="" UNITNAME="ResourceModule" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\CompThread.pas" FORMNAME="" UNITNAME="CompThread" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\DiscMon.pas" FORMNAME="" UNITNAME="DiscMon" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
-      <FILE FILENAME="Moje komponenty\DiscMon.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
-  </FILELIST>
-  <BUILDTOOLS>
-  </BUILDTOOLS>
-
-  <IDEOPTIONS>
-[Version Info]
-IncludeVerInfo=1
-AutoIncBuild=0
-MajorVer=1
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1029
-CodePage=1250
-
-[Version Info Keys]
-CompanyName=
-FileDescription=
-FileVersion=1.0.0.0
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=1.0.0.0
-Comments=
-
-[Compiler]
-ShowInfoMsgs=1
-LinkDebugVcl=0
-LinkCGLIB=0
-
-[Linker]
-LibPrefix=
-LibSuffix=
-LibVersion=
-  </IDEOPTIONS>
-</PROJECT>

BIN
general/filemanager toolset/DirImg.res


+ 0 - 352
general/moje komponenty/CompThread.pas

@@ -1,352 +0,0 @@
-unit CompThread;
-
-interface
-
-{$WARN SYMBOL_DEPRECATED OFF}
-
-uses
-  Classes;
-
-type
-
-{ TCompThread }
-
-  TCompThread = class
-  private
-    FHandle: THandle;
-    FThreadID: THandle;
-    FTerminated: Boolean;
-    FSuspended: Boolean;
-    FFreeOnTerminate: Boolean;
-    FFinished: Boolean;
-    FReturnValue: Integer;
-    FOnTerminate: TNotifyEvent;
-    FMethod: TThreadMethod;
-    FSynchronizeException: TObject;
-    procedure CallOnTerminate;
-    function GetPriority: TThreadPriority;
-    procedure SetPriority(Value: TThreadPriority);
-    procedure SetSuspended(Value: Boolean);
-  protected
-    procedure DoTerminate; virtual;
-    procedure Execute; virtual; abstract;
-    procedure Synchronize(Method: TThreadMethod);
-    property ReturnValue: Integer read FReturnValue write FReturnValue;
-    property Terminated: Boolean read FTerminated;
-  public
-    constructor Create(CreateSuspended: Boolean);
-    destructor Destroy; override;
-    procedure Resume;
-    procedure Suspend;
-    procedure Terminate;
-    function WaitFor: LongWord;
-    property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate;
-    property Handle: THandle read FHandle;
-    property Priority: TThreadPriority read GetPriority write SetPriority;
-    property Suspended: Boolean read FSuspended write SetSuspended;
-    property ThreadID: THandle read FThreadID;
-    property OnTerminate: TNotifyEvent read FOnTerminate write FOnTerminate;
-  end;
-
-implementation
-
-uses
-  Windows;
-
-const
-  CM_EXECPROC = $8FFF;
-  CM_DESTROYWINDOW = $8FFE;
-
-type
-  PRaiseFrame = ^TRaiseFrame;
-  TRaiseFrame = record
-    NextRaise: PRaiseFrame;
-    ExceptAddr: Pointer;
-    ExceptObject: TObject;
-    ExceptionRecord: PExceptionRecord;
-  end;
-
-var
-  ThreadLock: TRTLCriticalSection;
-  ThreadWindow: HWND;
-  ThreadCount: Integer;
-
-procedure FreeThreadWindow;
-begin
-  if ThreadWindow <> 0 then
-  begin
-    DestroyWindow(ThreadWindow);
-    ThreadWindow := 0;
-  end;
-end;
-
-function ThreadWndProc(Window: HWND; Message, wParam, lParam: Longint): Longint; stdcall;
-begin
-  case Message of
-    CM_EXECPROC:
-      with TCompThread(lParam) do
-      begin
-        Result := 0;
-        try
-          FSynchronizeException := nil;
-          FMethod;
-        except
-          if RaiseList <> nil then
-          begin
-            FSynchronizeException := PRaiseFrame(RaiseList)^.ExceptObject;
-            PRaiseFrame(RaiseList)^.ExceptObject := nil;
-          end;
-        end;
-      end;
-    CM_DESTROYWINDOW:
-      begin
-        EnterCriticalSection(ThreadLock);
-        try
-          Dec(ThreadCount);
-          if ThreadCount = 0 then
-            FreeThreadWindow;
-        finally
-          LeaveCriticalSection(ThreadLock);
-        end;
-        Result := 0;
-      end;
-  else
-    Result := DefWindowProc(Window, Message, wParam, lParam);
-  end;
-end;
-
-var
-  ThreadWindowClass: TWndClass = (
-    style: 0;
-    lpfnWndProc: @ThreadWndProc;
-    cbClsExtra: 0;
-    cbWndExtra: 0;
-    hInstance: 0;
-    hIcon: 0;
-    hCursor: 0;
-    hbrBackground: 0;
-    lpszMenuName: nil;
-    lpszClassName: 'TThreadWindow');
-
-procedure AddThread;
-
-  function AllocateWindow: HWND;
-  var
-    TempClass: TWndClass;
-    ClassRegistered: Boolean;
-  begin
-    ThreadWindowClass.hInstance := HInstance;
-    ClassRegistered := GetClassInfo(HInstance, ThreadWindowClass.lpszClassName,
-      TempClass);
-    if not ClassRegistered or (TempClass.lpfnWndProc <> @ThreadWndProc) then
-    begin
-      if ClassRegistered then
-        Windows.UnregisterClass(ThreadWindowClass.lpszClassName, HInstance);
-      Windows.RegisterClass(ThreadWindowClass);
-    end;
-    Result := CreateWindow(ThreadWindowClass.lpszClassName, '', 0,
-      0, 0, 0, 0, 0, 0, HInstance, nil);
-  end;
-
-begin
-  EnterCriticalSection(ThreadLock);
-  try
-    if ThreadCount = 0 then
-      ThreadWindow := AllocateWindow;
-    Inc(ThreadCount);
-  finally
-    LeaveCriticalSection(ThreadLock);
-  end;
-end;
-
-procedure RemoveThread;
-begin
-  EnterCriticalSection(ThreadLock);
-  try
-    if ThreadCount = 1 then
-      PostMessage(ThreadWindow, CM_DESTROYWINDOW, 0, 0);
-  finally
-    LeaveCriticalSection(ThreadLock);
-  end;
-end;
-
-{type
-  PThreadRec = ^TThreadRec;
-  TThreadRec = record
-    Func: TThreadFunc;
-    Parameter: Pointer;
-  end;
-
-function ThreadWrapper(Parameter: Pointer): Integer; stdcall;
-asm
-        CALL    _FpuInit
-        XOR     ECX,ECX
-        PUSH    EBP
-        PUSH    offset _ExceptionHandler
-        MOV     EDX,FS:[ECX]
-        PUSH    EDX
-        MOV     EAX,Parameter
-        MOV     FS:[ECX],ESP
-
-        MOV     ECX,[EAX].TThreadRec.Parameter
-        MOV     EDX,[EAX].TThreadRec.Func
-        PUSH    ECX
-        PUSH    EDX
-        CALL    _FreeMem
-        POP     EDX
-        POP     EAX
-        CALL    EDX
-
-        XOR     EDX,EDX
-        POP     ECX
-        MOV     FS:[EDX],ECX
-        POP     ECX
-        POP     EBP
-end;
-
-
-function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord;
-  ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord;
-  var ThreadId: LongWord): Integer;
-var
-  P: PThreadRec;
-begin
-  New(P);
-  P.Func := ThreadFunc;
-  P.Parameter := Parameter;
-  IsMultiThread := TRUE;
-  Result := CreateThread(SecurityAttributes, StackSize, @ThreadWrapper, P,
-    CreationFlags, ThreadID);
-end;
-
-
-procedure EndThread(ExitCode: Integer);
-begin
-  ExitThread(ExitCode);
-end;
-}
-
-{ TCompThread }
-
-function ThreadProc(Thread: TCompThread): Integer;
-var
-  FreeThread: Boolean;
-begin
-  try
-    Thread.Execute;
-  finally
-    FreeThread := Thread.FFreeOnTerminate;
-    Result := Thread.FReturnValue;
-    Thread.FFinished := True;
-    Thread.DoTerminate;
-    if FreeThread then Thread.Free;
-    EndThread(Result);
-  end;
-end;
-
-constructor TCompThread.Create(CreateSuspended: Boolean);
-var
-  Flags: Cardinal; //DWORD;
-begin
-  inherited Create;
-  AddThread;
-  FSuspended := CreateSuspended;
-  Flags := 0;
-  if CreateSuspended then Flags := CREATE_SUSPENDED;
-  FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), Flags, FThreadID);
-end;
-
-destructor TCompThread.Destroy;
-begin
-  if not FFinished and not Suspended then
-  begin
-    Terminate;
-    WaitFor;
-  end;
-  if FHandle <> 0 then CloseHandle(FHandle);
-  inherited Destroy;
-  RemoveThread;
-end;
-
-procedure TCompThread.CallOnTerminate;
-begin
-  if Assigned(FOnTerminate) then FOnTerminate(Self);
-end;
-
-procedure TCompThread.DoTerminate;
-begin
-  if Assigned(FOnTerminate) then Synchronize(CallOnTerminate);
-end;
-
-const
-  Priorities: array [TThreadPriority] of Integer =
-   (THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL,
-    THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL,
-    THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_TIME_CRITICAL);
-
-function TCompThread.GetPriority: TThreadPriority;
-var
-  P: Integer;
-  I: TThreadPriority;
-begin
-  P := GetThreadPriority(FHandle);
-  Result := tpNormal;
-  for I := Low(TThreadPriority) to High(TThreadPriority) do
-    if Priorities[I] = P then Result := I;
-end;
-
-procedure TCompThread.SetPriority(Value: TThreadPriority);
-begin
-  SetThreadPriority(FHandle, Priorities[Value]);
-end;
-
-procedure TCompThread.Synchronize(Method: TThreadMethod);
-begin
-  FSynchronizeException := nil;
-  FMethod := Method;
-  SendMessage(ThreadWindow, CM_EXECPROC, 0, Longint(Self));
-  if Assigned(FSynchronizeException) then raise FSynchronizeException;
-end;
-
-procedure TCompThread.SetSuspended(Value: Boolean);
-begin
-  if Value <> FSuspended then
-    if Value then
-      Suspend else
-      Resume;
-end;
-
-procedure TCompThread.Suspend;
-begin
-  FSuspended := True;
-  SuspendThread(FHandle);
-end;
-
-procedure TCompThread.Resume;
-begin
-  if ResumeThread(FHandle) = 1 then FSuspended := False;
-end;
-
-procedure TCompThread.Terminate;
-begin
-  FTerminated := True;
-end;
-
-function TCompThread.WaitFor: LongWord;
-var
-  Msg: TMsg;
-  H: THandle;
-begin
-  H := FHandle;
-  if GetCurrentThreadID = MainThreadID then
-    while MsgWaitForMultipleObjects(1, H, False, INFINITE,
-      QS_SENDMESSAGE) = WAIT_OBJECT_0 + 1 do PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE)
-  else WaitForSingleObject(H, INFINITE);
-  GetExitCodeThread(H, Result);
-end;
-
-initialization
-  InitializeCriticalSection(ThreadLock);
-finalization
-  DeleteCriticalSection(ThreadLock);
-end.

+ 2 - 2
makefile

@@ -18,8 +18,8 @@ DragExt.dll: DragExt.bpr
  $(BPR2MAK) DragExt.bpr
  $(MAKE)
 
-{general}.bpk{lib}.lib:
- cd general
+{packages}.bpk{lib}.lib:
+ cd packages
  $(BPR2MAK) $.
  $(MAKE)
  cd ..

+ 123 - 0
packages/DragDrop_B5.bpk

@@ -0,0 +1,123 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+  <MACROS>
+    <VERSION value="BCB.06.00"/>
+    <PROJECT value="..\lib\DragDrop_B5.bpl"/>
+    <OBJFILES value="DragDrop_B5.obj &quot;dragndrop\DragDrop.obj&quot; &quot;dragndrop\DragDropBitmap.obj&quot; 
+      &quot;dragndrop\DragDropFiles.obj&quot; &quot;dragndrop\DragDropFilesEx.obj&quot; 
+      &quot;dragndrop\DragDropText.obj&quot; &quot;dragndrop\DragDropURL.obj&quot; &quot;dragndrop\ListSort.obj&quot; 
+      &quot;dragndrop\PIDL.obj&quot;"/>
+    <RESFILES value="DragDrop_B5.res &quot;dragndrop\DragDrop.dcr&quot; 
+      &quot;dragndrop\DragDropBitmap.dcr&quot; 
+      &quot;dragndrop\DragDropFiles.dcr&quot; 
+      &quot;dragndrop\DragDropFilesEx.dcr&quot; 
+      &quot;dragndrop\DragDropText.dcr&quot; &quot;dragndrop\ListSort.dcr&quot;"/>
+    <DEFFILE value=""/>
+    <RESDEPEN value="$(RESFILES)"/>
+    <LIBFILES value=""/>
+    <LIBRARIES value="adortl.lib bcb2kaxserver.lib bcbie.lib bcbsmp.lib
+      bdecds.lib bdertl.lib cds.lib dbexpress.lib dbrtl.lib dbxcds.lib
+      dclocx.lib dsnap.lib ibxpress.lib indy.lib inet.lib inetdb.lib
+      inetdbbde.lib inetdbxpress.lib nmfast.lib qrpt.lib soaprtl.lib tee.lib
+      teedb.lib teeqr.lib teeui.lib vcldb.lib vcldbx.lib visualdbclx.lib
+      xmlrtl.lib"/>
+    <SPARELIBS value="adortl.lib bcb2kaxserver.lib bcbie.lib bcbsmp.lib
+      bdecds.lib bdertl.lib cds.lib dbexpress.lib dbrtl.lib dbxcds.lib
+      dclocx.lib dsnap.lib ibxpress.lib indy.lib inet.lib inetdb.lib
+      inetdbbde.lib inetdbxpress.lib nmfast.lib qrpt.lib rtl.lib soaprtl.lib
+      tee.lib teedb.lib teeqr.lib teeui.lib vcl.lib vcldb.lib vcldbx.lib
+      visualdbclx.lib xmlrtl.lib"/>
+    <PACKAGES value="rtl.bpi vcl.bpi"/>
+    <PATHCPP value=".;"/>
+    <PATHPAS value=".;&quot;dragndrop&quot;"/>
+    <PATHRC value=".;"/>
+    <PATHASM value=".;"/>
+    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
+    <RELEASELIBPATH value="$(BCB)\lib\release"/>
+    <LINKER value="ilink32"/>
+    <USERDEFINES value=""/>
+    <SYSDEFINES value="NO_STRICT;USEPACKAGES"/>
+    <MAINSOURCE value="DragDrop_B5.cpp"/>
+    <INCLUDEPATH value="&quot;dragndrop&quot;;$(BCB)\include;$(BCB)\include\vcl"/>
+    <LIBPATH value="..\lib\;&quot;dragndrop&quot;;$(BCB)\lib\obj;$(BCB)\lib"/>
+    <WARNINGS value="-w-par"/>
+    <OTHERFILES value=""/>
+  </MACROS>
+  <OPTIONS>
+    <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~1\lib\vcl60.csm -Hc -Q -w -Vx -Ve -X- 
+      -a8 -b- -k- -vi -c -tWM"/>
+    <PFLAGS value="  -$Y- -$L- -$D- -$C- -$A8 -v -JPHNE -M"/>
+    <RFLAGS value=""/>
+    <AFLAGS value="/mx /w2 /zn"/>
+    <LFLAGS value="-I -D&quot;dragndrop&quot; -aa -Tpp -x -Gn -Gl -Gi"/>
+    <OTHERFILES value=""/>
+  </OPTIONS>
+  <LINKER>
+    <ALLOBJ value="c0pkg32.obj $(PACKAGES) sysinit.obj $(OBJFILES)"/>
+    <ALLRES value="$(RESFILES)"/>
+    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
+    <OTHERFILES value=""/>
+  </LINKER>
+  <FILELIST>
+      <FILE FILENAME="DragDrop_B5.cpp" FORMNAME="" UNITNAME="DragDrop_B5" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="DragDrop_B5.res" FORMNAME="" UNITNAME="DragDrop_B5" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDrop.pas" FORMNAME="" UNITNAME="DragDrop" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDrop.dcr" FORMNAME="" UNITNAME="DragDrop" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropBitmap.pas" FORMNAME="" UNITNAME="DragDropBitmap" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropBitmap.dcr" FORMNAME="" UNITNAME="DragDropBitmap" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropFiles.pas" FORMNAME="" UNITNAME="DragDropFiles" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropFiles.dcr" FORMNAME="" UNITNAME="DragDropFiles" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropFilesEx.pas" FORMNAME="" UNITNAME="DragDropFilesEx" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropFilesEx.dcr" FORMNAME="" UNITNAME="DragDropFilesEx" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropText.pas" FORMNAME="" UNITNAME="DragDropText" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropText.dcr" FORMNAME="" UNITNAME="DragDropText" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\DragDropURL.pas" FORMNAME="" UNITNAME="DragDropURL" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\ListSort.pas" FORMNAME="" UNITNAME="ListSort" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\ListSort.dcr" FORMNAME="" UNITNAME="ListSort" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="dragndrop\PIDL.pas" FORMNAME="" UNITNAME="PIDL" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="rtl.bpi" FORMNAME="" UNITNAME="rtl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="vcl.bpi" FORMNAME="" UNITNAME="vcl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+  </FILELIST>
+  <BUILDTOOLS>
+  </BUILDTOOLS>
+
+  <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1029
+CodePage=1250
+
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+
+[Compiler]
+ShowInfoMsgs=1
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[Linker]
+LibPrefix=
+LibSuffix=
+LibVersion=
+  </IDEOPTIONS>
+</PROJECT>

+ 0 - 0
general/DragDrop_B5.cpp → packages/DragDrop_B5.cpp


+ 0 - 0
general/DragDrop_B5.res → packages/DragDrop_B5.res


+ 139 - 0
packages/DriveDir_B5.bpk

@@ -0,0 +1,139 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+  <MACROS>
+    <VERSION value="BCB.06.00"/>
+    <PROJECT value="..\lib\DriveDir_B5.bpl"/>
+    <OBJFILES value="DriveDir_B5.obj &quot;filemng\DirView.obj&quot; &quot;filemng\DriveView.obj&quot; 
+      &quot;filemng\FileOperator.obj&quot; &quot;filemng\IEComboBox.obj&quot; &quot;filemng\BaseUtils.obj&quot; 
+      &quot;filemng\FileChanges.obj&quot; &quot;filemng\MaskSearch.obj&quot; &quot;filemng\IEListView.obj&quot; 
+      &quot;filemng\IEDriveInfo.obj&quot; &quot;filemng\ShellDialogs.obj&quot; 
+      &quot;filemng\DirViewColProperties.obj&quot; &quot;filemng\CustomDirView.obj&quot; 
+      &quot;filemng\CustomUnixDirView.obj&quot; &quot;filemng\UnixDirViewColProperties.obj&quot; 
+      &quot;filemng\CustomPathComboBox.obj&quot; &quot;filemng\IEPathComboBox.obj&quot; 
+      &quot;filemng\ListExt.obj&quot; &quot;filemng\CustomDriveView.obj&quot;"/>
+    <RESFILES value="DriveDir_B5.res &quot;filemng\DirView.dcr&quot; 
+      &quot;filemng\DriveView.dcr&quot; &quot;filemng\FileOperator.dcr&quot; 
+      &quot;filemng\IEComboBox.dcr&quot; &quot;filemng\DirImg.res&quot;"/>
+    <DEFFILE value=""/>
+    <RESDEPEN value="$(RESFILES)"/>
+    <LIBFILES value=""/>
+    <LIBRARIES value="adortl.lib bcb2kaxserver.lib bdecds.lib bdertl.lib
+      cds.lib dbexpress.lib dbrtl.lib dbxcds.lib dclocx.lib dsnap.lib
+      ibxpress.lib indy.lib inet.lib inetdb.lib inetdbbde.lib inetdbxpress.lib
+      nmfast.lib qrpt.lib soaprtl.lib tee.lib teedb.lib teeqr.lib teeui.lib
+      vcldb.lib vcldbx.lib visualdbclx.lib xmlrtl.lib"/>
+    <SPARELIBS value="DragDrop_B5.lib Moje_B5.lib adortl.lib
+      bcb2kaxserver.lib bcbie.lib bcbsmp.lib bdecds.lib bdertl.lib cds.lib
+      dbexpress.lib dbrtl.lib dbxcds.lib dclocx.lib dsnap.lib ibxpress.lib
+      indy.lib inet.lib inetdb.lib inetdbbde.lib inetdbxpress.lib nmfast.lib
+      qrpt.lib rtl.lib soaprtl.lib tee.lib teedb.lib teeqr.lib teeui.lib
+      vcl.lib vcldb.lib vcldbx.lib visualdbclx.lib xmlrtl.lib"/>
+    <PACKAGES value="DragDrop_B5.bpi Moje_B5.bpi bcbie.bpi bcbsmp.bpi
+      rtl.bpi vcl.bpi vclx.bpi"/>
+    <PATHCPP value=".;"/>
+    <PATHPAS value=".;&quot;filemng&quot;"/>
+    <PATHRC value=".;&quot;filemng&quot;"/>
+    <PATHASM value=".;"/>
+    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
+    <RELEASELIBPATH value="$(BCB)\lib\release"/>
+    <LINKER value="ilink32"/>
+    <USERDEFINES value="OLD_DND;NORTON_LIKE"/>
+    <SYSDEFINES value="NO_STRICT;USEPACKAGES"/>
+    <MAINSOURCE value="DriveDir_B5.cpp"/>
+    <INCLUDEPATH value="&quot;filemng&quot;;&quot;dragndrop&quot;;&quot;my&quot;;$(BCB)\include;$(BCB)\include\vcl"/>
+    <LIBPATH value="..\lib\;&quot;filemng&quot;;&quot;dragndrop&quot;;&quot;my&quot;;$(BCB)\lib\obj;$(BCB)\lib;$(BCB)\Source\ToolsAPI"/>
+    <WARNINGS value="-wuse -w-par"/>
+    <OTHERFILES value=""/>
+  </MACROS>
+  <OPTIONS>
+    <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~1\lib\vcl60.csm -Hc -Vx -Ve -X- -a8 -b- 
+      -k- -vi -c -tWM"/>
+    <PFLAGS value="  -$Y- -$L- -$D- -$A8 -v -JPHNE -M"/>
+    <RFLAGS value=""/>
+    <AFLAGS value="/mx /w2 /zn"/>
+    <LFLAGS value="-I -D&quot;filemng&quot; -aa -Tpp -GD -s -Gn -Gl -Gi -M"/>
+    <OTHERFILES value=""/>
+  </OPTIONS>
+  <LINKER>
+    <ALLOBJ value="c0pkg32.obj $(PACKAGES) sysinit.obj $(OBJFILES)"/>
+    <ALLRES value="$(RESFILES)"/>
+    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
+    <OTHERFILES value=""/>
+  </LINKER>
+  <FILELIST>
+      <FILE FILENAME="DriveDir_B5.cpp" FORMNAME="" UNITNAME="DriveDir_B5" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="DriveDir_B5.res" FORMNAME="" UNITNAME="DriveDir_B5" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\DirView.pas" FORMNAME="" UNITNAME="DirView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\DirView.dcr" FORMNAME="" UNITNAME="DirView" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\DriveView.pas" FORMNAME="" UNITNAME="DriveView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\DriveView.dcr" FORMNAME="" UNITNAME="DriveView" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\FileOperator.pas" FORMNAME="" UNITNAME="FileOperator" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\FileOperator.dcr" FORMNAME="" UNITNAME="FileOperator" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\IEComboBox.pas" FORMNAME="" UNITNAME="IEComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\IEComboBox.dcr" FORMNAME="" UNITNAME="IEComboBox" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\BaseUtils.pas" FORMNAME="" UNITNAME="BaseUtils" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\FileChanges.pas" FORMNAME="" UNITNAME="FileChanges" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\MaskSearch.pas" FORMNAME="" UNITNAME="MaskSearch" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\IEListView.pas" FORMNAME="" UNITNAME="IEListView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\IEDriveInfo.pas" FORMNAME="" UNITNAME="IEDriveInfo" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\ShellDialogs.pas" FORMNAME="" UNITNAME="ShellDialogs" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\DirViewColProperties.pas" FORMNAME="" UNITNAME="DirViewColProperties" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\CustomDirView.pas" FORMNAME="" UNITNAME="CustomDirView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\CustomUnixDirView.pas" FORMNAME="" UNITNAME="CustomUnixDirView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\UnixDirViewColProperties.pas" FORMNAME="" UNITNAME="UnixDirViewColProperties" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\CustomPathComboBox.pas" FORMNAME="" UNITNAME="CustomPathComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\IEPathComboBox.pas" FORMNAME="" UNITNAME="IEPathComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\ListExt.pas" FORMNAME="" UNITNAME="ListExt" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="rtl.bpi" FORMNAME="" UNITNAME="rtl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="vcl.bpi" FORMNAME="" UNITNAME="vcl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="vclx.bpi" FORMNAME="" UNITNAME="vclx" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="bcbsmp.bpi" FORMNAME="" UNITNAME="bcbsmp" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="bcbie.bpi" FORMNAME="" UNITNAME="bcbie" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\DirImg.rc" FORMNAME="" UNITNAME="DirImg.rc" CONTAINERID="RC" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="Moje_B5.bpi" FORMNAME="" UNITNAME="Moje_B5" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="DragDrop_B5.bpi" FORMNAME="" UNITNAME="DragDrop_B5" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="filemng\CustomDriveView.pas" FORMNAME="" UNITNAME="CustomDriveView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+  </FILELIST>
+  <BUILDTOOLS>
+  </BUILDTOOLS>
+
+  <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1029
+CodePage=1250
+
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+
+[Compiler]
+ShowInfoMsgs=1
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[Linker]
+LibPrefix=
+LibSuffix=
+LibVersion=
+  </IDEOPTIONS>
+</PROJECT>

+ 0 - 0
general/DriveDir_B5.cpp → packages/DriveDir_B5.cpp


+ 0 - 0
general/DriveDir_B5.res → packages/DriveDir_B5.res


+ 128 - 0
packages/Moje_B5.bpk

@@ -0,0 +1,128 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+  <MACROS>
+    <VERSION value="BCB.06.00"/>
+    <PROJECT value="..\lib\Moje_B5.bpl"/>
+    <OBJFILES value="Moje_B5.obj &quot;my\AssociatedStatusBar.obj&quot; 
+      &quot;my\HistoryComboBox.obj&quot; &quot;my\ListViewColProperties.obj&quot; 
+      &quot;my\MoreButton.obj&quot; &quot;my\NortonLikeListView.obj&quot; 
+      &quot;my\PathLabel.obj&quot; &quot;my\ToolbarPanel.obj&quot; &quot;my\UpDownEdit.obj&quot; 
+      &quot;my\ComboEdit.obj&quot; &quot;my\XPGroupBox.obj&quot; &quot;my\PasswordEdit.obj&quot; 
+      &quot;my\ResourceModule.obj&quot; &quot;my\CompThread.obj&quot; &quot;my\DiscMon.obj&quot;"/>
+    <RESFILES value="Moje_B5.res &quot;my\HistoryComboBox.dcr&quot; 
+      &quot;my\NortonLikeListView.dcr&quot; &quot;my\PathLabel.dcr&quot; &quot;my\DiscMon.dcr&quot;"/>
+    <DEFFILE value=""/>
+    <RESDEPEN value="$(RESFILES)"/>
+    <LIBFILES value=""/>
+    <LIBRARIES value="adortl.lib bcb2kaxserver.lib bdecds.lib bdertl.lib
+      cds.lib dbexpress.lib dbrtl.lib dbxcds.lib dclocx.lib dsnap.lib
+      ibxpress.lib indy.lib inet.lib inetdb.lib inetdbbde.lib inetdbxpress.lib
+      nmfast.lib qrpt.lib soaprtl.lib tee.lib teedb.lib teeqr.lib teeui.lib
+      vcldb.lib vcldbx.lib visualdbclx.lib xmlrtl.lib"/>
+    <SPARELIBS value="adortl.lib bcb2kaxserver.lib bcbie.lib bcbsmp.lib
+      bdecds.lib bdertl.lib cds.lib dbexpress.lib dbrtl.lib dbxcds.lib
+      dclocx.lib dsnap.lib ibxpress.lib indy.lib inet.lib inetdb.lib
+      inetdbbde.lib inetdbxpress.lib nmfast.lib qrpt.lib rtl.lib soaprtl.lib
+      tee.lib teedb.lib teeqr.lib teeui.lib vcl.lib vcldb.lib vcldbx.lib
+      visualdbclx.lib xmlrtl.lib"/>
+    <PACKAGES value="bcbie.bpi bcbsmp.bpi rtl.bpi vcl.bpi vclx.bpi"/>
+    <PATHCPP value=".;"/>
+    <PATHPAS value=".;&quot;my&quot;"/>
+    <PATHRC value=".;"/>
+    <PATHASM value=".;"/>
+    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
+    <RELEASELIBPATH value="$(BCB)\lib\release"/>
+    <LINKER value="ilink32"/>
+    <USERDEFINES value=""/>
+    <SYSDEFINES value="NO_STRICT;USEPACKAGES"/>
+    <MAINSOURCE value="Moje_B5.cpp"/>
+    <INCLUDEPATH value="&quot;my&quot;;$(BCB)\include;$(BCB)\include\vcl"/>
+    <LIBPATH value="..\lib\;&quot;my&quot;;$(BCB)\lib\obj;$(BCB)\lib;$(BCB)\Source\ToolsAPI"/>
+    <WARNINGS value="-wuse -w-par"/>
+    <OTHERFILES value=""/>
+  </MACROS>
+  <OPTIONS>
+    <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~1\lib\vcl60.csm -Hc -Q -w -Vx -Ve -X- 
+      -a8 -b- -k- -vi -c -tWM"/>
+    <PFLAGS value="  -$Y- -$L- -$D- -$C- -$A8 -v -JPHNE -M"/>
+    <RFLAGS value=""/>
+    <AFLAGS value="/mx /w2 /zn"/>
+    <LFLAGS value="-I -D&quot;Martin's components&quot; -aa -Tpp -x -Gn -Gl -Gi"/>
+    <OTHERFILES value=""/>
+  </OPTIONS>
+  <LINKER>
+    <ALLOBJ value="c0pkg32.obj $(PACKAGES) sysinit.obj $(OBJFILES)"/>
+    <ALLRES value="$(RESFILES)"/>
+    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
+    <OTHERFILES value=""/>
+  </LINKER>
+  <FILELIST>
+      <FILE FILENAME="Moje_B5.cpp" FORMNAME="" UNITNAME="Moje_B5" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="Moje_B5.res" FORMNAME="" UNITNAME="Moje_B5" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="rtl.bpi" FORMNAME="" UNITNAME="rtl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="vcl.bpi" FORMNAME="" UNITNAME="vcl" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="vclx.bpi" FORMNAME="" UNITNAME="vclx" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="bcbsmp.bpi" FORMNAME="" UNITNAME="bcbsmp" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="bcbie.bpi" FORMNAME="" UNITNAME="bcbie" CONTAINERID="BPITool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\AssociatedStatusBar.pas" FORMNAME="" UNITNAME="AssociatedStatusBar" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\HistoryComboBox.pas" FORMNAME="" UNITNAME="HistoryComboBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\HistoryComboBox.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\ListViewColProperties.pas" FORMNAME="" UNITNAME="ListViewColProperties" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\MoreButton.pas" FORMNAME="" UNITNAME="MoreButton" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\NortonLikeListView.pas" FORMNAME="" UNITNAME="NortonLikeListView" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\NortonLikeListView.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\PathLabel.pas" FORMNAME="" UNITNAME="PathLabel" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\PathLabel.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\ToolbarPanel.pas" FORMNAME="" UNITNAME="ToolbarPanel" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\UpDownEdit.pas" FORMNAME="" UNITNAME="UpDownEdit" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\ComboEdit.pas" FORMNAME="" UNITNAME="ComboEdit" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\XPGroupBox.pas" FORMNAME="" UNITNAME="XPGroupBox" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\PasswordEdit.pas" FORMNAME="" UNITNAME="PasswordEdit" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\ResourceModule.pas" FORMNAME="" UNITNAME="ResourceModule" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\CompThread.pas" FORMNAME="" UNITNAME="CompThread" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\DiscMon.pas" FORMNAME="" UNITNAME="DiscMon" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="my\DiscMon.dcr" FORMNAME="" UNITNAME="" CONTAINERID="DcrTool" DESIGNCLASS="" LOCALCOMMAND=""/>
+  </FILELIST>
+  <BUILDTOOLS>
+  </BUILDTOOLS>
+
+  <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1029
+CodePage=1250
+
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+
+[Compiler]
+ShowInfoMsgs=1
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[Linker]
+LibPrefix=
+LibSuffix=
+LibVersion=
+  </IDEOPTIONS>
+</PROJECT>

+ 0 - 0
general/Moje_B5.cpp → packages/Moje_B5.cpp


+ 0 - 0
general/Moje_B5.res → packages/Moje_B5.res


+ 0 - 0
general/drag and drop components/DragDrop.dcr → packages/dragndrop/DragDrop.dcr


+ 0 - 0
general/drag and drop components/DragDrop.pas → packages/dragndrop/DragDrop.pas


+ 0 - 0
general/drag and drop components/DragDropBitmap.dcr → packages/dragndrop/DragDropBitmap.dcr


+ 0 - 0
general/drag and drop components/DragDropBitmap.pas → packages/dragndrop/DragDropBitmap.pas


+ 0 - 0
general/drag and drop components/DragDropFiles.dcr → packages/dragndrop/DragDropFiles.dcr


+ 0 - 0
general/drag and drop components/DragDropFiles.pas → packages/dragndrop/DragDropFiles.pas


+ 0 - 0
general/drag and drop components/DragDropFilesEx.dcr → packages/dragndrop/DragDropFilesEx.dcr


+ 0 - 0
general/drag and drop components/DragDropFilesEx.pas → packages/dragndrop/DragDropFilesEx.pas


+ 0 - 0
general/drag and drop components/DragDropText.dcr → packages/dragndrop/DragDropText.dcr


+ 0 - 0
general/drag and drop components/DragDropText.pas → packages/dragndrop/DragDropText.pas


+ 0 - 0
general/drag and drop components/DragDropURL.dcr → packages/dragndrop/DragDropURL.dcr


+ 0 - 0
general/drag and drop components/DragDropURL.pas → packages/dragndrop/DragDropURL.pas


+ 0 - 0
general/drag and drop components/Index.htm → packages/dragndrop/Index.htm


+ 0 - 0
general/drag and drop components/ListSort.dcr → packages/dragndrop/ListSort.dcr


+ 0 - 0
general/drag and drop components/ListSort.pas → packages/dragndrop/ListSort.pas


+ 0 - 0
general/drag and drop components/PIDL.pas → packages/dragndrop/PIDL.pas


+ 0 - 0
general/drag and drop components/TDragDrop.htm → packages/dragndrop/TDragDrop.htm


+ 0 - 0
general/drag and drop components/TDragDropBitmap.htm → packages/dragndrop/TDragDropBitmap.htm


+ 0 - 0
general/drag and drop components/TDragDropFiles.htm → packages/dragndrop/TDragDropFiles.htm


+ 0 - 0
general/drag and drop components/TDragDropFilesEx.htm → packages/dragndrop/TDragDropFilesEx.htm


+ 0 - 0
general/drag and drop components/TDragDropText.htm → packages/dragndrop/TDragDropText.htm


+ 0 - 0
general/drag and drop components/TDragDropURL.htm → packages/dragndrop/TDragDropURL.htm


+ 0 - 0
general/filemanager toolset/BaseUtils.pas → packages/filemng/BaseUtils.pas


+ 1 - 0
packages/filemng/CustomDirView.hpp

@@ -520,6 +520,7 @@ extern PACKAGE bool __fastcall CreateFileShortCut(AnsiString SourceFile, AnsiStr
 extern PACKAGE int __fastcall GetIconIndex(const AnsiString AFile, unsigned Attrs, unsigned Flags);
 extern PACKAGE _SHFILEINFOA __fastcall GetshFileInfo(const AnsiString AFile, unsigned Attrs, unsigned Flags);
 extern PACKAGE bool __fastcall GetShellDisplayName(const _di_IShellFolder ShellFolder, Shlobj::PItemIDList IDList, unsigned Flags, AnsiString &Name);
+extern PACKAGE Controls::TImageList* __fastcall OverlayImageList(int Size);
 
 }	/* namespace Customdirview */
 using namespace Customdirview;

+ 48 - 30
general/filemanager toolset/CustomDirView.pas → packages/filemng/CustomDirView.pas

@@ -488,6 +488,8 @@ function FileNameMatchesMasks(FileName: string; Masks: string): Boolean;
 
 procedure DefaultFileFilter(var Filter: TFileFilter);
 
+function OverlayImageList(Size: Integer): TImageList;
+
 var
   StdDirIcon: Integer;
   StdDirSelIcon: Integer;
@@ -716,6 +718,31 @@ begin
   end;
 end; {COMCTL32OK}
 
+function OverlayImageList(Size: Integer): TImageList;
+
+  procedure GetOverlayBitmap(ImageList: TImageList; BitmapName: string);
+  var
+    Bitmap: TBitmap;
+  begin
+    Bitmap := TBitmap.Create;
+    try
+      Bitmap.LoadFromResourceName(hInstance, BitmapName);
+      ImageList.AddMasked(Bitmap, Bitmap.Canvas.Pixels[0, 0]);
+    finally
+      Bitmap.Free;
+    end;
+  end; {GetOverlayBitmap}
+
+begin
+  Result := TImageList.CreateSize(Size, Size);
+  Result.DrawingStyle := dsTransparent;
+  Result.BkColor := clNone;
+  GetOverlayBitmap(Result, Format(ResDirUp, [Size]));
+  GetOverlayBitmap(Result, Format(ResLink, [Size]));
+  GetOverlayBitmap(Result, Format(ResBrokenLink, [Size]));
+end;
+
+
   { TLoadAnimationStartThread }
 
 {constructor TLoadAnimationStartThread.Create(AInterval: Integer; AAnimation: TAnimate);
@@ -1117,30 +1144,6 @@ begin
 end;
 
 procedure TCustomDirView.CreateWnd;
-
-  procedure GetOverlayBitmap(ImageList: TImageList; BitmapName: string);
-  var
-    Bitmap: TBitmap;
-  begin
-    Bitmap := TBitmap.Create;
-    try
-      Bitmap.LoadFromResourceName(hInstance, BitmapName);
-      ImageList.AddMasked(Bitmap, Bitmap.Canvas.Pixels[0, 0]);
-    finally
-      Bitmap.Free;
-    end;
-  end; {GetOverlayBitmap}
-
-  function OverlayImageList(Size: Integer): TImageList;
-  begin
-    Result := TImageList.CreateSize(Size, Size);
-    Result.DrawingStyle := dsTransparent;
-    Result.BkColor := clNone;
-    GetOverlayBitmap(Result, Format(ResDirUp, [Size]));
-    GetOverlayBitmap(Result, Format(ResLink, [Size]));
-    GetOverlayBitmap(Result, Format(ResBrokenLink, [Size]));
-  end;
-
 begin
   inherited;
 
@@ -1933,6 +1936,19 @@ begin
     if Assigned(FOnDDDragOver) then
       FOnDDDragOver(Self, grfKeyState, Point, dwEffect);
 
+    // cannot drop to dragged files
+    if DragDropFilesEx.OwnerIsSource and Assigned(DropItem) then
+    begin
+      if Assigned(ItemFocused) and (not ItemFocused.Selected) then
+      begin
+        if DropItem = ItemFocused then
+          dwEffect := DropEffect_None;
+      end
+        else
+      if DropItem.Selected then
+        dwEffect := DropEffect_None;
+    end;
+
     if DragDropFilesEx.OwnerIsSource and (dwEffect = DropEffect_Move) and
       (not Assigned(DropTarget)) then dwEffect := DropEffect_None
       else
@@ -2312,13 +2328,15 @@ begin
 
     if not FileListCreated then
     begin
-      if Assigned(ItemFocused) and (not ItemFocused.Selected) and
-         ItemCanDrag(ItemFocused) then
+      if Assigned(ItemFocused) and (not ItemFocused.Selected) then
       begin
-        FirstItem := ItemFocused;
-        AddToDragFileList(DragDropFilesEx.FileList, ItemFocused);
-        if ItemIsDirectory(ItemFocused) then Inc(DirsCount)
-          else Inc(FilesCount);
+        if ItemCanDrag(ItemFocused) then
+        begin
+          FirstItem := ItemFocused;
+          AddToDragFileList(DragDropFilesEx.FileList, ItemFocused);
+          if ItemIsDirectory(ItemFocused) then Inc(DirsCount)
+            else Inc(FilesCount);
+        end;
       end
         else
       if SelCount > 0 then

+ 7 - 0
packages/filemng/CustomDriveView.hpp

@@ -75,6 +75,7 @@ protected:
 	bool FDimmHiddenDirs;
 	bool FShowHiddenDirs;
 	bool FContinue;
+	Controls::TImageList* FImageList;
 	Customdirview::TDDOnDragEnter FOnDDDragEnter;
 	Customdirview::TDDOnDragLeave FOnDDDragLeave;
 	Customdirview::TDDOnDragOver FOnDDDragOver;
@@ -103,6 +104,9 @@ protected:
 	virtual void __fastcall SetCustomDirView(Customdirview::TCustomDirView* Value) = 0 ;
 	virtual void __fastcall CreateWnd(void);
 	virtual void __fastcall Notification(Classes::TComponent* AComponent, Classes::TOperation Operation);
+	Comctrls::TTreeNode* __fastcall GetNodeFromHItem(const tagTVITEMA &Item);
+	virtual bool __fastcall IsCustomDrawn(Comctrls::TCustomDrawTarget Target, Comctrls::TCustomDrawStage Stage);
+	virtual bool __fastcall CustomDrawItem(Comctrls::TTreeNode* Node, Comctrls::TCustomDrawState State, Comctrls::TCustomDrawStage Stage, bool &PaintImages);
 	HIDESBASE MESSAGE void __fastcall CNNotify(Messages::TWMNotify &Msg);
 	HIDESBASE MESSAGE void __fastcall WMLButtonDown(Messages::TWMMouse &Msg);
 	HIDESBASE MESSAGE void __fastcall WMLButtonUp(Messages::TWMMouse &Msg);
@@ -136,7 +140,9 @@ protected:
 	virtual bool __fastcall NodePathExists(Comctrls::TTreeNode* Node);
 	virtual Graphics::TColor __fastcall NodeColor(Comctrls::TTreeNode* Node) = 0 ;
 	virtual bool __fastcall NodeCanDrag(Comctrls::TTreeNode* Node);
+	virtual Word __fastcall NodeOverlayIndexes(Comctrls::TTreeNode* Node);
 	virtual Comctrls::TTreeNode* __fastcall FindPathNode(AnsiString Path) = 0 ;
+	virtual void __fastcall ClearDragFileList(Dragdropfilesex::TFileList* FileList);
 	virtual void __fastcall AddToDragFileList(Dragdropfilesex::TFileList* FileList, Comctrls::TTreeNode* Node);
 	virtual void __fastcall ValidateDirectoryEx(Comctrls::TTreeNode* Node, TRecursiveScan Recurse, bool NewDirs) = 0 ;
 	void __fastcall ValidateVisibleDirectories(Comctrls::TTreeNode* Node);
@@ -144,6 +150,7 @@ protected:
 	virtual void __fastcall RebuildTree(void) = 0 ;
 	virtual void __fastcall DisplayContextMenu(Comctrls::TTreeNode* Node, const Types::TPoint &ScreenPos) = 0 ;
 	virtual void __fastcall DisplayPropertiesMenu(Comctrls::TTreeNode* Node) = 0 ;
+	__property Controls::TImageList* ImageList = {read=FImageList};
 	
 public:
 	__fastcall virtual TCustomDriveView(Classes::TComponent* AOwner);

+ 87 - 5
general/filemanager toolset/CustomDriveView.pas → packages/filemng/CustomDriveView.pas

@@ -46,6 +46,7 @@ type
     FDimmHiddenDirs: Boolean;
     FShowHiddenDirs: Boolean;
     FContinue: Boolean;
+    FImageList: TImageList;
 
     FOnDDDragEnter: TDDOnDragEnter;
     FOnDDDragLeave: TDDOnDragLeave;
@@ -79,6 +80,10 @@ type
 
     procedure CreateWnd; override;
     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+    function GetNodeFromHItem(Item: TTVItem): TTreeNode;
+    function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean; override;
+    function CustomDrawItem(Node: TTreeNode; State: TCustomDrawState;
+      Stage: TCustomDrawStage; var PaintImages: Boolean): Boolean; override;
 
     procedure CNNotify(var Msg: TWMNotify); message CN_NOTIFY;
     procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
@@ -127,7 +132,9 @@ type
     function NodePathExists(Node: TTreeNode): Boolean; virtual;
     function NodeColor(Node: TTreeNode): TColor; virtual; abstract;
     function NodeCanDrag(Node: TTreeNode): Boolean; virtual;
+    function NodeOverlayIndexes(Node: TTreeNode): Word; virtual;
     function FindPathNode(Path: string): TTreeNode; virtual; abstract;
+    procedure ClearDragFileList(FileList: TFileList); virtual;
     procedure AddToDragFileList(FileList: TFileList; Node: TTreeNode); virtual;
 
     procedure ValidateDirectoryEx(Node: TTreeNode; Recurse: TRecursiveScan;
@@ -139,6 +146,8 @@ type
     procedure DisplayContextMenu(Node: TTreeNode; ScreenPos: TPoint); virtual; abstract;
     procedure DisplayPropertiesMenu(Node: TTreeNode); virtual; abstract;
 
+    property ImageList: TImageList read FImageList;
+
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
@@ -214,7 +223,7 @@ resourcestring
 implementation
 
 uses
-  SysUtils, ShellApi,
+  SysUtils, ShellApi, ImgList,
   IEListView, BaseUtils;
 
 const
@@ -276,6 +285,8 @@ end;
 
 destructor TCustomDriveView.Destroy;
 begin
+  FreeAndNil(FImageList);
+
   if Assigned(Images) then
     Images.Free;
 
@@ -313,6 +324,8 @@ begin
 
   FDragDropFilesEx.DragDropControl := Self;
   FParentForm := GetParentForm(Self);
+
+  FImageList := OverlayImageList(16);
 end;
 
 procedure TCustomDriveView.Notification(AComponent: TComponent; Operation: TOperation);
@@ -707,7 +720,7 @@ begin
 
     finally
       DropTarget := nil;
-      FDragDropFilesEx.FileList.Clear;
+      ClearDragFileList(FDragDropFilesEx.FileList);
     end;
   except
     Application.HandleException(Self);
@@ -761,7 +774,7 @@ begin
 
     FDragDrive := #0;
 
-    FDragDropFilesEx.FileList.Clear;
+    ClearDragFileList(FDragDropFilesEx.FileList);
     FDragDropFilesEx.CompleteFileList := DragCompleteFileList;
     FileListCreated := False;
     AvoidDragImage := False;
@@ -823,7 +836,7 @@ begin
       Application.ProcessMessages;
       
     finally
-      FDragDropFilesEx.FileList.Clear;
+      ClearDragFileList(FDragDropFilesEx.FileList);
 
       FDragDrive := #0;
       DropTarget := nil;
@@ -850,6 +863,65 @@ begin
   Result := FDragDropFilesEx.Execute(nil);
 end;
 
+function TCustomDriveView.GetNodeFromHItem(Item: TTVItem): TTreeNode;
+begin
+  Result := nil;
+  if Items <> nil then
+    with Item do
+      if (state and TVIF_PARAM) <> 0 then
+        Result := Pointer(lParam)
+      else
+        Result := Items.GetNode(hItem);
+end; {GetNodeFromItem}
+
+function TCustomDriveView.IsCustomDrawn(Target: TCustomDrawTarget;
+  Stage: TCustomDrawStage): Boolean;
+begin
+  Result := inherited IsCustomDrawn(Target, Stage) or
+    ((Target = dtItem) and (Stage = cdPostPaint));
+end;
+
+function TCustomDriveView.CustomDrawItem(Node: TTreeNode; State: TCustomDrawState;
+  Stage: TCustomDrawStage; var PaintImages: Boolean): Boolean;
+var
+  Point: TPoint;
+  Index: Integer;
+  OverlayIndexes: Word;
+  OverlayIndex: Word;
+  Image: Word;
+begin
+  Result := inherited CustomDrawItem(Node, State, Stage, PaintImages);
+
+  if Result and (Stage = cdPostPaint) and HasExtendedCOMCTL32 then
+  begin
+    Assert(Assigned(Node));
+    OverlayIndexes := NodeOverlayIndexes(Node);
+    OverlayIndex := 1;
+    while OverlayIndexes > 0 do
+    begin
+      if (OverlayIndex and OverlayIndexes) <> 0 then
+      begin
+        Index := 0;
+        Image := OverlayIndex;
+        while Image > 1 do
+        begin
+          Inc(Index);
+          Image := Image shr 1;
+        end;
+
+        Point := Node.DisplayRect(True).TopLeft;
+        Dec(Point.X, Indent);
+
+        ImageList_Draw(ImageList.Handle, Index, Self.Canvas.Handle,
+          Point.X, Point.Y, ILD_TRANSPARENT);
+
+        Dec(OverlayIndexes, OverlayIndex);
+      end;
+      OverlayIndex := OverlayIndex shl 1;
+    end;
+  end;
+end;
+
 procedure TCustomDriveView.CNNotify(var Msg: TWMNotify);
 begin
   case Msg.NMHdr.code of
@@ -1138,9 +1210,14 @@ begin {IterateSubTree}
   Result := True;
 end; {IterateSubTree}
 
+procedure TCustomDriveView.ClearDragFileList(FileList: TFileList);
+begin
+  FileList.Clear;
+end;
+
 procedure TCustomDriveView.AddToDragFileList(FileList: TFileList; Node: TTreeNode);
 begin
-  FDragDropFilesEx.FileList.AddItem(nil, NodePathName(Node));
+  FileList.AddItem(nil, NodePathName(Node));
 end;
 
 function TCustomDriveView.NodeCanDrag(Node: TTreeNode): Boolean;
@@ -1148,6 +1225,11 @@ begin
   Result := True;
 end;
 
+function TCustomDriveView.NodeOverlayIndexes(Node: TTreeNode): Word;
+begin
+  Result := oiNoOverlay;
+end;
+
 function TCustomDriveView.NodeIsRecycleBin(Node: TTreeNode): Boolean;
 begin
   Result := False;

+ 0 - 0
general/filemanager toolset/CustomPathComboBox.pas → packages/filemng/CustomPathComboBox.pas


+ 0 - 0
general/filemanager toolset/CustomUnixDirView.pas → packages/filemng/CustomUnixDirView.pas


+ 0 - 0
general/filemanager toolset/DirImg.rc → packages/filemng/DirImg.rc


+ 0 - 0
general/filemanager toolset/DirView.dcr → packages/filemng/DirView.dcr


+ 3 - 1
packages/filemng/DirView.hpp

@@ -14,8 +14,8 @@
 #include <PathLabel.hpp>	// Pascal unit
 #include <CustomPathComboBox.hpp>	// Pascal unit
 #include <Controls.hpp>	// Pascal unit
-#include <IEListView.hpp>	// Pascal unit
 #include <NortonLikeListView.hpp>	// Pascal unit
+#include <IEListView.hpp>	// Pascal unit
 #include <BaseUtils.hpp>	// Pascal unit
 #include <SysUtils.hpp>	// Pascal unit
 #include <FileCtrl.hpp>	// Pascal unit
@@ -313,6 +313,7 @@ private:
 	AnsiString FPath;
 	bool FDrawLinkOverlay;
 	bool SelectNewFiles;
+	bool FSelfDropDuplicates;
 	Customdirview::TSelAttr FSelArchive;
 	Customdirview::TSelAttr FSelHidden;
 	Customdirview::TSelAttr FSelSysFile;
@@ -509,6 +510,7 @@ __published:
 	__property AnsiString AttrSpace = {read=FAttrSpace, write=SetAttrSpace};
 	__property AnsiString NoCheckDrives = {read=FNoCheckDrives, write=SetNoCheckDrives};
 	__property WatchForChanges  = {default=0};
+	__property bool SelfDropDuplicates = {read=FSelfDropDuplicates, write=FSelfDropDuplicates, default=0};
 	__property Classes::TNotifyEvent OnChangeDetected = {read=FOnChangeDetected, write=FOnChangeDetected};
 	__property Classes::TNotifyEvent OnChangeInvalid = {read=FOnChangeInvalid, write=FOnChangeInvalid};
 	__property TDirViewAddFileEvent OnAddFile = {read=FOnAddFile, write=FOnAddFile};

+ 8 - 0
general/filemanager toolset/DirView.pas → packages/filemng/DirView.pas

@@ -198,6 +198,7 @@ type
     FPath: string;
     FDrawLinkOverlay: Boolean;
     SelectNewFiles: Boolean;
+    FSelfDropDuplicates: Boolean;
 
     {File selection properties:}
     FSelArchive: TSelAttr;
@@ -486,6 +487,8 @@ type
     property NoCheckDrives: string read FNoCheckDrives write SetNoCheckDrives;
     {Watch current directory for filename changes (create, rename, delete files)}
     property WatchForChanges;
+    property SelfDropDuplicates: Boolean
+      read FSelfDropDuplicates write FSelfDropDuplicates default False;
 
     {Additional events:}
     {The watchthread has detected new, renamed or deleted files}
@@ -916,6 +919,7 @@ begin
   SelectNewFiles := False;
   FDrawLinkOverlay := True;
   DragOnDriveIsMove := True;
+  FSelfDropDuplicates := False;
 
   FFileOperator := TFileOperator.Create(Self);
   FFileOperator.ProgressTitle := coFileOperatorTitle;
@@ -3730,6 +3734,10 @@ end; {DDDragDetect}
 procedure TDirView.DDChooseEffect(grfKeyState: Integer;
   var dwEffect: Integer);
 begin
+  if (not SelfDropDuplicates) and DragDropFilesEx.OwnerIsSource and
+     (dwEffect = DropEffect_Copy) and (not Assigned(DropTarget)) then
+        dwEffect := DropEffect_None
+    else
   if (grfKeyState and (MK_CONTROL or MK_SHIFT) = 0) then
   begin
     if ExeDrag and (Path[1] >= FirstFixedDrive) and

+ 0 - 0
general/filemanager toolset/DirViewColProperties.pas → packages/filemng/DirViewColProperties.pas


+ 0 - 0
general/filemanager toolset/DriveView.dcr → packages/filemng/DriveView.dcr


+ 0 - 1
packages/filemng/DriveView.hpp

@@ -338,7 +338,6 @@ protected:
 	virtual void __fastcall SetDirectory(AnsiString Value);
 	void __fastcall SetDrive(char Drive);
 	char __fastcall GetDrive(void);
-	Comctrls::TTreeNode* __fastcall GetNodeFromHItem(const tagTVITEMA &Item);
 	void __fastcall GetNodeShellAttr(_di_IShellFolder ParentFolder, TNodeData* NodeData, AnsiString Path, bool ContentMask = true);
 	virtual bool __fastcall DoScanDir(Comctrls::TTreeNode* FromNode);
 	virtual Comctrls::TTreeNode* __fastcall AddChildNode(Comctrls::TTreeNode* ParentNode, const Sysutils::TSearchRec &SRec);

+ 78 - 89
general/filemanager toolset/DriveView.pas → packages/filemng/DriveView.pas

@@ -214,7 +214,6 @@ type
     procedure SetDirectory(Value: string); override;
     procedure SetDrive(Drive: TDrive);
     function  GetDrive: TDrive;
-    function  GetNodeFromHItem(Item: TTVItem): TTreeNode;
     procedure GetNodeShellAttr(ParentFolder: IShellFolder; NodeData: TNodeData;
       Path: string; ContentMask: Boolean = True);
     function  DoScanDir(FromNode: TTreeNode): Boolean; virtual;
@@ -727,9 +726,8 @@ function TDriveView.NodePath(Node: TTreeNode): string;
 var
   ParentNode: TTreeNode;
 begin
-  IF Not Assigned(Node) Then
-  Raise ENodeNotAssigned.Create(Format(ErrorNodeNA, ['GetDirPath']));
-//  Assert(Assigned(Node));
+  if not Assigned(Node) then
+    raise ENodeNotAssigned.Create(Format(ErrorNodeNA, ['GetDirPath']));
 
   Result := GetDirName(Node);
   ParentNode := Node.Parent;
@@ -743,7 +741,7 @@ begin
 
     ParentNode := ParentNode.Parent;
   end;
-  
+
   if Length(Result) = 3 then
     SetLength(Result, 2);
 end;
@@ -768,118 +766,118 @@ begin
 end;
 
 function TDriveView.CanEdit(Node: TTreeNode): Boolean;
-Begin
-  Result := Inherited CanEdit(Node) Or FForceRename;
-  IF Result Then
-  Result := Assigned(Node.Parent) And
-            Not TNodeData(Node.Data).isRecycleBin And
-            Not ReadOnly And
-            (FDragDropFilesEx.DragDetectStatus <> ddsDrag) And
-            (TNodeData(Node.Data).Attr and (faReadOnly or faSysFile) = 0) And
-            (UpperCase(Node.Text) = UpperCase(GetDirName(Node)));
+begin
+  Result := inherited CanEdit(Node) or FForceRename;
+  if Result then
+  begin
+    Result := Assigned(Node.Parent) and
+      (not TNodeData(Node.Data).isRecycleBin) and
+      (not ReadOnly) and
+      (FDragDropFilesEx.DragDetectStatus <> ddsDrag) and
+      ((TNodeData(Node.Data).Attr and (faReadOnly or faSysFile)) = 0) and
+      (UpperCase(Node.Text) = UpperCase(GetDirName(Node)));
+  end;
   FForceRename := False;
-End; {CanEdit}
+end; {CanEdit}
 
 procedure TDriveView.Edit(const Item: TTVItem);
-Var NewDirName: String;
-    SRec: TSearchRec;
-    Node: TTreeNode;
-    Info: String;
-    i: Integer;
-
-Begin
+var
+  NewDirName: String;
+  SRec: TSearchRec;
+  Node: TTreeNode;
+  Info: String;
+  i: Integer;
+begin
   Node := GetNodeFromHItem(Item);
-  IF (Length(Item.pszText) > 0) And (Item.pszText <> Node.Text) Then
-  Begin
-    IF StrContains(coInvalidDosChars, Item.pszText) Then
-    Begin
+  if (Length(Item.pszText) > 0) and (Item.pszText <> Node.Text) then
+  begin
+    if StrContains(coInvalidDosChars, Item.pszText) then
+    begin
       Info := coInvalidDosChars;
-      For i := Length(Info) DownTo 1 Do
-      System.Insert(Space, Info, i);
+      for i := Length(Info) downto 1 do
+        System.Insert(Space, Info, i);
 
-      IF Assigned(OnEdited) Then
-      Begin
+      if Assigned(OnEdited) then
+      begin
         NewDirName := Node.Text;
         OnEdited(Self, Node, NewDirName);
-      End;
-      IF Length(Item.pszText) > 0 Then
-        Raise EInvalidDirName.CreateFmt(SErrorInvalidDirName, [Info]);
+      end;
+      if Length(Item.pszText) > 0 then
+        raise EInvalidDirName.CreateFmt(SErrorInvalidDirName, [Info]);
       Exit;
-    End;
+    end;
 
 {$IFNDEF NO_THREADS}
     StopWatchThread;
-    IF Assigned(DirView) Then
-    DirView.StopWatchThread;
+    if Assigned(DirView) then
+      DirView.StopWatchThread;
 {$ENDIF}
 
-    With FFileOperator Do
-    Begin
+    with FFileOperator do
+    begin
       Flags := [foAllowUndo, foNoConfirmation];
       Operation := foRename;
       OperandFrom.Clear;
       OperandTo.Clear;
       OperandFrom.Add(NodePath(Node));
       OperandTo.Add(IncludeTrailingBackslash(NodePath(Node.Parent)) + Item.pszText);
-    End;
+    end;
 
-    Try
-      IF FFileOperator.Execute Then
-      {IF RenameFile(NodePath(Node), AddSlash(NodePath(Node.Parent)) + Item.pszText) Then}
-      Begin
+    try
+      if FFileOperator.Execute then
+      begin
         Node.Text := Item.pszText;
         TNodeData(Node.Data).Dirname := Item.pszText;
-        IF FindFirst(IncludeTrailingBackslash(NodePath(Node.Parent)) + Item.pszText, faAnyFile, Srec) = 0 Then
-          TNodeData(Node.Data).ShortName := Srec.FindData.cAlternateFileName;
-        FindClose(Srec);
+        if FindFirst(IncludeTrailingBackslash(NodePath(Node.Parent)) + Item.pszText,
+             faAnyFile, SRec) = 0 then
+        begin
+          TNodeData(Node.Data).ShortName := SRec.FindData.cAlternateFileName;
+        end;
+        FindClose(SRec);
         SortChildren(Node.Parent, False);
 
-        Inherited Edit(Item);
-      End
-      Else
-      Begin
-        {
-         Raise ERenameFileFailed.Create(ErrorRenameFile + Item.pszText);
-         }
-        IF FileOrDirExists(IncludeTrailingBackslash(NodePath(Node.Parent)) + Item.pszText) Then
+        inherited;
+      end
+        else
+      begin
+        if FileOrDirExists(IncludeTrailingBackslash(NodePath(Node.Parent)) + Item.pszText) then
           Info := SErrorRenameFileExists + Item.pszText
-        Else
+        else
           Info := SErrorRenameFile + Item.pszText;
 
         MessageBeep(MB_ICONHAND);
-        IF MessageDlg(Info, mtError, [mbOK, mbAbort], 0) = mrOK Then
-        Begin
+        if MessageDlg(Info, mtError, [mbOK, mbAbort], 0) = mrOK then
+        begin
           FLastRenameName := Item.pszText;
-          FRenameNode     := Node;
-          PostMessage(Self. Handle, WM_USER_RENAME, 0 , 0);
-        End;
-
-      End;
-    Finally
+          FRenameNode := Node;
+          PostMessage(Self.Handle, WM_USER_RENAME, 0, 0);
+        end;
+      end;
+    finally
 {$IFNDEF NO_THREADS}
       StartWatchThread;
 {$ENDIF}
-      IF Assigned(DirView) Then
-      Begin
+      if Assigned(DirView) then
+      begin
         DirView.Reload2;
 {$IFNDEF NO_THREADS}
         DirView.StartWatchThread;
 {$ENDIF}
-      End;
-    End;
-  End;
-End; {Edit}
+      end;
+    end;
+  end;
+end; {Edit}
 
-procedure TDriveView.WMUserRename(Var Message: TMessage);
-Begin
-  IF Assigned(FRenameNode) Then
-  Begin
+procedure TDriveView.WMUserRename(var Message: TMessage);
+begin
+  if Assigned(FRenameNode) then
+  begin
     FForceRename := True;
     TreeView_EditLabel(Handle, FRenameNode.ItemID);
     SetWindowText(TreeView_GetEditControl(Self.Handle), PChar(FLastRenameName));
-    FRenameNode := NIL;
-  End;
-End; {WMUserRename}
+    FRenameNode := nil;
+  end;
+end; {WMUserRename}
 
 function  TDriveView.CanExpand(Node: TTreeNode): Boolean;
 var
@@ -1097,15 +1095,6 @@ begin
   inherited;
 end; {Change}
 
-function TDriveView.GetNodeFromHItem(Item: TTVItem): TTreeNode;
-begin
-  with Item do
-    if (State and TVIF_PARAM) <> 0 then
-      Result := Pointer(lParam)
-    else
-      Result := Items.GetNode(hItem);
-end; {GetNodeFromItem}
-
 procedure TDriveView.SetImageIndex(Node: TTreeNode);
 var
   FileInfo: TShFileInfo;
@@ -2772,7 +2761,7 @@ begin
       SourcePath := TFDDListItem(FDragDropFilesEx.FileList[0]^).Name;
       SourceParentPath := ExtractFilePath(ExcludeTrailingBackslash(SourcePath));
 
-      FDragDropFilesEx.FileList.Clear;
+      ClearDragFileList(FDragDropFilesEx.FileList);
 
       FFileOperator.Flags := [foAllowUndo, foNoConfirmMkDir];
 
@@ -2978,8 +2967,8 @@ begin
   if Result then
   begin
     EmptyClipBoard;
-    FDragDropFilesEx.FileList.Clear;
-    FDragDropFilesEx.FileList.AddItem(nil, NodePathName(Selected));
+    ClearDragFileList(FDragDropFilesEx.FileList);
+    AddToDragFileList(FDragDropFilesEx.FileList, Selected);
     Result := FDragDropFilesEx.CopyToClipBoard;
     LastClipBoardOperation := cboCopy;
   end;
@@ -3007,7 +2996,7 @@ end; {CanPasteFromClipBoard}
 
 function TDriveView.PasteFromClipBoard(TargetPath: String = ''): Boolean;
 begin
-  FDragDropFilesEx.FileList.Clear;
+  ClearDragFileList(FDragDropFilesEx.FileList);
   Result := False;
   if CanPasteFromClipBoard and
     {MP}{$IFDEF OLD_DND} FDragDropFilesEx.GetFromClipBoard {$ELSE} FDragDropFilesEx.PasteFromClipboard {$ENDIF}{/MP}

+ 0 - 0
general/filemanager toolset/FileChanges.pas → packages/filemng/FileChanges.pas


+ 0 - 0
general/filemanager toolset/FileOperator.dcr → packages/filemng/FileOperator.dcr


+ 0 - 0
general/filemanager toolset/FileOperator.pas → packages/filemng/FileOperator.pas


+ 0 - 0
general/filemanager toolset/IEComboBox.dcr → packages/filemng/IEComboBox.dcr


+ 0 - 0
general/filemanager toolset/IEComboBox.pas → packages/filemng/IEComboBox.pas


+ 0 - 0
general/filemanager toolset/IEDriveInfo.pas → packages/filemng/IEDriveInfo.pas


+ 0 - 0
general/filemanager toolset/IEListView.pas → packages/filemng/IEListView.pas


+ 0 - 0
general/filemanager toolset/IEPathComboBox.pas → packages/filemng/IEPathComboBox.pas


+ 0 - 0
general/filemanager toolset/ListExt.pas → packages/filemng/ListExt.pas


+ 0 - 0
general/filemanager toolset/MaskSearch.pas → packages/filemng/MaskSearch.pas


+ 0 - 0
general/filemanager toolset/PIDL.pas → packages/filemng/PIDL.pas


+ 0 - 0
general/filemanager toolset/ResStrings.pas → packages/filemng/ResStrings.pas


+ 0 - 0
general/filemanager toolset/ShellDialogs.pas → packages/filemng/ShellDialogs.pas


+ 0 - 0
general/filemanager toolset/UnixDirViewColProperties.pas → packages/filemng/UnixDirViewColProperties.pas


+ 0 - 0
general/moje komponenty/AssociatedStatusBar.pas → packages/my/AssociatedStatusBar.pas


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