]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/richtooltip.h
Added wxRichToolTip class.
[wxWidgets.git] / interface / wx / richtooltip.h
diff --git a/interface/wx/richtooltip.h b/interface/wx/richtooltip.h
new file mode 100644 (file)
index 0000000..3a3dbbf
--- /dev/null
@@ -0,0 +1,195 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        interface/wx/richtooltip.h
+// Purpose:     wxRichToolTip class documentation
+// Author:      Vadim Zeitlin
+// Created:     2011-10-18
+// RCS-ID:      $Id$
+// Copyright:   (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+    Support tip kinds for wxRichToolTip.
+
+    This enum describes the kind of the tip shown which combines both the tip
+    position and appearance because the two are related (when the tip is
+    positioned asymmetrically, a right handed triangle is used but an
+    equilateral one when it's in the middle of a side).
+
+    Automatic selects the tip appearance best suited for the current platform
+    and the position best suited for the window the tooltip is shown for, i.e.
+    chosen in such a way that the tooltip is always fully on screen.
+
+    Other values describe the position of the tooltip itself, not the window it
+    relates to. E.g. wxTipKind_Top places the tip on the top of the tooltip and
+    so the tooltip itself is located beneath its associated window.
+ */
+enum wxTipKind
+{
+    /// Don't show any tip, the tooltip will be (roughly) rectangular.
+    wxTipKind_None,
+    /// Show a right triangle tip in the top left corner of the tooltip.
+    wxTipKind_TopLeft,
+    /// Show an equilateral triangle tip in the middle of the tooltip top side.
+    wxTipKind_Top,
+    /// Show a right triangle tip in the top right corner of the tooltip.
+    wxTipKind_TopRight,
+    /// Show a right triangle tip in the bottom left corner of the tooltip.
+    wxTipKind_BottomLeft,
+    /// Show an equilateral triangle tip in the middle of the tooltip bottom side.
+    wxTipKind_Bottom,
+    /// Show a right triangle tip in the bottom right corner of the tooltip.
+    wxTipKind_BottomRight,
+    /**
+        Choose the appropriate tip shape and position automatically.
+
+        This is the default and shouldn't normally need to be changed.
+
+        Notice that currently wxTipKind_Top or wxTipKind_Bottom are used under
+        Mac while one of the other four values is selected for the other
+        platforms.
+     */
+    wxTipKind_Auto
+};
+/**
+    Allows to show a tool tip with more customizations than wxToolTip.
+
+    Using this class is very simple, to give a standard warning for a password
+    text control if the password was entered correctly you could simply do:
+    @code
+    wxTextCtrl* password = new wxTextCtrl(..., wxTE_PASSWORD);
+    ...
+    wxRichToolTip tip("Caps Lock is on",
+                      "You might have made an error in your password\n"
+                      "entry because Caps Lock is turned on.\n"
+                      "\n"
+                      "Press Caps Lock key to turn it off.");
+    tip.SetIcon(wxICON_WARNING);
+    tip.ShowFor(password);
+    @endcode
+
+    Currently this class has generic implementation that can be used with any
+    window and implements all the functionality but doesn't exactly match the
+    appearance of the native tooltips (even though it makes some efforts to
+    use the style most appropriate for the current platform) and a native MSW
+    version which can be only used with text controls and doesn't provide as
+    much in the way of customization. Because of this, it's inadvisable to
+    customize the tooltips unnecessarily as doing this turns off auto-detection
+    of the native style in the generic version and may prevent the native MSW
+    version from being used at all.
+
+    Notice that this class is not derived from wxWindow and hence doesn't
+    represent a window, even if its ShowFor() method does create one internally
+    to show the tooltip.
+
+    The images below show some examples of rich tooltips on different
+    platforms, with various customizations applied.
+
+    @library{wxadv}
+    @category{miscwnd}
+    @appearance{richtooltip.png}
+
+    @since 2.9.3
+ */
+class wxRichToolTip
+{
+public:
+    /**
+        Constructor must specify the tooltip title and main message.
+
+        The main message can contain embedded new lines. Both the title and
+        message must be non-empty.
+
+        Additional attributes can be set later.
+     */
+    wxRichToolTip(const wxString& title, const wxString& message);
+
+    /**
+        Set the background colour.
+
+        If two colours are specified, the background is drawn using a gradient
+        from top to bottom, otherwise a single solid colour is used.
+
+        By default the colour or colours most appropriate for the current
+        platform are used. If a colour is explicitly set, native MSW version
+        won't be used as it doesn't support setting the colour.
+     */
+    void SetBackgroundColour(const wxColour& col,
+                             const wxColour& colEnd = wxColour());
+
+    /**
+        Set the small icon to show.
+
+        The icon can be either one of the standard information/warning/error
+        ones, i.e. wxICON_INFORMATION, wxICON_WARNING or wxICON_ERROR
+        respectively (the question icon doesn't make sense for a tooltip so
+        wxICON_QUESTION can't be used here) or a custom icon. The latter is
+        unsupported by the native MSW implementation of this class so the use
+        of a standard icon is preferred.
+     */
+    //@{
+    void SetIcon(int icon = wxICON_INFORMATION);
+    void SetIcon(const wxIcon& icon);
+    //@}
+
+    /**
+        Set timeout after which the tooltip should disappear, in milliseconds.
+
+        By default the tooltip is hidden after system-dependent interval of
+        time elapses but this method can be used to change this or also disable
+        hiding the tooltip automatically entirely by passing 0 in this parameter
+        (but doing this will prevent the native MSW version from being used).
+
+        Notice that the tooltip will always be hidden if the user presses a key
+        or clicks a mouse button.
+     */
+    void SetTimeout(unsigned milliseconds);
+
+    /**
+        Choose the tip kind, possibly none.
+
+        See wxTipKind documentation for the possible choices here.
+
+        By default the tip is positioned automatically, as if wxTipKind_Auto
+        was used. Native MSW implementation doesn't support setting the tip
+        kind explicitly and won't be used if this method is called with any
+        value other than wxTipKind_Auto.
+
+        Notice that using non automatic tooltip kind may result in the tooltip
+        being positioned partially off screen and it's the callers
+        responsibility to ensure that this doesn't happen in this case.
+     */
+    void SetTipKind(wxTipKind tipKind);
+
+    /**
+        Set the title text font.
+
+        By default it's emphasized using the font style or colour appropriate
+        for the current platform. Calling this method prevents the native MSW
+        implementation from being used as it doesn't support changing the font.
+     */
+    void SetTitleFont(const wxFont& font);
+
+    /**
+        Show the tooltip for the given window.
+
+        The tooltip tip points to the (middle of the) specified window which
+        must be non-@NULL.
+
+        Currently the native MSW implementation is used only if @a win is a
+        wxTextCtrl. This limitation may be removed in the future.
+     */
+    void ShowFor(wxWindow* win);
+
+    /**
+        Destructor.
+
+        Notice that destroying this object does not hide the tooltip if it's
+        currently shown, it will be hidden and destroyed when the user
+        dismisses it or the timeout expires.
+
+        The destructor is non-virtual as this class is not supposed to be
+        derived from.
+     */
+    ~wxRichToolTip();
+};