| Allegro CL version 8.2 Unrevised from 8.1 to 8.2. 8.1 version | ||||||||||
Arguments: window menu
Returns a list of menu-items to be shown in a pop-up-menu whenever pop-up-shortcut-menu is called on window.
The default mouse-right-down methods for
basic-pane and
dialog-item
call pop-up-shortcut-menu on the window
that was clicked. Therefore, a menu of shortcut commands can be
implemented for a window or dialog-item subclass simply by writing a
shortcut-commands
method that specializes on the class. This may be more convenient
than the general menu approach of calling open-menu and pop-up-menu. (And this behavior may
be overridden by adding a more specific primary mouse-right-down method.)
The default method returns nil, which causes
pop-up-shortcut-menu to do nothing.
Generally, the value of each menu-item in the returned list should be a function name, and this function is called with window as the only argument when the user chooses that menu-item. Alternately, the menu-item value may be a window, in which case the window is selected by calling select-window on it. This default behavior may be changed, however, by writing custom shortcut-menu-class methods; see pop-up-shortcut-menu and shortcut-menu-class for details.
window is the window that was passed to pop-up-shortcut-menu, which will be the window that was clicked when called from the default mouse-right-down methods.
menu is the menu to which the returned menu-items
will be added. This argument is probably only useful if you customize
the on-click
behavior by subclassing shortcut-menu and writing shortcut-menu-class
methods; you could then specialize on your shortcut-menu subclass
here. In the usual case, the argument is ignored (as in the examples
below).
Window example:
(defclass my-window (frame-window)())
(defmethod shortcut-commands ((window my-window) menu)
(declare (ignore menu))
(list (make-instance 'menu-item
:title "Beep"
:value 'beep)
(make-instance 'menu-item
:title "Move Down"
:value #'(lambda (window)
(move-window-relative
window #.(make-position 0 16))))))
(make-window :foo :class 'my-window
:width 300 :height 200
:title "Right-Click Me!")
Widget example
In the example below, the functions that are the values of the
returned menu-items will be passed the window of the dialog-item,
rather than the dialog-item itself. This requires subclassing both the
dialog-item (in the example, a single-item-list) class and the
associated widget-window subclass (in the
example, a single-item-list-pane), linking
them with a widget-device method, and then
specializing a shortcut-commands method on the new
my-item-list-pane class.
(defclass my-item-list (single-item-list)())
(defclass my-item-list-pane (single-item-list-pane)())
(defmethod widget-device ((dialog-item my-item-list)
(dialog dialog))
'my-item-list-pane)
(defmethod shortcut-commands ((window my-item-list-pane) menu)
(declare (ignore menu))
(list (make-instance 'menu-item
:title "Beep"
:value 'beep)
(make-instance 'menu-item
:title "Change Color"
:value #'(lambda (window)
(setf (background-color
(dialog-item window))
(make-rgb :red (+ 128 (random 128))
:green (+ 128 (random 128))
:blue (+ 128 (random 128))))))))
(make-window :bar :class 'dialog
:title "Right-Click the Widget!"
:width 300 :height 200
:dialog-items (list (make-instance 'my-item-list
:range '(one two three)
:left 30 :top 20
:value 'one)))
Copyright (c) 1998-2016, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.1 page.
Created 2010.1.21.
| Allegro CL version 8.2 Unrevised from 8.1 to 8.2. 8.1 version | ||||||||||