UPD: Further tabs handling.

This commit is contained in:
cobines 2009-07-17 12:14:30 +00:00
commit cb0e55e9fe
6 changed files with 221 additions and 197 deletions

View file

@ -400,8 +400,8 @@ type
procedure seLogWindowSpecialLineColors(Sender: TObject; Line: integer;
var Special: boolean; var FG, BG: TColor);
function FramepnlFileBeforeChangeDirectory(Sender: TObject; const NewDir : String): Boolean;
procedure FramepnlFileAfterChangeDirectory(Sender: TObject; const NewDir : String);
function FramepnlFileBeforeChangeDirectory(Sender: TCustomPage; const NewDir : String): Boolean;
procedure FramepnlFileAfterChangeDirectory(Sender: TCustomPage; const NewDir : String);
procedure edtCommandKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure edtCommandEnter(Sender: TObject);
@ -444,6 +444,7 @@ type
Function ActiveFrame: TFileView; // get Active frame
Function NotActiveFrame: TFileView; // get NotActive frame :)
function ActiveNotebook: TFileViewNotebook;
function NotActiveNotebook: TFileViewNotebook;
function FrameLeft: TFileView;
function FrameRight: TFileView;
procedure AppException(Sender: TObject; E: Exception);
@ -470,8 +471,7 @@ type
procedure CreateDrivesMenu;
procedure DrivesMenuClick(Sender: TObject);
procedure CreateDiskPanel(dskPanel : TKASToolBar);
procedure CreatePanel(sType: String; AOwner:TWinControl; APanel:TFilePanelSelect;
FileSource: TFileSource);
function CreateFileView(sType: String; FileSource: TFileSource; Page: TFileViewPage): TFileView;
function RemovePage(ANoteBook: TFileViewNotebook; iPageIndex:Integer): LongInt;
procedure LoadTabs(ANoteBook: TFileViewNotebook);
procedure SaveTabs(ANoteBook: TFileViewNotebook);
@ -528,12 +528,23 @@ var
{$ENDIF}
procedure TfrmMain.FormCreate(Sender: TObject);
function CreateNotebook(aParent: TWinControl; aSide: TFilePanelSelect): TFileViewNotebook;
begin
Result := TFileViewNotebook.Create(aParent, aSide);
Result.OnCloseTabClicked := @NotebookCloseTabClicked;
Result.OnMouseDown := @nbPageMouseDown;
Result.OnMouseUp := @nbPageMouseUp;
Result.OnPageChanged := @nbPageChanged;
end;
var
slCommandHistory: TStringListEx;
i: Integer;
begin
nbLeft := TFileViewNotebook.Create(pnlLeft);
nbRight := TFileViewNotebook.Create(pnlRight);
nbLeft := CreateNotebook(pnlLeft, fpLeft);
nbRight := CreateNotebook(pnlRight, fpRight);
HiddenToTray := False;
@ -1343,9 +1354,9 @@ begin
// Check lock option items.
Index := pmTabMenu.Items.IndexOf(miToggleLockTab);
pmTabMenu.Items.Items[Index].Checked := (NoteBook.Page[TabNr].Tag = 1);
pmTabMenu.Items.Items[Index].Checked := (NoteBook.Page[TabNr].LockState = tlsLockedPath);
Index := pmTabMenu.Items.IndexOf(miToggleLockDcaTab);
pmTabMenu.Items.Items[Index].Checked := (NoteBook.Page[TabNr].Tag = 2);
pmTabMenu.Items.Items[Index].Checked := (NoteBook.Page[TabNr].LockState = tlsResettingPath);
pmTabMenu.Parent := NoteBook;
pmTabMenu.Tag := TabNr;
@ -1572,6 +1583,18 @@ begin
end;
end;
function TfrmMain.NotActiveNotebook: TFileViewNotebook;
begin
case PanelSelected of
fpLeft:
Result := nbRight;
fpRight:
Result := nbLeft;
else
assert(false,'Bad active notebook');
end;
end;
function TfrmMain.FrameLeft: TFileView;
begin
Result := nbLeft.ActiveView;
@ -2266,10 +2289,10 @@ begin
end;
end;
function TfrmMain.FramepnlFileBeforeChangeDirectory(Sender: TObject; const NewDir: String): Boolean;
function TfrmMain.FramepnlFileBeforeChangeDirectory(Sender: TCustomPage; const NewDir: String): Boolean;
var
ANoteBook: TFileViewNotebook;
Page: TFileViewPage;
Page, NewPage: TFileViewPage;
Panel: TFilePanelSelect;
begin
Result:= True;
@ -2283,23 +2306,16 @@ begin
ANoteBook := Page.Notebook;
if ANoteBook = LeftTabs then
Panel := fpLeft
else if ANoteBook = RightTabs then
Panel := fpRight
else
Exit;
// Create same type
//CreatePanel(ActiveFrame.Type, AddPage(NoteBook), Panel,
// ActiveFrame.FileSource.Type.Create(sPath));
ActiveFrame.SetFocus;
NewPage := ANoteBook.AddPage;
Page.FileView.Clone(NewPage);
NewPage.FileView.CurrentPath := NewDir;
NewPage.MakeActive;
end;
end;
end;
procedure TfrmMain.FramepnlFileAfterChangeDirectory(Sender: TObject; const NewDir: String);
procedure TfrmMain.FramepnlFileAfterChangeDirectory(Sender: TCustomPage; const NewDir: String);
var
ANoteBook : TFileViewNotebook;
Page: TFileViewPage;
@ -2312,10 +2328,7 @@ begin
if Page.LockState = tlsNormal then // if not locked tab
begin
sCaption := GetLastDir(ExcludeTrailingPathDelimiter(NewDir));
if (tb_text_length_limit in gDirTabOptions) and (Length(sCaption) > gDirTabLimit) then
Page.Caption:= Copy(sCaption, 1, gDirTabLimit) + '...'
else
Page.Caption := sCaption;
Page.UpdateCaption(sCaption);
end;
// update file system watcher directory
@ -2477,30 +2490,27 @@ begin
AddSpecialButtons(dskPanel);
end;
procedure TfrmMain.CreatePanel(sType: String; AOwner: TWinControl; APanel:TFilePanelSelect; FileSource: TFileSource);
function TfrmMain.CreateFileView(sType: String; FileSource: TFileSource;
Page: TFileViewPage): TFileView;
var
FileView: TFileView = nil;
Panel: TFilePanelSelect;
begin
// This function should be changed to a separate TFileView factory.
if sType = 'columns' then
begin
FileView := TColumnsFileView.Create(AOwner, FileSource);
Result := TColumnsFileView.Create(Page, FileSource);
end
else
Exit;
with FileView do
begin
PanelSelect := APanel; // should be removed when notebook will be custom class
// and will store where each view is (left or right)
{
do this with observer pattern:
Result := nil;
Exit;
end;
// Set before changing directory.
with Result do
begin
OnBeforeChangeDirectory := @FramepnlFileBeforeChangeDirectory;
OnAfterChangeDirectory := @FramepnlFileAfterChangeDirectory;
}
end;
end;
@ -2511,7 +2521,7 @@ begin
(iPageIndex >= 0) and
(iPageIndex < ANoteBook.PageCount) then
begin
if ANoteBook.Page[iPageIndex].Tag > 0 then
if ANoteBook.Page[iPageIndex].LockState <> tlsNormal then
case msgYesNoCancel(Format(rsMsgCloseLockedTab, [ANoteBook.Page[iPageIndex].Caption])) of
mmrNo:
Exit(1);
@ -2519,20 +2529,9 @@ begin
Exit(2);
end;
ANoteBook.Pages.Delete(iPageIndex);
if (nboMultiLine in ANoteBook.Options) and
ANoteBook.ClientRectNeedsInterfaceUpdate then
begin
// The height of the tabs (nr of lines) has changed.
// Recalculate size of each page.
ANoteBook.InvalidateClientRectCache(False);
ANoteBook.ReAlign;
end;
ANoteBook.RemovePage(iPageIndex);
Result:= 0;
end;
ANoteBook.ShowTabs:= ((ANoteBook.PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs;
end;
procedure TfrmMain.ReLoadTabs(ANoteBook: TFileViewNotebook);
@ -2566,8 +2565,7 @@ var
I, J: Integer;
sIndex,
TabsSection: String;
fpsPanel: TFilePanelSelect;
sCurrentDir,
sCurrentDir,
sPath, sColumnSet,
sCaption: String;
iActiveTab: Integer;
@ -2576,12 +2574,10 @@ begin
if ANoteBook = nbLeft then
begin
TabsSection:= 'lefttabs';
fpsPanel:= fpLeft;
end
else
begin
TabsSection:= 'righttabs';
fpsPanel:= fpRight;
end;
I:= 0;
@ -2609,19 +2605,17 @@ begin
Page := ANoteBook.AddPage;
CreatePanel('columns', Page, fpsPanel,
TFileSystemFileSource.Create(sPath));
if not Assigned(CreateFileView('columns', TFileSystemFileSource.Create(sPath), Page)) then
begin
ANoteBook.RemovePage(Page);
continue;
end;
Page.LockState := TTabLockState(gIni.ReadInteger(TabsSection, sIndex + '_options', 0));
if Page.LockState = tlsResettingPath then // if locked tab with directory change
Page.LockPath := sPath;
if sCaption <> '' then
if (tb_text_length_limit in gDirTabOptions) and (Length(sCaption) > gDirTabLimit) then
Page.Caption := Copy(sCaption, 1, gDirTabLimit) + '...'
else
Page.Caption := sCaption;
Page.UpdateCaption(sCaption);
Page.FileView.LoadConfiguration(TabsSection, StrToInt(sIndex));
Inc(I);

View file

@ -325,7 +325,7 @@ type
destructor Destroy; override;
function Clone: TColumnsFileView; override;
function Clone(NewParent: TWinControl): TColumnsFileView; override;
procedure CloneTo(FileView: TFileView); override;
{en
@ -1150,11 +1150,9 @@ procedure TColumnsFileView.SetCurrentPath(NewPath: String);
begin
if NewPath <> '' then
begin
{
if Assigned(FOnBeforeChangeDirectory) then
if not FOnBeforeChangeDirectory(fOwner, NewDirectory) then
if Assigned(OnBeforeChangeDirectory) then
if not OnBeforeChangeDirectory(Parent as TCustomPage, NewPath) then
Exit;
}
{
if not FileSource.ChangePath(NewPath) then
begin
@ -1177,10 +1175,9 @@ begin
MakeFileSourceFileList;
UpdatePathLabel;
{
if Assigned(FOnAfterChangeDirectory) then
FOnAfterChangeDirectory(fOwner, fActiveDir);
}
if Assigned(OnAfterChangeDirectory) then
OnAfterChangeDirectory(Parent as TCustomPage, CurrentPath);
end;
end;
@ -2136,7 +2133,7 @@ begin
SetFocus;
UpDatelblInfo;
frmMain.EnableHotkeys(True);
frmMain.SelectedPanel := PanelSelect;
frmMain.SelectedPanel := (NotebookPage as TFileViewPage).Notebook.Side;
end;
procedure TColumnsFileView.RedrawGrid;
@ -2553,7 +2550,6 @@ begin
pnlFooter.Parent:=Self;
pnlFooter.Align:=alBottom;
pnlFooter.Width:=AOwner.Width;
pnlFooter.Anchors:=[akLeft, akRight, akBottom];
pnlFooter.Height:=20;
pnlFooter.Top:=Height-20;
@ -2643,13 +2639,13 @@ begin
inherited Destroy;
end;
function TColumnsFileView.Clone: TColumnsFileView;
function TColumnsFileView.Clone(NewParent: TWinControl): TColumnsFileView;
var
FileSourceCloned: TFileSource;
begin
FileSourceCloned := FileSource.Clone;
try
Result := TColumnsFileView.Create(Parent, FileSourceCloned);
Result := TColumnsFileView.Create(NewParent, FileSourceCloned);
CloneTo(Result);
except
FreeAndNil(FileSourceCloned);

View file

@ -29,8 +29,8 @@ type
constructor Create; override;
constructor Create(Path: String); overload;
function Clone: TFileSystemFileSource; overload;
procedure CloneTo(FileSource: TFileSource); overload;
function Clone: TFileSystemFileSource; override;
procedure CloneTo(FileSource: TFileSource); override;
class function GetSupportedFileProperties: TFilePropertiesTypes; override;
class function GetOperationsTypes: TFileSourceOperationTypes; override;

View file

@ -5,11 +5,14 @@ unit uFileView;
interface
uses
Classes, SysUtils, Controls,
Classes, SysUtils, Controls, ExtCtrls,
uFile, uFileSource, uFilePanelSelect, uMethodsList;
type
TOnBeforeChangeDirectory = function (FileView: TCustomPage; const NewDir : String): Boolean of object;
TOnAfterChangeDirectory = procedure (FileView: TCustomPage; const NewDir : String) of object;
{en
Base class for any view of a file or files.
There should always be at least one file displayed on the view.
@ -24,13 +27,15 @@ type
}
FFileSource: TFileSource;
// It should be independent of left/right side in the future.
FPanelSelect: TFilePanelSelect;
FMethods: TMethodsList;
FOnBeforeChangeDirectory : TOnBeforeChangeDirectory;
FOnAfterChangeDirectory : TOnAfterChangeDirectory;
function GetCurrentAddress: String;
function GetNotebookPage: TCustomPage;
protected
function GetCurrentPath: String; virtual;
procedure SetCurrentPath(NewPath: String); virtual;
@ -44,7 +49,7 @@ type
destructor Destroy; override;
function Clone: TFileView; virtual;
function Clone(NewParent: TWinControl): TFileView; virtual;
procedure CloneTo(FileView: TFileView); virtual;
// Retrieves files from file source again and displays the new list of files.
@ -62,7 +67,6 @@ type
property CurrentPath: String read GetCurrentPath write SetCurrentPath;
property CurrentAddress: String read GetCurrentAddress;
property FileSource: TFileSource read FFileSource write FFileSource;
property PanelSelect: TFilePanelSelect read FPanelSelect write FPanelSelect;
{en
Currently active file.
There should always be at least one file in the view at any time, but
@ -81,6 +85,10 @@ type
Caller is responsible for freeing the list.
}
property SelectedFiles: TFiles read GetSelectedFiles;
property NotebookPage: TCustomPage read GetNotebookPage;
property OnBeforeChangeDirectory : TOnBeforeChangeDirectory read FOnBeforeChangeDirectory write FOnBeforeChangeDirectory;
property OnAfterChangeDirectory : TOnAfterChangeDirectory read FOnAfterChangeDirectory write FOnAfterChangeDirectory;
end;
implementation
@ -102,7 +110,7 @@ begin
FreeAndNil(FMethods);
end;
function TFileView.Clone: TFileView;
function TFileView.Clone(NewParent: TWinControl): TFileView;
begin
raise Exception.Create('Cannot create object of abstract class');
end;
@ -113,10 +121,16 @@ begin
begin
// FFileSource should have been passed to FileView constructor already.
// FMethods are created in FileView constructor.
FileView.FPanelSelect := FPanelSelect;
FileView.OnBeforeChangeDirectory := OnBeforeChangeDirectory;
FileView.OnAfterChangeDirectory := OnAfterChangeDirectory;
end;
end;
function TFileView.GetNotebookPage: TCustomPage;
begin
Result := Parent as TCustomPage;
end;
function TFileView.GetCurrentAddress: String;
begin
Result := IncludeTrailingPathDelimiter(FFileSource.CurrentAddress);

View file

@ -602,13 +602,12 @@ end;
procedure TActs.DoNewTab(Notebook: TFileViewNotebook);
var
PanelSelected: TFilePanelSelect;
NewPage: TFileViewPage;
begin
// Create a new panel in notebook.
{
CreatePanel(AddPage(Notebook), fpLeft/fpRight, ActiveFrame.CurrentPath);
ActiveFrame.SetFocus;
}
NewPage := Notebook.AddPage;
Notebook.ActiveView.Clone(NewPage);
NewPage.MakeActive;
NewPage.UpdateCaption(GetLastDir(ExcludeTrailingPathDelimiter(NewPage.FileView.CurrentPath)));
end;
//------------------------------------------------------
@ -787,41 +786,39 @@ begin
end;
procedure TActs.cm_TargetEqualSource(param:string);
var
NewPage: TFileViewPage;
begin
with FrmMain do
with frmMain do
begin
{
if ActiveFrame.pnlFile.PanelMode = pmArchive then
NotActiveFrame.pnlFile.CurrentPath:= ExtractFilePath(ActiveFrame.pnlFile.VFS.ArcFullName)
else
NotActiveFrame.pnlFile.CurrentPath:= ActiveFrame.pnlFile.CurrentPath;
}
NotActiveNotebook.ActivePage.FileView := nil;
ActiveFrame.Clone(NotActiveNotebook.ActivePage);
NotActiveNotebook.ActivePage.UpdateCaption(GetLastDir(
ExcludeTrailingPathDelimiter(NotActiveNotebook.ActivePage.FileView.CurrentPath)));
end;
end;
procedure TActs.cm_LeftEqualRight(param: string);
var
NewPage: TFileViewPage;
begin
with FrmMain do
with frmMain do
begin
{
if FrameRight.pnlFile.PanelMode = pmArchive then
FrameLeft.pnlFile.CurrentPath:= ExtractFilePath(FrameRight.pnlFile.VFS.ArcFullName)
else
FrameLeft.pnlFile.CurrentPath:= FrameRight.pnlFile.CurrentPath;
}
LeftTabs.ActivePage.FileView := nil;
FrameRight.Clone(LeftTabs.ActivePage);
LeftTabs.ActivePage.UpdateCaption(GetLastDir(ExcludeTrailingPathDelimiter(LeftTabs.ActivePage.FileView.CurrentPath)));
end;
end;
procedure TActs.cm_RightEqualLeft(param: string);
var
NewPage: TFileViewPage;
begin
with FrmMain do
with frmMain do
begin
{
if FrameLeft.pnlFile.PanelMode = pmArchive then
FrameRight.pnlFile.CurrentPath:= ExtractFilePath(FrameLeft.pnlFile.VFS.ArcFullName)
else
FrameRight.pnlFile.CurrentPath:= FrameLeft.pnlFile.CurrentPath;
}
RightTabs.ActivePage.FileView := nil;
FrameLeft.Clone(RightTabs.ActivePage);
RightTabs.ActivePage.UpdateCaption(GetLastDir(ExcludeTrailingPathDelimiter(RightTabs.ActivePage.FileView.CurrentPath)));
end;
end;
@ -1052,70 +1049,26 @@ end;
procedure TActs.cm_NextTab(param: string);
begin
with frmMain do
begin
case SelectedPanel of
fpLeft: begin
if LeftTabs.PageIndex=LeftTabs.PageCount-1 then
LeftTabs.PageIndex:=0
else
LeftTabs.PageIndex:=LeftTabs.PageIndex+1;
end;
fpRight: begin
if RightTabs.PageIndex=RightTabs.PageCount-1 then
RightTabs.PageIndex:=0
else
RightTabs.PageIndex:=RightTabs.PageIndex+1;
end;
end;
ActiveFrame.SetFocus;
end;
frmMain.ActiveNotebook.ActivateNextTab;
end;
procedure TActs.cm_PrevTab(param: string);
begin
with frmMain do
begin
case SelectedPanel of
fpLeft: begin
if LeftTabs.PageIndex=0 then
LeftTabs.PageIndex:=LeftTabs.PageCount-1
else
LeftTabs.PageIndex:=LeftTabs.PageIndex-1;
end;
fpRight: begin
if RightTabs.PageIndex=0 then
RightTabs.PageIndex:=RightTabs.PageCount-1
else
RightTabs.PageIndex:=RightTabs.PageIndex-1;
end;
end;
ActiveFrame.SetFocus;
end;
frmMain.ActiveNotebook.ActivatePrevTab;
end;
procedure TActs.cm_ToggleLockTab(param: string);
var
nbNoteBook: TFileViewNotebook;
PanelSelected: TFilePanelSelect;
begin
with frmMain do
begin
if param = 'LeftTabs' then
PanelSelected:= fpLeft
nbNoteBook := LeftTabs
else if param = 'RightTabs' then
PanelSelected:= fpRight
nbNoteBook := RightTabs
else
PanelSelected:= SelectedPanel;
case PanelSelected of
fpLeft:
nbNoteBook:= LeftTabs;
fpRight:
nbNoteBook:= RightTabs;
end;
nbNoteBook := ActiveNotebook;
DoToggleLockTab(nbNoteBook.ActivePage);
end;
@ -1124,23 +1077,15 @@ end;
procedure TActs.cm_ToggleLockDcaTab(param: string);
var
nbNoteBook: TFileViewNotebook;
PanelSelected: TFilePanelSelect;
begin
with frmMain do
begin
if param = 'LeftTabs' then
PanelSelected:= fpLeft
nbNoteBook := LeftTabs
else if param = 'RightTabs' then
PanelSelected:= fpRight
nbNoteBook := RightTabs
else
PanelSelected:= SelectedPanel;
case PanelSelected of
fpLeft:
nbNoteBook:= LeftTabs;
fpRight:
nbNoteBook:= RightTabs;
end;
nbNoteBook := ActiveNotebook;
DoToggleLockDcaTab(nbNoteBook.ActivePage);
end;

View file

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, Controls, ExtCtrls,
uFileView;
uFileView, uFilePanelSelect;
type
@ -31,6 +31,10 @@ type
Retrieves the file view on this page.
}
function GetFileView: TFileView;
{en
Frees current file view and assigns a new one.
}
procedure SetFileView(aFileView: TFileView);
{en
Retrieves notebook on which this page is.
}
@ -41,9 +45,12 @@ type
public
constructor Create(TheOwner: TComponent); override;
procedure MakeActive;
procedure UpdateCaption(NewCaption: String);
property LockState: TTabLockState read FLockState write SetLockState;
property LockPath: String read FLockPath write FLockPath;
property FileView: TFileView read GetFileView;
property FileView: TFileView read GetFileView write SetFileView;
property Notebook: TFileViewNotebook read GetNotebook;
end;
@ -52,6 +59,8 @@ type
TFileViewNotebook = class(TCustomNotebook)
private
FNotebookSide: TFilePanelSelect;
function GetActivePage: TFileViewPage;
function GetActiveView: TFileView;
function GetFileViewOnPage(Index: Integer): TFileView;
@ -59,17 +68,21 @@ type
procedure SetMultilineTabs(Multiline: Boolean);
procedure CloseTabClickedEvent(Sender: TObject);
public
constructor Create(ParentControl: TWinControl); reintroduce;
constructor Create(ParentControl: TWinControl;
NotebookSide: TFilePanelSelect); reintroduce;
function AddPage: TFileViewPage;
procedure RemovePage(Index: Integer);
procedure RemovePage(var aPage: TFileViewPage);
procedure ActivatePrevTab;
procedure ActivateNextTab;
property ActivePage: TFileViewPage read GetActivePage;
property ActiveView: TFileView read GetActiveView;
property Page[Index: Integer]: TFileViewPage read GetPage;
property View[Index: Integer]: TFileView read GetFileViewOnPage; default;
property Side: TFilePanelSelect read FNotebookSide;
published
property OnMouseDown;
@ -91,6 +104,28 @@ begin
inherited Create(TheOwner);
end;
procedure TFileViewPage.MakeActive;
var
aFileView: TFileView;
begin
Notebook.PageIndex := PageIndex;
aFileView := FileView;
if Assigned(aFileView) then
aFileView.SetFocus;
end;
procedure TFileViewPage.UpdateCaption(NewCaption: String);
begin
if NewCaption <> '' then
begin
if (tb_text_length_limit in gDirTabOptions) and (Length(NewCaption) > gDirTabLimit) then
Caption := Copy(NewCaption, 1, gDirTabLimit) + '...'
else
Caption := NewCaption;
end;
end;
procedure TFileViewPage.UpdateTabLockState;
var
NewCaption: String;
@ -114,6 +149,25 @@ begin
Result := nil;
end;
procedure TFileViewPage.SetFileView(aFileView: TFileView);
var
i: Integer;
aComponent: TComponent;
begin
while ComponentCount > 0 do
begin
aComponent := Components[0];
RemoveComponent(aComponent);
aComponent.Free;
end;
if Assigned(aFileView) then
begin
InsertComponent(aFileView);
aFileView.Parent := Self;
end;
end;
function TFileViewPage.GetNotebook: TFileViewNotebook;
begin
Result := Parent as TFileViewNotebook;
@ -127,7 +181,8 @@ end;
// -- TFileViewNotebook -------------------------------------------------------
constructor TFileViewNotebook.Create(ParentControl: TWinControl);
constructor TFileViewNotebook.Create(ParentControl: TWinControl;
NotebookSide: TFilePanelSelect);
begin
PageClass := TFileViewPage;
inherited Create(ParentControl);
@ -136,10 +191,7 @@ begin
Align := alClient;
TabStop := False;
OnCloseTabClicked := @CloseTabClickedEvent;
OnMouseDown := @frmMain.nbPageMouseDown;
OnMouseUp := @frmMain.nbPageMouseUp;
OnPageChanged := @frmMain.nbPageChanged;
FNotebookSide := NotebookSide;
end;
function TFileViewNotebook.GetActivePage: TFileViewPage;
@ -174,15 +226,6 @@ begin
Result := TFileViewPage(CustomPage(Index));
end;
procedure TFileViewNotebook.CloseTabClickedEvent(Sender: TObject);
begin
with (Sender As TFileViewPage) do
if PageIndex <> -1 then
begin
//RemovePage(Parent as TFileViewNotebook, PageIndex);
end;
end;
procedure TFileViewNotebook.SetMultilineTabs(Multiline: Boolean);
begin
if (nbcMultiline in GetCapabilities) and
@ -211,19 +254,51 @@ end;
function TFileViewNotebook.AddPage: TFileViewPage;
var
x: Integer;
PageNr: Integer;
begin
x := PageCount;
Pages.Add(IntToStr(x));
// if bSetActive then
// ANoteBook.ActivePage := IntToStr(x);
Result := TFileViewPage(CustomPage(x));
PageNr := Pages.Add(IntToStr(PageCount));
Result := GetPage(PageNr);
ShowTabs:= ((PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs;
end;
procedure TFileViewNotebook.RemovePage(Index: Integer);
begin
Pages.Delete(Index);
if (nboMultiLine in Options) and
ClientRectNeedsInterfaceUpdate then
begin
// The height of the tabs (nr of lines) has changed.
// Recalculate size of each page.
InvalidateClientRectCache(False);
ReAlign;
end;
ShowTabs:= ((PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs;
end;
procedure TFileViewNotebook.RemovePage(var aPage: TFileViewPage);
begin
RemovePage(aPage.PageIndex);
aPage := nil;
end;
procedure TFileViewNotebook.ActivatePrevTab;
begin
if PageIndex = PageCount - 1 then
Page[0].MakeActive
else
Page[PageIndex + 1].MakeActive;
end;
procedure TFileViewNotebook.ActivateNextTab;
begin
if PageIndex = 0 then
Page[PageCount - 1].MakeActive
else
Page[PageIndex - 1].MakeActive;
end;
end.