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:
juha 2015-06-03 16:42:32 +00:00
parent 4d9dbbe158
commit 25db164995
5 changed files with 63 additions and 11 deletions

View File

@ -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;

View File

@ -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

View File

@ -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.

View File

@ -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);

View File

@ -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;