This keyword is not expanded by Git which means it's not replaced with the correct revision value in the releases made using git-based scripts and it's confusing to have lines with unexpanded "$Id$" in the released files. As expanding them with Git is not that simple (it could be done with git archive and export-subst attribute) and there are not many benefits in having them in the first place, just remove all these lines. If nothing else, this will make an eventual transition to Git simpler. Closes #14487. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
245 lines
7.3 KiB
C++
245 lines
7.3 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/generic/notifmsgg.cpp
|
|
// Purpose: generic implementation of wxGenericNotificationMessage
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2007-11-24
|
|
// 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
|
|
|
|
#ifndef wxUSE_LIBHILDON
|
|
#define wxUSE_LIBHILDON 0
|
|
#endif
|
|
|
|
#ifndef wxUSE_LIBHILDON2
|
|
#define wxUSE_LIBHILDON2 0
|
|
#endif
|
|
|
|
#if wxUSE_NOTIFICATION_MESSAGE && (!wxUSE_LIBHILDON || !wxUSE_LIBHILDON2)
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/dialog.h"
|
|
#include "wx/timer.h"
|
|
#include "wx/sizer.h"
|
|
#include "wx/statbmp.h"
|
|
#endif //WX_PRECOMP
|
|
|
|
#include "wx/artprov.h"
|
|
|
|
// even if the platform has the native implementation, we still normally want
|
|
// to use the generic one (unless it's totally unsuitable for the target UI as
|
|
// is the case of Hildon) because it may provide more features, so include
|
|
// wx/generic/notifmsg.h to get wxGenericNotificationMessage declaration even
|
|
// if wx/notifmsg.h only declares wxNotificationMessage itself (if it already
|
|
// uses the generic version, the second inclusion will do no harm)
|
|
#include "wx/notifmsg.h"
|
|
#include "wx/generic/notifmsg.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxNotificationMessageDialog
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class wxNotificationMessageDialog : public wxDialog
|
|
{
|
|
public:
|
|
wxNotificationMessageDialog(wxWindow *parent,
|
|
const wxString& text,
|
|
int timeout,
|
|
int flags);
|
|
|
|
void Set(wxWindow *parent,
|
|
const wxString& text,
|
|
int timeout,
|
|
int flags);
|
|
|
|
bool IsAutomatic() const { return m_timer.IsRunning(); }
|
|
void SetDeleteOnHide() { m_deleteOnHide = true; }
|
|
|
|
private:
|
|
void OnClose(wxCloseEvent& event);
|
|
void OnTimer(wxTimerEvent& event);
|
|
|
|
// if true, delete the dialog when it should disappear, otherwise just hide
|
|
// it (initially false)
|
|
bool m_deleteOnHide;
|
|
|
|
// timer which will hide this dialog when it expires, if it's not running
|
|
// it means we were created without timeout
|
|
wxTimer m_timer;
|
|
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
wxDECLARE_NO_COPY_CLASS(wxNotificationMessageDialog);
|
|
};
|
|
|
|
// ============================================================================
|
|
// wxNotificationMessageDialog implementation
|
|
// ============================================================================
|
|
|
|
BEGIN_EVENT_TABLE(wxNotificationMessageDialog, wxDialog)
|
|
EVT_CLOSE(wxNotificationMessageDialog::OnClose)
|
|
|
|
EVT_TIMER(wxID_ANY, wxNotificationMessageDialog::OnTimer)
|
|
END_EVENT_TABLE()
|
|
|
|
wxNotificationMessageDialog::wxNotificationMessageDialog(wxWindow *parent,
|
|
const wxString& text,
|
|
int timeout,
|
|
int flags)
|
|
: wxDialog(parent, wxID_ANY, _("Notice"),
|
|
wxDefaultPosition, wxDefaultSize,
|
|
0 /* no caption, no border styles */),
|
|
m_timer(this)
|
|
{
|
|
m_deleteOnHide = false;
|
|
|
|
Set(parent, text, timeout, flags);
|
|
}
|
|
|
|
void
|
|
wxNotificationMessageDialog::Set(wxWindow * WXUNUSED(parent),
|
|
const wxString& text,
|
|
int timeout,
|
|
int flags)
|
|
{
|
|
wxSizer * const sizerTop = new wxBoxSizer(wxHORIZONTAL);
|
|
if ( flags & wxICON_MASK )
|
|
{
|
|
sizerTop->Add(new wxStaticBitmap
|
|
(
|
|
this,
|
|
wxID_ANY,
|
|
wxArtProvider::GetMessageBoxIcon(flags)
|
|
),
|
|
wxSizerFlags().Centre().Border());
|
|
}
|
|
|
|
sizerTop->Add(CreateTextSizer(text), wxSizerFlags(1).Border());
|
|
SetSizerAndFit(sizerTop);
|
|
|
|
if ( timeout != wxGenericNotificationMessage::Timeout_Never )
|
|
{
|
|
// wxTimer uses ms, timeout is in seconds
|
|
m_timer.Start(timeout*1000, true /* one shot only */);
|
|
}
|
|
else if ( m_timer.IsRunning() )
|
|
{
|
|
m_timer.Stop();
|
|
}
|
|
}
|
|
|
|
void wxNotificationMessageDialog::OnClose(wxCloseEvent& event)
|
|
{
|
|
if ( m_deleteOnHide )
|
|
{
|
|
// we don't need to keep this dialog alive any more
|
|
Destroy();
|
|
}
|
|
else // don't really close, just hide, as we can be shown again later
|
|
{
|
|
event.Veto();
|
|
|
|
Hide();
|
|
}
|
|
}
|
|
|
|
void wxNotificationMessageDialog::OnTimer(wxTimerEvent& WXUNUSED(event))
|
|
{
|
|
if ( m_deleteOnHide )
|
|
Destroy();
|
|
else
|
|
Hide();
|
|
}
|
|
|
|
// ============================================================================
|
|
// wxGenericNotificationMessage implementation
|
|
// ============================================================================
|
|
|
|
int wxGenericNotificationMessage::ms_timeout = 10;
|
|
|
|
/* static */ void wxGenericNotificationMessage::SetDefaultTimeout(int timeout)
|
|
{
|
|
wxASSERT_MSG( timeout > 0,
|
|
"negative or zero default timeout doesn't make sense" );
|
|
|
|
ms_timeout = timeout;
|
|
}
|
|
|
|
void wxGenericNotificationMessage::Init()
|
|
{
|
|
m_dialog = NULL;
|
|
}
|
|
|
|
wxGenericNotificationMessage::~wxGenericNotificationMessage()
|
|
{
|
|
if ( m_dialog->IsAutomatic() )
|
|
{
|
|
// we want to allow the user to create an automatically hidden
|
|
// notification just by creating a local wxGenericNotificationMessage object
|
|
// and so we shouldn't hide the notification when this object goes out
|
|
// of scope
|
|
m_dialog->SetDeleteOnHide();
|
|
}
|
|
else // manual dialog, hide it immediately
|
|
{
|
|
// OTOH for permanently shown dialogs only the code can hide them and
|
|
// if the object is deleted, we must do it now as it won't be
|
|
// accessible programmatically any more
|
|
delete m_dialog;
|
|
}
|
|
}
|
|
|
|
bool wxGenericNotificationMessage::Show(int timeout)
|
|
{
|
|
if ( timeout == Timeout_Auto )
|
|
{
|
|
timeout = GetDefaultTimeout();
|
|
}
|
|
|
|
if ( !m_dialog )
|
|
{
|
|
m_dialog = new wxNotificationMessageDialog
|
|
(
|
|
GetParent(),
|
|
GetFullMessage(),
|
|
timeout,
|
|
GetFlags()
|
|
);
|
|
}
|
|
else // update the existing dialog
|
|
{
|
|
m_dialog->Set(GetParent(), GetFullMessage(), timeout, GetFlags());
|
|
}
|
|
|
|
m_dialog->Show();
|
|
|
|
return true;
|
|
}
|
|
|
|
bool wxGenericNotificationMessage::Close()
|
|
{
|
|
if ( !m_dialog )
|
|
return false;
|
|
|
|
m_dialog->Hide();
|
|
|
|
return true;
|
|
}
|
|
|
|
#endif // wxUSE_NOTIFICATION_MESSAGE && (!wxUSE_LIBHILDON || !wxUSE_LIBHILDON2)
|