| @@ -367,7 +367,7 @@ private: | |||||
| class ALSAThread : public Thread | class ALSAThread : public Thread | ||||
| { | { | ||||
| public: | public: | ||||
| ALSAThread (const String& inputId_, | |||||
| ALSAThread (const String& inputId_, | |||||
| const String& outputId_) | const String& outputId_) | ||||
| : Thread ("Juce ALSA"), | : Thread ("Juce ALSA"), | ||||
| sampleRate (0), | sampleRate (0), | ||||
| @@ -446,7 +446,7 @@ public: | |||||
| return; | return; | ||||
| } | } | ||||
| if (! outputDevice->setParameters ((unsigned int) sampleRate, | |||||
| if (! outputDevice->setParameters ((unsigned int) sampleRate, | |||||
| currentOutputChans.getHighestBit() + 1, | currentOutputChans.getHighestBit() + 1, | ||||
| bufferSize)) | bufferSize)) | ||||
| { | { | ||||
| @@ -467,7 +467,7 @@ public: | |||||
| return; | return; | ||||
| } | } | ||||
| if (! inputDevice->setParameters ((unsigned int) sampleRate, | |||||
| if (! inputDevice->setParameters ((unsigned int) sampleRate, | |||||
| currentInputChans.getHighestBit() + 1, | currentInputChans.getHighestBit() + 1, | ||||
| bufferSize)) | bufferSize)) | ||||
| { | { | ||||
| @@ -673,7 +673,7 @@ class ALSAAudioIODevice : public AudioIODevice | |||||
| { | { | ||||
| public: | public: | ||||
| ALSAAudioIODevice (const String& deviceName, | ALSAAudioIODevice (const String& deviceName, | ||||
| const String& inputId_, | |||||
| const String& inputId_, | |||||
| const String& outputId_) | const String& outputId_) | ||||
| : AudioIODevice (deviceName, T("ALSA")), | : AudioIODevice (deviceName, T("ALSA")), | ||||
| inputId (inputId_), | inputId (inputId_), | ||||
| @@ -980,8 +980,8 @@ public: | |||||
| deviceName = inputDeviceName; | deviceName = inputDeviceName; | ||||
| if (index >= 0) | if (index >= 0) | ||||
| return new ALSAAudioIODevice (deviceName, | |||||
| inputIds [inputIndex], | |||||
| return new ALSAAudioIODevice (deviceName, | |||||
| inputIds [inputIndex], | |||||
| outputIds [outputIndex]); | outputIds [outputIndex]); | ||||
| return 0; | return 0; | ||||
| @@ -157,7 +157,7 @@ static void sig_handler (int sig) | |||||
| void MessageManager::doPlatformSpecificInitialisation() | void MessageManager::doPlatformSpecificInitialisation() | ||||
| { | { | ||||
| // Initialise xlib for multiple thread support | // Initialise xlib for multiple thread support | ||||
| static bool initThreadCalled = false; | |||||
| static bool initThreadCalled = false; | |||||
| if (! initThreadCalled) | if (! initThreadCalled) | ||||
| { | { | ||||
| @@ -168,10 +168,10 @@ void MessageManager::doPlatformSpecificInitialisation() | |||||
| if (juce_isRunningAsApplication()) | if (juce_isRunningAsApplication()) | ||||
| Process::terminate(); | Process::terminate(); | ||||
| return; | return; | ||||
| } | } | ||||
| initThreadCalled = true; | initThreadCalled = true; | ||||
| } | } | ||||
| @@ -212,7 +212,7 @@ void MessageManager::doPlatformSpecificInitialisation() | |||||
| if (juce_isRunningAsApplication()) | if (juce_isRunningAsApplication()) | ||||
| Process::terminate(); | Process::terminate(); | ||||
| return; | return; | ||||
| } | } | ||||
| @@ -247,11 +247,11 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
| { | { | ||||
| XDestroyWindow (display, juce_messageWindowHandle); | XDestroyWindow (display, juce_messageWindowHandle); | ||||
| XCloseDisplay (display); | XCloseDisplay (display); | ||||
| // reset pointers | // reset pointers | ||||
| juce_messageWindowHandle = 0; | juce_messageWindowHandle = 0; | ||||
| display = 0; | display = 0; | ||||
| // Restore original error handlers | // Restore original error handlers | ||||
| XSetIOErrorHandler (oldIOErrorHandler); | XSetIOErrorHandler (oldIOErrorHandler); | ||||
| oldIOErrorHandler = 0; | oldIOErrorHandler = 0; | ||||
| @@ -350,7 +350,7 @@ bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages) | |||||
| if (juce_isRunningAsApplication()) | if (juce_isRunningAsApplication()) | ||||
| Process::terminate(); | Process::terminate(); | ||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -49,9 +49,6 @@ BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | ||||
| #include "../../../src/juce_core/io/network/juce_URL.h" | #include "../../../src/juce_core/io/network/juce_URL.h" | ||||
| // we'll borrow the mac's socket-based http streaming code.. | |||||
| #include "../../macosx/platform_specific_code/juce_mac_HTTPStream.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw() | int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw() | ||||
| @@ -103,5 +100,392 @@ bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAdd | |||||
| return false; | return false; | ||||
| } | } | ||||
| //============================================================================== | |||||
| /** A HTTP input stream that uses sockets. | |||||
| */ | |||||
| class JUCE_HTTPSocketStream | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| JUCE_HTTPSocketStream() | |||||
| : readPosition (0), | |||||
| socketHandle (-1), | |||||
| levelsOfRedirection (0), | |||||
| timeoutSeconds (15) | |||||
| { | |||||
| } | |||||
| ~JUCE_HTTPSocketStream() | |||||
| { | |||||
| closeSocket(); | |||||
| } | |||||
| //============================================================================== | |||||
| bool open (const String& url, | |||||
| const String& headers, | |||||
| const MemoryBlock& postData, | |||||
| const bool isPost, | |||||
| URL::OpenStreamProgressCallback* callback, | |||||
| void* callbackContext, | |||||
| int timeOutMs) | |||||
| { | |||||
| closeSocket(); | |||||
| uint32 timeOutTime = Time::getMillisecondCounter(); | |||||
| if (timeOutMs == 0) | |||||
| timeOutTime += 60000; | |||||
| else if (timeOutMs < 0) | |||||
| timeOutTime = 0xffffffff; | |||||
| else | |||||
| timeOutTime += timeOutMs; | |||||
| String hostName, hostPath; | |||||
| int hostPort; | |||||
| if (! decomposeURL (url, hostName, hostPath, hostPort)) | |||||
| return false; | |||||
| const struct hostent* host = 0; | |||||
| int port = 0; | |||||
| String proxyName, proxyPath; | |||||
| int proxyPort = 0; | |||||
| String proxyURL (getenv ("http_proxy")); | |||||
| if (proxyURL.startsWithIgnoreCase (T("http://"))) | |||||
| { | |||||
| if (! decomposeURL (proxyURL, proxyName, proxyPath, proxyPort)) | |||||
| return false; | |||||
| host = gethostbyname ((const char*) proxyName.toUTF8()); | |||||
| port = proxyPort; | |||||
| } | |||||
| else | |||||
| { | |||||
| host = gethostbyname ((const char*) hostName.toUTF8()); | |||||
| port = hostPort; | |||||
| } | |||||
| if (host == 0) | |||||
| return false; | |||||
| struct sockaddr_in address; | |||||
| zerostruct (address); | |||||
| memcpy ((void*) &address.sin_addr, (const void*) host->h_addr, host->h_length); | |||||
| address.sin_family = host->h_addrtype; | |||||
| address.sin_port = htons (port); | |||||
| socketHandle = socket (host->h_addrtype, SOCK_STREAM, 0); | |||||
| if (socketHandle == -1) | |||||
| return false; | |||||
| int receiveBufferSize = 16384; | |||||
| setsockopt (socketHandle, SOL_SOCKET, SO_RCVBUF, (char*) &receiveBufferSize, sizeof (receiveBufferSize)); | |||||
| setsockopt (socketHandle, SOL_SOCKET, SO_KEEPALIVE, 0, 0); | |||||
| #if JUCE_MAC | |||||
| setsockopt (socketHandle, SOL_SOCKET, SO_NOSIGPIPE, 0, 0); | |||||
| #endif | |||||
| if (connect (socketHandle, (struct sockaddr*) &address, sizeof (address)) == -1) | |||||
| { | |||||
| closeSocket(); | |||||
| return false; | |||||
| } | |||||
| const MemoryBlock requestHeader (createRequestHeader (hostName, hostPort, | |||||
| proxyName, proxyPort, | |||||
| hostPath, url, | |||||
| headers, postData, | |||||
| isPost)); | |||||
| int totalHeaderSent = 0; | |||||
| while (totalHeaderSent < requestHeader.getSize()) | |||||
| { | |||||
| if (Time::getMillisecondCounter() > timeOutTime) | |||||
| { | |||||
| closeSocket(); | |||||
| return false; | |||||
| } | |||||
| const int numToSend = jmin (1024, requestHeader.getSize() - totalHeaderSent); | |||||
| if (send (socketHandle, | |||||
| ((const char*) requestHeader.getData()) + totalHeaderSent, | |||||
| numToSend, 0) | |||||
| != numToSend) | |||||
| { | |||||
| closeSocket(); | |||||
| return false; | |||||
| } | |||||
| totalHeaderSent += numToSend; | |||||
| if (callback != 0 && ! callback (callbackContext, totalHeaderSent, requestHeader.getSize())) | |||||
| { | |||||
| closeSocket(); | |||||
| return false; | |||||
| } | |||||
| } | |||||
| const String responseHeader (readResponse (timeOutTime)); | |||||
| if (responseHeader.isNotEmpty()) | |||||
| { | |||||
| //DBG (responseHeader); | |||||
| StringArray lines; | |||||
| lines.addLines (responseHeader); | |||||
| // NB - using charToString() here instead of just T(" "), because that was | |||||
| // causing a mysterious gcc internal compiler error... | |||||
| const int statusCode = responseHeader.fromFirstOccurrenceOf (String::charToString (T(' ')), false, false) | |||||
| .substring (0, 3) | |||||
| .getIntValue(); | |||||
| //int contentLength = findHeaderItem (lines, T("Content-Length:")).getIntValue(); | |||||
| //bool isChunked = findHeaderItem (lines, T("Transfer-Encoding:")).equalsIgnoreCase ("chunked"); | |||||
| String location (findHeaderItem (lines, T("Location:"))); | |||||
| if (statusCode >= 300 && statusCode < 400 | |||||
| && location.isNotEmpty()) | |||||
| { | |||||
| if (! location.startsWithIgnoreCase (T("http://"))) | |||||
| location = T("http://") + location; | |||||
| if (levelsOfRedirection++ < 3) | |||||
| return open (location, headers, postData, isPost, callback, callbackContext, timeOutMs); | |||||
| } | |||||
| else | |||||
| { | |||||
| levelsOfRedirection = 0; | |||||
| return true; | |||||
| } | |||||
| } | |||||
| closeSocket(); | |||||
| return false; | |||||
| } | |||||
| //============================================================================== | |||||
| int read (void* buffer, int bytesToRead) | |||||
| { | |||||
| fd_set readbits; | |||||
| FD_ZERO (&readbits); | |||||
| FD_SET (socketHandle, &readbits); | |||||
| struct timeval tv; | |||||
| tv.tv_sec = timeoutSeconds; | |||||
| tv.tv_usec = 0; | |||||
| if (select (socketHandle + 1, &readbits, 0, 0, &tv) <= 0) | |||||
| return 0; // (timeout) | |||||
| const int bytesRead = jmax (0, recv (socketHandle, buffer, bytesToRead, MSG_WAITALL)); | |||||
| readPosition += bytesRead; | |||||
| return bytesRead; | |||||
| } | |||||
| //============================================================================== | |||||
| int readPosition; | |||||
| //============================================================================== | |||||
| juce_UseDebuggingNewOperator | |||||
| private: | |||||
| int socketHandle, levelsOfRedirection; | |||||
| const int timeoutSeconds; | |||||
| //============================================================================== | |||||
| void closeSocket() | |||||
| { | |||||
| if (socketHandle >= 0) | |||||
| close (socketHandle); | |||||
| socketHandle = -1; | |||||
| } | |||||
| const MemoryBlock createRequestHeader (const String& hostName, | |||||
| const int hostPort, | |||||
| const String& proxyName, | |||||
| const int proxyPort, | |||||
| const String& hostPath, | |||||
| const String& originalURL, | |||||
| const String& headers, | |||||
| const MemoryBlock& postData, | |||||
| const bool isPost) | |||||
| { | |||||
| String header (isPost ? "POST " : "GET "); | |||||
| if (proxyName.isEmpty()) | |||||
| { | |||||
| header << hostPath << " HTTP/1.0\r\nHost: " | |||||
| << hostName << ':' << hostPort; | |||||
| } | |||||
| else | |||||
| { | |||||
| header << originalURL << " HTTP/1.0\r\nHost: " | |||||
| << proxyName << ':' << proxyPort; | |||||
| } | |||||
| header << "\r\nUser-Agent: JUCE/" | |||||
| << JUCE_MAJOR_VERSION << '.' << JUCE_MINOR_VERSION | |||||
| << "\r\nConnection: Close\r\nContent-Length: " | |||||
| << postData.getSize() << "\r\n" | |||||
| << headers << "\r\n"; | |||||
| MemoryBlock mb; | |||||
| mb.append (header.toUTF8(), (int) strlen (header.toUTF8())); | |||||
| mb.append (postData.getData(), postData.getSize()); | |||||
| return mb; | |||||
| } | |||||
| const String readResponse (const uint32 timeOutTime) | |||||
| { | |||||
| int bytesRead = 0, numConsecutiveLFs = 0; | |||||
| MemoryBlock buffer (1024, true); | |||||
| while (numConsecutiveLFs < 2 && bytesRead < 32768 | |||||
| && Time::getMillisecondCounter() <= timeOutTime) | |||||
| { | |||||
| fd_set readbits; | |||||
| FD_ZERO (&readbits); | |||||
| FD_SET (socketHandle, &readbits); | |||||
| struct timeval tv; | |||||
| tv.tv_sec = timeoutSeconds; | |||||
| tv.tv_usec = 0; | |||||
| if (select (socketHandle + 1, &readbits, 0, 0, &tv) <= 0) | |||||
| return String::empty; // (timeout) | |||||
| buffer.ensureSize (bytesRead + 8, true); | |||||
| char* const dest = (char*) buffer.getData() + bytesRead; | |||||
| if (recv (socketHandle, dest, 1, 0) == -1) | |||||
| return String::empty; | |||||
| const char lastByte = *dest; | |||||
| ++bytesRead; | |||||
| if (lastByte == '\n') | |||||
| ++numConsecutiveLFs; | |||||
| else if (lastByte != '\r') | |||||
| numConsecutiveLFs = 0; | |||||
| } | |||||
| const String header (String::fromUTF8 ((const uint8*) buffer.getData())); | |||||
| if (header.startsWithIgnoreCase (T("HTTP/"))) | |||||
| return header.trimEnd(); | |||||
| return String::empty; | |||||
| } | |||||
| //============================================================================== | |||||
| static bool decomposeURL (const String& url, | |||||
| String& host, String& path, int& port) | |||||
| { | |||||
| if (! url.startsWithIgnoreCase (T("http://"))) | |||||
| return false; | |||||
| const int nextSlash = url.indexOfChar (7, '/'); | |||||
| int nextColon = url.indexOfChar (7, ':'); | |||||
| if (nextColon > nextSlash && nextSlash > 0) | |||||
| nextColon = -1; | |||||
| if (nextColon >= 0) | |||||
| { | |||||
| host = url.substring (7, nextColon); | |||||
| if (nextSlash >= 0) | |||||
| port = url.substring (nextColon + 1, nextSlash).getIntValue(); | |||||
| else | |||||
| port = url.substring (nextColon + 1).getIntValue(); | |||||
| } | |||||
| else | |||||
| { | |||||
| port = 80; | |||||
| if (nextSlash >= 0) | |||||
| host = url.substring (7, nextSlash); | |||||
| else | |||||
| host = url.substring (7); | |||||
| } | |||||
| if (nextSlash >= 0) | |||||
| path = url.substring (nextSlash); | |||||
| else | |||||
| path = T("/"); | |||||
| return true; | |||||
| } | |||||
| //============================================================================== | |||||
| static const String findHeaderItem (const StringArray& lines, const String& itemName) | |||||
| { | |||||
| for (int i = 0; i < lines.size(); ++i) | |||||
| if (lines[i].startsWithIgnoreCase (itemName)) | |||||
| return lines[i].substring (itemName.length()).trim(); | |||||
| return String::empty; | |||||
| } | |||||
| }; | |||||
| //============================================================================== | |||||
| bool juce_isOnLine() | |||||
| { | |||||
| return true; | |||||
| } | |||||
| void* juce_openInternetFile (const String& url, | |||||
| const String& headers, | |||||
| const MemoryBlock& postData, | |||||
| const bool isPost, | |||||
| URL::OpenStreamProgressCallback* callback, | |||||
| void* callbackContext, | |||||
| int timeOutMs) | |||||
| { | |||||
| JUCE_HTTPSocketStream* const s = new JUCE_HTTPSocketStream(); | |||||
| if (s->open (url, headers, postData, isPost, | |||||
| callback, callbackContext, timeOutMs)) | |||||
| return s; | |||||
| delete s; | |||||
| return 0; | |||||
| } | |||||
| void juce_closeInternetFile (void* handle) | |||||
| { | |||||
| JUCE_HTTPSocketStream* const s = (JUCE_HTTPSocketStream*) handle; | |||||
| if (s != 0) | |||||
| delete s; | |||||
| } | |||||
| int juce_readFromInternetFile (void* handle, void* buffer, int bytesToRead) | |||||
| { | |||||
| JUCE_HTTPSocketStream* const s = (JUCE_HTTPSocketStream*) handle; | |||||
| if (s != 0) | |||||
| return s->read (buffer, bytesToRead); | |||||
| return 0; | |||||
| } | |||||
| int juce_seekInInternetFile (void* handle, int newPosition) | |||||
| { | |||||
| JUCE_HTTPSocketStream* const s = (JUCE_HTTPSocketStream*) handle; | |||||
| if (s != 0) | |||||
| return s->readPosition; | |||||
| return 0; | |||||
| } | |||||
| END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
| @@ -44,6 +44,7 @@ BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/threads/juce_Process.h" | #include "../../../src/juce_core/threads/juce_Process.h" | ||||
| #include "../../../src/juce_core/io/files/juce_File.h" | #include "../../../src/juce_core/io/files/juce_File.h" | ||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | #include "../../../src/juce_core/basics/juce_SystemStats.h" | ||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| /* | /* | ||||
| @@ -90,9 +91,9 @@ void juce_setCurrentThreadName (const String& /*name*/) throw() | |||||
| { | { | ||||
| } | } | ||||
| int Thread::getCurrentThreadId() throw() | |||||
| int64 Thread::getCurrentThreadId() throw() | |||||
| { | { | ||||
| return (int) pthread_self(); | |||||
| return pthread_self(); | |||||
| } | } | ||||
| /* | /* | ||||
| @@ -255,17 +256,17 @@ void Process::lowerPrivilege() | |||||
| } | } | ||||
| #if JUCE_BUILD_GUI_CLASSES | #if JUCE_BUILD_GUI_CLASSES | ||||
| void* Process::loadDynamicLibrary (const String& name) | |||||
| void* PlatformUtilities::loadDynamicLibrary (const String& name) | |||||
| { | { | ||||
| return dlopen ((const char*) name.toUTF8(), RTLD_LOCAL | RTLD_NOW); | return dlopen ((const char*) name.toUTF8(), RTLD_LOCAL | RTLD_NOW); | ||||
| } | } | ||||
| void Process::freeDynamicLibrary (void* handle) | |||||
| void PlatformUtilities::freeDynamicLibrary (void* handle) | |||||
| { | { | ||||
| dlclose(handle); | dlclose(handle); | ||||
| } | } | ||||
| void* Process::getProcedureEntryPoint (void* libraryHandle, const String& procedureName) | |||||
| void* PlatformUtilities::getProcedureEntryPoint (void* libraryHandle, const String& procedureName) | |||||
| { | { | ||||
| return dlsym (libraryHandle, (const char*) procedureName); | return dlsym (libraryHandle, (const char*) procedureName); | ||||
| } | } | ||||
| @@ -35,6 +35,7 @@ BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h" | #include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h" | ||||
| #if JUCE_WEB_BROWSER | |||||
| /* | /* | ||||
| Sorry.. This class isn't implemented on Linux! | Sorry.. This class isn't implemented on Linux! | ||||
| @@ -113,10 +114,6 @@ void WebBrowserComponent::parentHierarchyChanged() | |||||
| checkWindowAssociation(); | checkWindowAssociation(); | ||||
| } | } | ||||
| void WebBrowserComponent::moved() | |||||
| { | |||||
| } | |||||
| void WebBrowserComponent::resized() | void WebBrowserComponent::resized() | ||||
| { | { | ||||
| } | } | ||||
| @@ -131,5 +128,5 @@ bool WebBrowserComponent::pageAboutToLoad (const String& url) | |||||
| return true; | return true; | ||||
| } | } | ||||
| #endif | |||||
| END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
| @@ -467,7 +467,7 @@ static Pixmap juce_createColourPixmapFromImage (Display* display, const Image& i | |||||
| XImage* ximage = XCreateImage (display, CopyFromParent, 24, ZPixmap, | XImage* ximage = XCreateImage (display, CopyFromParent, 24, ZPixmap, | ||||
| 0, (char*) colour, width, height, 32, 0); | 0, (char*) colour, width, height, 32, 0); | ||||
| Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display), | |||||
| Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display), | |||||
| width, height, 24); | width, height, 24); | ||||
| GC gc = XCreateGC (display, pixmap, 0, 0); | GC gc = XCreateGC (display, pixmap, 0, 0); | ||||
| @@ -1184,7 +1184,7 @@ public: | |||||
| wmHints->icon_mask = juce_createMaskPixmapFromImage (display, newIcon); | wmHints->icon_mask = juce_createMaskPixmapFromImage (display, newIcon); | ||||
| XSetWMHints (display, windowH, wmHints); | XSetWMHints (display, windowH, wmHints); | ||||
| XFree (wmHints); | |||||
| XFree (wmHints); | |||||
| XSync (display, False); | XSync (display, False); | ||||
| } | } | ||||
| @@ -1754,7 +1754,7 @@ public: | |||||
| trayAtom = XInternAtom (display, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", false); | trayAtom = XInternAtom (display, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", false); | ||||
| XChangeProperty (display, windowH, trayAtom, XA_WINDOW, 32, PropModeReplace, (unsigned char*) &windowH, 1); | XChangeProperty (display, windowH, trayAtom, XA_WINDOW, 32, PropModeReplace, (unsigned char*) &windowH, 1); | ||||
| // a minimum size must be specified for GNOME and Xfce, otherwise the icon is displayed with a width of 1 | |||||
| // a minimum size must be specified for GNOME and Xfce, otherwise the icon is displayed with a width of 1 | |||||
| XSizeHints* hints = XAllocSizeHints(); | XSizeHints* hints = XAllocSizeHints(); | ||||
| hints->flags = PMinSize; | hints->flags = PMinSize; | ||||
| hints->min_width = 22; | hints->min_width = 22; | ||||
| @@ -7,7 +7,6 @@ | |||||
| objects = { | objects = { | ||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 84022DFD0DAE4CB9004CF59A /* juce_mac_HTTPStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84022DFB0DAE4CB9004CF59A /* juce_mac_HTTPStream.h */; }; | |||||
| 84052DE408D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */; }; | 84052DE408D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */; }; | ||||
| 84052DE508D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */; }; | 84052DE508D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */; }; | ||||
| 8406AA5A0C4BDF90003A0D6A /* juce_MidiOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */; }; | 8406AA5A0C4BDF90003A0D6A /* juce_MidiOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */; }; | ||||
| @@ -34,11 +33,10 @@ | |||||
| 84198B14096D8E2B0022A439 /* juce_MidiOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */; }; | 84198B14096D8E2B0022A439 /* juce_MidiOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */; }; | ||||
| 84198BB5096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */; }; | 84198BB5096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */; }; | ||||
| 84198BB6096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */; }; | 84198BB6096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */; }; | ||||
| 841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp */; }; | |||||
| 841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */; }; | |||||
| 841B22E30D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */; }; | 841B22E30D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */; }; | ||||
| 841B22E40D2E7FE3009D01AA /* juce_DirectXPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */; }; | 841B22E40D2E7FE3009D01AA /* juce_DirectXPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */; }; | ||||
| 841B22E50D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */; }; | 841B22E50D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */; }; | ||||
| 841B22E60D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D20D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp */; }; | |||||
| 841B22E70D2E7FE3009D01AA /* juce_VSTPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */; }; | 841B22E70D2E7FE3009D01AA /* juce_VSTPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */; }; | ||||
| 841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */; }; | 841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */; }; | ||||
| 841B22E90D2E7FE3009D01AA /* juce_AudioPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */; }; | 841B22E90D2E7FE3009D01AA /* juce_AudioPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */; }; | ||||
| @@ -79,18 +77,19 @@ | |||||
| 842F9D6E0A19C9AF00B1358D /* juce_TextPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */; }; | 842F9D6E0A19C9AF00B1358D /* juce_TextPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */; }; | ||||
| 842F9DE20A19D2AF00B1358D /* juce_PositionedRectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */; }; | 842F9DE20A19D2AF00B1358D /* juce_PositionedRectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */; }; | ||||
| 842F9DE30A19D2AF00B1358D /* juce_PositionedRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */; }; | 842F9DE30A19D2AF00B1358D /* juce_PositionedRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */; }; | ||||
| 8435D90D0E9406D2008FBD1C /* juce_mac_Strings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8435D90C0E9406D2008FBD1C /* juce_mac_Strings.mm */; }; | |||||
| 8435D9650E940A3E008FBD1C /* juce_mac_MiscUtilities.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8435D9640E940A3E008FBD1C /* juce_mac_MiscUtilities.mm */; }; | |||||
| 8435DA420E95527D008FBD1C /* juce_mac_Debugging.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8435DA410E95527D008FBD1C /* juce_mac_Debugging.mm */; }; | |||||
| 8440CD3E0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */; }; | 8440CD3E0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */; }; | ||||
| 8440CD3F0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */; }; | 8440CD3F0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */; }; | ||||
| 8440CD620ACD112E0086FFD7 /* juce_SliderListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */; }; | 8440CD620ACD112E0086FFD7 /* juce_SliderListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */; }; | ||||
| 8457783E0E8947C8006D9E4E /* juce_NSViewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */; }; | |||||
| 84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */; }; | 84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */; }; | ||||
| 84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */; }; | 84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */; }; | ||||
| 846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */; }; | 846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */; }; | ||||
| 846034DF09CB374E00E255CF /* juce_InterprocessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */; }; | 846034DF09CB374E00E255CF /* juce_InterprocessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */; }; | ||||
| 846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */; }; | 846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */; }; | ||||
| 846034E109CB374E00E255CF /* juce_InterprocessConnectionServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */; }; | 846034E109CB374E00E255CF /* juce_InterprocessConnectionServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */; }; | ||||
| 8463D3220E1FC25A003B46B2 /* juce_mac_Fonts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8463D31F0E1FC25A003B46B2 /* juce_mac_Fonts.mm */; }; | |||||
| 8463D3230E1FC25A003B46B2 /* juce_mac_Messaging.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8463D3200E1FC25A003B46B2 /* juce_mac_Messaging.mm */; }; | |||||
| 8463D3240E1FC25A003B46B2 /* juce_mac_Windowing.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8463D3210E1FC25A003B46B2 /* juce_mac_Windowing.mm */; }; | |||||
| 8463D5C1098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */; }; | 8463D5C1098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */; }; | ||||
| 8463D5C2098BD2DD00F9AEC2 /* juce_MidiBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */; }; | 8463D5C2098BD2DD00F9AEC2 /* juce_MidiBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */; }; | ||||
| 8463D5C3098BD2DD00F9AEC2 /* juce_MidiFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */; }; | 8463D5C3098BD2DD00F9AEC2 /* juce_MidiFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */; }; | ||||
| @@ -115,12 +114,10 @@ | |||||
| 846927DF0A49ABE600314975 /* juce_RectanglePlacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */; }; | 846927DF0A49ABE600314975 /* juce_RectanglePlacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */; }; | ||||
| 846927E10A49ABFD00314975 /* juce_SVGParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */; }; | 846927E10A49ABFD00314975 /* juce_SVGParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */; }; | ||||
| 847824810D7816A00082A5C5 /* juce_AudioCDBurner.h in Headers */ = {isa = PBXBuildFile; fileRef = 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */; }; | 847824810D7816A00082A5C5 /* juce_AudioCDBurner.h in Headers */ = {isa = PBXBuildFile; fileRef = 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */; }; | ||||
| 847D06470DD88D1100DF6A61 /* juce_mac_Network.mm in Sources */ = {isa = PBXBuildFile; fileRef = 847D06460DD88D1100DF6A61 /* juce_mac_Network.mm */; }; | |||||
| 847F72DB0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */; }; | 847F72DB0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */; }; | ||||
| 847F72DC0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */; }; | 847F72DC0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */; }; | ||||
| 847F72DD0C2702A000CBECEC /* juce_FileTreeComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */; }; | 847F72DD0C2702A000CBECEC /* juce_FileTreeComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */; }; | ||||
| 847F72DE0C2702A000CBECEC /* juce_FileTreeComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */; }; | 847F72DE0C2702A000CBECEC /* juce_FileTreeComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */; }; | ||||
| 848A560B0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848A560A0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm */; }; | |||||
| 848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */; }; | 848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */; }; | ||||
| 8495BB8C0D8067B2001D9C0B /* juce_AudioThumbnail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */; }; | 8495BB8C0D8067B2001D9C0B /* juce_AudioThumbnail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */; }; | ||||
| 8495BB8D0D8067B2001D9C0B /* juce_AudioThumbnail.h in Headers */ = {isa = PBXBuildFile; fileRef = 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */; }; | 8495BB8D0D8067B2001D9C0B /* juce_AudioThumbnail.h in Headers */ = {isa = PBXBuildFile; fileRef = 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */; }; | ||||
| @@ -132,11 +129,6 @@ | |||||
| 84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */; }; | 84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */; }; | ||||
| 84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */; }; | 84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */; }; | ||||
| 84A06BAF09CAD6A3006A43BD /* juce_AudioIODeviceType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */; }; | 84A06BAF09CAD6A3006A43BD /* juce_AudioIODeviceType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */; }; | ||||
| 84A06BE309CADB06006A43BD /* juce_mac_NamedPipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BE209CADB06006A43BD /* juce_mac_NamedPipe.cpp */; }; | |||||
| 84A4882908A22E2400752A2B /* juce_mac_CoreAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4881E08A22E2400752A2B /* juce_mac_CoreAudio.cpp */; }; | |||||
| 84A4882A08A22E2400752A2B /* juce_mac_CoreMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4881F08A22E2400752A2B /* juce_mac_CoreMidi.cpp */; }; | |||||
| 84A4882C08A22E2400752A2B /* juce_mac_Files.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4882108A22E2400752A2B /* juce_mac_Files.cpp */; }; | |||||
| 84A4883108A22E2400752A2B /* juce_mac_Threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4882608A22E2400752A2B /* juce_mac_Threads.cpp */; }; | |||||
| 84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883508A22E4900752A2B /* juce_Application.cpp */; }; | 84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883508A22E4900752A2B /* juce_Application.cpp */; }; | ||||
| 84A48A2908A22E4B00752A2B /* juce_Application.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4883608A22E4900752A2B /* juce_Application.h */; }; | 84A48A2908A22E4B00752A2B /* juce_Application.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4883608A22E4900752A2B /* juce_Application.h */; }; | ||||
| 84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */; }; | 84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */; }; | ||||
| @@ -288,7 +280,6 @@ | |||||
| 84A48ACE08A22E4B00752A2B /* juce_OpenGLComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */; }; | 84A48ACE08A22E4B00752A2B /* juce_OpenGLComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */; }; | ||||
| 84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */; }; | 84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */; }; | ||||
| 84A48AD008A22E4B00752A2B /* juce_PreferencesPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */; }; | 84A48AD008A22E4B00752A2B /* juce_PreferencesPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */; }; | ||||
| 84A48AD108A22E4B00752A2B /* juce_QuickTimeMovieComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EC08A22E4900752A2B /* juce_QuickTimeMovieComponent.cpp */; }; | |||||
| 84A48AD208A22E4B00752A2B /* juce_QuickTimeMovieComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */; }; | 84A48AD208A22E4B00752A2B /* juce_QuickTimeMovieComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */; }; | ||||
| 84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */; }; | 84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */; }; | ||||
| 84A48AD408A22E4B00752A2B /* juce_AlertWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488F008A22E4900752A2B /* juce_AlertWindow.h */; }; | 84A48AD408A22E4B00752A2B /* juce_AlertWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488F008A22E4900752A2B /* juce_AlertWindow.h */; }; | ||||
| @@ -490,12 +481,32 @@ | |||||
| 84BC4E2E0C8DD38C00FA249B /* juce_AudioProcessorListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */; }; | 84BC4E2E0C8DD38C00FA249B /* juce_AudioProcessorListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */; }; | ||||
| 84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */; }; | 84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */; }; | ||||
| 84BC4E300C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */; }; | 84BC4E300C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */; }; | ||||
| 84BE9E1C0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84BE9E1B0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm */; }; | |||||
| 84C0EA5E0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */; }; | 84C0EA5E0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */; }; | ||||
| 84C0EA5F0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */; }; | 84C0EA5F0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */; }; | ||||
| 84CE8A410DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CE8A400DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm */; }; | |||||
| 84CA4AF40E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */; }; | |||||
| 84D296BD09B763190026C535 /* juce_PropertiesFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */; }; | 84D296BD09B763190026C535 /* juce_PropertiesFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */; }; | ||||
| 84D296BE09B763190026C535 /* juce_PropertiesFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D296BC09B763190026C535 /* juce_PropertiesFile.h */; }; | 84D296BE09B763190026C535 /* juce_PropertiesFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D296BC09B763190026C535 /* juce_PropertiesFile.h */; }; | ||||
| 84E024F10E94028C003E41AF /* juce_mac_AppleRemote.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DB0E94028C003E41AF /* juce_mac_AppleRemote.mm */; }; | |||||
| 84E024F20E94028C003E41AF /* juce_mac_AudioCDBurner.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DC0E94028C003E41AF /* juce_mac_AudioCDBurner.mm */; }; | |||||
| 84E024F30E94028C003E41AF /* juce_mac_CoreAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DD0E94028C003E41AF /* juce_mac_CoreAudio.cpp */; }; | |||||
| 84E024F40E94028C003E41AF /* juce_mac_CoreMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DE0E94028C003E41AF /* juce_mac_CoreMidi.cpp */; }; | |||||
| 84E024F50E94028C003E41AF /* juce_mac_FileChooser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DF0E94028C003E41AF /* juce_mac_FileChooser.mm */; }; | |||||
| 84E024F60E94028C003E41AF /* juce_mac_Files.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E00E94028C003E41AF /* juce_mac_Files.mm */; }; | |||||
| 84E024F70E94028C003E41AF /* juce_mac_Fonts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E10E94028C003E41AF /* juce_mac_Fonts.mm */; }; | |||||
| 84E024F80E94028C003E41AF /* juce_mac_MainMenu.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E20E94028C003E41AF /* juce_mac_MainMenu.mm */; }; | |||||
| 84E024F90E94028C003E41AF /* juce_mac_MessageManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E30E94028C003E41AF /* juce_mac_MessageManager.mm */; }; | |||||
| 84E024FA0E94028C003E41AF /* juce_mac_MouseCursor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E40E94028C003E41AF /* juce_mac_MouseCursor.mm */; }; | |||||
| 84E024FB0E94028C003E41AF /* juce_mac_NamedPipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E50E94028C003E41AF /* juce_mac_NamedPipe.cpp */; }; | |||||
| 84E024FC0E94028C003E41AF /* juce_mac_NativeCode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E60E94028C003E41AF /* juce_mac_NativeCode.mm */; }; | |||||
| 84E024FE0E94028C003E41AF /* juce_mac_Network.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E80E94028C003E41AF /* juce_mac_Network.mm */; }; | |||||
| 84E024FF0E94028C003E41AF /* juce_mac_NSViewComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E90E94028C003E41AF /* juce_mac_NSViewComponent.mm */; }; | |||||
| 84E025000E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EA0E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm */; }; | |||||
| 84E025010E94028C003E41AF /* juce_mac_OpenGLComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EB0E94028C003E41AF /* juce_mac_OpenGLComponent.mm */; }; | |||||
| 84E025020E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EC0E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm */; }; | |||||
| 84E025030E94028C003E41AF /* juce_mac_SystemStats.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024ED0E94028C003E41AF /* juce_mac_SystemStats.mm */; }; | |||||
| 84E025040E94028C003E41AF /* juce_mac_Threads.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EE0E94028C003E41AF /* juce_mac_Threads.mm */; }; | |||||
| 84E025050E94028C003E41AF /* juce_mac_WebBrowserComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EF0E94028C003E41AF /* juce_mac_WebBrowserComponent.mm */; }; | |||||
| 84E025060E94028C003E41AF /* juce_posix_SharedCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E024F00E94028C003E41AF /* juce_posix_SharedCode.h */; }; | |||||
| 84E8209409729D2A0097675B /* juce_AudioFormatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */; }; | 84E8209409729D2A0097675B /* juce_AudioFormatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */; }; | ||||
| 84E8209509729D2A0097675B /* juce_AudioFormatManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */; }; | 84E8209509729D2A0097675B /* juce_AudioFormatManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */; }; | ||||
| 84F1B8DA09499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */; }; | 84F1B8DA09499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */; }; | ||||
| @@ -529,10 +540,8 @@ | |||||
| 84F593AE09855679008153BA /* juce_DocumentWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */; }; | 84F593AE09855679008153BA /* juce_DocumentWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */; }; | ||||
| 84F593AF09855679008153BA /* juce_DocumentWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593AD09855679008153BA /* juce_DocumentWindow.h */; }; | 84F593AF09855679008153BA /* juce_DocumentWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593AD09855679008153BA /* juce_DocumentWindow.h */; }; | ||||
| 84F593B109855693008153BA /* juce_LassoComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593B009855693008153BA /* juce_LassoComponent.h */; }; | 84F593B109855693008153BA /* juce_LassoComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593B009855693008153BA /* juce_LassoComponent.h */; }; | ||||
| 84F597000E23DDBB00E92E85 /* juce_mac_NativeHeaders.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F596FF0E23DDBB00E92E85 /* juce_mac_NativeHeaders.h */; }; | |||||
| 84F6B7540C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */; }; | 84F6B7540C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */; }; | ||||
| 84F6B7550C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */; }; | 84F6B7550C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */; }; | ||||
| 84F703230E1E56FB00EB338A /* juce_mac_FileChooser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84F703220E1E56FB00EB338A /* juce_mac_FileChooser.mm */; }; | |||||
| 84F7A7AF0A8383A100D36246 /* juce_ToolbarButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */; }; | 84F7A7AF0A8383A100D36246 /* juce_ToolbarButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */; }; | ||||
| 84F7A7B00A8383A100D36246 /* juce_ToolbarButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */; }; | 84F7A7B00A8383A100D36246 /* juce_ToolbarButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */; }; | ||||
| 84F7A7B80A8383C200D36246 /* juce_Toolbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */; }; | 84F7A7B80A8383C200D36246 /* juce_Toolbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */; }; | ||||
| @@ -546,6 +555,7 @@ | |||||
| 84F7A7C20A8383E000D36246 /* juce_MultiTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */; }; | 84F7A7C20A8383E000D36246 /* juce_MultiTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */; }; | ||||
| 84F7A7EF0A838CC900D36246 /* juce_ComponentAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */; }; | 84F7A7EF0A838CC900D36246 /* juce_ComponentAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */; }; | ||||
| 84F7A7F00A838CC900D36246 /* juce_ComponentAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */; }; | 84F7A7F00A838CC900D36246 /* juce_ComponentAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */; }; | ||||
| 84F8B60D0EB5B9230020D98D /* juce_mac_NativeIncludes.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F8B60C0EB5B9230020D98D /* juce_mac_NativeIncludes.h */; }; | |||||
| 84F8DAD0099C963A00E911ED /* juce_ComponentPeer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */; }; | 84F8DAD0099C963A00E911ED /* juce_ComponentPeer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */; }; | ||||
| 84F8DAD1099C963A00E911ED /* juce_ComponentPeer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */; }; | 84F8DAD1099C963A00E911ED /* juce_ComponentPeer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */; }; | ||||
| 84FC318F09B749FD00B75141 /* juce_FileBasedDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */; }; | 84FC318F09B749FD00B75141 /* juce_FileBasedDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */; }; | ||||
| @@ -582,7 +592,6 @@ | |||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||
| 84022DFB0DAE4CB9004CF59A /* juce_mac_HTTPStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_mac_HTTPStream.h; sourceTree = "<group>"; }; | |||||
| 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToneGeneratorAudioSource.cpp; sourceTree = "<group>"; }; | 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToneGeneratorAudioSource.cpp; sourceTree = "<group>"; }; | ||||
| 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToneGeneratorAudioSource.h; sourceTree = "<group>"; }; | 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToneGeneratorAudioSource.h; sourceTree = "<group>"; }; | ||||
| 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiOutput.cpp; sourceTree = "<group>"; }; | 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiOutput.cpp; sourceTree = "<group>"; }; | ||||
| @@ -609,11 +618,10 @@ | |||||
| 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MidiOutput.h; sourceTree = "<group>"; }; | 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MidiOutput.h; sourceTree = "<group>"; }; | ||||
| 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioDeviceSelectorComponent.cpp; sourceTree = "<group>"; }; | 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioDeviceSelectorComponent.cpp; sourceTree = "<group>"; }; | ||||
| 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioDeviceSelectorComponent.h; sourceTree = "<group>"; }; | 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioDeviceSelectorComponent.h; sourceTree = "<group>"; }; | ||||
| 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioUnitPluginFormat.cpp; sourceTree = "<group>"; }; | |||||
| 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 2; path = juce_AudioUnitPluginFormat.mm; sourceTree = "<group>"; }; | |||||
| 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioUnitPluginFormat.h; sourceTree = "<group>"; }; | 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioUnitPluginFormat.h; sourceTree = "<group>"; }; | ||||
| 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DirectXPluginFormat.h; sourceTree = "<group>"; }; | 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DirectXPluginFormat.h; sourceTree = "<group>"; }; | ||||
| 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LADSPAPluginFormat.h; sourceTree = "<group>"; }; | 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LADSPAPluginFormat.h; sourceTree = "<group>"; }; | ||||
| 841B22D20D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_VSTPluginFormat.cpp; sourceTree = "<group>"; }; | |||||
| 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_VSTPluginFormat.h; sourceTree = "<group>"; }; | 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_VSTPluginFormat.h; sourceTree = "<group>"; }; | ||||
| 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioPluginFormat.cpp; sourceTree = "<group>"; }; | 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioPluginFormat.cpp; sourceTree = "<group>"; }; | ||||
| 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPluginFormat.h; sourceTree = "<group>"; }; | 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPluginFormat.h; sourceTree = "<group>"; }; | ||||
| @@ -639,7 +647,6 @@ | |||||
| 842B63B709D8508F00255DC7 /* juce_FlacAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FlacAudioFormat.h; sourceTree = "<group>"; }; | 842B63B709D8508F00255DC7 /* juce_FlacAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FlacAudioFormat.h; sourceTree = "<group>"; }; | ||||
| 842B63B809D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_OggVorbisAudioFormat.cpp; sourceTree = "<group>"; }; | 842B63B809D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_OggVorbisAudioFormat.cpp; sourceTree = "<group>"; }; | ||||
| 842B63B909D8508F00255DC7 /* juce_OggVorbisAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_OggVorbisAudioFormat.h; sourceTree = "<group>"; }; | 842B63B909D8508F00255DC7 /* juce_OggVorbisAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_OggVorbisAudioFormat.h; sourceTree = "<group>"; }; | ||||
| 842B64EA09D87B7900255DC7 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = juce.xcconfig; sourceTree = "<group>"; }; | |||||
| 842D3D0D0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MenuBarModel.cpp; sourceTree = "<group>"; }; | 842D3D0D0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MenuBarModel.cpp; sourceTree = "<group>"; }; | ||||
| 842F9D570A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ButtonPropertyComponent.cpp; sourceTree = "<group>"; }; | 842F9D570A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ButtonPropertyComponent.cpp; sourceTree = "<group>"; }; | ||||
| 842F9D580A19C9AF00B1358D /* juce_ButtonPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ButtonPropertyComponent.h; sourceTree = "<group>"; }; | 842F9D580A19C9AF00B1358D /* juce_ButtonPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ButtonPropertyComponent.h; sourceTree = "<group>"; }; | ||||
| @@ -655,20 +662,21 @@ | |||||
| 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TextPropertyComponent.h; sourceTree = "<group>"; }; | 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TextPropertyComponent.h; sourceTree = "<group>"; }; | ||||
| 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PositionedRectangle.cpp; sourceTree = "<group>"; }; | 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PositionedRectangle.cpp; sourceTree = "<group>"; }; | ||||
| 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PositionedRectangle.h; sourceTree = "<group>"; }; | 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PositionedRectangle.h; sourceTree = "<group>"; }; | ||||
| 8435D90C0E9406D2008FBD1C /* juce_mac_Strings.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Strings.mm; sourceTree = "<group>"; }; | |||||
| 8435D9640E940A3E008FBD1C /* juce_mac_MiscUtilities.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MiscUtilities.mm; sourceTree = "<group>"; }; | |||||
| 8435DA410E95527D008FBD1C /* juce_mac_Debugging.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Debugging.mm; sourceTree = "<group>"; }; | |||||
| 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentMovementWatcher.cpp; sourceTree = "<group>"; }; | 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentMovementWatcher.cpp; sourceTree = "<group>"; }; | ||||
| 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentMovementWatcher.h; sourceTree = "<group>"; }; | 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentMovementWatcher.h; sourceTree = "<group>"; }; | ||||
| 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_SliderListener.h; sourceTree = "<group>"; }; | 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_SliderListener.h; sourceTree = "<group>"; }; | ||||
| 8456EC6508A2A6C80087C412 /* juce_Config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Config.h; path = ../../juce_Config.h; sourceTree = SOURCE_ROOT; }; | 8456EC6508A2A6C80087C412 /* juce_Config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Config.h; path = ../../juce_Config.h; sourceTree = SOURCE_ROOT; }; | ||||
| 8456EC6908A2A6F00087C412 /* JUCE changelist.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "JUCE changelist.txt"; path = "../../docs/JUCE changelist.txt"; sourceTree = SOURCE_ROOT; }; | 8456EC6908A2A6F00087C412 /* JUCE changelist.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "JUCE changelist.txt"; path = "../../docs/JUCE changelist.txt"; sourceTree = SOURCE_ROOT; }; | ||||
| 8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_NSViewComponent.h; sourceTree = "<group>"; }; | |||||
| 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_QuickTimeAudioFormat.cpp; sourceTree = "<group>"; }; | 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_QuickTimeAudioFormat.cpp; sourceTree = "<group>"; }; | ||||
| 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_QuickTimeAudioFormat.h; sourceTree = "<group>"; }; | 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_QuickTimeAudioFormat.h; sourceTree = "<group>"; }; | ||||
| 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnection.cpp; sourceTree = "<group>"; }; | 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnection.cpp; sourceTree = "<group>"; }; | ||||
| 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnection.h; sourceTree = "<group>"; }; | 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnection.h; sourceTree = "<group>"; }; | ||||
| 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnectionServer.cpp; sourceTree = "<group>"; }; | 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnectionServer.cpp; sourceTree = "<group>"; }; | ||||
| 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnectionServer.h; sourceTree = "<group>"; }; | 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnectionServer.h; sourceTree = "<group>"; }; | ||||
| 8463D31F0E1FC25A003B46B2 /* juce_mac_Fonts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Fonts.mm; sourceTree = "<group>"; }; | |||||
| 8463D3200E1FC25A003B46B2 /* juce_mac_Messaging.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Messaging.mm; sourceTree = "<group>"; }; | |||||
| 8463D3210E1FC25A003B46B2 /* juce_mac_Windowing.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Windowing.mm; sourceTree = "<group>"; }; | |||||
| 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiBuffer.cpp; path = midi/juce_MidiBuffer.cpp; sourceTree = "<group>"; }; | 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiBuffer.cpp; path = midi/juce_MidiBuffer.cpp; sourceTree = "<group>"; }; | ||||
| 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiBuffer.h; path = midi/juce_MidiBuffer.h; sourceTree = "<group>"; }; | 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiBuffer.h; path = midi/juce_MidiBuffer.h; sourceTree = "<group>"; }; | ||||
| 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiFile.cpp; path = midi/juce_MidiFile.cpp; sourceTree = "<group>"; }; | 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiFile.cpp; path = midi/juce_MidiFile.cpp; sourceTree = "<group>"; }; | ||||
| @@ -693,12 +701,10 @@ | |||||
| 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_RectanglePlacement.h; sourceTree = "<group>"; }; | 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_RectanglePlacement.h; sourceTree = "<group>"; }; | ||||
| 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_SVGParser.cpp; sourceTree = "<group>"; }; | 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_SVGParser.cpp; sourceTree = "<group>"; }; | ||||
| 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioCDBurner.h; sourceTree = "<group>"; }; | 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioCDBurner.h; sourceTree = "<group>"; }; | ||||
| 847D06460DD88D1100DF6A61 /* juce_mac_Network.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Network.mm; sourceTree = "<group>"; }; | |||||
| 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsDisplayComponent.cpp; path = filebrowser/juce_DirectoryContentsDisplayComponent.cpp; sourceTree = "<group>"; }; | 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsDisplayComponent.cpp; path = filebrowser/juce_DirectoryContentsDisplayComponent.cpp; sourceTree = "<group>"; }; | ||||
| 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsDisplayComponent.h; path = filebrowser/juce_DirectoryContentsDisplayComponent.h; sourceTree = "<group>"; }; | 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsDisplayComponent.h; path = filebrowser/juce_DirectoryContentsDisplayComponent.h; sourceTree = "<group>"; }; | ||||
| 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileTreeComponent.cpp; path = filebrowser/juce_FileTreeComponent.cpp; sourceTree = "<group>"; }; | 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileTreeComponent.cpp; path = filebrowser/juce_FileTreeComponent.cpp; sourceTree = "<group>"; }; | ||||
| 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileTreeComponent.h; path = filebrowser/juce_FileTreeComponent.h; sourceTree = "<group>"; }; | 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileTreeComponent.h; path = filebrowser/juce_FileTreeComponent.h; sourceTree = "<group>"; }; | ||||
| 848A560A0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_WebBrowserComponent.mm; sourceTree = "<group>"; }; | |||||
| 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_WebBrowserComponent.h; sourceTree = "<group>"; }; | 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_WebBrowserComponent.h; sourceTree = "<group>"; }; | ||||
| 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioThumbnail.cpp; sourceTree = "<group>"; }; | 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioThumbnail.cpp; sourceTree = "<group>"; }; | ||||
| 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_AudioThumbnail.h; sourceTree = "<group>"; }; | 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_AudioThumbnail.h; sourceTree = "<group>"; }; | ||||
| @@ -710,11 +716,6 @@ | |||||
| 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODevice.cpp; sourceTree = "<group>"; }; | 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODevice.cpp; sourceTree = "<group>"; }; | ||||
| 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODeviceType.cpp; sourceTree = "<group>"; }; | 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODeviceType.cpp; sourceTree = "<group>"; }; | ||||
| 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioIODeviceType.h; sourceTree = "<group>"; }; | 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioIODeviceType.h; sourceTree = "<group>"; }; | ||||
| 84A06BE209CADB06006A43BD /* juce_mac_NamedPipe.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_NamedPipe.cpp; sourceTree = "<group>"; }; | |||||
| 84A4881E08A22E2400752A2B /* juce_mac_CoreAudio.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_CoreAudio.cpp; path = platform_specific_code/juce_mac_CoreAudio.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84A4881F08A22E2400752A2B /* juce_mac_CoreMidi.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_CoreMidi.cpp; path = platform_specific_code/juce_mac_CoreMidi.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84A4882108A22E2400752A2B /* juce_mac_Files.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_Files.cpp; path = platform_specific_code/juce_mac_Files.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84A4882608A22E2400752A2B /* juce_mac_Threads.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_Threads.cpp; path = platform_specific_code/juce_mac_Threads.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84A4883508A22E4900752A2B /* juce_Application.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Application.cpp; path = ../../src/juce_appframework/application/juce_Application.cpp; sourceTree = SOURCE_ROOT; }; | 84A4883508A22E4900752A2B /* juce_Application.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Application.cpp; path = ../../src/juce_appframework/application/juce_Application.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84A4883608A22E4900752A2B /* juce_Application.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Application.h; path = ../../src/juce_appframework/application/juce_Application.h; sourceTree = SOURCE_ROOT; }; | 84A4883608A22E4900752A2B /* juce_Application.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Application.h; path = ../../src/juce_appframework/application/juce_Application.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DeletedAtShutdown.cpp; path = ../../src/juce_appframework/application/juce_DeletedAtShutdown.cpp; sourceTree = SOURCE_ROOT; }; | 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DeletedAtShutdown.cpp; path = ../../src/juce_appframework/application/juce_DeletedAtShutdown.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| @@ -866,7 +867,6 @@ | |||||
| 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.h; sourceTree = SOURCE_ROOT; }; | 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PreferencesPanel.cpp; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp; sourceTree = SOURCE_ROOT; }; | 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PreferencesPanel.cpp; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PreferencesPanel.h; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.h; sourceTree = SOURCE_ROOT; }; | 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PreferencesPanel.h; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84A488EC08A22E4900752A2B /* juce_QuickTimeMovieComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_QuickTimeMovieComponent.cpp; path = ../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeMovieComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h; sourceTree = SOURCE_ROOT; }; | 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeMovieComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AlertWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp; sourceTree = SOURCE_ROOT; }; | 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AlertWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84A488F008A22E4900752A2B /* juce_AlertWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AlertWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h; sourceTree = SOURCE_ROOT; }; | 84A488F008A22E4900752A2B /* juce_AlertWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AlertWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| @@ -1061,19 +1061,40 @@ | |||||
| 84A48A2608A22E4A00752A2B /* juce_TimeSliceThread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TimeSliceThread.h; path = ../../src/juce_core/threads/juce_TimeSliceThread.h; sourceTree = SOURCE_ROOT; }; | 84A48A2608A22E4A00752A2B /* juce_TimeSliceThread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TimeSliceThread.h; path = ../../src/juce_core/threads/juce_TimeSliceThread.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84A48A2708A22E4A00752A2B /* juce_WaitableEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_WaitableEvent.h; path = ../../src/juce_core/threads/juce_WaitableEvent.h; sourceTree = SOURCE_ROOT; }; | 84A48A2708A22E4A00752A2B /* juce_WaitableEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_WaitableEvent.h; path = ../../src/juce_core/threads/juce_WaitableEvent.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84BC4E210C8DD38C00FA249B /* juce_AudioPlayHead.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPlayHead.h; sourceTree = "<group>"; }; | 84BC4E210C8DD38C00FA249B /* juce_AudioPlayHead.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPlayHead.h; sourceTree = "<group>"; }; | ||||
| 84BC4E220C8DD38C00FA249B /* juce_AudioProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessor.cpp; sourceTree = "<group>"; }; | |||||
| 84BC4E220C8DD38C00FA249B /* juce_AudioProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 2; path = juce_AudioProcessor.cpp; sourceTree = "<group>"; }; | |||||
| 84BC4E230C8DD38C00FA249B /* juce_AudioProcessor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessor.h; sourceTree = "<group>"; }; | 84BC4E230C8DD38C00FA249B /* juce_AudioProcessor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessor.h; sourceTree = "<group>"; }; | ||||
| 84BC4E240C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessorEditor.cpp; sourceTree = "<group>"; }; | 84BC4E240C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessorEditor.cpp; sourceTree = "<group>"; }; | ||||
| 84BC4E250C8DD38C00FA249B /* juce_AudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorEditor.h; sourceTree = "<group>"; }; | 84BC4E250C8DD38C00FA249B /* juce_AudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorEditor.h; sourceTree = "<group>"; }; | ||||
| 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorListener.h; sourceTree = "<group>"; }; | 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorListener.h; sourceTree = "<group>"; }; | ||||
| 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_GenericAudioProcessorEditor.cpp; sourceTree = "<group>"; }; | 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_GenericAudioProcessorEditor.cpp; sourceTree = "<group>"; }; | ||||
| 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_GenericAudioProcessorEditor.h; sourceTree = "<group>"; }; | 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_GenericAudioProcessorEditor.h; sourceTree = "<group>"; }; | ||||
| 84BE9E1B0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_SystemStats.mm; sourceTree = "<group>"; }; | |||||
| 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IIRFilterAudioSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp; sourceTree = SOURCE_ROOT; }; | 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IIRFilterAudioSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilterAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h; sourceTree = SOURCE_ROOT; }; | 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilterAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84CE8A400DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_AudioCDBurner.mm; sourceTree = "<group>"; }; | |||||
| 84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_VSTPluginFormat.mm; sourceTree = "<group>"; }; | |||||
| 84CA4AFA0E9BF9EC004CCC0E /* juce_VSTPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_VSTPluginFormat.cpp; sourceTree = "<group>"; }; | |||||
| 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PropertiesFile.cpp; sourceTree = "<group>"; }; | 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PropertiesFile.cpp; sourceTree = "<group>"; }; | ||||
| 84D296BC09B763190026C535 /* juce_PropertiesFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PropertiesFile.h; sourceTree = "<group>"; }; | 84D296BC09B763190026C535 /* juce_PropertiesFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PropertiesFile.h; sourceTree = "<group>"; }; | ||||
| 84E024DB0E94028C003E41AF /* juce_mac_AppleRemote.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_AppleRemote.mm; sourceTree = "<group>"; }; | |||||
| 84E024DC0E94028C003E41AF /* juce_mac_AudioCDBurner.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_AudioCDBurner.mm; sourceTree = "<group>"; }; | |||||
| 84E024DD0E94028C003E41AF /* juce_mac_CoreAudio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_CoreAudio.cpp; sourceTree = "<group>"; }; | |||||
| 84E024DE0E94028C003E41AF /* juce_mac_CoreMidi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_CoreMidi.cpp; sourceTree = "<group>"; }; | |||||
| 84E024DF0E94028C003E41AF /* juce_mac_FileChooser.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_FileChooser.mm; sourceTree = "<group>"; }; | |||||
| 84E024E00E94028C003E41AF /* juce_mac_Files.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Files.mm; sourceTree = "<group>"; }; | |||||
| 84E024E10E94028C003E41AF /* juce_mac_Fonts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Fonts.mm; sourceTree = "<group>"; }; | |||||
| 84E024E20E94028C003E41AF /* juce_mac_MainMenu.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MainMenu.mm; sourceTree = "<group>"; }; | |||||
| 84E024E30E94028C003E41AF /* juce_mac_MessageManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MessageManager.mm; sourceTree = "<group>"; }; | |||||
| 84E024E40E94028C003E41AF /* juce_mac_MouseCursor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MouseCursor.mm; sourceTree = "<group>"; }; | |||||
| 84E024E50E94028C003E41AF /* juce_mac_NamedPipe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_NamedPipe.cpp; sourceTree = "<group>"; }; | |||||
| 84E024E60E94028C003E41AF /* juce_mac_NativeCode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_NativeCode.mm; sourceTree = "<group>"; }; | |||||
| 84E024E80E94028C003E41AF /* juce_mac_Network.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Network.mm; sourceTree = "<group>"; }; | |||||
| 84E024E90E94028C003E41AF /* juce_mac_NSViewComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_NSViewComponent.mm; sourceTree = "<group>"; }; | |||||
| 84E024EA0E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_NSViewComponentPeer.mm; sourceTree = "<group>"; }; | |||||
| 84E024EB0E94028C003E41AF /* juce_mac_OpenGLComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_OpenGLComponent.mm; sourceTree = "<group>"; }; | |||||
| 84E024EC0E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_QuickTimeMovieComponent.mm; sourceTree = "<group>"; }; | |||||
| 84E024ED0E94028C003E41AF /* juce_mac_SystemStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_SystemStats.mm; sourceTree = "<group>"; }; | |||||
| 84E024EE0E94028C003E41AF /* juce_mac_Threads.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Threads.mm; sourceTree = "<group>"; }; | |||||
| 84E024EF0E94028C003E41AF /* juce_mac_WebBrowserComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_WebBrowserComponent.mm; sourceTree = "<group>"; }; | |||||
| 84E024F00E94028C003E41AF /* juce_posix_SharedCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_posix_SharedCode.h; sourceTree = "<group>"; }; | |||||
| 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioFormatManager.cpp; sourceTree = "<group>"; }; | 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioFormatManager.cpp; sourceTree = "<group>"; }; | ||||
| 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioFormatManager.h; sourceTree = "<group>"; }; | 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioFormatManager.h; sourceTree = "<group>"; }; | ||||
| 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiKeyboardComponent.cpp; sourceTree = "<group>"; }; | 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiKeyboardComponent.cpp; sourceTree = "<group>"; }; | ||||
| @@ -1107,10 +1128,8 @@ | |||||
| 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_DocumentWindow.cpp; sourceTree = "<group>"; }; | 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_DocumentWindow.cpp; sourceTree = "<group>"; }; | ||||
| 84F593AD09855679008153BA /* juce_DocumentWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DocumentWindow.h; sourceTree = "<group>"; }; | 84F593AD09855679008153BA /* juce_DocumentWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DocumentWindow.h; sourceTree = "<group>"; }; | ||||
| 84F593B009855693008153BA /* juce_LassoComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LassoComponent.h; sourceTree = "<group>"; }; | 84F593B009855693008153BA /* juce_LassoComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LassoComponent.h; sourceTree = "<group>"; }; | ||||
| 84F596FF0E23DDBB00E92E85 /* juce_mac_NativeHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_mac_NativeHeaders.h; sourceTree = "<group>"; }; | |||||
| 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ChannelRemappingAudioSource.cpp; sourceTree = "<group>"; }; | 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ChannelRemappingAudioSource.cpp; sourceTree = "<group>"; }; | ||||
| 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ChannelRemappingAudioSource.h; sourceTree = "<group>"; }; | 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ChannelRemappingAudioSource.h; sourceTree = "<group>"; }; | ||||
| 84F703220E1E56FB00EB338A /* juce_mac_FileChooser.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_FileChooser.mm; sourceTree = "<group>"; }; | |||||
| 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToolbarButton.cpp; sourceTree = "<group>"; }; | 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToolbarButton.cpp; sourceTree = "<group>"; }; | ||||
| 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToolbarButton.h; sourceTree = "<group>"; }; | 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToolbarButton.h; sourceTree = "<group>"; }; | ||||
| 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Toolbar.cpp; sourceTree = "<group>"; }; | 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Toolbar.cpp; sourceTree = "<group>"; }; | ||||
| @@ -1124,6 +1143,7 @@ | |||||
| 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MultiTimer.h; sourceTree = "<group>"; }; | 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MultiTimer.h; sourceTree = "<group>"; }; | ||||
| 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentAnimator.cpp; sourceTree = "<group>"; }; | 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentAnimator.cpp; sourceTree = "<group>"; }; | ||||
| 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentAnimator.h; sourceTree = "<group>"; }; | 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentAnimator.h; sourceTree = "<group>"; }; | ||||
| 84F8B60C0EB5B9230020D98D /* juce_mac_NativeIncludes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_mac_NativeIncludes.h; sourceTree = "<group>"; }; | |||||
| 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentPeer.cpp; sourceTree = "<group>"; }; | 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentPeer.cpp; sourceTree = "<group>"; }; | ||||
| 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentPeer.h; sourceTree = "<group>"; }; | 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentPeer.h; sourceTree = "<group>"; }; | ||||
| 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBasedDocument.cpp; path = documents/juce_FileBasedDocument.cpp; sourceTree = "<group>"; }; | 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBasedDocument.cpp; path = documents/juce_FileBasedDocument.cpp; sourceTree = "<group>"; }; | ||||
| @@ -1157,7 +1177,7 @@ | |||||
| 84FED3C80CAA96DA00003997 /* juce_FileDragAndDropTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FileDragAndDropTarget.h; sourceTree = "<group>"; }; | 84FED3C80CAA96DA00003997 /* juce_FileDragAndDropTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FileDragAndDropTarget.h; sourceTree = "<group>"; }; | ||||
| 84FFAF290C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPathListComponent.cpp; path = filebrowser/juce_FileSearchPathListComponent.cpp; sourceTree = "<group>"; }; | 84FFAF290C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPathListComponent.cpp; path = filebrowser/juce_FileSearchPathListComponent.cpp; sourceTree = "<group>"; }; | ||||
| 84FFAF2A0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPathListComponent.h; path = filebrowser/juce_FileSearchPathListComponent.h; sourceTree = "<group>"; }; | 84FFAF2A0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPathListComponent.h; path = filebrowser/juce_FileSearchPathListComponent.h; sourceTree = "<group>"; }; | ||||
| D2AAC046055464E500DB518D /* libjuce.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjuce.a; sourceTree = BUILT_PRODUCTS_DIR; }; | |||||
| D2AAC046055464E500DB518D /* libjucedebug.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjucedebug.a; sourceTree = BUILT_PRODUCTS_DIR; }; | |||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||
| /* Begin PBXFrameworksBuildPhase section */ | /* Begin PBXFrameworksBuildPhase section */ | ||||
| @@ -1177,7 +1197,6 @@ | |||||
| 08FB7795FE84155DC02AAC07 /* Source */, | 08FB7795FE84155DC02AAC07 /* Source */, | ||||
| 8456EC6508A2A6C80087C412 /* juce_Config.h */, | 8456EC6508A2A6C80087C412 /* juce_Config.h */, | ||||
| 840F80BB092B399D005E7B4E /* juce.h */, | 840F80BB092B399D005E7B4E /* juce.h */, | ||||
| 842B64EA09D87B7900255DC7 /* juce.xcconfig */, | |||||
| 8456EC6908A2A6F00087C412 /* JUCE changelist.txt */, | 8456EC6908A2A6F00087C412 /* JUCE changelist.txt */, | ||||
| 1AB674ADFE9D54B511CA2CBB /* Products */, | 1AB674ADFE9D54B511CA2CBB /* Products */, | ||||
| ); | ); | ||||
| @@ -1197,7 +1216,7 @@ | |||||
| 1AB674ADFE9D54B511CA2CBB /* Products */ = { | 1AB674ADFE9D54B511CA2CBB /* Products */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| D2AAC046055464E500DB518D /* libjuce.a */, | |||||
| D2AAC046055464E500DB518D /* libjucedebug.a */, | |||||
| ); | ); | ||||
| name = Products; | name = Products; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| @@ -1254,11 +1273,12 @@ | |||||
| 841B22CD0D2E7FE3009D01AA /* formats */ = { | 841B22CD0D2E7FE3009D01AA /* formats */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp */, | |||||
| 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */, | |||||
| 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */, | 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */, | ||||
| 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */, | 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */, | ||||
| 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */, | 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */, | ||||
| 841B22D20D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp */, | |||||
| 84CA4AFA0E9BF9EC004CCC0E /* juce_VSTPluginFormat.cpp */, | |||||
| 84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */, | |||||
| 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */, | 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */, | ||||
| ); | ); | ||||
| path = formats; | path = formats; | ||||
| @@ -1320,21 +1340,31 @@ | |||||
| 84A4881C08A22E2400752A2B /* mac specific code */ = { | 84A4881C08A22E2400752A2B /* mac specific code */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84F596FF0E23DDBB00E92E85 /* juce_mac_NativeHeaders.h */, | |||||
| 8463D31F0E1FC25A003B46B2 /* juce_mac_Fonts.mm */, | |||||
| 8463D3200E1FC25A003B46B2 /* juce_mac_Messaging.mm */, | |||||
| 8463D3210E1FC25A003B46B2 /* juce_mac_Windowing.mm */, | |||||
| 84CE8A400DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm */, | |||||
| 84A4881E08A22E2400752A2B /* juce_mac_CoreAudio.cpp */, | |||||
| 84A4881F08A22E2400752A2B /* juce_mac_CoreMidi.cpp */, | |||||
| 84F703220E1E56FB00EB338A /* juce_mac_FileChooser.mm */, | |||||
| 84A4882108A22E2400752A2B /* juce_mac_Files.cpp */, | |||||
| 84022DFB0DAE4CB9004CF59A /* juce_mac_HTTPStream.h */, | |||||
| 84A06BE209CADB06006A43BD /* juce_mac_NamedPipe.cpp */, | |||||
| 847D06460DD88D1100DF6A61 /* juce_mac_Network.mm */, | |||||
| 84BE9E1B0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm */, | |||||
| 84A4882608A22E2400752A2B /* juce_mac_Threads.cpp */, | |||||
| 848A560A0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm */, | |||||
| 84E024DB0E94028C003E41AF /* juce_mac_AppleRemote.mm */, | |||||
| 84E024DC0E94028C003E41AF /* juce_mac_AudioCDBurner.mm */, | |||||
| 84E024DD0E94028C003E41AF /* juce_mac_CoreAudio.cpp */, | |||||
| 84E024DE0E94028C003E41AF /* juce_mac_CoreMidi.cpp */, | |||||
| 8435DA410E95527D008FBD1C /* juce_mac_Debugging.mm */, | |||||
| 84E024DF0E94028C003E41AF /* juce_mac_FileChooser.mm */, | |||||
| 84E024E00E94028C003E41AF /* juce_mac_Files.mm */, | |||||
| 84E024E10E94028C003E41AF /* juce_mac_Fonts.mm */, | |||||
| 84E024E20E94028C003E41AF /* juce_mac_MainMenu.mm */, | |||||
| 84E024E30E94028C003E41AF /* juce_mac_MessageManager.mm */, | |||||
| 8435D9640E940A3E008FBD1C /* juce_mac_MiscUtilities.mm */, | |||||
| 84E024E40E94028C003E41AF /* juce_mac_MouseCursor.mm */, | |||||
| 84E024E50E94028C003E41AF /* juce_mac_NamedPipe.cpp */, | |||||
| 84E024E60E94028C003E41AF /* juce_mac_NativeCode.mm */, | |||||
| 84F8B60C0EB5B9230020D98D /* juce_mac_NativeIncludes.h */, | |||||
| 84E024E80E94028C003E41AF /* juce_mac_Network.mm */, | |||||
| 84E024E90E94028C003E41AF /* juce_mac_NSViewComponent.mm */, | |||||
| 84E024EA0E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm */, | |||||
| 84E024EB0E94028C003E41AF /* juce_mac_OpenGLComponent.mm */, | |||||
| 84E024EC0E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm */, | |||||
| 8435D90C0E9406D2008FBD1C /* juce_mac_Strings.mm */, | |||||
| 84E024ED0E94028C003E41AF /* juce_mac_SystemStats.mm */, | |||||
| 84E024EE0E94028C003E41AF /* juce_mac_Threads.mm */, | |||||
| 84E024EF0E94028C003E41AF /* juce_mac_WebBrowserComponent.mm */, | |||||
| 84E024F00E94028C003E41AF /* juce_posix_SharedCode.h */, | |||||
| ); | ); | ||||
| name = "mac specific code"; | name = "mac specific code"; | ||||
| path = platform_specific_code; | path = platform_specific_code; | ||||
| @@ -1694,8 +1724,6 @@ | |||||
| 84A488DF08A22E4900752A2B /* special */ = { | 84A488DF08A22E4900752A2B /* special */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84F1F0630A36CF31008CCC5E /* juce_MagnifierComponent.cpp */, | |||||
| 84F1F0640A36CF31008CCC5E /* juce_MagnifierComponent.h */, | |||||
| 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */, | 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */, | ||||
| 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */, | 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */, | ||||
| 84A488E008A22E4900752A2B /* juce_BubbleComponent.cpp */, | 84A488E008A22E4900752A2B /* juce_BubbleComponent.cpp */, | ||||
| @@ -1706,13 +1734,15 @@ | |||||
| 84A488E508A22E4900752A2B /* juce_ColourSelector.h */, | 84A488E508A22E4900752A2B /* juce_ColourSelector.h */, | ||||
| 84A488E608A22E4900752A2B /* juce_DropShadower.cpp */, | 84A488E608A22E4900752A2B /* juce_DropShadower.cpp */, | ||||
| 84A488E708A22E4900752A2B /* juce_DropShadower.h */, | 84A488E708A22E4900752A2B /* juce_DropShadower.h */, | ||||
| 84F1F0630A36CF31008CCC5E /* juce_MagnifierComponent.cpp */, | |||||
| 84F1F0640A36CF31008CCC5E /* juce_MagnifierComponent.h */, | |||||
| 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */, | 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */, | ||||
| 84F1B8D909499F1400AD8EDE /* juce_MidiKeyboardComponent.h */, | 84F1B8D909499F1400AD8EDE /* juce_MidiKeyboardComponent.h */, | ||||
| 8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */, | |||||
| 84A488E808A22E4900752A2B /* juce_OpenGLComponent.cpp */, | 84A488E808A22E4900752A2B /* juce_OpenGLComponent.cpp */, | ||||
| 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */, | 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */, | ||||
| 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */, | 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */, | ||||
| 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */, | 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */, | ||||
| 84A488EC08A22E4900752A2B /* juce_QuickTimeMovieComponent.cpp */, | |||||
| 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */, | 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */, | ||||
| 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */, | 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */, | ||||
| ); | ); | ||||
| @@ -2510,11 +2540,12 @@ | |||||
| 8495BB950D806BDA001D9C0B /* juce_FileInputSource.h in Headers */, | 8495BB950D806BDA001D9C0B /* juce_FileInputSource.h in Headers */, | ||||
| 8495BB960D806BDA001D9C0B /* juce_InputSource.h in Headers */, | 8495BB960D806BDA001D9C0B /* juce_InputSource.h in Headers */, | ||||
| 84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */, | 84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */, | ||||
| 84022DFD0DAE4CB9004CF59A /* juce_mac_HTTPStream.h in Headers */, | |||||
| 848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */, | 848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */, | ||||
| 84688AFC0DED58820077FDEA /* juce_AudioProcessorGraph.h in Headers */, | 84688AFC0DED58820077FDEA /* juce_AudioProcessorGraph.h in Headers */, | ||||
| 84688AFE0DED58820077FDEA /* juce_AudioProcessorPlayer.h in Headers */, | 84688AFE0DED58820077FDEA /* juce_AudioProcessorPlayer.h in Headers */, | ||||
| 84F597000E23DDBB00E92E85 /* juce_mac_NativeHeaders.h in Headers */, | |||||
| 8457783E0E8947C8006D9E4E /* juce_NSViewComponent.h in Headers */, | |||||
| 84E025060E94028C003E41AF /* juce_posix_SharedCode.h in Headers */, | |||||
| 84F8B60D0EB5B9230020D98D /* juce_mac_NativeIncludes.h in Headers */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -2535,7 +2566,7 @@ | |||||
| ); | ); | ||||
| name = Juce; | name = Juce; | ||||
| productName = Juce; | productName = Juce; | ||||
| productReference = D2AAC046055464E500DB518D /* libjuce.a */; | |||||
| productReference = D2AAC046055464E500DB518D /* libjucedebug.a */; | |||||
| productType = "com.apple.product-type.library.static"; | productType = "com.apple.product-type.library.static"; | ||||
| }; | }; | ||||
| /* End PBXNativeTarget section */ | /* End PBXNativeTarget section */ | ||||
| @@ -2560,10 +2591,6 @@ | |||||
| isa = PBXSourcesBuildPhase; | isa = PBXSourcesBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 84A4882908A22E2400752A2B /* juce_mac_CoreAudio.cpp in Sources */, | |||||
| 84A4882A08A22E2400752A2B /* juce_mac_CoreMidi.cpp in Sources */, | |||||
| 84A4882C08A22E2400752A2B /* juce_mac_Files.cpp in Sources */, | |||||
| 84A4883108A22E2400752A2B /* juce_mac_Threads.cpp in Sources */, | |||||
| 84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */, | 84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */, | ||||
| 84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */, | 84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */, | ||||
| 84A48A2E08A22E4B00752A2B /* juce_AiffAudioFormat.cpp in Sources */, | 84A48A2E08A22E4B00752A2B /* juce_AiffAudioFormat.cpp in Sources */, | ||||
| @@ -2634,7 +2661,6 @@ | |||||
| 84A48ACB08A22E4B00752A2B /* juce_DropShadower.cpp in Sources */, | 84A48ACB08A22E4B00752A2B /* juce_DropShadower.cpp in Sources */, | ||||
| 84A48ACD08A22E4B00752A2B /* juce_OpenGLComponent.cpp in Sources */, | 84A48ACD08A22E4B00752A2B /* juce_OpenGLComponent.cpp in Sources */, | ||||
| 84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */, | 84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */, | ||||
| 84A48AD108A22E4B00752A2B /* juce_QuickTimeMovieComponent.cpp in Sources */, | |||||
| 84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */, | 84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */, | ||||
| 84A48AD508A22E4B00752A2B /* juce_DialogWindow.cpp in Sources */, | 84A48AD508A22E4B00752A2B /* juce_DialogWindow.cpp in Sources */, | ||||
| 84A48ADB08A22E4B00752A2B /* juce_ResizableWindow.cpp in Sources */, | 84A48ADB08A22E4B00752A2B /* juce_ResizableWindow.cpp in Sources */, | ||||
| @@ -2752,7 +2778,6 @@ | |||||
| 84F5598809CACFF700AC5000 /* juce_NamedPipe.cpp in Sources */, | 84F5598809CACFF700AC5000 /* juce_NamedPipe.cpp in Sources */, | ||||
| 84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */, | 84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */, | ||||
| 84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */, | 84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */, | ||||
| 84A06BE309CADB06006A43BD /* juce_mac_NamedPipe.cpp in Sources */, | |||||
| 846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */, | 846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */, | ||||
| 846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */, | 846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */, | ||||
| 842B63BA09D8508F00255DC7 /* juce_FlacAudioFormat.cpp in Sources */, | 842B63BA09D8508F00255DC7 /* juce_FlacAudioFormat.cpp in Sources */, | ||||
| @@ -2802,8 +2827,7 @@ | |||||
| 84BC4E2A0C8DD38C00FA249B /* juce_AudioProcessor.cpp in Sources */, | 84BC4E2A0C8DD38C00FA249B /* juce_AudioProcessor.cpp in Sources */, | ||||
| 84BC4E2C0C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp in Sources */, | 84BC4E2C0C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp in Sources */, | ||||
| 84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */, | 84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */, | ||||
| 841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp in Sources */, | |||||
| 841B22E60D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp in Sources */, | |||||
| 841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm in Sources */, | |||||
| 841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */, | 841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */, | ||||
| 841B22EA0D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp in Sources */, | 841B22EA0D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp in Sources */, | ||||
| 841B22EC0D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp in Sources */, | 841B22EC0D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp in Sources */, | ||||
| @@ -2815,16 +2839,32 @@ | |||||
| 8495BB8E0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp in Sources */, | 8495BB8E0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp in Sources */, | ||||
| 8495BB940D806BDA001D9C0B /* juce_FileInputSource.cpp in Sources */, | 8495BB940D806BDA001D9C0B /* juce_FileInputSource.cpp in Sources */, | ||||
| 84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */, | 84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */, | ||||
| 84CE8A410DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm in Sources */, | |||||
| 847D06470DD88D1100DF6A61 /* juce_mac_Network.mm in Sources */, | |||||
| 848A560B0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm in Sources */, | |||||
| 84BE9E1C0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm in Sources */, | |||||
| 84688AFB0DED58820077FDEA /* juce_AudioProcessorGraph.cpp in Sources */, | 84688AFB0DED58820077FDEA /* juce_AudioProcessorGraph.cpp in Sources */, | ||||
| 84688AFD0DED58820077FDEA /* juce_AudioProcessorPlayer.cpp in Sources */, | 84688AFD0DED58820077FDEA /* juce_AudioProcessorPlayer.cpp in Sources */, | ||||
| 84F703230E1E56FB00EB338A /* juce_mac_FileChooser.mm in Sources */, | |||||
| 8463D3220E1FC25A003B46B2 /* juce_mac_Fonts.mm in Sources */, | |||||
| 8463D3230E1FC25A003B46B2 /* juce_mac_Messaging.mm in Sources */, | |||||
| 8463D3240E1FC25A003B46B2 /* juce_mac_Windowing.mm in Sources */, | |||||
| 84E024F10E94028C003E41AF /* juce_mac_AppleRemote.mm in Sources */, | |||||
| 84E024F20E94028C003E41AF /* juce_mac_AudioCDBurner.mm in Sources */, | |||||
| 84E024F30E94028C003E41AF /* juce_mac_CoreAudio.cpp in Sources */, | |||||
| 84E024F40E94028C003E41AF /* juce_mac_CoreMidi.cpp in Sources */, | |||||
| 84E024F50E94028C003E41AF /* juce_mac_FileChooser.mm in Sources */, | |||||
| 84E024F60E94028C003E41AF /* juce_mac_Files.mm in Sources */, | |||||
| 84E024F70E94028C003E41AF /* juce_mac_Fonts.mm in Sources */, | |||||
| 84E024F80E94028C003E41AF /* juce_mac_MainMenu.mm in Sources */, | |||||
| 84E024F90E94028C003E41AF /* juce_mac_MessageManager.mm in Sources */, | |||||
| 84E024FA0E94028C003E41AF /* juce_mac_MouseCursor.mm in Sources */, | |||||
| 84E024FB0E94028C003E41AF /* juce_mac_NamedPipe.cpp in Sources */, | |||||
| 84E024FC0E94028C003E41AF /* juce_mac_NativeCode.mm in Sources */, | |||||
| 84E024FE0E94028C003E41AF /* juce_mac_Network.mm in Sources */, | |||||
| 84E024FF0E94028C003E41AF /* juce_mac_NSViewComponent.mm in Sources */, | |||||
| 84E025000E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm in Sources */, | |||||
| 84E025010E94028C003E41AF /* juce_mac_OpenGLComponent.mm in Sources */, | |||||
| 84E025020E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm in Sources */, | |||||
| 84E025030E94028C003E41AF /* juce_mac_SystemStats.mm in Sources */, | |||||
| 84E025040E94028C003E41AF /* juce_mac_Threads.mm in Sources */, | |||||
| 84E025050E94028C003E41AF /* juce_mac_WebBrowserComponent.mm in Sources */, | |||||
| 8435D90D0E9406D2008FBD1C /* juce_mac_Strings.mm in Sources */, | |||||
| 8435D9650E940A3E008FBD1C /* juce_mac_MiscUtilities.mm in Sources */, | |||||
| 8435DA420E95527D008FBD1C /* juce_mac_Debugging.mm in Sources */, | |||||
| 84CA4AF40E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm in Sources */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -2834,25 +2874,32 @@ | |||||
| 84A487F808A22DD800752A2B /* Debug */ = { | 84A487F808A22DD800752A2B /* Debug */ = { | ||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| buildSettings = { | buildSettings = { | ||||
| ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; | |||||
| ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; | |||||
| GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; | |||||
| MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; | |||||
| SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||||
| }; | }; | ||||
| name = Debug; | name = Debug; | ||||
| }; | }; | ||||
| 84A487F908A22DD800752A2B /* Release */ = { | 84A487F908A22DD800752A2B /* Release */ = { | ||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| buildSettings = { | buildSettings = { | ||||
| ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; | |||||
| ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; | |||||
| MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; | |||||
| SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||||
| STRIP_STYLE = "non-global"; | STRIP_STYLE = "non-global"; | ||||
| }; | }; | ||||
| name = Release; | name = Release; | ||||
| }; | }; | ||||
| 84A487FC08A22DD800752A2B /* Debug */ = { | 84A487FC08A22DD800752A2B /* Debug */ = { | ||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| baseConfigurationReference = 842B64EA09D87B7900255DC7 /* juce.xcconfig */; | |||||
| buildSettings = { | buildSettings = { | ||||
| CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; | ||||
| COPY_PHASE_STRIP = NO; | COPY_PHASE_STRIP = NO; | ||||
| DEPLOYMENT_LOCATION = YES; | DEPLOYMENT_LOCATION = YES; | ||||
| DSTROOT = ../../bin; | DSTROOT = ../../bin; | ||||
| GCC_MODEL_TUNING = G5; | |||||
| GCC_OPTIMIZATION_LEVEL = 0; | GCC_OPTIMIZATION_LEVEL = 0; | ||||
| GCC_PREPROCESSOR_DEFINITIONS = ( | GCC_PREPROCESSOR_DEFINITIONS = ( | ||||
| "_DEBUG=1", | "_DEBUG=1", | ||||
| @@ -2869,13 +2916,11 @@ | |||||
| }; | }; | ||||
| 84A487FD08A22DD800752A2B /* Release */ = { | 84A487FD08A22DD800752A2B /* Release */ = { | ||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| baseConfigurationReference = 842B64EA09D87B7900255DC7 /* juce.xcconfig */; | |||||
| buildSettings = { | buildSettings = { | ||||
| CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; | ||||
| DEPLOYMENT_LOCATION = YES; | DEPLOYMENT_LOCATION = YES; | ||||
| DSTROOT = ../../bin; | DSTROOT = ../../bin; | ||||
| GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | ||||
| GCC_MODEL_TUNING = G5; | |||||
| GCC_PREPROCESSOR_DEFINITIONS = ( | GCC_PREPROCESSOR_DEFINITIONS = ( | ||||
| "_NDEBUG=1", | "_NDEBUG=1", | ||||
| "NDEBUG=1", | "NDEBUG=1", | ||||
| @@ -1,14 +1,14 @@ | |||||
| ARCHS = i386 ppc | |||||
| // These settings let you build for compatibility with 10.3 onwards. | |||||
| MACOSX_DEPLOYMENT_TARGET_ppc = 10.3 | |||||
| MACOSX_DEPLOYMENT_TARGET = 10.4 | |||||
| // In XCode 3, this is the best SDK to use.. | |||||
| SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk | |||||
| // (if you're building in XCode 2.5, you might need to use this line | |||||
| // instead of the 10.5 line above..) | |||||
| //SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk | |||||
| ARCHS = i386 ppc | |||||
| // These settings let you build for compatibility with 10.3 onwards. | |||||
| MACOSX_DEPLOYMENT_TARGET_ppc = 10.3 | |||||
| MACOSX_DEPLOYMENT_TARGET = 10.4 | |||||
| // In XCode 3, this is the best SDK to use.. | |||||
| SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk | |||||
| // (if you're building in XCode 2.5, you might need to use this line | |||||
| // instead of the 10.5 line above..) | |||||
| //SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk | |||||
| @@ -0,0 +1,278 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| AppleRemoteDevice::AppleRemoteDevice() | |||||
| : device (0), | |||||
| queue (0), | |||||
| remoteId (0) | |||||
| { | |||||
| } | |||||
| AppleRemoteDevice::~AppleRemoteDevice() | |||||
| { | |||||
| stop(); | |||||
| } | |||||
| static io_object_t getAppleRemoteDevice() throw() | |||||
| { | |||||
| CFMutableDictionaryRef dict = IOServiceMatching ("AppleIRController"); | |||||
| io_iterator_t iter = 0; | |||||
| io_object_t iod = 0; | |||||
| if (IOServiceGetMatchingServices (kIOMasterPortDefault, dict, &iter) == kIOReturnSuccess | |||||
| && iter != 0) | |||||
| { | |||||
| iod = IOIteratorNext (iter); | |||||
| } | |||||
| IOObjectRelease (iter); | |||||
| return iod; | |||||
| } | |||||
| static bool createAppleRemoteInterface (io_object_t iod, void** device) throw() | |||||
| { | |||||
| jassert (*device == 0); | |||||
| io_name_t classname; | |||||
| if (IOObjectGetClass (iod, classname) == kIOReturnSuccess) | |||||
| { | |||||
| IOCFPlugInInterface** cfPlugInInterface = 0; | |||||
| SInt32 score = 0; | |||||
| if (IOCreatePlugInInterfaceForService (iod, | |||||
| kIOHIDDeviceUserClientTypeID, | |||||
| kIOCFPlugInInterfaceID, | |||||
| &cfPlugInInterface, | |||||
| &score) == kIOReturnSuccess) | |||||
| { | |||||
| HRESULT hr = (*cfPlugInInterface)->QueryInterface (cfPlugInInterface, | |||||
| CFUUIDGetUUIDBytes (kIOHIDDeviceInterfaceID), | |||||
| device); | |||||
| (void) hr; | |||||
| (*cfPlugInInterface)->Release (cfPlugInInterface); | |||||
| } | |||||
| } | |||||
| return *device != 0; | |||||
| } | |||||
| bool AppleRemoteDevice::start (const bool inExclusiveMode) throw() | |||||
| { | |||||
| if (queue != 0) | |||||
| return true; | |||||
| stop(); | |||||
| bool result = false; | |||||
| io_object_t iod = getAppleRemoteDevice(); | |||||
| if (iod != 0) | |||||
| { | |||||
| if (createAppleRemoteInterface (iod, &device) && open (inExclusiveMode)) | |||||
| result = true; | |||||
| else | |||||
| stop(); | |||||
| IOObjectRelease (iod); | |||||
| } | |||||
| return result; | |||||
| } | |||||
| void AppleRemoteDevice::stop() throw() | |||||
| { | |||||
| if (queue != 0) | |||||
| { | |||||
| (*(IOHIDQueueInterface**) queue)->stop ((IOHIDQueueInterface**) queue); | |||||
| (*(IOHIDQueueInterface**) queue)->dispose ((IOHIDQueueInterface**) queue); | |||||
| (*(IOHIDQueueInterface**) queue)->Release ((IOHIDQueueInterface**) queue); | |||||
| queue = 0; | |||||
| } | |||||
| if (device != 0) | |||||
| { | |||||
| (*(IOHIDDeviceInterface**) device)->close ((IOHIDDeviceInterface**) device); | |||||
| (*(IOHIDDeviceInterface**) device)->Release ((IOHIDDeviceInterface**) device); | |||||
| device = 0; | |||||
| } | |||||
| } | |||||
| bool AppleRemoteDevice::isActive() const throw() | |||||
| { | |||||
| return queue != 0; | |||||
| } | |||||
| static void appleRemoteQueueCallback (void* const target, const IOReturn result, void*, void*) | |||||
| { | |||||
| if (result == kIOReturnSuccess) | |||||
| ((AppleRemoteDevice*) target)->handleCallbackInternal(); | |||||
| } | |||||
| bool AppleRemoteDevice::open (const bool openInExclusiveMode) throw() | |||||
| { | |||||
| #if ! MACOS_10_2_OR_EARLIER | |||||
| Array <int> cookies; | |||||
| CFArrayRef elements; | |||||
| IOHIDDeviceInterface122** const device122 = (IOHIDDeviceInterface122**) device; | |||||
| if ((*device122)->copyMatchingElements (device122, 0, &elements) != kIOReturnSuccess) | |||||
| return false; | |||||
| for (int i = 0; i < CFArrayGetCount (elements); ++i) | |||||
| { | |||||
| CFDictionaryRef element = (CFDictionaryRef) CFArrayGetValueAtIndex (elements, i); | |||||
| // get the cookie | |||||
| CFTypeRef object = CFDictionaryGetValue (element, CFSTR (kIOHIDElementCookieKey)); | |||||
| if (object == 0 || CFGetTypeID (object) != CFNumberGetTypeID()) | |||||
| continue; | |||||
| long number; | |||||
| if (! CFNumberGetValue ((CFNumberRef) object, kCFNumberLongType, &number)) | |||||
| continue; | |||||
| cookies.add ((int) number); | |||||
| } | |||||
| CFRelease (elements); | |||||
| if ((*(IOHIDDeviceInterface**) device) | |||||
| ->open ((IOHIDDeviceInterface**) device, | |||||
| openInExclusiveMode ? kIOHIDOptionsTypeSeizeDevice | |||||
| : kIOHIDOptionsTypeNone) == KERN_SUCCESS) | |||||
| { | |||||
| queue = (*(IOHIDDeviceInterface**) device)->allocQueue ((IOHIDDeviceInterface**) device); | |||||
| if (queue != 0) | |||||
| { | |||||
| (*(IOHIDQueueInterface**) queue)->create ((IOHIDQueueInterface**) queue, 0, 12); | |||||
| for (int i = 0; i < cookies.size(); ++i) | |||||
| { | |||||
| IOHIDElementCookie cookie = (IOHIDElementCookie) cookies.getUnchecked(i); | |||||
| (*(IOHIDQueueInterface**) queue)->addElement ((IOHIDQueueInterface**) queue, cookie, 0); | |||||
| } | |||||
| CFRunLoopSourceRef eventSource; | |||||
| if ((*(IOHIDQueueInterface**) queue) | |||||
| ->createAsyncEventSource ((IOHIDQueueInterface**) queue, &eventSource) == KERN_SUCCESS) | |||||
| { | |||||
| if ((*(IOHIDQueueInterface**) queue)->setEventCallout ((IOHIDQueueInterface**) queue, | |||||
| appleRemoteQueueCallback, this, 0) == KERN_SUCCESS) | |||||
| { | |||||
| CFRunLoopAddSource (CFRunLoopGetCurrent(), eventSource, kCFRunLoopDefaultMode); | |||||
| (*(IOHIDQueueInterface**) queue)->start ((IOHIDQueueInterface**) queue); | |||||
| return true; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| #endif | |||||
| return false; | |||||
| } | |||||
| void AppleRemoteDevice::handleCallbackInternal() | |||||
| { | |||||
| #if ! MACOS_10_2_OR_EARLIER | |||||
| int totalValues = 0; | |||||
| AbsoluteTime nullTime = { 0, 0 }; | |||||
| char cookies [12]; | |||||
| int numCookies = 0; | |||||
| while (numCookies < numElementsInArray (cookies)) | |||||
| { | |||||
| IOHIDEventStruct e; | |||||
| if ((*(IOHIDQueueInterface**) queue)->getNextEvent ((IOHIDQueueInterface**) queue, &e, nullTime, 0) != kIOReturnSuccess) | |||||
| break; | |||||
| if ((int) e.elementCookie == 19) | |||||
| { | |||||
| remoteId = e.value; | |||||
| buttonPressed (switched, false); | |||||
| } | |||||
| else | |||||
| { | |||||
| totalValues += e.value; | |||||
| cookies [numCookies++] = (char) (pointer_sized_int) e.elementCookie; | |||||
| } | |||||
| } | |||||
| cookies [numCookies++] = 0; | |||||
| //DBG (String::toHexString ((uint8*) cookies, numCookies, 1) + " " + String (totalValues)); | |||||
| static const char buttonPatterns[] = | |||||
| { | |||||
| 0x1f, 0x14, 0x12, 0x1f, 0x14, 0x12, 0, | |||||
| 0x1f, 0x15, 0x12, 0x1f, 0x15, 0x12, 0, | |||||
| 0x1f, 0x1d, 0x1c, 0x12, 0, | |||||
| 0x1f, 0x1e, 0x1c, 0x12, 0, | |||||
| 0x1f, 0x16, 0x12, 0x1f, 0x16, 0x12, 0, | |||||
| 0x1f, 0x17, 0x12, 0x1f, 0x17, 0x12, 0, | |||||
| 0x1f, 0x12, 0x04, 0x02, 0, | |||||
| 0x1f, 0x12, 0x03, 0x02, 0, | |||||
| 0x1f, 0x12, 0x1f, 0x12, 0, | |||||
| 0x23, 0x1f, 0x12, 0x23, 0x1f, 0x12, 0, | |||||
| 19, 0 | |||||
| }; | |||||
| int buttonNum = (int) menuButton; | |||||
| int i = 0; | |||||
| while (i < numElementsInArray (buttonPatterns)) | |||||
| { | |||||
| if (strcmp (cookies, buttonPatterns + i) == 0) | |||||
| { | |||||
| buttonPressed ((ButtonType) buttonNum, totalValues > 0); | |||||
| break; | |||||
| } | |||||
| i += strlen (buttonPatterns + i) + 1; | |||||
| ++buttonNum; | |||||
| } | |||||
| #endif | |||||
| } | |||||
| #endif | |||||
| @@ -1,448 +1,432 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "juce_mac_NativeHeaders.h" | |||||
| #if JUCE_USE_CDBURNER | |||||
| #import <DiscRecording/DiscRecording.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h" | |||||
| #include "../../../src/juce_appframework/audio/audio_sources/juce_AudioSource.h" | |||||
| #include "../../../src/juce_appframework/audio/dsp/juce_AudioDataConverters.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| END_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| @interface OpenDiskDevice : NSObject | |||||
| { | |||||
| DRDevice* device; | |||||
| NSMutableArray* tracks; | |||||
| } | |||||
| - (OpenDiskDevice*) initWithDevice: (DRDevice*) device; | |||||
| - (void) dealloc; | |||||
| - (bool) isDiskPresent; | |||||
| - (int) getNumAvailableAudioBlocks; | |||||
| - (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) numSamples_; | |||||
| - (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error | |||||
| ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting; | |||||
| @end | |||||
| //============================================================================== | |||||
| @interface AudioTrackProducer : NSObject | |||||
| { | |||||
| JUCE_NAMESPACE::AudioSource* source; | |||||
| int readPosition, lengthInFrames; | |||||
| } | |||||
| - (AudioTrackProducer*) init: (int) lengthInFrames; | |||||
| - (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) lengthInSamples; | |||||
| - (void) dealloc; | |||||
| - (void) setupTrackProperties: (DRTrack*) track; | |||||
| - (void) cleanupTrackAfterBurn: (DRTrack*) track; | |||||
| - (BOOL) cleanupTrackAfterVerification:(DRTrack*)track; | |||||
| - (uint64_t) estimateLengthOfTrack:(DRTrack*)track; | |||||
| - (BOOL) prepareTrack:(DRTrack*)track forBurn:(DRBurn*)burn | |||||
| toMedia:(NSDictionary*)mediaInfo; | |||||
| - (BOOL) prepareTrackForVerification:(DRTrack*)track; | |||||
| - (uint32_t) produceDataForTrack:(DRTrack*)track intoBuffer:(char*)buffer | |||||
| length:(uint32_t)bufferLength atAddress:(uint64_t)address | |||||
| blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags; | |||||
| - (uint32_t) producePreGapForTrack:(DRTrack*)track | |||||
| intoBuffer:(char*)buffer length:(uint32_t)bufferLength | |||||
| atAddress:(uint64_t)address blockSize:(uint32_t)blockSize | |||||
| ioFlags:(uint32_t*)flags; | |||||
| - (BOOL) verifyDataForTrack:(DRTrack*)track inBuffer:(const char*)buffer | |||||
| length:(uint32_t)bufferLength atAddress:(uint64_t)address | |||||
| blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags; | |||||
| - (uint32_t) producePreGapForTrack:(DRTrack*)track | |||||
| intoBuffer:(char*)buffer length:(uint32_t)bufferLength | |||||
| atAddress:(uint64_t)address blockSize:(uint32_t)blockSize | |||||
| ioFlags:(uint32_t*)flags; | |||||
| @end | |||||
| //============================================================================== | |||||
| @implementation OpenDiskDevice | |||||
| - (OpenDiskDevice*) initWithDevice: (DRDevice*) device_ | |||||
| { | |||||
| [super init]; | |||||
| device = device_; | |||||
| tracks = [[NSMutableArray alloc] init]; | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| [tracks release]; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (bool) isDiskPresent | |||||
| { | |||||
| return [device isValid] | |||||
| && [[[device status] objectForKey: DRDeviceMediaStateKey] | |||||
| isEqualTo: DRDeviceMediaStateMediaPresent]; | |||||
| } | |||||
| - (int) getNumAvailableAudioBlocks | |||||
| { | |||||
| return [[[[device status] objectForKey: DRDeviceMediaInfoKey] | |||||
| objectForKey: DRDeviceMediaBlocksFreeKey] intValue]; | |||||
| } | |||||
| - (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) numSamples_ | |||||
| { | |||||
| AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_]; | |||||
| DRTrack* t = [[DRTrack alloc] initWithProducer: p]; | |||||
| [p setupTrackProperties: t]; | |||||
| [tracks addObject: t]; | |||||
| [t release]; | |||||
| [p release]; | |||||
| } | |||||
| - (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error | |||||
| ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting | |||||
| { | |||||
| DRBurn* burn = [DRBurn burnForDevice: device]; | |||||
| if (! [device acquireExclusiveAccess]) | |||||
| { | |||||
| *error = "Couldn't open or write to the CD device"; | |||||
| return; | |||||
| } | |||||
| [device acquireMediaReservation]; | |||||
| NSMutableDictionary* d = [[burn properties] mutableCopy]; | |||||
| [d autorelease]; | |||||
| [d setObject: [NSNumber numberWithBool: peformFakeBurnForTesting] forKey: DRBurnTestingKey]; | |||||
| [d setObject: [NSNumber numberWithBool: false] forKey: DRBurnVerifyDiscKey]; | |||||
| [d setObject: (shouldEject ? DRBurnCompletionActionEject : DRBurnCompletionActionMount) | |||||
| forKey: DRBurnCompletionActionKey]; | |||||
| [burn setProperties: d]; | |||||
| [burn writeLayout: tracks]; | |||||
| for (;;) | |||||
| { | |||||
| JUCE_NAMESPACE::Thread::sleep (300); | |||||
| float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue]; | |||||
| NSLog ([[burn status] description]); | |||||
| if (listener != 0 && listener->audioCDBurnProgress (progress)) | |||||
| { | |||||
| [burn abort]; | |||||
| *error = "User cancelled the write operation"; | |||||
| break; | |||||
| } | |||||
| if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateFailed]) | |||||
| { | |||||
| *error = "Write operation failed"; | |||||
| break; | |||||
| } | |||||
| else if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateDone]) | |||||
| { | |||||
| break; | |||||
| } | |||||
| NSString* err = (NSString*) [[[burn status] objectForKey: DRErrorStatusKey] | |||||
| objectForKey: DRErrorStatusErrorStringKey]; | |||||
| if ([err length] > 0) | |||||
| { | |||||
| *error = JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [err UTF8String]); | |||||
| break; | |||||
| } | |||||
| } | |||||
| [device releaseMediaReservation]; | |||||
| [device releaseExclusiveAccess]; | |||||
| } | |||||
| @end | |||||
| //============================================================================== | |||||
| @implementation AudioTrackProducer | |||||
| - (AudioTrackProducer*) init: (int) lengthInFrames_ | |||||
| { | |||||
| lengthInFrames = lengthInFrames_; | |||||
| readPosition = 0; | |||||
| return self; | |||||
| } | |||||
| - (void) setupTrackProperties: (DRTrack*) track | |||||
| { | |||||
| NSMutableDictionary* p = [[track properties] mutableCopy]; | |||||
| [p setObject:[DRMSF msfWithFrames: lengthInFrames] forKey: DRTrackLengthKey]; | |||||
| [p setObject:[NSNumber numberWithUnsignedShort:2352] forKey: DRBlockSizeKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRDataFormKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRBlockTypeKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRTrackModeKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRSessionFormatKey]; | |||||
| [track setProperties: p]; | |||||
| [p release]; | |||||
| } | |||||
| - (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) lengthInSamples | |||||
| { | |||||
| AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588]; | |||||
| if (s != nil) | |||||
| s->source = source_; | |||||
| return s; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| if (source != 0) | |||||
| { | |||||
| source->releaseResources(); | |||||
| delete source; | |||||
| } | |||||
| [super dealloc]; | |||||
| } | |||||
| - (void) cleanupTrackAfterBurn: (DRTrack*) track | |||||
| { | |||||
| } | |||||
| - (BOOL) cleanupTrackAfterVerification:(DRTrack*)track | |||||
| { | |||||
| return true; | |||||
| } | |||||
| - (uint64_t) estimateLengthOfTrack:(DRTrack*)track | |||||
| { | |||||
| return lengthInFrames; | |||||
| } | |||||
| - (BOOL) prepareTrack:(DRTrack*)track forBurn:(DRBurn*)burn | |||||
| toMedia:(NSDictionary*)mediaInfo | |||||
| { | |||||
| if (source != 0) | |||||
| source->prepareToPlay (44100 / 75, 44100); | |||||
| readPosition = 0; | |||||
| return true; | |||||
| } | |||||
| - (BOOL) prepareTrackForVerification:(DRTrack*)track | |||||
| { | |||||
| if (source != 0) | |||||
| source->prepareToPlay (44100 / 75, 44100); | |||||
| return true; | |||||
| } | |||||
| - (uint32_t) produceDataForTrack:(DRTrack*)track intoBuffer:(char*)buffer | |||||
| length:(uint32_t)bufferLength atAddress:(uint64_t)address | |||||
| blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags | |||||
| { | |||||
| if (source != 0) | |||||
| { | |||||
| const int numSamples = JUCE_NAMESPACE::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition); | |||||
| if (numSamples > 0) | |||||
| { | |||||
| JUCE_NAMESPACE::AudioSampleBuffer tempBuffer (2, numSamples); | |||||
| JUCE_NAMESPACE::AudioSourceChannelInfo info; | |||||
| info.buffer = &tempBuffer; | |||||
| info.startSample = 0; | |||||
| info.numSamples = numSamples; | |||||
| source->getNextAudioBlock (info); | |||||
| JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0), | |||||
| buffer, numSamples, 4); | |||||
| JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1), | |||||
| buffer + 2, numSamples, 4); | |||||
| readPosition += numSamples; | |||||
| } | |||||
| return numSamples * 4; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| - (uint32_t) producePreGapForTrack:(DRTrack*)track | |||||
| intoBuffer:(char*)buffer length:(uint32_t)bufferLength | |||||
| atAddress:(uint64_t)address blockSize:(uint32_t)blockSize | |||||
| ioFlags:(uint32_t*)flags | |||||
| { | |||||
| zeromem (buffer, bufferLength); | |||||
| return bufferLength; | |||||
| } | |||||
| - (BOOL) verifyDataForTrack:(DRTrack*)track inBuffer:(const char*)buffer | |||||
| length:(uint32_t)bufferLength atAddress:(uint64_t)address | |||||
| blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags | |||||
| { | |||||
| return true; | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| AudioCDBurner::AudioCDBurner (const int deviceIndex) | |||||
| : internal (0) | |||||
| { | |||||
| const AutoPool pool; | |||||
| OpenDiskDevice* dev = [[OpenDiskDevice alloc] initWithDevice: [[DRDevice devices] objectAtIndex: deviceIndex]]; | |||||
| internal = (void*) dev; | |||||
| } | |||||
| AudioCDBurner::~AudioCDBurner() | |||||
| { | |||||
| const AutoPool pool; | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| if (dev != 0) | |||||
| [dev release]; | |||||
| } | |||||
| AudioCDBurner* AudioCDBurner::openDevice (const int deviceIndex) | |||||
| { | |||||
| const AutoPool pool; | |||||
| AudioCDBurner* b = new AudioCDBurner (deviceIndex); | |||||
| if (b->internal == 0) | |||||
| deleteAndZero (b); | |||||
| return b; | |||||
| } | |||||
| static NSArray* findDiskBurnerDevices() | |||||
| { | |||||
| NSMutableArray* results = [NSMutableArray array]; | |||||
| NSArray* devs = [DRDevice devices]; | |||||
| if (devs != 0) | |||||
| { | |||||
| int num = [devs count]; | |||||
| int i; | |||||
| for (i = 0; i < num; ++i) | |||||
| { | |||||
| NSDictionary* dic = [[devs objectAtIndex: i] info]; | |||||
| NSString* name = [dic valueForKey: DRDeviceProductNameKey]; | |||||
| if (name != nil) | |||||
| [results addObject: name]; | |||||
| } | |||||
| } | |||||
| return results; | |||||
| } | |||||
| const StringArray AudioCDBurner::findAvailableDevices() | |||||
| { | |||||
| const AutoPool pool; | |||||
| NSArray* names = findDiskBurnerDevices(); | |||||
| StringArray s; | |||||
| for (int i = 0; i < [names count]; ++i) | |||||
| s.add (String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [[names objectAtIndex: i] UTF8String])); | |||||
| return s; | |||||
| } | |||||
| bool AudioCDBurner::isDiskPresent() const | |||||
| { | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| return dev != 0 && [dev isDiskPresent]; | |||||
| } | |||||
| int AudioCDBurner::getNumAvailableAudioBlocks() const | |||||
| { | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| return [dev getNumAvailableAudioBlocks]; | |||||
| } | |||||
| bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamps) | |||||
| { | |||||
| const AutoPool pool; | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| if (dev != 0) | |||||
| { | |||||
| [dev addSourceTrack: source numSamples: numSamps]; | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| const String AudioCDBurner::burn (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener* listener, | |||||
| const bool ejectDiscAfterwards, | |||||
| const bool peformFakeBurnForTesting) | |||||
| { | |||||
| const AutoPool pool; | |||||
| JUCE_NAMESPACE::String error ("Couldn't open or write to the CD device"); | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| if (dev != 0) | |||||
| { | |||||
| error = JUCE_NAMESPACE::String::empty; | |||||
| [dev burn: listener | |||||
| errorString: &error | |||||
| ejectAfterwards: ejectDiscAfterwards | |||||
| isFake: peformFakeBurnForTesting]; | |||||
| } | |||||
| return error; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_USE_CDBURNER | |||||
| //============================================================================== | |||||
| END_JUCE_NAMESPACE | |||||
| @interface OpenDiskDevice : NSObject | |||||
| { | |||||
| DRDevice* device; | |||||
| NSMutableArray* tracks; | |||||
| } | |||||
| - (OpenDiskDevice*) initWithDevice: (DRDevice*) device; | |||||
| - (void) dealloc; | |||||
| - (bool) isDiskPresent; | |||||
| - (int) getNumAvailableAudioBlocks; | |||||
| - (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) numSamples_; | |||||
| - (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error | |||||
| ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting; | |||||
| @end | |||||
| //============================================================================== | |||||
| @interface AudioTrackProducer : NSObject | |||||
| { | |||||
| JUCE_NAMESPACE::AudioSource* source; | |||||
| int readPosition, lengthInFrames; | |||||
| } | |||||
| - (AudioTrackProducer*) init: (int) lengthInFrames; | |||||
| - (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) lengthInSamples; | |||||
| - (void) dealloc; | |||||
| - (void) setupTrackProperties: (DRTrack*) track; | |||||
| - (void) cleanupTrackAfterBurn: (DRTrack*) track; | |||||
| - (BOOL) cleanupTrackAfterVerification:(DRTrack*)track; | |||||
| - (uint64_t) estimateLengthOfTrack:(DRTrack*)track; | |||||
| - (BOOL) prepareTrack:(DRTrack*)track forBurn:(DRBurn*)burn | |||||
| toMedia:(NSDictionary*)mediaInfo; | |||||
| - (BOOL) prepareTrackForVerification:(DRTrack*)track; | |||||
| - (uint32_t) produceDataForTrack:(DRTrack*)track intoBuffer:(char*)buffer | |||||
| length:(uint32_t)bufferLength atAddress:(uint64_t)address | |||||
| blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags; | |||||
| - (uint32_t) producePreGapForTrack:(DRTrack*)track | |||||
| intoBuffer:(char*)buffer length:(uint32_t)bufferLength | |||||
| atAddress:(uint64_t)address blockSize:(uint32_t)blockSize | |||||
| ioFlags:(uint32_t*)flags; | |||||
| - (BOOL) verifyDataForTrack:(DRTrack*)track inBuffer:(const char*)buffer | |||||
| length:(uint32_t)bufferLength atAddress:(uint64_t)address | |||||
| blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags; | |||||
| - (uint32_t) producePreGapForTrack:(DRTrack*)track | |||||
| intoBuffer:(char*)buffer length:(uint32_t)bufferLength | |||||
| atAddress:(uint64_t)address blockSize:(uint32_t)blockSize | |||||
| ioFlags:(uint32_t*)flags; | |||||
| @end | |||||
| //============================================================================== | |||||
| @implementation OpenDiskDevice | |||||
| - (OpenDiskDevice*) initWithDevice: (DRDevice*) device_ | |||||
| { | |||||
| [super init]; | |||||
| device = device_; | |||||
| tracks = [[NSMutableArray alloc] init]; | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| [tracks release]; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (bool) isDiskPresent | |||||
| { | |||||
| return [device isValid] | |||||
| && [[[device status] objectForKey: DRDeviceMediaStateKey] | |||||
| isEqualTo: DRDeviceMediaStateMediaPresent]; | |||||
| } | |||||
| - (int) getNumAvailableAudioBlocks | |||||
| { | |||||
| return [[[[device status] objectForKey: DRDeviceMediaInfoKey] | |||||
| objectForKey: DRDeviceMediaBlocksFreeKey] intValue]; | |||||
| } | |||||
| - (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) numSamples_ | |||||
| { | |||||
| AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_]; | |||||
| DRTrack* t = [[DRTrack alloc] initWithProducer: p]; | |||||
| [p setupTrackProperties: t]; | |||||
| [tracks addObject: t]; | |||||
| [t release]; | |||||
| [p release]; | |||||
| } | |||||
| - (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error | |||||
| ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting | |||||
| { | |||||
| DRBurn* burn = [DRBurn burnForDevice: device]; | |||||
| if (! [device acquireExclusiveAccess]) | |||||
| { | |||||
| *error = "Couldn't open or write to the CD device"; | |||||
| return; | |||||
| } | |||||
| [device acquireMediaReservation]; | |||||
| NSMutableDictionary* d = [[burn properties] mutableCopy]; | |||||
| [d autorelease]; | |||||
| [d setObject: [NSNumber numberWithBool: peformFakeBurnForTesting] forKey: DRBurnTestingKey]; | |||||
| [d setObject: [NSNumber numberWithBool: false] forKey: DRBurnVerifyDiscKey]; | |||||
| [d setObject: (shouldEject ? DRBurnCompletionActionEject : DRBurnCompletionActionMount) | |||||
| forKey: DRBurnCompletionActionKey]; | |||||
| [burn setProperties: d]; | |||||
| [burn writeLayout: tracks]; | |||||
| for (;;) | |||||
| { | |||||
| JUCE_NAMESPACE::Thread::sleep (300); | |||||
| float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue]; | |||||
| NSLog ([[burn status] description]); | |||||
| if (listener != 0 && listener->audioCDBurnProgress (progress)) | |||||
| { | |||||
| [burn abort]; | |||||
| *error = "User cancelled the write operation"; | |||||
| break; | |||||
| } | |||||
| if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateFailed]) | |||||
| { | |||||
| *error = "Write operation failed"; | |||||
| break; | |||||
| } | |||||
| else if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateDone]) | |||||
| { | |||||
| break; | |||||
| } | |||||
| NSString* err = (NSString*) [[[burn status] objectForKey: DRErrorStatusKey] | |||||
| objectForKey: DRErrorStatusErrorStringKey]; | |||||
| if ([err length] > 0) | |||||
| { | |||||
| *error = JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [err UTF8String]); | |||||
| break; | |||||
| } | |||||
| } | |||||
| [device releaseMediaReservation]; | |||||
| [device releaseExclusiveAccess]; | |||||
| } | |||||
| @end | |||||
| //============================================================================== | |||||
| @implementation AudioTrackProducer | |||||
| - (AudioTrackProducer*) init: (int) lengthInFrames_ | |||||
| { | |||||
| lengthInFrames = lengthInFrames_; | |||||
| readPosition = 0; | |||||
| return self; | |||||
| } | |||||
| - (void) setupTrackProperties: (DRTrack*) track | |||||
| { | |||||
| NSMutableDictionary* p = [[track properties] mutableCopy]; | |||||
| [p setObject:[DRMSF msfWithFrames: lengthInFrames] forKey: DRTrackLengthKey]; | |||||
| [p setObject:[NSNumber numberWithUnsignedShort:2352] forKey: DRBlockSizeKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRDataFormKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRBlockTypeKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRTrackModeKey]; | |||||
| [p setObject:[NSNumber numberWithInt:0] forKey: DRSessionFormatKey]; | |||||
| [track setProperties: p]; | |||||
| [p release]; | |||||
| } | |||||
| - (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) lengthInSamples | |||||
| { | |||||
| AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588]; | |||||
| if (s != nil) | |||||
| s->source = source_; | |||||
| return s; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| if (source != 0) | |||||
| { | |||||
| source->releaseResources(); | |||||
| delete source; | |||||
| } | |||||
| [super dealloc]; | |||||
| } | |||||
| - (void) cleanupTrackAfterBurn: (DRTrack*) track | |||||
| { | |||||
| } | |||||
| - (BOOL) cleanupTrackAfterVerification: (DRTrack*) track | |||||
| { | |||||
| return true; | |||||
| } | |||||
| - (uint64_t) estimateLengthOfTrack: (DRTrack*) track | |||||
| { | |||||
| return lengthInFrames; | |||||
| } | |||||
| - (BOOL) prepareTrack: (DRTrack*) track forBurn: (DRBurn*) burn | |||||
| toMedia: (NSDictionary*) mediaInfo | |||||
| { | |||||
| if (source != 0) | |||||
| source->prepareToPlay (44100 / 75, 44100); | |||||
| readPosition = 0; | |||||
| return true; | |||||
| } | |||||
| - (BOOL) prepareTrackForVerification: (DRTrack*) track | |||||
| { | |||||
| if (source != 0) | |||||
| source->prepareToPlay (44100 / 75, 44100); | |||||
| return true; | |||||
| } | |||||
| - (uint32_t) produceDataForTrack: (DRTrack*) track intoBuffer: (char*) buffer | |||||
| length: (uint32_t) bufferLength atAddress: (uint64_t) address | |||||
| blockSize: (uint32_t) blockSize ioFlags: (uint32_t*) flags | |||||
| { | |||||
| if (source != 0) | |||||
| { | |||||
| const int numSamples = JUCE_NAMESPACE::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition); | |||||
| if (numSamples > 0) | |||||
| { | |||||
| JUCE_NAMESPACE::AudioSampleBuffer tempBuffer (2, numSamples); | |||||
| JUCE_NAMESPACE::AudioSourceChannelInfo info; | |||||
| info.buffer = &tempBuffer; | |||||
| info.startSample = 0; | |||||
| info.numSamples = numSamples; | |||||
| source->getNextAudioBlock (info); | |||||
| JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0), | |||||
| buffer, numSamples, 4); | |||||
| JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1), | |||||
| buffer + 2, numSamples, 4); | |||||
| readPosition += numSamples; | |||||
| } | |||||
| return numSamples * 4; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| - (uint32_t) producePreGapForTrack: (DRTrack*) track | |||||
| intoBuffer: (char*) buffer length: (uint32_t) bufferLength | |||||
| atAddress: (uint64_t) address blockSize: (uint32_t) blockSize | |||||
| ioFlags: (uint32_t*) flags | |||||
| { | |||||
| zeromem (buffer, bufferLength); | |||||
| return bufferLength; | |||||
| } | |||||
| - (BOOL) verifyDataForTrack: (DRTrack*) track inBuffer: (const char*) buffer | |||||
| length: (uint32_t) bufferLength atAddress: (uint64_t) address | |||||
| blockSize: (uint32_t) blockSize ioFlags: (uint32_t*) flags | |||||
| { | |||||
| return true; | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| AudioCDBurner::AudioCDBurner (const int deviceIndex) | |||||
| : internal (0) | |||||
| { | |||||
| OpenDiskDevice* dev = [[OpenDiskDevice alloc] initWithDevice: [[DRDevice devices] objectAtIndex: deviceIndex]]; | |||||
| internal = (void*) dev; | |||||
| } | |||||
| AudioCDBurner::~AudioCDBurner() | |||||
| { | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| if (dev != 0) | |||||
| [dev release]; | |||||
| } | |||||
| AudioCDBurner* AudioCDBurner::openDevice (const int deviceIndex) | |||||
| { | |||||
| AudioCDBurner* b = new AudioCDBurner (deviceIndex); | |||||
| if (b->internal == 0) | |||||
| deleteAndZero (b); | |||||
| return b; | |||||
| } | |||||
| static NSArray* findDiskBurnerDevices() | |||||
| { | |||||
| NSMutableArray* results = [NSMutableArray array]; | |||||
| NSArray* devs = [DRDevice devices]; | |||||
| if (devs != 0) | |||||
| { | |||||
| int num = [devs count]; | |||||
| int i; | |||||
| for (i = 0; i < num; ++i) | |||||
| { | |||||
| NSDictionary* dic = [[devs objectAtIndex: i] info]; | |||||
| NSString* name = [dic valueForKey: DRDeviceProductNameKey]; | |||||
| if (name != nil) | |||||
| [results addObject: name]; | |||||
| } | |||||
| } | |||||
| return results; | |||||
| } | |||||
| const StringArray AudioCDBurner::findAvailableDevices() | |||||
| { | |||||
| NSArray* names = findDiskBurnerDevices(); | |||||
| StringArray s; | |||||
| for (int i = 0; i < [names count]; ++i) | |||||
| s.add (String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [[names objectAtIndex: i] UTF8String])); | |||||
| return s; | |||||
| } | |||||
| bool AudioCDBurner::isDiskPresent() const | |||||
| { | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| return dev != 0 && [dev isDiskPresent]; | |||||
| } | |||||
| int AudioCDBurner::getNumAvailableAudioBlocks() const | |||||
| { | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| return [dev getNumAvailableAudioBlocks]; | |||||
| } | |||||
| bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamps) | |||||
| { | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| if (dev != 0) | |||||
| { | |||||
| [dev addSourceTrack: source numSamples: numSamps]; | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| const String AudioCDBurner::burn (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener* listener, | |||||
| const bool ejectDiscAfterwards, | |||||
| const bool peformFakeBurnForTesting) | |||||
| { | |||||
| String error ("Couldn't open or write to the CD device"); | |||||
| OpenDiskDevice* dev = (OpenDiskDevice*) internal; | |||||
| if (dev != 0) | |||||
| { | |||||
| error = String::empty; | |||||
| [dev burn: listener | |||||
| errorString: &error | |||||
| ejectAfterwards: ejectDiscAfterwards | |||||
| isFake: peformFakeBurnForTesting]; | |||||
| } | |||||
| return error; | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,74 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| void Logger::outputDebugString (const String& text) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSLog (juceStringToNS (text + T("\n"))); | |||||
| } | |||||
| void Logger::outputDebugPrintf (const tchar* format, ...) throw() | |||||
| { | |||||
| String text; | |||||
| va_list args; | |||||
| va_start (args, format); | |||||
| text.vprintf(format, args); | |||||
| outputDebugString (text); | |||||
| } | |||||
| bool JUCE_CALLTYPE juce_isRunningUnderDebugger() throw() | |||||
| { | |||||
| static char testResult = 0; | |||||
| if (testResult == 0) | |||||
| { | |||||
| struct kinfo_proc info; | |||||
| int m[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() }; | |||||
| size_t sz = sizeof (info); | |||||
| sysctl (m, 4, &info, &sz, 0, 0); | |||||
| testResult = ((info.kp_proc.p_flag & P_TRACED) != 0) ? 1 : -1; | |||||
| } | |||||
| return testResult > 0; | |||||
| } | |||||
| bool JUCE_CALLTYPE Process::isRunningUnderDebugger() throw() | |||||
| { | |||||
| return juce_isRunningUnderDebugger(); | |||||
| } | |||||
| #endif | |||||
| @@ -1,156 +1,150 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "juce_mac_NativeHeaders.h" | |||||
| #include <fnmatch.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h" | |||||
| END_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| @interface JuceFileChooserDelegate : NSObject | |||||
| { | |||||
| JUCE_NAMESPACE::StringArray* filters; | |||||
| } | |||||
| - (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_; | |||||
| - (void) dealloc; | |||||
| - (BOOL) panel: (id) sender shouldShowFilename: (NSString*) filename; | |||||
| @end | |||||
| @implementation JuceFileChooserDelegate | |||||
| - (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_ | |||||
| { | |||||
| [super init]; | |||||
| filters = filters_; | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| delete filters; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (BOOL) panel:(id) sender shouldShowFilename: (NSString*) filename | |||||
| { | |||||
| const JUCE_NAMESPACE::String fname (nsStringToJuce (filename)); | |||||
| for (int i = filters->size(); --i >= 0;) | |||||
| { | |||||
| const JUCE_NAMESPACE::String wildcard ((*filters)[i]); | |||||
| if (fnmatch (wildcard.toLowerCase().toUTF8(), | |||||
| fname.toLowerCase().toUTF8(), 0) == 0) | |||||
| return true; | |||||
| } | |||||
| return JUCE_NAMESPACE::File (fname).isDirectory(); | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| void FileChooser::showPlatformDialog (OwnedArray<File>& results, | |||||
| const String& title, | |||||
| const File& currentFileOrDirectory, | |||||
| const String& filter, | |||||
| bool selectsDirectory, | |||||
| bool isSaveDialogue, | |||||
| bool warnAboutOverwritingExistingFiles, | |||||
| bool selectMultipleFiles, | |||||
| FilePreviewComponent* extraInfoComponent) | |||||
| { | |||||
| const AutoPool pool; | |||||
| StringArray* filters = new StringArray(); | |||||
| filters->addTokens (filter.replaceCharacters (T(",:"), T(";;")), T(";"), 0); | |||||
| filters->trim(); | |||||
| filters->removeEmptyStrings(); | |||||
| JuceFileChooserDelegate* delegate = [[JuceFileChooserDelegate alloc] initWithFilters: filters]; | |||||
| [delegate autorelease]; | |||||
| NSSavePanel* panel = isSaveDialogue ? [NSSavePanel savePanel] | |||||
| : [NSOpenPanel openPanel]; | |||||
| [panel setTitle: juceStringToNS (title)]; | |||||
| if (! isSaveDialogue) | |||||
| { | |||||
| NSOpenPanel* openPanel = (NSOpenPanel*) panel; | |||||
| [openPanel setCanChooseDirectories: selectsDirectory]; | |||||
| [openPanel setCanChooseFiles: ! selectsDirectory]; | |||||
| [openPanel setAllowsMultipleSelection: selectMultipleFiles]; | |||||
| } | |||||
| [panel setDelegate: delegate]; | |||||
| String directory, filename; | |||||
| if (currentFileOrDirectory.isDirectory()) | |||||
| { | |||||
| directory = currentFileOrDirectory.getFullPathName(); | |||||
| } | |||||
| else | |||||
| { | |||||
| directory = currentFileOrDirectory.getParentDirectory().getFullPathName(); | |||||
| filename = currentFileOrDirectory.getFileName(); | |||||
| } | |||||
| if ([panel runModalForDirectory: juceStringToNS (directory) | |||||
| file: juceStringToNS (filename)] | |||||
| == NSOKButton) | |||||
| { | |||||
| if (isSaveDialogue) | |||||
| { | |||||
| results.add (new File (nsStringToJuce ([panel filename]))); | |||||
| } | |||||
| else | |||||
| { | |||||
| NSOpenPanel* openPanel = (NSOpenPanel*) panel; | |||||
| NSArray* urls = [openPanel filenames]; | |||||
| for (int i = 0; i < [urls count]; ++i) | |||||
| { | |||||
| NSString* f = [urls objectAtIndex: i]; | |||||
| results.add (new File (nsStringToJuce (f))); | |||||
| } | |||||
| } | |||||
| } | |||||
| [panel setDelegate: nil]; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| END_JUCE_NAMESPACE | |||||
| using namespace JUCE_NAMESPACE; | |||||
| @interface JuceFileChooserDelegate : NSObject | |||||
| { | |||||
| StringArray* filters; | |||||
| } | |||||
| - (JuceFileChooserDelegate*) initWithFilters: (StringArray*) filters_; | |||||
| - (void) dealloc; | |||||
| - (BOOL) panel: (id) sender shouldShowFilename: (NSString*) filename; | |||||
| @end | |||||
| @implementation JuceFileChooserDelegate | |||||
| - (JuceFileChooserDelegate*) initWithFilters: (StringArray*) filters_ | |||||
| { | |||||
| [super init]; | |||||
| filters = filters_; | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| delete filters; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (BOOL) panel: (id) sender shouldShowFilename: (NSString*) filename | |||||
| { | |||||
| const String fname (nsStringToJuce (filename)); | |||||
| for (int i = filters->size(); --i >= 0;) | |||||
| if (fname.matchesWildcard ((*filters)[i], true)) | |||||
| return true; | |||||
| return File (fname).isDirectory(); | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| void FileChooser::showPlatformDialog (OwnedArray<File>& results, | |||||
| const String& title, | |||||
| const File& currentFileOrDirectory, | |||||
| const String& filter, | |||||
| bool selectsDirectory, | |||||
| bool isSaveDialogue, | |||||
| bool warnAboutOverwritingExistingFiles, | |||||
| bool selectMultipleFiles, | |||||
| FilePreviewComponent* extraInfoComponent) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| StringArray* filters = new StringArray(); | |||||
| filters->addTokens (filter.replaceCharacters (T(",:"), T(";;")), T(";"), 0); | |||||
| filters->trim(); | |||||
| filters->removeEmptyStrings(); | |||||
| JuceFileChooserDelegate* delegate = [[JuceFileChooserDelegate alloc] initWithFilters: filters]; | |||||
| [delegate autorelease]; | |||||
| NSSavePanel* panel = isSaveDialogue ? [NSSavePanel savePanel] | |||||
| : [NSOpenPanel openPanel]; | |||||
| [panel setTitle: juceStringToNS (title)]; | |||||
| if (! isSaveDialogue) | |||||
| { | |||||
| NSOpenPanel* openPanel = (NSOpenPanel*) panel; | |||||
| [openPanel setCanChooseDirectories: selectsDirectory]; | |||||
| [openPanel setCanChooseFiles: ! selectsDirectory]; | |||||
| [openPanel setAllowsMultipleSelection: selectMultipleFiles]; | |||||
| } | |||||
| [panel setDelegate: delegate]; | |||||
| String directory, filename; | |||||
| if (currentFileOrDirectory.isDirectory()) | |||||
| { | |||||
| directory = currentFileOrDirectory.getFullPathName(); | |||||
| } | |||||
| else | |||||
| { | |||||
| directory = currentFileOrDirectory.getParentDirectory().getFullPathName(); | |||||
| filename = currentFileOrDirectory.getFileName(); | |||||
| } | |||||
| if ([panel runModalForDirectory: juceStringToNS (directory) | |||||
| file: juceStringToNS (filename)] | |||||
| == NSOKButton) | |||||
| { | |||||
| if (isSaveDialogue) | |||||
| { | |||||
| results.add (new File (nsStringToJuce ([panel filename]))); | |||||
| } | |||||
| else | |||||
| { | |||||
| NSOpenPanel* openPanel = (NSOpenPanel*) panel; | |||||
| NSArray* urls = [openPanel filenames]; | |||||
| for (int i = 0; i < [urls count]; ++i) | |||||
| { | |||||
| NSString* f = [urls objectAtIndex: i]; | |||||
| results.add (new File (nsStringToJuce (f))); | |||||
| } | |||||
| } | |||||
| } | |||||
| [panel setDelegate: nil]; | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,541 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| /* | |||||
| Note that a lot of methods that you'd expect to find in this file actually | |||||
| live in juce_posix_SharedCode.h! | |||||
| */ | |||||
| //============================================================================== | |||||
| static File executableFile; | |||||
| const unsigned int macTimeToUnixTimeDiff = 0x7c25be90; | |||||
| static uint64 utcDateTimeToUnixTime (const UTCDateTime& d) throw() | |||||
| { | |||||
| if (d.highSeconds == 0 && d.lowSeconds == 0 && d.fraction == 0) | |||||
| return 0; | |||||
| return (((((uint64) d.highSeconds) << 32) | (uint64) d.lowSeconds) * 1000) | |||||
| + ((d.fraction * 1000) >> 16) | |||||
| - 2082844800000ll; | |||||
| } | |||||
| static void unixTimeToUtcDateTime (uint64 t, UTCDateTime& d) throw() | |||||
| { | |||||
| if (t != 0) | |||||
| t += 2082844800000ll; | |||||
| d.highSeconds = (t / 1000) >> 32; | |||||
| d.lowSeconds = (t / 1000) & (uint64) 0xffffffff; | |||||
| d.fraction = ((t % 1000) << 16) / 1000; | |||||
| } | |||||
| void juce_getFileTimes (const String& fileName, | |||||
| int64& modificationTime, | |||||
| int64& accessTime, | |||||
| int64& creationTime) throw() | |||||
| { | |||||
| modificationTime = 0; | |||||
| accessTime = 0; | |||||
| creationTime = 0; | |||||
| FSRef fileRef; | |||||
| if (PlatformUtilities::makeFSRefFromPath (&fileRef, fileName)) | |||||
| { | |||||
| FSRefParam info; | |||||
| zerostruct (info); | |||||
| info.ref = &fileRef; | |||||
| info.whichInfo = kFSCatInfoAllDates; | |||||
| FSCatalogInfo catInfo; | |||||
| info.catInfo = &catInfo; | |||||
| if (PBGetCatalogInfoSync (&info) == noErr) | |||||
| { | |||||
| creationTime = utcDateTimeToUnixTime (catInfo.createDate); | |||||
| accessTime = utcDateTimeToUnixTime (catInfo.accessDate); | |||||
| modificationTime = utcDateTimeToUnixTime (catInfo.contentModDate); | |||||
| } | |||||
| } | |||||
| } | |||||
| bool juce_setFileTimes (const String& fileName, | |||||
| int64 modificationTime, | |||||
| int64 accessTime, | |||||
| int64 creationTime) throw() | |||||
| { | |||||
| FSRef fileRef; | |||||
| if (PlatformUtilities::makeFSRefFromPath (&fileRef, fileName)) | |||||
| { | |||||
| FSRefParam info; | |||||
| zerostruct (info); | |||||
| info.ref = &fileRef; | |||||
| info.whichInfo = kFSCatInfoAllDates; | |||||
| FSCatalogInfo catInfo; | |||||
| info.catInfo = &catInfo; | |||||
| if (PBGetCatalogInfoSync (&info) == noErr) | |||||
| { | |||||
| if (creationTime != 0) | |||||
| unixTimeToUtcDateTime (creationTime, catInfo.createDate); | |||||
| if (modificationTime != 0) | |||||
| unixTimeToUtcDateTime (modificationTime, catInfo.contentModDate); | |||||
| if (accessTime != 0) | |||||
| unixTimeToUtcDateTime (accessTime, catInfo.accessDate); | |||||
| return PBSetCatalogInfoSync (&info) == noErr; | |||||
| } | |||||
| } | |||||
| return false; | |||||
| } | |||||
| bool juce_setFileReadOnly (const String& fileName, bool isReadOnly) throw() | |||||
| { | |||||
| const char* const fileNameUTF8 = fileName.toUTF8(); | |||||
| struct stat info; | |||||
| const int res = stat (fileNameUTF8, &info); | |||||
| bool ok = false; | |||||
| if (res == 0) | |||||
| { | |||||
| info.st_mode &= 0777; // Just permissions | |||||
| if (isReadOnly) | |||||
| info.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH); | |||||
| else | |||||
| // Give everybody write permission? | |||||
| info.st_mode |= S_IWUSR | S_IWGRP | S_IWOTH; | |||||
| ok = chmod (fileNameUTF8, info.st_mode) == 0; | |||||
| } | |||||
| return ok; | |||||
| } | |||||
| bool juce_copyFile (const String& src, const String& dst) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSFileManager* fm = [NSFileManager defaultManager]; | |||||
| return [fm fileExistsAtPath: juceStringToNS (src)] | |||||
| && [fm copyPath: juceStringToNS (src) | |||||
| toPath: juceStringToNS (dst) | |||||
| handler: nil]; | |||||
| } | |||||
| const StringArray juce_getFileSystemRoots() throw() | |||||
| { | |||||
| StringArray s; | |||||
| s.add (T("/")); | |||||
| return s; | |||||
| } | |||||
| //============================================================================== | |||||
| static bool isFileOnDriveType (const File* const f, const char** types) throw() | |||||
| { | |||||
| struct statfs buf; | |||||
| if (doStatFS (f, buf)) | |||||
| { | |||||
| const String type (buf.f_fstypename); | |||||
| while (*types != 0) | |||||
| if (type.equalsIgnoreCase (*types++)) | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| bool File::isOnCDRomDrive() const throw() | |||||
| { | |||||
| static const char* const cdTypes[] = { "cd9660", "cdfs", "cddafs", "udf", 0 }; | |||||
| return isFileOnDriveType (this, (const char**) cdTypes); | |||||
| } | |||||
| bool File::isOnHardDisk() const throw() | |||||
| { | |||||
| static const char* const nonHDTypes[] = { "nfs", "smbfs", "ramfs", 0 }; | |||||
| return ! (isOnCDRomDrive() || isFileOnDriveType (this, (const char**) nonHDTypes)); | |||||
| } | |||||
| bool File::isOnRemovableDrive() const throw() | |||||
| { | |||||
| jassertfalse // xxx not implemented for mac! | |||||
| return false; | |||||
| } | |||||
| static bool juce_isHiddenFile (const String& path) throw() | |||||
| { | |||||
| FSRef ref; | |||||
| if (! PlatformUtilities::makeFSRefFromPath (&ref, path)) | |||||
| return false; | |||||
| FSCatalogInfo info; | |||||
| FSGetCatalogInfo (&ref, kFSCatInfoNodeFlags | kFSCatInfoFinderInfo, &info, 0, 0, 0); | |||||
| if ((info.nodeFlags & kFSNodeIsDirectoryBit) != 0) | |||||
| return (((FolderInfo*) &info.finderInfo)->finderFlags & kIsInvisible) != 0; | |||||
| return (((FileInfo*) &info.finderInfo)->finderFlags & kIsInvisible) != 0; | |||||
| } | |||||
| bool File::isHidden() const throw() | |||||
| { | |||||
| return juce_isHiddenFile (getFullPathName()); | |||||
| } | |||||
| //============================================================================== | |||||
| const File File::getSpecialLocation (const SpecialLocationType type) | |||||
| { | |||||
| const char* resultPath = 0; | |||||
| switch (type) | |||||
| { | |||||
| case userHomeDirectory: | |||||
| resultPath = nsStringToJuce (NSHomeDirectory()); | |||||
| break; | |||||
| case userDocumentsDirectory: | |||||
| resultPath = "~/Documents"; | |||||
| break; | |||||
| case userDesktopDirectory: | |||||
| resultPath = "~/Desktop"; | |||||
| break; | |||||
| case userApplicationDataDirectory: | |||||
| resultPath = "~/Library"; | |||||
| break; | |||||
| case commonApplicationDataDirectory: | |||||
| resultPath = "/Library"; | |||||
| break; | |||||
| case globalApplicationsDirectory: | |||||
| resultPath = "/Applications"; | |||||
| break; | |||||
| case userMusicDirectory: | |||||
| resultPath = "~/Music"; | |||||
| break; | |||||
| case userMoviesDirectory: | |||||
| resultPath = "~/Movies"; | |||||
| break; | |||||
| case tempDirectory: | |||||
| { | |||||
| File tmp (T("~/Library/Caches/") + executableFile.getFileNameWithoutExtension()); | |||||
| tmp.createDirectory(); | |||||
| return tmp.getFullPathName(); | |||||
| } | |||||
| case currentExecutableFile: | |||||
| return executableFile; | |||||
| case currentApplicationFile: | |||||
| { | |||||
| const File parent (executableFile.getParentDirectory()); | |||||
| return parent.getFullPathName().endsWithIgnoreCase (T("Contents/MacOS")) | |||||
| ? parent.getParentDirectory().getParentDirectory() | |||||
| : executableFile; | |||||
| } | |||||
| default: | |||||
| jassertfalse // unknown type? | |||||
| break; | |||||
| } | |||||
| if (resultPath != 0) | |||||
| return File (PlatformUtilities::convertToPrecomposedUnicode (resultPath)); | |||||
| return File::nonexistent; | |||||
| } | |||||
| void juce_setCurrentExecutableFileName (const String& filename) throw() | |||||
| { | |||||
| executableFile = File::getCurrentWorkingDirectory() | |||||
| .getChildFile (PlatformUtilities::convertToPrecomposedUnicode (filename)); | |||||
| } | |||||
| void juce_setCurrentExecutableFileNameFromBundleId (const String& bundleId) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSBundle* b = [NSBundle bundleWithIdentifier: juceStringToNS (bundleId)]; | |||||
| if (b != nil) | |||||
| executableFile = nsStringToJuce ([b executablePath]); | |||||
| } | |||||
| //============================================================================== | |||||
| const File File::getCurrentWorkingDirectory() throw() | |||||
| { | |||||
| char buf [2048]; | |||||
| getcwd (buf, sizeof(buf)); | |||||
| return File (PlatformUtilities::convertToPrecomposedUnicode (buf)); | |||||
| } | |||||
| bool File::setAsCurrentWorkingDirectory() const throw() | |||||
| { | |||||
| return chdir (getFullPathName().toUTF8()) == 0; | |||||
| } | |||||
| //============================================================================== | |||||
| struct FindFileStruct | |||||
| { | |||||
| String parentDir, wildCard; | |||||
| DIR* dir; | |||||
| bool getNextMatch (String& result, bool* const isDir, bool* const isHidden, int64* const fileSize, | |||||
| Time* const modTime, Time* const creationTime, bool* const isReadOnly) throw() | |||||
| { | |||||
| const char* const wildCardUTF8 = wildCard.toUTF8(); | |||||
| for (;;) | |||||
| { | |||||
| struct dirent* const de = readdir (dir); | |||||
| if (de == 0) | |||||
| break; | |||||
| if (fnmatch (wildCardUTF8, de->d_name, 0) == 0) | |||||
| { | |||||
| result = PlatformUtilities::convertToPrecomposedUnicode (String::fromUTF8 ((const uint8*) de->d_name)); | |||||
| const String path (parentDir + result); | |||||
| if (isDir != 0 || fileSize != 0) | |||||
| { | |||||
| struct stat info; | |||||
| const bool statOk = juce_stat (path, info); | |||||
| if (isDir != 0) | |||||
| *isDir = path.isEmpty() || (statOk && ((info.st_mode & S_IFDIR) != 0)); | |||||
| if (isHidden != 0) | |||||
| *isHidden = (de->d_name[0] == '.') | |||||
| || juce_isHiddenFile (path); | |||||
| if (fileSize != 0) | |||||
| *fileSize = statOk ? info.st_size : 0; | |||||
| } | |||||
| if (modTime != 0 || creationTime != 0) | |||||
| { | |||||
| int64 m, a, c; | |||||
| juce_getFileTimes (path, m, a, c); | |||||
| if (modTime != 0) | |||||
| *modTime = m; | |||||
| if (creationTime != 0) | |||||
| *creationTime = c; | |||||
| } | |||||
| if (isReadOnly != 0) | |||||
| *isReadOnly = ! juce_canWriteToFile (path); | |||||
| return true; | |||||
| } | |||||
| } | |||||
| return false; | |||||
| } | |||||
| }; | |||||
| // returns 0 on failure | |||||
| void* juce_findFileStart (const String& directory, const String& wildCard, String& firstResultFile, | |||||
| bool* isDir, bool* isHidden, int64* fileSize, Time* modTime, | |||||
| Time* creationTime, bool* isReadOnly) throw() | |||||
| { | |||||
| DIR* const d = opendir (directory.toUTF8()); | |||||
| if (d != 0) | |||||
| { | |||||
| FindFileStruct* const ff = new FindFileStruct(); | |||||
| ff->parentDir = directory; | |||||
| if (!ff->parentDir.endsWithChar (File::separator)) | |||||
| ff->parentDir += File::separator; | |||||
| ff->wildCard = wildCard; | |||||
| ff->dir = d; | |||||
| if (ff->getNextMatch (firstResultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly)) | |||||
| { | |||||
| return ff; | |||||
| } | |||||
| else | |||||
| { | |||||
| firstResultFile = String::empty; | |||||
| isDir = false; | |||||
| closedir (d); | |||||
| delete ff; | |||||
| } | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| bool juce_findFileNext (void* handle, String& resultFile, | |||||
| bool* isDir, bool* isHidden, int64* fileSize, Time* modTime, Time* creationTime, bool* isReadOnly) throw() | |||||
| { | |||||
| FindFileStruct* const ff = (FindFileStruct*) handle; | |||||
| if (ff != 0) | |||||
| return ff->getNextMatch (resultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly); | |||||
| return false; | |||||
| } | |||||
| void juce_findFileClose (void* handle) throw() | |||||
| { | |||||
| FindFileStruct* const ff = (FindFileStruct*)handle; | |||||
| if (ff != 0) | |||||
| { | |||||
| closedir (ff->dir); | |||||
| delete ff; | |||||
| } | |||||
| } | |||||
| //============================================================================== | |||||
| bool juce_launchExecutable (const String& pathAndArguments) throw() | |||||
| { | |||||
| char* const argv[4] = { "/bin/sh", "-c", (char*) (const char*) pathAndArguments, 0 }; | |||||
| const int cpid = fork(); | |||||
| if (cpid == 0) | |||||
| { | |||||
| // Child process | |||||
| if (execve (argv[0], argv, 0) < 0) | |||||
| exit (0); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (cpid < 0) | |||||
| return false; | |||||
| } | |||||
| return true; | |||||
| } | |||||
| bool juce_launchFile (const String& fileName, | |||||
| const String& parameters) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| if (parameters.isEmpty()) | |||||
| return [[NSWorkspace sharedWorkspace] openFile: juceStringToNS (fileName)]; | |||||
| bool ok = false; | |||||
| FSRef ref; | |||||
| if (PlatformUtilities::makeFSRefFromPath (&ref, fileName)) | |||||
| { | |||||
| if (PlatformUtilities::isBundle (fileName)) | |||||
| { | |||||
| NSMutableArray* urls = [NSMutableArray array]; | |||||
| StringArray docs; | |||||
| docs.addTokens (parameters, true); | |||||
| for (int i = 0; i < docs.size(); ++i) | |||||
| [urls addObject: juceStringToNS (docs[i])]; | |||||
| ok = [[NSWorkspace sharedWorkspace] openURLs: urls | |||||
| withAppBundleIdentifier: [[NSBundle bundleWithPath: juceStringToNS (fileName)] bundleIdentifier] | |||||
| options: nil | |||||
| additionalEventParamDescriptor: nil | |||||
| launchIdentifiers: nil]; | |||||
| } | |||||
| else | |||||
| { | |||||
| ok = juce_launchExecutable (T("\"") + fileName + T("\" ") + parameters); | |||||
| } | |||||
| } | |||||
| return ok; | |||||
| } | |||||
| //============================================================================== | |||||
| bool PlatformUtilities::makeFSRefFromPath (FSRef* destFSRef, const String& path) | |||||
| { | |||||
| return FSPathMakeRef ((const UInt8*) path.toUTF8(), destFSRef, 0) == noErr; | |||||
| } | |||||
| const String PlatformUtilities::makePathFromFSRef (FSRef* file) | |||||
| { | |||||
| uint8 path [2048]; | |||||
| zeromem (path, sizeof (path)); | |||||
| String result; | |||||
| if (FSRefMakePath (file, (UInt8*) path, sizeof (path) - 1) == noErr) | |||||
| result = String::fromUTF8 (path); | |||||
| return PlatformUtilities::convertToPrecomposedUnicode (result); | |||||
| } | |||||
| //============================================================================== | |||||
| OSType PlatformUtilities::getTypeOfFile (const String& filename) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| return NSHFSTypeCodeFromFileType (NSHFSTypeOfFile (juceStringToNS (filename))); | |||||
| } | |||||
| bool PlatformUtilities::isBundle (const String& filename) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| return [[NSWorkspace sharedWorkspace] isFilePackageAtPath: juceStringToNS (filename)]; | |||||
| } | |||||
| #endif | |||||
| @@ -29,19 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| #include <ApplicationServices/ApplicationServices.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/gui/graphics/fonts/juce_Font.h" | |||||
| #include "../../../src/juce_appframework/events/juce_Timer.h" | |||||
| #include "../../../src/juce_appframework/events/juce_MessageManager.h" | |||||
| #include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h" | |||||
| #include "../../../src/juce_core/basics/juce_Singleton.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | //============================================================================== | ||||
| static OSStatus pascal CubicMoveTo (const Float32Point *pt, | static OSStatus pascal CubicMoveTo (const Float32Point *pt, | ||||
| @@ -539,5 +529,4 @@ void Font::getDefaultFontNames (String& defaultSans, String& defaultSerif, Strin | |||||
| defaultFixed = "Monaco"; | defaultFixed = "Monaco"; | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -0,0 +1,414 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| class JuceMainMenuHandler; | |||||
| END_JUCE_NAMESPACE | |||||
| using namespace JUCE_NAMESPACE; | |||||
| @interface JuceMenuCallback : NSObject | |||||
| { | |||||
| JuceMainMenuHandler* owner; | |||||
| } | |||||
| - (JuceMenuCallback*) initWithOwner: (JuceMainMenuHandler*) owner_; | |||||
| - (void) dealloc; | |||||
| - (void) menuItemInvoked: (id) menu; | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| class JuceMainMenuHandler : private MenuBarModelListener, | |||||
| private DeletedAtShutdown | |||||
| { | |||||
| public: | |||||
| static JuceMainMenuHandler* instance; | |||||
| //============================================================================== | |||||
| JuceMainMenuHandler() throw() | |||||
| : currentModel (0) | |||||
| { | |||||
| callback = [[JuceMenuCallback alloc] initWithOwner: this]; | |||||
| } | |||||
| ~JuceMainMenuHandler() throw() | |||||
| { | |||||
| setMenu (0); | |||||
| jassert (instance == this); | |||||
| instance = 0; | |||||
| [callback release]; | |||||
| } | |||||
| void setMenu (MenuBarModel* const newMenuBarModel) throw() | |||||
| { | |||||
| if (currentModel != newMenuBarModel) | |||||
| { | |||||
| if (currentModel != 0) | |||||
| currentModel->removeListener (this); | |||||
| currentModel = newMenuBarModel; | |||||
| if (currentModel != 0) | |||||
| currentModel->addListener (this); | |||||
| menuBarItemsChanged (0); | |||||
| } | |||||
| } | |||||
| void addSubMenu (NSMenu* parent, const PopupMenu& child, | |||||
| const String& name, int& menuId, int& tag) | |||||
| { | |||||
| NSMenuItem* item = [parent addItemWithTitle: juceStringToNS (name) | |||||
| action: nil | |||||
| keyEquivalent: @""]; | |||||
| [item setTag: tag]; | |||||
| NSMenu* sub = createMenu (child, name, menuId, tag); | |||||
| [parent setSubmenu: sub forItem: item]; | |||||
| [sub setAutoenablesItems: false]; | |||||
| [sub release]; | |||||
| } | |||||
| void menuBarItemsChanged (MenuBarModel*) | |||||
| { | |||||
| NSMenu* menuBar = [NSApp mainMenu]; | |||||
| while ([menuBar numberOfItems] > 1) | |||||
| [menuBar removeItemAtIndex: 1]; | |||||
| if (currentModel != 0) | |||||
| { | |||||
| const StringArray menuNames (currentModel->getMenuBarNames()); | |||||
| int menuId = 1; | |||||
| for (int i = 0; i < menuNames.size(); ++i) | |||||
| { | |||||
| const PopupMenu menu (currentModel->getMenuForIndex (i, menuNames [i])); | |||||
| addSubMenu (menuBar, menu, menuNames [i], menuId, i); | |||||
| } | |||||
| } | |||||
| } | |||||
| static void flashMenuBar (NSMenu* menu) | |||||
| { | |||||
| const unichar f35Key = NSF35FunctionKey; | |||||
| NSString* f35String = [NSString stringWithCharacters: &f35Key length: 1]; | |||||
| NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: @"x" | |||||
| action: nil | |||||
| keyEquivalent: f35String]; | |||||
| [item setTarget: nil]; | |||||
| [menu insertItem: item atIndex: [menu numberOfItems]]; | |||||
| [item release]; | |||||
| NSEvent* f35Event = [NSEvent keyEventWithType: NSKeyDown | |||||
| location: NSZeroPoint | |||||
| modifierFlags: NSCommandKeyMask | |||||
| timestamp: 0 | |||||
| windowNumber: 0 | |||||
| context: [NSGraphicsContext currentContext] | |||||
| characters: f35String | |||||
| charactersIgnoringModifiers: f35String | |||||
| isARepeat: NO | |||||
| keyCode: 0]; | |||||
| [menu performKeyEquivalent: f35Event]; | |||||
| [menu removeItem: item]; | |||||
| } | |||||
| void menuCommandInvoked (MenuBarModel*, const ApplicationCommandTarget::InvocationInfo& info) | |||||
| { | |||||
| NSMenuItem* item = [[NSApp mainMenu] itemWithTag: info.commandID]; | |||||
| if (item != 0) | |||||
| flashMenuBar ([item menu]); | |||||
| } | |||||
| void invoke (const int commandId, ApplicationCommandManager* const commandManager, const int topLevelIndex) const | |||||
| { | |||||
| if (currentModel != 0) | |||||
| { | |||||
| if (commandManager != 0) | |||||
| { | |||||
| ApplicationCommandTarget::InvocationInfo info (commandId); | |||||
| info.invocationMethod = ApplicationCommandTarget::InvocationInfo::fromMenu; | |||||
| commandManager->invoke (info, true); | |||||
| } | |||||
| currentModel->menuItemSelected (commandId, topLevelIndex); | |||||
| } | |||||
| } | |||||
| MenuBarModel* currentModel; | |||||
| private: | |||||
| JuceMenuCallback* callback; | |||||
| NSMenu* createMenu (const PopupMenu menu, | |||||
| const String& menuName, | |||||
| int& id, | |||||
| const int topLevelIndex) | |||||
| { | |||||
| NSMenu* m = [[NSMenu alloc] initWithTitle: juceStringToNS (menuName)]; | |||||
| [m setAutoenablesItems: false]; | |||||
| PopupMenu::MenuItemIterator iter (menu); | |||||
| while (iter.next()) | |||||
| { | |||||
| NSString* text = juceStringToNS (iter.itemName.upToFirstOccurrenceOf (T("<end>"), false, true)); | |||||
| if (iter.isSeparator) | |||||
| { | |||||
| [m addItem: [NSMenuItem separatorItem]]; | |||||
| } | |||||
| else if (iter.isSectionHeader) | |||||
| { | |||||
| NSMenuItem* item = [m addItemWithTitle: text | |||||
| action: nil | |||||
| keyEquivalent: @""]; | |||||
| [item setEnabled: iter.isEnabled]; | |||||
| } | |||||
| else if (iter.subMenu != 0) | |||||
| { | |||||
| NSMenuItem* item = [m addItemWithTitle: text | |||||
| action: nil | |||||
| keyEquivalent: @""]; | |||||
| [item setTag: iter.itemId]; | |||||
| [item setEnabled: iter.isEnabled]; | |||||
| NSMenu* sub = createMenu (*iter.subMenu, iter.itemName, id, topLevelIndex); | |||||
| [m setSubmenu: sub forItem: item]; | |||||
| [sub release]; | |||||
| } | |||||
| else | |||||
| { | |||||
| NSMenuItem* item = [m addItemWithTitle: text | |||||
| action: @selector (menuItemInvoked:) | |||||
| keyEquivalent: @""]; | |||||
| [item setTag: iter.itemId]; | |||||
| [item setEnabled: iter.isEnabled]; | |||||
| [item setState: iter.isTicked ? NSOnState : NSOffState]; | |||||
| [item setTarget: (id) callback]; | |||||
| NSMutableArray* info = [NSMutableArray arrayWithObject: [NSNumber numberWithUnsignedLongLong: (pointer_sized_int) (void*) iter.commandManager]]; | |||||
| [info addObject: [NSNumber numberWithInt: topLevelIndex]]; | |||||
| [item setRepresentedObject: info]; | |||||
| if (iter.commandManager != 0) | |||||
| { | |||||
| const Array <KeyPress> keyPresses (iter.commandManager->getKeyMappings() | |||||
| ->getKeyPressesAssignedToCommand (iter.itemId)); | |||||
| if (keyPresses.size() > 0) | |||||
| { | |||||
| const KeyPress& kp = keyPresses.getReference(0); | |||||
| juce_wchar key = kp.getTextCharacter(); | |||||
| if (kp.getKeyCode() == KeyPress::backspaceKey) | |||||
| key = NSBackspaceCharacter; | |||||
| else if (kp.getKeyCode() == KeyPress::deleteKey) | |||||
| key = NSDeleteCharacter; | |||||
| else if (key == 0) | |||||
| key = (juce_wchar) kp.getKeyCode(); | |||||
| unsigned int mods = 0; | |||||
| if (kp.getModifiers().isShiftDown()) | |||||
| mods |= NSShiftKeyMask; | |||||
| if (kp.getModifiers().isCtrlDown()) | |||||
| mods |= NSControlKeyMask; | |||||
| if (kp.getModifiers().isAltDown()) | |||||
| mods |= NSAlternateKeyMask; | |||||
| if (kp.getModifiers().isCommandDown()) | |||||
| mods |= NSCommandKeyMask; | |||||
| [item setKeyEquivalent: juceStringToNS (String::charToString (key))]; | |||||
| [item setKeyEquivalentModifierMask: mods]; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| [m update]; | |||||
| return m; | |||||
| } | |||||
| }; | |||||
| JuceMainMenuHandler* JuceMainMenuHandler::instance = 0; | |||||
| END_JUCE_NAMESPACE | |||||
| @implementation JuceMenuCallback | |||||
| - (JuceMenuCallback*) initWithOwner: (JuceMainMenuHandler*) owner_ | |||||
| { | |||||
| [super init]; | |||||
| owner = owner_; | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| [super dealloc]; | |||||
| } | |||||
| - (void) menuItemInvoked: (id) menu | |||||
| { | |||||
| NSMenuItem* item = (NSMenuItem*) menu; | |||||
| if ([[item representedObject] isKindOfClass: [NSArray class]]) | |||||
| { | |||||
| NSArray* info = (NSArray*) [item representedObject]; | |||||
| owner->invoke ([item tag], | |||||
| (ApplicationCommandManager*) (pointer_sized_int) | |||||
| [((NSNumber*) [info objectAtIndex: 0]) unsignedLongLongValue], | |||||
| (int) [((NSNumber*) [info objectAtIndex: 1]) intValue]); | |||||
| } | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| void MenuBarModel::setMacMainMenu (MenuBarModel* newMenuBarModel) throw() | |||||
| { | |||||
| if (getMacMainMenu() != newMenuBarModel) | |||||
| { | |||||
| if (newMenuBarModel == 0) | |||||
| { | |||||
| delete JuceMainMenuHandler::instance; | |||||
| jassert (JuceMainMenuHandler::instance == 0); // should be zeroed in the destructor | |||||
| } | |||||
| else | |||||
| { | |||||
| if (JuceMainMenuHandler::instance == 0) | |||||
| JuceMainMenuHandler::instance = new JuceMainMenuHandler(); | |||||
| JuceMainMenuHandler::instance->setMenu (newMenuBarModel); | |||||
| } | |||||
| } | |||||
| } | |||||
| MenuBarModel* MenuBarModel::getMacMainMenu() throw() | |||||
| { | |||||
| return JuceMainMenuHandler::instance != 0 | |||||
| ? JuceMainMenuHandler::instance->currentModel : 0; | |||||
| } | |||||
| //============================================================================== | |||||
| static NSMenu* createStandardAppMenu (const String& appName) | |||||
| { | |||||
| NSMenu* menu = [[NSMenu alloc] initWithTitle: @"Apple"]; | |||||
| NSMenuItem* item; | |||||
| // xxx should allow the 'about' and 'preferences' items to be turned on programatically... | |||||
| /* item = [menu addItemWithTitle: juceStringToNS ("About " + appName)] | |||||
| action: @selector(orderFrontStandardAboutPanel:) keyEquivalent: @""]; | |||||
| [item setTarget: NSApp]; | |||||
| [menu addItem: [NSMenuItem separatorItem]]; | |||||
| */ | |||||
| /* item = [menu addItemWithTitle: NSLocalizedString (@"Preferences...", nil) | |||||
| action: nil keyEquivalent: @","]; | |||||
| [menu addItem: [NSMenuItem separatorItem]]; | |||||
| */ | |||||
| // Services... | |||||
| item = [menu addItemWithTitle: NSLocalizedString (@"Services", nil) | |||||
| action: nil keyEquivalent: @""]; | |||||
| NSMenu* servicesMenu = [[NSMenu alloc] initWithTitle: @"Services"]; | |||||
| [menu setSubmenu: servicesMenu forItem: item]; | |||||
| [NSApp setServicesMenu: servicesMenu]; | |||||
| [servicesMenu release]; | |||||
| [menu addItem: [NSMenuItem separatorItem]]; | |||||
| // Hide + Show stuff... | |||||
| item = [menu addItemWithTitle: juceStringToNS ("Hide " + appName) | |||||
| action: @selector (hide:) keyEquivalent: @"h"]; | |||||
| [item setTarget: NSApp]; | |||||
| item = [menu addItemWithTitle: NSLocalizedString (@"Hide Others", nil) | |||||
| action: @selector (hideOtherApplications:) keyEquivalent: @"h"]; | |||||
| [item setKeyEquivalentModifierMask: NSCommandKeyMask | NSAlternateKeyMask]; | |||||
| [item setTarget: NSApp]; | |||||
| item = [menu addItemWithTitle: NSLocalizedString (@"Show All", nil) | |||||
| action: @selector (unhideAllApplications:) keyEquivalent: @""]; | |||||
| [item setTarget: NSApp]; | |||||
| [menu addItem: [NSMenuItem separatorItem]]; | |||||
| // Quit item.... | |||||
| item = [menu addItemWithTitle: juceStringToNS ("Quit " + appName) | |||||
| action: @selector (terminate:) keyEquivalent: @"q"]; | |||||
| [item setTarget: NSApp]; | |||||
| return menu; | |||||
| } | |||||
| // Since our app has no NIB, this initialises a standard app menu... | |||||
| void initialiseMainMenu() | |||||
| { | |||||
| if (JUCEApplication::getInstance() != 0) // only needed in an app | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSMenu* mainMenu = [[NSMenu alloc] initWithTitle: @"MainMenu"]; | |||||
| NSMenuItem* item = [mainMenu addItemWithTitle: @"Apple" action: nil keyEquivalent: @""]; | |||||
| NSMenu* appMenu = createStandardAppMenu (JUCEApplication::getInstance()->getApplicationName()); | |||||
| [NSApp performSelector: @selector (setAppleMenu:) withObject: appMenu]; | |||||
| [mainMenu setSubmenu: appMenu forItem: item]; | |||||
| [NSApp setMainMenu: mainMenu]; | |||||
| [appMenu release]; | |||||
| [mainMenu release]; | |||||
| } | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,275 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| struct CallbackMessagePayload | |||||
| { | |||||
| MessageCallbackFunction* function; | |||||
| void* parameter; | |||||
| void* volatile result; | |||||
| bool volatile hasBeenExecuted; | |||||
| }; | |||||
| END_JUCE_NAMESPACE | |||||
| using namespace JUCE_NAMESPACE; | |||||
| @interface JuceAppDelegate : NSObject | |||||
| { | |||||
| id oldDelegate; | |||||
| } | |||||
| - (JuceAppDelegate*) init; | |||||
| - (void) dealloc; | |||||
| - (BOOL) application: (NSApplication*) theApplication openFile: (NSString*) filename; | |||||
| - (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames; | |||||
| - (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app; | |||||
| - (void) applicationDidBecomeActive: (NSNotification*) aNotification; | |||||
| - (void) applicationDidResignActive: (NSNotification*) aNotification; | |||||
| - (void) applicationWillUnhide: (NSNotification*) aNotification; | |||||
| - (void) customEvent: (id) data; | |||||
| - (void) performCallback: (id) info; | |||||
| @end | |||||
| @implementation JuceAppDelegate | |||||
| - (JuceAppDelegate*) init | |||||
| { | |||||
| [super init]; | |||||
| NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; | |||||
| if (JUCEApplication::getInstance() != 0) | |||||
| { | |||||
| oldDelegate = [NSApp delegate]; | |||||
| [NSApp setDelegate: self]; | |||||
| } | |||||
| else | |||||
| { | |||||
| oldDelegate = 0; | |||||
| [center addObserver: self selector: @selector (applicationDidResignActive:) | |||||
| name: NSApplicationDidResignActiveNotification object: NSApp]; | |||||
| [center addObserver: self selector: @selector (applicationDidBecomeActive:) | |||||
| name: NSApplicationDidBecomeActiveNotification object: NSApp]; | |||||
| [center addObserver: self selector: @selector (applicationWillUnhide:) | |||||
| name: NSApplicationWillUnhideNotification object: NSApp]; | |||||
| } | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| if (oldDelegate != 0) | |||||
| [NSApp setDelegate: oldDelegate]; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app | |||||
| { | |||||
| if (JUCEApplication::getInstance() != 0) | |||||
| { | |||||
| JUCEApplication::getInstance()->systemRequestedQuit(); | |||||
| if (! MessageManager::getInstance()->hasStopMessageBeenSent()) | |||||
| return NSTerminateCancel; | |||||
| } | |||||
| return NSTerminateNow; | |||||
| } | |||||
| - (BOOL) application: (NSApplication*) app openFile: (NSString*) filename | |||||
| { | |||||
| if (JUCEApplication::getInstance() != 0) | |||||
| { | |||||
| JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename)); | |||||
| return YES; | |||||
| } | |||||
| return NO; | |||||
| } | |||||
| - (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames | |||||
| { | |||||
| StringArray files; | |||||
| for (int i = 0; i < [filenames count]; ++i) | |||||
| files.add (nsStringToJuce ((NSString*) [filenames objectAtIndex: i])); | |||||
| if (files.size() > 0 && JUCEApplication::getInstance() != 0) | |||||
| JUCEApplication::getInstance()->anotherInstanceStarted (files.joinIntoString (T(" "))); | |||||
| } | |||||
| - (void) applicationDidBecomeActive: (NSNotification*) aNotification | |||||
| { | |||||
| juce_HandleProcessFocusChange(); | |||||
| } | |||||
| - (void) applicationDidResignActive: (NSNotification*) aNotification | |||||
| { | |||||
| juce_HandleProcessFocusChange(); | |||||
| } | |||||
| - (void) applicationWillUnhide: (NSNotification*) aNotification | |||||
| { | |||||
| juce_HandleProcessFocusChange(); | |||||
| } | |||||
| - (void) customEvent: (id) n | |||||
| { | |||||
| NSData* data = (NSData*) n; | |||||
| void* message = 0; | |||||
| [data getBytes: &message length: sizeof (message)]; | |||||
| if (message != 0) | |||||
| MessageManager::getInstance()->deliverMessage (message); | |||||
| [data release]; | |||||
| } | |||||
| - (void) performCallback: (id) info | |||||
| { | |||||
| CallbackMessagePayload* pl = (CallbackMessagePayload*) info; | |||||
| if (pl != 0) | |||||
| { | |||||
| pl->result = (*pl->function) (pl->parameter); | |||||
| pl->hasBeenExecuted = true; | |||||
| } | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| static JuceAppDelegate* juceAppDelegate = 0; | |||||
| void MessageManager::runDispatchLoop() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| MessageManagerLock mml; | |||||
| // must only be called by the message thread! | |||||
| jassert (isThisTheMessageThread()); | |||||
| [NSApp run]; | |||||
| } | |||||
| void MessageManager::stopDispatchLoop() | |||||
| { | |||||
| quitMessagePosted = true; | |||||
| [NSApp stop: nil]; | |||||
| } | |||||
| bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| jassert (isThisTheMessageThread()); // must only be called by the message thread | |||||
| uint32 endTime = Time::getMillisecondCounter() + millisecondsToRunFor; | |||||
| NSDate* endDate = [NSDate dateWithTimeIntervalSinceNow: millisecondsToRunFor * 0.001]; | |||||
| while (Time::getMillisecondCounter() < endTime) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode | |||||
| beforeDate: endDate]; | |||||
| NSEvent* e = [NSApp nextEventMatchingMask: NSAnyEventMask | |||||
| untilDate: endDate | |||||
| inMode: NSDefaultRunLoopMode | |||||
| dequeue: YES]; | |||||
| [NSApp sendEvent: e]; | |||||
| } | |||||
| return ! quitMessagePosted; | |||||
| } | |||||
| //============================================================================== | |||||
| void MessageManager::doPlatformSpecificInitialisation() | |||||
| { | |||||
| if (juceAppDelegate == 0) | |||||
| juceAppDelegate = [[JuceAppDelegate alloc] init]; | |||||
| initialiseMainMenu(); | |||||
| } | |||||
| void MessageManager::doPlatformSpecificShutdown() | |||||
| { | |||||
| [[NSRunLoop currentRunLoop] cancelPerformSelectorsWithTarget: juceAppDelegate]; | |||||
| [[NSNotificationCenter defaultCenter] removeObserver: juceAppDelegate]; | |||||
| [juceAppDelegate release]; | |||||
| juceAppDelegate = 0; | |||||
| } | |||||
| bool juce_postMessageToSystemQueue (void* message) | |||||
| { | |||||
| [juceAppDelegate performSelectorOnMainThread: @selector (customEvent:) | |||||
| withObject: (id) [[NSData alloc] initWithBytes: &message | |||||
| length: (int) sizeof (message)] | |||||
| waitUntilDone: NO]; | |||||
| return true; | |||||
| } | |||||
| void MessageManager::broadcastMessage (const String& value) throw() | |||||
| { | |||||
| } | |||||
| void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* callback, | |||||
| void* data) | |||||
| { | |||||
| if (isThisTheMessageThread()) | |||||
| { | |||||
| return (*callback) (data); | |||||
| } | |||||
| else | |||||
| { | |||||
| CallbackMessagePayload cmp; | |||||
| cmp.function = callback; | |||||
| cmp.parameter = data; | |||||
| cmp.result = 0; | |||||
| cmp.hasBeenExecuted = false; | |||||
| [juceAppDelegate performSelectorOnMainThread: @selector (performCallback:) | |||||
| withObject: (id) &cmp | |||||
| waitUntilDone: YES]; | |||||
| return cmp.result; | |||||
| } | |||||
| } | |||||
| #endif | |||||
| @@ -1,503 +0,0 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "juce_mac_NativeHeaders.h" | |||||
| #include <Carbon/Carbon.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/events/juce_MessageManager.h" | |||||
| #include "../../../src/juce_appframework/application/juce_Application.h" | |||||
| #include "../../../src/juce_appframework/gui/components/juce_Desktop.h" | |||||
| #include "../../../src/juce_core/text/juce_StringArray.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #undef Point | |||||
| extern void juce_HandleProcessFocusChange(); | |||||
| extern void juce_maximiseAllMinimisedWindows(); | |||||
| extern void juce_InvokeMainMenuCommand (const HICommand& command); | |||||
| extern void juce_MainMenuAboutToBeUsed(); | |||||
| struct CallbackMessagePayload | |||||
| { | |||||
| MessageCallbackFunction* function; | |||||
| void* parameter; | |||||
| void* volatile result; | |||||
| bool volatile hasBeenExecuted; | |||||
| }; | |||||
| END_JUCE_NAMESPACE | |||||
| #if JUCE_COCOA | |||||
| NSString* juceMessageName = 0; | |||||
| @interface JuceAppDelegate : NSObject | |||||
| id oldDelegate; | |||||
| - (JuceAppDelegate*) init; | |||||
| - (void) dealloc; | |||||
| - (BOOL) application: (NSApplication*) theApplication openFile: (NSString*) filename; | |||||
| - (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames; | |||||
| - (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app; | |||||
| - (void) applicationDidBecomeActive: (NSNotification*) aNotification; | |||||
| - (void) applicationDidResignActive: (NSNotification*) aNotification; | |||||
| - (void) applicationWillUnhide: (NSNotification*) aNotification; | |||||
| - (void) customEvent: (NSNotification*) aNotification; | |||||
| - (void) performCallback: (id) info; | |||||
| @end | |||||
| @implementation JuceAppDelegate | |||||
| - (JuceAppDelegate*) init | |||||
| { | |||||
| [super init]; | |||||
| NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; | |||||
| if (JUCE_NAMESPACE::JUCEApplication::getInstance() != 0) | |||||
| { | |||||
| oldDelegate = [NSApp delegate]; | |||||
| [NSApp setDelegate: self]; | |||||
| } | |||||
| else | |||||
| { | |||||
| oldDelegate = 0; | |||||
| [center addObserver: self selector: @selector (applicationDidResignActive:) | |||||
| name: NSApplicationDidResignActiveNotification object: NSApp]; | |||||
| [center addObserver: self selector: @selector (applicationDidBecomeActive:) | |||||
| name: NSApplicationDidBecomeActiveNotification object: NSApp]; | |||||
| [center addObserver: self selector: @selector (applicationWillUnhide:) | |||||
| name: NSApplicationWillUnhideNotification object: NSApp]; | |||||
| } | |||||
| [center addObserver: self selector: @selector (customEvent:) | |||||
| name: juceMessageName object: nil]; | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| if (oldDelegate != 0) | |||||
| [NSApp setDelegate: oldDelegate]; | |||||
| [[NSNotificationCenter defaultCenter] removeObserver: self]; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app | |||||
| { | |||||
| if (JUCE_NAMESPACE::JUCEApplication::getInstance() != 0) | |||||
| JUCE_NAMESPACE::JUCEApplication::getInstance()->systemRequestedQuit(); | |||||
| return NSTerminateLater; | |||||
| } | |||||
| - (BOOL) application: (NSApplication*) app openFile: (NSString*) filename | |||||
| { | |||||
| if (JUCE_NAMESPACE::JUCEApplication::getInstance() != 0) | |||||
| { | |||||
| JUCE_NAMESPACE::JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename)); | |||||
| return YES; | |||||
| } | |||||
| return NO; | |||||
| } | |||||
| - (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames | |||||
| { | |||||
| JUCE_NAMESPACE::StringArray files; | |||||
| for (int i = 0; i < [filenames count]; ++i) | |||||
| files.add (nsStringToJuce ((NSString*) [filenames objectAtIndex: i])); | |||||
| if (files.size() > 0 && JUCE_NAMESPACE::JUCEApplication::getInstance() != 0) | |||||
| JUCE_NAMESPACE::JUCEApplication::getInstance()->anotherInstanceStarted (files.joinIntoString (T(" "))); | |||||
| } | |||||
| - (void) applicationDidBecomeActive: (NSNotification*) aNotification | |||||
| { | |||||
| JUCE_NAMESPACE::juce_HandleProcessFocusChange(); | |||||
| } | |||||
| - (void) applicationDidResignActive: (NSNotification*) aNotification | |||||
| { | |||||
| JUCE_NAMESPACE::juce_HandleProcessFocusChange(); | |||||
| } | |||||
| - (void) applicationWillUnhide: (NSNotification*) aNotification | |||||
| { | |||||
| JUCE_NAMESPACE::juce_maximiseAllMinimisedWindows(); | |||||
| } | |||||
| - (void) customEvent: (NSNotification*) n | |||||
| { | |||||
| void* message = 0; | |||||
| [((NSData*) [n object]) getBytes: &message length: sizeof (message)]; | |||||
| if (message != 0) | |||||
| JUCE_NAMESPACE::MessageManager::getInstance()->deliverMessage (message); | |||||
| } | |||||
| - (void) performCallback: (id) info | |||||
| { | |||||
| JUCE_NAMESPACE::CallbackMessagePayload* pl = (JUCE_NAMESPACE::CallbackMessagePayload*) info; | |||||
| if (pl != 0) | |||||
| { | |||||
| pl->result = (*pl->function) (pl->parameter); | |||||
| pl->hasBeenExecuted = true; | |||||
| } | |||||
| } | |||||
| @end | |||||
| #endif | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #if JUCE_COCOA | |||||
| static JuceAppDelegate* juceAppDelegate = 0; | |||||
| #else | |||||
| static int kJUCEClass = FOUR_CHAR_CODE ('JUCE'); | |||||
| const int kJUCEKind = 1; | |||||
| const int kCallbackKind = 2; | |||||
| static pascal OSStatus EventHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData) | |||||
| { | |||||
| void* event = 0; | |||||
| GetEventParameter (theEvent, 'mess', typeVoidPtr, 0, sizeof (void*), 0, &event); | |||||
| if (event != 0) | |||||
| MessageManager::getInstance()->deliverMessage (event); | |||||
| return noErr; | |||||
| } | |||||
| static pascal OSStatus CallbackHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData) | |||||
| { | |||||
| CallbackMessagePayload* pl = 0; | |||||
| GetEventParameter (theEvent, 'mess', typeVoidPtr, 0, sizeof(pl), 0, &pl); | |||||
| if (pl != 0) | |||||
| { | |||||
| pl->result = (*pl->function) (pl->parameter); | |||||
| pl->hasBeenExecuted = true; | |||||
| } | |||||
| return noErr; | |||||
| } | |||||
| static pascal OSStatus MouseClickHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData) | |||||
| { | |||||
| ::Point where; | |||||
| GetEventParameter (theEvent, kEventParamMouseLocation, typeQDPoint, 0, sizeof(::Point), 0, &where); | |||||
| WindowRef window; | |||||
| if (FindWindow (where, &window) == inMenuBar) | |||||
| { | |||||
| // turn off the wait cursor before going in here.. | |||||
| const int oldTimeBeforeWaitCursor = MessageManager::getInstance()->getTimeBeforeShowingWaitCursor(); | |||||
| MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (0); | |||||
| if (Component::getCurrentlyModalComponent() != 0) | |||||
| Component::getCurrentlyModalComponent()->inputAttemptWhenModal(); | |||||
| juce_MainMenuAboutToBeUsed(); | |||||
| MenuSelect (where); | |||||
| HiliteMenu (0); | |||||
| MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (oldTimeBeforeWaitCursor); | |||||
| return noErr; | |||||
| } | |||||
| return eventNotHandledErr; | |||||
| } | |||||
| static pascal OSErr QuitAppleEventHandler (const AppleEvent *appleEvt, AppleEvent* reply, long refcon) | |||||
| { | |||||
| if (JUCEApplication::getInstance() != 0) | |||||
| JUCEApplication::getInstance()->systemRequestedQuit(); | |||||
| return noErr; | |||||
| } | |||||
| static pascal OSErr OpenDocEventHandler (const AppleEvent *appleEvt, AppleEvent* reply, long refcon) | |||||
| { | |||||
| AEDescList docs; | |||||
| StringArray files; | |||||
| if (AEGetParamDesc (appleEvt, keyDirectObject, typeAEList, &docs) == noErr) | |||||
| { | |||||
| long num; | |||||
| if (AECountItems (&docs, &num) == noErr) | |||||
| { | |||||
| for (int i = 1; i <= num; ++i) | |||||
| { | |||||
| FSRef file; | |||||
| AEKeyword keyword; | |||||
| DescType type; | |||||
| Size size; | |||||
| if (AEGetNthPtr (&docs, i, typeFSRef, &keyword, &type, | |||||
| &file, sizeof (file), &size) == noErr) | |||||
| { | |||||
| const String path (PlatformUtilities::makePathFromFSRef (&file)); | |||||
| if (path.isNotEmpty()) | |||||
| files.add (path.quoted()); | |||||
| } | |||||
| } | |||||
| if (files.size() > 0 | |||||
| && JUCEApplication::getInstance() != 0) | |||||
| { | |||||
| JUCE_TRY | |||||
| { | |||||
| JUCEApplication::getInstance() | |||||
| ->anotherInstanceStarted (files.joinIntoString (T(" "))); | |||||
| } | |||||
| JUCE_CATCH_ALL | |||||
| } | |||||
| } | |||||
| AEDisposeDesc (&docs); | |||||
| }; | |||||
| return noErr; | |||||
| } | |||||
| static pascal OSStatus AppEventHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData) | |||||
| { | |||||
| const UInt32 eventClass = GetEventClass (theEvent); | |||||
| if (eventClass == kEventClassCommand) | |||||
| { | |||||
| HICommand command; | |||||
| if (GetEventParameter (theEvent, kEventParamHICommand, typeHICommand, 0, sizeof (command), 0, &command) == noErr | |||||
| || GetEventParameter (theEvent, kEventParamDirectObject, typeHICommand, 0, sizeof (command), 0, &command) == noErr) | |||||
| { | |||||
| if (command.commandID == kHICommandQuit) | |||||
| { | |||||
| if (JUCEApplication::getInstance() != 0) | |||||
| JUCEApplication::getInstance()->systemRequestedQuit(); | |||||
| return noErr; | |||||
| } | |||||
| else if (command.commandID == kHICommandMaximizeAll | |||||
| || command.commandID == kHICommandMaximizeWindow | |||||
| || command.commandID == kHICommandBringAllToFront) | |||||
| { | |||||
| juce_maximiseAllMinimisedWindows(); | |||||
| return noErr; | |||||
| } | |||||
| else | |||||
| { | |||||
| juce_InvokeMainMenuCommand (command); | |||||
| } | |||||
| } | |||||
| } | |||||
| else if (eventClass == kEventClassApplication) | |||||
| { | |||||
| if (GetEventKind (theEvent) == kEventAppFrontSwitched) | |||||
| { | |||||
| juce_HandleProcessFocusChange(); | |||||
| } | |||||
| else if (GetEventKind (theEvent) == kEventAppShown) | |||||
| { | |||||
| // this seems to blank the windows, so we need to do a repaint.. | |||||
| for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;) | |||||
| { | |||||
| Component* const c = Desktop::getInstance().getComponent (i); | |||||
| if (c != 0) | |||||
| c->repaint(); | |||||
| } | |||||
| } | |||||
| } | |||||
| return eventNotHandledErr; | |||||
| } | |||||
| static EventQueueRef mainQueue; | |||||
| static EventHandlerRef juceEventHandler = 0; | |||||
| static EventHandlerRef callbackEventHandler = 0; | |||||
| #endif | |||||
| //============================================================================== | |||||
| void MessageManager::doPlatformSpecificInitialisation() | |||||
| { | |||||
| static bool initialised = false; | |||||
| if (! initialised) | |||||
| { | |||||
| initialised = true; | |||||
| #if JUCE_COCOA | |||||
| // if we're linking a Juce app to one or more dynamic libraries, we'll need different values | |||||
| // for this so each module doesn't interfere with the others. | |||||
| UnsignedWide t; | |||||
| Microseconds (&t); | |||||
| kJUCEClass ^= t.lo; | |||||
| juceMessageName = juceStringToNS ("juce_" + String::toHexString ((int) t.lo)); | |||||
| juceAppDelegate = [[JuceAppDelegate alloc] init]; | |||||
| #else | |||||
| mainQueue = GetMainEventQueue(); | |||||
| #endif | |||||
| } | |||||
| #if ! JUCE_COCOA | |||||
| const EventTypeSpec type1 = { kJUCEClass, kJUCEKind }; | |||||
| InstallApplicationEventHandler (NewEventHandlerUPP (EventHandlerProc), 1, &type1, 0, &juceEventHandler); | |||||
| const EventTypeSpec type2 = { kJUCEClass, kCallbackKind }; | |||||
| InstallApplicationEventHandler (NewEventHandlerUPP (CallbackHandlerProc), 1, &type2, 0, &callbackEventHandler); | |||||
| // only do this stuff if we're running as an application rather than a library.. | |||||
| if (JUCEApplication::getInstance() != 0) | |||||
| { | |||||
| const EventTypeSpec type3 = { kEventClassMouse, kEventMouseDown }; | |||||
| InstallApplicationEventHandler (NewEventHandlerUPP (MouseClickHandlerProc), 1, &type3, 0, 0); | |||||
| const EventTypeSpec type4[] = { { kEventClassApplication, kEventAppShown }, | |||||
| { kEventClassApplication, kEventAppFrontSwitched }, | |||||
| { kEventClassCommand, kEventProcessCommand } }; | |||||
| InstallApplicationEventHandler (NewEventHandlerUPP (AppEventHandlerProc), 3, type4, 0, 0); | |||||
| AEInstallEventHandler (kCoreEventClass, kAEQuitApplication, | |||||
| NewAEEventHandlerUPP (QuitAppleEventHandler), 0, false); | |||||
| AEInstallEventHandler (kCoreEventClass, kAEOpenDocuments, | |||||
| NewAEEventHandlerUPP (OpenDocEventHandler), 0, false); | |||||
| } | |||||
| #endif | |||||
| } | |||||
| void MessageManager::doPlatformSpecificShutdown() | |||||
| { | |||||
| if (juceEventHandler != 0) | |||||
| { | |||||
| RemoveEventHandler (juceEventHandler); | |||||
| juceEventHandler = 0; | |||||
| } | |||||
| if (callbackEventHandler != 0) | |||||
| { | |||||
| RemoveEventHandler (callbackEventHandler); | |||||
| callbackEventHandler = 0; | |||||
| } | |||||
| } | |||||
| bool juce_postMessageToSystemQueue (void* message) | |||||
| { | |||||
| #if JUCE_COCOA | |||||
| [[NSNotificationCenter defaultCenter] postNotificationName: juceMessageName | |||||
| object: [NSData dataWithBytes: &message | |||||
| length: (int) sizeof (message)]]; | |||||
| return true; | |||||
| #else | |||||
| jassert (mainQueue == GetMainEventQueue()); | |||||
| EventRef event; | |||||
| if (CreateEvent (0, kJUCEClass, kJUCEKind, 0, kEventAttributeUserEvent, &event) == noErr) | |||||
| { | |||||
| SetEventParameter (event, 'mess', typeVoidPtr, sizeof (void*), &message); | |||||
| const bool ok = PostEventToQueue (mainQueue, event, kEventPriorityStandard) == noErr; | |||||
| ReleaseEvent (event); | |||||
| return ok; | |||||
| } | |||||
| return false; | |||||
| #endif | |||||
| } | |||||
| void MessageManager::broadcastMessage (const String& value) throw() | |||||
| { | |||||
| } | |||||
| void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* callback, | |||||
| void* data) | |||||
| { | |||||
| if (isThisTheMessageThread()) | |||||
| { | |||||
| return (*callback) (data); | |||||
| } | |||||
| else | |||||
| { | |||||
| CallbackMessagePayload cmp; | |||||
| cmp.function = callback; | |||||
| cmp.parameter = data; | |||||
| cmp.result = 0; | |||||
| cmp.hasBeenExecuted = false; | |||||
| #if JUCE_COCOA | |||||
| [juceAppDelegate performSelectorOnMainThread: @selector (performCallback:) | |||||
| withObject: (id) &cmp | |||||
| waitUntilDone: YES]; | |||||
| return cmp.result; | |||||
| #else | |||||
| jassert (mainQueue == GetMainEventQueue()); | |||||
| EventRef event; | |||||
| if (CreateEvent (0, kJUCEClass, kCallbackKind, 0, kEventAttributeUserEvent, &event) == noErr) | |||||
| { | |||||
| void* v = &cmp; | |||||
| SetEventParameter (event, 'mess', typeVoidPtr, sizeof (void*), &v); | |||||
| if (PostEventToQueue (mainQueue, event, kEventPriorityStandard) == noErr) | |||||
| { | |||||
| while (! cmp.hasBeenExecuted) | |||||
| Thread::yield(); | |||||
| return cmp.result; | |||||
| } | |||||
| } | |||||
| return 0; | |||||
| #endif | |||||
| } | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| @@ -0,0 +1,238 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| ScopedAutoReleasePool::ScopedAutoReleasePool() | |||||
| { | |||||
| pool = [[NSAutoreleasePool alloc] init]; | |||||
| } | |||||
| ScopedAutoReleasePool::~ScopedAutoReleasePool() | |||||
| { | |||||
| [((NSAutoreleasePool*) pool) release]; | |||||
| } | |||||
| //============================================================================== | |||||
| void PlatformUtilities::beep() | |||||
| { | |||||
| NSBeep(); | |||||
| } | |||||
| //============================================================================== | |||||
| bool AlertWindow::showNativeDialogBox (const String& title, | |||||
| const String& bodyText, | |||||
| bool isOkCancel) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| return NSRunAlertPanel (juceStringToNS (title), | |||||
| juceStringToNS (bodyText), | |||||
| @"Ok", | |||||
| isOkCancel ? @"Cancel" : nil, | |||||
| nil) == 0; | |||||
| } | |||||
| //============================================================================== | |||||
| bool DragAndDropContainer::performExternalDragDropOfFiles (const StringArray& files, const bool canMoveFiles) | |||||
| { | |||||
| if (files.size() == 0) | |||||
| return false; | |||||
| Component* sourceComp = Component::getComponentUnderMouse(); | |||||
| if (sourceComp == 0) | |||||
| { | |||||
| jassertfalse // this method must be called in response to a | |||||
| // component's mouseDrag event! | |||||
| return false; | |||||
| } | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSView* view = (NSView*) sourceComp->getWindowHandle(); | |||||
| if (view == 0) | |||||
| return false; | |||||
| NSPasteboard* pboard = [NSPasteboard pasteboardWithName: NSDragPboard]; | |||||
| [pboard declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] | |||||
| owner: nil]; | |||||
| NSMutableArray* filesArray = [NSMutableArray arrayWithCapacity: 4]; | |||||
| for (int i = 0; i < files.size(); ++i) | |||||
| [filesArray addObject: juceStringToNS (files[i])]; | |||||
| [pboard setPropertyList: filesArray | |||||
| forType: NSFilenamesPboardType]; | |||||
| NSPoint dragPosition = [view convertPoint: [[[view window] currentEvent] locationInWindow] | |||||
| fromView: nil]; | |||||
| dragPosition.x -= 16; | |||||
| dragPosition.y -= 16; | |||||
| [view dragImage: [[NSWorkspace sharedWorkspace] iconForFile: juceStringToNS (files[0])] | |||||
| at: dragPosition | |||||
| offset: NSMakeSize (0, 0) | |||||
| event: [[view window] currentEvent] | |||||
| pasteboard: pboard | |||||
| source: view | |||||
| slideBack: YES]; | |||||
| return true; | |||||
| } | |||||
| bool DragAndDropContainer::performExternalDragDropOfText (const String& text) | |||||
| { | |||||
| jassertfalse // not implemented! | |||||
| return false; | |||||
| } | |||||
| //============================================================================== | |||||
| bool Desktop::canUseSemiTransparentWindows() throw() | |||||
| { | |||||
| return true; | |||||
| } | |||||
| void Desktop::getMousePosition (int& x, int& y) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| const NSPoint p ([NSEvent mouseLocation]); | |||||
| x = roundFloatToInt (p.x); | |||||
| y = roundFloatToInt ([[NSScreen mainScreen] frame].size.height - p.y); | |||||
| } | |||||
| void Desktop::setMousePosition (int x, int y) throw() | |||||
| { | |||||
| // this rubbish needs to be done around the warp call, to avoid causing a | |||||
| // bizarre glitch.. | |||||
| CGAssociateMouseAndMouseCursorPosition (false); | |||||
| CGSetLocalEventsSuppressionInterval (0); | |||||
| CGPoint pos = { x, y }; | |||||
| CGWarpMouseCursorPosition (pos); | |||||
| CGAssociateMouseAndMouseCursorPosition (true); | |||||
| } | |||||
| //============================================================================== | |||||
| #if MACOS_10_4_OR_EARLIER | |||||
| class ScreenSaverDefeater : public Timer, | |||||
| public DeletedAtShutdown | |||||
| { | |||||
| public: | |||||
| ScreenSaverDefeater() throw() | |||||
| { | |||||
| startTimer (10000); | |||||
| timerCallback(); | |||||
| } | |||||
| ~ScreenSaverDefeater() {} | |||||
| void timerCallback() | |||||
| { | |||||
| if (Process::isForegroundProcess()) | |||||
| UpdateSystemActivity (UsrActivity); | |||||
| } | |||||
| }; | |||||
| static ScreenSaverDefeater* screenSaverDefeater = 0; | |||||
| void Desktop::setScreenSaverEnabled (const bool isEnabled) throw() | |||||
| { | |||||
| if (screenSaverDefeater == 0) | |||||
| screenSaverDefeater = new ScreenSaverDefeater(); | |||||
| } | |||||
| bool Desktop::isScreenSaverEnabled() throw() | |||||
| { | |||||
| return screenSaverDefeater == 0; | |||||
| } | |||||
| #else | |||||
| //============================================================================== | |||||
| static IOPMAssertionID screenSaverDisablerID = 0; | |||||
| void Desktop::setScreenSaverEnabled (const bool isEnabled) throw() | |||||
| { | |||||
| if (isEnabled) | |||||
| { | |||||
| if (screenSaverDisablerID != 0) | |||||
| { | |||||
| IOPMAssertionRelease (screenSaverDisablerID); | |||||
| screenSaverDisablerID = 0; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| if (screenSaverDisablerID == 0) | |||||
| { | |||||
| IOPMAssertionCreate (kIOPMAssertionTypeNoIdleSleep, | |||||
| kIOPMAssertionLevelOn, &screenSaverDisablerID); | |||||
| } | |||||
| } | |||||
| } | |||||
| bool Desktop::isScreenSaverEnabled() throw() | |||||
| { | |||||
| return screenSaverDisablerID == 0; | |||||
| } | |||||
| #endif | |||||
| //============================================================================== | |||||
| void juce_updateMultiMonitorInfo (Array <Rectangle>& monitorCoords, const bool clipToWorkArea) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| monitorCoords.clear(); | |||||
| NSArray* screens = [NSScreen screens]; | |||||
| const float mainScreenBottom = [[NSScreen mainScreen] frame].size.height; | |||||
| for (int i = 0; i < [screens count]; ++i) | |||||
| { | |||||
| NSScreen* s = (NSScreen*) [screens objectAtIndex: i]; | |||||
| NSRect r = clipToWorkArea ? [s visibleFrame] | |||||
| : [s frame]; | |||||
| monitorCoords.add (Rectangle ((int) r.origin.x, | |||||
| (int) (mainScreenBottom - (r.origin.y + r.size.height)), | |||||
| (int) r.size.width, | |||||
| (int) r.size.height)); | |||||
| } | |||||
| jassert (monitorCoords.size() > 0); | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,196 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| static NSImage* juceImageToNSImage (const Image& image) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| int lineStride, pixelStride; | |||||
| const uint8* pixels = image.lockPixelDataReadOnly (0, 0, image.getWidth(), image.getHeight(), | |||||
| lineStride, pixelStride); | |||||
| NSBitmapImageRep* rep = [[NSBitmapImageRep alloc] | |||||
| initWithBitmapDataPlanes: NULL | |||||
| pixelsWide: image.getWidth() | |||||
| pixelsHigh: image.getHeight() | |||||
| bitsPerSample: 8 | |||||
| samplesPerPixel: image.hasAlphaChannel() ? 4 : 3 | |||||
| hasAlpha: image.hasAlphaChannel() | |||||
| isPlanar: NO | |||||
| colorSpaceName: NSCalibratedRGBColorSpace | |||||
| bitmapFormat: (NSBitmapFormat) 0 | |||||
| bytesPerRow: lineStride | |||||
| bitsPerPixel: pixelStride * 8]; | |||||
| unsigned char* newData = [rep bitmapData]; | |||||
| memcpy (newData, pixels, lineStride * image.getHeight()); | |||||
| image.releasePixelDataReadOnly (pixels); | |||||
| NSImage* im = [[NSImage alloc] init]; | |||||
| [im addRepresentation: rep]; | |||||
| [rep release]; | |||||
| return im; | |||||
| } | |||||
| //============================================================================== | |||||
| void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hotspotY) throw() | |||||
| { | |||||
| NSImage* im = juceImageToNSImage (image); | |||||
| NSCursor* c = [[NSCursor alloc] initWithImage: im | |||||
| hotSpot: NSMakePoint (hotspotX, hotspotY)]; | |||||
| [im release]; | |||||
| return (void*) c; | |||||
| } | |||||
| static void* juce_cursorFromData (const unsigned char* data, const int size, float hx, float hy) throw() | |||||
| { | |||||
| Image* const im = ImageFileFormat::loadFrom ((const char*) data, size); | |||||
| jassert (im != 0); | |||||
| if (im == 0) | |||||
| return 0; | |||||
| void* const curs = juce_createMouseCursorFromImage (*im, | |||||
| (int) (hx * im->getWidth()), | |||||
| (int) (hy * im->getHeight())); | |||||
| delete im; | |||||
| return curs; | |||||
| } | |||||
| static void* juce_cursorFromWebKitFile (const char* filename, float hx, float hy) | |||||
| { | |||||
| File f ("/System/Library/Frameworks/WebKit.framework/Frameworks/WebCore.framework/Resources"); | |||||
| MemoryBlock mb; | |||||
| if (f.getChildFile (filename).loadFileAsData (mb)) | |||||
| return juce_cursorFromData ((const unsigned char*) mb.getData(), mb.getSize(), hx, hy); | |||||
| return 0; | |||||
| } | |||||
| void* juce_createStandardMouseCursor (MouseCursor::StandardCursorType type) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSCursor* c = 0; | |||||
| switch (type) | |||||
| { | |||||
| case MouseCursor::NormalCursor: | |||||
| c = [NSCursor arrowCursor]; | |||||
| break; | |||||
| case MouseCursor::NoCursor: | |||||
| { | |||||
| Image blank (Image::ARGB, 8, 8, true); | |||||
| return juce_createMouseCursorFromImage (blank, 0, 0); | |||||
| } | |||||
| case MouseCursor::DraggingHandCursor: | |||||
| c = [NSCursor openHandCursor]; | |||||
| break; | |||||
| case MouseCursor::CopyingCursor: | |||||
| return juce_cursorFromWebKitFile ("copyCursor.png", 0, 0); | |||||
| case MouseCursor::WaitCursor: | |||||
| c = [NSCursor arrowCursor]; // avoid this on the mac, let the OS provide the beachball | |||||
| break; | |||||
| //return juce_cursorFromWebKitFile ("waitCursor.png", 0.5f, 0.5f); | |||||
| case MouseCursor::IBeamCursor: | |||||
| c = [NSCursor IBeamCursor]; | |||||
| break; | |||||
| case MouseCursor::PointingHandCursor: | |||||
| c = [NSCursor pointingHandCursor]; | |||||
| break; | |||||
| case MouseCursor::LeftRightResizeCursor: | |||||
| c = [NSCursor resizeLeftRightCursor]; | |||||
| break; | |||||
| case MouseCursor::LeftEdgeResizeCursor: | |||||
| c = [NSCursor resizeLeftCursor]; | |||||
| break; | |||||
| case MouseCursor::RightEdgeResizeCursor: | |||||
| c = [NSCursor resizeRightCursor]; | |||||
| break; | |||||
| case MouseCursor::UpDownResizeCursor: | |||||
| case MouseCursor::TopEdgeResizeCursor: | |||||
| case MouseCursor::BottomEdgeResizeCursor: | |||||
| return juce_cursorFromWebKitFile ("northSouthResizeCursor.png", 0.5f, 0.5f); | |||||
| case MouseCursor::TopLeftCornerResizeCursor: | |||||
| case MouseCursor::BottomRightCornerResizeCursor: | |||||
| return juce_cursorFromWebKitFile ("northWestSouthEastResizeCursor.png", 0.5f, 0.5f); | |||||
| case MouseCursor::TopRightCornerResizeCursor: | |||||
| case MouseCursor::BottomLeftCornerResizeCursor: | |||||
| return juce_cursorFromWebKitFile ("northEastSouthWestResizeCursor.png", 0.5f, 0.5f); | |||||
| case MouseCursor::UpDownLeftRightResizeCursor: | |||||
| return juce_cursorFromWebKitFile ("moveCursor.png", 0.5f, 0.5f); | |||||
| case MouseCursor::CrosshairCursor: | |||||
| c = [NSCursor crosshairCursor]; | |||||
| break; | |||||
| } | |||||
| [c retain]; | |||||
| return (void*) c; | |||||
| } | |||||
| void juce_deleteMouseCursor (void* const cursorHandle, const bool isStandard) throw() | |||||
| { | |||||
| NSCursor* c = (NSCursor*) cursorHandle; | |||||
| [c release]; | |||||
| } | |||||
| void MouseCursor::showInAllWindows() const throw() | |||||
| { | |||||
| showInWindow (0); | |||||
| } | |||||
| void MouseCursor::showInWindow (ComponentPeer*) const throw() | |||||
| { | |||||
| NSCursor* const c = (NSCursor*) getHandle(); | |||||
| [c set]; | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,149 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| class NSViewComponentInternal : public ComponentMovementWatcher | |||||
| { | |||||
| Component* const owner; | |||||
| NSViewComponentPeer* currentPeer; | |||||
| bool wasShowing; | |||||
| public: | |||||
| NSView* view; | |||||
| //============================================================================== | |||||
| NSViewComponentInternal (NSView* view_, Component* const owner_) | |||||
| : ComponentMovementWatcher (owner_), | |||||
| owner (owner_), | |||||
| wasShowing (false), | |||||
| currentPeer (0), | |||||
| view (view_) | |||||
| { | |||||
| [view retain]; | |||||
| if (owner_->isShowing()) | |||||
| componentPeerChanged(); | |||||
| } | |||||
| ~NSViewComponentInternal() | |||||
| { | |||||
| [view removeFromSuperview]; | |||||
| [view release]; | |||||
| } | |||||
| //============================================================================== | |||||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) | |||||
| { | |||||
| Component* const topComp = owner->getTopLevelComponent(); | |||||
| if (topComp->getPeer() != 0) | |||||
| { | |||||
| int x = 0, y = 0; | |||||
| owner->relativePositionToOtherComponent (topComp, x, y); | |||||
| NSRect r; | |||||
| r.origin.x = (float) x; | |||||
| r.origin.y = (float) y; | |||||
| r.size.width = (float) owner->getWidth(); | |||||
| r.size.height = (float) owner->getHeight(); | |||||
| r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height); | |||||
| [view setFrame: r]; | |||||
| } | |||||
| } | |||||
| void componentPeerChanged() | |||||
| { | |||||
| NSViewComponentPeer* const peer = dynamic_cast <NSViewComponentPeer*> (owner->getPeer()); | |||||
| if (currentPeer != peer) | |||||
| { | |||||
| [view removeFromSuperview]; | |||||
| currentPeer = peer; | |||||
| if (peer != 0) | |||||
| { | |||||
| [peer->view addSubview: view]; | |||||
| componentMovedOrResized (false, false); | |||||
| } | |||||
| } | |||||
| [view setHidden: ! owner->isShowing()]; | |||||
| } | |||||
| void componentVisibilityChanged (Component&) | |||||
| { | |||||
| componentPeerChanged(); | |||||
| } | |||||
| juce_UseDebuggingNewOperator | |||||
| private: | |||||
| NSViewComponentInternal (const NSViewComponentInternal&); | |||||
| const NSViewComponentInternal& operator= (const NSViewComponentInternal&); | |||||
| }; | |||||
| //============================================================================== | |||||
| NSViewComponent::NSViewComponent() | |||||
| : info (0) | |||||
| { | |||||
| } | |||||
| NSViewComponent::~NSViewComponent() | |||||
| { | |||||
| delete info; | |||||
| } | |||||
| void NSViewComponent::setView (void* view) | |||||
| { | |||||
| if (view != getView()) | |||||
| { | |||||
| deleteAndZero (info); | |||||
| if (view != 0) | |||||
| info = new NSViewComponentInternal ((NSView*) view, this); | |||||
| } | |||||
| } | |||||
| void* NSViewComponent::getView() const | |||||
| { | |||||
| return info == 0 ? 0 : info->view; | |||||
| } | |||||
| void NSViewComponent::paint (Graphics& g) | |||||
| { | |||||
| } | |||||
| #endif | |||||
| @@ -1,236 +1,236 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| #include <sys/stat.h> | |||||
| #include <sys/dir.h> | |||||
| #include <fcntl.h> | |||||
| // As well as being for the mac, this file is included by the linux build. | |||||
| #if ! JUCE_MAC | |||||
| #include <sys/wait.h> | |||||
| #include <errno.h> | |||||
| #include <unistd.h> | |||||
| #endif | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/io/files/juce_File.h" | |||||
| #include "../../../src/juce_core/io/files/juce_NamedPipe.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| //============================================================================== | |||||
| struct NamedPipeInternal | |||||
| { | |||||
| String pipeInName, pipeOutName; | |||||
| int pipeIn, pipeOut; | |||||
| bool volatile createdPipe, blocked, stopReadOperation; | |||||
| static void signalHandler (int) {} | |||||
| }; | |||||
| void NamedPipe::cancelPendingReads() | |||||
| { | |||||
| while (internal != 0 && ((NamedPipeInternal*) internal)->blocked) | |||||
| { | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| intern->stopReadOperation = true; | |||||
| char buffer [1] = { 0 }; | |||||
| ::write (intern->pipeIn, buffer, 1); | |||||
| int timeout = 2000; | |||||
| while (intern->blocked && --timeout >= 0) | |||||
| Thread::sleep (2); | |||||
| intern->stopReadOperation = false; | |||||
| } | |||||
| } | |||||
| void NamedPipe::close() | |||||
| { | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| if (intern != 0) | |||||
| { | |||||
| internal = 0; | |||||
| if (intern->pipeIn != -1) | |||||
| ::close (intern->pipeIn); | |||||
| if (intern->pipeOut != -1) | |||||
| ::close (intern->pipeOut); | |||||
| if (intern->createdPipe) | |||||
| { | |||||
| unlink (intern->pipeInName); | |||||
| unlink (intern->pipeOutName); | |||||
| } | |||||
| delete intern; | |||||
| } | |||||
| } | |||||
| bool NamedPipe::openInternal (const String& pipeName, const bool createPipe) | |||||
| { | |||||
| close(); | |||||
| NamedPipeInternal* const intern = new NamedPipeInternal(); | |||||
| internal = intern; | |||||
| intern->createdPipe = createPipe; | |||||
| intern->blocked = false; | |||||
| intern->stopReadOperation = false; | |||||
| signal (SIGPIPE, NamedPipeInternal::signalHandler); | |||||
| siginterrupt (SIGPIPE, 1); | |||||
| const String pipePath (T("/tmp/") + File::createLegalFileName (pipeName)); | |||||
| intern->pipeInName = pipePath + T("_in"); | |||||
| intern->pipeOutName = pipePath + T("_out"); | |||||
| intern->pipeIn = -1; | |||||
| intern->pipeOut = -1; | |||||
| if (createPipe) | |||||
| { | |||||
| if ((mkfifo (intern->pipeInName, 0666) && errno != EEXIST) | |||||
| || (mkfifo (intern->pipeOutName, 0666) && errno != EEXIST)) | |||||
| { | |||||
| delete intern; | |||||
| internal = 0; | |||||
| return false; | |||||
| } | |||||
| } | |||||
| return true; | |||||
| } | |||||
| int NamedPipe::read (void* destBuffer, int maxBytesToRead, int /*timeOutMilliseconds*/) | |||||
| { | |||||
| int bytesRead = -1; | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| if (intern != 0) | |||||
| { | |||||
| intern->blocked = true; | |||||
| if (intern->pipeIn == -1) | |||||
| { | |||||
| if (intern->createdPipe) | |||||
| intern->pipeIn = ::open (intern->pipeInName, O_RDWR); | |||||
| else | |||||
| intern->pipeIn = ::open (intern->pipeOutName, O_RDWR); | |||||
| if (intern->pipeIn == -1) | |||||
| { | |||||
| intern->blocked = false; | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| bytesRead = 0; | |||||
| char* p = (char*) destBuffer; | |||||
| while (bytesRead < maxBytesToRead) | |||||
| { | |||||
| const int bytesThisTime = maxBytesToRead - bytesRead; | |||||
| const int numRead = ::read (intern->pipeIn, p, bytesThisTime); | |||||
| if (numRead <= 0 || intern->stopReadOperation) | |||||
| { | |||||
| bytesRead = -1; | |||||
| break; | |||||
| } | |||||
| bytesRead += numRead; | |||||
| p += bytesRead; | |||||
| } | |||||
| intern->blocked = false; | |||||
| } | |||||
| return bytesRead; | |||||
| } | |||||
| int NamedPipe::write (const void* sourceBuffer, int numBytesToWrite, int timeOutMilliseconds) | |||||
| { | |||||
| int bytesWritten = -1; | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| if (intern != 0) | |||||
| { | |||||
| if (intern->pipeOut == -1) | |||||
| { | |||||
| if (intern->createdPipe) | |||||
| intern->pipeOut = ::open (intern->pipeOutName, O_WRONLY); | |||||
| else | |||||
| intern->pipeOut = ::open (intern->pipeInName, O_WRONLY); | |||||
| if (intern->pipeOut == -1) | |||||
| { | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| const char* p = (const char*) sourceBuffer; | |||||
| bytesWritten = 0; | |||||
| const uint32 timeOutTime = Time::getMillisecondCounter() + timeOutMilliseconds; | |||||
| while (bytesWritten < numBytesToWrite | |||||
| && (timeOutMilliseconds < 0 || Time::getMillisecondCounter() < timeOutTime)) | |||||
| { | |||||
| const int bytesThisTime = numBytesToWrite - bytesWritten; | |||||
| const int numWritten = ::write (intern->pipeOut, p, bytesThisTime); | |||||
| if (numWritten <= 0) | |||||
| { | |||||
| bytesWritten = -1; | |||||
| break; | |||||
| } | |||||
| bytesWritten += numWritten; | |||||
| p += bytesWritten; | |||||
| } | |||||
| } | |||||
| return bytesWritten; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| #include <sys/stat.h> | |||||
| #include <sys/dir.h> | |||||
| #include <fcntl.h> | |||||
| // As well as being for the mac, this file is included by the linux build. | |||||
| #if ! JUCE_MAC | |||||
| #include <sys/wait.h> | |||||
| #include <errno.h> | |||||
| #include <unistd.h> | |||||
| #endif | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/io/files/juce_File.h" | |||||
| #include "../../../src/juce_core/io/files/juce_NamedPipe.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| //============================================================================== | |||||
| struct NamedPipeInternal | |||||
| { | |||||
| String pipeInName, pipeOutName; | |||||
| int pipeIn, pipeOut; | |||||
| bool volatile createdPipe, blocked, stopReadOperation; | |||||
| static void signalHandler (int) {} | |||||
| }; | |||||
| void NamedPipe::cancelPendingReads() | |||||
| { | |||||
| while (internal != 0 && ((NamedPipeInternal*) internal)->blocked) | |||||
| { | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| intern->stopReadOperation = true; | |||||
| char buffer [1] = { 0 }; | |||||
| ::write (intern->pipeIn, buffer, 1); | |||||
| int timeout = 2000; | |||||
| while (intern->blocked && --timeout >= 0) | |||||
| Thread::sleep (2); | |||||
| intern->stopReadOperation = false; | |||||
| } | |||||
| } | |||||
| void NamedPipe::close() | |||||
| { | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| if (intern != 0) | |||||
| { | |||||
| internal = 0; | |||||
| if (intern->pipeIn != -1) | |||||
| ::close (intern->pipeIn); | |||||
| if (intern->pipeOut != -1) | |||||
| ::close (intern->pipeOut); | |||||
| if (intern->createdPipe) | |||||
| { | |||||
| unlink (intern->pipeInName); | |||||
| unlink (intern->pipeOutName); | |||||
| } | |||||
| delete intern; | |||||
| } | |||||
| } | |||||
| bool NamedPipe::openInternal (const String& pipeName, const bool createPipe) | |||||
| { | |||||
| close(); | |||||
| NamedPipeInternal* const intern = new NamedPipeInternal(); | |||||
| internal = intern; | |||||
| intern->createdPipe = createPipe; | |||||
| intern->blocked = false; | |||||
| intern->stopReadOperation = false; | |||||
| signal (SIGPIPE, NamedPipeInternal::signalHandler); | |||||
| siginterrupt (SIGPIPE, 1); | |||||
| const String pipePath (T("/tmp/") + File::createLegalFileName (pipeName)); | |||||
| intern->pipeInName = pipePath + T("_in"); | |||||
| intern->pipeOutName = pipePath + T("_out"); | |||||
| intern->pipeIn = -1; | |||||
| intern->pipeOut = -1; | |||||
| if (createPipe) | |||||
| { | |||||
| if ((mkfifo (intern->pipeInName, 0666) && errno != EEXIST) | |||||
| || (mkfifo (intern->pipeOutName, 0666) && errno != EEXIST)) | |||||
| { | |||||
| delete intern; | |||||
| internal = 0; | |||||
| return false; | |||||
| } | |||||
| } | |||||
| return true; | |||||
| } | |||||
| int NamedPipe::read (void* destBuffer, int maxBytesToRead, int /*timeOutMilliseconds*/) | |||||
| { | |||||
| int bytesRead = -1; | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| if (intern != 0) | |||||
| { | |||||
| intern->blocked = true; | |||||
| if (intern->pipeIn == -1) | |||||
| { | |||||
| if (intern->createdPipe) | |||||
| intern->pipeIn = ::open (intern->pipeInName, O_RDWR); | |||||
| else | |||||
| intern->pipeIn = ::open (intern->pipeOutName, O_RDWR); | |||||
| if (intern->pipeIn == -1) | |||||
| { | |||||
| intern->blocked = false; | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| bytesRead = 0; | |||||
| char* p = (char*) destBuffer; | |||||
| while (bytesRead < maxBytesToRead) | |||||
| { | |||||
| const int bytesThisTime = maxBytesToRead - bytesRead; | |||||
| const int numRead = ::read (intern->pipeIn, p, bytesThisTime); | |||||
| if (numRead <= 0 || intern->stopReadOperation) | |||||
| { | |||||
| bytesRead = -1; | |||||
| break; | |||||
| } | |||||
| bytesRead += numRead; | |||||
| p += bytesRead; | |||||
| } | |||||
| intern->blocked = false; | |||||
| } | |||||
| return bytesRead; | |||||
| } | |||||
| int NamedPipe::write (const void* sourceBuffer, int numBytesToWrite, int timeOutMilliseconds) | |||||
| { | |||||
| int bytesWritten = -1; | |||||
| NamedPipeInternal* const intern = (NamedPipeInternal*) internal; | |||||
| if (intern != 0) | |||||
| { | |||||
| if (intern->pipeOut == -1) | |||||
| { | |||||
| if (intern->createdPipe) | |||||
| intern->pipeOut = ::open (intern->pipeOutName, O_WRONLY); | |||||
| else | |||||
| intern->pipeOut = ::open (intern->pipeInName, O_WRONLY); | |||||
| if (intern->pipeOut == -1) | |||||
| { | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| const char* p = (const char*) sourceBuffer; | |||||
| bytesWritten = 0; | |||||
| const uint32 timeOutTime = Time::getMillisecondCounter() + timeOutMilliseconds; | |||||
| while (bytesWritten < numBytesToWrite | |||||
| && (timeOutMilliseconds < 0 || Time::getMillisecondCounter() < timeOutTime)) | |||||
| { | |||||
| const int bytesThisTime = numBytesToWrite - bytesWritten; | |||||
| const int numWritten = ::write (intern->pipeOut, p, bytesThisTime); | |||||
| if (numWritten <= 0) | |||||
| { | |||||
| bytesWritten = -1; | |||||
| break; | |||||
| } | |||||
| bytesWritten += numWritten; | |||||
| p += bytesWritten; | |||||
| } | |||||
| } | |||||
| return bytesWritten; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| @@ -0,0 +1,111 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| /* | |||||
| This file wraps together all the mac-specific code, so that | |||||
| we can include all the native headers just once, and compile all our | |||||
| platform-specific stuff in one big lump, keeping it out of the way of | |||||
| the rest of the codebase. | |||||
| */ | |||||
| #include "juce_mac_NativeIncludes.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| #include "../../../src/juce_core/basics/juce_Singleton.h" | |||||
| #include "../../../src/juce_core/basics/juce_Random.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #include "../../../src/juce_core/threads/juce_Process.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_core/threads/juce_InterProcessLock.h" | |||||
| #include "../../../src/juce_core/io/files/juce_FileInputStream.h" | |||||
| #include "../../../src/juce_core/io/network/juce_URL.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_core/text/juce_LocalisedStrings.h" | |||||
| #include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h" | |||||
| #include "../../../src/juce_appframework/application/juce_Application.h" | |||||
| #include "../../../src/juce_appframework/application/juce_SystemClipboard.h" | |||||
| #include "../../../src/juce_appframework/events/juce_MessageManager.h" | |||||
| #include "../../../src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h" | |||||
| #include "../../../src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.h" | |||||
| #include "../../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h" | |||||
| #include "../../../src/juce_appframework/gui/components/juce_Desktop.h" | |||||
| #include "../../../src/juce_appframework/gui/components/menus/juce_MenuBarModel.h" | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.h" | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h" | |||||
| #include "../../../src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.h" | |||||
| #include "../../../src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h" | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_NSViewComponent.h" | |||||
| #include "../../../src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.h" | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h" | |||||
| #include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h" | |||||
| #include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h" | |||||
| #include "../../../src/juce_appframework/audio/audio_sources/juce_AudioSource.h" | |||||
| #include "../../../src/juce_appframework/audio/dsp/juce_AudioDataConverters.h" | |||||
| #include "../../../src/juce_appframework/audio/devices/juce_AudioIODeviceType.h" | |||||
| #include "../../../src/juce_appframework/audio/devices/juce_MidiOutput.h" | |||||
| #include "../../../src/juce_appframework/audio/devices/juce_MidiInput.h" | |||||
| #undef Point | |||||
| //============================================================================== | |||||
| #define JUCE_INCLUDED_FILE 1 | |||||
| // Now include the actual code files.. | |||||
| #include "juce_mac_Strings.mm" | |||||
| #include "juce_mac_SystemStats.mm" | |||||
| #include "juce_mac_Network.mm" | |||||
| #include "juce_mac_Threads.mm" | |||||
| #include "juce_posix_SharedCode.h" | |||||
| #include "juce_mac_Files.mm" | |||||
| #include "juce_mac_MiscUtilities.mm" | |||||
| #include "juce_mac_Debugging.mm" | |||||
| #if ! JUCE_ONLY_BUILD_CORE_LIBRARY | |||||
| #include "juce_mac_NSViewComponentPeer.mm" | |||||
| #include "juce_mac_MouseCursor.mm" | |||||
| #include "juce_mac_NSViewComponent.mm" | |||||
| #include "juce_mac_AppleRemote.mm" | |||||
| #include "juce_mac_OpenGLComponent.mm" | |||||
| #include "juce_mac_MainMenu.mm" | |||||
| #include "juce_mac_FileChooser.mm" | |||||
| #include "juce_mac_QuickTimeMovieComponent.mm" | |||||
| #include "juce_mac_AudioCDBurner.mm" | |||||
| #include "juce_mac_Fonts.mm" | |||||
| #include "juce_mac_MessageManager.mm" | |||||
| #include "juce_mac_WebBrowserComponent.mm" | |||||
| #include "juce_mac_CoreAudio.cpp" | |||||
| #include "juce_mac_CoreMidi.cpp" | |||||
| #endif | |||||
| END_JUCE_NAMESPACE | |||||
| @@ -64,4 +64,4 @@ static NSString* juceStringToNS (const JUCE_NAMESPACE::String& s) | |||||
| } | } | ||||
| #endif | |||||
| #endif // __JUCE_MAC_NATIVEHEADERS_JUCEHEADER__ | |||||
| @@ -0,0 +1,73 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #ifndef __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__ | |||||
| #define __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__ | |||||
| /* | |||||
| This file wraps together all the mac-specific code, so that | |||||
| we can include all the native headers just once, and compile all our | |||||
| platform-specific stuff in one big lump, keeping it out of the way of | |||||
| the rest of the codebase. | |||||
| */ | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| #import <Cocoa/Cocoa.h> | |||||
| #import <CoreAudio/HostTime.h> | |||||
| #import <CoreAudio/AudioHardware.h> | |||||
| #import <CoreMIDI/MIDIServices.h> | |||||
| #import <QTKit/QTKit.h> | |||||
| #import <WebKit/WebKit.h> | |||||
| #import <DiscRecording/DiscRecording.h> | |||||
| #import <ApplicationServices/ApplicationServices.h> | |||||
| #import <IOKit/IOKitLib.h> | |||||
| #import <IOKit/IOCFPlugIn.h> | |||||
| #import <IOKit/hid/IOHIDLib.h> | |||||
| #import <IOKit/hid/IOHIDKeys.h> | |||||
| #import <IOKit/network/IOEthernetInterface.h> | |||||
| #import <IOKit/network/IONetworkInterface.h> | |||||
| #import <IOKit/network/IOEthernetController.h> | |||||
| #import <IOKit/pwr_mgt/IOPMLib.h> | |||||
| #include <sys/sysctl.h> | |||||
| #include <sys/stat.h> | |||||
| #include <sys/dir.h> | |||||
| #include <sys/param.h> | |||||
| #include <sys/mount.h> | |||||
| #include <fnmatch.h> | |||||
| #include <utime.h> | |||||
| #if MACOS_10_4_OR_EARLIER | |||||
| #include <GLUT/glut.h> | |||||
| #endif | |||||
| #endif // __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__ | |||||
| @@ -1,469 +1,449 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "juce_mac_NativeHeaders.h" | |||||
| #include <IOKit/IOKitLib.h> | |||||
| #include <IOKit/network/IOEthernetInterface.h> | |||||
| #include <IOKit/network/IONetworkInterface.h> | |||||
| #include <IOKit/network/IOEthernetController.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/text/juce_String.h" | |||||
| #include "../../../src/juce_core/basics/juce_Time.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #include "../../../src/juce_core/basics/juce_Logger.h" | |||||
| #include "../../../src/juce_core/threads/juce_ScopedLock.h" | |||||
| #include "../../../src/juce_core/threads/juce_WaitableEvent.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_core/containers/juce_MemoryBlock.h" | |||||
| #include "../../../src/juce_core/text/juce_StringArray.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_core/io/network/juce_URL.h" | |||||
| //#include "juce_mac_HTTPStream.h" | |||||
| //============================================================================== | |||||
| static bool GetEthernetIterator (io_iterator_t* matchingServices) throw() | |||||
| { | |||||
| mach_port_t masterPort; | |||||
| if (IOMasterPort (MACH_PORT_NULL, &masterPort) == KERN_SUCCESS) | |||||
| { | |||||
| CFMutableDictionaryRef dict = IOServiceMatching (kIOEthernetInterfaceClass); | |||||
| if (dict != 0) | |||||
| { | |||||
| CFMutableDictionaryRef propDict = CFDictionaryCreateMutable (kCFAllocatorDefault, | |||||
| 0, | |||||
| &kCFTypeDictionaryKeyCallBacks, | |||||
| &kCFTypeDictionaryValueCallBacks); | |||||
| if (propDict != 0) | |||||
| { | |||||
| CFDictionarySetValue (propDict, CFSTR (kIOPrimaryInterface), kCFBooleanTrue); | |||||
| CFDictionarySetValue (dict, CFSTR (kIOPropertyMatchKey), propDict); | |||||
| CFRelease (propDict); | |||||
| } | |||||
| } | |||||
| return IOServiceGetMatchingServices (masterPort, dict, matchingServices) == KERN_SUCCESS; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw() | |||||
| { | |||||
| int numResults = 0; | |||||
| io_iterator_t it; | |||||
| if (GetEthernetIterator (&it)) | |||||
| { | |||||
| io_object_t i; | |||||
| while ((i = IOIteratorNext (it)) != 0) | |||||
| { | |||||
| io_object_t controller; | |||||
| if (IORegistryEntryGetParentEntry (i, kIOServicePlane, &controller) == KERN_SUCCESS) | |||||
| { | |||||
| CFTypeRef data = IORegistryEntryCreateCFProperty (controller, | |||||
| CFSTR (kIOMACAddress), | |||||
| kCFAllocatorDefault, | |||||
| 0); | |||||
| if (data != 0) | |||||
| { | |||||
| UInt8 addr [kIOEthernetAddressSize]; | |||||
| zeromem (addr, sizeof (addr)); | |||||
| CFDataGetBytes ((CFDataRef) data, CFRangeMake (0, sizeof (addr)), addr); | |||||
| CFRelease (data); | |||||
| int64 a = 0; | |||||
| for (int i = 6; --i >= 0;) | |||||
| a = (a << 8) | addr[i]; | |||||
| if (! littleEndian) | |||||
| a = (int64) swapByteOrder ((uint64) a); | |||||
| if (numResults < maxNum) | |||||
| { | |||||
| *addresses++ = a; | |||||
| ++numResults; | |||||
| } | |||||
| } | |||||
| IOObjectRelease (controller); | |||||
| } | |||||
| IOObjectRelease (i); | |||||
| } | |||||
| IOObjectRelease (it); | |||||
| } | |||||
| return numResults; | |||||
| } | |||||
| //============================================================================== | |||||
| bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAddress, | |||||
| const String& emailSubject, | |||||
| const String& bodyText, | |||||
| const StringArray& filesToAttach) | |||||
| { | |||||
| const AutoPool pool; | |||||
| String script; | |||||
| script << "tell application \"Mail\"\r\n" | |||||
| "set newMessage to make new outgoing message with properties {subject:\"" | |||||
| << emailSubject.replace (T("\""), T("\\\"")) | |||||
| << "\", content:\"" | |||||
| << bodyText.replace (T("\""), T("\\\"")) | |||||
| << "\" & return & return}\r\n" | |||||
| "tell newMessage\r\n" | |||||
| "set visible to true\r\n" | |||||
| "set sender to \"sdfsdfsdfewf\"\r\n" | |||||
| "make new to recipient at end of to recipients with properties {address:\"" | |||||
| << targetEmailAddress | |||||
| << "\"}\r\n"; | |||||
| for (int i = 0; i < filesToAttach.size(); ++i) | |||||
| { | |||||
| script << "tell content\r\n" | |||||
| "make new attachment with properties {file name:\"" | |||||
| << filesToAttach[i].replace (T("\""), T("\\\"")) | |||||
| << "\"} at after the last paragraph\r\n" | |||||
| "end tell\r\n"; | |||||
| } | |||||
| script << "end tell\r\n" | |||||
| "end tell\r\n"; | |||||
| NSAppleScript* s = [[NSAppleScript alloc] | |||||
| initWithSource: [NSString stringWithUTF8String: (const char*) script.toUTF8()]]; | |||||
| NSDictionary* error = 0; | |||||
| const bool ok = [s executeAndReturnError: &error] != nil; | |||||
| [s release]; | |||||
| return ok; | |||||
| } | |||||
| //============================================================================== | |||||
| END_JUCE_NAMESPACE | |||||
| using namespace JUCE_NAMESPACE; | |||||
| //============================================================================== | |||||
| @interface JuceURLConnection : NSObject | |||||
| { | |||||
| NSURLRequest* request; | |||||
| NSURLConnection* connection; | |||||
| NSMutableData* data; | |||||
| Thread* runLoopThread; | |||||
| bool initialised, hasFailed, hasFinished; | |||||
| int position; | |||||
| NSLock* dataLock; | |||||
| } | |||||
| - (JuceURLConnection*) initWithRequest: (NSURLRequest*) req withCallback: (URL::OpenStreamProgressCallback*) callback withContext: (void*) context; | |||||
| - (void) dealloc; | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response; | |||||
| - (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error; | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data; | |||||
| - (void) connectionDidFinishLoading: (NSURLConnection*) connection; | |||||
| - (BOOL) isOpen; | |||||
| - (int) read: (char*) dest numBytes: (int) num; | |||||
| - (int) readPosition; | |||||
| - (void) stop; | |||||
| - (void) createConnection; | |||||
| @end | |||||
| class JuceURLConnectionMessageThread : public Thread | |||||
| { | |||||
| JuceURLConnection* owner; | |||||
| public: | |||||
| JuceURLConnectionMessageThread (JuceURLConnection* owner_) | |||||
| : Thread (T("http connection")), | |||||
| owner (owner_) | |||||
| { | |||||
| startThread(); | |||||
| } | |||||
| ~JuceURLConnectionMessageThread() | |||||
| { | |||||
| stopThread (5000); | |||||
| } | |||||
| void run() | |||||
| { | |||||
| AutoPool pool; | |||||
| [owner createConnection]; | |||||
| while (! threadShouldExit()) | |||||
| { | |||||
| AutoPool pool; | |||||
| [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]]; | |||||
| } | |||||
| } | |||||
| }; | |||||
| @implementation JuceURLConnection | |||||
| - (JuceURLConnection*) initWithRequest: (NSURLRequest*) req | |||||
| withCallback: (URL::OpenStreamProgressCallback*) callback | |||||
| withContext: (void*) context; | |||||
| { | |||||
| [super init]; | |||||
| request = req; | |||||
| [request retain]; | |||||
| data = [[NSMutableData data] retain]; | |||||
| dataLock = [[NSLock alloc] init]; | |||||
| connection = 0; | |||||
| initialised = false; | |||||
| hasFailed = false; | |||||
| hasFinished = false; | |||||
| runLoopThread = new JuceURLConnectionMessageThread (self); | |||||
| while (runLoopThread->isThreadRunning() && ! initialised) | |||||
| { | |||||
| if (callback != 0) | |||||
| callback (context, -1, [[request HTTPBody] length]); | |||||
| Thread::sleep (1); | |||||
| } | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| [self stop]; | |||||
| delete runLoopThread; | |||||
| [connection release]; | |||||
| [data release]; | |||||
| [dataLock release]; | |||||
| [request release]; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (void) createConnection | |||||
| { | |||||
| connection = [[NSURLConnection alloc] initWithRequest: request | |||||
| delegate: self]; | |||||
| if (connection == nil) | |||||
| runLoopThread->signalThreadShouldExit(); | |||||
| } | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response | |||||
| { | |||||
| [dataLock lock]; | |||||
| [data setLength: 0]; | |||||
| [dataLock unlock]; | |||||
| initialised = true; | |||||
| } | |||||
| - (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error | |||||
| { | |||||
| NSLog ([error description]); | |||||
| hasFailed = true; | |||||
| initialised = true; | |||||
| runLoopThread->signalThreadShouldExit(); | |||||
| } | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) newData | |||||
| { | |||||
| [dataLock lock]; | |||||
| [data appendData: newData]; | |||||
| [dataLock unlock]; | |||||
| initialised = true; | |||||
| } | |||||
| - (void) connectionDidFinishLoading: (NSURLConnection*) connection | |||||
| { | |||||
| hasFinished = true; | |||||
| initialised = true; | |||||
| runLoopThread->signalThreadShouldExit(); | |||||
| } | |||||
| - (BOOL) isOpen | |||||
| { | |||||
| return connection != 0 && ! hasFailed; | |||||
| } | |||||
| - (int) readPosition | |||||
| { | |||||
| return position; | |||||
| } | |||||
| - (int) read: (char*) dest numBytes: (int) numNeeded | |||||
| { | |||||
| int numDone = 0; | |||||
| while (numNeeded > 0) | |||||
| { | |||||
| int available = jmin (numNeeded, [data length]); | |||||
| if (available > 0) | |||||
| { | |||||
| [dataLock lock]; | |||||
| [data getBytes: dest length: available]; | |||||
| [data replaceBytesInRange: NSMakeRange (0, available) withBytes: nil length: 0]; | |||||
| [dataLock unlock]; | |||||
| numDone += available; | |||||
| numNeeded -= available; | |||||
| dest += available; | |||||
| } | |||||
| else | |||||
| { | |||||
| if (hasFailed || hasFinished) | |||||
| break; | |||||
| Thread::sleep (1); | |||||
| } | |||||
| } | |||||
| position += numDone; | |||||
| return numDone; | |||||
| } | |||||
| - (void) stop | |||||
| { | |||||
| [connection cancel]; | |||||
| runLoopThread->stopThread (5000); | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| bool juce_isOnLine() | |||||
| { | |||||
| return true; | |||||
| } | |||||
| void* juce_openInternetFile (const String& url, | |||||
| const String& headers, | |||||
| const MemoryBlock& postData, | |||||
| const bool isPost, | |||||
| URL::OpenStreamProgressCallback* callback, | |||||
| void* callbackContext, | |||||
| int timeOutMs) | |||||
| { | |||||
| AutoPool pool; | |||||
| NSMutableURLRequest* req = [NSMutableURLRequest | |||||
| requestWithURL: [NSURL URLWithString: juceStringToNS (url)] | |||||
| cachePolicy: NSURLRequestUseProtocolCachePolicy | |||||
| timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)]; | |||||
| if (req == nil) | |||||
| return 0; | |||||
| [req setHTTPMethod: isPost ? @"POST" : @"GET"]; | |||||
| //[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; | |||||
| StringArray headerLines; | |||||
| headerLines.addLines (headers); | |||||
| headerLines.removeEmptyStrings (true); | |||||
| for (int i = 0; i < headerLines.size(); ++i) | |||||
| { | |||||
| const String key (headerLines[i].upToFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| const String value (headerLines[i].fromFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| if (key.isNotEmpty() && value.isNotEmpty()) | |||||
| [req addValue: juceStringToNS (value) forHTTPHeaderField: juceStringToNS (key)]; | |||||
| } | |||||
| if (isPost && postData.getSize() > 0) | |||||
| { | |||||
| [req setHTTPBody: [NSData dataWithBytes: postData.getData() | |||||
| length: postData.getSize()]]; | |||||
| } | |||||
| JuceURLConnection* const s = [[JuceURLConnection alloc] initWithRequest: req | |||||
| withCallback: callback | |||||
| withContext: callbackContext]; | |||||
| if ([s isOpen]) | |||||
| return s; | |||||
| [s release]; | |||||
| return 0; | |||||
| } | |||||
| void juce_closeInternetFile (void* handle) | |||||
| { | |||||
| JuceURLConnection* const s = (JuceURLConnection*) handle; | |||||
| if (s != 0) | |||||
| { | |||||
| AutoPool pool; | |||||
| [s stop]; | |||||
| [s release]; | |||||
| } | |||||
| } | |||||
| int juce_readFromInternetFile (void* handle, void* buffer, int bytesToRead) | |||||
| { | |||||
| JuceURLConnection* const s = (JuceURLConnection*) handle; | |||||
| if (s != 0) | |||||
| { | |||||
| AutoPool pool; | |||||
| return [s read: (char*) buffer numBytes: bytesToRead]; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| int juce_seekInInternetFile (void* handle, int newPosition) | |||||
| { | |||||
| JuceURLConnection* const s = (JuceURLConnection*) handle; | |||||
| if (s != 0) | |||||
| return [s readPosition]; | |||||
| return 0; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| static bool getEthernetIterator (io_iterator_t* matchingServices) throw() | |||||
| { | |||||
| mach_port_t masterPort; | |||||
| if (IOMasterPort (MACH_PORT_NULL, &masterPort) == KERN_SUCCESS) | |||||
| { | |||||
| CFMutableDictionaryRef dict = IOServiceMatching (kIOEthernetInterfaceClass); | |||||
| if (dict != 0) | |||||
| { | |||||
| CFMutableDictionaryRef propDict = CFDictionaryCreateMutable (kCFAllocatorDefault, | |||||
| 0, | |||||
| &kCFTypeDictionaryKeyCallBacks, | |||||
| &kCFTypeDictionaryValueCallBacks); | |||||
| if (propDict != 0) | |||||
| { | |||||
| CFDictionarySetValue (propDict, CFSTR (kIOPrimaryInterface), kCFBooleanTrue); | |||||
| CFDictionarySetValue (dict, CFSTR (kIOPropertyMatchKey), propDict); | |||||
| CFRelease (propDict); | |||||
| } | |||||
| } | |||||
| return IOServiceGetMatchingServices (masterPort, dict, matchingServices) == KERN_SUCCESS; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw() | |||||
| { | |||||
| int numResults = 0; | |||||
| io_iterator_t it; | |||||
| if (getEthernetIterator (&it)) | |||||
| { | |||||
| io_object_t i; | |||||
| while ((i = IOIteratorNext (it)) != 0) | |||||
| { | |||||
| io_object_t controller; | |||||
| if (IORegistryEntryGetParentEntry (i, kIOServicePlane, &controller) == KERN_SUCCESS) | |||||
| { | |||||
| CFTypeRef data = IORegistryEntryCreateCFProperty (controller, | |||||
| CFSTR (kIOMACAddress), | |||||
| kCFAllocatorDefault, | |||||
| 0); | |||||
| if (data != 0) | |||||
| { | |||||
| UInt8 addr [kIOEthernetAddressSize]; | |||||
| zeromem (addr, sizeof (addr)); | |||||
| CFDataGetBytes ((CFDataRef) data, CFRangeMake (0, sizeof (addr)), addr); | |||||
| CFRelease (data); | |||||
| int64 a = 0; | |||||
| for (int i = 6; --i >= 0;) | |||||
| a = (a << 8) | addr[i]; | |||||
| if (! littleEndian) | |||||
| a = (int64) swapByteOrder ((uint64) a); | |||||
| if (numResults < maxNum) | |||||
| { | |||||
| *addresses++ = a; | |||||
| ++numResults; | |||||
| } | |||||
| } | |||||
| IOObjectRelease (controller); | |||||
| } | |||||
| IOObjectRelease (i); | |||||
| } | |||||
| IOObjectRelease (it); | |||||
| } | |||||
| return numResults; | |||||
| } | |||||
| //============================================================================== | |||||
| bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAddress, | |||||
| const String& emailSubject, | |||||
| const String& bodyText, | |||||
| const StringArray& filesToAttach) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| String script; | |||||
| script << "tell application \"Mail\"\r\n" | |||||
| "set newMessage to make new outgoing message with properties {subject:\"" | |||||
| << emailSubject.replace (T("\""), T("\\\"")) | |||||
| << "\", content:\"" | |||||
| << bodyText.replace (T("\""), T("\\\"")) | |||||
| << "\" & return & return}\r\n" | |||||
| "tell newMessage\r\n" | |||||
| "set visible to true\r\n" | |||||
| "set sender to \"sdfsdfsdfewf\"\r\n" | |||||
| "make new to recipient at end of to recipients with properties {address:\"" | |||||
| << targetEmailAddress | |||||
| << "\"}\r\n"; | |||||
| for (int i = 0; i < filesToAttach.size(); ++i) | |||||
| { | |||||
| script << "tell content\r\n" | |||||
| "make new attachment with properties {file name:\"" | |||||
| << filesToAttach[i].replace (T("\""), T("\\\"")) | |||||
| << "\"} at after the last paragraph\r\n" | |||||
| "end tell\r\n"; | |||||
| } | |||||
| script << "end tell\r\n" | |||||
| "end tell\r\n"; | |||||
| NSAppleScript* s = [[NSAppleScript alloc] | |||||
| initWithSource: juceStringToNS (script)]; | |||||
| NSDictionary* error = 0; | |||||
| const bool ok = [s executeAndReturnError: &error] != nil; | |||||
| [s release]; | |||||
| return ok; | |||||
| } | |||||
| //============================================================================== | |||||
| END_JUCE_NAMESPACE | |||||
| using namespace JUCE_NAMESPACE; | |||||
| //============================================================================== | |||||
| @interface JuceURLConnection : NSObject | |||||
| { | |||||
| NSURLRequest* request; | |||||
| NSURLConnection* connection; | |||||
| NSMutableData* data; | |||||
| Thread* runLoopThread; | |||||
| bool initialised, hasFailed, hasFinished; | |||||
| int position; | |||||
| NSLock* dataLock; | |||||
| } | |||||
| - (JuceURLConnection*) initWithRequest: (NSURLRequest*) req withCallback: (URL::OpenStreamProgressCallback*) callback withContext: (void*) context; | |||||
| - (void) dealloc; | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response; | |||||
| - (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error; | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data; | |||||
| - (void) connectionDidFinishLoading: (NSURLConnection*) connection; | |||||
| - (BOOL) isOpen; | |||||
| - (int) read: (char*) dest numBytes: (int) num; | |||||
| - (int) readPosition; | |||||
| - (void) stop; | |||||
| - (void) createConnection; | |||||
| @end | |||||
| class JuceURLConnectionMessageThread : public Thread | |||||
| { | |||||
| JuceURLConnection* owner; | |||||
| public: | |||||
| JuceURLConnectionMessageThread (JuceURLConnection* owner_) | |||||
| : Thread (T("http connection")), | |||||
| owner (owner_) | |||||
| { | |||||
| startThread(); | |||||
| } | |||||
| ~JuceURLConnectionMessageThread() | |||||
| { | |||||
| stopThread (10000); | |||||
| } | |||||
| void run() | |||||
| { | |||||
| [owner createConnection]; | |||||
| while (! threadShouldExit()) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]]; | |||||
| } | |||||
| } | |||||
| }; | |||||
| @implementation JuceURLConnection | |||||
| - (JuceURLConnection*) initWithRequest: (NSURLRequest*) req | |||||
| withCallback: (URL::OpenStreamProgressCallback*) callback | |||||
| withContext: (void*) context; | |||||
| { | |||||
| [super init]; | |||||
| request = req; | |||||
| [request retain]; | |||||
| data = [[NSMutableData data] retain]; | |||||
| dataLock = [[NSLock alloc] init]; | |||||
| connection = 0; | |||||
| initialised = false; | |||||
| hasFailed = false; | |||||
| hasFinished = false; | |||||
| runLoopThread = new JuceURLConnectionMessageThread (self); | |||||
| while (runLoopThread->isThreadRunning() && ! initialised) | |||||
| { | |||||
| if (callback != 0) | |||||
| callback (context, -1, [[request HTTPBody] length]); | |||||
| Thread::sleep (1); | |||||
| } | |||||
| return self; | |||||
| } | |||||
| - (void) dealloc | |||||
| { | |||||
| [self stop]; | |||||
| delete runLoopThread; | |||||
| [connection release]; | |||||
| [data release]; | |||||
| [dataLock release]; | |||||
| [request release]; | |||||
| [super dealloc]; | |||||
| } | |||||
| - (void) createConnection | |||||
| { | |||||
| connection = [[NSURLConnection alloc] initWithRequest: request | |||||
| delegate: self]; | |||||
| if (connection == nil) | |||||
| runLoopThread->signalThreadShouldExit(); | |||||
| } | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response | |||||
| { | |||||
| [dataLock lock]; | |||||
| [data setLength: 0]; | |||||
| [dataLock unlock]; | |||||
| initialised = true; | |||||
| } | |||||
| - (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error | |||||
| { | |||||
| NSLog ([error description]); | |||||
| hasFailed = true; | |||||
| initialised = true; | |||||
| runLoopThread->signalThreadShouldExit(); | |||||
| } | |||||
| - (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) newData | |||||
| { | |||||
| [dataLock lock]; | |||||
| [data appendData: newData]; | |||||
| [dataLock unlock]; | |||||
| initialised = true; | |||||
| } | |||||
| - (void) connectionDidFinishLoading: (NSURLConnection*) connection | |||||
| { | |||||
| hasFinished = true; | |||||
| initialised = true; | |||||
| runLoopThread->signalThreadShouldExit(); | |||||
| } | |||||
| - (BOOL) isOpen | |||||
| { | |||||
| return connection != 0 && ! hasFailed; | |||||
| } | |||||
| - (int) readPosition | |||||
| { | |||||
| return position; | |||||
| } | |||||
| - (int) read: (char*) dest numBytes: (int) numNeeded | |||||
| { | |||||
| int numDone = 0; | |||||
| while (numNeeded > 0) | |||||
| { | |||||
| int available = jmin (numNeeded, [data length]); | |||||
| if (available > 0) | |||||
| { | |||||
| [dataLock lock]; | |||||
| [data getBytes: dest length: available]; | |||||
| [data replaceBytesInRange: NSMakeRange (0, available) withBytes: nil length: 0]; | |||||
| [dataLock unlock]; | |||||
| numDone += available; | |||||
| numNeeded -= available; | |||||
| dest += available; | |||||
| } | |||||
| else | |||||
| { | |||||
| if (hasFailed || hasFinished) | |||||
| break; | |||||
| Thread::sleep (1); | |||||
| } | |||||
| } | |||||
| position += numDone; | |||||
| return numDone; | |||||
| } | |||||
| - (void) stop | |||||
| { | |||||
| [connection cancel]; | |||||
| runLoopThread->stopThread (10000); | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| bool juce_isOnLine() | |||||
| { | |||||
| return true; | |||||
| } | |||||
| void* juce_openInternetFile (const String& url, | |||||
| const String& headers, | |||||
| const MemoryBlock& postData, | |||||
| const bool isPost, | |||||
| URL::OpenStreamProgressCallback* callback, | |||||
| void* callbackContext, | |||||
| int timeOutMs) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSMutableURLRequest* req = [NSMutableURLRequest | |||||
| requestWithURL: [NSURL URLWithString: juceStringToNS (url)] | |||||
| cachePolicy: NSURLRequestUseProtocolCachePolicy | |||||
| timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)]; | |||||
| if (req == nil) | |||||
| return 0; | |||||
| [req setHTTPMethod: isPost ? @"POST" : @"GET"]; | |||||
| //[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; | |||||
| StringArray headerLines; | |||||
| headerLines.addLines (headers); | |||||
| headerLines.removeEmptyStrings (true); | |||||
| for (int i = 0; i < headerLines.size(); ++i) | |||||
| { | |||||
| const String key (headerLines[i].upToFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| const String value (headerLines[i].fromFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| if (key.isNotEmpty() && value.isNotEmpty()) | |||||
| [req addValue: juceStringToNS (value) forHTTPHeaderField: juceStringToNS (key)]; | |||||
| } | |||||
| if (isPost && postData.getSize() > 0) | |||||
| { | |||||
| [req setHTTPBody: [NSData dataWithBytes: postData.getData() | |||||
| length: postData.getSize()]]; | |||||
| } | |||||
| JuceURLConnection* const s = [[JuceURLConnection alloc] initWithRequest: req | |||||
| withCallback: callback | |||||
| withContext: callbackContext]; | |||||
| if ([s isOpen]) | |||||
| return s; | |||||
| [s release]; | |||||
| return 0; | |||||
| } | |||||
| void juce_closeInternetFile (void* handle) | |||||
| { | |||||
| JuceURLConnection* const s = (JuceURLConnection*) handle; | |||||
| if (s != 0) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| [s stop]; | |||||
| [s release]; | |||||
| } | |||||
| } | |||||
| int juce_readFromInternetFile (void* handle, void* buffer, int bytesToRead) | |||||
| { | |||||
| JuceURLConnection* const s = (JuceURLConnection*) handle; | |||||
| if (s != 0) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| return [s read: (char*) buffer numBytes: bytesToRead]; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| int juce_seekInInternetFile (void* handle, int newPosition) | |||||
| { | |||||
| JuceURLConnection* const s = (JuceURLConnection*) handle; | |||||
| if (s != 0) | |||||
| return [s readPosition]; | |||||
| return 0; | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,235 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_OPENGL | |||||
| //============================================================================== | |||||
| class WindowedGLContext : public OpenGLContext | |||||
| { | |||||
| public: | |||||
| WindowedGLContext (Component* const component, | |||||
| const OpenGLPixelFormat& pixelFormat_, | |||||
| NSOpenGLContext* sharedContext) | |||||
| : renderContext (0), | |||||
| pixelFormat (pixelFormat_) | |||||
| { | |||||
| jassert (component != 0); | |||||
| NSOpenGLPixelFormatAttribute attribs [64]; | |||||
| int n = 0; | |||||
| attribs[n++] = NSOpenGLPFADoubleBuffer; | |||||
| attribs[n++] = NSOpenGLPFAAccelerated; | |||||
| attribs[n++] = NSOpenGLPFAColorSize; | |||||
| attribs[n++] = (NSOpenGLPixelFormatAttribute) jmax (pixelFormat.redBits, | |||||
| pixelFormat.greenBits, | |||||
| pixelFormat.blueBits); | |||||
| attribs[n++] = NSOpenGLPFAAlphaSize; | |||||
| attribs[n++] = (NSOpenGLPixelFormatAttribute) pixelFormat.alphaBits; | |||||
| attribs[n++] = NSOpenGLPFADepthSize; | |||||
| attribs[n++] = (NSOpenGLPixelFormatAttribute) pixelFormat.depthBufferBits; | |||||
| attribs[n++] = NSOpenGLPFAStencilSize; | |||||
| attribs[n++] = (NSOpenGLPixelFormatAttribute) pixelFormat.stencilBufferBits; | |||||
| attribs[n++] = NSOpenGLPFAAccumSize; | |||||
| attribs[n++] = (NSOpenGLPixelFormatAttribute) jmax (pixelFormat.accumulationBufferRedBits, | |||||
| pixelFormat.accumulationBufferGreenBits, | |||||
| pixelFormat.accumulationBufferBlueBits, | |||||
| pixelFormat.accumulationBufferAlphaBits); | |||||
| // xxx not sure how to do fullSceneAntiAliasingNumSamples.. | |||||
| attribs[n++] = NSOpenGLPFASampleBuffers; | |||||
| attribs[n++] = (NSOpenGLPixelFormatAttribute) 1; | |||||
| attribs[n++] = NSOpenGLPFAClosestPolicy; | |||||
| attribs[n++] = NSOpenGLPFANoRecovery; | |||||
| attribs[n++] = (NSOpenGLPixelFormatAttribute) 0; | |||||
| NSOpenGLPixelFormat* format | |||||
| = [[NSOpenGLPixelFormat alloc] initWithAttributes: attribs]; | |||||
| NSOpenGLView* view | |||||
| = [[NSOpenGLView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f) | |||||
| pixelFormat: format]; | |||||
| renderContext = [view openGLContext]; | |||||
| [format release]; | |||||
| viewHolder = new NSViewComponentInternal (view, component); | |||||
| } | |||||
| ~WindowedGLContext() | |||||
| { | |||||
| makeInactive(); | |||||
| [renderContext setView: nil]; | |||||
| delete viewHolder; | |||||
| } | |||||
| bool makeActive() const throw() | |||||
| { | |||||
| jassert (renderContext != 0); | |||||
| [renderContext makeCurrentContext]; | |||||
| return renderContext != 0; | |||||
| } | |||||
| bool makeInactive() const throw() | |||||
| { | |||||
| if (! isActive()) | |||||
| [NSOpenGLContext clearCurrentContext]; | |||||
| return true; | |||||
| } | |||||
| bool isActive() const throw() | |||||
| { | |||||
| return [NSOpenGLContext currentContext] == renderContext; | |||||
| } | |||||
| const OpenGLPixelFormat getPixelFormat() const { return pixelFormat; } | |||||
| void* getRawContext() const throw() { return renderContext; } | |||||
| void updateWindowPosition (int x, int y, int w, int h, int outerWindowHeight) | |||||
| { | |||||
| } | |||||
| void swapBuffers() | |||||
| { | |||||
| glFlush(); | |||||
| [renderContext flushBuffer]; | |||||
| } | |||||
| bool setSwapInterval (const int numFramesPerSwap) | |||||
| { | |||||
| [renderContext setValues: (const GLint*) &numFramesPerSwap | |||||
| forParameter: NSOpenGLCPSwapInterval]; | |||||
| return true; | |||||
| } | |||||
| int getSwapInterval() const | |||||
| { | |||||
| GLint numFrames = 0; | |||||
| [renderContext getValues: &numFrames | |||||
| forParameter: NSOpenGLCPSwapInterval]; | |||||
| return numFrames; | |||||
| } | |||||
| void repaint() | |||||
| { | |||||
| // we need to invalidate the juce view that holds this gl view, to make it | |||||
| // cause a repaint callback | |||||
| NSView* v = (NSView*) viewHolder->view; | |||||
| NSRect r = [v frame]; | |||||
| // bit of a bodge here.. if we only invalidate the area of the gl component, | |||||
| // it's completely covered by the NSOpenGLView, so the OS throws away the | |||||
| // repaint message, thus never causing our paint() callback, and never repainting | |||||
| // the comp. So invalidating just a little bit around the edge helps.. | |||||
| [[v superview] setNeedsDisplayInRect: NSInsetRect (r, -2.0f, -2.0f)]; | |||||
| } | |||||
| void* getNativeWindowHandle() const { return viewHolder->view; } | |||||
| //============================================================================== | |||||
| juce_UseDebuggingNewOperator | |||||
| NSOpenGLContext* renderContext; | |||||
| private: | |||||
| OpenGLPixelFormat pixelFormat; | |||||
| NSViewComponentInternal* viewHolder; | |||||
| //============================================================================== | |||||
| WindowedGLContext (const WindowedGLContext&); | |||||
| const WindowedGLContext& operator= (const WindowedGLContext&); | |||||
| }; | |||||
| //============================================================================== | |||||
| OpenGLContext* OpenGLContext::createContextForWindow (Component* const component, | |||||
| const OpenGLPixelFormat& pixelFormat, | |||||
| const OpenGLContext* const contextToShareWith) | |||||
| { | |||||
| WindowedGLContext* c = new WindowedGLContext (component, pixelFormat, | |||||
| contextToShareWith != 0 ? (NSOpenGLContext*) contextToShareWith->getRawContext() : 0); | |||||
| if (c->renderContext == 0) | |||||
| deleteAndZero (c); | |||||
| return c; | |||||
| } | |||||
| void* OpenGLComponent::getNativeWindowHandle() const | |||||
| { | |||||
| return context != 0 ? ((WindowedGLContext*) context)->getNativeWindowHandle() | |||||
| : 0; | |||||
| } | |||||
| void juce_glViewport (const int w, const int h) | |||||
| { | |||||
| glViewport (0, 0, w, h); | |||||
| } | |||||
| void OpenGLPixelFormat::getAvailablePixelFormats (Component* /*component*/, | |||||
| OwnedArray <OpenGLPixelFormat>& results) | |||||
| { | |||||
| /* GLint attribs [64]; | |||||
| int n = 0; | |||||
| attribs[n++] = AGL_RGBA; | |||||
| attribs[n++] = AGL_DOUBLEBUFFER; | |||||
| attribs[n++] = AGL_ACCELERATED; | |||||
| attribs[n++] = AGL_NO_RECOVERY; | |||||
| attribs[n++] = AGL_NONE; | |||||
| AGLPixelFormat p = aglChoosePixelFormat (0, 0, attribs); | |||||
| while (p != 0) | |||||
| { | |||||
| OpenGLPixelFormat* const pf = new OpenGLPixelFormat(); | |||||
| pf->redBits = getAGLAttribute (p, AGL_RED_SIZE); | |||||
| pf->greenBits = getAGLAttribute (p, AGL_GREEN_SIZE); | |||||
| pf->blueBits = getAGLAttribute (p, AGL_BLUE_SIZE); | |||||
| pf->alphaBits = getAGLAttribute (p, AGL_ALPHA_SIZE); | |||||
| pf->depthBufferBits = getAGLAttribute (p, AGL_DEPTH_SIZE); | |||||
| pf->stencilBufferBits = getAGLAttribute (p, AGL_STENCIL_SIZE); | |||||
| pf->accumulationBufferRedBits = getAGLAttribute (p, AGL_ACCUM_RED_SIZE); | |||||
| pf->accumulationBufferGreenBits = getAGLAttribute (p, AGL_ACCUM_GREEN_SIZE); | |||||
| pf->accumulationBufferBlueBits = getAGLAttribute (p, AGL_ACCUM_BLUE_SIZE); | |||||
| pf->accumulationBufferAlphaBits = getAGLAttribute (p, AGL_ACCUM_ALPHA_SIZE); | |||||
| results.add (pf); | |||||
| p = aglNextPixelFormat (p); | |||||
| }*/ | |||||
| //jassertfalse //xxx can't see how you do this in cocoa! | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,294 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_QUICKTIME | |||||
| #define theMovie ((QTMovie*) movie) | |||||
| //============================================================================== | |||||
| QuickTimeMovieComponent::QuickTimeMovieComponent() | |||||
| : movie (0) | |||||
| { | |||||
| setOpaque (true); | |||||
| setVisible (true); | |||||
| QTMovieView* view = [[QTMovieView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)]; | |||||
| setView (view); | |||||
| } | |||||
| QuickTimeMovieComponent::~QuickTimeMovieComponent() | |||||
| { | |||||
| closeMovie(); | |||||
| setView (0); | |||||
| } | |||||
| bool QuickTimeMovieComponent::isQuickTimeAvailable() throw() | |||||
| { | |||||
| return true; | |||||
| } | |||||
| bool QuickTimeMovieComponent::loadMovie (InputStream* movieStream, | |||||
| const bool controllerVisible) | |||||
| { | |||||
| closeMovie(); | |||||
| if (getPeer() == 0) | |||||
| { | |||||
| // To open a movie, this component must be visible inside a functioning window, so that | |||||
| // the QT control can be assigned to the window. | |||||
| jassertfalse | |||||
| return false; | |||||
| } | |||||
| FileInputStream* const fin = dynamic_cast <FileInputStream*> (movieStream); | |||||
| if (fin != 0) | |||||
| { | |||||
| movieFile = fin->getFile(); | |||||
| movie = [QTMovie movieWithFile: juceStringToNS (movieFile.getFullPathName()) | |||||
| error: nil]; | |||||
| } | |||||
| else | |||||
| { | |||||
| MemoryBlock temp; | |||||
| movieStream->readIntoMemoryBlock (temp); | |||||
| movie = [QTMovie movieWithData: [NSData dataWithBytes: temp.getData() | |||||
| length: temp.getSize()] | |||||
| error: nil]; | |||||
| } | |||||
| [theMovie retain]; | |||||
| QTMovieView* view = (QTMovieView*) getView(); | |||||
| [view setMovie: theMovie]; | |||||
| [view setControllerVisible: controllerVisible]; | |||||
| setLooping (looping); | |||||
| return movie != nil; | |||||
| } | |||||
| void QuickTimeMovieComponent::closeMovie() | |||||
| { | |||||
| stop(); | |||||
| QTMovieView* view = (QTMovieView*) getView(); | |||||
| [view setMovie: nil]; | |||||
| [theMovie release]; | |||||
| movie = 0; | |||||
| movieFile = File::nonexistent; | |||||
| } | |||||
| bool QuickTimeMovieComponent::isMovieOpen() const | |||||
| { | |||||
| return movie != nil; | |||||
| } | |||||
| const File QuickTimeMovieComponent::getCurrentMovieFile() const | |||||
| { | |||||
| return movieFile; | |||||
| } | |||||
| void QuickTimeMovieComponent::play() | |||||
| { | |||||
| [theMovie play]; | |||||
| } | |||||
| void QuickTimeMovieComponent::stop() | |||||
| { | |||||
| [theMovie stop]; | |||||
| } | |||||
| bool QuickTimeMovieComponent::isPlaying() const | |||||
| { | |||||
| return movie != 0 && [theMovie rate] != 0; | |||||
| } | |||||
| void QuickTimeMovieComponent::setPosition (const double seconds) | |||||
| { | |||||
| if (movie != 0) | |||||
| { | |||||
| QTTime t; | |||||
| t.timeValue = (uint64) (100000.0 * seconds); | |||||
| t.timeScale = 100000; | |||||
| t.flags = 0; | |||||
| [theMovie setCurrentTime: t]; | |||||
| } | |||||
| } | |||||
| double QuickTimeMovieComponent::getPosition() const | |||||
| { | |||||
| if (movie == 0) | |||||
| return 0.0; | |||||
| QTTime t = [theMovie currentTime]; | |||||
| return t.timeValue / (double) t.timeScale; | |||||
| } | |||||
| void QuickTimeMovieComponent::setSpeed (const float newSpeed) | |||||
| { | |||||
| [theMovie setRate: newSpeed]; | |||||
| } | |||||
| double QuickTimeMovieComponent::getMovieDuration() const | |||||
| { | |||||
| if (movie == 0) | |||||
| return 0.0; | |||||
| QTTime t = [theMovie duration]; | |||||
| return t.timeValue / (double) t.timeScale; | |||||
| } | |||||
| void QuickTimeMovieComponent::setLooping (const bool shouldLoop) | |||||
| { | |||||
| looping = shouldLoop; | |||||
| [theMovie setAttribute: [NSNumber numberWithBool: shouldLoop] | |||||
| forKey: QTMovieLoopsAttribute]; | |||||
| } | |||||
| bool QuickTimeMovieComponent::isLooping() const | |||||
| { | |||||
| return looping; | |||||
| } | |||||
| void QuickTimeMovieComponent::setMovieVolume (const float newVolume) | |||||
| { | |||||
| [theMovie setVolume: newVolume]; | |||||
| } | |||||
| float QuickTimeMovieComponent::getMovieVolume() const | |||||
| { | |||||
| return movie != 0 ? [theMovie volume] : 0.0f; | |||||
| } | |||||
| void QuickTimeMovieComponent::getMovieNormalSize (int& width, int& height) const | |||||
| { | |||||
| width = 0; | |||||
| height = 0; | |||||
| if (movie != 0) | |||||
| { | |||||
| NSSize s = [[theMovie attributeForKey: QTMovieNaturalSizeAttribute] sizeValue]; | |||||
| width = s.width; | |||||
| height = s.height; | |||||
| } | |||||
| } | |||||
| void QuickTimeMovieComponent::paint (Graphics& g) | |||||
| { | |||||
| if (movie == 0) | |||||
| g.fillAll (Colours::black); | |||||
| } | |||||
| bool QuickTimeMovieComponent::isControllerVisible() const | |||||
| { | |||||
| return controllerVisible; | |||||
| } | |||||
| //============================================================================== | |||||
| bool QuickTimeMovieComponent::loadMovie (const File& movieFile_, | |||||
| const bool isControllerVisible) | |||||
| { | |||||
| const bool ok = loadMovie ((InputStream*) movieFile_.createInputStream(), isControllerVisible); | |||||
| movieFile = movieFile_; | |||||
| return ok; | |||||
| } | |||||
| void QuickTimeMovieComponent::goToStart() | |||||
| { | |||||
| setPosition (0.0); | |||||
| } | |||||
| void QuickTimeMovieComponent::setBoundsWithCorrectAspectRatio (const Rectangle& spaceToFitWithin, | |||||
| const RectanglePlacement& placement) | |||||
| { | |||||
| int normalWidth, normalHeight; | |||||
| getMovieNormalSize (normalWidth, normalHeight); | |||||
| if (normalWidth > 0 && normalHeight > 0 && ! spaceToFitWithin.isEmpty()) | |||||
| { | |||||
| double x = 0.0, y = 0.0, w = normalWidth, h = normalHeight; | |||||
| placement.applyTo (x, y, w, h, | |||||
| spaceToFitWithin.getX(), spaceToFitWithin.getY(), | |||||
| spaceToFitWithin.getWidth(), spaceToFitWithin.getHeight()); | |||||
| if (w > 0 && h > 0) | |||||
| { | |||||
| setBounds (roundDoubleToInt (x), roundDoubleToInt (y), | |||||
| roundDoubleToInt (w), roundDoubleToInt (h)); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| setBounds (spaceToFitWithin); | |||||
| } | |||||
| } | |||||
| //============================================================================== | |||||
| #if ! (JUCE_MAC && JUCE_64BIT) | |||||
| bool juce_OpenQuickTimeMovieFromStream (InputStream* movieStream, Movie& result, Handle& dataHandle) | |||||
| { | |||||
| if (movieStream == 0) | |||||
| return false; | |||||
| QTMovie* movie = nil; | |||||
| FileInputStream* const fin = dynamic_cast <FileInputStream*> (movieStream); | |||||
| if (fin != 0) | |||||
| { | |||||
| movie = [QTMovie movieWithFile: juceStringToNS (fin->getFile().getFullPathName()) | |||||
| error: nil]; | |||||
| } | |||||
| else | |||||
| { | |||||
| MemoryBlock temp; | |||||
| movieStream->readIntoMemoryBlock (temp); | |||||
| movie = [QTMovie movieWithData: [NSData dataWithBytes: temp.getData() | |||||
| length: temp.getSize()] | |||||
| error: nil]; | |||||
| } | |||||
| if (movie != nil) | |||||
| result = [movie quickTimeMovie]; | |||||
| return movie != nil; | |||||
| } | |||||
| #endif | |||||
| #endif | |||||
| @@ -0,0 +1,186 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| static const String nsStringToJuce (NSString* s) | |||||
| { | |||||
| return String::fromUTF8 ((uint8*) [s UTF8String]); | |||||
| } | |||||
| static NSString* juceStringToNS (const String& s) | |||||
| { | |||||
| return [NSString stringWithUTF8String: (const char*) s.toUTF8()]; | |||||
| } | |||||
| //============================================================================== | |||||
| static const String convertUTF16ToString (const UniChar* utf16) | |||||
| { | |||||
| String s; | |||||
| while (*utf16 != 0) | |||||
| s += (juce_wchar) *utf16++; | |||||
| return s; | |||||
| } | |||||
| const String PlatformUtilities::cfStringToJuceString (CFStringRef cfString) | |||||
| { | |||||
| String result; | |||||
| if (cfString != 0) | |||||
| { | |||||
| #if JUCE_STRINGS_ARE_UNICODE | |||||
| CFRange range = { 0, CFStringGetLength (cfString) }; | |||||
| UniChar* const u = (UniChar*) juce_malloc (sizeof (UniChar) * (range.length + 1)); | |||||
| CFStringGetCharacters (cfString, range, u); | |||||
| u[range.length] = 0; | |||||
| result = convertUTF16ToString (u); | |||||
| juce_free (u); | |||||
| #else | |||||
| const int len = CFStringGetLength (cfString); | |||||
| char* buffer = (char*) juce_malloc (len + 1); | |||||
| CFStringGetCString (cfString, buffer, len + 1, CFStringGetSystemEncoding()); | |||||
| result = buffer; | |||||
| juce_free (buffer); | |||||
| #endif | |||||
| } | |||||
| return result; | |||||
| } | |||||
| CFStringRef PlatformUtilities::juceStringToCFString (const String& s) | |||||
| { | |||||
| #if JUCE_STRINGS_ARE_UNICODE | |||||
| const int len = s.length(); | |||||
| const juce_wchar* t = (const juce_wchar*) s; | |||||
| UniChar* temp = (UniChar*) juce_malloc (sizeof (UniChar) * len + 4); | |||||
| for (int i = 0; i <= len; ++i) | |||||
| temp[i] = t[i]; | |||||
| CFStringRef result = CFStringCreateWithCharacters (kCFAllocatorDefault, temp, len); | |||||
| juce_free (temp); | |||||
| return result; | |||||
| #else | |||||
| return CFStringCreateWithCString (kCFAllocatorDefault, | |||||
| (const char*) s, | |||||
| CFStringGetSystemEncoding()); | |||||
| #endif | |||||
| } | |||||
| const String PlatformUtilities::convertToPrecomposedUnicode (const String& s) | |||||
| { | |||||
| UnicodeMapping map; | |||||
| map.unicodeEncoding = CreateTextEncoding (kTextEncodingUnicodeDefault, | |||||
| kUnicodeNoSubset, | |||||
| kTextEncodingDefaultFormat); | |||||
| map.otherEncoding = CreateTextEncoding (kTextEncodingUnicodeDefault, | |||||
| kUnicodeCanonicalCompVariant, | |||||
| kTextEncodingDefaultFormat); | |||||
| map.mappingVersion = kUnicodeUseLatestMapping; | |||||
| UnicodeToTextInfo conversionInfo = 0; | |||||
| String result; | |||||
| if (CreateUnicodeToTextInfo (&map, &conversionInfo) == noErr) | |||||
| { | |||||
| const int len = s.length(); | |||||
| UniChar* const tempIn = (UniChar*) juce_calloc (sizeof (UniChar) * len + 4); | |||||
| UniChar* const tempOut = (UniChar*) juce_calloc (sizeof (UniChar) * len + 4); | |||||
| for (int i = 0; i <= len; ++i) | |||||
| tempIn[i] = s[i]; | |||||
| ByteCount bytesRead = 0; | |||||
| ByteCount outputBufferSize = 0; | |||||
| if (ConvertFromUnicodeToText (conversionInfo, | |||||
| len * sizeof (UniChar), tempIn, | |||||
| kUnicodeDefaultDirectionMask, | |||||
| 0, 0, 0, 0, | |||||
| len * sizeof (UniChar), &bytesRead, | |||||
| &outputBufferSize, tempOut) == noErr) | |||||
| { | |||||
| result.preallocateStorage (bytesRead / sizeof (UniChar) + 2); | |||||
| tchar* t = const_cast <tchar*> ((const tchar*) result); | |||||
| int i; | |||||
| for (i = 0; i < bytesRead / sizeof (UniChar); ++i) | |||||
| t[i] = (tchar) tempOut[i]; | |||||
| t[i] = 0; | |||||
| } | |||||
| juce_free (tempIn); | |||||
| juce_free (tempOut); | |||||
| DisposeUnicodeToTextInfo (&conversionInfo); | |||||
| } | |||||
| return result; | |||||
| } | |||||
| //============================================================================== | |||||
| void SystemClipboard::copyTextToClipboard (const String& text) throw() | |||||
| { | |||||
| [[NSPasteboard generalPasteboard] declareTypes: [NSArray arrayWithObject: NSStringPboardType] | |||||
| owner: nil]; | |||||
| [[NSPasteboard generalPasteboard] setString: juceStringToNS (text) | |||||
| forType: NSStringPboardType]; | |||||
| } | |||||
| const String SystemClipboard::getTextFromClipboard() throw() | |||||
| { | |||||
| NSString* text = [[NSPasteboard generalPasteboard] stringForType: NSStringPboardType]; | |||||
| return text == 0 ? String::empty | |||||
| : nsStringToJuce (text); | |||||
| } | |||||
| #endif | |||||
| @@ -29,18 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "juce_mac_NativeHeaders.h" | |||||
| #include <AppKit/AppKit.h> | |||||
| #include <CoreAudio/HostTime.h> | |||||
| #include <ctime> | |||||
| #include <sys/resource.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/application/juce_Application.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #include "../../../src/juce_core/basics/juce_Time.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| static int64 highResTimerFrequency; | static int64 highResTimerFrequency; | ||||
| @@ -90,29 +81,74 @@ static CPUFlags cpuFlags; | |||||
| #endif | #endif | ||||
| //============================================================================== | //============================================================================== | ||||
| void Logger::outputDebugString (const String& text) throw() | |||||
| void SystemStats::initialiseStats() throw() | |||||
| { | { | ||||
| String withLineFeed (text + T("\n")); | |||||
| const char* const utf8 = withLineFeed.toUTF8(); | |||||
| fwrite (utf8, strlen (utf8), 1, stdout); | |||||
| } | |||||
| static bool initialised = false; | |||||
| void Logger::outputDebugPrintf (const tchar* format, ...) throw() | |||||
| { | |||||
| String text; | |||||
| va_list args; | |||||
| va_start (args, format); | |||||
| text.vprintf(format, args); | |||||
| outputDebugString (text); | |||||
| if (! initialised) | |||||
| { | |||||
| initialised = true; | |||||
| NSApplicationLoad(); | |||||
| [NSApplication sharedApplication]; | |||||
| #if JUCE_INTEL | |||||
| { | |||||
| unsigned int familyModel, extFeatures; | |||||
| const unsigned int features = getCPUIDWord (familyModel, extFeatures); | |||||
| cpuFlags.hasMMX = ((features & (1 << 23)) != 0); | |||||
| cpuFlags.hasSSE = ((features & (1 << 25)) != 0); | |||||
| cpuFlags.hasSSE2 = ((features & (1 << 26)) != 0); | |||||
| cpuFlags.has3DNow = ((extFeatures & (1 << 31)) != 0); | |||||
| } | |||||
| #endif | |||||
| highResTimerFrequency = (int64) AudioGetHostClockFrequency(); | |||||
| String s (SystemStats::getJUCEVersion()); | |||||
| rlimit lim; | |||||
| getrlimit (RLIMIT_NOFILE, &lim); | |||||
| lim.rlim_cur = lim.rlim_max = RLIM_INFINITY; | |||||
| setrlimit (RLIMIT_NOFILE, &lim); | |||||
| } | |||||
| } | } | ||||
| int SystemStats::getMemorySizeInMegabytes() throw() | |||||
| static const String getCpuInfo (const char* key, bool lastOne = false) throw() | |||||
| { | { | ||||
| long bytes; | |||||
| if (Gestalt (gestaltPhysicalRAMSize, &bytes) == noErr) | |||||
| return (int) (((unsigned long) bytes) / (1024 * 1024)); | |||||
| String info; | |||||
| char buf [256]; | |||||
| return 0; | |||||
| FILE* f = fopen ("/proc/cpuinfo", "r"); | |||||
| while (f != 0 && fgets (buf, sizeof(buf), f)) | |||||
| { | |||||
| if (strncmp (buf, key, strlen (key)) == 0) | |||||
| { | |||||
| char* p = buf; | |||||
| while (*p && *p != '\n') | |||||
| ++p; | |||||
| if (*p != 0) | |||||
| *p = 0; | |||||
| p = buf; | |||||
| while (*p != 0 && *p != ':') | |||||
| ++p; | |||||
| if (*p != 0 && *(p + 1) != 0) | |||||
| info = p + 2; | |||||
| if (! lastOne) | |||||
| break; | |||||
| } | |||||
| } | |||||
| fclose (f); | |||||
| return info; | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -136,39 +172,17 @@ bool SystemStats::isOperatingSystem64Bit() throw() | |||||
| #endif | #endif | ||||
| } | } | ||||
| //============================================================================== | |||||
| void SystemStats::initialiseStats() throw() | |||||
| int SystemStats::getMemorySizeInMegabytes() throw() | |||||
| { | { | ||||
| static bool initialised = false; | |||||
| if (! initialised) | |||||
| { | |||||
| initialised = true; | |||||
| //[NSApplication sharedApplication]; | |||||
| NSApplicationLoad(); | |||||
| #if JUCE_INTEL | |||||
| { | |||||
| unsigned int familyModel, extFeatures; | |||||
| const unsigned int features = getCPUIDWord (familyModel, extFeatures); | |||||
| cpuFlags.hasMMX = ((features & (1 << 23)) != 0); | |||||
| cpuFlags.hasSSE = ((features & (1 << 25)) != 0); | |||||
| cpuFlags.hasSSE2 = ((features & (1 << 26)) != 0); | |||||
| cpuFlags.has3DNow = ((extFeatures & (1 << 31)) != 0); | |||||
| } | |||||
| #if MACOS_10_4_OR_EARLIER | |||||
| long bytes; | |||||
| if (Gestalt (gestaltPhysicalRAMSize, &bytes) == noErr) | |||||
| return (int) (((unsigned long) bytes) / (1024 * 1024)); | |||||
| return 0; | |||||
| #else | |||||
| return (int) ([[NSProcessInfo processInfo] physicalMemory] / (1024 * 1024)); | |||||
| #endif | #endif | ||||
| highResTimerFrequency = (int64) AudioGetHostClockFrequency(); | |||||
| String s (SystemStats::getJUCEVersion()); | |||||
| rlimit lim; | |||||
| getrlimit (RLIMIT_NOFILE, &lim); | |||||
| lim.rlim_cur = lim.rlim_max = RLIM_INFINITY; | |||||
| setrlimit (RLIMIT_NOFILE, &lim); | |||||
| } | |||||
| } | } | ||||
| bool SystemStats::hasMMX() throw() | bool SystemStats::hasMMX() throw() | ||||
| @@ -220,12 +234,20 @@ const String SystemStats::getCpuVendor() throw() | |||||
| int SystemStats::getCpuSpeedInMegaherz() throw() | int SystemStats::getCpuSpeedInMegaherz() throw() | ||||
| { | { | ||||
| #if MACOS_10_4_OR_EARLIER | |||||
| return GetCPUSpeed(); | return GetCPUSpeed(); | ||||
| #else | |||||
| return roundDoubleToInt (getCpuInfo ("cpu MHz").getDoubleValue()); | |||||
| #endif | |||||
| } | } | ||||
| int SystemStats::getNumCpus() throw() | int SystemStats::getNumCpus() throw() | ||||
| { | { | ||||
| #if MACOS_10_4_OR_EARLIER | |||||
| return MPProcessors(); | return MPProcessors(); | ||||
| #else | |||||
| return [[NSProcessInfo processInfo] activeProcessorCount]; | |||||
| #endif | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -272,12 +294,12 @@ bool Time::setSystemTimeToThisTime() const throw() | |||||
| //============================================================================== | //============================================================================== | ||||
| int SystemStats::getPageSize() throw() | int SystemStats::getPageSize() throw() | ||||
| { | { | ||||
| jassertfalse | |||||
| return 512; //xxx | |||||
| return NSPageSize(); | |||||
| } | } | ||||
| void PlatformUtilities::fpuReset() | void PlatformUtilities::fpuReset() | ||||
| { | { | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -1,202 +1,202 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| #include <pthread.h> | |||||
| #include <sched.h> | |||||
| #include <sys/file.h> | |||||
| #include <sys/types.h> | |||||
| #include <sys/sysctl.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/threads/juce_CriticalSection.h" | |||||
| #include "../../../src/juce_core/threads/juce_WaitableEvent.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_core/threads/juce_Process.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_core/io/files/juce_File.h" | |||||
| //============================================================================== | |||||
| /* | |||||
| Note that a lot of methods that you'd expect to find in this file actually | |||||
| live in juce_posix_SharedCode.h! | |||||
| */ | |||||
| //============================================================================== | |||||
| void JUCE_API juce_threadEntryPoint (void*); | |||||
| void* threadEntryProc (void* userData) throw() | |||||
| { | |||||
| juce_threadEntryPoint (userData); | |||||
| return 0; | |||||
| } | |||||
| void* juce_createThread (void* userData) throw() | |||||
| { | |||||
| pthread_t handle = 0; | |||||
| if (pthread_create (&handle, 0, threadEntryProc, userData) == 0) | |||||
| { | |||||
| pthread_detach (handle); | |||||
| return (void*) handle; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| void juce_killThread (void* handle) throw() | |||||
| { | |||||
| if (handle != 0) | |||||
| pthread_cancel ((pthread_t) handle); | |||||
| } | |||||
| void juce_setCurrentThreadName (const String& /*name*/) throw() | |||||
| { | |||||
| } | |||||
| int Thread::getCurrentThreadId() throw() | |||||
| { | |||||
| return (int) pthread_self(); | |||||
| } | |||||
| void juce_setThreadPriority (void* handle, int priority) throw() | |||||
| { | |||||
| if (handle == 0) | |||||
| handle = (void*) pthread_self(); | |||||
| struct sched_param param; | |||||
| int policy; | |||||
| pthread_getschedparam ((pthread_t) handle, &policy, ¶m); | |||||
| param.sched_priority = jlimit (1, 127, 1 + (priority * 126) / 11); | |||||
| pthread_setschedparam ((pthread_t) handle, policy, ¶m); | |||||
| } | |||||
| void Thread::yield() throw() | |||||
| { | |||||
| sched_yield(); | |||||
| } | |||||
| void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) throw() | |||||
| { | |||||
| // xxx | |||||
| jassertfalse | |||||
| } | |||||
| //============================================================================== | |||||
| bool JUCE_CALLTYPE juce_isRunningUnderDebugger() throw() | |||||
| { | |||||
| static char testResult = 0; | |||||
| if (testResult == 0) | |||||
| { | |||||
| struct kinfo_proc info; | |||||
| int m[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() }; | |||||
| size_t sz = sizeof (info); | |||||
| sysctl (m, 4, &info, &sz, 0, 0); | |||||
| testResult = ((info.kp_proc.p_flag & P_TRACED) != 0) ? 1 : -1; | |||||
| } | |||||
| return testResult > 0; | |||||
| } | |||||
| bool JUCE_CALLTYPE Process::isRunningUnderDebugger() throw() | |||||
| { | |||||
| return juce_isRunningUnderDebugger(); | |||||
| } | |||||
| void Process::raisePrivilege() | |||||
| { | |||||
| jassertfalse | |||||
| } | |||||
| void Process::lowerPrivilege() | |||||
| { | |||||
| jassertfalse | |||||
| } | |||||
| void Process::terminate() | |||||
| { | |||||
| exit (0); | |||||
| } | |||||
| void Process::setPriority (ProcessPriority p) | |||||
| { | |||||
| // xxx | |||||
| } | |||||
| void* Process::loadDynamicLibrary (const String& name) | |||||
| { | |||||
| // xxx needs to use bundles | |||||
| FSSpec fs; | |||||
| if (PlatformUtilities::makeFSSpecFromPath (&fs, name)) | |||||
| { | |||||
| CFragConnectionID connID; | |||||
| Ptr mainPtr; | |||||
| Str255 errorMessage; | |||||
| Str63 nm; | |||||
| PlatformUtilities::copyToStr63 (nm, name); | |||||
| const OSErr err = GetDiskFragment (&fs, 0, kCFragGoesToEOF, nm, kReferenceCFrag, &connID, &mainPtr, errorMessage); | |||||
| if (err == noErr) | |||||
| return (void*)connID; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| void Process::freeDynamicLibrary (void* handle) | |||||
| { | |||||
| if (handle != 0) | |||||
| CloseConnection ((CFragConnectionID*)&handle); | |||||
| } | |||||
| void* Process::getProcedureEntryPoint (void* h, const String& procedureName) | |||||
| { | |||||
| if (h != 0) | |||||
| { | |||||
| CFragSymbolClass cl; | |||||
| Ptr ptr; | |||||
| Str255 name; | |||||
| PlatformUtilities::copyToStr255 (name, procedureName); | |||||
| if (FindSymbol ((CFragConnectionID) h, name, &ptr, &cl) == noErr) | |||||
| { | |||||
| return ptr; | |||||
| } | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| #include <pthread.h> | |||||
| #include <sched.h> | |||||
| #include <sys/file.h> | |||||
| #include <sys/types.h> | |||||
| #include <sys/sysctl.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/threads/juce_CriticalSection.h" | |||||
| #include "../../../src/juce_core/threads/juce_WaitableEvent.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_core/threads/juce_Process.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_core/io/files/juce_File.h" | |||||
| //============================================================================== | |||||
| /* | |||||
| Note that a lot of methods that you'd expect to find in this file actually | |||||
| live in juce_posix_SharedCode.h! | |||||
| */ | |||||
| //============================================================================== | |||||
| void JUCE_API juce_threadEntryPoint (void*); | |||||
| void* threadEntryProc (void* userData) throw() | |||||
| { | |||||
| juce_threadEntryPoint (userData); | |||||
| return 0; | |||||
| } | |||||
| void* juce_createThread (void* userData) throw() | |||||
| { | |||||
| pthread_t handle = 0; | |||||
| if (pthread_create (&handle, 0, threadEntryProc, userData) == 0) | |||||
| { | |||||
| pthread_detach (handle); | |||||
| return (void*) handle; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| void juce_killThread (void* handle) throw() | |||||
| { | |||||
| if (handle != 0) | |||||
| pthread_cancel ((pthread_t) handle); | |||||
| } | |||||
| void juce_setCurrentThreadName (const String& /*name*/) throw() | |||||
| { | |||||
| } | |||||
| int Thread::getCurrentThreadId() throw() | |||||
| { | |||||
| return (int) pthread_self(); | |||||
| } | |||||
| void juce_setThreadPriority (void* handle, int priority) throw() | |||||
| { | |||||
| if (handle == 0) | |||||
| handle = (void*) pthread_self(); | |||||
| struct sched_param param; | |||||
| int policy; | |||||
| pthread_getschedparam ((pthread_t) handle, &policy, ¶m); | |||||
| param.sched_priority = jlimit (1, 127, 1 + (priority * 126) / 11); | |||||
| pthread_setschedparam ((pthread_t) handle, policy, ¶m); | |||||
| } | |||||
| void Thread::yield() throw() | |||||
| { | |||||
| sched_yield(); | |||||
| } | |||||
| void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) throw() | |||||
| { | |||||
| // xxx | |||||
| jassertfalse | |||||
| } | |||||
| //============================================================================== | |||||
| bool JUCE_CALLTYPE juce_isRunningUnderDebugger() throw() | |||||
| { | |||||
| static char testResult = 0; | |||||
| if (testResult == 0) | |||||
| { | |||||
| struct kinfo_proc info; | |||||
| int m[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() }; | |||||
| size_t sz = sizeof (info); | |||||
| sysctl (m, 4, &info, &sz, 0, 0); | |||||
| testResult = ((info.kp_proc.p_flag & P_TRACED) != 0) ? 1 : -1; | |||||
| } | |||||
| return testResult > 0; | |||||
| } | |||||
| bool JUCE_CALLTYPE Process::isRunningUnderDebugger() throw() | |||||
| { | |||||
| return juce_isRunningUnderDebugger(); | |||||
| } | |||||
| void Process::raisePrivilege() | |||||
| { | |||||
| jassertfalse | |||||
| } | |||||
| void Process::lowerPrivilege() | |||||
| { | |||||
| jassertfalse | |||||
| } | |||||
| void Process::terminate() | |||||
| { | |||||
| exit (0); | |||||
| } | |||||
| void Process::setPriority (ProcessPriority p) | |||||
| { | |||||
| // xxx | |||||
| } | |||||
| void* Process::loadDynamicLibrary (const String& name) | |||||
| { | |||||
| // xxx needs to use bundles | |||||
| FSSpec fs; | |||||
| if (PlatformUtilities::makeFSSpecFromPath (&fs, name)) | |||||
| { | |||||
| CFragConnectionID connID; | |||||
| Ptr mainPtr; | |||||
| Str255 errorMessage; | |||||
| Str63 nm; | |||||
| PlatformUtilities::copyToStr63 (nm, name); | |||||
| const OSErr err = GetDiskFragment (&fs, 0, kCFragGoesToEOF, nm, kReferenceCFrag, &connID, &mainPtr, errorMessage); | |||||
| if (err == noErr) | |||||
| return (void*)connID; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| void Process::freeDynamicLibrary (void* handle) | |||||
| { | |||||
| if (handle != 0) | |||||
| CloseConnection ((CFragConnectionID*)&handle); | |||||
| } | |||||
| void* Process::getProcedureEntryPoint (void* h, const String& procedureName) | |||||
| { | |||||
| if (h != 0) | |||||
| { | |||||
| CFragSymbolClass cl; | |||||
| Ptr ptr; | |||||
| Str255 name; | |||||
| PlatformUtilities::copyToStr255 (name, procedureName); | |||||
| if (FindSymbol ((CFragConnectionID) h, name, &ptr, &cl) == noErr) | |||||
| { | |||||
| return ptr; | |||||
| } | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| @@ -0,0 +1,129 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #ifdef JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| /* | |||||
| Note that a lot of methods that you'd expect to find in this file actually | |||||
| live in juce_posix_SharedCode.h! | |||||
| */ | |||||
| //============================================================================== | |||||
| void JUCE_API juce_threadEntryPoint (void*); | |||||
| void* threadEntryProc (void* userData) throw() | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| juce_threadEntryPoint (userData); | |||||
| return 0; | |||||
| } | |||||
| void* juce_createThread (void* userData) throw() | |||||
| { | |||||
| pthread_t handle = 0; | |||||
| if (pthread_create (&handle, 0, threadEntryProc, userData) == 0) | |||||
| { | |||||
| pthread_detach (handle); | |||||
| return (void*) handle; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| void juce_killThread (void* handle) throw() | |||||
| { | |||||
| if (handle != 0) | |||||
| pthread_cancel ((pthread_t) handle); | |||||
| } | |||||
| void juce_setCurrentThreadName (const String& /*name*/) throw() | |||||
| { | |||||
| } | |||||
| int64 Thread::getCurrentThreadId() throw() | |||||
| { | |||||
| return (int64) pthread_self(); | |||||
| } | |||||
| void juce_setThreadPriority (void* handle, int priority) throw() | |||||
| { | |||||
| if (handle == 0) | |||||
| handle = (void*) pthread_self(); | |||||
| struct sched_param param; | |||||
| int policy; | |||||
| pthread_getschedparam ((pthread_t) handle, &policy, ¶m); | |||||
| param.sched_priority = jlimit (1, 127, 1 + (priority * 126) / 11); | |||||
| pthread_setschedparam ((pthread_t) handle, policy, ¶m); | |||||
| } | |||||
| void Thread::yield() throw() | |||||
| { | |||||
| sched_yield(); | |||||
| } | |||||
| void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) throw() | |||||
| { | |||||
| // xxx | |||||
| jassertfalse | |||||
| } | |||||
| //============================================================================== | |||||
| bool Process::isForegroundProcess() throw() | |||||
| { | |||||
| return [NSApp isActive]; | |||||
| } | |||||
| void Process::raisePrivilege() | |||||
| { | |||||
| jassertfalse | |||||
| } | |||||
| void Process::lowerPrivilege() | |||||
| { | |||||
| jassertfalse | |||||
| } | |||||
| void Process::terminate() | |||||
| { | |||||
| exit (0); | |||||
| } | |||||
| void Process::setPriority (ProcessPriority p) | |||||
| { | |||||
| // xxx | |||||
| } | |||||
| #endif | |||||
| @@ -1,443 +1,258 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| #include <Cocoa/Cocoa.h> | |||||
| #include <WebKit/WebKit.h> | |||||
| #include <WebKit/HIWebView.h> | |||||
| #include <WebKit/WebPolicyDelegate.h> | |||||
| #include <WebKit/CarbonUtils.h> | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/events/juce_Timer.h" | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h" | |||||
| END_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| @interface DownloadClickDetector : NSObject | |||||
| { | |||||
| JUCE_NAMESPACE::WebBrowserComponent* ownerComponent; | |||||
| } | |||||
| - (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent; | |||||
| - (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation | |||||
| request: (NSURLRequest*) request | |||||
| frame: (WebFrame*) frame | |||||
| decisionListener: (id<WebPolicyDecisionListener>) listener; | |||||
| @end | |||||
| //============================================================================== | |||||
| @implementation DownloadClickDetector | |||||
| - (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent_ | |||||
| { | |||||
| [super init]; | |||||
| ownerComponent = ownerComponent_; | |||||
| return self; | |||||
| } | |||||
| - (void) webView: (WebView*) sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener | |||||
| { | |||||
| NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"]; | |||||
| if (ownerComponent->pageAboutToLoad (JUCE_NAMESPACE::String::fromUTF8 ((const JUCE_NAMESPACE::uint8*) [[url absoluteString] UTF8String]))) | |||||
| [listener use]; | |||||
| else | |||||
| [listener ignore]; | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| class WebBrowserComponentInternal : public Timer | |||||
| { | |||||
| public: | |||||
| WebBrowserComponentInternal (WebBrowserComponent* owner_) | |||||
| : owner (owner_), | |||||
| view (0), | |||||
| webView (0) | |||||
| { | |||||
| HIWebViewCreate (&view); | |||||
| ComponentPeer* const peer = owner_->getPeer(); | |||||
| jassert (peer != 0); | |||||
| if (view != 0 && peer != 0) | |||||
| { | |||||
| WindowRef parentWindow = (WindowRef) peer->getNativeHandle(); | |||||
| WindowAttributes attributes; | |||||
| GetWindowAttributes (parentWindow, &attributes); | |||||
| HIViewRef parentView = 0; | |||||
| if ((attributes & kWindowCompositingAttribute) != 0) | |||||
| { | |||||
| HIViewRef root = HIViewGetRoot (parentWindow); | |||||
| HIViewFindByID (root, kHIViewWindowContentID, &parentView); | |||||
| if (parentView == 0) | |||||
| parentView = root; | |||||
| } | |||||
| else | |||||
| { | |||||
| GetRootControl (parentWindow, (ControlRef*) &parentView); | |||||
| if (parentView == 0) | |||||
| CreateRootControl (parentWindow, (ControlRef*) &parentView); | |||||
| } | |||||
| HIViewAddSubview (parentView, view); | |||||
| updateBounds(); | |||||
| show(); | |||||
| webView = HIWebViewGetWebView (view); | |||||
| clickListener = [[DownloadClickDetector alloc] initWithOwner: owner_]; | |||||
| [webView setPolicyDelegate: clickListener]; | |||||
| } | |||||
| startTimer (500); | |||||
| } | |||||
| ~WebBrowserComponentInternal() | |||||
| { | |||||
| [webView setPolicyDelegate: nil]; | |||||
| [clickListener release]; | |||||
| if (view != 0) | |||||
| CFRelease (view); | |||||
| } | |||||
| // Horrific bodge-workaround for the fact that the webview somehow hangs onto key | |||||
| // focus when you pop up a new window, no matter what that window does to | |||||
| // try to grab focus for itself. This catches such a situation and forces | |||||
| // focus away from the webview, then back to the place it should be.. | |||||
| void timerCallback() | |||||
| { | |||||
| WindowRef viewWindow = HIViewGetWindow (view); | |||||
| WindowRef focusedWindow = GetUserFocusWindow(); | |||||
| if (focusedWindow != viewWindow) | |||||
| { | |||||
| if (HIViewSubtreeContainsFocus (view)) | |||||
| { | |||||
| HIViewAdvanceFocus (HIViewGetRoot (viewWindow), 0); | |||||
| HIViewAdvanceFocus (HIViewGetRoot (focusedWindow), 0); | |||||
| } | |||||
| } | |||||
| } | |||||
| void show() | |||||
| { | |||||
| HIViewSetVisible (view, true); | |||||
| } | |||||
| void hide() | |||||
| { | |||||
| HIViewSetVisible (view, false); | |||||
| } | |||||
| void goToURL (const String& url, | |||||
| const StringArray* headers, | |||||
| const MemoryBlock* postData) | |||||
| { | |||||
| char** headerNamesAsChars = 0; | |||||
| char** headerValuesAsChars = 0; | |||||
| int numHeaders = 0; | |||||
| if (headers != 0) | |||||
| { | |||||
| numHeaders = headers->size(); | |||||
| headerNamesAsChars = (char**) juce_malloc (sizeof (char*) * numHeaders); | |||||
| headerValuesAsChars = (char**) juce_malloc (sizeof (char*) * numHeaders); | |||||
| int i; | |||||
| for (i = 0; i < numHeaders; ++i) | |||||
| { | |||||
| const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| headerNamesAsChars[i] = (char*) juce_calloc (headerName.copyToUTF8 (0)); | |||||
| headerName.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerNamesAsChars[i]); | |||||
| const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| headerValuesAsChars[i] = (char*) juce_calloc (headerValue.copyToUTF8 (0)); | |||||
| headerValue.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerValuesAsChars[i]); | |||||
| } | |||||
| } | |||||
| sendWebViewToURL ((const char*) url.toUTF8(), | |||||
| (const char**) headerNamesAsChars, | |||||
| (const char**) headerValuesAsChars, | |||||
| numHeaders, | |||||
| postData != 0 ? (const char*) postData->getData() : 0, | |||||
| postData != 0 ? postData->getSize() : 0); | |||||
| for (int i = 0; i < numHeaders; ++i) | |||||
| { | |||||
| juce_free (headerNamesAsChars[i]); | |||||
| juce_free (headerValuesAsChars[i]); | |||||
| } | |||||
| juce_free (headerNamesAsChars); | |||||
| juce_free (headerValuesAsChars); | |||||
| } | |||||
| void goBack() | |||||
| { | |||||
| [webView goBack]; | |||||
| } | |||||
| void goForward() | |||||
| { | |||||
| [webView goForward]; | |||||
| } | |||||
| void stop() | |||||
| { | |||||
| [webView stopLoading: nil]; | |||||
| } | |||||
| void updateBounds() | |||||
| { | |||||
| HIRect r; | |||||
| r.origin.x = (float) owner->getScreenX() - owner->getTopLevelComponent()->getScreenX(); | |||||
| r.origin.y = (float) owner->getScreenY() - owner->getTopLevelComponent()->getScreenY(); | |||||
| r.size.width = (float) owner->getWidth(); | |||||
| r.size.height = (float) owner->getHeight(); | |||||
| HIViewSetFrame (view, &r); | |||||
| } | |||||
| private: | |||||
| WebBrowserComponent* const owner; | |||||
| HIViewRef view; | |||||
| WebView* webView; | |||||
| DownloadClickDetector* clickListener; | |||||
| void sendWebViewToURL (const char* utf8URL, | |||||
| const char** headerNames, | |||||
| const char** headerValues, | |||||
| int numHeaders, | |||||
| const char* postData, | |||||
| int postDataSize) | |||||
| { | |||||
| NSMutableURLRequest* r = [NSMutableURLRequest | |||||
| requestWithURL: [NSURL URLWithString: [NSString stringWithUTF8String: utf8URL]] | |||||
| cachePolicy: NSURLRequestUseProtocolCachePolicy | |||||
| timeoutInterval: 30.0]; | |||||
| if (postDataSize > 0) | |||||
| { | |||||
| [ r setHTTPMethod: @"POST"]; | |||||
| [ r setHTTPBody: [NSData dataWithBytes: postData length: postDataSize]]; | |||||
| } | |||||
| int i; | |||||
| for (i = 0; i < numHeaders; ++i) | |||||
| { | |||||
| [ r setValue: [NSString stringWithUTF8String: headerValues[i]] | |||||
| forHTTPHeaderField: [NSString stringWithUTF8String: headerNames[i]]]; | |||||
| } | |||||
| [[webView mainFrame] stopLoading ]; | |||||
| [[webView mainFrame] loadRequest: r]; | |||||
| } | |||||
| WebBrowserComponentInternal (const WebBrowserComponentInternal&); | |||||
| const WebBrowserComponentInternal& operator= (const WebBrowserComponentInternal&); | |||||
| }; | |||||
| //============================================================================== | |||||
| WebBrowserComponent::WebBrowserComponent() | |||||
| : browser (0), | |||||
| associatedWindow (0), | |||||
| blankPageShown (false) | |||||
| { | |||||
| setOpaque (true); | |||||
| } | |||||
| WebBrowserComponent::~WebBrowserComponent() | |||||
| { | |||||
| deleteBrowser(); | |||||
| } | |||||
| //============================================================================== | |||||
| void WebBrowserComponent::goToURL (const String& url, | |||||
| const StringArray* headers, | |||||
| const MemoryBlock* postData) | |||||
| { | |||||
| lastURL = url; | |||||
| lastHeaders.clear(); | |||||
| if (headers != 0) | |||||
| lastHeaders = *headers; | |||||
| lastPostData.setSize (0); | |||||
| if (postData != 0) | |||||
| lastPostData = *postData; | |||||
| blankPageShown = false; | |||||
| if (browser != 0) | |||||
| browser->goToURL (url, headers, postData); | |||||
| } | |||||
| void WebBrowserComponent::stop() | |||||
| { | |||||
| if (browser != 0) | |||||
| browser->stop(); | |||||
| } | |||||
| void WebBrowserComponent::goBack() | |||||
| { | |||||
| lastURL = String::empty; | |||||
| blankPageShown = false; | |||||
| if (browser != 0) | |||||
| browser->goBack(); | |||||
| } | |||||
| void WebBrowserComponent::goForward() | |||||
| { | |||||
| lastURL = String::empty; | |||||
| if (browser != 0) | |||||
| browser->goForward(); | |||||
| } | |||||
| //============================================================================== | |||||
| void WebBrowserComponent::paint (Graphics& g) | |||||
| { | |||||
| if (browser == 0) | |||||
| g.fillAll (Colours::white); | |||||
| } | |||||
| void WebBrowserComponent::checkWindowAssociation() | |||||
| { | |||||
| void* const window = getWindowHandle(); | |||||
| if (window != associatedWindow | |||||
| || (browser == 0 && window != 0)) | |||||
| { | |||||
| associatedWindow = window; | |||||
| deleteBrowser(); | |||||
| createBrowser(); | |||||
| } | |||||
| if (browser != 0) | |||||
| { | |||||
| if (associatedWindow != 0 && isShowing()) | |||||
| { | |||||
| browser->show(); | |||||
| if (blankPageShown) | |||||
| goBack(); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (! blankPageShown) | |||||
| { | |||||
| // when the component becomes invisible, some stuff like flash | |||||
| // carries on playing audio, so we need to force it onto a blank | |||||
| // page to avoid this.. | |||||
| blankPageShown = true; | |||||
| browser->goToURL ("about:blank", 0, 0); | |||||
| } | |||||
| browser->hide(); | |||||
| } | |||||
| } | |||||
| } | |||||
| void WebBrowserComponent::createBrowser() | |||||
| { | |||||
| deleteBrowser(); | |||||
| if (isShowing()) | |||||
| { | |||||
| WebInitForCarbon(); | |||||
| browser = new WebBrowserComponentInternal (this); | |||||
| reloadLastURL(); | |||||
| } | |||||
| } | |||||
| void WebBrowserComponent::deleteBrowser() | |||||
| { | |||||
| deleteAndZero (browser); | |||||
| } | |||||
| void WebBrowserComponent::reloadLastURL() | |||||
| { | |||||
| if (lastURL.isNotEmpty()) | |||||
| { | |||||
| goToURL (lastURL, &lastHeaders, &lastPostData); | |||||
| lastURL = String::empty; | |||||
| } | |||||
| } | |||||
| void WebBrowserComponent::updateBrowserPosition() | |||||
| { | |||||
| if (getPeer() != 0 && browser != 0) | |||||
| browser->updateBounds(); | |||||
| } | |||||
| void WebBrowserComponent::parentHierarchyChanged() | |||||
| { | |||||
| checkWindowAssociation(); | |||||
| } | |||||
| void WebBrowserComponent::moved() | |||||
| { | |||||
| updateBrowserPosition(); | |||||
| } | |||||
| void WebBrowserComponent::resized() | |||||
| { | |||||
| updateBrowserPosition(); | |||||
| } | |||||
| void WebBrowserComponent::visibilityChanged() | |||||
| { | |||||
| checkWindowAssociation(); | |||||
| } | |||||
| bool WebBrowserComponent::pageAboutToLoad (const String& url) | |||||
| { | |||||
| return true; | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_mac_NativeCode.mm, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_WEB_BROWSER | |||||
| //============================================================================== | |||||
| END_JUCE_NAMESPACE | |||||
| @interface DownloadClickDetector : NSObject | |||||
| { | |||||
| JUCE_NAMESPACE::WebBrowserComponent* ownerComponent; | |||||
| } | |||||
| - (DownloadClickDetector*) initWithWebBrowserOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent; | |||||
| - (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation | |||||
| request: (NSURLRequest*) request | |||||
| frame: (WebFrame*) frame | |||||
| decisionListener: (id<WebPolicyDecisionListener>) listener; | |||||
| @end | |||||
| //============================================================================== | |||||
| @implementation DownloadClickDetector | |||||
| - (DownloadClickDetector*) initWithWebBrowserOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent_ | |||||
| { | |||||
| [super init]; | |||||
| ownerComponent = ownerComponent_; | |||||
| return self; | |||||
| } | |||||
| - (void) webView: (WebView*) sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener | |||||
| { | |||||
| NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"]; | |||||
| if (ownerComponent->pageAboutToLoad (JUCE_NAMESPACE::String::fromUTF8 ((const JUCE_NAMESPACE::uint8*) [[url absoluteString] UTF8String]))) | |||||
| [listener use]; | |||||
| else | |||||
| [listener ignore]; | |||||
| } | |||||
| @end | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| class WebBrowserComponentInternal : public NSViewComponent | |||||
| { | |||||
| public: | |||||
| WebBrowserComponentInternal (WebBrowserComponent* owner) | |||||
| { | |||||
| webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f) | |||||
| frameName: @"" | |||||
| groupName: @""]; | |||||
| setView (webView); | |||||
| clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner]; | |||||
| [webView setPolicyDelegate: clickListener]; | |||||
| } | |||||
| ~WebBrowserComponentInternal() | |||||
| { | |||||
| [webView setPolicyDelegate: nil]; | |||||
| [clickListener release]; | |||||
| setView (0); | |||||
| } | |||||
| void goToURL (const String& url, | |||||
| const StringArray* headers, | |||||
| const MemoryBlock* postData) | |||||
| { | |||||
| NSMutableURLRequest* r | |||||
| = [NSMutableURLRequest requestWithURL: [NSURL URLWithString: juceStringToNS (url)] | |||||
| cachePolicy: NSURLRequestUseProtocolCachePolicy | |||||
| timeoutInterval: 30.0]; | |||||
| if (postData != 0 && postData->getSize() > 0) | |||||
| { | |||||
| [r setHTTPMethod: @"POST"]; | |||||
| [r setHTTPBody: [NSData dataWithBytes: postData->getData() | |||||
| length: postData->getSize()]]; | |||||
| } | |||||
| if (headers != 0) | |||||
| { | |||||
| for (int i = 0; i < headers->size(); ++i) | |||||
| { | |||||
| const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim()); | |||||
| [r setValue: juceStringToNS (headerValue) | |||||
| forHTTPHeaderField: juceStringToNS (headerName)]; | |||||
| } | |||||
| } | |||||
| stop(); | |||||
| [[webView mainFrame] loadRequest: r]; | |||||
| } | |||||
| void goBack() | |||||
| { | |||||
| [webView goBack]; | |||||
| } | |||||
| void goForward() | |||||
| { | |||||
| [webView goForward]; | |||||
| } | |||||
| void stop() | |||||
| { | |||||
| [webView stopLoading: nil]; | |||||
| } | |||||
| private: | |||||
| WebView* webView; | |||||
| DownloadClickDetector* clickListener; | |||||
| }; | |||||
| //============================================================================== | |||||
| WebBrowserComponent::WebBrowserComponent() | |||||
| : browser (0), | |||||
| blankPageShown (false) | |||||
| { | |||||
| setOpaque (true); | |||||
| addAndMakeVisible (browser = new WebBrowserComponentInternal (this)); | |||||
| } | |||||
| WebBrowserComponent::~WebBrowserComponent() | |||||
| { | |||||
| deleteAndZero (browser); | |||||
| } | |||||
| //============================================================================== | |||||
| void WebBrowserComponent::goToURL (const String& url, | |||||
| const StringArray* headers, | |||||
| const MemoryBlock* postData) | |||||
| { | |||||
| lastURL = url; | |||||
| lastHeaders.clear(); | |||||
| if (headers != 0) | |||||
| lastHeaders = *headers; | |||||
| lastPostData.setSize (0); | |||||
| if (postData != 0) | |||||
| lastPostData = *postData; | |||||
| blankPageShown = false; | |||||
| browser->goToURL (url, headers, postData); | |||||
| } | |||||
| void WebBrowserComponent::stop() | |||||
| { | |||||
| browser->stop(); | |||||
| } | |||||
| void WebBrowserComponent::goBack() | |||||
| { | |||||
| lastURL = String::empty; | |||||
| blankPageShown = false; | |||||
| browser->goBack(); | |||||
| } | |||||
| void WebBrowserComponent::goForward() | |||||
| { | |||||
| lastURL = String::empty; | |||||
| browser->goForward(); | |||||
| } | |||||
| //============================================================================== | |||||
| void WebBrowserComponent::paint (Graphics& g) | |||||
| { | |||||
| } | |||||
| void WebBrowserComponent::checkWindowAssociation() | |||||
| { | |||||
| // when the component becomes invisible, some stuff like flash | |||||
| // carries on playing audio, so we need to force it onto a blank | |||||
| // page to avoid this, (and send it back when it's made visible again). | |||||
| if (isShowing()) | |||||
| { | |||||
| if (blankPageShown) | |||||
| goBack(); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (! blankPageShown) | |||||
| { | |||||
| blankPageShown = true; | |||||
| browser->goToURL ("about:blank", 0, 0); | |||||
| } | |||||
| } | |||||
| } | |||||
| void WebBrowserComponent::reloadLastURL() | |||||
| { | |||||
| if (lastURL.isNotEmpty()) | |||||
| { | |||||
| goToURL (lastURL, &lastHeaders, &lastPostData); | |||||
| lastURL = String::empty; | |||||
| } | |||||
| } | |||||
| void WebBrowserComponent::parentHierarchyChanged() | |||||
| { | |||||
| checkWindowAssociation(); | |||||
| } | |||||
| void WebBrowserComponent::resized() | |||||
| { | |||||
| browser->setSize (getWidth(), getHeight()); | |||||
| } | |||||
| void WebBrowserComponent::visibilityChanged() | |||||
| { | |||||
| checkWindowAssociation(); | |||||
| } | |||||
| bool WebBrowserComponent::pageAboutToLoad (const String& url) | |||||
| { | |||||
| return true; | |||||
| } | |||||
| #endif | |||||
| @@ -29,55 +29,11 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #undef WINDOWS | |||||
| #if JUCE_ASIO | |||||
| //============================================================================== | |||||
| /* | |||||
| This is very frustrating - we only need to use a handful of definitions from | |||||
| a couple of the header files in Steinberg's ASIO SDK, and it'd be easy to copy | |||||
| about 30 lines of code into this cpp file to create a fully stand-alone ASIO | |||||
| implementation... | |||||
| ..unfortunately that would break Steinberg's license agreement for use of | |||||
| their SDK, so I'm not allowed to do this. | |||||
| This means that anyone who wants to use JUCE's ASIO abilities will have to: | |||||
| 1) Agree to Steinberg's licensing terms and download the ASIO SDK | |||||
| (see www.steinberg.net/Steinberg/Developers.asp). | |||||
| 2) Rebuild the whole of JUCE, setting the global definition JUCE_ASIO (you | |||||
| can un-comment the "#define JUCE_ASIO" line in juce_Config.h | |||||
| if you prefer). Make sure that your header search path will find the | |||||
| iasiodrv.h file that comes with the SDK. (Only about 2-3 of the SDK header | |||||
| files are actually needed - so to simplify things, you could just copy | |||||
| these into your JUCE directory). | |||||
| */ | |||||
| #include "iasiodrv.h" // if you're compiling and this line causes an error because | |||||
| // you don't have the ASIO SDK installed, you can disable ASIO | |||||
| // support by commenting-out the "#define JUCE_ASIO" line in | |||||
| // juce_Config.h | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/audio/devices/juce_AudioIODeviceType.h" | |||||
| #include "../../../src/juce_appframework/audio/devices/juce_AudioDeviceManager.h" | |||||
| #include "../../../src/juce_appframework/gui/components/buttons/juce_TextButton.h" | |||||
| #include "../../../src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.h" | |||||
| #include "../../../src/juce_core/threads/juce_ScopedLock.h" | |||||
| #include "../../../src/juce_core/basics/juce_Time.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_appframework/events/juce_Timer.h" | |||||
| #include "../../../src/juce_appframework/events/juce_MessageManager.h" | |||||
| #include "../../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h" | |||||
| #include "../../../src/juce_appframework/gui/components/controls/juce_ListBox.h" | |||||
| #include "../../../src/juce_core/text/juce_LocalisedStrings.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_ASIO | |||||
| #undef WINDOWS | |||||
| //============================================================================== | //============================================================================== | ||||
| // #define ASIO_DEBUGGING | // #define ASIO_DEBUGGING | ||||
| @@ -1806,7 +1762,7 @@ public: | |||||
| #if JUCE_DEBUG | #if JUCE_DEBUG | ||||
| if (deviceNames.size() > 1 && deviceNames[0].containsIgnoreCase (T("digidesign"))) | if (deviceNames.size() > 1 && deviceNames[0].containsIgnoreCase (T("digidesign"))) | ||||
| return 1; // (the digi m-box driver crashes the app when you run | |||||
| return 1; // (the digi m-box driver crashes the app when you run | |||||
| // it in the debugger, which can be a bit annoying) | // it in the debugger, which can be a bit annoying) | ||||
| #endif | #endif | ||||
| @@ -1974,7 +1930,7 @@ AudioIODeviceType* juce_createASIOAudioIODeviceType() | |||||
| return new ASIOAudioIODeviceType(); | return new ASIOAudioIODeviceType(); | ||||
| } | } | ||||
| AudioIODevice* juce_createASIOAudioIODeviceForGUID (const String& name, | |||||
| AudioIODevice* juce_createASIOAudioIODeviceForGUID (const String& name, | |||||
| void* guid) | void* guid) | ||||
| { | { | ||||
| const int freeSlot = ASIOAudioIODeviceType::findFreeSlot(); | const int freeSlot = ASIOAudioIODeviceType::findFreeSlot(); | ||||
| @@ -1985,9 +1941,6 @@ AudioIODevice* juce_createASIOAudioIODeviceForGUID (const String& name, | |||||
| return new ASIOAudioIODevice (name, *(CLSID*) guid, freeSlot); | return new ASIOAudioIODevice (name, *(CLSID*) guid, freeSlot); | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #undef log | #undef log | ||||
| #endif | #endif | ||||
| @@ -0,0 +1,552 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| //============================================================================== | |||||
| class JuceIStorage : public IStorage | |||||
| { | |||||
| int refCount; | |||||
| public: | |||||
| JuceIStorage() : refCount (1) {} | |||||
| virtual ~JuceIStorage() | |||||
| { | |||||
| jassert (refCount == 0); | |||||
| } | |||||
| HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result) | |||||
| { | |||||
| if (id == IID_IUnknown || id == IID_IStorage) | |||||
| { | |||||
| AddRef(); | |||||
| *result = this; | |||||
| return S_OK; | |||||
| } | |||||
| *result = 0; | |||||
| return E_NOINTERFACE; | |||||
| } | |||||
| ULONG __stdcall AddRef() { return ++refCount; } | |||||
| ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; } | |||||
| HRESULT __stdcall CreateStream (const WCHAR*, DWORD, DWORD, DWORD, IStream**) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall OpenStream (const WCHAR*, void*, DWORD, DWORD, IStream**) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall CreateStorage (const WCHAR*, DWORD, DWORD, DWORD, IStorage**) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall OpenStorage (const WCHAR*, IStorage*, DWORD, SNB, DWORD, IStorage**) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall CopyTo (DWORD, IID const*, SNB, IStorage*) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall MoveElementTo (const OLECHAR*,IStorage*, const OLECHAR*, DWORD) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall Commit (DWORD) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall Revert() { return E_NOTIMPL; } | |||||
| HRESULT __stdcall EnumElements (DWORD, void*, DWORD, IEnumSTATSTG**) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall DestroyElement (const OLECHAR*) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall RenameElement (const WCHAR*, const WCHAR*) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall SetElementTimes (const WCHAR*, FILETIME const*, FILETIME const*, FILETIME const*) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall SetClass (REFCLSID) { return S_OK; } | |||||
| HRESULT __stdcall SetStateBits (DWORD, DWORD) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall Stat (STATSTG*, DWORD) { return E_NOTIMPL; } | |||||
| juce_UseDebuggingNewOperator | |||||
| }; | |||||
| class JuceOleInPlaceFrame : public IOleInPlaceFrame | |||||
| { | |||||
| int refCount; | |||||
| HWND window; | |||||
| public: | |||||
| JuceOleInPlaceFrame (HWND window_) | |||||
| : refCount (1), | |||||
| window (window_) | |||||
| { | |||||
| } | |||||
| virtual ~JuceOleInPlaceFrame() | |||||
| { | |||||
| jassert (refCount == 0); | |||||
| } | |||||
| HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result) | |||||
| { | |||||
| if (id == IID_IUnknown || id == IID_IOleInPlaceFrame) | |||||
| { | |||||
| AddRef(); | |||||
| *result = this; | |||||
| return S_OK; | |||||
| } | |||||
| *result = 0; | |||||
| return E_NOINTERFACE; | |||||
| } | |||||
| ULONG __stdcall AddRef() { return ++refCount; } | |||||
| ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; } | |||||
| HRESULT __stdcall GetWindow (HWND* lphwnd) { *lphwnd = window; return S_OK; } | |||||
| HRESULT __stdcall ContextSensitiveHelp (BOOL) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall GetBorder (LPRECT) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall RequestBorderSpace (LPCBORDERWIDTHS) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall SetBorderSpace (LPCBORDERWIDTHS) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall SetActiveObject (IOleInPlaceActiveObject*, LPCOLESTR) { return S_OK; } | |||||
| HRESULT __stdcall InsertMenus (HMENU, LPOLEMENUGROUPWIDTHS) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall SetMenu (HMENU, HOLEMENU, HWND) { return S_OK; } | |||||
| HRESULT __stdcall RemoveMenus (HMENU) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall SetStatusText (LPCOLESTR) { return S_OK; } | |||||
| HRESULT __stdcall EnableModeless (BOOL) { return S_OK; } | |||||
| HRESULT __stdcall TranslateAccelerator(LPMSG, WORD) { return E_NOTIMPL; } | |||||
| juce_UseDebuggingNewOperator | |||||
| }; | |||||
| class JuceIOleInPlaceSite : public IOleInPlaceSite | |||||
| { | |||||
| int refCount; | |||||
| HWND window; | |||||
| JuceOleInPlaceFrame* frame; | |||||
| public: | |||||
| JuceIOleInPlaceSite (HWND window_) | |||||
| : refCount (1), | |||||
| window (window_) | |||||
| { | |||||
| frame = new JuceOleInPlaceFrame (window); | |||||
| } | |||||
| virtual ~JuceIOleInPlaceSite() | |||||
| { | |||||
| jassert (refCount == 0); | |||||
| frame->Release(); | |||||
| } | |||||
| HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result) | |||||
| { | |||||
| if (id == IID_IUnknown || id == IID_IOleInPlaceSite) | |||||
| { | |||||
| AddRef(); | |||||
| *result = this; | |||||
| return S_OK; | |||||
| } | |||||
| *result = 0; | |||||
| return E_NOINTERFACE; | |||||
| } | |||||
| ULONG __stdcall AddRef() { return ++refCount; } | |||||
| ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; } | |||||
| HRESULT __stdcall GetWindow (HWND* lphwnd) { *lphwnd = window; return S_OK; } | |||||
| HRESULT __stdcall ContextSensitiveHelp (BOOL) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall CanInPlaceActivate() { return S_OK; } | |||||
| HRESULT __stdcall OnInPlaceActivate() { return S_OK; } | |||||
| HRESULT __stdcall OnUIActivate() { return S_OK; } | |||||
| HRESULT __stdcall GetWindowContext (LPOLEINPLACEFRAME* lplpFrame, LPOLEINPLACEUIWINDOW* lplpDoc, LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO lpFrameInfo) | |||||
| { | |||||
| frame->AddRef(); | |||||
| *lplpFrame = frame; | |||||
| *lplpDoc = 0; | |||||
| lpFrameInfo->fMDIApp = FALSE; | |||||
| lpFrameInfo->hwndFrame = window; | |||||
| lpFrameInfo->haccel = 0; | |||||
| lpFrameInfo->cAccelEntries = 0; | |||||
| return S_OK; | |||||
| } | |||||
| HRESULT __stdcall Scroll (SIZE) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall OnUIDeactivate (BOOL) { return S_OK; } | |||||
| HRESULT __stdcall OnInPlaceDeactivate() { return S_OK; } | |||||
| HRESULT __stdcall DiscardUndoState() { return E_NOTIMPL; } | |||||
| HRESULT __stdcall DeactivateAndUndo() { return E_NOTIMPL; } | |||||
| HRESULT __stdcall OnPosRectChange (LPCRECT) { return S_OK; } | |||||
| juce_UseDebuggingNewOperator | |||||
| }; | |||||
| class JuceIOleClientSite : public IOleClientSite | |||||
| { | |||||
| int refCount; | |||||
| JuceIOleInPlaceSite* inplaceSite; | |||||
| public: | |||||
| JuceIOleClientSite (HWND window) | |||||
| : refCount (1) | |||||
| { | |||||
| inplaceSite = new JuceIOleInPlaceSite (window); | |||||
| } | |||||
| virtual ~JuceIOleClientSite() | |||||
| { | |||||
| jassert (refCount == 0); | |||||
| inplaceSite->Release(); | |||||
| } | |||||
| HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result) | |||||
| { | |||||
| if (id == IID_IUnknown || id == IID_IOleClientSite) | |||||
| { | |||||
| AddRef(); | |||||
| *result = this; | |||||
| return S_OK; | |||||
| } | |||||
| else if (id == IID_IOleInPlaceSite) | |||||
| { | |||||
| inplaceSite->AddRef(); | |||||
| *result = inplaceSite; | |||||
| return S_OK; | |||||
| } | |||||
| *result = 0; | |||||
| return E_NOINTERFACE; | |||||
| } | |||||
| ULONG __stdcall AddRef() { return ++refCount; } | |||||
| ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; } | |||||
| HRESULT __stdcall SaveObject() { return E_NOTIMPL; } | |||||
| HRESULT __stdcall GetMoniker (DWORD, DWORD, IMoniker**) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall GetContainer (LPOLECONTAINER* ppContainer) { *ppContainer = 0; return E_NOINTERFACE; } | |||||
| HRESULT __stdcall ShowObject() { return S_OK; } | |||||
| HRESULT __stdcall OnShowWindow (BOOL) { return E_NOTIMPL; } | |||||
| HRESULT __stdcall RequestNewObjectLayout() { return E_NOTIMPL; } | |||||
| juce_UseDebuggingNewOperator | |||||
| }; | |||||
| //============================================================================== | |||||
| class ActiveXControlData : public ComponentMovementWatcher | |||||
| { | |||||
| ActiveXControlComponent* const owner; | |||||
| bool wasShowing; | |||||
| public: | |||||
| HWND controlHWND; | |||||
| IStorage* storage; | |||||
| IOleClientSite* clientSite; | |||||
| IOleObject* control; | |||||
| //============================================================================== | |||||
| ActiveXControlData (HWND hwnd, | |||||
| ActiveXControlComponent* const owner_) | |||||
| : ComponentMovementWatcher (owner_), | |||||
| owner (owner_), | |||||
| wasShowing (owner_ != 0 && owner_->isShowing()), | |||||
| controlHWND (0), | |||||
| storage (new JuceIStorage()), | |||||
| clientSite (new JuceIOleClientSite (hwnd)), | |||||
| control (0) | |||||
| { | |||||
| } | |||||
| ~ActiveXControlData() | |||||
| { | |||||
| if (control != 0) | |||||
| { | |||||
| control->Close (OLECLOSE_NOSAVE); | |||||
| control->Release(); | |||||
| } | |||||
| clientSite->Release(); | |||||
| storage->Release(); | |||||
| } | |||||
| //============================================================================== | |||||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) | |||||
| { | |||||
| Component* const topComp = owner->getTopLevelComponent(); | |||||
| if (topComp->getPeer() != 0) | |||||
| { | |||||
| int x = 0, y = 0; | |||||
| owner->relativePositionToOtherComponent (topComp, x, y); | |||||
| owner->setControlBounds (Rectangle (x, y, owner->getWidth(), owner->getHeight())); | |||||
| } | |||||
| } | |||||
| void componentPeerChanged() | |||||
| { | |||||
| const bool isShowingNow = owner->isShowing(); | |||||
| if (wasShowing != isShowingNow) | |||||
| { | |||||
| wasShowing = isShowingNow; | |||||
| owner->setControlVisible (isShowingNow); | |||||
| } | |||||
| } | |||||
| void componentVisibilityChanged (Component&) | |||||
| { | |||||
| componentPeerChanged(); | |||||
| } | |||||
| static bool doesWindowMatch (const ActiveXControlComponent* const ax, HWND hwnd) | |||||
| { | |||||
| return ((ActiveXControlData*) ax->control) != 0 | |||||
| && ((ActiveXControlData*) ax->control)->controlHWND == hwnd; | |||||
| } | |||||
| }; | |||||
| //============================================================================== | |||||
| static VoidArray activeXComps; | |||||
| static HWND getHWND (const ActiveXControlComponent* const component) | |||||
| { | |||||
| HWND hwnd = 0; | |||||
| const IID iid = IID_IOleWindow; | |||||
| IOleWindow* const window = (IOleWindow*) component->queryInterface (&iid); | |||||
| if (window != 0) | |||||
| { | |||||
| window->GetWindow (&hwnd); | |||||
| window->Release(); | |||||
| } | |||||
| return hwnd; | |||||
| } | |||||
| static void offerActiveXMouseEventToPeer (ComponentPeer* const peer, HWND hwnd, UINT message, LPARAM lParam) | |||||
| { | |||||
| RECT activeXRect, peerRect; | |||||
| GetWindowRect (hwnd, &activeXRect); | |||||
| GetWindowRect ((HWND) peer->getNativeHandle(), &peerRect); | |||||
| const int mx = GET_X_LPARAM (lParam) + activeXRect.left - peerRect.left; | |||||
| const int my = GET_Y_LPARAM (lParam) + activeXRect.top - peerRect.top; | |||||
| const int64 mouseEventTime = getMouseEventTime(); | |||||
| const int oldModifiers = currentModifiers; | |||||
| ModifierKeys::getCurrentModifiersRealtime(); // to update the mouse button flags | |||||
| switch (message) | |||||
| { | |||||
| case WM_MOUSEMOVE: | |||||
| if (ModifierKeys (currentModifiers).isAnyMouseButtonDown()) | |||||
| peer->handleMouseDrag (mx, my, mouseEventTime); | |||||
| else | |||||
| peer->handleMouseMove (mx, my, mouseEventTime); | |||||
| break; | |||||
| case WM_LBUTTONDOWN: | |||||
| case WM_MBUTTONDOWN: | |||||
| case WM_RBUTTONDOWN: | |||||
| peer->handleMouseDown (mx, my, mouseEventTime); | |||||
| break; | |||||
| case WM_LBUTTONUP: | |||||
| case WM_MBUTTONUP: | |||||
| case WM_RBUTTONUP: | |||||
| peer->handleMouseUp (oldModifiers, mx, my, mouseEventTime); | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| } | |||||
| // intercepts events going to an activeX control, so we can sneakily use the mouse events | |||||
| static LRESULT CALLBACK activeXHookWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) | |||||
| { | |||||
| for (int i = activeXComps.size(); --i >= 0;) | |||||
| { | |||||
| const ActiveXControlComponent* const ax = (const ActiveXControlComponent*) activeXComps.getUnchecked(i); | |||||
| if (ActiveXControlData::doesWindowMatch (ax, hwnd)) | |||||
| { | |||||
| switch (message) | |||||
| { | |||||
| case WM_MOUSEMOVE: | |||||
| case WM_LBUTTONDOWN: | |||||
| case WM_MBUTTONDOWN: | |||||
| case WM_RBUTTONDOWN: | |||||
| case WM_LBUTTONUP: | |||||
| case WM_MBUTTONUP: | |||||
| case WM_RBUTTONUP: | |||||
| case WM_LBUTTONDBLCLK: | |||||
| case WM_MBUTTONDBLCLK: | |||||
| case WM_RBUTTONDBLCLK: | |||||
| if (ax->isShowing()) | |||||
| { | |||||
| ComponentPeer* const peer = ax->getPeer(); | |||||
| if (peer != 0) | |||||
| { | |||||
| offerActiveXMouseEventToPeer (peer, hwnd, message, lParam); | |||||
| if (! ax->areMouseEventsAllowed()) | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| return CallWindowProc ((WNDPROC) (ax->originalWndProc), hwnd, message, wParam, lParam); | |||||
| } | |||||
| } | |||||
| return DefWindowProc (hwnd, message, wParam, lParam); | |||||
| } | |||||
| ActiveXControlComponent::ActiveXControlComponent() | |||||
| : originalWndProc (0), | |||||
| control (0), | |||||
| mouseEventsAllowed (true) | |||||
| { | |||||
| activeXComps.add (this); | |||||
| } | |||||
| ActiveXControlComponent::~ActiveXControlComponent() | |||||
| { | |||||
| deleteControl(); | |||||
| activeXComps.removeValue (this); | |||||
| } | |||||
| void ActiveXControlComponent::paint (Graphics& g) | |||||
| { | |||||
| if (control == 0) | |||||
| g.fillAll (Colours::lightgrey); | |||||
| } | |||||
| bool ActiveXControlComponent::createControl (const void* controlIID) | |||||
| { | |||||
| deleteControl(); | |||||
| ComponentPeer* const peer = getPeer(); | |||||
| // the component must have already been added to a real window when you call this! | |||||
| jassert (dynamic_cast <Win32ComponentPeer*> (peer) != 0); | |||||
| if (dynamic_cast <Win32ComponentPeer*> (peer) != 0) | |||||
| { | |||||
| int x = 0, y = 0; | |||||
| relativePositionToOtherComponent (getTopLevelComponent(), x, y); | |||||
| HWND hwnd = (HWND) peer->getNativeHandle(); | |||||
| ActiveXControlData* const info = new ActiveXControlData (hwnd, this); | |||||
| HRESULT hr; | |||||
| if ((hr = OleCreate (*(const IID*) controlIID, IID_IOleObject, 1 /*OLERENDER_DRAW*/, 0, | |||||
| info->clientSite, info->storage, | |||||
| (void**) &(info->control))) == S_OK) | |||||
| { | |||||
| info->control->SetHostNames (L"Juce", 0); | |||||
| if (OleSetContainedObject (info->control, TRUE) == S_OK) | |||||
| { | |||||
| RECT rect; | |||||
| rect.left = x; | |||||
| rect.top = y; | |||||
| rect.right = x + getWidth(); | |||||
| rect.bottom = y + getHeight(); | |||||
| if (info->control->DoVerb (OLEIVERB_SHOW, 0, info->clientSite, 0, hwnd, &rect) == S_OK) | |||||
| { | |||||
| control = info; | |||||
| setControlBounds (Rectangle (x, y, getWidth(), getHeight())); | |||||
| info->controlHWND = getHWND (this); | |||||
| if (info->controlHWND != 0) | |||||
| { | |||||
| originalWndProc = (void*) GetWindowLongPtr ((HWND) info->controlHWND, GWLP_WNDPROC); | |||||
| SetWindowLongPtr ((HWND) info->controlHWND, GWLP_WNDPROC, (LONG_PTR) activeXHookWndProc); | |||||
| } | |||||
| return true; | |||||
| } | |||||
| } | |||||
| } | |||||
| delete info; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| void ActiveXControlComponent::deleteControl() | |||||
| { | |||||
| ActiveXControlData* const info = (ActiveXControlData*) control; | |||||
| if (info != 0) | |||||
| { | |||||
| delete info; | |||||
| control = 0; | |||||
| originalWndProc = 0; | |||||
| } | |||||
| } | |||||
| void* ActiveXControlComponent::queryInterface (const void* iid) const | |||||
| { | |||||
| ActiveXControlData* const info = (ActiveXControlData*) control; | |||||
| void* result = 0; | |||||
| if (info != 0 && info->control != 0 | |||||
| && info->control->QueryInterface (*(const IID*) iid, &result) == S_OK) | |||||
| return result; | |||||
| return 0; | |||||
| } | |||||
| void ActiveXControlComponent::setControlBounds (const Rectangle& newBounds) const | |||||
| { | |||||
| HWND hwnd = ((ActiveXControlData*) control)->controlHWND; | |||||
| if (hwnd != 0) | |||||
| MoveWindow (hwnd, newBounds.getX(), newBounds.getY(), newBounds.getWidth(), newBounds.getHeight(), TRUE); | |||||
| } | |||||
| void ActiveXControlComponent::setControlVisible (const bool shouldBeVisible) const | |||||
| { | |||||
| HWND hwnd = ((ActiveXControlData*) control)->controlHWND; | |||||
| if (hwnd != 0) | |||||
| ShowWindow (hwnd, shouldBeVisible ? SW_SHOWNA : SW_HIDE); | |||||
| } | |||||
| void ActiveXControlComponent::setMouseEventsAllowed (const bool eventsCanReachControl) | |||||
| { | |||||
| mouseEventsAllowed = eventsCanReachControl; | |||||
| } | |||||
| #endif | |||||
| @@ -29,37 +29,10 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #ifdef _MSC_VER | |||||
| #pragma warning (disable: 4514) | |||||
| #pragma warning (push) | |||||
| #endif | |||||
| #include "win32_headers.h" | |||||
| #include <stddef.h> | |||||
| #include "../../../juce_Config.h" | |||||
| #if JUCE_USE_CDBURNER | |||||
| // you'll need the Platform SDK for these headers - if you don't have it and don't | |||||
| // need to use CD-burning, then you might just want to disable the JUCE_USE_CDBURNER | |||||
| // flag in juce_Config.h to avoid these includes. | |||||
| #include <imapi.h> | |||||
| #include <imapierror.h> | |||||
| #endif | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_USE_CDBURNER | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.h" | |||||
| #include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h" | |||||
| #include "../../../src/juce_appframework/events/juce_Timer.h" | |||||
| #include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h" | |||||
| #include "../../../src/juce_appframework/audio/dsp/juce_AudioDataConverters.h" | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #endif | |||||
| //*************************************************************************** | //*************************************************************************** | ||||
| // %%% TARGET STATUS VALUES %%% | // %%% TARGET STATUS VALUES %%% | ||||
| @@ -2122,8 +2095,6 @@ void AudioCDReader::ejectDisk() | |||||
| } | } | ||||
| #if JUCE_USE_CDBURNER | |||||
| //============================================================================== | //============================================================================== | ||||
| static IDiscRecorder* enumCDBurners (StringArray* list, int indexToOpen, IDiscMaster** master) | static IDiscRecorder* enumCDBurners (StringArray* list, int indexToOpen, IDiscMaster** master) | ||||
| { | { | ||||
| @@ -2445,5 +2416,3 @@ bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamples) | |||||
| } | } | ||||
| #endif | #endif | ||||
| END_JUCE_NAMESPACE | |||||
| @@ -29,10 +29,13 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| //============================================================================== | //============================================================================== | ||||
| END_JUCE_NAMESPACE | |||||
| extern "C" | extern "C" | ||||
| { | { | ||||
| @@ -524,7 +527,7 @@ public: | |||||
| bytesPerBuffer, | bytesPerBuffer, | ||||
| (void**) &lpbuf1, &dwSize1, | (void**) &lpbuf1, &dwSize1, | ||||
| (void**) &lpbuf2, &dwSize2, 0); | (void**) &lpbuf2, &dwSize2, 0); | ||||
| } | |||||
| } | |||||
| if (hr == S_OK) | if (hr == S_OK) | ||||
| { | { | ||||
| @@ -1216,41 +1219,17 @@ private: | |||||
| void resync() | void resync() | ||||
| { | { | ||||
| int i; | |||||
| for (i = outChans.size(); --i >= 0;) | |||||
| outChans.getUnchecked(i)->close(); | |||||
| for (i = inChans.size(); --i >= 0;) | |||||
| inChans.getUnchecked(i)->close(); | |||||
| if (threadShouldExit()) | |||||
| return; | |||||
| // boost our priority while opening the devices to try to get better sync between them | |||||
| const int oldThreadPri = GetThreadPriority (GetCurrentThread()); | |||||
| const int oldProcPri = GetPriorityClass (GetCurrentProcess()); | |||||
| SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); | |||||
| SetPriorityClass (GetCurrentProcess(), REALTIME_PRIORITY_CLASS); | |||||
| for (i = outChans.size(); --i >= 0;) | |||||
| outChans.getUnchecked(i)->open(); | |||||
| for (i = inChans.size(); --i >= 0;) | |||||
| inChans.getUnchecked(i)->open(); | |||||
| if (! threadShouldExit()) | if (! threadShouldExit()) | ||||
| { | { | ||||
| sleep (5); | sleep (5); | ||||
| int i; | |||||
| for (i = 0; i < outChans.size(); ++i) | for (i = 0; i < outChans.size(); ++i) | ||||
| outChans.getUnchecked(i)->synchronisePosition(); | outChans.getUnchecked(i)->synchronisePosition(); | ||||
| for (i = 0; i < inChans.size(); ++i) | for (i = 0; i < inChans.size(); ++i) | ||||
| inChans.getUnchecked(i)->synchronisePosition(); | inChans.getUnchecked(i)->synchronisePosition(); | ||||
| } | } | ||||
| SetThreadPriority (GetCurrentThread(), oldThreadPri); | |||||
| SetPriorityClass (GetCurrentProcess(), oldProcPri); | |||||
| } | } | ||||
| public: | public: | ||||
| @@ -1435,8 +1414,8 @@ public: | |||||
| const int inputIndex = inputDeviceNames.indexOf (inputDeviceName); | const int inputIndex = inputDeviceNames.indexOf (inputDeviceName); | ||||
| if (outputIndex >= 0 || inputIndex >= 0) | if (outputIndex >= 0 || inputIndex >= 0) | ||||
| return new DSoundAudioIODevice (outputDeviceName.isNotEmpty() ? outputDeviceName | |||||
| : inputDeviceName, | |||||
| return new DSoundAudioIODevice (outputDeviceName.isNotEmpty() ? outputDeviceName | |||||
| : inputDeviceName, | |||||
| outputIndex, inputIndex); | outputIndex, inputIndex); | ||||
| return 0; | return 0; | ||||
| @@ -1676,4 +1655,4 @@ const String DSoundAudioIODevice::openDevice (const BitArray& inputChannels, | |||||
| #undef log | #undef log | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,12 +29,10 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/text/juce_String.h" | |||||
| #include "juce_win32_DynamicLibraryLoader.h" | #include "juce_win32_DynamicLibraryLoader.h" | ||||
| @@ -54,4 +52,5 @@ void* DynamicLibraryLoader::findProcAddress (const String& functionName) | |||||
| return (void*) GetProcAddress ((HMODULE) libHandle, functionName); | return (void*) GetProcAddress ((HMODULE) libHandle, functionName); | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,25 +29,10 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #ifdef _MSC_VER | |||||
| #pragma warning (disable: 4514) | |||||
| #pragma warning (push) | |||||
| #endif | |||||
| #include "win32_headers.h" | |||||
| #include <shlobj.h> | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| #include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h" | |||||
| #include "../../../src/juce_appframework/gui/components/juce_Desktop.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| static const void* defaultDirPath = 0; | static const void* defaultDirPath = 0; | ||||
| @@ -355,4 +340,4 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results, | |||||
| } | } | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,21 +29,12 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #ifdef _MSC_VER | |||||
| #pragma warning (disable: 4514) | |||||
| #pragma warning (push) | |||||
| #endif | |||||
| #include "win32_headers.h" | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| #include <ctime> | |||||
| #ifndef _WIN32_IE | |||||
| #define _WIN32_IE 0x0400 | |||||
| #endif | |||||
| #include <shlobj.h> | |||||
| //============================================================================== | |||||
| #ifndef CSIDL_MYMUSIC | #ifndef CSIDL_MYMUSIC | ||||
| #define CSIDL_MYMUSIC 0x000d | #define CSIDL_MYMUSIC 0x000d | ||||
| #endif | #endif | ||||
| @@ -52,19 +43,6 @@ | |||||
| #define CSIDL_MYVIDEO 0x000e | #define CSIDL_MYVIDEO 0x000e | ||||
| #endif | #endif | ||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/io/files/juce_File.h" | |||||
| #include "../../../src/juce_core/io/network/juce_URL.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #include "../../../src/juce_core/io/files/juce_NamedPipe.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| const tchar File::separator = T('\\'); | const tchar File::separator = T('\\'); | ||||
| const tchar* File::separatorString = T("\\"); | const tchar* File::separatorString = T("\\"); | ||||
| @@ -711,7 +689,8 @@ bool NamedPipe::openInternal (const String& pipeName, const bool createPipe) | |||||
| if (createPipe) | if (createPipe) | ||||
| { | { | ||||
| intern->pipeH = CreateNamedPipe (file, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0, | intern->pipeH = CreateNamedPipe (file, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0, | ||||
| 1, 64, 64, 0, NULL); | |||||
| PIPE_UNLIMITED_INSTANCES, | |||||
| 4096, 4096, 0, NULL); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -758,20 +737,24 @@ int NamedPipe::read (void* destBuffer, int maxBytesToRead, int timeOutMillisecon | |||||
| else if (GetLastError() == ERROR_IO_PENDING) | else if (GetLastError() == ERROR_IO_PENDING) | ||||
| { | { | ||||
| HANDLE handles[] = { over.hEvent, intern->cancelEvent }; | HANDLE handles[] = { over.hEvent, intern->cancelEvent }; | ||||
| DWORD waitResult = WaitForMultipleObjects (2, handles, FALSE, | |||||
| timeOutMilliseconds >= 0 ? timeOutMilliseconds | |||||
| : INFINITE); | |||||
| if (waitResult != WAIT_OBJECT_0) | |||||
| { | |||||
| // if the operation timed out, let's cancel it... | |||||
| CancelIo (intern->pipeH); | |||||
| WaitForSingleObject (over.hEvent, INFINITE); // makes sure cancel is complete | |||||
| } | |||||
| if (WaitForMultipleObjects (2, handles, FALSE, | |||||
| timeOutMilliseconds >= 0 ? timeOutMilliseconds | |||||
| : INFINITE) == WAIT_OBJECT_0) | |||||
| if (GetOverlappedResult (intern->pipeH, &over, &numRead, FALSE)) | |||||
| { | { | ||||
| if (GetOverlappedResult (intern->pipeH, &over, &numRead, FALSE)) | |||||
| { | |||||
| bytesRead = (int) numRead; | |||||
| } | |||||
| else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe) | |||||
| { | |||||
| intern->disconnect(); | |||||
| waitAgain = true; | |||||
| } | |||||
| bytesRead = (int) numRead; | |||||
| } | |||||
| else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe) | |||||
| { | |||||
| intern->disconnect(); | |||||
| waitAgain = true; | |||||
| } | } | ||||
| } | } | ||||
| else | else | ||||
| @@ -810,18 +793,25 @@ int NamedPipe::write (const void* sourceBuffer, int numBytesToWrite, int timeOut | |||||
| else if (GetLastError() == ERROR_IO_PENDING) | else if (GetLastError() == ERROR_IO_PENDING) | ||||
| { | { | ||||
| HANDLE handles[] = { over.hEvent, intern->cancelEvent }; | HANDLE handles[] = { over.hEvent, intern->cancelEvent }; | ||||
| DWORD waitResult; | |||||
| waitResult = WaitForMultipleObjects (2, handles, FALSE, | |||||
| timeOutMilliseconds >= 0 ? timeOutMilliseconds | |||||
| : INFINITE); | |||||
| if (WaitForMultipleObjects (2, handles, FALSE, timeOutMilliseconds >= 0 ? timeOutMilliseconds | |||||
| : INFINITE) == WAIT_OBJECT_0) | |||||
| if (waitResult != WAIT_OBJECT_0) | |||||
| { | { | ||||
| if (GetOverlappedResult (intern->pipeH, &over, &numWritten, FALSE)) | |||||
| { | |||||
| bytesWritten = (int) numWritten; | |||||
| } | |||||
| else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe) | |||||
| { | |||||
| intern->disconnect(); | |||||
| } | |||||
| CancelIo (intern->pipeH); | |||||
| WaitForSingleObject (over.hEvent, INFINITE); | |||||
| } | |||||
| if (GetOverlappedResult (intern->pipeH, &over, &numWritten, FALSE)) | |||||
| { | |||||
| bytesWritten = (int) numWritten; | |||||
| } | |||||
| else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe) | |||||
| { | |||||
| intern->disconnect(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -840,4 +830,4 @@ void NamedPipe::cancelPendingReads() | |||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,16 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/gui/graphics/fonts/juce_Font.h" | |||||
| #include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #include "../../../src/juce_core/basics/juce_Singleton.h" | |||||
| #include "../../../src/juce_appframework/gui/graphics/imaging/juce_Image.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -506,4 +499,4 @@ void Typeface::initialiseTypefaceCharacteristics (const String& fontName, | |||||
| } | } | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,16 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/events/juce_MessageManager.h" | |||||
| #include "../../../src/juce_appframework/application/juce_Application.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_core/basics/juce_Time.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -250,4 +243,5 @@ void MessageManager::doPlatformSpecificShutdown() | |||||
| OleUninitialize(); | OleUninitialize(); | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,22 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/audio/devices/juce_MidiOutput.h" | |||||
| #include "../../../src/juce_appframework/audio/devices/juce_MidiInput.h" | |||||
| #include "../../../src/juce_core/basics/juce_Time.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_core/containers/juce_MemoryBlock.h" | |||||
| #if JUCE_MSVC | |||||
| #pragma warning (disable: 4312) | |||||
| #endif | |||||
| using ::free; | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| //============================================================================== | //============================================================================== | ||||
| static const int midiBufferSize = 1024 * 10; | static const int midiBufferSize = 1024 * 10; | ||||
| @@ -52,6 +39,8 @@ static const int numInHeaders = 32; | |||||
| static const int inBufferSize = 256; | static const int inBufferSize = 256; | ||||
| static Array <void*, CriticalSection> activeMidiThreads; | static Array <void*, CriticalSection> activeMidiThreads; | ||||
| using ::free; | |||||
| class MidiInThread : public Thread | class MidiInThread : public Thread | ||||
| { | { | ||||
| public: | public: | ||||
| @@ -644,4 +633,4 @@ void MidiOutput::sendMessageNow (const MidiMessage& message) | |||||
| } | } | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,44 +29,12 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_appframework/application/juce_SystemClipboard.h" | |||||
| #include "../../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h" | |||||
| //============================================================================== | |||||
| #if ! JUCE_ONLY_BUILD_CORE_LIBRARY | |||||
| bool AlertWindow::showNativeDialogBox (const String& title, | |||||
| const String& bodyText, | |||||
| bool isOkCancel) | |||||
| { | |||||
| return MessageBox (0, bodyText, title, | |||||
| MB_SETFOREGROUND | (isOkCancel ? MB_OKCANCEL | |||||
| : MB_OK)) == IDOK; | |||||
| } | |||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| void PlatformUtilities::beep() | |||||
| { | |||||
| MessageBeep (MB_OK); | |||||
| } | |||||
| //============================================================================== | |||||
| #if JUCE_MSVC | |||||
| #pragma warning (disable : 4127) // "Conditional expression is constant" warning | |||||
| #endif | |||||
| #if ! JUCE_ONLY_BUILD_CORE_LIBRARY | |||||
| void SystemClipboard::copyTextToClipboard (const String& text) throw() | void SystemClipboard::copyTextToClipboard (const String& text) throw() | ||||
| { | { | ||||
| if (OpenClipboard (0) != 0) | if (OpenClipboard (0) != 0) | ||||
| @@ -121,6 +89,5 @@ const String SystemClipboard::getTextFromClipboard() throw() | |||||
| return result; | return result; | ||||
| } | } | ||||
| #endif | |||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -0,0 +1,156 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| //============================================================================== | |||||
| #ifndef __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__ | |||||
| #define __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__ | |||||
| #include "../../../juce_Config.h" | |||||
| #ifndef STRICT | |||||
| #define STRICT 1 | |||||
| #endif | |||||
| #undef WIN32_LEAN_AND_MEAN | |||||
| #define WIN32_LEAN_AND_MEAN 1 | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (push) | |||||
| #pragma warning (disable : 4100 4201 4514 4312) | |||||
| #endif | |||||
| #define _WIN32_WINNT 0x0500 | |||||
| #define _UNICODE 1 | |||||
| #define UNICODE 1 | |||||
| #ifndef _WIN32_IE | |||||
| #define _WIN32_IE 0x0400 | |||||
| #endif | |||||
| #include <windows.h> | |||||
| #include <windowsx.h> | |||||
| #include <commdlg.h> | |||||
| #include <shellapi.h> | |||||
| #include <mmsystem.h> | |||||
| #include <vfw.h> | |||||
| #include <tchar.h> | |||||
| #include <stddef.h> | |||||
| #include <ctime> | |||||
| #include <wininet.h> | |||||
| #include <nb30.h> | |||||
| #include <iphlpapi.h> | |||||
| #include <mapi.h> | |||||
| #include <float.h> | |||||
| #include <crtdbg.h> | |||||
| #include <process.h> | |||||
| #include <comutil.h> | |||||
| #include <Exdisp.h> | |||||
| #include <exdispid.h> | |||||
| #include <shlobj.h> | |||||
| #if JUCE_OPENGL | |||||
| #include <gl/gl.h> | |||||
| #endif | |||||
| #undef PACKED | |||||
| //============================================================================== | |||||
| #if JUCE_ASIO | |||||
| /* | |||||
| This is very frustrating - we only need to use a handful of definitions from | |||||
| a couple of the header files in Steinberg's ASIO SDK, and it'd be easy to copy | |||||
| about 30 lines of code into this cpp file to create a fully stand-alone ASIO | |||||
| implementation... | |||||
| ..unfortunately that would break Steinberg's license agreement for use of | |||||
| their SDK, so I'm not allowed to do this. | |||||
| This means that anyone who wants to use JUCE's ASIO abilities will have to: | |||||
| 1) Agree to Steinberg's licensing terms and download the ASIO SDK | |||||
| (see www.steinberg.net/Steinberg/Developers.asp). | |||||
| 2) Rebuild the whole of JUCE, setting the global definition JUCE_ASIO (you | |||||
| can un-comment the "#define JUCE_ASIO" line in juce_Config.h | |||||
| if you prefer). Make sure that your header search path will find the | |||||
| iasiodrv.h file that comes with the SDK. (Only about 2-3 of the SDK header | |||||
| files are actually needed - so to simplify things, you could just copy | |||||
| these into your JUCE directory). | |||||
| If you're compiling and you get an error here because you don't have the | |||||
| ASIO SDK installed, you can disable ASIO support by commenting-out the | |||||
| "#define JUCE_ASIO" line in juce_Config.h, and rebuild your Juce library. | |||||
| */ | |||||
| #include "iasiodrv.h" | |||||
| #endif | |||||
| //============================================================================== | |||||
| #if JUCE_USE_CDBURNER | |||||
| /* You'll need the Platform SDK for these headers - if you don't have it and don't | |||||
| need to use CD-burning, then you might just want to disable the JUCE_USE_CDBURNER | |||||
| flag in juce_Config.h to avoid these includes. | |||||
| */ | |||||
| #include <imapi.h> | |||||
| #include <imapierror.h> | |||||
| #endif | |||||
| //============================================================================== | |||||
| #if JUCE_QUICKTIME | |||||
| /* If you've got an include error here, you probably need to install the QuickTime SDK and | |||||
| add its header directory to your include path. | |||||
| Alternatively, if you don't need any QuickTime services, just turn off the JUCE_QUICKTIME | |||||
| flag in juce_Config.h | |||||
| */ | |||||
| #include <Movies.h> | |||||
| #include <QTML.h> | |||||
| #include <QuickTimeComponents.h> | |||||
| #include <MediaHandlers.h> | |||||
| #include <ImageCodec.h> | |||||
| /* If you've got QuickTime 7 installed, then these COM objects should be found in | |||||
| the "\Program Files\Quicktime" directory. You'll need to add this directory to | |||||
| your include search path to make these import statements work. | |||||
| */ | |||||
| #import <QTOLibrary.dll> | |||||
| #import <QTOControl.dll> | |||||
| #endif | |||||
| //============================================================================== | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #endif | |||||
| #endif // __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__ | |||||
| @@ -29,35 +29,15 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #ifdef _MSC_VER | |||||
| #pragma warning (disable: 4514) | |||||
| #pragma warning (push) | |||||
| #endif | |||||
| #include "win32_headers.h" | |||||
| #include <wininet.h> | |||||
| #include <nb30.h> | |||||
| #include <iphlpapi.h> | |||||
| #include <mapi.h> | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| #include "../../../src/juce_core/text/juce_String.h" | |||||
| #include "juce_win32_DynamicLibraryLoader.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #include "../../../src/juce_core/containers/juce_MemoryBlock.h" | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_core/io/network/juce_URL.h" | |||||
| #ifndef INTERNET_FLAG_NEED_FILE | #ifndef INTERNET_FLAG_NEED_FILE | ||||
| #define INTERNET_FLAG_NEED_FILE 0x00000010 | #define INTERNET_FLAG_NEED_FILE 0x00000010 | ||||
| #endif | #endif | ||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| bool juce_isOnLine() | bool juce_isOnLine() | ||||
| { | { | ||||
| @@ -417,4 +397,4 @@ bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAdd | |||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,23 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #ifdef _MSC_VER | |||||
| #pragma warning (disable: 4514) | |||||
| #pragma warning (push) | |||||
| #endif | |||||
| #include "win32_headers.h" | |||||
| #include <float.h> | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #endif | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -219,4 +205,11 @@ void PlatformUtilities::fpuReset() | |||||
| #endif | #endif | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| //============================================================================== | |||||
| void PlatformUtilities::beep() | |||||
| { | |||||
| MessageBeep (MB_OK); | |||||
| } | |||||
| #endif | |||||
| @@ -0,0 +1,517 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_QUICKTIME | |||||
| using namespace QTOLibrary; | |||||
| using namespace QTOControlLib; | |||||
| bool juce_OpenQuickTimeMovieFromStream (InputStream* input, Movie& movie, Handle& dataHandle); | |||||
| static bool hasLoadedQT = false; | |||||
| static bool isQTAvailable = false; | |||||
| //============================================================================== | |||||
| struct QTMovieCompInternal | |||||
| { | |||||
| QTMovieCompInternal() | |||||
| : dataHandle (0) | |||||
| { | |||||
| } | |||||
| ~QTMovieCompInternal() | |||||
| { | |||||
| clearHandle(); | |||||
| } | |||||
| IQTControlPtr qtControlInternal; | |||||
| IQTMoviePtr qtMovieInternal; | |||||
| Handle dataHandle; | |||||
| void clearHandle() | |||||
| { | |||||
| if (dataHandle != 0) | |||||
| { | |||||
| DisposeHandle (dataHandle); | |||||
| dataHandle = 0; | |||||
| } | |||||
| } | |||||
| }; | |||||
| #define qtControl (((QTMovieCompInternal*) internal)->qtControlInternal) | |||||
| #define qtMovie (((QTMovieCompInternal*) internal)->qtMovieInternal) | |||||
| //============================================================================== | |||||
| QuickTimeMovieComponent::QuickTimeMovieComponent() | |||||
| : movieLoaded (false), | |||||
| controllerVisible (true) | |||||
| { | |||||
| internal = new QTMovieCompInternal(); | |||||
| setMouseEventsAllowed (false); | |||||
| } | |||||
| QuickTimeMovieComponent::~QuickTimeMovieComponent() | |||||
| { | |||||
| closeMovie(); | |||||
| qtControl = 0; | |||||
| deleteControl(); | |||||
| delete internal; | |||||
| internal = 0; | |||||
| } | |||||
| bool QuickTimeMovieComponent::isQuickTimeAvailable() throw() | |||||
| { | |||||
| if (! hasLoadedQT) | |||||
| { | |||||
| hasLoadedQT = true; | |||||
| isQTAvailable = (InitializeQTML (0) == noErr) | |||||
| && (EnterMovies() == noErr); | |||||
| } | |||||
| return isQTAvailable; | |||||
| } | |||||
| //============================================================================== | |||||
| void QuickTimeMovieComponent::createControlIfNeeded() | |||||
| { | |||||
| if (isShowing() && ! isControlCreated()) | |||||
| { | |||||
| const IID qtIID = __uuidof (QTControl); | |||||
| if (createControl (&qtIID)) | |||||
| { | |||||
| const IID qtInterfaceIID = __uuidof (IQTControl); | |||||
| qtControl = (IQTControl*) queryInterface (&qtInterfaceIID); | |||||
| if (qtControl != 0) | |||||
| { | |||||
| qtControl->Release(); // it has one ref too many at this point | |||||
| qtControl->QuickTimeInitialize(); | |||||
| qtControl->PutSizing (qtMovieFitsControl); | |||||
| if (movieFile != File::nonexistent) | |||||
| loadMovie (movieFile, controllerVisible); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| bool QuickTimeMovieComponent::isControlCreated() const | |||||
| { | |||||
| return isControlOpen(); | |||||
| } | |||||
| bool QuickTimeMovieComponent::loadMovie (InputStream* movieStream, | |||||
| const bool isControllerVisible) | |||||
| { | |||||
| movieFile = File::nonexistent; | |||||
| movieLoaded = false; | |||||
| qtMovie = 0; | |||||
| controllerVisible = isControllerVisible; | |||||
| createControlIfNeeded(); | |||||
| if (isControlCreated()) | |||||
| { | |||||
| if (qtControl != 0) | |||||
| { | |||||
| qtControl->Put_MovieHandle (0); | |||||
| ((QTMovieCompInternal*) internal)->clearHandle(); | |||||
| Movie movie; | |||||
| if (juce_OpenQuickTimeMovieFromStream (movieStream, movie, ((QTMovieCompInternal*) internal)->dataHandle)) | |||||
| { | |||||
| qtControl->Put_MovieHandle ((long) (pointer_sized_int) movie); | |||||
| qtMovie = qtControl->GetMovie(); | |||||
| if (qtMovie != 0) | |||||
| qtMovie->PutMovieControllerType (isControllerVisible ? qtMovieControllerTypeStandard | |||||
| : qtMovieControllerTypeNone); | |||||
| } | |||||
| if (movie == 0) | |||||
| ((QTMovieCompInternal*) internal)->clearHandle(); | |||||
| } | |||||
| movieLoaded = (qtMovie != 0); | |||||
| } | |||||
| else | |||||
| { | |||||
| // You're trying to open a movie when the control hasn't yet been created, probably because | |||||
| // you've not yet added this component to a Window and made the whole component hierarchy visible. | |||||
| jassertfalse | |||||
| } | |||||
| delete movieStream; | |||||
| return movieLoaded; | |||||
| } | |||||
| void QuickTimeMovieComponent::closeMovie() | |||||
| { | |||||
| stop(); | |||||
| movieFile = File::nonexistent; | |||||
| movieLoaded = false; | |||||
| qtMovie = 0; | |||||
| if (qtControl != 0) | |||||
| qtControl->Put_MovieHandle (0); | |||||
| ((QTMovieCompInternal*) internal)->clearHandle(); | |||||
| } | |||||
| const File QuickTimeMovieComponent::getCurrentMovieFile() const | |||||
| { | |||||
| return movieFile; | |||||
| } | |||||
| bool QuickTimeMovieComponent::isMovieOpen() const | |||||
| { | |||||
| return movieLoaded; | |||||
| } | |||||
| double QuickTimeMovieComponent::getMovieDuration() const | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| return qtMovie->GetDuration() / (double) qtMovie->GetTimeScale(); | |||||
| return 0.0; | |||||
| } | |||||
| void QuickTimeMovieComponent::getMovieNormalSize (int& width, int& height) const | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| { | |||||
| struct QTRECT r = qtMovie->GetNaturalRect(); | |||||
| width = r.right - r.left; | |||||
| height = r.bottom - r.top; | |||||
| } | |||||
| else | |||||
| { | |||||
| width = height = 0; | |||||
| } | |||||
| } | |||||
| void QuickTimeMovieComponent::play() | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| qtMovie->Play(); | |||||
| } | |||||
| void QuickTimeMovieComponent::stop() | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| qtMovie->Stop(); | |||||
| } | |||||
| bool QuickTimeMovieComponent::isPlaying() const | |||||
| { | |||||
| return qtMovie != 0 && qtMovie->GetRate() != 0.0f; | |||||
| } | |||||
| void QuickTimeMovieComponent::setPosition (const double seconds) | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| qtMovie->PutTime ((long) (seconds * qtMovie->GetTimeScale())); | |||||
| } | |||||
| double QuickTimeMovieComponent::getPosition() const | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| return qtMovie->GetTime() / (double) qtMovie->GetTimeScale(); | |||||
| return 0.0; | |||||
| } | |||||
| void QuickTimeMovieComponent::setSpeed (const float newSpeed) | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| qtMovie->PutRate (newSpeed); | |||||
| } | |||||
| void QuickTimeMovieComponent::setMovieVolume (const float newVolume) | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| { | |||||
| qtMovie->PutAudioVolume (newVolume); | |||||
| qtMovie->PutAudioMute (newVolume <= 0); | |||||
| } | |||||
| } | |||||
| float QuickTimeMovieComponent::getMovieVolume() const | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| return qtMovie->GetAudioVolume(); | |||||
| return 0.0f; | |||||
| } | |||||
| void QuickTimeMovieComponent::setLooping (const bool shouldLoop) | |||||
| { | |||||
| if (qtMovie != 0) | |||||
| qtMovie->PutLoop (shouldLoop); | |||||
| } | |||||
| bool QuickTimeMovieComponent::isLooping() const | |||||
| { | |||||
| return qtMovie != 0 && qtMovie->GetLoop(); | |||||
| } | |||||
| bool QuickTimeMovieComponent::isControllerVisible() const | |||||
| { | |||||
| return controllerVisible; | |||||
| } | |||||
| void QuickTimeMovieComponent::parentHierarchyChanged() | |||||
| { | |||||
| createControlIfNeeded(); | |||||
| QTCompBaseClass::parentHierarchyChanged(); | |||||
| } | |||||
| void QuickTimeMovieComponent::visibilityChanged() | |||||
| { | |||||
| createControlIfNeeded(); | |||||
| QTCompBaseClass::visibilityChanged(); | |||||
| } | |||||
| void QuickTimeMovieComponent::paint (Graphics& g) | |||||
| { | |||||
| if (! isControlCreated()) | |||||
| g.fillAll (Colours::black); | |||||
| } | |||||
| //============================================================================== | |||||
| static Handle createHandleDataRef (Handle dataHandle, const char* fileName) | |||||
| { | |||||
| Handle dataRef = 0; | |||||
| OSStatus err = PtrToHand (&dataHandle, &dataRef, sizeof (Handle)); | |||||
| if (err == noErr) | |||||
| { | |||||
| Str255 suffix; | |||||
| CharacterFunctions::copy ((char*) suffix, fileName, 128); | |||||
| StringPtr name = suffix; | |||||
| err = PtrAndHand (name, dataRef, name[0] + 1); | |||||
| if (err == noErr) | |||||
| { | |||||
| long atoms[3]; | |||||
| atoms[0] = EndianU32_NtoB (3 * sizeof (long)); | |||||
| atoms[1] = EndianU32_NtoB (kDataRefExtensionMacOSFileType); | |||||
| atoms[2] = EndianU32_NtoB (MovieFileType); | |||||
| err = PtrAndHand (atoms, dataRef, 3 * sizeof (long)); | |||||
| if (err == noErr) | |||||
| return dataRef; | |||||
| } | |||||
| DisposeHandle (dataRef); | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| static CFStringRef juceStringToCFString (const String& s) | |||||
| { | |||||
| const int len = s.length(); | |||||
| const juce_wchar* const t = (const juce_wchar*) s; | |||||
| UniChar* temp = (UniChar*) juce_malloc (sizeof (UniChar) * len + 4); | |||||
| for (int i = 0; i <= len; ++i) | |||||
| temp[i] = t[i]; | |||||
| CFStringRef result = CFStringCreateWithCharacters (kCFAllocatorDefault, temp, len); | |||||
| juce_free (temp); | |||||
| return result; | |||||
| } | |||||
| static bool openMovie (QTNewMoviePropertyElement* props, int prop, Movie& movie) | |||||
| { | |||||
| Boolean trueBool = true; | |||||
| props[prop].propClass = kQTPropertyClass_MovieInstantiation; | |||||
| props[prop].propID = kQTMovieInstantiationPropertyID_DontResolveDataRefs; | |||||
| props[prop].propValueSize = sizeof (trueBool); | |||||
| props[prop].propValueAddress = &trueBool; | |||||
| ++prop; | |||||
| props[prop].propClass = kQTPropertyClass_MovieInstantiation; | |||||
| props[prop].propID = kQTMovieInstantiationPropertyID_AsyncOK; | |||||
| props[prop].propValueSize = sizeof (trueBool); | |||||
| props[prop].propValueAddress = &trueBool; | |||||
| ++prop; | |||||
| Boolean isActive = true; | |||||
| props[prop].propClass = kQTPropertyClass_NewMovieProperty; | |||||
| props[prop].propID = kQTNewMoviePropertyID_Active; | |||||
| props[prop].propValueSize = sizeof (isActive); | |||||
| props[prop].propValueAddress = &isActive; | |||||
| ++prop; | |||||
| MacSetPort (0); | |||||
| jassert (prop <= 5); | |||||
| OSStatus err = NewMovieFromProperties (prop, props, 0, 0, &movie); | |||||
| return err == noErr; | |||||
| } | |||||
| bool juce_OpenQuickTimeMovieFromStream (InputStream* input, Movie& movie, Handle& dataHandle) | |||||
| { | |||||
| if (input == 0) | |||||
| return false; | |||||
| dataHandle = 0; | |||||
| bool ok = false; | |||||
| QTNewMoviePropertyElement props[5]; | |||||
| zeromem (props, sizeof (props)); | |||||
| int prop = 0; | |||||
| DataReferenceRecord dr; | |||||
| props[prop].propClass = kQTPropertyClass_DataLocation; | |||||
| props[prop].propID = kQTDataLocationPropertyID_DataReference; | |||||
| props[prop].propValueSize = sizeof (dr); | |||||
| props[prop].propValueAddress = (void*) &dr; | |||||
| ++prop; | |||||
| FileInputStream* const fin = dynamic_cast <FileInputStream*> (input); | |||||
| if (fin != 0) | |||||
| { | |||||
| CFStringRef filePath = juceStringToCFString (fin->getFile().getFullPathName()); | |||||
| QTNewDataReferenceFromFullPathCFString (filePath, (QTPathStyle) kQTNativeDefaultPathStyle, 0, | |||||
| &dr.dataRef, &dr.dataRefType); | |||||
| ok = openMovie (props, prop, movie); | |||||
| DisposeHandle (dr.dataRef); | |||||
| CFRelease (filePath); | |||||
| } | |||||
| else | |||||
| { | |||||
| // sanity-check because this currently needs to load the whole stream into memory.. | |||||
| jassert (input->getTotalLength() < 50 * 1024 * 1024); | |||||
| dataHandle = NewHandle ((Size) input->getTotalLength()); | |||||
| HLock (dataHandle); | |||||
| // read the entire stream into memory - this is a pain, but can't get it to work | |||||
| // properly using a custom callback to supply the data. | |||||
| input->read (*dataHandle, (int) input->getTotalLength()); | |||||
| HUnlock (dataHandle); | |||||
| // different types to get QT to try. (We should really be a bit smarter here by | |||||
| // working out in advance which one the stream contains, rather than just trying | |||||
| // each one) | |||||
| const char* const suffixesToTry[] = { "\04.mov", "\04.mp3", | |||||
| "\04.avi", "\04.m4a" }; | |||||
| for (int i = 0; i < numElementsInArray (suffixesToTry) && ! ok; ++i) | |||||
| { | |||||
| /* // this fails for some bizarre reason - it can be bodged to work with | |||||
| // movies, but can't seem to do it for other file types.. | |||||
| QTNewMovieUserProcRecord procInfo; | |||||
| procInfo.getMovieUserProc = NewGetMovieUPP (readMovieStreamProc); | |||||
| procInfo.getMovieUserProcRefcon = this; | |||||
| procInfo.defaultDataRef.dataRef = dataRef; | |||||
| procInfo.defaultDataRef.dataRefType = HandleDataHandlerSubType; | |||||
| props[prop].propClass = kQTPropertyClass_DataLocation; | |||||
| props[prop].propID = kQTDataLocationPropertyID_MovieUserProc; | |||||
| props[prop].propValueSize = sizeof (procInfo); | |||||
| props[prop].propValueAddress = (void*) &procInfo; | |||||
| ++prop; */ | |||||
| dr.dataRef = createHandleDataRef (dataHandle, suffixesToTry [i]); | |||||
| dr.dataRefType = HandleDataHandlerSubType; | |||||
| ok = openMovie (props, prop, movie); | |||||
| DisposeHandle (dr.dataRef); | |||||
| } | |||||
| } | |||||
| return ok; | |||||
| } | |||||
| bool QuickTimeMovieComponent::loadMovie (const File& movieFile_, | |||||
| const bool isControllerVisible) | |||||
| { | |||||
| const bool ok = loadMovie ((InputStream*) movieFile_.createInputStream(), isControllerVisible); | |||||
| movieFile = movieFile_; | |||||
| return ok; | |||||
| } | |||||
| void QuickTimeMovieComponent::goToStart() | |||||
| { | |||||
| setPosition (0.0); | |||||
| } | |||||
| void QuickTimeMovieComponent::setBoundsWithCorrectAspectRatio (const Rectangle& spaceToFitWithin, | |||||
| const RectanglePlacement& placement) | |||||
| { | |||||
| int normalWidth, normalHeight; | |||||
| getMovieNormalSize (normalWidth, normalHeight); | |||||
| if (normalWidth > 0 && normalHeight > 0 && ! spaceToFitWithin.isEmpty()) | |||||
| { | |||||
| double x = 0.0, y = 0.0, w = normalWidth, h = normalHeight; | |||||
| placement.applyTo (x, y, w, h, | |||||
| spaceToFitWithin.getX(), spaceToFitWithin.getY(), | |||||
| spaceToFitWithin.getWidth(), spaceToFitWithin.getHeight()); | |||||
| if (w > 0 && h > 0) | |||||
| { | |||||
| setBounds (roundDoubleToInt (x), roundDoubleToInt (y), | |||||
| roundDoubleToInt (w), roundDoubleToInt (h)); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| setBounds (spaceToFitWithin); | |||||
| } | |||||
| } | |||||
| #endif | |||||
| @@ -29,22 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| //============================================================================== | |||||
| // Auto-link the other win32 libs that are needed by library calls.. | |||||
| #if defined (JUCE_DLL_BUILD) && JUCE_MSVC | |||||
| #include "juce_win32_AutoLinkLibraries.h" | |||||
| #endif | |||||
| //============================================================================== | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/io/files/juce_File.h" | |||||
| #include "../../../src/juce_core/basics/juce_SystemStats.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| extern void juce_updateMultiMonitorInfo() throw(); | extern void juce_updateMultiMonitorInfo() throw(); | ||||
| extern void juce_initialiseThreadEvents() throw(); | extern void juce_initialiseThreadEvents() throw(); | ||||
| @@ -487,4 +474,4 @@ int SystemStats::getPageSize() throw() | |||||
| return systemInfo.dwPageSize; | return systemInfo.dwPageSize; | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,34 +29,14 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include "win32_headers.h" | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (disable: 4514) | |||||
| #pragma warning (push) | |||||
| #include <crtdbg.h> | |||||
| #endif | |||||
| #include <process.h> | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_core/text/juce_String.h" | |||||
| #include "../../../src/juce_core/threads/juce_CriticalSection.h" | |||||
| #include "../../../src/juce_core/threads/juce_WaitableEvent.h" | |||||
| #include "../../../src/juce_core/threads/juce_Thread.h" | |||||
| #include "../../../src/juce_core/threads/juce_Process.h" | |||||
| #include "../../../src/juce_core/threads/juce_InterProcessLock.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE | |||||
| #if ! JUCE_ONLY_BUILD_CORE_LIBRARY | #if ! JUCE_ONLY_BUILD_CORE_LIBRARY | ||||
| extern HWND juce_messageWindowHandle; | extern HWND juce_messageWindowHandle; | ||||
| #endif | #endif | ||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| CriticalSection::CriticalSection() throw() | CriticalSection::CriticalSection() throw() | ||||
| @@ -129,7 +109,7 @@ static unsigned int __stdcall threadEntryProc (void* userData) throw() | |||||
| juce_threadEntryPoint (userData); | juce_threadEntryPoint (userData); | ||||
| _endthreadex(0); | |||||
| _endthreadex (0); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -188,7 +168,7 @@ void juce_setCurrentThreadName (const String& name) throw() | |||||
| #endif | #endif | ||||
| } | } | ||||
| int Thread::getCurrentThreadId() throw() | |||||
| int64 Thread::getCurrentThreadId() throw() | |||||
| { | { | ||||
| return (int) GetCurrentThreadId(); | return (int) GetCurrentThreadId(); | ||||
| } | } | ||||
| @@ -335,7 +315,8 @@ void Process::terminate() | |||||
| ExitProcess (0); | ExitProcess (0); | ||||
| } | } | ||||
| void* Process::loadDynamicLibrary (const String& name) | |||||
| //============================================================================== | |||||
| void* PlatformUtilities::loadDynamicLibrary (const String& name) | |||||
| { | { | ||||
| void* result = 0; | void* result = 0; | ||||
| @@ -348,7 +329,7 @@ void* Process::loadDynamicLibrary (const String& name) | |||||
| return result; | return result; | ||||
| } | } | ||||
| void Process::freeDynamicLibrary (void* h) | |||||
| void PlatformUtilities::freeDynamicLibrary (void* h) | |||||
| { | { | ||||
| JUCE_TRY | JUCE_TRY | ||||
| { | { | ||||
| @@ -358,7 +339,7 @@ void Process::freeDynamicLibrary (void* h) | |||||
| JUCE_CATCH_ALL | JUCE_CATCH_ALL | ||||
| } | } | ||||
| void* Process::getProcedureEntryPoint (void* h, const String& name) | |||||
| void* PlatformUtilities::getProcedureEntryPoint (void* h, const String& name) | |||||
| { | { | ||||
| return (h != 0) ? (void*) GetProcAddress ((HMODULE) h, name) | return (h != 0) ? (void*) GetProcAddress ((HMODULE) h, name) | ||||
| : 0; | : 0; | ||||
| @@ -411,5 +392,4 @@ void InterProcessLock::exit() throw() | |||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -29,29 +29,9 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| //============================================================================== | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (disable: 4514) | |||||
| #pragma warning (push) | |||||
| #endif | |||||
| #include "win32_headers.h" | |||||
| #include <comutil.h> | |||||
| #include <Exdisp.h> | |||||
| #include <exdispid.h> | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning (pop) | |||||
| #pragma warning (disable: 4312 4244) | |||||
| #endif | |||||
| #include "../../../src/juce_core/basics/juce_StandardHeader.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h" | |||||
| #include "../../../src/juce_appframework/gui/components/special/juce_ActiveXControlComponent.h" | |||||
| // (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||||
| // compiled on its own). | |||||
| #if JUCE_INCLUDED_FILE && JUCE_WEB_BROWSER | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -342,10 +322,6 @@ void WebBrowserComponent::parentHierarchyChanged() | |||||
| checkWindowAssociation(); | checkWindowAssociation(); | ||||
| } | } | ||||
| void WebBrowserComponent::moved() | |||||
| { | |||||
| } | |||||
| void WebBrowserComponent::resized() | void WebBrowserComponent::resized() | ||||
| { | { | ||||
| browser->setSize (getWidth(), getHeight()); | browser->setSize (getWidth(), getHeight()); | ||||
| @@ -361,4 +337,4 @@ bool WebBrowserComponent::pageAboutToLoad (const String&) | |||||
| return true; | return true; | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | |||||
| #endif | |||||
| @@ -3638,10 +3638,6 @@ | |||||
| RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_PreferencesPanel.h" | RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_PreferencesPanel.h" | ||||
| > | > | ||||
| </File> | </File> | ||||
| <File | |||||
| RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_QuickTimeMovieComponent.cpp" | |||||
| > | |||||
| </File> | |||||
| <File | <File | ||||
| RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_QuickTimeMovieComponent.h" | RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_QuickTimeMovieComponent.h" | ||||
| > | > | ||||
| @@ -5673,6 +5669,10 @@ | |||||
| <Filter | <Filter | ||||
| Name="win32_code" | Name="win32_code" | ||||
| > | > | ||||
| <File | |||||
| RelativePath="..\platform_specific_code\juce_win32_ActiveXComponent.cpp" | |||||
| > | |||||
| </File> | |||||
| <File | <File | ||||
| RelativePath="..\platform_specific_code\juce_win32_ASIO.cpp" | RelativePath="..\platform_specific_code\juce_win32_ASIO.cpp" | ||||
| > | > | ||||
| @@ -5717,14 +5717,30 @@ | |||||
| RelativePath="..\platform_specific_code\juce_win32_Misc.cpp" | RelativePath="..\platform_specific_code\juce_win32_Misc.cpp" | ||||
| > | > | ||||
| </File> | </File> | ||||
| <File | |||||
| RelativePath="..\platform_specific_code\juce_win32_NativeCode.cpp" | |||||
| > | |||||
| </File> | |||||
| <File | |||||
| RelativePath="..\platform_specific_code\juce_win32_NativeIncludes.h" | |||||
| > | |||||
| </File> | |||||
| <File | <File | ||||
| RelativePath="..\platform_specific_code\juce_win32_Network.cpp" | RelativePath="..\platform_specific_code\juce_win32_Network.cpp" | ||||
| > | > | ||||
| </File> | </File> | ||||
| <File | |||||
| RelativePath="..\platform_specific_code\juce_win32_OpenGLComponent.cpp" | |||||
| > | |||||
| </File> | |||||
| <File | <File | ||||
| RelativePath="..\platform_specific_code\juce_win32_PlatformUtils.cpp" | RelativePath="..\platform_specific_code\juce_win32_PlatformUtils.cpp" | ||||
| > | > | ||||
| </File> | </File> | ||||
| <File | |||||
| RelativePath="..\platform_specific_code\juce_win32_QuickTimeMovieComponent.cpp" | |||||
| > | |||||
| </File> | |||||
| <File | <File | ||||
| RelativePath="..\platform_specific_code\juce_win32_SystemStats.cpp" | RelativePath="..\platform_specific_code\juce_win32_SystemStats.cpp" | ||||
| > | > | ||||
| @@ -8,20 +8,18 @@ | |||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 84B59D6D0DE34F530041FA3D /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84B59D6C0DE34F530041FA3D /* juce_LibrarySource.mm */; }; | 84B59D6D0DE34F530041FA3D /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84B59D6C0DE34F530041FA3D /* juce_LibrarySource.mm */; }; | ||||
| 84C0A38F0DE2D5C700606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3810DE2D5C700606895 /* AGL.framework */; }; | |||||
| 84C0A3900DE2D5C700606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3820DE2D5C700606895 /* ApplicationServices.framework */; }; | |||||
| 84C0A3910DE2D5C700606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3830DE2D5C700606895 /* AudioUnit.framework */; }; | 84C0A3910DE2D5C700606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3830DE2D5C700606895 /* AudioUnit.framework */; }; | ||||
| 84C0A3920DE2D5C700606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3840DE2D5C700606895 /* Carbon.framework */; }; | |||||
| 84C0A3930DE2D5C700606895 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3850DE2D5C700606895 /* Cocoa.framework */; }; | 84C0A3930DE2D5C700606895 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3850DE2D5C700606895 /* Cocoa.framework */; }; | ||||
| 84C0A3940DE2D5C700606895 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3860DE2D5C700606895 /* CoreAudio.framework */; }; | 84C0A3940DE2D5C700606895 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3860DE2D5C700606895 /* CoreAudio.framework */; }; | ||||
| 84C0A3950DE2D5C700606895 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3870DE2D5C700606895 /* CoreFoundation.framework */; }; | |||||
| 84C0A3960DE2D5C700606895 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3880DE2D5C700606895 /* CoreMIDI.framework */; }; | 84C0A3960DE2D5C700606895 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3880DE2D5C700606895 /* CoreMIDI.framework */; }; | ||||
| 84C0A3970DE2D5C700606895 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3890DE2D5C700606895 /* CoreServices.framework */; }; | 84C0A3970DE2D5C700606895 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3890DE2D5C700606895 /* CoreServices.framework */; }; | ||||
| 84C0A3980DE2D5C700606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38A0DE2D5C700606895 /* DiscRecording.framework */; }; | 84C0A3980DE2D5C700606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38A0DE2D5C700606895 /* DiscRecording.framework */; }; | ||||
| 84C0A3990DE2D5C700606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38B0DE2D5C700606895 /* IOKit.framework */; }; | 84C0A3990DE2D5C700606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38B0DE2D5C700606895 /* IOKit.framework */; }; | ||||
| 84C0A39A0DE2D5C700606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38C0DE2D5C700606895 /* OpenGL.framework */; }; | 84C0A39A0DE2D5C700606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38C0DE2D5C700606895 /* OpenGL.framework */; }; | ||||
| 84C0A39B0DE2D5C700606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38D0DE2D5C700606895 /* QuickTime.framework */; }; | |||||
| 84C0A39C0DE2D5C700606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38E0DE2D5C700606895 /* WebKit.framework */; }; | 84C0A39C0DE2D5C700606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38E0DE2D5C700606895 /* WebKit.framework */; }; | ||||
| 84D16CFE0E9A58CA00CB8B94 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D16CFD0E9A58CA00CB8B94 /* QTKit.framework */; }; | |||||
| 84F6F6160E8EDA7100AA911A /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F6F6150E8EDA7100AA911A /* Carbon.framework */; }; | |||||
| 84F8B6D70EB5FEF70020D98D /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F8B6D60EB5FEF70020D98D /* QuickTime.framework */; }; | |||||
| 84FC4CD90CD8894600850651 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 84FC4CD80CD8894600850651 /* juce.xcconfig */; }; | 84FC4CD90CD8894600850651 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 84FC4CD80CD8894600850651 /* juce.xcconfig */; }; | ||||
| 84FFAEAC0C6C8A6F009F6E72 /* FilterGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FFAE920C6C8A6F009F6E72 /* FilterGraph.cpp */; }; | 84FFAEAC0C6C8A6F009F6E72 /* FilterGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FFAE920C6C8A6F009F6E72 /* FilterGraph.cpp */; }; | ||||
| 84FFAEAD0C6C8A6F009F6E72 /* GraphEditorPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FFAE940C6C8A6F009F6E72 /* GraphEditorPanel.cpp */; }; | 84FFAEAD0C6C8A6F009F6E72 /* GraphEditorPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FFAE940C6C8A6F009F6E72 /* GraphEditorPanel.cpp */; }; | ||||
| @@ -35,20 +33,18 @@ | |||||
| 84B59D6A0DE34F530041FA3D /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; }; | 84B59D6A0DE34F530041FA3D /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84B59D6B0DE34F530041FA3D /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; }; | 84B59D6B0DE34F530041FA3D /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84B59D6C0DE34F530041FA3D /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; }; | 84B59D6C0DE34F530041FA3D /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; }; | ||||
| 84C0A3810DE2D5C700606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3820DE2D5C700606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3830DE2D5C700606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | 84C0A3830DE2D5C700606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3840DE2D5C700606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3850DE2D5C700606895 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | 84C0A3850DE2D5C700606895 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3860DE2D5C700606895 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | 84C0A3860DE2D5C700606895 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3870DE2D5C700606895 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3880DE2D5C700606895 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; | 84C0A3880DE2D5C700606895 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3890DE2D5C700606895 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | 84C0A3890DE2D5C700606895 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A38A0DE2D5C700606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | 84C0A38A0DE2D5C700606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A38B0DE2D5C700606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | 84C0A38B0DE2D5C700606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A38C0DE2D5C700606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | 84C0A38C0DE2D5C700606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A38D0DE2D5C700606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A38E0DE2D5C700606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | 84C0A38E0DE2D5C700606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84D16CFD0E9A58CA00CB8B94 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84F6F6150E8EDA7100AA911A /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||||
| 84F8B6D60EB5FEF70020D98D /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 84FC4CD80CD8894600850651 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | 84FC4CD80CD8894600850651 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | ||||
| 84FFAE920C6C8A6F009F6E72 /* FilterGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = FilterGraph.cpp; path = ../../src/host/FilterGraph.cpp; sourceTree = SOURCE_ROOT; }; | 84FFAE920C6C8A6F009F6E72 /* FilterGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = FilterGraph.cpp; path = ../../src/host/FilterGraph.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84FFAE930C6C8A6F009F6E72 /* FilterGraph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FilterGraph.h; path = ../../src/host/FilterGraph.h; sourceTree = SOURCE_ROOT; }; | 84FFAE930C6C8A6F009F6E72 /* FilterGraph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FilterGraph.h; path = ../../src/host/FilterGraph.h; sourceTree = SOURCE_ROOT; }; | ||||
| @@ -59,7 +55,7 @@ | |||||
| 84FFAE980C6C8A6F009F6E72 /* MainHostWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../src/host/MainHostWindow.cpp; sourceTree = SOURCE_ROOT; }; | 84FFAE980C6C8A6F009F6E72 /* MainHostWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../src/host/MainHostWindow.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84FFAE990C6C8A6F009F6E72 /* MainHostWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../src/host/MainHostWindow.h; sourceTree = SOURCE_ROOT; }; | 84FFAE990C6C8A6F009F6E72 /* MainHostWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../src/host/MainHostWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84FFAE9A0C6C8A6F009F6E72 /* HostStartup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../src/HostStartup.cpp; sourceTree = SOURCE_ROOT; }; | 84FFAE9A0C6C8A6F009F6E72 /* HostStartup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../src/HostStartup.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; }; | |||||
| 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||
| /* Begin PBXFrameworksBuildPhase section */ | /* Begin PBXFrameworksBuildPhase section */ | ||||
| @@ -67,20 +63,18 @@ | |||||
| isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 84C0A38F0DE2D5C700606895 /* AGL.framework in Frameworks */, | |||||
| 84C0A3900DE2D5C700606895 /* ApplicationServices.framework in Frameworks */, | |||||
| 84C0A3910DE2D5C700606895 /* AudioUnit.framework in Frameworks */, | 84C0A3910DE2D5C700606895 /* AudioUnit.framework in Frameworks */, | ||||
| 84C0A3920DE2D5C700606895 /* Carbon.framework in Frameworks */, | |||||
| 84C0A3930DE2D5C700606895 /* Cocoa.framework in Frameworks */, | 84C0A3930DE2D5C700606895 /* Cocoa.framework in Frameworks */, | ||||
| 84C0A3940DE2D5C700606895 /* CoreAudio.framework in Frameworks */, | 84C0A3940DE2D5C700606895 /* CoreAudio.framework in Frameworks */, | ||||
| 84C0A3950DE2D5C700606895 /* CoreFoundation.framework in Frameworks */, | |||||
| 84C0A3960DE2D5C700606895 /* CoreMIDI.framework in Frameworks */, | 84C0A3960DE2D5C700606895 /* CoreMIDI.framework in Frameworks */, | ||||
| 84C0A3970DE2D5C700606895 /* CoreServices.framework in Frameworks */, | 84C0A3970DE2D5C700606895 /* CoreServices.framework in Frameworks */, | ||||
| 84C0A3980DE2D5C700606895 /* DiscRecording.framework in Frameworks */, | 84C0A3980DE2D5C700606895 /* DiscRecording.framework in Frameworks */, | ||||
| 84C0A3990DE2D5C700606895 /* IOKit.framework in Frameworks */, | 84C0A3990DE2D5C700606895 /* IOKit.framework in Frameworks */, | ||||
| 84C0A39A0DE2D5C700606895 /* OpenGL.framework in Frameworks */, | 84C0A39A0DE2D5C700606895 /* OpenGL.framework in Frameworks */, | ||||
| 84C0A39B0DE2D5C700606895 /* QuickTime.framework in Frameworks */, | |||||
| 84C0A39C0DE2D5C700606895 /* WebKit.framework in Frameworks */, | 84C0A39C0DE2D5C700606895 /* WebKit.framework in Frameworks */, | ||||
| 84F6F6160E8EDA7100AA911A /* Carbon.framework in Frameworks */, | |||||
| 84D16CFE0E9A58CA00CB8B94 /* QTKit.framework in Frameworks */, | |||||
| 84F8B6D70EB5FEF70020D98D /* QuickTime.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -137,19 +131,17 @@ | |||||
| 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { | 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84C0A3810DE2D5C700606895 /* AGL.framework */, | |||||
| 84C0A3820DE2D5C700606895 /* ApplicationServices.framework */, | |||||
| 84F6F6150E8EDA7100AA911A /* Carbon.framework */, | |||||
| 84C0A3830DE2D5C700606895 /* AudioUnit.framework */, | 84C0A3830DE2D5C700606895 /* AudioUnit.framework */, | ||||
| 84C0A3840DE2D5C700606895 /* Carbon.framework */, | |||||
| 84C0A3850DE2D5C700606895 /* Cocoa.framework */, | 84C0A3850DE2D5C700606895 /* Cocoa.framework */, | ||||
| 84C0A3860DE2D5C700606895 /* CoreAudio.framework */, | 84C0A3860DE2D5C700606895 /* CoreAudio.framework */, | ||||
| 84C0A3870DE2D5C700606895 /* CoreFoundation.framework */, | |||||
| 84C0A3880DE2D5C700606895 /* CoreMIDI.framework */, | 84C0A3880DE2D5C700606895 /* CoreMIDI.framework */, | ||||
| 84C0A3890DE2D5C700606895 /* CoreServices.framework */, | 84C0A3890DE2D5C700606895 /* CoreServices.framework */, | ||||
| 84C0A38A0DE2D5C700606895 /* DiscRecording.framework */, | 84C0A38A0DE2D5C700606895 /* DiscRecording.framework */, | ||||
| 84C0A38B0DE2D5C700606895 /* IOKit.framework */, | 84C0A38B0DE2D5C700606895 /* IOKit.framework */, | ||||
| 84F8B6D60EB5FEF70020D98D /* QuickTime.framework */, | |||||
| 84C0A38C0DE2D5C700606895 /* OpenGL.framework */, | 84C0A38C0DE2D5C700606895 /* OpenGL.framework */, | ||||
| 84C0A38D0DE2D5C700606895 /* QuickTime.framework */, | |||||
| 84D16CFD0E9A58CA00CB8B94 /* QTKit.framework */, | |||||
| 84C0A38E0DE2D5C700606895 /* WebKit.framework */, | 84C0A38E0DE2D5C700606895 /* WebKit.framework */, | ||||
| ); | ); | ||||
| name = "External Frameworks and Libraries"; | name = "External Frameworks and Libraries"; | ||||
| @@ -225,6 +217,8 @@ | |||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| buildSettings = { | buildSettings = { | ||||
| COPY_PHASE_STRIP = NO; | COPY_PHASE_STRIP = NO; | ||||
| KEEP_PRIVATE_EXTERNS = YES; | |||||
| STRIP_INSTALLED_PRODUCT = YES; | |||||
| }; | }; | ||||
| name = Debug; | name = Debug; | ||||
| }; | }; | ||||
| @@ -75,6 +75,8 @@ public: | |||||
| commandManager->registerAllCommandsForTarget (this); | commandManager->registerAllCommandsForTarget (this); | ||||
| commandManager->registerAllCommandsForTarget (mainWindow); | commandManager->registerAllCommandsForTarget (mainWindow); | ||||
| mainWindow->menuItemsChanged(); | |||||
| } | } | ||||
| void shutdown() | void shutdown() | ||||
| @@ -100,12 +100,6 @@ MainHostWindow::MainHostWindow() | |||||
| restoreWindowStateFromString (ApplicationProperties::getInstance()->getUserSettings()->getValue ("mainWindowPos")); | restoreWindowStateFromString (ApplicationProperties::getInstance()->getUserSettings()->getValue ("mainWindowPos")); | ||||
| #if JUCE_MAC | |||||
| setMacMainMenu (this); | |||||
| #else | |||||
| setMenuBar (this); | |||||
| #endif | |||||
| setVisible (true); | setVisible (true); | ||||
| InternalPluginFormat internalFormat; | InternalPluginFormat internalFormat; | ||||
| @@ -129,6 +123,12 @@ MainHostWindow::MainHostWindow() | |||||
| addKeyListener (commandManager->getKeyMappings()); | addKeyListener (commandManager->getKeyMappings()); | ||||
| Process::setPriority (Process::HighPriority); | Process::setPriority (Process::HighPriority); | ||||
| #if JUCE_MAC | |||||
| setMacMainMenu (this); | |||||
| #else | |||||
| setMenuBar (this); | |||||
| #endif | |||||
| } | } | ||||
| MainHostWindow::~MainHostWindow() | MainHostWindow::~MainHostWindow() | ||||
| @@ -441,7 +441,7 @@ void MainHostWindow::showAudioSettings() | |||||
| AudioDeviceSelectorComponent audioSettingsComp (deviceManager, | AudioDeviceSelectorComponent audioSettingsComp (deviceManager, | ||||
| 0, 256, | 0, 256, | ||||
| 0, 256, | 0, 256, | ||||
| true, true, true); | |||||
| true, true, true, false); | |||||
| audioSettingsComp.setSize (500, 450); | audioSettingsComp.setSize (500, 450); | ||||
| @@ -1,5 +1,6 @@ | |||||
| #include "juce_AppConfig.h" | #include "juce_AppConfig.h" | ||||
| #include "../../../juce_amalgamated.h" | |||||
| //#include "../../../juce_amalgamated.h" | |||||
| #include "../../../juce.h" | |||||
| using JUCE_NAMESPACE::uint32; | using JUCE_NAMESPACE::uint32; | ||||
| @@ -1,9 +1,8 @@ | |||||
| # | |||||
| # This file must contain entries for the two AU entry points. | |||||
| # | |||||
| # Your JucePluginCharacteristics.h file must define the prefix used for these function names - for | |||||
| # more info, see the comments in JucePluginCharacteristics.h | |||||
| # | |||||
| _JuceDemoAUEntry | |||||
| _JuceDemoAUViewEntry | |||||
| # | |||||
| # This file must contain the AU component's entry point. | |||||
| # | |||||
| # Your JucePluginCharacteristics.h file must define the prefix used for this | |||||
| # function name - for more info, see the comments in JucePluginCharacteristics.h | |||||
| # | |||||
| _JuceDemoAUEntry | |||||
| @@ -15,6 +15,7 @@ | |||||
| 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */; }; | 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */; }; | ||||
| 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */; }; | 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */; }; | ||||
| 3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */; }; | 3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */; }; | ||||
| 840BE1CD0EACFEC400824B1D /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840BE1CC0EACFEC400824B1D /* QTKit.framework */; }; | |||||
| 84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F820D917FC700AE1A4C /* AUBase.cpp */; }; | 84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F820D917FC700AE1A4C /* AUBase.cpp */; }; | ||||
| 84581F900D917FC700AE1A4C /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F830D917FC700AE1A4C /* AUBase.h */; }; | 84581F900D917FC700AE1A4C /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F830D917FC700AE1A4C /* AUBase.h */; }; | ||||
| 84581F910D917FC700AE1A4C /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F840D917FC700AE1A4C /* AUDispatch.cpp */; }; | 84581F910D917FC700AE1A4C /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F840D917FC700AE1A4C /* AUDispatch.cpp */; }; | ||||
| @@ -27,11 +28,11 @@ | |||||
| 84581F990D917FC700AE1A4C /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8C0D917FC700AE1A4C /* AUScopeElement.h */; }; | 84581F990D917FC700AE1A4C /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8C0D917FC700AE1A4C /* AUScopeElement.h */; }; | ||||
| 84581F9A0D917FC700AE1A4C /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */; }; | 84581F9A0D917FC700AE1A4C /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */; }; | ||||
| 84581F9B0D917FC700AE1A4C /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8E0D917FC700AE1A4C /* ComponentBase.h */; }; | 84581F9B0D917FC700AE1A4C /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8E0D917FC700AE1A4C /* ComponentBase.h */; }; | ||||
| 846EC62C0EB601D80080CCFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC62B0EB601D80080CCFF /* QuickTime.framework */; }; | |||||
| 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */; }; | 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */; }; | ||||
| 84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */; }; | 84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */; }; | ||||
| 84C09D2A0DE2C52600606895 /* includes.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C09D290DE2C52600606895 /* includes.h */; }; | 84C09D2A0DE2C52600606895 /* includes.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C09D290DE2C52600606895 /* includes.h */; }; | ||||
| 84C09D3F0DE2C57300606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C09D3E0DE2C57300606895 /* juce_amalgamated.mm */; }; | 84C09D3F0DE2C57300606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C09D3E0DE2C57300606895 /* juce_amalgamated.mm */; }; | ||||
| 84C0A2A10DE2C7BD00606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2930DE2C7BD00606895 /* AGL.framework */; }; | |||||
| 84C0A2A20DE2C7BD00606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */; }; | 84C0A2A20DE2C7BD00606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */; }; | ||||
| 84C0A2A30DE2C7BD00606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2950DE2C7BD00606895 /* AudioUnit.framework */; }; | 84C0A2A30DE2C7BD00606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2950DE2C7BD00606895 /* AudioUnit.framework */; }; | ||||
| 84C0A2A40DE2C7BD00606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2960DE2C7BD00606895 /* Carbon.framework */; }; | 84C0A2A40DE2C7BD00606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2960DE2C7BD00606895 /* Carbon.framework */; }; | ||||
| @@ -43,16 +44,11 @@ | |||||
| 84C0A2AA0DE2C7BD00606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */; }; | 84C0A2AA0DE2C7BD00606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */; }; | ||||
| 84C0A2AB0DE2C7BD00606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29D0DE2C7BD00606895 /* IOKit.framework */; }; | 84C0A2AB0DE2C7BD00606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29D0DE2C7BD00606895 /* IOKit.framework */; }; | ||||
| 84C0A2AC0DE2C7BD00606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29E0DE2C7BD00606895 /* OpenGL.framework */; }; | 84C0A2AC0DE2C7BD00606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29E0DE2C7BD00606895 /* OpenGL.framework */; }; | ||||
| 84C0A2AD0DE2C7BD00606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29F0DE2C7BD00606895 /* QuickTime.framework */; }; | |||||
| 84C0A2AE0DE2C7BD00606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2A00DE2C7BD00606895 /* WebKit.framework */; }; | 84C0A2AE0DE2C7BD00606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2A00DE2C7BD00606895 /* WebKit.framework */; }; | ||||
| 84C0A2B30DE2C80200606895 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2B20DE2C80200606895 /* AudioToolbox.framework */; }; | 84C0A2B30DE2C80200606895 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2B20DE2C80200606895 /* AudioToolbox.framework */; }; | ||||
| 84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */; }; | |||||
| 84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */; }; | |||||
| 84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */; }; | |||||
| 84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */; }; | |||||
| 84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EF64FA42057BC39200D99563 /* CAAUParameter.cpp */; }; | 84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EF64FA42057BC39200D99563 /* CAAUParameter.cpp */; }; | ||||
| 84CFB029090968590053C22C /* DemoJuceAudioUnit.component in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */; }; | 84CFB029090968590053C22C /* DemoJuceAudioUnit.component in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */; }; | ||||
| 84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */; }; | |||||
| 84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm */; }; | |||||
| 84EB400C090A4A2C008FAC1B /* juce_AudioUnitWrapper.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */; }; | 84EB400C090A4A2C008FAC1B /* juce_AudioUnitWrapper.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */; }; | ||||
| 84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4E5DC280898301D00589A5A /* CAVectorUnit.cpp */; }; | 84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4E5DC280898301D00589A5A /* CAVectorUnit.cpp */; }; | ||||
| 84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */; }; | 84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */; }; | ||||
| @@ -88,6 +84,7 @@ | |||||
| 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; }; | 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; }; | ||||
| 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; }; | 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; }; | ||||
| 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; }; | 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; }; | ||||
| 840BE1CC0EACFEC400824B1D /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84581F820D917FC700AE1A4C /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp; sourceTree = "<absolute>"; }; | 84581F820D917FC700AE1A4C /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp; sourceTree = "<absolute>"; }; | ||||
| 84581F830D917FC700AE1A4C /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.h; sourceTree = "<absolute>"; }; | 84581F830D917FC700AE1A4C /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.h; sourceTree = "<absolute>"; }; | ||||
| 84581F840D917FC700AE1A4C /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUDispatch.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp; sourceTree = "<absolute>"; }; | 84581F840D917FC700AE1A4C /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUDispatch.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp; sourceTree = "<absolute>"; }; | ||||
| @@ -101,11 +98,11 @@ | |||||
| 84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.cpp; sourceTree = "<absolute>"; }; | 84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.cpp; sourceTree = "<absolute>"; }; | ||||
| 84581F8E0D917FC700AE1A4C /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.h; sourceTree = "<absolute>"; }; | 84581F8E0D917FC700AE1A4C /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.h; sourceTree = "<absolute>"; }; | ||||
| 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | ||||
| 846EC62B0EB601D80080CCFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "<absolute>"; }; | 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "<absolute>"; }; | ||||
| 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MusicDeviceBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.h; sourceTree = "<absolute>"; }; | 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MusicDeviceBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.h; sourceTree = "<absolute>"; }; | ||||
| 84C09D290DE2C52600606895 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; }; | 84C09D290DE2C52600606895 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84C09D3E0DE2C57300606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; }; | 84C09D3E0DE2C57300606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; }; | ||||
| 84C0A2930DE2C7BD00606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | 84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2950DE2C7BD00606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | 84C0A2950DE2C7BD00606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2960DE2C7BD00606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | 84C0A2960DE2C7BD00606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | ||||
| @@ -117,13 +114,12 @@ | |||||
| 84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | 84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A29D0DE2C7BD00606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | 84C0A29D0DE2C7BD00606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A29E0DE2C7BD00606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | 84C0A29E0DE2C7BD00606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A29F0DE2C7BD00606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A2A00DE2C7BD00606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | 84C0A2A00DE2C7BD00606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2B20DE2C80200606895 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; }; | 84C0A2B20DE2C80200606895 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; }; | ||||
| 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioUnitWrapper.cpp; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 2; name = juce_AudioUnitWrapper.mm; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.mm; sourceTree = SOURCE_ROOT; }; | |||||
| 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = juce_AudioUnitWrapper.r; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.r; sourceTree = SOURCE_ROOT; }; | 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = juce_AudioUnitWrapper.r; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.r; sourceTree = SOURCE_ROOT; }; | ||||
| 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84F05215090674BB00AEC8DB /* Info-JuceAU.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Info-JuceAU.plist"; sourceTree = "<group>"; }; | |||||
| 84F05215090674BB00AEC8DB /* Info-JuceAU.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "Info-JuceAU.plist"; sourceTree = "<group>"; }; | |||||
| 84F05217090674BB00AEC8DB /* JuceAU.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = JuceAU.exp; sourceTree = "<group>"; }; | 84F05217090674BB00AEC8DB /* JuceAU.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = JuceAU.exp; sourceTree = "<group>"; }; | ||||
| 84F054E40906C8DD00AEC8DB /* AUMIDIBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.cpp; sourceTree = "<absolute>"; }; | 84F054E40906C8DD00AEC8DB /* AUMIDIBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.cpp; sourceTree = "<absolute>"; }; | ||||
| 84F054E50906C8DD00AEC8DB /* AUMIDIBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AUMIDIBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.h; sourceTree = "<absolute>"; }; | 84F054E50906C8DD00AEC8DB /* AUMIDIBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AUMIDIBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.h; sourceTree = "<absolute>"; }; | ||||
| @@ -146,13 +142,6 @@ | |||||
| F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; }; | F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; }; | ||||
| F5D19A0F03175E1E01CA2136 /* AUBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; }; | F5D19A0F03175E1E01CA2136 /* AUBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; }; | ||||
| F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; }; | F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; }; | ||||
| F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewBase.cpp; sourceTree = "<group>"; }; | |||||
| F5D19AA803175F3201CA2136 /* AUCarbonViewBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewBase.h; sourceTree = "<group>"; }; | |||||
| F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewControl.cpp; sourceTree = "<group>"; }; | |||||
| F5D19AAA03175F3201CA2136 /* AUCarbonViewControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewControl.h; sourceTree = "<group>"; }; | |||||
| F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewDispatch.cpp; sourceTree = "<group>"; }; | |||||
| F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CarbonEventHandler.cpp; sourceTree = "<group>"; }; | |||||
| F5D19AB103175F3201CA2136 /* CarbonEventHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CarbonEventHandler.h; sourceTree = "<group>"; }; | |||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||
| /* Begin PBXFrameworksBuildPhase section */ | /* Begin PBXFrameworksBuildPhase section */ | ||||
| @@ -160,7 +149,6 @@ | |||||
| isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 84C0A2A10DE2C7BD00606895 /* AGL.framework in Frameworks */, | |||||
| 84C0A2A20DE2C7BD00606895 /* ApplicationServices.framework in Frameworks */, | 84C0A2A20DE2C7BD00606895 /* ApplicationServices.framework in Frameworks */, | ||||
| 84C0A2A30DE2C7BD00606895 /* AudioUnit.framework in Frameworks */, | 84C0A2A30DE2C7BD00606895 /* AudioUnit.framework in Frameworks */, | ||||
| 84C0A2A40DE2C7BD00606895 /* Carbon.framework in Frameworks */, | 84C0A2A40DE2C7BD00606895 /* Carbon.framework in Frameworks */, | ||||
| @@ -172,9 +160,10 @@ | |||||
| 84C0A2AA0DE2C7BD00606895 /* DiscRecording.framework in Frameworks */, | 84C0A2AA0DE2C7BD00606895 /* DiscRecording.framework in Frameworks */, | ||||
| 84C0A2AB0DE2C7BD00606895 /* IOKit.framework in Frameworks */, | 84C0A2AB0DE2C7BD00606895 /* IOKit.framework in Frameworks */, | ||||
| 84C0A2AC0DE2C7BD00606895 /* OpenGL.framework in Frameworks */, | 84C0A2AC0DE2C7BD00606895 /* OpenGL.framework in Frameworks */, | ||||
| 84C0A2AD0DE2C7BD00606895 /* QuickTime.framework in Frameworks */, | |||||
| 84C0A2AE0DE2C7BD00606895 /* WebKit.framework in Frameworks */, | 84C0A2AE0DE2C7BD00606895 /* WebKit.framework in Frameworks */, | ||||
| 84C0A2B30DE2C80200606895 /* AudioToolbox.framework in Frameworks */, | 84C0A2B30DE2C80200606895 /* AudioToolbox.framework in Frameworks */, | ||||
| 840BE1CD0EACFEC400824B1D /* QTKit.framework in Frameworks */, | |||||
| 846EC62C0EB601D80080CCFF /* QuickTime.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -184,7 +173,7 @@ | |||||
| 84EB403B090A4ED3008FAC1B /* Juce AU Code */ = { | 84EB403B090A4ED3008FAC1B /* Juce AU Code */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */, | |||||
| 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm */, | |||||
| 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */, | 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */, | ||||
| ); | ); | ||||
| name = "Juce AU Code"; | name = "Juce AU Code"; | ||||
| @@ -246,7 +235,6 @@ | |||||
| children = ( | children = ( | ||||
| F5D199EB03175E1E01CA2136 /* AUBase */, | F5D199EB03175E1E01CA2136 /* AUBase */, | ||||
| A3C2CC6005B4A4BE000F141E /* AUViewBase */, | A3C2CC6005B4A4BE000F141E /* AUViewBase */, | ||||
| F5D19AA603175F3201CA2136 /* AUCarbonViewBase */, | |||||
| F5D199FD03175E1E01CA2136 /* OtherBases */, | F5D199FD03175E1E01CA2136 /* OtherBases */, | ||||
| F5D19A0C03175E1E01CA2136 /* Utility */, | F5D19A0C03175E1E01CA2136 /* Utility */, | ||||
| F5D19A3603175E8C01CA2136 /* PublicUtility */, | F5D19A3603175E8C01CA2136 /* PublicUtility */, | ||||
| @@ -259,7 +247,6 @@ | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84C0A2B20DE2C80200606895 /* AudioToolbox.framework */, | 84C0A2B20DE2C80200606895 /* AudioToolbox.framework */, | ||||
| 84C0A2930DE2C7BD00606895 /* AGL.framework */, | |||||
| 84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */, | 84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */, | ||||
| 84C0A2950DE2C7BD00606895 /* AudioUnit.framework */, | 84C0A2950DE2C7BD00606895 /* AudioUnit.framework */, | ||||
| 84C0A2960DE2C7BD00606895 /* Carbon.framework */, | 84C0A2960DE2C7BD00606895 /* Carbon.framework */, | ||||
| @@ -269,9 +256,10 @@ | |||||
| 84C0A29A0DE2C7BD00606895 /* CoreMIDI.framework */, | 84C0A29A0DE2C7BD00606895 /* CoreMIDI.framework */, | ||||
| 84C0A29B0DE2C7BD00606895 /* CoreServices.framework */, | 84C0A29B0DE2C7BD00606895 /* CoreServices.framework */, | ||||
| 84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */, | 84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */, | ||||
| 840BE1CC0EACFEC400824B1D /* QTKit.framework */, | |||||
| 846EC62B0EB601D80080CCFF /* QuickTime.framework */, | |||||
| 84C0A29D0DE2C7BD00606895 /* IOKit.framework */, | 84C0A29D0DE2C7BD00606895 /* IOKit.framework */, | ||||
| 84C0A29E0DE2C7BD00606895 /* OpenGL.framework */, | 84C0A29E0DE2C7BD00606895 /* OpenGL.framework */, | ||||
| 84C0A29F0DE2C7BD00606895 /* QuickTime.framework */, | |||||
| 84C0A2A00DE2C7BD00606895 /* WebKit.framework */, | 84C0A2A00DE2C7BD00606895 /* WebKit.framework */, | ||||
| ); | ); | ||||
| name = Frameworks; | name = Frameworks; | ||||
| @@ -349,20 +337,6 @@ | |||||
| path = /Developer/Examples/CoreAudio/PublicUtility; | path = /Developer/Examples/CoreAudio/PublicUtility; | ||||
| sourceTree = "<absolute>"; | sourceTree = "<absolute>"; | ||||
| }; | }; | ||||
| F5D19AA603175F3201CA2136 /* AUCarbonViewBase */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */, | |||||
| F5D19AA803175F3201CA2136 /* AUCarbonViewBase.h */, | |||||
| F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */, | |||||
| F5D19AAA03175F3201CA2136 /* AUCarbonViewControl.h */, | |||||
| F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */, | |||||
| F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */, | |||||
| F5D19AB103175F3201CA2136 /* CarbonEventHandler.h */, | |||||
| ); | |||||
| path = AUCarbonViewBase; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| /* End PBXGroup section */ | /* End PBXGroup section */ | ||||
| /* Begin PBXHeadersBuildPhase section */ | /* Begin PBXHeadersBuildPhase section */ | ||||
| @@ -465,17 +439,13 @@ | |||||
| 3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */, | 3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */, | ||||
| 3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */, | 3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */, | ||||
| 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */, | 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */, | ||||
| 84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */, | |||||
| 84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */, | |||||
| 84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */, | |||||
| 84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */, | |||||
| 84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */, | 84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */, | ||||
| 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */, | 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */, | ||||
| 84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */, | 84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */, | ||||
| 84F054EA0906C8DD00AEC8DB /* AUMIDIEffectBase.cpp in Sources */, | 84F054EA0906C8DD00AEC8DB /* AUMIDIEffectBase.cpp in Sources */, | ||||
| 84F055010906E9EA00AEC8DB /* DemoEditorComponent.cpp in Sources */, | 84F055010906E9EA00AEC8DB /* DemoEditorComponent.cpp in Sources */, | ||||
| 84F055030906E9EA00AEC8DB /* DemoJuceFilter.cpp in Sources */, | 84F055030906E9EA00AEC8DB /* DemoJuceFilter.cpp in Sources */, | ||||
| 84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */, | |||||
| 84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm in Sources */, | |||||
| 84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */, | 84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */, | ||||
| 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */, | 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */, | ||||
| 84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */, | 84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */, | ||||
| @@ -7,9 +7,9 @@ | |||||
| objects = { | objects = { | ||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 84190D1A0EA5320900B939D0 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84190D190EA5320900B939D0 /* Carbon.framework */; }; | |||||
| 841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */; }; | 841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */; }; | ||||
| 841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */; }; | 841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */; }; | ||||
| 841E073D0AF9F099005E6FCC /* juce_RTASUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */; }; | |||||
| 841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */; }; | 841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */; }; | ||||
| 846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */; }; | 846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */; }; | ||||
| 846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */; }; | 846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */; }; | ||||
| @@ -21,23 +21,22 @@ | |||||
| 846444F60AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E90AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp */; }; | 846444F60AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E90AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp */; }; | ||||
| 846444F70AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */; }; | 846444F70AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */; }; | ||||
| 846444FA0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */; }; | 846444FA0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */; }; | ||||
| 84C0A3020DE2CBE500606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F40DE2CBE500606895 /* AGL.framework */; }; | |||||
| 846EC6670EB602B90080CCFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC6660EB602B90080CCFF /* QuickTime.framework */; }; | |||||
| 84C0A3030DE2CBE500606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */; }; | 84C0A3030DE2CBE500606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */; }; | ||||
| 84C0A3040DE2CBE500606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F60DE2CBE500606895 /* AudioUnit.framework */; }; | 84C0A3040DE2CBE500606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F60DE2CBE500606895 /* AudioUnit.framework */; }; | ||||
| 84C0A3050DE2CBE500606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F70DE2CBE500606895 /* Carbon.framework */; }; | |||||
| 84C0A3060DE2CBE500606895 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F80DE2CBE500606895 /* Cocoa.framework */; }; | 84C0A3060DE2CBE500606895 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F80DE2CBE500606895 /* Cocoa.framework */; }; | ||||
| 84C0A3070DE2CBE500606895 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F90DE2CBE500606895 /* CoreAudio.framework */; }; | 84C0A3070DE2CBE500606895 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F90DE2CBE500606895 /* CoreAudio.framework */; }; | ||||
| 84C0A3080DE2CBE500606895 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FA0DE2CBE500606895 /* CoreFoundation.framework */; }; | |||||
| 84C0A3090DE2CBE500606895 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */; }; | 84C0A3090DE2CBE500606895 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */; }; | ||||
| 84C0A30A0DE2CBE500606895 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FC0DE2CBE500606895 /* CoreServices.framework */; }; | 84C0A30A0DE2CBE500606895 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FC0DE2CBE500606895 /* CoreServices.framework */; }; | ||||
| 84C0A30B0DE2CBE500606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FD0DE2CBE500606895 /* DiscRecording.framework */; }; | |||||
| 84C0A30C0DE2CBE500606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FE0DE2CBE500606895 /* IOKit.framework */; }; | 84C0A30C0DE2CBE500606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FE0DE2CBE500606895 /* IOKit.framework */; }; | ||||
| 84C0A30D0DE2CBE600606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FF0DE2CBE500606895 /* OpenGL.framework */; }; | |||||
| 84C0A30E0DE2CBE600606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3000DE2CBE500606895 /* QuickTime.framework */; }; | |||||
| 84C0A30F0DE2CBE600606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3010DE2CBE500606895 /* WebKit.framework */; }; | |||||
| 84C0A3110DE2CC0600606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C0A3100DE2CC0600606895 /* juce_amalgamated.mm */; }; | 84C0A3110DE2CC0600606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C0A3100DE2CC0600606895 /* juce_amalgamated.mm */; }; | ||||
| 84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */; }; | 84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */; }; | ||||
| 84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */; }; | 84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */; }; | ||||
| 84E903C00EA34FD70088E51C /* juce_RTASUtilities.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E903BF0EA34FD70088E51C /* juce_RTASUtilities.mm */; }; | |||||
| 84E904D00EA351E40088E51C /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E904CF0EA351E40088E51C /* QTKit.framework */; }; | |||||
| 84E907CB0EA396A50088E51C /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E907CA0EA396A50088E51C /* DiscRecording.framework */; }; | |||||
| 84E90C250EA399090088E51C /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E90C240EA399090088E51C /* WebKit.framework */; }; | |||||
| 84E90C2B0EA39A110088E51C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E90C2A0EA39A110088E51C /* OpenGL.framework */; }; | |||||
| 84EEB4180AFB6679009655FF /* DummyResourceFile.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EEB4170AFB6679009655FF /* DummyResourceFile.r */; }; | 84EEB4180AFB6679009655FF /* DummyResourceFile.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EEB4170AFB6679009655FF /* DummyResourceFile.r */; }; | ||||
| 84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD7770C7C897000AF3028 /* libPluginLibrary.a */; }; | 84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD7770C7C897000AF3028 /* libPluginLibrary.a */; }; | ||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||
| @@ -54,14 +53,14 @@ | |||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||
| 5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PluginLibrary.xcodeproj; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/PlugInLibrary/MacBuild/PluginLibrary.xcodeproj; sourceTree = "<absolute>"; }; | 5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PluginLibrary.xcodeproj; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/PlugInLibrary/MacBuild/PluginLibrary.xcodeproj; sourceTree = "<absolute>"; }; | ||||
| 84190D190EA5320900B939D0 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||||
| 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 841E072C0AF9F015005E6FCC /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; }; | 841E072C0AF9F015005E6FCC /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
| 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; }; | 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 841E072E0AF9F015005E6FCC /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; }; | 841E072E0AF9F015005E6FCC /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; }; | ||||
| 841E072F0AF9F015005E6FCC /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | 841E072F0AF9F015005E6FCC /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | ||||
| 841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTASUtilities.cpp; path = ../../../wrapper/formats/RTAS/juce_RTASUtilities.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTASWrapper.cpp; path = ../../../wrapper/formats/RTAS/juce_RTASWrapper.cpp; sourceTree = SOURCE_ROOT; }; | 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTASWrapper.cpp; path = ../../../wrapper/formats/RTAS/juce_RTASWrapper.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 841E07420AF9F126005E6FCC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; }; | |||||
| 841E07420AF9F126005E6FCC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||||
| 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroup.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroup.cpp; sourceTree = SOURCE_ROOT; }; | 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroup.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroup.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroupMIDI.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroupMIDI.cpp; sourceTree = SOURCE_ROOT; }; | 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroupMIDI.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroupMIDI.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 846444E40AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectMIDIUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectMIDIUtils.cpp; sourceTree = SOURCE_ROOT; }; | 846444E40AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectMIDIUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectMIDIUtils.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| @@ -73,26 +72,25 @@ | |||||
| 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_ChunkDataParser.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_ChunkDataParser.cpp; sourceTree = SOURCE_ROOT; }; | 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_ChunkDataParser.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_ChunkDataParser.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 846444ED0AFA005B00E7B2BE /* juce_Wrapper_Header.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Wrapper_Header.h; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Header.h; sourceTree = SOURCE_ROOT; }; | 846444ED0AFA005B00E7B2BE /* juce_Wrapper_Header.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Wrapper_Header.h; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Header.h; sourceTree = SOURCE_ROOT; }; | ||||
| 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PlugInUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PlugInUtils.cpp; sourceTree = SOURCE_ROOT; }; | 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PlugInUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PlugInUtils.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 846EC6660EB602B90080CCFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 8498C1430E06D7D200FC76A6 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; }; | 8498C1430E06D7D200FC76A6 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84C0A2F40DE2CBE500606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | 84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2F60DE2CBE500606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | 84C0A2F60DE2CBE500606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2F70DE2CBE500606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A2F80DE2CBE500606895 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | 84C0A2F80DE2CBE500606895 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2F90DE2CBE500606895 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | 84C0A2F90DE2CBE500606895 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2FA0DE2CBE500606895 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; | 84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2FC0DE2CBE500606895 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | 84C0A2FC0DE2CBE500606895 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2FD0DE2CBE500606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A2FE0DE2CBE500606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | 84C0A2FE0DE2CBE500606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A2FF0DE2CBE500606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3000DE2CBE500606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3010DE2CBE500606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3100DE2CC0600606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; }; | 84C0A3100DE2CC0600606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; }; | ||||
| 84C442690B306D39003FCBFF /* CommonReleaseSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonReleaseSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonReleaseSettings.xcconfig; sourceTree = "<absolute>"; }; | 84C442690B306D39003FCBFF /* CommonReleaseSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonReleaseSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonReleaseSettings.xcconfig; sourceTree = "<absolute>"; }; | ||||
| 84C4426A0B306D39003FCBFF /* CommonDebugSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonDebugSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonDebugSettings.xcconfig; sourceTree = "<absolute>"; }; | 84C4426A0B306D39003FCBFF /* CommonDebugSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonDebugSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonDebugSettings.xcconfig; sourceTree = "<absolute>"; }; | ||||
| 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_Dispatcher.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Dispatcher.cpp; sourceTree = SOURCE_ROOT; }; | 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_Dispatcher.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Dispatcher.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PluginInitialize.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PluginInitialize.cpp; sourceTree = SOURCE_ROOT; }; | 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PluginInitialize.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PluginInitialize.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84E903BF0EA34FD70088E51C /* juce_RTASUtilities.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_RTASUtilities.mm; path = ../../../wrapper/formats/RTAS/juce_RTASUtilities.mm; sourceTree = SOURCE_ROOT; }; | |||||
| 84E904CF0EA351E40088E51C /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84E907CA0EA396A50088E51C /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | |||||
| 84E90C240EA399090088E51C /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84E90C2A0EA39A110088E51C /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | |||||
| 84EEB4170AFB6679009655FF /* DummyResourceFile.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = DummyResourceFile.r; path = ../../../wrapper/formats/RTAS/DummyResourceFile.r; sourceTree = SOURCE_ROOT; }; | 84EEB4170AFB6679009655FF /* DummyResourceFile.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = DummyResourceFile.r; path = ../../../wrapper/formats/RTAS/DummyResourceFile.r; sourceTree = SOURCE_ROOT; }; | ||||
| 84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_RTASCompileFlags.h; path = ../../../wrapper/formats/RTAS/juce_RTASCompileFlags.h; sourceTree = SOURCE_ROOT; }; | 84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_RTASCompileFlags.h; path = ../../../wrapper/formats/RTAS/juce_RTASCompileFlags.h; sourceTree = SOURCE_ROOT; }; | ||||
| 8D01CCD20486CAD60068D4B7 /* JuceRTASDemo.dpm */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceRTASDemo.dpm; sourceTree = BUILT_PRODUCTS_DIR; }; | 8D01CCD20486CAD60068D4B7 /* JuceRTASDemo.dpm */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceRTASDemo.dpm; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||
| @@ -104,20 +102,19 @@ | |||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */, | 84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */, | ||||
| 84C0A3020DE2CBE500606895 /* AGL.framework in Frameworks */, | |||||
| 84C0A3030DE2CBE500606895 /* ApplicationServices.framework in Frameworks */, | 84C0A3030DE2CBE500606895 /* ApplicationServices.framework in Frameworks */, | ||||
| 84C0A3040DE2CBE500606895 /* AudioUnit.framework in Frameworks */, | 84C0A3040DE2CBE500606895 /* AudioUnit.framework in Frameworks */, | ||||
| 84C0A3050DE2CBE500606895 /* Carbon.framework in Frameworks */, | |||||
| 84C0A3060DE2CBE500606895 /* Cocoa.framework in Frameworks */, | 84C0A3060DE2CBE500606895 /* Cocoa.framework in Frameworks */, | ||||
| 84C0A3070DE2CBE500606895 /* CoreAudio.framework in Frameworks */, | 84C0A3070DE2CBE500606895 /* CoreAudio.framework in Frameworks */, | ||||
| 84C0A3080DE2CBE500606895 /* CoreFoundation.framework in Frameworks */, | |||||
| 84C0A3090DE2CBE500606895 /* CoreMIDI.framework in Frameworks */, | 84C0A3090DE2CBE500606895 /* CoreMIDI.framework in Frameworks */, | ||||
| 84C0A30A0DE2CBE500606895 /* CoreServices.framework in Frameworks */, | 84C0A30A0DE2CBE500606895 /* CoreServices.framework in Frameworks */, | ||||
| 84C0A30B0DE2CBE500606895 /* DiscRecording.framework in Frameworks */, | |||||
| 84C0A30C0DE2CBE500606895 /* IOKit.framework in Frameworks */, | 84C0A30C0DE2CBE500606895 /* IOKit.framework in Frameworks */, | ||||
| 84C0A30D0DE2CBE600606895 /* OpenGL.framework in Frameworks */, | |||||
| 84C0A30E0DE2CBE600606895 /* QuickTime.framework in Frameworks */, | |||||
| 84C0A30F0DE2CBE600606895 /* WebKit.framework in Frameworks */, | |||||
| 84E904D00EA351E40088E51C /* QTKit.framework in Frameworks */, | |||||
| 84E907CB0EA396A50088E51C /* DiscRecording.framework in Frameworks */, | |||||
| 84E90C250EA399090088E51C /* WebKit.framework in Frameworks */, | |||||
| 84E90C2B0EA39A110088E51C /* OpenGL.framework in Frameworks */, | |||||
| 84190D1A0EA5320900B939D0 /* Carbon.framework in Frameworks */, | |||||
| 846EC6670EB602B90080CCFF /* QuickTime.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -140,21 +137,20 @@ | |||||
| 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { | 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84C0A2F40DE2CBE500606895 /* AGL.framework */, | |||||
| 5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */, | |||||
| 84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */, | 84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */, | ||||
| 84C0A2F60DE2CBE500606895 /* AudioUnit.framework */, | 84C0A2F60DE2CBE500606895 /* AudioUnit.framework */, | ||||
| 84C0A2F70DE2CBE500606895 /* Carbon.framework */, | |||||
| 84C0A2F80DE2CBE500606895 /* Cocoa.framework */, | 84C0A2F80DE2CBE500606895 /* Cocoa.framework */, | ||||
| 84190D190EA5320900B939D0 /* Carbon.framework */, | |||||
| 84C0A2F90DE2CBE500606895 /* CoreAudio.framework */, | 84C0A2F90DE2CBE500606895 /* CoreAudio.framework */, | ||||
| 84C0A2FA0DE2CBE500606895 /* CoreFoundation.framework */, | |||||
| 84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */, | 84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */, | ||||
| 84C0A2FC0DE2CBE500606895 /* CoreServices.framework */, | 84C0A2FC0DE2CBE500606895 /* CoreServices.framework */, | ||||
| 84C0A2FD0DE2CBE500606895 /* DiscRecording.framework */, | |||||
| 84E907CA0EA396A50088E51C /* DiscRecording.framework */, | |||||
| 84C0A2FE0DE2CBE500606895 /* IOKit.framework */, | 84C0A2FE0DE2CBE500606895 /* IOKit.framework */, | ||||
| 84C0A2FF0DE2CBE500606895 /* OpenGL.framework */, | |||||
| 84C0A3000DE2CBE500606895 /* QuickTime.framework */, | |||||
| 84C0A3010DE2CBE500606895 /* WebKit.framework */, | |||||
| 5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */, | |||||
| 84E904CF0EA351E40088E51C /* QTKit.framework */, | |||||
| 846EC6660EB602B90080CCFF /* QuickTime.framework */, | |||||
| 84E90C240EA399090088E51C /* WebKit.framework */, | |||||
| 84E90C2A0EA39A110088E51C /* OpenGL.framework */, | |||||
| ); | ); | ||||
| name = "External Frameworks and Libraries"; | name = "External Frameworks and Libraries"; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| @@ -211,7 +207,7 @@ | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 846444E10AFA003B00E7B2BE /* Digi code wrappers */, | 846444E10AFA003B00E7B2BE /* Digi code wrappers */, | ||||
| 841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */, | |||||
| 84E903BF0EA34FD70088E51C /* juce_RTASUtilities.mm */, | |||||
| 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */, | 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */, | ||||
| 84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */, | 84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */, | ||||
| ); | ); | ||||
| @@ -318,7 +314,6 @@ | |||||
| files = ( | files = ( | ||||
| 841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */, | 841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */, | ||||
| 841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */, | 841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */, | ||||
| 841E073D0AF9F099005E6FCC /* juce_RTASUtilities.cpp in Sources */, | |||||
| 841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */, | 841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */, | ||||
| 846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */, | 846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */, | ||||
| 846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */, | 846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */, | ||||
| @@ -333,6 +328,7 @@ | |||||
| 84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */, | 84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */, | ||||
| 84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */, | 84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */, | ||||
| 84C0A3110DE2CC0600606895 /* juce_amalgamated.mm in Sources */, | 84C0A3110DE2CC0600606895 /* juce_amalgamated.mm in Sources */, | ||||
| 84E903C00EA34FD70088E51C /* juce_RTASUtilities.mm in Sources */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -7,9 +7,8 @@ | |||||
| objects = { | objects = { | ||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 845FAE4C0A5C09FA008C94D8 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */; }; | |||||
| 846EC67F0EB603BE0080CCFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC67E0EB603BE0080CCFF /* QuickTime.framework */; }; | |||||
| 84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */; }; | 84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */; }; | ||||
| 84C0A3530DE2D1FD00606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3450DE2D1FD00606895 /* AGL.framework */; }; | |||||
| 84C0A3540DE2D1FD00606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */; }; | 84C0A3540DE2D1FD00606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */; }; | ||||
| 84C0A3550DE2D1FD00606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3470DE2D1FD00606895 /* AudioUnit.framework */; }; | 84C0A3550DE2D1FD00606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3470DE2D1FD00606895 /* AudioUnit.framework */; }; | ||||
| 84C0A3560DE2D1FD00606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3480DE2D1FD00606895 /* Carbon.framework */; }; | 84C0A3560DE2D1FD00606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3480DE2D1FD00606895 /* Carbon.framework */; }; | ||||
| @@ -21,20 +20,22 @@ | |||||
| 84C0A35C0DE2D1FD00606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */; }; | 84C0A35C0DE2D1FD00606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */; }; | ||||
| 84C0A35D0DE2D1FD00606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A34F0DE2D1FD00606895 /* IOKit.framework */; }; | 84C0A35D0DE2D1FD00606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A34F0DE2D1FD00606895 /* IOKit.framework */; }; | ||||
| 84C0A35E0DE2D1FD00606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3500DE2D1FD00606895 /* OpenGL.framework */; }; | 84C0A35E0DE2D1FD00606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3500DE2D1FD00606895 /* OpenGL.framework */; }; | ||||
| 84C0A35F0DE2D1FD00606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3510DE2D1FD00606895 /* QuickTime.framework */; }; | |||||
| 84C0A3600DE2D1FD00606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3520DE2D1FD00606895 /* WebKit.framework */; }; | 84C0A3600DE2D1FD00606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3520DE2D1FD00606895 /* WebKit.framework */; }; | ||||
| 84C0A3620DE2D24B00606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */; }; | 84C0A3620DE2D24B00606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */; }; | ||||
| 84E01FC70E9136C6003E41AF /* juce_VstWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E01FC60E9136C6003E41AF /* juce_VstWrapper.mm */; }; | |||||
| 84E0200D0E923F75003E41AF /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E0200C0E923F75003E41AF /* QTKit.framework */; }; | |||||
| 84E1AE51089EBAAA00E85E4F /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */; }; | 84E1AE51089EBAAA00E85E4F /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */; }; | ||||
| 84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */; }; | 84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */; }; | ||||
| 84E1AF42089EBFD900E85E4F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84E1AF41089EBFD900E85E4F /* Info.plist */; }; | 84E1AF42089EBFD900E85E4F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84E1AF41089EBFD900E85E4F /* Info.plist */; }; | ||||
| 84F5CF040B1B66B100A2E279 /* How to use this framework.txt in Resources */ = {isa = PBXBuildFile; fileRef = 84F5CF030B1B66B100A2E279 /* How to use this framework.txt */; }; | |||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||
| 84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | 84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | ||||
| 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | ||||
| 846EC67E0EB603BE0080CCFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 846EC6820EB603FF0080CCFF /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; }; | |||||
| 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_VstWrapper.cpp; path = ../../../wrapper/formats/VST/juce_VstWrapper.cpp; sourceTree = SOURCE_ROOT; }; | 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_VstWrapper.cpp; path = ../../../wrapper/formats/VST/juce_VstWrapper.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84C0A3450DE2D1FD00606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||||
| 84BE92BB0EA61E590079073F /* MacExportedSymbols.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = MacExportedSymbols.txt; path = ../../../wrapper/formats/VST/MacExportedSymbols.txt; sourceTree = SOURCE_ROOT; }; | |||||
| 84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | 84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3470DE2D1FD00606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | 84C0A3470DE2D1FD00606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3480DE2D1FD00606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | 84C0A3480DE2D1FD00606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | ||||
| @@ -46,15 +47,16 @@ | |||||
| 84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | 84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A34F0DE2D1FD00606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | 84C0A34F0DE2D1FD00606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3500DE2D1FD00606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | 84C0A3500DE2D1FD00606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3510DE2D1FD00606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 84C0A3520DE2D1FD00606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | 84C0A3520DE2D1FD00606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; }; | 84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; }; | ||||
| 84E01FC60E9136C6003E41AF /* juce_VstWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 2; name = juce_VstWrapper.mm; path = ../../../wrapper/formats/VST/juce_VstWrapper.mm; sourceTree = SOURCE_ROOT; }; | |||||
| 84E0200C0E923F75003E41AF /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84E1AE47089EBA6A00E85E4F /* JuceVST.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceVST.vst; sourceTree = BUILT_PRODUCTS_DIR; }; | 84E1AE47089EBA6A00E85E4F /* JuceVST.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceVST.vst; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||
| 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84E1AE4E089EBAAA00E85E4F /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; }; | 84E1AE4E089EBAAA00E85E4F /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; }; | 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; }; | 84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84E1AF41089EBFD900E85E4F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; | |||||
| 84E1AF41089EBFD900E85E4F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; | |||||
| 84F5CF030B1B66B100A2E279 /* How to use this framework.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "How to use this framework.txt"; path = "../../../How to use this framework.txt"; sourceTree = SOURCE_ROOT; }; | 84F5CF030B1B66B100A2E279 /* How to use this framework.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "How to use this framework.txt"; path = "../../../How to use this framework.txt"; sourceTree = SOURCE_ROOT; }; | ||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||
| @@ -63,7 +65,6 @@ | |||||
| isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 84C0A3530DE2D1FD00606895 /* AGL.framework in Frameworks */, | |||||
| 84C0A3540DE2D1FD00606895 /* ApplicationServices.framework in Frameworks */, | 84C0A3540DE2D1FD00606895 /* ApplicationServices.framework in Frameworks */, | ||||
| 84C0A3550DE2D1FD00606895 /* AudioUnit.framework in Frameworks */, | 84C0A3550DE2D1FD00606895 /* AudioUnit.framework in Frameworks */, | ||||
| 84C0A3560DE2D1FD00606895 /* Carbon.framework in Frameworks */, | 84C0A3560DE2D1FD00606895 /* Carbon.framework in Frameworks */, | ||||
| @@ -75,8 +76,9 @@ | |||||
| 84C0A35C0DE2D1FD00606895 /* DiscRecording.framework in Frameworks */, | 84C0A35C0DE2D1FD00606895 /* DiscRecording.framework in Frameworks */, | ||||
| 84C0A35D0DE2D1FD00606895 /* IOKit.framework in Frameworks */, | 84C0A35D0DE2D1FD00606895 /* IOKit.framework in Frameworks */, | ||||
| 84C0A35E0DE2D1FD00606895 /* OpenGL.framework in Frameworks */, | 84C0A35E0DE2D1FD00606895 /* OpenGL.framework in Frameworks */, | ||||
| 84C0A35F0DE2D1FD00606895 /* QuickTime.framework in Frameworks */, | |||||
| 84C0A3600DE2D1FD00606895 /* WebKit.framework in Frameworks */, | 84C0A3600DE2D1FD00606895 /* WebKit.framework in Frameworks */, | ||||
| 84E0200D0E923F75003E41AF /* QTKit.framework in Frameworks */, | |||||
| 846EC67F0EB603BE0080CCFF /* QuickTime.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -98,7 +100,6 @@ | |||||
| 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { | 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84C0A3450DE2D1FD00606895 /* AGL.framework */, | |||||
| 84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */, | 84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */, | ||||
| 84C0A3470DE2D1FD00606895 /* AudioUnit.framework */, | 84C0A3470DE2D1FD00606895 /* AudioUnit.framework */, | ||||
| 84C0A3480DE2D1FD00606895 /* Carbon.framework */, | 84C0A3480DE2D1FD00606895 /* Carbon.framework */, | ||||
| @@ -109,8 +110,9 @@ | |||||
| 84C0A34D0DE2D1FD00606895 /* CoreServices.framework */, | 84C0A34D0DE2D1FD00606895 /* CoreServices.framework */, | ||||
| 84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */, | 84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */, | ||||
| 84C0A34F0DE2D1FD00606895 /* IOKit.framework */, | 84C0A34F0DE2D1FD00606895 /* IOKit.framework */, | ||||
| 84E0200C0E923F75003E41AF /* QTKit.framework */, | |||||
| 846EC67E0EB603BE0080CCFF /* QuickTime.framework */, | |||||
| 84C0A3500DE2D1FD00606895 /* OpenGL.framework */, | 84C0A3500DE2D1FD00606895 /* OpenGL.framework */, | ||||
| 84C0A3510DE2D1FD00606895 /* QuickTime.framework */, | |||||
| 84C0A3520DE2D1FD00606895 /* WebKit.framework */, | 84C0A3520DE2D1FD00606895 /* WebKit.framework */, | ||||
| ); | ); | ||||
| name = "External Frameworks and Libraries"; | name = "External Frameworks and Libraries"; | ||||
| @@ -151,6 +153,7 @@ | |||||
| 84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */, | 84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */, | ||||
| 84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */, | 84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */, | ||||
| 84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */, | 84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */, | ||||
| 846EC6820EB603FF0080CCFF /* includes.h */, | |||||
| ); | ); | ||||
| name = filter; | name = filter; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| @@ -158,7 +161,9 @@ | |||||
| 84E1AE53089EBACA00E85E4F /* wrapper code */ = { | 84E1AE53089EBACA00E85E4F /* wrapper code */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84E01FC60E9136C6003E41AF /* juce_VstWrapper.mm */, | |||||
| 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */, | 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */, | ||||
| 84BE92BB0EA61E590079073F /* MacExportedSymbols.txt */, | |||||
| ); | ); | ||||
| name = "wrapper code"; | name = "wrapper code"; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| @@ -206,8 +211,6 @@ | |||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 84E1AF42089EBFD900E85E4F /* Info.plist in Resources */, | 84E1AF42089EBFD900E85E4F /* Info.plist in Resources */, | ||||
| 845FAE4C0A5C09FA008C94D8 /* juce.xcconfig in Resources */, | |||||
| 84F5CF040B1B66B100A2E279 /* How to use this framework.txt in Resources */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -222,6 +225,7 @@ | |||||
| 84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */, | 84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */, | ||||
| 84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */, | 84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */, | ||||
| 84C0A3620DE2D24B00606895 /* juce_amalgamated.mm in Sources */, | 84C0A3620DE2D24B00606895 /* juce_amalgamated.mm in Sources */, | ||||
| 84E01FC70E9136C6003E41AF /* juce_VstWrapper.mm in Sources */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -257,12 +261,15 @@ | |||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| buildSettings = { | buildSettings = { | ||||
| COPY_PHASE_STRIP = NO; | COPY_PHASE_STRIP = NO; | ||||
| EXPORTED_SYMBOLS_FILE = ../../../wrapper/formats/VST/MacExportedSymbols.txt; | |||||
| GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | ||||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | GCC_SYMBOLS_PRIVATE_EXTERN = YES; | ||||
| GENERATE_PKGINFO_FILE = YES; | GENERATE_PKGINFO_FILE = YES; | ||||
| INFOPLIST_FILE = info.plist; | INFOPLIST_FILE = info.plist; | ||||
| INFOPLIST_PREPROCESS = YES; | INFOPLIST_PREPROCESS = YES; | ||||
| PRELINK_LIBS = libjucedebug; | |||||
| PRODUCT_NAME = JuceVST; | PRODUCT_NAME = JuceVST; | ||||
| SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; | |||||
| SYMROOT = "$(HOME)/Library/Audio/Plug-Ins/VST"; | SYMROOT = "$(HOME)/Library/Audio/Plug-Ins/VST"; | ||||
| WARNING_CFLAGS = ( | WARNING_CFLAGS = ( | ||||
| "-Wmost", | "-Wmost", | ||||
| @@ -277,6 +284,7 @@ | |||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| buildSettings = { | buildSettings = { | ||||
| COPY_PHASE_STRIP = YES; | COPY_PHASE_STRIP = YES; | ||||
| EXPORTED_SYMBOLS_FILE = ../../../wrapper/formats/VST/MacExportedSymbols.txt; | |||||
| GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | ||||
| GCC_INLINES_ARE_PRIVATE_EXTERN = YES; | GCC_INLINES_ARE_PRIVATE_EXTERN = YES; | ||||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | GCC_SYMBOLS_PRIVATE_EXTERN = YES; | ||||
| @@ -29,12 +29,15 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #include <Cocoa/Cocoa.h> | |||||
| #include <AudioUnit/AUCocoaUIView.h> | |||||
| #include <AudioUnit/AudioUnit.h> | #include <AudioUnit/AudioUnit.h> | ||||
| #include <AudioToolbox/AudioUnitUtilities.h> | |||||
| #include "AUMIDIEffectBase.h" | #include "AUMIDIEffectBase.h" | ||||
| #include "MusicDeviceBase.h" | #include "MusicDeviceBase.h" | ||||
| #include "AUCarbonViewBase.h" | |||||
| #include "../../juce_IncludeCharacteristics.h" | #include "../../juce_IncludeCharacteristics.h" | ||||
| #include "../../../../../juce_amalgamated.h" | |||||
| //#include "../../../../../juce_amalgamated.h" | |||||
| #include "../../../../../juce.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| #define juceFilterObjectPropertyID 0x1a45ffe9 | #define juceFilterObjectPropertyID 0x1a45ffe9 | ||||
| @@ -60,10 +63,28 @@ END_JUCE_NAMESPACE | |||||
| extern AudioProcessor* JUCE_CALLTYPE createPluginFilter(); | extern AudioProcessor* JUCE_CALLTYPE createPluginFilter(); | ||||
| class JuceAUView; | class JuceAUView; | ||||
| //============================================================================== | |||||
| #define CONCAT_MACRO(Part1, Part2) Part1 ## Part2 | |||||
| #define JuceUICreationClass CONCAT_MACRO (JucePlugin_AUExportPrefix, _UICreationClass) | |||||
| @interface JuceUICreationClass : NSObject <AUCocoaUIBase> | |||||
| { | |||||
| } | |||||
| - (JuceUICreationClass*) init; | |||||
| - (void) dealloc; | |||||
| - (unsigned) interfaceVersion; | |||||
| - (NSString *) description; | |||||
| - (NSView*) uiViewForAudioUnit: (AudioUnit) inAudioUnit | |||||
| withSize: (NSSize) inPreferredSize; | |||||
| @end | |||||
| //============================================================================== | //============================================================================== | ||||
| class JuceAU : public JuceAUBaseClass, | class JuceAU : public JuceAUBaseClass, | ||||
| public AudioProcessorListener, | public AudioProcessorListener, | ||||
| public AudioPlayHead | |||||
| public AudioPlayHead, | |||||
| public ComponentListener | |||||
| { | { | ||||
| public: | public: | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -73,14 +94,11 @@ public: | |||||
| #else | #else | ||||
| : AUMIDIEffectBase (component), | : AUMIDIEffectBase (component), | ||||
| #endif | #endif | ||||
| currentView (0), | |||||
| juceFilter (0), | juceFilter (0), | ||||
| bufferSpace (2, 16), | bufferSpace (2, 16), | ||||
| channels (0), | channels (0), | ||||
| prepared (false) | prepared (false) | ||||
| { | { | ||||
| CreateElements(); | |||||
| if (activePlugins.size() == 0) | if (activePlugins.size() == 0) | ||||
| { | { | ||||
| initialiseJuce_GUI(); | initialiseJuce_GUI(); | ||||
| @@ -88,8 +106,6 @@ public: | |||||
| #ifdef JucePlugin_CFBundleIdentifier | #ifdef JucePlugin_CFBundleIdentifier | ||||
| juce_setCurrentExecutableFileNameFromBundleId (JucePlugin_CFBundleIdentifier); | juce_setCurrentExecutableFileNameFromBundleId (JucePlugin_CFBundleIdentifier); | ||||
| #endif | #endif | ||||
| MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (0); | |||||
| } | } | ||||
| juceFilter = createPluginFilter(); | juceFilter = createPluginFilter(); | ||||
| @@ -143,10 +159,16 @@ public: | |||||
| outDataSize = sizeof (UInt32); | outDataSize = sizeof (UInt32); | ||||
| return noErr; | return noErr; | ||||
| } | } | ||||
| else if (inID == kMusicDeviceProperty_InstrumentCount) | |||||
| else if (inID == kMusicDeviceProperty_InstrumentCount) | |||||
| { | |||||
| outDataSize = sizeof (UInt32); | |||||
| outWritable = false; | |||||
| return noErr; | |||||
| } | |||||
| else if (inID == kAudioUnitProperty_CocoaUI) | |||||
| { | { | ||||
| outDataSize = sizeof (UInt32); | |||||
| outWritable = false; | |||||
| outDataSize = sizeof (AudioUnitCocoaViewInfo); | |||||
| outWritable = true; | |||||
| return noErr; | return noErr; | ||||
| } | } | ||||
| } | } | ||||
| @@ -172,11 +194,21 @@ public: | |||||
| *(UInt32*) outData = (juceFilter != 0 && juceFilter->isNonRealtime()) ? 1 : 0; | *(UInt32*) outData = (juceFilter != 0 && juceFilter->isNonRealtime()) ? 1 : 0; | ||||
| return noErr; | return noErr; | ||||
| } | } | ||||
| else if (inID == kMusicDeviceProperty_InstrumentCount) | |||||
| else if (inID == kMusicDeviceProperty_InstrumentCount) | |||||
| { | { | ||||
| *(UInt32*) outData = 1; | *(UInt32*) outData = 1; | ||||
| return noErr; | return noErr; | ||||
| } | } | ||||
| else if (inID == kAudioUnitProperty_CocoaUI) | |||||
| { | |||||
| AudioUnitCocoaViewInfo* info = (AudioUnitCocoaViewInfo*) outData; | |||||
| NSBundle* b = [NSBundle bundleForClass: [JuceUICreationClass class]]; | |||||
| info->mCocoaAUViewClass[0] = (CFStringRef) [[[JuceUICreationClass class] className] retain]; | |||||
| info->mCocoaAUViewBundleLocation = (CFURLRef) [[NSURL fileURLWithPath: [b bundlePath]] retain]; | |||||
| return noErr; | |||||
| } | |||||
| } | } | ||||
| return JuceAUBaseClass::GetProperty (inID, inScope, inElement, outData); | return JuceAUBaseClass::GetProperty (inID, inScope, inElement, outData); | ||||
| @@ -370,18 +402,6 @@ public: | |||||
| return juceFilter->getLatencySamples() / GetSampleRate(); | return juceFilter->getLatencySamples() / GetSampleRate(); | ||||
| } | } | ||||
| //============================================================================== | |||||
| int GetNumCustomUIComponents() { return 1; } | |||||
| void GetUIComponentDescs (ComponentDescription* inDescArray) | |||||
| { | |||||
| inDescArray[0].componentType = kAudioUnitCarbonViewComponentType; | |||||
| inDescArray[0].componentSubType = JucePlugin_AUSubType; | |||||
| inDescArray[0].componentManufacturer = JucePlugin_AUManufacturerCode; | |||||
| inDescArray[0].componentFlags = 0; | |||||
| inDescArray[0].componentFlagsMask = 0; | |||||
| } | |||||
| //============================================================================== | //============================================================================== | ||||
| bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) | bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) | ||||
| { | { | ||||
| @@ -472,9 +492,6 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| // (can only be called immediately after sendAUEvent) | |||||
| void sendOldFashionedGestureEvent (const AudioUnitCarbonViewEventID gestureType); | |||||
| void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) | void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) | ||||
| { | { | ||||
| sendAUEvent (kAudioUnitEvent_ParameterValueChange, index); | sendAUEvent (kAudioUnitEvent_ParameterValueChange, index); | ||||
| @@ -483,13 +500,11 @@ public: | |||||
| void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) | void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) | ||||
| { | { | ||||
| sendAUEvent (kAudioUnitEvent_BeginParameterChangeGesture, index); | sendAUEvent (kAudioUnitEvent_BeginParameterChangeGesture, index); | ||||
| sendOldFashionedGestureEvent (kAudioUnitCarbonViewEvent_MouseDownInControl); | |||||
| } | } | ||||
| void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) | void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) | ||||
| { | { | ||||
| sendAUEvent (kAudioUnitEvent_EndParameterChangeGesture, index); | sendAUEvent (kAudioUnitEvent_EndParameterChangeGesture, index); | ||||
| sendOldFashionedGestureEvent (kAudioUnitCarbonViewEvent_MouseUpInControl); | |||||
| } | } | ||||
| void audioProcessorChanged (AudioProcessor*) | void audioProcessorChanged (AudioProcessor*) | ||||
| @@ -820,10 +835,18 @@ protected: | |||||
| return noErr; | return noErr; | ||||
| } | } | ||||
| //============================================================================== | |||||
| public: | |||||
| JuceAUView* currentView; | |||||
| void componentMovedOrResized (Component& component, bool wasMoved, bool wasResized) | |||||
| { | |||||
| if (wasResized) | |||||
| { | |||||
| NSView* view = (NSView*) component.getWindowHandle(); | |||||
| [[view superview] setFrameSize: NSMakeSize (component.getWidth(), component.getHeight())]; | |||||
| [view setFrame: NSMakeRect (0, 0, component.getWidth(), component.getHeight())]; | |||||
| [view setNeedsDisplay: YES]; | |||||
| } | |||||
| } | |||||
| //============================================================================== | |||||
| private: | private: | ||||
| AudioProcessor* juceFilter; | AudioProcessor* juceFilter; | ||||
| AudioSampleBuffer bufferSpace; | AudioSampleBuffer bufferSpace; | ||||
| @@ -836,221 +859,130 @@ private: | |||||
| mutable MemoryBlock presetsArray; | mutable MemoryBlock presetsArray; | ||||
| }; | }; | ||||
| //============================================================================== | |||||
| class JuceAUComponentHolder : public Component | |||||
| { | |||||
| public: | |||||
| JuceAUComponentHolder (Component* const editorComp) | |||||
| { | |||||
| addAndMakeVisible (editorComp); | |||||
| setOpaque (true); | |||||
| setVisible (true); | |||||
| setBroughtToFrontOnMouseClick (true); | |||||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||||
| setWantsKeyboardFocus (false); | |||||
| #endif | |||||
| } | |||||
| ~JuceAUComponentHolder() | |||||
| { | |||||
| } | |||||
| void resized() | |||||
| { | |||||
| if (getNumChildComponents() > 0) | |||||
| getChildComponent (0)->setBounds (0, 0, getWidth(), getHeight()); | |||||
| } | |||||
| void paint (Graphics& g) | |||||
| { | |||||
| } | |||||
| }; | |||||
| //============================================================================== | //============================================================================== | ||||
| class JuceAUView : public AUCarbonViewBase, | |||||
| public ComponentListener, | |||||
| public MouseListener, | |||||
| public Timer | |||||
| @interface JuceUIViewClass : NSView | |||||
| { | { | ||||
| AudioProcessor* juceFilter; | |||||
| AudioProcessor* filter; | |||||
| JuceAU* au; | |||||
| AudioProcessorEditor* editorComp; | AudioProcessorEditor* editorComp; | ||||
| Component* windowComp; | |||||
| bool recursive; | |||||
| int mx, my; | |||||
| JuceAU* owner; | |||||
| public: | |||||
| JuceAUView (AudioUnitCarbonView auview) | |||||
| : AUCarbonViewBase (auview), | |||||
| juceFilter (0), | |||||
| editorComp (0), | |||||
| windowComp (0), | |||||
| recursive (false), | |||||
| mx (0), | |||||
| my (0), | |||||
| owner (0) | |||||
| { | |||||
| } | |||||
| ~JuceAUView() | |||||
| { | |||||
| if (owner->currentView == this) | |||||
| owner->currentView = 0; | |||||
| deleteUI(); | |||||
| } | |||||
| ComponentResult CreateUI (Float32 inXOffset, Float32 inYOffset) | |||||
| { | |||||
| if (juceFilter == 0) | |||||
| { | |||||
| void* pointers[2]; | |||||
| UInt32 propertySize = sizeof (pointers); | |||||
| AudioUnitGetProperty (GetEditAudioUnit(), | |||||
| juceFilterObjectPropertyID, | |||||
| kAudioUnitScope_Global, | |||||
| 0, | |||||
| pointers, | |||||
| &propertySize); | |||||
| } | |||||
| juceFilter = (AudioProcessor*) pointers[0]; | |||||
| - (JuceUIViewClass*) initWithFilter: (AudioProcessor*) filter | |||||
| withAU: (JuceAU*) au | |||||
| withComponent: (AudioProcessorEditor*) editorComp; | |||||
| - (void) dealloc; | |||||
| - (void) viewDidMoveToWindow; | |||||
| - (BOOL) mouseDownCanMoveWindow; | |||||
| owner = (JuceAU*) pointers[1]; | |||||
| owner->currentView = this; | |||||
| } | |||||
| @end | |||||
| if (juceFilter != 0) | |||||
| { | |||||
| deleteUI(); | |||||
| @implementation JuceUIViewClass | |||||
| editorComp = juceFilter->createEditorIfNeeded(); | |||||
| - (JuceUIViewClass*) initWithFilter: (AudioProcessor*) filter_ | |||||
| withAU: (JuceAU*) au_ | |||||
| withComponent: (AudioProcessorEditor*) editorComp_ | |||||
| { | |||||
| filter = filter_; | |||||
| au = au_; | |||||
| editorComp = editorComp_; | |||||
| const int w = editorComp->getWidth(); | |||||
| const int h = editorComp->getHeight(); | |||||
| [super initWithFrame: NSMakeRect (0, 0, editorComp_->getWidth(), editorComp_->getHeight())]; | |||||
| [self setHidden: NO]; | |||||
| [self setPostsFrameChangedNotifications: YES]; | |||||
| editorComp->setOpaque (true); | |||||
| editorComp->setVisible (true); | |||||
| editorComp->addToDesktop (0, (void*) self); | |||||
| editorComp->setVisible (true); | |||||
| editorComp->addComponentListener (au); | |||||
| windowComp = new JuceAUComponentHolder (editorComp); | |||||
| windowComp->setBounds ((int) inXOffset, (int) inYOffset, w, h); | |||||
| return self; | |||||
| } | |||||
| windowComp->addToDesktop (0, (void*) mCarbonPane); | |||||
| SizeControl (mCarbonPane, w, h); | |||||
| - (void) dealloc | |||||
| { | |||||
| // there's some kind of component currently modal, but the host | |||||
| // is trying to delete our plugin.. | |||||
| jassert (Component::getCurrentlyModalComponent() == 0); | |||||
| editorComp->addComponentListener (this); | |||||
| windowComp->addMouseListener (this, true); | |||||
| if (editorComp != 0) | |||||
| filter->editorBeingDeleted (editorComp); | |||||
| startTimer (20); | |||||
| } | |||||
| else | |||||
| { | |||||
| jassertfalse // can't get a pointer to our effect | |||||
| } | |||||
| deleteAndZero (editorComp); | |||||
| return noErr; | |||||
| } | |||||
| [super dealloc]; | |||||
| } | |||||
| void componentMovedOrResized (Component& component, | |||||
| bool wasMoved, | |||||
| bool wasResized) | |||||
| - (void) viewDidMoveToWindow | |||||
| { | |||||
| if ([self window] != 0) | |||||
| { | { | ||||
| if (! recursive) | |||||
| { | |||||
| recursive = true; | |||||
| if (editorComp != 0 && wasResized) | |||||
| { | |||||
| const int w = jmax (32, editorComp->getWidth()); | |||||
| const int h = jmax (32, editorComp->getHeight()); | |||||
| SizeControl (mCarbonPane, w, h); | |||||
| if (windowComp->getWidth() != w | |||||
| || windowComp->getHeight() != h) | |||||
| { | |||||
| windowComp->setSize (w, h); | |||||
| } | |||||
| editorComp->repaint(); | |||||
| } | |||||
| recursive = false; | |||||
| } | |||||
| } | |||||
| [[self window] setAcceptsMouseMovedEvents: YES]; | |||||
| void timerCallback() | |||||
| { | |||||
| // for some stupid Apple-related reason, mouse move events just don't seem to get sent | |||||
| // to the windows in an AU, so we have to bodge it here and simulate them with a | |||||
| // timer.. | |||||
| if (editorComp != 0) | if (editorComp != 0) | ||||
| { | |||||
| int x, y; | |||||
| Desktop::getInstance().getMousePosition (x, y); | |||||
| if (x != mx || y != my) | |||||
| { | |||||
| mx = x; | |||||
| my = y; | |||||
| if (! ModifierKeys::getCurrentModifiers().isAnyMouseButtonDown()) | |||||
| { | |||||
| for (int i = ComponentPeer::getNumPeers(); --i >= 0;) | |||||
| { | |||||
| ComponentPeer* const peer = ComponentPeer::getPeer (i); | |||||
| int rx = x, ry = y; | |||||
| peer->getComponent()->globalPositionToRelative (rx, ry); | |||||
| if (peer->contains (rx, ry, false) && peer->getComponent()->isShowing()) | |||||
| { | |||||
| peer->handleMouseMove (rx, ry, Time::currentTimeMillis()); | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| [[self window] makeFirstResponder: (NSView*) editorComp->getWindowHandle()]; | |||||
| } | } | ||||
| } | |||||
| void mouseMove (const MouseEvent& e) | |||||
| { | |||||
| Desktop::getInstance().getMousePosition (mx, my); | |||||
| startTimer (20); | |||||
| } | |||||
| - (BOOL) mouseDownCanMoveWindow | |||||
| { | |||||
| return NO; | |||||
| } | |||||
| AudioUnitCarbonViewEventListener getEventListener() const throw() { return mEventListener; } | |||||
| void* getEventListenerUserData() const throw() { return mEventListenerUserData; } | |||||
| @end | |||||
| private: | |||||
| void deleteUI() | |||||
| { | |||||
| PopupMenu::dismissAllActiveMenus(); | |||||
| @implementation JuceUICreationClass | |||||
| // there's some kind of component currently modal, but the host | |||||
| // is trying to delete our plugin.. | |||||
| jassert (Component::getCurrentlyModalComponent() == 0); | |||||
| - (JuceUICreationClass*) init | |||||
| { | |||||
| return [super init]; | |||||
| } | |||||
| if (editorComp != 0) | |||||
| juceFilter->editorBeingDeleted (editorComp); | |||||
| - (void) dealloc | |||||
| { | |||||
| [super dealloc]; | |||||
| } | |||||
| deleteAndZero (editorComp); | |||||
| deleteAndZero (windowComp); | |||||
| } | |||||
| }; | |||||
| - (unsigned) interfaceVersion | |||||
| { | |||||
| return 0; | |||||
| } | |||||
| void JuceAU::sendOldFashionedGestureEvent (const AudioUnitCarbonViewEventID gestureType) | |||||
| - (NSString*) description | |||||
| { | { | ||||
| if (currentView != 0 && currentView->getEventListener() != 0) | |||||
| { | |||||
| (*currentView->getEventListener()) (currentView->getEventListenerUserData(), currentView->GetComponentInstance(), | |||||
| &(auEvent.mArgument.mParameter), gestureType, 0); | |||||
| } | |||||
| return [NSString stringWithString: @JucePlugin_Name]; | |||||
| } | } | ||||
| - (NSView*) uiViewForAudioUnit: (AudioUnit) inAudioUnit | |||||
| withSize: (NSSize) inPreferredSize | |||||
| { | |||||
| void* pointers[2]; | |||||
| UInt32 propertySize = sizeof (pointers); | |||||
| if (AudioUnitGetProperty (inAudioUnit, | |||||
| juceFilterObjectPropertyID, | |||||
| kAudioUnitScope_Global, | |||||
| 0, | |||||
| pointers, | |||||
| &propertySize) != noErr) | |||||
| return 0; | |||||
| AudioProcessor* filter = (AudioProcessor*) pointers[0]; | |||||
| JuceAU* au = (JuceAU*) pointers[1]; | |||||
| if (filter == 0) | |||||
| return 0; | |||||
| AudioProcessorEditor* editorComp = filter->createEditorIfNeeded(); | |||||
| if (editorComp == 0) | |||||
| return 0; | |||||
| DBG (String (inPreferredSize.width) + " " + String (inPreferredSize.height)); | |||||
| DBG (String (editorComp->getWidth()) + " " + String (editorComp->getHeight())); | |||||
| return [[[JuceUIViewClass alloc] initWithFilter: filter | |||||
| withAU: au | |||||
| withComponent: editorComp] autorelease]; | |||||
| } | |||||
| @end | |||||
| //============================================================================== | //============================================================================== | ||||
| #define JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) \ | #define JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) \ | ||||
| @@ -1063,4 +995,4 @@ extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix | |||||
| #define JUCE_COMPONENT_ENTRY(Class, Name, Suffix) JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) | #define JUCE_COMPONENT_ENTRY(Class, Name, Suffix) JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) | ||||
| JUCE_COMPONENT_ENTRY (JuceAU, JucePlugin_AUExportPrefix, Entry) | JUCE_COMPONENT_ENTRY (JuceAU, JucePlugin_AUExportPrefix, Entry) | ||||
| JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry) | |||||
| //JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry) | |||||
| @@ -30,7 +30,6 @@ | |||||
| */ | */ | ||||
| #include <AudioUnit/AudioUnit.r> | #include <AudioUnit/AudioUnit.r> | ||||
| #include <AudioUnit/AudioUnitCarbonView.r> | |||||
| //============================================================================== | //============================================================================== | ||||
| /* The JucePluginCharacteristics.h file is supposed to live in your plugin-specific | /* The JucePluginCharacteristics.h file is supposed to live in your plugin-specific | ||||
| @@ -56,15 +55,3 @@ | |||||
| #include "/Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r" | #include "/Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r" | ||||
| //============================================================================== | |||||
| // component resources for Audio Unit Carbon View | |||||
| #define RES_ID 2000 | |||||
| #define COMP_TYPE kAudioUnitCarbonViewComponentType | |||||
| #define COMP_SUBTYPE JucePlugin_AUSubType | |||||
| #define COMP_MANUF JucePlugin_AUManufacturerCode | |||||
| #define VERSION JucePlugin_VersionCode | |||||
| #define NAME JucePlugin_Manufacturer ": " JucePlugin_Name " View" | |||||
| #define DESCRIPTION NAME | |||||
| #define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "ViewEntry" | |||||
| #include "/Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r" | |||||
| @@ -0,0 +1,82 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include <Cocoa/Cocoa.h> | |||||
| #include "../../../../../juce.h" | |||||
| //============================================================================== | |||||
| void* attachSubWindow (void* hostWindowRef, Component* comp) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: hostWindowRef]; | |||||
| [hostWindow retain]; | |||||
| NSView* content = [hostWindow contentView]; | |||||
| NSRect f = [content frame]; | |||||
| f.size.width = comp->getWidth(); | |||||
| f.size.height = comp->getHeight(); | |||||
| [content setFrame: f]; | |||||
| NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin]; | |||||
| windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height); | |||||
| comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y); | |||||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||||
| comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses); | |||||
| #else | |||||
| comp->addToDesktop (ComponentPeer::windowIsTemporary); | |||||
| #endif | |||||
| comp->setVisible (true); | |||||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||||
| NSWindow* pluginWindow = [pluginView window]; | |||||
| [hostWindow addChildWindow: pluginWindow | |||||
| ordered: NSWindowAbove]; | |||||
| [hostWindow orderFront: nil]; | |||||
| return hostWindow; | |||||
| } | |||||
| void removeSubWindow (void* nsWindow, Component* comp) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||||
| NSWindow* pluginWindow = [pluginView window]; | |||||
| [hostWindow removeChildWindow: pluginWindow]; | |||||
| comp->removeFromDesktop(); | |||||
| [hostWindow release]; | |||||
| } | |||||
| @@ -93,7 +93,7 @@ | |||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||
| #include "../../../../../juce.h" | #include "../../../../../juce.h" | ||||
| #else | #else | ||||
| #include "../../../../../juce_amalgamated.h" | |||||
| #include "../../../../../juce.h" | |||||
| #endif | #endif | ||||
| #include "../../juce_IncludeCharacteristics.h" | #include "../../juce_IncludeCharacteristics.h" | ||||
| @@ -112,6 +112,9 @@ | |||||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | #if ! JucePlugin_EditorRequiresKeyboardFocus | ||||
| extern void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow); | extern void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow); | ||||
| #endif | #endif | ||||
| #else | |||||
| extern void* attachSubWindow (void* hostWindowRef, JUCE_NAMESPACE::Component* comp); | |||||
| extern void removeSubWindow (void* nsWindow, JUCE_NAMESPACE::Component* comp); | |||||
| #endif | #endif | ||||
| const int midiBufferSize = 1024; | const int midiBufferSize = 1024; | ||||
| @@ -150,10 +153,10 @@ class JucePlugInProcess : public CEffectProcessMIDI, | |||||
| public: | public: | ||||
| //============================================================================== | //============================================================================== | ||||
| JucePlugInProcess() | JucePlugInProcess() | ||||
| : channels (0), | |||||
| prepared (false), | |||||
| midiBufferNode (0), | |||||
| : midiBufferNode (0), | |||||
| midiTransport (0), | midiTransport (0), | ||||
| channels (0), | |||||
| prepared (false), | |||||
| sampleRate (44100.0) | sampleRate (44100.0) | ||||
| { | { | ||||
| juceFilter = createPluginFilter(); | juceFilter = createPluginFilter(); | ||||
| @@ -192,8 +195,8 @@ public: | |||||
| JucePlugInProcess* const process_) | JucePlugInProcess* const process_) | ||||
| : filter (filter_), | : filter (filter_), | ||||
| process (process_), | process (process_), | ||||
| editorComp (0), | |||||
| wrapper (0) | |||||
| wrapper (0), | |||||
| editorComp (0) | |||||
| { | { | ||||
| // setting the size in here crashes PT for some reason, so keep it simple.. | // setting the size in here crashes PT for some reason, so keep it simple.. | ||||
| } | } | ||||
| @@ -261,35 +264,21 @@ public: | |||||
| void DrawContents (Rect*) | void DrawContents (Rect*) | ||||
| { | { | ||||
| #if JUCE_WIN32 | |||||
| if (wrapper != 0) | if (wrapper != 0) | ||||
| { | { | ||||
| ComponentPeer* const peer = wrapper->getPeer(); | ComponentPeer* const peer = wrapper->getPeer(); | ||||
| if (peer != 0) | if (peer != 0) | ||||
| { | { | ||||
| #if JUCE_WIN32 | |||||
| // (seems to be required in PT6.4, but not in 7.x) | // (seems to be required in PT6.4, but not in 7.x) | ||||
| peer->repaint (0, 0, wrapper->getWidth(), wrapper->getHeight()); | peer->repaint (0, 0, wrapper->getWidth(), wrapper->getHeight()); | ||||
| #elif JUCE_PPC | |||||
| // This crap is needed because if you resize a window, PT doesn't | |||||
| // update its clip region, so only part of your new window gets drawn. | |||||
| // This overrides the clipping region that's being passed into the Draw | |||||
| // method. | |||||
| Rect visible; | |||||
| GetVisibleRect (&visible); | |||||
| RestoreFocus(); | |||||
| Focus (&visible); | |||||
| #endif | |||||
| peer->performAnyPendingRepaintsNow(); | |||||
| } | } | ||||
| } | } | ||||
| #endif | |||||
| } | } | ||||
| void DrawBackground (Rect* r) | |||||
| { | |||||
| } | |||||
| void DrawBackground (Rect*) {} | |||||
| //============================================================================== | //============================================================================== | ||||
| private: | private: | ||||
| @@ -300,8 +289,11 @@ public: | |||||
| void deleteEditorComp() | void deleteEditorComp() | ||||
| { | { | ||||
| if (editorComp != 0) | |||||
| if (editorComp != 0 || wrapper != 0) | |||||
| { | { | ||||
| #if JUCE_MAC | |||||
| const ScopedAutoReleasePool pool; | |||||
| #endif | |||||
| PopupMenu::dismissAllActiveMenus(); | PopupMenu::dismissAllActiveMenus(); | ||||
| JUCE_NAMESPACE::Component* const modalComponent = JUCE_NAMESPACE::Component::getCurrentlyModalComponent(); | JUCE_NAMESPACE::Component* const modalComponent = JUCE_NAMESPACE::Component::getCurrentlyModalComponent(); | ||||
| @@ -309,6 +301,7 @@ public: | |||||
| modalComponent->exitModalState (0); | modalComponent->exitModalState (0); | ||||
| filter->editorBeingDeleted (editorComp); | filter->editorBeingDeleted (editorComp); | ||||
| deleteAndZero (editorComp); | deleteAndZero (editorComp); | ||||
| deleteAndZero (wrapper); | deleteAndZero (wrapper); | ||||
| } | } | ||||
| @@ -317,26 +310,23 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| // A component to hold the AudioProcessorEditor, and cope with some housekeeping | // A component to hold the AudioProcessorEditor, and cope with some housekeeping | ||||
| // chores when it changes or repaints. | // chores when it changes or repaints. | ||||
| class EditorCompWrapper : public JUCE_NAMESPACE::Component, | |||||
| #if JUCE_MAC | |||||
| public Timer | |||||
| #else | |||||
| public FocusChangeListener | |||||
| class EditorCompWrapper : public JUCE_NAMESPACE::Component | |||||
| #if ! JUCE_MAC | |||||
| , public FocusChangeListener | |||||
| #endif | #endif | ||||
| { | { | ||||
| public: | public: | ||||
| EditorCompWrapper (void* const hostWindow_, | EditorCompWrapper (void* const hostWindow_, | ||||
| AudioProcessorEditor* const editorComp, | |||||
| Component* const editorComp, | |||||
| JuceCustomUIView* const owner_) | JuceCustomUIView* const owner_) | ||||
| : hostWindow (hostWindow_), | : hostWindow (hostWindow_), | ||||
| owner (owner_), | owner (owner_), | ||||
| titleW (0), | titleW (0), | ||||
| titleH (0) | titleH (0) | ||||
| #if JUCE_MAC | |||||
| , forcedRepaintTimer (0) | |||||
| #endif | |||||
| { | { | ||||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||||
| #if JucePlugin_EditorRequiresKeyboardFocus | |||||
| setWantsKeyboardFocus (true); | |||||
| #else | |||||
| setWantsKeyboardFocus (false); | setWantsKeyboardFocus (false); | ||||
| #endif | #endif | ||||
| setOpaque (true); | setOpaque (true); | ||||
| @@ -347,67 +337,10 @@ public: | |||||
| #if JUCE_WIN32 | #if JUCE_WIN32 | ||||
| attachSubWindow (hostWindow, titleW, titleH, this); | attachSubWindow (hostWindow, titleW, titleH, this); | ||||
| setVisible (true); | |||||
| #else | #else | ||||
| SetAutomaticControlDragTrackingEnabledForWindow ((WindowRef) hostWindow_, true); | |||||
| WindowAttributes attributes; | |||||
| GetWindowAttributes ((WindowRef) hostWindow_, &attributes); | |||||
| parentView = 0; | |||||
| if ((attributes & kWindowCompositingAttribute) != 0) | |||||
| { | |||||
| HIViewRef root = HIViewGetRoot ((WindowRef) hostWindow_); | |||||
| HIViewFindByID (root, kHIViewWindowContentID, &parentView); | |||||
| if (parentView == 0) | |||||
| parentView = root; | |||||
| } | |||||
| else | |||||
| { | |||||
| GetRootControl ((WindowRef) hostWindow_, (ControlRef*) &parentView); | |||||
| if (parentView == 0) | |||||
| CreateRootControl ((WindowRef) hostWindow_, (ControlRef*) &parentView); | |||||
| } | |||||
| jassert (parentView != 0); | |||||
| Rect clientRect; | |||||
| GetWindowBounds ((WindowRef) hostWindow, kWindowContentRgn, &clientRect); | |||||
| titleW = clientRect.right - clientRect.left; | |||||
| titleH = jmax (0, (clientRect.bottom - clientRect.top) - getHeight()); | |||||
| setTopLeftPosition (0, 0); | |||||
| HIViewSetNeedsDisplay (parentView, true); | |||||
| setVisible (true); | |||||
| addToDesktop (ComponentPeer::windowRepaintedExplictly, (void*) parentView); | |||||
| HIViewRef pluginView = HIViewGetFirstSubview (parentView); | |||||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||||
| HIViewSetActivated (pluginView, false); | |||||
| #endif | |||||
| /* This is a convoluted and desperate workaround for a Digi (or maybe Apple) | |||||
| layout bug. Until the parent control gets some kind of mouse-move | |||||
| event, then our plugin's HIView remains stuck at (0, 0) in the | |||||
| window (despite drawing correctly), which blocks mouse events from | |||||
| getting to the widgets above it. | |||||
| After days of frustration the only hack I can find that works | |||||
| is to use this arcane function to redirect mouse events to | |||||
| the parent, while running a timer to spot the moment when our | |||||
| view mysteriously snaps back to its correct location. | |||||
| If anyone at Digi or Apple is reading this and they realise that it's | |||||
| their fault, could they please give me back the week of my life that | |||||
| they made me waste on this rubbish. Thankyou. | |||||
| */ | |||||
| SetControlSupervisor (pluginView, parentView); | |||||
| startTimer (150); | |||||
| nsWindow = attachSubWindow (hostWindow, this); | |||||
| #endif | #endif | ||||
| setVisible (true); | |||||
| #if JUCE_WIN32 && ! JucePlugin_EditorRequiresKeyboardFocus | #if JUCE_WIN32 && ! JucePlugin_EditorRequiresKeyboardFocus | ||||
| Desktop::getInstance().addFocusChangeListener (this); | Desktop::getInstance().addFocusChangeListener (this); | ||||
| @@ -421,16 +354,12 @@ public: | |||||
| #endif | #endif | ||||
| #if JUCE_MAC | #if JUCE_MAC | ||||
| delete forcedRepaintTimer; | |||||
| removeSubWindow (nsWindow, this); | |||||
| #endif | #endif | ||||
| } | } | ||||
| void paint (Graphics&) | void paint (Graphics&) | ||||
| { | { | ||||
| #if JUCE_MAC | |||||
| if (forcedRepaintTimer != 0) | |||||
| forcedRepaintTimer->stopTimer(); | |||||
| #endif | |||||
| } | } | ||||
| void resized() | void resized() | ||||
| @@ -443,38 +372,6 @@ public: | |||||
| repaint(); | repaint(); | ||||
| } | } | ||||
| #if JUCE_MAC | |||||
| void timerCallback() | |||||
| { | |||||
| // Wait for the moment when PT deigns to allow our view to | |||||
| // take up its actual location (see rant above) | |||||
| HIViewRef content = 0; | |||||
| HIViewFindByID (HIViewGetRoot ((WindowRef) hostWindow), kHIViewWindowContentID, &content); | |||||
| HIPoint p = { 0.0f, 0.0f }; | |||||
| HIViewRef v = HIViewGetFirstSubview (parentView); | |||||
| HIViewConvertPoint (&p, v, content); | |||||
| if (p.y > 12) | |||||
| { | |||||
| if (p.x != titleW || p.y != titleH) | |||||
| { | |||||
| GrafPtr oldport; | |||||
| GetPort (&oldport); | |||||
| SetPort (owner->GetViewPort()); | |||||
| SetOrigin (-titleW, -titleH); | |||||
| SetPort (oldport); | |||||
| } | |||||
| HIViewRef v = HIViewGetFirstSubview (parentView); | |||||
| SetControlSupervisor (v, 0); | |||||
| stopTimer(); | |||||
| forcedRepaintTimer = new RepaintCheckTimer (*this); | |||||
| } | |||||
| } | |||||
| #endif | |||||
| #if JUCE_WIN32 | #if JUCE_WIN32 | ||||
| void globalFocusChanged (JUCE_NAMESPACE::Component*) | void globalFocusChanged (JUCE_NAMESPACE::Component*) | ||||
| { | { | ||||
| @@ -492,72 +389,22 @@ public: | |||||
| #if JUCE_WIN32 | #if JUCE_WIN32 | ||||
| resizeHostWindow (hostWindow, titleW, titleH, this); | resizeHostWindow (hostWindow, titleW, titleH, this); | ||||
| owner->updateSize(); | |||||
| #else | |||||
| Rect r; | |||||
| GetWindowBounds ((WindowRef) hostWindow, kWindowContentRgn, &r); | |||||
| HIRect p; | |||||
| zerostruct (p); | |||||
| HIViewConvertRect (&p, parentView, 0); // find the X position of our view in case there's space to the left of it | |||||
| r.right = r.left + jmax (titleW, ((int) p.origin.x) + getWidth()); | |||||
| r.bottom = r.top + getHeight() + titleH; | |||||
| SetWindowBounds ((WindowRef) hostWindow, kWindowContentRgn, &r); | |||||
| owner->updateSize(); | |||||
| owner->Invalidate(); | |||||
| #endif | #endif | ||||
| owner->updateSize(); | |||||
| } | } | ||||
| //============================================================================== | |||||
| juce_UseDebuggingNewOperator | |||||
| #if JUCE_MAC | |||||
| protected: | |||||
| void internalRepaint (int x, int y, int w, int h) | |||||
| void userTriedToCloseWindow() | |||||
| { | { | ||||
| Component::internalRepaint (x, y, w, h); | |||||
| owner->Invalidate(); | |||||
| if (forcedRepaintTimer != 0 && ! forcedRepaintTimer->isTimerRunning()) | |||||
| forcedRepaintTimer->startTimer (1000 / 25); | |||||
| } | } | ||||
| HIViewRef parentView; | |||||
| #endif | |||||
| //============================================================================== | |||||
| juce_UseDebuggingNewOperator | |||||
| private: | private: | ||||
| void* const hostWindow; | void* const hostWindow; | ||||
| void* nsWindow; | |||||
| JuceCustomUIView* const owner; | JuceCustomUIView* const owner; | ||||
| int titleW, titleH; | int titleW, titleH; | ||||
| #if JUCE_MAC | |||||
| // if PT makes us wait too long for a redraw after we've | |||||
| // asked for one, this should kick in and force one to happen | |||||
| class RepaintCheckTimer : public Timer | |||||
| { | |||||
| public: | |||||
| RepaintCheckTimer (EditorCompWrapper& owner_) | |||||
| : owner (owner_) | |||||
| { | |||||
| } | |||||
| void timerCallback() | |||||
| { | |||||
| stopTimer(); | |||||
| ComponentPeer* const peer = owner.getPeer(); | |||||
| if (peer != 0) | |||||
| peer->performAnyPendingRepaintsNow(); | |||||
| } | |||||
| EditorCompWrapper& owner; | |||||
| }; | |||||
| RepaintCheckTimer* forcedRepaintTimer; | |||||
| #endif | |||||
| }; | }; | ||||
| }; | }; | ||||
| @@ -705,6 +552,7 @@ protected: | |||||
| #if defined (JUCE_DEBUG) || JUCE_LOG_ASSERTIONS | #if defined (JUCE_DEBUG) || JUCE_LOG_ASSERTIONS | ||||
| const int numMidiEventsComingIn = midiEvents.getNumEvents(); | const int numMidiEventsComingIn = midiEvents.getNumEvents(); | ||||
| (void) numMidiEventsComingIn; | |||||
| #endif | #endif | ||||
| { | { | ||||
| @@ -744,7 +592,7 @@ protected: | |||||
| if (! midiEvents.isEmpty()) | if (! midiEvents.isEmpty()) | ||||
| { | { | ||||
| #if JucePlugin_ProducesMidiOutput | #if JucePlugin_ProducesMidiOutput | ||||
| const uint8* midiEventData; | |||||
| const juce::uint8* midiEventData; | |||||
| int midiEventSize, midiEventPosition; | int midiEventSize, midiEventPosition; | ||||
| MidiBuffer::Iterator i (midiEvents); | MidiBuffer::Iterator i (midiEvents); | ||||
| @@ -0,0 +1,12 @@ | |||||
| # | |||||
| # This file contains a list of the symbols that your VST plugin needs to export. | |||||
| # | |||||
| # It's very important that you refer to this file in your linker settings, under | |||||
| # the "Exported Symbols File" heading. If you don't specify that these are the | |||||
| # only two symbols exported, the linker will also export all the Obj-C symbols in | |||||
| # Juce, and this will create all sorts of dynamic link problems when you have | |||||
| # more than one juce-linked module loaded at the same time. | |||||
| # | |||||
| _VSTPluginMain | |||||
| _main_macho | |||||
| @@ -30,7 +30,7 @@ | |||||
| */ | */ | ||||
| /* | /* | ||||
| *** DON't EDIT THIS FILE!! *** | |||||
| *** DON'T EDIT THIS FILE!! *** | |||||
| The idea is that everyone's plugins should share this same wrapper | The idea is that everyone's plugins should share this same wrapper | ||||
| code, so if you start hacking around in here you're missing the point! | code, so if you start hacking around in here you're missing the point! | ||||
| @@ -119,7 +119,8 @@ | |||||
| #pragma pack (push, 8) | #pragma pack (push, 8) | ||||
| #endif | #endif | ||||
| #include "../../../../../juce_amalgamated.h" | |||||
| //#include "../../../../../juce_amalgamated.h" | |||||
| #include "../../../../../juce.h" | |||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||
| #pragma pack (pop) | #pragma pack (pop) | ||||
| @@ -136,6 +137,10 @@ BEGIN_JUCE_NAMESPACE | |||||
| #if JUCE_MAC | #if JUCE_MAC | ||||
| extern void juce_setCurrentExecutableFileNameFromBundleId (const String& bundleId) throw(); | extern void juce_setCurrentExecutableFileNameFromBundleId (const String& bundleId) throw(); | ||||
| extern void* attachComponentToWindowRef (Component* component, void* windowRef); | |||||
| extern void detachComponentFromWindowRef (Component* component, void* nsWindow); | |||||
| extern void setNativeHostWindowSize (void* nsWindow, Component* editorComp, int newWidth, int newHeight); | |||||
| extern void checkWindowVisibility (void* nsWindow, Component* component); | |||||
| #endif | #endif | ||||
| #if JUCE_LINUX | #if JUCE_LINUX | ||||
| @@ -355,7 +360,6 @@ public: | |||||
| outgoingEventSize = 0; | outgoingEventSize = 0; | ||||
| chunkMemoryTime = 0; | chunkMemoryTime = 0; | ||||
| isProcessing = false; | isProcessing = false; | ||||
| firstResize = true; | |||||
| hasShutdown = false; | hasShutdown = false; | ||||
| firstProcessCallback = true; | firstProcessCallback = true; | ||||
| shouldDeleteEditor = false; | shouldDeleteEditor = false; | ||||
| @@ -438,6 +442,18 @@ public: | |||||
| void open() | void open() | ||||
| { | { | ||||
| if (editorComp == 0) | |||||
| { | |||||
| AudioProcessorEditor* const ed = filter->createEditorIfNeeded(); | |||||
| if (ed != 0) | |||||
| cEffect.flags |= effFlagsHasEditor; | |||||
| else | |||||
| cEffect.flags &= ~effFlagsHasEditor; | |||||
| delete ed; | |||||
| } | |||||
| startTimer (1000 / 4); | startTimer (1000 / 4); | ||||
| } | } | ||||
| @@ -654,7 +670,7 @@ public: | |||||
| { | { | ||||
| if (outputs[j] == chan) | if (outputs[j] == chan) | ||||
| { | { | ||||
| chan = juce_malloc (sizeof (float) * blockSize * 2); | |||||
| chan = (float*) juce_malloc (sizeof (float) * blockSize * 2); | |||||
| tempChannels.set (i, chan); | tempChannels.set (i, chan); | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -1062,6 +1078,11 @@ public: | |||||
| chunkMemory.setSize (0); | chunkMemory.setSize (0); | ||||
| } | } | ||||
| #if JUCE_MAC | |||||
| if (hostWindow != 0) | |||||
| checkWindowVisibility (hostWindow, editorComp); | |||||
| #endif | |||||
| tryMasterIdle(); | tryMasterIdle(); | ||||
| } | } | ||||
| @@ -1117,13 +1138,18 @@ public: | |||||
| if (ed != 0) | if (ed != 0) | ||||
| { | { | ||||
| cEffect.flags |= effFlagsHasEditor; | |||||
| ed->setOpaque (true); | ed->setOpaque (true); | ||||
| ed->setVisible (true); | ed->setVisible (true); | ||||
| editorComp = new EditorCompWrapper (this, ed); | editorComp = new EditorCompWrapper (this, ed); | ||||
| } | } | ||||
| else | |||||
| { | |||||
| cEffect.flags &= ~effFlagsHasEditor; | |||||
| } | |||||
| } | } | ||||
| shouldDeleteEditor = false; | shouldDeleteEditor = false; | ||||
| } | } | ||||
| @@ -1144,7 +1170,7 @@ public: | |||||
| if (modalComponent != 0) | if (modalComponent != 0) | ||||
| { | { | ||||
| modalComponent->exitModalState (0); | modalComponent->exitModalState (0); | ||||
| if (canDeleteLaterIfModal) | if (canDeleteLaterIfModal) | ||||
| { | { | ||||
| shouldDeleteEditor = true; | shouldDeleteEditor = true; | ||||
| @@ -1152,6 +1178,11 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| #if JUCE_MAC | |||||
| detachComponentFromWindowRef (editorComp, hostWindow); | |||||
| hostWindow = 0; | |||||
| #endif | |||||
| filter->editorBeingDeleted (editorComp->getEditorComp()); | filter->editorBeingDeleted (editorComp->getEditorComp()); | ||||
| deleteAndZero (editorComp); | deleteAndZero (editorComp); | ||||
| @@ -1161,7 +1192,7 @@ public: | |||||
| jassert (Component::getCurrentlyModalComponent() == 0); | jassert (Component::getCurrentlyModalComponent() == 0); | ||||
| } | } | ||||
| #if JUCE_MAC || JUCE_LINUX | |||||
| #if JUCE_LINUX | |||||
| hostWindow = 0; | hostWindow = 0; | ||||
| #endif | #endif | ||||
| @@ -1196,59 +1227,22 @@ public: | |||||
| #if JUCE_WIN32 | #if JUCE_WIN32 | ||||
| editorComp->addToDesktop (0); | editorComp->addToDesktop (0); | ||||
| hostWindow = (HWND) ptr; | hostWindow = (HWND) ptr; | ||||
| HWND editorWnd = (HWND) editorComp->getWindowHandle(); | HWND editorWnd = (HWND) editorComp->getWindowHandle(); | ||||
| SetParent (editorWnd, hostWindow); | SetParent (editorWnd, hostWindow); | ||||
| DWORD val = GetWindowLong (editorWnd, GWL_STYLE); | DWORD val = GetWindowLong (editorWnd, GWL_STYLE); | ||||
| val = (val & ~WS_POPUP) | WS_CHILD; | val = (val & ~WS_POPUP) | WS_CHILD; | ||||
| SetWindowLong (editorWnd, GWL_STYLE, val); | SetWindowLong (editorWnd, GWL_STYLE, val); | ||||
| editorComp->setVisible (true); | |||||
| #elif JUCE_LINUX | #elif JUCE_LINUX | ||||
| editorComp->addToDesktop (0); | editorComp->addToDesktop (0); | ||||
| hostWindow = (Window) ptr; | hostWindow = (Window) ptr; | ||||
| Window editorWnd = (Window) editorComp->getWindowHandle(); | Window editorWnd = (Window) editorComp->getWindowHandle(); | ||||
| XReparentWindow (display, editorWnd, hostWindow, 0, 0); | XReparentWindow (display, editorWnd, hostWindow, 0, 0); | ||||
| editorComp->setVisible (true); | |||||
| #else | #else | ||||
| hostWindow = (WindowRef) ptr; | |||||
| firstResize = true; | |||||
| SetAutomaticControlDragTrackingEnabledForWindow (hostWindow, true); | |||||
| WindowAttributes attributes; | |||||
| GetWindowAttributes (hostWindow, &attributes); | |||||
| HIViewRef parentView = 0; | |||||
| if ((attributes & kWindowCompositingAttribute) != 0) | |||||
| { | |||||
| HIViewRef root = HIViewGetRoot (hostWindow); | |||||
| HIViewFindByID (root, kHIViewWindowContentID, &parentView); | |||||
| if (parentView == 0) | |||||
| parentView = root; | |||||
| } | |||||
| else | |||||
| { | |||||
| GetRootControl (hostWindow, (ControlRef*) &parentView); | |||||
| if (parentView == 0) | |||||
| CreateRootControl (hostWindow, (ControlRef*) &parentView); | |||||
| } | |||||
| jassert (parentView != 0); // agh - the host has to provide a compositing window.. | |||||
| editorComp->setVisible (true); | |||||
| editorComp->addToDesktop (0, (void*) parentView); | |||||
| hostWindow = attachComponentToWindowRef (editorComp, (WindowRef) ptr); | |||||
| #endif | #endif | ||||
| editorComp->setVisible (true); | |||||
| return 1; | return 1; | ||||
| } | } | ||||
| @@ -1292,25 +1286,7 @@ public: | |||||
| { | { | ||||
| // some hosts don't support the sizeWindow call, so do it manually.. | // some hosts don't support the sizeWindow call, so do it manually.. | ||||
| #if JUCE_MAC | #if JUCE_MAC | ||||
| Rect r; | |||||
| GetWindowBounds (hostWindow, kWindowContentRgn, &r); | |||||
| if (firstResize) | |||||
| { | |||||
| diffW = (r.right - r.left) - editorComp->getWidth(); | |||||
| diffH = (r.bottom - r.top) - editorComp->getHeight(); | |||||
| firstResize = false; | |||||
| } | |||||
| r.right = r.left + newWidth + diffW; | |||||
| r.bottom = r.top + newHeight + diffH; | |||||
| SetWindowBounds (hostWindow, kWindowContentRgn, &r); | |||||
| r.bottom -= r.top; | |||||
| r.right -= r.left; | |||||
| r.left = r.top = 0; | |||||
| InvalWindowRect (hostWindow, &r); | |||||
| setNativeHostWindowSize (hostWindow, editorComp, newWidth, newHeight); | |||||
| #elif JUCE_LINUX | #elif JUCE_LINUX | ||||
| Window root; | Window root; | ||||
| int x, y; | int x, y; | ||||
| @@ -1394,7 +1370,6 @@ private: | |||||
| VstEvents* outgoingEvents; | VstEvents* outgoingEvents; | ||||
| int outgoingEventSize; | int outgoingEventSize; | ||||
| bool isProcessing; | bool isProcessing; | ||||
| bool firstResize; | |||||
| bool hasShutdown; | bool hasShutdown; | ||||
| bool firstProcessCallback; | bool firstProcessCallback; | ||||
| int diffW, diffH; | int diffW, diffH; | ||||
| @@ -1452,7 +1427,7 @@ private: | |||||
| } | } | ||||
| #if JUCE_MAC | #if JUCE_MAC | ||||
| WindowRef hostWindow; | |||||
| void* hostWindow; | |||||
| #elif JUCE_LINUX | #elif JUCE_LINUX | ||||
| Window hostWindow; | Window hostWindow; | ||||
| #else | #else | ||||
| @@ -1497,8 +1472,6 @@ static AEffect* pluginEntryPoint (audioMasterCallback audioMaster) | |||||
| juce_setCurrentExecutableFileNameFromBundleId (JucePlugin_CFBundleIdentifier); | juce_setCurrentExecutableFileNameFromBundleId (JucePlugin_CFBundleIdentifier); | ||||
| #endif | #endif | ||||
| MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (0); | |||||
| try | try | ||||
| { | { | ||||
| if (audioMaster (0, audioMasterVersion, 0, 0, 0, 0) != 0) | if (audioMaster (0, audioMasterVersion, 0, 0, 0, 0) != 0) | ||||
| @@ -0,0 +1,111 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
| Copyright 2004-7 by Raw Material Software ltd. | |||||
| ------------------------------------------------------------------------------ | |||||
| JUCE can be redistributed and/or modified under the terms of the | |||||
| GNU General Public License, as published by the Free Software Foundation; | |||||
| either version 2 of the License, or (at your option) any later version. | |||||
| JUCE is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU General Public License for more details. | |||||
| You should have received a copy of the GNU General Public License | |||||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
| Boston, MA 02111-1307 USA | |||||
| ------------------------------------------------------------------------------ | |||||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
| more information. | |||||
| ============================================================================== | |||||
| */ | |||||
| //============================================================================== | |||||
| #include <Cocoa/Cocoa.h> | |||||
| #include "../../../../../juce.h" | |||||
| BEGIN_JUCE_NAMESPACE | |||||
| void* attachComponentToWindowRef (Component* comp, void* windowRef) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef]; | |||||
| [hostWindow retain]; | |||||
| [hostWindow setCanHide: YES]; | |||||
| [hostWindow setReleasedWhenClosed: YES]; | |||||
| NSView* content = [hostWindow contentView]; | |||||
| NSRect f = [content frame]; | |||||
| NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin]; | |||||
| windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height); | |||||
| comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y); | |||||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||||
| comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses); | |||||
| #else | |||||
| comp->addToDesktop (ComponentPeer::windowIsTemporary); | |||||
| #endif | |||||
| comp->setVisible (true); | |||||
| comp->toFront (false); | |||||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||||
| NSWindow* pluginWindow = [pluginView window]; | |||||
| [pluginWindow setExcludedFromWindowsMenu: YES]; | |||||
| [hostWindow addChildWindow: pluginWindow | |||||
| ordered: NSWindowAbove]; | |||||
| [hostWindow orderFront: nil]; | |||||
| [pluginWindow orderFront: nil]; | |||||
| return hostWindow; | |||||
| } | |||||
| void detachComponentFromWindowRef (Component* comp, void* nsWindow) | |||||
| { | |||||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||||
| if (hostWindow != 0) | |||||
| { | |||||
| const ScopedAutoReleasePool pool; | |||||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||||
| NSWindow* pluginWindow = [pluginView window]; | |||||
| [hostWindow removeChildWindow: pluginWindow]; | |||||
| comp->removeFromDesktop(); | |||||
| [hostWindow release]; | |||||
| } | |||||
| } | |||||
| void setNativeHostWindowSize (void* nsWindow, Component* component, int newWidth, int newHeight) | |||||
| { | |||||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||||
| if (hostWindow != 0) | |||||
| { | |||||
| ScopedAutoReleasePool pool; | |||||
| NSRect f = [hostWindow frame]; | |||||
| f.size.width += newWidth - component->getWidth(); | |||||
| f.size.height += newHeight - component->getHeight(); | |||||
| [hostWindow setFrame: f display: YES]; | |||||
| } | |||||
| } | |||||
| void checkWindowVisibility (void* nsWindow, Component* comp) | |||||
| { | |||||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||||
| comp->setVisible ([hostWindow isVisible]); | |||||
| } | |||||
| END_JUCE_NAMESPACE | |||||
| @@ -7,11 +7,11 @@ | |||||
| objects = { | objects = { | ||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 84078F3E09E6B42E004E7BCD /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84078F3D09E6B42E004E7BCD /* AGL.framework */; }; | |||||
| 8407902B09E6B5BD004E7BCD /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407902A09E6B5BD004E7BCD /* QuickTime.framework */; }; | 8407902B09E6B5BD004E7BCD /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407902A09E6B5BD004E7BCD /* QuickTime.framework */; }; | ||||
| 841083D50DB36EA400AB8583 /* MainComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841083D30DB36EA400AB8583 /* MainComponent.cpp */; }; | 841083D50DB36EA400AB8583 /* MainComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841083D30DB36EA400AB8583 /* MainComponent.cpp */; }; | ||||
| 841084880DB374E700AB8583 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 841084870DB374E700AB8583 /* juce.xcconfig */; }; | 841084880DB374E700AB8583 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 841084870DB374E700AB8583 /* juce.xcconfig */; }; | ||||
| 841136A00D0480DE0054B790 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8411369F0D0480DE0054B790 /* OpenGL.framework */; }; | 841136A00D0480DE0054B790 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8411369F0D0480DE0054B790 /* OpenGL.framework */; }; | ||||
| 846EC7870EB607050080CCFF /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC7860EB607050080CCFF /* QTKit.framework */; }; | |||||
| 84F30CD108FEAAA20087E26C /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F30CD008FEAAA20087E26C /* Main.cpp */; }; | 84F30CD108FEAAA20087E26C /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F30CD008FEAAA20087E26C /* Main.cpp */; }; | ||||
| 84F30CED08FEAD7A0087E26C /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */; }; | 84F30CED08FEAD7A0087E26C /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */; }; | ||||
| 84FAD61A0C7C3CCB00AF3028 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD6190C7C3CCB00AF3028 /* IOKit.framework */; }; | 84FAD61A0C7C3CCB00AF3028 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD6190C7C3CCB00AF3028 /* IOKit.framework */; }; | ||||
| @@ -22,21 +22,19 @@ | |||||
| 84FBB8880E06CCE900B52196 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FBB8870E06CCE900B52196 /* AudioUnit.framework */; }; | 84FBB8880E06CCE900B52196 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FBB8870E06CCE900B52196 /* AudioUnit.framework */; }; | ||||
| 84FBB88D0E06CD0100B52196 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FBB88C0E06CD0100B52196 /* WebKit.framework */; }; | 84FBB88D0E06CD0100B52196 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FBB88C0E06CD0100B52196 /* WebKit.framework */; }; | ||||
| 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; | 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; | ||||
| 8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; }; | |||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||
| 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; | 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; | ||||
| 20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||||
| 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | ||||
| 4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | 4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | ||||
| 84078F3D09E6B42E004E7BCD /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||||
| 8407902A09E6B5BD004E7BCD /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | 8407902A09E6B5BD004E7BCD /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | ||||
| 841083D20DB36EA400AB8583 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../common/includes.h; sourceTree = SOURCE_ROOT; }; | 841083D20DB36EA400AB8583 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../common/includes.h; sourceTree = SOURCE_ROOT; }; | ||||
| 841083D30DB36EA400AB8583 /* MainComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../common/MainComponent.cpp; sourceTree = SOURCE_ROOT; }; | 841083D30DB36EA400AB8583 /* MainComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../common/MainComponent.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 841083D40DB36EA400AB8583 /* MainComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../common/MainComponent.h; sourceTree = SOURCE_ROOT; }; | 841083D40DB36EA400AB8583 /* MainComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../common/MainComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
| 841084870DB374E700AB8583 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | 841084870DB374E700AB8583 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | ||||
| 8411369F0D0480DE0054B790 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | 8411369F0D0480DE0054B790 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | ||||
| 846EC7860EB607050080CCFF /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84F30CD008FEAAA20087E26C /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../common/Main.cpp; sourceTree = SOURCE_ROOT; }; | 84F30CD008FEAAA20087E26C /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../common/Main.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | 84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | ||||
| 84FAD6190C7C3CCB00AF3028 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | 84FAD6190C7C3CCB00AF3028 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | ||||
| @@ -56,9 +54,7 @@ | |||||
| isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */, | |||||
| 84F30CED08FEAD7A0087E26C /* CoreAudio.framework in Frameworks */, | 84F30CED08FEAD7A0087E26C /* CoreAudio.framework in Frameworks */, | ||||
| 84078F3E09E6B42E004E7BCD /* AGL.framework in Frameworks */, | |||||
| 8407902B09E6B5BD004E7BCD /* QuickTime.framework in Frameworks */, | 8407902B09E6B5BD004E7BCD /* QuickTime.framework in Frameworks */, | ||||
| 84FAD61A0C7C3CCB00AF3028 /* IOKit.framework in Frameworks */, | 84FAD61A0C7C3CCB00AF3028 /* IOKit.framework in Frameworks */, | ||||
| 841136A00D0480DE0054B790 /* OpenGL.framework in Frameworks */, | 841136A00D0480DE0054B790 /* OpenGL.framework in Frameworks */, | ||||
| @@ -67,6 +63,7 @@ | |||||
| 84FBB87B0E06CCC600B52196 /* DiscRecording.framework in Frameworks */, | 84FBB87B0E06CCC600B52196 /* DiscRecording.framework in Frameworks */, | ||||
| 84FBB8880E06CCE900B52196 /* AudioUnit.framework in Frameworks */, | 84FBB8880E06CCE900B52196 /* AudioUnit.framework in Frameworks */, | ||||
| 84FBB88D0E06CD0100B52196 /* WebKit.framework in Frameworks */, | 84FBB88D0E06CD0100B52196 /* WebKit.framework in Frameworks */, | ||||
| 846EC7870EB607050080CCFF /* QTKit.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -120,13 +117,12 @@ | |||||
| children = ( | children = ( | ||||
| 84FBB8870E06CCE900B52196 /* AudioUnit.framework */, | 84FBB8870E06CCE900B52196 /* AudioUnit.framework */, | ||||
| 84FBB8720E06CC5D00B52196 /* Cocoa.framework */, | 84FBB8720E06CC5D00B52196 /* Cocoa.framework */, | ||||
| 20286C33FDCF999611CA2CEA /* Carbon.framework */, | |||||
| 4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */, | 4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */, | ||||
| 84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */, | 84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */, | ||||
| 84FBB8760E06CCB200B52196 /* CoreMIDI.framework */, | 84FBB8760E06CCB200B52196 /* CoreMIDI.framework */, | ||||
| 84FBB87A0E06CCC600B52196 /* DiscRecording.framework */, | 84FBB87A0E06CCC600B52196 /* DiscRecording.framework */, | ||||
| 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */, | 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */, | ||||
| 84078F3D09E6B42E004E7BCD /* AGL.framework */, | |||||
| 846EC7860EB607050080CCFF /* QTKit.framework */, | |||||
| 8407902A09E6B5BD004E7BCD /* QuickTime.framework */, | 8407902A09E6B5BD004E7BCD /* QuickTime.framework */, | ||||
| 84FAD6190C7C3CCB00AF3028 /* IOKit.framework */, | 84FAD6190C7C3CCB00AF3028 /* IOKit.framework */, | ||||
| 8411369F0D0480DE0054B790 /* OpenGL.framework */, | 8411369F0D0480DE0054B790 /* OpenGL.framework */, | ||||
| @@ -36,21 +36,21 @@ ifeq ($(CONFIG),Release) | |||||
| endif | endif | ||||
| OBJECTS := \ | OBJECTS := \ | ||||
| $(OBJDIR)/MainDemoWindow.o \ | |||||
| $(OBJDIR)/ApplicationStartup.o \ | $(OBJDIR)/ApplicationStartup.o \ | ||||
| $(OBJDIR)/BinaryData.o \ | |||||
| $(OBJDIR)/juce_LibrarySource.o \ | $(OBJDIR)/juce_LibrarySource.o \ | ||||
| $(OBJDIR)/MainDemoWindow.o \ | |||||
| $(OBJDIR)/AudioDemo.o \ | |||||
| $(OBJDIR)/BinaryData.o \ | |||||
| $(OBJDIR)/PathsAndTransformsDemo.o \ | |||||
| $(OBJDIR)/DragAndDropDemo.o \ | $(OBJDIR)/DragAndDropDemo.o \ | ||||
| $(OBJDIR)/FontsAndTextDemo.o \ | |||||
| $(OBJDIR)/InterprocessCommsDemo.o \ | |||||
| $(OBJDIR)/ThreadingDemo.o \ | |||||
| $(OBJDIR)/OpenGLDemo.o \ | $(OBJDIR)/OpenGLDemo.o \ | ||||
| $(OBJDIR)/PathsAndTransformsDemo.o \ | |||||
| $(OBJDIR)/WidgetsDemo.o \ | |||||
| $(OBJDIR)/TreeViewDemo.o \ | |||||
| $(OBJDIR)/QuickTimeDemo.o \ | $(OBJDIR)/QuickTimeDemo.o \ | ||||
| $(OBJDIR)/InterprocessCommsDemo.o \ | |||||
| $(OBJDIR)/AudioDemo.o \ | |||||
| $(OBJDIR)/FontsAndTextDemo.o \ | |||||
| $(OBJDIR)/TableDemo.o \ | $(OBJDIR)/TableDemo.o \ | ||||
| $(OBJDIR)/ThreadingDemo.o \ | |||||
| $(OBJDIR)/TreeViewDemo.o \ | |||||
| $(OBJDIR)/WidgetsDemo.o \ | |||||
| MKDIR_TYPE := msdos | MKDIR_TYPE := msdos | ||||
| CMD := $(subst \,\\,$(ComSpec)$(COMSPEC)) | CMD := $(subst \,\\,$(ComSpec)$(COMSPEC)) | ||||
| @@ -91,12 +91,12 @@ else | |||||
| -@if exist $(subst /,\,$(OBJDIR)) rmdir /s /q $(subst /,\,$(OBJDIR)) | -@if exist $(subst /,\,$(OBJDIR)) rmdir /s /q $(subst /,\,$(OBJDIR)) | ||||
| endif | endif | ||||
| $(OBJDIR)/ApplicationStartup.o: ../../src/ApplicationStartup.cpp | |||||
| $(OBJDIR)/MainDemoWindow.o: ../../src/MainDemoWindow.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/BinaryData.o: ../../src/BinaryData.cpp | |||||
| $(OBJDIR)/ApplicationStartup.o: ../../src/ApplicationStartup.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| @@ -106,12 +106,12 @@ $(OBJDIR)/juce_LibrarySource.o: ../../src/juce_LibrarySource.cpp | |||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/MainDemoWindow.o: ../../src/MainDemoWindow.cpp | |||||
| $(OBJDIR)/BinaryData.o: ../../src/BinaryData.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/AudioDemo.o: ../../src/demos/AudioDemo.cpp | |||||
| $(OBJDIR)/PathsAndTransformsDemo.o: ../../src/demos/PathsAndTransformsDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| @@ -121,22 +121,22 @@ $(OBJDIR)/DragAndDropDemo.o: ../../src/demos/DragAndDropDemo.cpp | |||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/FontsAndTextDemo.o: ../../src/demos/FontsAndTextDemo.cpp | |||||
| $(OBJDIR)/ThreadingDemo.o: ../../src/demos/ThreadingDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/InterprocessCommsDemo.o: ../../src/demos/InterprocessCommsDemo.cpp | |||||
| $(OBJDIR)/OpenGLDemo.o: ../../src/demos/OpenGLDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/OpenGLDemo.o: ../../src/demos/OpenGLDemo.cpp | |||||
| $(OBJDIR)/WidgetsDemo.o: ../../src/demos/WidgetsDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/PathsAndTransformsDemo.o: ../../src/demos/PathsAndTransformsDemo.cpp | |||||
| $(OBJDIR)/TreeViewDemo.o: ../../src/demos/TreeViewDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| @@ -146,22 +146,22 @@ $(OBJDIR)/QuickTimeDemo.o: ../../src/demos/QuickTimeDemo.cpp | |||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/TableDemo.o: ../../src/demos/TableDemo.cpp | |||||
| $(OBJDIR)/InterprocessCommsDemo.o: ../../src/demos/InterprocessCommsDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/ThreadingDemo.o: ../../src/demos/ThreadingDemo.cpp | |||||
| $(OBJDIR)/AudioDemo.o: ../../src/demos/AudioDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/TreeViewDemo.o: ../../src/demos/TreeViewDemo.cpp | |||||
| $(OBJDIR)/FontsAndTextDemo.o: ../../src/demos/FontsAndTextDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/WidgetsDemo.o: ../../src/demos/WidgetsDemo.cpp | |||||
| $(OBJDIR)/TableDemo.o: ../../src/demos/TableDemo.cpp | |||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o $@ -c $< | @$(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| @@ -1,24 +1,28 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||||
| <plist version="1.0"> | <plist version="1.0"> | ||||
| <dict> | <dict> | ||||
| <key>CFBundleDevelopmentRegion</key> | <key>CFBundleDevelopmentRegion</key> | ||||
| <string>English</string> | <string>English</string> | ||||
| <key>CFBundleExecutable</key> | <key>CFBundleExecutable</key> | ||||
| <string>jucedemo</string> | |||||
| <string>${EXECUTABLE_NAME}</string> | |||||
| <key>CFBundleIconFile</key> | <key>CFBundleIconFile</key> | ||||
| <string></string> | <string></string> | ||||
| <key>CFBundleIdentifier</key> | |||||
| <string>com.apple.myCarbonNibApp</string> | |||||
| <key>CFBundleIdentifier</key> | |||||
| <string>com.rawmaterialsoftware.${PRODUCT_NAME:identifier}</string> | |||||
| <key>CFBundleInfoDictionaryVersion</key> | <key>CFBundleInfoDictionaryVersion</key> | ||||
| <string>6.0</string> | <string>6.0</string> | ||||
| <key>CFBundleName</key> | |||||
| <string>${PRODUCT_NAME}</string> | |||||
| <key>CFBundlePackageType</key> | <key>CFBundlePackageType</key> | ||||
| <string>APPL</string> | <string>APPL</string> | ||||
| <key>CFBundleSignature</key> | <key>CFBundleSignature</key> | ||||
| <string>????</string> | <string>????</string> | ||||
| <key>CFBundleVersion</key> | <key>CFBundleVersion</key> | ||||
| <string>0.1</string> | |||||
| <key>CSResourcesFileMapped</key> | |||||
| <true/> | |||||
| <string>1.0</string> | |||||
| <key>NSMainNibFile</key> | |||||
| <string>MainMenu</string> | |||||
| <key>NSPrincipalClass</key> | |||||
| <string>NSApplication</string> | |||||
| </dict> | </dict> | ||||
| </plist> | </plist> | ||||
| @@ -3,231 +3,180 @@ | |||||
| archiveVersion = 1; | archiveVersion = 1; | ||||
| classes = { | classes = { | ||||
| }; | }; | ||||
| objectVersion = 42; | |||||
| objectVersion = 45; | |||||
| objects = { | objects = { | ||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 8417EE7A0A6E7EB90058E04E /* TableDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8417EE790A6E7EB90058E04E /* TableDemo.cpp */; }; | |||||
| 842A97B8081060FB0059DBCC /* DragAndDropDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842A97B6081060FB0059DBCC /* DragAndDropDemo.cpp */; }; | |||||
| 842A97B9081060FB0059DBCC /* OpenGLDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842A97B7081060FB0059DBCC /* OpenGLDemo.cpp */; }; | |||||
| 846929270A49DDE100314975 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 846929260A49DDE100314975 /* juce.xcconfig */; }; | |||||
| 846C10970DE32E6E00E8CCE8 /* juce_AppConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 846C10960DE32E6D00E8CCE8 /* juce_AppConfig.h */; }; | |||||
| 846C10B20DE32EB500E8CCE8 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 846C10B10DE32EB500E8CCE8 /* juce_LibrarySource.mm */; }; | |||||
| 8480BC1C0DE0BB8200478E44 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC0E0DE0BB8200478E44 /* AGL.framework */; }; | |||||
| 8480BC1D0DE0BB8200478E44 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC0F0DE0BB8200478E44 /* AudioUnit.framework */; }; | |||||
| 8480BC1E0DE0BB8200478E44 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC100DE0BB8200478E44 /* IOKit.framework */; }; | |||||
| 8480BC1F0DE0BB8200478E44 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC110DE0BB8200478E44 /* Cocoa.framework */; }; | |||||
| 8480BC200DE0BB8200478E44 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC120DE0BB8200478E44 /* CoreAudio.framework */; }; | |||||
| 8480BC210DE0BB8200478E44 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC130DE0BB8200478E44 /* CoreFoundation.framework */; }; | |||||
| 8480BC220DE0BB8200478E44 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC140DE0BB8200478E44 /* CoreMIDI.framework */; }; | |||||
| 8480BC230DE0BB8200478E44 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC150DE0BB8200478E44 /* DiscRecording.framework */; }; | |||||
| 8480BC240DE0BB8200478E44 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC160DE0BB8200478E44 /* OpenGL.framework */; }; | |||||
| 8480BC250DE0BB8200478E44 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC170DE0BB8200478E44 /* QuickTime.framework */; }; | |||||
| 8480BC260DE0BB8200478E44 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC180DE0BB8200478E44 /* WebKit.framework */; }; | |||||
| 8480BC270DE0BB8200478E44 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC190DE0BB8200478E44 /* Carbon.framework */; }; | |||||
| 8480BC280DE0BB8200478E44 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC1A0DE0BB8200478E44 /* CoreServices.framework */; }; | |||||
| 8480BC290DE0BB8200478E44 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC1B0DE0BB8200478E44 /* ApplicationServices.framework */; }; | |||||
| 849E1BF706C15C330002E024 /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 849E1BF506C15C330002E024 /* BinaryData.cpp */; }; | |||||
| 849E1BF806C15C330002E024 /* BinaryData.h in Headers */ = {isa = PBXBuildFile; fileRef = 849E1BF606C15C330002E024 /* BinaryData.h */; }; | |||||
| 84A06BA809CAD661006A43BD /* InterprocessCommsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BA709CAD661006A43BD /* InterprocessCommsDemo.cpp */; }; | |||||
| 84C49E5506C0EE8C0066071B /* ApplicationStartup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4A06C0EE8C0066071B /* ApplicationStartup.cpp */; }; | |||||
| 84C49E5606C0EE8C0066071B /* AudioDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4C06C0EE8C0066071B /* AudioDemo.cpp */; }; | |||||
| 84C49E5706C0EE8C0066071B /* FontsAndTextDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4D06C0EE8C0066071B /* FontsAndTextDemo.cpp */; }; | |||||
| 84C49E5806C0EE8C0066071B /* PathsAndTransformsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4E06C0EE8C0066071B /* PathsAndTransformsDemo.cpp */; }; | |||||
| 84C49E5906C0EE8C0066071B /* ThreadingDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4F06C0EE8C0066071B /* ThreadingDemo.cpp */; }; | |||||
| 84C49E5A06C0EE8C0066071B /* TreeViewDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E5006C0EE8C0066071B /* TreeViewDemo.cpp */; }; | |||||
| 84C49E5B06C0EE8C0066071B /* WidgetsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E5106C0EE8C0066071B /* WidgetsDemo.cpp */; }; | |||||
| 84C49E5C06C0EE8C0066071B /* jucedemo_headers.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C49E5206C0EE8C0066071B /* jucedemo_headers.h */; }; | |||||
| 84C49E5D06C0EE8C0066071B /* MainDemoWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E5306C0EE8C0066071B /* MainDemoWindow.cpp */; }; | |||||
| 84C49E5E06C0EE8C0066071B /* MainDemoWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C49E5406C0EE8C0066071B /* MainDemoWindow.h */; }; | |||||
| 84F8DB0B099CA8DD00E911ED /* QuickTimeDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F8DB0A099CA8DD00E911ED /* QuickTimeDemo.cpp */; }; | |||||
| 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; | |||||
| 841FE43C0E8ABDD4003C3263 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4360E8ABDD4003C3263 /* CoreAudio.framework */; }; | |||||
| 841FE43D0E8ABDD4003C3263 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4370E8ABDD4003C3263 /* CoreMIDI.framework */; }; | |||||
| 841FE43E0E8ABDD4003C3263 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4380E8ABDD4003C3263 /* DiscRecording.framework */; }; | |||||
| 841FE43F0E8ABDD4003C3263 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4390E8ABDD4003C3263 /* IOKit.framework */; }; | |||||
| 841FE4400E8ABDD4003C3263 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE43A0E8ABDD4003C3263 /* OpenGL.framework */; }; | |||||
| 841FE4410E8ABDD4003C3263 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE43B0E8ABDD4003C3263 /* WebKit.framework */; }; | |||||
| 8450577A0EB52CE500029DFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 845057790EB52CE500029DFF /* QuickTime.framework */; }; | |||||
| 847F4D900E8AC35C00F64426 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 847F4D8F0E8AC35C00F64426 /* QTKit.framework */; }; | |||||
| 847F4EA50E8BA9C300F64426 /* AudioDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9A0E8BA9C300F64426 /* AudioDemo.cpp */; }; | |||||
| 847F4EA60E8BA9C300F64426 /* DragAndDropDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9B0E8BA9C300F64426 /* DragAndDropDemo.cpp */; }; | |||||
| 847F4EA70E8BA9C300F64426 /* FontsAndTextDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9C0E8BA9C300F64426 /* FontsAndTextDemo.cpp */; }; | |||||
| 847F4EA80E8BA9C300F64426 /* InterprocessCommsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9D0E8BA9C300F64426 /* InterprocessCommsDemo.cpp */; }; | |||||
| 847F4EA90E8BA9C300F64426 /* OpenGLDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9E0E8BA9C300F64426 /* OpenGLDemo.cpp */; }; | |||||
| 847F4EAA0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9F0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp */; }; | |||||
| 847F4EAB0E8BA9C300F64426 /* QuickTimeDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA00E8BA9C300F64426 /* QuickTimeDemo.cpp */; }; | |||||
| 847F4EAC0E8BA9C300F64426 /* TableDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA10E8BA9C300F64426 /* TableDemo.cpp */; }; | |||||
| 847F4EAD0E8BA9C300F64426 /* ThreadingDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA20E8BA9C300F64426 /* ThreadingDemo.cpp */; }; | |||||
| 847F4EAE0E8BA9C300F64426 /* TreeViewDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA30E8BA9C300F64426 /* TreeViewDemo.cpp */; }; | |||||
| 847F4EAF0E8BA9C300F64426 /* WidgetsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA40E8BA9C300F64426 /* WidgetsDemo.cpp */; }; | |||||
| 847F4EB80E8BA9DD00F64426 /* ApplicationStartup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB00E8BA9DD00F64426 /* ApplicationStartup.cpp */; }; | |||||
| 847F4EB90E8BA9DD00F64426 /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB10E8BA9DD00F64426 /* BinaryData.cpp */; }; | |||||
| 847F4EBA0E8BA9DD00F64426 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB40E8BA9DD00F64426 /* juce_LibrarySource.mm */; }; | |||||
| 847F4EBB0E8BA9DD00F64426 /* MainDemoWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB60E8BA9DD00F64426 /* MainDemoWindow.cpp */; }; | |||||
| 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; | |||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||
| 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; | |||||
| 8417EE790A6E7EB90058E04E /* TableDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = TableDemo.cpp; sourceTree = "<group>"; }; | |||||
| 842A97B6081060FB0059DBCC /* DragAndDropDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DragAndDropDemo.cpp; sourceTree = "<group>"; }; | |||||
| 842A97B7081060FB0059DBCC /* OpenGLDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGLDemo.cpp; sourceTree = "<group>"; }; | |||||
| 846929260A49DDE100314975 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | |||||
| 846C10960DE32E6D00E8CCE8 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; }; | |||||
| 846C10B10DE32EB500E8CCE8 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; }; | |||||
| 8480BC0E0DE0BB8200478E44 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC0F0DE0BB8200478E44 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC100DE0BB8200478E44 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC110DE0BB8200478E44 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC120DE0BB8200478E44 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC130DE0BB8200478E44 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC140DE0BB8200478E44 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC150DE0BB8200478E44 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC160DE0BB8200478E44 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC170DE0BB8200478E44 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC180DE0BB8200478E44 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC190DE0BB8200478E44 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC1A0DE0BB8200478E44 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | |||||
| 8480BC1B0DE0BB8200478E44 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | |||||
| 849E1BF506C15C330002E024 /* BinaryData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../src/BinaryData.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 849E1BF606C15C330002E024 /* BinaryData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../src/BinaryData.h; sourceTree = SOURCE_ROOT; }; | |||||
| 84A06BA709CAD661006A43BD /* InterprocessCommsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = InterprocessCommsDemo.cpp; sourceTree = "<group>"; }; | |||||
| 84C49E4A06C0EE8C0066071B /* ApplicationStartup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ApplicationStartup.cpp; path = ../../src/ApplicationStartup.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84C49E4C06C0EE8C0066071B /* AudioDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AudioDemo.cpp; sourceTree = "<group>"; }; | |||||
| 84C49E4D06C0EE8C0066071B /* FontsAndTextDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FontsAndTextDemo.cpp; sourceTree = "<group>"; }; | |||||
| 84C49E4E06C0EE8C0066071B /* PathsAndTransformsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PathsAndTransformsDemo.cpp; sourceTree = "<group>"; }; | |||||
| 84C49E4F06C0EE8C0066071B /* ThreadingDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadingDemo.cpp; sourceTree = "<group>"; }; | |||||
| 84C49E5006C0EE8C0066071B /* TreeViewDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = TreeViewDemo.cpp; sourceTree = "<group>"; }; | |||||
| 84C49E5106C0EE8C0066071B /* WidgetsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = WidgetsDemo.cpp; sourceTree = "<group>"; }; | |||||
| 84C49E5206C0EE8C0066071B /* jucedemo_headers.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucedemo_headers.h; path = ../../src/jucedemo_headers.h; sourceTree = SOURCE_ROOT; }; | |||||
| 84C49E5306C0EE8C0066071B /* MainDemoWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MainDemoWindow.cpp; path = ../../src/MainDemoWindow.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 84C49E5406C0EE8C0066071B /* MainDemoWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MainDemoWindow.h; path = ../../src/MainDemoWindow.h; sourceTree = SOURCE_ROOT; }; | |||||
| 84F8DB0A099CA8DD00E911ED /* QuickTimeDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = QuickTimeDemo.cpp; sourceTree = "<group>"; }; | |||||
| 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; | |||||
| 8D0C4E970486CD37000505A6 /* jucedemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = jucedemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |||||
| 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | |||||
| 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; | |||||
| 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; | |||||
| 841FE4360E8ABDD4003C3263 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | |||||
| 841FE4370E8ABDD4003C3263 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; | |||||
| 841FE4380E8ABDD4003C3263 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | |||||
| 841FE4390E8ABDD4003C3263 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | |||||
| 841FE43A0E8ABDD4003C3263 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | |||||
| 841FE43B0E8ABDD4003C3263 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | |||||
| 845057790EB52CE500029DFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 847F4D8F0E8AC35C00F64426 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; }; | |||||
| 847F4E9A0E8BA9C300F64426 /* AudioDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioDemo.cpp; path = ../../src/demos/AudioDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4E9B0E8BA9C300F64426 /* DragAndDropDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DragAndDropDemo.cpp; path = ../../src/demos/DragAndDropDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4E9C0E8BA9C300F64426 /* FontsAndTextDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FontsAndTextDemo.cpp; path = ../../src/demos/FontsAndTextDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4E9D0E8BA9C300F64426 /* InterprocessCommsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InterprocessCommsDemo.cpp; path = ../../src/demos/InterprocessCommsDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4E9E0E8BA9C300F64426 /* OpenGLDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenGLDemo.cpp; path = ../../src/demos/OpenGLDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4E9F0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PathsAndTransformsDemo.cpp; path = ../../src/demos/PathsAndTransformsDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EA00E8BA9C300F64426 /* QuickTimeDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = QuickTimeDemo.cpp; path = ../../src/demos/QuickTimeDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EA10E8BA9C300F64426 /* TableDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableDemo.cpp; path = ../../src/demos/TableDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EA20E8BA9C300F64426 /* ThreadingDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadingDemo.cpp; path = ../../src/demos/ThreadingDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EA30E8BA9C300F64426 /* TreeViewDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TreeViewDemo.cpp; path = ../../src/demos/TreeViewDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EA40E8BA9C300F64426 /* WidgetsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WidgetsDemo.cpp; path = ../../src/demos/WidgetsDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB00E8BA9DD00F64426 /* ApplicationStartup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ApplicationStartup.cpp; path = ../../src/ApplicationStartup.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB10E8BA9DD00F64426 /* BinaryData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../src/BinaryData.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB20E8BA9DD00F64426 /* BinaryData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../src/BinaryData.h; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB30E8BA9DD00F64426 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB40E8BA9DD00F64426 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB50E8BA9DD00F64426 /* jucedemo_headers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jucedemo_headers.h; path = ../../src/jucedemo_headers.h; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB60E8BA9DD00F64426 /* MainDemoWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MainDemoWindow.cpp; path = ../../src/MainDemoWindow.cpp; sourceTree = SOURCE_ROOT; }; | |||||
| 847F4EB70E8BA9DD00F64426 /* MainDemoWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainDemoWindow.h; path = ../../src/MainDemoWindow.h; sourceTree = SOURCE_ROOT; }; | |||||
| 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||||
| 8D1107320486CEB800E47090 /* jucedemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = jucedemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||
| /* Begin PBXFrameworksBuildPhase section */ | /* Begin PBXFrameworksBuildPhase section */ | ||||
| 8D0C4E910486CD37000505A6 /* Frameworks */ = { | |||||
| 8D11072E0486CEB800E47090 /* Frameworks */ = { | |||||
| isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 8480BC1C0DE0BB8200478E44 /* AGL.framework in Frameworks */, | |||||
| 8480BC1D0DE0BB8200478E44 /* AudioUnit.framework in Frameworks */, | |||||
| 8480BC1E0DE0BB8200478E44 /* IOKit.framework in Frameworks */, | |||||
| 8480BC1F0DE0BB8200478E44 /* Cocoa.framework in Frameworks */, | |||||
| 8480BC200DE0BB8200478E44 /* CoreAudio.framework in Frameworks */, | |||||
| 8480BC210DE0BB8200478E44 /* CoreFoundation.framework in Frameworks */, | |||||
| 8480BC220DE0BB8200478E44 /* CoreMIDI.framework in Frameworks */, | |||||
| 8480BC230DE0BB8200478E44 /* DiscRecording.framework in Frameworks */, | |||||
| 8480BC240DE0BB8200478E44 /* OpenGL.framework in Frameworks */, | |||||
| 8480BC250DE0BB8200478E44 /* QuickTime.framework in Frameworks */, | |||||
| 8480BC260DE0BB8200478E44 /* WebKit.framework in Frameworks */, | |||||
| 8480BC270DE0BB8200478E44 /* Carbon.framework in Frameworks */, | |||||
| 8480BC280DE0BB8200478E44 /* CoreServices.framework in Frameworks */, | |||||
| 8480BC290DE0BB8200478E44 /* ApplicationServices.framework in Frameworks */, | |||||
| 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, | |||||
| 841FE43C0E8ABDD4003C3263 /* CoreAudio.framework in Frameworks */, | |||||
| 841FE43D0E8ABDD4003C3263 /* CoreMIDI.framework in Frameworks */, | |||||
| 841FE43E0E8ABDD4003C3263 /* DiscRecording.framework in Frameworks */, | |||||
| 841FE43F0E8ABDD4003C3263 /* IOKit.framework in Frameworks */, | |||||
| 841FE4400E8ABDD4003C3263 /* OpenGL.framework in Frameworks */, | |||||
| 841FE4410E8ABDD4003C3263 /* WebKit.framework in Frameworks */, | |||||
| 847F4D900E8AC35C00F64426 /* QTKit.framework in Frameworks */, | |||||
| 8450577A0EB52CE500029DFF /* QuickTime.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| /* End PBXFrameworksBuildPhase section */ | /* End PBXFrameworksBuildPhase section */ | ||||
| /* Begin PBXGroup section */ | /* Begin PBXGroup section */ | ||||
| 195DF8CFFE9D517E11CA2CBB /* Products */ = { | |||||
| 080E96DDFE201D6D7F000001 /* Source */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 8D0C4E970486CD37000505A6 /* jucedemo.app */, | |||||
| 847F4EB00E8BA9DD00F64426 /* ApplicationStartup.cpp */, | |||||
| 847F4EB10E8BA9DD00F64426 /* BinaryData.cpp */, | |||||
| 847F4EB20E8BA9DD00F64426 /* BinaryData.h */, | |||||
| 847F4EB30E8BA9DD00F64426 /* juce_AppConfig.h */, | |||||
| 847F4EB40E8BA9DD00F64426 /* juce_LibrarySource.mm */, | |||||
| 847F4EB50E8BA9DD00F64426 /* jucedemo_headers.h */, | |||||
| 847F4EB60E8BA9DD00F64426 /* MainDemoWindow.cpp */, | |||||
| 847F4EB70E8BA9DD00F64426 /* MainDemoWindow.h */, | |||||
| 847F4D8A0E8AC27A00F64426 /* demos */, | |||||
| ); | ); | ||||
| name = Products; | |||||
| name = Source; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 20286C29FDCF999611CA2CEA /* jucedemo */ = { | |||||
| 19C28FACFE9D520D11CA2CBB /* Products */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 20286C2AFDCF999611CA2CEA /* Sources */, | |||||
| 841084950DB3759400AB8583 /* Build settings */, | |||||
| 20286C2CFDCF999611CA2CEA /* Resources */, | |||||
| 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */, | |||||
| 195DF8CFFE9D517E11CA2CBB /* Products */, | |||||
| 8D1107320486CEB800E47090 /* jucedemo.app */, | |||||
| ); | ); | ||||
| name = jucedemo; | |||||
| name = Products; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 20286C2AFDCF999611CA2CEA /* Sources */ = { | |||||
| 29B97314FDCFA39411CA2CEA /* jucedemo */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 84C49E4B06C0EE8C0066071B /* demos */, | |||||
| 84C49E4A06C0EE8C0066071B /* ApplicationStartup.cpp */, | |||||
| 84C49E5306C0EE8C0066071B /* MainDemoWindow.cpp */, | |||||
| 84C49E5406C0EE8C0066071B /* MainDemoWindow.h */, | |||||
| 849E1BF506C15C330002E024 /* BinaryData.cpp */, | |||||
| 849E1BF606C15C330002E024 /* BinaryData.h */, | |||||
| 84C49E5206C0EE8C0066071B /* jucedemo_headers.h */, | |||||
| 846C10960DE32E6D00E8CCE8 /* juce_AppConfig.h */, | |||||
| 846C10B10DE32EB500E8CCE8 /* juce_LibrarySource.mm */, | |||||
| 080E96DDFE201D6D7F000001 /* Source */, | |||||
| 29B97317FDCFA39411CA2CEA /* Resources */, | |||||
| 29B97323FDCFA39411CA2CEA /* Frameworks */, | |||||
| 19C28FACFE9D520D11CA2CBB /* Products */, | |||||
| ); | ); | ||||
| name = Sources; | |||||
| name = jucedemo; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 20286C2CFDCF999611CA2CEA /* Resources */ = { | |||||
| 29B97317FDCFA39411CA2CEA /* Resources */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 8D0C4E960486CD37000505A6 /* Info.plist */, | |||||
| 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */, | |||||
| 8D1107310486CEB800E47090 /* Info.plist */, | |||||
| ); | ); | ||||
| name = Resources; | name = Resources; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| 8480BC0E0DE0BB8200478E44 /* AGL.framework */, | |||||
| 8480BC1B0DE0BB8200478E44 /* ApplicationServices.framework */, | |||||
| 8480BC0F0DE0BB8200478E44 /* AudioUnit.framework */, | |||||
| 8480BC190DE0BB8200478E44 /* Carbon.framework */, | |||||
| 8480BC110DE0BB8200478E44 /* Cocoa.framework */, | |||||
| 8480BC120DE0BB8200478E44 /* CoreAudio.framework */, | |||||
| 8480BC130DE0BB8200478E44 /* CoreFoundation.framework */, | |||||
| 8480BC140DE0BB8200478E44 /* CoreMIDI.framework */, | |||||
| 8480BC1A0DE0BB8200478E44 /* CoreServices.framework */, | |||||
| 8480BC150DE0BB8200478E44 /* DiscRecording.framework */, | |||||
| 8480BC100DE0BB8200478E44 /* IOKit.framework */, | |||||
| 8480BC160DE0BB8200478E44 /* OpenGL.framework */, | |||||
| 8480BC170DE0BB8200478E44 /* QuickTime.framework */, | |||||
| 8480BC180DE0BB8200478E44 /* WebKit.framework */, | |||||
| ); | |||||
| name = "External Frameworks and Libraries"; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| 841084950DB3759400AB8583 /* Build settings */ = { | |||||
| 29B97323FDCFA39411CA2CEA /* Frameworks */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 846929260A49DDE100314975 /* juce.xcconfig */, | |||||
| 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, | |||||
| 841FE4360E8ABDD4003C3263 /* CoreAudio.framework */, | |||||
| 841FE4370E8ABDD4003C3263 /* CoreMIDI.framework */, | |||||
| 841FE4380E8ABDD4003C3263 /* DiscRecording.framework */, | |||||
| 841FE4390E8ABDD4003C3263 /* IOKit.framework */, | |||||
| 841FE43A0E8ABDD4003C3263 /* OpenGL.framework */, | |||||
| 847F4D8F0E8AC35C00F64426 /* QTKit.framework */, | |||||
| 845057790EB52CE500029DFF /* QuickTime.framework */, | |||||
| 841FE43B0E8ABDD4003C3263 /* WebKit.framework */, | |||||
| 29B97324FDCFA39411CA2CEA /* AppKit.framework */, | |||||
| 29B97325FDCFA39411CA2CEA /* Foundation.framework */, | |||||
| ); | ); | ||||
| name = "Build settings"; | |||||
| name = Frameworks; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 84C49E4B06C0EE8C0066071B /* demos */ = { | |||||
| 847F4D8A0E8AC27A00F64426 /* demos */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 842A97B6081060FB0059DBCC /* DragAndDropDemo.cpp */, | |||||
| 842A97B7081060FB0059DBCC /* OpenGLDemo.cpp */, | |||||
| 84C49E4C06C0EE8C0066071B /* AudioDemo.cpp */, | |||||
| 84C49E4D06C0EE8C0066071B /* FontsAndTextDemo.cpp */, | |||||
| 84C49E4E06C0EE8C0066071B /* PathsAndTransformsDemo.cpp */, | |||||
| 84F8DB0A099CA8DD00E911ED /* QuickTimeDemo.cpp */, | |||||
| 8417EE790A6E7EB90058E04E /* TableDemo.cpp */, | |||||
| 84C49E4F06C0EE8C0066071B /* ThreadingDemo.cpp */, | |||||
| 84C49E5006C0EE8C0066071B /* TreeViewDemo.cpp */, | |||||
| 84C49E5106C0EE8C0066071B /* WidgetsDemo.cpp */, | |||||
| 84A06BA709CAD661006A43BD /* InterprocessCommsDemo.cpp */, | |||||
| 847F4E9A0E8BA9C300F64426 /* AudioDemo.cpp */, | |||||
| 847F4E9B0E8BA9C300F64426 /* DragAndDropDemo.cpp */, | |||||
| 847F4E9C0E8BA9C300F64426 /* FontsAndTextDemo.cpp */, | |||||
| 847F4E9D0E8BA9C300F64426 /* InterprocessCommsDemo.cpp */, | |||||
| 847F4E9E0E8BA9C300F64426 /* OpenGLDemo.cpp */, | |||||
| 847F4E9F0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp */, | |||||
| 847F4EA00E8BA9C300F64426 /* QuickTimeDemo.cpp */, | |||||
| 847F4EA10E8BA9C300F64426 /* TableDemo.cpp */, | |||||
| 847F4EA20E8BA9C300F64426 /* ThreadingDemo.cpp */, | |||||
| 847F4EA30E8BA9C300F64426 /* TreeViewDemo.cpp */, | |||||
| 847F4EA40E8BA9C300F64426 /* WidgetsDemo.cpp */, | |||||
| ); | ); | ||||
| name = demos; | name = demos; | ||||
| path = ../../src/demos; | |||||
| sourceTree = SOURCE_ROOT; | |||||
| sourceTree = "<group>"; | |||||
| }; | }; | ||||
| /* End PBXGroup section */ | /* End PBXGroup section */ | ||||
| /* Begin PBXHeadersBuildPhase section */ | |||||
| 8D0C4E8A0486CD37000505A6 /* Headers */ = { | |||||
| isa = PBXHeadersBuildPhase; | |||||
| buildActionMask = 2147483647; | |||||
| files = ( | |||||
| 84C49E5C06C0EE8C0066071B /* jucedemo_headers.h in Headers */, | |||||
| 84C49E5E06C0EE8C0066071B /* MainDemoWindow.h in Headers */, | |||||
| 849E1BF806C15C330002E024 /* BinaryData.h in Headers */, | |||||
| 846C10970DE32E6E00E8CCE8 /* juce_AppConfig.h in Headers */, | |||||
| ); | |||||
| runOnlyForDeploymentPostprocessing = 0; | |||||
| }; | |||||
| /* End PBXHeadersBuildPhase section */ | |||||
| /* Begin PBXNativeTarget section */ | /* Begin PBXNativeTarget section */ | ||||
| 8D0C4E890486CD37000505A6 /* jucedemo */ = { | |||||
| 8D1107260486CEB800E47090 /* jucedemo */ = { | |||||
| isa = PBXNativeTarget; | isa = PBXNativeTarget; | ||||
| buildConfigurationList = 84CFBCCB085F14F000C52F85 /* Build configuration list for PBXNativeTarget "jucedemo" */; | |||||
| buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "jucedemo" */; | |||||
| buildPhases = ( | buildPhases = ( | ||||
| 8D0C4E8A0486CD37000505A6 /* Headers */, | |||||
| 8D0C4E8C0486CD37000505A6 /* Resources */, | |||||
| 8D0C4E8F0486CD37000505A6 /* Sources */, | |||||
| 8D0C4E910486CD37000505A6 /* Frameworks */, | |||||
| 8D0C4E940486CD37000505A6 /* Rez */, | |||||
| 8D1107290486CEB800E47090 /* Resources */, | |||||
| 8D11072C0486CEB800E47090 /* Sources */, | |||||
| 8D11072E0486CEB800E47090 /* Frameworks */, | |||||
| ); | ); | ||||
| buildRules = ( | buildRules = ( | ||||
| ); | ); | ||||
| @@ -236,157 +185,137 @@ | |||||
| name = jucedemo; | name = jucedemo; | ||||
| productInstallPath = "$(HOME)/Applications"; | productInstallPath = "$(HOME)/Applications"; | ||||
| productName = jucedemo; | productName = jucedemo; | ||||
| productReference = 8D0C4E970486CD37000505A6 /* jucedemo.app */; | |||||
| productReference = 8D1107320486CEB800E47090 /* jucedemo.app */; | |||||
| productType = "com.apple.product-type.application"; | productType = "com.apple.product-type.application"; | ||||
| }; | }; | ||||
| /* End PBXNativeTarget section */ | /* End PBXNativeTarget section */ | ||||
| /* Begin PBXProject section */ | /* Begin PBXProject section */ | ||||
| 20286C28FDCF999611CA2CEA /* Project object */ = { | |||||
| 29B97313FDCFA39411CA2CEA /* Project object */ = { | |||||
| isa = PBXProject; | isa = PBXProject; | ||||
| buildConfigurationList = 84CFBCCF085F14F000C52F85 /* Build configuration list for PBXProject "jucedemo" */; | |||||
| compatibilityVersion = "Xcode 2.4"; | |||||
| buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "jucedemo" */; | |||||
| compatibilityVersion = "Xcode 3.1"; | |||||
| hasScannedForEncodings = 1; | hasScannedForEncodings = 1; | ||||
| mainGroup = 20286C29FDCF999611CA2CEA /* jucedemo */; | |||||
| mainGroup = 29B97314FDCFA39411CA2CEA /* jucedemo */; | |||||
| projectDirPath = ""; | projectDirPath = ""; | ||||
| projectRoot = ""; | projectRoot = ""; | ||||
| targets = ( | targets = ( | ||||
| 8D0C4E890486CD37000505A6 /* jucedemo */, | |||||
| 8D1107260486CEB800E47090 /* jucedemo */, | |||||
| ); | ); | ||||
| }; | }; | ||||
| /* End PBXProject section */ | /* End PBXProject section */ | ||||
| /* Begin PBXResourcesBuildPhase section */ | /* Begin PBXResourcesBuildPhase section */ | ||||
| 8D0C4E8C0486CD37000505A6 /* Resources */ = { | |||||
| 8D1107290486CEB800E47090 /* Resources */ = { | |||||
| isa = PBXResourcesBuildPhase; | isa = PBXResourcesBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */, | |||||
| 846929270A49DDE100314975 /* juce.xcconfig in Resources */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| /* End PBXResourcesBuildPhase section */ | /* End PBXResourcesBuildPhase section */ | ||||
| /* Begin PBXRezBuildPhase section */ | |||||
| 8D0C4E940486CD37000505A6 /* Rez */ = { | |||||
| isa = PBXRezBuildPhase; | |||||
| buildActionMask = 2147483647; | |||||
| files = ( | |||||
| ); | |||||
| runOnlyForDeploymentPostprocessing = 0; | |||||
| }; | |||||
| /* End PBXRezBuildPhase section */ | |||||
| /* Begin PBXSourcesBuildPhase section */ | /* Begin PBXSourcesBuildPhase section */ | ||||
| 8D0C4E8F0486CD37000505A6 /* Sources */ = { | |||||
| 8D11072C0486CEB800E47090 /* Sources */ = { | |||||
| isa = PBXSourcesBuildPhase; | isa = PBXSourcesBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 84C49E5506C0EE8C0066071B /* ApplicationStartup.cpp in Sources */, | |||||
| 84C49E5606C0EE8C0066071B /* AudioDemo.cpp in Sources */, | |||||
| 84C49E5706C0EE8C0066071B /* FontsAndTextDemo.cpp in Sources */, | |||||
| 84C49E5806C0EE8C0066071B /* PathsAndTransformsDemo.cpp in Sources */, | |||||
| 84C49E5906C0EE8C0066071B /* ThreadingDemo.cpp in Sources */, | |||||
| 84C49E5A06C0EE8C0066071B /* TreeViewDemo.cpp in Sources */, | |||||
| 84C49E5B06C0EE8C0066071B /* WidgetsDemo.cpp in Sources */, | |||||
| 84C49E5D06C0EE8C0066071B /* MainDemoWindow.cpp in Sources */, | |||||
| 849E1BF706C15C330002E024 /* BinaryData.cpp in Sources */, | |||||
| 842A97B8081060FB0059DBCC /* DragAndDropDemo.cpp in Sources */, | |||||
| 842A97B9081060FB0059DBCC /* OpenGLDemo.cpp in Sources */, | |||||
| 84F8DB0B099CA8DD00E911ED /* QuickTimeDemo.cpp in Sources */, | |||||
| 84A06BA809CAD661006A43BD /* InterprocessCommsDemo.cpp in Sources */, | |||||
| 8417EE7A0A6E7EB90058E04E /* TableDemo.cpp in Sources */, | |||||
| 846C10B20DE32EB500E8CCE8 /* juce_LibrarySource.mm in Sources */, | |||||
| 847F4EA50E8BA9C300F64426 /* AudioDemo.cpp in Sources */, | |||||
| 847F4EA60E8BA9C300F64426 /* DragAndDropDemo.cpp in Sources */, | |||||
| 847F4EA70E8BA9C300F64426 /* FontsAndTextDemo.cpp in Sources */, | |||||
| 847F4EA80E8BA9C300F64426 /* InterprocessCommsDemo.cpp in Sources */, | |||||
| 847F4EA90E8BA9C300F64426 /* OpenGLDemo.cpp in Sources */, | |||||
| 847F4EAA0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp in Sources */, | |||||
| 847F4EAB0E8BA9C300F64426 /* QuickTimeDemo.cpp in Sources */, | |||||
| 847F4EAC0E8BA9C300F64426 /* TableDemo.cpp in Sources */, | |||||
| 847F4EAD0E8BA9C300F64426 /* ThreadingDemo.cpp in Sources */, | |||||
| 847F4EAE0E8BA9C300F64426 /* TreeViewDemo.cpp in Sources */, | |||||
| 847F4EAF0E8BA9C300F64426 /* WidgetsDemo.cpp in Sources */, | |||||
| 847F4EB80E8BA9DD00F64426 /* ApplicationStartup.cpp in Sources */, | |||||
| 847F4EB90E8BA9DD00F64426 /* BinaryData.cpp in Sources */, | |||||
| 847F4EBA0E8BA9DD00F64426 /* juce_LibrarySource.mm in Sources */, | |||||
| 847F4EBB0E8BA9DD00F64426 /* MainDemoWindow.cpp in Sources */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| /* End PBXSourcesBuildPhase section */ | /* End PBXSourcesBuildPhase section */ | ||||
| /* Begin PBXVariantGroup section */ | |||||
| 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = { | |||||
| isa = PBXVariantGroup; | |||||
| children = ( | |||||
| 0867D6ABFE840B52C02AAC07 /* English */, | |||||
| ); | |||||
| name = InfoPlist.strings; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| /* End PBXVariantGroup section */ | |||||
| /* Begin XCBuildConfiguration section */ | /* Begin XCBuildConfiguration section */ | ||||
| 84CFBCCC085F14F000C52F85 /* Debug */ = { | |||||
| C01FCF4B08A954540054247B /* Debug */ = { | |||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| buildSettings = { | buildSettings = { | ||||
| ALWAYS_SEARCH_USER_PATHS = NO; | |||||
| COPY_PHASE_STRIP = NO; | COPY_PHASE_STRIP = NO; | ||||
| GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | |||||
| GCC_PREPROCESSOR_DEFINITIONS = ( | |||||
| "_DEBUG=1", | |||||
| "DEBUG=1", | |||||
| ); | |||||
| HEADER_SEARCH_PATHS = "$(SYSTEM_DEVELOPER_DIR)/Headers/FlatCarbon"; | |||||
| GCC_DYNAMIC_NO_PIC = NO; | |||||
| GCC_ENABLE_FIX_AND_CONTINUE = YES; | |||||
| GCC_MODEL_TUNING = G5; | |||||
| GCC_OPTIMIZATION_LEVEL = 0; | |||||
| INFOPLIST_FILE = Info.plist; | INFOPLIST_FILE = Info.plist; | ||||
| LIBRARY_SEARCH_PATHS = ../../../../bin; | |||||
| INSTALL_PATH = "$(HOME)/Applications"; | |||||
| PRODUCT_NAME = jucedemo; | PRODUCT_NAME = jucedemo; | ||||
| WRAPPER_EXTENSION = app; | |||||
| }; | }; | ||||
| name = Debug; | name = Debug; | ||||
| }; | }; | ||||
| 84CFBCCD085F14F000C52F85 /* Release */ = { | |||||
| C01FCF4C08A954540054247B /* Release */ = { | |||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| buildSettings = { | buildSettings = { | ||||
| COPY_PHASE_STRIP = YES; | |||||
| DEAD_CODE_STRIPPING = YES; | |||||
| GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | |||||
| GCC_PREPROCESSOR_DEFINITIONS = ( | |||||
| "_NDEBUG=1", | |||||
| "NDEBUG=1", | |||||
| ); | |||||
| HEADER_SEARCH_PATHS = "$(SYSTEM_DEVELOPER_DIR)/Headers/FlatCarbon"; | |||||
| ALWAYS_SEARCH_USER_PATHS = NO; | |||||
| DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | |||||
| GCC_MODEL_TUNING = G5; | |||||
| INFOPLIST_FILE = Info.plist; | INFOPLIST_FILE = Info.plist; | ||||
| ONLY_LINK_ESSENTIAL_SYMBOLS = YES; | |||||
| INSTALL_PATH = "$(HOME)/Applications"; | |||||
| PRODUCT_NAME = jucedemo; | PRODUCT_NAME = jucedemo; | ||||
| WRAPPER_EXTENSION = app; | |||||
| ZERO_LINK = NO; | |||||
| }; | }; | ||||
| name = Release; | name = Release; | ||||
| }; | }; | ||||
| 84CFBCD0085F14F000C52F85 /* Debug */ = { | |||||
| C01FCF4F08A954540054247B /* Debug */ = { | |||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| baseConfigurationReference = 846929260A49DDE100314975 /* juce.xcconfig */; | |||||
| buildSettings = { | buildSettings = { | ||||
| ARCHS = "$(ARCHS_STANDARD_32_BIT)"; | |||||
| GCC_C_LANGUAGE_STANDARD = c99; | |||||
| GCC_OPTIMIZATION_LEVEL = 0; | |||||
| GCC_WARN_ABOUT_RETURN_TYPE = YES; | |||||
| GCC_WARN_UNUSED_VARIABLE = YES; | |||||
| ONLY_ACTIVE_ARCH = YES; | |||||
| PREBINDING = NO; | |||||
| SDKROOT = macosx10.4; | |||||
| }; | }; | ||||
| name = Debug; | name = Debug; | ||||
| }; | }; | ||||
| 84CFBCD1085F14F000C52F85 /* Release */ = { | |||||
| C01FCF5008A954540054247B /* Release */ = { | |||||
| isa = XCBuildConfiguration; | isa = XCBuildConfiguration; | ||||
| baseConfigurationReference = 846929260A49DDE100314975 /* juce.xcconfig */; | |||||
| buildSettings = { | buildSettings = { | ||||
| ARCHS = "$(ARCHS_STANDARD_32_BIT)"; | |||||
| GCC_C_LANGUAGE_STANDARD = c99; | |||||
| GCC_WARN_ABOUT_RETURN_TYPE = YES; | |||||
| GCC_WARN_UNUSED_VARIABLE = YES; | |||||
| PREBINDING = NO; | |||||
| SDKROOT = macosx10.4; | |||||
| }; | }; | ||||
| name = Release; | name = Release; | ||||
| }; | }; | ||||
| /* End XCBuildConfiguration section */ | /* End XCBuildConfiguration section */ | ||||
| /* Begin XCConfigurationList section */ | /* Begin XCConfigurationList section */ | ||||
| 84CFBCCB085F14F000C52F85 /* Build configuration list for PBXNativeTarget "jucedemo" */ = { | |||||
| C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "jucedemo" */ = { | |||||
| isa = XCConfigurationList; | isa = XCConfigurationList; | ||||
| buildConfigurations = ( | buildConfigurations = ( | ||||
| 84CFBCCC085F14F000C52F85 /* Debug */, | |||||
| 84CFBCCD085F14F000C52F85 /* Release */, | |||||
| C01FCF4B08A954540054247B /* Debug */, | |||||
| C01FCF4C08A954540054247B /* Release */, | |||||
| ); | ); | ||||
| defaultConfigurationIsVisible = 0; | defaultConfigurationIsVisible = 0; | ||||
| defaultConfigurationName = Debug; | |||||
| defaultConfigurationName = Release; | |||||
| }; | }; | ||||
| 84CFBCCF085F14F000C52F85 /* Build configuration list for PBXProject "jucedemo" */ = { | |||||
| C01FCF4E08A954540054247B /* Build configuration list for PBXProject "jucedemo" */ = { | |||||
| isa = XCConfigurationList; | isa = XCConfigurationList; | ||||
| buildConfigurations = ( | buildConfigurations = ( | ||||
| 84CFBCD0085F14F000C52F85 /* Debug */, | |||||
| 84CFBCD1085F14F000C52F85 /* Release */, | |||||
| C01FCF4F08A954540054247B /* Debug */, | |||||
| C01FCF5008A954540054247B /* Release */, | |||||
| ); | ); | ||||
| defaultConfigurationIsVisible = 0; | defaultConfigurationIsVisible = 0; | ||||
| defaultConfigurationName = Debug; | |||||
| defaultConfigurationName = Release; | |||||
| }; | }; | ||||
| /* End XCConfigurationList section */ | /* End XCConfigurationList section */ | ||||
| }; | }; | ||||
| rootObject = 20286C28FDCF999611CA2CEA /* Project object */; | |||||
| rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; | |||||
| } | } | ||||
| @@ -2,6 +2,9 @@ | |||||
| Microsoft Visual Studio Solution File, Format Version 9.00 | Microsoft Visual Studio Solution File, Format Version 9.00 | ||||
| # Visual Studio 2005 | # Visual Studio 2005 | ||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jucedemo", "jucedemo.vcproj", "{050D65C2-17C4-4EE1-ABCE-BEA9DA83D77A}" | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jucedemo", "jucedemo.vcproj", "{050D65C2-17C4-4EE1-ABCE-BEA9DA83D77A}" | ||||
| ProjectSection(ProjectDependencies) = postProject | |||||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26} = {AE232C11-D91C-4CA1-B24E-8B11A52EFF26} | |||||
| EndProjectSection | |||||
| EndProject | EndProject | ||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JUCE", "..\..\..\..\build\win32\vc8\JUCE.vcproj", "{AE232C11-D91C-4CA1-B24E-8B11A52EFF26}" | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JUCE", "..\..\..\..\build\win32\vc8\JUCE.vcproj", "{AE232C11-D91C-4CA1-B24E-8B11A52EFF26}" | ||||
| EndProject | EndProject | ||||
| @@ -5,57 +5,57 @@ | |||||
| namespace BinaryData | namespace BinaryData | ||||
| { | { | ||||
| extern const char* audiodemo_cpp; | |||||
| const int audiodemo_cppSize = 23584; | |||||
| extern const char* pathsandtransformsdemo_cpp; | |||||
| const int pathsandtransformsdemo_cppSize = 14231; | |||||
| extern const char* cello_wav; | |||||
| const int cello_wavSize = 46348; | |||||
| extern const char* opengldemo_cpp; | |||||
| const int opengldemo_cppSize = 9575; | |||||
| extern const char* demo_table_data_xml; | extern const char* demo_table_data_xml; | ||||
| const int demo_table_data_xmlSize = 5239; | const int demo_table_data_xmlSize = 5239; | ||||
| extern const char* draganddropdemo_cpp; | |||||
| const int draganddropdemo_cppSize = 7937; | |||||
| extern const char* fontsandtextdemo_cpp; | |||||
| const int fontsandtextdemo_cppSize = 9064; | |||||
| extern const char* tabledemo_cpp; | |||||
| const int tabledemo_cppSize = 12381; | |||||
| extern const char* icons_zip; | |||||
| const int icons_zipSize = 83876; | |||||
| extern const char* cello_wav; | |||||
| const int cello_wavSize = 46348; | |||||
| extern const char* interprocesscommsdemo_cpp; | |||||
| const int interprocesscommsdemo_cppSize = 12631; | |||||
| extern const char* draganddropdemo_cpp; | |||||
| const int draganddropdemo_cppSize = 7937; | |||||
| extern const char* juce_png; | |||||
| const int juce_pngSize = 15290; | |||||
| extern const char* readme__what_this_directory_is_for_txt; | |||||
| const int readme__what_this_directory_is_for_txtSize = 259; | |||||
| extern const char* opengldemo_cpp; | |||||
| const int opengldemo_cppSize = 9667; | |||||
| extern const char* treeviewdemo_cpp; | |||||
| const int treeviewdemo_cppSize = 7715; | |||||
| extern const char* pathsandtransformsdemo_cpp; | |||||
| const int pathsandtransformsdemo_cppSize = 14231; | |||||
| extern const char* treedemo_xml; | |||||
| const int treedemo_xmlSize = 1126; | |||||
| extern const char* quicktimedemo_cpp; | extern const char* quicktimedemo_cpp; | ||||
| const int quicktimedemo_cppSize = 4576; | const int quicktimedemo_cppSize = 4576; | ||||
| extern const char* readme__what_this_directory_is_for_txt; | |||||
| const int readme__what_this_directory_is_for_txtSize = 259; | |||||
| extern const char* tabledemo_cpp; | |||||
| const int tabledemo_cppSize = 12381; | |||||
| extern const char* audiodemo_cpp; | |||||
| const int audiodemo_cppSize = 23584; | |||||
| extern const char* threadingdemo_cpp; | extern const char* threadingdemo_cpp; | ||||
| const int threadingdemo_cppSize = 10047; | |||||
| extern const char* treedemo_xml; | |||||
| const int treedemo_xmlSize = 1126; | |||||
| const int threadingdemo_cppSize = 10049; | |||||
| extern const char* treeviewdemo_cpp; | |||||
| const int treeviewdemo_cppSize = 7715; | |||||
| extern const char* juce_png; | |||||
| const int juce_pngSize = 15290; | |||||
| extern const char* widgetsdemo_cpp; | extern const char* widgetsdemo_cpp; | ||||
| const int widgetsdemo_cppSize = 53388; | const int widgetsdemo_cppSize = 53388; | ||||
| extern const char* interprocesscommsdemo_cpp; | |||||
| const int interprocesscommsdemo_cppSize = 12631; | |||||
| extern const char* icons_zip; | |||||
| const int icons_zipSize = 83876; | |||||
| extern const char* fontsandtextdemo_cpp; | |||||
| const int fontsandtextdemo_cppSize = 9064; | |||||
| }; | }; | ||||
| #endif | #endif | ||||
| @@ -31,9 +31,6 @@ | |||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||
| #include <windows.h> | #include <windows.h> | ||||
| #elif ! defined (LINUX) | |||||
| #include <Carbon.h> | |||||
| #include <Movies.h> | |||||
| #endif | #endif | ||||
| #include "../jucedemo_headers.h" | #include "../jucedemo_headers.h" | ||||
| @@ -48,7 +45,6 @@ | |||||
| #include <GL/glut.h> | #include <GL/glut.h> | ||||
| #undef KeyPress | #undef KeyPress | ||||
| #else | #else | ||||
| #include <AGL/agl.h> | |||||
| #include <GLUT/glut.h> | #include <GLUT/glut.h> | ||||
| #endif | #endif | ||||
| @@ -40,7 +40,7 @@ class BouncingBallComp : public Component, | |||||
| float innerX, innerY; | float innerX, innerY; | ||||
| Colour colour; | Colour colour; | ||||
| CriticalSection lock; | CriticalSection lock; | ||||
| int threadId; | |||||
| int64 threadId; | |||||
| public: | public: | ||||
| BouncingBallComp() | BouncingBallComp() | ||||
| @@ -40,7 +40,7 @@ class BouncingBallComp : public Component, | |||||
| float innerX, innerY; | float innerX, innerY; | ||||
| Colour colour; | Colour colour; | ||||
| CriticalSection lock; | CriticalSection lock; | ||||
| int threadId; | |||||
| int64 threadId; | |||||
| public: | public: | ||||
| BouncingBallComp() | BouncingBallComp() | ||||
| @@ -50,8 +50,8 @@ | |||||
| //#define JUCE_ENABLE_REPAINT_DEBUGGING 1 | //#define JUCE_ENABLE_REPAINT_DEBUGGING 1 | ||||
| //#define JUCE_USE_XINERAMA 1 | //#define JUCE_USE_XINERAMA 1 | ||||
| //#define JUCE_USE_XSHM 1 | //#define JUCE_USE_XSHM 1 | ||||
| //#define JUCE_PLUGINHOST_VST 1 | |||||
| //#define JUCE_PLUGINHOST_AU 1 | |||||
| #define JUCE_PLUGINHOST_VST 0 | |||||
| #define JUCE_PLUGINHOST_AU 0 | |||||
| //#define JUCE_BUILD_GUI_CLASSES 1 | //#define JUCE_BUILD_GUI_CLASSES 1 | ||||
| //#define JUCE_CHECK_MEMORY_LEAKS 1 | //#define JUCE_CHECK_MEMORY_LEAKS 1 | ||||
| //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 | //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 | ||||
| @@ -9,10 +9,7 @@ | |||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 846929140A49DB9C00314975 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 846929130A49DB9C00314975 /* juce.xcconfig */; }; | 846929140A49DB9C00314975 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 846929130A49DB9C00314975 /* juce.xcconfig */; }; | ||||
| 846C10D40DE33F4D00E8CCE8 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 846C10D30DE33F4D00E8CCE8 /* juce_LibrarySource.mm */; }; | 846C10D40DE33F4D00E8CCE8 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 846C10D30DE33F4D00E8CCE8 /* juce_LibrarySource.mm */; }; | ||||
| 846C10E90DE33FA100E8CCE8 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DB0DE33FA100E8CCE8 /* AGL.framework */; }; | |||||
| 846C10EA0DE33FA100E8CCE8 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */; }; | 846C10EA0DE33FA100E8CCE8 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */; }; | ||||
| 846C10EB0DE33FA100E8CCE8 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DD0DE33FA100E8CCE8 /* AudioUnit.framework */; }; | |||||
| 846C10EC0DE33FA100E8CCE8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DE0DE33FA100E8CCE8 /* Carbon.framework */; }; | |||||
| 846C10ED0DE33FA100E8CCE8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */; }; | 846C10ED0DE33FA100E8CCE8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */; }; | ||||
| 846C10EE0DE33FA100E8CCE8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */; }; | 846C10EE0DE33FA100E8CCE8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */; }; | ||||
| 846C10EF0DE33FA100E8CCE8 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */; }; | 846C10EF0DE33FA100E8CCE8 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */; }; | ||||
| @@ -21,8 +18,8 @@ | |||||
| 846C10F20DE33FA100E8CCE8 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */; }; | 846C10F20DE33FA100E8CCE8 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */; }; | ||||
| 846C10F30DE33FA100E8CCE8 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E50DE33FA100E8CCE8 /* IOKit.framework */; }; | 846C10F30DE33FA100E8CCE8 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E50DE33FA100E8CCE8 /* IOKit.framework */; }; | ||||
| 846C10F40DE33FA100E8CCE8 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E60DE33FA100E8CCE8 /* OpenGL.framework */; }; | 846C10F40DE33FA100E8CCE8 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E60DE33FA100E8CCE8 /* OpenGL.framework */; }; | ||||
| 846C10F50DE33FA100E8CCE8 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E70DE33FA100E8CCE8 /* QuickTime.framework */; }; | |||||
| 846C10F60DE33FA100E8CCE8 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E80DE33FA100E8CCE8 /* WebKit.framework */; }; | 846C10F60DE33FA100E8CCE8 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E80DE33FA100E8CCE8 /* WebKit.framework */; }; | ||||
| 84E01DD90E910B7B003E41AF /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E01DD80E910B7B003E41AF /* QTKit.framework */; }; | |||||
| 84F1769F0A271BBD00908B2F /* jucer_StoredSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1769B0A271BBD00908B2F /* jucer_StoredSettings.cpp */; }; | 84F1769F0A271BBD00908B2F /* jucer_StoredSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1769B0A271BBD00908B2F /* jucer_StoredSettings.cpp */; }; | ||||
| 84F176A00A271BBD00908B2F /* jucer_UtilityFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1769D0A271BBD00908B2F /* jucer_UtilityFunctions.cpp */; }; | 84F176A00A271BBD00908B2F /* jucer_UtilityFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1769D0A271BBD00908B2F /* jucer_UtilityFunctions.cpp */; }; | ||||
| 84F176BA0A271BD000908B2F /* jucer_ComponentLayoutEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F176A20A271BD000908B2F /* jucer_ComponentLayoutEditor.cpp */; }; | 84F176BA0A271BD000908B2F /* jucer_ComponentLayoutEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F176A20A271BD000908B2F /* jucer_ComponentLayoutEditor.cpp */; }; | ||||
| @@ -57,6 +54,7 @@ | |||||
| 84F555CF0A22381100A8311C /* Jucer To Do list.txt in Resources */ = {isa = PBXBuildFile; fileRef = 84F5556A0A22381000A8311C /* Jucer To Do list.txt */; }; | 84F555CF0A22381100A8311C /* Jucer To Do list.txt in Resources */ = {isa = PBXBuildFile; fileRef = 84F5556A0A22381000A8311C /* Jucer To Do list.txt */; }; | ||||
| 84F555D30A22381100A8311C /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F555700A22381000A8311C /* BinaryData.cpp */; }; | 84F555D30A22381100A8311C /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F555700A22381000A8311C /* BinaryData.cpp */; }; | ||||
| 84F555D40A22381100A8311C /* jucer_Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F555730A22381000A8311C /* jucer_Main.cpp */; }; | 84F555D40A22381100A8311C /* jucer_Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F555730A22381000A8311C /* jucer_Main.cpp */; }; | ||||
| 84F8B68E0EB5FB290020D98D /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F8B68D0EB5FB290020D98D /* QuickTime.framework */; }; | |||||
| 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; | 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; | ||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||
| @@ -65,10 +63,7 @@ | |||||
| 846929130A49DB9C00314975 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | 846929130A49DB9C00314975 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | ||||
| 846C10D20DE33F4D00E8CCE8 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; }; | 846C10D20DE33F4D00E8CCE8 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; }; | ||||
| 846C10D30DE33F4D00E8CCE8 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; }; | 846C10D30DE33F4D00E8CCE8 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; }; | ||||
| 846C10DB0DE33FA100E8CCE8 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||||
| 846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | 846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; | ||||
| 846C10DD0DE33FA100E8CCE8 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; }; | |||||
| 846C10DE0DE33FA100E8CCE8 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||||
| 846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | 846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | ||||
| 846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | 846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | ||||
| 846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; | 846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; | ||||
| @@ -77,8 +72,8 @@ | |||||
| 846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | 846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; }; | ||||
| 846C10E50DE33FA100E8CCE8 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | 846C10E50DE33FA100E8CCE8 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | ||||
| 846C10E60DE33FA100E8CCE8 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | 846C10E60DE33FA100E8CCE8 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | ||||
| 846C10E70DE33FA100E8CCE8 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 846C10E80DE33FA100E8CCE8 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | 846C10E80DE33FA100E8CCE8 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; | ||||
| 84E01DD80E910B7B003E41AF /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; }; | |||||
| 84F176990A271BBD00908B2F /* jucer_ColourEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = jucer_ColourEditorComponent.h; sourceTree = "<group>"; }; | 84F176990A271BBD00908B2F /* jucer_ColourEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = jucer_ColourEditorComponent.h; sourceTree = "<group>"; }; | ||||
| 84F1769A0A271BBD00908B2F /* jucer_Colours.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = jucer_Colours.h; sourceTree = "<group>"; }; | 84F1769A0A271BBD00908B2F /* jucer_Colours.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = jucer_Colours.h; sourceTree = "<group>"; }; | ||||
| 84F1769B0A271BBD00908B2F /* jucer_StoredSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = jucer_StoredSettings.cpp; sourceTree = "<group>"; }; | 84F1769B0A271BBD00908B2F /* jucer_StoredSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = jucer_StoredSettings.cpp; sourceTree = "<group>"; }; | ||||
| @@ -183,6 +178,7 @@ | |||||
| 84F555720A22381000A8311C /* jucer_Headers.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucer_Headers.h; path = ../../src/jucer_Headers.h; sourceTree = SOURCE_ROOT; }; | 84F555720A22381000A8311C /* jucer_Headers.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucer_Headers.h; path = ../../src/jucer_Headers.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84F555730A22381000A8311C /* jucer_Main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Main.cpp; path = ../../src/jucer_Main.cpp; sourceTree = SOURCE_ROOT; }; | 84F555730A22381000A8311C /* jucer_Main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Main.cpp; path = ../../src/jucer_Main.cpp; sourceTree = SOURCE_ROOT; }; | ||||
| 84F555B00A22381000A8311C /* jucer_ComponentTemplate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTemplate.h; path = ../../src/templates/jucer_ComponentTemplate.h; sourceTree = SOURCE_ROOT; }; | 84F555B00A22381000A8311C /* jucer_ComponentTemplate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTemplate.h; path = ../../src/templates/jucer_ComponentTemplate.h; sourceTree = SOURCE_ROOT; }; | ||||
| 84F8B68D0EB5FB290020D98D /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||||
| 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; | 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; | ||||
| 8D0C4E970486CD37000505A6 /* Jucer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Jucer.app; sourceTree = BUILT_PRODUCTS_DIR; }; | 8D0C4E970486CD37000505A6 /* Jucer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Jucer.app; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||
| @@ -192,10 +188,7 @@ | |||||
| isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 846C10E90DE33FA100E8CCE8 /* AGL.framework in Frameworks */, | |||||
| 846C10EA0DE33FA100E8CCE8 /* ApplicationServices.framework in Frameworks */, | 846C10EA0DE33FA100E8CCE8 /* ApplicationServices.framework in Frameworks */, | ||||
| 846C10EB0DE33FA100E8CCE8 /* AudioUnit.framework in Frameworks */, | |||||
| 846C10EC0DE33FA100E8CCE8 /* Carbon.framework in Frameworks */, | |||||
| 846C10ED0DE33FA100E8CCE8 /* Cocoa.framework in Frameworks */, | 846C10ED0DE33FA100E8CCE8 /* Cocoa.framework in Frameworks */, | ||||
| 846C10EE0DE33FA100E8CCE8 /* CoreAudio.framework in Frameworks */, | 846C10EE0DE33FA100E8CCE8 /* CoreAudio.framework in Frameworks */, | ||||
| 846C10EF0DE33FA100E8CCE8 /* CoreFoundation.framework in Frameworks */, | 846C10EF0DE33FA100E8CCE8 /* CoreFoundation.framework in Frameworks */, | ||||
| @@ -204,8 +197,9 @@ | |||||
| 846C10F20DE33FA100E8CCE8 /* DiscRecording.framework in Frameworks */, | 846C10F20DE33FA100E8CCE8 /* DiscRecording.framework in Frameworks */, | ||||
| 846C10F30DE33FA100E8CCE8 /* IOKit.framework in Frameworks */, | 846C10F30DE33FA100E8CCE8 /* IOKit.framework in Frameworks */, | ||||
| 846C10F40DE33FA100E8CCE8 /* OpenGL.framework in Frameworks */, | 846C10F40DE33FA100E8CCE8 /* OpenGL.framework in Frameworks */, | ||||
| 846C10F50DE33FA100E8CCE8 /* QuickTime.framework in Frameworks */, | |||||
| 846C10F60DE33FA100E8CCE8 /* WebKit.framework in Frameworks */, | 846C10F60DE33FA100E8CCE8 /* WebKit.framework in Frameworks */, | ||||
| 84E01DD90E910B7B003E41AF /* QTKit.framework in Frameworks */, | |||||
| 84F8B68E0EB5FB290020D98D /* QuickTime.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| @@ -264,19 +258,17 @@ | |||||
| 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { | 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 846C10DB0DE33FA100E8CCE8 /* AGL.framework */, | |||||
| 846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */, | 846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */, | ||||
| 846C10DD0DE33FA100E8CCE8 /* AudioUnit.framework */, | |||||
| 846C10DE0DE33FA100E8CCE8 /* Carbon.framework */, | |||||
| 846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */, | 846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */, | ||||
| 846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */, | |||||
| 846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */, | 846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */, | ||||
| 846C10E20DE33FA100E8CCE8 /* CoreMIDI.framework */, | |||||
| 846C10E30DE33FA100E8CCE8 /* CoreServices.framework */, | 846C10E30DE33FA100E8CCE8 /* CoreServices.framework */, | ||||
| 846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */, | |||||
| 846C10E20DE33FA100E8CCE8 /* CoreMIDI.framework */, | |||||
| 846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */, | 846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */, | ||||
| 846C10E50DE33FA100E8CCE8 /* IOKit.framework */, | 846C10E50DE33FA100E8CCE8 /* IOKit.framework */, | ||||
| 846C10E60DE33FA100E8CCE8 /* OpenGL.framework */, | 846C10E60DE33FA100E8CCE8 /* OpenGL.framework */, | ||||
| 846C10E70DE33FA100E8CCE8 /* QuickTime.framework */, | |||||
| 84E01DD80E910B7B003E41AF /* QTKit.framework */, | |||||
| 84F8B68D0EB5FB290020D98D /* QuickTime.framework */, | |||||
| 846C10E80DE33FA100E8CCE8 /* WebKit.framework */, | 846C10E80DE33FA100E8CCE8 /* WebKit.framework */, | ||||
| ); | ); | ||||
| name = "External Frameworks and Libraries"; | name = "External Frameworks and Libraries"; | ||||
| @@ -911,4 +911,3 @@ static const unsigned char temp4[] = {137,80,78,71,13,10,26,10,0,0,0,13,73,72,68 | |||||
| 0,98,28,9,155,95,0,2,104,68,236,11,1,8,160,17,225,73,128,0,3,0,120,52,172,151,198,78,252,63,0,0,0,0,73,69,78,68,174,66, | 0,98,28,9,155,95,0,2,104,68,236,11,1,8,160,17,225,73,128,0,3,0,120,52,172,151,198,78,252,63,0,0,0,0,73,69,78,68,174,66, | ||||
| 96,130,0,0}; | 96,130,0,0}; | ||||
| const char* BinaryData::prefs_misc_png = (const char*) temp4; | const char* BinaryData::prefs_misc_png = (const char*) temp4; | ||||
| @@ -50,8 +50,8 @@ | |||||
| //#define JUCE_ENABLE_REPAINT_DEBUGGING 1 | //#define JUCE_ENABLE_REPAINT_DEBUGGING 1 | ||||
| //#define JUCE_USE_XINERAMA 1 | //#define JUCE_USE_XINERAMA 1 | ||||
| //#define JUCE_USE_XSHM 1 | //#define JUCE_USE_XSHM 1 | ||||
| //#define JUCE_PLUGINHOST_VST 1 | |||||
| //#define JUCE_PLUGINHOST_AU 1 | |||||
| #define JUCE_PLUGINHOST_VST 0 | |||||
| #define JUCE_PLUGINHOST_AU 0 | |||||
| //#define JUCE_BUILD_GUI_CLASSES 1 | //#define JUCE_BUILD_GUI_CLASSES 1 | ||||
| //#define JUCE_CHECK_MEMORY_LEAKS 1 | //#define JUCE_CHECK_MEMORY_LEAKS 1 | ||||
| //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 | //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 | ||||
| @@ -43,7 +43,7 @@ | |||||
| //============================================================================== | //============================================================================== | ||||
| #define JUCER_MAJOR_VERSION 1 | #define JUCER_MAJOR_VERSION 1 | ||||
| #define JUCER_MINOR_VERSION 11 | |||||
| #define JUCER_MINOR_VERSION 12 | |||||
| //============================================================================== | //============================================================================== | ||||
| #include "BinaryData.h" | #include "BinaryData.h" | ||||
| @@ -83,7 +83,7 @@ public: | |||||
| StoredSettings::deleteInstance(); | StoredSettings::deleteInstance(); | ||||
| quit (false); | |||||
| quit(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -202,6 +202,9 @@ const String makeValidCppIdentifier (String s, | |||||
| if (allowTemplates) | if (allowTemplates) | ||||
| allowedChars += T("<>"); | allowedChars += T("<>"); | ||||
| if (! removeColons) | |||||
| allowedChars += T(":"); | |||||
| StringArray words; | StringArray words; | ||||
| words.addTokens (s.retainCharacters (allowedChars), false); | words.addTokens (s.retainCharacters (allowedChars), false); | ||||
| words.trim(); | words.trim(); | ||||
| @@ -30,7 +30,7 @@ | |||||
| */ | */ | ||||
| #ifndef __JUCE_CONFIG_JUCEHEADER__ | #ifndef __JUCE_CONFIG_JUCEHEADER__ | ||||
| #define __JUCE_CONFIG_JUCEHEADER__ | |||||
| #define __JUCE_CONFIG_JUCEHEADER__ // (this comment is here to force the amalgamator to reinclude this file) | |||||
| //============================================================================== | //============================================================================== | ||||
| /* | /* | ||||
| @@ -159,12 +159,16 @@ | |||||
| /** Enabling this builds support for VST audio plugins. | /** Enabling this builds support for VST audio plugins. | ||||
| @see VSTPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU | @see VSTPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU | ||||
| */ | */ | ||||
| //#define JUCE_PLUGINHOST_VST 1 | |||||
| #ifndef JUCE_PLUGINHOST_VST | |||||
| // #define JUCE_PLUGINHOST_VST 1 | |||||
| #endif | |||||
| /** Enabling this builds support for AudioUnit audio plugins. | /** Enabling this builds support for AudioUnit audio plugins. | ||||
| @see AudioUnitPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_VST | @see AudioUnitPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_VST | ||||
| */ | */ | ||||
| #define JUCE_PLUGINHOST_AU 1 | |||||
| #ifndef JUCE_PLUGINHOST_AU | |||||
| // #define JUCE_PLUGINHOST_AU 1 | |||||
| #endif | |||||
| //============================================================================= | //============================================================================= | ||||
| /** Disabling this will avoid linking to any UI code. This is handy for | /** Disabling this will avoid linking to any UI code. This is handy for | ||||
| @@ -37,44 +37,22 @@ | |||||
| */ | */ | ||||
| #ifdef __JUCE_JUCEHEADER__ | |||||
| /* When you add the amalgamated cpp file to your project, you mustn't include it in | |||||
| a file where you've already included juce.h - just put it inside a file on its own, | |||||
| possibly with your config flags preceding it, but don't include anything else. */ | |||||
| #error | |||||
| #endif | |||||
| #include "../juce_Config.h" | #include "../juce_Config.h" | ||||
| //============================================================================== | //============================================================================== | ||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||
| #include "../build/win32/platform_specific_code/win32_headers.h" | |||||
| #include <winsock2.h> | |||||
| #include <mapi.h> | |||||
| #include <ctime> | |||||
| #if JUCE_QUICKTIME | |||||
| #include <Movies.h> | |||||
| #include <QTML.h> | |||||
| #include <QuickTimeComponents.h> | |||||
| #include <MediaHandlers.h> | |||||
| #include <ImageCodec.h> | |||||
| #undef TARGET_OS_MAC // quicktime sets these, but they confuse some of the 3rd party libs | |||||
| #undef MACOS | |||||
| #endif | |||||
| #include "../build/win32/platform_specific_code/juce_win32_NativeIncludes.h" | |||||
| #elif defined (LINUX) | #elif defined (LINUX) | ||||
| // | |||||
| #else | #else | ||||
| #include <Carbon/Carbon.h> | |||||
| #include <CoreAudio/HostTime.h> | |||||
| #define __Point__ | |||||
| #include <IOKit/IOKitLib.h> | |||||
| #include <IOKit/graphics/IOGraphicsTypes.h> | |||||
| #include <IOKit/network/IOEthernetInterface.h> | |||||
| #include <IOKit/network/IONetworkInterface.h> | |||||
| #include <IOKit/network/IOEthernetController.h> | |||||
| #include <IOKit/IOCFPlugIn.h> | |||||
| #include <IOKit/hid/IOHIDLib.h> | |||||
| #include <IOKit/hid/IOHIDKeys.h> | |||||
| #include <sys/filedesc.h> | |||||
| #include <sys/time.h> | |||||
| #include <sys/proc.h> | |||||
| #include <Kernel/libkern/OSTypes.h> | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_NativeIncludes.h" | |||||
| #endif | #endif | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -181,7 +159,7 @@ | |||||
| #include "juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp" | #include "juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp" | ||||
| #include "juce_appframework/audio/plugins/juce_PluginListComponent.cpp" | #include "juce_appframework/audio/plugins/juce_PluginListComponent.cpp" | ||||
| #include "juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.cpp" | #include "juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.cpp" | ||||
| #include "juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.cpp" | |||||
| #include "juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.mm" | |||||
| #include "juce_appframework/audio/processors/juce_AudioProcessor.cpp" | #include "juce_appframework/audio/processors/juce_AudioProcessor.cpp" | ||||
| #include "juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp" | #include "juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp" | ||||
| #include "juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp" | #include "juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp" | ||||
| @@ -287,7 +265,6 @@ | |||||
| #include "juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp" | #include "juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp" | ||||
| #include "juce_appframework/gui/components/special/juce_OpenGLComponent.cpp" | #include "juce_appframework/gui/components/special/juce_OpenGLComponent.cpp" | ||||
| #include "juce_appframework/gui/components/special/juce_PreferencesPanel.cpp" | #include "juce_appframework/gui/components/special/juce_PreferencesPanel.cpp" | ||||
| #include "juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.cpp" | |||||
| #include "juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp" | #include "juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp" | ||||
| #include "juce_appframework/gui/components/windows/juce_AlertWindow.cpp" | #include "juce_appframework/gui/components/windows/juce_AlertWindow.cpp" | ||||
| #include "juce_appframework/gui/components/windows/juce_ComponentPeer.cpp" | #include "juce_appframework/gui/components/windows/juce_ComponentPeer.cpp" | ||||
| @@ -358,26 +335,7 @@ | |||||
| //============================================================================== | //============================================================================== | ||||
| #if JUCE_WIN32 | #if JUCE_WIN32 | ||||
| #include "../build/win32/platform_specific_code/juce_win32_Files.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_Network.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_Misc.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_PlatformUtils.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_SystemStats.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_Threads.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_DynamicLibraryLoader.cpp" | |||||
| #if ! JUCE_ONLY_BUILD_CORE_LIBRARY | |||||
| #include "../build/win32/platform_specific_code/juce_win32_ASIO.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_AudioCDReader.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_DirectSound.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_FileChooser.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_Fonts.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_Messaging.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_Midi.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_WebBrowserComponent.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_Windowing.cpp" | |||||
| #endif | |||||
| #include "../build/win32/platform_specific_code/juce_win32_NativeCode.cpp" | |||||
| #include "../build/win32/platform_specific_code/juce_win32_AutoLinkLibraries.h" | #include "../build/win32/platform_specific_code/juce_win32_AutoLinkLibraries.h" | ||||
| #endif | #endif | ||||
| @@ -407,21 +365,7 @@ | |||||
| //============================================================================== | //============================================================================== | ||||
| #if JUCE_MAC | #if JUCE_MAC | ||||
| #include "../build/macosx/platform_specific_code/juce_mac_Files.cpp" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_NativeCode.mm" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_NamedPipe.cpp" | #include "../build/macosx/platform_specific_code/juce_mac_NamedPipe.cpp" | ||||
| #include "../build/macosx/platform_specific_code/juce_mac_SystemStats.mm" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_Threads.cpp" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_Network.mm" | |||||
| #if ! JUCE_ONLY_BUILD_CORE_LIBRARY | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_AudioCDBurner.mm" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_CoreAudio.cpp" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_CoreMidi.cpp" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_FileChooser.mm" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_Fonts.mm" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_Messaging.mm" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_WebBrowserComponent.mm" | |||||
| #include "../build/macosx/platform_specific_code/juce_mac_Windowing.mm" | |||||
| #endif | |||||
| #endif | #endif | ||||
| @@ -29,8 +29,8 @@ | |||||
| ============================================================================== | ============================================================================== | ||||
| */ | */ | ||||
| #ifndef __JUCE_JUCE_APP_INCLUDES_INCLUDEFILES__ | |||||
| #define __JUCE_JUCE_APP_INCLUDES_INCLUDEFILES__ | |||||
| #ifndef __JUCE_APP_INCLUDES_JUCEHEADER__ | |||||
| #define __JUCE_APP_INCLUDES_JUCEHEADER__ | |||||
| #ifndef __JUCE_APPLICATION_JUCEHEADER__ | #ifndef __JUCE_APPLICATION_JUCEHEADER__ | ||||
| #include "juce_appframework/application/juce_Application.h" | #include "juce_appframework/application/juce_Application.h" | ||||
| @@ -738,4 +738,4 @@ | |||||
| #include "juce_appframework/documents/juce_UndoManager.h" | #include "juce_appframework/documents/juce_UndoManager.h" | ||||
| #endif | #endif | ||||
| #endif | |||||
| #endif // __JUCE_APP_INCLUDES_JUCEHEADER__ | |||||
| @@ -51,6 +51,7 @@ BEGIN_JUCE_NAMESPACE | |||||
| #include "../../juce_core/basics/juce_Initialisation.h" | #include "../../juce_core/basics/juce_Initialisation.h" | ||||
| #include "../../juce_core/threads/juce_Process.h" | #include "../../juce_core/threads/juce_Process.h" | ||||
| #include "../../juce_core/threads/juce_InterProcessLock.h" | #include "../../juce_core/threads/juce_InterProcessLock.h" | ||||
| #include "../../juce_core/misc/juce_PlatformUtilities.h" | |||||
| void juce_setCurrentExecutableFileName (const String& filename) throw(); | void juce_setCurrentExecutableFileName (const String& filename) throw(); | ||||
| void juce_setCurrentThreadName (const String& name) throw(); | void juce_setCurrentThreadName (const String& name) throw(); | ||||
| @@ -99,9 +100,9 @@ void JUCEApplication::systemRequestedQuit() | |||||
| quit(); | quit(); | ||||
| } | } | ||||
| void JUCEApplication::quit (const bool useMaximumForce) | |||||
| void JUCEApplication::quit() | |||||
| { | { | ||||
| MessageManager::getInstance()->postQuitMessage (useMaximumForce); | |||||
| MessageManager::getInstance()->stopDispatchLoop(); | |||||
| } | } | ||||
| void JUCEApplication::setApplicationReturnValue (const int newReturnValue) throw() | void JUCEApplication::setApplicationReturnValue (const int newReturnValue) throw() | ||||
| @@ -165,7 +166,6 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app) | |||||
| { | { | ||||
| jassert (appInstance == 0); | jassert (appInstance == 0); | ||||
| appInstance = app; | appInstance = app; | ||||
| bool useForce = true; | |||||
| initialiseJuce_GUI(); | initialiseJuce_GUI(); | ||||
| @@ -203,7 +203,7 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app) | |||||
| app->stillInitialising = false; | app->stillInitialising = false; | ||||
| // now loop until a quit message is received.. | // now loop until a quit message is received.. | ||||
| useForce = MessageManager::getInstance()->runDispatchLoop(); | |||||
| MessageManager::getInstance()->runDispatchLoop(); | |||||
| MessageManager::getInstance()->deregisterBroadcastListener (app); | MessageManager::getInstance()->deregisterBroadcastListener (app); | ||||
| @@ -224,10 +224,10 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app) | |||||
| } | } | ||||
| #endif | #endif | ||||
| return shutdownAppAndClearUp (useForce); | |||||
| return shutdownAppAndClearUp(); | |||||
| } | } | ||||
| int JUCEApplication::shutdownAppAndClearUp (const bool useMaximumForce) | |||||
| int JUCEApplication::shutdownAppAndClearUp() | |||||
| { | { | ||||
| jassert (appInstance != 0); | jassert (appInstance != 0); | ||||
| JUCEApplication* const app = appInstance; | JUCEApplication* const app = appInstance; | ||||
| @@ -266,11 +266,6 @@ int JUCEApplication::shutdownAppAndClearUp (const bool useMaximumForce) | |||||
| } | } | ||||
| JUCE_CATCH_ALL_ASSERT | JUCE_CATCH_ALL_ASSERT | ||||
| if (useMaximumForce) | |||||
| { | |||||
| Process::terminate(); | |||||
| } | |||||
| reentrancyCheck = false; | reentrancyCheck = false; | ||||
| } | } | ||||
| @@ -280,6 +275,10 @@ int JUCEApplication::shutdownAppAndClearUp (const bool useMaximumForce) | |||||
| int JUCEApplication::main (int argc, char* argv[], | int JUCEApplication::main (int argc, char* argv[], | ||||
| JUCEApplication* const newApp) | JUCEApplication* const newApp) | ||||
| { | { | ||||
| #if JUCE_MAC | |||||
| const ScopedAutoReleasePool pool; | |||||
| #endif | |||||
| juce_setCurrentExecutableFileName (String::fromUTF8 ((const uint8*) argv[0])); | juce_setCurrentExecutableFileName (String::fromUTF8 ((const uint8*) argv[0])); | ||||
| String cmd; | String cmd; | ||||
| @@ -303,6 +302,9 @@ void JUCE_PUBLIC_FUNCTION initialiseJuce_GUI() | |||||
| { | { | ||||
| if (! juceInitialisedGUI) | if (! juceInitialisedGUI) | ||||
| { | { | ||||
| #if JUCE_MAC | |||||
| const ScopedAutoReleasePool pool; | |||||
| #endif | |||||
| juceInitialisedGUI = true; | juceInitialisedGUI = true; | ||||
| initialiseJuce_NonGUI(); | initialiseJuce_NonGUI(); | ||||
| @@ -336,6 +338,9 @@ void JUCE_PUBLIC_FUNCTION shutdownJuce_GUI() | |||||
| { | { | ||||
| if (juceInitialisedGUI) | if (juceInitialisedGUI) | ||||
| { | { | ||||
| #if JUCE_MAC | |||||
| const ScopedAutoReleasePool pool; | |||||
| #endif | |||||
| DeletedAtShutdown::deleteAll(); | DeletedAtShutdown::deleteAll(); | ||||
| LookAndFeel::clearDefaultLookAndFeel(); | LookAndFeel::clearDefaultLookAndFeel(); | ||||
| @@ -241,12 +241,9 @@ public: | |||||
| and maybe cancel the quit, you'll need to handle this in the systemRequestedQuit() | and maybe cancel the quit, you'll need to handle this in the systemRequestedQuit() | ||||
| method - see that method's help for more info. | method - see that method's help for more info. | ||||
| @param useMaximumForce if this is true, the process will be forcibly killed | |||||
| before leaving the WinMain or main() function, which can | |||||
| be useful if threads might have got stuck somehow. | |||||
| @see MessageManager, DeletedAtShutdown | @see MessageManager, DeletedAtShutdown | ||||
| */ | */ | ||||
| static void quit (const bool useMaximumForce = false); | |||||
| static void quit(); | |||||
| /** Sets the value that should be returned as the application's exit code when the | /** Sets the value that should be returned as the application's exit code when the | ||||
| app quits. | app quits. | ||||
| @@ -293,7 +290,7 @@ private: | |||||
| int appReturnValue; | int appReturnValue; | ||||
| bool stillInitialising; | bool stillInitialising; | ||||
| static int shutdownAppAndClearUp (const bool useMaximumForce); | |||||
| static int shutdownAppAndClearUp(); | |||||
| }; | }; | ||||
| @@ -64,6 +64,8 @@ | |||||
| #include "../../../juce_core/basics/juce_StandardHeader.h" | #include "../../../juce_core/basics/juce_StandardHeader.h" | ||||
| #if ! (JUCE_MAC && JUCE_64BIT) | |||||
| BEGIN_JUCE_NAMESPACE | BEGIN_JUCE_NAMESPACE | ||||
| #include "juce_QuickTimeAudioFormat.h" | #include "juce_QuickTimeAudioFormat.h" | ||||
| @@ -408,7 +410,7 @@ AudioFormatWriter* QuickTimeAudioFormat::createWriterFor (OutputStream* /*stream | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
| #endif | #endif | ||||
| #endif | |||||
| @@ -45,10 +45,11 @@ AudioSampleBuffer::AudioSampleBuffer (const int numChannels_, | |||||
| size (numSamples) | size (numSamples) | ||||
| { | { | ||||
| jassert (numSamples >= 0); | jassert (numSamples >= 0); | ||||
| jassert (numChannels_ > 0 && numChannels_ <= maxNumAudioSampleBufferChannels); | |||||
| jassert (numChannels_ > 0); | |||||
| allocatedBytes = numChannels * numSamples * sizeof (float) + 32; | allocatedBytes = numChannels * numSamples * sizeof (float) + 32; | ||||
| allocatedData = (float*) juce_malloc (allocatedBytes); | allocatedData = (float*) juce_malloc (allocatedBytes); | ||||
| channels = (float**) juce_malloc (numChannels_ * sizeof (float*)); | |||||
| float* chan = allocatedData; | float* chan = allocatedData; | ||||
| for (int i = 0; i < numChannels_; ++i) | for (int i = 0; i < numChannels_; ++i) | ||||
| @@ -68,7 +69,9 @@ AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, | |||||
| allocatedBytes (0), | allocatedBytes (0), | ||||
| allocatedData (0) | allocatedData (0) | ||||
| { | { | ||||
| jassert (((unsigned int) numChannels_) <= (unsigned int) maxNumAudioSampleBufferChannels); | |||||
| jassert (numChannels_ > 0); | |||||
| channels = (float**) juce_malloc (numChannels_ * sizeof (float*)); | |||||
| for (int i = 0; i < numChannels_; ++i) | for (int i = 0; i < numChannels_; ++i) | ||||
| { | { | ||||
| @@ -85,12 +88,15 @@ void AudioSampleBuffer::setDataToReferTo (float** dataToReferTo, | |||||
| const int numChannels_, | const int numChannels_, | ||||
| const int numSamples) throw() | const int numSamples) throw() | ||||
| { | { | ||||
| jassert (((unsigned int) numChannels_) <= (unsigned int) maxNumAudioSampleBufferChannels); | |||||
| jassert (numChannels_ > 0); | |||||
| juce_free (allocatedData); | juce_free (allocatedData); | ||||
| allocatedData = 0; | allocatedData = 0; | ||||
| allocatedBytes = 0; | allocatedBytes = 0; | ||||
| if (numChannels_ > numChannels) | |||||
| channels = (float**) juce_realloc (channels, numChannels_ * sizeof (float*)); | |||||
| numChannels = numChannels_; | numChannels = numChannels_; | ||||
| size = numSamples; | size = numSamples; | ||||
| @@ -109,6 +115,8 @@ AudioSampleBuffer::AudioSampleBuffer (const AudioSampleBuffer& other) throw() | |||||
| : numChannels (other.numChannels), | : numChannels (other.numChannels), | ||||
| size (other.size) | size (other.size) | ||||
| { | { | ||||
| channels = (float**) juce_malloc (other.numChannels * sizeof (float*)); | |||||
| if (other.allocatedData != 0) | if (other.allocatedData != 0) | ||||
| { | { | ||||
| allocatedBytes = numChannels * size * sizeof (float) + 32; | allocatedBytes = numChannels * size * sizeof (float) + 32; | ||||
| @@ -152,6 +160,7 @@ const AudioSampleBuffer& AudioSampleBuffer::operator= (const AudioSampleBuffer& | |||||
| AudioSampleBuffer::~AudioSampleBuffer() throw() | AudioSampleBuffer::~AudioSampleBuffer() throw() | ||||
| { | { | ||||
| juce_free (allocatedData); | juce_free (allocatedData); | ||||
| juce_free (channels); | |||||
| } | } | ||||
| float* AudioSampleBuffer::getSampleData (const int channelNumber, | float* AudioSampleBuffer::getSampleData (const int channelNumber, | ||||
| @@ -169,7 +178,7 @@ void AudioSampleBuffer::setSize (const int newNumChannels, | |||||
| const bool clearExtraSpace, | const bool clearExtraSpace, | ||||
| const bool avoidReallocating) throw() | const bool avoidReallocating) throw() | ||||
| { | { | ||||
| jassert (newNumChannels > 0 && newNumChannels <= maxNumAudioSampleBufferChannels); | |||||
| jassert (newNumChannels > 0); | |||||
| if (newNumSamples != size || newNumChannels != numChannels) | if (newNumSamples != size || newNumChannels != numChannels) | ||||
| { | { | ||||
| @@ -212,6 +221,10 @@ void AudioSampleBuffer::setSize (const int newNumChannels, | |||||
| } | } | ||||
| size = newNumSamples; | size = newNumSamples; | ||||
| if (newNumChannels > numChannels) | |||||
| channels = (float**) juce_realloc (channels, newNumChannels * sizeof (float*)); | |||||
| numChannels = newNumChannels; | numChannels = newNumChannels; | ||||
| float* chan = allocatedData; | float* chan = allocatedData; | ||||
| @@ -34,7 +34,6 @@ | |||||
| class AudioFormatReader; | class AudioFormatReader; | ||||
| class AudioFormatWriter; | class AudioFormatWriter; | ||||
| const int maxNumAudioSampleBufferChannels = 32; | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -371,7 +370,7 @@ public: | |||||
| private: | private: | ||||
| int numChannels, size, allocatedBytes; | int numChannels, size, allocatedBytes; | ||||
| float* channels [maxNumAudioSampleBufferChannels + 1]; | |||||
| float** channels; | |||||
| float* allocatedData; | float* allocatedData; | ||||
| }; | }; | ||||