|
@@ -98,6 +98,8 @@ type
|
|
actCopyPathNoSepOfFilesToClip: TAction;
|
|
actCopyPathNoSepOfFilesToClip: TAction;
|
|
actDoAnyCmCommand: TAction;
|
|
actDoAnyCmCommand: TAction;
|
|
actCloseDuplicateTabs: TAction;
|
|
actCloseDuplicateTabs: TAction;
|
|
|
|
+ actNewGroup: TAction;
|
|
|
|
+ actRestoreActiveGroup: TAction;
|
|
actTreeView: TAction;
|
|
actTreeView: TAction;
|
|
actToggleFullscreenConsole: TAction;
|
|
actToggleFullscreenConsole: TAction;
|
|
actSrcOpenDrives: TAction;
|
|
actSrcOpenDrives: TAction;
|
|
@@ -203,6 +205,11 @@ type
|
|
lblRightDriveInfo: TLabel;
|
|
lblRightDriveInfo: TLabel;
|
|
lblLeftDriveInfo: TLabel;
|
|
lblLeftDriveInfo: TLabel;
|
|
lblCommandPath: TLabel;
|
|
lblCommandPath: TLabel;
|
|
|
|
+ miLine34: TMenuItem;
|
|
|
|
+
|
|
|
|
+ mnuRestoreActiveGroup: TMenuItem;
|
|
|
|
+ mnuNewGroup: TMenuItem;
|
|
|
|
+ mnuGroups: TMenuItem;
|
|
mnuCloseDuplicateTabs: TMenuItem;
|
|
mnuCloseDuplicateTabs: TMenuItem;
|
|
miCloseDuplicateTabs: TMenuItem;
|
|
miCloseDuplicateTabs: TMenuItem;
|
|
mnuTreeView: TMenuItem;
|
|
mnuTreeView: TMenuItem;
|
|
@@ -466,6 +473,7 @@ type
|
|
Shift: TShiftState; X, Y: Integer);
|
|
Shift: TShiftState; X, Y: Integer);
|
|
procedure FormKeyUp( Sender: TObject; var Key: Word; Shift: TShiftState) ;
|
|
procedure FormKeyUp( Sender: TObject; var Key: Word; Shift: TShiftState) ;
|
|
function MainToolBarToolItemShortcutsHint(ToolItem: TKASNormalItem): String;
|
|
function MainToolBarToolItemShortcutsHint(ToolItem: TKASNormalItem): String;
|
|
|
|
+ procedure mnuGroupNameTabsClick(Sender: TObject);
|
|
procedure mnuAllOperStartClick(Sender: TObject);
|
|
procedure mnuAllOperStartClick(Sender: TObject);
|
|
procedure mnuAllOperStopClick(Sender: TObject);
|
|
procedure mnuAllOperStopClick(Sender: TObject);
|
|
procedure mnuAllOperPauseClick(Sender: TObject);
|
|
procedure mnuAllOperPauseClick(Sender: TObject);
|
|
@@ -658,6 +666,8 @@ type
|
|
procedure SetDragCursor(Shift: TShiftState);
|
|
procedure SetDragCursor(Shift: TShiftState);
|
|
|
|
|
|
public
|
|
public
|
|
|
|
+ LastActiveGroup:string; // name of groups user last clicked
|
|
|
|
+
|
|
constructor Create(TheOwner: TComponent); override;
|
|
constructor Create(TheOwner: TComponent); override;
|
|
Function ActiveFrame: TFileView; // get Active frame
|
|
Function ActiveFrame: TFileView; // get Active frame
|
|
Function NotActiveFrame: TFileView; // get NotActive frame :)
|
|
Function NotActiveFrame: TFileView; // get NotActive frame :)
|
|
@@ -720,8 +730,13 @@ type
|
|
procedure AssignEvents(AFileView: TFileView);
|
|
procedure AssignEvents(AFileView: TFileView);
|
|
function RemovePage(ANoteBook: TFileViewNotebook; iPageIndex:Integer; CloseLocked: Boolean = True): LongInt;
|
|
function RemovePage(ANoteBook: TFileViewNotebook; iPageIndex:Integer; CloseLocked: Boolean = True): LongInt;
|
|
procedure LoadTabsIni(ANoteBook: TFileViewNotebook);
|
|
procedure LoadTabsIni(ANoteBook: TFileViewNotebook);
|
|
- procedure LoadTabsXml(AConfig: TXmlConfig; ANoteBook: TFileViewNotebook);
|
|
|
|
- procedure SaveTabsXml(AConfig: TXmlConfig; ANoteBook: TFileViewNotebook);
|
|
|
|
|
|
+ procedure LoadTabsXml(AConfig: TXmlConfig; ABrunch:string; ANoteBook: TFileViewNotebook);
|
|
|
|
+ procedure SaveTabsXml(AConfig: TXmlConfig; ABrunch:string; ANoteBook: TFileViewNotebook);
|
|
|
|
+
|
|
|
|
+ procedure LoadGroupXml(AConfig: TXmlConfig; AGroupName: string);
|
|
|
|
+ procedure SaveGroupXml(AConfig: TXmlConfig; AGroupName: string);
|
|
|
|
+
|
|
|
|
+ procedure CreateGroupsMainMenuItems; // add menu items on FormCreate if file 'groups.xml' is exists
|
|
procedure ToggleConsole;
|
|
procedure ToggleConsole;
|
|
procedure UpdateWindowView;
|
|
procedure UpdateWindowView;
|
|
procedure MinimizeWindow;
|
|
procedure MinimizeWindow;
|
|
@@ -982,6 +997,7 @@ begin
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
|
|
LoadTabs;
|
|
LoadTabs;
|
|
|
|
+ CreateGroupsMainMenuItems;
|
|
|
|
|
|
// Update selected drive and free space before main form is shown,
|
|
// Update selected drive and free space before main form is shown,
|
|
// otherwise there is a bit of delay.
|
|
// otherwise there is a bit of delay.
|
|
@@ -1330,6 +1346,17 @@ begin
|
|
Result := ShortcutsToText(TfrmOptionsToolbar.GetShortcuts(ToolItem));
|
|
Result := ShortcutsToText(TfrmOptionsToolbar.GetShortcuts(ToolItem));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TfrmMain.mnuGroupNameTabsClick(Sender: TObject);
|
|
|
|
+var
|
|
|
|
+ AConfig:TXmlConfig;
|
|
|
|
+ AGroupName: string;
|
|
|
|
+begin
|
|
|
|
+ AGroupName := (Sender as TMenuItem).Name;
|
|
|
|
+ LastActiveGroup := Copy(AGroupName, 11, Length(AGroupName) - 4);
|
|
|
|
+ Commands.Commands.ExecuteCommand('cm_RestoreActiveGroup', []);
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
procedure TfrmMain.miLogMenuClick(Sender: TObject);
|
|
procedure TfrmMain.miLogMenuClick(Sender: TObject);
|
|
begin
|
|
begin
|
|
case (Sender as TMenuItem).Tag of
|
|
case (Sender as TMenuItem).Tag of
|
|
@@ -4185,7 +4212,10 @@ begin
|
|
ANoteBook.PageIndex := iActiveTab;
|
|
ANoteBook.PageIndex := iActiveTab;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TfrmMain.LoadTabsXml(AConfig: TXmlConfig; ANoteBook: TFileViewNotebook);
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+procedure TfrmMain.LoadTabsXml(AConfig: TXmlConfig; ABrunch:string; ANoteBook: TFileViewNotebook);
|
|
|
|
+// default was ABrunch: 'Tabs/OpenedTabs/'
|
|
var
|
|
var
|
|
sPath, sViewType: String;
|
|
sPath, sViewType: String;
|
|
iActiveTab: Integer;
|
|
iActiveTab: Integer;
|
|
@@ -4196,9 +4226,9 @@ var
|
|
RootNode, TabNode, ViewNode: TXmlNode;
|
|
RootNode, TabNode, ViewNode: TXmlNode;
|
|
begin
|
|
begin
|
|
if ANoteBook = nbLeft then
|
|
if ANoteBook = nbLeft then
|
|
- RootNode := AConfig.FindNode(AConfig.RootNode, 'Tabs/OpenedTabs/Left')
|
|
|
|
|
|
+ RootNode := AConfig.FindNode(AConfig.RootNode,ABrunch+ '/Left')
|
|
else
|
|
else
|
|
- RootNode := AConfig.FindNode(AConfig.RootNode, 'Tabs/OpenedTabs/Right');
|
|
|
|
|
|
+ RootNode := AConfig.FindNode(AConfig.RootNode,ABrunch+ '/Right');
|
|
|
|
|
|
if Assigned(RootNode) then
|
|
if Assigned(RootNode) then
|
|
begin
|
|
begin
|
|
@@ -4284,14 +4314,16 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TfrmMain.SaveTabsXml(AConfig: TXmlConfig; ANoteBook: TFileViewNotebook);
|
|
|
|
|
|
+
|
|
|
|
+procedure TfrmMain.SaveTabsXml(AConfig: TXmlConfig;ABrunch:string; ANoteBook: TFileViewNotebook);
|
|
|
|
+// brunch was: 'Tabs/OpenedTabs'
|
|
var
|
|
var
|
|
I: Integer;
|
|
I: Integer;
|
|
TabsSection: String;
|
|
TabsSection: String;
|
|
Page: TFileViewPage;
|
|
Page: TFileViewPage;
|
|
RootNode, TabNode, ViewNode: TXmlNode;
|
|
RootNode, TabNode, ViewNode: TXmlNode;
|
|
begin
|
|
begin
|
|
- RootNode := AConfig.FindNode(AConfig.RootNode, 'Tabs/OpenedTabs', True);
|
|
|
|
|
|
+ RootNode := AConfig.FindNode(AConfig.RootNode, ABrunch, True);
|
|
if ANoteBook = nbLeft then
|
|
if ANoteBook = nbLeft then
|
|
TabsSection := 'Left'
|
|
TabsSection := 'Left'
|
|
else
|
|
else
|
|
@@ -4312,6 +4344,101 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+
|
|
|
|
+procedure TfrmMain.CreateGroupsMainMenuItems;
|
|
|
|
+var
|
|
|
|
+ i,cnt:integer;
|
|
|
|
+ mitNewGroup:TMenuItem;
|
|
|
|
+ AConfig: TXmlConfig;
|
|
|
|
+ sNewGroup:string;
|
|
|
|
+ aParentNode:TXmlNode;
|
|
|
|
+begin
|
|
|
|
+
|
|
|
|
+ if not FileExists('groups.xml') then exit;
|
|
|
|
+
|
|
|
|
+ try
|
|
|
|
+ AConfig:= TXmlConfig.Create('groups.xml',True);
|
|
|
|
+
|
|
|
|
+ try
|
|
|
|
+ AConfig.Load;
|
|
|
|
+ aParentNode:=AConfig.FindNode(AConfig.RootNode, 'GroupsNameBank/');
|
|
|
|
+
|
|
|
|
+ i:=0;
|
|
|
|
+ cnt:=aParentNode.ChildNodes.Count;
|
|
|
|
+ while(i<cnt)do
|
|
|
|
+ begin
|
|
|
|
+ sNewGroup:=aParentNode.ChildNodes[i].NodeName;
|
|
|
|
+
|
|
|
|
+ mitNewGroup:=TMenuItem.Create(frmMain.mnuMain);
|
|
|
|
+ mitNewGroup.Caption:=sNewGroup;
|
|
|
|
+ mitNewGroup.Name:='miGrpName_'+sNewGroup;
|
|
|
|
+ mitNewGroup.OnClick:=@mnuGroupNameTabsClick;
|
|
|
|
+
|
|
|
|
+ mnuGroups.Add(mitNewGroup);
|
|
|
|
+ inc(i);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ finally
|
|
|
|
+ AConfig.Free;
|
|
|
|
+ end;
|
|
|
|
+ except
|
|
|
|
+ on E: Exception do
|
|
|
|
+ msgError(E.Message);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+procedure TfrmMain.LoadGroupXml(AConfig: TXmlConfig;
|
|
|
|
+ AGroupName: string);
|
|
|
|
+var
|
|
|
|
+ sPath, sViewType: String;
|
|
|
|
+ iActiveTab: Integer;
|
|
|
|
+ Page: TFileViewPage;
|
|
|
|
+ AFileView: TFileView;
|
|
|
|
+ AFileViewFlags: TFileViewFlags;
|
|
|
|
+ aFileSource: IFileSource;
|
|
|
|
+ aParentNode,RootNode, TabNode, ViewNode: TXmlNode;
|
|
|
|
+begin
|
|
|
|
+
|
|
|
|
+ // 1) Verify - is the AGroupName exist in brunch GroupsNameBank?
|
|
|
|
+
|
|
|
|
+ aParentNode:=AConfig.FindNode(AConfig.RootNode, 'GroupsNameBank/'+AGroupName);
|
|
|
|
+ if aParentNode= nil then exit;
|
|
|
|
+
|
|
|
|
+ // Load left tabs of group in XML Node: Groups/<GroupName>/Left
|
|
|
|
+
|
|
|
|
+ // 2) Save current active group data to brunch 'Groups/<AGroupName>'
|
|
|
|
+
|
|
|
|
+ LeftTabs.DestroyAllPages;
|
|
|
|
+ LoadTabsXml(AConfig,'Groups/'+AGroupName,nbLeft);
|
|
|
|
+
|
|
|
|
+ RightTabs.DestroyAllPages;
|
|
|
|
+ LoadTabsXml(AConfig,'Groups/'+AGroupName,nbRight);
|
|
|
|
+
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TfrmMain.SaveGroupXml(AConfig: TXmlConfig;
|
|
|
|
+ AGroupName: string);
|
|
|
|
+var
|
|
|
|
+ I: Integer;
|
|
|
|
+ TabsSection: String;
|
|
|
|
+ Page: TFileViewPage;
|
|
|
|
+ ParentNode,RootNode, TabNode, ViewNode: TXmlNode;
|
|
|
|
+begin
|
|
|
|
+
|
|
|
|
+ // 1) Write New group name to brunch GroupsNameBank
|
|
|
|
+
|
|
|
|
+ ParentNode := AConfig.FindNode(AConfig.RootNode, 'GroupsNameBank', True);
|
|
|
|
+ AConfig.AddNode(ParentNode,AGroupName);
|
|
|
|
+
|
|
|
|
+ // 2) Save current active group data to brunch 'Groups/<AGroupName>'
|
|
|
|
+
|
|
|
|
+ SaveTabsXml(AConfig,'Groups/'+AGroupName,nbLeft);
|
|
|
|
+ SaveTabsXml(AConfig,'Groups/'+AGroupName,nbRight);
|
|
|
|
+
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TfrmMain.ToggleConsole;
|
|
procedure TfrmMain.ToggleConsole;
|
|
begin
|
|
begin
|
|
if gTermWindow then
|
|
if gTermWindow then
|
|
@@ -5045,8 +5172,8 @@ begin
|
|
end
|
|
end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- LoadTabsXml(gConfig, nbLeft);
|
|
|
|
- LoadTabsXml(gConfig, nbRight);
|
|
|
|
|
|
+ LoadTabsXml(gConfig,'Tabs/OpenedTabs/', nbLeft);
|
|
|
|
+ LoadTabsXml(gConfig,'Tabs/OpenedTabs/', nbRight);
|
|
end;
|
|
end;
|
|
|
|
|
|
LoadTabsCommandLine(CommandLineParams);
|
|
LoadTabsCommandLine(CommandLineParams);
|
|
@@ -5155,8 +5282,8 @@ var
|
|
ANode: TXmlNode;
|
|
ANode: TXmlNode;
|
|
begin
|
|
begin
|
|
(* Save all tabs *)
|
|
(* Save all tabs *)
|
|
- SaveTabsXml(gConfig, nbLeft);
|
|
|
|
- SaveTabsXml(gConfig, nbRight);
|
|
|
|
|
|
+ LoadTabsXml(gConfig,'Tabs/OpenedTabs/', nbLeft);
|
|
|
|
+ LoadTabsXml(gConfig,'Tabs/OpenedTabs/', nbRight);
|
|
|
|
|
|
(* Save window bounds and state *)
|
|
(* Save window bounds and state *)
|
|
ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True);
|
|
ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True);
|