.. highlight:: python

==============
FloatingWindow
==============

.. module:: vanilla
.. autoclass:: FloatingWindow
   :inherited-members:
   :members:

.. method:: FloatingWindow.assignToDocument(document)

    Add this window to the list of windows associated with a document.

    **document** should be a *NSDocument* instance.


.. method:: FloatingWindow.setTitle(title)

    Set the title in the window's title bar.

    **title** should be a string.


.. method:: FloatingWindow.setPosSize(posSize, animate=True)

    Set the position and size of the FloatingWindow.

    **posSize** A tuple of form *(left, top, width, height)*.


.. method:: FloatingWindow.move(x, y, animate=True)

    Move the window by *x* units and *y* units.


.. method:: FloatingWindow.resize(width, height, animate=True)

    Change the size of the window to *width* and *height*.


.. method:: FloatingWindow.setDefaultButton(button)

    Set the default button in the FloatingWindow.

    **button** will be bound to the Return and Enter keys.


.. method:: FloatingWindow.bind(event, callback)

    Bind a callback to an event.

    **event** A string representing the desired event. The options are:

    +-------------------+----------------------------------------------------------------------+
    | *"should close"*  | Called when the user attempts to close the window. This must return  |
    |                   | a bool indicating if the window should be closed or not.             |
    +-------------------+----------------------------------------------------------------------+
    | *"close"*         | Called immediately before the window closes.                         |
    +-------------------+----------------------------------------------------------------------+
    | *"move"*          | Called immediately after the window is moved.                        |
    +-------------------+----------------------------------------------------------------------+
    | *"resize"*        | Called immediately after the window is resized.                      |
    +-------------------+----------------------------------------------------------------------+
    | *"became main"*   | Called immediately after the window has become the main window.      |
    +-------------------+----------------------------------------------------------------------+
    | *"resigned main"* | Called immediately after the window has lost its main window status. |
    +-------------------+----------------------------------------------------------------------+
    | *"became key"*    | Called immediately after the window has become the key window.       |
    +-------------------+----------------------------------------------------------------------+
    | *"resigned key"*  | Called immediately after the window has lost its key window status.  |
    +-------------------+----------------------------------------------------------------------+

    For more information about main and key windows, refer to the Cocoa `documentation`_ on the subject.

    .. _documentation: http://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyFloatingWindow.html

    **callback** The callback that will be called when the event occurs. It should accept a *sender* argument which will
    be the Window that called the callback.::

        from vanilla import Window

        class WindowBindDemo(object):

            def __init__(self):
                self.w = Window((200, 200))
                self.w.bind("move", self.windowMoved)
                self.w.open()

            def windowMoved(self, sender):
                print("window moved!", sender)

        WindowBindDemo()


.. method:: FloatingWindow.unbind(event, callback)

    Unbind a callback from an event.

    **event** A string representing the desired event.
    Refer to *bind* for the options.

    **callback** The callback that has been bound to the event.


.. method:: FloatingWindow.addToolbar(toolbarIdentifier, toolbarItems, addStandardItems=True)

        Add a toolbar to the FloatingWindow.

        **toolbarIdentifier** A string representing a unique name for the toolbar.

        **toolbarItems** An ordered list of dictionaries containing the following items:

        +-------------------------------+---------------------------------------------------------------------------+
        | *itemIdentifier*              | A unique string identifier for the item. This is only used internally.    |
        +-------------------------------+---------------------------------------------------------------------------+
        | *label* (optional)            | The text label for the item. Defaults to *None*.                          |
        +-------------------------------+---------------------------------------------------------------------------+
        | *paletteLabel* (optional)     | The text label shown in the customization palette. Defaults to *label*.   |
        +-------------------------------+---------------------------------------------------------------------------+
        | *toolTip* (optional)          | The tool tip for the item. Defaults to *label*.                           |
        +-------------------------------+---------------------------------------------------------------------------+
        | *imagePath* (optional)        | A file path to an image. Defaults to *None*.                              |
        +-------------------------------+---------------------------------------------------------------------------+
        | *imageNamed* (optional)       | The name of an image already loaded as a `NSImage`_ by the application.   |
        |                               | Defaults to *None*.                                                       |
        +-------------------------------+---------------------------------------------------------------------------+
        | *imageObject* (optional)      | A `NSImage`_ object. Defaults to *None*.                                  |
        +-------------------------------+---------------------------------------------------------------------------+
        | *imageTemplate* (optional)    | A boolean representing if the image should converted to a template image. |
        +-------------------------------+---------------------------------------------------------------------------+
        | *selectable* (optional)       | A boolean representing if the item is selectable or not. The default      |
        |                               | value is *False*. For more information on selectable toolbar items, refer |
        |                               | to Apple's documentation.                                                 |
        +-------------------------------+---------------------------------------------------------------------------+
        | *view* (optional)             | A *NSView* object to be used instead of an image. Defaults to *None*.     |
        +-------------------------------+---------------------------------------------------------------------------+
        | *visibleByDefault* (optional) | If the item should be visible by default pass *True* to this argument.    |
        |                               | If the item should be added to the toolbar only through the customization |
        |                               | palette, use a value of *False*. Defaults to *True*.                      |
        +-------------------------------+---------------------------------------------------------------------------+

        .. _NSImage: http://developer.apple.com/documentation/appkit/nsimage?language=objc

        **addStandardItems** A boolean, specifying whether the standard Cocoa toolbar items
        should be added. Defaults to *True*. If you set it to *False*, you must specify any
        standard items manually in *toolbarItems*, by using the constants from the AppKit module:

        +-------------------------------------------+------------------------------------------------------+
        | *NSToolbarSeparatorItemIdentifier*        | The Separator item.                                  |
        +-------------------------------------------+------------------------------------------------------+
        | *NSToolbarSpaceItemIdentifier*            | The Space item.                                      |
        +-------------------------------------------+------------------------------------------------------+
        | *NSToolbarFlexibleSpaceItemIdentifier*    | The Flexible Space item.                             |
        +-------------------------------------------+------------------------------------------------------+
        | *NSToolbarShowColorsItemIdentifier*       | The Colors item. Shows the color panel.              |
        +-------------------------------------------+------------------------------------------------------+
        | *NSToolbarShowFontsItemIdentifier*        | The Fonts item. Shows the font panel.                |
        +-------------------------------------------+------------------------------------------------------+
        | *NSToolbarCustomizeToolbarItemIdentifier* | The Customize item. Shows the customization palette. |
        +-------------------------------------------+------------------------------------------------------+
        | *NSToolbarPrintItemIdentifier*            | The Print item. Refer to Apple's `NSToolbarItem`_    |
        |                                           | documentation for more information.                  |
        +-------------------------------------------+------------------------------------------------------+

        .. _NSToolbarItem: https://developer.apple.com/documentation/appkit/nstoolbaritem?language=objc

        **displayMode** A string representing the desired display mode for the toolbar.

        +-------------+
        | "default"   |
        +-------------+
        | "iconLabel" |
        +-------------+
        | "icon"      |
        +-------------+
        | "label"     |
        +-------------+

        **sizeStyle** A string representing the desired size for the toolbar

        +-----------+
        | "default" |
        +-----------+
        | "regular" |
        +-----------+
        | "small"   |
        +-----------+

        Returns a dictionary containing the created toolbar items, mapped by itemIdentifier.


.. method:: FloatingWindow.removeToolbarItem(itemIdentifier)

    Remove a toolbar item by his identifier.

    **itemIdentifier** A unique string identifier for the removed item.


.. autoclass:: HUDFloatingWindow
   :members:
