From e6d318c25afa1392b2b99616b480457f58da4435 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Fri, 26 Oct 2001 02:11:23 +0000 Subject: [PATCH] Added wxDragLink Added SetURL to wxURLDataObject Fixed the Mozilla problem by reversing the order of the component DOs in the wxURLDataObject. By checking the wxTextDataObject first then it avoids the problem of how Mozilla sends the UniformResourceLocator data. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12166 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/dataobj.h | 1 + include/wx/dnd.h | 3 ++- include/wx/msw/ole/dataobj2.h | 3 +++ samples/dnd/dnd.cpp | 25 ++++++++++++++----------- src/msw/ole/dataobj.cpp | 10 ++++++++-- src/msw/ole/droptgt.cpp | 6 ++++++ 6 files changed, 34 insertions(+), 14 deletions(-) diff --git a/include/wx/dataobj.h b/include/wx/dataobj.h index 19563d31a4..7c7aee91f9 100644 --- a/include/wx/dataobj.h +++ b/include/wx/dataobj.h @@ -467,6 +467,7 @@ private: { public: wxString GetURL() const { return GetText(); } + void SetURL(const wxString& url) { SetText(url); } }; #endif // __WXMSW__/!__WXMSW__ diff --git a/include/wx/dnd.h b/include/wx/dnd.h index 20d34cd6bc..b0c68b3b54 100644 --- a/include/wx/dnd.h +++ b/include/wx/dnd.h @@ -34,12 +34,13 @@ enum wxDragResult wxDragNone, // drag target didn't accept the data wxDragCopy, // the data was successfully copied wxDragMove, // the data was successfully moved (MSW only) + wxDragLink, // operation is a drag-link wxDragCancel // the operation was cancelled by user (not an error) }; inline WXDLLEXPORT bool wxIsDragResultOk(wxDragResult res) { - return res == wxDragCopy || res == wxDragMove; + return res == wxDragCopy || res == wxDragMove || res == wxDragLink; } // ---------------------------------------------------------------------------- diff --git a/include/wx/msw/ole/dataobj2.h b/include/wx/msw/ole/dataobj2.h index 7fdfa70f97..6f3740d972 100644 --- a/include/wx/msw/ole/dataobj2.h +++ b/include/wx/msw/ole/dataobj2.h @@ -90,6 +90,9 @@ public: // return the URL as string wxString GetURL() const; + // Set a string as the URL in the data object + void SetURL(const wxString& url); + // override to set m_textFormat virtual bool SetData(const wxDataFormat& format, size_t len, diff --git a/samples/dnd/dnd.cpp b/samples/dnd/dnd.cpp index 164dd9c712..474633ce89 100644 --- a/samples/dnd/dnd.cpp +++ b/samples/dnd/dnd.cpp @@ -109,7 +109,10 @@ public: // URLs can't be moved, only copied virtual wxDragResult OnDragOver(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), wxDragResult def) - { return def == wxDragMove ? wxDragCopy : def; } + { + return wxDragLink; // At least IE 5.x needs wxDragLink, the + // other browsers on MSW seem okay with it too. + } // translate this to calls to OnDropURL() just for convenience virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult def) @@ -1462,7 +1465,7 @@ DnDShapeDialog::DnDShapeDialog(wxFrame *parent, DnDShape *shape) const wxString choices[] = { wxT("None"), wxT("Triangle"), wxT("Rectangle"), wxT("Ellipse") }; - m_radio = new wxRadioBox( this, -1, wxT("&Shape"), + m_radio = new wxRadioBox( this, -1, wxT("&Shape"), wxDefaultPosition, wxDefaultSize, 4, choices, 4, wxRA_SPECIFY_COLS ); shapesSizer->Add( m_radio, 0, wxGROW|wxALL, 5 ); @@ -1472,32 +1475,32 @@ DnDShapeDialog::DnDShapeDialog(wxFrame *parent, DnDShape *shape) wxStaticBox* box = new wxStaticBox( this, -1, wxT("&Attributes") ); wxStaticBoxSizer* attrSizer = new wxStaticBoxSizer( box, wxHORIZONTAL ); wxFlexGridSizer* xywhSizer = new wxFlexGridSizer( 4, 2 ); - + wxStaticText* st; st = new wxStaticText( this, -1, wxT("Position &X:") ); m_textX = new wxTextCtrl( this, -1, wxEmptyString, wxDefaultPosition, wxSize( 30, 20 ) ); - xywhSizer->Add( st, 1, wxGROW|wxALL, 2 ); - xywhSizer->Add( m_textX, 1, wxGROW|wxALL, 2 ); + xywhSizer->Add( st, 1, wxGROW|wxALL, 2 ); + xywhSizer->Add( m_textX, 1, wxGROW|wxALL, 2 ); st = new wxStaticText( this, -1, wxT("Size &width:") ); m_textW = new wxTextCtrl( this, -1, wxEmptyString, wxDefaultPosition, wxSize( 30, 20 ) ); - xywhSizer->Add( st, 1, wxGROW|wxALL, 2 ); - xywhSizer->Add( m_textW, 1, wxGROW|wxALL, 2 ); + xywhSizer->Add( st, 1, wxGROW|wxALL, 2 ); + xywhSizer->Add( m_textW, 1, wxGROW|wxALL, 2 ); st = new wxStaticText( this, -1, wxT("&Y:") ); m_textY = new wxTextCtrl( this, -1, wxEmptyString, wxDefaultPosition, wxSize( 30, 20 ) ); - xywhSizer->Add( st, 1, wxALL|wxALIGN_RIGHT, 2 ); - xywhSizer->Add( m_textY, 1, wxGROW|wxALL, 2 ); + xywhSizer->Add( st, 1, wxALL|wxALIGN_RIGHT, 2 ); + xywhSizer->Add( m_textY, 1, wxGROW|wxALL, 2 ); st = new wxStaticText( this, -1, wxT("&height:") ); m_textH = new wxTextCtrl( this, -1, wxEmptyString, wxDefaultPosition, wxSize( 30, 20 ) ); - xywhSizer->Add( st, 1, wxALL|wxALIGN_RIGHT, 2 ); - xywhSizer->Add( m_textH, 1, wxGROW|wxALL, 2 ); + xywhSizer->Add( st, 1, wxALL|wxALIGN_RIGHT, 2 ); + xywhSizer->Add( m_textH, 1, wxGROW|wxALL, 2 ); wxButton* col = new wxButton( this, Button_Colour, wxT("&Colour...") ); attrSizer->Add( xywhSizer, 1, wxGROW ); diff --git a/src/msw/ole/dataobj.cpp b/src/msw/ole/dataobj.cpp index 7d1870e9a2..29c0d6f8e5 100644 --- a/src/msw/ole/dataobj.cpp +++ b/src/msw/ole/dataobj.cpp @@ -1109,8 +1109,8 @@ wxURLDataObject::wxURLDataObject() // we support CF_TEXT and CFSTR_SHELLURL formats which are basicly the same // but it seems that some browsers only provide one of them so we have to // support both - Add(new CFSTR_SHELLURLDataObject()); Add(new wxTextDataObject); + Add(new CFSTR_SHELLURLDataObject()); // we don't have any data yet m_dataObjectLast = NULL; @@ -1135,12 +1135,18 @@ wxString wxURLDataObject::GetURL() const size_t len = m_dataObjectLast->GetDataSize(); - m_dataObjectLast->GetDataHere(url.GetWriteBuf(len + 1)); + m_dataObjectLast->GetDataHere(url.GetWriteBuf(len)); url.UngetWriteBuf(); return url; } +void wxURLDataObject::SetURL(const wxString& url) +{ + SetData(wxDataFormat(wxDF_TEXT), url.Length()+1, url.c_str()); + SetData(wxDataFormat(CFSTR_SHELLURL), url.Length()+1, url.c_str()); +} + // ---------------------------------------------------------------------------- // private functions // ---------------------------------------------------------------------------- diff --git a/src/msw/ole/droptgt.cpp b/src/msw/ole/droptgt.cpp index 20e505910c..d1e4a97b11 100644 --- a/src/msw/ole/droptgt.cpp +++ b/src/msw/ole/droptgt.cpp @@ -484,6 +484,9 @@ static wxDragResult ConvertDragEffectToResult(DWORD dwEffect) case DROPEFFECT_COPY: return wxDragCopy; + case DROPEFFECT_LINK: + return wxDragLink; + case DROPEFFECT_MOVE: return wxDragMove; @@ -502,6 +505,9 @@ static DWORD ConvertDragResultToEffect(wxDragResult result) case wxDragCopy: return DROPEFFECT_COPY; + case wxDragLink: + return DROPEFFECT_LINK; + case wxDragMove: return DROPEFFECT_MOVE; -- 2.45.2