1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00

When no session is connected, the "remote" panel shows another local folder (part of Bug 1893)

Source commit: d6545d162a6faf65afce575bd2f720904b39df95
This commit is contained in:
Martin Prikryl
2020-07-25 14:00:04 +00:00
parent c22b994876
commit 417f89a84a
8 changed files with 495 additions and 262 deletions

View File

@@ -1,3 +1,4 @@
// TODO_OTHER_LOCAL
//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#include <vcl.h>
@@ -213,6 +214,7 @@ __fastcall TCustomScpExplorerForm::TCustomScpExplorerForm(TComponent* Owner):
FIncrementalSearching = 0;
FIncrementalSearchHaveNext = false;
FQueueFileList.reset(new TQueueFileList());
FProgressSide = osCurrent;
FEditorManager = new TEditorManager();
FEditorManager->OnFileChange = ExecutedFileChanged;
@@ -283,7 +285,6 @@ __fastcall TCustomScpExplorerForm::TCustomScpExplorerForm(TComponent* Owner):
AddFixedSessionImages();
SessionsPageControl->Images = FSessionColors;
UpdateQueueLabel();
FRemoteDirViewWasFocused = true;
CreateHiddenWindow();
StartUpdates();
@@ -1011,6 +1012,16 @@ void __fastcall TCustomScpExplorerForm::UpdateSessionsPageControlHeight()
SessionsPageControl->Height = SessionsPageControl->GetTabsHeight();
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::UpdateRowSelect(TCustomDirView * DirView)
{
if (DirView->RowSelect != WinConfiguration->FullRowSelect)
{
DirView->RowSelect = WinConfiguration->FullRowSelect;
// selection is not redrawn automatically when RowSelect changes
DirView->Invalidate();
}
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::ConfigurationChanged()
{
Color = GetBtnFaceColor();
@@ -1023,12 +1034,7 @@ void __fastcall TCustomScpExplorerForm::ConfigurationChanged()
RemoteDirView->ShowInaccesibleDirectories = WinConfiguration->ShowInaccesibleDirectories;
RemoteDirView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
if (RemoteDirView->RowSelect != WinConfiguration->FullRowSelect)
{
RemoteDirView->RowSelect = WinConfiguration->FullRowSelect;
// selection is not redrawn automatically when RowSelect changes
RemoteDirView->Invalidate();
}
UpdateRowSelect(RemoteDirView);
RemoteDriveView->DDAllowMove = !WinConfiguration->DDDisableMove;
RemoteDriveView->DimmHiddenDirs = WinConfiguration->DimmHiddenFiles;
@@ -1610,8 +1616,19 @@ void __fastcall TCustomScpExplorerForm::DoOperationFinished(
}
else
{
TCustomDirView * DView = DirView(Side);
UnicodeString FileNameOnly = ExtractFileName(FileName, !IsSideLocalBrowser(Side));
TOperationSide DViewSide;
if ((FProgressSide != osCurrent) &&
IsLocalBrowserMode() && (Side == osLocal)) // Only to limit the impact
{
// assume the operation is over the focused panel
DViewSide = FProgressSide;
}
else
{
DViewSide = Side;
}
TCustomDirView * DView = DirView(DViewSide);
UnicodeString FileNameOnly = ExtractFileName(FileName, !IsSideLocalBrowser(DViewSide));
TListItem *Item = DView->FindFileItem(FileNameOnly);
// this can happen when local drive is unplugged in the middle of the operation
if (Item != NULL)
@@ -1624,14 +1641,17 @@ void __fastcall TCustomScpExplorerForm::DoOperationFinished(
if ((Operation == foCopy) || (Operation == foMove))
{
DebugAssert(!IsLocalBrowserMode()); // TODO
if (Side == osLocal)
// TODO_OTHER_LOCAL
if (!IsLocalBrowserMode())
{
Configuration->Usage->Inc(L"UploadedFiles");
}
else
{
Configuration->Usage->Inc(L"DownloadedFiles");
if (Side == osLocal)
{
Configuration->Usage->Inc(L"UploadedFiles");
}
else
{
Configuration->Usage->Inc(L"DownloadedFiles");
}
}
}
}
@@ -2247,7 +2267,7 @@ void __fastcall TCustomScpExplorerForm::LocalCustomCommandWithLocalFiles(
const TCustomCommandType & ACommand, const UnicodeString & Command, const TCustomCommandData & Data,
bool FileListCommand, UnicodeString * POutput)
{
std::unique_ptr<TStrings> SelectedFileList(DirView(osLocal)->CreateFileList(false, true, NULL));
std::unique_ptr<TStrings> SelectedFileList(DirView(osCurrent)->CreateFileList(false, true, NULL));
std::unique_ptr<TStrings> LocalFileList(new TStringList());
@@ -2344,12 +2364,15 @@ void __fastcall TCustomScpExplorerForm::LocalCustomCommand(TStrings * FileList,
POutput.reset(new UnicodeString());
}
TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide);
FProgressSide = FCurrentSide;
if (!LocalCustomCommand.IsFileCommand(Command))
{
ExecuteProcessChecked(LocalCustomCommand.Complete(Command, true), HelpKeyword, POutput.get());
}
// remote files?
else if ((FCurrentSide == osRemote) || LocalFileCommand)
else if (!IsSideLocalBrowser(FCurrentSide) || LocalFileCommand)
{
LocalCustomCommandPure(FileList, ACommand, Command, ALocalFileList, Data, LocalFileCommand, FileListCommand, POutput.get());
}
@@ -3984,6 +4007,8 @@ void __fastcall TCustomScpExplorerForm::DeleteFiles(TOperationSide Side,
}
else
{
TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide);
FProgressSide = FCurrentSide;
try
{
TTerminalManager::Instance()->LocalTerminal->DeleteLocalFiles(FileList, FLAGMASK(Alternative, dfAlternative));
@@ -4473,6 +4498,8 @@ void __fastcall TCustomScpExplorerForm::KeyDown(Word & Key, Classes::TShiftState
TShortCut KeyShortCut = ShortCut(Key, Shift);
for (int Index = 0; Index < NonVisualDataModule->ExplorerActions->ActionCount; Index++)
{
// Note that handling shortcuts on panel (current control) popup menu has precendence over this.
// But so far it's not a problem, as it does what we want.
TAction * Action = (TAction *)NonVisualDataModule->ExplorerActions->Actions[Index];
if (((Action->ShortCut == KeyShortCut) ||
(Action->SecondaryShortCuts->IndexOfShortCut(KeyShortCut) >= 0)) &&
@@ -5200,12 +5227,17 @@ bool __fastcall TCustomScpExplorerForm::IsComponentPossible(Byte Component)
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::MakeFocusedItemVisible(TCustomDirView * DirView)
{
if (DirView->ItemFocused != NULL)
{
DirView->ItemFocused->MakeVisible(false);
}
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::FixControlsPlacement()
{
if (DirView(osOther)->ItemFocused != NULL)
{
DirView(osOther)->ItemFocused->MakeVisible(false);
}
MakeFocusedItemVisible(RemoteDirView);
QueueSplitter->Visible = QueuePanel->Visible;
QueueFileListSplitter->Visible = QueueFileList->Visible;
RemotePanelSplitter->Visible = RemoteDrivePanel->Visible;
@@ -5236,7 +5268,7 @@ void __fastcall TCustomScpExplorerForm::DirViewColumnRightClick(
DebugAssert(NonVisualDataModule && Column && Sender);
NonVisualDataModule->ListColumn = Column;
TPopupMenu * DirViewColumnMenu;
if (dynamic_cast<TUnixDirView *>(Sender) != NULL)
if (Sender == DirView(osOther))
{
DirViewColumnMenu = NonVisualDataModule->RemoteDirViewColumnPopup;
NonVisualDataModule->RemoteSortByExtColumnPopupItem->Visible =
@@ -6352,7 +6384,8 @@ void __fastcall TCustomScpExplorerForm::DoOpenDirectoryDialog(
do
{
Repeat = false;
if (::DoOpenDirectoryDialog(Mode, Side, Name, VisitedDirectories, Terminal,
TOperationSide BookmarkSide = IsSideLocalBrowser(Side) ? osLocal : osRemote;
if (::DoOpenDirectoryDialog(Mode, BookmarkSide, Name, VisitedDirectories, Terminal,
// do not allow switching to location profiles,
// if we are not connected
HasDirView[osLocal] && (Terminal != NULL)))
@@ -7062,6 +7095,7 @@ void __fastcall TCustomScpExplorerForm::UpdatePixelsPerInchMainWindowCounter()
void __fastcall TCustomScpExplorerForm::StartingDisconnected()
{
DoTerminalListChanged();
UpdateControls();
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::PopupTrayBalloon(TTerminal * Terminal,
@@ -8552,9 +8586,9 @@ void __fastcall TCustomScpExplorerForm::UpdateFileStatusExtendedPanels(
void __fastcall TCustomScpExplorerForm::RemoteStatusBarClick(
TObject * /*Sender*/)
{
if (DirView(osRemote)->Enabled)
if (DirView(osOther)->Enabled)
{
DirView(osRemote)->SetFocus();
DirView(osOther)->SetFocus();
}
}
//---------------------------------------------------------------------------
@@ -8650,33 +8684,8 @@ void __fastcall TCustomScpExplorerForm::UpdateControls()
bool HasTerminal = HasActiveTerminal();
if (HasTerminal)
{
// TODO needed yet with second local browser?
if (!RemoteDirView->Enabled)
{
RemoteDirView->Enabled = true;
if (FRemoteDirViewWasFocused)
{
ActiveControl = RemoteDirView;
}
}
RemoteDirView->Color = PanelColor();
}
else
{
if (RemoteDirView->Enabled)
{
// This is first called when the form is being constructed
// (not anymore due to Showing test above)
// but the false is overriden in the constructor later.
// An even later in TScpCommanderForm::DoShow()
FRemoteDirViewWasFocused = (ActiveControl == RemoteDirView);
RemoteDirView->Enabled = false;
}
RemoteDirView->Color = DisabledPanelColor();
}
RemoteDirView->Enabled = HasTerminal;
RemoteDirView->Color = HasTerminal ? PanelColor() : DisabledPanelColor();
RemoteDirView->Font->Color = GetWindowTextColor(RemoteDirView->Color);
RemoteDriveView->Enabled = RemoteDirView->Enabled;
@@ -10403,9 +10412,10 @@ void __fastcall TCustomScpExplorerForm::CreateOpenDirMenu(TTBCustomItem * Menu,
bool __fastcall TCustomScpExplorerForm::TryOpenDirectory(TOperationSide Side, const UnicodeString & Path)
{
bool Result = true;
bool Remote = !IsSideLocalBrowser(Side);
try
{
if (Side == osRemote)
if (Remote)
{
Terminal->ExceptionOnFail = true;
}
@@ -10416,7 +10426,7 @@ bool __fastcall TCustomScpExplorerForm::TryOpenDirectory(TOperationSide Side, co
}
__finally
{
if (Side == osRemote)
if (Remote)
{
Terminal->ExceptionOnFail = false;
}
@@ -10424,7 +10434,7 @@ bool __fastcall TCustomScpExplorerForm::TryOpenDirectory(TOperationSide Side, co
}
catch (Exception & E)
{
if ((Side != osRemote) || Terminal->Active)
if (!Remote || Terminal->Active)
{
ShowExtendedExceptionEx(Terminal, &E);
Result = false;

View File

@@ -372,13 +372,13 @@ protected:
TDragDropFilesEx * FSessionsDragDropFilesEx;
TDragDropFilesEx * FQueueDragDropFilesEx;
TPoint FLastContextPopupScreenPoint;
bool FRemoteDirViewWasFocused;
int FDoNotIdleCurrentTerminal;
UnicodeString FFakeFileDropTarget;
TFileColorData::TList FFileColors;
UnicodeString FIncrementalSearch;
int FIncrementalSearching;
bool FIncrementalSearchHaveNext;
TOperationSide FProgressSide;
virtual bool __fastcall CopyParamDialog(TTransferDirection Direction,
TTransferType Type, bool Temp, TStrings * FileList,
@@ -399,7 +399,6 @@ protected:
virtual TCustomDriveView * __fastcall DriveView(TOperationSide Side);
virtual bool IsLocalBrowserMode();
virtual TCustomDirView * GetCurrentLocalBrowser();
virtual bool IsSideLocalBrowser(TOperationSide Side);
DYNAMIC void __fastcall KeyDown(Word & Key, Classes::TShiftState Shift);
virtual void __fastcall RestoreFormParams();
virtual void __fastcall RestoreParams();
@@ -709,6 +708,8 @@ protected:
int __fastcall GetMinQueueViewHeight();
void __fastcall DetachTerminal(TObject * ATerminal);
bool __fastcall IsActiveTerminal(TTerminal * Terminal);
void __fastcall UpdateRowSelect(TCustomDirView * DirView);
void __fastcall MakeFocusedItemVisible(TCustomDirView * DirView);
public:
virtual __fastcall ~TCustomScpExplorerForm();
@@ -842,6 +843,7 @@ public:
void __fastcall ReplaceTerminal(TManagedTerminal * value);
virtual void __fastcall BrowseFile();
void __fastcall CloseApp();
virtual bool IsSideLocalBrowser(TOperationSide Side);
__property bool ComponentVisible[Byte Component] = { read = GetComponentVisible, write = SetComponentVisible };
__property bool EnableFocusedOperation[TOperationSide Side] = { read = GetEnableFocusedOperation, index = 0 };

View File

@@ -49,39 +49,34 @@ TNonVisualDataModule *NonVisualDataModule;
#define EXECOMP(COMP) EXECOMP2(COMP, )
#define COLPROPS(SIDE) \
((TCustomDirViewColProperties*)ScpExplorer->DirView(os ## SIDE)->ColProperties)
#define UPDSORT(SIDE, PREFIX, COL) if (Action == SIDE ## SortBy ## COL ## Action2) { \
SIDE ## SortBy ## COL ## Action2->Enabled = true; Handled = true; \
SIDE ## SortBy ## COL ## Action2->Checked = (COLPROPS(SIDE)->SortColumn == PREFIX ## COL); } else
#define EXESORT(SIDE, PREFIX, COL) EXE(SIDE ## SortBy ## COL ## Action2, \
if (COLPROPS(SIDE)->SortColumn == PREFIX ## COL) \
#define UPDSORT(SIDE, NAME, LCOL, RCOL, NUM) \
UPDEX(SIDE ## SortBy ## NAME ## Action ## NUM, (AuxInt = (ScpExplorer->IsSideLocalBrowser(os ## SIDE) ? LCOL : RCOL)) >= 0, \
Action->Checked = (COLPROPS(SIDE)->SortColumn == AuxInt), \
Action->Checked = false \
)
#define EXESORT(SIDE, NAME, LCOL, RCOL, NUM) \
EXE(SIDE ## SortBy ## NAME ## Action ## NUM, \
int Col = (ScpExplorer->IsSideLocalBrowser(os ## SIDE) ? LCOL : RCOL); \
if (COLPROPS(SIDE)->SortColumn == Col) \
COLPROPS(SIDE)->SortAscending = !COLPROPS(SIDE)->SortAscending; \
else COLPROPS(SIDE)->SortColumn = PREFIX ## COL )
else \
COLPROPS(SIDE)->SortColumn = Col; \
)
#define UPDSORTA(SIDE, NUM) if (Action == SIDE ## SortAscendingAction ## NUM) { \
SIDE ## SortAscendingAction ## NUM->Enabled = true; Handled = true; \
SIDE ## SortAscendingAction ## NUM->Checked = COLPROPS(SIDE)->SortAscending; } else
#define EXESORTA(SIDE, NUM) EXE(SIDE ## SortAscendingAction ## NUM, \
COLPROPS(SIDE)->SortAscending = !COLPROPS(SIDE)->SortAscending; )
#define UPDSORTC(LPREFIX, LCOL, RPREFIX, RCOL, NUM) if (Action == CurrentSortBy ## RCOL ## Action ## NUM) { \
Action->Enabled = ScpExplorer->AllowedAction(Action, aaShortCut); \
if (Action->Enabled) { \
if (ScpExplorer->DirView(osCurrent) == ScpExplorer->DirView(osRemote)) \
Action->Checked = (COLPROPS(Current)->SortColumn == RPREFIX ## RCOL); \
else Action->Checked = (COLPROPS(Current)->SortColumn == LPREFIX ## LCOL); \
} else Action->Checked = false; Handled = true; } else
#define EXESORTC(COL, LCOL, RCOL, NUM) \
EXE(CurrentSortBy ## COL ## Action ## NUM, \
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, NAME, LCOL, RCOL) \
UPDFUNC(ShowHide ## SIDE ## NAME ## ColumnAction2, \
int Col = (ScpExplorer->IsSideLocalBrowser(os ## SIDE) ? LCOL : RCOL); \
Action->Enabled = (Col >= 0); \
Action->Checked = Action->Enabled && COLPROPS(SIDE)->Visible[Col]; \
)
#define UPDSHCOL(SIDE, PREFIX, COL) \
EXE(ShowHide ## SIDE ## COL ## ColumnAction2, \
ShowHide ## SIDE ## COL ## ColumnAction2->Checked = COLPROPS(SIDE)->Visible[PREFIX ## COL])
#define EXESHCOL(SIDE, PREFIX, COL) \
EXE(ShowHide ## SIDE ## COL ## ColumnAction2, \
COLPROPS(SIDE)->Visible[PREFIX ## COL] = !COLPROPS(SIDE)->Visible[PREFIX ## COL])
#define EXESHCOL(SIDE, NAME, LCOL, RCOL) \
EXE(ShowHide ## SIDE ## NAME ## ColumnAction2, \
int Col = (ScpExplorer->IsSideLocalBrowser(os ## SIDE) ? LCOL : RCOL); \
COLPROPS(SIDE)->Visible[Col] = !COLPROPS(SIDE)->Visible[Col])
#define BAND_COMPONENTS \
EMIT_BAND_COMPONENT(ExplorerMenuBand) \
@@ -137,7 +132,8 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
Handled = true;
return;
}
void * Param;
void * AuxVoidPtr;
int AuxInt;
#define HasTerminal ScpExplorer->HasActiveTerminal()
// CURRENT DIRVIEW
#define EnabledSelectedOperation (ScpExplorer->EnableSelectedOperation[osCurrent])
@@ -147,9 +143,9 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
#define EnabledLocalSelectedOperation (ScpExplorer->HasDirView[osLocal] && ScpExplorer->EnableSelectedOperation[osLocal])
#define EnabledLocalFocusedOperation (ScpExplorer->HasDirView[osLocal] && ScpExplorer->EnableFocusedOperation[osLocal])
#define EnabledLocalSelectedFileOperation (ScpExplorer->HasDirView[osLocal] && ScpExplorer->EnableSelectedFileOperation[osLocal])
#define EnabledRemoteSelectedOperation (ScpExplorer->EnableSelectedOperation[osRemote])
#define EnabledRemoteFocusedOperation (ScpExplorer->EnableFocusedOperation[osRemote])
#define EnabledRemoteSelectedFileOperation (ScpExplorer->EnableSelectedFileOperation[osRemote])
#define EnabledRemoteSelectedOperation (ScpExplorer->EnableSelectedOperation[osRemote] && HasTerminal)
#define EnabledRemoteFocusedOperation (ScpExplorer->EnableFocusedOperation[osRemote] && HasTerminal)
#define EnabledRemoteSelectedFileOperation (ScpExplorer->EnableSelectedFileOperation[osRemote] && HasTerminal)
// focused operation
UPD(CurrentDeleteFocusedAction, EnabledFocusedOperation)
UPD(CurrentPropertiesFocusedAction, EnabledFocusedOperation)
@@ -163,8 +159,7 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
UPD(CurrentCopyToClipboardFocusedAction, EnabledFocusedOperation)
// file operation
UPD(CurrentRenameAction, EnabledFocusedOperation &&
((ScpExplorer->HasDirView[osLocal] && DirView(osLocal) == DirView(osCurrent)) ||
ScpExplorer->Terminal->IsCapable[fcRename]))
(ScpExplorer->IsSideLocalBrowser(osCurrent) || ScpExplorer->Terminal->IsCapable[fcRename]))
UPD(CurrentEditAction, EnabledSelectedFileOperation &&
!WinConfiguration->DisableOpenEdit)
UPD(CurrentEditInternalAction, EnabledSelectedFileOperation &&
@@ -182,21 +177,21 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
UPD(CurrentPropertiesAction, EnabledSelectedOperation)
UPD(CurrentCopyToClipboardAction, EnabledSelectedOperation)
UPD(RemoteMoveToAction, EnabledSelectedOperation &&
(DirView(osRemote) == DirView(osCurrent)) &&
!ScpExplorer->IsSideLocalBrowser(osCurrent) &&
ScpExplorer->Terminal->IsCapable[fcRemoteMove])
UPD(RemoteCopyToAction, EnabledSelectedOperation &&
(DirView(osRemote) == DirView(osCurrent)))
!ScpExplorer->IsSideLocalBrowser(osCurrent))
UPD(FileListToCommandLineAction, EnabledSelectedOperation)
UPD(FileListToClipboardAction, EnabledSelectedOperation)
UPD(FullFileListToClipboardAction, EnabledSelectedOperation)
UPD(FileGenerateUrlAction2, EnabledSelectedOperation && (DirView(osRemote) == DirView(osCurrent)))
UPD(FileGenerateUrlAction2, EnabledSelectedOperation && !ScpExplorer->IsSideLocalBrowser(osCurrent))
UPD(FileListFromClipboardAction, IsFormatInClipboard(CF_TEXT))
UPD(CurrentAddEditLinkAction, ScpExplorer->CanAddEditLink(osCurrent))
UPD(LockAction,
EnabledSelectedOperation && (DirView(osRemote) == DirView(osCurrent)) &&
EnabledSelectedOperation && !ScpExplorer->IsSideLocalBrowser(osCurrent) &&
ScpExplorer->Terminal->IsCapable[fcLocking])
UPD(UnlockAction,
EnabledSelectedOperation && (DirView(osRemote) == DirView(osCurrent)) &&
EnabledSelectedOperation && !ScpExplorer->IsSideLocalBrowser(osCurrent) &&
ScpExplorer->Terminal->IsCapable[fcLocking])
// local selected operation
UPD(LocalCopyAction, HasTerminal && EnabledLocalSelectedOperation)
@@ -234,14 +229,14 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
UPD(RemoteCopyFocusedNonQueueAction, EnabledRemoteFocusedOperation)
UPD(RemoteMoveFocusedAction, EnabledRemoteFocusedOperation)
UPD(RemoteMoveToFocusedAction, EnabledFocusedOperation &&
(DirView(osRemote) == DirView(osCurrent)) &&
!ScpExplorer->IsSideLocalBrowser(osCurrent) &&
ScpExplorer->Terminal->IsCapable[fcRemoteMove])
UPD(RemoteCopyToFocusedAction, EnabledFocusedOperation &&
DirView(osRemote) == DirView(osCurrent))
!ScpExplorer->IsSideLocalBrowser(osCurrent))
// directory
UPD(CurrentCreateDirAction, DirViewEnabled(osCurrent))
UPD(NewDirAction, DirViewEnabled(osCurrent))
UPD(RemoteFindFilesAction2, DirViewEnabled(osRemote))
UPD(RemoteFindFilesAction2, HasTerminal)
// selection
UPD(SelectOneAction, DirView(osCurrent)->FilesCount)
UPD(SelectAction, DirView(osCurrent)->FilesCount)
@@ -350,30 +345,32 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
// SORT
UPDSORTA(Local, 2)
UPDSORT(Local, dv, Name)
UPDSORT(Local, dv, Ext)
UPDSORT(Local, dv, Size)
UPDSORT(Local, dv, Type)
UPDSORT(Local, dv, Changed)
UPDSORT(Local, dv, Attr)
#define UPDSORTL(NAME, COL) UPDSORT(Local, NAME, COL, -1, 2)
UPDSORTL(Name, dvName)
UPDSORTL(Ext, dvExt)
UPDSORTL(Size, dvSize)
UPDSORTL(Type, dvType)
UPDSORTL(Changed, dvChanged)
UPDSORTL(Attr, dvAttr)
#undef UPDSORTL
UPDSORTA(Remote, 2)
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)
UPDSORT(Remote, uv, Type)
UPDSORT(Remote, Name, dvName, uvName, 2)
UPDSORT(Remote, Ext, dvExt, uvExt, 2)
UPDSORT(Remote, Size, dvSize, uvSize, 2)
UPDSORT(Remote, Changed, dvChanged, uvChanged, 2)
UPDSORT(Remote, Rights, dvAttr, uvRights, 2)
UPDSORT(Remote, Owner, -1, uvOwner, 2)
UPDSORT(Remote, Group, -1, uvGroup, 2)
UPDSORT(Remote, Type, dvType, uvType, 2)
UPDSORTA(Current, )
UPDSORTC(dv, Name, uv, Name, )
UPDSORTC(dv, Ext, uv, Ext, )
UPDSORTC(dv, Size, uv, Size, )
UPDSORTC(dv, Type, uv, Type, 2)
UPDSORTC(dv, Changed, uv, Changed, )
UPDSORTC(dv, Attr, uv, Rights, )
UPDSORTC(dv, Name, uv, Owner, )
UPDSORTC(dv, Name, uv, Group, )
UPDSORT(Current, Name, dvName, uvName, )
UPDSORT(Current, Ext, dvExt, uvExt, )
UPDSORT(Current, Size, dvSize, uvSize, )
UPDSORT(Current, Type, dvType, uvType, 2)
UPDSORT(Current, Changed, dvChanged, uvChanged, )
UPDSORT(Current, Rights, dvAttr, uvRights, )
UPDSORT(Current, Owner, -1, uvOwner, )
UPDSORT(Current, Group, -1, uvGroup, )
#define COLVIEWPROPS ((TCustomDirViewColProperties*)(((TCustomDirView*)(((TListColumns*)(ListColumn->Collection))->Owner()))->ColProperties))
UPDEX(SortColumnAscendingAction, (ListColumn != NULL), SortColumnAscendingAction->Checked =
(COLVIEWPROPS->SortColumn == ListColumn->Index) && COLVIEWPROPS->SortAscending, )
@@ -382,21 +379,23 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
#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)
UPDSHCOL(Remote, uv, LinkTarget)
UPDSHCOL(Remote, uv, Type)
#define UPDSHCOLL(NAME) UPDSHCOL(Local, NAME, dv ## NAME, -1)
UPDSHCOLL(Name)
UPDSHCOLL(Ext)
UPDSHCOLL(Size)
UPDSHCOLL(Type)
UPDSHCOLL(Changed)
UPDSHCOLL(Attr)
#undef UPDSHCOLL
UPDSHCOL(Remote, Name, dvName, uvName)
UPDSHCOL(Remote, Ext, dvExt, uvExt)
UPDSHCOL(Remote, Size, dvSize, uvSize)
UPDSHCOL(Remote, Changed, dvChanged, uvChanged)
UPDSHCOL(Remote, Rights, dvAttr, uvRights)
UPDSHCOL(Remote, Owner, -1, uvOwner)
UPDSHCOL(Remote, Group, -1, uvGroup)
UPDSHCOL(Remote, LinkTarget, -1, uvLinkTarget)
UPDSHCOL(Remote, Type, dvType, uvType)
UPD(HideColumnAction, (ListColumn != NULL))
UPD(BestFitColumnAction, (ListColumn != NULL))
@@ -467,8 +466,8 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
UPDQUEUE(DeleteAll)
UPDQUEUE(DeleteAllDone)
#undef UPDQUEUE
UPDEX(QueueItemSpeedAction, ScpExplorer->AllowQueueOperation(qoItemSpeed, &Param),
QueueItemSpeedAction->Text = SetSpeedLimit(reinterpret_cast<unsigned long>(Param)),
UPDEX(QueueItemSpeedAction, ScpExplorer->AllowQueueOperation(qoItemSpeed, &AuxVoidPtr),
QueueItemSpeedAction->Text = SetSpeedLimit(reinterpret_cast<unsigned long>(AuxVoidPtr)),
QueueItemSpeedAction->Text = L"")
UPDACT(QueueToggleShowAction,
Action->Checked = ScpExplorer->ComponentVisible[fcQueueView])
@@ -675,52 +674,55 @@ void __fastcall TNonVisualDataModule::ExplorerActionsExecute(
#define COLVIEWPROPS ((TCustomDirViewColProperties*)(((TCustomDirView*)(((TListColumns*)(ListColumn->Collection))->Owner()))->ColProperties))
// SORT
EXESORTA(Local, 2)
EXESORT(Local, dv, Name)
EXESORT(Local, dv, Ext)
EXESORT(Local, dv, Size)
EXESORT(Local, dv, Type)
EXESORT(Local, dv, Changed)
EXESORT(Local, dv, Attr)
#define EXESORTL(NAME, COL) EXESORT(Local, NAME, COL, COL, 2)
EXESORTL(Name, dvName)
EXESORTL(Ext, dvExt)
EXESORTL(Size, dvSize)
EXESORTL(Type, dvType)
EXESORTL(Changed, dvChanged)
EXESORTL(Attr, dvAttr)
#undef EXESORTL
EXESORTA(Remote, 2)
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)
EXESORT(Remote, uv, Type)
EXESORT(Remote, Name, dvName, uvName, 2)
EXESORT(Remote, Ext, dvExt, uvExt, 2)
EXESORT(Remote, Size, dvSize, uvSize, 2)
EXESORT(Remote, Changed, dvChanged, uvChanged, 2)
EXESORT(Remote, Rights, dvAttr, uvRights, 2)
EXESORT(Remote, Owner, -1, uvOwner, 2)
EXESORT(Remote, Group, -1, uvGroup, 2)
EXESORT(Remote, Type, dvType, uvType, 2)
EXESORTA(Current, )
EXESORTC(Name, dvName, uvName, )
EXESORTC(Ext, dvExt, uvExt, )
EXESORTC(Size, dvSize, uvSize, )
EXESORTC(Type, dvType, uvType, 2)
EXESORTC(Changed, dvChanged, uvChanged, )
EXESORTC(Rights, dvAttr, uvRights, )
EXESORTC(Owner, dvName, uvOwner, )
EXESORTC(Group, dvName, uvGroup, )
EXESORT(Current, Name, dvName, uvName, )
EXESORT(Current, Ext, dvExt, uvExt, )
EXESORT(Current, Size, dvSize, uvSize, )
EXESORT(Current, Type, dvType, uvType, 2)
EXESORT(Current, Changed, dvChanged, uvChanged, )
EXESORT(Current, Rights, dvAttr, uvRights, )
EXESORT(Current, Owner, -1, uvOwner, )
EXESORT(Current, Group, -1, uvGroup, )
EXE(SortColumnAscendingAction, DebugAssert(ListColumn);
COLVIEWPROPS->SortColumn = ListColumn->Index; COLVIEWPROPS->SortAscending = true; ListColumn = NULL )
EXE(SortColumnDescendingAction, DebugAssert(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)
EXESHCOL(Remote, uv, LinkTarget)
EXESHCOL(Remote, uv, Type)
#define EXESHCOLL(NAME) EXESHCOL(Local, NAME, dv ## NAME, -1)
EXESHCOLL(Name)
EXESHCOLL(Ext)
EXESHCOLL(Size)
EXESHCOLL(Type)
EXESHCOLL(Changed)
EXESHCOLL(Attr)
#undef EXESHCOLL
EXESHCOL(Remote, Name, dvName, uvName)
EXESHCOL(Remote, Ext, dvExt, uvExt)
EXESHCOL(Remote, Size, dvSize, uvSize)
EXESHCOL(Remote, Changed, dvChanged, uvChanged)
EXESHCOL(Remote, Rights, dvAttr, uvRights)
EXESHCOL(Remote, Owner, -1, uvOwner)
EXESHCOL(Remote, Group, -1, uvGroup)
EXESHCOL(Remote, LinkTarget, -1, uvLinkTarget)
EXESHCOL(Remote, Type, dvType, uvType)
EXE(HideColumnAction, DebugAssert(ListColumn);
COLVIEWPROPS->Visible[ListColumn->Index] = false; ListColumn = NULL )
EXE(BestFitColumnAction, DebugAssert(ListColumn); ListColumn = NULL ) // TODO

View File

@@ -969,9 +969,11 @@ object NonVisualDataModule: TNonVisualDataModule
object RemoteSortByRightsAction2: TAction
Tag = 14
Category = 'Sort'
Caption = 'By &Permissions'
Caption = 'By &Permissions/Attributes'
HelpKeyword = 'ui_file_panel#sorting_files'
Hint = 'Sort by permissions|Sort panel by permissions'
Hint =
'Sort by attributes/permissions|Sort current panel by attributes/' +
'permissions'
ImageIndex = 36
ShortCut = 16502
end
@@ -1058,7 +1060,7 @@ object NonVisualDataModule: TNonVisualDataModule
object CurrentSortByRightsAction: TAction
Tag = 15
Category = 'Sort'
Caption = 'By &Attributes'
Caption = 'By &Permissions/Attributes'
HelpKeyword = 'ui_file_panel#sorting_files'
Hint =
'Sort by attributes/permissions|Sort current panel by attributes/' +

View File

@@ -1,3 +1,4 @@
// TODO_OTHER_LOCAL
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
@@ -97,6 +98,7 @@ __fastcall TScpCommanderForm::TScpCommanderForm(TComponent* Owner)
CopyPopup(LocalPathLabel, LocalTopDock);
CopyPopup(LocalStatusBar, LocalTopDock);
CopyPopup(LocalDriveView, LocalTopDock);
CopyPopup(OtherLocalDriveView, LocalTopDock);
CopyPopup(LocalBottomDock, LocalTopDock);
RemoteTopDock->PopupMenu = NonVisualDataModule->RemotePanelPopup;
@@ -126,6 +128,11 @@ __fastcall TScpCommanderForm::TScpCommanderForm(TComponent* Owner)
UseDesktopFont(RemotePathLabel);
UseDesktopFont(LocalStatusBar);
UseDesktopFont(StatusBar);
UseDesktopFont(OtherLocalDirView);
UseDesktopFont(OtherLocalDriveView);
OtherLocalDirView->Align = RemoteDirView->Align;
OtherLocalDriveView->Align = RemoteDriveView->Align;
NonVisualDataModule->QueueSpeedComboBoxItem(QueueSpeedComboBoxItem);
// particularly to reorder panels on right-to-left bidi mode
@@ -183,6 +190,7 @@ void __fastcall TScpCommanderForm::RestoreParams()
SessionsPageControl->Visible = WinConfiguration->ScpCommander.SessionsTabs;
StatusBar->Visible = WinConfiguration->ScpCommander.StatusBar;
// TODO_OTHER_LOCAL
RestorePanelParams(LocalDirView, LocalDriveView, LocalStatusBar, WinConfiguration->ScpCommander.LocalPanel);
RestorePanelParams(RemoteDirView, RemoteDrivePanel, RemoteStatusBar, WinConfiguration->ScpCommander.RemotePanel);
FPanelsRestored = true;
@@ -190,6 +198,7 @@ void __fastcall TScpCommanderForm::RestoreParams()
// just to make sure
LocalDirView->DirColProperties->ExtVisible = false;
RemoteDirView->UnixColProperties->ExtVisible = false;
OtherLocalDirView->DirColProperties->ExtVisible = false;
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::StorePanelParams(
@@ -229,9 +238,11 @@ void __fastcall TScpCommanderForm::StoreParams()
CommanderConfiguration.CurrentPanel = FCurrentSide;
// TODO_OTHER_LOCAL
StorePanelParams(LocalDirView, LocalDriveView, LocalStatusBar, CommanderConfiguration.LocalPanel);
StorePanelParams(RemoteDirView, RemoteDrivePanel, RemoteStatusBar, CommanderConfiguration.RemotePanel);
// TODO_OTHER_LOCAL
CommanderConfiguration.LocalPanel.LastPath = LocalDirView->Path;
CommanderConfiguration.WindowParams = StoreForm(this);
@@ -366,25 +377,19 @@ void __fastcall TScpCommanderForm::DoShow()
// is finally connected
UpdateControls();
// TODO_OTHER_LOCAL (persistent "other" local path)
DoLocalDefaultDirectory(OtherLocalDirView, UnicodeString());
// If we do not call SetFocus on any control before DoShow,
// no control will get focused on Login dialog
// (HACK seems like a bug in VCL)
if (WinConfiguration->ScpCommander.CurrentPanel == osLocal)
if ((WinConfiguration->ScpCommander.CurrentPanel == osLocal) || !DirView(osOther)->Enabled)
{
LocalDirView->SetFocus();
FRemoteDirViewWasFocused = false;
}
else
{
if (DirView(osOther)->Enabled)
{
DirView(osOther)->SetFocus();
}
else
{
LocalDirView->SetFocus();
}
FRemoteDirViewWasFocused = true;
DirView(osOther)->SetFocus();
}
TCustomScpExplorerForm::DoShow();
@@ -413,12 +418,21 @@ TCustomDirView * __fastcall TScpCommanderForm::DirView(TOperationSide Side)
{
return LocalDirView;
}
else if (DebugAlwaysTrue(Side == osRemote) && IsLocalBrowserMode())
{
return OtherLocalDirView;
}
else
{
return TCustomScpExplorerForm::DirView(Side);
}
}
//---------------------------------------------------------------------------
bool TScpCommanderForm::IsLocalBrowserMode()
{
return OtherLocalDirView->Visible;
}
//---------------------------------------------------------------------------
TCustomDriveView * __fastcall TScpCommanderForm::DriveView(TOperationSide Side)
{
Side = GetSide(Side);
@@ -426,6 +440,10 @@ TCustomDriveView * __fastcall TScpCommanderForm::DriveView(TOperationSide Side)
{
return LocalDriveView;
}
else if (DebugAlwaysTrue(Side == osRemote) && IsLocalBrowserMode())
{
return OtherLocalDriveView;
}
else
{
return TCustomScpExplorerForm::DriveView(Side);
@@ -434,7 +452,7 @@ TCustomDriveView * __fastcall TScpCommanderForm::DriveView(TOperationSide Side)
//---------------------------------------------------------------------------
bool TScpCommanderForm::IsSideLocalBrowser(TOperationSide Side)
{
return (GetSide(Side) == osLocal);
return (GetSide(Side) == osLocal) || IsLocalBrowserMode();
}
//---------------------------------------------------------------------------
TCustomDirView * TScpCommanderForm::GetCurrentLocalBrowser()
@@ -444,6 +462,10 @@ TCustomDirView * TScpCommanderForm::GetCurrentLocalBrowser()
{
return LocalDirView;
}
else if (DebugAlwaysTrue(Side == osRemote) && IsLocalBrowserMode())
{
return OtherLocalDirView;
}
else
{
DebugFail();
@@ -454,8 +476,7 @@ TCustomDirView * TScpCommanderForm::GetCurrentLocalBrowser()
//---------------------------------------------------------------------------
bool __fastcall TScpCommanderForm::DirViewEnabled(TOperationSide Side)
{
Side = GetSide(Side);
if (Side == osLocal)
if (IsSideLocalBrowser(Side))
{
return true;
}
@@ -481,6 +502,11 @@ void __fastcall TScpCommanderForm::ReloadLocalDirectory(const UnicodeString Dire
LocalDirView->ReloadDirectory();
LocalDriveView->ValidateDirectory(LocalDriveView->Selected);
}
if (Directory.IsEmpty() || SamePaths(Directory, OtherLocalDirView->Path))
{
OtherLocalDirView->ReloadDirectory();
OtherLocalDriveView->ValidateDirectory(OtherLocalDriveView->Selected);
}
TCustomScpExplorerForm::ReloadLocalDirectory();
}
//---------------------------------------------------------------------------
@@ -490,6 +516,8 @@ void __fastcall TScpCommanderForm::BatchStart(void *& Storage)
*static_cast<bool*>(Storage) = LocalDirView->WatchForChanges;
LocalDirView->WatchForChanges = false;
LocalDriveView->WatchDirectory = false;
OtherLocalDirView->WatchForChanges = false;
OtherLocalDriveView->WatchDirectory = false;
TCustomScpExplorerForm::BatchStart(Storage);
}
@@ -502,6 +530,8 @@ void __fastcall TScpCommanderForm::BatchEnd(void * Storage)
LocalDirView->WatchForChanges = *static_cast<bool*>(Storage);
LocalDriveView->WatchDirectory = LocalDirView->WatchForChanges;
OtherLocalDirView->WatchForChanges = LocalDirView->WatchForChanges;
OtherLocalDriveView->WatchDirectory = LocalDirView->WatchForChanges;
delete Storage;
}
@@ -515,7 +545,6 @@ void __fastcall TScpCommanderForm::StartingDisconnected()
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::TerminalChanged(bool Replaced)
{
DebugAssert(!IsLocalBrowserMode());
NonVisualDataModule->SynchronizeBrowsingAction2->Checked = false;
TCustomScpExplorerForm::TerminalChanged(Replaced);
@@ -580,15 +609,14 @@ void __fastcall TScpCommanderForm::TerminalChanged(bool Replaced)
}
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDefaultDirectory()
void __fastcall TScpCommanderForm::DoLocalDefaultDirectory(TDirView * DirView, const UnicodeString & LastPath)
{
bool DocumentsDir = true;
UnicodeString LastPath = WinConfiguration->ScpCommander.LocalPanel.LastPath;
if (!LastPath.IsEmpty())
{
try
{
LocalDirView->Path = LastPath;
DirView->Path = LastPath;
DocumentsDir = false;
}
catch (...)
@@ -600,25 +628,30 @@ void __fastcall TScpCommanderForm::LocalDefaultDirectory()
{
try
{
LocalDirView->HomeDirectory = L"";
UnicodeString HomeDrive = DriveInfo->GetDriveKey(LocalDirView->HomeDirectory);
DirView->HomeDirectory = L"";
UnicodeString HomeDrive = DriveInfo->GetDriveKey(DirView->HomeDirectory);
if (DriveInfo->Get(HomeDrive)->DriveType == DRIVE_REMOTE)
{
LocalDirView->Path = DriveInfo->AnyValidPath();
DirView->Path = DriveInfo->AnyValidPath();
}
else
{
LocalDirView->ExecuteHomeDirectory();
DirView->ExecuteHomeDirectory();
}
}
catch(Exception & E)
{
ShowExtendedException(NULL, &E);
LocalDirView->Path = ExtractFilePath(Application->ExeName);
DirView->Path = ExtractFilePath(Application->ExeName);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDefaultDirectory()
{
DoLocalDefaultDirectory(LocalDirView, WinConfiguration->ScpCommander.LocalPanel.LastPath);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::ConfigurationChanged()
{
TCustomScpExplorerForm::ConfigurationChanged();
@@ -631,33 +664,47 @@ void __fastcall TScpCommanderForm::ConfigurationChanged()
{
LocalDirView->HomeDirectory = L"";
}
LocalDirView->DimmHiddenFiles = WinConfiguration->DimmHiddenFiles;
LocalDriveView->DimmHiddenDirs = WinConfiguration->DimmHiddenFiles;
OtherLocalDirView->DimmHiddenFiles = WinConfiguration->DimmHiddenFiles;
OtherLocalDriveView->DimmHiddenDirs = WinConfiguration->DimmHiddenFiles;
LocalDirView->ShowHiddenFiles = WinConfiguration->ShowHiddenFiles;
LocalDirView->FormatSizeBytes = WinConfiguration->FormatSizeBytes;
LocalDriveView->ShowHiddenDirs = WinConfiguration->ShowHiddenFiles;
OtherLocalDirView->ShowHiddenFiles = WinConfiguration->ShowHiddenFiles;
OtherLocalDriveView->ShowHiddenDirs = WinConfiguration->ShowHiddenFiles;
LocalDirView->FormatSizeBytes = WinConfiguration->FormatSizeBytes;
OtherLocalDirView->FormatSizeBytes = WinConfiguration->FormatSizeBytes;
LocalDirView->ConfirmOverwrite = WinConfiguration->ConfirmOverwriting;
LocalDriveView->ConfirmOverwrite = WinConfiguration->ConfirmOverwriting;
OtherLocalDirView->ConfirmOverwrite = WinConfiguration->ConfirmOverwriting;
OtherLocalDriveView->ConfirmOverwrite = WinConfiguration->ConfirmOverwriting;
LocalDirView->NortonLike = WinConfiguration->ScpCommander.NortonLikeMode;
OtherLocalDirView->NortonLike = WinConfiguration->ScpCommander.NortonLikeMode;
RemoteDirView->NortonLike = WinConfiguration->ScpCommander.NortonLikeMode;
LocalDirView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
LocalDriveView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
OtherLocalDirView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
OtherLocalDriveView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
LocalDirView->TimeoutShellIconRetrieval = WinConfiguration->TimeoutShellIconRetrieval;
LocalDirView->UseIconUpdateThread = WinConfiguration->UseIconUpdateThread;
OtherLocalDirView->TimeoutShellIconRetrieval = WinConfiguration->TimeoutShellIconRetrieval;
OtherLocalDirView->UseIconUpdateThread = WinConfiguration->UseIconUpdateThread;
if (LocalDirView->RowSelect != WinConfiguration->FullRowSelect)
{
LocalDirView->RowSelect = WinConfiguration->FullRowSelect;
// selection is not redrawn automatically when RowSelect changes
LocalDirView->Invalidate();
}
UpdateRowSelect(LocalDirView);
UpdateRowSelect(OtherLocalDirView);
// See also LocalDirViewDDTargetHasDropHandler
LocalDirView->DragDropFilesEx->ShellExtensions->DropHandler = !WinConfiguration->DDFakeFile;
LocalDriveView->DragDropFilesEx->ShellExtensions->DropHandler = !WinConfiguration->DDFakeFile;
OtherLocalDirView->DragDropFilesEx->ShellExtensions->DropHandler = !WinConfiguration->DDFakeFile;
OtherLocalDriveView->DragDropFilesEx->ShellExtensions->DropHandler = !WinConfiguration->DDFakeFile;
if (Panel(true)->Left > Panel(false)->Left)
{
@@ -704,6 +751,7 @@ void __fastcall TScpCommanderForm::ConfigurationChanged()
// save value only if it was set yet
if (FPanelsRestored)
{
// TODO_OTHER_LOCAL
if (TreeOnLeft)
{
// want to be on left, so it is on top, saving height
@@ -722,6 +770,7 @@ void __fastcall TScpCommanderForm::ConfigurationChanged()
// See TSplitter.RequestAlign
TCursor SplitterCursor = (TreeOnLeft ? crSizeWE : crSizeNS);
LocalDriveView->Align = NonClientAlign;
OtherLocalDriveView->Align = NonClientAlign;
LocalPanelSplitter->Align = NonClientAlign;
LocalPanelSplitter->Cursor = SplitterCursor;
RemoteDrivePanel->Align = NonClientAlign;
@@ -729,6 +778,7 @@ void __fastcall TScpCommanderForm::ConfigurationChanged()
RemotePanelSplitter->Cursor = SplitterCursor;
FixControlsPlacement();
// TODO_OTHER_LOCAL
if (TreeOnLeft)
{
LocalDriveView->Width = LocalPanel.DriveViewWidth;
@@ -862,6 +912,10 @@ void __fastcall TScpCommanderForm::PanelSplitterDblClick(TObject * Sender)
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::UpdateControls()
{
// Before TCustomScpExplorerForm disables them (when disconnecting)
bool DirViewWasFocused = DirView(osOther)->Focused();
bool DriveViewWasFocused = DriveView(osOther)->Focused();
TCustomScpExplorerForm::UpdateControls();
UnicodeString SplitterLongHint = Splitter->Hint;
@@ -882,10 +936,16 @@ void __fastcall TScpCommanderForm::UpdateControls()
}
LocalDirView->DarkMode = WinConfiguration->UseDarkTheme();
LocalDriveView->DarkMode = LocalDirView->DarkMode;
OtherLocalDirView->DarkMode = LocalDirView->DarkMode;
OtherLocalDriveView->DarkMode = LocalDirView->DarkMode;
LocalDirView->Color = PanelColor();
LocalDriveView->Color = LocalDirView->Color;
OtherLocalDirView->Color = LocalDirView->Color;
OtherLocalDriveView->Color = LocalDirView->Color;
LocalDirView->Font->Color = GetWindowTextColor(LocalDirView->Color);
LocalDriveView->Font->Color = LocalDirView->Font->Color;
OtherLocalDirView->Font->Color = LocalDirView->Font->Color;
OtherLocalDriveView->Font->Color = LocalDirView->Font->Color;
// TODO
bool LocalSide = (FCurrentSide == osLocal);
@@ -911,6 +971,44 @@ void __fastcall TScpCommanderForm::UpdateControls()
// Ad hoc hack to disable the drop down menu, when all its items (and all other buttons on the toolbar) are disabled,
// otherwise it shines too much on the toolbar.
RemoteNewSubmenuItem->Enabled = DirViewEnabled(osRemote);
RemoteDirView->Visible = (Terminal != NULL);
RemoteDriveView->Visible = RemoteDirView->Visible;
OtherLocalDirView->Visible = !RemoteDirView->Visible;
OtherLocalDriveView->Visible = OtherLocalDirView->Visible;
if (DirViewWasFocused)
{
if (DirView(osOther)->Enabled)
{
DirView(osOther)->SetFocus();
}
else
{
LocalDirView->SetFocus();
}
}
if (DriveViewWasFocused)
{
if (DriveView(osOther)->Enabled)
{
DriveView(osOther)->SetFocus();
}
else
{
LocalDriveView->SetFocus();
}
}
if (RemotePathLabel->FocusControl != DirView(osOther))
{
if (DebugAlwaysTrue(RemotePathLabel->FocusControl != NULL))
{
dynamic_cast<TCustomDirView *>(RemotePathLabel->FocusControl)->PathLabel = NULL;
}
DirView(osOther)->PathLabel = RemotePathLabel;
RemotePathLabel->UnixPath = !IsSideLocalBrowser(osOther);
DirView(osOther)->UpdateStatusBar();
}
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::ChangePath(TOperationSide Side)
@@ -991,10 +1089,8 @@ void __fastcall TScpCommanderForm::FixControlsPlacement()
SetVerticalControlsOrder(RemoteControlsOrder, LENOF(RemoteControlsOrder));
SetHorizontalControlsOrder(RemoteControlsOrder, LENOF(RemoteControlsOrder));
if (LocalDirView->ItemFocused != NULL)
{
LocalDirView->ItemFocused->MakeVisible(false);
}
MakeFocusedItemVisible(LocalDirView);
MakeFocusedItemVisible(OtherLocalDirView);
}
//---------------------------------------------------------------------------
bool __fastcall TScpCommanderForm::GetHasDirView(TOperationSide Side)
@@ -1017,6 +1113,7 @@ void __fastcall TScpCommanderForm::CompareDirectories()
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::SynchronizeDirectories()
{
DebugAssert(!IsLocalBrowserMode());
UnicodeString LocalDirectory = LocalDirView->PathName;
UnicodeString RemoteDirectory = RemoteDirView->PathName;
DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, -1);
@@ -1024,6 +1121,7 @@ void __fastcall TScpCommanderForm::SynchronizeDirectories()
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::FullSynchronizeDirectories()
{
DebugAssert(!IsLocalBrowserMode());
UnicodeString LocalDirectory = LocalDirView->PathName;
UnicodeString RemoteDirectory = RemoteDirView->PathName;
bool SaveMode = !(GUIConfiguration->SynchronizeModeAuto < 0);
@@ -1132,6 +1230,7 @@ void __fastcall TScpCommanderForm::CreateRemoteDirectory(const UnicodeString & P
void __fastcall TScpCommanderForm::SynchronizeBrowsingLocal(
UnicodeString PrevPath, UnicodeString & NewPath, bool Create)
{
DebugAssert(!IsLocalBrowserMode());
Terminal->ExceptionOnFail = true;
TStrings * Paths = new TStringList();
try
@@ -1179,6 +1278,7 @@ void __fastcall TScpCommanderForm::SynchronizeBrowsingLocal(
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::CreateLocalDirectory(const UnicodeString & Path)
{
DebugAssert(!IsLocalBrowserMode()); // Used for synchronized browsing only
UnicodeString Dir = ExtractFileDir(Path);
if (!Dir.IsEmpty() && !DirectoryExists(Dir))
{
@@ -1365,23 +1465,23 @@ void __fastcall TScpCommanderForm::DoDirViewLoaded(TCustomDirView * ADirView)
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::AddEditLink(TOperationSide Side, bool Add)
{
// TODO
if (GetSide(Side) == osLocal)
if (IsSideLocalBrowser(Side))
{
bool Edit = false;
UnicodeString FileName;
UnicodeString PointTo;
bool SymbolicLink = true;
if (LocalDirView->ItemFocused)
TDirView * ADirView = DebugNotNull(dynamic_cast<TDirView *>(DirView(Side)));
if (ADirView->ItemFocused != NULL)
{
DebugAssert(LocalDirView->ItemFocused->Data);
PFileRec FileRec = (PFileRec)LocalDirView->ItemFocused->Data;
DebugAssert(ADirView->ItemFocused->Data);
PFileRec FileRec = (PFileRec)ADirView->ItemFocused->Data;
Edit = !Add && (UpperCase(FileRec->FileExt) == L"LNK");
if (Edit)
{
UnicodeString FullName = LocalDirView->ItemFullFileName(LocalDirView->ItemFocused);
UnicodeString FullName = ADirView->ItemFullFileName(ADirView->ItemFocused);
FileName = FullName;
PointTo = ResolveFileShortCut(FullName, false);
if (PointTo.IsEmpty())
@@ -1405,11 +1505,11 @@ void __fastcall TScpCommanderForm::AddEditLink(TOperationSide Side, bool Add)
if (ExtractFileDrive(FileName) == L"" && FileName[1] != L'\\')
{
FileName = IncludeTrailingBackslash(LocalDirView->PathName) + FileName;
FileName = IncludeTrailingBackslash(ADirView->PathName) + FileName;
}
if (ExtractFileDrive(PointTo) == L"" && PointTo[1] != L'\\')
{
PointTo = IncludeTrailingBackslash(LocalDirView->PathName) + PointTo;
PointTo = IncludeTrailingBackslash(ADirView->PathName) + PointTo;
}
if (ExtractFileExt(FileName) == L"")
{
@@ -1501,6 +1601,8 @@ void __fastcall TScpCommanderForm::DoOpenBookmark(UnicodeString Local, UnicodeSt
//---------------------------------------------------------------------------
bool __fastcall TScpCommanderForm::OpenBookmark(TOperationSide Side, TBookmark * Bookmark)
{
// TODO_OTHER_LOCAL
DebugAssert(!IsLocalBrowserMode());
bool Result;
if (WinConfiguration->UseLocationProfiles)
{
@@ -1515,7 +1617,7 @@ bool __fastcall TScpCommanderForm::OpenBookmark(TOperationSide Side, TBookmark *
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDirViewDDTargetHasDropHandler(
TObject * /*Sender*/, TListItem * Item, int & /*Effect*/, bool & DropHandler)
TObject * Sender, TListItem * Item, int & /*Effect*/, bool & DropHandler)
{
// When drop target is not directory, it is probably file type, which have
// associated drop handler (such as EXE file). In this case we
@@ -1523,7 +1625,7 @@ void __fastcall TScpCommanderForm::LocalDirViewDDTargetHasDropHandler(
// as drop handlers are disabled, so drop would error
// (see TShellExtension.DropHandler assignment in ConfigurationChanged),
if (WinConfiguration->DDFakeFile &&
!LocalDirView->ItemIsDirectory(Item))
!DebugNotNull(dynamic_cast<TDirView *>(Sender))->ItemIsDirectory(Item))
{
DropHandler = false;
}
@@ -1559,7 +1661,7 @@ void __fastcall TScpCommanderForm::LocalFileControlDDFileOperation(
TObject * /*Sender*/, int dwEffect, UnicodeString SourcePath,
UnicodeString TargetPath, bool Paste, bool & DoOperation)
{
if (IsFileControl(DropSourceControl, osRemote))
if (IsFileControl(DropSourceControl, osRemote) && !IsLocalBrowserMode())
{
UnicodeString TargetDirectory;
if (InternalDDDownload(TargetDirectory))
@@ -1634,6 +1736,7 @@ void __fastcall TScpCommanderForm::SideEnter(TOperationSide Side)
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::UpdatePanelsPathLabelsStatus()
{
// TODO_OTHER_LOCAL
LocalPathLabel->UpdateStatus();
RemotePathLabel->UpdateStatus();
}
@@ -1805,39 +1908,46 @@ void __fastcall TScpCommanderForm::RemotePathLabelGetStatus(
TCustomPathLabel * /*Sender*/, bool & Active)
{
// WORKAROUND this strange form is here to make borland compiler work :-)
Active = Active || DriveView(osRemote)->Focused();
Active = Active || DriveView(osOther)->Focused();
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::DoPathLabelPathClick(TOperationSide Side, const UnicodeString & Path)
{
if (!NonVisualDataModule->Busy)
{
TCustomDirView * ADirView = DirView(Side);
bool Same;
if (IsSideLocalBrowser(Side))
{
Same = SamePaths(Path, ADirView->Path);
}
else
{
Same = UnixSamePath(Path, ADirView->Path);
}
if (Same)
{
OpenDirectory(Side);
}
else
{
ADirView->Path = Path;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalPathLabelPathClick(
TCustomPathLabel * /*Sender*/, UnicodeString Path)
{
if (!NonVisualDataModule->Busy)
{
if (SamePaths(Path, LocalDirView->Path))
{
OpenDirectory(osLocal);
}
else
{
LocalDirView->Path = Path;
}
}
DoPathLabelPathClick(osLocal, Path);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::RemotePathLabelPathClick(
TCustomPathLabel * /*Sender*/, UnicodeString Path)
{
if (!NonVisualDataModule->Busy)
{
if (UnixSamePath(Path, DirView(osRemote)->Path))
{
OpenDirectory(osRemote);
}
else
{
DirView(osRemote)->Path = Path;
}
}
DoPathLabelPathClick(osOther, Path);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDirViewFileIconForName(
@@ -1866,6 +1976,11 @@ void __fastcall TScpCommanderForm::RemoteDirViewUpdateStatusBar(
UpdateFileStatusBar(RemoteStatusBar, FileInfo, osRemote);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::OtherLocalDirViewUpdateStatusBar(TObject *, const TStatusFileInfo & FileInfo)
{
UpdateFileStatusBar(RemoteStatusBar, FileInfo, osOther);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalStatusBarClick(TObject * /*Sender*/)
{
LocalDirView->SetFocus();
@@ -1973,7 +2088,7 @@ void __fastcall TScpCommanderForm::LocalPathComboUpdateDrives()
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalPathComboUpdate()
{
// TODO
// TODO_OTHER_LOCAL
// this may get called even after destructor finishes
// (e.g. from SetDockAllowDrag invoked [indirectly] from StoreParams)
if (FLocalPathComboBoxPaths != NULL)
@@ -1996,11 +2111,11 @@ void __fastcall TScpCommanderForm::LocalPathComboUpdate()
}
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDirViewPathChange(TCustomDirView * /*Sender*/)
void __fastcall TScpCommanderForm::LocalDirViewPathChange(TCustomDirView * Sender)
{
LocalPathComboUpdate();
ResetIncrementalSearch();
if (IsUncPath(LocalDirView->Path))
if (IsUncPath(Sender->Path))
{
Configuration->Usage->Inc(L"BrowsedUncPath");
}
@@ -2122,6 +2237,7 @@ void __fastcall TScpCommanderForm::CommandLineComboEditWndProc(TMessage & Messag
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDriveViewRefreshDrives(TObject * /*Sender*/)
{
// TODO_OTHER_LOCAL
LocalPathComboUpdateDrives();
LocalPathComboUpdate();
}
@@ -2208,30 +2324,39 @@ void __fastcall TScpCommanderForm::QueueLabelUpdateStatus()
UpdatePanelsPathLabelsStatus();
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDirViewContextPopup(TObject * /*Sender*/,
TPoint & MousePos, bool & Handled)
void __fastcall TScpCommanderForm::DoLocalDirViewContextPopup(TOperationSide Side, TPoint & MousePos, bool & Handled)
{
if (!WinConfiguration->ScpCommander.SystemContextMenu && !FForceSystemContextMenu)
{
DirViewContextPopupDefaultItem(osLocal, NonVisualDataModule->LocalOpenMenuItem, dcaOpen);
DirViewContextPopupDefaultItem(osLocal, NonVisualDataModule->LocalEditMenuItem, dcaEdit);
DirViewContextPopupDefaultItem(osLocal, NonVisualDataModule->LocalCopyMenuItem, dcaCopy);
DirViewContextPopupDefaultItem(Side, NonVisualDataModule->LocalOpenMenuItem, dcaOpen);
DirViewContextPopupDefaultItem(Side, NonVisualDataModule->LocalEditMenuItem, dcaEdit);
DirViewContextPopupDefaultItem(Side, NonVisualDataModule->LocalCopyMenuItem, dcaCopy);
DirViewContextPopup(osLocal, fcLocalPopup, MousePos);
DirViewContextPopup(Side, fcLocalPopup, MousePos);
Handled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::LocalDirViewContextPopup(TObject *, TPoint & MousePos, bool & Handled)
{
DoLocalDirViewContextPopup(osLocal, MousePos, Handled);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::OtherLocalDirViewContextPopup(TObject *, TPoint & MousePos, bool & Handled)
{
DoLocalDirViewContextPopup(osOther, MousePos, Handled);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::DisplaySystemContextMenu()
{
TAutoFlag Flag(FForceSystemContextMenu);
if ((FLastContextPopupScreenPoint.x >= 0) && (FLastContextPopupScreenPoint.Y >= 0))
{
LocalDirView->DisplayContextMenu(FLastContextPopupScreenPoint);
DirView(osCurrent)->DisplayContextMenu(FLastContextPopupScreenPoint);
}
else
{
LocalDirView->DisplayContextMenuInSitu();
DirView(osCurrent)->DisplayContextMenuInSitu();
}
}
//---------------------------------------------------------------------------
@@ -2304,10 +2429,12 @@ void __fastcall TScpCommanderForm::FileColorsChanged()
{
TCustomScpExplorerForm::FileColorsChanged();
DoFileColorsChanged(LocalDirView);
DoFileColorsChanged(OtherLocalDirView);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::BrowseFile()
{
DebugAssert(!IsLocalBrowserMode());
TCustomScpExplorerForm::BrowseFile();
if (LocalDirView->ItemFocused != NULL)
{
@@ -2330,5 +2457,18 @@ void __fastcall TScpCommanderForm::ThemeChanged()
{
TCustomScpExplorerForm::ThemeChanged();
LocalDirView->Perform(WM_THEMECHANGED, 0, 0);
OtherLocalDirView->Perform(WM_THEMECHANGED, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::OtherLocalDirViewEnter(TObject *)
{
// Actually identical to LocalDirViewEnter
SideEnter(osOther);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::OtherLocalDriveViewEnter(TObject *)
{
MakeNextInTabOrder(OtherLocalDirView, OtherLocalDriveView);
SideEnter(osOther);
}
//---------------------------------------------------------------------------

View File

@@ -1119,6 +1119,52 @@ inherited ScpCommanderForm: TScpCommanderForm
OnHistoryGo = DirViewHistoryGo
OnPathChange = RemoteDirViewPathChange
end
inherited ReconnectToolbar: TTBXToolbar
TabOrder = 2
end
object OtherLocalDirView: TDirView
Left = 280
Top = 0
Width = 178
Height = 124
Align = alRight
Constraints.MinHeight = 70
DoubleBuffered = True
FullDrag = True
HideSelection = False
ParentDoubleBuffered = False
PopupMenu = NonVisualDataModule.RemoteDirViewPopup
TabOrder = 1
ViewStyle = vsReport
OnColumnRightClick = DirViewColumnRightClick
OnEditing = DirViewEditing
OnEnter = OtherLocalDirViewEnter
OnExit = DirViewExit
OnKeyDown = DirViewKeyDown
OnKeyPress = DirViewKeyPress
DirColProperties.ExtVisible = False
OnUpdateStatusBar = OtherLocalDirViewUpdateStatusBar
AddParentDir = True
OnSelectItem = DirViewSelectItem
OnLoaded = DirViewLoaded
OnDDDragEnter = LocalFileControlDDDragEnter
OnDDDragLeave = FileControlDDDragLeave
OnDDTargetHasDropHandler = LocalDirViewDDTargetHasDropHandler
OnDDFileOperation = LocalFileControlDDFileOperation
OnExecFile = LocalDirViewExecFile
OnMatchMask = DirViewMatchMask
OnGetOverlay = DirViewGetOverlay
ConfirmDelete = False
UseIconUpdateThread = True
WatchForChanges = True
OnFileIconForName = LocalDirViewFileIconForName
OnContextPopup = OtherLocalDirViewContextPopup
OnHistoryChange = DirViewHistoryChange
OnHistoryGo = DirViewHistoryGo
OnPathChange = LocalDirViewPathChange
OnBusy = DirViewBusy
OnChangeFocus = DirViewChangeFocus
end
end
inherited RemoteDrivePanel: TPanel
Top = 98
@@ -1126,8 +1172,30 @@ inherited ScpCommanderForm: TScpCommanderForm
Height = 45
Align = alTop
Constraints.MinHeight = 30
object OtherLocalDriveView: TDriveView [0]
Left = 280
Top = 0
Width = 178
Height = 45
WatchDirectory = True
DirView = OtherLocalDirView
OnBusy = DirViewBusy
OnDDDragEnter = LocalFileControlDDDragEnter
OnDDDragLeave = FileControlDDDragLeave
OnDDFileOperation = LocalFileControlDDFileOperation
Align = alRight
Constraints.MinHeight = 30
DoubleBuffered = True
HideSelection = False
Indent = 19
ParentColor = False
ParentDoubleBuffered = False
TabOrder = 1
TabStop = False
OnEnter = OtherLocalDriveViewEnter
end
inherited RemoteDriveView: TUnixDriveView
Width = 458
Width = 280
Height = 45
TabStop = False
end

View File

@@ -438,6 +438,8 @@ __published:
TTBXItem *TBXItem255;
TTBXSeparatorItem *TBXSeparatorItem65;
TTBXItem *TBXItem256;
TDriveView *OtherLocalDriveView;
TDirView *OtherLocalDirView;
void __fastcall SplitterMoved(TObject *Sender);
void __fastcall SplitterCanResize(TObject *Sender, int &NewSize,
bool &Accept);
@@ -495,6 +497,10 @@ __published:
void __fastcall LocalPathLabelMaskClick(TObject *Sender);
void __fastcall LocalOpenDirButtonPopup(TTBCustomItem *Sender, bool FromLink);
void __fastcall RemoteOpenDirButtonPopup(TTBCustomItem *Sender, bool FromLink);
void __fastcall OtherLocalDirViewEnter(TObject *Sender);
void __fastcall OtherLocalDriveViewEnter(TObject *Sender);
void __fastcall OtherLocalDirViewContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled);
void __fastcall OtherLocalDirViewUpdateStatusBar(TObject *Sender, const TStatusFileInfo &FileInfo);
private:
bool FConstructed;
@@ -526,8 +532,10 @@ private:
void __fastcall UpdateToolbar2ItemCaption(TTBCustomItem * Item);
void __fastcall SetShortcuts();
void __fastcall UpdatePanelsPathLabelsStatus();
void __fastcall DoLocalDefaultDirectory(TDirView * DirView, const UnicodeString & LastPath);
void __fastcall LocalDefaultDirectory();
TOperationSide __fastcall GetOtherSize(TOperationSide Side);
void __fastcall DoLocalDirViewContextPopup(TOperationSide Side, TPoint & MousePos, bool & Handled);
protected:
virtual bool __fastcall CopyParamDialog(TTransferDirection Direction,
@@ -550,7 +558,6 @@ protected:
virtual void __fastcall TerminalChanged(bool Replaced);
virtual void __fastcall ConfigurationChanged();
virtual bool __fastcall GetHasDirView(TOperationSide Side);
virtual bool IsSideLocalBrowser(TOperationSide Side);
virtual TCustomDirView * GetCurrentLocalBrowser();
virtual void __fastcall UpdateControls();
virtual void __fastcall FileOperationProgress(
@@ -602,6 +609,8 @@ protected:
virtual void __fastcall UpdateImages();
virtual void __fastcall FileColorsChanged();
virtual void __fastcall ThemeChanged();
virtual bool IsLocalBrowserMode();
void __fastcall DoPathLabelPathClick(TOperationSide Side, const UnicodeString & Path);
public:
__fastcall TScpCommanderForm(TComponent* Owner);
@@ -627,6 +636,7 @@ public:
virtual void __fastcall CopyFilesToClipboard(TOperationSide Side, bool OnFocused);
virtual void __fastcall PasteFromClipBoard();
virtual void __fastcall BrowseFile();
virtual bool IsSideLocalBrowser(TOperationSide Side);
__property double LeftPanelWidth = { read = GetLeftPanelWidth, write = SetLeftPanelWidth };
};

View File

@@ -169,11 +169,10 @@ void __fastcall TScpExplorerForm::DoShow()
// See comment in TScpCommanderForm::DoShow()
UpdateControls();
if (RemoteDirView->Enabled)
if (DirView(osOther)->Enabled)
{
RemoteDirView->SetFocus();
DirView(osOther)->SetFocus();
}
FRemoteDirViewWasFocused = true;
TCustomScpExplorerForm::DoShow();
}