]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/hildon/notifmsg.cpp
added wxNotificationMessage and implemented it generically and natively for Maemo
[wxWidgets.git] / src / gtk / hildon / notifmsg.cpp
diff --git a/src/gtk/hildon/notifmsg.cpp b/src/gtk/hildon/notifmsg.cpp
new file mode 100644 (file)
index 0000000..3cad178
--- /dev/null
@@ -0,0 +1,126 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        gtk/hildon/notifmsg.cpp
+// Purpose:     Hildon implementation of wxNotificationMessage
+// Author:      Vadim Zeitlin
+// Created:     2007-11-21
+// RCS-ID:      $Id$
+// Copyright:   (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#if wxUSE_LIBHILDON
+
+#ifndef WX_PRECOMP
+#endif //WX_PRECOMP
+
+#include "wx/notifmsg.h"
+#include "wx/toplevel.h"
+
+#include <hildon-widgets/hildon-banner.h>
+
+// ============================================================================
+// wxNotificationMessage implementation
+// ============================================================================
+
+wxString wxNotificationMessage::HildonGetMarkup() const
+{
+    const wxString& message = GetMessage(),
+                    title = GetTitle();
+
+    wxString text;
+    if ( message.empty() )
+    {
+        text = title;
+    }
+    else // combine title with message in a single string
+    {
+        text << "<big><b>" << title << "</b></big>\n"
+                "\n"
+             << message;
+    }
+
+    return text;
+}
+
+GtkWidget *wxNotificationMessage::HildonGetWindow() const
+{
+    wxWindow *parent = GetParent();
+    if ( parent )
+    {
+        parent = wxGetTopLevelParent(parent);
+        if ( parent )
+        {
+            wxTopLevelWindow * const
+                tlw = wxDynamicCast(parent, wxTopLevelWindow);
+            if ( tlw )
+                return tlw->m_mainWidget;
+        }
+    }
+
+    return NULL;
+}
+
+bool wxNotificationMessage::Show(int timeout)
+{
+    if ( timeout == Timeout_Never )
+    {
+        m_banner = hildon_banner_show_animation
+                   (
+                    HildonGetWindow(),
+                    NULL,
+                    GetFullMessage() // markup not supported here
+                   );
+        if ( !m_banner )
+            return false;
+    }
+    else // the message will time out
+    {
+        // we don't have any way to set the timeout interval so we just let it
+        // time out automatically
+        hildon_banner_show_information_with_markup
+        (
+            HildonGetWindow(),
+            NULL,
+            HildonGetMarkup()
+        );
+    }
+
+    return true;
+}
+
+bool wxNotificationMessage::Close()
+{
+    if ( !m_banner )
+    {
+        // either we hadn't been shown or we are using an information banner
+        // which will disappear on its own, nothing we can do about it
+        return false;
+    }
+
+    gtk_widget_destroy(m_banner);
+    m_banner = NULL;
+
+    return true;
+}
+
+wxNotificationMessage::~wxNotificationMessage()
+{
+    Close();
+}
+
+#endif // wxUSE_LIBHILDON