IDE: drop files: form events instead of application

git-svn-id: trunk@45558 -
This commit is contained in:
mattias 2014-06-16 22:17:26 +00:00
parent e602528f78
commit 3b62c88f2c
7 changed files with 89 additions and 72 deletions

View File

@ -248,6 +248,8 @@ type
function DoOpenComponent(const UnitFilename: string; OpenFlags: TOpenFlags; function DoOpenComponent(const UnitFilename: string; OpenFlags: TOpenFlags;
CloseFlags: TCloseFlags; CloseFlags: TCloseFlags;
out Component: TComponent): TModalResult; virtual; abstract; out Component: TComponent): TModalResult; virtual; abstract;
procedure DoDropFiles(Sender: TObject; const FileNames: array of String;
WindowIndex: integer = -1); virtual; abstract;
// project // project
property ActiveProject: TLazProject read GetActiveProject; property ActiveProject: TLazProject read GetActiveProject;

View File

@ -185,7 +185,6 @@ type
procedure OnApplicationActivate(Sender: TObject); procedure OnApplicationActivate(Sender: TObject);
procedure OnApplicationDeActivate(Sender: TObject); procedure OnApplicationDeActivate(Sender: TObject);
procedure OnApplicationKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure OnApplicationKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure OnApplicationDropFiles(Sender: TObject; const FileNames: array of String);
procedure OnApplicationQueryEndSession(var Cancel: Boolean); procedure OnApplicationQueryEndSession(var Cancel: Boolean);
procedure OnApplicationEndSession(Sender: TObject); procedure OnApplicationEndSession(Sender: TObject);
procedure OnScreenChangedForm(Sender: TObject; Form: TCustomForm); procedure OnScreenChangedForm(Sender: TObject; Form: TCustomForm);
@ -768,6 +767,8 @@ type
function DoOpenEditorFile(AFileName:string; PageIndex, WindowIndex: integer; function DoOpenEditorFile(AFileName:string; PageIndex, WindowIndex: integer;
AEditorInfo: TUnitEditorInfo; AEditorInfo: TUnitEditorInfo;
Flags: TOpenFlags): TModalResult; Flags: TOpenFlags): TModalResult;
procedure DoDropFiles(Sender: TObject; const FileNames: array of String;
WindowIndex: integer=-1); override;
function DoOpenFileAndJumpToIdentifier(const AFilename, AnIdentifier: string; function DoOpenFileAndJumpToIdentifier(const AFilename, AnIdentifier: string;
PageIndex: integer; Flags: TOpenFlags): TModalResult; override; PageIndex: integer; Flags: TOpenFlags): TModalResult; override;
@ -1607,7 +1608,6 @@ begin
Application.AddOnActivateHandler(@OnApplicationActivate); Application.AddOnActivateHandler(@OnApplicationActivate);
Application.AddOnDeActivateHandler(@OnApplicationDeActivate); Application.AddOnDeActivateHandler(@OnApplicationDeActivate);
Application.AddOnKeyDownHandler(@OnApplicationKeyDown); Application.AddOnKeyDownHandler(@OnApplicationKeyDown);
Application.AddOnDropFilesHandler(@OnApplicationDropFiles);
Application.AddOnQueryEndSessionHandler(@OnApplicationQueryEndSession); Application.AddOnQueryEndSessionHandler(@OnApplicationQueryEndSession);
Application.AddOnEndSessionHandler(@OnApplicationEndSession); Application.AddOnEndSessionHandler(@OnApplicationEndSession);
Screen.AddHandlerRemoveForm(@OnScreenRemoveForm); Screen.AddHandlerRemoveForm(@OnScreenRemoveForm);
@ -5708,6 +5708,32 @@ begin
Result:=SourceFileMgr.OpenEditorFile(AFileName, PageIndex, WindowIndex, AEditorInfo, Flags); Result:=SourceFileMgr.OpenEditorFile(AFileName, PageIndex, WindowIndex, AEditorInfo, Flags);
end; end;
procedure TMainIDE.DoDropFiles(Sender: TObject;
const FileNames: array of String; WindowIndex: integer);
var
OpenFlags: TOpenFlags;
I: Integer;
AFilename: String;
begin
//debugln(['TMainIDE.DoDropFiles ',length(Filenames)]);
if Length(FileNames) = 0 then exit;
OpenFlags := [ofAddToRecent];
if Length(FileNames) > 1 then
OpenFlags := OpenFlags + [ofRegularFile,ofMultiOpen];
SourceEditorManager.IncUpdateLock;
try
for I := 0 to High(FileNames) do
begin
AFilename := CleanAndExpandFilename(FileNames[I]);
if LazarusIDE.DoOpenEditorFile(AFilename, -1, WindowIndex, OpenFlags) = mrAbort then
Break;
end;
finally
SourceEditorManager.DecUpdateLock;
end;
SetRecentFilesMenu;
end;
function TMainIDE.DoSelectFrame: TComponentClass; function TMainIDE.DoSelectFrame: TComponentClass;
var var
UnitList: TStringList; UnitList: TStringList;
@ -11824,39 +11850,6 @@ begin
end; end;
end; end;
procedure TMainIDE.OnApplicationDropFiles(Sender: TObject; const FileNames: array of String);
var
OpenFlags: TOpenFlags;
I: Integer;
AFilename: String;
begin
//debugln('TMainIDE.OnApplicationDropFiles FileNames=', dbgs(Length(FileNames)));
if Length(FileNames) > 0 then
begin
OpenFlags := [ofAddToRecent];
if Length(FileNames) > 1 then
Include(OpenFlags, ofRegularFile);
try
SourceEditorManager.IncUpdateLock;
for I := 0 to High(FileNames) do
begin
AFilename := CleanAndExpandFilename(FileNames[I]);
if I < High(FileNames) then
Include(OpenFlags, ofMultiOpen)
else
Exclude(OpenFlags, ofMultiOpen);
if DoOpenEditorFile(AFilename, -1, -1, OpenFlags) = mrAbort then Break;
end;
finally
SourceEditorManager.DecUpdateLock;
end;
SetRecentFilesMenu;
SaveEnvironment;
end;
end;
procedure TMainIDE.OnApplicationQueryEndSession(var Cancel: Boolean); procedure TMainIDE.OnApplicationQueryEndSession(var Cancel: Boolean);
begin begin
Cancel := False; Cancel := False;

View File

@ -41,7 +41,7 @@ uses
Classes, SysUtils, LCLProc, Forms, Controls, Buttons, Menus, Classes, SysUtils, LCLProc, Forms, Controls, Buttons, Menus,
ComCtrls, ExtCtrls, Dialogs, LMessages, ComCtrls, ExtCtrls, Dialogs, LMessages,
// IDEIntf // IDEIntf
ProjectIntf, NewItemIntf, MenuIntf, LazIDEIntf, ProjectIntf, NewItemIntf, MenuIntf, LazIDEIntf, SrcEditorIntf,
EnvironmentOpts, LazarusIDEStrConsts; EnvironmentOpts, LazarusIDEStrConsts;
type type
@ -373,6 +373,8 @@ type
// component palette // component palette
ComponentPageControl: TPageControl; ComponentPageControl: TPageControl;
GlobalMouseSpeedButton: TSpeedButton; GlobalMouseSpeedButton: TSpeedButton;
procedure MainIDEBarDropFiles(Sender: TObject;
const FileNames: array of String);
private private
FOldWindowState: TWindowState; FOldWindowState: TWindowState;
FOnActive: TNotifyEvent; FOnActive: TNotifyEvent;
@ -397,6 +399,12 @@ implementation
{ TMainIDEBar } { TMainIDEBar }
procedure TMainIDEBar.MainIDEBarDropFiles(Sender: TObject;
const FileNames: array of String);
begin
LazarusIDE.DoDropFiles(Sender,FileNames);
end;
procedure TMainIDEBar.NewUFDefaultClick(Sender: TObject); procedure TMainIDEBar.NewUFDefaultClick(Sender: TObject);
var var
Category: TNewIDEItemCategory; Category: TNewIDEItemCategory;
@ -485,6 +493,8 @@ constructor TMainIDEBar.Create(TheOwner: TComponent);
begin begin
// This form has no resource => must be constructed using CreateNew // This form has no resource => must be constructed using CreateNew
inherited CreateNew(TheOwner, 1); inherited CreateNew(TheOwner, 1);
AllowDropFiles:=true;
OnDropFiles:=@MainIDEBarDropFiles;
end; end;
procedure TMainIDEBar.HideIDE; procedure TMainIDEBar.HideIDE;

View File

