]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxDragLink
authorRobin Dunn <robin@alldunn.com>
Fri, 26 Oct 2001 02:11:23 +0000 (02:11 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 26 Oct 2001 02:11:23 +0000 (02:11 +0000)
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
include/wx/dnd.h
include/wx/msw/ole/dataobj2.h
samples/dnd/dnd.cpp
src/msw/ole/dataobj.cpp
src/msw/ole/droptgt.cpp

index 19563d31a4fe19c401986ad02ee4df4ac6567851..7c7aee91f9317e0090929335078c315a6e112016 100644 (file)
@@ -467,6 +467,7 @@ private:
     {
     public:
         wxString GetURL() const { return GetText(); }
+        void SetURL(const wxString& url) { SetText(url); }
     };
 #endif // __WXMSW__/!__WXMSW__
 
index 20d34cd6bc4647e227c61da8a542aa8275966a5d..b0c68b3b54e8b0c22054ee3c05f735b3b43d0839 100644 (file)
@@ -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;
 }
 
 // ----------------------------------------------------------------------------
index 7fdfa70f97b75c8ef14ba1ec0131c61432e8ee5c..6f3740d9726e8e2a8b0b4bb03b97cb0dc4721290 100644 (file)
@@ -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,
index 164dd9c712adf824020132b04aaf078c6d6aad75..474633ce8931a8d1b70f9e1aaa3aaf70c60477d4 100644 (file)
@@ -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 );
index 7d1870e9a20729f7c4cb036f3c537bbad99a6952..29c0d6f8e52a58371b1260f1042b963cc75bed7f 100644 (file)
@@ -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
 // ----------------------------------------------------------------------------
index 20e505910c03fc6587291d93392d6bc0aac74b88..d1e4a97b114619dc7861f5af2d8353a27502d2b1 100644 (file)
@@ -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;