Generic Function | Package: cg | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version

## shortcut-commands

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-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.2 page.
Created 2012.5.30.

|  | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version