Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/Classes/MetronomeSettingsPanelController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 169 - (show annotations) (download)
Sun Oct 27 01:45:31 2019 UTC (4 years, 7 months ago) by toshinagata1964
File size: 8658 byte(s)
Behavior of the split view of the graphic window is fixed
1 //
2 // MetronomeSettingsPanelController.m
3 // Alchemusica
4 //
5 // Created by Toshi Nagata on 11/08/29.
6 // Copyright 2011-2016 Toshi Nagata. All rights reserved.
7 //
8 /*
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation version 2 of the License.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 */
18
19 #import "MetronomeSettingsPanelController.h"
20 #import "MyAppController.h"
21
22 #include "MDHeaders.h"
23
24 NSString
25 *MetronomeDeviceKey = @"metronome.device",
26 *MetronomeChannelKey = @"metronome.channel",
27 *MetronomeNote1Key = @"metronome.note1",
28 *MetronomeNote2Key = @"metronome.note2",
29 *MetronomeVelocity1Key = @"metronome.velocity1",
30 *MetronomeVelocity2Key = @"metronome.velocity2",
31 *MetronomeEnableWhenPlayKey = @"metronome.enableWhenPlay",
32 *MetronomeEnableWhenRecordKey = @"metronome.enableWhenRecord";
33
34 static id sharedMetronomeSettingsPanelController;
35
36 @implementation MetronomeSettingsPanelController
37
38 + (void)initializeMetronomeSettings
39 {
40 /* Initialize the global metronome settings */
41 id obj;
42 obj = MyAppCallback_getObjectGlobalSettings(MetronomeDeviceKey);
43 if (obj != nil)
44 gMetronomeInfo.dev = MDPlayerGetDestinationNumberFromName([obj UTF8String]);
45 else gMetronomeInfo.dev = -1;
46 obj = MyAppCallback_getObjectGlobalSettings(MetronomeChannelKey);
47 if (obj == nil) {
48 obj = [NSNumber numberWithInt:0];
49 MyAppCallback_setObjectGlobalSettings(MetronomeChannelKey, obj);
50 }
51 gMetronomeInfo.channel = [obj intValue] % 16;
52 obj = MyAppCallback_getObjectGlobalSettings(MetronomeNote1Key);
53 if (obj == nil) {
54 obj = [NSNumber numberWithInt:64];
55 MyAppCallback_setObjectGlobalSettings(MetronomeNote1Key, obj);
56 }
57 gMetronomeInfo.note1 = [obj intValue] % 128;
58 obj = MyAppCallback_getObjectGlobalSettings(MetronomeNote2Key);
59 if (obj == nil) {
60 obj = [NSNumber numberWithInt:60];
61 MyAppCallback_setObjectGlobalSettings(MetronomeNote2Key, obj);
62 }
63 gMetronomeInfo.note2 = [obj intValue] % 128;
64 obj = MyAppCallback_getObjectGlobalSettings(MetronomeVelocity1Key);
65 if (obj == nil) {
66 obj = [NSNumber numberWithInt:127];
67 MyAppCallback_setObjectGlobalSettings(MetronomeVelocity1Key, obj);
68 }
69 gMetronomeInfo.vel1 = [obj intValue] % 128;
70 obj = MyAppCallback_getObjectGlobalSettings(MetronomeVelocity2Key);
71 if (obj == nil) {
72 obj = [NSNumber numberWithInt:127];
73 MyAppCallback_setObjectGlobalSettings(MetronomeVelocity2Key, obj);
74 }
75 gMetronomeInfo.vel2 = [obj intValue] % 128;
76 obj = MyAppCallback_getObjectGlobalSettings(MetronomeEnableWhenPlayKey);
77 if (obj == nil) {
78 obj = [NSNumber numberWithBool:NO];
79 MyAppCallback_setObjectGlobalSettings(MetronomeEnableWhenPlayKey, obj);
80 }
81 gMetronomeInfo.enableWhenPlay = [obj boolValue];
82 obj = MyAppCallback_getObjectGlobalSettings(MetronomeEnableWhenRecordKey);
83 if (obj == nil) {
84 obj = [NSNumber numberWithBool:YES];
85 MyAppCallback_setObjectGlobalSettings(MetronomeEnableWhenRecordKey, obj);
86 }
87 gMetronomeInfo.enableWhenRecord = [obj boolValue];
88 gMetronomeInfo.duration = 80000;
89 MyAppCallback_saveGlobalSettings();
90 }
91
92 + (void)openMetronomeSettingsPanel
93 {
94 if (sharedMetronomeSettingsPanelController == nil) {
95 sharedMetronomeSettingsPanelController = [[MetronomeSettingsPanelController alloc] initWithWindowNibName: @"MetronomeSettingsPanel"];
96 }
97 [[sharedMetronomeSettingsPanelController window] makeKeyAndOrderFront: nil];
98 }
99
100
101 - (void)updateMIDIDevicePopUp
102 {
103 NSMenu *menu;
104 int i, n;
105 char name[256];
106 [metronomeDevicePopUp removeAllItems];
107 menu = [metronomeDevicePopUp menu];
108 n = MDPlayerGetNumberOfDestinations();
109 for (i = 0; i <= n; i++) {
110 if (i == 0)
111 strcpy(name, "(none)");
112 else
113 MDPlayerGetDestinationName(i - 1, name, sizeof name);
114 [[menu addItemWithTitle: [NSString stringWithUTF8String: name] action: nil keyEquivalent: @""] setTag: i];
115 }
116 }
117
118 - (void)updateDisplay
119 {
120 int i, ival;
121 id obj;
122 obj = MyAppCallback_getObjectGlobalSettings(MetronomeDeviceKey);
123 [metronomeDevicePopUp selectItemWithTitle: obj];
124 if (obj)
125 gMetronomeInfo.dev = MDPlayerGetDestinationNumberFromName([obj UTF8String]);
126 else gMetronomeInfo.dev = -1;
127 ival = [MyAppCallback_getObjectGlobalSettings(MetronomeChannelKey) intValue];
128 [metronomeChannelPopUp selectItemAtIndex: ival];
129 gMetronomeInfo.channel = ival % 16;
130 for (i = 0; i < 2; i++) {
131 char nname[6];
132 obj = MyAppCallback_getObjectGlobalSettings(i == 0 ? MetronomeNote1Key : MetronomeNote2Key);
133 if (obj == nil)
134 ival = (i == 0 ? 64 : 60);
135 else ival = [obj intValue];
136 MDEventNoteNumberToNoteName(ival % 128, nname);
137 [(i == 0 ? metronomeClick1Text : metronomeClick2Text) setStringValue: [NSString stringWithFormat: @"%s(%d)", nname, ival % 128]];
138 [(i == 0 ? metronomeClick1Stepper : metronomeClick2Stepper) setIntValue: ival % 128];
139 if (i == 0)
140 gMetronomeInfo.note1 = ival % 128;
141 else gMetronomeInfo.note2 = ival % 128;
142 obj = MyAppCallback_getObjectGlobalSettings(i == 0 ? MetronomeVelocity1Key : MetronomeVelocity2Key);
143 if (obj == nil)
144 ival = (i == 0 ? 127 : 120);
145 else ival = [obj intValue];
146 [(i == 0 ? metronomeVelocity1Text : metronomeVelocity2Text) setIntValue: ival % 128];
147 [(i == 0 ? metronomeVelocity1Stepper : metronomeVelocity2Stepper) setIntValue: ival % 128];
148 if (i == 0)
149 gMetronomeInfo.vel1 = ival % 128;
150 else gMetronomeInfo.vel2 = ival % 128;
151 }
152 obj = MyAppCallback_getObjectGlobalSettings(MetronomeEnableWhenPlayKey);
153 ival = (obj != nil && [obj boolValue]);
154 gMetronomeInfo.enableWhenPlay = ival;
155 [metronomeEnableWhenPlayCheck setState:(ival ? NSOnState : NSOffState)];
156 obj = MyAppCallback_getObjectGlobalSettings(MetronomeEnableWhenRecordKey);
157 ival = (obj != nil && [obj boolValue]);
158 gMetronomeInfo.enableWhenRecord = ival;
159 [metronomeEnableWhenRecordCheck setState:(ival ? NSOnState : NSOffState)];
160 }
161
162 - (IBAction)popUpSelected:(id)sender
163 {
164 id item = [sender selectedItem];
165 NSString *str;
166 if (sender == metronomeDevicePopUp) {
167 str = [item title];
168 MyAppCallback_setObjectGlobalSettings(MetronomeDeviceKey, str);
169 } else if (sender == metronomeChannelPopUp) {
170 MyAppCallback_setObjectGlobalSettings(MetronomeChannelKey, [NSNumber numberWithInt:(int)[sender indexOfSelectedItem]]);
171 }
172 MyAppCallback_saveGlobalSettings();
173 [self updateDisplay];
174 }
175
176 - (IBAction)metronomeClickTextChanged:(id)sender
177 {
178 NSString *str;
179 id key;
180 int ival;
181 str = [sender stringValue];
182 ival = MDEventNoteNameToNoteNumber([str UTF8String]);
183 if (sender == metronomeClick1Text)
184 key = MetronomeNote1Key;
185 else if (sender == metronomeClick2Text)
186 key = MetronomeNote2Key;
187 else if (sender == metronomeVelocity1Text)
188 key = MetronomeVelocity1Key;
189 else if (sender == metronomeVelocity2Text)
190 key = MetronomeVelocity2Key;
191 else return;
192 MyAppCallback_setObjectGlobalSettings(key, [NSNumber numberWithInt:ival]);
193 MyAppCallback_saveGlobalSettings();
194 [self updateDisplay];
195 // MDPlayerRingMetronomeClick(NULL, 0, (key == MetronomeNote1Key || key == MetronomeVelocity1Key) ? 1 : 0);
196 }
197
198 - (IBAction)metronomeClickStepperMoved:(id)sender
199 {
200 int ival;
201 id key;
202 ival = [sender intValue];
203 if (sender == metronomeClick1Stepper)
204 key = MetronomeNote1Key;
205 else if (sender == metronomeClick2Stepper)
206 key = MetronomeNote2Key;
207 else if (sender == metronomeVelocity1Stepper)
208 key = MetronomeVelocity1Key;
209 else if (sender == metronomeVelocity2Stepper)
210 key = MetronomeVelocity2Key;
211 else return;
212 MyAppCallback_setObjectGlobalSettings(key, [NSNumber numberWithInt:ival]);
213 MyAppCallback_saveGlobalSettings();
214 [self updateDisplay];
215 MDPlayerRingMetronomeClick(NULL, 0, (key == MetronomeNote1Key || key == MetronomeVelocity1Key) ? 1 : 0);
216 }
217
218 - (IBAction)checkBoxPressed:(id)sender
219 {
220 int state = (int)[sender state];
221 MyAppCallback_setObjectGlobalSettings((sender == metronomeEnableWhenPlayCheck ? MetronomeEnableWhenPlayKey : MetronomeEnableWhenRecordKey), [NSNumber numberWithBool:(state == NSOnState)]);
222 MyAppCallback_saveGlobalSettings();
223 [self updateDisplay];
224 }
225
226 - (void)midiSetupDidChange:(NSNotification *)aNotification
227 {
228 [self updateMIDIDevicePopUp];
229 [self updateDisplay];
230 }
231
232 - (void)dealloc
233 {
234 [[NSNotificationCenter defaultCenter] removeObserver:self];
235 [super dealloc];
236 }
237
238 - (void)windowDidLoad
239 {
240 [super windowDidLoad];
241 [[NSNotificationCenter defaultCenter]
242 addObserver:self
243 selector:@selector(midiSetupDidChange:)
244 name:MyAppControllerMIDISetupDidChangeNotification
245 object:[NSApp delegate]];
246 [self updateMIDIDevicePopUp];
247 [self updateDisplay];
248 }
249
250 @end

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26