@ -610,12 +610,40 @@ type
TSourceNotebook = class(TSourceEditorWindowInterface) TSourceNotebook = class(TSourceEditorWindowInterface)
StatusBar: TStatusBar; StatusBar: TStatusBar;
procedure CompleteCodeMenuItemClick(Sender: TObject);
procedure DbgPopUpMenuPopup(Sender: TObject);
procedure EditorLockClicked(Sender: TObject);
procedure EncodingClicked(Sender: TObject);
procedure ExtractProcMenuItemClick(Sender: TObject);
procedure FindOverloadsMenuItemClick(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton; procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
procedure HighlighterClicked(Sender: TObject);
procedure InsertCharacter(const C: TUTF8Char);
procedure InvertAssignmentMenuItemClick(Sender: TObject);
procedure LineEndingClicked(Sender: TObject);
procedure MakeResourceStringMenuItemClick(Sender: TObject);
procedure NotebookPageChanged(Sender: TObject);
procedure NotebookShowTabHint(Sender: TObject; HintInfo: PHintInfo);
procedure OnPopupMenuOpenFile(Sender: TObject);
procedure OnPopupOpenPackageFile(Sender: TObject);
procedure OnPopupOpenProjectInsp(Sender: TObject);
procedure OpenAtCursorClicked(Sender: TObject);
procedure RenameIdentifierMenuItemClick(Sender: TObject);
procedure ShowAbstractMethodsMenuItemClick(Sender: TObject);
procedure ShowEmptyMethodsMenuItemClick(Sender: TObject);
procedure ShowUnusedUnitsMenuItemClick(Sender: TObject);
procedure SourceNotebookDropFiles(Sender: TObject;
const FileNames: array of String);
procedure SrcEditMenuCopyToExistingWindowClicked(Sender: TObject);
procedure SrcEditMenuFindInWindowClicked(Sender: TObject);
procedure SrcEditMenuMoveToExistingWindowClicked(Sender: TObject);
procedure SrcPopUpMenuPopup(Sender: TObject);
procedure StatusBarClick(Sender: TObject); procedure StatusBarClick(Sender: TObject);
procedure StatusBarDblClick(Sender: TObject); procedure StatusBarDblClick(Sender: TObject);
procedure StatusBarDrawPanel(AStatusBar: TStatusBar; APanel: TStatusPanel; procedure StatusBarDrawPanel(AStatusBar: TStatusBar; APanel: TStatusPanel;
const ARect: TRect); const ARect: TRect);
procedure TabPopUpMenuPopup(Sender: TObject);
private private
FNotebook: TExtendedNotebook; FNotebook: TExtendedNotebook;
FBaseCaption: String; FBaseCaption: String;
@ -624,33 +652,6 @@ type
TabPopUpMenu, SrcPopUpMenu, DbgPopUpMenu: TPopupMenu; TabPopUpMenu, SrcPopUpMenu, DbgPopUpMenu: TPopupMenu;
procedure ApplyPageIndex; procedure ApplyPageIndex;
procedure ExecuteEditorItemClick(Sender: TObject); procedure ExecuteEditorItemClick(Sender: TObject);
protected
procedure CompleteCodeMenuItemClick(Sender: TObject);
procedure ExtractProcMenuItemClick(Sender: TObject);
procedure InvertAssignmentMenuItemClick(Sender: TObject);
procedure RenameIdentifierMenuItemClick(Sender: TObject);
procedure ShowAbstractMethodsMenuItemClick(Sender: TObject);
procedure ShowEmptyMethodsMenuItemClick(Sender: TObject);
procedure ShowUnusedUnitsMenuItemClick(Sender: TObject);
procedure FindOverloadsMenuItemClick(Sender: TObject);
procedure MakeResourceStringMenuItemClick(Sender: TObject);
procedure LineEndingClicked(Sender: TObject);
procedure EncodingClicked(Sender: TObject);
procedure HighlighterClicked(Sender: TObject);
procedure NotebookPageChanged(Sender: TObject);
procedure NotebookShowTabHint(Sender: TObject; HintInfo: PHintInfo);
procedure OpenAtCursorClicked(Sender: TObject);
procedure OnPopupMenuOpenFile(Sender: TObject);
procedure OnPopupOpenPackageFile(Sender: TObject);
procedure OnPopupOpenProjectInsp(Sender: TObject);
procedure TabPopUpMenuPopup(Sender: TObject);
procedure SrcPopUpMenuPopup(Sender: TObject);
procedure DbgPopUpMenuPopup(Sender: TObject);
procedure InsertCharacter(const C: TUTF8Char);
procedure SrcEditMenuCopyToExistingWindowClicked(Sender: TObject);
procedure SrcEditMenuMoveToExistingWindowClicked(Sender: TObject);
procedure SrcEditMenuFindInWindowClicked(Sender: TObject);
procedure EditorLockClicked(Sender: TObject);
public public
procedure DeleteBreakpointClicked(Sender: TObject); procedure DeleteBreakpointClicked(Sender: TObject);
procedure ToggleBreakpointClicked(Sender: TObject); procedure ToggleBreakpointClicked(Sender: TObject);
@ -1130,7 +1131,6 @@ type
private private
FCodeTemplateModul: TSynEditAutoComplete; FCodeTemplateModul: TSynEditAutoComplete;
FGotoDialog: TfrmGoto; FGotoDialog: TfrmGoto;
procedure OnFilesDroping(Sender: TObject; const FileNames: Array of String);
procedure OnCodeTemplateTokenNotFound(Sender: TObject; AToken: string; procedure OnCodeTemplateTokenNotFound(Sender: TObject; AToken: string;
AnEditor: TCustomSynEdit; var Index:integer); AnEditor: TCustomSynEdit; var Index:integer);
procedure OnCodeTemplateExecuteCompletion( procedure OnCodeTemplateExecuteCompletion(
@ -5814,6 +5814,9 @@ begin
FHistoryList := TFPList.Create; FHistoryList := TFPList.Create;
FSrcEditsSortedForFilenames := TAvgLvlTree.Create(@CompareSrcEditIntfWithFilename); FSrcEditsSortedForFilenames := TAvgLvlTree.Create(@CompareSrcEditIntfWithFilename);
OnDropFiles:=@SourceNotebookDropFiles;
AllowDropFiles:=true;
// popup menu // popup menu
BuildPopupMenu; BuildPopupMenu;
@ -7659,6 +7662,13 @@ begin
MainIDEInterface.DoCommand(ecRemoveUnusedUnits); MainIDEInterface.DoCommand(ecRemoveUnusedUnits);
end; end;
procedure TSourceNotebook.SourceNotebookDropFiles(Sender: TObject;
const FileNames: array of String);
begin
FManager.ActiveSourceWindow := Self;
LazarusIDE.DoDropFiles(Sender,Filenames,WindowID);
end;
procedure TSourceNotebook.FindOverloadsMenuItemClick(Sender: TObject); procedure TSourceNotebook.FindOverloadsMenuItemClick(Sender: TObject);
begin begin
MainIDEInterface.DoCommand(ecFindOverloads); MainIDEInterface.DoCommand(ecFindOverloads);
@ -10260,13 +10270,6 @@ begin
end; end;
end; end;
procedure TSourceEditorManager.OnFilesDroping(Sender: TObject;
const FileNames: array of String);
begin
if Sender is TSourceNotebook then
ActiveSourceWindow := TSourceNotebook(Sender);
end;
procedure TSourceEditorManager.OnCodeTemplateTokenNotFound(Sender: TObject; procedure TSourceEditorManager.OnCodeTemplateTokenNotFound(Sender: TObject;
AToken: string; AnEditor: TCustomSynEdit; var Index: integer); AToken: string; AnEditor: TCustomSynEdit; var Index: integer);
begin begin
@ -10553,7 +10556,6 @@ begin
Result.Create(Self, AnID) Result.Create(Self, AnID)
else else
Result.Create(Self); Result.Create(Self);
Result.OnDropFiles := @OnFilesDroping;
for i := 1 to FUpdateLock do for i := 1 to FUpdateLock do
Result.IncUpdateLockInternal; Result.IncUpdateLockInternal;

View File

@ -2535,6 +2535,7 @@ end;
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
procedure TCustomForm.IntfDropFiles(const FileNames: array of String); procedure TCustomForm.IntfDropFiles(const FileNames: array of String);
begin begin
//debugln(['TCustomForm.IntfDropFiles ',DbgSName(Self)]);
if Assigned(FOnDropFiles) then FOnDropFiles(Self, FileNames); if Assigned(FOnDropFiles) then FOnDropFiles(Self, FileNames);
end; end;

View File

@ -3,6 +3,7 @@ object PackageEditorForm: TPackageEditorForm
Height = 455 Height = 455
Top = 248 Top = 248
Width = 464 Width = 464
AllowDropFiles = True
Caption = 'PackageEditorForm' Caption = 'PackageEditorForm'
ClientHeight = 455 ClientHeight = 455
ClientWidth = 464 ClientWidth = 464
@ -13,6 +14,7 @@ object PackageEditorForm: TPackageEditorForm
OnCloseQuery = PackageEditorFormCloseQuery OnCloseQuery = PackageEditorFormCloseQuery
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnDropFiles = FormDropFiles
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '1.3' LCLVersion = '1.3'
object ToolBar: TToolBar object ToolBar: TToolBar

View File

@ -222,6 +222,7 @@ type
procedure ExpandDirectoryMenuItemClick(Sender: TObject); procedure ExpandDirectoryMenuItemClick(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
procedure ItemsPopupMenuPopup(Sender: TObject); procedure ItemsPopupMenuPopup(Sender: TObject);
procedure ItemsTreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView; procedure ItemsTreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
@ -1355,6 +1356,12 @@ begin
FreeAndNil(FPlugins); FreeAndNil(FPlugins);
end; end;
procedure TPackageEditorForm.FormDropFiles(Sender: TObject;
const FileNames: array of String);
begin
debugln(['TPackageEditorForm.FormDropFiles ',length(FileNames)]);
end;
procedure TPackageEditorForm.RevertClick(Sender: TObject); procedure TPackageEditorForm.RevertClick(Sender: TObject);
begin begin
DoRevert; DoRevert;