summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJames Cowgill <james410@cowgill.org.uk>2013-08-23 09:57:55 +0100
committerJames Cowgill <james410@cowgill.org.uk>2013-08-23 09:57:55 +0100
commit9a298ca833d9b6a3425bb30c2e52cf04e34aeb7c (patch)
treed46630a885bcea03bbea036b86c645dc6c55708d /examples
parent0969839d538a385254c6eced9648acc7299876cc (diff)
Imported Upstream version 2.1+dfsg
Diffstat (limited to 'examples')
-rw-r--r--examples/CMakeLists.txt18
-rw-r--r--examples/X11/CMakeLists.txt16
-rw-r--r--examples/X11/X11.cpp199
-rw-r--r--examples/cocoa/CMakeLists.txt67
-rw-r--r--examples/cocoa/CocoaAppDelegate.h74
-rw-r--r--examples/cocoa/CocoaAppDelegate.mm241
-rw-r--r--examples/cocoa/MainMenu.xib4180
-rw-r--r--examples/cocoa/NSString+stdstring.h39
-rw-r--r--examples/cocoa/NSString+stdstring.mm78
-rw-r--r--examples/cocoa/main.m31
-rw-r--r--examples/cocoa/readme.txt28
-rw-r--r--examples/ftp/CMakeLists.txt10
-rw-r--r--examples/ftp/Ftp.cpp206
-rw-r--r--examples/opengl/CMakeLists.txt14
-rw-r--r--examples/opengl/OpenGL.cpp194
-rw-r--r--examples/pong/CMakeLists.txt10
-rw-r--r--examples/pong/Pong.cpp241
-rw-r--r--examples/shader/CMakeLists.txt12
-rw-r--r--examples/shader/Effect.hpp88
-rw-r--r--examples/shader/Shader.cpp380
-rw-r--r--examples/sockets/CMakeLists.txt12
-rw-r--r--examples/sockets/Sockets.cpp59
-rw-r--r--examples/sockets/TCP.cpp81
-rw-r--r--examples/sockets/UDP.cpp72
-rw-r--r--examples/sound/CMakeLists.txt10
-rw-r--r--examples/sound/Sound.cpp98
-rw-r--r--examples/sound_capture/CMakeLists.txt10
-rw-r--r--examples/sound_capture/SoundCapture.cpp95
-rw-r--r--examples/voip/CMakeLists.txt12
-rw-r--r--examples/voip/Client.cpp129
-rw-r--r--examples/voip/Server.cpp200
-rw-r--r--examples/voip/VoIP.cpp50
-rw-r--r--examples/win32/CMakeLists.txt10
-rw-r--r--examples/win32/Win32.cpp130
-rw-r--r--examples/window/CMakeLists.txt14
-rw-r--r--examples/window/Window.cpp146
36 files changed, 7254 insertions, 0 deletions
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
new file mode 100644
index 0000000..777a72e
--- /dev/null
+++ b/examples/CMakeLists.txt
@@ -0,0 +1,18 @@
+
+# add the examples subdirectories
+add_subdirectory(ftp)
+add_subdirectory(opengl)
+add_subdirectory(pong)
+add_subdirectory(shader)
+add_subdirectory(sockets)
+add_subdirectory(sound)
+add_subdirectory(sound_capture)
+add_subdirectory(voip)
+add_subdirectory(window)
+if(WINDOWS)
+ add_subdirectory(win32)
+elseif(LINUX)
+ add_subdirectory(X11)
+elseif(MACOSX)
+ add_subdirectory(cocoa)
+endif()
diff --git a/examples/X11/CMakeLists.txt b/examples/X11/CMakeLists.txt
new file mode 100644
index 0000000..d63ca9f
--- /dev/null
+++ b/examples/X11/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/X11)
+
+# all source files
+set(SRC ${SRCROOT}/X11.cpp)
+
+# find OpenGL, GLU and X11
+find_package(OpenGL REQUIRED)
+include_directories(${OPENGL_INCLUDE_DIR})
+find_package(X11 REQUIRED)
+include_directories(${X11_INCLUDE_DIR})
+
+# define the X11 target
+sfml_add_example(X11 GUI_APP
+ SOURCES ${SRC}
+ DEPENDS sfml-window sfml-system ${OPENGL_LIBRARIES} ${X11_LIBRARIES})
diff --git a/examples/X11/X11.cpp b/examples/X11/X11.cpp
new file mode 100644
index 0000000..2ffa08b
--- /dev/null
+++ b/examples/X11/X11.cpp
@@ -0,0 +1,199 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Window.hpp>
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <iostream>
+
+
+////////////////////////////////////////////////////////////
+/// Initialize OpenGL states into the specified view
+///
+/// \param Window Target window to initialize
+///
+////////////////////////////////////////////////////////////
+void initialize(sf::Window& window)
+{
+ // Activate the window
+ window.setActive();
+
+ // Setup OpenGL states
+ // Set color and depth clear value
+ glClearDepth(1.f);
+ glClearColor(0.f, 0.5f, 0.5f, 0.f);
+
+ // Enable Z-buffer read and write
+ glEnable(GL_DEPTH_TEST);
+ glDepthMask(GL_TRUE);
+
+ // Setup a perspective projection
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(90.f, 1.f, 1.f, 500.f);
+}
+
+////////////////////////////////////////////////////////////
+/// Draw the OpenGL scene (a rotating cube) into
+/// the specified view
+///
+/// \param window Target window for rendering
+/// \param elapsedTime Time elapsed since the last draw
+///
+////////////////////////////////////////////////////////////
+void draw(sf::Window& window, float elapsedTime)
+{
+ // Activate the window
+ window.setActive();
+
+ // Clear color and depth buffers
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ // Apply some transformations
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0.f, 0.f, -200.f);
+ glRotatef(elapsedTime * 0.05f, 1.f, 0.f, 0.f);
+ glRotatef(elapsedTime * 0.03f, 0.f, 1.f, 0.f);
+ glRotatef(elapsedTime * 0.09f, 0.f, 0.f, 1.f);
+
+ // Draw a cube
+ glBegin(GL_QUADS);
+
+ glColor3f(1.f, 1.f, 0.f);
+ glVertex3f(-50.f, -50.f, -50.f);
+ glVertex3f(-50.f, 50.f, -50.f);
+ glVertex3f( 50.f, 50.f, -50.f);
+ glVertex3f( 50.f, -50.f, -50.f);
+
+ glColor3f(1.f, 1.f, 0.f);
+ glVertex3f(-50.f, -50.f, 50.f);
+ glVertex3f(-50.f, 50.f, 50.f);
+ glVertex3f( 50.f, 50.f, 50.f);
+ glVertex3f( 50.f, -50.f, 50.f);
+
+ glColor3f(0.f, 1.f, 1.f);
+ glVertex3f(-50.f, -50.f, -50.f);
+ glVertex3f(-50.f, 50.f, -50.f);
+ glVertex3f(-50.f, 50.f, 50.f);
+ glVertex3f(-50.f, -50.f, 50.f);
+
+ glColor3f(0.f, 1.f, 1.f);
+ glVertex3f(50.f, -50.f, -50.f);
+ glVertex3f(50.f, 50.f, -50.f);
+ glVertex3f(50.f, 50.f, 50.f);
+ glVertex3f(50.f, -50.f, 50.f);
+
+ glColor3f(1.f, 0.f, 1.f);
+ glVertex3f(-50.f, -50.f, 50.f);
+ glVertex3f(-50.f, -50.f, -50.f);
+ glVertex3f( 50.f, -50.f, -50.f);
+ glVertex3f( 50.f, -50.f, 50.f);
+
+ glColor3f(1.f, 0.f, 1.f);
+ glVertex3f(-50.f, 50.f, 50.f);
+ glVertex3f(-50.f, 50.f, -50.f);
+ glVertex3f( 50.f, 50.f, -50.f);
+ glVertex3f( 50.f, 50.f, 50.f);
+
+ glEnd();
+}
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Error code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Open a connection with the X server
+ Display* display = XOpenDisplay(NULL);
+ if (!display)
+ return EXIT_FAILURE;
+
+ // Get the default screen
+ int screen = DefaultScreen(display);
+
+ // Let's create the main window
+ XSetWindowAttributes attributes;
+ attributes.background_pixel = BlackPixel(display, screen);
+ attributes.event_mask = KeyPressMask;
+ Window window = XCreateWindow(display, RootWindow(display, screen),
+ 0, 0, 650, 330, 0,
+ DefaultDepth(display, screen),
+ InputOutput,
+ DefaultVisual(display, screen),
+ CWBackPixel | CWEventMask, &attributes);
+ if (!window)
+ return EXIT_FAILURE;
+
+ // Set the window's name
+ XStoreName(display, window , "SFML Window");
+
+ // Let's create the windows which will serve as containers for our SFML views
+ Window view1 = XCreateWindow(display, window,
+ 10, 10, 310, 310, 0,
+ DefaultDepth(display, screen),
+ InputOutput,
+ DefaultVisual(display, screen),
+ 0, NULL);
+ Window view2 = XCreateWindow(display, window,
+ 330, 10, 310, 310, 0,
+ DefaultDepth(display, screen),
+ InputOutput,
+ DefaultVisual(display, screen),
+ 0, NULL);
+
+ // Show our windows
+ XMapWindow(display, window);
+ XFlush(display);
+
+ // Create our SFML views
+ sf::Window SFMLView1(view1);
+ sf::Window SFMLView2(view2);
+
+ // Create a clock for measuring elapsed time
+ sf::Clock clock;
+
+ // Initialize our views
+ initialize(SFMLView1);
+ initialize(SFMLView2);
+
+ // Start the event loop
+ bool running = true;
+ while (running)
+ {
+ while (XPending(display))
+ {
+ // Get the next pending event
+ XEvent event;
+ XNextEvent(display, &event);
+
+ // Process it
+ switch (event.type)
+ {
+ // Any key is pressed : quit
+ case KeyPress :
+ running = false;
+ break;
+ }
+ }
+
+ // Draw something into our views
+ draw(SFMLView1, clock.getElapsedTime().asSeconds());
+ draw(SFMLView2, clock.getElapsedTime().asSeconds() * 0.3f);
+
+ // Display the views on screen
+ SFMLView1.display();
+ SFMLView2.display();
+ }
+
+ // Close the display
+ XCloseDisplay(display);
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/cocoa/CMakeLists.txt b/examples/cocoa/CMakeLists.txt
new file mode 100644
index 0000000..b8b2b4e
--- /dev/null
+++ b/examples/cocoa/CMakeLists.txt
@@ -0,0 +1,67 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/cocoa)
+
+# all source files
+set(SRC ${SRCROOT}/CocoaAppDelegate.h
+ ${SRCROOT}/CocoaAppDelegate.mm
+ ${SRCROOT}/NSString+stdstring.h
+ ${SRCROOT}/NSString+stdstring.mm
+ ${SRCROOT}/main.m)
+
+# all XIB files
+set(XIBS MainMenu)
+
+# all resource files
+set(RESOURCES ${SRCROOT}/resources/logo.png
+ ${SRCROOT}/resources/icon.icns
+ ${SRCROOT}/resources/sansation.ttf
+ ${SRCROOT}/resources/blue.png
+ ${SRCROOT}/resources/green.png
+ ${SRCROOT}/resources/red.png
+ ${SRCROOT}/resources/Credits.rtf)
+
+# define the cocoa target and customize it
+add_executable(cocoa MACOSX_BUNDLE ${SRC} ${RESOURCES})
+set_source_files_properties(${RESOURCES} PROPERTIES
+ MACOSX_PACKAGE_LOCATION Resources)
+set_target_properties(cocoa PROPERTIES
+ MACOSX_BUNDLE_INFO_PLIST ${SRCROOT}/resources/Cocoa-Info.plist)
+target_link_libraries(cocoa "-framework Cocoa -framework Foundation"
+ sfml-system sfml-window sfml-graphics)
+
+# set the target's folder (for IDEs that support it, e.g. Visual Studio)
+set_target_properties(cocoa PROPERTIES FOLDER "Examples")
+
+# compile XIB files
+find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
+if(${IBTOOL} STREQUAL "IBTOOL-NOTFOUND")
+ message(FATAL_ERROR "ibtool is required to compile .xib files but wasn't found.")
+endif()
+set(RESOURCE_PATH "cocoa.app/Contents/Resources")
+set(XIB_OUTPUT_PATH "${RESOURCE_PATH}/")
+set(XIB_INPUT_PATH "${SRCROOT}/")
+foreach(XIB ${XIBS})
+ add_custom_command(TARGET cocoa
+ POST_BUILD
+ COMMAND ${IBTOOL} --errors
+ --output-format human-readable-text
+ --compile ${XIB_OUTPUT_PATH}/${XIB}.nib
+ ${XIB_INPUT_PATH}/${XIB}.xib
+ COMMENT "Compiling ${XIB}.xib")
+ # deactivated options : --warnings --notices
+endforeach()
+
+# add install rule
+install(TARGETS cocoa
+ BUNDLE DESTINATION ${INSTALL_MISC_DIR}/examples/cocoa
+ COMPONENT examples)
+
+#
+# define the cocoa target
+# sfml_add_example is not compatible with application bundles !
+#
+#sfml_add_example(cocoa
+# SOURCES ${SRC}
+# DEPENDS sfml-system sfml-window sfml-graphics)
+#
+
diff --git a/examples/cocoa/CocoaAppDelegate.h b/examples/cocoa/CocoaAppDelegate.h
new file mode 100644
index 0000000..f259a8c
--- /dev/null
+++ b/examples/cocoa/CocoaAppDelegate.h
@@ -0,0 +1,74 @@
+////////////////////////////////////////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2012 Marco Antognini (antognini.marco@gmail.com),
+// Laurent Gomila (laurent.gom@gmail.com),
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+// you must not claim that you wrote the original software.
+// If you use this software in a product, an acknowledgment
+// in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+// and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+////////////////////////////////////////////////////////////
+
+#import <Cocoa/Cocoa.h>
+#import <SFML/Graphics.hpp>
+
+/*
+ * NB : We need pointers for C++ objects fields in Obj-C interface !
+ * The recomanded way is to use PIMP idiom.
+ *
+ * It's elegant. Moreover, we do no constrain
+ * other file including this one to be Obj-C++.
+ */
+
+struct SFMLmainWindow;
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
+@interface CocoaAppDelegate : NSObject <NSApplicationDelegate> {
+#else
+@interface CocoaAppDelegate : NSObject {
+#endif
+@private
+ NSWindow *m_window;
+ NSView *m_sfmlView;
+ NSTextField *m_textField;
+ SFMLmainWindow *m_mainWindow;
+ NSTimer *m_renderTimer;
+ BOOL m_visible;
+ BOOL m_initialized;
+}
+
+@property (retain) IBOutlet NSWindow *window;
+@property (assign) IBOutlet NSView *sfmlView;
+@property (assign) IBOutlet NSTextField *textField;
+
+-(IBAction)colorChanged:(NSPopUpButton *)sender;
+-(IBAction)rotationChanged:(NSSlider *)sender;
+-(IBAction)visibleChanged:(NSButton *)sender;
+-(IBAction)textChanged:(NSTextField *)sender;
+-(IBAction)updateText:(NSButton *)sender;
+
+@end
+
+/*
+ * This interface is used to prevent the system alert produced when the SFML view
+ * has the focus and the user press a key.
+ */
+@interface SilentWindow : NSWindow
+
+-(void)keyDown:(NSEvent *)theEvent;
+
+@end
diff --git a/examples/cocoa/CocoaAppDelegate.mm b/examples/cocoa/CocoaAppDelegate.mm
new file mode 100644
index 0000000..ff1bc1e
--- /dev/null
+++ b/examples/cocoa/CocoaAppDelegate.mm
@@ -0,0 +1,241 @@
+////////////////////////////////////////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2012 Marco Antognini (antognini.marco@gmail.com),
+// Laurent Gomila (laurent.gom@gmail.com),
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+// you must not claim that you wrote the original software.
+// If you use this software in a product, an acknowledgment
+// in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+// and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+////////////////////////////////////////////////////////////
+
+#import "CocoaAppDelegate.h"
+#import "NSString+stdstring.h"
+
+// These define are used for converting the color of the NSPopUpButton
+#define BLUE @"Blue"
+#define GREEN @"Green"
+#define RED @"Red"
+
+// Our PIMPL
+struct SFMLmainWindow
+{
+ SFMLmainWindow(sf::WindowHandle win)
+ : renderWindow(win)
+ , background(sf::Color::Blue)
+ {
+ std::string resPath = [[[NSBundle mainBundle] resourcePath] tostdstring];
+ if (!logo.loadFromFile(resPath + "/logo.png")) {
+ NSLog(@"Couldn't load the logo image");
+ }
+
+ logo.setSmooth(true);
+
+ sprite.setTexture(logo, true);
+ sf::FloatRect rect = sprite.getLocalBounds();
+ sf::Vector2f size(rect.width, rect.height);
+ sprite.setOrigin(size / 2.f);
+ sprite.scale(0.3, 0.3);
+
+ unsigned int ww = renderWindow.getSize().x;
+ unsigned int wh = renderWindow.getSize().y;
+ sprite.setPosition(sf::Vector2f(ww, wh) / 2.f);
+
+ if (!font.loadFromFile(resPath + "/sansation.ttf")) {
+ NSLog(@"Couldn't load the font");
+ }
+
+ text.setColor(sf::Color::White);
+ text.setFont(font);
+ }
+
+ sf::RenderWindow renderWindow;
+ sf::Font font;
+ sf::Text text;
+ sf::Texture logo;
+ sf::Sprite sprite;
+ sf::Color background;
+};
+
+// Private stuff
+@interface CocoaAppDelegate ()
+
+@property (assign) SFMLmainWindow *mainWindow;
+@property (retain) NSTimer *renderTimer;
+@property (assign) BOOL visible;
+
+@property (assign) BOOL initialized;
+
+-(void)renderMainWindow:(NSTimer *)aTimer;
+
+@end
+
+
+// Finally, the implementation
+@implementation CocoaAppDelegate
+
+@synthesize window = m_window;
+@synthesize sfmlView = m_sfmlView;
+@synthesize textField = m_textField;
+
+@synthesize mainWindow = m_mainWindow;
+@synthesize renderTimer = m_renderTimer;
+@synthesize visible = m_visible;
+
+@synthesize initialized = m_initialized;
+
+- (id)init {
+ self = [super init];
+ if (self) {
+ self.initialized = NO;
+ }
+ return self;
+}
+
+-(void)applicationDidFinishLaunching:(NSNotification *)aNotification
+{
+ if (!self.initialized)
+ {
+ // Init the SFML render area.
+ self.mainWindow = new SFMLmainWindow(self.sfmlView);
+ self.mainWindow->text.setString([self.textField.stringValue tostdwstring]);
+ self.visible = YES;
+
+ // Launch the timer to periodically display our stuff into the Cocoa view.
+ self.renderTimer = [NSTimer timerWithTimeInterval:1.f/60.f
+ target:self
+ selector:@selector(renderMainWindow:)
+ userInfo:nil
+ repeats:YES];
+ [[NSRunLoop mainRunLoop] addTimer:self.renderTimer
+ forMode:NSDefaultRunLoopMode];
+ [[NSRunLoop mainRunLoop] addTimer:self.renderTimer
+ forMode:NSEventTrackingRunLoopMode];
+ /*
+ * This is really some ugly code but in order to have the timer fired
+ * periodically we need to add it to the two above runloop mode.
+ *
+ * The default mode allows timer firing while the user doesn't do anything
+ * while the second mode allows timer firing while he is using a slider
+ * or a menu.
+ */
+
+ self.initialized = YES;
+ }
+}
+
+-(void)dealloc
+{
+ [self.renderTimer invalidate];
+ self.mainWindow->renderWindow.close();
+
+ self.window = nil;
+ self.sfmlView = nil;
+ self.textField = nil;
+
+ delete (SFMLmainWindow *) self.mainWindow;
+ self.mainWindow = 0;
+ self.renderTimer = nil;
+
+ [super dealloc];
+}
+
+-(void)renderMainWindow:(NSTimer *)aTimer
+{
+ // Scaling
+ /* /!\ we do this at 60fps so choose low scaling factor! /!\ */
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
+ {
+ self.mainWindow->sprite.scale(1.01f, 1.01f);
+ }
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
+ {
+ self.mainWindow->sprite.scale(0.99f, 0.99f);
+ }
+
+ // Clear the window, display some stuff and display it into our view.
+
+ self.mainWindow->renderWindow.clear(self.mainWindow->background);
+
+ if (self.visible)
+ {
+ self.mainWindow->renderWindow.draw(self.mainWindow->sprite);
+ }
+
+ self.mainWindow->renderWindow.draw(self.mainWindow->text);
+
+ self.mainWindow->renderWindow.display();
+}
+
+-(IBAction)colorChanged:(NSPopUpButton *)sender
+{
+ if (self.initialized)
+ {
+ // Convert title to color
+ NSString *color = [[sender selectedItem] title];
+ if ([color isEqualToString:BLUE])
+ {
+ self.mainWindow->background = sf::Color::Blue;
+ }
+ else if ([color isEqualToString:GREEN])
+ {
+ self.mainWindow->background = sf::Color::Green;
+ }
+ else
+ {
+ self.mainWindow->background = sf::Color::Red;
+ }
+ }
+}
+
+-(IBAction)rotationChanged:(NSSlider *)sender
+{
+ if (self.initialized)
+ {
+ float angle = [sender floatValue];
+ self.mainWindow->sprite.setRotation(angle);
+ }
+}
+
+-(IBAction)visibleChanged:(NSButton *)sender
+{
+ if (self.initialized)
+ self.visible = [sender state] == NSOnState;
+}
+
+-(IBAction)textChanged:(NSTextField *)sender
+{
+ if (self.initialized)
+ self.mainWindow->text.setString([[sender stringValue] tostdwstring]);
+}
+
+- (IBAction)updateText:(NSButton *)sender
+{
+ // Simply simulate textChanged :
+ [self textChanged:self.textField];
+}
+
+@end
+
+@implementation SilentWindow
+
+-(void)keyDown:(NSEvent *)theEvent
+{
+ // Do nothing except preventing this alert.
+}
+
+@end
diff --git a/examples/cocoa/MainMenu.xib b/examples/cocoa/MainMenu.xib
new file mode 100644
index 0000000..2001ff5
--- /dev/null
+++ b/examples/cocoa/MainMenu.xib
@@ -0,0 +1,4180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1070</int>
+ <string key="IBDocument.SystemVersion">11C74</string>
+ <string key="IBDocument.InterfaceBuilderVersion">1938</string>
+ <string key="IBDocument.AppKitVersion">1138.23</string>
+ <string key="IBDocument.HIToolboxVersion">567.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">1938</string>
+ </object>
+ <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSPopUpButton</string>
+ <string>NSMenuItem</string>
+ <string>NSMenu</string>
+ <string>NSTextFieldCell</string>
+ <string>NSButtonCell</string>
+ <string>NSButton</string>
+ <string>NSSlider</string>
+ <string>NSSliderCell</string>
+ <string>NSCustomObject</string>
+ <string>NSCustomView</string>
+ <string>NSView</string>
+ <string>NSWindowTemplate</string>
+ <string>NSTextField</string>
+ <string>NSPopUpButtonCell</string>
+ </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">
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1021">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSCustomObject" id="1014">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1050">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSMenu" id="649796088">
+ <string key="NSTitle">AMainMenu</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="694149608">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Cocoa</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSOnImage" id="35465992">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="502551668">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="110575045">
+ <string key="NSTitle">Cocoa</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="238522557">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">About Cocoa</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="304266470">
+ <reference key="NSMenu" ref="110575045"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="609285721">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Preferences…</string>
+ <string key="NSKeyEquiv">,</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="481834944">
+ <reference key="NSMenu" ref="110575045"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1046388886">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Services</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="752062318">
+ <string key="NSTitle">Services</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSName">_NSServicesMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="646227648">
+ <reference key="NSMenu" ref="110575045"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="755159360">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Hide Cocoa</string>
+ <string key="NSKeyEquiv">h</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="342932134">
+ <reference key="NSMenu" ref="110575045"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="908899353">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Show All</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1056857174">
+ <reference key="NSMenu" ref="110575045"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="632727374">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Quit Cocoa</string>
+ <string key="NSKeyEquiv">q</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSAppleMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="379814623">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">File</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="720053764">
+ <string key="NSTitle">File</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="705341025">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">New</string>
+ <string key="NSKeyEquiv">n</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="722745758">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Open…</string>
+ <string key="NSKeyEquiv">o</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1025936716">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Open Recent</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="1065607017">
+ <string key="NSTitle">Open Recent</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="759406840">
+ <reference key="NSMenu" ref="1065607017"/>
+ <string key="NSTitle">Clear Menu</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSRecentDocumentsMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="425164168">
+ <reference key="NSMenu" ref="720053764"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="776162233">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Close</string>
+ <string key="NSKeyEquiv">w</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1023925487">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Save</string>
+ <string key="NSKeyEquiv">s</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="117038363">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Save As…</string>
+ <string key="NSKeyEquiv">S</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="579971712">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Revert to Saved</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1010469920">
+ <reference key="NSMenu" ref="720053764"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="294629803">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Page Setup...</string>
+ <string key="NSKeyEquiv">P</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSToolTip"/>
+ </object>
+ <object class="NSMenuItem" id="49223823">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Print…</string>
+ <string key="NSKeyEquiv">p</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="952259628">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Edit</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="789758025">
+ <string key="NSTitle">Edit</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1058277027">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Undo</string>
+ <string key="NSKeyEquiv">z</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="790794224">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Redo</string>
+ <string key="NSKeyEquiv">Z</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1040322652">
+ <reference key="NSMenu" ref="789758025"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="296257095">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Cut</string>
+ <string key="NSKeyEquiv">x</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="860595796">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Copy</string>
+ <string key="NSKeyEquiv">c</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="29853731">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Paste</string>
+ <string key="NSKeyEquiv">v</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="82994268">
+ <reference key="NSMenu" ref="789758025"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="437104165">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Delete</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="583158037">
+ <reference key="NSMenu" ref="789758025"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="212016141">
+ <reference key="NSMenu" ref="789758025"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="892235320">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Find</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="963351320">
+ <string key="NSTitle">Find</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="447796847">
+ <reference key="NSMenu" ref="963351320"/>
+ <string key="NSTitle">Find…</string>
+ <string key="NSKeyEquiv">f</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="326711663">
+ <reference key="NSMenu" ref="963351320"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="270902937">
+ <reference key="NSMenu" ref="963351320"/>
+ <string key="NSTitle">Find Previous</string>
+ <string key="NSKeyEquiv">G</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="159080638">
+ <reference key="NSMenu" ref="963351320"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">7</int>
+ </object>
+ <object class="NSMenuItem" id="88285865">
+ <reference key="NSMenu" ref="963351320"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="972420730">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Spelling and Grammar</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="769623530">
+ <string key="NSTitle">Spelling and Grammar</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="679648819">
+ <reference key="NSMenu" ref="769623530"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="96193923">
+ <reference key="NSMenu" ref="769623530"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="859480356">
+ <reference key="NSMenu" ref="769623530"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="948374510">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Check Spelling While Typing</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="967646866">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Check Grammar With Spelling</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="795346622">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Correct Spelling Automatically</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="507821607">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Substitutions</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="698887838">
+ <string key="NSTitle">Substitutions</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="65139061">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Show Substitutions</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="19036812">
+ <reference key="NSMenu" ref="698887838"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="605118523">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Copy/Paste</string>
+ <string key="NSKeyEquiv">f</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="197661976">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Quotes</string>
+ <string key="NSKeyEquiv">g</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="672708820">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Dashes</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="708854459">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Links</string>
+ <string key="NSKeyEquiv">G</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="537092702">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Text Replacement</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="288088188">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Transformations</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="579392910">
+ <string key="NSTitle">Transformations</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1060694897">
+ <reference key="NSMenu" ref="579392910"/>
+ <string key="NSTitle">Make Upper Case</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="879586729">
+ <reference key="NSMenu" ref="579392910"/>
+ <string key="NSTitle">Make Lower Case</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="56570060">
+ <reference key="NSMenu" ref="579392910"/>
+ <string key="NSTitle">Capitalize</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="676164635">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Speech</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="785027613">
+ <string key="NSTitle">Speech</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="731782645">
+ <reference key="NSMenu" ref="785027613"/>
+ <string key="NSTitle">Start Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="680220178">
+ <reference key="NSMenu" ref="785027613"/>
+ <string key="NSTitle">Stop Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="302598603">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Format</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="941447902">
+ <string key="NSTitle">Format</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="792887677">
+ <reference key="NSMenu" ref="941447902"/>
+ <string key="NSTitle">Font</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="786677654">
+ <string key="NSTitle">Font</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="159677712">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="305399458">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Bold</string>
+ <string key="NSKeyEquiv">b</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="814362025">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Italic</string>
+ <string key="NSKeyEquiv">i</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="330926929">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Underline</string>
+ <string key="NSKeyEquiv">u</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="533507878">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="158063935">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Bigger</string>
+ <string key="NSKeyEquiv">+</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="885547335">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Smaller</string>
+ <string key="NSKeyEquiv">-</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">4</int>
+ </object>
+ <object class="NSMenuItem" id="901062459">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="767671776">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Kern</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="175441468">
+ <string key="NSTitle">Kern</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="252969304">
+ <reference key="NSMenu" ref="175441468"/>
+ <string key="NSTitle">Use Default</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="766922938">
+ <reference key="NSMenu" ref="175441468"/>
+ <string key="NSTitle">Use None</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="677519740">
+ <reference key="NSMenu" ref="175441468"/>
+ <string key="NSTitle">Tighten</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="238351151">
+ <reference key="NSMenu" ref="175441468"/>
+ <string key="NSTitle">Loosen</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="691570813">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Ligature</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="1058217995">
+ <string key="NSTitle">Ligature</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="706297211">
+ <reference key="NSMenu" ref="1058217995"/>
+ <string key="NSTitle">Use Default</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="568384683">
+ <reference key="NSMenu" ref="1058217995"/>
+ <string key="NSTitle">Use None</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="663508465">
+ <reference key="NSMenu" ref="1058217995"/>
+ <string key="NSTitle">Use All</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="769124883">
+ <reference key="NSMenu" ref="786677654"/>
+ <string key="NSTitle">Baseline</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="18263474">
+ <string key="NSTitle">Baseline</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="257962622">
+ <reference key="NSMenu" ref="18263474"/>
+ <string key="NSTitle">Use Default</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="644725453">
+ <reference key="NSMenu" ref="18263474"/>
+ <string key="NSTitle">Superscript</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1037576581">
+ <reference key="NSMenu" ref="18263474"/>
+ <string key="NSTitle">Subscript</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="941806246">
+ <reference key="NSMenu" ref="18263474"/>
+ <string key="NSTitle">Raise</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1045724900">
+ <reference key="NSMenu" ref="18263474"/>
+ <string key="NSTitle">Lower</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="739652853">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1012600125">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="214559597">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="596732606">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="393423671">
+ <reference key="NSMenu" ref="786677654"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSFontMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="215659978">
+ <reference key="NSMenu" ref="941447902"/>
+ <string key="NSTitle">Text</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="446991534">
+ <string key="NSTitle">Text</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="875092757">
+ <reference key="NSMenu" ref="446991534"/>
+ <string key="NSTitle">Align Left</string>
+ <string key="NSKeyEquiv">{</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="630155264">
+ <reference key="NSMenu" ref="446991534"/>
+ <string key="NSTitle">Center</string>
+ <string key="NSKeyEquiv">|</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="945678886">
+ <reference key="NSMenu" ref="446991534"/>
+ <string key="NSTitle">Justify</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="512868991">
+ <reference key="NSMenu" ref="446991534"/>
+ <string key="NSTitle">Align Right</string>
+ <string key="NSKeyEquiv">}</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="163117631">
+ <reference key="NSMenu" ref="446991534"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="31516759">
+ <reference key="NSMenu" ref="446991534"/>
+ <string key="NSTitle">Writing Direction</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="956096989">
+ <string key="NSTitle">Writing Direction</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="257099033">
+ <reference key="NSMenu" ref="956096989"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <string key="NSTitle">Paragraph</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="551969625">
+ <reference key="NSMenu" ref="956096989"/>
+ <string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="249532473">
+ <reference key="NSMenu" ref="956096989"/>
+ <string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="607364498">
+ <reference key="NSMenu" ref="956096989"/>
+ <string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="508151438">
+ <reference key="NSMenu" ref="956096989"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="981751889">
+ <reference key="NSMenu" ref="956096989"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <string key="NSTitle">Selection</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="380031999">
+ <reference key="NSMenu" ref="956096989"/>
+ <string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="825984362">
+ <reference key="NSMenu" ref="956096989"/>
+ <string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="560145579">
+ <reference key="NSMenu" ref="956096989"/>
+ <string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="908105787">
+ <reference key="NSMenu" ref="446991534"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="644046920">
+ <reference key="NSMenu" ref="446991534"/>
+ <string key="NSTitle">Show Ruler</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="231811626">
+ <reference key="NSMenu" ref="446991534"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="883618387">
+ <reference key="NSMenu" ref="446991534"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="586577488">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">View</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="466310130">
+ <string key="NSTitle">View</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="102151532">
+ <reference key="NSMenu" ref="466310130"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="237841660">
+ <reference key="NSMenu" ref="466310130"/>
+ <string key="NSTitle">Customize Toolbar…</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="713487014">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Window</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="835318025">
+ <string key="NSTitle">Window</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1011231497">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Minimize</string>
+ <string key="NSKeyEquiv">m</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="575023229">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Zoom</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="299356726">
+ <reference key="NSMenu" ref="835318025"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="625202149">
+ <reference key="NSMenu" ref="835318025"/>
+ <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="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSWindowsMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="448692316">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Help</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="992780483">
+ <string key="NSTitle">Help</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="105068016">
+ <reference key="NSMenu" ref="992780483"/>
+ <string key="NSTitle">Cocoa Help</string>
+ <string key="NSKeyEquiv">?</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSHelpMenu</string>
+ </object>
+ </object>
+ </object>
+ <string key="NSName">_NSMainMenu</string>
+ </object>
+ <object class="NSWindowTemplate" id="972006081">
+ <int key="NSWindowStyleMask">7</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{232, 390}, {485, 379}}</string>
+ <int key="NSWTFlags">1417150464</int>
+ <string key="NSWindowTitle">Cocoa</string>
+ <string key="NSWindowClass">SilentWindow</string>
+ <nil key="NSViewClass"/>
+ <nil key="NSUserInterfaceItemIdentifier"/>
+ <object class="NSView" key="NSWindowView" id="439893737">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSPopUpButton" id="895645105">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{366, 35}, {97, 26}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="422780221"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSPopUpButtonCell" key="NSCell" id="939854878">
+ <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags2">134219776</int>
+ <object class="NSFont" key="NSSupport" id="507345084">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="895645105"/>
+ <int key="NSButtonFlags">-2035138305</int>
+ <int key="NSButtonFlags2">129</int>
+ <reference key="NSAlternateImage" ref="507345084"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ <object class="NSMenuItem" key="NSMenuItem" id="468569656">
+ <reference key="NSMenu" ref="526523505"/>
+ <string key="NSTitle">Blue</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <int key="NSState">1</int>
+ <object class="NSCustomResource" key="NSImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">blue</string>
+ </object>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="939854878"/>
+ </object>
+ <bool key="NSMenuItemRespectAlignment">YES</bool>
+ <object class="NSMenu" key="NSMenu" id="526523505">
+ <string key="NSTitle">Color</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="468569656"/>
+ <object class="NSMenuItem" id="461530193">
+ <reference key="NSMenu" ref="526523505"/>
+ <string key="NSTitle">Green</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">green</string>
+ </object>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="939854878"/>
+ </object>
+ <object class="NSMenuItem" id="969578911">
+ <reference key="NSMenu" ref="526523505"/>
+ <string key="NSTitle">Red</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">red</string>
+ </object>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="939854878"/>
+ </object>
+ </object>
+ <reference key="NSMenuFont" ref="507345084"/>
+ </object>
+ <int key="NSSelectedIndex">-1</int>
+ <int key="NSPreferredEdge">1</int>
+ <bool key="NSUsesItemFromMenu">YES</bool>
+ <bool key="NSAltersState">YES</bool>
+ <int key="NSArrowPosition">2</int>
+ </object>
+ </object>
+ <object class="NSSlider" id="186246764">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{234, 34}, {28, 30}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="886444468"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSliderCell" key="NSCell" id="171036244">
+ <int key="NSCellFlags">67501824</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents"/>
+ <reference key="NSControlView" ref="186246764"/>
+ <double key="NSMaxValue">359</double>
+ <double key="NSMinValue">0.0</double>
+ <double key="NSValue">0.0</double>
+ <double key="NSAltIncValue">0.0</double>
+ <int key="NSNumberOfTickMarks">0</int>
+ <int key="NSTickMarkPosition">1</int>
+ <bool key="NSAllowsTickMarkValuesOnly">NO</bool>
+ <bool key="NSVertical">NO</bool>
+ <int key="NSSliderType">1</int>
+ </object>
+ </object>
+ <object class="NSButton" id="336088134">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{18, 40}, {64, 18}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="482000415"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="934915496">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Visible</string>
+ <reference key="NSSupport" ref="507345084"/>
+ <reference key="NSControlView" ref="336088134"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="482000415">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{172, 41}, {57, 17}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="186246764"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="575979405">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Rotation</string>
+ <reference key="NSSupport" ref="507345084"/>
+ <reference key="NSControlView" ref="482000415"/>
+ <object class="NSColor" key="NSBackgroundColor" id="86428082">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="429197527">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="1073457999">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="886444468">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{325, 39}, {39, 17}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="895645105"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="67668546">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Color</string>
+ <reference key="NSSupport" ref="507345084"/>
+ <reference key="NSControlView" ref="886444468"/>
+ <reference key="NSBackgroundColor" ref="86428082"/>
+ <reference key="NSTextColor" ref="429197527"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="969295846">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{20, 337}, {359, 22}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="301002623"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1043401668">
+ <int key="NSCellFlags">-1803944383</int>
+ <int key="NSCellFlags2">272630848</int>
+ <string key="NSContents">Hello SFML!</string>
+ <reference key="NSSupport" ref="507345084"/>
+ <string key="NSPlaceholderString">Enter some text here</string>
+ <reference key="NSControlView" ref="969295846"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="1073457999"/>
+ </object>
+ <object class="NSArray" key="NSAllowedInputLocales">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSAllRomanInputSourcesLocaleIdentifier</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSCustomView" id="301002623">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{20, 72}, {440, 260}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="531630843"/>
+ <string key="NSClassName">NSView</string>
+ </object>
+ <object class="NSButton" id="531630843">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{381, 331}, {85, 32}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="336088134"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="1053978795">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Update</string>
+ <reference key="NSSupport" ref="507345084"/>
+ <reference key="NSControlView" ref="531630843"/>
+ <int key="NSButtonFlags">-2038021889</int>
+ <int key="NSButtonFlags2">129</int>
+ <reference key="NSAlternateImage" ref="507345084"/>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="422780221">
+ <reference key="NSNextResponder" ref="439893737"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{17, 2}, {451, 17}}</string>
+ <reference key="NSSuperview" ref="439893737"/>
+ <reference key="NSWindow"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="702743979">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Tips : you can use up and down arrows to scale the logo.</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="422780221"/>
+ <reference key="NSBackgroundColor" ref="86428082"/>
+ <reference key="NSTextColor" ref="429197527"/>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{485, 379}</string>
+ <reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="969295846"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
+ <string key="NSMaxSize">{10000000000000, 10000000000000}</string>
+ <bool key="NSAutorecalculatesContentBorderThicknessMinY">NO</bool>
+ <double key="NSContentBorderThicknessMinY">22</double>
+ <bool key="NSWindowIsRestorable">YES</bool>
+ </object>
+ <object class="NSCustomObject" id="976324537">
+ <string key="NSClassName">CocoaAppDelegate</string>
+ </object>
+ <object class="NSCustomObject" id="755631768">
+ <string key="NSClassName">NSFontManager</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">terminate:</string>
+ <reference key="source" ref="1050"/>
+ <reference key="destination" ref="632727374"/>
+ </object>
+ <int key="connectionID">449</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontStandardAboutPanel:</string>
+ <reference key="source" ref="1021"/>
+ <reference key="destination" ref="238522557"/>
+ </object>
+ <int key="connectionID">142</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="1021"/>
+ <reference key="destination" ref="976324537"/>
+ </object>
+ <int key="connectionID">495</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performMiniaturize:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1011231497"/>
+ </object>
+ <int key="connectionID">37</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">arrangeInFront:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="625202149"/>
+ </object>
+ <int key="connectionID">39</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">print:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="49223823"/>
+ </object>
+ <int key="connectionID">86</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">runPageLayout:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="294629803"/>
+ </object>
+ <int key="connectionID">87</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">clearRecentDocuments:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="759406840"/>
+ </object>
+ <int key="connectionID">127</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performClose:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="776162233"/>
+ </object>
+ <int key="connectionID">193</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleContinuousSpellChecking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="948374510"/>
+ </object>
+ <int key="connectionID">222</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">undo:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1058277027"/>
+ </object>
+ <int key="connectionID">223</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copy:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="860595796"/>
+ </object>
+ <int key="connectionID">224</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">checkSpelling:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="96193923"/>
+ </object>
+ <int key="connectionID">225</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">paste:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="29853731"/>
+ </object>
+ <int key="connectionID">226</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">stopSpeaking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="680220178"/>
+ </object>
+ <int key="connectionID">227</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cut:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="296257095"/>
+ </object>
+ <int key="connectionID">228</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showGuessPanel:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="679648819"/>
+ </object>
+ <int key="connectionID">230</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">redo:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="790794224"/>
+ </object>
+ <int key="connectionID">231</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">selectAll:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="583158037"/>
+ </object>
+ <int key="connectionID">232</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">startSpeaking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="731782645"/>
+ </object>
+ <int key="connectionID">233</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">delete:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="437104165"/>
+ </object>
+ <int key="connectionID">235</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performZoom:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="575023229"/>
+ </object>
+ <int key="connectionID">240</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="447796847"/>
+ </object>
+ <int key="connectionID">241</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">centerSelectionInVisibleArea:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="88285865"/>
+ </object>
+ <int key="connectionID">245</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleGrammarChecking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="967646866"/>
+ </object>
+ <int key="connectionID">347</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleSmartInsertDelete:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="605118523"/>
+ </object>
+ <int key="connectionID">355</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticQuoteSubstitution:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="197661976"/>
+ </object>
+ <int key="connectionID">356</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticLinkDetection:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="708854459"/>
+ </object>
+ <int key="connectionID">357</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">saveDocument:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1023925487"/>
+ </object>
+ <int key="connectionID">362</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">saveDocumentAs:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="117038363"/>
+ </object>
+ <int key="connectionID">363</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">revertDocumentToSaved:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="579971712"/>
+ </object>
+ <int key="connectionID">364</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">runToolbarCustomizationPalette:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="237841660"/>
+ </object>
+ <int key="connectionID">365</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleToolbarShown:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="102151532"/>
+ </object>
+ <int key="connectionID">366</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hide:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="755159360"/>
+ </object>
+ <int key="connectionID">367</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hideOtherApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="342932134"/>
+ </object>
+ <int key="connectionID">368</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unhideAllApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="908899353"/>
+ </object>
+ <int key="connectionID">370</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">newDocument:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="705341025"/>
+ </object>
+ <int key="connectionID">373</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">openDocument:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="722745758"/>
+ </object>
+ <int key="connectionID">374</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">raiseBaseline:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="941806246"/>
+ </object>
+ <int key="connectionID">426</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">lowerBaseline:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1045724900"/>
+ </object>
+ <int key="connectionID">427</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copyFont:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="596732606"/>
+ </object>
+ <int key="connectionID">428</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">subscript:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1037576581"/>
+ </object>
+ <int key="connectionID">429</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">superscript:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="644725453"/>
+ </object>
+ <int key="connectionID">430</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">tightenKerning:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="677519740"/>
+ </object>
+ <int key="connectionID">431</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">underline:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="330926929"/>
+ </object>
+ <int key="connectionID">432</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontColorPanel:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1012600125"/>
+ </object>
+ <int key="connectionID">433</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">useAllLigatures:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="663508465"/>
+ </object>
+ <int key="connectionID">434</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">loosenKerning:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="238351151"/>
+ </object>
+ <int key="connectionID">435</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pasteFont:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="393423671"/>
+ </object>
+ <int key="connectionID">436</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unscript:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="257962622"/>
+ </object>
+ <int key="connectionID">437</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">useStandardKerning:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="252969304"/>
+ </object>
+ <int key="connectionID">438</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">useStandardLigatures:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="706297211"/>
+ </object>
+ <int key="connectionID">439</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">turnOffLigatures:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="568384683"/>
+ </object>
+ <int key="connectionID">440</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">turnOffKerning:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="766922938"/>
+ </object>
+ <int key="connectionID">441</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticSpellingCorrection:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="795346622"/>
+ </object>
+ <int key="connectionID">456</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontSubstitutionsPanel:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="65139061"/>
+ </object>
+ <int key="connectionID">458</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticDashSubstitution:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="672708820"/>
+ </object>
+ <int key="connectionID">461</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticTextReplacement:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="537092702"/>
+ </object>
+ <int key="connectionID">463</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">uppercaseWord:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1060694897"/>
+ </object>
+ <int key="connectionID">464</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">capitalizeWord:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="56570060"/>
+ </object>
+ <int key="connectionID">467</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">lowercaseWord:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="879586729"/>
+ </object>
+ <int key="connectionID">468</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pasteAsPlainText:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="82994268"/>
+ </object>
+ <int key="connectionID">486</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="326711663"/>
+ </object>
+ <int key="connectionID">487</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="270902937"/>
+ </object>
+ <int key="connectionID">488</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="159080638"/>
+ </object>
+ <int key="connectionID">489</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showHelp:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="105068016"/>
+ </object>
+ <int key="connectionID">493</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignCenter:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="630155264"/>
+ </object>
+ <int key="connectionID">518</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pasteRuler:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="883618387"/>
+ </object>
+ <int key="connectionID">519</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleRuler:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="644046920"/>
+ </object>
+ <int key="connectionID">520</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignRight:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="512868991"/>
+ </object>
+ <int key="connectionID">521</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copyRuler:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="231811626"/>
+ </object>
+ <int key="connectionID">522</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignJustified:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="945678886"/>
+ </object>
+ <int key="connectionID">523</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignLeft:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="875092757"/>
+ </object>
+ <int key="connectionID">524</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">makeBaseWritingDirectionNatural:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="551969625"/>
+ </object>
+ <int key="connectionID">525</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">makeBaseWritingDirectionLeftToRight:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="249532473"/>
+ </object>
+ <int key="connectionID">526</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">makeBaseWritingDirectionRightToLeft:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="607364498"/>
+ </object>
+ <int key="connectionID">527</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">makeTextWritingDirectionNatural:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="380031999"/>
+ </object>
+ <int key="connectionID">528</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">makeTextWritingDirectionLeftToRight:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="825984362"/>
+ </object>
+ <int key="connectionID">529</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">makeTextWritingDirectionRightToLeft:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="560145579"/>
+ </object>
+ <int key="connectionID">530</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">initialFirstResponder</string>
+ <reference key="source" ref="972006081"/>
+ <reference key="destination" ref="969295846"/>
+ </object>
+ <int key="connectionID">559</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addFontTrait:</string>
+ <reference key="source" ref="755631768"/>
+ <reference key="destination" ref="305399458"/>
+ </object>
+ <int key="connectionID">421</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addFontTrait:</string>
+ <reference key="source" ref="755631768"/>
+ <reference key="destination" ref="814362025"/>
+ </object>
+ <int key="connectionID">422</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">modifyFont:</string>
+ <reference key="source" ref="755631768"/>
+ <reference key="destination" ref="885547335"/>
+ </object>
+ <int key="connectionID">423</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontFontPanel:</string>
+ <reference key="source" ref="755631768"/>
+ <reference key="destination" ref="159677712"/>
+ </object>
+ <int key="connectionID">424</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">modifyFont:</string>
+ <reference key="source" ref="755631768"/>
+ <reference key="destination" ref="158063935"/>
+ </object>
+ <int key="connectionID">425</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="972006081"/>
+ </object>
+ <int key="connectionID">532</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">colorChanged:</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="895645105"/>
+ </object>
+ <int key="connectionID">557</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">sfmlView</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="301002623"/>
+ </object>
+ <int key="connectionID">558</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">rotationChanged:</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="186246764"/>
+ </object>
+ <int key="connectionID">560</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">visibleChanged:</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="336088134"/>
+ </object>
+ <int key="connectionID">561</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">textChanged:</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="969295846"/>
+ </object>
+ <int key="connectionID">562</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textField</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="969295846"/>
+ </object>
+ <int key="connectionID">566</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">updateText:</string>
+ <reference key="source" ref="976324537"/>
+ <reference key="destination" ref="531630843"/>
+ </object>
+ <int key="connectionID">567</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>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="1048"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1021"/>
+ <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="1014"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1050"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">29</int>
+ <reference key="object" ref="649796088"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="713487014"/>
+ <reference ref="694149608"/>
+ <reference ref="952259628"/>
+ <reference ref="379814623"/>
+ <reference ref="586577488"/>
+ <reference ref="302598603"/>
+ <reference ref="448692316"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">19</int>
+ <reference key="object" ref="713487014"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="835318025"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">56</int>
+ <reference key="object" ref="694149608"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="110575045"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">217</int>
+ <reference key="object" ref="952259628"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="789758025"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">83</int>
+ <reference key="object" ref="379814623"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="720053764"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">81</int>
+ <reference key="object" ref="720053764"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1023925487"/>
+ <reference ref="117038363"/>
+ <reference ref="49223823"/>
+ <reference ref="722745758"/>
+ <reference ref="705341025"/>
+ <reference ref="1025936716"/>
+ <reference ref="294629803"/>
+ <reference ref="776162233"/>
+ <reference ref="425164168"/>
+ <reference ref="579971712"/>
+ <reference ref="1010469920"/>
+ </object>
+ <reference key="parent" ref="379814623"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">75</int>
+ <reference key="object" ref="1023925487"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">80</int>
+ <reference key="object" ref="117038363"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">78</int>
+ <reference key="object" ref="49223823"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">72</int>
+ <reference key="object" ref="722745758"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">82</int>
+ <reference key="object" ref="705341025"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">124</int>
+ <reference key="object" ref="1025936716"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1065607017"/>
+ </object>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">77</int>
+ <reference key="object" ref="294629803"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">73</int>
+ <reference key="object" ref="776162233"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">79</int>
+ <reference key="object" ref="425164168"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">112</int>
+ <reference key="object" ref="579971712"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">74</int>
+ <reference key="object" ref="1010469920"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">125</int>
+ <reference key="object" ref="1065607017"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="759406840"/>
+ </object>
+ <reference key="parent" ref="1025936716"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">126</int>
+ <reference key="object" ref="759406840"/>
+ <reference key="parent" ref="1065607017"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">205</int>
+ <reference key="object" ref="789758025"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="437104165"/>
+ <reference ref="583158037"/>
+ <reference ref="1058277027"/>
+ <reference ref="212016141"/>
+ <reference ref="296257095"/>
+ <reference ref="29853731"/>
+ <reference ref="860595796"/>
+ <reference ref="1040322652"/>
+ <reference ref="790794224"/>
+ <reference ref="892235320"/>
+ <reference ref="972420730"/>
+ <reference ref="676164635"/>
+ <reference ref="507821607"/>
+ <reference ref="288088188"/>
+ <reference ref="82994268"/>
+ </object>
+ <reference key="parent" ref="952259628"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">202</int>
+ <reference key="object" ref="437104165"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">198</int>
+ <reference key="object" ref="583158037"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">207</int>
+ <reference key="object" ref="1058277027"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">214</int>
+ <reference key="object" ref="212016141"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">199</int>
+ <reference key="object" ref="296257095"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">203</int>
+ <reference key="object" ref="29853731"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">197</int>
+ <reference key="object" ref="860595796"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">206</int>
+ <reference key="object" ref="1040322652"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">215</int>
+ <reference key="object" ref="790794224"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">218</int>
+ <reference key="object" ref="892235320"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="963351320"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">216</int>
+ <reference key="object" ref="972420730"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="769623530"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">200</int>
+ <reference key="object" ref="769623530"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="948374510"/>
+ <reference ref="96193923"/>
+ <reference ref="679648819"/>
+ <reference ref="967646866"/>
+ <reference ref="859480356"/>
+ <reference ref="795346622"/>
+ </object>
+ <reference key="parent" ref="972420730"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">219</int>
+ <reference key="object" ref="948374510"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">201</int>
+ <reference key="object" ref="96193923"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">204</int>
+ <reference key="object" ref="679648819"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">220</int>
+ <reference key="object" ref="963351320"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="270902937"/>
+ <reference ref="88285865"/>
+ <reference ref="159080638"/>
+ <reference ref="326711663"/>
+ <reference ref="447796847"/>
+ </object>
+ <reference key="parent" ref="892235320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">213</int>
+ <reference key="object" ref="270902937"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">210</int>
+ <reference key="object" ref="88285865"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">221</int>
+ <reference key="object" ref="159080638"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">208</int>
+ <reference key="object" ref="326711663"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">209</int>
+ <reference key="object" ref="447796847"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">57</int>
+ <reference key="object" ref="110575045"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="238522557"/>
+ <reference ref="755159360"/>
+ <reference ref="908899353"/>
+ <reference ref="632727374"/>
+ <reference ref="646227648"/>
+ <reference ref="609285721"/>
+ <reference ref="481834944"/>
+ <reference ref="304266470"/>
+ <reference ref="1046388886"/>
+ <reference ref="1056857174"/>
+ <reference ref="342932134"/>
+ </object>
+ <reference key="parent" ref="694149608"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">58</int>
+ <reference key="object" ref="238522557"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">134</int>
+ <reference key="object" ref="755159360"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">150</int>
+ <reference key="object" ref="908899353"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">136</int>
+ <reference key="object" ref="632727374"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">144</int>
+ <reference key="object" ref="646227648"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">129</int>
+ <reference key="object" ref="609285721"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">143</int>
+ <reference key="object" ref="481834944"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">236</int>
+ <reference key="object" ref="304266470"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">131</int>
+ <reference key="object" ref="1046388886"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="752062318"/>
+ </object>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">149</int>
+ <reference key="object" ref="1056857174"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">145</int>
+ <reference key="object" ref="342932134"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">130</int>
+ <reference key="object" ref="752062318"/>
+ <reference key="parent" ref="1046388886"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">24</int>
+ <reference key="object" ref="835318025"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="299356726"/>
+ <reference ref="625202149"/>
+ <reference ref="575023229"/>
+ <reference ref="1011231497"/>
+ </object>
+ <reference key="parent" ref="713487014"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">92</int>
+ <reference key="object" ref="299356726"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="625202149"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">239</int>
+ <reference key="object" ref="575023229"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">23</int>
+ <reference key="object" ref="1011231497"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">295</int>
+ <reference key="object" ref="586577488"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="466310130"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">296</int>
+ <reference key="object" ref="466310130"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="102151532"/>
+ <reference ref="237841660"/>
+ </object>
+ <reference key="parent" ref="586577488"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">297</int>
+ <reference key="object" ref="102151532"/>
+ <reference key="parent" ref="466310130"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">298</int>
+ <reference key="object" ref="237841660"/>
+ <reference key="parent" ref="466310130"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">211</int>
+ <reference key="object" ref="676164635"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="785027613"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">212</int>
+ <reference key="object" ref="785027613"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="680220178"/>
+ <reference ref="731782645"/>
+ </object>
+ <reference key="parent" ref="676164635"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">195</int>
+ <reference key="object" ref="680220178"/>
+ <reference key="parent" ref="785027613"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">196</int>
+ <reference key="object" ref="731782645"/>
+ <reference key="parent" ref="785027613"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">346</int>
+ <reference key="object" ref="967646866"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">348</int>
+ <reference key="object" ref="507821607"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="698887838"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">349</int>
+ <reference key="object" ref="698887838"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="605118523"/>
+ <reference ref="197661976"/>
+ <reference ref="708854459"/>
+ <reference ref="65139061"/>
+ <reference ref="19036812"/>
+ <reference ref="672708820"/>
+ <reference ref="537092702"/>
+ </object>
+ <reference key="parent" ref="507821607"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">350</int>
+ <reference key="object" ref="605118523"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">351</int>
+ <reference key="object" ref="197661976"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">354</int>
+ <reference key="object" ref="708854459"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">371</int>
+ <reference key="object" ref="972006081"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="439893737"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Main Window</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">372</int>
+ <reference key="object" ref="439893737"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="895645105"/>
+ <reference ref="886444468"/>
+ <reference ref="336088134"/>
+ <reference ref="186246764"/>
+ <reference ref="482000415"/>
+ <reference ref="969295846"/>
+ <reference ref="301002623"/>
+ <reference ref="531630843"/>
+ <reference ref="422780221"/>
+ </object>
+ <reference key="parent" ref="972006081"/>
+ <string key="objectName">Content View</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">375</int>
+ <reference key="object" ref="302598603"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="941447902"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">376</int>
+ <reference key="object" ref="941447902"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="792887677"/>
+ <reference ref="215659978"/>
+ </object>
+ <reference key="parent" ref="302598603"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">377</int>
+ <reference key="object" ref="792887677"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="786677654"/>
+ </object>
+ <reference key="parent" ref="941447902"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">388</int>
+ <reference key="object" ref="786677654"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="159677712"/>
+ <reference ref="305399458"/>
+ <reference ref="814362025"/>
+ <reference ref="330926929"/>
+ <reference ref="533507878"/>
+ <reference ref="158063935"/>
+ <reference ref="885547335"/>
+ <reference ref="901062459"/>
+ <reference ref="767671776"/>
+ <reference ref="691570813"/>
+ <reference ref="769124883"/>
+ <reference ref="739652853"/>
+ <reference ref="1012600125"/>
+ <reference ref="214559597"/>
+ <reference ref="596732606"/>
+ <reference ref="393423671"/>
+ </object>
+ <reference key="parent" ref="792887677"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">389</int>
+ <reference key="object" ref="159677712"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">390</int>
+ <reference key="object" ref="305399458"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">391</int>
+ <reference key="object" ref="814362025"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">392</int>
+ <reference key="object" ref="330926929"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">393</int>
+ <reference key="object" ref="533507878"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">394</int>
+ <reference key="object" ref="158063935"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">395</int>
+ <reference key="object" ref="885547335"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">396</int>
+ <reference key="object" ref="901062459"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">397</int>
+ <reference key="object" ref="767671776"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="175441468"/>
+ </object>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">398</int>
+ <reference key="object" ref="691570813"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1058217995"/>
+ </object>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">399</int>
+ <reference key="object" ref="769124883"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="18263474"/>
+ </object>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">400</int>
+ <reference key="object" ref="739652853"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">401</int>
+ <reference key="object" ref="1012600125"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">402</int>
+ <reference key="object" ref="214559597"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">403</int>
+ <reference key="object" ref="596732606"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">404</int>
+ <reference key="object" ref="393423671"/>
+ <reference key="parent" ref="786677654"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">405</int>
+ <reference key="object" ref="18263474"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="257962622"/>
+ <reference ref="644725453"/>
+ <reference ref="1037576581"/>
+ <reference ref="941806246"/>
+ <reference ref="1045724900"/>
+ </object>
+ <reference key="parent" ref="769124883"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">406</int>
+ <reference key="object" ref="257962622"/>
+ <reference key="parent" ref="18263474"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">407</int>
+ <reference key="object" ref="644725453"/>
+ <reference key="parent" ref="18263474"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">408</int>
+ <reference key="object" ref="1037576581"/>
+ <reference key="parent" ref="18263474"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">409</int>
+ <reference key="object" ref="941806246"/>
+ <reference key="parent" ref="18263474"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">410</int>
+ <reference key="object" ref="1045724900"/>
+ <reference key="parent" ref="18263474"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">411</int>
+ <reference key="object" ref="1058217995"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="706297211"/>
+ <reference ref="568384683"/>
+ <reference ref="663508465"/>
+ </object>
+ <reference key="parent" ref="691570813"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">412</int>
+ <reference key="object" ref="706297211"/>
+ <reference key="parent" ref="1058217995"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">413</int>
+ <reference key="object" ref="568384683"/>
+ <reference key="parent" ref="1058217995"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">414</int>
+ <reference key="object" ref="663508465"/>
+ <reference key="parent" ref="1058217995"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">415</int>
+ <reference key="object" ref="175441468"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="252969304"/>
+ <reference ref="766922938"/>
+ <reference ref="677519740"/>
+ <reference ref="238351151"/>
+ </object>
+ <reference key="parent" ref="767671776"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">416</int>
+ <reference key="object" ref="252969304"/>
+ <reference key="parent" ref="175441468"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">417</int>
+ <reference key="object" ref="766922938"/>
+ <reference key="parent" ref="175441468"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">418</int>
+ <reference key="object" ref="677519740"/>
+ <reference key="parent" ref="175441468"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">419</int>
+ <reference key="object" ref="238351151"/>
+ <reference key="parent" ref="175441468"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">420</int>
+ <reference key="object" ref="755631768"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">450</int>
+ <reference key="object" ref="288088188"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="579392910"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">451</int>
+ <reference key="object" ref="579392910"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1060694897"/>
+ <reference ref="879586729"/>
+ <reference ref="56570060"/>
+ </object>
+ <reference key="parent" ref="288088188"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">452</int>
+ <reference key="object" ref="1060694897"/>
+ <reference key="parent" ref="579392910"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">453</int>
+ <reference key="object" ref="859480356"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">454</int>
+ <reference key="object" ref="795346622"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">457</int>
+ <reference key="object" ref="65139061"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">459</int>
+ <reference key="object" ref="19036812"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">460</int>
+ <reference key="object" ref="672708820"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">462</int>
+ <reference key="object" ref="537092702"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">465</int>
+ <reference key="object" ref="879586729"/>
+ <reference key="parent" ref="579392910"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">466</int>
+ <reference key="object" ref="56570060"/>
+ <reference key="parent" ref="579392910"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">485</int>
+ <reference key="object" ref="82994268"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">490</int>
+ <reference key="object" ref="448692316"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="992780483"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">491</int>
+ <reference key="object" ref="992780483"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="105068016"/>
+ </object>
+ <reference key="parent" ref="448692316"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">492</int>
+ <reference key="object" ref="105068016"/>
+ <reference key="parent" ref="992780483"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">494</int>
+ <reference key="object" ref="976324537"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">496</int>
+ <reference key="object" ref="215659978"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="446991534"/>
+ </object>
+ <reference key="parent" ref="941447902"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">497</int>
+ <reference key="object" ref="446991534"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="875092757"/>
+ <reference ref="630155264"/>
+ <reference ref="945678886"/>
+ <reference ref="512868991"/>
+ <reference ref="163117631"/>
+ <reference ref="31516759"/>
+ <reference ref="908105787"/>
+ <reference ref="644046920"/>
+ <reference ref="231811626"/>
+ <reference ref="883618387"/>
+ </object>
+ <reference key="parent" ref="215659978"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">498</int>
+ <reference key="object" ref="875092757"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">499</int>
+ <reference key="object" ref="630155264"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">500</int>
+ <reference key="object" ref="945678886"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">501</int>
+ <reference key="object" ref="512868991"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">502</int>
+ <reference key="object" ref="163117631"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">503</int>
+ <reference key="object" ref="31516759"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="956096989"/>
+ </object>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">504</int>
+ <reference key="object" ref="908105787"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">505</int>
+ <reference key="object" ref="644046920"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">506</int>
+ <reference key="object" ref="231811626"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">507</int>
+ <reference key="object" ref="883618387"/>
+ <reference key="parent" ref="446991534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">508</int>
+ <reference key="object" ref="956096989"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="257099033"/>
+ <reference ref="551969625"/>
+ <reference ref="249532473"/>
+ <reference ref="607364498"/>
+ <reference ref="508151438"/>
+ <reference ref="981751889"/>
+ <reference ref="380031999"/>
+ <reference ref="825984362"/>
+ <reference ref="560145579"/>
+ </object>
+ <reference key="parent" ref="31516759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">509</int>
+ <reference key="object" ref="257099033"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">510</int>
+ <reference key="object" ref="551969625"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">511</int>
+ <reference key="object" ref="249532473"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">512</int>
+ <reference key="object" ref="607364498"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">513</int>
+ <reference key="object" ref="508151438"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">514</int>
+ <reference key="object" ref="981751889"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">515</int>
+ <reference key="object" ref="380031999"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">516</int>
+ <reference key="object" ref="825984362"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">517</int>
+ <reference key="object" ref="560145579"/>
+ <reference key="parent" ref="956096989"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">533</int>
+ <reference key="object" ref="895645105"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="939854878"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ <string key="objectName">Color</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">534</int>
+ <reference key="object" ref="939854878"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="526523505"/>
+ </object>
+ <reference key="parent" ref="895645105"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">535</int>
+ <reference key="object" ref="526523505"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="969578911"/>
+ <reference ref="468569656"/>
+ <reference ref="461530193"/>
+ </object>
+ <reference key="parent" ref="939854878"/>
+ <string key="objectName">Menu - Color</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">536</int>
+ <reference key="object" ref="969578911"/>
+ <reference key="parent" ref="526523505"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">537</int>
+ <reference key="object" ref="468569656"/>
+ <reference key="parent" ref="526523505"/>
+ <string key="objectName">Menu Item - Red</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">538</int>
+ <reference key="object" ref="461530193"/>
+ <reference key="parent" ref="526523505"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">541</int>
+ <reference key="object" ref="336088134"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="934915496"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ <string key="objectName">Visible</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">542</int>
+ <reference key="object" ref="934915496"/>
+ <reference key="parent" ref="336088134"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">545</int>
+ <reference key="object" ref="886444468"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="67668546"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">546</int>
+ <reference key="object" ref="67668546"/>
+ <reference key="parent" ref="886444468"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">539</int>
+ <reference key="object" ref="186246764"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="171036244"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ <string key="objectName">Rotation</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">540</int>
+ <reference key="object" ref="171036244"/>
+ <reference key="parent" ref="186246764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">543</int>
+ <reference key="object" ref="482000415"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="575979405"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">544</int>
+ <reference key="object" ref="575979405"/>
+ <reference key="parent" ref="482000415"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">552</int>
+ <reference key="object" ref="969295846"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1043401668"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ <string key="objectName">Text</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">553</int>
+ <reference key="object" ref="1043401668"/>
+ <reference key="parent" ref="969295846"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">554</int>
+ <reference key="object" ref="301002623"/>
+ <reference key="parent" ref="439893737"/>
+ <string key="objectName">SFML view</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">564</int>
+ <reference key="object" ref="531630843"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1053978795"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">565</int>
+ <reference key="object" ref="1053978795"/>
+ <reference key="parent" ref="531630843"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">568</int>
+ <reference key="object" ref="422780221"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="702743979"/>
+ </object>
+ <reference key="parent" ref="439893737"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">569</int>
+ <reference key="object" ref="702743979"/>
+ <reference key="parent" ref="422780221"/>
+ </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>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>112.IBPluginDependency</string>
+ <string>124.IBPluginDependency</string>
+ <string>125.IBPluginDependency</string>
+ <string>126.IBPluginDependency</string>
+ <string>129.IBPluginDependency</string>
+ <string>130.IBPluginDependency</string>
+ <string>131.IBPluginDependency</string>
+ <string>134.IBPluginDependency</string>
+ <string>136.IBPluginDependency</string>
+ <string>143.IBPluginDependency</string>
+ <string>144.IBPluginDependency</string>
+ <string>145.IBPluginDependency</string>
+ <string>149.IBPluginDependency</string>
+ <string>150.IBPluginDependency</string>
+ <string>19.IBPluginDependency</string>
+ <string>195.IBPluginDependency</string>
+ <string>196.IBPluginDependency</string>
+ <string>197.IBPluginDependency</string>
+ <string>198.IBPluginDependency</string>
+ <string>199.IBPluginDependency</string>
+ <string>200.IBPluginDependency</string>
+ <string>201.IBPluginDependency</string>
+ <string>202.IBPluginDependency</string>
+ <string>203.IBPluginDependency</string>
+ <string>204.IBPluginDependency</string>
+ <string>205.IBPluginDependency</string>
+ <string>206.IBPluginDependency</string>
+ <string>207.IBPluginDependency</string>
+ <string>208.IBPluginDependency</string>
+ <string>209.IBPluginDependency</string>
+ <string>210.IBPluginDependency</string>
+ <string>211.IBPluginDependency</string>
+ <string>212.IBPluginDependency</string>
+ <string>213.IBPluginDependency</string>
+ <string>214.IBPluginDependency</string>
+ <string>215.IBPluginDependency</string>
+ <string>216.IBPluginDependency</string>
+ <string>217.IBPluginDependency</string>
+ <string>218.IBPluginDependency</string>
+ <string>219.IBPluginDependency</string>
+ <string>220.IBPluginDependency</string>
+ <string>221.IBPluginDependency</string>
+ <string>23.IBPluginDependency</string>
+ <string>236.IBPluginDependency</string>
+ <string>239.IBPluginDependency</string>
+ <string>24.IBPluginDependency</string>
+ <string>29.IBPluginDependency</string>
+ <string>295.IBPluginDependency</string>
+ <string>296.IBPluginDependency</string>
+ <string>297.IBPluginDependency</string>
+ <string>298.IBPluginDependency</string>
+ <string>346.IBPluginDependency</string>
+ <string>348.IBPluginDependency</string>
+ <string>349.IBPluginDependency</string>
+ <string>350.IBPluginDependency</string>
+ <string>351.IBPluginDependency</string>
+ <string>354.IBPluginDependency</string>
+ <string>371.IBNSWindowAutoPositionCentersHorizontal</string>
+ <string>371.IBNSWindowAutoPositionCentersVertical</string>
+ <string>371.IBPluginDependency</string>
+ <string>371.IBWindowTemplateEditedContentRect</string>
+ <string>371.NSWindowTemplate.visibleAtLaunch</string>
+ <string>372.IBPluginDependency</string>
+ <string>375.IBPluginDependency</string>
+ <string>376.IBPluginDependency</string>
+ <string>377.IBPluginDependency</string>
+ <string>388.IBPluginDependency</string>
+ <string>389.IBPluginDependency</string>
+ <string>390.IBPluginDependency</string>
+ <string>391.IBPluginDependency</string>
+ <string>392.IBPluginDependency</string>
+ <string>393.IBPluginDependency</string>
+ <string>394.IBPluginDependency</string>
+ <string>395.IBPluginDependency</string>
+ <string>396.IBPluginDependency</string>
+ <string>397.IBPluginDependency</string>
+ <string>398.IBPluginDependency</string>
+ <string>399.IBPluginDependency</string>
+ <string>400.IBPluginDependency</string>
+ <string>401.IBPluginDependency</string>
+ <string>402.IBPluginDependency</string>
+ <string>403.IBPluginDependency</string>
+ <string>404.IBPluginDependency</string>
+ <string>405.IBPluginDependency</string>
+ <string>406.IBPluginDependency</string>
+ <string>407.IBPluginDependency</string>
+ <string>408.IBPluginDependency</string>
+ <string>409.IBPluginDependency</string>
+ <string>410.IBPluginDependency</string>
+ <string>411.IBPluginDependency</string>
+ <string>412.IBPluginDependency</string>
+ <string>413.IBPluginDependency</string>
+ <string>414.IBPluginDependency</string>
+ <string>415.IBPluginDependency</string>
+ <string>416.IBPluginDependency</string>
+ <string>417.IBPluginDependency</string>
+ <string>418.IBPluginDependency</string>
+ <string>419.IBPluginDependency</string>
+ <string>420.IBPluginDependency</string>
+ <string>450.IBPluginDependency</string>
+ <string>451.IBPluginDependency</string>
+ <string>452.IBPluginDependency</string>
+ <string>453.IBPluginDependency</string>
+ <string>454.IBPluginDependency</string>
+ <string>457.IBPluginDependency</string>
+ <string>459.IBPluginDependency</string>
+ <string>460.IBPluginDependency</string>
+ <string>462.IBPluginDependency</string>
+ <string>465.IBPluginDependency</string>
+ <string>466.IBPluginDependency</string>
+ <string>485.IBPluginDependency</string>
+ <string>490.IBPluginDependency</string>
+ <string>491.IBPluginDependency</string>
+ <string>492.IBPluginDependency</string>
+ <string>494.IBPluginDependency</string>
+ <string>496.IBPluginDependency</string>
+ <string>497.IBPluginDependency</string>
+ <string>498.IBPluginDependency</string>
+ <string>499.IBPluginDependency</string>
+ <string>5.IBPluginDependency</string>
+ <string>500.IBPluginDependency</string>
+ <string>501.IBPluginDependency</string>
+ <string>502.IBPluginDependency</string>
+ <string>503.IBPluginDependency</string>
+ <string>504.IBPluginDependency</string>
+ <string>505.IBPluginDependency</string>
+ <string>506.IBPluginDependency</string>
+ <string>507.IBPluginDependency</string>
+ <string>508.IBPluginDependency</string>
+ <string>509.IBPluginDependency</string>
+ <string>510.IBPluginDependency</string>
+ <string>511.IBPluginDependency</string>
+ <string>512.IBPluginDependency</string>
+ <string>513.IBPluginDependency</string>
+ <string>514.IBPluginDependency</string>
+ <string>515.IBPluginDependency</string>
+ <string>516.IBPluginDependency</string>
+ <string>517.IBPluginDependency</string>
+ <string>533.IBPluginDependency</string>
+ <string>534.IBPluginDependency</string>
+ <string>535.IBPluginDependency</string>
+ <string>536.IBPluginDependency</string>
+ <string>537.IBPluginDependency</string>
+ <string>537.object.labelIdentifier</string>
+ <string>538.IBPluginDependency</string>
+ <string>539.IBPluginDependency</string>
+ <string>540.IBPluginDependency</string>
+ <string>541.IBPluginDependency</string>
+ <string>542.IBPluginDependency</string>
+ <string>543.IBPluginDependency</string>
+ <string>544.IBPluginDependency</string>
+ <string>545.IBPluginDependency</string>
+ <string>546.IBPluginDependency</string>
+ <string>552.IBPluginDependency</string>
+ <string>553.IBPluginDependency</string>
+ <string>554.IBPluginDependency</string>
+ <string>56.IBPluginDependency</string>
+ <string>564.IBPluginDependency</string>
+ <string>565.IBPluginDependency</string>
+ <string>568.IBPluginDependency</string>
+ <string>569.IBPluginDependency</string>
+ <string>57.IBPluginDependency</string>
+ <string>58.IBPluginDependency</string>
+ <string>72.IBPluginDependency</string>
+ <string>73.IBPluginDependency</string>
+ <string>74.IBPluginDependency</string>
+ <string>75.IBPluginDependency</string>
+ <string>77.IBPluginDependency</string>
+ <string>78.IBPluginDependency</string>
+ <string>79.IBPluginDependency</string>
+ <string>80.IBPluginDependency</string>
+ <string>81.IBPluginDependency</string>
+ <string>82.IBPluginDependency</string>
+ <string>83.IBPluginDependency</string>
+ <string>92.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <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>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>
+ <boolean value="NO"/>
+ <boolean value="NO"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{380, 496}, {480, 360}}</string>
+ <integer value="1"/>
+ <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>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>IBBuiltInLabel-Red</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>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <reference key="dict.values" ref="0"/>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <reference key="dict.values" ref="0"/>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">570</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">CocoaAppDelegate</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>colorChanged:</string>
+ <string>rotationChanged:</string>
+ <string>textChanged:</string>
+ <string>updateText:</string>
+ <string>visibleChanged:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSPopUpButton</string>
+ <string>NSSlider</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>colorChanged:</string>
+ <string>rotationChanged:</string>
+ <string>textChanged:</string>
+ <string>updateText:</string>
+ <string>visibleChanged:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">colorChanged:</string>
+ <string key="candidateClassName">NSPopUpButton</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">rotationChanged:</string>
+ <string key="candidateClassName">NSSlider</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">textChanged:</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">updateText:</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">visibleChanged:</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>sfmlView</string>
+ <string>textField</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSView</string>
+ <string>NSTextField</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>sfmlView</string>
+ <string>textField</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">sfmlView</string>
+ <string key="candidateClassName">NSView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">textField</string>
+ <string key="candidateClassName">NSTextField</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">./Classes/CocoaAppDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSDocument</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>printDocument:</string>
+ <string>revertDocumentToSaved:</string>
+ <string>runPageLayout:</string>
+ <string>saveDocument:</string>
+ <string>saveDocumentAs:</string>
+ <string>saveDocumentTo:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>printDocument:</string>
+ <string>revertDocumentToSaved:</string>
+ <string>runPageLayout:</string>
+ <string>saveDocument:</string>
+ <string>saveDocumentAs:</string>
+ <string>saveDocumentTo:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">printDocument:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">revertDocumentToSaved:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">runPageLayout:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">saveDocument:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">saveDocumentAs:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">saveDocumentTo:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/NSDocument.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <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>
+ <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>
+ <string>NSSwitch</string>
+ <string>blue</string>
+ <string>green</string>
+ <string>red</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{9, 8}</string>
+ <string>{7, 2}</string>
+ <string>{15, 15}</string>
+ <string>{16, 16}</string>
+ <string>{16, 16}</string>
+ <string>{16, 16}</string>
+ </object>
+ </object>
+ </data>
+</archive>
diff --git a/examples/cocoa/NSString+stdstring.h b/examples/cocoa/NSString+stdstring.h
new file mode 100644
index 0000000..0be2536
--- /dev/null
+++ b/examples/cocoa/NSString+stdstring.h
@@ -0,0 +1,39 @@
+////////////////////////////////////////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2012 Marco Antognini (antognini.marco@gmail.com),
+// Laurent Gomila (laurent.gom@gmail.com),
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+// you must not claim that you wrote the original software.
+// If you use this software in a product, an acknowledgment
+// in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+// and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+////////////////////////////////////////////////////////////
+
+#import <string>
+#import <Foundation/Foundation.h>
+
+@interface NSString (NSString_stdstring)
+
++(id)stringWithstdstring:(std::string const &)string;
+
++(id)stringWithstdwstring:(std::wstring const &)string;
+
+-(std::string)tostdstring;
+
+-(std::wstring)tostdwstring;
+
+@end
diff --git a/examples/cocoa/NSString+stdstring.mm b/examples/cocoa/NSString+stdstring.mm
new file mode 100644
index 0000000..367b21a
--- /dev/null
+++ b/examples/cocoa/NSString+stdstring.mm
@@ -0,0 +1,78 @@
+////////////////////////////////////////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2012 Marco Antognini (antognini.marco@gmail.com),
+// Laurent Gomila (laurent.gom@gmail.com),
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+// you must not claim that you wrote the original software.
+// If you use this software in a product, an acknowledgment
+// in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+// and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+////////////////////////////////////////////////////////////
+
+#import "NSString+stdstring.h"
+#include <SFML/System/Utf.hpp>
+
+@implementation NSString (NSString_stdstring)
+
++(id)stringWithstdstring:(std::string const &)string
+{
+ std::string utf8;
+ utf8.reserve(string.size() + 1);
+
+ sf::Utf8::fromAnsi(string.begin(), string.end(), std::back_inserter(utf8));
+
+ NSString *str = [NSString stringWithCString:utf8.c_str()
+ encoding:NSUTF8StringEncoding];
+ return str;
+}
+
+-(std::string)tostdstring
+{
+ // Not sure about the encoding to use. Using [self UTF8String] doesn't
+ // work for characters like Ă© or Ă .
+ const char *cstr = [self cStringUsingEncoding:NSISOLatin1StringEncoding];
+
+ if (cstr != NULL)
+ {
+ std::string str(cstr);
+ return str;
+ }
+ else
+ {
+ return "";
+ }
+}
+
++(id)stringWithstdwstring:(std::wstring const &)string
+{
+ char* data = (char *)string.data();
+ unsigned size = string.size() * sizeof(wchar_t);
+
+ NSString *str = [[[NSString alloc] initWithBytes:data length:size
+ encoding:NSUTF32LittleEndianStringEncoding] autorelease];
+ return str;
+}
+
+-(std::wstring)tostdwstring
+{
+ // According to wikipedia, Mac OS X is Little Endian on x86 and x86-64
+ // http://en.wikipedia.org/wiki/Endianness
+ NSData* asData = [self dataUsingEncoding:NSUTF32LittleEndianStringEncoding];
+ return std::wstring((wchar_t *)[asData bytes], [asData length] / sizeof(wchar_t));
+}
+
+@end \ No newline at end of file
diff --git a/examples/cocoa/main.m b/examples/cocoa/main.m
new file mode 100644
index 0000000..324e284
--- /dev/null
+++ b/examples/cocoa/main.m
@@ -0,0 +1,31 @@
+////////////////////////////////////////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2012 Marco Antognini (antognini.marco@gmail.com),
+// Laurent Gomila (laurent.gom@gmail.com),
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+// you must not claim that you wrote the original software.
+// If you use this software in a product, an acknowledgment
+// in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+// and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+////////////////////////////////////////////////////////////
+
+#import <Cocoa/Cocoa.h>
+
+int main(int argc, char *argv[])
+{
+ return NSApplicationMain(argc, (const char **)argv);
+}
diff --git a/examples/cocoa/readme.txt b/examples/cocoa/readme.txt
new file mode 100644
index 0000000..95c3d90
--- /dev/null
+++ b/examples/cocoa/readme.txt
@@ -0,0 +1,28 @@
+SFML IN COCOA APPLICATION
+=========================
+
+This is a small example of the integration of SFML in a Cocoa application.
+
+Features
+--------
+
+ * This example shows how basic UI elements can interact with SFML
+ render areas such as sf::RenderWindow (you can use sf::Window and
+ OpenGL code too, of course).
+ * It also provides tools for converting NSString to and from
+ std::[w]string in an Objective-C Category of NSString.
+ * Moreover, it shows how you can prevent annoying the system alerts
+ produced when the SFML view has focus and the user press a key
+ (see SilentWindow interface in CocoaAppDelegate.[h|mm]).
+
+Special Considerations
+----------------------
+
+While mixing SFML into a Cocoa application you have to deal with mixing
+C++ and Objective-C. In order to proceed you should use .mm extension for
+Objective-C++ files.
+
+Be aware of the limitations of Objective-C++. Please refer to the official
+documentation provided by Apple for more information.
+
+You can also work around these limitations by using CSFML.
diff --git a/examples/ftp/CMakeLists.txt b/examples/ftp/CMakeLists.txt
new file mode 100644
index 0000000..7ef9684
--- /dev/null
+++ b/examples/ftp/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/ftp)
+
+# all source files
+set(SRC ${SRCROOT}/Ftp.cpp)
+
+# define the ftp target
+sfml_add_example(ftp
+ SOURCES ${SRC}
+ DEPENDS sfml-network sfml-system)
diff --git a/examples/ftp/Ftp.cpp b/examples/ftp/Ftp.cpp
new file mode 100644
index 0000000..7b97860
--- /dev/null
+++ b/examples/ftp/Ftp.cpp
@@ -0,0 +1,206 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Network.hpp>
+#include <fstream>
+#include <iostream>
+
+
+////////////////////////////////////////////////////////////
+/// Print a FTP response into a standard output stream
+///
+////////////////////////////////////////////////////////////
+std::ostream& operator <<(std::ostream& stream, const sf::Ftp::Response& response)
+{
+ return stream << response.getStatus() << response.getMessage();
+}
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Choose the server address
+ sf::IpAddress address;
+ do
+ {
+ std::cout << "Enter the FTP server address : ";
+ std::cin >> address;
+ }
+ while (address == sf::IpAddress::None);
+
+ // Connect to the server
+ sf::Ftp server;
+ sf::Ftp::Response connectResponse = server.connect(address);
+ std::cout << connectResponse << std::endl;
+ if (!connectResponse.isOk())
+ return EXIT_FAILURE;
+
+ // Ask for user name and password
+ std::string user, password;
+ std::cout << "User name : ";
+ std::cin >> user;
+ std::cout << "Password : ";
+ std::cin >> password;
+
+ // Login to the server
+ sf::Ftp::Response loginResponse = server.login(user, password);
+ std::cout << loginResponse << std::endl;
+ if (!loginResponse.isOk())
+ return EXIT_FAILURE;
+
+ // Main menu
+ int choice = 0;
+ do
+ {
+ // Main FTP menu
+ std::cout << std::endl;
+ std::cout << "Choose an action:" << std::endl;
+ std::cout << "1. Print working directory" << std::endl;
+ std::cout << "2. Print contents of working directory" << std::endl;
+ std::cout << "3. Change directory" << std::endl;
+ std::cout << "4. Create directory" << std::endl;
+ std::cout << "5. Delete directory" << std::endl;
+ std::cout << "6. Rename file" << std::endl;
+ std::cout << "7. Remove file" << std::endl;
+ std::cout << "8. Download file" << std::endl;
+ std::cout << "9. Upload file" << std::endl;
+ std::cout << "0. Disconnect" << std::endl;
+ std::cout << std::endl;
+
+ std::cout << "Your choice: ";
+ std::cin >> choice;
+ std::cout << std::endl;
+
+ switch (choice)
+ {
+ default :
+ {
+ // Wrong choice
+ std::cout << "Invalid choice!" << std::endl;
+ std::cin.clear();
+ std::cin.ignore(10000, '\n');
+ break;
+ }
+
+ case 1 :
+ {
+ // Print the current server directory
+ sf::Ftp::DirectoryResponse response = server.getWorkingDirectory();
+ std::cout << response << std::endl;
+ std::cout << "Current directory is " << response.getDirectory() << std::endl;
+ break;
+ }
+
+ case 2 :
+ {
+ // Print the contents of the current server directory
+ sf::Ftp::ListingResponse response = server.getDirectoryListing();
+ std::cout << response << std::endl;
+ const std::vector<std::string>& names = response.getListing();
+ for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); ++it)
+ std::cout << *it << std::endl;
+ break;
+ }
+
+ case 3 :
+ {
+ // Change the current directory
+ std::string directory;
+ std::cout << "Choose a directory: ";
+ std::cin >> directory;
+ std::cout << server.changeDirectory(directory) << std::endl;
+ break;
+ }
+
+ case 4 :
+ {
+ // Create a new directory
+ std::string directory;
+ std::cout << "Name of the directory to create: ";
+ std::cin >> directory;
+ std::cout << server.createDirectory(directory) << std::endl;
+ break;
+ }
+
+ case 5 :
+ {
+ // Remove an existing directory
+ std::string directory;
+ std::cout << "Name of the directory to remove: ";
+ std::cin >> directory;
+ std::cout << server.deleteDirectory(directory) << std::endl;
+ break;
+ }
+
+ case 6 :
+ {
+ // Rename a file
+ std::string source, destination;
+ std::cout << "Name of the file to rename: ";
+ std::cin >> source;
+ std::cout << "New name: ";
+ std::cin >> destination;
+ std::cout << server.renameFile(source, destination) << std::endl;
+ break;
+ }
+
+ case 7 :
+ {
+ // Remove an existing directory
+ std::string filename;
+ std::cout << "Name of the file to remove: ";
+ std::cin >> filename;
+ std::cout << server.deleteFile(filename) << std::endl;
+ break;
+ }
+
+ case 8 :
+ {
+ // Download a file from server
+ std::string filename, directory;
+ std::cout << "Filename of the file to download (relative to current directory): ";
+ std::cin >> filename;
+ std::cout << "Directory to download the file to: ";
+ std::cin >> directory;
+ std::cout << server.download(filename, directory) << std::endl;
+ break;
+ }
+
+ case 9 :
+ {
+ // Upload a file to server
+ std::string filename, directory;
+ std::cout << "Path of the file to upload (absolute or relative to working directory): ";
+ std::cin >> filename;
+ std::cout << "Directory to upload the file to (relative to current directory): ";
+ std::cin >> directory;
+ std::cout << server.upload(filename, directory) << std::endl;
+ break;
+ }
+
+ case 0 :
+ {
+ // Disconnect
+ break;
+ }
+ }
+
+ } while (choice != 0);
+
+ // Disconnect from the server
+ std::cout << "Disconnecting from server..." << std::endl;
+ std::cout << server.disconnect() << std::endl;
+
+ // Wait until the user presses 'enter' key
+ std::cout << "Press enter to exit..." << std::endl;
+ std::cin.ignore(10000, '\n');
+ std::cin.ignore(10000, '\n');
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/opengl/CMakeLists.txt b/examples/opengl/CMakeLists.txt
new file mode 100644
index 0000000..5a699b6
--- /dev/null
+++ b/examples/opengl/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/opengl)
+
+# all source files
+set(SRC ${SRCROOT}/OpenGL.cpp)
+
+# find OpenGL and GLU
+find_package(OpenGL REQUIRED)
+include_directories(${OPENGL_INCLUDE_DIR})
+
+# define the opengl target
+sfml_add_example(opengl GUI_APP
+ SOURCES ${SRC}
+ DEPENDS sfml-graphics sfml-window sfml-system ${OPENGL_LIBRARIES})
diff --git a/examples/opengl/OpenGL.cpp b/examples/opengl/OpenGL.cpp
new file mode 100644
index 0000000..639254b
--- /dev/null
+++ b/examples/opengl/OpenGL.cpp
@@ -0,0 +1,194 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Graphics.hpp>
+#include <SFML/OpenGL.hpp>
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Request a 32-bits depth buffer when creating the window
+ sf::ContextSettings contextSettings;
+ contextSettings.depthBits = 32;
+
+ // Create the main window
+ sf::RenderWindow window(sf::VideoMode(800, 600), "SFML graphics with OpenGL", sf::Style::Default, contextSettings);
+ window.setVerticalSyncEnabled(true);
+
+ // Make it the active window for OpenGL calls
+ window.setActive();
+
+ // Create a sprite for the background
+ sf::Texture backgroundTexture;
+ if (!backgroundTexture.loadFromFile("resources/background.jpg"))
+ return EXIT_FAILURE;
+ sf::Sprite background(backgroundTexture);
+
+ // Create some text to draw on top of our OpenGL object
+ sf::Font font;
+ if (!font.loadFromFile("resources/sansation.ttf"))
+ return EXIT_FAILURE;
+ sf::Text text("SFML / OpenGL demo", font);
+ text.setColor(sf::Color(255, 255, 255, 170));
+ text.setPosition(250.f, 450.f);
+
+ // Load an OpenGL texture.
+ // We could directly use a sf::Texture as an OpenGL texture (with its Bind() member function),
+ // but here we want more control on it (generate mipmaps, ...) so we create a new one from an image
+ GLuint texture = 0;
+ {
+ sf::Image image;
+ if (!image.loadFromFile("resources/texture.jpg"))
+ return EXIT_FAILURE;
+ glGenTextures(1, &texture);
+ glBindTexture(GL_TEXTURE_2D, texture);
+ gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, image.getSize().x, image.getSize().y, GL_RGBA, GL_UNSIGNED_BYTE, image.getPixelsPtr());
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+ }
+
+ // Enable Z-buffer read and write
+ glEnable(GL_DEPTH_TEST);
+ glDepthMask(GL_TRUE);
+ glClearDepth(1.f);
+
+ // Disable lighting
+ glDisable(GL_LIGHTING);
+
+ // Configure the viewport (the same size as the window)
+ glViewport(0, 0, window.getSize().x, window.getSize().y);
+
+ // Setup a perspective projection
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ GLfloat ratio = static_cast<float>(window.getSize().x) / window.getSize().y;
+ glFrustum(-ratio, ratio, -1.f, 1.f, 1.f, 500.f);
+
+ // Bind the texture
+ glEnable(GL_TEXTURE_2D);
+ glBindTexture(GL_TEXTURE_2D, texture);
+
+ // Define a 3D cube (6 faces made of 2 triangles composed by 3 vertices)
+ GLfloat cube[] =
+ {
+ // positions // texture coordinates
+ -20, -20, -20, 0, 0,
+ -20, 20, -20, 1, 0,
+ -20, -20, 20, 0, 1,
+ -20, -20, 20, 0, 1,
+ -20, 20, -20, 1, 0,
+ -20, 20, 20, 1, 1,
+
+ 20, -20, -20, 0, 0,
+ 20, 20, -20, 1, 0,
+ 20, -20, 20, 0, 1,
+ 20, -20, 20, 0, 1,
+ 20, 20, -20, 1, 0,
+ 20, 20, 20, 1, 1,
+
+ -20, -20, -20, 0, 0,
+ 20, -20, -20, 1, 0,
+ -20, -20, 20, 0, 1,
+ -20, -20, 20, 0, 1,
+ 20, -20, -20, 1, 0,
+ 20, -20, 20, 1, 1,
+
+ -20, 20, -20, 0, 0,
+ 20, 20, -20, 1, 0,
+ -20, 20, 20, 0, 1,
+ -20, 20, 20, 0, 1,
+ 20, 20, -20, 1, 0,
+ 20, 20, 20, 1, 1,
+
+ -20, -20, -20, 0, 0,
+ 20, -20, -20, 1, 0,
+ -20, 20, -20, 0, 1,
+ -20, 20, -20, 0, 1,
+ 20, -20, -20, 1, 0,
+ 20, 20, -20, 1, 1,
+
+ -20, -20, 20, 0, 0,
+ 20, -20, 20, 1, 0,
+ -20, 20, 20, 0, 1,
+ -20, 20, 20, 0, 1,
+ 20, -20, 20, 1, 0,
+ 20, 20, 20, 1, 1
+ };
+
+ // Enable position and texture coordinates vertex components
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), cube);
+ glTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), cube + 3);
+
+ // Disable normal and color vertex components
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_COLOR_ARRAY);
+
+ // Create a clock for measuring the time elapsed
+ sf::Clock clock;
+
+ // Start game loop
+ while (window.isOpen())
+ {
+ // Process events
+ sf::Event event;
+ while (window.pollEvent(event))
+ {
+ // Close window : exit
+ if (event.type == sf::Event::Closed)
+ window.close();
+
+ // Escape key : exit
+ if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))
+ window.close();
+
+ // Adjust the viewport when the window is resized
+ if (event.type == sf::Event::Resized)
+ glViewport(0, 0, event.size.width, event.size.height);
+ }
+
+ // Draw the background
+ window.pushGLStates();
+ window.draw(background);
+ window.popGLStates();
+
+ // Clear the depth buffer
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ // We get the position of the mouse cursor, so that we can move the box accordingly
+ float x = sf::Mouse::getPosition(window).x * 200.f / window.getSize().x - 100.f;
+ float y = -sf::Mouse::getPosition(window).y * 200.f / window.getSize().y + 100.f;
+
+ // Apply some transformations
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(x, y, -100.f);
+ glRotatef(clock.getElapsedTime().asSeconds() * 50.f, 1.f, 0.f, 0.f);
+ glRotatef(clock.getElapsedTime().asSeconds() * 30.f, 0.f, 1.f, 0.f);
+ glRotatef(clock.getElapsedTime().asSeconds() * 90.f, 0.f, 0.f, 1.f);
+
+ // Draw the cube
+ glDrawArrays(GL_TRIANGLES, 0, 36);
+
+ // Draw some text on top of our OpenGL object
+ window.pushGLStates();
+ window.draw(text);
+ window.popGLStates();
+
+ // Finally, display the rendered frame on screen
+ window.display();
+ }
+
+ // Don't forget to destroy our texture
+ glDeleteTextures(1, &texture);
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/pong/CMakeLists.txt b/examples/pong/CMakeLists.txt
new file mode 100644
index 0000000..2a76ecc
--- /dev/null
+++ b/examples/pong/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/pong)
+
+# all source files
+set(SRC ${SRCROOT}/Pong.cpp)
+
+# define the pong target
+sfml_add_example(pong GUI_APP
+ SOURCES ${SRC}
+ DEPENDS sfml-audio sfml-graphics sfml-window sfml-system)
diff --git a/examples/pong/Pong.cpp b/examples/pong/Pong.cpp
new file mode 100644
index 0000000..1b9a74f
--- /dev/null
+++ b/examples/pong/Pong.cpp
@@ -0,0 +1,241 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Graphics.hpp>
+#include <SFML/Audio.hpp>
+#include <cmath>
+#include <ctime>
+#include <cstdlib>
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ std::srand(static_cast<unsigned int>(std::time(NULL)));
+
+ // Define some constants
+ const float pi = 3.14159f;
+ const int gameWidth = 800;
+ const int gameHeight = 600;
+ sf::Vector2f paddleSize(25, 100);
+ float ballRadius = 10.f;
+
+ // Create the window of the application
+ sf::RenderWindow window(sf::VideoMode(gameWidth, gameHeight, 32), "SFML Pong");
+ window.setVerticalSyncEnabled(true);
+
+ // Load the sounds used in the game
+ sf::SoundBuffer ballSoundBuffer;
+ if (!ballSoundBuffer.loadFromFile("resources/ball.wav"))
+ return EXIT_FAILURE;
+ sf::Sound ballSound(ballSoundBuffer);
+
+ // Create the left paddle
+ sf::RectangleShape leftPaddle;
+ leftPaddle.setSize(paddleSize - sf::Vector2f(3, 3));
+ leftPaddle.setOutlineThickness(3);
+ leftPaddle.setOutlineColor(sf::Color::Black);
+ leftPaddle.setFillColor(sf::Color(100, 100, 200));
+ leftPaddle.setOrigin(paddleSize / 2.f);
+
+ // Create the right paddle
+ sf::RectangleShape rightPaddle;
+ rightPaddle.setSize(paddleSize - sf::Vector2f(3, 3));
+ rightPaddle.setOutlineThickness(3);
+ rightPaddle.setOutlineColor(sf::Color::Black);
+ rightPaddle.setFillColor(sf::Color(200, 100, 100));
+ rightPaddle.setOrigin(paddleSize / 2.f);
+
+ // Create the ball
+ sf::CircleShape ball;
+ ball.setRadius(ballRadius - 3);
+ ball.setOutlineThickness(3);
+ ball.setOutlineColor(sf::Color::Black);
+ ball.setFillColor(sf::Color::White);
+ ball.setOrigin(ballRadius / 2, ballRadius / 2);
+
+ // Load the text font
+ sf::Font font;
+ if (!font.loadFromFile("resources/sansation.ttf"))
+ return EXIT_FAILURE;
+
+ // Initialize the pause message
+ sf::Text pauseMessage;
+ pauseMessage.setFont(font);
+ pauseMessage.setCharacterSize(40);
+ pauseMessage.setPosition(170.f, 150.f);
+ pauseMessage.setColor(sf::Color::White);
+ pauseMessage.setString("Welcome to SFML pong!\nPress space to start the game");
+
+ // Define the paddles properties
+ sf::Clock AITimer;
+ const sf::Time AITime = sf::seconds(0.1f);
+ const float paddleSpeed = 400.f;
+ float rightPaddleSpeed = 0.f;
+ const float ballSpeed = 400.f;
+ float ballAngle = 0.f; // to be changed later
+
+ sf::Clock clock;
+ bool isPlaying = false;
+ while (window.isOpen())
+ {
+ // Handle events
+ sf::Event event;
+ while (window.pollEvent(event))
+ {
+ // Window closed or escape key pressed: exit
+ if ((event.type == sf::Event::Closed) ||
+ ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)))
+ {
+ window.close();
+ break;
+ }
+
+ // Space key pressed: play
+ if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Space))
+ {
+ if (!isPlaying)
+ {
+ // (re)start the game
+ isPlaying = true;
+ clock.restart();
+
+ // Reset the position of the paddles and ball
+ leftPaddle.setPosition(10 + paddleSize.x / 2, gameHeight / 2);
+ rightPaddle.setPosition(gameWidth - 10 - paddleSize.x / 2, gameHeight / 2);
+ ball.setPosition(gameWidth / 2, gameHeight / 2);
+
+ // Reset the ball angle
+ do
+ {
+ // Make sure the ball initial angle is not too much vertical
+ ballAngle = (std::rand() % 360) * 2 * pi / 360;
+ }
+ while (std::abs(std::cos(ballAngle)) < 0.7f);
+ }
+ }
+ }
+
+ if (isPlaying)
+ {
+ float deltaTime = clock.restart().asSeconds();
+
+ // Move the player's paddle
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) &&
+ (leftPaddle.getPosition().y - paddleSize.y / 2 > 5.f))
+ {
+ leftPaddle.move(0.f, -paddleSpeed * deltaTime);
+ }
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down) &&
+ (leftPaddle.getPosition().y + paddleSize.y / 2 < gameHeight - 5.f))
+ {
+ leftPaddle.move(0.f, paddleSpeed * deltaTime);
+ }
+
+ // Move the computer's paddle
+ if (((rightPaddleSpeed < 0.f) && (rightPaddle.getPosition().y - paddleSize.y / 2 > 5.f)) ||
+ ((rightPaddleSpeed > 0.f) && (rightPaddle.getPosition().y + paddleSize.y / 2 < gameHeight - 5.f)))
+ {
+ rightPaddle.move(0.f, rightPaddleSpeed * deltaTime);
+ }
+
+ // Update the computer's paddle direction according to the ball position
+ if (AITimer.getElapsedTime() > AITime)
+ {
+ AITimer.restart();
+ if (ball.getPosition().y + ballRadius > rightPaddle.getPosition().y + paddleSize.y / 2)
+ rightPaddleSpeed = paddleSpeed;
+ else if (ball.getPosition().y - ballRadius < rightPaddle.getPosition().y - paddleSize.y / 2)
+ rightPaddleSpeed = -paddleSpeed;
+ else
+ rightPaddleSpeed = 0.f;
+ }
+
+ // Move the ball
+ float factor = ballSpeed * deltaTime;
+ ball.move(std::cos(ballAngle) * factor, std::sin(ballAngle) * factor);
+
+ // Check collisions between the ball and the screen
+ if (ball.getPosition().x - ballRadius < 0.f)
+ {
+ isPlaying = false;
+ pauseMessage.setString("You lost !\nPress space to restart or\nescape to exit");
+ }
+ if (ball.getPosition().x + ballRadius > gameWidth)
+ {
+ isPlaying = false;
+ pauseMessage.setString("You won !\nPress space to restart or\nescape to exit");
+ }
+ if (ball.getPosition().y - ballRadius < 0.f)
+ {
+ ballSound.play();
+ ballAngle = -ballAngle;
+ ball.setPosition(ball.getPosition().x, ballRadius + 0.1f);
+ }
+ if (ball.getPosition().y + ballRadius > gameHeight)
+ {
+ ballSound.play();
+ ballAngle = -ballAngle;
+ ball.setPosition(ball.getPosition().x, gameHeight - ballRadius - 0.1f);
+ }
+
+ // Check the collisions between the ball and the paddles
+ // Left Paddle
+ if (ball.getPosition().x - ballRadius < leftPaddle.getPosition().x + paddleSize.x / 2 &&
+ ball.getPosition().x - ballRadius > leftPaddle.getPosition().x &&
+ ball.getPosition().y + ballRadius >= leftPaddle.getPosition().y - paddleSize.y / 2 &&
+ ball.getPosition().y - ballRadius <= leftPaddle.getPosition().y + paddleSize.y / 2)
+ {
+ if (ball.getPosition().y > leftPaddle.getPosition().y)
+ ballAngle = pi - ballAngle + (std::rand() % 20) * pi / 180;
+ else
+ ballAngle = pi - ballAngle - (std::rand() % 20) * pi / 180;
+
+ ballSound.play();
+ ball.setPosition(leftPaddle.getPosition().x + ballRadius + paddleSize.x / 2 + 0.1f, ball.getPosition().y);
+ }
+
+ // Right Paddle
+ if (ball.getPosition().x + ballRadius > rightPaddle.getPosition().x - paddleSize.x / 2 &&
+ ball.getPosition().x + ballRadius < rightPaddle.getPosition().x &&
+ ball.getPosition().y + ballRadius >= rightPaddle.getPosition().y - paddleSize.y / 2 &&
+ ball.getPosition().y - ballRadius <= rightPaddle.getPosition().y + paddleSize.y / 2)
+ {
+ if (ball.getPosition().y > rightPaddle.getPosition().y)
+ ballAngle = pi - ballAngle + (std::rand() % 20) * pi / 180;
+ else
+ ballAngle = pi - ballAngle - (std::rand() % 20) * pi / 180;
+
+ ballSound.play();
+ ball.setPosition(rightPaddle.getPosition().x - ballRadius - paddleSize.x / 2 - 0.1f, ball.getPosition().y);
+ }
+ }
+
+ // Clear the window
+ window.clear(sf::Color(50, 200, 50));
+
+ if (isPlaying)
+ {
+ // Draw the paddles and the ball
+ window.draw(leftPaddle);
+ window.draw(rightPaddle);
+ window.draw(ball);
+ }
+ else
+ {
+ // Draw the pause message
+ window.draw(pauseMessage);
+ }
+
+ // Display things on screen
+ window.display();
+ }
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/shader/CMakeLists.txt b/examples/shader/CMakeLists.txt
new file mode 100644
index 0000000..acb1bac
--- /dev/null
+++ b/examples/shader/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/shader)
+
+# all source files
+set(SRC
+ ${SRCROOT}/Effect.hpp
+ ${SRCROOT}/Shader.cpp)
+
+# define the shader target
+sfml_add_example(shader GUI_APP
+ SOURCES ${SRC}
+ DEPENDS sfml-graphics sfml-window sfml-system)
diff --git a/examples/shader/Effect.hpp b/examples/shader/Effect.hpp
new file mode 100644
index 0000000..ce29c47
--- /dev/null
+++ b/examples/shader/Effect.hpp
@@ -0,0 +1,88 @@
+#ifndef EFFECT_HPP
+#define EFFECT_HPP
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Graphics.hpp>
+#include <cassert>
+#include <string>
+
+
+////////////////////////////////////////////////////////////
+// Base class for effects
+////////////////////////////////////////////////////////////
+class Effect : public sf::Drawable
+{
+public :
+
+ virtual ~Effect()
+ {
+ }
+
+ static void setFont(const sf::Font& font)
+ {
+ s_font = &font;
+ }
+
+ const std::string& getName() const
+ {
+ return m_name;
+ }
+
+ void load()
+ {
+ m_isLoaded = sf::Shader::isAvailable() && onLoad();
+ }
+
+ void update(float time, float x, float y)
+ {
+ if (m_isLoaded)
+ onUpdate(time, x, y);
+ }
+
+ void draw(sf::RenderTarget& target, sf::RenderStates states) const
+ {
+ if (m_isLoaded)
+ {
+ onDraw(target, states);
+ }
+ else
+ {
+ sf::Text error("Shader not\nsupported", getFont());
+ error.setPosition(320.f, 200.f);
+ error.setCharacterSize(36);
+ target.draw(error, states);
+ }
+ }
+
+protected :
+
+ Effect(const std::string& name) :
+ m_name(name),
+ m_isLoaded(false)
+ {
+ }
+
+ static const sf::Font& getFont()
+ {
+ assert(s_font != NULL);
+ return *s_font;
+ }
+
+private :
+
+ // Virtual functions to be implemented in derived effects
+ virtual bool onLoad() = 0;
+ virtual void onUpdate(float time, float x, float y) = 0;
+ virtual void onDraw(sf::RenderTarget& target, sf::RenderStates states) const = 0;
+
+private :
+
+ std::string m_name;
+ bool m_isLoaded;
+
+ static const sf::Font* s_font;
+};
+
+#endif // EFFECT_HPP
diff --git a/examples/shader/Shader.cpp b/examples/shader/Shader.cpp
new file mode 100644
index 0000000..2b0d8a5
--- /dev/null
+++ b/examples/shader/Shader.cpp
@@ -0,0 +1,380 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include "Effect.hpp"
+#include <SFML/Graphics.hpp>
+#include <vector>
+#include <cmath>
+
+
+const sf::Font* Effect::s_font = NULL;
+
+////////////////////////////////////////////////////////////
+// "Pixelate" fragment shader
+////////////////////////////////////////////////////////////
+class Pixelate : public Effect
+{
+public :
+
+ Pixelate() :
+ Effect("pixelate")
+ {
+ }
+
+ bool onLoad()
+ {
+ // Load the texture and initialize the sprite
+ if (!m_texture.loadFromFile("resources/background.jpg"))
+ return false;
+ m_sprite.setTexture(m_texture);
+
+ // Load the shader
+ if (!m_shader.loadFromFile("resources/pixelate.frag", sf::Shader::Fragment))
+ return false;
+ m_shader.setParameter("texture", sf::Shader::CurrentTexture);
+
+ return true;
+ }
+
+ void onUpdate(float, float x, float y)
+ {
+ m_shader.setParameter("pixel_threshold", (x + y) / 30);
+ }
+
+ void onDraw(sf::RenderTarget& target, sf::RenderStates states) const
+ {
+ states.shader = &m_shader;
+ target.draw(m_sprite, states);
+ }
+
+private:
+
+ sf::Texture m_texture;
+ sf::Sprite m_sprite;
+ sf::Shader m_shader;
+};
+
+
+////////////////////////////////////////////////////////////
+// "Wave" vertex shader + "blur" fragment shader
+////////////////////////////////////////////////////////////
+class WaveBlur : public Effect
+{
+public :
+
+ WaveBlur() :
+ Effect("wave + blur")
+ {
+ }
+
+ bool onLoad()
+ {
+ // Create the text
+ m_text.setString("Praesent suscipit augue in velit pulvinar hendrerit varius purus aliquam.\n"
+ "Mauris mi odio, bibendum quis fringilla a, laoreet vel orci. Proin vitae vulputate tortor.\n"
+ "Praesent cursus ultrices justo, ut feugiat ante vehicula quis.\n"
+ "Donec fringilla scelerisque mauris et viverra.\n"
+ "Maecenas adipiscing ornare scelerisque. Nullam at libero elit.\n"
+ "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.\n"
+ "Nullam leo urna, tincidunt id semper eget, ultricies sed mi.\n"
+ "Morbi mauris massa, commodo id dignissim vel, lobortis et elit.\n"
+ "Fusce vel libero sed neque scelerisque venenatis.\n"
+ "Integer mattis tincidunt quam vitae iaculis.\n"
+ "Vivamus fringilla sem non velit venenatis fermentum.\n"
+ "Vivamus varius tincidunt nisi id vehicula.\n"
+ "Integer ullamcorper, enim vitae euismod rutrum, massa nisl semper ipsum,\n"
+ "vestibulum sodales sem ante in massa.\n"
+ "Vestibulum in augue non felis convallis viverra.\n"
+ "Mauris ultricies dolor sed massa convallis sed aliquet augue fringilla.\n"
+ "Duis erat eros, porta in accumsan in, blandit quis sem.\n"
+ "In hac habitasse platea dictumst. Etiam fringilla est id odio dapibus sit amet semper dui laoreet.\n");
+ m_text.setFont(getFont());
+ m_text.setCharacterSize(22);
+ m_text.setPosition(30, 20);
+
+ // Load the shader
+ if (!m_shader.loadFromFile("resources/wave.vert", "resources/blur.frag"))
+ return false;
+
+ return true;
+ }
+
+ void onUpdate(float time, float x, float y)
+ {
+ m_shader.setParameter("wave_phase", time);
+ m_shader.setParameter("wave_amplitude", x * 40, y * 40);
+ m_shader.setParameter("blur_radius", (x + y) * 0.008f);
+ }
+
+ void onDraw(sf::RenderTarget& target, sf::RenderStates states) const
+ {
+ states.shader = &m_shader;
+ target.draw(m_text, states);
+ }
+
+private:
+
+ sf::Text m_text;
+ sf::Shader m_shader;
+};
+
+
+////////////////////////////////////////////////////////////
+// "Storm" vertex shader + "blink" fragment shader
+////////////////////////////////////////////////////////////
+class StormBlink : public Effect
+{
+public :
+
+ StormBlink() :
+ Effect("storm + blink")
+ {
+ }
+
+ bool onLoad()
+ {
+ // Create the points
+ m_points.setPrimitiveType(sf::Points);
+ for (int i = 0; i < 40000; ++i)
+ {
+ float x = static_cast<float>(std::rand() % 800);
+ float y = static_cast<float>(std::rand() % 600);
+ sf::Uint8 r = std::rand() % 255;
+ sf::Uint8 g = std::rand() % 255;
+ sf::Uint8 b = std::rand() % 255;
+ m_points.append(sf::Vertex(sf::Vector2f(x, y), sf::Color(r, g, b)));
+ }
+
+ // Load the shader
+ if (!m_shader.loadFromFile("resources/storm.vert", "resources/blink.frag"))
+ return false;
+
+ return true;
+ }
+
+ void onUpdate(float time, float x, float y)
+ {
+ float radius = 200 + std::cos(time) * 150;
+ m_shader.setParameter("storm_position", x * 800, y * 600);
+ m_shader.setParameter("storm_inner_radius", radius / 3);
+ m_shader.setParameter("storm_total_radius", radius);
+ m_shader.setParameter("blink_alpha", 0.5f + std::cos(time * 3) * 0.25f);
+ }
+
+ void onDraw(sf::RenderTarget& target, sf::RenderStates states) const
+ {
+ states.shader = &m_shader;
+ target.draw(m_points, states);
+ }
+
+private:
+
+ sf::VertexArray m_points;
+ sf::Shader m_shader;
+};
+
+
+////////////////////////////////////////////////////////////
+// "Edge" post-effect fragment shader
+////////////////////////////////////////////////////////////
+class Edge : public Effect
+{
+public :
+
+ Edge() :
+ Effect("edge post-effect")
+ {
+ }
+
+ bool onLoad()
+ {
+ // Create the off-screen surface
+ if (!m_surface.create(800, 600))
+ return false;
+ m_surface.setSmooth(true);
+
+ // Load the textures
+ if (!m_backgroundTexture.loadFromFile("resources/sfml.png"))
+ return false;
+ m_backgroundTexture.setSmooth(true);
+ if (!m_entityTexture.loadFromFile("resources/devices.png"))
+ return false;
+ m_entityTexture.setSmooth(true);
+
+ // Initialize the background sprite
+ m_backgroundSprite.setTexture(m_backgroundTexture);
+ m_backgroundSprite.setPosition(135, 100);
+
+ // Load the moving entities
+ for (int i = 0; i < 6; ++i)
+ {
+ sf::Sprite entity(m_entityTexture, sf::IntRect(96 * i, 0, 96, 96));
+ m_entities.push_back(entity);
+ }
+
+ // Load the shader
+ if (!m_shader.loadFromFile("resources/edge.frag", sf::Shader::Fragment))
+ return false;
+ m_shader.setParameter("texture", sf::Shader::CurrentTexture);
+
+ return true;
+ }
+
+ void onUpdate(float time, float x, float y)
+ {
+ m_shader.setParameter("edge_threshold", 1 - (x + y) / 2);
+
+ // Update the position of the moving entities
+ for (std::size_t i = 0; i < m_entities.size(); ++i)
+ {
+ sf::Vector2f position;
+ position.x = std::cos(0.25f * (time * i + (m_entities.size() - i))) * 300 + 350;
+ position.y = std::sin(0.25f * (time * (m_entities.size() - i) + i)) * 200 + 250;
+ m_entities[i].setPosition(position);
+ }
+
+ // Render the updated scene to the off-screen surface
+ m_surface.clear(sf::Color::White);
+ m_surface.draw(m_backgroundSprite);
+ for (std::size_t i = 0; i < m_entities.size(); ++i)
+ m_surface.draw(m_entities[i]);
+ m_surface.display();
+ }
+
+ void onDraw(sf::RenderTarget& target, sf::RenderStates states) const
+ {
+ states.shader = &m_shader;
+ target.draw(sf::Sprite(m_surface.getTexture()), states);
+ }
+
+private:
+
+ sf::RenderTexture m_surface;
+ sf::Texture m_backgroundTexture;
+ sf::Texture m_entityTexture;
+ sf::Sprite m_backgroundSprite;
+ std::vector<sf::Sprite> m_entities;
+ sf::Shader m_shader;
+};
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Create the main window
+ sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Shader");
+ window.setVerticalSyncEnabled(true);
+
+ // Load the application font and pass it to the Effect class
+ sf::Font font;
+ if (!font.loadFromFile("resources/sansation.ttf"))
+ return EXIT_FAILURE;
+ Effect::setFont(font);
+
+ // Create the effects
+ std::vector<Effect*> effects;
+ effects.push_back(new Pixelate);
+ effects.push_back(new WaveBlur);
+ effects.push_back(new StormBlink);
+ effects.push_back(new Edge);
+ std::size_t current = 0;
+
+ // Initialize them
+ for (std::size_t i = 0; i < effects.size(); ++i)
+ effects[i]->load();
+
+ // Create the messages background
+ sf::Texture textBackgroundTexture;
+ if (!textBackgroundTexture.loadFromFile("resources/text-background.png"))
+ return EXIT_FAILURE;
+ sf::Sprite textBackground(textBackgroundTexture);
+ textBackground.setPosition(0, 520);
+ textBackground.setColor(sf::Color(255, 255, 255, 200));
+
+ // Create the description text
+ sf::Text description("Current effect: " + effects[current]->getName(), font, 20);
+ description.setPosition(10, 530);
+ description.setColor(sf::Color(80, 80, 80));
+
+ // Create the instructions text
+ sf::Text instructions("Press left and right arrows to change the current shader", font, 20);
+ instructions.setPosition(280, 555);
+ instructions.setColor(sf::Color(80, 80, 80));
+
+ // Start the game loop
+ sf::Clock clock;
+ while (window.isOpen())
+ {
+ // Process events
+ sf::Event event;
+ while (window.pollEvent(event))
+ {
+ // Close window: exit
+ if (event.type == sf::Event::Closed)
+ window.close();
+
+ if (event.type == sf::Event::KeyPressed)
+ {
+ switch (event.key.code)
+ {
+ // Escape key: exit
+ case sf::Keyboard::Escape:
+ window.close();
+ break;
+
+ // Left arrow key: previous shader
+ case sf::Keyboard::Left:
+ if (current == 0)
+ current = effects.size() - 1;
+ else
+ current--;
+ description.setString("Current effect: " + effects[current]->getName());
+ break;
+
+ // Right arrow key: next shader
+ case sf::Keyboard::Right:
+ if (current == effects.size() - 1)
+ current = 0;
+ else
+ current++;
+ description.setString("Current effect: " + effects[current]->getName());
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ // Update the current example
+ float x = static_cast<float>(sf::Mouse::getPosition(window).x) / window.getSize().x;
+ float y = static_cast<float>(sf::Mouse::getPosition(window).y) / window.getSize().y;
+ effects[current]->update(clock.getElapsedTime().asSeconds(), x, y);
+
+ // Clear the window
+ window.clear(sf::Color(255, 128, 0));
+
+ // Draw the current example
+ window.draw(*effects[current]);
+
+ // Draw the text
+ window.draw(textBackground);
+ window.draw(instructions);
+ window.draw(description);
+
+ // Finally, display the rendered frame on screen
+ window.display();
+ }
+
+ // delete the effects
+ for (std::size_t i = 0; i < effects.size(); ++i)
+ delete effects[i];
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/sockets/CMakeLists.txt b/examples/sockets/CMakeLists.txt
new file mode 100644
index 0000000..04b3583
--- /dev/null
+++ b/examples/sockets/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/sockets)
+
+# all source files
+set(SRC ${SRCROOT}/Sockets.cpp
+ ${SRCROOT}/TCP.cpp
+ ${SRCROOT}/UDP.cpp)
+
+# define the sockets target
+sfml_add_example(sockets
+ SOURCES ${SRC}
+ DEPENDS sfml-network sfml-system)
diff --git a/examples/sockets/Sockets.cpp b/examples/sockets/Sockets.cpp
new file mode 100644
index 0000000..a73609c
--- /dev/null
+++ b/examples/sockets/Sockets.cpp
@@ -0,0 +1,59 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <iostream>
+#include <cstdlib>
+
+
+void runTcpServer(unsigned short port);
+void runTcpClient(unsigned short port);
+void runUdpServer(unsigned short port);
+void runUdpClient(unsigned short port);
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Choose an arbitrary port for opening sockets
+ const unsigned short port = 50001;
+
+ // TCP, UDP or connected UDP ?
+ char protocol;
+ std::cout << "Do you want to use TCP (t) or UDP (u) ? ";
+ std::cin >> protocol;
+
+ // Client or server ?
+ char who;
+ std::cout << "Do you want to be a server (s) or a client (c) ? ";
+ std::cin >> who;
+
+ if (protocol == 't')
+ {
+ // Test the TCP protocol
+ if (who == 's')
+ runTcpServer(port);
+ else
+ runTcpClient(port);
+ }
+ else
+ {
+ // Test the unconnected UDP protocol
+ if (who == 's')
+ runUdpServer(port);
+ else
+ runUdpClient(port);
+ }
+
+ // Wait until the user presses 'enter' key
+ std::cout << "Press enter to exit..." << std::endl;
+ std::cin.ignore(10000, '\n');
+ std::cin.ignore(10000, '\n');
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/sockets/TCP.cpp b/examples/sockets/TCP.cpp
new file mode 100644
index 0000000..ff1e1f6
--- /dev/null
+++ b/examples/sockets/TCP.cpp
@@ -0,0 +1,81 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Network.hpp>
+#include <iostream>
+
+
+////////////////////////////////////////////////////////////
+/// Launch a server, wait for an incoming connection,
+/// send a message and wait for the answer.
+///
+////////////////////////////////////////////////////////////
+void runTcpServer(unsigned short port)
+{
+ // Create a server socket to accept new connections
+ sf::TcpListener listener;
+
+ // Listen to the given port for incoming connections
+ if (listener.listen(port) != sf::Socket::Done)
+ return;
+ std::cout << "Server is listening to port " << port << ", waiting for connections... " << std::endl;
+
+ // Wait for a connection
+ sf::TcpSocket socket;
+ if (listener.accept(socket) != sf::Socket::Done)
+ return;
+ std::cout << "Client connected: " << socket.getRemoteAddress() << std::endl;
+
+ // Send a message to the connected client
+ const char out[] = "Hi, I'm the server";
+ if (socket.send(out, sizeof(out)) != sf::Socket::Done)
+ return;
+ std::cout << "Message sent to the client: \"" << out << "\"" << std::endl;
+
+ // Receive a message back from the client
+ char in[128];
+ std::size_t received;
+ if (socket.receive(in, sizeof(in), received) != sf::Socket::Done)
+ return;
+ std::cout << "Answer received from the client: \"" << in << "\"" << std::endl;
+}
+
+
+////////////////////////////////////////////////////////////
+/// Create a client, connect it to a server, display the
+/// welcome message and send an answer.
+///
+////////////////////////////////////////////////////////////
+void runTcpClient(unsigned short port)
+{
+ // Ask for the server address
+ sf::IpAddress server;
+ do
+ {
+ std::cout << "Type the address or name of the server to connect to: ";
+ std::cin >> server;
+ }
+ while (server == sf::IpAddress::None);
+
+ // Create a socket for communicating with the server
+ sf::TcpSocket socket;
+
+ // Connect to the server
+ if (socket.connect(server, port) != sf::Socket::Done)
+ return;
+ std::cout << "Connected to server " << server << std::endl;
+
+ // Receive a message from the server
+ char in[128];
+ std::size_t received;
+ if (socket.receive(in, sizeof(in), received) != sf::Socket::Done)
+ return;
+ std::cout << "Message received from the server: \"" << in << "\"" << std::endl;
+
+ // Send an answer to the server
+ const char out[] = "Hi, I'm a client";
+ if (socket.send(out, sizeof(out)) != sf::Socket::Done)
+ return;
+ std::cout << "Message sent to the server: \"" << out << "\"" << std::endl;
+}
diff --git a/examples/sockets/UDP.cpp b/examples/sockets/UDP.cpp
new file mode 100644
index 0000000..abc7b4b
--- /dev/null
+++ b/examples/sockets/UDP.cpp
@@ -0,0 +1,72 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Network.hpp>
+#include <iostream>
+
+
+////////////////////////////////////////////////////////////
+/// Launch a server, wait for a message, send an answer.
+///
+////////////////////////////////////////////////////////////
+void runUdpServer(unsigned short port)
+{
+ // Create a socket to receive a message from anyone
+ sf::UdpSocket socket;
+
+ // Listen to messages on the specified port
+ if (socket.bind(port) != sf::Socket::Done)
+ return;
+ std::cout << "Server is listening to port " << port << ", waiting for a message... " << std::endl;
+
+ // Wait for a message
+ char in[128];
+ std::size_t received;
+ sf::IpAddress sender;
+ unsigned short senderPort;
+ if (socket.receive(in, sizeof(in), received, sender, senderPort) != sf::Socket::Done)
+ return;
+ std::cout << "Message received from client " << sender << ": \"" << in << "\"" << std::endl;
+
+ // Send an answer to the client
+ const char out[] = "Hi, I'm the server";
+ if (socket.send(out, sizeof(out), sender, senderPort) != sf::Socket::Done)
+ return;
+ std::cout << "Message sent to the client: \"" << out << "\"" << std::endl;
+}
+
+
+////////////////////////////////////////////////////////////
+/// Send a message to the server, wait for the answer
+///
+////////////////////////////////////////////////////////////
+void runUdpClient(unsigned short port)
+{
+ // Ask for the server address
+ sf::IpAddress server;
+ do
+ {
+ std::cout << "Type the address or name of the server to connect to: ";
+ std::cin >> server;
+ }
+ while (server == sf::IpAddress::None);
+
+ // Create a socket for communicating with the server
+ sf::UdpSocket socket;
+
+ // Send a message to the server
+ const char out[] = "Hi, I'm a client";
+ if (socket.send(out, sizeof(out), server, port) != sf::Socket::Done)
+ return;
+ std::cout << "Message sent to the server: \"" << out << "\"" << std::endl;
+
+ // Receive an answer from anyone (but most likely from the server)
+ char in[128];
+ std::size_t received;
+ sf::IpAddress sender;
+ unsigned short senderPort;
+ if (socket.receive(in, sizeof(in), received, sender, senderPort) != sf::Socket::Done)
+ return;
+ std::cout << "Message received from " << sender << ": \"" << in << "\"" << std::endl;
+}
diff --git a/examples/sound/CMakeLists.txt b/examples/sound/CMakeLists.txt
new file mode 100644
index 0000000..12f12e1
--- /dev/null
+++ b/examples/sound/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/sound)
+
+# all source files
+set(SRC ${SRCROOT}/Sound.cpp)
+
+# define the sound target
+sfml_add_example(sound
+ SOURCES ${SRC}
+ DEPENDS sfml-audio sfml-system)
diff --git a/examples/sound/Sound.cpp b/examples/sound/Sound.cpp
new file mode 100644
index 0000000..5c75ab8
--- /dev/null
+++ b/examples/sound/Sound.cpp
@@ -0,0 +1,98 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Audio.hpp>
+#include <iomanip>
+#include <iostream>
+
+
+////////////////////////////////////////////////////////////
+/// Play a sound
+///
+////////////////////////////////////////////////////////////
+void playSound()
+{
+ // Load a sound buffer from a wav file
+ sf::SoundBuffer buffer;
+ if (!buffer.loadFromFile("resources/canary.wav"))
+ return;
+
+ // Display sound informations
+ std::cout << "canary.wav :" << std::endl;
+ std::cout << " " << buffer.getDuration().asSeconds() << " seconds" << std::endl;
+ std::cout << " " << buffer.getSampleRate() << " samples / sec" << std::endl;
+ std::cout << " " << buffer.getChannelCount() << " channels" << std::endl;
+
+ // Create a sound instance and play it
+ sf::Sound sound(buffer);
+ sound.play();
+
+ // Loop while the sound is playing
+ while (sound.getStatus() == sf::Sound::Playing)
+ {
+ // Leave some CPU time for other processes
+ sf::sleep(sf::milliseconds(100));
+
+ // Display the playing position
+ std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << sound.getPlayingOffset().asSeconds() << " sec ";
+ std::cout << std::flush;
+ }
+ std::cout << std::endl << std::endl;
+}
+
+
+////////////////////////////////////////////////////////////
+/// Play a music
+///
+////////////////////////////////////////////////////////////
+void playMusic()
+{
+ // Load an ogg music file
+ sf::Music music;
+ if (!music.openFromFile("resources/orchestral.ogg"))
+ return;
+
+ // Display music informations
+ std::cout << "orchestral.ogg :" << std::endl;
+ std::cout << " " << music.getDuration().asSeconds() << " seconds" << std::endl;
+ std::cout << " " << music.getSampleRate() << " samples / sec" << std::endl;
+ std::cout << " " << music.getChannelCount() << " channels" << std::endl;
+
+ // Play it
+ music.play();
+
+ // Loop while the music is playing
+ while (music.getStatus() == sf::Music::Playing)
+ {
+ // Leave some CPU time for other processes
+ sf::sleep(sf::milliseconds(100));
+
+ // Display the playing position
+ std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << music.getPlayingOffset().asSeconds() << " sec ";
+ std::cout << std::flush;
+ }
+ std::cout << std::endl;
+}
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Play a sound
+ playSound();
+
+ // Play a music
+ playMusic();
+
+ // Wait until the user presses 'enter' key
+ std::cout << "Press enter to exit..." << std::endl;
+ std::cin.ignore(10000, '\n');
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/sound_capture/CMakeLists.txt b/examples/sound_capture/CMakeLists.txt
new file mode 100644
index 0000000..ac75c3c
--- /dev/null
+++ b/examples/sound_capture/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/sound_capture)
+
+# all source files
+set(SRC ${SRCROOT}/SoundCapture.cpp)
+
+# define the sound-capture target
+sfml_add_example(sound-capture
+ SOURCES ${SRC}
+ DEPENDS sfml-audio sfml-system)
diff --git a/examples/sound_capture/SoundCapture.cpp b/examples/sound_capture/SoundCapture.cpp
new file mode 100644
index 0000000..a6946ac
--- /dev/null
+++ b/examples/sound_capture/SoundCapture.cpp
@@ -0,0 +1,95 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Audio.hpp>
+#include <iomanip>
+#include <iostream>
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Check that the device can capture audio
+ if (sf::SoundRecorder::isAvailable() == false)
+ {
+ std::cout << "Sorry, audio capture is not supported by your system" << std::endl;
+ return EXIT_SUCCESS;
+ }
+
+ // Choose the sample rate
+ unsigned int sampleRate;
+ std::cout << "Please choose the sample rate for sound capture (44100 is CD quality) : ";
+ std::cin >> sampleRate;
+ std::cin.ignore(10000, '\n');
+
+ // Wait for user input...
+ std::cout << "Press enter to start recording audio";
+ std::cin.ignore(10000, '\n');
+
+ // Here we'll use an integrated custom recorder, which saves the captured data into a SoundBuffer
+ sf::SoundBufferRecorder recorder;
+
+ // Audio capture is done in a separate thread, so we can block the main thread while it is capturing
+ recorder.start(sampleRate);
+ std::cout << "Recording... press enter to stop";
+ std::cin.ignore(10000, '\n');
+ recorder.stop();
+
+ // Get the buffer containing the captured data
+ const sf::SoundBuffer& buffer = recorder.getBuffer();
+
+ // Display captured sound informations
+ std::cout << "Sound information :" << std::endl;
+ std::cout << " " << buffer.getDuration().asSeconds() << " seconds" << std::endl;
+ std::cout << " " << buffer.getSampleRate() << " samples / seconds" << std::endl;
+ std::cout << " " << buffer.getChannelCount() << " channels" << std::endl;
+
+ // Choose what to do with the recorded sound data
+ char choice;
+ std::cout << "What do you want to do with captured sound (p = play, s = save) ? ";
+ std::cin >> choice;
+ std::cin.ignore(10000, '\n');
+
+ if (choice == 's')
+ {
+ // Choose the filename
+ std::string filename;
+ std::cout << "Choose the file to create : ";
+ std::getline(std::cin, filename);
+
+ // Save the buffer
+ buffer.saveToFile(filename);
+ }
+ else
+ {
+ // Create a sound instance and play it
+ sf::Sound sound(buffer);
+ sound.play();
+
+ // Wait until finished
+ while (sound.getStatus() == sf::Sound::Playing)
+ {
+ // Display the playing position
+ std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << sound.getPlayingOffset().asSeconds() << " sec";
+ std::cout << std::flush;
+
+ // Leave some CPU time for other threads
+ sf::sleep(sf::milliseconds(100));
+ }
+ }
+
+ // Finished !
+ std::cout << std::endl << "Done !" << std::endl;
+
+ // Wait until the user presses 'enter' key
+ std::cout << "Press enter to exit..." << std::endl;
+ std::cin.ignore(10000, '\n');
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/voip/CMakeLists.txt b/examples/voip/CMakeLists.txt
new file mode 100644
index 0000000..c2e0738
--- /dev/null
+++ b/examples/voip/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/voip)
+
+# all source files
+set(SRC ${SRCROOT}/VoIP.cpp
+ ${SRCROOT}/Client.cpp
+ ${SRCROOT}/Server.cpp)
+
+# define the voip target
+sfml_add_example(voip
+ SOURCES ${SRC}
+ DEPENDS sfml-audio sfml-network sfml-system)
diff --git a/examples/voip/Client.cpp b/examples/voip/Client.cpp
new file mode 100644
index 0000000..ceb2da6
--- /dev/null
+++ b/examples/voip/Client.cpp
@@ -0,0 +1,129 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Audio.hpp>
+#include <SFML/Network.hpp>
+#include <iostream>
+
+
+const sf::Uint8 audioData = 1;
+const sf::Uint8 endOfStream = 2;
+
+
+////////////////////////////////////////////////////////////
+/// Specialization of audio recorder for sending recorded audio
+/// data through the network
+////////////////////////////////////////////////////////////
+class NetworkRecorder : public sf::SoundRecorder
+{
+public :
+
+ ////////////////////////////////////////////////////////////
+ /// Constructor
+ ///
+ /// \param host Remote host to which send the recording data
+ /// \param port Port of the remote host
+ ///
+ ////////////////////////////////////////////////////////////
+ NetworkRecorder(const sf::IpAddress& host, unsigned short port) :
+ m_host(host),
+ m_port(port)
+ {
+ }
+
+private :
+
+ ////////////////////////////////////////////////////////////
+ /// /see SoundRecorder::OnStart
+ ///
+ ////////////////////////////////////////////////////////////
+ virtual bool onStart()
+ {
+ if (m_socket.connect(m_host, m_port) == sf::Socket::Done)
+ {
+ std::cout << "Connected to server " << m_host << std::endl;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////
+ /// /see SoundRecorder::ProcessSamples
+ ///
+ ////////////////////////////////////////////////////////////
+ virtual bool onProcessSamples(const sf::Int16* samples, std::size_t sampleCount)
+ {
+ // Pack the audio samples into a network packet
+ sf::Packet packet;
+ packet << audioData;
+ packet.append(samples, sampleCount * sizeof(sf::Int16));
+
+ // Send the audio packet to the server
+ return m_socket.send(packet) == sf::Socket::Done;
+ }
+
+ ////////////////////////////////////////////////////////////
+ /// /see SoundRecorder::OnStop
+ ///
+ ////////////////////////////////////////////////////////////
+ virtual void onStop()
+ {
+ // Send a "end-of-stream" packet
+ sf::Packet packet;
+ packet << endOfStream;
+ m_socket.send(packet);
+
+ // Close the socket
+ m_socket.disconnect();
+ }
+
+ ////////////////////////////////////////////////////////////
+ // Member data
+ ////////////////////////////////////////////////////////////
+ sf::IpAddress m_host; ///< Address of the remote host
+ unsigned short m_port; ///< Remote port
+ sf::TcpSocket m_socket; ///< Socket used to communicate with the server
+};
+
+
+////////////////////////////////////////////////////////////
+/// Create a client, connect it to a running server and
+/// start sending him audio data
+///
+////////////////////////////////////////////////////////////
+void doClient(unsigned short port)
+{
+ // Check that the device can capture audio
+ if (sf::SoundRecorder::isAvailable() == false)
+ {
+ std::cout << "Sorry, audio capture is not supported by your system" << std::endl;
+ return;
+ }
+
+ // Ask for server address
+ sf::IpAddress server;
+ do
+ {
+ std::cout << "Type address or name of the server to connect to : ";
+ std::cin >> server;
+ }
+ while (server == sf::IpAddress::None);
+
+ // Create an instance of our custom recorder
+ NetworkRecorder recorder(server, port);
+
+ // Wait for user input...
+ std::cin.ignore(10000, '\n');
+ std::cout << "Press enter to start recording audio";
+ std::cin.ignore(10000, '\n');
+
+ // Start capturing audio data
+ recorder.start(44100);
+ std::cout << "Recording... press enter to stop";
+ std::cin.ignore(10000, '\n');
+ recorder.stop();
+}
diff --git a/examples/voip/Server.cpp b/examples/voip/Server.cpp
new file mode 100644
index 0000000..29227fa
--- /dev/null
+++ b/examples/voip/Server.cpp
@@ -0,0 +1,200 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Audio.hpp>
+#include <SFML/Network.hpp>
+#include <iomanip>
+#include <iostream>
+#include <iterator>
+
+
+const sf::Uint8 audioData = 1;
+const sf::Uint8 endOfStream = 2;
+
+
+////////////////////////////////////////////////////////////
+/// Customized sound stream for acquiring audio data
+/// from the network
+////////////////////////////////////////////////////////////
+class NetworkAudioStream : public sf::SoundStream
+{
+public :
+
+ ////////////////////////////////////////////////////////////
+ /// Default constructor
+ ///
+ ////////////////////////////////////////////////////////////
+ NetworkAudioStream() :
+ m_offset (0),
+ m_hasFinished(false)
+ {
+ // Set the sound parameters
+ initialize(1, 44100);
+ }
+
+ ////////////////////////////////////////////////////////////
+ /// Run the server, stream audio data from the client
+ ///
+ ////////////////////////////////////////////////////////////
+ void start(unsigned short port)
+ {
+ if (!m_hasFinished)
+ {
+ // Listen to the given port for incoming connections
+ if (m_listener.listen(port) != sf::Socket::Done)
+ return;
+ std::cout << "Server is listening to port " << port << ", waiting for connections... " << std::endl;
+
+ // Wait for a connection
+ if (m_listener.accept(m_client) != sf::Socket::Done)
+ return;
+ std::cout << "Client connected: " << m_client.getRemoteAddress() << std::endl;
+
+ // Start playback
+ play();
+
+ // Start receiving audio data
+ receiveLoop();
+ }
+ else
+ {
+ // Start playback
+ play();
+ }
+ }
+
+private :
+
+ ////////////////////////////////////////////////////////////
+ /// /see SoundStream::OnGetData
+ ///
+ ////////////////////////////////////////////////////////////
+ virtual bool onGetData(sf::SoundStream::Chunk& data)
+ {
+ // We have reached the end of the buffer and all audio data have been played : we can stop playback
+ if ((m_offset >= m_samples.size()) && m_hasFinished)
+ return false;
+
+ // No new data has arrived since last update : wait until we get some
+ while ((m_offset >= m_samples.size()) && !m_hasFinished)
+ sf::sleep(sf::milliseconds(10));
+
+ // Copy samples into a local buffer to avoid synchronization problems
+ // (don't forget that we run in two separate threads)
+ {
+ sf::Lock lock(m_mutex);
+ m_tempBuffer.assign(m_samples.begin() + m_offset, m_samples.end());
+ }
+
+ // Fill audio data to pass to the stream
+ data.samples = &m_tempBuffer[0];
+ data.sampleCount = m_tempBuffer.size();
+
+ // Update the playing offset
+ m_offset += m_tempBuffer.size();
+
+ return true;
+ }
+
+ ////////////////////////////////////////////////////////////
+ /// /see SoundStream::OnSeek
+ ///
+ ////////////////////////////////////////////////////////////
+ virtual void onSeek(sf::Time timeOffset)
+ {
+ m_offset = timeOffset.asMilliseconds() * getSampleRate() * getChannelCount() / 1000;
+ }
+
+ ////////////////////////////////////////////////////////////
+ /// Get audio data from the client until playback is stopped
+ ///
+ ////////////////////////////////////////////////////////////
+ void receiveLoop()
+ {
+ while (!m_hasFinished)
+ {
+ // Get waiting audio data from the network
+ sf::Packet packet;
+ if (m_client.receive(packet) != sf::Socket::Done)
+ break;
+
+ // Extract the message ID
+ sf::Uint8 id;
+ packet >> id;
+
+ if (id == audioData)
+ {
+ // Extract audio samples from the packet, and append it to our samples buffer
+ const sf::Int16* samples = reinterpret_cast<const sf::Int16*>(static_cast<const char*>(packet.getData()) + 1);
+ std::size_t sampleCount = (packet.getDataSize() - 1) / sizeof(sf::Int16);
+
+ // Don't forget that the other thread can access the sample array at any time
+ // (so we protect any operation on it with the mutex)
+ {
+ sf::Lock lock(m_mutex);
+ std::copy(samples, samples + sampleCount, std::back_inserter(m_samples));
+ }
+ }
+ else if (id == endOfStream)
+ {
+ // End of stream reached : we stop receiving audio data
+ std::cout << "Audio data has been 100% received!" << std::endl;
+ m_hasFinished = true;
+ }
+ else
+ {
+ // Something's wrong...
+ std::cout << "Invalid packet received..." << std::endl;
+ m_hasFinished = true;
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////
+ // Member data
+ ////////////////////////////////////////////////////////////
+ sf::TcpListener m_listener;
+ sf::TcpSocket m_client;
+ sf::Mutex m_mutex;
+ std::vector<sf::Int16> m_samples;
+ std::vector<sf::Int16> m_tempBuffer;
+ std::size_t m_offset;
+ bool m_hasFinished;
+};
+
+
+////////////////////////////////////////////////////////////
+/// Launch a server and wait for incoming audio data from
+/// a connected client
+///
+////////////////////////////////////////////////////////////
+void doServer(unsigned short port)
+{
+ // Build an audio stream to play sound data as it is received through the network
+ NetworkAudioStream audioStream;
+ audioStream.start(port);
+
+ // Loop until the sound playback is finished
+ while (audioStream.getStatus() != sf::SoundStream::Stopped)
+ {
+ // Leave some CPU time for other threads
+ sf::sleep(sf::milliseconds(100));
+ }
+
+ std::cin.ignore(10000, '\n');
+
+ // Wait until the user presses 'enter' key
+ std::cout << "Press enter to replay the sound..." << std::endl;
+ std::cin.ignore(10000, '\n');
+
+ // Replay the sound (just to make sure replaying the received data is OK)
+ audioStream.play();
+
+ // Loop until the sound playback is finished
+ while (audioStream.getStatus() != sf::SoundStream::Stopped)
+ {
+ // Leave some CPU time for other threads
+ sf::sleep(sf::milliseconds(100));
+ }
+}
diff --git a/examples/voip/VoIP.cpp b/examples/voip/VoIP.cpp
new file mode 100644
index 0000000..93f9512
--- /dev/null
+++ b/examples/voip/VoIP.cpp
@@ -0,0 +1,50 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <iomanip>
+#include <iostream>
+#include <cstdlib>
+
+
+////////////////////////////////////////////////////////////
+// Function prototypes
+// (I'm too lazy to put them into separate headers...)
+////////////////////////////////////////////////////////////
+void doClient(unsigned short port);
+void doServer(unsigned short port);
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Choose a random port for opening sockets (ports < 1024 are reserved)
+ const unsigned short port = 2435;
+
+ // Client or server ?
+ char who;
+ std::cout << "Do you want to be a server ('s') or a client ('c') ? ";
+ std::cin >> who;
+
+ if (who == 's')
+ {
+ // Run as a server
+ doServer(port);
+ }
+ else
+ {
+ // Run as a client
+ doClient(port);
+ }
+
+ // Wait until the user presses 'enter' key
+ std::cout << "Press enter to exit..." << std::endl;
+ std::cin.ignore(10000, '\n');
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/win32/CMakeLists.txt b/examples/win32/CMakeLists.txt
new file mode 100644
index 0000000..edd8237
--- /dev/null
+++ b/examples/win32/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/win32)
+
+# all source files
+set(SRC ${SRCROOT}/Win32.cpp)
+
+# define the win32 target
+sfml_add_example(win32 GUI_APP
+ SOURCES ${SRC}
+ DEPENDS sfml-graphics sfml-window sfml-system)
diff --git a/examples/win32/Win32.cpp b/examples/win32/Win32.cpp
new file mode 100644
index 0000000..4d70931
--- /dev/null
+++ b/examples/win32/Win32.cpp
@@ -0,0 +1,130 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Graphics.hpp>
+#include <windows.h>
+#include <cmath>
+
+HWND button;
+
+
+////////////////////////////////////////////////////////////
+/// Function called whenever one of our windows receives a message
+///
+////////////////////////////////////////////////////////////
+LRESULT CALLBACK onEvent(HWND handle, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ // Quit when we close the main window
+ case WM_CLOSE :
+ {
+ PostQuitMessage(0);
+ return 0;
+ }
+
+ // Quit when we click the "quit" button
+ case WM_COMMAND :
+ {
+ if (reinterpret_cast<HWND>(lParam) == button)
+ {
+ PostQuitMessage(0);
+ return 0;
+ }
+ }
+ }
+
+ return DefWindowProc(handle, message, wParam, lParam);
+}
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \param Instance : Instance of the application
+///
+/// \return Error code
+///
+////////////////////////////////////////////////////////////
+INT WINAPI WinMain(HINSTANCE instance, HINSTANCE, LPSTR, INT)
+{
+ // Define a class for our main window
+ WNDCLASS windowClass;
+ windowClass.style = 0;
+ windowClass.lpfnWndProc = &onEvent;
+ windowClass.cbClsExtra = 0;
+ windowClass.cbWndExtra = 0;
+ windowClass.hInstance = instance;
+ windowClass.hIcon = NULL;
+ windowClass.hCursor = 0;
+ windowClass.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BACKGROUND);
+ windowClass.lpszMenuName = NULL;
+ windowClass.lpszClassName = TEXT("SFML App");
+ RegisterClass(&windowClass);
+
+ // Let's create the main window
+ HWND window = CreateWindow(TEXT("SFML App"), TEXT("SFML Win32"), WS_SYSMENU | WS_VISIBLE, 200, 200, 660, 520, NULL, NULL, instance, NULL);
+
+ // Add a button for exiting
+ button = CreateWindow(TEXT("BUTTON"), TEXT("Quit"), WS_CHILD | WS_VISIBLE, 560, 440, 80, 40, window, NULL, instance, NULL);
+
+ // Let's create two SFML views
+ HWND view1 = CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 20, 20, 300, 400, window, NULL, instance, NULL);
+ HWND view2 = CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 340, 20, 300, 400, window, NULL, instance, NULL);
+ sf::RenderWindow SFMLView1(view1);
+ sf::RenderWindow SFMLView2(view2);
+
+ // Load some textures to display
+ sf::Texture texture1, texture2;
+ if (!texture1.loadFromFile("resources/image1.jpg") || !texture2.loadFromFile("resources/image2.jpg"))
+ return EXIT_FAILURE;
+ sf::Sprite sprite1(texture1);
+ sf::Sprite sprite2(texture2);
+ sprite1.setOrigin(sf::Vector2f(texture1.getSize()) / 2.f);
+ sprite1.setPosition(sprite1.getOrigin());
+
+ // Create a clock for measuring elapsed time
+ sf::Clock clock;
+
+ // Loop until a WM_QUIT message is received
+ MSG message;
+ message.message = static_cast<UINT>(~WM_QUIT);
+ while (message.message != WM_QUIT)
+ {
+ if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
+ {
+ // If a message was waiting in the message queue, process it
+ TranslateMessage(&message);
+ DispatchMessage(&message);
+ }
+ else
+ {
+ float time = clock.getElapsedTime().asSeconds();
+
+ // Clear views
+ SFMLView1.clear();
+ SFMLView2.clear();
+
+ // Draw sprite 1 on view 1
+ sprite1.setRotation(time * 100);
+ SFMLView1.draw(sprite1);
+
+ // Draw sprite 2 on view 2
+ sprite2.setPosition(std::cos(time) * 100.f, 0.f);
+ SFMLView2.draw(sprite2);
+
+ // Display each view on screen
+ SFMLView1.display();
+ SFMLView2.display();
+ }
+ }
+
+ // Destroy the main window (all its child controls will be destroyed)
+ DestroyWindow(window);
+
+ // Don't forget to unregister the window class
+ UnregisterClass(TEXT("SFML App"), instance);
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/window/CMakeLists.txt b/examples/window/CMakeLists.txt
new file mode 100644
index 0000000..a9edafa
--- /dev/null
+++ b/examples/window/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/window)
+
+# all source files
+set(SRC ${SRCROOT}/Window.cpp)
+
+# find OpenGL and GLU
+find_package(OpenGL REQUIRED)
+include_directories(${OPENGL_INCLUDE_DIR})
+
+# define the window target
+sfml_add_example(window GUI_APP
+ SOURCES ${SRC}
+ DEPENDS sfml-window sfml-system ${OPENGL_LIBRARIES})
diff --git a/examples/window/Window.cpp b/examples/window/Window.cpp
new file mode 100644
index 0000000..360703b
--- /dev/null
+++ b/examples/window/Window.cpp
@@ -0,0 +1,146 @@
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Window.hpp>
+#include <SFML/OpenGL.hpp>
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Request a 32-bits depth buffer when creating the window
+ sf::ContextSettings contextSettings;
+ contextSettings.depthBits = 32;
+
+ // Create the main window
+ sf::Window window(sf::VideoMode(640, 480), "SFML window with OpenGL", sf::Style::Default, contextSettings);
+
+ // Make it the active window for OpenGL calls
+ window.setActive();
+
+ // Set the color and depth clear values
+ glClearDepth(1.f);
+ glClearColor(0.f, 0.f, 0.f, 1.f);
+
+ // Enable Z-buffer read and write
+ glEnable(GL_DEPTH_TEST);
+ glDepthMask(GL_TRUE);
+
+ // Disable lighting and texturing
+ glDisable(GL_LIGHTING);
+ glDisable(GL_TEXTURE_2D);
+
+ // Configure the viewport (the same size as the window)
+ glViewport(0, 0, window.getSize().x, window.getSize().y);
+
+ // Setup a perspective projection
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ GLfloat ratio = static_cast<float>(window.getSize().x) / window.getSize().y;
+ glFrustum(-ratio, ratio, -1.f, 1.f, 1.f, 500.f);
+
+ // Define a 3D cube (6 faces made of 2 triangles composed by 3 vertices)
+ GLfloat cube[] =
+ {
+ // positions // colors (r, g, b, a)
+ -50, -50, -50, 0, 0, 1, 1,
+ -50, 50, -50, 0, 0, 1, 1,
+ -50, -50, 50, 0, 0, 1, 1,
+ -50, -50, 50, 0, 0, 1, 1,
+ -50, 50, -50, 0, 0, 1, 1,
+ -50, 50, 50, 0, 0, 1, 1,
+
+ 50, -50, -50, 0, 1, 0, 1,
+ 50, 50, -50, 0, 1, 0, 1,
+ 50, -50, 50, 0, 1, 0, 1,
+ 50, -50, 50, 0, 1, 0, 1,
+ 50, 50, -50, 0, 1, 0, 1,
+ 50, 50, 50, 0, 1, 0, 1,
+
+ -50, -50, -50, 1, 0, 0, 1,
+ 50, -50, -50, 1, 0, 0, 1,
+ -50, -50, 50, 1, 0, 0, 1,
+ -50, -50, 50, 1, 0, 0, 1,
+ 50, -50, -50, 1, 0, 0, 1,
+ 50, -50, 50, 1, 0, 0, 1,
+
+ -50, 50, -50, 0, 1, 1, 1,
+ 50, 50, -50, 0, 1, 1, 1,
+ -50, 50, 50, 0, 1, 1, 1,
+ -50, 50, 50, 0, 1, 1, 1,
+ 50, 50, -50, 0, 1, 1, 1,
+ 50, 50, 50, 0, 1, 1, 1,
+
+ -50, -50, -50, 1, 0, 1, 1,
+ 50, -50, -50, 1, 0, 1, 1,
+ -50, 50, -50, 1, 0, 1, 1,
+ -50, 50, -50, 1, 0, 1, 1,
+ 50, -50, -50, 1, 0, 1, 1,
+ 50, 50, -50, 1, 0, 1, 1,
+
+ -50, -50, 50, 1, 1, 0, 1,
+ 50, -50, 50, 1, 1, 0, 1,
+ -50, 50, 50, 1, 1, 0, 1,
+ -50, 50, 50, 1, 1, 0, 1,
+ 50, -50, 50, 1, 1, 0, 1,
+ 50, 50, 50, 1, 1, 0, 1,
+ };
+
+ // Enable position and color vertex components
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+ glVertexPointer(3, GL_FLOAT, 7 * sizeof(GLfloat), cube);
+ glColorPointer(4, GL_FLOAT, 7 * sizeof(GLfloat), cube + 3);
+
+ // Disable normal and texture coordinates vertex components
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+
+ // Create a clock for measuring the time elapsed
+ sf::Clock clock;
+
+ // Start the game loop
+ while (window.isOpen())
+ {
+ // Process events
+ sf::Event event;
+ while (window.pollEvent(event))
+ {
+ // Close window: exit
+ if (event.type == sf::Event::Closed)
+ window.close();
+
+ // Escape key: exit
+ if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))
+ window.close();
+
+ // Resize event: adjust the viewport
+ if (event.type == sf::Event::Resized)
+ glViewport(0, 0, event.size.width, event.size.height);
+ }
+
+ // Clear the color and depth buffers
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ // Apply some transformations to rotate the cube
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0.f, 0.f, -200.f);
+ glRotatef(clock.getElapsedTime().asSeconds() * 50, 1.f, 0.f, 0.f);
+ glRotatef(clock.getElapsedTime().asSeconds() * 30, 0.f, 1.f, 0.f);
+ glRotatef(clock.getElapsedTime().asSeconds() * 90, 0.f, 0.f, 1.f);
+
+ // Draw the cube
+ glDrawArrays(GL_TRIANGLES, 0, 36);
+
+ // Finally, display the rendered frame on screen
+ window.display();
+ }
+
+ return EXIT_SUCCESS;
+}