From ae3dd4a589f4c8378c6a46bfceb4c87316360ca2 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 14 Jan 2000 00:17:41 +0000 Subject: [PATCH] 1. some warnings fixed in forty 2. added test for a would-ve client data bug in wxTextCtrl 3. added support for metafiels to the dnd sample git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5376 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- demos/forty/game.cpp | 4 +- demos/forty/scorefil.cpp | 4 +- samples/dnd/dnd.cpp | 201 +++++++++++++++++++++++++++++++-------- samples/text/text.cpp | 25 +++-- 4 files changed, 180 insertions(+), 54 deletions(-) diff --git a/demos/forty/game.cpp b/demos/forty/game.cpp index fa1a29e434..e7c47b9b9f 100644 --- a/demos/forty/game.cpp +++ b/demos/forty/game.cpp @@ -410,8 +410,8 @@ void Game::LButtonDblClk(wxDC& dc, int x, int y) { for(i = 0; i < 4; i++) { - Card* m_topCard; - if ((m_topCard = m_foundations[i]->GetTopCard())) + Card* m_topCard = m_foundations[i]->GetTopCard(); + if ( m_topCard ) { if (m_topCard->GetSuit() == card->GetSuit() && m_foundations[i + 4] != pile && diff --git a/demos/forty/scorefil.cpp b/demos/forty/scorefil.cpp index cb871efde0..8282a9fb66 100644 --- a/demos/forty/scorefil.cpp +++ b/demos/forty/scorefil.cpp @@ -138,8 +138,8 @@ void ScoreFile::ReadPlayersScore( int& games, int& score) { - long check; - long myWins, myGames, myScore; + long check = 0; + long myWins = 0, myGames = 0, myScore = 0; games = wins = score = 0; diff --git a/samples/dnd/dnd.cpp b/samples/dnd/dnd.cpp index 4a2985894b..39b58f179e 100644 --- a/samples/dnd/dnd.cpp +++ b/samples/dnd/dnd.cpp @@ -88,6 +88,81 @@ public: IMPLEMENT_APP(DnDApp); +// ---------------------------------------------------------------------------- +// Define canvas class to show a bitmap +// ---------------------------------------------------------------------------- + +class DnDCanvasBitmap : public wxScrolledWindow +{ +public: + DnDCanvasBitmap(wxWindow *parent) : wxScrolledWindow(parent) { } + + void SetBitmap(const wxBitmap& bitmap) + { + m_bitmap = bitmap; + + SetScrollbars(10, 10, + m_bitmap.GetWidth() / 10, m_bitmap.GetHeight() / 10); + + Refresh(); + } + + void OnPaint(wxPaintEvent& event) + { + wxPaintDC dc(this); + + if ( m_bitmap.Ok() ) + { + PrepareDC(dc); + + dc.DrawBitmap(m_bitmap, 0, 0); + } + } + +private: + wxBitmap m_bitmap; + + DECLARE_EVENT_TABLE() +}; + +#ifdef USE_METAFILES + +// and the same thing fo metafiles +class DnDCanvasMetafile : public wxScrolledWindow +{ +public: + DnDCanvasMetafile(wxWindow *parent) : wxScrolledWindow(parent) { } + + void SetMetafile(const wxMetafile& metafile) + { + m_metafile = metafile; + + SetScrollbars(10, 10, + m_metafile.GetWidth() / 10, m_metafile.GetHeight() / 10); + + Refresh(); + } + + void OnPaint(wxPaintEvent& event) + { + wxPaintDC dc(this); + + if ( m_metafile.Ok() ) + { + PrepareDC(dc); + + m_metafile.Play(&dc); + } + } + +private: + wxMetafile m_metafile; + + DECLARE_EVENT_TABLE() +}; + +#endif // USE_METAFILES + // ---------------------------------------------------------------------------- // Define a new frame type for the main frame // ---------------------------------------------------------------------------- @@ -135,7 +210,6 @@ private: *m_pLogPrev; wxString m_strText; - wxBitmap m_bitmap; }; // ---------------------------------------------------------------------------- @@ -438,16 +512,19 @@ public: return m_shape->GetDataSize(); } #ifdef USE_METAFILES - else if ( format == wxDF_METAFILE ) + else if ( m_dobjMetaFile.IsSupported(format) ) { if ( !m_hasMetaFile ) CreateMetaFile(); - return m_dobjMetaFile.GetDataSize(); + return m_dobjMetaFile.GetDataSize(format); } #endif // Windows else { + wxASSERT_MSG( m_dobjBitmap.IsSupported(format), + "unexpected format" ); + if ( !m_hasBitmap ) CreateBitmap(); @@ -464,16 +541,19 @@ public: return TRUE; } #ifdef USE_METAFILES - else if ( format == wxDF_METAFILE ) + else if ( m_dobjMetaFile.IsSupported(format) ) { if ( !m_hasMetaFile ) CreateMetaFile(); - return m_dobjMetaFile.GetDataHere(pBuf); + return m_dobjMetaFile.GetDataHere(format, pBuf); } #endif // Windows else { + wxASSERT_MSG( m_dobjBitmap.IsSupported(format), + "unexpected format" ); + if ( !m_hasBitmap ) CreateBitmap(); @@ -627,6 +707,16 @@ private: DnDShapeFrame *m_frame; }; +// ---------------------------------------------------------------------------- +// functions prototypes +// ---------------------------------------------------------------------------- + +static void ShowBitmap(const wxBitmap& bitmap); + +#ifdef USE_METAFILES +static void ShowMetaFile(const wxMetaFile& metafile); +#endif // USE_METAFILES + // ---------------------------------------------------------------------------- // IDs for the menu commands // ---------------------------------------------------------------------------- @@ -697,6 +787,16 @@ BEGIN_EVENT_TABLE(DnDShapeDialog, wxDialog) EVT_BUTTON(Button_Colour, DnDShapeDialog::OnColour) END_EVENT_TABLE() +BEGIN_EVENT_TABLE(DnDCanvasBitmap, wxScrolledWindow) + EVT_PAINT(DnDCanvasBitmap::OnPaint) +END_EVENT_TABLE() + +#ifdef USE_METAFILES +BEGIN_EVENT_TABLE(DnDCanvasMetafile, wxScrolledWindow) + EVT_PAINT(DnDCanvasMetafile::OnPaint) +END_EVENT_TABLE() +#endif // USE_METAFILES + // ============================================================================ // implementation // ============================================================================ @@ -863,15 +963,7 @@ void DnDFrame::OnPaint(wxPaintEvent& WXUNUSED(event)) wxPaintDC dc(this); dc.SetFont( wxFont( 24, wxDECORATIVE, wxNORMAL, wxNORMAL, FALSE, "charter" ) ); - dc.DrawText( "Drag text from here!", 20, h-50 ); - - if ( m_bitmap.Ok() ) - { - // 4/5 is 80% taken by other windows, 20 is arbitrary margin - dc.DrawBitmap(m_bitmap, - w - m_bitmap.GetWidth() - 20, - (4*h)/5 + 20); - } + dc.DrawText( "Drag text from here!", 100, h-50 ); } void DnDFrame::OnUpdateUIPasteText(wxUpdateUIEvent& event) @@ -1114,9 +1206,11 @@ void DnDFrame::OnPasteBitmap(wxCommandEvent& WXUNUSED(event)) } else { - wxLogMessage(_T("Bitmap pasted from the clipboard") ); - m_bitmap = data.GetBitmap(); - Refresh(); + const wxBitmap& bmp = data.GetBitmap(); + + wxLogMessage(_T("Bitmap %dx%d pasted from the clipboard"), + bmp.GetWidth(), bmp.GetHeight()); + ShowBitmap(bmp); } wxTheClipboard->Close(); @@ -1146,9 +1240,12 @@ void DnDFrame::OnPasteMetafile(wxCommandEvent& WXUNUSED(event)) } else { - wxLogMessage(_T("Metafile pasted from the clipboard")); + const wxMetaFile& mf = data.GetMetafile(); - // TODO: show it somewhere + wxLogMessage(_T("Metafile %dx%d pasted from the clipboard"), + mf.GetWidth(), mf.GetHeight()); + + ShowMetaFile(mf); } } @@ -1527,7 +1624,6 @@ void DnDShapeFrame::OnCopyShape(wxCommandEvent& event) { if ( m_shape ) { -#if 1 wxClipboardLocker clipLocker; if ( !clipLocker ) { @@ -1537,22 +1633,6 @@ void DnDShapeFrame::OnCopyShape(wxCommandEvent& event) } wxTheClipboard->AddData(new DnDShapeDataObject(m_shape)); -#else - // VZ: temp test code, will remove - wxOpenClipboard(); - - wxMetaFileDC dcMF; - - m_shape->Draw(dcMF); - - wxMetafile *mf = dcMF.Close(); - - wxPoint pos = m_shape->GetPosition(); - wxSize size = m_shape->GetSize(); - wxSetClipboardData(wxDF_METAFILE, mf, pos.x + size.x, pos.y + size.y); - - wxCloseClipboard(); -#endif } } @@ -1639,20 +1719,20 @@ DnDShape *DnDShape::New(const void *buf) void DnDShapeDataObject::CreateMetaFile() const { - wxMetaFileDC dcMF; + wxPoint pos = m_shape->GetPosition(); + wxSize size = m_shape->GetSize(); + + wxMetaFileDC dcMF(wxEmptyString, pos.x + size.x, pos.y + size.y); m_shape->Draw(dcMF); wxMetafile *mf = dcMF.Close(); - wxPoint pos = m_shape->GetPosition(); - wxSize size = m_shape->GetSize(); - mf->SetWidth(pos.x + size.x); - mf->SetHeight(pos.y + size.y); - DnDShapeDataObject *self = (DnDShapeDataObject *)this; // const_cast self->m_dobjMetaFile.SetMetafile(*mf); self->m_hasMetaFile = TRUE; + + delete mf; } #endif // Windows @@ -1676,3 +1756,40 @@ void DnDShapeDataObject::CreateBitmap() const self->m_hasBitmap = TRUE; } +// ---------------------------------------------------------------------------- +// global functions +// ---------------------------------------------------------------------------- + +static void ShowBitmap(const wxBitmap& bitmap) +{ + wxFrame *frame = new wxFrame(NULL, -1, _T("Bitmap view")); + frame->CreateStatusBar(); + DnDCanvasBitmap *canvas = new DnDCanvasBitmap(frame); + canvas->SetBitmap(bitmap); + + int w = bitmap.GetWidth(), + h = bitmap.GetHeight(); + frame->SetStatusText(wxString::Format(_T("%dx%d"), w, h)); + + frame->SetClientSize(w > 100 ? 100 : w, h > 100 ? 100 : h); + frame->Show(); +} + +#ifdef USE_METAFILES + +static void ShowMetaFile(const wxMetaFile& metafile) +{ + wxFrame *frame = new wxFrame(NULL, -1, _T("Metafile view")); + frame->CreateStatusBar(); + DnDCanvasMetafile *canvas = new DnDCanvasMetafile(frame); + canvas->SetMetafile(metafile); + + wxSize size = metafile.GetSize(); + frame->SetStatusText(wxString::Format(_T("%dx%d"), size.x, size.y)); + + frame->SetClientSize(size.x > 100 ? 100 : size.x, + size.y > 100 ? 100 : size.y); + frame->Show(); +} + +#endif // USE_METAFILES diff --git a/samples/text/text.cpp b/samples/text/text.cpp index 09e8e6013d..6fc3a71448 100644 --- a/samples/text/text.cpp +++ b/samples/text/text.cpp @@ -29,7 +29,7 @@ #endif #if wxUSE_FILE - #include "wx/file.h" + #include "wx/file.h" #endif #if wxUSE_TOOLTIPS @@ -159,7 +159,7 @@ enum TEXT_QUIT = 100, TEXT_ABOUT, TEXT_LOAD, - TEXT_SAVE, + TEXT_SAVE, TEXT_CLEAR, // clipboard menu @@ -374,6 +374,13 @@ void MyTextCtrl::OnChar(wxKeyEvent& event) { LogEvent( _T("Char"), event); + wxWindow *win = (wxWindow *)event.GetEventObject(); + const wxChar *data = (const wxChar *)(win->GetClientData()); + if ( data ) + { + wxLogMessage(_T(" (from control '%s')"), data); + } + /* How are we supposed to test wxTE_PROCESS_TAB with this code? if ( event.KeyCode() == WXK_TAB ) @@ -390,7 +397,7 @@ void MyTextCtrl::OnChar(wxKeyEvent& event) void MyTextCtrl::OnKeyUp(wxKeyEvent& event) { - LogEvent( _("Key up"), event); + LogEvent( _T("Key up"), event); event.Skip(); } @@ -446,10 +453,10 @@ void MyTextCtrl::OnKeyDown(wxKeyEvent& event) case WXK_F5: // insert a blank line WriteText("\n"); - break; + break; - default: - LogEvent( _("Key down"), event); + default: + LogEvent( wxT("Key down"), event); } event.Skip(); @@ -503,11 +510,13 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_multitext->SetToolTip("Press F1 here for statitics, F4 for capture and uncapture mouse."); #endif - m_tab = new MyTextCtrl( this, -1, "Multiline, allow processing.", + m_tab = new MyTextCtrl( this, 100, "Multiline, allow processing.", wxPoint(180,90), wxSize(240,70), wxTE_MULTILINE | wxTE_PROCESS_TAB ); + m_tab->SetClientData(_T("tab")); - m_enter = new MyTextCtrl( this, -1, "Multiline, allow processing.", + m_enter = new MyTextCtrl( this, 100, "Multiline, allow processing.", wxPoint(180,170), wxSize(240,70), wxTE_MULTILINE); + m_enter->SetClientData(_T("enter")); m_textrich = new MyTextCtrl(this, -1, "Allows more than 30Kb of text\n" "(even under broken Win9x)", -- 2.47.2