From c854b97b290b97319dd8a030ba35c90c98a57a38 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Thu, 1 Dec 2011 16:01:42 +0100 Subject: [PATCH] added possibility to choose Voice --- .DS_Store | Bin 0 -> 6148 bytes English.lproj/MainMenu.xib | 747 ++++++++++-------- .../UserInterfaceState.xcuserstate | Bin 163428 -> 18514 bytes .../WorkspaceSettings.xcsettings | 10 + SpeakerAppDelegate.h | 7 + SpeakerAppDelegate.m | 54 ++ 6 files changed, 479 insertions(+), 339 deletions(-) create mode 100644 .DS_Store create mode 100644 Speaker.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/WorkspaceSettings.xcsettings diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0519ed2721e037801e4af81ad8bf921a19e0ad05 GIT binary patch literal 6148 zcmeHKJ5Iwu5PeHhM4|~D<(5=P++Y{R)oDx6$*p` ze@cNgZQ5qRSMuIEdO7K}nSM$CG}dZ4gSKL#wqh=%6`$_ZWx3}4;y4&8oq44b<3~Vr K2@3^&LxB$`BqW~z literal 0 HcmV?d00001 diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 3d6f8c0..a1b57a1 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -2,28 +2,31 @@ 1060 - 10J869 - 1305 - 1038.35 - 461.00 + 11C74 + 1938 + 1138.23 + 567.00 com.apple.InterfaceBuilder.CocoaPlugin - 1305 + 1938 YES + NSUserDefaultsController NSToolbar NSToolbarFlexibleSpaceItem NSScroller NSMenuItem NSMenu NSScrollView + NSPopUpButton NSToolbarSpaceItem NSToolbarSeparatorItem NSCustomObject NSTextView NSView NSWindowTemplate + NSPopUpButtonCell NSToolbarItem @@ -1307,7 +1310,7 @@ 15 2 - {{335, 379}, {500, 371}} + {{335, 379}, {595, 351}} 1954021376 Speaker NSWindow @@ -1326,6 +1329,7 @@ YES YES + BB31836C-C94C-4C54-B51B-8C9C9A2D1280 F9630DDC-8BED-4CAE-A33B-D8608E977FA3 NSToolbarCustomizeToolbarItem NSToolbarFlexibleSpaceItem @@ -1336,6 +1340,98 @@ YES + + + BB31836C-C94C-4C54-B51B-8C9C9A2D1280 + + Language + Language + + + + 268 + {{0, 14}, {264, 25}} + + + _NS:868 + YES + + -2080244160 + 2048 + + LucidaGrande + 13 + 1044 + + _NS:868 + + -2038284033 + 163 + + + 400 + 75 + + + Item 1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + Item 2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item 3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + -1 + 1 + YES + YES + 2 + + + + + + {100, 25} + {264, 25} + YES + YES + 0 + YES + 0 + F9630DDC-8BED-4CAE-A33B-D8608E977FA3 @@ -1440,7 +1536,7 @@ NSImage - NSToolbarShowColorsItemImage + NSToolbarShowColors orderFrontColorPanel: @@ -1460,7 +1556,7 @@ NSImage - NSToolbarShowFontsItemImage + NSToolbarShowFonts orderFrontFontPanel: @@ -1501,7 +1597,7 @@ - + YES @@ -1510,6 +1606,7 @@ + YES @@ -1517,14 +1614,15 @@ - + - + YES + - + 256 YES @@ -1564,8 +1662,10 @@ public.url - {485, 133} + {595, 42} + + @@ -1582,7 +1682,7 @@ - 485 + 595 1 @@ -1645,29 +1745,55 @@ + + 1 6 - {487, 1e+07} - {223, 133} + {609, 10000000} + {223, 42} - {{1, 1}, {485, 371}} + {{1, 1}, {595, 351}} + - {4, -5} - 1 + {4, 5} + + 12582912 + + YES + + YES + + + + TU0AKgAAAHCAFUqgBVKsAAAAwdVQUqwaEQeIRGJRGFlYqwWLQ+JxuOQpVRmEx2RROKwOQyOUQSPyaUym +SxqWyKXyeYxyZzWbSuJTScRCbz2Nz+gRKhUOfTqeUai0OSxiWTiBQSHSGFquGwekxyAgAAAOAQAAAwAA +AAEAEAAAAQEAAwAAAAEAEAAAAQIAAwAAAAIACAAIAQMAAwAAAAEABQAAAQYAAwAAAAEAAQAAAREABAAA +AAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEAAgAAARYAAwAAAAEAEAAAARcABAAAAAEAAABnARwAAwAA +AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + + + + + + 3 + MCAwAA + + 4 256 - {{486, 1}, {15, 356}} + {{581, 1}, {15, 351}} + _doScroller: 0.99248120300751874 @@ -1677,6 +1803,8 @@ -2147483392 {{-100, -100}, {87, 18}} + + 1 _doScroller: @@ -1684,20 +1812,25 @@ 0.94565218687057495 - {{-1, -1}, {502, 373}} + {{-1, -1}, {597, 353}} - - 18 + + + 133138 - {500, 371} + {595, 351} + + + - {{0, 0}, {1920, 1178}} - {1e+13, 1e+13} + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} SpeakerWindow + YES SpeakerAppDelegate @@ -1705,10 +1838,40 @@ NSFontManager + + YES + + + NSSpeechSynthesizer + YES + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + performMiniaturize: @@ -1749,14 +1912,6 @@ 127 - - - orderFrontStandardAboutPanel: - - - - 142 - performClose: @@ -1973,46 +2128,6 @@ 374 - - - addFontTrait: - - - - 421 - - - - addFontTrait: - - - - 422 - - - - modifyFont: - - - - 423 - - - - orderFrontFontPanel: - - - - 424 - - - - modifyFont: - - - - 425 - raiseBaseline: @@ -2141,14 +2256,6 @@ 441 - - - terminate: - - - - 449 - toggleAutomaticSpellingCorrection: @@ -2245,14 +2352,6 @@ 493 - - - delegate - - - - 495 - alignCenter: @@ -2357,6 +2456,46 @@ 530 + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + window @@ -2389,15 +2528,37 @@ 557 + + + changeLanguage: + + + + 577 + + + + languageMenu + + + + 579 + + + + languageMenuPopupButton + + + + 588 + YES 0 - - YES - + @@ -3432,6 +3593,7 @@ + @@ -3501,150 +3663,141 @@ + + 564 + + + YES + + + + + + 558 + + + YES + + + + + + 559 + + + YES + + + + + + 560 + + + YES + + + + + + + + 563 + + + + + 562 + + + + + 561 + + + + + 580 + + + + + 582 + + + YES YES + -1.IBPluginDependency + -2.IBPluginDependency -3.IBPluginDependency 124.IBPluginDependency - 124.ImportedFromIB2 125.IBPluginDependency - 125.ImportedFromIB2 - 125.editorWindowContentRectSynchronizationRect 126.IBPluginDependency - 126.ImportedFromIB2 129.IBPluginDependency - 129.ImportedFromIB2 130.IBPluginDependency - 130.ImportedFromIB2 - 130.editorWindowContentRectSynchronizationRect 131.IBPluginDependency - 131.ImportedFromIB2 134.IBPluginDependency - 134.ImportedFromIB2 136.IBPluginDependency - 136.ImportedFromIB2 143.IBPluginDependency - 143.ImportedFromIB2 144.IBPluginDependency - 144.ImportedFromIB2 145.IBPluginDependency - 145.ImportedFromIB2 149.IBPluginDependency - 149.ImportedFromIB2 150.IBPluginDependency - 150.ImportedFromIB2 19.IBPluginDependency - 19.ImportedFromIB2 195.IBPluginDependency - 195.ImportedFromIB2 196.IBPluginDependency - 196.ImportedFromIB2 197.IBPluginDependency - 197.ImportedFromIB2 198.IBPluginDependency - 198.ImportedFromIB2 199.IBPluginDependency - 199.ImportedFromIB2 - 200.IBEditorWindowLastContentRect 200.IBPluginDependency - 200.ImportedFromIB2 - 200.editorWindowContentRectSynchronizationRect 201.IBPluginDependency - 201.ImportedFromIB2 202.IBPluginDependency - 202.ImportedFromIB2 203.IBPluginDependency - 203.ImportedFromIB2 204.IBPluginDependency - 204.ImportedFromIB2 - 205.IBEditorWindowLastContentRect 205.IBPluginDependency - 205.ImportedFromIB2 - 205.editorWindowContentRectSynchronizationRect 206.IBPluginDependency - 206.ImportedFromIB2 207.IBPluginDependency - 207.ImportedFromIB2 208.IBPluginDependency - 208.ImportedFromIB2 209.IBPluginDependency - 209.ImportedFromIB2 210.IBPluginDependency - 210.ImportedFromIB2 211.IBPluginDependency - 211.ImportedFromIB2 212.IBPluginDependency - 212.ImportedFromIB2 - 212.editorWindowContentRectSynchronizationRect 213.IBPluginDependency - 213.ImportedFromIB2 214.IBPluginDependency - 214.ImportedFromIB2 215.IBPluginDependency - 215.ImportedFromIB2 216.IBPluginDependency - 216.ImportedFromIB2 217.IBPluginDependency - 217.ImportedFromIB2 218.IBPluginDependency - 218.ImportedFromIB2 219.IBPluginDependency - 219.ImportedFromIB2 - 220.IBEditorWindowLastContentRect 220.IBPluginDependency - 220.ImportedFromIB2 - 220.editorWindowContentRectSynchronizationRect 221.IBPluginDependency - 221.ImportedFromIB2 23.IBPluginDependency - 23.ImportedFromIB2 236.IBPluginDependency - 236.ImportedFromIB2 239.IBPluginDependency - 239.ImportedFromIB2 - 24.IBEditorWindowLastContentRect 24.IBPluginDependency - 24.ImportedFromIB2 - 24.editorWindowContentRectSynchronizationRect - 29.IBEditorWindowLastContentRect 29.IBPluginDependency - 29.ImportedFromIB2 - 29.WindowOrigin - 29.editorWindowContentRectSynchronizationRect 295.IBPluginDependency - 296.IBEditorWindowLastContentRect 296.IBPluginDependency - 296.editorWindowContentRectSynchronizationRect 297.IBPluginDependency 298.IBPluginDependency 346.IBPluginDependency - 346.ImportedFromIB2 348.IBPluginDependency - 348.ImportedFromIB2 - 349.IBEditorWindowLastContentRect 349.IBPluginDependency - 349.ImportedFromIB2 - 349.editorWindowContentRectSynchronizationRect 350.IBPluginDependency - 350.ImportedFromIB2 351.IBPluginDependency - 351.ImportedFromIB2 354.IBPluginDependency - 354.ImportedFromIB2 - 371.IBEditorWindowLastContentRect 371.IBPluginDependency 371.IBWindowTemplateEditedContentRect 371.NSWindowTemplate.visibleAtLaunch - 371.editorWindowContentRectSynchronizationRect 372.IBPluginDependency 375.IBPluginDependency - 376.IBEditorWindowLastContentRect 376.IBPluginDependency 377.IBPluginDependency - 388.IBEditorWindowLastContentRect 388.IBPluginDependency 389.IBPluginDependency 390.IBPluginDependency @@ -3677,8 +3830,8 @@ 417.IBPluginDependency 418.IBPluginDependency 419.IBPluginDependency + 420.IBPluginDependency 450.IBPluginDependency - 451.IBEditorWindowLastContentRect 451.IBPluginDependency 452.IBPluginDependency 453.IBPluginDependency @@ -3691,16 +3844,14 @@ 466.IBPluginDependency 485.IBPluginDependency 490.IBPluginDependency - 491.IBEditorWindowLastContentRect 491.IBPluginDependency 492.IBPluginDependency + 494.IBPluginDependency 496.IBPluginDependency - 497.IBEditorWindowLastContentRect 497.IBPluginDependency 498.IBPluginDependency 499.IBPluginDependency 5.IBPluginDependency - 5.ImportedFromIB2 500.IBPluginDependency 501.IBPluginDependency 502.IBPluginDependency @@ -3709,7 +3860,6 @@ 505.IBPluginDependency 506.IBPluginDependency 507.IBPluginDependency - 508.IBEditorWindowLastContentRect 508.IBPluginDependency 509.IBPluginDependency 510.IBPluginDependency @@ -3720,7 +3870,6 @@ 515.IBPluginDependency 516.IBPluginDependency 517.IBPluginDependency - 533.IBEditorWindowLastContentRect 533.IBPluginDependency 534.IBPluginDependency 535.IBPluginDependency @@ -3734,179 +3883,98 @@ 548.IBPluginDependency 550.IBPluginDependency 550.toolbarItem.selectable + 558.IBPluginDependency + 559.IBPluginDependency 56.IBPluginDependency - 56.ImportedFromIB2 - 57.IBEditorWindowLastContentRect + 560.IBPluginDependency + 561.IBPluginDependency + 562.IBPluginDependency + 563.IBPluginDependency + 564.IBPluginDependency 57.IBPluginDependency - 57.ImportedFromIB2 - 57.editorWindowContentRectSynchronizationRect 58.IBPluginDependency - 58.ImportedFromIB2 + 580.IBPluginDependency + 582.IBPluginDependency 72.IBPluginDependency - 72.ImportedFromIB2 73.IBPluginDependency - 73.ImportedFromIB2 74.IBPluginDependency - 74.ImportedFromIB2 75.IBPluginDependency - 75.ImportedFromIB2 77.IBPluginDependency - 77.ImportedFromIB2 78.IBPluginDependency - 78.ImportedFromIB2 79.IBPluginDependency - 79.ImportedFromIB2 - 81.IBEditorWindowLastContentRect 81.IBPluginDependency - 81.ImportedFromIB2 - 81.editorWindowContentRectSynchronizationRect 82.IBPluginDependency - 82.ImportedFromIB2 83.IBPluginDependency - 83.ImportedFromIB2 92.IBPluginDependency - 92.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{522, 812}, {146, 23}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{436, 809}, {64, 6}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{753, 187}, {275, 113}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {275, 83}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{547, 180}, {254, 283}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{187, 434}, {243, 243}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {167, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{753, 217}, {238, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {241, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{654, 239}, {194, 73}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{525, 802}, {197, 73}} - {{452, 1099}, {422, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - - {74, 862} - {{6, 978}, {478, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - {{604, 269}, {231, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - {{475, 832}, {234, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{746, 287}, {220, 133}} com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {215, 63}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{422, 131}, {500, 371}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{422, 131}, {500, 371}} - {{33, 99}, {480, 360}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{626, 1056}, {83, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{709, 816}, {175, 283}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3940,7 +4008,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{753, 197}, {170, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3953,16 +4020,13 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{725, 289}, {246, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{674, 260}, {204, 183}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3971,7 +4035,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{878, 180}, {164, 173}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3982,7 +4045,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{521, 502}, {616, 0}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3997,37 +4061,28 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - {{286, 129}, {275, 183}} com.apple.InterfaceBuilder.CocoaPlugin - - {{23, 794}, {245, 183}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{452, 109}, {196, 203}} com.apple.InterfaceBuilder.CocoaPlugin - - {{145, 474}, {199, 203}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -4042,7 +4097,7 @@ - 557 + 588 @@ -4160,11 +4215,15 @@ YES YES + languageMenu + languageMenuPopupButton textView window YES + NSMenu + NSPopUpButton NSTextView NSWindow @@ -4173,11 +4232,21 @@ YES YES + languageMenu + languageMenuPopupButton textView window YES + + languageMenu + NSMenu + + + languageMenuPopupButton + NSPopUpButton + textView NSTextView @@ -4214,8 +4283,8 @@ NSMenuCheckmark NSMenuMixedState NSToolbarCustomizeToolbarItemImage - NSToolbarShowColorsItemImage - NSToolbarShowFontsItemImage + NSToolbarShowColors + NSToolbarShowFonts play-icon diff --git a/Speaker.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate b/Speaker.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate index 73535aa7a639425bb80eee4d6c95e6e6468e5c05..b441697cc02313a23107e262d309c5880d470e7b 100644 GIT binary patch literal 18514 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 literal 163428 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 diff --git a/Speaker.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/WorkspaceSettings.xcsettings b/Speaker.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..6ff33e6 --- /dev/null +++ b/Speaker.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + IDEWorkspaceUserSettings_HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + IDEWorkspaceUserSettings_SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/SpeakerAppDelegate.h b/SpeakerAppDelegate.h index bc19474..0e3d144 100644 --- a/SpeakerAppDelegate.h +++ b/SpeakerAppDelegate.h @@ -11,6 +11,8 @@ @interface SpeakerAppDelegate : NSObject { NSWindow *window; NSTextView *textView; + NSMenu *languageMenu; + NSPopUpButton *languageMenuPopupButton; NSSpeechSynthesizer *synth; NSRange oldRange; BOOL isNewLocation; @@ -18,6 +20,8 @@ @property (assign) IBOutlet NSWindow *window; @property (retain, nonatomic) IBOutlet NSTextView *textView; +@property (assign) IBOutlet NSMenu *languageMenu; +@property (assign) IBOutlet NSPopUpButton *languageMenuPopupButton; -(IBAction)speakAction:(id)sender; -(IBAction)seekForward:(id)sender; @@ -26,4 +30,7 @@ -(void)stopSpeaking; -(void)startSpeaking; +- (void)changeLanguage:(id)sender; +- (void)changeVoiceGender:(id)sender; + @end diff --git a/SpeakerAppDelegate.m b/SpeakerAppDelegate.m index 7f88cb7..381c3b1 100644 --- a/SpeakerAppDelegate.m +++ b/SpeakerAppDelegate.m @@ -8,7 +8,13 @@ #import "SpeakerAppDelegate.h" +@interface SpeakerAppDelegate (private) +- (void)initLanugageMenu; +@end + @implementation SpeakerAppDelegate +@synthesize languageMenu; +@synthesize languageMenuPopupButton; @synthesize window, textView; @@ -29,6 +35,49 @@ [textView setSelectedRange:aRange]; [textView scrollRangeToVisible:aRange]; } + + [self initLanugageMenu]; +} + +- (void)initLanugageMenu +{ + NSInteger start = [[NSUserDefaults standardUserDefaults] integerForKey:@"languageVoiceIndex"]; + + NSLocale *currentLocale = [NSLocale currentLocale]; + NSArray *voices = [NSSpeechSynthesizer availableVoices]; + + [self.languageMenu removeAllItems]; + for (NSInteger i = 0; i < [voices count]; i++) + { + NSDictionary *dict = [NSSpeechSynthesizer attributesForVoice:[voices objectAtIndex:i]]; + if (i == 0) { + NSLog(@"%@", dict); + } + + NSString *country = [currentLocale displayNameForKey:NSLocaleIdentifier value:[dict objectForKey:@"VoiceLocaleIdentifier"]]; + + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"%@ - %@", country, [dict objectForKey:@"VoiceName"]] action:@selector(changeLanguage:) keyEquivalent:@""]; + item.tag = i; + [self.languageMenu addItem:item]; + [item release]; + + if (![[NSUserDefaults standardUserDefaults] objectForKey:@"languageVoiceIndex"] && [[dict objectForKey:@"VoiceName"] isEqualToString:@"Alex"]) + { + start = i; + } + } + + [self.languageMenuPopupButton selectItemAtIndex:start]; +} + +- (void)changeLanguage:(id)sender +{ + NSInteger index = [(NSMenuItem *)sender tag]; + NSString *voice = [[NSSpeechSynthesizer attributesForVoice:[[NSSpeechSynthesizer availableVoices] objectAtIndex:index]] objectForKey:@"VoiceIdentifier"]; + [synth setVoice:voice]; + [[NSUserDefaults standardUserDefaults] setInteger:index forKey:@"languageVoiceIndex"]; + + [self.languageMenuPopupButton selectItemAtIndex:index]; } - (void)applicationWillTerminate:(NSNotification *)aNotification { @@ -103,6 +152,11 @@ [textView display]; } +- (void)changeVoiceGender:(id)sender +{ + +} + - (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)success { [textView setEditable:YES]; }