/////////////////////////////////////////////////////////////////////////////
// Name: clipboard.cpp
-// Purpose: clipbaord wxWidgets sample
+// Purpose: clipboard wxWidgets sample
// Author: Robert Roebling
-// RCS-ID: $Id: minimal.cpp 53461 2008-05-05 23:30:33Z VZ $
+// RCS-ID: $Id$
// Copyright: (c) Robert Roebling
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
-
+
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/clipbrd.h"
-#if !defined(__WXMSW__) && !defined(__WXPM__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
#include "../sample.xpm"
#endif
+
+#define USE_ASYNCHRONOUS_CLIPBOARD_REQUEST 0
+
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
+#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
enum AsyncRequestState
{
Idle,
Waiting,
Finished
};
+#endif
class MyFrame : public wxFrame
{
void OnAbout(wxCommandEvent&event);
void OnWriteClipboardContents(wxCommandEvent&event);
void OnUpdateUI(wxUpdateUIEvent&event);
+#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
void OnClipboardChange(wxClipboardEvent&event);
+#endif
private:
wxTextCtrl *m_textctrl;
+#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
AsyncRequestState m_request;
bool m_clipboardSupportsText;
+#endif
DECLARE_EVENT_TABLE()
};
EVT_MENU(ID_About, MyFrame::OnAbout)
EVT_BUTTON(ID_Write, MyFrame::OnWriteClipboardContents)
EVT_UPDATE_UI(ID_Write, MyFrame::OnUpdateUI)
+#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
EVT_CLIPBOARD_CHANGED(MyFrame::OnClipboardChange)
+#endif
END_EVENT_TABLE()
IMPLEMENT_APP(MyApp)
MyFrame *frame = new MyFrame("wxClipboard sample");
frame->Show(true);
-
+
return true;
}
{
// set the frame icon
SetIcon(wxICON(sample));
-
+
+#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
m_request = Idle;
m_clipboardSupportsText = false;
+#endif
#if wxUSE_MENUS
// create a menu bar
// the "About" item should be in the help menu
wxMenu *helpMenu = new wxMenu;
- helpMenu->Append(ID_About, "&About...\tF1", "Show about dialog");
+ helpMenu->Append(ID_About, "&About\tF1", "Show about dialog");
fileMenu->Append(ID_Quit, "E&xit\tAlt-X", "Quit this program");
#endif // wxUSE_MENUS
wxPanel *panel = new wxPanel( this, -1 );
-
+
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- main_sizer->Add( new wxButton( panel, ID_Write, "Get clipboard text" ) );
+ main_sizer->Add( new wxButton( panel, ID_Write, "Get clipboard text" ), 0, wxALL, 5 );
m_textctrl = new wxTextCtrl( panel, ID_Text, "", wxDefaultPosition,
wxDefaultSize, wxTE_MULTILINE );
main_sizer->Add( m_textctrl, 1, wxGROW );
panel->SetSizer( main_sizer );
}
-void MyFrame::OnWriteClipboardContents(wxCommandEvent& event)
+void MyFrame::OnWriteClipboardContents(wxCommandEvent& WXUNUSED(event))
{
if (wxTheClipboard->Open())
{
wxTheClipboard->GetData( data );
m_textctrl->Clear();
m_textctrl->SetValue( data.GetText() );
-
+
}
wxTheClipboard->Close();
}
}
+#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
void MyFrame::OnClipboardChange(wxClipboardEvent&event)
{
m_clipboardSupportsText = event.SupportsFormat( wxDF_UNICODETEXT );
m_request = Finished;
}
+#endif
void MyFrame::OnUpdateUI(wxUpdateUIEvent&event)
{
+#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
if (m_request == Idle)
{
- wxTheClipboard->IsSupportedAsync( this );
+ if (!wxTheClipboard->IsSupportedAsync( this ))
+ {
+ // request failed, try again later
+ event.Enable( m_clipboardSupportsText ); // not yet known, assume last value
+ return;
+ }
m_request = Waiting;
event.Enable( m_clipboardSupportsText ); // not yet known, assume last value
- }
+ }
else if (m_request == Waiting)
{
event.Enable( m_clipboardSupportsText ); // not yet known, assume last value
event.Enable( m_clipboardSupportsText );
m_request = Idle;
}
+#else
+ event.Enable( wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) );
+#endif
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
+ wxMessageBox("Clipboard sample", "About clipboard", wxOK|wxICON_INFORMATION, this);
}