set application hint when user selects menu items:

- TMenuItem.IntfDoSelect
- win32, qt, gtk2 implementation

git-svn-id: trunk@15002 -
This commit is contained in:
paul 2008-04-29 07:06:44 +00:00
parent 971f1f253f
commit 30d1e0adcc
5 changed files with 59 additions and 4 deletions

View File

@ -263,6 +263,11 @@ begin
DesignerMenuItemClick(Self);
end;
procedure TMenuItem.IntfDoSelect;
begin
Application.Hint := GetLongHint(Hint);
end;
{------------------------------------------------------------------------------
Function: TMenuItem.GetChildren
Params: Proc - proc to be called for each child
@ -274,7 +279,7 @@ end;
procedure TMenuItem.GetChildren(Proc: TGetChildProc; Root: TComponent);
var
i : Integer;
Begin
begin
if not assigned (FItems) then exit;
for i := 0 to FItems.Count - 1 do

View File

@ -39,6 +39,7 @@ type
TGtk2WSMenuItem = class(TWSMenuItem)
private
protected
class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo);
public
class procedure AttachMenu(const AMenuItem: TMenuItem); override;
class function CreateHandle(const AMenuItem: TMenuItem): HMENU; override;
@ -83,8 +84,32 @@ implementation
{$I gtkdefines.inc}
function Gtk2MenuItemSelect(item: Pointer; AMenuItem: TMenuItem): GBoolean; cdecl;
begin
AMenuItem.IntfDoSelect;
Result := CallBackDefaultReturn;
end;
function Gtk2MenuItemDeselect(item: Pointer; AMenuItem: TMenuItem): GBoolean; cdecl;
begin
Application.Hint := '';
Result := CallBackDefaultReturn;
end;
{ TGtk2WSMenuItem }
class procedure TGtk2WSMenuItem.SetCallbacks(const AGtkWidget: PGtkWidget;
const AWidgetInfo: PWidgetInfo);
begin
// connect activate signal (i.e. clicked)
g_signal_connect(PGTKObject(AGtkWidget), 'activate',
TGTKSignalFunc(@gtkactivateCB), AWidgetInfo^.LCLObject);
g_signal_connect(PGTKObject(AGtkWidget), 'select',
TGTKSignalFunc(@Gtk2MenuItemSelect), AWidgetInfo^.LCLObject);
g_signal_connect(PGTKObject(AGtkWidget), 'deselect',
TGTKSignalFunc(@Gtk2MenuItemDeselect), AWidgetInfo^.LCLObject);
end;
class procedure TGtk2WSMenuItem.AttachMenu(const AMenuItem: TMenuItem);
var
//AccelKey: Integer;
@ -197,9 +222,7 @@ begin
// create the hbox containing the label and the icon
UpdateInnerMenuItem(AMenuItem, Widget);
// connect activate signal (i.e. clicked)
g_signal_connect(PGTKObject(Widget), 'activate',
TGTKSignalFunc(@gtkactivateCB), AMenuItem);
SetCallbacks(Widget, WidgetInfo);
gtk_widget_show(Widget);
{$IFDEF DebugLCLComponents}

View File

@ -922,6 +922,7 @@ type
private
FIcon: QIconH;
FTriggeredHook: QAction_hookH;
FHoveredHook: QAction_hookH;
FAboutToHideHook: QMenu_hookH;
FActionHandle: QActionH;
FMenuItem: TMenuItem;
@ -936,6 +937,7 @@ type
procedure AttachEvents; override;
procedure DetachEvents; override;
procedure SlotHovered; cdecl;
procedure SlotAboutToHide; cdecl;
procedure SlotDestroy; cdecl;
procedure SlotTriggered(checked: Boolean = False); cdecl;
@ -6587,6 +6589,7 @@ var
Method: TMethod;
begin
FTriggeredHook := QAction_hook_create(ActionHandle);
FHoveredHook := QAction_hook_create(ActionHandle);
FAboutToHideHook := QMenu_hook_create(Widget);
FEventHook := QObject_hook_create(Widget);
@ -6594,6 +6597,9 @@ begin
QAction_hook_hook_triggered(FTriggeredHook, Method);
TEventFilterMethod(Method) := @EventFilter;
QAction_hovered_Event(Method) := @SlotHovered;
QAction_hook_hook_hovered(FHoveredHook, Method);
QMenu_aboutToHide_Event(Method) := @SlotAboutToHide;
QMenu_hook_hook_aboutToHide(FAboutToHideHook, Method);
@ -6609,6 +6615,12 @@ begin
FTriggeredHook := nil;
end;
if FHoveredHook <> nil then
begin
QAction_hook_destroy(FHoveredHook);
FHoveredHook := nil;
end;
if FAboutToHideHook <> nil then
begin
QMenu_hook_destroy(FAboutToHideHook);
@ -6618,6 +6630,11 @@ begin
inherited DetachEvents;
end;
procedure TQtMenu.SlotHovered; cdecl;
begin
FMenuItem.IntfDoSelect;
end;
procedure TQtMenu.SlotAboutToHide; cdecl;
begin
if FMenuItem.Menu is TPopupMenu then

View File

@ -1285,6 +1285,15 @@ begin
end;
end;
WM_MENUSELECT:
begin
TargetObject := GetMenuItemObject;
if TargetObject is TMenuItem then
TMenuItem(TargetObject).IntfDoSelect
else
Application.Hint := '';
end;
WM_COMMAND:
begin
if LParam=0 then

View File

@ -200,6 +200,7 @@ type
function HasIcon: boolean; virtual;
function HasParent: Boolean; override;
procedure InitiateAction; virtual;
procedure IntfDoSelect; virtual;
function IndexOf(Item: TMenuItem): Integer;
function IndexOfCaption(const ACaption: string): Integer; virtual;
function VisibleIndexOf(Item: TMenuItem): Integer;