diff --git a/Icon.icns b/Icon.icns index 808fd9c..9063396 100644 Binary files a/Icon.icns and b/Icon.icns differ diff --git a/Speaker-Info.plist b/Speaker-Info.plist index 04c463e..ad20a9e 100644 --- a/Speaker-Info.plist +++ b/Speaker-Info.plist @@ -27,6 +27,6 @@ NSMainNibFile MainMenu NSPrincipalClass - NSApplication + SpeakerApplication diff --git a/Speaker.xcodeproj/jeena.mode1v3 b/Speaker.xcodeproj/jeena.mode1v3 index 779cf3e..b02d425 100644 --- a/Speaker.xcodeproj/jeena.mode1v3 +++ b/Speaker.xcodeproj/jeena.mode1v3 @@ -264,19 +264,20 @@ 29B97314FDCFA39411CA2CEA 080E96DDFE201D6D7F000001 + 29B97315FDCFA39411CA2CEA 29B97317FDCFA39411CA2CEA 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey - 8 - 5 + 3 + 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 544}} + {{0, 0}, {186, 854}} PBXTopSmartGroupGIDs @@ -288,14 +289,14 @@ GeometryConfiguration Frame - {{0, 0}, {203, 562}} + {{0, 0}, {203, 872}} GroupTreeTableConfiguration MainColumn 186 RubberWindowFrame - 277 575 787 603 0 0 1920 1178 + 78 186 1101 913 0 0 1920 1178 Module PBXSmartGroupTreeModule @@ -306,12 +307,14 @@ Dock + BecomeActive + ContentConfiguration PBXProjectModuleGUID 1CE0B20306471E060097A5F4 PBXProjectModuleLabel - Speaker-Info.plist + SpeakerAppDelegate.m PBXSplitModuleInNavigatorKey Split0 @@ -319,18 +322,22 @@ PBXProjectModuleGUID 1CE0B20406471E060097A5F4 PBXProjectModuleLabel - Speaker-Info.plist + SpeakerAppDelegate.m _historyCapacity 0 bookmark - 1FA38CDC124D437D004B8852 + 1FF67C6B1294AEA400CA07A3 history 1FA38C5E124D2CD6004B8852 - 1FA38C98124D341C004B8852 - 1FA38CD9124D437D004B8852 1FA38CDA124D437D004B8852 - 1FA38CDB124D437D004B8852 + 1FF67B481294919400CA07A3 + 1FF67B491294919400CA07A3 + 1FF67B4A1294919400CA07A3 + 1FF67B4B1294919400CA07A3 + 1FF67BEC1294A39500CA07A3 + 1FF67C0B1294A9BE00CA07A3 + 1FF67C0C1294A9BE00CA07A3 SplitCount @@ -342,14 +349,14 @@ GeometryConfiguration Frame - {{0, 0}, {579, 557}} + {{0, 0}, {893, 867}} RubberWindowFrame - 277 575 787 603 0 0 1920 1178 + 78 186 1101 913 0 0 1920 1178 Module PBXNavigatorGroup Proportion - 557pt + 867pt ContentConfiguration @@ -362,9 +369,9 @@ GeometryConfiguration Frame - {{0, 562}, {579, 0}} + {{0, 872}, {893, 0}} RubberWindowFrame - 277 575 787 603 0 0 1920 1178 + 78 186 1101 913 0 0 1920 1178 Module XCDetailModule @@ -373,7 +380,7 @@ Proportion - 579pt + 893pt Name @@ -388,9 +395,9 @@ TableOfContents - 1FA38C32124D2426004B8852 + 1FF67B3012948CE400CA07A3 1CE0B1FE06471DED0097A5F4 - 1FA38C33124D2426004B8852 + 1FF67B3112948CE400CA07A3 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -528,15 +535,15 @@ 5 WindowOrderList - 1FA38C63124D2CD6004B8852 - 1FA38C64124D2CD6004B8852 - 1C78EAAD065D492600B07095 + 1FF67B551294919400CA07A3 + 1FF67B561294919400CA07A3 1CD10A99069EF8BA00B06720 1FA38C35124D2426004B8852 + 1C78EAAD065D492600B07095 /Users/jeena/Projects/Speaker/Speaker.xcodeproj WindowString - 277 575 787 603 0 0 1920 1178 + 78 186 1101 913 0 0 1920 1178 WindowToolsV3 @@ -557,7 +564,7 @@ PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - SpeakerAppDelegate.m + StatusBarVisibility @@ -574,8 +581,6 @@ 218pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -615,7 +620,7 @@ TableOfContents 1FA38C35124D2426004B8852 - 1FA38C36124D2426004B8852 + 1FF67B3212948CE400CA07A3 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -659,8 +664,8 @@ yes sizes - {{0, 0}, {316, 185}} - {{316, 0}, {378, 185}} + {{0, 0}, {316, 198}} + {{316, 0}, {378, 198}} VerticalSplitView @@ -675,8 +680,8 @@ yes sizes - {{0, 0}, {694, 185}} - {{0, 185}, {694, 196}} + {{0, 0}, {694, 198}} + {{0, 198}, {694, 183}} @@ -709,7 +714,7 @@ 148 Frame - {{316, 0}, {378, 185}} + {{316, 0}, {378, 198}} RubberWindowFrame 298 733 694 422 0 0 1920 1178 @@ -737,13 +742,13 @@ TableOfContents 1CD10A99069EF8BA00B06720 - 1FA38C41124D2756004B8852 + 1FF67B4E1294919400CA07A3 1C162984064C10D400B95A72 - 1FA38C42124D2756004B8852 - 1FA38C43124D2756004B8852 - 1FA38C44124D2756004B8852 - 1FA38C45124D2756004B8852 - 1FA38C46124D2756004B8852 + 1FF67B4F1294919400CA07A3 + 1FF67B501294919400CA07A3 + 1FF67B511294919400CA07A3 + 1FF67B521294919400CA07A3 + 1FF67B531294919400CA07A3 ToolbarConfiguration xcode.toolbar.config.debugV3 @@ -884,7 +889,7 @@ Frame {{0, 0}, {650, 209}} RubberWindowFrame - 191 248 650 250 0 0 1920 1178 + 1276 76 650 250 0 0 1920 1178 Module PBXDebugCLIModule @@ -907,17 +912,17 @@ TableOfContents 1C78EAAD065D492600B07095 - 1FA38C47124D2756004B8852 + 1FF67B541294919400CA07A3 1C78EAAC065D492600B07095 ToolbarConfiguration xcode.toolbar.config.consoleV3 WindowString - 191 248 650 250 0 0 1920 1178 + 1276 76 650 250 0 0 1920 1178 WindowToolGUID 1C78EAAD065D492600B07095 WindowToolIsVisible - + Identifier diff --git a/Speaker.xcodeproj/jeena.pbxuser b/Speaker.xcodeproj/jeena.pbxuser index c00afb3..301070e 100644 --- a/Speaker.xcodeproj/jeena.pbxuser +++ b/Speaker.xcodeproj/jeena.pbxuser @@ -51,348 +51,10 @@ isa = PBXCodeSenseManager; indexTemplatePath = ""; }; - 1FA38C56124D2CA0004B8852 /* XCBuildMessageTextBookmark */ = { - isa = PBXTextBookmark; - comments = "Invalid initializer"; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - fallbackIsa = XCBuildMessageTextBookmark; - rLen = 1; - rLoc = 21; - rType = 1; - }; - 1FA38C57124D2CA0004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 382; - vrLoc = 139; - }; 1FA38C5E124D2CD6004B8852 /* PBXBookmark */ = { isa = PBXBookmark; fRef = 1FA38C48124D27C8004B8852 /* play-icon.png */; }; - 1FA38C5F124D2CD6004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D80F4B6AC300CF3369 /* SpeakerAppDelegate.h */; - name = "SpeakerAppDelegate.h: 13"; - rLen = 10; - rLoc = 255; - rType = 0; - vrLen = 380; - vrLoc = 43; - }; - 1FA38C60124D2CD6004B8852 /* XCBuildMessageTextBookmark */ = { - isa = PBXTextBookmark; - comments = "Invalid initializer"; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - fallbackIsa = XCBuildMessageTextBookmark; - rLen = 1; - rLoc = 21; - rType = 1; - }; - 1FA38C61124D2CD6004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 32"; - rLen = 0; - rLoc = 1342; - rType = 0; - vrLen = 779; - vrLoc = 77; - }; - 1FA38C6D124D2D0C004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 779; - vrLoc = 77; - }; - 1FA38C71124D2D1E004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 779; - vrLoc = 77; - }; - 1FA38C75124D2D34004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 797; - vrLoc = 77; - }; - 1FA38C77124D2D5A004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 779; - vrLoc = 77; - }; - 1FA38C7A124D2DA5004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 760; - vrLoc = 77; - }; - 1FA38C7F124D2DBB004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 708; - vrLoc = 0; - }; - 1FA38C84124D2DCA004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 708; - vrLoc = 0; - }; - 1FA38C88124D2DE9004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 700; - vrLoc = 77; - }; - 1FA38C8F124D3162004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D80F4B6AC300CF3369 /* SpeakerAppDelegate.h */; - name = "SpeakerAppDelegate.h: 14"; - rLen = 0; - rLoc = 324; - rType = 0; - vrLen = 458; - vrLoc = 0; - }; - 1FA38C90124D3162004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 20"; - rLen = 0; - rLoc = 481; - rType = 0; - vrLen = 695; - vrLoc = 77; - }; - 1FA38C91124D3162004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 32"; - rLen = 0; - rLoc = 1342; - rType = 0; - vrLen = 711; - vrLoc = 140; - }; - 1FA38C95124D31AD004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 34"; - rLen = 0; - rLoc = 1339; - rType = 0; - vrLen = 706; - vrLoc = 208; - }; - 1FA38C98124D341C004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D80F4B6AC300CF3369 /* SpeakerAppDelegate.h */; - name = "SpeakerAppDelegate.h: 15"; - rLen = 0; - rLoc = 324; - rType = 0; - vrLen = 477; - vrLoc = 0; - }; - 1FA38C99124D341C004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 24"; - rLen = 0; - rLoc = 571; - rType = 0; - vrLen = 701; - vrLoc = 208; - }; - 1FA38C9A124D341C004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 39"; - rLen = 0; - rLoc = 1339; - rType = 0; - vrLen = 620; - vrLoc = 409; - }; - 1FA38C9B124D34F4004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 41"; - rLen = 0; - rLoc = 1312; - rType = 0; - vrLen = 655; - vrLoc = 409; - }; - 1FA38C9E124D3516004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 46"; - rLen = 0; - rLoc = 1334; - rType = 0; - vrLen = 662; - vrLoc = 449; - }; - 1FA38CA8124D3666004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 30"; - rLen = 0; - rLoc = 818; - rType = 0; - vrLen = 961; - vrLoc = 208; - }; - 1FA38CAB124D3695004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 28"; - rLen = 0; - rLoc = 625; - rType = 0; - vrLen = 1023; - vrLoc = 207; - }; - 1FA38CAF124D36B6004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 33"; - rLen = 0; - rLoc = 823; - rType = 0; - vrLen = 1079; - vrLoc = 207; - }; - 1FA38CB3124D3718004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 18"; - rLen = 0; - rLoc = 441; - rType = 0; - vrLen = 1108; - vrLoc = 207; - }; - 1FA38CB5124D3736004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 33"; - rLen = 0; - rLoc = 823; - rType = 0; - vrLen = 959; - vrLoc = 207; - }; - 1FA38CB8124D3793004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 32"; - rLen = 0; - rLoc = 818; - rType = 0; - vrLen = 1018; - vrLoc = 207; - }; - 1FA38CBB124D37B2004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 32"; - rLen = 0; - rLoc = 762; - rType = 0; - vrLen = 1029; - vrLoc = 207; - }; - 1FA38CBE124D3887004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 32"; - rLen = 0; - rLoc = 762; - rType = 0; - vrLen = 1029; - vrLoc = 207; - }; - 1FA38CBF124D3897004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 32"; - rLen = 0; - rLoc = 762; - rType = 0; - vrLen = 1004; - vrLoc = 207; - }; - 1FA38CC1124D38C2004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 33"; - rLen = 0; - rLoc = 818; - rType = 0; - vrLen = 1020; - vrLoc = 207; - }; - 1FA38CD8124D437C004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 23"; - rLen = 0; - rLoc = 482; - rType = 0; - vrLen = 360; - vrLoc = 208; - }; - 1FA38CD9124D437D004B8852 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; - name = "SpeakerAppDelegate.m: 30"; - rLen = 0; - rLoc = 662; - rType = 0; - vrLen = 1061; - vrLoc = 207; - }; 1FA38CDA124D437D004B8852 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 089C165DFE840E0CC02AAC07 /* English */; @@ -403,38 +65,125 @@ vrLen = 45; vrLoc = 0; }; - 1FA38CDB124D437D004B8852 /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 8D1107310486CEB800E47090 /* Speaker-Info.plist */; + 1FF67B3C12948FDE00CA07A3 /* SpeakerApplication.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {832, 812}}"; + sepNavSelRange = "{267, 0}"; + sepNavVisRange = "{0, 274}"; + }; }; - 1FA38CDC124D437D004B8852 /* PlistBookmark */ = { + 1FF67B3D12948FDE00CA07A3 /* SpeakerApplication.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {832, 915}}"; + sepNavSelRange = "{1382, 8}"; + sepNavVisRange = "{43, 1388}"; + }; + }; + 1FF67B481294919400CA07A3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3F00F4B6AF500CF3369 /* Speaker_Prefix.pch */; + name = "Speaker_Prefix.pch: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 145; + vrLoc = 0; + }; + 1FF67B491294919400CA07A3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 29B97316FDCFA39411CA2CEA /* main.m */; + name = "main.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 247; + vrLoc = 0; + }; + 1FF67B4A1294919400CA07A3 /* PlistBookmark */ = { isa = PlistBookmark; fRef = 8D1107310486CEB800E47090 /* Speaker-Info.plist */; fallbackIsa = PBXBookmark; isK = 0; kPath = ( - CFBundleIdentifier, + NSPrincipalClass, ); name = "/Users/jeena/Projects/Speaker/Speaker-Info.plist"; rLen = 0; rLoc = 9223372036854775807; }; + 1FF67B4B1294919400CA07A3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FF67B3C12948FDE00CA07A3 /* SpeakerApplication.h */; + name = "SpeakerApplication.h: 16"; + rLen = 0; + rLoc = 267; + rType = 0; + vrLen = 274; + vrLoc = 0; + }; + 1FF67BEC1294A39500CA07A3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FF67B3D12948FDE00CA07A3 /* SpeakerApplication.m */; + name = "SpeakerApplication.m: 55"; + rLen = 8; + rLoc = 1382; + rType = 0; + vrLen = 1388; + vrLoc = 43; + }; + 1FF67C0B1294A9BE00CA07A3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D80F4B6AC300CF3369 /* SpeakerAppDelegate.h */; + name = "SpeakerAppDelegate.h: 16"; + rLen = 0; + rLoc = 374; + rType = 0; + vrLen = 594; + vrLoc = 0; + }; + 1FF67C0C1294A9BE00CA07A3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; + name = "SpeakerAppDelegate.m: 58"; + rLen = 13; + rLoc = 1816; + rType = 0; + vrLen = 1672; + vrLoc = 1375; + }; + 1FF67C6B1294AEA400CA07A3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; + name = "SpeakerAppDelegate.m: 98"; + rLen = 0; + rLoc = 2838; + rType = 0; + vrLen = 1528; + vrLoc = 1736; + }; 256AC3D80F4B6AC300CF3369 /* SpeakerAppDelegate.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {519, 403}}"; - sepNavSelRange = "{324, 0}"; - sepNavVisRange = "{0, 477}"; + sepNavIntBoundsRect = "{{0, 0}, {832, 812}}"; + sepNavSelRange = "{374, 0}"; + sepNavVisRange = "{0, 594}"; }; }; 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {509, 930}}"; - sepNavSelRange = "{482, 0}"; - sepNavVisRange = "{208, 360}"; + sepNavIntBoundsRect = "{{0, 0}, {1160, 1710}}"; + sepNavSelRange = "{2838, 0}"; + sepNavVisRange = "{1736, 1528}"; + }; + }; + 256AC3F00F4B6AF500CF3369 /* Speaker_Prefix.pch */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {832, 835}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 145}"; }; }; 29B97313FDCFA39411CA2CEA /* Project object */ = { - activeBuildConfigurationName = Debug; + activeBuildConfigurationName = Release; activeExecutable = 1FA38C25124D2411004B8852 /* Speaker */; activeTarget = 8D1107260486CEB800E47090 /* Speaker */; addToTargets = ( @@ -450,9 +199,9 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 340, + 654, 20, - 48.16259765625, + 48, 43, 43, 20, @@ -467,53 +216,32 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 307045393; - PBXWorkspaceStateSaveDate = 307045393; + PBXPerProjectTemplateStateSaveDate = 311725270; + PBXWorkspaceStateSaveDate = 311725270; }; perUserProjectItems = { - 1FA38C56124D2CA0004B8852 /* XCBuildMessageTextBookmark */ = 1FA38C56124D2CA0004B8852 /* XCBuildMessageTextBookmark */; - 1FA38C57124D2CA0004B8852 /* PBXTextBookmark */ = 1FA38C57124D2CA0004B8852 /* PBXTextBookmark */; 1FA38C5E124D2CD6004B8852 /* PBXBookmark */ = 1FA38C5E124D2CD6004B8852 /* PBXBookmark */; - 1FA38C5F124D2CD6004B8852 /* PBXTextBookmark */ = 1FA38C5F124D2CD6004B8852 /* PBXTextBookmark */; - 1FA38C60124D2CD6004B8852 /* XCBuildMessageTextBookmark */ = 1FA38C60124D2CD6004B8852 /* XCBuildMessageTextBookmark */; - 1FA38C61124D2CD6004B8852 /* PBXTextBookmark */ = 1FA38C61124D2CD6004B8852 /* PBXTextBookmark */; - 1FA38C6D124D2D0C004B8852 /* PBXTextBookmark */ = 1FA38C6D124D2D0C004B8852 /* PBXTextBookmark */; - 1FA38C71124D2D1E004B8852 /* PBXTextBookmark */ = 1FA38C71124D2D1E004B8852 /* PBXTextBookmark */; - 1FA38C75124D2D34004B8852 /* PBXTextBookmark */ = 1FA38C75124D2D34004B8852 /* PBXTextBookmark */; - 1FA38C77124D2D5A004B8852 /* PBXTextBookmark */ = 1FA38C77124D2D5A004B8852 /* PBXTextBookmark */; - 1FA38C7A124D2DA5004B8852 /* PBXTextBookmark */ = 1FA38C7A124D2DA5004B8852 /* PBXTextBookmark */; - 1FA38C7F124D2DBB004B8852 /* PBXTextBookmark */ = 1FA38C7F124D2DBB004B8852 /* PBXTextBookmark */; - 1FA38C84124D2DCA004B8852 /* PBXTextBookmark */ = 1FA38C84124D2DCA004B8852 /* PBXTextBookmark */; - 1FA38C88124D2DE9004B8852 /* PBXTextBookmark */ = 1FA38C88124D2DE9004B8852 /* PBXTextBookmark */; - 1FA38C8F124D3162004B8852 /* PBXTextBookmark */ = 1FA38C8F124D3162004B8852 /* PBXTextBookmark */; - 1FA38C90124D3162004B8852 /* PBXTextBookmark */ = 1FA38C90124D3162004B8852 /* PBXTextBookmark */; - 1FA38C91124D3162004B8852 /* PBXTextBookmark */ = 1FA38C91124D3162004B8852 /* PBXTextBookmark */; - 1FA38C95124D31AD004B8852 /* PBXTextBookmark */ = 1FA38C95124D31AD004B8852 /* PBXTextBookmark */; - 1FA38C98124D341C004B8852 /* PBXTextBookmark */ = 1FA38C98124D341C004B8852 /* PBXTextBookmark */; - 1FA38C99124D341C004B8852 /* PBXTextBookmark */ = 1FA38C99124D341C004B8852 /* PBXTextBookmark */; - 1FA38C9A124D341C004B8852 /* PBXTextBookmark */ = 1FA38C9A124D341C004B8852 /* PBXTextBookmark */; - 1FA38C9B124D34F4004B8852 /* PBXTextBookmark */ = 1FA38C9B124D34F4004B8852 /* PBXTextBookmark */; - 1FA38C9E124D3516004B8852 /* PBXTextBookmark */ = 1FA38C9E124D3516004B8852 /* PBXTextBookmark */; - 1FA38CA8124D3666004B8852 /* PBXTextBookmark */ = 1FA38CA8124D3666004B8852 /* PBXTextBookmark */; - 1FA38CAB124D3695004B8852 /* PBXTextBookmark */ = 1FA38CAB124D3695004B8852 /* PBXTextBookmark */; - 1FA38CAF124D36B6004B8852 /* PBXTextBookmark */ = 1FA38CAF124D36B6004B8852 /* PBXTextBookmark */; - 1FA38CB3124D3718004B8852 /* PBXTextBookmark */ = 1FA38CB3124D3718004B8852 /* PBXTextBookmark */; - 1FA38CB5124D3736004B8852 /* PBXTextBookmark */ = 1FA38CB5124D3736004B8852 /* PBXTextBookmark */; - 1FA38CB8124D3793004B8852 /* PBXTextBookmark */ = 1FA38CB8124D3793004B8852 /* PBXTextBookmark */; - 1FA38CBB124D37B2004B8852 /* PBXTextBookmark */ = 1FA38CBB124D37B2004B8852 /* PBXTextBookmark */; - 1FA38CBE124D3887004B8852 /* PBXTextBookmark */ = 1FA38CBE124D3887004B8852 /* PBXTextBookmark */; - 1FA38CBF124D3897004B8852 /* PBXTextBookmark */ = 1FA38CBF124D3897004B8852 /* PBXTextBookmark */; - 1FA38CC1124D38C2004B8852 /* PBXTextBookmark */ = 1FA38CC1124D38C2004B8852 /* PBXTextBookmark */; - 1FA38CD8124D437C004B8852 /* PBXTextBookmark */ = 1FA38CD8124D437C004B8852 /* PBXTextBookmark */; - 1FA38CD9124D437D004B8852 /* PBXTextBookmark */ = 1FA38CD9124D437D004B8852 /* PBXTextBookmark */; 1FA38CDA124D437D004B8852 /* PBXTextBookmark */ = 1FA38CDA124D437D004B8852 /* PBXTextBookmark */; - 1FA38CDB124D437D004B8852 /* PBXBookmark */ = 1FA38CDB124D437D004B8852 /* PBXBookmark */; - 1FA38CDC124D437D004B8852 /* PlistBookmark */ = 1FA38CDC124D437D004B8852 /* PlistBookmark */; + 1FF67B481294919400CA07A3 /* PBXTextBookmark */ = 1FF67B481294919400CA07A3 /* PBXTextBookmark */; + 1FF67B491294919400CA07A3 /* PBXTextBookmark */ = 1FF67B491294919400CA07A3 /* PBXTextBookmark */; + 1FF67B4A1294919400CA07A3 /* PlistBookmark */ = 1FF67B4A1294919400CA07A3 /* PlistBookmark */; + 1FF67B4B1294919400CA07A3 /* PBXTextBookmark */ = 1FF67B4B1294919400CA07A3 /* PBXTextBookmark */; + 1FF67BEC1294A39500CA07A3 /* PBXTextBookmark */ = 1FF67BEC1294A39500CA07A3 /* PBXTextBookmark */; + 1FF67C0B1294A9BE00CA07A3 /* PBXTextBookmark */ = 1FF67C0B1294A9BE00CA07A3 /* PBXTextBookmark */; + 1FF67C0C1294A9BE00CA07A3 /* PBXTextBookmark */ = 1FF67C0C1294A9BE00CA07A3 /* PBXTextBookmark */; + 1FF67C6B1294AEA400CA07A3 /* PBXTextBookmark */ = 1FF67C6B1294AEA400CA07A3 /* PBXTextBookmark */; }; sourceControlManager = 1FA38C37124D2426004B8852 /* Source Control */; userBuildSettings = { }; }; + 29B97316FDCFA39411CA2CEA /* main.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {832, 835}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 247}"; + }; + }; 8D1107260486CEB800E47090 /* Speaker */ = { activeExec = 0; executables = ( diff --git a/Speaker.xcodeproj/project.pbxproj b/Speaker.xcodeproj/project.pbxproj index fe7b9b2..ad9d641 100644 --- a/Speaker.xcodeproj/project.pbxproj +++ b/Speaker.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 1FA38C49124D27C8004B8852 /* play-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 1FA38C48124D27C8004B8852 /* play-icon.png */; }; 1FA38CD3124D4349004B8852 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1FA38CD2124D4349004B8852 /* Icon.icns */; }; + 1FF67B3E12948FDE00CA07A3 /* SpeakerApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF67B3D12948FDE00CA07A3 /* SpeakerApplication.m */; }; 256AC3DA0F4B6AC300CF3369 /* SpeakerAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; @@ -23,6 +24,8 @@ 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 1FA38C48124D27C8004B8852 /* play-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "play-icon.png"; sourceTree = ""; }; 1FA38CD2124D4349004B8852 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = ""; }; + 1FF67B3C12948FDE00CA07A3 /* SpeakerApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeakerApplication.h; sourceTree = ""; }; + 1FF67B3D12948FDE00CA07A3 /* SpeakerApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpeakerApplication.m; sourceTree = ""; }; 256AC3D80F4B6AC300CF3369 /* SpeakerAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeakerAppDelegate.h; sourceTree = ""; }; 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpeakerAppDelegate.m; sourceTree = ""; }; 256AC3F00F4B6AF500CF3369 /* Speaker_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Speaker_Prefix.pch; sourceTree = ""; }; @@ -50,6 +53,8 @@ children = ( 256AC3D80F4B6AC300CF3369 /* SpeakerAppDelegate.h */, 256AC3D90F4B6AC300CF3369 /* SpeakerAppDelegate.m */, + 1FF67B3C12948FDE00CA07A3 /* SpeakerApplication.h */, + 1FF67B3D12948FDE00CA07A3 /* SpeakerApplication.m */, ); name = Classes; sourceTree = ""; @@ -188,6 +193,7 @@ files = ( 8D11072D0486CEB800E47090 /* main.m in Sources */, 256AC3DA0F4B6AC300CF3369 /* SpeakerAppDelegate.m in Sources */, + 1FF67B3E12948FDE00CA07A3 /* SpeakerApplication.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/SpeakerAppDelegate.h b/SpeakerAppDelegate.h index 1974f6b..02993f1 100644 --- a/SpeakerAppDelegate.h +++ b/SpeakerAppDelegate.h @@ -8,16 +8,19 @@ #import -@interface SpeakerAppDelegate : NSObject { +@interface SpeakerAppDelegate : NSObject { NSWindow *window; NSTextView *textView; NSSpeechSynthesizer *synth; NSRange oldRange; + BOOL isNewLocation; } @property (assign) IBOutlet NSWindow *window; @property (retain, nonatomic) IBOutlet NSTextView *textView; -(IBAction)speakAction:(id)sender; +-(IBAction)seekForward:(id)sender; +-(IBAction)seekBack:(id)sender; @end diff --git a/SpeakerAppDelegate.m b/SpeakerAppDelegate.m index 050cf10..f057897 100644 --- a/SpeakerAppDelegate.m +++ b/SpeakerAppDelegate.m @@ -15,16 +15,39 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application synth = [[NSSpeechSynthesizer alloc] init]; + synth.delegate = self; oldRange = NSMakeRange(-1, -1); + isNewLocation = YES; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *string = [defaults objectForKey:@"text"]; + if (string) { + NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:string]; + [[textView textStorage] setAttributedString:attributedString]; + [attributedString release]; + NSRange aRange = NSMakeRange([defaults integerForKey:@"startLocation"], 0); + [textView setSelectedRange:aRange]; + [textView scrollRangeToVisible:aRange]; + } +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setInteger:[textView selectedRange].location forKey:@"startLocation"]; + [defaults setObject:[[textView textStorage] string] forKey:@"text"]; + [defaults synchronize]; } -(IBAction)speakAction:(id)sender { - if ([synth isSpeaking]) { [synth pauseSpeakingAtBoundary:NSSpeechWordBoundary]; + [textView setEditable:YES]; } else { + + [textView setEditable:NO]; + NSRange range = [textView selectedRange]; if (range.location == [[[textView textStorage] string] length]) { @@ -33,7 +56,8 @@ [textView scrollRangeToVisible:NSMakeRange(0,0)]; } - if (range.length != oldRange.length || range.location != oldRange.location) { + if (range.length != oldRange.length || range.location != oldRange.location || isNewLocation) { + isNewLocation = NO; NSString *wholeText = [[textView textStorage] string]; NSString *text = nil; @@ -50,10 +74,40 @@ } else { [synth continueSpeaking]; - + } } } +-(IBAction)seekForward:(id)sender { + // not working yet + /* + [self speakAction:self]; + NSRange selected = [textView selectedRange]; + NSString *wholeText = [[textView textStorage] string]; + NSRange position = [wholeText rangeOfString:@". " options:NSLiteralSearch range:NSMakeRange(selected.location + 1, [wholeText length] - selected.location - 1)]; + [textView setSelectedRange:NSMakeRange(position.location + 2, 0)]; + isNewLocation = YES; + NSLog(@"sp %i", [synth isSpeaking]); + [self speakAction:self]; + */ +} + +-(IBAction)seekBack:(id)sender { + +} + +- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender willSpeakWord:(NSRange)wordToSpeak ofString:(NSString *)text { + NSRange range = NSMakeRange(oldRange.location + wordToSpeak.location, wordToSpeak.length); + [textView scrollRangeToVisible:range]; + [textView setSelectedRange:NSMakeRange(range.location, 0)]; + [textView showFindIndicatorForRange:range]; +} + +- (void)dealloc { + [synth release]; + [super dealloc]; +} + @end diff --git a/SpeakerApplication.h b/SpeakerApplication.h new file mode 100644 index 0000000..7b61114 --- /dev/null +++ b/SpeakerApplication.h @@ -0,0 +1,18 @@ +// +// SpeakerApplication.h +// Speaker +// +// Created by Jeena on 17.11.10. +// Copyright 2010 __MyCompanyName__. All rights reserved. +// + +#import + + +@interface SpeakerApplication : NSApplication { + +} + +- (void)mediaKeyEvent:(int)key state:(BOOL)state; + +@end diff --git a/SpeakerApplication.m b/SpeakerApplication.m new file mode 100644 index 0000000..ea2c0cc --- /dev/null +++ b/SpeakerApplication.m @@ -0,0 +1,60 @@ +// +// SpeakerApplication.m +// Speaker +// +// Created by Jeena on 17.11.10. +// Copyright 2010 __MyCompanyName__. All rights reserved. +// + +// from http://www.rogueamoeba.com/utm/2007/09/29/ + +#import "SpeakerApplication.h" +#import +#import "SpeakerAppDelegate.h" + + +@implementation SpeakerApplication + +- (void)sendEvent:(NSEvent *)event +{ + // Catch media key events + if ([event type] == NSSystemDefined && [event subtype] == 8) + { + int keyCode = (([event data1] & 0xFFFF0000) >> 16); + int keyFlags = ([event data1] & 0x0000FFFF); + int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA; + + // Process the media key event and return + [self mediaKeyEvent:keyCode state:keyState]; + return; + } + + // Continue on to super + [super sendEvent:event]; +} + +- (void)mediaKeyEvent:(int)key state:(BOOL)state +{ + switch (key) + { + // Play pressed + case NX_KEYTYPE_PLAY: + if (state == NO) + [(SpeakerAppDelegate *)[self delegate] speakAction:self]; + break; + + // Rewind + case NX_KEYTYPE_FAST: + if (state == YES) + [(SpeakerAppDelegate *)[self delegate] seekForward:self]; + break; + + // Previous + case NX_KEYTYPE_REWIND: + if (state == YES) + [(SpeakerAppDelegate *)[self delegate] seekBack:self]; + break; + } +} + +@end