X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1043cdc3c58363fe6f2d36eaf5dad44d471242e..d9e12f1a3267a834a31bc516632655e1f016fb77:/samples/dnd/dnd.cpp diff --git a/samples/dnd/dnd.cpp b/samples/dnd/dnd.cpp index 446dba0940..f2c9da7f78 100644 --- a/samples/dnd/dnd.cpp +++ b/samples/dnd/dnd.cpp @@ -19,16 +19,6 @@ #include "wx/wx.h" #endif -#if !wxUSE_DRAG_AND_DROP - #error This sample requires drag and drop support in the library -#endif - -// under Windows we also support data transfer of metafiles as an extra bonus, -// but they're not available under other platforms -#ifdef __WINDOWS__ - #define USE_METAFILES -#endif // Windows - #include "wx/intl.h" #include "wx/log.h" @@ -40,9 +30,9 @@ #include "wx/colordlg.h" #include "wx/sizer.h" -#ifdef USE_METAFILES +#if wxUSE_METAFILES #include "wx/metafile.h" -#endif // Windows +#endif // wxUSE_METAFILES #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) #include "mondrian.xpm" @@ -52,6 +42,8 @@ #include "dnd_none.xpm" #endif +#if wxUSE_DRAG_AND_DROP + // ---------------------------------------------------------------------------- // Derive two simple classes which just put in the listbox the strings (text or // file names) we drop on them @@ -116,6 +108,8 @@ public: } }; +#endif // wxUSE_DRAG_AND_DROP + // ---------------------------------------------------------------------------- // Define a new application type // ---------------------------------------------------------------------------- @@ -128,6 +122,8 @@ public: IMPLEMENT_APP(DnDApp); +#if wxUSE_DRAG_AND_DROP + // ---------------------------------------------------------------------------- // Define canvas class to show a bitmap // ---------------------------------------------------------------------------- @@ -165,7 +161,7 @@ private: DECLARE_EVENT_TABLE() }; -#ifdef USE_METAFILES +#if wxUSE_METAFILES // and the same thing fo metafiles class DnDCanvasMetafile : public wxScrolledWindow @@ -201,7 +197,7 @@ private: DECLARE_EVENT_TABLE() }; -#endif // USE_METAFILES +#endif // wxUSE_METAFILES // ---------------------------------------------------------------------------- // Define a new frame type for the main frame @@ -230,9 +226,9 @@ public: void OnCopyBitmap(wxCommandEvent& event); void OnPasteBitmap(wxCommandEvent& event); -#ifdef USE_METAFILES +#if wxUSE_METAFILES void OnPasteMetafile(wxCommandEvent& event); -#endif // USE_METAFILES +#endif // wxUSE_METAFILES void OnCopyFiles(wxCommandEvent& event); @@ -489,9 +485,9 @@ public: // we don't draw the shape to a bitmap until it's really needed (i.e. // we're asked to do so) m_hasBitmap = FALSE; -#ifdef USE_METAFILES +#if wxUSE_METAFILES m_hasMetaFile = FALSE; -#endif // Windows +#endif // wxUSE_METAFILES } virtual ~DnDShapeDataObject() { delete m_shape; } @@ -508,9 +504,9 @@ public: m_shape = (DnDShape *)NULL; m_hasBitmap = FALSE; -#ifdef USE_METAFILES +#if wxUSE_METAFILES m_hasMetaFile = FALSE; -#endif // Windows +#endif // wxUSE_METAFILES return shape; } @@ -532,9 +528,9 @@ public: // but the bitmap format(s) are only supported for output nFormats += m_dobjBitmap.GetFormatCount(dir); -#ifdef USE_METAFILES +#if wxUSE_METAFILES nFormats += m_dobjMetaFile.GetFormatCount(dir); -#endif // Windows +#endif // wxUSE_METAFILES } return nFormats; @@ -549,11 +545,11 @@ public: // under Windows m_dobjBitmap.GetAllFormats(&formats[1], dir); -#ifdef USE_METAFILES +#if wxUSE_METAFILES // don't assume that m_dobjBitmap has only 1 format m_dobjMetaFile.GetAllFormats(&formats[1 + m_dobjBitmap.GetFormatCount(dir)], dir); -#endif // Windows +#endif // wxUSE_METAFILES } } @@ -563,7 +559,7 @@ public: { return m_shape->GetDataSize(); } -#ifdef USE_METAFILES +#if wxUSE_METAFILES else if ( m_dobjMetaFile.IsSupported(format) ) { if ( !m_hasMetaFile ) @@ -571,7 +567,7 @@ public: return m_dobjMetaFile.GetDataSize(format); } -#endif // Windows +#endif // wxUSE_METAFILES else { wxASSERT_MSG( m_dobjBitmap.IsSupported(format), @@ -592,7 +588,7 @@ public: return TRUE; } -#ifdef USE_METAFILES +#if wxUSE_METAFILES else if ( m_dobjMetaFile.IsSupported(format) ) { if ( !m_hasMetaFile ) @@ -600,7 +596,7 @@ public: return m_dobjMetaFile.GetDataHere(format, pBuf); } -#endif // Windows +#endif // wxUSE_METAFILES else { wxASSERT_MSG( m_dobjBitmap.IsSupported(format), @@ -625,9 +621,9 @@ public: // the shape has changed m_hasBitmap = FALSE; -#ifdef USE_METAFILES +#if wxUSE_METAFILES m_hasMetaFile = FALSE; -#endif // Windows +#endif // wxUSE_METAFILES return TRUE; } @@ -635,19 +631,19 @@ public: private: // creates a bitmap and assigns it to m_dobjBitmap (also sets m_hasBitmap) void CreateBitmap() const; -#ifdef USE_METAFILES +#if wxUSE_METAFILES void CreateMetaFile() const; -#endif // Windows +#endif // wxUSE_METAFILES wxDataFormat m_formatShape; // our custom format wxBitmapDataObject m_dobjBitmap; // it handles bitmaps bool m_hasBitmap; // true if m_dobjBitmap has valid bitmap -#ifdef USE_METAFILES +#if wxUSE_METAFILES wxMetaFileDataObject m_dobjMetaFile;// handles metafiles bool m_hasMetaFile; // true if we have valid metafile -#endif // Windows +#endif // wxUSE_METAFILES DnDShape *m_shape; // our data }; @@ -699,6 +695,10 @@ public: ~DnDShapeFrame(); void SetShape(DnDShape *shape); + virtual bool SetShape(const wxRegion ®ion) + { + return wxFrame::SetShape( region ); + } // callbacks void OnNewShape(wxCommandEvent& event); @@ -766,9 +766,9 @@ private: static void ShowBitmap(const wxBitmap& bitmap); -#ifdef USE_METAFILES +#if wxUSE_METAFILES static void ShowMetaFile(const wxMetaFile& metafile); -#endif // USE_METAFILES +#endif // wxUSE_METAFILES // ---------------------------------------------------------------------------- // IDs for the menu commands @@ -811,9 +811,9 @@ BEGIN_EVENT_TABLE(DnDFrame, wxFrame) EVT_MENU(Menu_Paste, DnDFrame::OnPaste) EVT_MENU(Menu_CopyBitmap, DnDFrame::OnCopyBitmap) EVT_MENU(Menu_PasteBitmap,DnDFrame::OnPasteBitmap) -#ifdef USE_METAFILES +#if wxUSE_METAFILES EVT_MENU(Menu_PasteMFile, DnDFrame::OnPasteMetafile) -#endif // USE_METAFILES +#endif // wxUSE_METAFILES EVT_MENU(Menu_CopyFiles, DnDFrame::OnCopyFiles) EVT_UPDATE_UI(Menu_DragMoveDef, DnDFrame::OnUpdateUIMoveByDefault) @@ -851,11 +851,13 @@ BEGIN_EVENT_TABLE(DnDCanvasBitmap, wxScrolledWindow) EVT_PAINT(DnDCanvasBitmap::OnPaint) END_EVENT_TABLE() -#ifdef USE_METAFILES +#if wxUSE_METAFILES BEGIN_EVENT_TABLE(DnDCanvasMetafile, wxScrolledWindow) EVT_PAINT(DnDCanvasMetafile::OnPaint) END_EVENT_TABLE() -#endif // USE_METAFILES +#endif // wxUSE_METAFILES + +#endif // wxUSE_DRAG_AND_DROP // ============================================================================ // implementation @@ -864,6 +866,7 @@ END_EVENT_TABLE() // `Main program' equivalent, creating windows and returning main app frame bool DnDApp::OnInit() { +#if wxUSE_DRAG_AND_DROP // switch on trace messages #if defined(__WXGTK__) wxLog::AddTraceMask(_T("clipboard")); @@ -890,8 +893,14 @@ bool DnDApp::OnInit() SetTopWindow(frame); return TRUE; +#else + wxMessageBox( _T("This sample has to be compiled with wxUSE_DRAG_AND_DROP"), _T("Building error"), wxOK); + return FALSE; +#endif // wxUSE_DRAG_AND_DROP } +#if wxUSE_DRAG_AND_DROP + DnDFrame::DnDFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h) : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h)), m_strText(_T("wxWindows drag & drop works :-)")) @@ -926,10 +935,10 @@ DnDFrame::DnDFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h) clip_menu->AppendSeparator(); clip_menu->Append(Menu_CopyBitmap, _T("Copy &bitmap\tCtrl-Shift-C")); clip_menu->Append(Menu_PasteBitmap, _T("Paste b&itmap\tCtrl-Shift-V")); -#ifdef USE_METAFILES +#if wxUSE_METAFILES clip_menu->AppendSeparator(); clip_menu->Append(Menu_PasteMFile, _T("Paste &metafile\tCtrl-M")); -#endif // USE_METAFILES +#endif // wxUSE_METAFILES clip_menu->AppendSeparator(); clip_menu->Append(Menu_CopyFiles, _T("Copy &files\tCtrl-F")); @@ -1190,10 +1199,10 @@ DnDFrame::~DnDFrame() void DnDFrame::OnCopyBitmap(wxCommandEvent& WXUNUSED(event)) { // PNG support is not always compiled in under Windows, so use BMP there -#ifdef __WXMSW__ - wxFileDialog dialog(this, _T("Open a BMP file"), _T(""), _T(""), _T("BMP files (*.bmp)|*.bmp"), 0); -#else +#if wxUSE_LIBPNG wxFileDialog dialog(this, _T("Open a PNG file"), _T(""), _T(""), _T("PNG files (*.png)|*.png"), 0); +#else + wxFileDialog dialog(this, _T("Open a BMP file"), _T(""), _T(""), _T("BMP files (*.bmp)|*.bmp"), 0); #endif if (dialog.ShowModal() != wxID_OK) @@ -1216,10 +1225,10 @@ void DnDFrame::OnCopyBitmap(wxCommandEvent& WXUNUSED(event)) wxImage image; image.LoadFile( dialog.GetPath(), -#ifdef __WXMSW__ - wxBITMAP_TYPE_BMP -#else +#if wxUSE_LIBPNG wxBITMAP_TYPE_PNG +#else + wxBITMAP_TYPE_BMP #endif ); if (!image.Ok()) @@ -1290,7 +1299,7 @@ void DnDFrame::OnPasteBitmap(wxCommandEvent& WXUNUSED(event)) wxTheClipboard->Close(); } -#ifdef USE_METAFILES +#if wxUSE_METAFILES void DnDFrame::OnPasteMetafile(wxCommandEvent& WXUNUSED(event)) { @@ -1326,7 +1335,7 @@ void DnDFrame::OnPasteMetafile(wxCommandEvent& WXUNUSED(event)) wxTheClipboard->Close(); } -#endif // USE_METAFILES +#endif // wxUSE_METAFILES // ---------------------------------------------------------------------------- // file clipboard @@ -1723,7 +1732,7 @@ void DnDShapeFrame::OnDrop(wxCoord x, wxCoord y, DnDShape *shape) SetShape(shape); } -void DnDShapeFrame::OnEditShape(wxCommandEvent& event) +void DnDShapeFrame::OnEditShape(wxCommandEvent& WXUNUSED(event)) { DnDShapeDialog dlg(this, m_shape); if ( dlg.ShowModal() == wxID_OK ) @@ -1737,19 +1746,19 @@ void DnDShapeFrame::OnEditShape(wxCommandEvent& event) } } -void DnDShapeFrame::OnNewShape(wxCommandEvent& event) +void DnDShapeFrame::OnNewShape(wxCommandEvent& WXUNUSED(event)) { SetShape(new DnDEllipticShape(wxPoint(10, 10), wxSize(80, 60), *wxRED)); SetStatusText(_T("You can now drag the shape to another frame")); } -void DnDShapeFrame::OnClearShape(wxCommandEvent& event) +void DnDShapeFrame::OnClearShape(wxCommandEvent& WXUNUSED(event)) { SetShape(NULL); } -void DnDShapeFrame::OnCopyShape(wxCommandEvent& event) +void DnDShapeFrame::OnCopyShape(wxCommandEvent& WXUNUSED(event)) { if ( m_shape ) { @@ -1765,7 +1774,7 @@ void DnDShapeFrame::OnCopyShape(wxCommandEvent& event) } } -void DnDShapeFrame::OnPasteShape(wxCommandEvent& event) +void DnDShapeFrame::OnPasteShape(wxCommandEvent& WXUNUSED(event)) { wxClipboardLocker clipLocker; if ( !clipLocker ) @@ -1844,7 +1853,7 @@ DnDShape *DnDShape::New(const void *buf) // DnDShapeDataObject // ---------------------------------------------------------------------------- -#ifdef USE_METAFILES +#if wxUSE_METAFILES void DnDShapeDataObject::CreateMetaFile() const { @@ -1864,7 +1873,7 @@ void DnDShapeDataObject::CreateMetaFile() const delete mf; } -#endif // Windows +#endif // wxUSE_METAFILES void DnDShapeDataObject::CreateBitmap() const { @@ -1904,7 +1913,7 @@ static void ShowBitmap(const wxBitmap& bitmap) frame->Show(TRUE); } -#ifdef USE_METAFILES +#if wxUSE_METAFILES static void ShowMetaFile(const wxMetaFile& metafile) { @@ -1921,4 +1930,6 @@ static void ShowMetaFile(const wxMetaFile& metafile) frame->Show(); } -#endif // USE_METAFILES +#endif // wxUSE_METAFILES + +#endif // wxUSE_DRAG_AND_DROP