mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 12:18:03 +02:00
IDE: Make component palette selection button toggle the dialog visibility. Issue #28232, patch from Ondrej Pokorny.
git-svn-id: trunk@49253 -
This commit is contained in:
parent
4d9dbbe158
commit
25db164995
@ -352,6 +352,7 @@ begin
|
||||
SetBounds(2,1,16,16);
|
||||
Hint := lisClickToSelectPalettePage;
|
||||
ShowHint := True;
|
||||
OnMouseDown := @MainIDE.SelComponentPageButtonMouseDown;
|
||||
OnClick := @MainIDE.SelComponentPageButtonClick;
|
||||
OnMouseWheel := @Pal.OnPageMouseWheel;
|
||||
Parent := PanelRight;
|
||||
|
@ -9,7 +9,7 @@ object DlgCompPagesPopup: TDlgCompPagesPopup
|
||||
ClientWidth = 293
|
||||
OnDeactivate = FormDeactivate
|
||||
OnShow = FormShow
|
||||
LCLVersion = '1.1'
|
||||
LCLVersion = '1.5'
|
||||
object Panel1: TPanel
|
||||
Left = 0
|
||||
Height = 536
|
||||
|
@ -11,7 +11,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
|
||||
ExtCtrls, Buttons, MainBar, LazarusIDEStrConsts;
|
||||
ExtCtrls, Buttons, MainBar, LazarusIDEStrConsts, LCLIntf, LMessages;
|
||||
|
||||
type
|
||||
|
||||
@ -29,11 +29,20 @@ type
|
||||
procedure TreeView1Click(Sender: TObject);
|
||||
private
|
||||
fGroups: TStringList; // Objects have group TreeNodes
|
||||
fLastCloseUp: QWord;
|
||||
fLastCanShowCheck: Boolean;
|
||||
procedure FindGroups;
|
||||
procedure BuildTreeItem(aPageCapt: string);
|
||||
procedure BuildList;
|
||||
protected
|
||||
procedure WMActivate(var Message : TLMActivate); message LM_ACTIVATE;
|
||||
|
||||
procedure DoCreate; override;
|
||||
procedure DoClose(var CloseAction: TCloseAction); override;
|
||||
public
|
||||
procedure FixBounds;
|
||||
procedure CanShowCheck;
|
||||
property LastCanShowCheck: Boolean read fLastCanShowCheck;
|
||||
end;
|
||||
|
||||
var
|
||||
@ -72,6 +81,21 @@ begin
|
||||
Close;
|
||||
end;
|
||||
|
||||
procedure TDlgCompPagesPopup.DoClose(var CloseAction: TCloseAction);
|
||||
begin
|
||||
inherited DoClose(CloseAction);
|
||||
|
||||
if CloseAction = caHide then
|
||||
fLastCloseUp := GetTickCount64;
|
||||
end;
|
||||
|
||||
procedure TDlgCompPagesPopup.DoCreate;
|
||||
begin
|
||||
inherited DoCreate;
|
||||
|
||||
fLastCanShowCheck := True;
|
||||
end;
|
||||
|
||||
procedure TDlgCompPagesPopup.FixBounds;
|
||||
begin
|
||||
if (self.Height+100)>screen.Height then
|
||||
@ -102,6 +126,17 @@ begin
|
||||
Close;
|
||||
end;
|
||||
|
||||
procedure TDlgCompPagesPopup.WMActivate(var Message: TLMActivate);
|
||||
begin
|
||||
{$IFDEF LCLWin32}
|
||||
//activate the mainform to simulate a true popup-window (works only on Windows)
|
||||
if Assigned(PopupParent) and PopupParent.HandleAllocated then
|
||||
SendMessage(PopupParent.Handle, LM_NCACTIVATE, Ord(Message.Active <> WA_INACTIVE), 0);
|
||||
{$ENDIF}
|
||||
|
||||
inherited WMActivate(Message);
|
||||
end;
|
||||
|
||||
procedure TDlgCompPagesPopup.FindGroups;
|
||||
// Find groups. Page names with many words are grouped by the first word.
|
||||
var
|
||||
@ -153,6 +188,11 @@ begin
|
||||
ItemNode.SelectedIndex:=0;
|
||||
end;
|
||||
|
||||
procedure TDlgCompPagesPopup.CanShowCheck;
|
||||
begin
|
||||
fLastCanShowCheck := not Visible and (GetTickCount64 > fLastCloseUp + 100);
|
||||
end;
|
||||
|
||||
procedure TDlgCompPagesPopup.BuildList;
|
||||
var
|
||||
i: integer;
|
||||
@ -174,8 +214,8 @@ begin
|
||||
end;
|
||||
TreeView1.EndUpdate;
|
||||
TreeView1.FullExpand;
|
||||
Panel2.Caption:=Format(lisTotalPages, [IntToStr(MainIDEBar.
|
||||
ComponentPageControl.PageCount)]);
|
||||
Panel2.Caption:=Format(lisTotalPages,
|
||||
[IntToStr(MainIDEBar.ComponentPageControl.PageCount)]);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
23
ide/main.pp
23
ide/main.pp
@ -435,6 +435,8 @@ type
|
||||
// ComponentPalette events
|
||||
procedure ComponentPaletteClassSelected(Sender: TObject);
|
||||
// Copied from CodeTyphon
|
||||
procedure SelComponentPageButtonMouseDown(Sender: TObject;
|
||||
{%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); override;
|
||||
procedure SelComponentPageButtonClick(Sender: TObject); override;
|
||||
|
||||
// SourceNotebook events
|
||||
@ -5062,21 +5064,28 @@ end;
|
||||
procedure TMainIDE.SelComponentPageButtonClick(Sender: TObject);
|
||||
var
|
||||
zPos: TPoint;
|
||||
btn: TGraphicControl;
|
||||
btn: TControl;
|
||||
begin
|
||||
btn := Sender as TGraphicControl;
|
||||
zPos:=point(btn.Width,btn.Height);
|
||||
btn := Sender as TControl;
|
||||
zPos:=point(btn.Width div 2,btn.Height);
|
||||
zPos:=btn.ClientToScreen(zPos);
|
||||
if DlgCompPagesPopup=nil then
|
||||
Application.CreateForm(TDlgCompPagesPopup, DlgCompPagesPopup);
|
||||
if not DlgCompPagesPopup.Visible then
|
||||
if DlgCompPagesPopup.LastCanShowCheck then
|
||||
begin
|
||||
DlgCompPagesPopup.Left:=zPos.x-(DlgCompPagesPopup.Width div 2);
|
||||
DlgCompPagesPopup.Top:=zPos.y-5;
|
||||
DlgCompPagesPopup.Top:=zPos.y;
|
||||
DlgCompPagesPopup.FixBounds;
|
||||
DlgCompPagesPopup.PopupParent := GetParentForm(btn);
|
||||
DlgCompPagesPopup.Show;
|
||||
end else
|
||||
DlgCompPagesPopup.Close;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.SelComponentPageButtonMouseDown(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
if DlgCompPagesPopup<>nil then
|
||||
DlgCompPagesPopup.CanShowCheck;//do the check in OnMouseDown
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEnvCodeTemplatesClicked(Sender: TObject);
|
||||
|
@ -189,6 +189,8 @@ type
|
||||
procedure FindInFilesPerDialog(AProject: TProject); override;
|
||||
procedure FindInFiles(AProject: TProject; const FindText: string); override;
|
||||
|
||||
procedure SelComponentPageButtonMouseDown(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; abstract;
|
||||
procedure SelComponentPageButtonClick(Sender: TObject); virtual; abstract;
|
||||
public
|
||||
property ToolStatus: TIDEToolStatus read FToolStatus write SetToolStatus;
|
||||
|
Loading…
Reference in New Issue
Block a user