• R/O
  • SSH
  • HTTPS

alchemusica: コミット


コミットメタ情報

リビジョン195 (tree)
日時2020-03-29 20:19:06
作者toshinagata1964

ログメッセージ

Handling of editing range is improved (especially empty time range is selected in TimeChartView)

変更サマリ

差分

--- trunk/Classes/MyDocument.h (revision 194)
+++ trunk/Classes/MyDocument.h (revision 195)
@@ -67,7 +67,6 @@
6767
6868 // Editing range
6969 MDTickType startEditingRange, endEditingRange;
70- BOOL needsUpdateEditingRange;
7170
7271 // Selection stack (for undo/redo selection)
7372 NSMutableArray *selectionStack;
@@ -100,6 +99,7 @@
10099 - (NSArray *)getDestinationNames;
101100
102101 - (void)enqueueTrackModifiedNotification: (int32_t)trackNo;
102+- (void)enqueueTrackAttributeChangedNotification: (int32_t)trackNo;
103103 - (void)postTrackModifiedNotification: (NSNotification *)notification;
104104 - (void)postPlayPositionNotification: (MDTickType)tick;
105105 //- (void)postSelectionDidChangeNotification: (int32_t)trackNo selectionChange: (IntGroupObject *)set sender: (id)sender;
@@ -164,7 +164,6 @@
164164 - (void)trackDeleted: (NSNotification *)notification;
165165 - (void)documentSelectionDidChange: (NSNotification *)notification;
166166
167-//- (void)setNeedsUpdateEditingRange: (BOOL)flag;
168167 - (void)getEditingRangeStart: (MDTickType *)startTick end: (MDTickType *)endTick;
169168 - (void)setEditingRangeStart: (MDTickType)startTick end: (MDTickType)endTick;
170169 - (void)getSelectionStartTick: (MDTickType *)startTickPtr endTick: (MDTickType *)endTickPtr editableTracksOnly: (BOOL)flag;
--- trunk/Classes/MyDocument.m (revision 194)
+++ trunk/Classes/MyDocument.m (revision 195)
@@ -103,7 +103,6 @@
103103 for (i = 0; i < [myMIDISequence trackCount]; i++) {
104104 [selections addObject: [[[MDSelectionObject allocWithZone: [self zone]] init] autorelease]];
105105 }
106- // [self setNeedsUpdateEditingRange: YES];
107106 [[NSNotificationCenter defaultCenter]
108107 addObserver: self
109108 selector: @selector(selectionWillChange:)
@@ -568,7 +567,7 @@
568567 MDTrackSetExtraInfo(tp, "color", newValue);
569568 free(newValue);
570569 }
571- [self enqueueTrackModifiedNotification: track];
570+ [self enqueueTrackAttributeChangedNotification: track];
572571 }
573572
574573 + (NSColor *)colorForEditingRange
@@ -734,12 +733,14 @@
734733 }
735734 }
736735
737-- (void)enqueueTrackModifiedNotification: (int32_t)trackNo
736+- (void)enqueueTrackModifiedNotification: (int32_t)trackNo withEventEdited: (BOOL)eventEdited
738737 {
739738 int i;
740739
741740 /* Calibrators should be reset */
742- MDSequenceResetCalibrators([myMIDISequence mySequence]);
741+ if (eventEdited) {
742+ MDSequenceResetCalibrators([myMIDISequence mySequence]);
743+ }
743744
744745 /* Add a track to the modifiedTracks array (if not already present) */
745746 for (i = (int)[modifiedTracks count] - 1; i >= 0; i--) {
@@ -762,12 +763,28 @@
762763 forModes: nil];
763764
764765 /* Update editing range */
765- [self updateEditingRange];
766-
766+ if (eventEdited) {
767+ /* Clear the cached tick range in the selection */
768+ MDSelectionObject *selection = (MDSelectionObject *)[selections objectAtIndex: trackNo];
769+ selection->startTick = kMDNegativeTick;
770+ selection->endTick = kMDNegativeTick;
771+ [self updateEditingRange];
772+ }
773+
767774 /* Any track modification should clear the selection undo stack */
768775 [self enqueueSelectionUndoerWithKey: sStackShouldBeCleared value: sStackShouldBeCleared];
769776 }
770777
778+- (void)enqueueTrackModifiedNotification: (int32_t)trackNo
779+{
780+ [self enqueueTrackModifiedNotification:trackNo withEventEdited:YES];
781+}
782+
783+- (void)enqueueTrackAttributeChangedNotification: (int32_t)trackNo
784+{
785+ [self enqueueTrackModifiedNotification:trackNo withEventEdited:NO];
786+}
787+
771788 - (void)postPlayPositionNotification: (MDTickType)tick
772789 {
773790 float beat;
@@ -1061,7 +1078,7 @@
10611078 // Probably we do not want undo registration
10621079 // [[[self undoManager] prepareWithInvocationTarget: self]
10631080 // setTrackAttribute: oldAttr forTrack: trackNo];
1064- [self enqueueTrackModifiedNotification: trackNo];
1081+ [self enqueueTrackAttributeChangedNotification: trackNo];
10651082 }
10661083 }
10671084 }
@@ -1080,12 +1097,7 @@
10801097 {
10811098 MDSequence *sequence = [[self myMIDISequence] mySequence];
10821099 if (sequence != NULL) {
1083- // NSData *attr = [self getTrackAttributes];
10841100 if (MDSequenceSetRecordFlagOnTrack(sequence, trackNo, flag)) {
1085- // [[[self undoManager] prepareWithInvocationTarget: self]
1086- // setTrackAttributes: attr];
1087- // [self enqueueTrackModifiedNotification: trackNo];
1088- // [self updateTrackDestinations];
10891101 return YES;
10901102 }
10911103 }
@@ -1160,7 +1172,7 @@
11601172 [[[self undoManager] prepareWithInvocationTarget: self]
11611173 changeDevice: [NSString stringWithUTF8String: oldname] forTrack: trackNo];
11621174 [self updateDeviceNumberForTrack: trackNo];
1163- [self enqueueTrackModifiedNotification: trackNo];
1175+ [self enqueueTrackAttributeChangedNotification: trackNo];
11641176 return YES;
11651177 } else return NO;
11661178 }
@@ -1209,7 +1221,7 @@
12091221 MDTrackSetTrackChannel(track, channel);
12101222 [[[self undoManager] prepareWithInvocationTarget: self]
12111223 changeTrackChannel: oldchannel forTrack: trackNo];
1212- [self enqueueTrackModifiedNotification: trackNo];
1224+ [self enqueueTrackAttributeChangedNotification: trackNo];
12131225 [self updateTrackDestinations];
12141226 return YES;
12151227 }
@@ -1229,7 +1241,7 @@
12291241 MDTrackSetName(track, name);
12301242 [[[self undoManager] prepareWithInvocationTarget: self]
12311243 changeTrackName: [NSString stringWithUTF8String: oldname] forTrack: trackNo];
1232- [self enqueueTrackModifiedNotification: trackNo];
1244+ [self enqueueTrackAttributeChangedNotification: trackNo];
12331245 return YES;
12341246 }
12351247 return NO;
@@ -2455,15 +2467,8 @@
24552467
24562468 #pragma mark ====== Editing range ======
24572469
2458-//- (void)setNeedsUpdateEditingRange: (BOOL)flag
2459-//{
2460-// needsUpdateEditingRange = YES;
2461-//}
2462-
24632470 - (void)getEditingRangeStart: (MDTickType *)startTick end: (MDTickType *)endTick
24642471 {
2465-// if (needsUpdateEditingRange)
2466-// [self updateEditingRange];
24672472 *startTick = startEditingRange;
24682473 *endTick = endEditingRange;
24692474 }
@@ -2482,8 +2487,6 @@
24822487 [self enqueueSelectionUndoerWithKey: sEditingRangeKey value: [[[MDTickRangeObject alloc] initWithStartTick: startEditingRange endTick: endEditingRange] autorelease]];
24832488 startEditingRange = startTick;
24842489 endEditingRange = endTick;
2485-// needsUpdateEditingRange = NO;
2486-// [self postEditingRangeDidChangeNotification];
24872490 }
24882491
24892492 #pragma mark ====== Selection ======
@@ -2493,24 +2496,11 @@
24932496
24942497 - (BOOL)setSelection: (MDSelectionObject *)set inTrack: (int32_t)trackNo sender: (id)sender
24952498 {
2496-/* MDSelectionObject *diffSet = [[[MDSelectionObject allocWithZone: [self zone]] init] autorelease]; */
24972499 MDSelectionObject *oldSet = (MDSelectionObject *)[[[selections objectAtIndex: trackNo] retain] autorelease];
24982500
24992501 [selections replaceObjectAtIndex: trackNo withObject: set];
25002502 [self enqueueSelectionUndoerWithKey: [NSNumber numberWithInt: (int)trackNo] value: oldSet];
25012503 return YES;
2502-/* MDStatus sts = IntGroupXor([oldSet pointSet], [set pointSet], [diffSet pointSet]);
2503- if (sts == kMDNoError) {
2504- [selections replaceObjectAtIndex: trackNo withObject: set];
2505-#if DEBUG
2506- if (gMDVerbose > 0)
2507- IntGroupDump([set pointSet]);
2508-#endif
2509- [self setNeedsUpdateEditingRange: YES];
2510- [self postSelectionDidChangeNotification: trackNo selectionChange: diffSet sender: sender];
2511- [self postEditingRangeDidChangeNotification];
2512- return YES;
2513- } else return NO; */
25142504 }
25152505
25162506 - (BOOL)toggleSelection: (MDSelectionObject *)pointSet inTrack: (int32_t)trackNo sender: (id)sender
@@ -2519,10 +2509,6 @@
25192509 MDSelectionObject *oldSet = (MDSelectionObject *)[[[selections objectAtIndex: trackNo] retain] autorelease];
25202510 MDStatus sts = IntGroupXor([oldSet pointSet], [pointSet pointSet], [newSet pointSet]);
25212511 if (sts == kMDNoError) {
2522- /* Register undo action */
2523- /* [[[self undoManager] prepareWithInvocationTarget: self]
2524- toggleSelection: pointSet inTrack: trackNo sender: self]; */
2525- /* Do set selection */
25262512 [selections replaceObjectAtIndex: trackNo withObject: newSet];
25272513 /* For debug */
25282514 #if DEBUG
@@ -2530,12 +2516,6 @@
25302516 IntGroupDump([newSet pointSet]);
25312517 #endif
25322518 [self enqueueSelectionUndoerWithKey: [NSNumber numberWithInt: (int)trackNo] value: oldSet];
2533-
2534- /* Update editing range */
2535- // [self setNeedsUpdateEditingRange: YES];
2536- /* Post notification */
2537- // [self postSelectionDidChangeNotification: trackNo selectionChange: pointSet sender: sender];
2538- // [self postEditingRangeDidChangeNotification];
25392519 return YES;
25402520 } else return NO;
25412521 }
--- trunk/Classes/TimeChartView.m (revision 194)
+++ trunk/Classes/TimeChartView.m (revision 195)
@@ -510,11 +510,7 @@
510510 if (IntGroupAdd(pset, pos1, pos2 - pos1) != kMDNoError)
511511 break;
512512 }
513- /* startTick and endTick are set in the selection object
514- (even if there are no events in between) */
515513 obj = [[MDSelectionObject allocWithZone: [self zone]] initWithMDPointSet: pset];
516- obj->startTick = tick1;
517- obj->endTick = tick2;
518514 obj->track = track;
519515 if (shiftDown) {
520516 [document toggleSelection: obj inTrack: trackNo sender: self];
旧リポジトリブラウザで表示