├── example_project
├── Project.xcconfig
├── src
│ ├── main.cpp
│ ├── testApp.h
│ └── testApp.cpp
├── .vcproj.user
├── openFrameworks-Info.plist
├── .sln
├── ofxTerminalExample.xcodeproj
│ ├── WHG.pbxuser
│ ├── project.pbxproj
│ └── WHG.mode1v3
└── .vcproj
├── readme.md
└── ofxTerminal.h
/example_project/Project.xcconfig:
--------------------------------------------------------------------------------
1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT.
2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED
3 | OF_PATH = ../../..
4 |
5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE
6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig"
7 |
8 | OTHER_LDFLAGS = $(OF_CORE_LIBS)
9 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS)
10 |
--------------------------------------------------------------------------------
/example_project/src/main.cpp:
--------------------------------------------------------------------------------
1 | #include "ofMain.h"
2 | #include "testApp.h"
3 | #include "ofAppGlutWindow.h"
4 |
5 | //========================================================================
6 | int main( ){
7 |
8 | ofAppGlutWindow window;
9 | ofSetupOpenGL(&window, 640, 480, OF_WINDOW); // <-------- setup the GL context
10 |
11 | // this kicks off the running of my app
12 | // can be OF_WINDOW or OF_FULLSCREEN
13 | // pass in width and height too:
14 | ofRunApp( new testApp());
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/example_project/.vcproj.user:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
15 |
16 |
19 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/example_project/openFrameworks-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | com.yourcompany.openFrameworks
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundlePackageType
14 | APPL
15 | CFBundleSignature
16 | ????
17 | CFBundleVersion
18 | 1.0
19 |
20 |
21 |
--------------------------------------------------------------------------------
/example_project/src/testApp.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "ofMain.h"
4 | #include "ofxTerminal.h"
5 |
6 | // usage:
7 | // you can call:
8 | // - amplitude
9 | // - frequency
10 | // - speed
11 | // - length
12 | //
13 | // with some kind of value
14 |
15 |
16 | class testApp : public ofBaseApp {
17 |
18 | public:
19 | void setup();
20 | void update();
21 | void draw();
22 |
23 | void keyPressed(int key);
24 |
25 | ofxTerminal terminal;
26 |
27 | string setFrequency(vector args);
28 | string setAmplitude(vector args);
29 | string setLength(vector args);
30 | string setSpeed(vector args);
31 |
32 | string blink(vector args);
33 | string setPS1(vector args);
34 |
35 | float counter, speed;
36 | int length;
37 | float frequency, amplitude;
38 |
39 | };
40 |
--------------------------------------------------------------------------------
/example_project/.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 10.00
2 | # Visual C++ Express 2008
3 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "emptyExample", "emptyExample.vcproj", "{7FD42DF7-442E-479A-BA76-D0022F99702A}"
4 | ProjectSection(ProjectDependencies) = postProject
5 | {5837595D-ACA9-485C-8E76-729040CE4B0B} = {5837595D-ACA9-485C-8E76-729040CE4B0B}
6 | EndProjectSection
7 | EndProject
8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openframeworksLib", "..\..\..\libs\openFrameworksCompiled\project\vs2008\openframeworksLib.vcproj", "{5837595D-ACA9-485C-8E76-729040CE4B0B}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Win32 = Debug|Win32
13 | Release|Win32 = Release|Win32
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug|Win32.ActiveCfg = Debug|Win32
17 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug|Win32.Build.0 = Debug|Win32
18 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Release|Win32.ActiveCfg = Release|Win32
19 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Release|Win32.Build.0 = Release|Win32
20 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Debug|Win32.ActiveCfg = Debug|Win32
21 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Debug|Win32.Build.0 = Debug|Win32
22 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Release|Win32.ActiveCfg = Release|Win32
23 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Release|Win32.Build.0 = Release|Win32
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/example_project/src/testApp.cpp:
--------------------------------------------------------------------------------
1 | #include "testApp.h"
2 |
3 | void testApp::setup(){
4 |
5 | ofSetFrameRate(30);
6 | counter = 0;
7 | frequency = 1;
8 | length = 360;
9 | amplitude = 50;
10 | speed = 0.1;
11 |
12 | terminal = ofxTerminal(this);
13 |
14 | terminal.addFunction("frequency", &testApp::setFrequency);
15 | terminal.addFunction("amplitude", &testApp::setAmplitude);
16 | terminal.addFunction("length", &testApp::setLength);
17 | terminal.addFunction("speed", &testApp::setSpeed);
18 | terminal.addFunction("blink", &testApp::blink);
19 | terminal.addFunction("ps1", &testApp::setPS1);
20 |
21 | }
22 |
23 | void testApp::update(){
24 |
25 | }
26 |
27 | void testApp::draw(){
28 | ofBackground(255, 255, 255);
29 |
30 | //we have to draw the terminal
31 | terminal.draw(0, 0);
32 |
33 | ofFill();
34 | ofSetColor(0, 0, 0);
35 |
36 |
37 | //we are going to draw a sine wave,
38 | //the user can change the frequency, amplitude and length
39 | ofPushMatrix();
40 |
41 | //translate to wave in in the center
42 | ofTranslate(ofGetWidth()*0.5-(length*0.5), ofGetHeight()*0.5);
43 |
44 | for (int i = 0; i < length; i++) {
45 | float y = sin((i+counter)/TWO_PI * frequency) * amplitude;
46 | ofCircle(i, y, 2);
47 | }
48 | counter+= speed;
49 |
50 | ofPopMatrix();
51 |
52 | }
53 |
54 | void testApp::keyPressed(int key){
55 |
56 | //pass the key to the terminal
57 | terminal.keyPressed(key);
58 | }
59 |
60 | string testApp::setFrequency(vector args) {
61 |
62 | if (args.size() < 1) {
63 | return "usage: frequency f";
64 | }
65 |
66 | frequency = ofToFloat(args[0]);
67 | return "";
68 | }
69 |
70 | // here we have an example where the user can reveive feedback based on the input
71 | string testApp::setAmplitude(vector args) {
72 |
73 | //ofToFloat returns 0 if something other than a number is passed to it,
74 | //so alert the user...
75 | if (!ofToFloat(args[0])) {
76 | return args[0] + " is not a number";
77 | }
78 |
79 | amplitude = ofToFloat(args[0]);
80 |
81 | return "";
82 | }
83 |
84 | string testApp::setLength(vector args) {
85 |
86 | length = ofToInt(args[0]);
87 | return "";
88 | }
89 |
90 | string testApp::setSpeed(vector args) {
91 |
92 | speed = ofToFloat(args[0]);
93 | return "";
94 | }
95 |
96 | string testApp::blink(vector args) {
97 |
98 | if (args.size() != 1) {
99 | return "usage: blink on|off";
100 | }
101 |
102 | if (args[0] == "on") {
103 | terminal.setBlinkingCursor(true);
104 | }
105 | else if (args[0] == "off") {
106 | terminal.setBlinkingCursor(false);
107 | }
108 | else {
109 | return "don't understand " + args[0];
110 | }
111 |
112 | return "";
113 | }
114 |
115 | string testApp::setPS1(vector args) {
116 |
117 | terminal.setPS1(args[0]);
118 | return "";
119 | }
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | ofxTerminal
2 | ===========
3 |
4 | ofxTerminal allows you to control your openFrameworks apps using a command line. Function pointers are passed to ofxTerminal, which binds them to specified words. ofxTerminal supports things like autocompletion via tab (works almost identically to sh/bash), command history via up and down keys and other thing you expect from a terminal such as a blinking cursor.
5 |
6 | Usage
7 | -----
8 |
9 | Check out the example project if you are impatient, otherwise read on.
10 |
11 | To instantiate ofxTerminal you need a class and a pointer to an object of that class that the functions you want to use belongs to. For example, if the functions you want to call reside in testApp, you might want to do something like this in setup():
12 |
13 | `terminal = ofxTerminal(this);`
14 |
15 | Functions can then be added to the object using the `addFunction()` member function, which takes a string as the first argument, which is what you want your function to be called and a reference to the callback for the second argument. So if you have a function called hello and you want to call it when you type hello, you would write something like:
16 |
17 | `terminal.addFunction("hello", &testApp::hello);`
18 |
19 | ofxTerminal can only handle one type of function signature, that looks like this:
20 |
21 | `string aFunction(vector args)`
22 |
23 | The argument passed to the function is a STL vector of the arguments passed to the function you specified, so for example, if in your app you write:
24 |
25 | `hello my name is dave`
26 |
27 | The vector passed to hello() will be ["my", "name", "is", "dave"]. Obviously, you can do what you want with these; convert to int, etc.
28 |
29 | Every function you write should return a string, this is used for errors/comments and the returned string will be printed under the current line, if you want the prompt to proceed as normal return an empty string.
30 |
31 | If you want to see the terminal you will need to call the `draw() member function at some point. Also, for ofxTerminal to receive the key commands, pass oF's keyPressed() argument to the `keyPressed()` member function of ofxTerminal.
32 |
33 | Reading files
34 | -------------
35 |
36 | The one built in function in ofxTerminal is *read*. This reads files for you and executes the contents. You can supply read with a absolute file name (i.e. starting with a /) or you can set a custom directory for it to search yourself, this is done via `setPath()`, something like:
37 |
38 | `terminal.setPath("/Users/some_user/some_directory");`
39 |
40 | Controls
41 | --------
42 |
43 | You can use a few control-key combos, it's the usual stuff like:
44 |
45 | * **C-e** : Move point to the end of the line.
46 | * **C-a** : Move point to the beginning of the line
47 | * **C-u** : clear current line
48 | * **C-k** : clear from point to end of the line
49 | * **C-h** : hide the whole thing
50 | * **C-c** : clear the screen (move everything up, like `clear` in UNIX)
51 | * **C-v** : clears screen and all settings, including command history
52 |
53 |
54 | Custom Settings
55 | ---------------
56 |
57 | Along with setPath(), there are a few other things you can do to customise ofxTerminal, these include:
58 |
59 | `setPS1(string s)` : This set the prompt, by default it's '? '. You will probably want to have a space at the end of your string so wrap your text in single quotes, double quotes won't work. If you want to use the single quote character as part of your prompt then you can escape it with \.
60 |
61 | `setBlinkingCursor(bool b, float freq)` : freq is an optional argument and the default it 0.5Hz
62 |
63 | `ofxTerminal(T *co, string fontpath, int fontsize)` : Along with the pointer, the constructor can has two optional arguments, these are the font path and the font size, by default these are: "/System/Library/Fonts/Menlo.ttc" and 11 respectively. If you change these you will probably want to use a monospaced font.
64 |
65 | `setFontColor(int r, int g, int b)` & `setPromptColor(int r, int g, int b)` : these should be fairly self explanatory.
66 |
67 | If you do decide to change the default text, you might need to use:
68 |
69 | `setCharacterOffset(float v)` or `setSpaceOffset(float v)` to fix the alignment of things.
70 |
71 | Sometimes you might have various words that you use a lot and would like to autocomplete them. To do this, you need to add the word into ofxTerminal's dictionary:
72 |
73 | `terminal.addToDictionary("straight");`
74 |
75 | Compatibility
76 | -------------
77 |
78 | I have only tested this on a Mac, 10.6 & 10.7.
79 |
80 | Changelog
81 | ---------
82 |
83 | 21/3/12
84 |
85 | * revamped autocomplete so multiple possibilities get printed out if tab is pressed twice
86 | * added C-v & C-k
87 | * changed keys to OF_KEY constants for better compatibility
88 |
89 |
90 |
91 | email any questions to wgallia@gmail.com
--------------------------------------------------------------------------------
/example_project/ofxTerminalExample.xcodeproj/WHG.pbxuser:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | E4B69B4C0A3A1720003C02F2 /* Project object */ = {
4 | activeBuildConfigurationName = Debug;
5 | activeExecutable = EE56152D14B9EE4F000DE70A /* ofxTerminalExample */;
6 | activeTarget = E4B69B5A0A3A1756003C02F2 /* ofxTerminalExample */;
7 | addToTargets = (
8 | E4B69B5A0A3A1756003C02F2 /* ofxTerminalExample */,
9 | );
10 | codeSenseManager = EE56155714B9EE79000DE70A /* Code sense */;
11 | executables = (
12 | EE56152D14B9EE4F000DE70A /* ofxTerminalExample */,
13 | );
14 | perUserDictionary = {
15 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
16 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
17 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
18 | PBXFileTableDataSourceColumnWidthsKey = (
19 | 20,
20 | 500,
21 | 20,
22 | 48,
23 | 43,
24 | 43,
25 | 20,
26 | );
27 | PBXFileTableDataSourceColumnsKey = (
28 | PBXFileDataSource_FiletypeID,
29 | PBXFileDataSource_Filename_ColumnID,
30 | PBXFileDataSource_Built_ColumnID,
31 | PBXFileDataSource_ObjectSize_ColumnID,
32 | PBXFileDataSource_Errors_ColumnID,
33 | PBXFileDataSource_Warnings_ColumnID,
34 | PBXFileDataSource_Target_ColumnID,
35 | );
36 | };
37 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
38 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
39 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
40 | PBXFileTableDataSourceColumnWidthsKey = (
41 | 20,
42 | 460,
43 | 60,
44 | 20,
45 | 48.16259765625,
46 | 43,
47 | 43,
48 | );
49 | PBXFileTableDataSourceColumnsKey = (
50 | PBXFileDataSource_FiletypeID,
51 | PBXFileDataSource_Filename_ColumnID,
52 | PBXTargetDataSource_PrimaryAttribute,
53 | PBXFileDataSource_Built_ColumnID,
54 | PBXFileDataSource_ObjectSize_ColumnID,
55 | PBXFileDataSource_Errors_ColumnID,
56 | PBXFileDataSource_Warnings_ColumnID,
57 | );
58 | };
59 | PBXPerProjectTemplateStateSaveDate = 354026411;
60 | PBXWorkspaceStateSaveDate = 354026411;
61 | };
62 | perUserProjectItems = {
63 | EE5615B714B9EFE6000DE70A = EE5615B714B9EFE6000DE70A /* PBXTextBookmark */;
64 | EE5615B814B9EFE6000DE70A = EE5615B814B9EFE6000DE70A /* PBXTextBookmark */;
65 | EE5615BA14B9EFE6000DE70A = EE5615BA14B9EFE6000DE70A /* PBXTextBookmark */;
66 | EE56166114BA6BC1000DE70A = EE56166114BA6BC1000DE70A /* PBXTextBookmark */;
67 | };
68 | sourceControlManager = EE56155614B9EE79000DE70A /* Source Control */;
69 | userBuildSettings = {
70 | };
71 | };
72 | E4B69B5A0A3A1756003C02F2 /* ofxTerminalExample */ = {
73 | activeExec = 0;
74 | executables = (
75 | EE56152D14B9EE4F000DE70A /* ofxTerminalExample */,
76 | );
77 | };
78 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {
79 | uiCtxt = {
80 | sepNavIntBoundsRect = "{{0, 0}, {678, 468}}";
81 | sepNavSelRange = "{0, 0}";
82 | sepNavVisRange = "{0, 414}";
83 | };
84 | };
85 | E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */ = {
86 | uiCtxt = {
87 | sepNavIntBoundsRect = "{{0, 0}, {678, 464}}";
88 | sepNavSelRange = "{230, 0}";
89 | sepNavVisRange = "{0, 237}";
90 | };
91 | };
92 | E4B69E1F0A3A1BDC003C02F2 /* testApp.h */ = {
93 | uiCtxt = {
94 | sepNavIntBoundsRect = "{{0, 0}, {678, 520}}";
95 | sepNavSelRange = "{229, 0}";
96 | sepNavVisRange = "{0, 602}";
97 | };
98 | };
99 | EE56152D14B9EE4F000DE70A /* ofxTerminalExample */ = {
100 | isa = PBXExecutable;
101 | activeArgIndices = (
102 | );
103 | argumentStrings = (
104 | );
105 | autoAttachOnCrash = 1;
106 | breakpointsEnabled = 0;
107 | configStateDict = {
108 | };
109 | customDataFormattersEnabled = 1;
110 | dataTipCustomDataFormattersEnabled = 1;
111 | dataTipShowTypeColumn = 1;
112 | dataTipSortType = 0;
113 | debuggerPlugin = GDBDebugging;
114 | disassemblyDisplayState = 0;
115 | dylibVariantSuffix = "";
116 | enableDebugStr = 1;
117 | environmentEntries = (
118 | );
119 | executableSystemSymbolLevel = 0;
120 | executableUserSymbolLevel = 0;
121 | libgmallocEnabled = 0;
122 | name = ofxTerminalExample;
123 | savedGlobals = {
124 | };
125 | showTypeColumn = 0;
126 | sourceDirectories = (
127 | );
128 | };
129 | EE56155614B9EE79000DE70A /* Source Control */ = {
130 | isa = PBXSourceControlManager;
131 | fallbackIsa = XCSourceControlManager;
132 | isSCMEnabled = 0;
133 | scmConfiguration = {
134 | repositoryNamesForRoots = {
135 | "" = "";
136 | };
137 | };
138 | };
139 | EE56155714B9EE79000DE70A /* Code sense */ = {
140 | isa = PBXCodeSenseManager;
141 | indexTemplatePath = "";
142 | };
143 | EE5615B714B9EFE6000DE70A /* PBXTextBookmark */ = {
144 | isa = PBXTextBookmark;
145 | fRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */;
146 | name = "main.cpp: 1";
147 | rLen = 0;
148 | rLoc = 0;
149 | rType = 0;
150 | vrLen = 414;
151 | vrLoc = 0;
152 | };
153 | EE5615B814B9EFE6000DE70A /* PBXTextBookmark */ = {
154 | isa = PBXTextBookmark;
155 | fRef = E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */;
156 | name = "testApp.cpp: 22";
157 | rLen = 0;
158 | rLoc = 230;
159 | rType = 0;
160 | vrLen = 237;
161 | vrLoc = 0;
162 | };
163 | EE5615BA14B9EFE6000DE70A /* PBXTextBookmark */ = {
164 | isa = PBXTextBookmark;
165 | fRef = E4B69E1F0A3A1BDC003C02F2 /* testApp.h */;
166 | name = "testApp.h: 17";
167 | rLen = 0;
168 | rLoc = 229;
169 | rType = 0;
170 | vrLen = 245;
171 | vrLoc = 0;
172 | };
173 | EE56166114BA6BC1000DE70A /* PBXTextBookmark */ = {
174 | isa = PBXTextBookmark;
175 | fRef = E4B69E1F0A3A1BDC003C02F2 /* testApp.h */;
176 | name = "testApp.h: 19";
177 | rLen = 0;
178 | rLoc = 229;
179 | rType = 0;
180 | vrLen = 602;
181 | vrLoc = 0;
182 | };
183 | }
184 |
--------------------------------------------------------------------------------
/example_project/.vcproj:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
26 |
29 |
32 |
35 |
38 |
41 |
54 |
57 |
60 |
63 |
78 |
81 |
84 |
87 |
90 |
93 |
96 |
101 |
102 |
110 |
113 |
116 |
119 |
122 |
125 |
136 |
139 |
142 |
145 |
160 |
163 |
166 |
169 |
172 |
175 |
178 |
183 |
184 |
185 |
186 |
187 |
188 |
193 |
196 |
197 |
200 |
201 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
--------------------------------------------------------------------------------
/ofxTerminal.h:
--------------------------------------------------------------------------------
1 | /*
2 | * ofxTerminal.h
3 | *
4 | * Copyright 2011 Will Gallia, wgallia.com
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
10 | * of the Software, and to permit persons to whom the Software is furnished to do
11 | * so, subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | * SOFTWARE.
23 | *
24 | */
25 |
26 |
27 | #pragma once
28 |
29 | #include "ofMain.h"
30 |
31 | #include
32 |
33 | template
34 | class Function {
35 | public:
36 | Function(string n, string(T::*f)(vector args)) {
37 | name = n;
38 | func = f;
39 | };
40 |
41 | string name;
42 | string(T::*func)(vector args);
43 | };
44 |
45 | //this holds all the prompt data...
46 | typedef struct {
47 | int x, y, yOffset;
48 | int index;
49 | string PS1;
50 | unsigned char color[3];
51 | } Prompt;
52 |
53 |
54 | template
55 | class ofxTerminal {
56 |
57 | private:
58 | Prompt prompt;
59 |
60 | ofTrueTypeFont font;
61 | int lineHeight;
62 | float characterWidth, spaceWidth;
63 | int screenYPos, prevCommand;
64 | string tempCommand;
65 | int cl; //current line
66 | bool blinkCursor, blinker;
67 | float blinkFrequency;
68 | int blinkCounter;
69 | unsigned char fontcolor[3];
70 | bool ishidden;
71 | float characterOffset, spaceOffset;
72 | bool autocompleteflag;
73 |
74 | vector lines, results;
75 | vector dictionary;
76 |
77 | vector< Function > functions;
78 |
79 | string PATH; //this is where read finds files when the path doesn't begin with a '/'
80 | bool readFile(string path);
81 |
82 | int stringWidth(string s);
83 |
84 | void process(string command);
85 | void explode(string command, char sep, vector &tokens);
86 | string execute(string command);
87 |
88 | void println(string line);
89 | void incrementPrompt();
90 |
91 | T *callingObj;
92 |
93 | public:
94 | ofxTerminal();
95 | ofxTerminal(T *co, string fontpath="/System/Library/Fonts/Menlo.ttc", int fontsize=11);
96 | void setup();
97 |
98 | void draw(int xOffset=0, int yOffset=-2);
99 | void keyPressed(int key);
100 |
101 | void addFunction(string name, string(T::*func)(vector args));
102 | void addToDictionary(string word);
103 |
104 | void setPS1(string s);
105 | void setPath(string s);
106 | void setCharacterOffset(float v);
107 | void setSpaceOffset(float v);
108 | void setBlinkingCursor(bool b, float freq=0.5);
109 | void setFontColor(int r, int g, int b);
110 | void setPromptColor(int r, int g, int b);
111 | };
112 |
113 |
114 | ////////////////////////////////////////
115 | /////////// IMPLEMENTATION /////////////
116 | ////////////////////////////////////////
117 |
118 | template
119 | ofxTerminal::ofxTerminal(T *co, string fontpath, int fontsize) {
120 |
121 | callingObj = co;
122 |
123 | setup();
124 |
125 | font.loadFont(fontpath, fontsize);
126 | //make this an int so we get rid of little errors
127 | lineHeight = (int) font.getLineHeight();
128 | //this is a bit silly... but seems to work
129 | spaceWidth = font.stringWidth("a") + spaceOffset;
130 | characterWidth = font.stringWidth("a") + characterOffset;
131 |
132 | //add the only built in function
133 | addToDictionary("read");
134 | setPS1("? "); //this is the default prompt
135 |
136 | ofEnableAlphaBlending();
137 | }
138 |
139 | //empty default constructor, for when ofxTerminal is located on the stack
140 | //this should never be explicitly called.
141 | template ofxTerminal::ofxTerminal() {}
142 |
143 | template
144 | void ofxTerminal::setup() {
145 |
146 | lines.clear();
147 | results.clear();
148 | cl = 0;
149 | prompt.yOffset = 2;
150 | prompt.x = 0;
151 | prompt.y = prompt.yOffset;
152 | prompt.index = 0;
153 | lines.push_back("");
154 | results.push_back("");
155 | screenYPos = 0;
156 | prevCommand = 0;
157 | PATH = "/Users/WHG/Desktop/"; //hardcode your own path here...
158 | spaceOffset = 0;
159 | characterOffset = 2;
160 | blinkCursor = false;
161 | blinker = true;
162 | blinkFrequency = 0.5;
163 | blinkCounter = 0;
164 | fontcolor[0] = fontcolor[1] = fontcolor[2] = 10;
165 | prompt.color[0] = prompt.color[1] = prompt.color[2] = 50;
166 | ishidden = false;
167 | autocompleteflag = false;
168 | }
169 |
170 |
171 | template
172 | void ofxTerminal::draw(int xOffset, int yOffset) {
173 |
174 | if (ishidden) return;
175 |
176 | //check to see if we need to move everything up to fit the new line
177 | if (prompt.y+lineHeight > ofGetHeight() - screenYPos) {
178 | screenYPos-= lineHeight;
179 | }
180 |
181 | ofFill();
182 | ofPushMatrix();
183 | ofPushStyle();
184 | ofTranslate(xOffset, screenYPos + yOffset);
185 |
186 | //this is where we draw all commands previous and present.
187 | //not future... yet
188 | int j = 0;
189 | for (int i = 0; i < results.size(); i++) {
190 | if (results[i] == "") {
191 | ofSetColor(fontcolor[0], fontcolor[1], fontcolor[2]);
192 | font.drawString(prompt.PS1 + lines[j++], 0, lineHeight*(i+1));
193 | }
194 | //draw results/comments
195 | else {
196 | ofSetColor(fontcolor[0]*8, fontcolor[1]*8, fontcolor[2]*8);
197 | font.drawString(results[i], 0, lineHeight*(i+1));
198 | }
199 | }
200 |
201 | //this is where we draw the prompt
202 | ofSetColor(prompt.color[0], prompt.color[1], prompt.color[2], blinker ? 100 : 0); //make the prompt a transparent grey
203 | ofRect(stringWidth(prompt.PS1) + prompt.x, prompt.y, characterWidth, lineHeight);
204 |
205 | ofPopStyle();
206 | ofPopMatrix();
207 |
208 | //we can't use a modulus for this because we might miss the timing because of
209 | //the framerate, so it's a little bit awkward, but i can't see how else to do it.
210 | //...unless the blink is defined in terms of frames... but i prefers seconds
211 | if (blinkCursor && ofGetElapsedTimeMillis() > blinkFrequency*1000+blinkCounter) {
212 | blinker = !blinker;
213 | blinkCounter+= blinkFrequency*1000;
214 | }
215 | }
216 |
217 |
218 | /* - - - KEY ACTIONS - - - - - - - - -
219 |
220 | this is where all the key presses are interpreted
221 | i am trying to copy the bash shell, so at the moment,
222 | we are implementing:
223 |
224 | - up and down for previous commands
225 | - left and right to move along the line
226 | - tab to autocomplete
227 | - backspace to delete characters
228 | - enter to process command
229 |
230 | - - - - - - - - - - - - - - - - - - - */
231 |
232 | template
233 | void ofxTerminal::keyPressed(int key) {
234 |
235 | string::iterator it = lines[cl].begin();
236 | int x;
237 |
238 | switch (key) {
239 |
240 | //space
241 | case ' ':
242 | lines[cl].insert(it+prompt.index, (char) key);
243 | prompt.x+= (spaceWidth);
244 | prompt.index++;
245 | break;
246 |
247 | // backspace
248 | case OF_KEY_BACKSPACE:
249 | if (prompt.x > 0) {
250 | if (lines[cl].at(prompt.index-1) == ' ') prompt.x -= spaceWidth;
251 | else prompt.x -= characterWidth;
252 | lines[cl].erase(it+prompt.index-1);
253 | prompt.index--;
254 | }
255 | break;
256 |
257 | // left arrow
258 | case OF_KEY_LEFT:
259 | if (prompt.x > 0) { // don't go too far...
260 | if (lines[cl].at(prompt.index-1) == ' ') prompt.x -= spaceWidth;
261 | else prompt.x -= characterWidth;
262 | prompt.index--;
263 | }
264 | break;
265 |
266 | // right arrow
267 | case OF_KEY_RIGHT:
268 | if (prompt.index < lines[cl].length()) { // can't go further than line
269 | if (lines[cl].at(prompt.index) == ' ') prompt.x += spaceWidth;
270 | else prompt.x += characterWidth;
271 | prompt.index++;
272 | }
273 | break;
274 |
275 | // up arrow - previous command
276 | case OF_KEY_UP:
277 | //save the current command
278 | if (prevCommand == 0) {
279 | tempCommand = lines[cl];
280 | }
281 | //fetch previous commands
282 | if (prevCommand < cl) {
283 | prevCommand++;
284 | lines[cl] = lines[cl-prevCommand];
285 | prompt.x = stringWidth(lines[cl]); //move the prompt
286 | prompt.index = lines[cl].length();
287 | }
288 | break;
289 |
290 | // down arrow
291 | case OF_KEY_DOWN :
292 | if (prevCommand > 0) {
293 | prevCommand--;
294 | lines[cl] = lines[cl-prevCommand];
295 | }
296 | //get the saved command
297 | if (prevCommand == 0) {
298 | lines[cl] = tempCommand;
299 | }
300 | prompt.x = stringWidth(lines[cl]); //move the prompt
301 | prompt.index = lines[cl].length();
302 | break;
303 |
304 | // esc, do nothing
305 | case OF_KEY_ESC:
306 | break;
307 |
308 | //tab : autocomplete
309 | //note: there is no OF_KEY for tab so, can't guarantee
310 | //any kind of cross platform compatibility
311 | case 9:
312 | {
313 | //auto complete the word we are currently on,
314 | //from the cursor to the preceeding space
315 | string todo = lines[cl].substr(0, prompt.index);
316 | int lastspace = todo.find_last_of(' ') + 1;
317 | if (lastspace < 1) lastspace = 0;
318 | todo = todo.substr(lastspace);
319 |
320 | vector foundwords;
321 |
322 | //before any uber computer scientist has a go at me,
323 | //i don't think we are going to have a large dictionary so
324 | //i think a linear search is good enough...
325 | for (int i = 0; i < dictionary.size(); i++) {
326 | bool show = true;
327 | for (int j = 0; j < todo.length() && j < dictionary[i].length(); j++) {
328 | if (dictionary[i].at(j) != todo.at(j)) {
329 | show = false;
330 | break;
331 | }
332 | }
333 | if (show) {
334 | foundwords.push_back(dictionary[i]);
335 | }
336 | }
337 |
338 | //if there is only one possibility then change the current line
339 | if (foundwords.size() == 1) {
340 | //change the command
341 | string t = lines[cl].substr(0, lastspace) + foundwords[0];
342 |
343 | //only add a space at the end if we are at the end of the line
344 | if (lines[cl].length() == prompt.index) {
345 | t+= " ";
346 | }
347 |
348 | //set the new line
349 | lines[cl] = t + lines[cl].substr(prompt.index);
350 |
351 | prompt.x = stringWidth(t);//move the prompt
352 | prompt.index = t.length();
353 | }
354 |
355 | //if we have multiple possible commands print them out in a list
356 | //and then restore the prompt.
357 | else if (foundwords.size() > 1) {
358 | if (!autocompleteflag) {
359 | autocompleteflag = true;
360 | return;
361 | }
362 | stringstream ss;
363 | for (int i = 0; i < foundwords.size(); i++) {
364 | ss << foundwords[i] << " ";
365 | }
366 |
367 | //save the current line
368 | string templine = lines[cl];
369 | int tempindex = prompt.index;
370 | int tempx = prompt.x;
371 |
372 | //print the commands
373 | println(ss.str());
374 |
375 | //restore the line
376 | lines[cl] = templine;
377 | prompt.index = tempindex;
378 | prompt.x = tempx;
379 |
380 | autocompleteflag = false;
381 | }
382 |
383 |
384 | }
385 | break;
386 |
387 | //enter, do things with current line
388 | case OF_KEY_RETURN:
389 | //process the command
390 | process(lines[cl]);
391 |
392 | break;
393 |
394 | //- - - control commands - - -
395 | //no guarantee of cross platform compatibility,
396 | //though I am pretty sure these are standard to ASCII
397 |
398 | //control-c, clear the screen
399 | case 3:
400 | //clear screen... but in reality just move things up... similar to clear in UNIX
401 | screenYPos-= (screenYPos + prompt.y - prompt.yOffset);
402 | break;
403 |
404 | case 22:
405 | setup();
406 | break;
407 |
408 | //control-a, beginning of line
409 | case 1:
410 | prompt.x = 0;
411 | prompt.index = 0;
412 | break;
413 |
414 | //control-e, end of line
415 | case 5:
416 | prompt.index = lines[cl].length();
417 | prompt.x = stringWidth(lines[cl]) ;
418 | break;
419 |
420 | //control-u, clear the current line
421 | case 21:
422 | prompt.x = 0;
423 | prompt.index = 0;
424 | lines[cl] = "";
425 | break;
426 |
427 | //control-k, clear from point to end of line
428 | case 11:
429 | lines[cl] = lines[cl].substr(0, prompt.index);
430 | break;
431 |
432 | //control-h, toggle ishidden, which hides everything
433 | case 8:
434 | ishidden = !ishidden;
435 | break;
436 |
437 |
438 | //all other keys...
439 | //hopefully ofTrueTypeFont can draw them...
440 | default:
441 | if (key < 31) return;
442 |
443 | lines[cl].insert(it+prompt.index, (char) key);
444 | prompt.x+= characterWidth;
445 | prompt.index++;
446 | break;
447 |
448 | }
449 | }
450 |
451 |
452 | //my own version of ofTTF stringWidth()...
453 | //seems to be bit more accurate as i've hardcoded the values (spaceWidth & characterWidth)
454 | template
455 | int ofxTerminal::stringWidth(string s) {
456 | int x = 0;
457 | for (int i = 0; i < s.length(); i++) {
458 | if (s.at(i) == ' ') x+= spaceWidth;
459 | else x+= characterWidth;
460 | }
461 | return x;
462 | }
463 |
464 | /* - - - PROCESS - - - - - - - - */
465 |
466 | template
467 | void ofxTerminal::process(string command) {
468 |
469 | //don't try and process an empty line
470 | if (command != "") {
471 |
472 | //execute the command...
473 | //if your debugger brought you here, you need to return a string from your function
474 | string comment = execute(command);
475 |
476 | println(comment);
477 | return;
478 | }
479 |
480 | incrementPrompt();
481 |
482 |
483 | }
484 |
485 |
486 | //this is done this way so we can optionally use the returned comment...
487 | template
488 | string ofxTerminal::execute(string command) {
489 |
490 | //split the line up into tokens
491 | vector tokens;
492 | explode(command, ' ', tokens);
493 |
494 | //if we have an empty line return nothing.. ie empty line
495 | //this is just a safety precaution, i don't think execute is ever passed an empty string
496 | if (!tokens.size()) {
497 | return "";
498 | }
499 |
500 | //the one built in function we have is read.
501 | //this executes the contents of a specified file.
502 | else if (tokens[0] == "read" ) {
503 | if (tokens.size() != 2) {
504 | return "usage: read filename";
505 | }
506 | if (readFile(tokens[1])) {
507 | return "";
508 | }
509 | else {
510 | return tokens[1] + ": can't read file";
511 | }
512 | }
513 |
514 | //now try and find a valid command...
515 | //... obviously there are much faster ways of doing this but
516 | //i don't think a user will have many functions, so i think it's ok
517 | for (int i = 0; i < functions.size(); i++) {
518 | if (tokens[0] == functions[i].name) {
519 | tokens.erase(tokens.begin());
520 | return ((callingObj)->*(functions[i].func))(tokens);
521 | }
522 | }
523 |
524 | //if we get to this point, we haven't found the command...
525 | return tokens[0] + ": command not found";
526 | }
527 |
528 | /* - - - PROMPT STUFF - - - */
529 | //prints a results line if the argument is not and empty string
530 | //otherwise it just increments the prompt, ie incrementPrompt()
531 |
532 | template
533 | void ofxTerminal::println(string line) {
534 | //show the comment if there is one and increment prompt.y
535 | if (line != "") {
536 | results.push_back(line);
537 | //need an extra lineHeight added to prompt.y
538 | prompt.y+= lineHeight;
539 |
540 | }
541 | incrementPrompt();
542 | }
543 |
544 |
545 | template
546 | void ofxTerminal::incrementPrompt() {
547 | //prepare for next line...
548 | lines.push_back("");
549 | results.push_back("");
550 |
551 | //now do the housework
552 | cl++;
553 | prompt.index = 0;
554 | prompt.x = 0;
555 | prompt.y+= lineHeight;
556 | prevCommand = 0;
557 | }
558 |
559 |
560 | /* - - - ADDING STUFF - - - */
561 |
562 | template
563 | void ofxTerminal::addToDictionary(string word) {
564 | dictionary.push_back(word);
565 | }
566 |
567 | template
568 | void ofxTerminal::addFunction(string name, string (T::*func)(vector args)) {
569 | functions.push_back(Function(name, func));
570 | addToDictionary(name);
571 | }
572 |
573 | //this is a helper method, inspired by PHP's explode
574 | //note: realised after doing this that there are methods in c++ to do this for you... stupid me...
575 |
576 | //it takes a string and splits the separate words into tokens,
577 | //extra white space is removed in the process
578 | //string are preserved if inside single quotes, ie '
579 | //if you want to use a ' you have to escape it like \'
580 |
581 | template
582 | void ofxTerminal::explode(string command, char sep, vector &tokens) {
583 | tokens.clear();
584 | bool inquotes = false;
585 | bool escape = false;
586 |
587 | string t = "";
588 | for (int i = 0; i < command.length(); i++) {
589 | if (command[i] == '\\') {
590 | escape = true;
591 | continue;
592 | }
593 | if (command[i] != sep || inquotes) {
594 | if (command[i] == '\'' && !escape) {
595 | inquotes = !inquotes;
596 | }
597 | else {
598 | t+= command[i];
599 | }
600 | }
601 | else if (!inquotes) {
602 | //don't add things starting with a space..
603 | //or an empty string...
604 | if (t[0] != ' ' && t != "") {
605 | tokens.push_back(t);
606 | t = "";
607 | }
608 | }
609 | escape = false;
610 | }
611 |
612 | // add the final one...
613 | // but don't add it if it's a space... or nothing
614 | if (t != " " && t != "") {
615 | tokens.push_back(t);
616 | }
617 | }
618 |
619 | /* - - - FILE HANDLING - - - */
620 |
621 | //returns true if file could be read and executed, false otherwise
622 | template
623 | bool ofxTerminal::readFile(string path) {
624 |
625 | //set up stream
626 | ifstream file;
627 |
628 | if (path.at(0) == '/') {
629 | file.open(path.c_str());
630 | }
631 |
632 | //if the path is not absolute look in specified directory
633 | else {
634 | string p = PATH + path;
635 | file.open(p.c_str());
636 | }
637 |
638 | //check to see something is open
639 | if (file.is_open()) {
640 |
641 | while (file.good()) {
642 | string line;
643 | getline(file, line);
644 |
645 | //we execute here instead of process so we don't blank lines printed
646 | execute(line);
647 | }
648 |
649 | //and close...
650 | file.close();
651 |
652 | return true;
653 | }
654 |
655 | return false;
656 | }
657 |
658 | /* - - - USER SETTINGS/SETTERS - - - */
659 |
660 | template
661 | void ofxTerminal::setPS1(string s) {
662 | prompt.PS1 = s;
663 | }
664 |
665 | template
666 | void ofxTerminal::setPath(string s) {
667 | PATH = s;
668 | }
669 |
670 | template
671 | void ofxTerminal::setCharacterOffset(float v) {
672 | characterOffset = v;
673 | }
674 |
675 | template
676 | void ofxTerminal::setSpaceOffset(float v) {
677 | spaceOffset = v;
678 | }
679 |
680 | //default freq = 0.5
681 | template
682 | void ofxTerminal::setBlinkingCursor(bool b, float freq) {
683 | blinkCursor = b;
684 | blinkFrequency = freq;
685 | blinker = true; //setting this to true is quite important
686 | blinkCounter = ofGetElapsedTimeMillis();
687 | }
688 |
689 | template
690 | void ofxTerminal::setFontColor(int r, int g, int b) {
691 | fontcolor[0] = r;
692 | fontcolor[1] = g;
693 | fontcolor[2] = b;
694 | }
695 |
696 | template
697 | void ofxTerminal::setPromptColor(int r, int g, int b) {
698 | prompt.color[0] = r;
699 | prompt.color[1] = g;
700 | prompt.color[2] = b;
701 | }
702 |
--------------------------------------------------------------------------------
/example_project/ofxTerminalExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 42;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; };
11 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; };
12 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; };
13 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; };
14 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; };
15 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9740E8CC7DD009D7055 /* Carbon.framework */; };
16 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; };
17 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; };
18 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; };
19 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; };
20 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; };
21 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; };
22 | E4B69E210A3A1BDC003C02F2 /* testApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */; };
23 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; };
24 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; };
25 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; };
26 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; };
27 | /* End PBXBuildFile section */
28 |
29 | /* Begin PBXContainerItemProxy section */
30 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = {
31 | isa = PBXContainerItemProxy;
32 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
33 | proxyType = 2;
34 | remoteGlobalIDString = E4B27C1510CBEB8E00536013;
35 | remoteInfo = openFrameworks;
36 | };
37 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = {
38 | isa = PBXContainerItemProxy;
39 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
40 | proxyType = 1;
41 | remoteGlobalIDString = E4B27C1410CBEB8E00536013;
42 | remoteInfo = openFrameworks;
43 | };
44 | /* End PBXContainerItemProxy section */
45 |
46 | /* Begin PBXCopyFilesBuildPhase section */
47 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = {
48 | isa = PBXCopyFilesBuildPhase;
49 | buildActionMask = 2147483647;
50 | dstPath = "";
51 | dstSubfolderSpec = 10;
52 | files = (
53 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */,
54 | );
55 | runOnlyForDeploymentPostprocessing = 0;
56 | };
57 | /* End PBXCopyFilesBuildPhase section */
58 |
59 | /* Begin PBXFileReference section */
60 | BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; };
61 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; };
62 | E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; };
63 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; };
64 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; };
65 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; };
66 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; };
67 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; };
68 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; };
69 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; };
70 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; };
71 | E4B69B5B0A3A1756003C02F2 /* ofxTerminalExampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ofxTerminalExampleDebug.app; sourceTree = BUILT_PRODUCTS_DIR; };
72 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; };
73 | E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = testApp.cpp; path = src/testApp.cpp; sourceTree = SOURCE_ROOT; };
74 | E4B69E1F0A3A1BDC003C02F2 /* testApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = testApp.h; path = src/testApp.h; sourceTree = SOURCE_ROOT; };
75 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; };
76 | E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
77 | E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
78 | E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; };
79 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; };
80 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; };
81 | EE5615B614B9EF24000DE70A /* ofxTerminal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxTerminal.h; path = ../ofxTerminal.h; sourceTree = SOURCE_ROOT; };
82 | /* End PBXFileReference section */
83 |
84 | /* Begin PBXFrameworksBuildPhase section */
85 | E4B69B590A3A1756003C02F2 /* Frameworks */ = {
86 | isa = PBXFrameworksBuildPhase;
87 | buildActionMask = 2147483647;
88 | files = (
89 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */,
90 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */,
91 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */,
92 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */,
93 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */,
94 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */,
95 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */,
96 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */,
97 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */,
98 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */,
99 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */,
100 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */,
101 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */,
102 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */,
103 | );
104 | runOnlyForDeploymentPostprocessing = 0;
105 | };
106 | /* End PBXFrameworksBuildPhase section */
107 |
108 | /* Begin PBXGroup section */
109 | BB4B014C10F69532006C3DED /* addons */ = {
110 | isa = PBXGroup;
111 | children = (
112 | EE5615B614B9EF24000DE70A /* ofxTerminal.h */,
113 | );
114 | name = addons;
115 | sourceTree = "";
116 | };
117 | BBAB23C913894ECA00AA2426 /* system frameworks */ = {
118 | isa = PBXGroup;
119 | children = (
120 | E4C2424410CC5A17004149E2 /* AppKit.framework */,
121 | E4C2424510CC5A17004149E2 /* Cocoa.framework */,
122 | E4C2424610CC5A17004149E2 /* IOKit.framework */,
123 | E45BE9710E8CC7DD009D7055 /* AGL.framework */,
124 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */,
125 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */,
126 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */,
127 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */,
128 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */,
129 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */,
130 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */,
131 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */,
132 | );
133 | name = "system frameworks";
134 | sourceTree = "";
135 | };
136 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = {
137 | isa = PBXGroup;
138 | children = (
139 | BBAB23BE13894E4700AA2426 /* GLUT.framework */,
140 | );
141 | name = "3rd party frameworks";
142 | sourceTree = "";
143 | };
144 | E4328144138ABC890047C5CB /* Products */ = {
145 | isa = PBXGroup;
146 | children = (
147 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */,
148 | );
149 | name = Products;
150 | sourceTree = "";
151 | };
152 | E45BE5980E8CC70C009D7055 /* frameworks */ = {
153 | isa = PBXGroup;
154 | children = (
155 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */,
156 | BBAB23C913894ECA00AA2426 /* system frameworks */,
157 | );
158 | name = frameworks;
159 | sourceTree = "";
160 | };
161 | E4B69B4A0A3A1720003C02F2 = {
162 | isa = PBXGroup;
163 | children = (
164 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */,
165 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */,
166 | E4B69E1C0A3A1BDC003C02F2 /* src */,
167 | E4EEC9E9138DF44700A80321 /* openFrameworks */,
168 | BB4B014C10F69532006C3DED /* addons */,
169 | E45BE5980E8CC70C009D7055 /* frameworks */,
170 | E4B69B5B0A3A1756003C02F2 /* ofxTerminalExampleDebug.app */,
171 | );
172 | sourceTree = "";
173 | };
174 | E4B69E1C0A3A1BDC003C02F2 /* src */ = {
175 | isa = PBXGroup;
176 | children = (
177 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */,
178 | E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */,
179 | E4B69E1F0A3A1BDC003C02F2 /* testApp.h */,
180 | );
181 | path = src;
182 | sourceTree = SOURCE_ROOT;
183 | };
184 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = {
185 | isa = PBXGroup;
186 | children = (
187 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */,
188 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */,
189 | );
190 | name = openFrameworks;
191 | sourceTree = "";
192 | };
193 | /* End PBXGroup section */
194 |
195 | /* Begin PBXNativeTarget section */
196 | E4B69B5A0A3A1756003C02F2 /* ofxTerminalExample */ = {
197 | isa = PBXNativeTarget;
198 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ofxTerminalExample" */;
199 | buildPhases = (
200 | E4B69B580A3A1756003C02F2 /* Sources */,
201 | E4B69B590A3A1756003C02F2 /* Frameworks */,
202 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */,
203 | E4C2427710CC5ABF004149E2 /* CopyFiles */,
204 | );
205 | buildRules = (
206 | );
207 | dependencies = (
208 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */,
209 | );
210 | name = ofxTerminalExample;
211 | productName = myOFApp;
212 | productReference = E4B69B5B0A3A1756003C02F2 /* ofxTerminalExampleDebug.app */;
213 | productType = "com.apple.product-type.application";
214 | };
215 | /* End PBXNativeTarget section */
216 |
217 | /* Begin PBXProject section */
218 | E4B69B4C0A3A1720003C02F2 /* Project object */ = {
219 | isa = PBXProject;
220 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ofxTerminalExample" */;
221 | compatibilityVersion = "Xcode 2.4";
222 | developmentRegion = English;
223 | hasScannedForEncodings = 0;
224 | knownRegions = (
225 | English,
226 | Japanese,
227 | French,
228 | German,
229 | );
230 | mainGroup = E4B69B4A0A3A1720003C02F2;
231 | productRefGroup = E4B69B4A0A3A1720003C02F2;
232 | projectDirPath = "";
233 | projectReferences = (
234 | {
235 | ProductGroup = E4328144138ABC890047C5CB /* Products */;
236 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
237 | },
238 | );
239 | projectRoot = "";
240 | targets = (
241 | E4B69B5A0A3A1756003C02F2 /* ofxTerminalExample */,
242 | );
243 | };
244 | /* End PBXProject section */
245 |
246 | /* Begin PBXReferenceProxy section */
247 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = {
248 | isa = PBXReferenceProxy;
249 | fileType = archive.ar;
250 | path = openFrameworksDebug.a;
251 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */;
252 | sourceTree = BUILT_PRODUCTS_DIR;
253 | };
254 | /* End PBXReferenceProxy section */
255 |
256 | /* Begin PBXShellScriptBuildPhase section */
257 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = {
258 | isa = PBXShellScriptBuildPhase;
259 | buildActionMask = 2147483647;
260 | files = (
261 | );
262 | inputPaths = (
263 | );
264 | outputPaths = (
265 | );
266 | runOnlyForDeploymentPostprocessing = 0;
267 | shellPath = /bin/sh;
268 | shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";";
269 | };
270 | /* End PBXShellScriptBuildPhase section */
271 |
272 | /* Begin PBXSourcesBuildPhase section */
273 | E4B69B580A3A1756003C02F2 /* Sources */ = {
274 | isa = PBXSourcesBuildPhase;
275 | buildActionMask = 2147483647;
276 | files = (
277 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */,
278 | E4B69E210A3A1BDC003C02F2 /* testApp.cpp in Sources */,
279 | );
280 | runOnlyForDeploymentPostprocessing = 0;
281 | };
282 | /* End PBXSourcesBuildPhase section */
283 |
284 | /* Begin PBXTargetDependency section */
285 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = {
286 | isa = PBXTargetDependency;
287 | name = openFrameworks;
288 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */;
289 | };
290 | /* End PBXTargetDependency section */
291 |
292 | /* Begin XCBuildConfiguration section */
293 | E4B69B4E0A3A1720003C02F2 /* Debug */ = {
294 | isa = XCBuildConfiguration;
295 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
296 | buildSettings = {
297 | ARCHS = "$(NATIVE_ARCH)";
298 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
299 | COPY_PHASE_STRIP = NO;
300 | DEAD_CODE_STRIPPING = YES;
301 | GCC_AUTO_VECTORIZATION = YES;
302 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
303 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
304 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
305 | GCC_MODEL_TUNING = G5;
306 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
307 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
308 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
309 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
310 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
311 | GCC_WARN_UNUSED_VALUE = NO;
312 | GCC_WARN_UNUSED_VARIABLE = NO;
313 | OTHER_CPLUSPLUSFLAGS = (
314 | "-D__MACOSX_CORE__",
315 | "-lpthread",
316 | );
317 | };
318 | name = Debug;
319 | };
320 | E4B69B4F0A3A1720003C02F2 /* Release */ = {
321 | isa = XCBuildConfiguration;
322 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
323 | buildSettings = {
324 | ARCHS = "$(NATIVE_ARCH)";
325 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
326 | COPY_PHASE_STRIP = YES;
327 | DEAD_CODE_STRIPPING = YES;
328 | GCC_AUTO_VECTORIZATION = YES;
329 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
330 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
331 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
332 | GCC_MODEL_TUNING = G5;
333 | GCC_OPTIMIZATION_LEVEL = 3;
334 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
335 | GCC_UNROLL_LOOPS = YES;
336 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
337 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
338 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
339 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
340 | GCC_WARN_UNUSED_VALUE = NO;
341 | GCC_WARN_UNUSED_VARIABLE = NO;
342 | OTHER_CPLUSPLUSFLAGS = (
343 | "-D__MACOSX_CORE__",
344 | "-lpthread",
345 | );
346 | };
347 | name = Release;
348 | };
349 | E4B69B600A3A1757003C02F2 /* Debug */ = {
350 | isa = XCBuildConfiguration;
351 | buildSettings = {
352 | COPY_PHASE_STRIP = NO;
353 | FRAMEWORK_SEARCH_PATHS = (
354 | "$(inherited)",
355 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
356 | );
357 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\"";
358 | GCC_DYNAMIC_NO_PIC = NO;
359 | GCC_ENABLE_FIX_AND_CONTINUE = YES;
360 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
361 | GCC_MODEL_TUNING = G4;
362 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
363 | GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
364 | INFOPLIST_FILE = "openFrameworks-Info.plist";
365 | INSTALL_PATH = "$(HOME)/Applications";
366 | LIBRARY_SEARCH_PATHS = (
367 | "$(inherited)",
368 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
369 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
370 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
371 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
372 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
373 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)",
374 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
375 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
376 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
377 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
378 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
379 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
380 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
381 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)",
382 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)",
383 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
384 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
385 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
386 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
387 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
388 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
389 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
390 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
391 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
392 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)",
393 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)",
394 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)",
395 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)",
396 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)",
397 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)",
398 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)",
399 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)",
400 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)",
401 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)",
402 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)",
403 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)",
404 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)",
405 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)",
406 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)",
407 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)",
408 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)",
409 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)",
410 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)",
411 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)",
412 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)",
413 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)",
414 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)",
415 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)",
416 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)",
417 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)",
418 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)",
419 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)",
420 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)",
421 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)",
422 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)",
423 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)",
424 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)",
425 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)",
426 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)",
427 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)",
428 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)",
429 | );
430 | PREBINDING = NO;
431 | PRODUCT_NAME = "$(TARGET_NAME)Debug";
432 | WRAPPER_EXTENSION = app;
433 | };
434 | name = Debug;
435 | };
436 | E4B69B610A3A1757003C02F2 /* Release */ = {
437 | isa = XCBuildConfiguration;
438 | buildSettings = {
439 | COPY_PHASE_STRIP = YES;
440 | FRAMEWORK_SEARCH_PATHS = (
441 | "$(inherited)",
442 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
443 | );
444 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\"";
445 | GCC_ENABLE_FIX_AND_CONTINUE = NO;
446 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
447 | GCC_MODEL_TUNING = G4;
448 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
449 | GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
450 | INFOPLIST_FILE = "openFrameworks-Info.plist";
451 | INSTALL_PATH = "$(HOME)/Applications";
452 | LIBRARY_SEARCH_PATHS = (
453 | "$(inherited)",
454 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
455 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
456 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
457 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
458 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
459 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)",
460 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
461 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
462 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
463 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
464 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
465 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
466 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
467 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)",
468 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)",
469 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
470 | "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
471 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
472 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
473 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
474 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
475 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
476 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
477 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
478 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
479 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)",
480 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)",
481 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)",
482 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)",
483 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)",
484 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)",
485 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)",
486 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)",
487 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)",
488 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)",
489 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)",
490 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)",
491 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)",
492 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)",
493 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)",
494 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)",
495 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)",
496 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)",
497 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)",
498 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)",
499 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)",
500 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)",
501 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)",
502 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)",
503 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)",
504 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)",
505 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)",
506 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)",
507 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)",
508 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)",
509 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)",
510 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)",
511 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)",
512 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)",
513 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)",
514 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)",
515 | );
516 | PREBINDING = NO;
517 | PRODUCT_NAME = "$(TARGET_NAME)";
518 | WRAPPER_EXTENSION = app;
519 | };
520 | name = Release;
521 | };
522 | /* End XCBuildConfiguration section */
523 |
524 | /* Begin XCConfigurationList section */
525 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ofxTerminalExample" */ = {
526 | isa = XCConfigurationList;
527 | buildConfigurations = (
528 | E4B69B4E0A3A1720003C02F2 /* Debug */,
529 | E4B69B4F0A3A1720003C02F2 /* Release */,
530 | );
531 | defaultConfigurationIsVisible = 0;
532 | defaultConfigurationName = Release;
533 | };
534 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ofxTerminalExample" */ = {
535 | isa = XCConfigurationList;
536 | buildConfigurations = (
537 | E4B69B600A3A1757003C02F2 /* Debug */,
538 | E4B69B610A3A1757003C02F2 /* Release */,
539 | );
540 | defaultConfigurationIsVisible = 0;
541 | defaultConfigurationName = Release;
542 | };
543 | /* End XCConfigurationList section */
544 | };
545 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */;
546 | }
547 |
--------------------------------------------------------------------------------
/example_project/ofxTerminalExample.xcodeproj/WHG.mode1v3:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ActivePerspectiveName
6 | Project
7 | AllowedModules
8 |
9 |
10 | BundleLoadPath
11 |
12 | MaxInstances
13 | n
14 | Module
15 | PBXSmartGroupTreeModule
16 | Name
17 | Groups and Files Outline View
18 |
19 |
20 | BundleLoadPath
21 |
22 | MaxInstances
23 | n
24 | Module
25 | PBXNavigatorGroup
26 | Name
27 | Editor
28 |
29 |
30 | BundleLoadPath
31 |
32 | MaxInstances
33 | n
34 | Module
35 | XCTaskListModule
36 | Name
37 | Task List
38 |
39 |
40 | BundleLoadPath
41 |
42 | MaxInstances
43 | n
44 | Module
45 | XCDetailModule
46 | Name
47 | File and Smart Group Detail Viewer
48 |
49 |
50 | BundleLoadPath
51 |
52 | MaxInstances
53 | 1
54 | Module
55 | PBXBuildResultsModule
56 | Name
57 | Detailed Build Results Viewer
58 |
59 |
60 | BundleLoadPath
61 |
62 | MaxInstances
63 | 1
64 | Module
65 | PBXProjectFindModule
66 | Name
67 | Project Batch Find Tool
68 |
69 |
70 | BundleLoadPath
71 |
72 | MaxInstances
73 | n
74 | Module
75 | XCProjectFormatConflictsModule
76 | Name
77 | Project Format Conflicts List
78 |
79 |
80 | BundleLoadPath
81 |
82 | MaxInstances
83 | n
84 | Module
85 | PBXBookmarksModule
86 | Name
87 | Bookmarks Tool
88 |
89 |
90 | BundleLoadPath
91 |
92 | MaxInstances
93 | n
94 | Module
95 | PBXClassBrowserModule
96 | Name
97 | Class Browser
98 |
99 |
100 | BundleLoadPath
101 |
102 | MaxInstances
103 | n
104 | Module
105 | PBXCVSModule
106 | Name
107 | Source Code Control Tool
108 |
109 |
110 | BundleLoadPath
111 |
112 | MaxInstances
113 | n
114 | Module
115 | PBXDebugBreakpointsModule
116 | Name
117 | Debug Breakpoints Tool
118 |
119 |
120 | BundleLoadPath
121 |
122 | MaxInstances
123 | n
124 | Module
125 | XCDockableInspector
126 | Name
127 | Inspector
128 |
129 |
130 | BundleLoadPath
131 |
132 | MaxInstances
133 | n
134 | Module
135 | PBXOpenQuicklyModule
136 | Name
137 | Open Quickly Tool
138 |
139 |
140 | BundleLoadPath
141 |
142 | MaxInstances
143 | 1
144 | Module
145 | PBXDebugSessionModule
146 | Name
147 | Debugger
148 |
149 |
150 | BundleLoadPath
151 |
152 | MaxInstances
153 | 1
154 | Module
155 | PBXDebugCLIModule
156 | Name
157 | Debug Console
158 |
159 |
160 | BundleLoadPath
161 |
162 | MaxInstances
163 | n
164 | Module
165 | XCSnapshotModule
166 | Name
167 | Snapshots Tool
168 |
169 |
170 | BundlePath
171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources
172 | Description
173 | DefaultDescriptionKey
174 | DockingSystemVisible
175 |
176 | Extension
177 | mode1v3
178 | FavBarConfig
179 |
180 | PBXProjectModuleGUID
181 | EE56155314B9EE79000DE70A
182 | XCBarModuleItemNames
183 |
184 | XCBarModuleItems
185 |
186 |
187 | FirstTimeWindowDisplayed
188 |
189 | Identifier
190 | com.apple.perspectives.project.mode1v3
191 | MajorVersion
192 | 33
193 | MinorVersion
194 | 0
195 | Name
196 | Default
197 | Notifications
198 |
199 | OpenEditors
200 |
201 | PerspectiveWidths
202 |
203 | -1
204 | -1
205 |
206 | Perspectives
207 |
208 |
209 | ChosenToolbarItems
210 |
211 | active-combo-popup
212 | action
213 | NSToolbarFlexibleSpaceItem
214 | debugger-enable-breakpoints
215 | clean
216 | go
217 | build-and-go
218 | com.apple.ide.PBXToolbarStopButton
219 | get-info
220 | NSToolbarFlexibleSpaceItem
221 | com.apple.pbx.toolbar.searchfield
222 |
223 | ControllerClassBaseName
224 |
225 | IconName
226 | WindowOfProjectWithEditor
227 | Identifier
228 | perspective.project
229 | IsVertical
230 |
231 | Layout
232 |
233 |
234 | ContentConfiguration
235 |
236 | PBXBottomSmartGroupGIDs
237 |
238 | 1C37FBAC04509CD000000102
239 | 1C37FAAC04509CD000000102
240 | 1C37FABC05509CD000000102
241 | 1C37FABC05539CD112110102
242 | E2644B35053B69B200211256
243 | 1C37FABC04509CD000100104
244 | 1CC0EA4004350EF90044410B
245 | 1CC0EA4004350EF90041110B
246 |
247 | PBXProjectModuleGUID
248 | 1CE0B1FE06471DED0097A5F4
249 | PBXProjectModuleLabel
250 | Files
251 | PBXProjectStructureProvided
252 | yes
253 | PBXSmartGroupTreeModuleColumnData
254 |
255 | PBXSmartGroupTreeModuleColumnWidthsKey
256 |
257 | 226
258 |
259 | PBXSmartGroupTreeModuleColumnsKey_v4
260 |
261 | MainColumn
262 |
263 |
264 | PBXSmartGroupTreeModuleOutlineStateKey_v7
265 |
266 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
267 |
268 | E4B69B4A0A3A1720003C02F2
269 | E4B69E1C0A3A1BDC003C02F2
270 | BB4B014C10F69532006C3DED
271 | 1C37FBAC04509CD000000102
272 | 1C37FABC05509CD000000102
273 |
274 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
275 |
276 |
277 | 5
278 | 3
279 | 0
280 |
281 |
282 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
283 | {{0, 0}, {226, 593}}
284 |
285 | PBXTopSmartGroupGIDs
286 |
287 | XCIncludePerspectivesSwitch
288 |
289 | XCSharingToken
290 | com.apple.Xcode.GFSharingToken
291 |
292 | GeometryConfiguration
293 |
294 | Frame
295 | {{0, 0}, {243, 611}}
296 | GroupTreeTableConfiguration
297 |
298 | MainColumn
299 | 226
300 |
301 | RubberWindowFrame
302 | 177 173 987 652 0 0 1440 878
303 |
304 | Module
305 | PBXSmartGroupTreeModule
306 | Proportion
307 | 243pt
308 |
309 |
310 | Dock
311 |
312 |
313 | BecomeActive
314 |
315 | ContentConfiguration
316 |
317 | PBXProjectModuleGUID
318 | 1CE0B20306471E060097A5F4
319 | PBXProjectModuleLabel
320 | testApp.h
321 | PBXSplitModuleInNavigatorKey
322 |
323 | Split0
324 |
325 | PBXProjectModuleGUID
326 | 1CE0B20406471E060097A5F4
327 | PBXProjectModuleLabel
328 | testApp.h
329 | _historyCapacity
330 | 0
331 | bookmark
332 | EE56166114BA6BC1000DE70A
333 | history
334 |
335 | EE5615B714B9EFE6000DE70A
336 | EE5615B814B9EFE6000DE70A
337 | EE5615BA14B9EFE6000DE70A
338 |
339 |
340 | SplitCount
341 | 1
342 |
343 | StatusBarVisibility
344 |
345 |
346 | GeometryConfiguration
347 |
348 | Frame
349 | {{0, 0}, {739, 496}}
350 | RubberWindowFrame
351 | 177 173 987 652 0 0 1440 878
352 |
353 | Module
354 | PBXNavigatorGroup
355 | Proportion
356 | 496pt
357 |
358 |
359 | ContentConfiguration
360 |
361 | PBXProjectModuleGUID
362 | 1CE0B20506471E060097A5F4
363 | PBXProjectModuleLabel
364 | Detail
365 |
366 | GeometryConfiguration
367 |
368 | Frame
369 | {{0, 501}, {739, 110}}
370 | RubberWindowFrame
371 | 177 173 987 652 0 0 1440 878
372 |
373 | Module
374 | XCDetailModule
375 | Proportion
376 | 110pt
377 |
378 |
379 | Proportion
380 | 739pt
381 |
382 |
383 | Name
384 | Project
385 | ServiceClasses
386 |
387 | XCModuleDock
388 | PBXSmartGroupTreeModule
389 | XCModuleDock
390 | PBXNavigatorGroup
391 | XCDetailModule
392 |
393 | TableOfContents
394 |
395 | EE56165E14BA6BC0000DE70A
396 | 1CE0B1FE06471DED0097A5F4
397 | EE56165F14BA6BC0000DE70A
398 | 1CE0B20306471E060097A5F4
399 | 1CE0B20506471E060097A5F4
400 |
401 | ToolbarConfigUserDefaultsMinorVersion
402 | 2
403 | ToolbarConfiguration
404 | xcode.toolbar.config.defaultV3
405 |
406 |
407 | ControllerClassBaseName
408 |
409 | IconName
410 | WindowOfProject
411 | Identifier
412 | perspective.morph
413 | IsVertical
414 | 0
415 | Layout
416 |
417 |
418 | BecomeActive
419 | 1
420 | ContentConfiguration
421 |
422 | PBXBottomSmartGroupGIDs
423 |
424 | 1C37FBAC04509CD000000102
425 | 1C37FAAC04509CD000000102
426 | 1C08E77C0454961000C914BD
427 | 1C37FABC05509CD000000102
428 | 1C37FABC05539CD112110102
429 | E2644B35053B69B200211256
430 | 1C37FABC04509CD000100104
431 | 1CC0EA4004350EF90044410B
432 | 1CC0EA4004350EF90041110B
433 |
434 | PBXProjectModuleGUID
435 | 11E0B1FE06471DED0097A5F4
436 | PBXProjectModuleLabel
437 | Files
438 | PBXProjectStructureProvided
439 | yes
440 | PBXSmartGroupTreeModuleColumnData
441 |
442 | PBXSmartGroupTreeModuleColumnWidthsKey
443 |
444 | 186
445 |
446 | PBXSmartGroupTreeModuleColumnsKey_v4
447 |
448 | MainColumn
449 |
450 |
451 | PBXSmartGroupTreeModuleOutlineStateKey_v7
452 |
453 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
454 |
455 | 29B97314FDCFA39411CA2CEA
456 | 1C37FABC05509CD000000102
457 |
458 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
459 |
460 |
461 | 0
462 |
463 |
464 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
465 | {{0, 0}, {186, 337}}
466 |
467 | PBXTopSmartGroupGIDs
468 |
469 | XCIncludePerspectivesSwitch
470 | 1
471 | XCSharingToken
472 | com.apple.Xcode.GFSharingToken
473 |
474 | GeometryConfiguration
475 |
476 | Frame
477 | {{0, 0}, {203, 355}}
478 | GroupTreeTableConfiguration
479 |
480 | MainColumn
481 | 186
482 |
483 | RubberWindowFrame
484 | 373 269 690 397 0 0 1440 878
485 |
486 | Module
487 | PBXSmartGroupTreeModule
488 | Proportion
489 | 100%
490 |
491 |
492 | Name
493 | Morph
494 | PreferredWidth
495 | 300
496 | ServiceClasses
497 |
498 | XCModuleDock
499 | PBXSmartGroupTreeModule
500 |
501 | TableOfContents
502 |
503 | 11E0B1FE06471DED0097A5F4
504 |
505 | ToolbarConfiguration
506 | xcode.toolbar.config.default.shortV3
507 |
508 |
509 | PerspectivesBarVisible
510 |
511 | ShelfIsVisible
512 |
513 | SourceDescription
514 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'
515 | StatusbarIsVisible
516 |
517 | TimeStamp
518 | 0.0
519 | ToolbarConfigUserDefaultsMinorVersion
520 | 2
521 | ToolbarDisplayMode
522 | 1
523 | ToolbarIsVisible
524 |
525 | ToolbarSizeMode
526 | 1
527 | Type
528 | Perspectives
529 | UpdateMessage
530 | The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?
531 | WindowJustification
532 | 5
533 | WindowOrderList
534 |
535 | EE56155414B9EE79000DE70A
536 | /Users/WHG/Code/of_preRelease_v007_osx/addons/ofxTerminal/example_project/ofxTerminalExample.xcodeproj
537 |
538 | WindowString
539 | 177 173 987 652 0 0 1440 878
540 | WindowToolsV3
541 |
542 |
543 | FirstTimeWindowDisplayed
544 |
545 | Identifier
546 | windowTool.build
547 | IsVertical
548 |
549 | Layout
550 |
551 |
552 | Dock
553 |
554 |
555 | ContentConfiguration
556 |
557 | PBXProjectModuleGUID
558 | 1CD0528F0623707200166675
559 | PBXProjectModuleLabel
560 |
561 | StatusBarVisibility
562 |
563 |
564 | GeometryConfiguration
565 |
566 | Frame
567 | {{0, 0}, {500, 218}}
568 | RubberWindowFrame
569 | 196 332 500 500 0 0 1440 878
570 |
571 | Module
572 | PBXNavigatorGroup
573 | Proportion
574 | 218pt
575 |
576 |
577 | ContentConfiguration
578 |
579 | PBXProjectModuleGUID
580 | XCMainBuildResultsModuleGUID
581 | PBXProjectModuleLabel
582 | Build Results
583 | XCBuildResultsTrigger_Collapse
584 | 1021
585 | XCBuildResultsTrigger_Open
586 | 1011
587 |
588 | GeometryConfiguration
589 |
590 | Frame
591 | {{0, 223}, {500, 236}}
592 | RubberWindowFrame
593 | 196 332 500 500 0 0 1440 878
594 |
595 | Module
596 | PBXBuildResultsModule
597 | Proportion
598 | 236pt
599 |
600 |
601 | Proportion
602 | 459pt
603 |
604 |
605 | Name
606 | Build Results
607 | ServiceClasses
608 |
609 | PBXBuildResultsModule
610 |
611 | StatusbarIsVisible
612 |
613 | TableOfContents
614 |
615 | EE56155414B9EE79000DE70A
616 | EE56166014BA6BC0000DE70A
617 | 1CD0528F0623707200166675
618 | XCMainBuildResultsModuleGUID
619 |
620 | ToolbarConfiguration
621 | xcode.toolbar.config.buildV3
622 | WindowContentMinSize
623 | 486 300
624 | WindowString
625 | 196 332 500 500 0 0 1440 878
626 | WindowToolGUID
627 | EE56155414B9EE79000DE70A
628 | WindowToolIsVisible
629 |
630 |
631 |
632 | FirstTimeWindowDisplayed
633 |
634 | Identifier
635 | windowTool.debugger
636 | IsVertical
637 |
638 | Layout
639 |
640 |
641 | Dock
642 |
643 |
644 | ContentConfiguration
645 |
646 | Debugger
647 |
648 | HorizontalSplitView
649 |
650 | _collapsingFrameDimension
651 | 0.0
652 | _indexOfCollapsedView
653 | 0
654 | _percentageOfCollapsedView
655 | 0.0
656 | isCollapsed
657 | yes
658 | sizes
659 |
660 | {{0, 0}, {316, 185}}
661 | {{316, 0}, {378, 185}}
662 |
663 |
664 | VerticalSplitView
665 |
666 | _collapsingFrameDimension
667 | 0.0
668 | _indexOfCollapsedView
669 | 0
670 | _percentageOfCollapsedView
671 | 0.0
672 | isCollapsed
673 | yes
674 | sizes
675 |
676 | {{0, 0}, {694, 185}}
677 | {{0, 185}, {694, 196}}
678 |
679 |
680 |
681 | LauncherConfigVersion
682 | 8
683 | PBXProjectModuleGUID
684 | 1C162984064C10D400B95A72
685 | PBXProjectModuleLabel
686 | Debug - GLUTExamples (Underwater)
687 |
688 | GeometryConfiguration
689 |
690 | DebugConsoleVisible
691 | None
692 | DebugConsoleWindowFrame
693 | {{200, 200}, {500, 300}}
694 | DebugSTDIOWindowFrame
695 | {{200, 200}, {500, 300}}
696 | Frame
697 | {{0, 0}, {694, 381}}
698 | PBXDebugSessionStackFrameViewKey
699 |
700 | DebugVariablesTableConfiguration
701 |
702 | Name
703 | 120
704 | Value
705 | 85
706 | Summary
707 | 148
708 |
709 | Frame
710 | {{316, 0}, {378, 185}}
711 | RubberWindowFrame
712 | 326 379 694 422 0 0 1440 878
713 |
714 | RubberWindowFrame
715 | 326 379 694 422 0 0 1440 878
716 |
717 | Module
718 | PBXDebugSessionModule
719 | Proportion
720 | 381pt
721 |
722 |
723 | Proportion
724 | 381pt
725 |
726 |
727 | Name
728 | Debugger
729 | ServiceClasses
730 |
731 | PBXDebugSessionModule
732 |
733 | StatusbarIsVisible
734 |
735 | TableOfContents
736 |
737 | 1CD10A99069EF8BA00B06720
738 | EE5615AB14B9EEF4000DE70A
739 | 1C162984064C10D400B95A72
740 | EE5615AC14B9EEF4000DE70A
741 | EE5615AD14B9EEF4000DE70A
742 | EE5615AE14B9EEF4000DE70A
743 | EE5615AF14B9EEF4000DE70A
744 | EE5615B014B9EEF4000DE70A
745 |
746 | ToolbarConfiguration
747 | xcode.toolbar.config.debugV3
748 | WindowString
749 | 326 379 694 422 0 0 1440 878
750 | WindowToolGUID
751 | 1CD10A99069EF8BA00B06720
752 | WindowToolIsVisible
753 |
754 |
755 |
756 | Identifier
757 | windowTool.find
758 | Layout
759 |
760 |
761 | Dock
762 |
763 |
764 | Dock
765 |
766 |
767 | ContentConfiguration
768 |
769 | PBXProjectModuleGUID
770 | 1CDD528C0622207200134675
771 | PBXProjectModuleLabel
772 | <No Editor>
773 | PBXSplitModuleInNavigatorKey
774 |
775 | Split0
776 |
777 | PBXProjectModuleGUID
778 | 1CD0528D0623707200166675
779 |
780 | SplitCount
781 | 1
782 |
783 | StatusBarVisibility
784 | 1
785 |
786 | GeometryConfiguration
787 |
788 | Frame
789 | {{0, 0}, {781, 167}}
790 | RubberWindowFrame
791 | 62 385 781 470 0 0 1440 878
792 |
793 | Module
794 | PBXNavigatorGroup
795 | Proportion
796 | 781pt
797 |
798 |
799 | Proportion
800 | 50%
801 |
802 |
803 | BecomeActive
804 | 1
805 | ContentConfiguration
806 |
807 | PBXProjectModuleGUID
808 | 1CD0528E0623707200166675
809 | PBXProjectModuleLabel
810 | Project Find
811 |
812 | GeometryConfiguration
813 |
814 | Frame
815 | {{8, 0}, {773, 254}}
816 | RubberWindowFrame
817 | 62 385 781 470 0 0 1440 878
818 |
819 | Module
820 | PBXProjectFindModule
821 | Proportion
822 | 50%
823 |
824 |
825 | Proportion
826 | 428pt
827 |
828 |
829 | Name
830 | Project Find
831 | ServiceClasses
832 |
833 | PBXProjectFindModule
834 |
835 | StatusbarIsVisible
836 | 1
837 | TableOfContents
838 |
839 | 1C530D57069F1CE1000CFCEE
840 | 1C530D58069F1CE1000CFCEE
841 | 1C530D59069F1CE1000CFCEE
842 | 1CDD528C0622207200134675
843 | 1C530D5A069F1CE1000CFCEE
844 | 1CE0B1FE06471DED0097A5F4
845 | 1CD0528E0623707200166675
846 |
847 | WindowString
848 | 62 385 781 470 0 0 1440 878
849 | WindowToolGUID
850 | 1C530D57069F1CE1000CFCEE
851 | WindowToolIsVisible
852 | 0
853 |
854 |
855 | Identifier
856 | MENUSEPARATOR
857 |
858 |
859 | FirstTimeWindowDisplayed
860 |
861 | Identifier
862 | windowTool.debuggerConsole
863 | IsVertical
864 |
865 | Layout
866 |
867 |
868 | Dock
869 |
870 |
871 | ContentConfiguration
872 |
873 | PBXProjectModuleGUID
874 | 1C78EAAC065D492600B07095
875 | PBXProjectModuleLabel
876 | Debugger Console
877 |
878 | GeometryConfiguration
879 |
880 | Frame
881 | {{0, 0}, {650, 209}}
882 | RubberWindowFrame
883 | 326 551 650 250 0 0 1440 878
884 |
885 | Module
886 | PBXDebugCLIModule
887 | Proportion
888 | 209pt
889 |
890 |
891 | Proportion
892 | 209pt
893 |
894 |
895 | Name
896 | Debugger Console
897 | ServiceClasses
898 |
899 | PBXDebugCLIModule
900 |
901 | StatusbarIsVisible
902 |
903 | TableOfContents
904 |
905 | 1C78EAAD065D492600B07095
906 | EE5615B114B9EEF4000DE70A
907 | 1C78EAAC065D492600B07095
908 |
909 | ToolbarConfiguration
910 | xcode.toolbar.config.consoleV3
911 | WindowString
912 | 326 551 650 250 0 0 1440 878
913 | WindowToolGUID
914 | 1C78EAAD065D492600B07095
915 | WindowToolIsVisible
916 |
917 |
918 |
919 | Identifier
920 | windowTool.snapshots
921 | Layout
922 |
923 |
924 | Dock
925 |
926 |
927 | Module
928 | XCSnapshotModule
929 | Proportion
930 | 100%
931 |
932 |
933 | Proportion
934 | 100%
935 |
936 |
937 | Name
938 | Snapshots
939 | ServiceClasses
940 |
941 | XCSnapshotModule
942 |
943 | StatusbarIsVisible
944 | Yes
945 | ToolbarConfiguration
946 | xcode.toolbar.config.snapshots
947 | WindowString
948 | 315 824 300 550 0 0 1440 878
949 | WindowToolIsVisible
950 | Yes
951 |
952 |
953 | Identifier
954 | windowTool.scm
955 | Layout
956 |
957 |
958 | Dock
959 |
960 |
961 | ContentConfiguration
962 |
963 | PBXProjectModuleGUID
964 | 1C78EAB2065D492600B07095
965 | PBXProjectModuleLabel
966 | <No Editor>
967 | PBXSplitModuleInNavigatorKey
968 |
969 | Split0
970 |
971 | PBXProjectModuleGUID
972 | 1C78EAB3065D492600B07095
973 |
974 | SplitCount
975 | 1
976 |
977 | StatusBarVisibility
978 | 1
979 |
980 | GeometryConfiguration
981 |
982 | Frame
983 | {{0, 0}, {452, 0}}
984 | RubberWindowFrame
985 | 743 379 452 308 0 0 1280 1002
986 |
987 | Module
988 | PBXNavigatorGroup
989 | Proportion
990 | 0pt
991 |
992 |
993 | BecomeActive
994 | 1
995 | ContentConfiguration
996 |
997 | PBXProjectModuleGUID
998 | 1CD052920623707200166675
999 | PBXProjectModuleLabel
1000 | SCM
1001 |
1002 | GeometryConfiguration
1003 |
1004 | ConsoleFrame
1005 | {{0, 259}, {452, 0}}
1006 | Frame
1007 | {{0, 7}, {452, 259}}
1008 | RubberWindowFrame
1009 | 743 379 452 308 0 0 1280 1002
1010 | TableConfiguration
1011 |
1012 | Status
1013 | 30
1014 | FileName
1015 | 199
1016 | Path
1017 | 197.0950012207031
1018 |
1019 | TableFrame
1020 | {{0, 0}, {452, 250}}
1021 |
1022 | Module
1023 | PBXCVSModule
1024 | Proportion
1025 | 262pt
1026 |
1027 |
1028 | Proportion
1029 | 266pt
1030 |
1031 |
1032 | Name
1033 | SCM
1034 | ServiceClasses
1035 |
1036 | PBXCVSModule
1037 |
1038 | StatusbarIsVisible
1039 | 1
1040 | TableOfContents
1041 |
1042 | 1C78EAB4065D492600B07095
1043 | 1C78EAB5065D492600B07095
1044 | 1C78EAB2065D492600B07095
1045 | 1CD052920623707200166675
1046 |
1047 | ToolbarConfiguration
1048 | xcode.toolbar.config.scm
1049 | WindowString
1050 | 743 379 452 308 0 0 1280 1002
1051 |
1052 |
1053 | Identifier
1054 | windowTool.breakpoints
1055 | IsVertical
1056 | 0
1057 | Layout
1058 |
1059 |
1060 | Dock
1061 |
1062 |
1063 | BecomeActive
1064 | 1
1065 | ContentConfiguration
1066 |
1067 | PBXBottomSmartGroupGIDs
1068 |
1069 | 1C77FABC04509CD000000102
1070 |
1071 | PBXProjectModuleGUID
1072 | 1CE0B1FE06471DED0097A5F4
1073 | PBXProjectModuleLabel
1074 | Files
1075 | PBXProjectStructureProvided
1076 | no
1077 | PBXSmartGroupTreeModuleColumnData
1078 |
1079 | PBXSmartGroupTreeModuleColumnWidthsKey
1080 |
1081 | 168
1082 |
1083 | PBXSmartGroupTreeModuleColumnsKey_v4
1084 |
1085 | MainColumn
1086 |
1087 |
1088 | PBXSmartGroupTreeModuleOutlineStateKey_v7
1089 |
1090 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
1091 |
1092 | 1C77FABC04509CD000000102
1093 |
1094 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
1095 |
1096 |
1097 | 0
1098 |
1099 |
1100 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
1101 | {{0, 0}, {168, 350}}
1102 |
1103 | PBXTopSmartGroupGIDs
1104 |
1105 | XCIncludePerspectivesSwitch
1106 | 0
1107 |
1108 | GeometryConfiguration
1109 |
1110 | Frame
1111 | {{0, 0}, {185, 368}}
1112 | GroupTreeTableConfiguration
1113 |
1114 | MainColumn
1115 | 168
1116 |
1117 | RubberWindowFrame
1118 | 315 424 744 409 0 0 1440 878
1119 |
1120 | Module
1121 | PBXSmartGroupTreeModule
1122 | Proportion
1123 | 185pt
1124 |
1125 |
1126 | ContentConfiguration
1127 |
1128 | PBXProjectModuleGUID
1129 | 1CA1AED706398EBD00589147
1130 | PBXProjectModuleLabel
1131 | Detail
1132 |
1133 | GeometryConfiguration
1134 |
1135 | Frame
1136 | {{190, 0}, {554, 368}}
1137 | RubberWindowFrame
1138 | 315 424 744 409 0 0 1440 878
1139 |
1140 | Module
1141 | XCDetailModule
1142 | Proportion
1143 | 554pt
1144 |
1145 |
1146 | Proportion
1147 | 368pt
1148 |
1149 |
1150 | MajorVersion
1151 | 3
1152 | MinorVersion
1153 | 0
1154 | Name
1155 | Breakpoints
1156 | ServiceClasses
1157 |
1158 | PBXSmartGroupTreeModule
1159 | XCDetailModule
1160 |
1161 | StatusbarIsVisible
1162 | 1
1163 | TableOfContents
1164 |
1165 | 1CDDB66807F98D9800BB5817
1166 | 1CDDB66907F98D9800BB5817
1167 | 1CE0B1FE06471DED0097A5F4
1168 | 1CA1AED706398EBD00589147
1169 |
1170 | ToolbarConfiguration
1171 | xcode.toolbar.config.breakpointsV3
1172 | WindowString
1173 | 315 424 744 409 0 0 1440 878
1174 | WindowToolGUID
1175 | 1CDDB66807F98D9800BB5817
1176 | WindowToolIsVisible
1177 | 1
1178 |
1179 |
1180 | Identifier
1181 | windowTool.debugAnimator
1182 | Layout
1183 |
1184 |
1185 | Dock
1186 |
1187 |
1188 | Module
1189 | PBXNavigatorGroup
1190 | Proportion
1191 | 100%
1192 |
1193 |
1194 | Proportion
1195 | 100%
1196 |
1197 |
1198 | Name
1199 | Debug Visualizer
1200 | ServiceClasses
1201 |
1202 | PBXNavigatorGroup
1203 |
1204 | StatusbarIsVisible
1205 | 1
1206 | ToolbarConfiguration
1207 | xcode.toolbar.config.debugAnimatorV3
1208 | WindowString
1209 | 100 100 700 500 0 0 1280 1002
1210 |
1211 |
1212 | Identifier
1213 | windowTool.bookmarks
1214 | Layout
1215 |
1216 |
1217 | Dock
1218 |
1219 |
1220 | Module
1221 | PBXBookmarksModule
1222 | Proportion
1223 | 100%
1224 |
1225 |
1226 | Proportion
1227 | 100%
1228 |
1229 |
1230 | Name
1231 | Bookmarks
1232 | ServiceClasses
1233 |
1234 | PBXBookmarksModule
1235 |
1236 | StatusbarIsVisible
1237 | 0
1238 | WindowString
1239 | 538 42 401 187 0 0 1280 1002
1240 |
1241 |
1242 | Identifier
1243 | windowTool.projectFormatConflicts
1244 | Layout
1245 |
1246 |
1247 | Dock
1248 |
1249 |
1250 | Module
1251 | XCProjectFormatConflictsModule
1252 | Proportion
1253 | 100%
1254 |
1255 |
1256 | Proportion
1257 | 100%
1258 |
1259 |
1260 | Name
1261 | Project Format Conflicts
1262 | ServiceClasses
1263 |
1264 | XCProjectFormatConflictsModule
1265 |
1266 | StatusbarIsVisible
1267 | 0
1268 | WindowContentMinSize
1269 | 450 300
1270 | WindowString
1271 | 50 850 472 307 0 0 1440 877
1272 |
1273 |
1274 | Identifier
1275 | windowTool.classBrowser
1276 | Layout
1277 |
1278 |
1279 | Dock
1280 |
1281 |
1282 | BecomeActive
1283 | 1
1284 | ContentConfiguration
1285 |
1286 | OptionsSetName
1287 | Hierarchy, all classes
1288 | PBXProjectModuleGUID
1289 | 1CA6456E063B45B4001379D8
1290 | PBXProjectModuleLabel
1291 | Class Browser - NSObject
1292 |
1293 | GeometryConfiguration
1294 |
1295 | ClassesFrame
1296 | {{0, 0}, {374, 96}}
1297 | ClassesTreeTableConfiguration
1298 |
1299 | PBXClassNameColumnIdentifier
1300 | 208
1301 | PBXClassBookColumnIdentifier
1302 | 22
1303 |
1304 | Frame
1305 | {{0, 0}, {630, 331}}
1306 | MembersFrame
1307 | {{0, 105}, {374, 395}}
1308 | MembersTreeTableConfiguration
1309 |
1310 | PBXMemberTypeIconColumnIdentifier
1311 | 22
1312 | PBXMemberNameColumnIdentifier
1313 | 216
1314 | PBXMemberTypeColumnIdentifier
1315 | 97
1316 | PBXMemberBookColumnIdentifier
1317 | 22
1318 |
1319 | PBXModuleWindowStatusBarHidden2
1320 | 1
1321 | RubberWindowFrame
1322 | 385 179 630 352 0 0 1440 878
1323 |
1324 | Module
1325 | PBXClassBrowserModule
1326 | Proportion
1327 | 332pt
1328 |
1329 |
1330 | Proportion
1331 | 332pt
1332 |
1333 |
1334 | Name
1335 | Class Browser
1336 | ServiceClasses
1337 |
1338 | PBXClassBrowserModule
1339 |
1340 | StatusbarIsVisible
1341 | 0
1342 | TableOfContents
1343 |
1344 | 1C0AD2AF069F1E9B00FABCE6
1345 | 1C0AD2B0069F1E9B00FABCE6
1346 | 1CA6456E063B45B4001379D8
1347 |
1348 | ToolbarConfiguration
1349 | xcode.toolbar.config.classbrowser
1350 | WindowString
1351 | 385 179 630 352 0 0 1440 878
1352 | WindowToolGUID
1353 | 1C0AD2AF069F1E9B00FABCE6
1354 | WindowToolIsVisible
1355 | 0
1356 |
1357 |
1358 | Identifier
1359 | windowTool.refactoring
1360 | IncludeInToolsMenu
1361 | 0
1362 | Layout
1363 |
1364 |
1365 | Dock
1366 |
1367 |
1368 | BecomeActive
1369 | 1
1370 | GeometryConfiguration
1371 |
1372 | Frame
1373 | {0, 0}, {500, 335}
1374 | RubberWindowFrame
1375 | {0, 0}, {500, 335}
1376 |
1377 | Module
1378 | XCRefactoringModule
1379 | Proportion
1380 | 100%
1381 |
1382 |
1383 | Proportion
1384 | 100%
1385 |
1386 |
1387 | Name
1388 | Refactoring
1389 | ServiceClasses
1390 |
1391 | XCRefactoringModule
1392 |
1393 | WindowString
1394 | 200 200 500 356 0 0 1920 1200
1395 |
1396 |
1397 |
1398 |
1399 |
--------------------------------------------------------------------------------