mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 12:19:16 +02:00
IDE, SourceEditor: Improved drag/drop tabs
git-svn-id: trunk@22431 -
This commit is contained in:
parent
55a336b95f
commit
fd0f2898d5
@ -537,6 +537,9 @@ type
|
|||||||
FSourceEditorList: TList; // list of TSourceEditor
|
FSourceEditorList: TList; // list of TSourceEditor
|
||||||
FOnPopupMenu: TSrcEditPopupMenuEvent;
|
FOnPopupMenu: TSrcEditPopupMenuEvent;
|
||||||
FMouseDownTabIndex: Integer;
|
FMouseDownTabIndex: Integer;
|
||||||
|
FMouseWaitForDrag: Boolean;
|
||||||
|
FMouseDownX: integer;
|
||||||
|
FMouseDownY: integer;
|
||||||
private
|
private
|
||||||
// colors for the completion form (popup form, e.g. word completion)
|
// colors for the completion form (popup form, e.g. word completion)
|
||||||
FActiveEditDefaultFGColor: TColor;
|
FActiveEditDefaultFGColor: TColor;
|
||||||
@ -626,8 +629,12 @@ type
|
|||||||
|
|
||||||
procedure NotebookMouseDown(Sender: TObject; Button: TMouseButton;
|
procedure NotebookMouseDown(Sender: TObject; Button: TMouseButton;
|
||||||
Shift: TShiftState; X,Y: Integer);
|
Shift: TShiftState; X,Y: Integer);
|
||||||
|
procedure NotebookMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
|
||||||
procedure NotebookMouseUp(Sender: TObject; Button: TMouseButton;
|
procedure NotebookMouseUp(Sender: TObject; Button: TMouseButton;
|
||||||
Shift: TShiftState; X,Y: Integer);
|
Shift: TShiftState; X,Y: Integer);
|
||||||
|
procedure NotebookDragOver(Sender: TObject; Source: TObject; X, Y: Integer;
|
||||||
|
State: TDragState; var Accept: Boolean);
|
||||||
|
procedure NotebookDragDrop(Sender: TObject; Source: TObject; X, Y: Integer);
|
||||||
|
|
||||||
// hintwindow stuff
|
// hintwindow stuff
|
||||||
procedure HintTimer(Sender: TObject);
|
procedure HintTimer(Sender: TObject);
|
||||||
@ -3378,6 +3385,8 @@ begin
|
|||||||
Caption := locWndSrcEditor;
|
Caption := locWndSrcEditor;
|
||||||
KeyPreview:=true;
|
KeyPreview:=true;
|
||||||
FProcessingCommand := false;
|
FProcessingCommand := false;
|
||||||
|
FMouseDownTabIndex := -1;
|
||||||
|
FMouseWaitForDrag := False;
|
||||||
|
|
||||||
SourceEditorWindow:=Self;
|
SourceEditorWindow:=Self;
|
||||||
|
|
||||||
@ -4237,7 +4246,10 @@ Begin
|
|||||||
OnPageChanged := @NotebookPageChanged;
|
OnPageChanged := @NotebookPageChanged;
|
||||||
OnCloseTabClicked:=@CloseTabClicked;
|
OnCloseTabClicked:=@CloseTabClicked;
|
||||||
OnMouseDown:=@NotebookMouseDown;
|
OnMouseDown:=@NotebookMouseDown;
|
||||||
|
OnMouseMove := @NotebookMouseMove;
|
||||||
OnMouseUp:=@NotebookMouseUp;
|
OnMouseUp:=@NotebookMouseUp;
|
||||||
|
OnDragOver := @NotebookDragOver;
|
||||||
|
OnDragDrop := @NotebookDragDrop;
|
||||||
ShowHint:=true;
|
ShowHint:=true;
|
||||||
OnShowHint:=@NotebookShowTabHint;
|
OnShowHint:=@NotebookShowTabHint;
|
||||||
{$IFDEF IDE_DEBUG}
|
{$IFDEF IDE_DEBUG}
|
||||||
@ -6450,17 +6462,20 @@ begin
|
|||||||
Result:=nil;
|
Result:=nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSourceNotebook.NotebookMouseDown(Sender: TObject;
|
procedure TSourceNotebook.NotebookMouseDown(Sender: TObject; Button: TMouseButton;
|
||||||
Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
|
Shift: TShiftState; X, Y: Integer);
|
||||||
var
|
var
|
||||||
TabIndex: Integer;
|
TabIndex: Integer;
|
||||||
begin
|
begin
|
||||||
TabIndex:=Notebook.TabIndexAtClientPos(Point(X,Y));
|
TabIndex:=Notebook.TabIndexAtClientPos(Point(X,Y));
|
||||||
FMouseDownTabIndex:=-1;
|
FMouseDownTabIndex:=-1;
|
||||||
|
FMouseWaitForDrag := False;
|
||||||
|
FMouseDownX := X;
|
||||||
|
FMouseDownY := Y;
|
||||||
case Button of
|
case Button of
|
||||||
mbLeft: begin
|
mbLeft: begin
|
||||||
FMouseDownTabIndex:=TabIndex;
|
FMouseDownTabIndex:=TabIndex;
|
||||||
Cursor:=crDrag;
|
FMouseWaitForDrag := True;
|
||||||
end;
|
end;
|
||||||
mbMiddle: begin
|
mbMiddle: begin
|
||||||
if TabIndex>=0 then
|
if TabIndex>=0 then
|
||||||
@ -6469,19 +6484,47 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSourceNotebook.NotebookMouseUp(Sender: TObject;
|
procedure TSourceNotebook.NotebookMouseMove(Sender: TObject; Shift: TShiftState;
|
||||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
X, Y: Integer);
|
||||||
|
begin
|
||||||
|
if (FMouseWaitForDrag) and
|
||||||
|
( (Abs(fMouseDownX - X) >= GetSystemMetrics(SM_CXDRAG)) or
|
||||||
|
(Abs(fMouseDownY - Y) >= GetSystemMetrics(SM_CYDRAG)) )
|
||||||
|
then begin
|
||||||
|
FMouseWaitForDrag := False;
|
||||||
|
BeginDrag(true);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSourceNotebook.NotebookMouseUp(Sender: TObject; Button: TMouseButton;
|
||||||
|
Shift: TShiftState; X, Y: Integer);
|
||||||
|
begin
|
||||||
|
FMouseWaitForDrag := False;
|
||||||
|
FMouseDownTabIndex:=-1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSourceNotebook.NotebookDragOver(Sender: TObject; Source: TObject;
|
||||||
|
X, Y: Integer; State: TDragState; var Accept: Boolean);
|
||||||
var
|
var
|
||||||
TabIndex: Integer;
|
TabIndex: Integer;
|
||||||
begin
|
begin
|
||||||
TabIndex:=Notebook.TabIndexAtClientPos(Point(X,Y));
|
TabIndex:=Notebook.TabIndexAtClientPos(Point(X,Y));
|
||||||
if
|
if (Source = self) then
|
||||||
(Button=mbLeft) and (FMouseDownTabIndex>=0) and (TabIndex>=0) and
|
Accept := (TabIndex >= 0) and (TabIndex <> FMouseDownTabIndex);
|
||||||
(TabIndex<>FMouseDownTabIndex)
|
end;
|
||||||
then
|
|
||||||
MoveEditor(FMouseDownTabIndex,TabIndex);
|
procedure TSourceNotebook.NotebookDragDrop(Sender: TObject; Source: TObject;
|
||||||
|
X, Y: Integer);
|
||||||
|
var
|
||||||
|
TabIndex: Integer;
|
||||||
|
begin
|
||||||
|
if (Source = self) then begin
|
||||||
|
TabIndex := Notebook.TabIndexAtClientPos(Point(X,Y));
|
||||||
|
if (FMouseDownTabIndex>=0) and (TabIndex>=0) and (TabIndex<>FMouseDownTabIndex)
|
||||||
|
then
|
||||||
|
MoveEditor(FMouseDownTabIndex,TabIndex);
|
||||||
|
end;
|
||||||
FMouseDownTabIndex:=-1;
|
FMouseDownTabIndex:=-1;
|
||||||
Cursor:=crDefault;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure TSourceNotebook.NotebookPageChanged(Sender: TObject);
|
Procedure TSourceNotebook.NotebookPageChanged(Sender: TObject);
|
||||||
|
Loading…
Reference in New Issue
Block a user