src/osx/checklst_osx.cpp
src/osx/choice_osx.cpp
src/osx/combobox_osx.cpp
+ src/osx/dnd_osx.cpp
src/osx/gauge_osx.cpp
src/osx/listbox_osx.cpp
src/osx/menu_osx.cpp
src/osx/carbon/dcscreen.cpp
src/osx/core/glgrab.cpp
src/osx/carbon/graphics.cpp
- src/osx/carbon/dnd.cpp
src/osx/carbon/font.cpp
src/osx/carbon/frame.cpp
src/osx/carbon/mdi.cpp
src/osx/carbon/colordlg.cpp
src/osx/carbon/dialog.cpp
src/osx/carbon/dirdlg.cpp
+ src/osx/carbon/dnd.cpp
src/osx/carbon/evtloop.cpp
src/osx/carbon/filedlg.cpp
src/osx/carbon/gauge.cpp
src/osx/cocoa/combobox.mm
src/osx/cocoa/dialog.mm
src/osx/cocoa/dirdlg.mm
+ src/osx/cocoa/dnd.mm
src/osx/cocoa/evtloop.mm
src/osx/cocoa/filedlg.mm
src/osx/cocoa/gauge.mm
void wxMacEnsureTrackingHandlersInstalled();
-//----------------------------------------------------------------------------
-// wxDropTarget
-//----------------------------------------------------------------------------
-
-wxDropTarget::wxDropTarget( wxDataObject *data )
- : wxDropTargetBase( data )
-{
- wxMacEnsureTrackingHandlersInstalled();
-}
-
-wxDragResult wxDropTarget::OnDragOver(
- wxCoord WXUNUSED(x), wxCoord WXUNUSED(y),
- wxDragResult def )
-{
- return CurrentDragHasSupportedFormat() ? def : wxDragNone;
-}
-
-wxDataFormat wxDropTarget::GetMatchingPair()
+OSStatus wxMacPromiseKeeper(PasteboardRef WXUNUSED(inPasteboard),
+ PasteboardItemID WXUNUSED(inItem),
+ CFStringRef WXUNUSED(inFlavorType),
+ void * WXUNUSED(inContext))
{
- wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/carbon/dnd.cpp");
- return wxDF_INVALID;
-}
+ OSStatus err = noErr;
-bool wxDropTarget::OnDrop( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y) )
-{
- if (m_dataObject == NULL)
- return false;
+ // we might add promises here later, inContext is the wxDropSource*
- return CurrentDragHasSupportedFormat();
+ return err;
}
-wxDragResult wxDropTarget::OnData(
- wxCoord WXUNUSED(x), wxCoord WXUNUSED(y),
- wxDragResult def )
+wxDropTarget::wxDropTarget( wxDataObject *data )
+ : wxDropTargetBase( data )
{
- if (m_dataObject == NULL)
- return wxDragNone;
-
- if (!CurrentDragHasSupportedFormat())
- return wxDragNone;
-
- return GetData() ? def : wxDragNone;
+ wxMacEnsureTrackingHandlersInstalled();
}
bool wxDropTarget::CurrentDragHasSupportedFormat()
// wxDropSource
//-------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-// drag request
-
wxDropSource::wxDropSource(wxWindow *win,
const wxCursor &cursorCopy,
const wxCursor &cursorMove,
m_window = win;
}
-wxDropSource::~wxDropSource()
-{
-}
-
-OSStatus wxMacPromiseKeeper(PasteboardRef WXUNUSED(inPasteboard),
- PasteboardItemID WXUNUSED(inItem),
- CFStringRef WXUNUSED(inFlavorType),
- void * WXUNUSED(inContext))
-{
- OSStatus err = noErr;
-
- // we might add promises here later, inContext is the wxDropSource*
-
- return err;
-}
-
wxDragResult wxDropSource::DoDragDrop(int flags)
{
wxASSERT_MSG( m_data, wxT("Drop source: no data") );
if ((m_data == NULL) || (m_data->GetFormatCount() == 0))
return (wxDragResult)wxDragNone;
-#if wxOSX_USE_CARBON
DragReference theDrag;
RgnHandle dragRegion;
OSStatus err = noErr;
DisposeDrag( theDrag );
CFRelease( pasteboard );
gTrackingGlobals.m_currentSource = NULL;
-#else
- wxUnusedVar(flags);
-#endif
return gTrackingGlobals.m_result;
}
-bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
-{
- const wxCursor& cursor = GetCursor(effect);
- bool result = cursor.Ok();
-
- if ( result )
- cursor.MacInstall();
-
- return result;
-}
-
bool gTrackingGlobalsInstalled = false;
// passing the globals via refcon is not needed by the CFM and later architectures anymore
// but I'll leave it in there, just in case...
-#if wxOSX_USE_CARBON
pascal OSErr wxMacWindowDragTrackingHandler(
DragTrackingMessage theMessage, WindowPtr theWindow,
void *handlerRefCon, DragReference theDrag );
pascal OSErr wxMacWindowDragReceiveHandler(
WindowPtr theWindow, void *handlerRefCon,
DragReference theDrag );
-#endif
void wxMacEnsureTrackingHandlersInstalled()
{
-#if wxOSX_USE_CARBON
if ( !gTrackingGlobalsInstalled )
{
OSStatus err;
gTrackingGlobalsInstalled = true;
}
-#endif
}
-#if wxOSX_USE_CARBON
pascal OSErr wxMacWindowDragTrackingHandler(
DragTrackingMessage theMessage, WindowPtr theWindow,
void *handlerRefCon, DragReference theDrag )
// this window is left
if ( trackingGlobals->m_currentTarget )
{
-#ifndef __LP64__
HideDragHilite( theDrag );
-#endif
trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard );
trackingGlobals->m_currentTarget->OnLeave();
trackingGlobals->m_currentTarget = NULL;
RgnHandle hiliteRgn = NewRgn();
Rect r = { y, x, y + win->GetSize().y, x + win->GetSize().x };
RectRgn( hiliteRgn, &r );
-#ifndef __LP64__
ShowDragHilite( theDrag, hiliteRgn, true );
-#endif
DisposeRgn( hiliteRgn );
}
}
{
trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard );
trackingGlobals->m_currentTarget->OnLeave();
-#ifndef __LP64__
HideDragHilite( theDrag );
-#endif
trackingGlobals->m_currentTarget = NULL;
}
trackingGlobals->m_currentTargetWindow = NULL;
return noErr;
}
-#endif
#endif // wxUSE_DRAG_AND_DROP
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/dnd.mm
+// Purpose: wxDropTarget, wxDropSource implementations
+// Author: Stefan Csomor
+// Modified by:
+// Created: 1998-01-01
+// RCS-ID: $Id: dnd.cpp 61724 2009-08-21 10:41:26Z VZ $
+// Copyright: (c) 1998 Stefan Csomor
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#if wxUSE_DRAG_AND_DROP
+
+#include "wx/dnd.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/app.h"
+ #include "wx/evtloop.h"
+ #include "wx/toplevel.h"
+ #include "wx/gdicmn.h"
+ #include "wx/wx.h"
+#endif // WX_PRECOMP
+
+#include <AppKit/AppKit.h>
+#include "wx/osx/private.h"
+
+wxDragResult NSDragOperationToWxDragResult(NSDragOperation code)
+{
+ switch (code)
+ {
+ case NSDragOperationCopy:
+ return wxDragCopy;
+ case NSDragOperationMove:
+ return wxDragMove;
+ case NSDragOperationLink:
+ return wxDragLink;
+ case NSDragOperationNone:
+ return wxDragNone;
+ default:
+ wxFAIL_MSG("Unexpected result code");
+ }
+}
+
+@interface DropSourceDelegate : NSObject
+{
+ BOOL dragFinished;
+ int resultCode;
+ wxDropSource* impl;
+}
+
+- (void)setImplementation: (wxDropSource *)dropSource;
+- (BOOL)finished;
+- (NSDragOperation)code;
+- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation;
+@end
+
+@implementation DropSourceDelegate
+
+- (id)init
+{
+ [super init];
+ dragFinished = NO;
+ resultCode = NSDragOperationNone;
+ impl = 0;
+ return self;
+}
+
+- (void)setImplementation: (wxDropSource *)dropSource
+{
+ impl = dropSource;
+}
+
+- (BOOL)finished
+{
+ return dragFinished;
+}
+
+- (NSDragOperation)code
+{
+ return resultCode;
+}
+
+- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation
+{
+ resultCode = operation;
+ dragFinished = YES;
+}
+
+@end
+
+wxDropTarget::wxDropTarget( wxDataObject *data )
+ : wxDropTargetBase( data )
+{
+
+}
+
+bool wxDropTarget::CurrentDragHasSupportedFormat()
+{
+ if (m_dataObject == NULL)
+ return false;
+
+ return m_dataObject->HasDataInPasteboard( m_currentDragPasteboard );
+}
+
+bool wxDropTarget::GetData()
+{
+ if (m_dataObject == NULL)
+ return false;
+
+ if ( !CurrentDragHasSupportedFormat() )
+ return false;
+
+ return m_dataObject->GetFromPasteboard( m_currentDragPasteboard );
+}
+
+//-------------------------------------------------------------------------
+// wxDropSource
+//-------------------------------------------------------------------------
+
+wxDropSource::wxDropSource(wxWindow *win,
+ const wxCursor &cursorCopy,
+ const wxCursor &cursorMove,
+ const wxCursor &cursorStop)
+ : wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
+{
+ m_window = win;
+}
+
+wxDropSource::wxDropSource(wxDataObject& data,
+ wxWindow *win,
+ const wxCursor &cursorCopy,
+ const wxCursor &cursorMove,
+ const wxCursor &cursorStop)
+ : wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
+{
+ SetData( data );
+ m_window = win;
+}
+
+wxDragResult wxDropSource::DoDragDrop(int flags)
+{
+ wxASSERT_MSG( m_data, wxT("Drop source: no data") );
+
+ wxDragResult result = wxDragNone;
+ if ((m_data == NULL) || (m_data->GetFormatCount() == 0))
+ return result;
+
+ NSView* view = m_window->GetPeer()->GetWXWidget();
+ if (view)
+ {
+ NSPasteboard *pboard;
+
+ pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
+
+ OSStatus err = noErr;
+ PasteboardRef pboardRef;
+ PasteboardCreate((CFStringRef)[pboard name], &pboardRef);
+
+ err = PasteboardClear( pboardRef );
+ if ( err != noErr )
+ {
+ CFRelease( pboardRef );
+ return wxDragNone;
+ }
+ PasteboardSynchronize( pboardRef );
+
+ m_data->AddToPasteboard( pboardRef, 1 );
+
+ NSEvent* theEvent = (NSEvent*)wxTheApp->MacGetCurrentEvent();
+ wxASSERT_MSG(theEvent, "DoDragDrop must be called in response to a mouse down or drag event.");
+
+ NSImage* image = [[NSImage alloc] initWithSize: NSMakeSize(16,16)];
+ DropSourceDelegate* delegate = [[DropSourceDelegate alloc] init];
+ [delegate setImplementation: this];
+ [view dragImage:image at:NSMakePoint(0.0, 16.0) offset:NSMakeSize(0.0,0.0)
+ event: theEvent pasteboard: pboard source:delegate slideBack: NO];
+
+ wxEventLoopBase * const loop = wxEventLoop::GetActive();
+ while ( ![delegate finished] )
+ loop->Dispatch();
+
+ result = NSDragOperationToWxDragResult([delegate code]);
+ [delegate release];
+ [image release];
+ }
+
+
+ return result;
+}
+
+#endif // wxUSE_DRAG_AND_DROP
+
inMode:NSDefaultRunLoopMode
dequeue: YES])
{
+ if (wxTheApp)
+ wxTheApp->MacSetCurrentEvent(event, NULL);
m_sleepTime = 0.0;
[NSApp sendEvent: event];
}
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/dnd_osx.cpp
+// Purpose: Mac common wxDropTarget, wxDropSource implementations
+// Author: Stefan Csomor
+// Modified by:
+// Created: 1998-01-01
+// RCS-ID: $Id: dnd.cpp 61724 2009-08-21 10:41:26Z VZ $
+// Copyright: (c) 1998 Stefan Csomor
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#if wxUSE_DRAG_AND_DROP
+
+#include "wx/dnd.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/app.h"
+ #include "wx/toplevel.h"
+ #include "wx/gdicmn.h"
+#endif // WX_PRECOMP
+
+#include "wx/osx/private.h"
+
+//----------------------------------------------------------------------------
+// wxDropTarget
+//----------------------------------------------------------------------------
+
+wxDragResult wxDropTarget::OnDragOver(
+ wxCoord WXUNUSED(x), wxCoord WXUNUSED(y),
+ wxDragResult def )
+{
+ return CurrentDragHasSupportedFormat() ? def : wxDragNone;
+}
+
+wxDataFormat wxDropTarget::GetMatchingPair()
+{
+ wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/carbon/dnd.cpp");
+ return wxDF_INVALID;
+}
+
+bool wxDropTarget::OnDrop( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y) )
+{
+ if (m_dataObject == NULL)
+ return false;
+
+ return CurrentDragHasSupportedFormat();
+}
+
+wxDragResult wxDropTarget::OnData(
+ wxCoord WXUNUSED(x), wxCoord WXUNUSED(y),
+ wxDragResult def )
+{
+ if (m_dataObject == NULL)
+ return wxDragNone;
+
+ if (!CurrentDragHasSupportedFormat())
+ return wxDragNone;
+
+ return GetData() ? def : wxDragNone;
+}
+
+//-------------------------------------------------------------------------
+// wxDropSource
+//-------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// drag request
+
+wxDropSource::~wxDropSource()
+{
+}
+
+bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
+{
+ const wxCursor& cursor = GetCursor(effect);
+ bool result = cursor.Ok();
+
+ if ( result )
+ cursor.MacInstall();
+
+ return result;
+}
+
+#endif // wxUSE_DRAG_AND_DROP
+