diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /lib/libUPnP/Platinum/Source/Tests | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/libUPnP/Platinum/Source/Tests')
23 files changed, 5394 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Tests/FileMediaServer/FileMediaServerTest.cpp b/lib/libUPnP/Platinum/Source/Tests/FileMediaServer/FileMediaServerTest.cpp new file mode 100644 index 0000000..0d1223b --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/FileMediaServer/FileMediaServerTest.cpp @@ -0,0 +1,159 @@ +/***************************************************************** +| +| Platinum - Test UPnP A/V MediaServer +| +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "PltUPnP.h" +#include "PltFileMediaServer.h" + +#include <stdlib.h> + +NPT_SET_LOCAL_LOGGER("platinum.media.server.file.test") + +/*---------------------------------------------------------------------- +| globals ++---------------------------------------------------------------------*/ +struct Options { + const char* path; + const char* friendly_name; + const char* guid; + NPT_UInt32 port; +} Options; + +/*---------------------------------------------------------------------- +| PrintUsageAndExit ++---------------------------------------------------------------------*/ +static void +PrintUsageAndExit() +{ + fprintf(stderr, "usage: FileMediaServerTest [-f <friendly_name>] [-p <port>] [-g <guid>] <path>\n"); + fprintf(stderr, "-f : optional upnp device friendly name\n"); + fprintf(stderr, "-p : optional http port\n"); + fprintf(stderr, "<path> : local path to serve\n"); + exit(1); +} + +/*---------------------------------------------------------------------- +| ParseCommandLine ++---------------------------------------------------------------------*/ +static void +ParseCommandLine(char** args) +{ + const char* arg; + + /* default values */ + Options.path = NULL; + Options.friendly_name = NULL; + Options.guid = NULL; + Options.port = 0; + + while ((arg = *args++)) { + if (!strcmp(arg, "-f")) { + Options.friendly_name = *args++; + } else if (!strcmp(arg, "-g")) { + Options.guid = *args++; + } else if (!strcmp(arg, "-p")) { + if (NPT_FAILED(NPT_ParseInteger32(*args++, Options.port))) { + fprintf(stderr, "ERROR: invalid argument\n"); + PrintUsageAndExit(); + } + } else if (Options.path == NULL) { + Options.path = arg; + } else { + fprintf(stderr, "ERROR: too many arguments\n"); + PrintUsageAndExit(); + } + } + + /* check args */ + if (Options.path == NULL) { + fprintf(stderr, "ERROR: path missing\n"); + PrintUsageAndExit(); + } +} + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int /* argc */, char** argv) +{ + // setup Neptune logging + NPT_LogManager::GetDefault().Configure("plist:.level=FINE;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=56"); + + /* parse command line */ + ParseCommandLine(argv+1); + + /* for faster DLNA faster testing */ + PLT_Constants::GetInstance().SetDefaultDeviceLease(NPT_TimeInterval(60.)); + + PLT_UPnP upnp; + PLT_DeviceHostReference device( + new PLT_FileMediaServer( + Options.path, + Options.friendly_name?Options.friendly_name:"Platinum UPnP Media Server", + false, + Options.guid, // NULL for random ID + (NPT_UInt16)Options.port) + ); + + NPT_List<NPT_IpAddress> list; + NPT_CHECK_SEVERE(PLT_UPnPMessageHelper::GetIPAddresses(list)); + NPT_String ip = list.GetFirstItem()->ToString(); + + device->m_ModelDescription = "Platinum File Media Server"; + device->m_ModelURL = "http://www.plutinosoft.com/"; + device->m_ModelNumber = "1.0"; + device->m_ModelName = "Platinum File Media Server"; + device->m_Manufacturer = "Plutinosoft"; + device->m_ManufacturerURL = "http://www.plutinosoft.com/"; + + upnp.AddDevice(device); + NPT_String uuid = device->GetUUID(); + + NPT_CHECK_SEVERE(upnp.Start()); + NPT_LOG_INFO("Press 'q' to quit."); + + char buf[256]; + while (gets(buf)) { + if (*buf == 'q') + break; + } + + upnp.Stop(); + + return 0; +} diff --git a/lib/libUPnP/Platinum/Source/Tests/Http/HttpTest.cpp b/lib/libUPnP/Platinum/Source/Tests/Http/HttpTest.cpp new file mode 100644 index 0000000..00b1f52 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/Http/HttpTest.cpp @@ -0,0 +1,526 @@ +/***************************************************************** +| +| Platinum - HTTP tests +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "Neptune.h" +#include "PltTaskManager.h" +#include "PltHttpServer.h" +#include "PltDownloader.h" +#include "PltRingBufferStream.h" + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +NPT_SET_LOCAL_LOGGER("platinum.core.http.test") + +//#define TEST1 +//#define TEST2 +//#define TEST3 +//#define TEST4 +#define TEST5 + +/*---------------------------------------------------------------------- +| globals ++---------------------------------------------------------------------*/ +struct Options { + NPT_UInt32 port; + NPT_String path; +} Options; + +/*---------------------------------------------------------------------- +| PLT_HttpCustomRequestHandler ++---------------------------------------------------------------------*/ +class PLT_HttpCustomRequestHandler : public NPT_HttpRequestHandler +{ +public: + // constructors + PLT_HttpCustomRequestHandler(NPT_InputStreamReference& body, + const char* mime_type, + bool update_content_length = false) : + m_Body(body), + m_MimeType(mime_type), + m_UpdateContentLength(update_content_length) {} + + // NPT_HttpRequetsHandler methods + virtual NPT_Result SetupResponse(NPT_HttpRequest& request, + const NPT_HttpRequestContext& context, + NPT_HttpResponse& response) { + NPT_COMPILER_UNUSED(request); + NPT_COMPILER_UNUSED(context); + + NPT_HttpEntity* entity = response.GetEntity(); + if (entity == NULL) return NPT_ERROR_INVALID_STATE; + + entity->SetContentType(m_MimeType); + entity->SetInputStream(m_Body, m_UpdateContentLength); + + return NPT_SUCCESS; + } + +private: + NPT_InputStreamReference m_Body; + NPT_String m_MimeType; + bool m_UpdateContentLength; +}; + + +#ifdef TEST1 +/*---------------------------------------------------------------------- +| Test1 ++---------------------------------------------------------------------*/ +static bool +Test1(PLT_TaskManager* task_manager, NPT_HttpUrl url, NPT_Size& size) +{ + NPT_LOG_INFO("########### TEST 1 ######################"); + + NPT_MemoryStreamReference memory_stream(new NPT_MemoryStream()); + NPT_OutputStreamReference output_stream(memory_stream); + PLT_Downloader downloader(task_manager, url, output_stream); + downloader.Start(); + + while (1) { + switch(downloader.GetState()) { + case PLT_DOWNLOADER_SUCCESS: { + size = memory_stream->GetDataSize(); + return true; + } + + case PLT_DOWNLOADER_ERROR: + return false; + + default: + NPT_System::Sleep(NPT_TimeInterval(.1f)); + break; + } + }; + + return false; +} +#endif + +#ifdef TEST2 +/*---------------------------------------------------------------------- +| DumpBody ++---------------------------------------------------------------------*/ +static NPT_Result +ReadBody(PLT_Downloader& downloader, NPT_InputStreamReference& stream, NPT_Size& size) +{ + NPT_LargeSize avail; + char buffer[2048]; + NPT_Result ret = NPT_ERROR_WOULD_BLOCK; + + /* reset output param first */ + size = 0; + + /* + we test for availability first to avoid + getting stuck in Read forever in case blocking is true + and the download is done writing to the stream + */ + NPT_CHECK(stream->GetAvailable(avail)); + + if (avail) { + ret = stream->Read(buffer, 2048, &size); + NPT_LOG_FINER_2("Read %d bytes (result = %d)\n", size, ret); + return ret; + } else { + Plt_DowloaderState state = downloader.GetState(); + switch (state) { + case PLT_DOWNLOADER_ERROR: + return NPT_FAILURE; + + case PLT_DOWNLOADER_SUCCESS: + /* no more data expected */ + return NPT_ERROR_EOS; + + default: + NPT_System::Sleep(NPT_TimeInterval(.1f)); + break; + } + } + + return NPT_SUCCESS; +} + +/*---------------------------------------------------------------------- +| Test2 ++---------------------------------------------------------------------*/ +static bool +Test2(PLT_TaskManager* task_manager, NPT_HttpUrl url, NPT_Size& size) +{ + NPT_LOG_INFO("########### TEST 2 ######################"); + + /* reset output param first */ + size = 0; + + PLT_RingBufferStreamReference ringbuffer_stream(new PLT_RingBufferStream()); + NPT_OutputStreamReference output_stream(ringbuffer_stream); + NPT_InputStreamReference input_stream(ringbuffer_stream); + PLT_Downloader downloader(task_manager, url, output_stream); + downloader.Start(); + + while (1) { + switch(downloader.GetState()) { + case PLT_DOWNLOADER_SUCCESS: + ringbuffer_stream->SetEOS(); + /* fallthrough */ + + case PLT_DOWNLOADER_DOWNLOADING: { + NPT_Size bytes_read; + NPT_Result res = ReadBody(downloader, input_stream, bytes_read); + if (NPT_FAILED(res)) { + return (res==NPT_ERROR_EOS)?true:false; + } + size += bytes_read; + } + break; + + case PLT_DOWNLOADER_ERROR: + return false; + + default: + NPT_System::Sleep(NPT_TimeInterval(.1f)); + break; + } + }; + + return false; +} +#endif + + +#ifdef TEST3 +class RingBufferWriterTask : public PLT_ThreadTask +{ +public: + RingBufferWriterTask(PLT_RingBufferStreamReference& ringbuffer_stream) + : m_RingBufferStream(ringbuffer_stream) {} + + // PLT_ThreadTask methods + virtual void DoRun() { + char buffer[32768]; + m_RingBufferStream->WriteFully(buffer, 32768); + + /* mark as done */ + m_RingBufferStream->SetEOS(); + } + +private: + PLT_RingBufferStreamReference m_RingBufferStream; +}; + +/*---------------------------------------------------------------------- +| Test3 ++---------------------------------------------------------------------*/ +static bool +Test3(PLT_TaskManager* task_manager, NPT_HttpUrl url, PLT_RingBufferStreamReference& ringbuffer_stream, NPT_Size& size) +{ + NPT_LOG_INFO("########### TEST 3 ######################"); + + /* reset output param first */ + size = 0; + + NPT_MemoryStreamReference memory_stream(new NPT_MemoryStream()); + NPT_OutputStreamReference output_stream(memory_stream); + PLT_Downloader downloader(task_manager, url, output_stream); + downloader.Start(); + + /* asynchronously write onto ring buffer stream */ + task_manager->StartTask(new RingBufferWriterTask(ringbuffer_stream)); + + /* start pulling data */ + while (1) { + switch(downloader.GetState()) { + case PLT_DOWNLOADER_SUCCESS: + size = memory_stream->GetDataSize(); + return true; + + case PLT_DOWNLOADER_ERROR: + return false; + + default: + NPT_System::Sleep(NPT_TimeInterval(.1f)); + break; + } + }; + + return false; +} +#endif + +#ifdef TEST4 +class ClientStuckTask : public PLT_ThreadTask +{ +public: + ClientStuckTask(NPT_HttpUrl& url, NPT_HttpClient& client) + : m_Url(url), m_Client(client) {} + + // PLT_ThreadTask methods + virtual void DoRun() { + NPT_HttpRequest request(m_Url, NPT_HTTP_METHOD_GET); + NPT_HttpResponse* response = NULL; + m_Client.SendRequest(request, response); + } + + virtual void DoAbort() { + m_Client.Abort(); + } + +private: + NPT_HttpUrl m_Url; + NPT_HttpClient& m_Client; + bool m_Aborted; +}; +/*---------------------------------------------------------------------- +| Test4 ++---------------------------------------------------------------------*/ +static bool +Test4(PLT_TaskManager* task_manager, NPT_HttpUrl url, NPT_TimeInterval wait_before_kill) +{ + NPT_LOG_INFO("########### TEST 4 ######################"); + + NPT_HttpClient client; + + /* start task to asynchronously fetch url */ + ClientStuckTask* task = new ClientStuckTask(url, client); + task_manager->StartTask(task, NULL, false); + + /* wait a bit and abort client */ + NPT_System::Sleep(wait_before_kill); + + task->Kill(); + return true; +} +#endif + +#ifdef TEST5 +/*---------------------------------------------------------------------- +| Test5 ++---------------------------------------------------------------------*/ +static bool +Test5(NPT_HttpUrl url) +{ + NPT_LOG_INFO("########### TEST 5 ######################"); + + NPT_HttpClient client; + + // first request + NPT_HttpRequest request(url, NPT_HTTP_METHOD_POST, NPT_HTTP_PROTOCOL_1_1); + NPT_HttpEntity* request_entity = new NPT_HttpEntity(); + request_entity->SetInputStream("Testing"); + request.SetEntity(request_entity); + + NPT_HttpResponse* response = NULL; + client.SendRequest(request, response); + NPT_HttpEntity* entity = NULL; + if (response && (entity = response->GetEntity())) { + NPT_DataBuffer buffer; + if (NPT_FAILED(entity->Load(buffer))) return false; + } + + // try again + delete response; + response = NULL; + request_entity = new NPT_HttpEntity(); + request_entity->SetInputStream("Testing2"); + request.SetEntity(request_entity); + client.SendRequest(request, response); + entity = NULL; + if (response && (entity = response->GetEntity())) { + NPT_DataBuffer buffer; + if (NPT_FAILED(entity->Load(buffer))) return false; + } + + return true; +} +#endif + +/*---------------------------------------------------------------------- +| PrintUsageAndExit ++---------------------------------------------------------------------*/ +static void +PrintUsageAndExit(char** args) +{ + fprintf(stderr, "usage: %s [-p <port>] [-f <filepath>]\n", args[0]); + fprintf(stderr, "-p : optional server port\n"); + fprintf(stderr, "-f : optional local filepath to serve\n"); + exit(1); +} + +/*---------------------------------------------------------------------- +| ParseCommandLine ++---------------------------------------------------------------------*/ +static void +ParseCommandLine(char** args) +{ + const char* arg; + char** tmp = args+1; + + /* default values */ + Options.port = 0; + Options.path = ""; + + while ((arg = *tmp++)) { + if (Options.port == 0 && !strcmp(arg, "-p")) { + NPT_UInt32 port; + if (NPT_FAILED(NPT_ParseInteger32(*tmp++, port, false))) { + fprintf(stderr, "ERROR: invalid port\n"); + exit(1); + } + Options.port = port; + } else if (Options.path.IsEmpty() && !strcmp(arg, "-f")) { + Options.path = *tmp++; + } else { + fprintf(stderr, "ERROR: too many arguments\n"); + PrintUsageAndExit(args); + } + } +} + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int argc, char** argv) +{ + NPT_COMPILER_UNUSED(argc); + + NPT_HttpRequestHandler* handler; + NPT_Reference<NPT_DataBuffer> buffer; + bool result; + + /* parse command line */ + ParseCommandLine(argv); + + /* create http server */ + PLT_HttpServer http_server(Options.port?Options.port:8089); + NPT_String url; + + if (!Options.path.IsEmpty()) { + /* extract folder path */ + int index1 = Options.path.ReverseFind('\\'); + int index2 = Options.path.ReverseFind('/'); + if (index1 <= 0 && index2 <=0) { + fprintf(stderr, "ERROR: invalid path\n"); + exit(1); + } + + NPT_FileInfo info; + NPT_CHECK_SEVERE(NPT_File::GetInfo(Options.path, &info)); + + /* add file request handler */ + handler = new NPT_HttpFileRequestHandler( + Options.path.Left(index1>index2?index1:index2), + "/"); + http_server.AddRequestHandler(handler, "/", true); + + /* build url */ + url = "/" + Options.path.SubString((index1>index2?index1:index2)+1); + } else { + /* create random garbage data */ + buffer = new NPT_DataBuffer(32768); + buffer->SetDataSize(32768); + + /* add static handler */ + handler = new NPT_HttpStaticRequestHandler(buffer->GetData(), + buffer->GetDataSize(), + "application/octet-stream"); + http_server.AddRequestHandler(handler, "/test"); + + /* build url */ + url = "/test"; + } + + /* add custom handler */ + PLT_RingBufferStreamReference ringbuffer_stream(new PLT_RingBufferStream()); + NPT_InputStreamReference stream(ringbuffer_stream); + NPT_HttpRequestHandler* custom_handler = new PLT_HttpCustomRequestHandler(stream, "text/xml"); + http_server.AddRequestHandler(custom_handler, "/custom"); + + /* start server */ + NPT_CHECK_SEVERE(http_server.Start()); + + /* a task manager for the tests downloader */ + PLT_TaskManager task_manager; + + /* small delay to let the server start */ + NPT_System::Sleep(NPT_TimeInterval(1.f)); + + /* execute tests */ + NPT_Size size; + NPT_COMPILER_UNUSED(size); + +#ifdef TEST1 + result = Test1(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), url), size); + if (!result) return -1; +#endif + +#ifdef TEST2 + result = Test2(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), url), size); + if (!result) return -1; +#endif + +#ifdef TEST3 + result = Test3(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), ringbuffer_stream, size); + if (!result) return -1; +#endif + +#ifdef TEST4 + result = Test4(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), NPT_TimeInterval(.1f)); + if (!result) return -1; + + result = Test4(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), NPT_TimeInterval(1.f)); + if (!result) return -1; + + result = Test4(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), NPT_TimeInterval(2.f)); + if (!result) return -1; +#endif + +#ifdef TEST5 + result = Test5(NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/test")); + if (!result) return -1; +#endif + + NPT_System::Sleep(NPT_TimeInterval(1.f)); + + // abort server tasks that are waiting on ring buffer stream + ringbuffer_stream->Abort(); + + http_server.Stop(); + + return 0; +} diff --git a/lib/libUPnP/Platinum/Source/Tests/LightSample/LightSampleTest.cpp b/lib/libUPnP/Platinum/Source/Tests/LightSample/LightSampleTest.cpp new file mode 100644 index 0000000..d9f35a0 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/LightSample/LightSampleTest.cpp @@ -0,0 +1,76 @@ +/***************************************************************** +| +| Platinum - Test Light Device +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "PltUPnP.h" +#include "PltLightSample.h" + +#define TEST_EMBEDDED_DEVICE 1 + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int /* argc */, char** /* argv */) +{ + // setup Neptune logging + NPT_LogManager::GetDefault().Configure("plist:.level=FINE;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=42"); + + PLT_UPnP upnp; + + PLT_DeviceHostReference device(new PLT_LightSampleDevice("Platinum Light Bulb")); + +#ifdef TEST_EMBEDDED_DEVICE + PLT_DeviceDataReference device2(new PLT_LightSampleDevice("Platinum Light Bulb embed 1")); + device->AddEmbeddedDevice((PLT_DeviceDataReference&)device2); + + PLT_DeviceDataReference device3(new PLT_LightSampleDevice("Platinum Light Bulb embed 2")); + device->AddEmbeddedDevice(device3); +#endif + + upnp.AddDevice(device); + upnp.Start(); + + char buf[256]; + while (gets(buf)) { + if (*buf == 'q') + break; + } + + upnp.Stop(); + + return 0; +} diff --git a/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.cpp b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.cpp new file mode 100644 index 0000000..f31ffe1 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.cpp @@ -0,0 +1,171 @@ +/***************************************************************** +| +| Platinum - Light Sample Device +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "Neptune.h" +#include "Platinum.h" +#include "PltLightSample.h" + +NPT_SET_LOCAL_LOGGER("platinum.test.lightsample") + +/*---------------------------------------------------------------------- +| forward references ++---------------------------------------------------------------------*/ +extern NPT_UInt8 SCPDXML[]; + +/*---------------------------------------------------------------------- +| PLT_LightSampleDevice::PLT_LightSampleDevice ++---------------------------------------------------------------------*/ +PLT_LightSampleDevice::PLT_LightSampleDevice(const char* FriendlyName, const char* UUID) : + PLT_DeviceHost("/", UUID, "urn:schemas-upnp-org:device:SwitchPower:1", FriendlyName) +{ +} + +/*---------------------------------------------------------------------- +| PLT_LightSampleDevice::~PLT_LightSampleDevice ++---------------------------------------------------------------------*/ +PLT_LightSampleDevice::~PLT_LightSampleDevice() +{ +} + +/*---------------------------------------------------------------------- +| PLT_LightSampleDevice::SetupServices ++---------------------------------------------------------------------*/ +NPT_Result +PLT_LightSampleDevice::SetupServices() +{ + NPT_Result res; + PLT_Service* service = new PLT_Service( + this, + "urn:schemas-upnp-org:service:SwitchPower:1", + "urn:upnp-org:serviceId:SwitchPower.001", + "SwitchPower"); + NPT_CHECK_LABEL_FATAL(res = service->SetSCPDXML((const char*)SCPDXML), failure); + NPT_CHECK_LABEL_FATAL(res = AddService(service), failure); + + service->SetStateVariable("Status", "True"); + + return NPT_SUCCESS; + +failure: + delete service; + return res; +} + +/*---------------------------------------------------------------------- +| PLT_LightSampleDevice::OnAction ++---------------------------------------------------------------------*/ +NPT_Result +PLT_LightSampleDevice::OnAction(PLT_ActionReference& action, + const PLT_HttpRequestContext& context) +{ + NPT_COMPILER_UNUSED(context); + + /* parse the action name */ + NPT_String name = action->GetActionDesc().GetName(); + if (name.Compare("SetTarget") == 0) { + NPT_String value; + action->GetArgumentValue("newTargetValue", value); + + PLT_StateVariable* variable = action->GetActionDesc().GetService()->FindStateVariable("Status"); + if (NPT_FAILED(variable->SetValue(value))) { + action->SetError(402, "Invalid Args"); + return NPT_FAILURE; + } + return NPT_SUCCESS; + } else if (name.Compare("GetStatus") == 0) { + PLT_StateVariable* variable = action->GetActionDesc().GetService()->FindStateVariable("Status"); + if (variable) { + action->SetArgumentValue("ResultStatus", variable->GetValue()); + return NPT_SUCCESS; + } + } + + action->SetError(501, "Action Failed"); + return NPT_FAILURE; +} + +NPT_UInt8 SCPDXML[957] = +{ + 0x20, 0x20, 0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22, 0x31, 0x2E, 0x30, + 0x22, 0x20, 0x65, 0x6E, 0x63, 0x6F, 0x64, 0x69, 0x6E, 0x67, 0x3D, 0x22, 0x75, 0x74, 0x66, 0x2D, 0x38, 0x22, 0x20, 0x3F, + 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73, 0x63, 0x70, 0x64, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3D, 0x22, 0x75, + 0x72, 0x6E, 0x3A, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x73, 0x2D, 0x75, 0x70, 0x6E, 0x70, 0x2D, 0x6F, 0x72, 0x67, 0x3A, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2D, 0x31, 0x2D, 0x30, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73, 0x70, + 0x65, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6D, 0x61, 0x6A, 0x6F, 0x72, + 0x3E, 0x31, 0x3C, 0x2F, 0x6D, 0x61, 0x6A, 0x6F, 0x72, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6D, 0x69, 0x6E, 0x6F, + 0x72, 0x3E, 0x30, 0x3C, 0x2F, 0x6D, 0x69, 0x6E, 0x6F, 0x72, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x70, + 0x65, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x63, 0x74, 0x69, 0x6F, + 0x6E, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, + 0x20, 0x20, 0x3C, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C, 0x2F, 0x6E, + 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x4C, 0x69, + 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20, + 0x20, 0x3C, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x52, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C, + 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, + 0x6E, 0x3E, 0x6F, 0x75, 0x74, 0x3C, 0x2F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x20, 0x0D, 0x0A, + 0x20, 0x20, 0x3C, 0x72, 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6C, 0x65, 0x3E, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C, 0x2F, 0x72, 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, + 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x72, 0x67, 0x75, 0x6D, + 0x65, 0x6E, 0x74, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, + 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61, + 0x6D, 0x65, 0x3E, 0x53, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3C, 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20, + 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, + 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61, 0x6D, + 0x65, 0x3E, 0x6E, 0x65, 0x77, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3C, 0x2F, 0x6E, 0x61, + 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x69, + 0x6E, 0x3C, 0x2F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x72, + 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3C, 0x2F, 0x72, 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x72, 0x67, 0x75, + 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x4C, + 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20, + 0x20, 0x3C, 0x2F, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20, + 0x20, 0x3C, 0x73, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64, + 0x45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x3D, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61, + 0x6D, 0x65, 0x3E, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C, 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, + 0x20, 0x3C, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x3E, 0x62, 0x6F, 0x6F, 0x6C, 0x65, 0x61, 0x6E, 0x3C, 0x2F, + 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x3D, + 0x22, 0x6E, 0x6F, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3C, 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, + 0x70, 0x65, 0x3E, 0x62, 0x6F, 0x6F, 0x6C, 0x65, 0x61, 0x6E, 0x3C, 0x2F, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, + 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x54, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x63, 0x70, 0x64, 0x3E +}; diff --git a/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.h b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.h new file mode 100644 index 0000000..a23e8ff --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.h @@ -0,0 +1,59 @@ +/***************************************************************** +| +| Platinum - Light Sample Device +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +#ifndef _PLT_LIGHT_SAMPLE_H_ +#define _PLT_LIGHT_SAMPLE_H_ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "PltDeviceHost.h" + +/*---------------------------------------------------------------------- +| PLT_LightSampleDevice class ++---------------------------------------------------------------------*/ +class PLT_LightSampleDevice : public PLT_DeviceHost +{ +public: + PLT_LightSampleDevice(const char* FriendlyName, + const char* UUID = ""); + virtual ~PLT_LightSampleDevice(); + + // PLT_DeviceHost methods + virtual NPT_Result SetupServices(); + virtual NPT_Result OnAction(PLT_ActionReference& action, + const PLT_HttpRequestContext& context); +}; + +#endif /* _PLT_LIGHT_SAMPLE_H_ */ diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaRenderer/MediaRendererTest.cpp b/lib/libUPnP/Platinum/Source/Tests/MediaRenderer/MediaRendererTest.cpp new file mode 100644 index 0000000..54d9d24 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaRenderer/MediaRendererTest.cpp @@ -0,0 +1,121 @@ +/***************************************************************** +| +| Platinum - Test UPnP A/V MediaRenderer +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| + ****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "PltUPnP.h" +#include "PltMediaRenderer.h" + +#include <stdlib.h> + +/*---------------------------------------------------------------------- +| globals ++---------------------------------------------------------------------*/ +struct Options { + const char* friendly_name; +} Options; + +/*---------------------------------------------------------------------- +| PrintUsageAndExit ++---------------------------------------------------------------------*/ +static void +PrintUsageAndExit(char** args) +{ + fprintf(stderr, "usage: %s [-f <friendly_name>]\n", args[0]); + fprintf(stderr, "-f : optional upnp server friendly name\n"); + fprintf(stderr, "<path> : local path to serve\n"); + exit(1); +} + +/*---------------------------------------------------------------------- +| ParseCommandLine ++---------------------------------------------------------------------*/ +static void +ParseCommandLine(char** args) +{ + const char* arg; + char** tmp = args+1; + + /* default values */ + Options.friendly_name = NULL; + + while ((arg = *tmp++)) { + if (!strcmp(arg, "-f")) { + Options.friendly_name = *tmp++; + } else { + fprintf(stderr, "ERROR: too many arguments\n"); + PrintUsageAndExit(args); + } + } +} + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int /* argc */, char** argv) +{ + PLT_UPnP upnp; + + /* parse command line */ + ParseCommandLine(argv); + + PLT_DeviceHostReference device( + new PLT_MediaRenderer(Options.friendly_name?Options.friendly_name:"Platinum Media Renderer", + false, + "e6572b54-f3c7-2d91-2fb5-b757f2537e21")); + upnp.AddDevice(device); + bool added = true; + + upnp.Start(); + + char buf[256]; + while (gets(buf)) { + if (*buf == 'q') + break; + + if (*buf == 's') { + if (added) { + upnp.RemoveDevice(device); + } else { + upnp.AddDevice(device); + } + added = !added; + } + } + + upnp.Stop(); + return 0; +} diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/InfoPlist.strings b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..b92732c --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* Localized versions of Info.plist keys */ diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/MainMenu.xib b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/MainMenu.xib new file mode 100644 index 0000000..8d4fb5c --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/MainMenu.xib @@ -0,0 +1,3224 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> + <data> + <int key="IBDocument.SystemTarget">1050</int> + <string key="IBDocument.SystemVersion">10F569</string> + <string key="IBDocument.InterfaceBuilderVersion">788</string> + <string key="IBDocument.AppKitVersion">1038.29</string> + <string key="IBDocument.HIToolboxVersion">461.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">788</string> + </object> + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="2"/> + </object> + <object class="NSArray" key="IBDocument.PluginDependencies"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys" id="0"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.RootObjects" id="53522055"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomObject" id="493647166"> + <object class="NSMutableString" key="NSClassName"> + <characters key="NS.bytes">NSApplication</characters> + </object> + </object> + <object class="NSCustomObject" id="909243075"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="547858435"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSWindowTemplate" id="483958638"> + <int key="NSWindowStyleMask">15</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{6, 593}, {480, 360}}</string> + <int key="NSWTFlags">1886912512</int> + <string key="NSWindowTitle">MediaServerCocoaTest</string> + <string key="NSWindowClass">NSWindow</string> + <object class="NSMutableString" key="NSViewClass"> + <characters key="NS.bytes">View</characters> + </object> + <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> + <string key="NSWindowContentMinSize">{213, 107}</string> + <object class="NSView" key="NSWindowView" id="823886803"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSButton" id="544612128"> + <reference key="NSNextResponder" ref="823886803"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{19, 312}, {96, 32}}</string> + <reference key="NSSuperview" ref="823886803"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="879879405"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Start</string> + <object class="NSFont" key="NSSupport" id="293448079"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">13</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="544612128"/> + <int key="NSButtonFlags">-927579905</int> + <int key="NSButtonFlags2">1</int> + <reference key="NSAlternateImage" ref="293448079"/> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + </object> + <string key="NSFrameSize">{480, 360}</string> + <reference key="NSSuperview"/> + </object> + <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string> + <string key="NSMinSize">{213, 129}</string> + <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> + </object> + <object class="NSMenu" id="1055885701"> + <string key="NSTitle">MainMenu</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="376192112"> + <reference key="NSMenu" ref="1055885701"/> + <string key="NSTitle">MediaServerCocoaTest</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <object class="NSCustomResource" key="NSOnImage" id="893455832"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="424226900"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="123765298"> + <string key="NSTitle">MediaServerCocoaTest</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="743093781"> + <reference key="NSMenu" ref="123765298"/> + <string key="NSTitle">About MediaServerCocoaTest</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="791044830"> + <reference key="NSMenu" ref="123765298"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="124073989"> + <reference key="NSMenu" ref="123765298"/> + <string key="NSTitle">Preferences…</string> + <string key="NSKeyEquiv">,</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="621602699"> + <reference key="NSMenu" ref="123765298"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="515282677"> + <reference key="NSMenu" ref="123765298"/> + <string key="NSTitle">Services</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="939189088"> + <object class="NSMutableString" key="NSTitle"> + <characters key="NS.bytes">Services</characters> + </object> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <string key="NSName">_NSServicesMenu</string> + </object> + </object> + <object class="NSMenuItem" id="931166327"> + <reference key="NSMenu" ref="123765298"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="780549861"> + <reference key="NSMenu" ref="123765298"/> + <string key="NSTitle">Hide MediaServerCocoaTest</string> + <string key="NSKeyEquiv">h</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="514007154"> + <reference key="NSMenu" ref="123765298"/> + <string key="NSTitle">Hide Others</string> + <string key="NSKeyEquiv">h</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="163840636"> + <reference key="NSMenu" ref="123765298"/> + <string key="NSTitle">Show All</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="901869444"> + <reference key="NSMenu" ref="123765298"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="349823970"> + <reference key="NSMenu" ref="123765298"/> + <string key="NSTitle">Quit MediaServerCocoaTest</string> + <string key="NSKeyEquiv">q</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + <string key="NSName">_NSAppleMenu</string> + </object> + </object> + <object class="NSMenuItem" id="842783111"> + <reference key="NSMenu" ref="1055885701"/> + <string key="NSTitle">File</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="960517776"> + <object class="NSMutableString" key="NSTitle"> + <characters key="NS.bytes">File</characters> + </object> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="1005751409"> + <reference key="NSMenu" ref="960517776"/> + <string key="NSTitle">Save</string> + <string key="NSKeyEquiv">s</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="402151840"> + <reference key="NSMenu" ref="960517776"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="620705007"> + <reference key="NSMenu" ref="960517776"/> + <string key="NSTitle">Page Setup…</string> + <string key="NSKeyEquiv">P</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="51940822"> + <reference key="NSMenu" ref="960517776"/> + <string key="NSTitle">Print…</string> + <string key="NSKeyEquiv">p</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="545718297"> + <reference key="NSMenu" ref="1055885701"/> + <string key="NSTitle">Edit</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="1022019938"> + <string key="NSTitle">Edit</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="307109690"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Undo</string> + <string key="NSKeyEquiv">z</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="744402274"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Redo</string> + <string key="NSKeyEquiv">Z</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="831119715"> + <reference key="NSMenu" ref="1022019938"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="70873500"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Cut</string> + <string key="NSKeyEquiv">x</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="808304593"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Copy</string> + <string key="NSKeyEquiv">c</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="597871667"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Paste</string> + <string key="NSKeyEquiv">v</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="324532357"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Paste and Match Style</string> + <string key="NSKeyEquiv">V</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="618358412"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Delete</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="883438165"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Select All</string> + <string key="NSKeyEquiv">a</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="473717252"> + <reference key="NSMenu" ref="1022019938"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="69846141"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Find</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="216314426"> + <string key="NSTitle">Find</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="914446540"> + <reference key="NSMenu" ref="216314426"/> + <string key="NSTitle">Find…</string> + <string key="NSKeyEquiv">f</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">1</int> + </object> + <object class="NSMenuItem" id="160366792"> + <reference key="NSMenu" ref="216314426"/> + <string key="NSTitle">Find Next</string> + <string key="NSKeyEquiv">g</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">2</int> + </object> + <object class="NSMenuItem" id="248661547"> + <reference key="NSMenu" ref="216314426"/> + <string key="NSTitle">Find Previous</string> + <string key="NSKeyEquiv">G</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">3</int> + </object> + <object class="NSMenuItem" id="30033296"> + <reference key="NSMenu" ref="216314426"/> + <string key="NSTitle">Use Selection for Find</string> + <string key="NSKeyEquiv">e</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">7</int> + </object> + <object class="NSMenuItem" id="827334636"> + <reference key="NSMenu" ref="216314426"/> + <string key="NSTitle">Jump to Selection</string> + <string key="NSKeyEquiv">j</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="365048869"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Spelling and Grammar</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="666968844"> + <string key="NSTitle">Spelling</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="356339891"> + <reference key="NSMenu" ref="666968844"/> + <string key="NSTitle">Show Spelling and Grammar</string> + <string key="NSKeyEquiv">:</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="416352713"> + <reference key="NSMenu" ref="666968844"/> + <string key="NSTitle">Check Document Now</string> + <string key="NSKeyEquiv">;</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="47615281"> + <reference key="NSMenu" ref="666968844"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="252035059"> + <reference key="NSMenu" ref="666968844"/> + <string key="NSTitle">Check Spelling While Typing</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="286376998"> + <reference key="NSMenu" ref="666968844"/> + <string key="NSTitle">Check Grammar With Spelling</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="81755183"> + <reference key="NSMenu" ref="666968844"/> + <string key="NSTitle">Correct Spelling Automatically</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="958645126"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Substitutions</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="218631249"> + <string key="NSTitle">Substitutions</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="64764928"> + <reference key="NSMenu" ref="218631249"/> + <string key="NSTitle">Show Substitutions</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="136936362"> + <reference key="NSMenu" ref="218631249"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="607672977"> + <reference key="NSMenu" ref="218631249"/> + <string key="NSTitle">Smart Copy/Paste</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="484928874"> + <reference key="NSMenu" ref="218631249"/> + <string key="NSTitle">Smart Quotes</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="693070189"> + <reference key="NSMenu" ref="218631249"/> + <string key="NSTitle">Smart Dashes</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="1059551809"> + <reference key="NSMenu" ref="218631249"/> + <string key="NSTitle">Smart Links</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="416554597"> + <reference key="NSMenu" ref="218631249"/> + <string key="NSTitle">Text Replacement</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="814247416"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Transformations</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="562140037"> + <string key="NSTitle">Transformations</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="698135111"> + <reference key="NSMenu" ref="562140037"/> + <string key="NSTitle">Make Upper Case</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="899181471"> + <reference key="NSMenu" ref="562140037"/> + <string key="NSTitle">Make Lower Case</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="582459168"> + <reference key="NSMenu" ref="562140037"/> + <string key="NSTitle">Capitalize</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="1058116061"> + <reference key="NSMenu" ref="1022019938"/> + <string key="NSTitle">Speech</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="792127484"> + <string key="NSTitle">Speech</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="318734362"> + <reference key="NSMenu" ref="792127484"/> + <string key="NSTitle">Start Speaking</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="612849471"> + <reference key="NSMenu" ref="792127484"/> + <string key="NSTitle">Stop Speaking</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="259022320"> + <reference key="NSMenu" ref="1055885701"/> + <string key="NSTitle">Format</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="708542952"> + <string key="NSTitle">Format</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="1044121641"> + <reference key="NSMenu" ref="708542952"/> + <string key="NSTitle">Font</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="16789759"> + <string key="NSTitle">Font</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="486510693"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Show Fonts</string> + <string key="NSKeyEquiv">t</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="322671057"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Bold</string> + <string key="NSKeyEquiv">b</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">2</int> + </object> + <object class="NSMenuItem" id="294925675"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Italic</string> + <string key="NSKeyEquiv">i</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">1</int> + </object> + <object class="NSMenuItem" id="386587767"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Underline</string> + <string key="NSKeyEquiv">u</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="530490813"> + <reference key="NSMenu" ref="16789759"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="791073707"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Bigger</string> + <string key="NSKeyEquiv">+</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">3</int> + </object> + <object class="NSMenuItem" id="820131188"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Smaller</string> + <string key="NSKeyEquiv">-</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <int key="NSTag">4</int> + </object> + <object class="NSMenuItem" id="593643800"> + <reference key="NSMenu" ref="16789759"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="17067790"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Kern</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="277000559"> + <string key="NSTitle">Kern</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="53041874"> + <reference key="NSMenu" ref="277000559"/> + <string key="NSTitle">Use Default</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="665619559"> + <reference key="NSMenu" ref="277000559"/> + <string key="NSTitle">Use None</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="807093337"> + <reference key="NSMenu" ref="277000559"/> + <string key="NSTitle">Tighten</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="81316040"> + <reference key="NSMenu" ref="277000559"/> + <string key="NSTitle">Loosen</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="654563803"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Ligature</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="164619877"> + <string key="NSTitle">Ligature</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="291130592"> + <reference key="NSMenu" ref="164619877"/> + <string key="NSTitle">Use Default</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="557989785"> + <reference key="NSMenu" ref="164619877"/> + <string key="NSTitle">Use None</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="8023761"> + <reference key="NSMenu" ref="164619877"/> + <string key="NSTitle">Use All</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="35184653"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Baseline</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="1040787833"> + <string key="NSTitle">Baseline</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="299485767"> + <reference key="NSMenu" ref="1040787833"/> + <string key="NSTitle">Use Default</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="362581379"> + <reference key="NSMenu" ref="1040787833"/> + <string key="NSTitle">Superscript</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="368049810"> + <reference key="NSMenu" ref="1040787833"/> + <string key="NSTitle">Subscript</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="650703522"> + <reference key="NSMenu" ref="1040787833"/> + <string key="NSTitle">Raise</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="470064337"> + <reference key="NSMenu" ref="1040787833"/> + <string key="NSTitle">Lower</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="638669489"> + <reference key="NSMenu" ref="16789759"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="169445129"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Show Colors</string> + <string key="NSKeyEquiv">C</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="511988305"> + <reference key="NSMenu" ref="16789759"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="637704817"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Copy Style</string> + <string key="NSKeyEquiv">c</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="684848834"> + <reference key="NSMenu" ref="16789759"/> + <string key="NSTitle">Paste Style</string> + <string key="NSKeyEquiv">v</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + <string key="NSName">_NSFontMenu</string> + </object> + </object> + <object class="NSMenuItem" id="446410933"> + <reference key="NSMenu" ref="708542952"/> + <string key="NSTitle">Text</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="640850853"> + <string key="NSTitle">Text</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="775088230"> + <reference key="NSMenu" ref="640850853"/> + <string key="NSTitle">Align Left</string> + <string key="NSKeyEquiv">{</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="20804296"> + <reference key="NSMenu" ref="640850853"/> + <string key="NSTitle">Center</string> + <string key="NSKeyEquiv">|</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="489997371"> + <reference key="NSMenu" ref="640850853"/> + <string key="NSTitle">Justify</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="766941912"> + <reference key="NSMenu" ref="640850853"/> + <string key="NSTitle">Align Right</string> + <string key="NSKeyEquiv">}</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="831789293"> + <reference key="NSMenu" ref="640850853"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="473944779"> + <reference key="NSMenu" ref="640850853"/> + <string key="NSTitle">Show Ruler</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="405928732"> + <reference key="NSMenu" ref="640850853"/> + <string key="NSTitle">Copy Ruler</string> + <string key="NSKeyEquiv">c</string> + <int key="NSKeyEquivModMask">1310720</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="784305476"> + <reference key="NSMenu" ref="640850853"/> + <string key="NSTitle">Paste Ruler</string> + <string key="NSKeyEquiv">v</string> + <int key="NSKeyEquivModMask">1310720</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="147235865"> + <reference key="NSMenu" ref="1055885701"/> + <string key="NSTitle">View</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="877676881"> + <string key="NSTitle">View</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="653321099"> + <reference key="NSMenu" ref="877676881"/> + <string key="NSTitle">Show Toolbar</string> + <string key="NSKeyEquiv">t</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="854660346"> + <reference key="NSMenu" ref="877676881"/> + <string key="NSTitle">Customize Toolbar…</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="560112995"> + <reference key="NSMenu" ref="1055885701"/> + <string key="NSTitle">Window</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="747245393"> + <object class="NSMutableString" key="NSTitle"> + <characters key="NS.bytes">Window</characters> + </object> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="814052996"> + <reference key="NSMenu" ref="747245393"/> + <string key="NSTitle">Minimize</string> + <string key="NSKeyEquiv">m</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="319459889"> + <reference key="NSMenu" ref="747245393"/> + <string key="NSTitle">Zoom</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="1042829312"> + <reference key="NSMenu" ref="747245393"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + <object class="NSMenuItem" id="1057689233"> + <reference key="NSMenu" ref="747245393"/> + <string key="NSTitle">Bring All to Front</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + <string key="NSName">_NSWindowsMenu</string> + </object> + </object> + <object class="NSMenuItem" id="713319646"> + <reference key="NSMenu" ref="1055885701"/> + <string key="NSTitle">Help</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="508081226"> + <string key="NSTitle">Help</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="954120217"> + <reference key="NSMenu" ref="508081226"/> + <string key="NSTitle">MediaServerCocoaTest Help</string> + <string key="NSKeyEquiv">?</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="893455832"/> + <reference key="NSMixedImage" ref="424226900"/> + </object> + </object> + <string key="NSName">_NSHelpMenu</string> + </object> + </object> + </object> + <string key="NSName">_NSMainMenu</string> + </object> + <object class="NSCustomObject" id="612578685"> + <string key="NSClassName">MediaServerCocoaTest_AppDelegate</string> + </object> + <object class="NSCustomObject" id="39582327"> + <string key="NSClassName">NSFontManager</string> + </object> + <object class="NSCustomObject" id="770142414"> + <string key="NSClassName">MediaServerCocoaTestController</string> + </object> + </object> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <object class="NSMutableArray" key="connectionRecords"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">print:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="51940822"/> + </object> + <int key="connectionID">86</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">runPageLayout:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="620705007"/> + </object> + <int key="connectionID">87</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">terminate:</string> + <reference key="source" ref="493647166"/> + <reference key="destination" ref="349823970"/> + </object> + <int key="connectionID">139</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">orderFrontStandardAboutPanel:</string> + <reference key="source" ref="493647166"/> + <reference key="destination" ref="743093781"/> + </object> + <int key="connectionID">142</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">hideOtherApplications:</string> + <reference key="source" ref="493647166"/> + <reference key="destination" ref="514007154"/> + </object> + <int key="connectionID">146</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">hide:</string> + <reference key="source" ref="493647166"/> + <reference key="destination" ref="780549861"/> + </object> + <int key="connectionID">152</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">unhideAllApplications:</string> + <reference key="source" ref="493647166"/> + <reference key="destination" ref="163840636"/> + </object> + <int key="connectionID">153</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="493647166"/> + <reference key="destination" ref="612578685"/> + </object> + <int key="connectionID">206</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="483958638"/> + <reference key="destination" ref="612578685"/> + </object> + <int key="connectionID">207</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="612578685"/> + <reference key="destination" ref="483958638"/> + </object> + <int key="connectionID">208</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">saveAction:</string> + <reference key="source" ref="612578685"/> + <reference key="destination" ref="1005751409"/> + </object> + <int key="connectionID">211</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performMiniaturize:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="814052996"/> + </object> + <int key="connectionID">247</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performZoom:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="319459889"/> + </object> + <int key="connectionID">248</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">arrangeInFront:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="1057689233"/> + </object> + <int key="connectionID">249</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleToolbarShown:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="653321099"/> + </object> + <int key="connectionID">342</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">runToolbarCustomizationPalette:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="854660346"/> + </object> + <int key="connectionID">343</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">addFontTrait:</string> + <reference key="source" ref="39582327"/> + <reference key="destination" ref="322671057"/> + </object> + <int key="connectionID">393</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">addFontTrait:</string> + <reference key="source" ref="39582327"/> + <reference key="destination" ref="294925675"/> + </object> + <int key="connectionID">394</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">modifyFont:</string> + <reference key="source" ref="39582327"/> + <reference key="destination" ref="820131188"/> + </object> + <int key="connectionID">395</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">orderFrontFontPanel:</string> + <reference key="source" ref="39582327"/> + <reference key="destination" ref="486510693"/> + </object> + <int key="connectionID">396</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">modifyFont:</string> + <reference key="source" ref="39582327"/> + <reference key="destination" ref="791073707"/> + </object> + <int key="connectionID">397</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">raiseBaseline:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="650703522"/> + </object> + <int key="connectionID">398</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">lowerBaseline:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="470064337"/> + </object> + <int key="connectionID">399</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">copyFont:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="637704817"/> + </object> + <int key="connectionID">400</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">subscript:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="368049810"/> + </object> + <int key="connectionID">401</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">superscript:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="362581379"/> + </object> + <int key="connectionID">402</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">tightenKerning:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="807093337"/> + </object> + <int key="connectionID">403</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">underline:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="386587767"/> + </object> + <int key="connectionID">404</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">orderFrontColorPanel:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="169445129"/> + </object> + <int key="connectionID">405</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">useAllLigatures:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="8023761"/> + </object> + <int key="connectionID">406</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">loosenKerning:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="81316040"/> + </object> + <int key="connectionID">407</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">pasteFont:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="684848834"/> + </object> + <int key="connectionID">408</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">unscript:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="299485767"/> + </object> + <int key="connectionID">409</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">useStandardKerning:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="53041874"/> + </object> + <int key="connectionID">410</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">useStandardLigatures:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="291130592"/> + </object> + <int key="connectionID">411</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">turnOffLigatures:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="557989785"/> + </object> + <int key="connectionID">412</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">turnOffKerning:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="665619559"/> + </object> + <int key="connectionID">413</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">alignLeft:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="775088230"/> + </object> + <int key="connectionID">414</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">alignJustified:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="489997371"/> + </object> + <int key="connectionID">415</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">copyRuler:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="405928732"/> + </object> + <int key="connectionID">416</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">alignCenter:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="20804296"/> + </object> + <int key="connectionID">417</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleRuler:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="473944779"/> + </object> + <int key="connectionID">418</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">alignRight:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="766941912"/> + </object> + <int key="connectionID">419</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">pasteRuler:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="784305476"/> + </object> + <int key="connectionID">420</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">capitalizeWord:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="582459168"/> + </object> + <int key="connectionID">489</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cut:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="70873500"/> + </object> + <int key="connectionID">490</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">paste:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="597871667"/> + </object> + <int key="connectionID">491</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleSmartInsertDelete:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="607672977"/> + </object> + <int key="connectionID">492</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticQuoteSubstitution:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="484928874"/> + </object> + <int key="connectionID">493</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">redo:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="744402274"/> + </object> + <int key="connectionID">494</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticDashSubstitution:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="693070189"/> + </object> + <int key="connectionID">495</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleContinuousSpellChecking:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="252035059"/> + </object> + <int key="connectionID">496</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">undo:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="307109690"/> + </object> + <int key="connectionID">497</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleGrammarChecking:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="286376998"/> + </object> + <int key="connectionID">498</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">startSpeaking:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="318734362"/> + </object> + <int key="connectionID">499</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showGuessPanel:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="356339891"/> + </object> + <int key="connectionID">500</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">checkSpelling:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="416352713"/> + </object> + <int key="connectionID">501</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">pasteAsPlainText:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="324532357"/> + </object> + <int key="connectionID">502</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">copy:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="808304593"/> + </object> + <int key="connectionID">503</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">delete:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="618358412"/> + </object> + <int key="connectionID">504</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">lowercaseWord:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="899181471"/> + </object> + <int key="connectionID">505</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">selectAll:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="883438165"/> + </object> + <int key="connectionID">506</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">stopSpeaking:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="612849471"/> + </object> + <int key="connectionID">507</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">orderFrontSubstitutionsPanel:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="64764928"/> + </object> + <int key="connectionID">508</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticTextReplacement:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="416554597"/> + </object> + <int key="connectionID">509</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticLinkDetection:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="1059551809"/> + </object> + <int key="connectionID">510</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">toggleAutomaticSpellingCorrection:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="81755183"/> + </object> + <int key="connectionID">511</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">uppercaseWord:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="698135111"/> + </object> + <int key="connectionID">512</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="160366792"/> + </object> + <int key="connectionID">513</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="30033296"/> + </object> + <int key="connectionID">514</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="914446540"/> + </object> + <int key="connectionID">515</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">centerSelectionInVisibleArea:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="827334636"/> + </object> + <int key="connectionID">516</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">performFindPanelAction:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="248661547"/> + </object> + <int key="connectionID">517</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showHelp:</string> + <reference key="source" ref="909243075"/> + <reference key="destination" ref="954120217"/> + </object> + <int key="connectionID">521</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="770142414"/> + <reference key="destination" ref="483958638"/> + </object> + <int key="connectionID">524</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">mainButton</string> + <reference key="source" ref="770142414"/> + <reference key="destination" ref="544612128"/> + </object> + <int key="connectionID">527</int> + </object> + </object> + <object class="IBMutableOrderedSet" key="objectRecords"> + <object class="NSArray" key="orderedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <reference key="object" ref="0"/> + <reference key="children" ref="53522055"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="493647166"/> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="909243075"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="547858435"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">21</int> + <reference key="object" ref="483958638"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="823886803"/> + </object> + <reference key="parent" ref="0"/> + <string key="objectName">Window</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2</int> + <reference key="object" ref="823886803"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="544612128"/> + </object> + <reference key="parent" ref="483958638"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">29</int> + <reference key="object" ref="1055885701"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="376192112"/> + <reference ref="842783111"/> + <reference ref="560112995"/> + <reference ref="147235865"/> + <reference ref="259022320"/> + <reference ref="545718297"/> + <reference ref="713319646"/> + </object> + <reference key="parent" ref="0"/> + <string key="objectName">MainMenu</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">56</int> + <reference key="object" ref="376192112"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="123765298"/> + </object> + <reference key="parent" ref="1055885701"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">57</int> + <reference key="object" ref="123765298"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="743093781"/> + <reference ref="124073989"/> + <reference ref="515282677"/> + <reference ref="780549861"/> + <reference ref="349823970"/> + <reference ref="621602699"/> + <reference ref="931166327"/> + <reference ref="514007154"/> + <reference ref="901869444"/> + <reference ref="163840636"/> + <reference ref="791044830"/> + </object> + <reference key="parent" ref="376192112"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">58</int> + <reference key="object" ref="743093781"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">129</int> + <reference key="object" ref="124073989"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">131</int> + <reference key="object" ref="515282677"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="939189088"/> + </object> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">130</int> + <reference key="object" ref="939189088"/> + <reference key="parent" ref="515282677"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">134</int> + <reference key="object" ref="780549861"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">136</int> + <reference key="object" ref="349823970"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">143</int> + <reference key="object" ref="621602699"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">144</int> + <reference key="object" ref="931166327"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">145</int> + <reference key="object" ref="514007154"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">149</int> + <reference key="object" ref="901869444"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">150</int> + <reference key="object" ref="163840636"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">196</int> + <reference key="object" ref="791044830"/> + <reference key="parent" ref="123765298"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">83</int> + <reference key="object" ref="842783111"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="960517776"/> + </object> + <reference key="parent" ref="1055885701"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">81</int> + <reference key="object" ref="960517776"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="402151840"/> + <reference ref="1005751409"/> + <reference ref="620705007"/> + <reference ref="51940822"/> + </object> + <reference key="parent" ref="842783111"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">74</int> + <reference key="object" ref="402151840"/> + <reference key="parent" ref="960517776"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">75</int> + <reference key="object" ref="1005751409"/> + <reference key="parent" ref="960517776"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">77</int> + <reference key="object" ref="620705007"/> + <reference key="parent" ref="960517776"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">78</int> + <reference key="object" ref="51940822"/> + <reference key="parent" ref="960517776"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">241</int> + <reference key="object" ref="560112995"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="747245393"/> + </object> + <reference key="parent" ref="1055885701"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">242</int> + <reference key="object" ref="747245393"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1042829312"/> + <reference ref="319459889"/> + <reference ref="1057689233"/> + <reference ref="814052996"/> + </object> + <reference key="parent" ref="560112995"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">243</int> + <reference key="object" ref="1042829312"/> + <reference key="parent" ref="747245393"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">244</int> + <reference key="object" ref="319459889"/> + <reference key="parent" ref="747245393"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">245</int> + <reference key="object" ref="1057689233"/> + <reference key="parent" ref="747245393"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">246</int> + <reference key="object" ref="814052996"/> + <reference key="parent" ref="747245393"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">338</int> + <reference key="object" ref="147235865"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="877676881"/> + </object> + <reference key="parent" ref="1055885701"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">339</int> + <reference key="object" ref="877676881"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="854660346"/> + <reference ref="653321099"/> + </object> + <reference key="parent" ref="147235865"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">340</int> + <reference key="object" ref="854660346"/> + <reference key="parent" ref="877676881"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">341</int> + <reference key="object" ref="653321099"/> + <reference key="parent" ref="877676881"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">205</int> + <reference key="object" ref="612578685"/> + <reference key="parent" ref="0"/> + <string key="objectName">MediaServerCocoaTest_AppDelegate</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">347</int> + <reference key="object" ref="259022320"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="708542952"/> + </object> + <reference key="parent" ref="1055885701"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">348</int> + <reference key="object" ref="708542952"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1044121641"/> + <reference ref="446410933"/> + </object> + <reference key="parent" ref="259022320"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">349</int> + <reference key="object" ref="1044121641"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="16789759"/> + </object> + <reference key="parent" ref="708542952"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">350</int> + <reference key="object" ref="446410933"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="640850853"/> + </object> + <reference key="parent" ref="708542952"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">351</int> + <reference key="object" ref="640850853"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="775088230"/> + <reference ref="20804296"/> + <reference ref="489997371"/> + <reference ref="766941912"/> + <reference ref="831789293"/> + <reference ref="473944779"/> + <reference ref="405928732"/> + <reference ref="784305476"/> + </object> + <reference key="parent" ref="446410933"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">352</int> + <reference key="object" ref="775088230"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">353</int> + <reference key="object" ref="20804296"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">354</int> + <reference key="object" ref="489997371"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">355</int> + <reference key="object" ref="766941912"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">356</int> + <reference key="object" ref="831789293"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">357</int> + <reference key="object" ref="473944779"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">358</int> + <reference key="object" ref="405928732"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">359</int> + <reference key="object" ref="784305476"/> + <reference key="parent" ref="640850853"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">360</int> + <reference key="object" ref="16789759"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="486510693"/> + <reference ref="322671057"/> + <reference ref="294925675"/> + <reference ref="386587767"/> + <reference ref="530490813"/> + <reference ref="791073707"/> + <reference ref="820131188"/> + <reference ref="593643800"/> + <reference ref="17067790"/> + <reference ref="654563803"/> + <reference ref="35184653"/> + <reference ref="638669489"/> + <reference ref="169445129"/> + <reference ref="511988305"/> + <reference ref="637704817"/> + <reference ref="684848834"/> + </object> + <reference key="parent" ref="1044121641"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">361</int> + <reference key="object" ref="486510693"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">362</int> + <reference key="object" ref="322671057"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">363</int> + <reference key="object" ref="294925675"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">364</int> + <reference key="object" ref="386587767"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">365</int> + <reference key="object" ref="530490813"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">366</int> + <reference key="object" ref="791073707"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">367</int> + <reference key="object" ref="820131188"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">368</int> + <reference key="object" ref="593643800"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">369</int> + <reference key="object" ref="17067790"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="277000559"/> + </object> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">370</int> + <reference key="object" ref="654563803"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="164619877"/> + </object> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">371</int> + <reference key="object" ref="35184653"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1040787833"/> + </object> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">372</int> + <reference key="object" ref="638669489"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">373</int> + <reference key="object" ref="169445129"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">374</int> + <reference key="object" ref="511988305"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">375</int> + <reference key="object" ref="637704817"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">376</int> + <reference key="object" ref="684848834"/> + <reference key="parent" ref="16789759"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">377</int> + <reference key="object" ref="1040787833"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="299485767"/> + <reference ref="362581379"/> + <reference ref="368049810"/> + <reference ref="650703522"/> + <reference ref="470064337"/> + </object> + <reference key="parent" ref="35184653"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">378</int> + <reference key="object" ref="299485767"/> + <reference key="parent" ref="1040787833"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">379</int> + <reference key="object" ref="362581379"/> + <reference key="parent" ref="1040787833"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">380</int> + <reference key="object" ref="368049810"/> + <reference key="parent" ref="1040787833"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">381</int> + <reference key="object" ref="650703522"/> + <reference key="parent" ref="1040787833"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">382</int> + <reference key="object" ref="470064337"/> + <reference key="parent" ref="1040787833"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">383</int> + <reference key="object" ref="164619877"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="291130592"/> + <reference ref="557989785"/> + <reference ref="8023761"/> + </object> + <reference key="parent" ref="654563803"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">384</int> + <reference key="object" ref="291130592"/> + <reference key="parent" ref="164619877"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">385</int> + <reference key="object" ref="557989785"/> + <reference key="parent" ref="164619877"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">386</int> + <reference key="object" ref="8023761"/> + <reference key="parent" ref="164619877"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">387</int> + <reference key="object" ref="277000559"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="53041874"/> + <reference ref="665619559"/> + <reference ref="807093337"/> + <reference ref="81316040"/> + </object> + <reference key="parent" ref="17067790"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">388</int> + <reference key="object" ref="53041874"/> + <reference key="parent" ref="277000559"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">389</int> + <reference key="object" ref="665619559"/> + <reference key="parent" ref="277000559"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">390</int> + <reference key="object" ref="807093337"/> + <reference key="parent" ref="277000559"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">391</int> + <reference key="object" ref="81316040"/> + <reference key="parent" ref="277000559"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">392</int> + <reference key="object" ref="39582327"/> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">444</int> + <reference key="object" ref="545718297"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1022019938"/> + </object> + <reference key="parent" ref="1055885701"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">445</int> + <reference key="object" ref="1022019938"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="307109690"/> + <reference ref="744402274"/> + <reference ref="831119715"/> + <reference ref="70873500"/> + <reference ref="808304593"/> + <reference ref="597871667"/> + <reference ref="324532357"/> + <reference ref="618358412"/> + <reference ref="883438165"/> + <reference ref="473717252"/> + <reference ref="69846141"/> + <reference ref="365048869"/> + <reference ref="958645126"/> + <reference ref="814247416"/> + <reference ref="1058116061"/> + </object> + <reference key="parent" ref="545718297"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">446</int> + <reference key="object" ref="307109690"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">447</int> + <reference key="object" ref="744402274"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">448</int> + <reference key="object" ref="831119715"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">449</int> + <reference key="object" ref="70873500"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">450</int> + <reference key="object" ref="808304593"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">451</int> + <reference key="object" ref="597871667"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">452</int> + <reference key="object" ref="324532357"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">453</int> + <reference key="object" ref="618358412"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">454</int> + <reference key="object" ref="883438165"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">455</int> + <reference key="object" ref="473717252"/> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">456</int> + <reference key="object" ref="69846141"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="216314426"/> + </object> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">457</int> + <reference key="object" ref="365048869"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="666968844"/> + </object> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">458</int> + <reference key="object" ref="958645126"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="218631249"/> + </object> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">459</int> + <reference key="object" ref="814247416"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="562140037"/> + </object> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">460</int> + <reference key="object" ref="1058116061"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="792127484"/> + </object> + <reference key="parent" ref="1022019938"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">461</int> + <reference key="object" ref="792127484"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="318734362"/> + <reference ref="612849471"/> + </object> + <reference key="parent" ref="1058116061"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">462</int> + <reference key="object" ref="318734362"/> + <reference key="parent" ref="792127484"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">463</int> + <reference key="object" ref="612849471"/> + <reference key="parent" ref="792127484"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">464</int> + <reference key="object" ref="562140037"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="698135111"/> + <reference ref="899181471"/> + <reference ref="582459168"/> + </object> + <reference key="parent" ref="814247416"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">465</int> + <reference key="object" ref="698135111"/> + <reference key="parent" ref="562140037"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">466</int> + <reference key="object" ref="899181471"/> + <reference key="parent" ref="562140037"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">467</int> + <reference key="object" ref="582459168"/> + <reference key="parent" ref="562140037"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">468</int> + <reference key="object" ref="218631249"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="64764928"/> + <reference ref="136936362"/> + <reference ref="607672977"/> + <reference ref="484928874"/> + <reference ref="693070189"/> + <reference ref="1059551809"/> + <reference ref="416554597"/> + </object> + <reference key="parent" ref="958645126"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">469</int> + <reference key="object" ref="64764928"/> + <reference key="parent" ref="218631249"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">470</int> + <reference key="object" ref="136936362"/> + <reference key="parent" ref="218631249"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">471</int> + <reference key="object" ref="607672977"/> + <reference key="parent" ref="218631249"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">472</int> + <reference key="object" ref="484928874"/> + <reference key="parent" ref="218631249"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">473</int> + <reference key="object" ref="693070189"/> + <reference key="parent" ref="218631249"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">474</int> + <reference key="object" ref="1059551809"/> + <reference key="parent" ref="218631249"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">475</int> + <reference key="object" ref="416554597"/> + <reference key="parent" ref="218631249"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">476</int> + <reference key="object" ref="666968844"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="356339891"/> + <reference ref="416352713"/> + <reference ref="47615281"/> + <reference ref="252035059"/> + <reference ref="286376998"/> + <reference ref="81755183"/> + </object> + <reference key="parent" ref="365048869"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">477</int> + <reference key="object" ref="356339891"/> + <reference key="parent" ref="666968844"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">478</int> + <reference key="object" ref="416352713"/> + <reference key="parent" ref="666968844"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">479</int> + <reference key="object" ref="47615281"/> + <reference key="parent" ref="666968844"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">480</int> + <reference key="object" ref="252035059"/> + <reference key="parent" ref="666968844"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">481</int> + <reference key="object" ref="286376998"/> + <reference key="parent" ref="666968844"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">482</int> + <reference key="object" ref="81755183"/> + <reference key="parent" ref="666968844"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">483</int> + <reference key="object" ref="216314426"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="914446540"/> + <reference ref="160366792"/> + <reference ref="248661547"/> + <reference ref="30033296"/> + <reference ref="827334636"/> + </object> + <reference key="parent" ref="69846141"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">484</int> + <reference key="object" ref="914446540"/> + <reference key="parent" ref="216314426"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">485</int> + <reference key="object" ref="160366792"/> + <reference key="parent" ref="216314426"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">486</int> + <reference key="object" ref="248661547"/> + <reference key="parent" ref="216314426"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">487</int> + <reference key="object" ref="30033296"/> + <reference key="parent" ref="216314426"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">488</int> + <reference key="object" ref="827334636"/> + <reference key="parent" ref="216314426"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">518</int> + <reference key="object" ref="713319646"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="508081226"/> + </object> + <reference key="parent" ref="1055885701"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">519</int> + <reference key="object" ref="508081226"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="954120217"/> + </object> + <reference key="parent" ref="713319646"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">520</int> + <reference key="object" ref="954120217"/> + <reference key="parent" ref="508081226"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">523</int> + <reference key="object" ref="770142414"/> + <reference key="parent" ref="0"/> + <string key="objectName">MediaServerCocoaTestController</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">525</int> + <reference key="object" ref="544612128"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="879879405"/> + </object> + <reference key="parent" ref="823886803"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">526</int> + <reference key="object" ref="879879405"/> + <reference key="parent" ref="544612128"/> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="flattenedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>-3.IBPluginDependency</string> + <string>-3.ImportedFromIB2</string> + <string>129.IBPluginDependency</string> + <string>129.ImportedFromIB2</string> + <string>130.IBEditorWindowLastContentRect</string> + <string>130.IBPluginDependency</string> + <string>130.ImportedFromIB2</string> + <string>131.IBPluginDependency</string> + <string>131.ImportedFromIB2</string> + <string>134.IBPluginDependency</string> + <string>134.ImportedFromIB2</string> + <string>136.IBPluginDependency</string> + <string>136.ImportedFromIB2</string> + <string>143.IBPluginDependency</string> + <string>143.ImportedFromIB2</string> + <string>144.IBPluginDependency</string> + <string>144.ImportedFromIB2</string> + <string>145.IBPluginDependency</string> + <string>145.ImportedFromIB2</string> + <string>149.IBPluginDependency</string> + <string>149.ImportedFromIB2</string> + <string>150.IBPluginDependency</string> + <string>150.ImportedFromIB2</string> + <string>196.IBPluginDependency</string> + <string>196.ImportedFromIB2</string> + <string>2.IBPluginDependency</string> + <string>2.ImportedFromIB2</string> + <string>205.ImportedFromIB2</string> + <string>21.IBEditorWindowLastContentRect</string> + <string>21.IBPluginDependency</string> + <string>21.IBWindowTemplateEditedContentRect</string> + <string>21.ImportedFromIB2</string> + <string>21.NSWindowTemplate.visibleAtLaunch</string> + <string>21.windowTemplate.hasMinSize</string> + <string>21.windowTemplate.minSize</string> + <string>241.IBPluginDependency</string> + <string>241.ImportedFromIB2</string> + <string>242.IBEditorWindowLastContentRect</string> + <string>242.IBPluginDependency</string> + <string>242.ImportedFromIB2</string> + <string>243.IBPluginDependency</string> + <string>243.ImportedFromIB2</string> + <string>244.IBPluginDependency</string> + <string>244.ImportedFromIB2</string> + <string>245.IBPluginDependency</string> + <string>245.ImportedFromIB2</string> + <string>246.IBPluginDependency</string> + <string>246.ImportedFromIB2</string> + <string>29.IBEditorWindowLastContentRect</string> + <string>29.IBPluginDependency</string> + <string>29.ImportedFromIB2</string> + <string>338.IBPluginDependency</string> + <string>338.ImportedFromIB2</string> + <string>339.IBEditorWindowLastContentRect</string> + <string>339.IBPluginDependency</string> + <string>339.ImportedFromIB2</string> + <string>340.IBPluginDependency</string> + <string>340.ImportedFromIB2</string> + <string>341.IBPluginDependency</string> + <string>341.ImportedFromIB2</string> + <string>347.IBPluginDependency</string> + <string>348.IBEditorWindowLastContentRect</string> + <string>348.IBPluginDependency</string> + <string>349.IBPluginDependency</string> + <string>350.IBPluginDependency</string> + <string>351.IBPluginDependency</string> + <string>352.IBPluginDependency</string> + <string>353.IBPluginDependency</string> + <string>354.IBPluginDependency</string> + <string>355.IBPluginDependency</string> + <string>356.IBPluginDependency</string> + <string>357.IBPluginDependency</string> + <string>358.IBPluginDependency</string> + <string>359.IBPluginDependency</string> + <string>360.IBPluginDependency</string> + <string>361.IBPluginDependency</string> + <string>362.IBPluginDependency</string> + <string>363.IBPluginDependency</string> + <string>364.IBPluginDependency</string> + <string>365.IBPluginDependency</string> + <string>366.IBPluginDependency</string> + <string>367.IBPluginDependency</string> + <string>368.IBPluginDependency</string> + <string>369.IBPluginDependency</string> + <string>370.IBPluginDependency</string> + <string>371.IBPluginDependency</string> + <string>372.IBPluginDependency</string> + <string>373.IBPluginDependency</string> + <string>374.IBPluginDependency</string> + <string>375.IBPluginDependency</string> + <string>376.IBPluginDependency</string> + <string>377.IBPluginDependency</string> + <string>378.IBPluginDependency</string> + <string>379.IBPluginDependency</string> + <string>380.IBPluginDependency</string> + <string>381.IBPluginDependency</string> + <string>382.IBPluginDependency</string> + <string>383.IBPluginDependency</string> + <string>384.IBPluginDependency</string> + <string>385.IBPluginDependency</string> + <string>386.IBPluginDependency</string> + <string>387.IBPluginDependency</string> + <string>388.IBPluginDependency</string> + <string>389.IBPluginDependency</string> + <string>390.IBPluginDependency</string> + <string>391.IBPluginDependency</string> + <string>444.IBPluginDependency</string> + <string>445.IBEditorWindowLastContentRect</string> + <string>445.IBPluginDependency</string> + <string>446.IBPluginDependency</string> + <string>447.IBPluginDependency</string> + <string>448.IBPluginDependency</string> + <string>449.IBPluginDependency</string> + <string>450.IBPluginDependency</string> + <string>451.IBPluginDependency</string> + <string>452.IBPluginDependency</string> + <string>453.IBPluginDependency</string> + <string>454.IBPluginDependency</string> + <string>455.IBPluginDependency</string> + <string>456.IBPluginDependency</string> + <string>457.IBPluginDependency</string> + <string>458.IBPluginDependency</string> + <string>459.IBPluginDependency</string> + <string>460.IBPluginDependency</string> + <string>461.IBPluginDependency</string> + <string>462.IBPluginDependency</string> + <string>463.IBPluginDependency</string> + <string>464.IBEditorWindowLastContentRect</string> + <string>464.IBPluginDependency</string> + <string>465.IBPluginDependency</string> + <string>466.IBPluginDependency</string> + <string>467.IBPluginDependency</string> + <string>468.IBPluginDependency</string> + <string>469.IBPluginDependency</string> + <string>470.IBPluginDependency</string> + <string>471.IBPluginDependency</string> + <string>472.IBPluginDependency</string> + <string>473.IBPluginDependency</string> + <string>474.IBPluginDependency</string> + <string>475.IBPluginDependency</string> + <string>476.IBPluginDependency</string> + <string>477.IBPluginDependency</string> + <string>478.IBPluginDependency</string> + <string>479.IBPluginDependency</string> + <string>480.IBPluginDependency</string> + <string>481.IBPluginDependency</string> + <string>482.IBPluginDependency</string> + <string>483.IBPluginDependency</string> + <string>484.IBPluginDependency</string> + <string>485.IBPluginDependency</string> + <string>486.IBPluginDependency</string> + <string>487.IBPluginDependency</string> + <string>488.IBPluginDependency</string> + <string>518.IBPluginDependency</string> + <string>519.IBEditorWindowLastContentRect</string> + <string>519.IBPluginDependency</string> + <string>520.IBPluginDependency</string> + <string>523.IBPluginDependency</string> + <string>525.IBPluginDependency</string> + <string>526.IBPluginDependency</string> + <string>56.IBPluginDependency</string> + <string>56.ImportedFromIB2</string> + <string>57.IBEditorWindowLastContentRect</string> + <string>57.IBPluginDependency</string> + <string>57.ImportedFromIB2</string> + <string>58.IBPluginDependency</string> + <string>58.ImportedFromIB2</string> + <string>74.IBPluginDependency</string> + <string>74.ImportedFromIB2</string> + <string>75.IBPluginDependency</string> + <string>75.ImportedFromIB2</string> + <string>77.IBPluginDependency</string> + <string>77.ImportedFromIB2</string> + <string>78.IBPluginDependency</string> + <string>78.ImportedFromIB2</string> + <string>81.IBEditorWindowLastContentRect</string> + <string>81.IBPluginDependency</string> + <string>81.ImportedFromIB2</string> + <string>83.IBPluginDependency</string> + <string>83.ImportedFromIB2</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{370, 880}, {64, 6}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <integer value="1"/> + <string>{{319, 476}, {480, 360}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{319, 476}, {480, 360}}</string> + <integer value="1"/> + <integer value="1"/> + <integer value="1"/> + <string>{213, 107}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{610, 1023}, {194, 73}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{380, 810}, {528, 20}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{410, 921}, {234, 43}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{494, 1053}, {83, 43}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{450, 813}, {254, 283}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{783, 793}, {170, 63}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{681, 1073}, {250, 23}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{85, 781}, {245, 183}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>{{408, 1023}, {176, 73}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + </object> + </object> + <object class="NSMutableDictionary" key="unlocalizedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="activeLocalization"/> + <object class="NSMutableDictionary" key="localizations"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="sourceID"/> + <int key="maxID">527</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"> + <object class="NSMutableArray" key="referencedPartialClassDescriptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">MediaServerCocoaTestController</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>mainButton</string> + <string>window</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSButton</string> + <string>NSWindow</string> + </object> + </object> + <object class="NSMutableDictionary" key="toOneOutletInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>mainButton</string> + <string>window</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBToOneOutletInfo"> + <string key="name">mainButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">window</string> + <string key="candidateClassName">NSWindow</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">../../../Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">MediaServerCocoaTest_AppDelegate</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">saveAction:</string> + <string key="NS.object.0">id</string> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <string key="NS.key.0">saveAction:</string> + <object class="IBActionInfo" key="NS.object.0"> + <string key="name">saveAction:</string> + <string key="candidateClassName">id</string> + </object> + </object> + <object class="NSMutableDictionary" key="outlets"> + <string key="NS.key.0">window</string> + <string key="NS.object.0">NSWindow</string> + </object> + <object class="NSMutableDictionary" key="toOneOutletInfosByName"> + <string key="NS.key.0">window</string> + <object class="IBToOneOutletInfo" key="NS.object.0"> + <string key="name">window</string> + <string key="candidateClassName">NSWindow</string> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">../../../Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">MediaServerCocoaTest_AppDelegate</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + </object> + </object> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1050" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="3000" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> + <string key="IBDocument.LastKnownRelativeProjectPath">../../../../Build/Targets/universal-apple-macosx/Platinum.xcodeproj</string> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSMenuCheckmark</string> + <string>NSMenuMixedState</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>{9, 8}</string> + <string>{7, 2}</string> + </object> + </object> + </data> +</archive> diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest-Info.plist b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest-Info.plist new file mode 100644 index 0000000..883d858 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest-Info.plist @@ -0,0 +1,32 @@ +<?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"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleName</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIdentifier</key> + <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>LSMinimumSystemVersion</key> + <string>${MACOSX_DEPLOYMENT_TARGET}</string> + <key>NSMainNibFile</key> + <string>MainMenu</string> + <key>NSPrincipalClass</key> + <string>NSApplication</string> +</dict> +</plist> diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h new file mode 100644 index 0000000..2de7c10 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h @@ -0,0 +1,20 @@ +// +// MediaServerCocoaTestController.h +// Platinum +// +// Created by Sylvain on 9/14/10. +// Copyright 2010 Plutinosoft LLC. All rights reserved. +// + +#import <Cocoa/Cocoa.h> +#import <Platinum/PltUPnPObject.h> +#import <Platinum/PltMediaServerObject.h> + +@interface MediaServerCocoaTestController : NSObject <PLT_MediaServerDelegateObject> { + IBOutlet NSWindow* window; + IBOutlet NSButton* mainButton; + + PLT_UPnPObject* upnp; +} + +@end diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.mm b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.mm new file mode 100644 index 0000000..d7b9a29 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.mm @@ -0,0 +1,64 @@ +// +// MediaServerCocoaTestController.mm +// Platinum +// +// Created by Sylvain on 9/14/10. +// Copyright 2010 Plutinosoft LLC. All rights reserved. +// + +#import "MediaServerCocoaTestController.h" +#import <Neptune/Neptune.h> + + +@implementation MediaServerCocoaTestController + ++ (void)initialize { + NPT_LogManager::GetDefault().Configure("plist:.level=INFO;.handlers=ConsoleHandler;.ConsoleHandler.outputs=1;.ConsoleHandler.filter=61"); +} + +- (void)awakeFromNib { + upnp = [[PLT_UPnPObject alloc] init]; + + // create server and add ourselves as the delegate + PLT_MediaServerObject* server = [[PLT_MediaServerObject alloc] init]; + [server setDelegate:self]; + [upnp addDevice:server]; + + [mainButton setTarget:self]; + [mainButton setTitle:@"Start"]; + [mainButton setAction:@selector(performUPnPStarStop:)]; +} + +- (void)performUPnPStarStop:(id)sender { + if ([upnp isRunning]) { + [upnp stop]; + [mainButton setTitle:@"Start"]; + } else { + [upnp start]; + [mainButton setTitle:@"Stop"]; + } +} + +#pragma mark - PLT_MediaServerDelegateObject + +- (NPT_Result)onBrowseMetadata:(PLT_MediaServerBrowseCapsule*)info +{ + return NPT_FAILURE; +} + +- (NPT_Result)onBrowseDirectChildren:(PLT_MediaServerBrowseCapsule*)info +{ + return NPT_FAILURE; +} + +- (NPT_Result)onSearchContainer:(PLT_MediaServerSearchCapsule*)info +{ + return NPT_FAILURE; +} + +- (NPT_Result)onFileRequest:(PLT_MediaServerFileRequestCapsule*)info +{ + return NPT_FAILURE; +} + +@end diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h new file mode 100644 index 0000000..07ca005 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h @@ -0,0 +1,28 @@ +// +// MediaServerCocoaTest_AppDelegate.h +// MediaServerCocoaTest +// +// Created by Sylvain on 9/14/10. +// Copyright Plutinosoft LLC 2010 . All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +@interface MediaServerCocoaTest_AppDelegate : NSObject +{ + NSWindow *window; + + NSPersistentStoreCoordinator *persistentStoreCoordinator; + NSManagedObjectModel *managedObjectModel; + NSManagedObjectContext *managedObjectContext; +} + +@property (nonatomic, retain) IBOutlet NSWindow *window; + +@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; +@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; +@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; + +- (IBAction)saveAction:sender; + +@end diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.m b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.m new file mode 100644 index 0000000..e8120ba --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.m @@ -0,0 +1,212 @@ +// +// MediaServerCocoaTest_AppDelegate.m +// MediaServerCocoaTest +// +// Created by Sylvain on 9/14/10. +// Copyright Plutinosoft LLC 2010 . All rights reserved. +// + +#import "MediaServerCocoaTest_AppDelegate.h" + +@implementation MediaServerCocoaTest_AppDelegate + +@synthesize window; + +/** + Returns the support directory for the application, used to store the Core Data + store file. This code uses a directory named "MediaServerCocoaTest" for + the content, either in the NSApplicationSupportDirectory location or (if the + former cannot be found), the system's temporary directory. + */ + +- (NSString *)applicationSupportDirectory { + + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); + NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory(); + return [basePath stringByAppendingPathComponent:@"MediaServerCocoaTest"]; +} + + +/** + Creates, retains, and returns the managed object model for the application + by merging all of the models found in the application bundle. + */ + +- (NSManagedObjectModel *)managedObjectModel { + + if (managedObjectModel) return managedObjectModel; + + managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; + return managedObjectModel; +} + + +/** + Returns the persistent store coordinator for the application. This + implementation will create and return a coordinator, having added the + store for the application to it. (The directory for the store is created, + if necessary.) + */ + +- (NSPersistentStoreCoordinator *) persistentStoreCoordinator { + + if (persistentStoreCoordinator) return persistentStoreCoordinator; + + NSManagedObjectModel *mom = [self managedObjectModel]; + if (!mom) { + NSAssert(NO, @"Managed object model is nil"); + NSLog(@"%@:%s No model to generate a store from", [self class], _cmd); + return nil; + } + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *applicationSupportDirectory = [self applicationSupportDirectory]; + NSError *error = nil; + + if ( ![fileManager fileExistsAtPath:applicationSupportDirectory isDirectory:NULL] ) { + if (![fileManager createDirectoryAtPath:applicationSupportDirectory withIntermediateDirectories:NO attributes:nil error:&error]) { + NSAssert(NO, ([NSString stringWithFormat:@"Failed to create App Support directory %@ : %@", applicationSupportDirectory,error])); + NSLog(@"Error creating application support directory at %@ : %@",applicationSupportDirectory,error); + return nil; + } + } + + NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata"]]; + persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: mom]; + if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType + configuration:nil + URL:url + options:nil + error:&error]){ + [[NSApplication sharedApplication] presentError:error]; + [persistentStoreCoordinator release], persistentStoreCoordinator = nil; + return nil; + } + + return persistentStoreCoordinator; +} + +/** + Returns the managed object context for the application (which is already + bound to the persistent store coordinator for the application.) + */ + +- (NSManagedObjectContext *) managedObjectContext { + + if (managedObjectContext) return managedObjectContext; + + NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; + if (!coordinator) { + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey]; + [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey]; + NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + managedObjectContext = [[NSManagedObjectContext alloc] init]; + [managedObjectContext setPersistentStoreCoordinator: coordinator]; + + return managedObjectContext; +} + +/** + Returns the NSUndoManager for the application. In this case, the manager + returned is that of the managed object context for the application. + */ + +- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window { + return [[self managedObjectContext] undoManager]; +} + + +/** + Performs the save action for the application, which is to send the save: + message to the application's managed object context. Any encountered errors + are presented to the user. + */ + +- (IBAction) saveAction:(id)sender { + + NSError *error = nil; + + if (![[self managedObjectContext] commitEditing]) { + NSLog(@"%@:%s unable to commit editing before saving", [self class], _cmd); + } + + if (![[self managedObjectContext] save:&error]) { + [[NSApplication sharedApplication] presentError:error]; + } +} + + +/** + Implementation of the applicationShouldTerminate: method, used here to + handle the saving of changes in the application managed object context + before the application terminates. + */ + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + + if (!managedObjectContext) return NSTerminateNow; + + if (![managedObjectContext commitEditing]) { + NSLog(@"%@:%s unable to commit editing to terminate", [self class], _cmd); + return NSTerminateCancel; + } + + if (![managedObjectContext hasChanges]) return NSTerminateNow; + + NSError *error = nil; + if (![managedObjectContext save:&error]) { + + // This error handling simply presents error information in a panel with an + // "Ok" button, which does not include any attempt at error recovery (meaning, + // attempting to fix the error.) As a result, this implementation will + // present the information to the user and then follow up with a panel asking + // if the user wishes to "Quit Anyway", without saving the changes. + + // Typically, this process should be altered to include application-specific + // recovery steps. + + BOOL result = [sender presentError:error]; + if (result) return NSTerminateCancel; + + NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message"); + NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info"); + NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title"); + NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title"); + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:question]; + [alert setInformativeText:info]; + [alert addButtonWithTitle:quitButton]; + [alert addButtonWithTitle:cancelButton]; + + NSInteger answer = [alert runModal]; + [alert release]; + alert = nil; + + if (answer == NSAlertAlternateReturn) return NSTerminateCancel; + + } + + return NSTerminateNow; +} + + +/** + Implementation of dealloc, to release the retained variables. + */ + +- (void)dealloc { + + [window release]; + [managedObjectContext release]; + [persistentStoreCoordinator release]; + [managedObjectModel release]; + + [super dealloc]; +} + + +@end diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm new file mode 100644 index 0000000..c6fb49a --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm @@ -0,0 +1,195 @@ +// +// MediaServerCocoaTest_AppDelegate.m +// MediaServerCocoaTest +// +// Created by Sylvain on 9/14/10. +// Copyright Plutinosoft LLC 2010 . All rights reserved. +// + +#import "MediaServerCocoaTest_AppDelegate.h" + +@implementation MediaServerCocoaTest_AppDelegate + +@synthesize window; + +/** + Returns the support directory for the application, used to store the Core Data + store file. This code uses a directory named "MediaServerCocoaTest" for + the content, either in the NSApplicationSupportDirectory location or (if the + former cannot be found), the system's temporary directory. + */ + +- (NSString *)applicationSupportDirectory { + + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); + NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory(); + return [basePath stringByAppendingPathComponent:@"MediaServerCocoaTest"]; +} + + +/** + Creates, retains, and returns the managed object model for the application + by merging all of the models found in the application bundle. + */ + +- (NSManagedObjectModel *)managedObjectModel { + + if (managedObjectModel) return managedObjectModel; + + managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; + return managedObjectModel; +} + + +/** + Returns the persistent store coordinator for the application. This + implementation will create and return a coordinator, having added the + store for the application to it. (The directory for the store is created, + if necessary.) + */ + +- (NSPersistentStoreCoordinator *) persistentStoreCoordinator { + + if (persistentStoreCoordinator) return persistentStoreCoordinator; + + NSManagedObjectModel *mom = [self managedObjectModel]; + if (!mom) { + NSAssert(NO, @"Managed object model is nil"); + //NSLog(@"%@:%s No model to generate a store from", [self class], _cmd); + return nil; + } + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *applicationSupportDirectory = [self applicationSupportDirectory]; + NSError *error = nil; + + if ( ![fileManager fileExistsAtPath:applicationSupportDirectory isDirectory:NULL] ) { + if (![fileManager createDirectoryAtPath:applicationSupportDirectory withIntermediateDirectories:NO attributes:nil error:&error]) { + NSAssert(NO, ([NSString stringWithFormat:@"Failed to create App Support directory %@ : %@", applicationSupportDirectory,error])); + NSLog(@"Error creating application support directory at %@ : %@",applicationSupportDirectory,error); + return nil; + } + } + + NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata"]]; + persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: mom]; + if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType + configuration:nil + URL:url + options:nil + error:&error]){ + [[NSApplication sharedApplication] presentError:error]; + persistentStoreCoordinator = nil; + return nil; + } + + return persistentStoreCoordinator; +} + +/** + Returns the managed object context for the application (which is already + bound to the persistent store coordinator for the application.) + */ + +- (NSManagedObjectContext *) managedObjectContext { + + if (managedObjectContext) return managedObjectContext; + + NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; + if (!coordinator) { + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey]; + [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey]; + NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + managedObjectContext = [[NSManagedObjectContext alloc] init]; + [managedObjectContext setPersistentStoreCoordinator: coordinator]; + + return managedObjectContext; +} + +/** + Returns the NSUndoManager for the application. In this case, the manager + returned is that of the managed object context for the application. + */ + +- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window { + return [[self managedObjectContext] undoManager]; +} + + +/** + Performs the save action for the application, which is to send the save: + message to the application's managed object context. Any encountered errors + are presented to the user. + */ + +- (IBAction) saveAction:(id)sender { + + NSError *error = nil; + + if (![[self managedObjectContext] commitEditing]) { + //NSLog(@"%@:%s unable to commit editing before saving", [self class], _cmd); + } + + if (![[self managedObjectContext] save:&error]) { + [[NSApplication sharedApplication] presentError:error]; + } +} + + +/** + Implementation of the applicationShouldTerminate: method, used here to + handle the saving of changes in the application managed object context + before the application terminates. + */ + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + + if (!managedObjectContext) return NSTerminateNow; + + if (![managedObjectContext commitEditing]) { + //NSLog(@"%@:%s unable to commit editing to terminate", [self class], _cmd); + return NSTerminateCancel; + } + + if (![managedObjectContext hasChanges]) return NSTerminateNow; + + NSError *error = nil; + if (![managedObjectContext save:&error]) { + + // This error handling simply presents error information in a panel with an + // "Ok" button, which does not include any attempt at error recovery (meaning, + // attempting to fix the error.) As a result, this implementation will + // present the information to the user and then follow up with a panel asking + // if the user wishes to "Quit Anyway", without saving the changes. + + // Typically, this process should be altered to include application-specific + // recovery steps. + + BOOL result = [sender presentError:error]; + if (result) return NSTerminateCancel; + + NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message"); + NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info"); + NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title"); + NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title"); + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:question]; + [alert setInformativeText:info]; + [alert addButtonWithTitle:quitButton]; + [alert addButtonWithTitle:cancelButton]; + + NSInteger answer = [alert runModal]; + alert = nil; + + if (answer == NSAlertAlternateReturn) return NSTerminateCancel; + + } + + return NSTerminateNow; +} + +@end diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/elements b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/elements Binary files differnew file mode 100644 index 0000000..2209062 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/elements diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/layout b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/layout Binary files differnew file mode 100644 index 0000000..85196a8 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/layout diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_Prefix.pch b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_Prefix.pch new file mode 100644 index 0000000..23e1c62 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'MediaServerCocoaTest' target in the 'MediaServerCocoaTest' project +// + +#ifdef __OBJC__ + #import <Cocoa/Cocoa.h> +#endif diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/main.mm b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/main.mm new file mode 100644 index 0000000..87077c6 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/main.mm @@ -0,0 +1,14 @@ +// +// main.m +// MediaServerCocoaTest +// +// Created by Sylvain on 9/14/10. +// Copyright Plutinosoft LLC 2010. All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); +} diff --git a/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.cpp b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.cpp new file mode 100644 index 0000000..0d32ec2 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.cpp @@ -0,0 +1,111 @@ +/***************************************************************** +| +| Platinum - Simple Device +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "Neptune.h" +#include "Platinum.h" +#include "PltSimple.h" + +NPT_SET_LOCAL_LOGGER("platinum.test.simple") + +/*---------------------------------------------------------------------- +| forward references ++---------------------------------------------------------------------*/ +extern const char* SCPDXML_SIMPLE; + +/*---------------------------------------------------------------------- +| PLT_Simple::PLT_Simple ++---------------------------------------------------------------------*/ +PLT_Simple::PLT_Simple(const char* FriendlyName, const char* UUID) : + PLT_DeviceHost("/", UUID, "urn:schemas-upnp-org:device:Simple:1", FriendlyName) +{ +} + +/*---------------------------------------------------------------------- +| PLT_Simple::~PLT_Simple ++---------------------------------------------------------------------*/ +PLT_Simple::~PLT_Simple() +{ +} + +/*---------------------------------------------------------------------- +| PLT_Simple::SetupServices ++---------------------------------------------------------------------*/ +NPT_Result +PLT_Simple::SetupServices() +{ + NPT_Result res; + PLT_Service* service = new PLT_Service( + this, + "urn:schemas-upnp-org:service:Test:1", + "urn:upnp-org:serviceId:Test.001", + "Test"); + + NPT_CHECK_LABEL_FATAL(res = service->SetSCPDXML((const char*)SCPDXML_SIMPLE), failure); + NPT_CHECK_LABEL_FATAL(res = AddService(service), failure); + + service->SetStateVariable("Status", "True"); + + return NPT_SUCCESS; + +failure: + delete service; + return res; +} + +const char* SCPDXML_SIMPLE = + "<?xml version=\"1.0\" ?>" + " <scpd xmlns=\"urn:schemas-upnp-org:service-1-0\">" + " <specVersion>" + " <major>1</major>" + " <minor>0</minor>" + " </specVersion>" + " <serviceStateTable>" + " <stateVariable sendEvents=\"yes\">" + " <name>LastChange</name>" + " <dataType>string</dataType>" + " <defaultValue></defaultValue>" + " </stateVariable>" + " <stateVariable sendEvents=\"yes\">" + " <name>PresetNameList</name>" + " <dataType>string</dataType>" + " <defaultValue></defaultValue>" + " </stateVariable>" + " </serviceStateTable>" + " <intel_nmpr:X_INTEL_NMPR xmlns:intel_nmpr=\"udn:schemas-intel-com:device-1-0\">2.1</intel_nmpr:X_INTEL_NMPR>" + " <dlna:X_DLNADOC xmlns:dlna=\"udn:schemas-dlna-org:device-1-0\">DMP 1.00</dlna:X_DLNADOC>" + " </scpd>"; + diff --git a/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.h b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.h new file mode 100644 index 0000000..487e760 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.h @@ -0,0 +1,56 @@ +/***************************************************************** +| +| Platinum -Simple Device +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +#ifndef _PLT_SIMPLE_H_ +#define _PLT_SIMPLE_H_ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "PltDeviceHost.h" + +/*---------------------------------------------------------------------- +| PLT_Simple class ++---------------------------------------------------------------------*/ +class PLT_Simple : public PLT_DeviceHost +{ +public: + PLT_Simple(const char* FriendlyName, const char* UUID = ""); + virtual ~PLT_Simple(); + + // PLT_DeviceHost methods + virtual NPT_Result SetupServices(); +}; + +#endif /* _PLT_SIMPLE_H_ */ diff --git a/lib/libUPnP/Platinum/Source/Tests/Simple/SimpleTest.cpp b/lib/libUPnP/Platinum/Source/Tests/Simple/SimpleTest.cpp new file mode 100644 index 0000000..6596227 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/Simple/SimpleTest.cpp @@ -0,0 +1,63 @@ +/***************************************************************** +| +| Platinum - Test Light Device +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "PltUPnP.h" +#include "PltSimple.h" + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int /* argc */, char** /* argv */) +{ + PLT_UPnP upnp; + + PLT_DeviceHostReference device(new PLT_Simple("Platinum Test")); + + upnp.AddDevice(device); + upnp.Start(); + + char buf[256]; + while (gets(buf)) { + if (*buf == 'q') + break; + } + + upnp.Stop(); + + return 0; +} diff --git a/lib/libUPnP/Platinum/Source/Tests/Ssdp/SsdpTest1.cpp b/lib/libUPnP/Platinum/Source/Tests/Ssdp/SsdpTest1.cpp new file mode 100644 index 0000000..1e1f6aa --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/Ssdp/SsdpTest1.cpp @@ -0,0 +1,66 @@ +/***************************************************************** +| +| Platinum - SSDP Test Program 1 +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "Neptune.h" +#include "Platinum.h" + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int, char**) +{ + // setup Neptune logging + NPT_LogManager::GetDefault().Configure("plist:.level=FINE;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=42"); + + PLT_UPnP upnp; + PLT_CtrlPointReference ctrl_point(new PLT_CtrlPoint()); + upnp.AddCtrlPoint(ctrl_point); + + if (NPT_FAILED(upnp.Start())) + return 1; + + char buf[256]; + while (gets(buf)) { + if (*buf == 'q') + break; + } + + upnp.Stop(); + + return 0; +} diff --git a/lib/libUPnP/Platinum/Source/Tests/Time/TimeTest1.cpp b/lib/libUPnP/Platinum/Source/Tests/Time/TimeTest1.cpp new file mode 100644 index 0000000..6d62708 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Tests/Time/TimeTest1.cpp @@ -0,0 +1,189 @@ +/***************************************************************** +| +| Platinum - Time Test +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it 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. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program 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 this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include <stdlib.h> +#include <stdio.h> +#include "Neptune.h" +#include "Platinum.h" + +/*---------------------------------------------------------------------- +| macros ++---------------------------------------------------------------------*/ +#define SHOULD_SUCCEED(r) \ + do { \ + if (NPT_FAILED(r)) { \ + fprintf(stderr, "FAILED: line %d\n", __LINE__); \ + NPT_ASSERT(0); \ + } \ + } while(0) + +#define SHOULD_FAIL(r) \ + do { \ + if (NPT_SUCCEEDED(r)) { \ + fprintf(stderr, "should have failed line %d (%d)\n", \ + __LINE__, r); \ + NPT_ASSERT(0); \ + } \ + } while(0) + +#define SHOULD_EQUAL_I(a, b) \ + do { \ + if ((a) != (b)) { \ + fprintf(stderr, "got %d expected %d line %d\n", \ + (int)a, (int)b, __LINE__); \ + NPT_ASSERT(0); \ + } \ + } while(0) + +#define SHOULD_EQUAL_F(a, b) \ + do { \ + if ((a) != (b)) { \ + fprintf(stderr, "got %f, expected %f line %d\n", \ + (float)a, (float)b, __LINE__); \ + NPT_ASSERT(0); \ + } \ + } while(0) + +#define SHOULD_EQUAL_S(a, b) \ + do { \ + if (!NPT_StringsEqual(a,b)) { \ + fprintf(stderr, "got %s, expected %s line %d\n", \ + a, b, __LINE__); \ + NPT_ASSERT(0); \ + } \ + } while(0) + +/*---------------------------------------------------------------------- +| TestSuiteGetTime ++---------------------------------------------------------------------*/ +static void +TestSuiteGetTime() +{ + NPT_TimeStamp now, now2; + NPT_DateTime today; + + /* get utc time */ + SHOULD_SUCCEED(NPT_System::GetCurrentTimeStamp(now)); + + /* convert utc time to date */ + SHOULD_SUCCEED(today.FromTimeStamp(now)); + + /* convert local time back to utc */ + SHOULD_SUCCEED(today.ToTimeStamp(now2)); + + /* verify utc time has not change */ + SHOULD_EQUAL_I(now.ToSeconds(), now2.ToSeconds()); +} + +/*---------------------------------------------------------------------- +| TestSuiteSetDateTimeZone ++---------------------------------------------------------------------*/ +static void +TestSuiteSetDateTimeZone() +{ + NPT_TimeStamp now, now2; + NPT_DateTime today, today2; + NPT_Int32 tz; + + /* get utc time */ + SHOULD_SUCCEED(NPT_System::GetCurrentTimeStamp(now)); + + /* convert utc time to date */ + SHOULD_SUCCEED(today.FromTimeStamp(now)); + + for (tz = -60*12; tz <= 60*12; tz+=30) { + /* convert date to another timezone */ + today2 = today; + SHOULD_SUCCEED(today2.ChangeTimeZone(tz)); + + /* get timestamp from converted date */ + SHOULD_SUCCEED(today2.ToTimeStamp(now2)); + + /* verify utc time has not change */ + SHOULD_EQUAL_I(now.ToSeconds(), now2.ToSeconds()); + } +} + +/*---------------------------------------------------------------------- +| TestSuiteFormatTime ++---------------------------------------------------------------------*/ +static void +TestSuiteFormatTime() +{ + NPT_DateTime gmt_today, tz_today; + NPT_TimeStamp now; + NPT_String output_s; + + /* current time */ + SHOULD_SUCCEED(NPT_System::GetCurrentTimeStamp(now)); + + /* get the date */ + SHOULD_SUCCEED(gmt_today.FromTimeStamp(now)); + + /* print out current local date and daylight savings settings */ + /* this should convert to GMT internally if dst is set */ + printf("GMT time for Today is: %s\n", gmt_today.ToString().GetChars()); + + /* convert the date to GMT-8 */ + tz_today = gmt_today; + SHOULD_SUCCEED(tz_today.ChangeTimeZone(-8*60)); + + /* this should convert to GMT internally if dst is set */ + printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_RFC_1123).GetChars()); + printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_RFC_1036).GetChars()); + printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_ANSI).GetChars()); + printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_W3C).GetChars()); + + /* print with RFC1123 */ + printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_RFC_1123).GetChars()); + printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_RFC_1036).GetChars()); + printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_ANSI).GetChars()); + printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_W3C).GetChars()); +} + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int /*argc*/, char** /*argv*/) +{ + TestSuiteGetTime(); + TestSuiteSetDateTimeZone(); + TestSuiteFormatTime(); + return 0; +} |