diff --git a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp index 8d6791025f..c33d941dec 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp @@ -492,7 +492,7 @@ const String ProjectTreeViewBase::getTooltip() return String::empty; } -const String ProjectTreeViewBase::getDragSourceDescription() +const var ProjectTreeViewBase::getDragSourceDescription() { delayedSelectionTimer = nullptr; return projectItemDragType; diff --git a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h index 648d5e728d..2a25e75171 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h @@ -86,7 +86,7 @@ public: void itemDoubleClicked (const MouseEvent& e); void itemSelectionChanged (bool isNowSelected); const String getTooltip(); - const String getDragSourceDescription(); + const var getDragSourceDescription(); //============================================================================== // Drag-and-drop stuff.. diff --git a/extras/JuceDemo/Source/demos/DragAndDropDemo.cpp b/extras/JuceDemo/Source/demos/DragAndDropDemo.cpp index 5aa4f253af..0121322254 100644 --- a/extras/JuceDemo/Source/demos/DragAndDropDemo.cpp +++ b/extras/JuceDemo/Source/demos/DragAndDropDemo.cpp @@ -70,7 +70,7 @@ public: Justification::centredLeft, true); } - const String getDragSourceDescription (const SparseSet& selectedRows) + const var getDragSourceDescription (const SparseSet& selectedRows) { // for our drag desctription, we'll just make a list of the selected // row numbers - this will be picked up by the drag target and displayed in @@ -159,7 +159,7 @@ public: void itemDropped (const SourceDetails& dragSourceDetails) { - message = "last rows dropped: " + dragSourceDetails.description; + message = "last rows dropped: " + dragSourceDetails.description.toString(); somethingIsBeingDraggedOver = false; repaint(); diff --git a/extras/JuceDemo/Source/demos/TreeViewDemo.cpp b/extras/JuceDemo/Source/demos/TreeViewDemo.cpp index cbf31760f4..2f7a4065e6 100644 --- a/extras/JuceDemo/Source/demos/TreeViewDemo.cpp +++ b/extras/JuceDemo/Source/demos/TreeViewDemo.cpp @@ -98,7 +98,7 @@ public: } } - const String getDragSourceDescription() + const var getDragSourceDescription() { return "TreeView Items"; } diff --git a/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp b/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp index b7ef5cd136..56174f4e9e 100644 --- a/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp +++ b/extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp @@ -93,15 +93,17 @@ public: { const Identifier memberId (getStringFromDISPID (dispIdMember)); - if (memberId.toString().isEmpty() || v.getObject() == 0) + DynamicObject* const object = v.getDynamicObject(); + + if (memberId.toString().isEmpty() || object == nullptr) return DISP_E_MEMBERNOTFOUND; if ((wFlags & DISPATCH_METHOD) != 0) { - if (! v.getObject()->hasMethod (memberId)) + if (! object->hasMethod (memberId)) return DISP_E_MEMBERNOTFOUND; - const int numArgs = pDispParams == 0 ? 0 : pDispParams->cArgs; + const int numArgs = pDispParams == nullptr ? 0 : pDispParams->cArgs; var result; if (numArgs == 0) @@ -117,27 +119,27 @@ public: result = v.invoke (memberId, numArgs == 0 ? 0 : args.getRawDataPointer(), numArgs); } - if (pVarResult != 0) + if (pVarResult != nullptr) juceVarToVariant (result, *pVarResult); return S_OK; } else if ((wFlags & DISPATCH_PROPERTYGET) != 0) { - if (! v.getObject()->hasProperty (memberId)) + if (! object->hasProperty (memberId)) return DISP_E_MEMBERNOTFOUND; - if (pVarResult != 0) + if (pVarResult != nullptr) { - juceVarToVariant (v.getObject()->getProperty (memberId), *pVarResult); + juceVarToVariant (object->getProperty (memberId), *pVarResult); return S_OK; } } else if ((wFlags & DISPATCH_PROPERTYPUT) != 0) { - if (pDispParams != 0 && pDispParams->cArgs > 0) + if (pDispParams != nullptr && pDispParams->cArgs > 0) { - v.getObject()->setProperty (memberId, variantTojuceVar (pDispParams->rgvarg[0])); + object->setProperty (memberId, variantTojuceVar (pDispParams->rgvarg[0])); return S_OK; } } @@ -376,7 +378,7 @@ void juceVarToVariant (const var& v, VARIANT& dest) dest.vt = VT_BSTR; dest.bstrVal = SysAllocString (v.toString().toUTF16()); } - else if (v.isObject()) + else if (v.getDynamicObject() != nullptr) { dest.vt = VT_DISPATCH; dest.pdispVal = new IDispatchWrappingDynamicObject (v); @@ -397,25 +399,25 @@ const var variantTojuceVar (const VARIANT& v) { switch (v.vt & ~VT_BYREF) { - case VT_VOID: - case VT_EMPTY: return var::null; - case VT_I1: return var ((int) v.cVal); - case VT_I2: return var ((int) v.iVal); - case VT_I4: return var ((int) v.lVal); - case VT_I8: return var (String (v.llVal)); - case VT_UI1: return var ((int) v.bVal); - case VT_UI2: return var ((int) v.uiVal); - case VT_UI4: return var ((int) v.ulVal); - case VT_UI8: return var (String (v.ullVal)); - case VT_INT: return var ((int) v.intVal); - case VT_UINT: return var ((int) v.uintVal); - case VT_R4: return var ((double) v.fltVal); - case VT_R8: return var ((double) v.dblVal); - case VT_BSTR: return var (String (v.bstrVal)); - case VT_BOOL: return var (v.boolVal ? true : false); - case VT_DISPATCH: return var (new DynamicObjectWrappingIDispatch (v.pdispVal)); - default: - break; + case VT_VOID: + case VT_EMPTY: return var::null; + case VT_I1: return var ((int) v.cVal); + case VT_I2: return var ((int) v.iVal); + case VT_I4: return var ((int) v.lVal); + case VT_I8: return var (String (v.llVal)); + case VT_UI1: return var ((int) v.bVal); + case VT_UI2: return var ((int) v.uiVal); + case VT_UI4: return var ((int) v.ulVal); + case VT_UI8: return var (String (v.ullVal)); + case VT_INT: return var ((int) v.intVal); + case VT_UINT: return var ((int) v.uintVal); + case VT_R4: return var ((double) v.fltVal); + case VT_R8: return var ((double) v.dblVal); + case VT_BSTR: return var (String (v.bstrVal)); + case VT_BOOL: return var (v.boolVal ? true : false); + case VT_DISPATCH: return var (new DynamicObjectWrappingIDispatch (v.pdispVal)); + default: + break; } } @@ -430,31 +432,31 @@ public: //============================================================================== AXBrowserPluginHolderComponent() : parentHWND (0), - browser (0) + browser (nullptr) { setOpaque (true); setWantsKeyboardFocus (false); addAndMakeVisible (child = createBrowserPlugin()); - jassert (child != 0); // You have to create one of these! + jassert (child != nullptr); // You have to create one of these! } ~AXBrowserPluginHolderComponent() { - setWindow (0); - child = 0; + setWindow (nullptr); + child = nullptr; } //============================================================================== void paint (Graphics& g) { - if (child == 0 || ! child->isOpaque()) + if (child == nullptr || ! child->isOpaque()) g.fillAll (Colours::white); } void resized() { - if (child != 0) + if (child != nullptr) child->setBounds (0, 0, getWidth(), getHeight()); } @@ -462,22 +464,22 @@ public: void setWindow (IOleInPlaceSite* site) { - if (browser != 0) + if (browser != nullptr) { browser->Release(); - browser = 0; + browser = nullptr; } HWND newHWND = 0; - if (site != 0) + if (site != nullptr) { site->GetWindow (&newHWND); - IServiceProvider* sp = 0; + IServiceProvider* sp = nullptr; site->QueryInterface (IID_IServiceProvider, (void**) &sp); - if (sp != 0) + if (sp != nullptr) { sp->QueryService (IID_IWebBrowserApp, IID_IWebBrowser2, (void**) &browser); sp->Release(); @@ -505,16 +507,16 @@ public: } } - if (site != 0) + if (site != nullptr) site->OnInPlaceActivate(); } const String getBrowserURL() const { - if (browser == 0) + if (browser == nullptr) return String::empty; - BSTR url = 0; + BSTR url = nullptr; browser->get_LocationURL (&url); return URL::removeEscapeChars (url); } @@ -531,8 +533,7 @@ extern String browserVersionDesc; static const String getExePath() { - TCHAR moduleFile [2048]; - moduleFile[0] = 0; + TCHAR moduleFile [2048] = { 0 }; GetModuleFileName (0, moduleFile, 2048); return moduleFile; } @@ -550,7 +551,7 @@ static const String getExeVersion (const String& exeFileName, const String& fiel if (GetFileVersionInfo (exeFileName.toUTF16(), 0, size, exeInfo)) { - TCHAR* result = 0; + TCHAR* result = nullptr; unsigned int resultLen = 0; // try the 1200 codepage (Unicode) @@ -580,7 +581,7 @@ class JuceActiveXObject : public IUnknown, { public: JuceActiveXObject() - : site (0), refCount (0) + : site (nullptr), refCount (0) { log ("JuceActiveXObject"); } @@ -588,7 +589,7 @@ public: ~JuceActiveXObject() { log ("~JuceActiveXObject"); - holderComp = 0; + holderComp = nullptr; } HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result) @@ -620,7 +621,7 @@ public: DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) { - if (holderComp == 0) + if (holderComp == nullptr) return DISP_E_MEMBERNOTFOUND; return iDispatchHelper.doInvoke (holderComp->getObject(), @@ -632,19 +633,19 @@ public: { if (newSite != site) { - if (site != 0) + if (site != nullptr) site->Release(); site = newSite; - if (site != 0) + if (site != nullptr) { site->AddRef(); - IOleInPlaceSite* inPlaceSite = 0; + IOleInPlaceSite* inPlaceSite = nullptr; site->QueryInterface (IID_IOleInPlaceSite, (void**) &inPlaceSite); - if (inPlaceSite != 0) + if (inPlaceSite != nullptr) { createHolderComp(); @@ -667,7 +668,7 @@ public: void createHolderComp() { - if (holderComp == 0) + if (holderComp == nullptr) { if (numActivePlugins++ == 0) { @@ -683,9 +684,9 @@ public: void deleteHolderComp() { - if (holderComp != 0) + if (holderComp != nullptr) { - holderComp = 0; + holderComp = nullptr; if (--numActivePlugins == 0) { @@ -704,7 +705,7 @@ public: //============================================================================== HRESULT __stdcall SetObjectRects (LPCRECT r, LPCRECT c) { - if (holderComp != 0) + if (holderComp != nullptr) holderComp->setBounds (r->left, r->top, r->right - r->left, r->bottom - r->top); return S_OK; @@ -712,7 +713,7 @@ public: HRESULT __stdcall GetWindow (HWND* phwnd) { - if (holderComp == 0) + if (holderComp == nullptr) return E_NOTIMPL; *phwnd = (HWND) holderComp->getWindowHandle(); @@ -766,9 +767,9 @@ public: HRESULT __stdcall CreateInstance (IUnknown* pUnkOuter, REFIID riid, void** ppvObject) { - *ppvObject = 0; + *ppvObject = nullptr; - if (pUnkOuter != 0 && riid != IID_IUnknown) + if (pUnkOuter != nullptr && riid != IID_IUnknown) return CLASS_E_NOAGGREGATION; JuceActiveXObject* ax = new JuceActiveXObject(); @@ -788,7 +789,7 @@ private: const String getActiveXBrowserURL (const BrowserPluginComponent* comp) { AXBrowserPluginHolderComponent* const ax = dynamic_cast (comp->getParentComponent()); - return ax != 0 ? ax->getBrowserURL() : String::empty; + return ax != nullptr ? ax->getBrowserURL() : String::empty; } //============================================================================== @@ -822,16 +823,16 @@ extern "C" BOOL WINAPI DllMain (HANDLE instance, DWORD reason, LPVOID) static const String CLSIDToJuceString (REFCLSID clsid) { - LPWSTR s = 0; + LPWSTR s = nullptr; StringFromIID (clsid, &s); - if (s == 0) + if (s == nullptr) return String::empty; const String result (s); LPMALLOC malloc; CoGetMalloc (1, &malloc); - if (malloc != 0) + if (malloc != nullptr) { malloc->Free (s); malloc->Release(); @@ -844,7 +845,7 @@ STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID* ppv) { #pragma EXPORTED_FUNCTION - *ppv = 0; + *ppv = nullptr; if (CLSIDToJuceString (rclsid).equalsIgnoreCase (String (JuceBrowserPlugin_ActiveXCLSID))) { diff --git a/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp b/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp index 727c454389..0d825b3d1e 100644 --- a/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp +++ b/extras/browser plugins/wrapper/juce_NPAPI_GlueCode.cpp @@ -121,9 +121,9 @@ NPError NP_GetValue (void* future, NPPVariable variable, void* value) #if JUCE_WINDOWS || JUCE_MAC NPError OSCALL NP_GetEntryPoints (NPPluginFuncs* funcs) { -#if JUCE_WINDOWS + #if JUCE_WINDOWS #pragma EXPORTED_FUNCTION -#endif + #endif log ("NP_GetEntryPoints"); if (funcs == 0 || (funcs->size > 0 && funcs->size < sizeof (NPPluginFuncs))) @@ -138,17 +138,17 @@ NPError OSCALL NP_GetEntryPoints (NPPluginFuncs* funcs) funcs->destroystream = NPP_DestroyStream; funcs->asfile = NPP_StreamAsFile; funcs->writeready = NPP_WriteReady; -#if JUCE_MAC + #if JUCE_MAC funcs->write = (NPP_WriteProcPtr) NPP_Write; -#else + #else funcs->write = NPP_Write; -#endif + #endif funcs->print = NPP_Print; funcs->event = NPP_HandleEvent; funcs->urlnotify = NPP_URLNotify; funcs->getvalue = NPP_GetValue; funcs->setvalue = NPP_SetValue; - funcs->javaClass = 0; + funcs->javaClass = nullptr; return NPERR_NO_ERROR; } @@ -160,9 +160,9 @@ NPError OSCALL NP_Initialize (NPNetscapeFuncs* funcs #endif ) { -#if JUCE_WINDOWS + #if JUCE_WINDOWS #pragma EXPORTED_FUNCTION -#endif + #endif log ("NP_Initialize"); if (funcs == 0) @@ -174,7 +174,7 @@ NPError OSCALL NP_Initialize (NPNetscapeFuncs* funcs zerostruct (browser); memcpy (&browser, funcs, jmin ((size_t) funcs->size, sizeof (browser))); -#ifdef XP_UNIX + #ifdef XP_UNIX pluginFuncs->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR; pluginFuncs->size = sizeof (NPPluginFuncs); pluginFuncs->newp = NewNPP_NewProc (NPP_New); @@ -192,16 +192,16 @@ NPError OSCALL NP_Initialize (NPNetscapeFuncs* funcs #ifdef OJI pluginFuncs->javaClass = NPP_GetJavaClass(); #endif -#endif + #endif return NPERR_NO_ERROR; } NPError OSCALL NP_Shutdown() { -#if JUCE_WINDOWS + #if JUCE_WINDOWS #pragma EXPORTED_FUNCTION -#endif + #endif log ("NP_Shutdown"); return NPERR_NO_ERROR; @@ -266,36 +266,37 @@ public: : npp (npp_) { log ("BrowserPluginHolderComponent created"); -#if JUCE_WINDOWS + #if JUCE_WINDOWS parentHWND = 0; oldWinProc = 0; -#else + #else currentParentView = 0; -#endif + #endif + setOpaque (true); setWantsKeyboardFocus (false); addAndMakeVisible (child = createBrowserPlugin()); - jassert (child != 0); // You have to create one of these! + jassert (child != nullptr); // You have to create one of these! } ~BrowserPluginHolderComponent() { log ("BrowserPluginHolderComponent deleted"); - setWindow (0); - child = 0; + setWindow (nullptr); + child = nullptr; } //============================================================================== void paint (Graphics& g) { - if (child == 0 || ! child->isOpaque()) + if (child == nullptr || ! child->isOpaque()) g.fillAll (Colours::white); } void resized() { - if (child != 0) + if (child != nullptr) child->setBounds (getLocalBounds()); } @@ -370,7 +371,7 @@ private: public: void setWindow (NPWindow* window) { - HWND newHWND = (window != 0 ? ((HWND) window->window) : 0); + HWND newHWND = (window != nullptr ? ((HWND) window->window) : 0); if (parentHWND != newHWND) { @@ -428,7 +429,7 @@ public: { NSView* found = findViewAt (v, x, y); - if (found != 0) + if (found != nil) return found; } } @@ -437,7 +438,7 @@ public: return parent; } - return 0; + return nil; } public: @@ -454,22 +455,22 @@ public: log ("setWindow"); - NSView* parentView = 0; - NP_CGContext* const cgContext = (window != 0) ? (NP_CGContext*) window->window : 0; + NSView* parentView = nil; + NP_CGContext* const cgContext = (window != nullptr) ? (NP_CGContext*) window->window : nullptr; log ("NP_CGContext: " + String::toHexString ((pointer_sized_int) cgContext)); -#ifndef __LP64__ - WindowRef windowRef = cgContext != 0 ? (WindowRef) cgContext->window : 0; + #ifndef __LP64__ + WindowRef windowRef = cgContext != nullptr ? (WindowRef) cgContext->window : 0; if (windowRef != 0) { NSWindow* win = [[[NSWindow alloc] initWithWindowRef: windowRef] autorelease]; -#else - NSWindow* win = cgContext != 0 ? (NSWindow*) cgContext->window : 0; + #else + NSWindow* win = cgContext != nullptr ? (NSWindow*) cgContext->window : nil; - if (win != 0) + if (win != nil) { -#endif + #endif log ("window: " + nsStringToJuce ([win description])); const Rectangle clip (window->clipRect.left, window->clipRect.top, @@ -505,7 +506,7 @@ public: if (! isBrowserContentView (parentView)) parentView = currentParentView; } - else if (currentParentView != 0 && ! target.isEmpty()) + else if (currentParentView != nil && ! target.isEmpty()) { // Firefox can send lots of spurious resize messages when updating its pages, so this is a // bodge to avoid flickering caused by repeatedly removing and re-adding the view.. @@ -524,7 +525,7 @@ public: currentParentView = parentView; - if (parentView != 0) + if (parentView != nil) { setSize (window->width, window->height); addToDesktop (0, parentView); @@ -532,7 +533,7 @@ public: } } - if (window != 0) + if (window != nullptr) setSize (window->width, window->height); } #endif @@ -673,16 +674,16 @@ private: bool hasMethod (NPIdentifier name) { - DynamicObject* const o = object.getObject(); - return o != 0 && o->hasMethod (identifierToString (name)); + DynamicObject* const o = object.getDynamicObject(); + return o != nullptr && o->hasMethod (identifierToString (name)); } bool invoke (NPIdentifier name, const NPVariant* args, uint32_t argCount, NPVariant* out) { - DynamicObject* const o = object.getObject(); + DynamicObject* const o = object.getDynamicObject(); const var::identifier methodName (identifierToString (name)); - if (o == 0 || ! o->hasMethod (methodName)) + if (o == nullptr || ! o->hasMethod (methodName)) return false; struct ParamHolder @@ -700,7 +701,7 @@ private: const var result (o->invokeMethod (methodName, params.params, argCount)); - if (out != 0) + if (out != nullptr) createNPVariantFromValue (npp, *out, result); return true; @@ -713,21 +714,21 @@ private: bool hasProperty (NPIdentifier name) { - DynamicObject* const o = object.getObject(); - return o != 0 && o->hasProperty (identifierToString (name)); + DynamicObject* const o = object.getDynamicObject(); + return o != nullptr && o->hasProperty (identifierToString (name)); } bool getProperty (NPIdentifier name, NPVariant* out) { - DynamicObject* const o = object.getObject(); + DynamicObject* const o = object.getDynamicObject(); const var::identifier propName (identifierToString (name)); - if (o == 0 || ! o->hasProperty (propName)) + if (o == nullptr || ! o->hasProperty (propName)) return false; const var result (o->getProperty (propName)); - if (out != 0) + if (out != nullptr) createNPVariantFromValue (npp, *out, result); return true; @@ -735,9 +736,9 @@ private: bool setProperty (NPIdentifier name, const NPVariant* value) { - DynamicObject* const o = object.getObject(); + DynamicObject* const o = object.getDynamicObject(); - if (value == 0 || o == 0) + if (value == nullptr || o == nullptr) return false; o->setProperty (identifierToString (name), createValueFromNPVariant (npp, *value)); @@ -746,10 +747,10 @@ private: bool removeProperty (NPIdentifier name) { - DynamicObject* const o = object.getObject(); + DynamicObject* const o = object.getDynamicObject(); const var::identifier propName (identifierToString (name)); - if (o == 0 || ! o->hasProperty (propName)) + if (o == nullptr || ! o->hasProperty (propName)) return false; o->removeProperty (propName); @@ -789,33 +790,30 @@ public: static bool class_construct (NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result) { return ((NPObjectWrappingDynamicObject*) npobj)->construct (args, argCount, result); } }; -#ifndef NP_CLASS_STRUCT_VERSION_ENUM static NPClass sNPObjectWrappingDynamicObject_NPClass = { + #ifndef NP_CLASS_STRUCT_VERSION_ENUM NP_CLASS_STRUCT_VERSION, NPObjectWrappingDynamicObject::createInstance, NPObjectWrappingDynamicObject::class_deallocate, NPObjectWrappingDynamicObject::class_invalidate, NPObjectWrappingDynamicObject::class_hasMethod, NPObjectWrappingDynamicObject::class_invoke, NPObjectWrappingDynamicObject::class_invokeDefault, NPObjectWrappingDynamicObject::class_hasProperty, NPObjectWrappingDynamicObject::class_getProperty, NPObjectWrappingDynamicObject::class_setProperty, NPObjectWrappingDynamicObject::class_removeProperty -}; -#else -static NPClass sNPObjectWrappingDynamicObject_NPClass = -{ + #else NP_CLASS_STRUCT_VERSION_ENUM, NPObjectWrappingDynamicObject::createInstance, NPObjectWrappingDynamicObject::class_deallocate, NPObjectWrappingDynamicObject::class_invalidate, NPObjectWrappingDynamicObject::class_hasMethod, NPObjectWrappingDynamicObject::class_invoke, NPObjectWrappingDynamicObject::class_invokeDefault, NPObjectWrappingDynamicObject::class_hasProperty, NPObjectWrappingDynamicObject::class_getProperty, NPObjectWrappingDynamicObject::class_setProperty, NPObjectWrappingDynamicObject::class_removeProperty, NPObjectWrappingDynamicObject::class_enumerate + #endif }; -#endif bool NPObjectWrappingDynamicObject::construct (const NPVariant* args, uint32_t argCount, NPVariant* result) { NPObject* const newObj = browser.createobject (npp, &sNPObjectWrappingDynamicObject_NPClass); - if (newObj == 0) + if (newObj == nullptr) return false; OBJECT_TO_NPVARIANT (newObj, *result); @@ -824,11 +822,11 @@ bool NPObjectWrappingDynamicObject::construct (const NPVariant* args, uint32_t a NPObject* NPObjectWrappingDynamicObject::create (NPP npp, const var& objectToWrap) { - jassert (objectToWrap.getObject() != 0); + jassert (objectToWrap.getDynamicObject() != nullptr); NPObject* const nppObject = browser.createobject (npp, &sNPObjectWrappingDynamicObject_NPClass); - if (nppObject != 0) + if (nppObject != nullptr) ((NPObjectWrappingDynamicObject*) nppObject)->object = objectToWrap; return nppObject; @@ -845,17 +843,18 @@ static const var createValueFromNPVariant (NPP npp, const NPVariant& v) else if (NPVARIANT_IS_DOUBLE (v)) return var (NPVARIANT_TO_DOUBLE (v)); else if (NPVARIANT_IS_STRING (v)) -#if JUCE_MAC - return var (String::fromUTF8 ((const char*) (NPVARIANT_TO_STRING (v).UTF8Characters), - (int) NPVARIANT_TO_STRING (v).UTF8Length)); -#else - return var (String::fromUTF8 ((const char*) (NPVARIANT_TO_STRING (v).utf8characters), - (int) NPVARIANT_TO_STRING (v).utf8length)); -#endif - else if (NPVARIANT_IS_OBJECT (v) && npp != 0) + { + return var (String::fromUTF8 ((const char*) + #if JUCE_MAC + (NPVARIANT_TO_STRING (v).UTF8Characters), (int) NPVARIANT_TO_STRING (v).UTF8Length)); + #else + (NPVARIANT_TO_STRING (v).utf8characters), (int) NPVARIANT_TO_STRING (v).utf8length)); + #endif + } + else if (NPVARIANT_IS_OBJECT (v) && npp != nullptr) return var (new DynamicObjectWrappingNPObject (npp, NPVARIANT_TO_OBJECT (v))); - return var(); + return var::null; } static void createNPVariantFromValue (NPP npp, NPVariant& out, const var& v) @@ -875,7 +874,7 @@ static void createNPVariantFromValue (NPP npp, NPVariant& out, const var& v) memcpy (stringCopy, utf8, utf8Len); STRINGZ_TO_NPVARIANT (stringCopy, out); } - else if (v.isObject() && npp != 0) + else if (v.getDynamicObject() != nullptr && npp != nullptr) OBJECT_TO_NPVARIANT (NPObjectWrappingDynamicObject::create (npp, v), out); else VOID_TO_NPVARIANT (out); @@ -888,21 +887,21 @@ public: //============================================================================== JucePluginInstance (NPP npp_) : npp (npp_), - holderComp (0), - scriptObject (0) + holderComp (nullptr), + scriptObject (nullptr) { } ~JucePluginInstance() { - setWindow (0); + setWindow (nullptr); } bool setWindow (NPWindow* window) { - if (window != 0) + if (window != nullptr) { - if (holderComp == 0) + if (holderComp == nullptr) holderComp = new BrowserPluginHolderComponent (npp); holderComp->setWindow (window); @@ -910,7 +909,7 @@ public: else { deleteAndZero (holderComp); - scriptObject = 0; + scriptObject = nullptr; } return true; @@ -918,10 +917,10 @@ public: NPObject* getScriptableObject() { - if (scriptObject == 0) + if (scriptObject == nullptr) scriptObject = NPObjectWrappingDynamicObject::create (npp, holderComp->getObject()); - if (scriptObject != 0 && shouldRetainBrowserObject()) + if (scriptObject != nullptr && shouldRetainBrowserObject()) browser.retainobject (scriptObject); return scriptObject; @@ -947,24 +946,24 @@ private: }; //============================================================================== -static NPP currentlyInitialisingNPP = 0; +static NPP currentlyInitialisingNPP = nullptr; static int numPluginInstances = 0; NPError NPP_New (NPMIMEType pluginType, NPP npp, ::uint16 mode, ::int16 argc, char* argn[], char* argv[], NPSavedData* saved) { log ("NPP_New"); - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; -#if JUCE_MAC + #if JUCE_MAC browser.setvalue (npp, (NPPVariable) NPNVpluginDrawingModel, (void*) NPDrawingModelCoreGraphics); - #ifdef __LP64__ + #ifdef __LP64__ browser.setvalue (npp, (NPPVariable) 1001 /*NPPVpluginEventModel*/, (void*) 1 /*NPEventModelCocoa*/); - #else + #else browser.setvalue (npp, (NPPVariable) 1001 /*NPPVpluginEventModel*/, 0 /*NPEventModelCarbon*/); - #endif -#endif + #endif + #endif if (numPluginInstances++ == 0) { @@ -974,7 +973,7 @@ NPError NPP_New (NPMIMEType pluginType, NPP npp, ::uint16 mode, ::int16 argc, ch currentlyInitialisingNPP = npp; JucePluginInstance* p = new JucePluginInstance (npp); - currentlyInitialisingNPP = 0; + currentlyInitialisingNPP = nullptr; npp->pdata = (void*) p; return NPERR_NO_ERROR; @@ -983,12 +982,12 @@ NPError NPP_New (NPMIMEType pluginType, NPP npp, ::uint16 mode, ::int16 argc, ch NPError NPP_Destroy (NPP npp, NPSavedData** save) { log ("NPP_Destroy"); - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; JucePluginInstance* const p = (JucePluginInstance*) npp->pdata; - if (p != 0) + if (p != nullptr) { delete p; @@ -1005,33 +1004,33 @@ NPError NPP_Destroy (NPP npp, NPSavedData** save) NPError NPP_SetWindow (NPP npp, NPWindow* pNPWindow) { - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; - if (pNPWindow == 0) + if (pNPWindow == nullptr) return NPERR_GENERIC_ERROR; JucePluginInstance* const p = (JucePluginInstance*) npp->pdata; - if (p == 0) + if (p == nullptr) return NPERR_GENERIC_ERROR; currentlyInitialisingNPP = npp; NPError result = p->setWindow (pNPWindow) ? NPERR_NO_ERROR : NPERR_MODULE_LOAD_FAILED_ERROR; - currentlyInitialisingNPP = 0; + currentlyInitialisingNPP = nullptr; return result; } //============================================================================== NPError NPP_GetValue (NPP npp, NPPVariable variable, void* value) { - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; JucePluginInstance* const p = (JucePluginInstance*) npp->pdata; - if (p == 0) + if (p == nullptr) return NPERR_GENERIC_ERROR; switch (variable) @@ -1047,7 +1046,7 @@ NPError NPP_GetValue (NPP npp, NPPVariable variable, void* value) NPError NPP_NewStream (NPP npp, NPMIMEType type, NPStream* stream, NPBool seekable, ::uint16* stype) { - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; return NPERR_NO_ERROR; @@ -1055,7 +1054,7 @@ NPError NPP_NewStream (NPP npp, NPMIMEType type, NPStream* stream, NPBool seekab ::int32 NPP_WriteReady (NPP npp, NPStream *stream) { - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; return 0x0fffffff; @@ -1063,7 +1062,7 @@ NPError NPP_NewStream (NPP npp, NPMIMEType type, NPStream* stream, NPBool seekab ::int32 NPP_Write (NPP npp, NPStream *stream, ::int32 offset, ::int32 len, void *buffer) { - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; return len; @@ -1071,7 +1070,7 @@ NPError NPP_NewStream (NPP npp, NPMIMEType type, NPStream* stream, NPBool seekab NPError NPP_DestroyStream (NPP npp, NPStream *stream, NPError reason) { - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; return NPERR_NO_ERROR; @@ -1079,25 +1078,25 @@ NPError NPP_DestroyStream (NPP npp, NPStream *stream, NPError reason) void NPP_StreamAsFile (NPP npp, NPStream* stream, const char* fname) { - if (npp == 0) + if (npp == nullptr) return; } void NPP_Print (NPP npp, NPPrint* printInfo) { - if (npp == 0) + if (npp == nullptr) return; } void NPP_URLNotify (NPP npp, const char* url, NPReason reason, void* notifyData) { - if (npp == 0) + if (npp == nullptr) return; } NPError NPP_SetValue (NPP npp, NPNVariable variable, void* value) { - if (npp == 0) + if (npp == nullptr) return NPERR_INVALID_INSTANCE_ERROR; return NPERR_NO_ERROR; @@ -1105,7 +1104,7 @@ NPError NPP_SetValue (NPP npp, NPNVariable variable, void* value) ::int16 NPP_HandleEvent (NPP npp, void* ev) { - if (npp != 0) + if (npp != nullptr) { //JucePluginInstance* const p = (JucePluginInstance*) npp->pdata; } @@ -1119,7 +1118,7 @@ static NPP getInstance (const BrowserPluginComponent* bpc) { BrowserPluginHolderComponent* holder = dynamic_cast (bpc->getParentComponent()); - if (holder != 0) + if (holder != nullptr) return holder->npp; return currentlyInitialisingNPP; @@ -1138,7 +1137,7 @@ const String BrowserPluginComponent::getBrowserVersion() const { if (browserVersionDesc.isEmpty()) { - if (getInstance (this) != 0) + if (getInstance (this) != nullptr) browserVersionDesc << browser.uagent (getInstance (this)); else browserVersionDesc << "Netscape Plugin V" << (int) ((browser.version >> 8) & 0xff) @@ -1157,23 +1156,23 @@ const String BrowserPluginComponent::getBrowserURL() const { String result; -#if JUCE_WINDOWS + #if JUCE_WINDOWS result = getActiveXBrowserURL (this); if (result.isNotEmpty()) return result; -#endif + #endif // (FireFox doesn't seem happy if you call this from a background thread..) jassert (MessageManager::getInstance()->isThisTheMessageThread()); NPP npp = getInstance (this); - if (npp != 0) + if (npp != nullptr) { - NPObject* windowObj = 0; + NPObject* windowObj = nullptr; browser.getvalue (npp, NPNVWindowNPObject, &windowObj); - if (windowObj != 0) + if (windowObj != nullptr) { NPVariant location; bool ok = browser.getproperty (npp, windowObj, diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index 492e325703..cc9b8cc764 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -4173,15 +4173,15 @@ enum VariantStreamMarkers class var::VariantType { public: - VariantType() {} - virtual ~VariantType() {} + VariantType() noexcept {} + virtual ~VariantType() noexcept {} - virtual int toInt (const ValueUnion&) const { return 0; } - virtual int64 toInt64 (const ValueUnion&) const { return 0; } - virtual double toDouble (const ValueUnion&) const { return 0; } - virtual const String toString (const ValueUnion&) const { return String::empty; } - virtual bool toBool (const ValueUnion&) const { return false; } - virtual DynamicObject* toObject (const ValueUnion&) const { return nullptr; } + virtual int toInt (const ValueUnion&) const noexcept { return 0; } + virtual int64 toInt64 (const ValueUnion&) const noexcept { return 0; } + virtual double toDouble (const ValueUnion&) const noexcept { return 0; } + virtual const String toString (const ValueUnion&) const { return String::empty; } + virtual bool toBool (const ValueUnion&) const noexcept { return false; } + virtual ReferenceCountedObject* toObject (const ValueUnion&) const noexcept { return nullptr; } virtual bool isVoid() const noexcept { return false; } virtual bool isInt() const noexcept { return false; } @@ -4201,7 +4201,7 @@ public: class var::VariantType_Void : public var::VariantType { public: - VariantType_Void() {} + VariantType_Void() noexcept {} static const VariantType_Void instance; bool isVoid() const noexcept { return true; } @@ -4212,14 +4212,14 @@ public: class var::VariantType_Int : public var::VariantType { public: - VariantType_Int() {} + VariantType_Int() noexcept {} static const VariantType_Int instance; - int toInt (const ValueUnion& data) const { return data.intValue; }; - int64 toInt64 (const ValueUnion& data) const { return (int64) data.intValue; }; - double toDouble (const ValueUnion& data) const { return (double) data.intValue; } + int toInt (const ValueUnion& data) const noexcept { return data.intValue; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return (int64) data.intValue; }; + double toDouble (const ValueUnion& data) const noexcept { return (double) data.intValue; } const String toString (const ValueUnion& data) const { return String (data.intValue); } - bool toBool (const ValueUnion& data) const { return data.intValue != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.intValue != 0; } bool isInt() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -4238,14 +4238,14 @@ public: class var::VariantType_Int64 : public var::VariantType { public: - VariantType_Int64() {} + VariantType_Int64() noexcept {} static const VariantType_Int64 instance; - int toInt (const ValueUnion& data) const { return (int) data.int64Value; }; - int64 toInt64 (const ValueUnion& data) const { return data.int64Value; }; - double toDouble (const ValueUnion& data) const { return (double) data.int64Value; } + int toInt (const ValueUnion& data) const noexcept { return (int) data.int64Value; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return data.int64Value; }; + double toDouble (const ValueUnion& data) const noexcept { return (double) data.int64Value; } const String toString (const ValueUnion& data) const { return String (data.int64Value); } - bool toBool (const ValueUnion& data) const { return data.int64Value != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.int64Value != 0; } bool isInt64() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -4264,14 +4264,14 @@ public: class var::VariantType_Double : public var::VariantType { public: - VariantType_Double() {} + VariantType_Double() noexcept {} static const VariantType_Double instance; - int toInt (const ValueUnion& data) const { return (int) data.doubleValue; }; - int64 toInt64 (const ValueUnion& data) const { return (int64) data.doubleValue; }; - double toDouble (const ValueUnion& data) const { return data.doubleValue; } + int toInt (const ValueUnion& data) const noexcept { return (int) data.doubleValue; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return (int64) data.doubleValue; }; + double toDouble (const ValueUnion& data) const noexcept { return data.doubleValue; } const String toString (const ValueUnion& data) const { return String (data.doubleValue); } - bool toBool (const ValueUnion& data) const { return data.doubleValue != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.doubleValue != 0; } bool isDouble() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -4290,14 +4290,14 @@ public: class var::VariantType_Bool : public var::VariantType { public: - VariantType_Bool() {} + VariantType_Bool() noexcept {} static const VariantType_Bool instance; - int toInt (const ValueUnion& data) const { return data.boolValue ? 1 : 0; }; - int64 toInt64 (const ValueUnion& data) const { return data.boolValue ? 1 : 0; }; - double toDouble (const ValueUnion& data) const { return data.boolValue ? 1.0 : 0.0; } + int toInt (const ValueUnion& data) const noexcept { return data.boolValue ? 1 : 0; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return data.boolValue ? 1 : 0; }; + double toDouble (const ValueUnion& data) const noexcept { return data.boolValue ? 1.0 : 0.0; } const String toString (const ValueUnion& data) const { return String::charToString (data.boolValue ? '1' : '0'); } - bool toBool (const ValueUnion& data) const { return data.boolValue; } + bool toBool (const ValueUnion& data) const noexcept { return data.boolValue; } bool isBool() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -4315,17 +4315,17 @@ public: class var::VariantType_String : public var::VariantType { public: - VariantType_String() {} + VariantType_String() noexcept {} static const VariantType_String instance; void cleanUp (ValueUnion& data) const noexcept { delete data.stringValue; } void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest.stringValue = new String (*source.stringValue); } - int toInt (const ValueUnion& data) const { return data.stringValue->getIntValue(); }; - int64 toInt64 (const ValueUnion& data) const { return data.stringValue->getLargeIntValue(); }; - double toDouble (const ValueUnion& data) const { return data.stringValue->getDoubleValue(); } + int toInt (const ValueUnion& data) const noexcept { return data.stringValue->getIntValue(); }; + int64 toInt64 (const ValueUnion& data) const noexcept { return data.stringValue->getLargeIntValue(); }; + double toDouble (const ValueUnion& data) const noexcept { return data.stringValue->getDoubleValue(); } const String toString (const ValueUnion& data) const { return *data.stringValue; } - bool toBool (const ValueUnion& data) const { return data.stringValue->getIntValue() != 0 + bool toBool (const ValueUnion& data) const noexcept { return data.stringValue->getIntValue() != 0 || data.stringValue->trim().equalsIgnoreCase ("true") || data.stringValue->trim().equalsIgnoreCase ("yes"); } bool isString() const noexcept { return true; } @@ -4349,16 +4349,16 @@ public: class var::VariantType_Object : public var::VariantType { public: - VariantType_Object() {} + VariantType_Object() noexcept {} static const VariantType_Object instance; - void cleanUp (ValueUnion& data) const noexcept { if (data.objectValue != nullptr) data.objectValue->decReferenceCount(); } - void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest.objectValue = source.objectValue; if (dest.objectValue != nullptr) dest.objectValue->incReferenceCount(); } + void cleanUp (ValueUnion& data) const noexcept { if (data.objectValue != nullptr) data.objectValue->decReferenceCount(); } + void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest.objectValue = source.objectValue; if (dest.objectValue != nullptr) dest.objectValue->incReferenceCount(); } - const String toString (const ValueUnion& data) const { return "Object 0x" + String::toHexString ((int) (pointer_sized_int) data.objectValue); } - bool toBool (const ValueUnion& data) const { return data.objectValue != 0; } - DynamicObject* toObject (const ValueUnion& data) const { return data.objectValue; } - bool isObject() const noexcept { return true; } + const String toString (const ValueUnion& data) const { return "Object 0x" + String::toHexString ((int) (pointer_sized_int) data.objectValue); } + bool toBool (const ValueUnion& data) const noexcept { return data.objectValue != 0; } + ReferenceCountedObject* toObject (const ValueUnion& data) const noexcept { return data.objectValue; } + bool isObject() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept { @@ -4375,11 +4375,11 @@ public: class var::VariantType_Method : public var::VariantType { public: - VariantType_Method() {} + VariantType_Method() noexcept {} static const VariantType_Method instance; const String toString (const ValueUnion&) const { return "Method"; } - bool toBool (const ValueUnion& data) const { return data.methodValue != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.methodValue != 0; } bool isMethod() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -4454,7 +4454,7 @@ var::var (const wchar_t* const value_) : type (&VariantType_String::instance) value.stringValue = new String (value_); } -var::var (DynamicObject* const object) : type (&VariantType_Object::instance) +var::var (ReferenceCountedObject* const object) : type (&VariantType_Object::instance) { value.objectValue = object; @@ -4476,14 +4476,15 @@ bool var::isString() const noexcept { return type->isString(); } bool var::isObject() const noexcept { return type->isObject(); } bool var::isMethod() const noexcept { return type->isMethod(); } -var::operator int() const { return type->toInt (value); } -var::operator int64() const { return type->toInt64 (value); } -var::operator bool() const { return type->toBool (value); } -var::operator float() const { return (float) type->toDouble (value); } -var::operator double() const { return type->toDouble (value); } -const String var::toString() const { return type->toString (value); } -var::operator const String() const { return type->toString (value); } -DynamicObject* var::getObject() const { return type->toObject (value); } +var::operator int() const noexcept { return type->toInt (value); } +var::operator int64() const noexcept { return type->toInt64 (value); } +var::operator bool() const noexcept { return type->toBool (value); } +var::operator float() const noexcept { return (float) type->toDouble (value); } +var::operator double() const noexcept { return type->toDouble (value); } +const String var::toString() const { return type->toString (value); } +var::operator const String() const { return type->toString (value); } +ReferenceCountedObject* var::getObject() const noexcept { return type->toObject (value); } +DynamicObject* var::getDynamicObject() const noexcept { return dynamic_cast (getObject()); } void var::swapWith (var& other) noexcept { @@ -4491,16 +4492,16 @@ void var::swapWith (var& other) noexcept std::swap (value, other.value); } -var& var::operator= (const var& newValue) { type->cleanUp (value); type = newValue.type; type->createCopy (value, newValue.value); return *this; } -var& var::operator= (int newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (int64 newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (bool newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (double newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (const char* newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (const wchar_t* newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (const String& newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (DynamicObject* newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (MethodFunction newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (const var& newValue) { type->cleanUp (value); type = newValue.type; type->createCopy (value, newValue.value); return *this; } +var& var::operator= (const int newValue) { type->cleanUp (value); type = &VariantType_Int::instance; value.intValue = newValue; return *this; } +var& var::operator= (const int64 newValue) { type->cleanUp (value); type = &VariantType_Int64::instance; value.int64Value = newValue; return *this; } +var& var::operator= (const bool newValue) { type->cleanUp (value); type = &VariantType_Bool::instance; value.boolValue = newValue; return *this; } +var& var::operator= (const double newValue) { type->cleanUp (value); type = &VariantType_Double::instance; value.doubleValue = newValue; return *this; } +var& var::operator= (const char* const newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (const wchar_t* const newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (const String& newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (ReferenceCountedObject* newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (MethodFunction newValue) { var v (newValue); swapWith (v); return *this; } bool var::equals (const var& other) const noexcept { @@ -4514,8 +4515,10 @@ bool var::equalsWithSameType (const var& other) const noexcept bool operator== (const var& v1, const var& v2) noexcept { return v1.equals (v2); } bool operator!= (const var& v1, const var& v2) noexcept { return ! v1.equals (v2); } -bool operator== (const var& v1, const String& v2) noexcept { return v1.toString() == v2; } -bool operator!= (const var& v1, const String& v2) noexcept { return v1.toString() != v2; } +bool operator== (const var& v1, const String& v2) { return v1.toString() == v2; } +bool operator!= (const var& v1, const String& v2) { return v1.toString() != v2; } +bool operator== (const var& v1, const char* const v2) { return v1.toString() == v2; } +bool operator!= (const var& v1, const char* const v2) { return v1.toString() != v2; } void var::writeToStream (OutputStream& output) const { @@ -4551,13 +4554,13 @@ const var var::readFromStream (InputStream& input) const var var::operator[] (const Identifier& propertyName) const { - DynamicObject* const o = getObject(); + DynamicObject* const o = getDynamicObject(); return o != nullptr ? o->getProperty (propertyName) : var::null; } const var var::invoke (const Identifier& method, const var* arguments, int numArguments) const { - DynamicObject* const o = getObject(); + DynamicObject* const o = getDynamicObject(); return o != nullptr ? o->invokeMethod (method, arguments, numArguments) : var::null; } @@ -4565,7 +4568,7 @@ const var var::invoke (const var& targetObject, const var* arguments, int numArg { if (isMethod()) { - DynamicObject* const target = targetObject.getObject(); + DynamicObject* const target = targetObject.getDynamicObject(); if (target != nullptr) return (target->*(value.methodValue)) (arguments, numArguments); @@ -49066,9 +49069,9 @@ public: if (selectedRows.size() > 0) { - const String dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); + const var dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); - if (dragDescription.isNotEmpty()) + if (! (dragDescription.isVoid() || (dragDescription.isString() && dragDescription.toString().isEmpty()))) { isDragging = true; owner.startDragAndDrop (e, dragDescription); @@ -49854,7 +49857,7 @@ const Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY) return snapshot; } -void ListBox::startDragAndDrop (const MouseEvent& e, const String& dragDescription) +void ListBox::startDragAndDrop (const MouseEvent& e, const var& dragDescription) { DragAndDropContainer* const dragContainer = DragAndDropContainer::findParentDragContainerFor (this); @@ -49890,8 +49893,8 @@ void ListBoxModel::selectedRowsChanged (int) {} void ListBoxModel::deleteKeyPressed (int) {} void ListBoxModel::returnKeyPressed (int) {} void ListBoxModel::listWasScrolled() {} -const String ListBoxModel::getDragSourceDescription (const SparseSet&) { return String::empty; } -const String ListBoxModel::getTooltipForRow (int) { return String::empty; } +const var ListBoxModel::getDragSourceDescription (const SparseSet&) { return var::null; } +const String ListBoxModel::getTooltipForRow (int) { return String::empty; } END_JUCE_NAMESPACE /*** End of inlined file: juce_ListBox.cpp ***/ @@ -52432,9 +52435,9 @@ public: if (selectedRows.size() > 0) { - const String dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); + const var dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); - if (dragDescription.isNotEmpty()) + if (! (dragDescription.isVoid() || (dragDescription.isString() && dragDescription.toString().isEmpty()))) { isDragging = true; owner.startDragAndDrop (e, dragDescription); @@ -52749,7 +52752,7 @@ void TableListBoxModel::returnKeyPressed (int) {} void TableListBoxModel::listWasScrolled() {} const String TableListBoxModel::getCellTooltip (int /*rowNumber*/, int /*columnId*/) { return String::empty; } -const String TableListBoxModel::getDragSourceDescription (const SparseSet&) { return String::empty; } +const var TableListBoxModel::getDragSourceDescription (const SparseSet&) { return var::null; } Component* TableListBoxModel::refreshComponentForCell (int, int, bool, Component* existingComponentToUpdate) { @@ -56523,9 +56526,9 @@ public: if (item != nullptr && e.getMouseDownX() >= pos.getX()) { - const String dragDescription (item->getDragSourceDescription()); + const var dragDescription (item->getDragSourceDescription()); - if (dragDescription.isNotEmpty()) + if (! (dragDescription.isVoid() || (dragDescription.isString() && dragDescription.toString().isEmpty()))) { DragAndDropContainer* const dragContainer = DragAndDropContainer::findParentDragContainerFor (this); @@ -57679,9 +57682,9 @@ const String TreeViewItem::getTooltip() return String::empty; } -const String TreeViewItem::getDragSourceDescription() +const var TreeViewItem::getDragSourceDescription() { - return String::empty; + return var::null; } bool TreeViewItem::isInterestedInFileDrag (const StringArray&) @@ -60179,7 +60182,7 @@ public: const String getUniqueName() const { return file.getFullPathName(); } int getItemHeight() const { return 22; } - const String getDragSourceDescription() { return owner.getDragAndDropDescription(); } + const var getDragSourceDescription() { return owner.getDragAndDropDescription(); } void itemOpennessChanged (bool isNowOpen) { @@ -70483,14 +70486,16 @@ private: { const Rectangle mon (Desktop::getInstance() .getMonitorAreaContaining (target.getCentre(), -#if JUCE_MAC + #if JUCE_MAC true)); -#else + #else false)); // on windows, don't stop the menu overlapping the taskbar -#endif + #endif + + const int maxMenuHeight = mon.getHeight() - 24; int x, y, widthToUse, heightToUse; - layoutMenuItems (mon.getWidth() - 24, widthToUse, heightToUse); + layoutMenuItems (mon.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse); if (alignToRectangle) { @@ -70531,10 +70536,10 @@ private: if (biggestSpace < widthToUse) { - layoutMenuItems (biggestSpace + target.getWidth() / 3, widthToUse, heightToUse); + layoutMenuItems (biggestSpace + target.getWidth() / 3, maxMenuHeight, widthToUse, heightToUse); if (numColumns > 1) - layoutMenuItems (biggestSpace - 4, widthToUse, heightToUse); + layoutMenuItems (biggestSpace - 4, maxMenuHeight, widthToUse, heightToUse); tendTowardsRight = (mon.getRight() - target.getRight()) >= (target.getX() - mon.getX()); } @@ -70559,11 +70564,10 @@ private: && owner->windowPos.intersects (windowPos.expanded (-4, -4)); } - void layoutMenuItems (const int maxMenuW, int& width, int& height) + void layoutMenuItems (const int maxMenuW, const int maxMenuH, int& width, int& height) { numColumns = 0; contentHeight = 0; - const int maxMenuH = getParentHeight() - 24; int totalW; do @@ -71539,13 +71543,12 @@ class DragImageComponent : public Component, { public: DragImageComponent (const Image& im, - const String& desc, + const var& desc, Component* const sourceComponent, Component* const mouseDragSource_, DragAndDropContainer* const o, - const Point& imageOffset_, - ReferenceCountedObject* const customDataObject) - : sourceDetails (desc, sourceComponent, Point(), customDataObject), + const Point& imageOffset_) + : sourceDetails (desc, sourceComponent, Point()), image (im), mouseDragSource (mouseDragSource_), owner (o), @@ -71809,12 +71812,11 @@ DragAndDropContainer::~DragAndDropContainer() dragImageComponent = nullptr; } -void DragAndDropContainer::startDragging (const String& sourceDescription, +void DragAndDropContainer::startDragging (const var& sourceDescription, Component* sourceComponent, const Image& dragImage_, const bool allowDraggingToExternalWindows, - const Point* imageOffsetFromMouse, - ReferenceCountedObject* customDataObject) + const Point* imageOffsetFromMouse) { Image dragImage (dragImage_); @@ -71883,8 +71885,7 @@ void DragAndDropContainer::startDragging (const String& sourceDescription, } dragImageComponent = new DragImageComponent (dragImage, sourceDescription, sourceComponent, - draggingSource->getComponentUnderMouse(), this, - imageOffset, customDataObject); + draggingSource->getComponentUnderMouse(), this, imageOffset); currentDragDesc = sourceDescription; @@ -71934,12 +71935,10 @@ bool DragAndDropContainer::shouldDropFilesWhenDraggedExternally (const DragAndDr return false; } -DragAndDropTarget::SourceDetails::SourceDetails (const String& description_, Component* sourceComponent_, - const Point& localPosition_, ReferenceCountedObject* const customDataObject_) noexcept +DragAndDropTarget::SourceDetails::SourceDetails (const var& description_, Component* sourceComponent_, const Point& localPosition_) noexcept : description (description_), sourceComponent (sourceComponent_), - localPosition (localPosition_), - customDataObject (customDataObject_) + localPosition (localPosition_) { } diff --git a/juce_amalgamated.h b/juce_amalgamated.h index 8d551a4843..465b50f623 100644 --- a/juce_amalgamated.h +++ b/juce_amalgamated.h @@ -73,7 +73,7 @@ namespace JuceDummyNamespace {} */ #define JUCE_MAJOR_VERSION 1 #define JUCE_MINOR_VERSION 53 -#define JUCE_BUILDNUMBER 74 +#define JUCE_BUILDNUMBER 75 /** Current Juce version number. @@ -8724,6 +8724,7 @@ OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const NewLine&); /*** End of inlined file: juce_OutputStream.h ***/ #ifndef DOXYGEN + class ReferenceCountedObject; class DynamicObject; #endif @@ -8731,8 +8732,8 @@ OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const NewLine&); A variant class, that can be used to hold a range of primitive values. A var object can hold a range of simple primitive values, strings, or - a reference-counted pointer to a DynamicObject. The var class is intended - to act like the values used in dynamic scripting languages. + any kind of ReferenceCountedObject. The var class is intended to act like + the kind of values used in dynamic scripting languages. @see DynamicObject */ @@ -8760,7 +8761,7 @@ public: var (const char* value); var (const wchar_t* value); var (const String& value); - var (DynamicObject* object); + var (ReferenceCountedObject* object); var (MethodFunction method) noexcept; var& operator= (const var& valueToCopy); @@ -8771,19 +8772,20 @@ public: var& operator= (const char* value); var& operator= (const wchar_t* value); var& operator= (const String& value); - var& operator= (DynamicObject* object); + var& operator= (ReferenceCountedObject* object); var& operator= (MethodFunction method); void swapWith (var& other) noexcept; - operator int() const; - operator int64() const; - operator bool() const; - operator float() const; - operator double() const; + operator int() const noexcept; + operator int64() const noexcept; + operator bool() const noexcept; + operator float() const noexcept; + operator double() const noexcept; operator const String() const; const String toString() const; - DynamicObject* getObject() const; + ReferenceCountedObject* getObject() const noexcept; + DynamicObject* getDynamicObject() const noexcept; bool isVoid() const noexcept; bool isInt() const noexcept; @@ -8864,7 +8866,7 @@ private: bool boolValue; double doubleValue; String* stringValue; - DynamicObject* objectValue; + ReferenceCountedObject* objectValue; MethodFunction methodValue; }; @@ -8874,8 +8876,10 @@ private: bool operator== (const var& v1, const var& v2) noexcept; bool operator!= (const var& v1, const var& v2) noexcept; -bool operator== (const var& v1, const String& v2) noexcept; -bool operator!= (const var& v1, const String& v2) noexcept; +bool operator== (const var& v1, const String& v2); +bool operator!= (const var& v1, const String& v2); +bool operator== (const var& v1, const char* v2); +bool operator!= (const var& v1, const char* v2); #endif // __JUCE_VARIANT_JUCEHEADER__ /*** End of inlined file: juce_Variant.h ***/ @@ -46472,14 +46476,14 @@ public: /** To allow rows from your list to be dragged-and-dropped, implement this method. - If this returns a non-empty name then when the user drags a row, the listbox will + If this returns a non-null variant then when the user drags a row, the listbox will try to find a DragAndDropContainer in its parent hierarchy, and will use it to trigger a drag-and-drop operation, using this string as the source description, with the listbox itself as the source component. @see DragAndDropContainer::startDragging */ - virtual const String getDragSourceDescription (const SparseSet& currentlySelectedRows); + virtual const var getDragSourceDescription (const SparseSet& currentlySelectedRows); /** You can override this to provide tool tips for specific rows. @see TooltipClient @@ -46880,7 +46884,7 @@ public: /** @internal */ void colourChanged(); /** @internal */ - void startDragAndDrop (const MouseEvent& e, const String& dragDescription); + void startDragAndDrop (const MouseEvent& e, const var& dragDescription); private: @@ -50626,11 +50630,10 @@ public: { public: /** Creates a SourceDetails object from its various settings. */ - SourceDetails (const String& description, Component* sourceComponent, - const Point& localPosition, ReferenceCountedObject* customDataObject = nullptr) noexcept; + SourceDetails (const var& description, Component* sourceComponent, const Point& localPosition) noexcept; - /** A descriptor string - this is set DragAndDropContainer::startDragging(). */ - String description; + /** A descriptor for the drag - this is set DragAndDropContainer::startDragging(). */ + var description; /** The component from the drag operation was started. */ WeakReference sourceComponent; @@ -50639,12 +50642,6 @@ public: Note that for calls such as isInterestedInDragSource(), this may be a null position. */ Point localPosition; - - /** A pointer to a user-supplied object which contains some kind of data which is relevant to - the specific classes which are being used. Make sure that you check the type of this object, - and safely dynamic_cast it to your required type. - */ - ReferenceCountedObjectPtr customDataObject; }; /** Callback to check whether this target is interested in the type of object being @@ -50768,8 +50765,8 @@ public: findParentDragContainerFor() is a handy method to call to find the drag container to use for a component. - @param sourceDescription a string to use as the description of the thing being dragged - this - will be passed to the objects that might be dropped-onto so they can + @param sourceDescription a string or value to use as the description of the thing being dragged - + this will be passed to the objects that might be dropped-onto so they can decide whether they want to handle it @param sourceComponent the component that is being dragged @param dragImage the image to drag around underneath the mouse. If this is a null image, @@ -50781,16 +50778,12 @@ public: at which the image should be drawn from the mouse. If it isn't specified, then the image will be centred around the mouse. If an image hasn't been passed-in, this will be ignored. - @param customDataObject Any kind of reference-counted object which you want to have passed to - the target component. A pointer to this object will be made available - to the targets in the DragAndDropTarget::SourceDetails class. */ - void startDragging (const String& sourceDescription, + void startDragging (const var& sourceDescription, Component* sourceComponent, const Image& dragImage = Image::null, bool allowDraggingToOtherJuceWindows = false, - const Point* imageOffsetFromMouse = nullptr, - ReferenceCountedObject* customDataObject = nullptr); + const Point* imageOffsetFromMouse = nullptr); /** Returns true if something is currently being dragged. */ bool isDragAndDropActive() const; @@ -50856,17 +50849,14 @@ protected: and if you want it to then perform a file drag-and-drop, add the filenames you want to the array passed in, and return true. - @param dragSourceDescription the description passed into the startDrag() call when the drag began - @param dragSourceComponent the component passed into the startDrag() call when the drag began - @param files on return, the filenames you want to drag - @param canMoveFiles on return, true if it's ok for the receiver to move the files; false if - it must make a copy of them (see the performExternalDragDropOfFiles() - method) + @param sourceDetails information about the source of the drag operation + @param files on return, the filenames you want to drag + @param canMoveFiles on return, true if it's ok for the receiver to move the files; false if + it must make a copy of them (see the performExternalDragDropOfFiles() method) @see performExternalDragDropOfFiles */ virtual bool shouldDropFilesWhenDraggedExternally (const DragAndDropTarget::SourceDetails& sourceDetails, - StringArray& files, - bool& canMoveFiles); + StringArray& files, bool& canMoveFiles); private: @@ -53674,14 +53664,14 @@ public: /** To allow rows from your table to be dragged-and-dropped, implement this method. - If this returns a non-empty name then when the user drags a row, the table will try to + If this returns a non-null variant then when the user drags a row, the table will try to find a DragAndDropContainer in its parent hierarchy, and will use it to trigger a drag-and-drop operation, using this string as the source description, and the listbox itself as the source component. - @see DragAndDropContainer::startDragging + @see getDragSourceCustomData, DragAndDropContainer::startDragging */ - virtual const String getDragSourceDescription (const SparseSet& currentlySelectedRows); + virtual const var getDragSourceDescription (const SparseSet& currentlySelectedRows); }; /** @@ -54367,7 +54357,7 @@ public: /** To allow items from your treeview to be dragged-and-dropped, implement this method. - If this returns a non-empty name then when the user drags an item, the treeview will + If this returns a non-null variant then when the user drags an item, the treeview will try to find a DragAndDropContainer in its parent hierarchy, and will use it to trigger a drag-and-drop operation, using this string as the source description, with the treeview itself as the source component. @@ -54380,7 +54370,7 @@ public: @see DragAndDropContainer::startDragging */ - virtual const String getDragSourceDescription(); + virtual const var getDragSourceDescription(); /** If you want your item to be able to have files drag-and-dropped onto it, implement this method and return true. @@ -59232,7 +59222,7 @@ public: virtual void menuItemSelected (int menuItemID, int topLevelMenuIndex) = 0; -#if JUCE_MAC || DOXYGEN + #if JUCE_MAC || DOXYGEN /** MAC ONLY - Sets the model that is currently being shown as the main menu bar at the top of the screen on the Mac. @@ -59254,8 +59244,7 @@ public: the main menu bar. */ static MenuBarModel* getMacMainMenu(); - -#endif + #endif /** @internal */ void applicationCommandInvoked (const ApplicationCommandTarget::InvocationInfo& info); diff --git a/src/containers/juce_Variant.cpp b/src/containers/juce_Variant.cpp index d69d0942fb..b9335c3afa 100644 --- a/src/containers/juce_Variant.cpp +++ b/src/containers/juce_Variant.cpp @@ -45,15 +45,15 @@ enum VariantStreamMarkers class var::VariantType { public: - VariantType() {} - virtual ~VariantType() {} + VariantType() noexcept {} + virtual ~VariantType() noexcept {} - virtual int toInt (const ValueUnion&) const { return 0; } - virtual int64 toInt64 (const ValueUnion&) const { return 0; } - virtual double toDouble (const ValueUnion&) const { return 0; } - virtual const String toString (const ValueUnion&) const { return String::empty; } - virtual bool toBool (const ValueUnion&) const { return false; } - virtual DynamicObject* toObject (const ValueUnion&) const { return nullptr; } + virtual int toInt (const ValueUnion&) const noexcept { return 0; } + virtual int64 toInt64 (const ValueUnion&) const noexcept { return 0; } + virtual double toDouble (const ValueUnion&) const noexcept { return 0; } + virtual const String toString (const ValueUnion&) const { return String::empty; } + virtual bool toBool (const ValueUnion&) const noexcept { return false; } + virtual ReferenceCountedObject* toObject (const ValueUnion&) const noexcept { return nullptr; } virtual bool isVoid() const noexcept { return false; } virtual bool isInt() const noexcept { return false; } @@ -74,7 +74,7 @@ public: class var::VariantType_Void : public var::VariantType { public: - VariantType_Void() {} + VariantType_Void() noexcept {} static const VariantType_Void instance; bool isVoid() const noexcept { return true; } @@ -86,14 +86,14 @@ public: class var::VariantType_Int : public var::VariantType { public: - VariantType_Int() {} + VariantType_Int() noexcept {} static const VariantType_Int instance; - int toInt (const ValueUnion& data) const { return data.intValue; }; - int64 toInt64 (const ValueUnion& data) const { return (int64) data.intValue; }; - double toDouble (const ValueUnion& data) const { return (double) data.intValue; } + int toInt (const ValueUnion& data) const noexcept { return data.intValue; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return (int64) data.intValue; }; + double toDouble (const ValueUnion& data) const noexcept { return (double) data.intValue; } const String toString (const ValueUnion& data) const { return String (data.intValue); } - bool toBool (const ValueUnion& data) const { return data.intValue != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.intValue != 0; } bool isInt() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -113,14 +113,14 @@ public: class var::VariantType_Int64 : public var::VariantType { public: - VariantType_Int64() {} + VariantType_Int64() noexcept {} static const VariantType_Int64 instance; - int toInt (const ValueUnion& data) const { return (int) data.int64Value; }; - int64 toInt64 (const ValueUnion& data) const { return data.int64Value; }; - double toDouble (const ValueUnion& data) const { return (double) data.int64Value; } + int toInt (const ValueUnion& data) const noexcept { return (int) data.int64Value; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return data.int64Value; }; + double toDouble (const ValueUnion& data) const noexcept { return (double) data.int64Value; } const String toString (const ValueUnion& data) const { return String (data.int64Value); } - bool toBool (const ValueUnion& data) const { return data.int64Value != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.int64Value != 0; } bool isInt64() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -140,14 +140,14 @@ public: class var::VariantType_Double : public var::VariantType { public: - VariantType_Double() {} + VariantType_Double() noexcept {} static const VariantType_Double instance; - int toInt (const ValueUnion& data) const { return (int) data.doubleValue; }; - int64 toInt64 (const ValueUnion& data) const { return (int64) data.doubleValue; }; - double toDouble (const ValueUnion& data) const { return data.doubleValue; } + int toInt (const ValueUnion& data) const noexcept { return (int) data.doubleValue; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return (int64) data.doubleValue; }; + double toDouble (const ValueUnion& data) const noexcept { return data.doubleValue; } const String toString (const ValueUnion& data) const { return String (data.doubleValue); } - bool toBool (const ValueUnion& data) const { return data.doubleValue != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.doubleValue != 0; } bool isDouble() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -167,14 +167,14 @@ public: class var::VariantType_Bool : public var::VariantType { public: - VariantType_Bool() {} + VariantType_Bool() noexcept {} static const VariantType_Bool instance; - int toInt (const ValueUnion& data) const { return data.boolValue ? 1 : 0; }; - int64 toInt64 (const ValueUnion& data) const { return data.boolValue ? 1 : 0; }; - double toDouble (const ValueUnion& data) const { return data.boolValue ? 1.0 : 0.0; } + int toInt (const ValueUnion& data) const noexcept { return data.boolValue ? 1 : 0; }; + int64 toInt64 (const ValueUnion& data) const noexcept { return data.boolValue ? 1 : 0; }; + double toDouble (const ValueUnion& data) const noexcept { return data.boolValue ? 1.0 : 0.0; } const String toString (const ValueUnion& data) const { return String::charToString (data.boolValue ? '1' : '0'); } - bool toBool (const ValueUnion& data) const { return data.boolValue; } + bool toBool (const ValueUnion& data) const noexcept { return data.boolValue; } bool isBool() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -193,17 +193,17 @@ public: class var::VariantType_String : public var::VariantType { public: - VariantType_String() {} + VariantType_String() noexcept {} static const VariantType_String instance; void cleanUp (ValueUnion& data) const noexcept { delete data.stringValue; } void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest.stringValue = new String (*source.stringValue); } - int toInt (const ValueUnion& data) const { return data.stringValue->getIntValue(); }; - int64 toInt64 (const ValueUnion& data) const { return data.stringValue->getLargeIntValue(); }; - double toDouble (const ValueUnion& data) const { return data.stringValue->getDoubleValue(); } + int toInt (const ValueUnion& data) const noexcept { return data.stringValue->getIntValue(); }; + int64 toInt64 (const ValueUnion& data) const noexcept { return data.stringValue->getLargeIntValue(); }; + double toDouble (const ValueUnion& data) const noexcept { return data.stringValue->getDoubleValue(); } const String toString (const ValueUnion& data) const { return *data.stringValue; } - bool toBool (const ValueUnion& data) const { return data.stringValue->getIntValue() != 0 + bool toBool (const ValueUnion& data) const noexcept { return data.stringValue->getIntValue() != 0 || data.stringValue->trim().equalsIgnoreCase ("true") || data.stringValue->trim().equalsIgnoreCase ("yes"); } bool isString() const noexcept { return true; } @@ -228,16 +228,16 @@ public: class var::VariantType_Object : public var::VariantType { public: - VariantType_Object() {} + VariantType_Object() noexcept {} static const VariantType_Object instance; - void cleanUp (ValueUnion& data) const noexcept { if (data.objectValue != nullptr) data.objectValue->decReferenceCount(); } - void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest.objectValue = source.objectValue; if (dest.objectValue != nullptr) dest.objectValue->incReferenceCount(); } + void cleanUp (ValueUnion& data) const noexcept { if (data.objectValue != nullptr) data.objectValue->decReferenceCount(); } + void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest.objectValue = source.objectValue; if (dest.objectValue != nullptr) dest.objectValue->incReferenceCount(); } - const String toString (const ValueUnion& data) const { return "Object 0x" + String::toHexString ((int) (pointer_sized_int) data.objectValue); } - bool toBool (const ValueUnion& data) const { return data.objectValue != 0; } - DynamicObject* toObject (const ValueUnion& data) const { return data.objectValue; } - bool isObject() const noexcept { return true; } + const String toString (const ValueUnion& data) const { return "Object 0x" + String::toHexString ((int) (pointer_sized_int) data.objectValue); } + bool toBool (const ValueUnion& data) const noexcept { return data.objectValue != 0; } + ReferenceCountedObject* toObject (const ValueUnion& data) const noexcept { return data.objectValue; } + bool isObject() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept { @@ -255,11 +255,11 @@ public: class var::VariantType_Method : public var::VariantType { public: - VariantType_Method() {} + VariantType_Method() noexcept {} static const VariantType_Method instance; const String toString (const ValueUnion&) const { return "Method"; } - bool toBool (const ValueUnion& data) const { return data.methodValue != 0; } + bool toBool (const ValueUnion& data) const noexcept { return data.methodValue != 0; } bool isMethod() const noexcept { return true; } bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept @@ -338,7 +338,7 @@ var::var (const wchar_t* const value_) : type (&VariantType_String::instance) value.stringValue = new String (value_); } -var::var (DynamicObject* const object) : type (&VariantType_Object::instance) +var::var (ReferenceCountedObject* const object) : type (&VariantType_Object::instance) { value.objectValue = object; @@ -361,14 +361,15 @@ bool var::isString() const noexcept { return type->isString(); } bool var::isObject() const noexcept { return type->isObject(); } bool var::isMethod() const noexcept { return type->isMethod(); } -var::operator int() const { return type->toInt (value); } -var::operator int64() const { return type->toInt64 (value); } -var::operator bool() const { return type->toBool (value); } -var::operator float() const { return (float) type->toDouble (value); } -var::operator double() const { return type->toDouble (value); } -const String var::toString() const { return type->toString (value); } -var::operator const String() const { return type->toString (value); } -DynamicObject* var::getObject() const { return type->toObject (value); } +var::operator int() const noexcept { return type->toInt (value); } +var::operator int64() const noexcept { return type->toInt64 (value); } +var::operator bool() const noexcept { return type->toBool (value); } +var::operator float() const noexcept { return (float) type->toDouble (value); } +var::operator double() const noexcept { return type->toDouble (value); } +const String var::toString() const { return type->toString (value); } +var::operator const String() const { return type->toString (value); } +ReferenceCountedObject* var::getObject() const noexcept { return type->toObject (value); } +DynamicObject* var::getDynamicObject() const noexcept { return dynamic_cast (getObject()); } //============================================================================== void var::swapWith (var& other) noexcept @@ -377,16 +378,16 @@ void var::swapWith (var& other) noexcept std::swap (value, other.value); } -var& var::operator= (const var& newValue) { type->cleanUp (value); type = newValue.type; type->createCopy (value, newValue.value); return *this; } -var& var::operator= (int newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (int64 newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (bool newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (double newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (const char* newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (const wchar_t* newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (const String& newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (DynamicObject* newValue) { var v (newValue); swapWith (v); return *this; } -var& var::operator= (MethodFunction newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (const var& newValue) { type->cleanUp (value); type = newValue.type; type->createCopy (value, newValue.value); return *this; } +var& var::operator= (const int newValue) { type->cleanUp (value); type = &VariantType_Int::instance; value.intValue = newValue; return *this; } +var& var::operator= (const int64 newValue) { type->cleanUp (value); type = &VariantType_Int64::instance; value.int64Value = newValue; return *this; } +var& var::operator= (const bool newValue) { type->cleanUp (value); type = &VariantType_Bool::instance; value.boolValue = newValue; return *this; } +var& var::operator= (const double newValue) { type->cleanUp (value); type = &VariantType_Double::instance; value.doubleValue = newValue; return *this; } +var& var::operator= (const char* const newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (const wchar_t* const newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (const String& newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (ReferenceCountedObject* newValue) { var v (newValue); swapWith (v); return *this; } +var& var::operator= (MethodFunction newValue) { var v (newValue); swapWith (v); return *this; } //============================================================================== bool var::equals (const var& other) const noexcept @@ -401,8 +402,11 @@ bool var::equalsWithSameType (const var& other) const noexcept bool operator== (const var& v1, const var& v2) noexcept { return v1.equals (v2); } bool operator!= (const var& v1, const var& v2) noexcept { return ! v1.equals (v2); } -bool operator== (const var& v1, const String& v2) noexcept { return v1.toString() == v2; } -bool operator!= (const var& v1, const String& v2) noexcept { return v1.toString() != v2; } +bool operator== (const var& v1, const String& v2) { return v1.toString() == v2; } +bool operator!= (const var& v1, const String& v2) { return v1.toString() != v2; } +bool operator== (const var& v1, const char* const v2) { return v1.toString() == v2; } +bool operator!= (const var& v1, const char* const v2) { return v1.toString() != v2; } + //============================================================================== void var::writeToStream (OutputStream& output) const @@ -439,13 +443,13 @@ const var var::readFromStream (InputStream& input) const var var::operator[] (const Identifier& propertyName) const { - DynamicObject* const o = getObject(); + DynamicObject* const o = getDynamicObject(); return o != nullptr ? o->getProperty (propertyName) : var::null; } const var var::invoke (const Identifier& method, const var* arguments, int numArguments) const { - DynamicObject* const o = getObject(); + DynamicObject* const o = getDynamicObject(); return o != nullptr ? o->invokeMethod (method, arguments, numArguments) : var::null; } @@ -453,7 +457,7 @@ const var var::invoke (const var& targetObject, const var* arguments, int numArg { if (isMethod()) { - DynamicObject* const target = targetObject.getObject(); + DynamicObject* const target = targetObject.getDynamicObject(); if (target != nullptr) return (target->*(value.methodValue)) (arguments, numArguments); diff --git a/src/containers/juce_Variant.h b/src/containers/juce_Variant.h index be92d9e4a4..778895e999 100644 --- a/src/containers/juce_Variant.h +++ b/src/containers/juce_Variant.h @@ -31,6 +31,7 @@ #include "../io/streams/juce_InputStream.h" #ifndef DOXYGEN + class ReferenceCountedObject; class DynamicObject; #endif @@ -39,8 +40,8 @@ A variant class, that can be used to hold a range of primitive values. A var object can hold a range of simple primitive values, strings, or - a reference-counted pointer to a DynamicObject. The var class is intended - to act like the values used in dynamic scripting languages. + any kind of ReferenceCountedObject. The var class is intended to act like + the kind of values used in dynamic scripting languages. @see DynamicObject */ @@ -69,7 +70,7 @@ public: var (const char* value); var (const wchar_t* value); var (const String& value); - var (DynamicObject* object); + var (ReferenceCountedObject* object); var (MethodFunction method) noexcept; var& operator= (const var& valueToCopy); @@ -80,19 +81,20 @@ public: var& operator= (const char* value); var& operator= (const wchar_t* value); var& operator= (const String& value); - var& operator= (DynamicObject* object); + var& operator= (ReferenceCountedObject* object); var& operator= (MethodFunction method); void swapWith (var& other) noexcept; - operator int() const; - operator int64() const; - operator bool() const; - operator float() const; - operator double() const; + operator int() const noexcept; + operator int64() const noexcept; + operator bool() const noexcept; + operator float() const noexcept; + operator double() const noexcept; operator const String() const; const String toString() const; - DynamicObject* getObject() const; + ReferenceCountedObject* getObject() const noexcept; + DynamicObject* getDynamicObject() const noexcept; bool isVoid() const noexcept; bool isInt() const noexcept; @@ -178,7 +180,7 @@ private: bool boolValue; double doubleValue; String* stringValue; - DynamicObject* objectValue; + ReferenceCountedObject* objectValue; MethodFunction methodValue; }; @@ -188,8 +190,10 @@ private: bool operator== (const var& v1, const var& v2) noexcept; bool operator!= (const var& v1, const var& v2) noexcept; -bool operator== (const var& v1, const String& v2) noexcept; -bool operator!= (const var& v1, const String& v2) noexcept; +bool operator== (const var& v1, const String& v2); +bool operator!= (const var& v1, const String& v2); +bool operator== (const var& v1, const char* v2); +bool operator!= (const var& v1, const char* v2); #endif // __JUCE_VARIANT_JUCEHEADER__ diff --git a/src/core/juce_StandardHeader.h b/src/core/juce_StandardHeader.h index 1ddc8d3a05..7150c26882 100644 --- a/src/core/juce_StandardHeader.h +++ b/src/core/juce_StandardHeader.h @@ -33,7 +33,7 @@ */ #define JUCE_MAJOR_VERSION 1 #define JUCE_MINOR_VERSION 53 -#define JUCE_BUILDNUMBER 74 +#define JUCE_BUILDNUMBER 75 /** Current Juce version number. diff --git a/src/gui/components/controls/juce_ListBox.cpp b/src/gui/components/controls/juce_ListBox.cpp index 3c4ff214c0..c4e764df45 100644 --- a/src/gui/components/controls/juce_ListBox.cpp +++ b/src/gui/components/controls/juce_ListBox.cpp @@ -117,9 +117,9 @@ public: if (selectedRows.size() > 0) { - const String dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); + const var dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); - if (dragDescription.isNotEmpty()) + if (! (dragDescription.isVoid() || (dragDescription.isString() && dragDescription.toString().isEmpty()))) { isDragging = true; owner.startDragAndDrop (e, dragDescription); @@ -915,7 +915,7 @@ const Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY) return snapshot; } -void ListBox::startDragAndDrop (const MouseEvent& e, const String& dragDescription) +void ListBox::startDragAndDrop (const MouseEvent& e, const var& dragDescription) { DragAndDropContainer* const dragContainer = DragAndDropContainer::findParentDragContainerFor (this); @@ -952,8 +952,8 @@ void ListBoxModel::selectedRowsChanged (int) {} void ListBoxModel::deleteKeyPressed (int) {} void ListBoxModel::returnKeyPressed (int) {} void ListBoxModel::listWasScrolled() {} -const String ListBoxModel::getDragSourceDescription (const SparseSet&) { return String::empty; } -const String ListBoxModel::getTooltipForRow (int) { return String::empty; } +const var ListBoxModel::getDragSourceDescription (const SparseSet&) { return var::null; } +const String ListBoxModel::getTooltipForRow (int) { return String::empty; } END_JUCE_NAMESPACE diff --git a/src/gui/components/controls/juce_ListBox.h b/src/gui/components/controls/juce_ListBox.h index bebf5625d0..e9e5b6e703 100644 --- a/src/gui/components/controls/juce_ListBox.h +++ b/src/gui/components/controls/juce_ListBox.h @@ -139,14 +139,14 @@ public: /** To allow rows from your list to be dragged-and-dropped, implement this method. - If this returns a non-empty name then when the user drags a row, the listbox will + If this returns a non-null variant then when the user drags a row, the listbox will try to find a DragAndDropContainer in its parent hierarchy, and will use it to trigger a drag-and-drop operation, using this string as the source description, with the listbox itself as the source component. @see DragAndDropContainer::startDragging */ - virtual const String getDragSourceDescription (const SparseSet& currentlySelectedRows); + virtual const var getDragSourceDescription (const SparseSet& currentlySelectedRows); /** You can override this to provide tool tips for specific rows. @see TooltipClient @@ -560,7 +560,7 @@ public: /** @internal */ void colourChanged(); /** @internal */ - void startDragAndDrop (const MouseEvent& e, const String& dragDescription); + void startDragAndDrop (const MouseEvent& e, const var& dragDescription); private: //============================================================================== diff --git a/src/gui/components/controls/juce_TableListBox.cpp b/src/gui/components/controls/juce_TableListBox.cpp index 8c512a93a2..4c620f7298 100644 --- a/src/gui/components/controls/juce_TableListBox.cpp +++ b/src/gui/components/controls/juce_TableListBox.cpp @@ -168,9 +168,9 @@ public: if (selectedRows.size() > 0) { - const String dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); + const var dragDescription (owner.getModel()->getDragSourceDescription (selectedRows)); - if (dragDescription.isNotEmpty()) + if (! (dragDescription.isVoid() || (dragDescription.isString() && dragDescription.toString().isEmpty()))) { isDragging = true; owner.startDragAndDrop (e, dragDescription); @@ -490,7 +490,7 @@ void TableListBoxModel::returnKeyPressed (int) {} void TableListBoxModel::listWasScrolled() {} const String TableListBoxModel::getCellTooltip (int /*rowNumber*/, int /*columnId*/) { return String::empty; } -const String TableListBoxModel::getDragSourceDescription (const SparseSet&) { return String::empty; } +const var TableListBoxModel::getDragSourceDescription (const SparseSet&) { return var::null; } Component* TableListBoxModel::refreshComponentForCell (int, int, bool, Component* existingComponentToUpdate) { diff --git a/src/gui/components/controls/juce_TableListBox.h b/src/gui/components/controls/juce_TableListBox.h index 9a61d9026b..19bfd202f4 100644 --- a/src/gui/components/controls/juce_TableListBox.h +++ b/src/gui/components/controls/juce_TableListBox.h @@ -176,14 +176,14 @@ public: /** To allow rows from your table to be dragged-and-dropped, implement this method. - If this returns a non-empty name then when the user drags a row, the table will try to + If this returns a non-null variant then when the user drags a row, the table will try to find a DragAndDropContainer in its parent hierarchy, and will use it to trigger a drag-and-drop operation, using this string as the source description, and the listbox itself as the source component. - @see DragAndDropContainer::startDragging + @see getDragSourceCustomData, DragAndDropContainer::startDragging */ - virtual const String getDragSourceDescription (const SparseSet& currentlySelectedRows); + virtual const var getDragSourceDescription (const SparseSet& currentlySelectedRows); }; diff --git a/src/gui/components/controls/juce_TreeView.cpp b/src/gui/components/controls/juce_TreeView.cpp index 29867b564a..420837e6a4 100644 --- a/src/gui/components/controls/juce_TreeView.cpp +++ b/src/gui/components/controls/juce_TreeView.cpp @@ -124,9 +124,9 @@ public: if (item != nullptr && e.getMouseDownX() >= pos.getX()) { - const String dragDescription (item->getDragSourceDescription()); + const var dragDescription (item->getDragSourceDescription()); - if (dragDescription.isNotEmpty()) + if (! (dragDescription.isVoid() || (dragDescription.isString() && dragDescription.toString().isEmpty()))) { DragAndDropContainer* const dragContainer = DragAndDropContainer::findParentDragContainerFor (this); @@ -1291,9 +1291,9 @@ const String TreeViewItem::getTooltip() return String::empty; } -const String TreeViewItem::getDragSourceDescription() +const var TreeViewItem::getDragSourceDescription() { - return String::empty; + return var::null; } bool TreeViewItem::isInterestedInFileDrag (const StringArray&) diff --git a/src/gui/components/controls/juce_TreeView.h b/src/gui/components/controls/juce_TreeView.h index 3e140bcc99..77b47a8f8a 100644 --- a/src/gui/components/controls/juce_TreeView.h +++ b/src/gui/components/controls/juce_TreeView.h @@ -340,7 +340,7 @@ public: //============================================================================== /** To allow items from your treeview to be dragged-and-dropped, implement this method. - If this returns a non-empty name then when the user drags an item, the treeview will + If this returns a non-null variant then when the user drags an item, the treeview will try to find a DragAndDropContainer in its parent hierarchy, and will use it to trigger a drag-and-drop operation, using this string as the source description, with the treeview itself as the source component. @@ -353,7 +353,7 @@ public: @see DragAndDropContainer::startDragging */ - virtual const String getDragSourceDescription(); + virtual const var getDragSourceDescription(); /** If you want your item to be able to have files drag-and-dropped onto it, implement this method and return true. diff --git a/src/gui/components/filebrowser/juce_FileTreeComponent.cpp b/src/gui/components/filebrowser/juce_FileTreeComponent.cpp index 48931d879f..54399eb0b5 100644 --- a/src/gui/components/filebrowser/juce_FileTreeComponent.cpp +++ b/src/gui/components/filebrowser/juce_FileTreeComponent.cpp @@ -86,7 +86,7 @@ public: const String getUniqueName() const { return file.getFullPathName(); } int getItemHeight() const { return 22; } - const String getDragSourceDescription() { return owner.getDragAndDropDescription(); } + const var getDragSourceDescription() { return owner.getDragAndDropDescription(); } void itemOpennessChanged (bool isNowOpen) { diff --git a/src/gui/components/menus/juce_MenuBarModel.h b/src/gui/components/menus/juce_MenuBarModel.h index fcd10d4261..4600ca261c 100644 --- a/src/gui/components/menus/juce_MenuBarModel.h +++ b/src/gui/components/menus/juce_MenuBarModel.h @@ -132,7 +132,7 @@ public: int topLevelMenuIndex) = 0; //============================================================================== -#if JUCE_MAC || DOXYGEN + #if JUCE_MAC || DOXYGEN /** MAC ONLY - Sets the model that is currently being shown as the main menu bar at the top of the screen on the Mac. @@ -154,8 +154,7 @@ public: the main menu bar. */ static MenuBarModel* getMacMainMenu(); - -#endif + #endif //============================================================================== /** @internal */ diff --git a/src/gui/components/menus/juce_PopupMenu.cpp b/src/gui/components/menus/juce_PopupMenu.cpp index 4e7ca5a745..1da10e9c26 100644 --- a/src/gui/components/menus/juce_PopupMenu.cpp +++ b/src/gui/components/menus/juce_PopupMenu.cpp @@ -731,14 +731,16 @@ private: { const Rectangle mon (Desktop::getInstance() .getMonitorAreaContaining (target.getCentre(), -#if JUCE_MAC + #if JUCE_MAC true)); -#else + #else false)); // on windows, don't stop the menu overlapping the taskbar -#endif + #endif + + const int maxMenuHeight = mon.getHeight() - 24; int x, y, widthToUse, heightToUse; - layoutMenuItems (mon.getWidth() - 24, widthToUse, heightToUse); + layoutMenuItems (mon.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse); if (alignToRectangle) { @@ -779,10 +781,10 @@ private: if (biggestSpace < widthToUse) { - layoutMenuItems (biggestSpace + target.getWidth() / 3, widthToUse, heightToUse); + layoutMenuItems (biggestSpace + target.getWidth() / 3, maxMenuHeight, widthToUse, heightToUse); if (numColumns > 1) - layoutMenuItems (biggestSpace - 4, widthToUse, heightToUse); + layoutMenuItems (biggestSpace - 4, maxMenuHeight, widthToUse, heightToUse); tendTowardsRight = (mon.getRight() - target.getRight()) >= (target.getX() - mon.getX()); } @@ -807,11 +809,10 @@ private: && owner->windowPos.intersects (windowPos.expanded (-4, -4)); } - void layoutMenuItems (const int maxMenuW, int& width, int& height) + void layoutMenuItems (const int maxMenuW, const int maxMenuH, int& width, int& height) { numColumns = 0; contentHeight = 0; - const int maxMenuH = getParentHeight() - 24; int totalW; do diff --git a/src/gui/components/mouse/juce_DragAndDropContainer.cpp b/src/gui/components/mouse/juce_DragAndDropContainer.cpp index 9542faa469..8845ff1f22 100644 --- a/src/gui/components/mouse/juce_DragAndDropContainer.cpp +++ b/src/gui/components/mouse/juce_DragAndDropContainer.cpp @@ -47,13 +47,12 @@ class DragImageComponent : public Component, { public: DragImageComponent (const Image& im, - const String& desc, + const var& desc, Component* const sourceComponent, Component* const mouseDragSource_, DragAndDropContainer* const o, - const Point& imageOffset_, - ReferenceCountedObject* const customDataObject) - : sourceDetails (desc, sourceComponent, Point(), customDataObject), + const Point& imageOffset_) + : sourceDetails (desc, sourceComponent, Point()), image (im), mouseDragSource (mouseDragSource_), owner (o), @@ -319,12 +318,11 @@ DragAndDropContainer::~DragAndDropContainer() dragImageComponent = nullptr; } -void DragAndDropContainer::startDragging (const String& sourceDescription, +void DragAndDropContainer::startDragging (const var& sourceDescription, Component* sourceComponent, const Image& dragImage_, const bool allowDraggingToExternalWindows, - const Point* imageOffsetFromMouse, - ReferenceCountedObject* customDataObject) + const Point* imageOffsetFromMouse) { Image dragImage (dragImage_); @@ -393,8 +391,7 @@ void DragAndDropContainer::startDragging (const String& sourceDescription, } dragImageComponent = new DragImageComponent (dragImage, sourceDescription, sourceComponent, - draggingSource->getComponentUnderMouse(), this, - imageOffset, customDataObject); + draggingSource->getComponentUnderMouse(), this, imageOffset); currentDragDesc = sourceDescription; @@ -445,12 +442,10 @@ bool DragAndDropContainer::shouldDropFilesWhenDraggedExternally (const DragAndDr } //============================================================================== -DragAndDropTarget::SourceDetails::SourceDetails (const String& description_, Component* sourceComponent_, - const Point& localPosition_, ReferenceCountedObject* const customDataObject_) noexcept +DragAndDropTarget::SourceDetails::SourceDetails (const var& description_, Component* sourceComponent_, const Point& localPosition_) noexcept : description (description_), sourceComponent (sourceComponent_), - localPosition (localPosition_), - customDataObject (customDataObject_) + localPosition (localPosition_) { } diff --git a/src/gui/components/mouse/juce_DragAndDropContainer.h b/src/gui/components/mouse/juce_DragAndDropContainer.h index 2768dac7b8..dc5493f130 100644 --- a/src/gui/components/mouse/juce_DragAndDropContainer.h +++ b/src/gui/components/mouse/juce_DragAndDropContainer.h @@ -73,8 +73,8 @@ public: findParentDragContainerFor() is a handy method to call to find the drag container to use for a component. - @param sourceDescription a string to use as the description of the thing being dragged - this - will be passed to the objects that might be dropped-onto so they can + @param sourceDescription a string or value to use as the description of the thing being dragged - + this will be passed to the objects that might be dropped-onto so they can decide whether they want to handle it @param sourceComponent the component that is being dragged @param dragImage the image to drag around underneath the mouse. If this is a null image, @@ -86,16 +86,12 @@ public: at which the image should be drawn from the mouse. If it isn't specified, then the image will be centred around the mouse. If an image hasn't been passed-in, this will be ignored. - @param customDataObject Any kind of reference-counted object which you want to have passed to - the target component. A pointer to this object will be made available - to the targets in the DragAndDropTarget::SourceDetails class. */ - void startDragging (const String& sourceDescription, + void startDragging (const var& sourceDescription, Component* sourceComponent, const Image& dragImage = Image::null, bool allowDraggingToOtherJuceWindows = false, - const Point* imageOffsetFromMouse = nullptr, - ReferenceCountedObject* customDataObject = nullptr); + const Point* imageOffsetFromMouse = nullptr); /** Returns true if something is currently being dragged. */ bool isDragAndDropActive() const; @@ -163,17 +159,14 @@ protected: and if you want it to then perform a file drag-and-drop, add the filenames you want to the array passed in, and return true. - @param dragSourceDescription the description passed into the startDrag() call when the drag began - @param dragSourceComponent the component passed into the startDrag() call when the drag began - @param files on return, the filenames you want to drag - @param canMoveFiles on return, true if it's ok for the receiver to move the files; false if - it must make a copy of them (see the performExternalDragDropOfFiles() - method) + @param sourceDetails information about the source of the drag operation + @param files on return, the filenames you want to drag + @param canMoveFiles on return, true if it's ok for the receiver to move the files; false if + it must make a copy of them (see the performExternalDragDropOfFiles() method) @see performExternalDragDropOfFiles */ virtual bool shouldDropFilesWhenDraggedExternally (const DragAndDropTarget::SourceDetails& sourceDetails, - StringArray& files, - bool& canMoveFiles); + StringArray& files, bool& canMoveFiles); private: //============================================================================== diff --git a/src/gui/components/mouse/juce_DragAndDropTarget.h b/src/gui/components/mouse/juce_DragAndDropTarget.h index 3d87ba6328..fbff6c1c09 100644 --- a/src/gui/components/mouse/juce_DragAndDropTarget.h +++ b/src/gui/components/mouse/juce_DragAndDropTarget.h @@ -57,11 +57,10 @@ public: { public: /** Creates a SourceDetails object from its various settings. */ - SourceDetails (const String& description, Component* sourceComponent, - const Point& localPosition, ReferenceCountedObject* customDataObject = nullptr) noexcept; + SourceDetails (const var& description, Component* sourceComponent, const Point& localPosition) noexcept; - /** A descriptor string - this is set DragAndDropContainer::startDragging(). */ - String description; + /** A descriptor for the drag - this is set DragAndDropContainer::startDragging(). */ + var description; /** The component from the drag operation was started. */ WeakReference sourceComponent; @@ -70,12 +69,6 @@ public: Note that for calls such as isInterestedInDragSource(), this may be a null position. */ Point localPosition; - - /** A pointer to a user-supplied object which contains some kind of data which is relevant to - the specific classes which are being used. Make sure that you check the type of this object, - and safely dynamic_cast it to your required type. - */ - ReferenceCountedObjectPtr customDataObject; }; //==============================================================================