From 0f8c9ddb6b9e692d7466384a2a4ee12e29b7ef7b Mon Sep 17 00:00:00 2001 From: plaques Date: Fri, 2 Jan 2015 00:52:02 -0500 Subject: [PATCH 01/20] OSX 10.10 Fixes --- Controller Classes/EndpointTableDataSource.h | 2 +- Controller Classes/EndpointTableDataSource.m | 37 +- Controller Classes/PatchTableDataSource.h | 2 +- Controller Classes/PatchbayDocument.h | 6 +- Controller Classes/PatchbayDocument.m | 56 +- English.lproj/MainMenu.nib/classes.nib | 36 - English.lproj/MainMenu.nib/designable.nib | 224 +++++++ English.lproj/MainMenu.nib/info.nib | 20 - English.lproj/MainMenu.nib/keyedobjects.nib | Bin 12745 -> 10696 bytes .../PatchbayDocument.nib/classes.nib | 144 ---- .../PatchbayDocument.nib/designable.nib | 628 ++++++++++++++++++ English.lproj/PatchbayDocument.nib/info.nib | 18 - .../PatchbayDocument.nib/keyedobjects.nib | Bin 29203 -> 29857 bytes .../PatchbayDocument~.nib/classes.nib | 72 -- English.lproj/PatchbayDocument~.nib/info.nib | 16 - .../PatchbayDocument~.nib/objects.nib | Bin 12269 -> 0 bytes Info.plist | 8 +- MIDI Patchbay.xcodeproj/project.pbxproj | 68 +- Model Classes/Patch.m | 1 + PYMIDI/PYMIDIEndpoint.m | 4 +- PYMIDI/PYMIDIEndpointSet.h | 2 +- PYMIDI/PYMIDIRealDestination.m | 12 +- PYMIDI/PYMIDIRealEndpoint.m | 2 +- PYMIDI/PYMIDIRealSource.m | 12 +- PYMIDI/PYMIDIUtils.m | 14 +- PYMIDI/PYMIDIVirtualDestination.m | 2 +- View Classes/KeyTableView.h | 6 +- View Classes/KeyTableView.m | 6 +- 28 files changed, 981 insertions(+), 417 deletions(-) delete mode 100644 English.lproj/MainMenu.nib/classes.nib create mode 100644 English.lproj/MainMenu.nib/designable.nib delete mode 100644 English.lproj/MainMenu.nib/info.nib delete mode 100644 English.lproj/PatchbayDocument.nib/classes.nib create mode 100644 English.lproj/PatchbayDocument.nib/designable.nib delete mode 100644 English.lproj/PatchbayDocument.nib/info.nib delete mode 100644 English.lproj/PatchbayDocument~.nib/classes.nib delete mode 100644 English.lproj/PatchbayDocument~.nib/info.nib delete mode 100644 English.lproj/PatchbayDocument~.nib/objects.nib diff --git a/Controller Classes/EndpointTableDataSource.h b/Controller Classes/EndpointTableDataSource.h index 7b24e91..732e316 100644 --- a/Controller Classes/EndpointTableDataSource.h +++ b/Controller Classes/EndpointTableDataSource.h @@ -2,7 +2,7 @@ #import -@interface EndpointTableDataSource : NSObject { +@interface EndpointTableDataSource : NSObject { Class endpointClass; NSMutableArray* endpointArray; NSUndoManager* undoManager; diff --git a/Controller Classes/EndpointTableDataSource.m b/Controller Classes/EndpointTableDataSource.m index aba0f8a..930a9a1 100644 --- a/Controller Classes/EndpointTableDataSource.m +++ b/Controller Classes/EndpointTableDataSource.m @@ -54,11 +54,13 @@ - (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn - (BOOL)control:(NSControl*)control isValidObject:(id)value { if (PYMIDIIsEndpointNameTaken (value)) { - NSRunAlertPanel ( - [NSString stringWithFormat:@"The name \"%@\" is already taken.", value], - @"Please choose a different name.", - nil, nil, nil - ); + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"OK"]; + [alert setMessageText: [NSString stringWithFormat:@"The name \"%@\" is already taken.", value]]; + [alert setInformativeText:@"Please choose a different name."]; + [alert setAlertStyle:NSWarningAlertStyle]; + [alert runModal]; + return NO; } else @@ -72,11 +74,13 @@ - (void)tableView:(NSTableView*)tableView setObjectValue:(id)value forTableColum if (![value isEqualToString:@""] && ![value isEqualToString:[endpoint name]]) { if (PYMIDIIsEndpointNameTaken (value)) { - NSRunAlertPanel ( - [NSString stringWithFormat:@"The name \"%@\" is already taken.", value], - @"Please choose a different name.", - nil, nil, nil - ); + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"OK"]; + [alert setMessageText: [NSString stringWithFormat:@"The name \"%@\" is already taken.", value]]; + [alert setInformativeText:@"Please choose a different name."]; + [alert setAlertStyle:NSWarningAlertStyle]; + [alert runModal]; + } else { [self tableView:tableView setName:(NSString*)value forEndpointAtIndex:rowIndex]; @@ -90,11 +94,14 @@ - (void)deleteSelection:(NSTableView*)tableView PYMIDIVirtualEndpoint* endpoint = [endpointArray objectAtIndex:[tableView selectedRow]]; if ([endpoint isInUse]) { - NSRunAlertPanel ( - @"The selection is in use by one or more patches and cannot be deleted.", - @"", - nil, nil, nil - ); + NSAlert *alert = [[NSAlert alloc] init]; + + [alert addButtonWithTitle:@"OK"]; + [alert setMessageText:@"The selection is in use by one or more patches and cannot be deleted."]; + [alert setInformativeText:@""]; + [alert setAlertStyle:NSWarningAlertStyle]; + [alert runModal]; + } else { [self tableView:tableView removeEndpointAtIndex:[tableView selectedRow]]; diff --git a/Controller Classes/PatchTableDataSource.h b/Controller Classes/PatchTableDataSource.h index fe58e2d..35230e5 100644 --- a/Controller Classes/PatchTableDataSource.h +++ b/Controller Classes/PatchTableDataSource.h @@ -4,7 +4,7 @@ @class PatchbayDocument; -@interface PatchTableDataSource : NSObject { +@interface PatchTableDataSource : NSObject { PatchbayDocument* document; NSMutableArray* patchArray; } diff --git a/Controller Classes/PatchbayDocument.h b/Controller Classes/PatchbayDocument.h index 7a7a497..2d62942 100644 --- a/Controller Classes/PatchbayDocument.h +++ b/Controller Classes/PatchbayDocument.h @@ -11,7 +11,7 @@ @class EndpointTableDataSource; -@interface PatchbayDocument : NSDocument { +@interface PatchbayDocument : NSDocument { IBOutlet NSWindow* documentWindow; // Stuff related to the table of patches @@ -20,10 +20,11 @@ PatchTableDataSource* patchTableDataSource; IBOutlet NSButton* addPatchButton; + IBOutlet NSButton* removePatchButton; NSMutableArray* patchArray; Patch* selectedPatch; - + int selectedIndex; // Stuff related to editing a patch @@ -89,6 +90,7 @@ - (void)selectedPatchChanged:(NSNotification*)notification; - (IBAction)addPatchButtonPressed:(id)sender; +- (IBAction)removePatchButtonPressed:(id)sender; - (void)addPatch:(Patch*)patch atIndex:(int)index; - (void)addPatchFromArchive:(NSData*)data atIndex:(int)index; diff --git a/Controller Classes/PatchbayDocument.m b/Controller Classes/PatchbayDocument.m index 1c80f9c..0a26042 100644 --- a/Controller Classes/PatchbayDocument.m +++ b/Controller Classes/PatchbayDocument.m @@ -41,7 +41,7 @@ - (id)init // Uncomment the following line for debugging if you want to // disable undo, which makes tracking retain/release issues easier. //[self setUndoManager:nil]; - + selectedIndex = -1; return self; } @@ -50,7 +50,7 @@ - (void)windowControllerDidLoadNib:(NSWindowController*)windowController { NSButtonCell* buttonCell; PatchTableCell* patchTableCell; - + [super windowControllerDidLoadNib:windowController]; // These are so that our window and panel use the correct undo manager @@ -113,7 +113,6 @@ - (void)windowControllerDidLoadNib:(NSWindowController*)windowController // See the comment on tabView:shouldSelectTabViewItem; in EndpointTableDataSource [virtualEndpointTabView setDelegate:inputTableDataSource]; - [self syncWithLoadedData]; } @@ -192,7 +191,7 @@ - (void)syncWithLoadedData [patchTable reloadData]; if ([patchArray count] > 0) - [patchTable selectRow:0 byExtendingSelection:NO]; + [patchTable selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO]; else [patchTable deselectAll:self]; @@ -252,15 +251,17 @@ - (void)selectedPatchChanged:(NSNotification*)notification [self setTransposeControls]; [self setTransmitClockControls]; [self setOutputPopUp]; + + selectedIndex = patchIndex; } -- (IBAction)addPatchButtonPressed:(id)sender +- (IBAction) addPatchButtonPressed:(id)sender { - Patch* patch; - if (selectedPatch != nil) { - patch = [[Patch alloc] initFromPatch:selectedPatch]; + Patch *patch = [[Patch alloc] initFromPatch:selectedPatch]; + [self addPatch:patch atIndex:[patchArray count]]; + [patch release]; } else { // Pick a default input and output for a blank patch @@ -276,14 +277,20 @@ - (IBAction)addPatchButtonPressed:(id)sender PYMIDIEndpoint* output; do { output = [enumerator nextObject]; } while ([output isIACBus]); - patch = [[Patch alloc] initWithInput:input output:output]; + Patch *patch = [[Patch alloc] initWithInput:input output:output]; + [self addPatch:patch atIndex:[patchArray count]]; + [patch release]; } - - [self addPatch:patch atIndex:[patchArray count]]; - - [patch release]; + } +- (IBAction)removePatchButtonPressed:(id)sender +{ + if (selectedIndex >= 0) { + [self removePatchAtIndex: selectedIndex]; + } + +} - (void)addPatch:(Patch*)patch atIndex:(int)index { @@ -293,7 +300,7 @@ - (void)addPatch:(Patch*)patch atIndex:(int)index [patchArray insertObject:patch atIndex:index]; [patchTable reloadData]; - [patchTable selectRow:index byExtendingSelection:NO]; + [patchTable selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; [[undoManager prepareWithInvocationTarget:self] removePatchAtIndex:index @@ -1021,13 +1028,15 @@ - (IBAction)editVirtualInputs:(id)sender panelWasOpenedToInputs = YES; + [documentWindow beginSheet: virtualEndpointPanel completionHandler: nil]; + /* [[NSApplication sharedApplication] beginSheet:virtualEndpointPanel modalForWindow:documentWindow modalDelegate:self didEndSelector:@selector(endpointPanelDidEnd:returnCode:contextInfo:) contextInfo:nil - ]; + ];*/ } @@ -1041,14 +1050,15 @@ - (IBAction)editVirtualOutputs:(id)sender [[self undoManager] beginUndoGrouping]; panelWasOpenedToInputs = NO; - + [documentWindow beginSheet:virtualEndpointPanel completionHandler: nil]; + /* [[NSApplication sharedApplication] beginSheet:virtualEndpointPanel modalForWindow:documentWindow modalDelegate:self didEndSelector:@selector(endpointPanelDidEnd:returnCode:contextInfo:) contextInfo:nil - ]; + ];*/ } @@ -1058,10 +1068,11 @@ - (IBAction)newInputButtonPressed:(id)sender [[[self displayName] lastPathComponent] stringByDeletingPathExtension] ]; - [[inputTable dataSource] tableView:inputTable newEndpointWithName:baseName]; + [(EndpointTableDataSource *)[inputTable dataSource] tableView:inputTable newEndpointWithName:baseName]; // Set up the newly created endpoint for editing - [inputTable selectRow:[inputTable numberOfRows]-1 byExtendingSelection:NO]; + + [inputTable selectRowIndexes:[NSIndexSet indexSetWithIndex:[inputTable numberOfRows]-1] byExtendingSelection:NO]; [inputTable editColumn:0 row:[inputTable selectedRow] withEvent:nil select:YES]; } @@ -1073,10 +1084,11 @@ - (IBAction)newOutputButtonPressed:(id)sender [[[self displayName] lastPathComponent] stringByDeletingPathExtension] ]; - [[outputTable dataSource] tableView:outputTable newEndpointWithName:baseName]; + [(EndpointTableDataSource *)[outputTable dataSource] tableView:outputTable newEndpointWithName:baseName]; // Set up the newly created endpoint for editing - [outputTable selectRow:[outputTable numberOfRows]-1 byExtendingSelection:NO]; + [outputTable selectRowIndexes:[NSIndexSet indexSetWithIndex:[outputTable numberOfRows]-1] byExtendingSelection:NO]; + [outputTable editColumn:0 row:[outputTable selectedRow] withEvent:nil select:YES]; } @@ -1086,7 +1098,7 @@ - (IBAction)endpointPanelButtonPressed:(id)sender { if ([virtualEndpointPanel makeFirstResponder:nil]) { [virtualEndpointPanel orderOut:self]; - [[NSApplication sharedApplication] endSheet:virtualEndpointPanel returnCode:0]; + [documentWindow endSheet:virtualEndpointPanel returnCode:0]; } } diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib deleted file mode 100644 index aefca1a..0000000 --- a/English.lproj/MainMenu.nib/classes.nib +++ /dev/null @@ -1,36 +0,0 @@ - - - - - IBClasses - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - ACTIONS - - displayLicense - id - sendFeedback - id - visitWebSite - id - - CLASS - PatchbayController - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - IBVersion - 1 - - diff --git a/English.lproj/MainMenu.nib/designable.nib b/English.lproj/MainMenu.nib/designable.nib new file mode 100644 index 0000000..f1b8717 --- /dev/null +++ b/English.lproj/MainMenu.nib/designable.nib @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib deleted file mode 100644 index bb86cd1..0000000 --- a/English.lproj/MainMenu.nib/info.nib +++ /dev/null @@ -1,20 +0,0 @@ - - - - - IBFramework Version - 629 - IBLastKnownRelativeProjectPath - ../../MIDI Patchbay.xcodeproj - IBOldestOS - 5 - IBOpenObjects - - 57 - - IBSystem Version - 9B18 - targetFramework - IBCocoaFramework - - diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 24c52be42cb0d887f4c194bf43aa79550c3f78e3..b30779f92233dac3d37c81e35961dc394d8595db 100644 GIT binary patch literal 10696 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 YQukE%A{73Ejh67AjE$Vjf89&|3qwsj6#xJL literal 12745 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 - - - - IBClasses - - - ACTIONS - - addPatchButtonPressed - id - endpointPanelButtonPressed - id - filterChannelMatrixChanged - id - filterChannelRadioButtonsChanged - id - filterRangeRadioButtonsChanged - id - highestAllowedNoteSliderChanged - id - highestAllowedNoteStepperChanged - id - inputPopUpChanged - id - lowestAllowedNoteSliderChanged - id - lowestAllowedNoteStepperChanged - id - newInputButtonPressed - id - newOutputButtonPressed - id - outputPopUpChanged - id - remapChannelButtonChanged - id - remapChannelPopUpChanged - id - transmitClockButtonChanged - id - transposeButtonChanged - id - transposeDistanceSliderChanged - id - transposeDistanceStepperChanged - id - - CLASS - PatchbayDocument - LANGUAGE - ObjC - OUTLETS - - addPatchButton - NSButton - documentWindow - NSWindow - filterChannelMatrix - NSMatrix - filterChannelRadioButtons - NSMatrix - filterRangeLabelField - NSTextField - filterRangeRadioButtons - NSMatrix - highestAllowedNoteField - NSTextField - highestAllowedNoteSlider - NSSlider - highestAllowedNoteStepper - NSStepper - inputPopUp - NSPopUpButton - inputTable - NSTableView - lowestAllowedNoteField - NSTextField - lowestAllowedNoteSlider - NSSlider - lowestAllowedNoteStepper - NSStepper - outputPopUp - NSPopUpButton - outputTable - NSTableView - patchTable - NSTableView - remapChannelButton - NSButton - remapChannelPopUp - NSPopUpButton - transmitClockButton - NSButton - transposeButton - NSButton - transposeDistanceField - NSTextField - transposeDistanceSlider - NSSlider - transposeDistanceStepper - NSStepper - virtualEndpointPanel - NSPanel - virtualEndpointTabView - NSTabView - - SUPERCLASS - NSDocument - - - ACTIONS - - clear - id - deleteBackward - id - deleteForward - id - moveDown - id - moveUp - id - - CLASS - KeyTableView - LANGUAGE - ObjC - SUPERCLASS - NSTableView - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - IBVersion - 1 - - diff --git a/English.lproj/PatchbayDocument.nib/designable.nib b/English.lproj/PatchbayDocument.nib/designable.nib new file mode 100644 index 0000000..0642ecd --- /dev/null +++ b/English.lproj/PatchbayDocument.nib/designable.nib @@ -0,0 +1,628 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/English.lproj/PatchbayDocument.nib/info.nib b/English.lproj/PatchbayDocument.nib/info.nib deleted file mode 100644 index b25c89f..0000000 --- a/English.lproj/PatchbayDocument.nib/info.nib +++ /dev/null @@ -1,18 +0,0 @@ - - - - - IBFramework Version - 629 - IBLastKnownRelativeProjectPath - ../../MIDI Patchbay.xcodeproj - IBOldestOS - 3 - IBOpenObjects - - IBSystem Version - 9B18 - targetFramework - IBCocoaFramework - - diff --git a/English.lproj/PatchbayDocument.nib/keyedobjects.nib b/English.lproj/PatchbayDocument.nib/keyedobjects.nib index 6766a1c6563ab875c42ed41eee90581de2ddd681..83f602bc04df810de729cdf05742d35d0e820ae6 100644 GIT binary patch literal 29857 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 L6hC*pR&V@2XERLw literal 29203 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 diff --git a/English.lproj/PatchbayDocument~.nib/classes.nib b/English.lproj/PatchbayDocument~.nib/classes.nib deleted file mode 100644 index 0083d00..0000000 --- a/English.lproj/PatchbayDocument~.nib/classes.nib +++ /dev/null @@ -1,72 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - { - ACTIONS = { - clear = id; - deleteBackward = id; - deleteForward = id; - moveDown = id; - moveUp = id; - }; - CLASS = KeyTableView; - LANGUAGE = ObjC; - SUPERCLASS = NSTableView; - }, - { - ACTIONS = { - addPatchButtonPressed = id; - endpointPanelButtonPressed = id; - filterChannelMatrixChanged = id; - filterChannelRadioButtonsChanged = id; - filterRangeRadioButtonsChanged = id; - highestAllowedNoteSliderChanged = id; - highestAllowedNoteStepperChanged = id; - inputPopUpChanged = id; - lowestAllowedNoteSliderChanged = id; - lowestAllowedNoteStepperChanged = id; - newInputButtonPressed = id; - newOutputButtonPressed = id; - outputPopUpChanged = id; - remapChannelButtonChanged = id; - remapChannelPopUpChanged = id; - transmitClockButtonChanged = id; - transposeButtonChanged = id; - transposeDistanceSliderChanged = id; - transposeDistanceStepperChanged = id; - }; - CLASS = PatchbayDocument; - LANGUAGE = ObjC; - OUTLETS = { - addPatchButton = NSButton; - documentWindow = NSWindow; - filterChannelMatrix = NSMatrix; - filterChannelRadioButtons = NSMatrix; - filterRangeLabelField = NSTextField; - filterRangeRadioButtons = NSMatrix; - highestAllowedNoteField = NSTextField; - highestAllowedNoteSlider = NSSlider; - highestAllowedNoteStepper = NSStepper; - inputPopUp = NSPopUpButton; - inputTable = NSTableView; - lowestAllowedNoteField = NSTextField; - lowestAllowedNoteSlider = NSSlider; - lowestAllowedNoteStepper = NSStepper; - outputPopUp = NSPopUpButton; - outputTable = NSTableView; - patchTable = NSTableView; - remapChannelButton = NSButton; - remapChannelPopUp = NSPopUpButton; - transmitClockButton = NSButton; - transposeButton = NSButton; - transposeDistanceField = NSTextField; - transposeDistanceSlider = NSSlider; - transposeDistanceStepper = NSStepper; - virtualEndpointPanel = NSPanel; - virtualEndpointTabView = NSTabView; - }; - SUPERCLASS = NSDocument; - } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/English.lproj/PatchbayDocument~.nib/info.nib b/English.lproj/PatchbayDocument~.nib/info.nib deleted file mode 100644 index 50938ff..0000000 --- a/English.lproj/PatchbayDocument~.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 145 64 474 240 0 0 1600 1178 - IBFramework Version - 291.0 - IBOpenObjects - - 5 - - IBSystem Version - 6G30 - - diff --git a/English.lproj/PatchbayDocument~.nib/objects.nib b/English.lproj/PatchbayDocument~.nib/objects.nib deleted file mode 100644 index ffa3815bf53bb1405d3e7c66a4d729d9aaea6bd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12269 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 H{|EjbY6GS+ diff --git a/Info.plist b/Info.plist index 600c0d5..a24bd72 100644 --- a/Info.plist +++ b/Info.plist @@ -33,15 +33,17 @@ ${PRODUCT_NAME} CFBundlePackageType APPL + CFBundleShortVersionString + 1.0.4 CFBundleSignature ???? CFBundleVersion - 1.0.3 + 1.0.4 + LSApplicationCategoryType + public.app-category.music NSMainNibFile MainMenu NSPrincipalClass NSApplication - CFBundleShortVersionString - 1.0.3 diff --git a/MIDI Patchbay.xcodeproj/project.pbxproj b/MIDI Patchbay.xcodeproj/project.pbxproj index 3183293..36dd127 100644 --- a/MIDI Patchbay.xcodeproj/project.pbxproj +++ b/MIDI Patchbay.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 44; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -257,7 +257,6 @@ C12C7FE805AECD9D0066E007 /* Resources */, C12C7FF005AECD9D0066E007 /* Sources */, C12C7FFA05AECD9D0066E007 /* Frameworks */, - C14601500D3CB30B002E94E5 /* ShellScript */, ); buildRules = ( ); @@ -274,9 +273,16 @@ /* Begin PBXProject section */ 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + }; buildConfigurationList = C101046C088A0A7C001DFE4F /* Build configuration list for PBXProject "MIDI Patchbay" */; - compatibilityVersion = "Xcode 3.0"; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + en, + ); mainGroup = 2A37F4AAFDCFA73011CA2CEA /* MIDI Patchbay */; projectDirPath = ""; projectRoot = ""; @@ -303,22 +309,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - C14601500D3CB30B002E94E5 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = "/usr/bin/perl -w"; - shellScript = "# Xcode auto-versioning script for Subversion\n# by Axel Andersson, modified by Daniel Jalkut to add\n# \"--revision HEAD\" to the svn info line, which allows\n# the latest revision to always be used.\n\n# See http://www.red-sweater.com/blog/23/automatic-build-sub-versioning-in-xcode#finalscript\n\nuse strict;\n\ndie \"$0: Must be run from Xcode\" unless $ENV{\"BUILT_PRODUCTS_DIR\"};\n\n# Get the current subversion revision number and use it to set the CFBundleVersion value\nmy $REV = `/opt/local/bin/svnversion -n ./`;\nmy $INFO = \"$ENV{BUILT_PRODUCTS_DIR}/$ENV{WRAPPER_NAME}/Contents/Info.plist\";\n\nmy $version = $REV;\n\n# (Match the last group of digits and optional letter M/S):\n\n# ugly yet functional (barely) regex by Daniel Jalkut:\n#$version =~ s/([\\d]*:)(\\d+[M|S]*).*/$2/;\n\n# better yet still functional regex via Kevin \"Regex Nerd\" Ballard\n#($version =~ m/\\d+[MS]*$/) && ($version = $&);\n\n# or a custom version that ignores the M and S flags by Pete Yandell\n($version =~ m/(\\d+)[MS]*$/) && ($version = $1);\n\ndie \"$0: No Subversion revision found\" unless $version;\n\nopen(FH, \"$INFO\") or die \"$0: $INFO: $!\";\nmy $info = join(\"\", );\nclose(FH);\n\n$info =~ s/([\\t ]+CFBundleVersion<\\/key>\\n[\\t ]+).*?(<\\/string>)/$1$version$2/;\n\nopen(FH, \">$INFO\") or die \"$0: $INFO: $!\";\nprint FH $info;\nclose(FH);"; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ C12C7FF005AECD9D0066E007 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -380,8 +370,9 @@ C1010469088A0A7C001DFE4F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ../PYMIDI/build; + FRAMEWORK_SEARCH_PATHS = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -391,11 +382,14 @@ INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; PRODUCT_NAME = "MIDI Patchbay"; + SDKROOT = macosx10.10; SECTORDER_FLAGS = ""; + VALID_ARCHS = x86_64; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", @@ -409,8 +403,9 @@ C101046A088A0A7C001DFE4F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ../PYMIDI/build; + FRAMEWORK_SEARCH_PATHS = ""; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; @@ -419,11 +414,16 @@ INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; PRODUCT_NAME = "MIDI Patchbay"; + SDKROOT = macosx10.10; + "SDKROOT[arch=i386]" = macosx10.10; + "SDKROOT[arch=ppc]" = macosx10.10; SECTORDER_FLAGS = ""; + VALID_ARCHS = x86_64; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", @@ -439,9 +439,11 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; HEADER_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.2; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx10.10; USER_HEADER_SEARCH_PATHS = .; + VALID_ARCHS = x86_64; }; name = Debug; }; @@ -449,20 +451,16 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; - ARCHS = ( - i386, - ppc, - ); GCC_VERSION_i386 = 4.0; GCC_VERSION_ppc = 3.3; HEADER_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.2; - "MACOSX_DEPLOYMENT_TARGET[arch=i386]" = 10.4; - "MACOSX_DEPLOYMENT_TARGET[arch=ppc]" = 10.3; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; - "SDKROOT[arch=i386]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; - "SDKROOT[arch=ppc]" = /Developer/SDKs/MacOSX10.3.9.sdk; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx10.10; + "SDKROOT[arch=i386]" = macosx10.10; + "SDKROOT[arch=ppc]" = macosx10.10; USER_HEADER_SEARCH_PATHS = .; + VALID_ARCHS = x86_64; }; name = Release; }; diff --git a/Model Classes/Patch.m b/Model Classes/Patch.m index 4736a20..4a15cab 100644 --- a/Model Classes/Patch.m +++ b/Model Classes/Patch.m @@ -45,6 +45,7 @@ - (Patch*)initWithInput:(PYMIDIEndpoint*)newInput output:(PYMIDIEndpoint*)newOut isEnabled = YES; + return self; } diff --git a/PYMIDI/PYMIDIEndpoint.m b/PYMIDI/PYMIDIEndpoint.m index 46c0cdd..9a6cfd8 100644 --- a/PYMIDI/PYMIDIEndpoint.m +++ b/PYMIDI/PYMIDIEndpoint.m @@ -96,7 +96,7 @@ - (PYMIDIEndpointDescriptor*)descriptor - (void)setPropertiesFromMIDIEndpoint { - if (midiEndpointRef == NULL) return; + if (!midiEndpointRef) return; [self setUniqueIDFromMIDIEndpoint]; [self setNameFromMIDIEndpoint]; @@ -301,7 +301,7 @@ - (BOOL)isOffline SInt32 isOffline; OSStatus result; - if (midiEndpointRef == nil) return YES; + if (!midiEndpointRef) return YES; result = MIDIObjectGetIntegerProperty (midiEndpointRef, kMIDIPropertyOffline, &isOffline); return result == noErr && isOffline; diff --git a/PYMIDI/PYMIDIEndpointSet.h b/PYMIDI/PYMIDIEndpointSet.h index c58b48e..f715688 100644 --- a/PYMIDI/PYMIDIEndpointSet.h +++ b/PYMIDI/PYMIDIEndpointSet.h @@ -3,7 +3,7 @@ @class PYMIDIEndpointDescriptor; @class PYMIDIEndpoint; -@interface PYMIDIEndpointSet : NSObject { +@interface PYMIDIEndpointSet : NSObject { NSArray* endpointArray; } diff --git a/PYMIDI/PYMIDIRealDestination.m b/PYMIDI/PYMIDIRealDestination.m index 62fcb84..09ed862 100644 --- a/PYMIDI/PYMIDIRealDestination.m +++ b/PYMIDI/PYMIDIRealDestination.m @@ -22,7 +22,7 @@ - (id)initWithCoder:(NSCoder*)coder descriptor = [PYMIDIEndpointDescriptor descriptorWithName:newName uniqueID:newUniqueID]; [self release]; - return [[manager realDestinationWithDescriptor:descriptor] retain]; + return [(PYMIDIRealDestination *)[manager realDestinationWithDescriptor:descriptor] retain]; } @@ -35,8 +35,8 @@ - (void)syncWithMIDIEndpoint else newEndpointRef = NULL; - if (newEndpointRef == NULL) newEndpointRef = PYMIDIGetDestinationByUniqueID (uniqueID); - if (newEndpointRef == NULL) newEndpointRef = PYMIDIGetDestinationByName (name); + if (!newEndpointRef) newEndpointRef = PYMIDIGetDestinationByUniqueID (uniqueID); + if (!newEndpointRef) newEndpointRef = PYMIDIGetDestinationByName (name); if (midiEndpointRef != newEndpointRef) { [self stopIO]; @@ -50,7 +50,7 @@ - (void)syncWithMIDIEndpoint - (void)startIO { - if (midiEndpointRef == nil || midiPortRef != nil) return; + if ( !midiEndpointRef || midiPortRef ) return; MIDIOutputPortCreate ( [[PYMIDIManager sharedInstance] midiClientRef], CFSTR("PYMIDIRealDestination"), @@ -61,7 +61,7 @@ - (void)startIO - (void)stopIO { - if (midiPortRef == nil) return; + if (!midiPortRef) return; MIDIPortDispose (midiPortRef); midiPortRef = nil; @@ -70,7 +70,7 @@ - (void)stopIO - (void)processMIDIPacketList:(const MIDIPacketList*)packetList sender:(id)sender { - if (midiEndpointRef != NULL && midiPortRef != NULL) + if (midiEndpointRef && midiPortRef) MIDISend (midiPortRef, midiEndpointRef, packetList); } diff --git a/PYMIDI/PYMIDIRealEndpoint.m b/PYMIDI/PYMIDIRealEndpoint.m index 4ae7d2a..a05affe 100644 --- a/PYMIDI/PYMIDIRealEndpoint.m +++ b/PYMIDI/PYMIDIRealEndpoint.m @@ -36,7 +36,7 @@ - (void)syncWithMIDIEndpoint - (BOOL)ioIsRunning { - return midiPortRef != nil; + return !midiPortRef; } diff --git a/PYMIDI/PYMIDIRealSource.m b/PYMIDI/PYMIDIRealSource.m index 9623a91..8921645 100644 --- a/PYMIDI/PYMIDIRealSource.m +++ b/PYMIDI/PYMIDIRealSource.m @@ -25,7 +25,7 @@ - (id)initWithCoder:(NSCoder*)coder descriptor = [PYMIDIEndpointDescriptor descriptorWithName:newName uniqueID:newUniqueID]; [self release]; - return [[manager realSourceWithDescriptor:descriptor] retain]; + return (PYMIDIRealSource *)[[manager realSourceWithDescriptor:descriptor] retain]; } @@ -39,8 +39,8 @@ - (void)syncWithMIDIEndpoint else newEndpointRef = NULL; - if (newEndpointRef == NULL) newEndpointRef = PYMIDIGetSourceByUniqueID (uniqueID); - if (newEndpointRef == NULL) newEndpointRef = PYMIDIGetSourceByName (name); + if (!newEndpointRef) newEndpointRef = PYMIDIGetSourceByUniqueID (uniqueID); + if (!newEndpointRef) newEndpointRef = PYMIDIGetSourceByName (name); if (midiEndpointRef != newEndpointRef) { [self stopIO]; @@ -54,7 +54,7 @@ - (void)syncWithMIDIEndpoint - (void)startIO { - if (midiEndpointRef == nil || midiPortRef != nil) return; + if (!midiEndpointRef || midiPortRef ) return; MIDIInputPortCreate ( [[PYMIDIManager sharedInstance] midiClientRef], CFSTR("PYMIDIRealSource"), @@ -66,7 +66,7 @@ - (void)startIO - (void)stopIO { - if (midiPortRef == nil) return; + if (!midiPortRef) return; MIDIPortDisconnectSource (midiPortRef, midiEndpointRef); MIDIPortDispose (midiPortRef); @@ -86,7 +86,7 @@ - (void)processMIDIPacketList:(const MIDIPacketList*)packetList sender:(id)sende NSEnumerator* enumerator = [receivers objectEnumerator]; id receiver; - while (receiver = [[enumerator nextObject] nonretainedObjectValue]) + while ((receiver = [[enumerator nextObject] nonretainedObjectValue])) [receiver processMIDIPacketList:packetList sender:self]; [pool release]; diff --git a/PYMIDI/PYMIDIUtils.m b/PYMIDI/PYMIDIUtils.m index a82fe1c..e1970e7 100644 --- a/PYMIDI/PYMIDIUtils.m +++ b/PYMIDI/PYMIDIUtils.m @@ -27,15 +27,11 @@ // Stick the two names together, handling all the cases where one or the other doesn't exist NSString* name; - if (endpointName != nil) { if (deviceName != nil) { - bool endpointNameBeginsWithDeviceName = - CFStringCompareWithOptions ( - endpointName, deviceName, - CFRangeMake(0, CFStringGetLength (deviceName)), - kCFCompareCaseInsensitive - ) == kCFCompareEqualTo; + NSString *endpointNameNS = (NSString *)endpointName; + NSString *deviceNameNS = (NSString *)deviceName; + bool endpointNameBeginsWithDeviceName = [endpointNameNS compare:deviceNameNS options:NSCaseInsensitiveSearch] == NSOrderedSame; if (endpointNameBeginsWithDeviceName) name = [NSString stringWithString:(NSString*)endpointName]; @@ -215,8 +211,8 @@ Boolean PYMIDIIsEndpointNameTaken (NSString* name) { - return PYMIDIGetSourceByName (name) != NULL || - PYMIDIGetDestinationByName (name) != NULL; + return PYMIDIGetSourceByName (name) || + PYMIDIGetDestinationByName (name) ; } diff --git a/PYMIDI/PYMIDIVirtualDestination.m b/PYMIDI/PYMIDIVirtualDestination.m index 0ff7865..16d209e 100644 --- a/PYMIDI/PYMIDIVirtualDestination.m +++ b/PYMIDI/PYMIDIVirtualDestination.m @@ -58,7 +58,7 @@ - (void)processMIDIPacketList:(const MIDIPacketList*)packetList sender:(id)sende pool = [[NSAutoreleasePool alloc] init]; enumerator = [receivers objectEnumerator]; - while (receiver = [[enumerator nextObject] nonretainedObjectValue]) + while ((receiver = [[enumerator nextObject] nonretainedObjectValue])) [receiver processMIDIPacketList:packetList sender:self]; [pool release]; diff --git a/View Classes/KeyTableView.h b/View Classes/KeyTableView.h index 56d039a..47effee 100644 --- a/View Classes/KeyTableView.h +++ b/View Classes/KeyTableView.h @@ -1,7 +1,7 @@ #import +#import - -@interface KeyTableView : NSTableView { +@interface KeyTableView : NSTableView { } @@ -11,7 +11,7 @@ - (void)moveUp:(id)sender; - (void)moveDown:(id)sender; -- (BOOL)validateMenuItem:(id )menuItem; +- (BOOL)validateUserInterfaceItem:(id) menuItem; - (void)clear:(id)sender; - (void)textDidEndEditing:(NSNotification*)notification; diff --git a/View Classes/KeyTableView.m b/View Classes/KeyTableView.m index 7984b5b..32d813b 100644 --- a/View Classes/KeyTableView.m +++ b/View Classes/KeyTableView.m @@ -25,7 +25,7 @@ - (void)deleteBackward:(id)sender - (void)moveUp:(id)sender { if ([self selectedRow] > 0) { - [self selectRow:[self selectedRow] - 1 byExtendingSelection:NO]; + [self selectRowIndexes:[NSIndexSet indexSetWithIndex:[self selectedRow] - 1] byExtendingSelection:NO]; } } @@ -33,12 +33,12 @@ - (void)moveUp:(id)sender - (void)moveDown:(id)sender { if ([self selectedRow] != -1 && [self selectedRow] < [self numberOfRows]-1) { - [self selectRow:[self selectedRow] + 1 byExtendingSelection:NO]; + [self selectRowIndexes:[NSIndexSet indexSetWithIndex:[self selectedRow] + 1] byExtendingSelection:NO]; } } -- (BOOL)validateMenuItem:(id )menuItem +- (BOOL)validateUserInterfaceItem:(id) menuItem { if ([menuItem action] == @selector(clear:)) return [self numberOfSelectedRows] > 0; From 39ecd25c8f852822244ae9917aa881ae2a9790c1 Mon Sep 17 00:00:00 2001 From: danomatika Date: Thu, 5 Dec 2019 16:58:07 +0100 Subject: [PATCH 02/20] xcode project modernization, use & for header search paths, build version to 1 --- .../MainMenu.nib/designable.nib | 0 .../MainMenu.nib/keyedobjects.nib | Bin .../PatchbayDocument.nib/designable.nib | 0 .../PatchbayDocument.nib/keyedobjects.nib | Bin Info.plist | 4 +- MIDI Patchbay.xcodeproj/project.pbxproj | 108 +++++++++++++----- {English.lproj => en.lproj}/InfoPlist.strings | Bin 7 files changed, 84 insertions(+), 28 deletions(-) rename {English.lproj => Base.lproj}/MainMenu.nib/designable.nib (100%) rename {English.lproj => Base.lproj}/MainMenu.nib/keyedobjects.nib (100%) rename {English.lproj => Base.lproj}/PatchbayDocument.nib/designable.nib (100%) rename {English.lproj => Base.lproj}/PatchbayDocument.nib/keyedobjects.nib (100%) rename {English.lproj => en.lproj}/InfoPlist.strings (100%) diff --git a/English.lproj/MainMenu.nib/designable.nib b/Base.lproj/MainMenu.nib/designable.nib similarity index 100% rename from English.lproj/MainMenu.nib/designable.nib rename to Base.lproj/MainMenu.nib/designable.nib diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/Base.lproj/MainMenu.nib/keyedobjects.nib similarity index 100% rename from English.lproj/MainMenu.nib/keyedobjects.nib rename to Base.lproj/MainMenu.nib/keyedobjects.nib diff --git a/English.lproj/PatchbayDocument.nib/designable.nib b/Base.lproj/PatchbayDocument.nib/designable.nib similarity index 100% rename from English.lproj/PatchbayDocument.nib/designable.nib rename to Base.lproj/PatchbayDocument.nib/designable.nib diff --git a/English.lproj/PatchbayDocument.nib/keyedobjects.nib b/Base.lproj/PatchbayDocument.nib/keyedobjects.nib similarity index 100% rename from English.lproj/PatchbayDocument.nib/keyedobjects.nib rename to Base.lproj/PatchbayDocument.nib/keyedobjects.nib diff --git a/Info.plist b/Info.plist index a24bd72..2e133c0 100644 --- a/Info.plist +++ b/Info.plist @@ -26,7 +26,7 @@ CFBundleIconFile AppIcon CFBundleIdentifier - com.notahat.MIDIPatchBay + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -38,7 +38,7 @@ CFBundleSignature ???? CFBundleVersion - 1.0.4 + 1 LSApplicationCategoryType public.app-category.music NSMainNibFile diff --git a/MIDI Patchbay.xcodeproj/project.pbxproj b/MIDI Patchbay.xcodeproj/project.pbxproj index 36dd127..74d4295 100644 --- a/MIDI Patchbay.xcodeproj/project.pbxproj +++ b/MIDI Patchbay.xcodeproj/project.pbxproj @@ -39,12 +39,12 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 2A37F4B5FDCFA73011CA2CEA /* PatchbayDocument.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = PatchbayDocument.nib; path = English.lproj/PatchbayDocument.nib; sourceTree = ""; }; - 2A37F4B7FDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 3092FEA123995FA60057E329 /* Base */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Base; path = Base.lproj/MainMenu.nib; sourceTree = ""; }; + 3092FEA223995FA60057E329 /* Base */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Base; path = Base.lproj/PatchbayDocument.nib; sourceTree = ""; }; + 3092FEA323995FA90057E329 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C12C800205AECD9D0066E007 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C12C800305AECD9D0066E007 /* MIDI Patchbay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MIDI Patchbay.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C152A6E907559AE9004FF49E /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon.icns; sourceTree = ""; }; @@ -274,14 +274,15 @@ 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 1030; }; buildConfigurationList = C101046C088A0A7C001DFE4F /* Build configuration list for PBXProject "MIDI Patchbay" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 1; knownRegions = ( en, + Base, ); mainGroup = 2A37F4AAFDCFA73011CA2CEA /* MIDI Patchbay */; projectDirPath = ""; @@ -343,7 +344,7 @@ 089C165FFE840EACC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( - 089C1660FE840EACC02AAC07 /* English */, + 3092FEA323995FA90057E329 /* en */, ); name = InfoPlist.strings; sourceTree = ""; @@ -351,7 +352,7 @@ 2A37F4B4FDCFA73011CA2CEA /* PatchbayDocument.nib */ = { isa = PBXVariantGroup; children = ( - 2A37F4B5FDCFA73011CA2CEA /* PatchbayDocument.nib */, + 3092FEA223995FA60057E329 /* Base */, ); name = PatchbayDocument.nib; sourceTree = ""; @@ -359,7 +360,7 @@ 2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */ = { isa = PBXVariantGroup; children = ( - 2A37F4B7FDCFA73011CA2CEA /* English */, + 3092FEA123995FA60057E329 /* Base */, ); name = MainMenu.nib; sourceTree = ""; @@ -370,15 +371,15 @@ C1010469088A0A7C001DFE4F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ""; GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_USE_GCC3_PFE_SUPPORT = NO; - HEADER_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ""; @@ -386,8 +387,9 @@ ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; + PRODUCT_BUNDLE_IDENTIFIER = com.notahat.MIDIPatchBay; PRODUCT_NAME = "MIDI Patchbay"; - SDKROOT = macosx10.10; + SDKROOT = macosx; SECTORDER_FLAGS = ""; VALID_ARCHS = x86_64; WARNING_CFLAGS = ( @@ -403,14 +405,14 @@ C101046A088A0A7C001DFE4F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; FRAMEWORK_SEARCH_PATHS = ""; - GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; GCC_USE_GCC3_PFE_SUPPORT = NO; - HEADER_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ""; @@ -418,10 +420,11 @@ ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; + PRODUCT_BUNDLE_IDENTIFIER = com.notahat.MIDIPatchBay; PRODUCT_NAME = "MIDI Patchbay"; - SDKROOT = macosx10.10; - "SDKROOT[arch=i386]" = macosx10.10; - "SDKROOT[arch=ppc]" = macosx10.10; + SDKROOT = macosx; + "SDKROOT[arch=i386]" = macosx; + "SDKROOT[arch=ppc]" = macosx; SECTORDER_FLAGS = ""; VALID_ARCHS = x86_64; WARNING_CFLAGS = ( @@ -437,12 +440,39 @@ C101046D088A0A7C001DFE4F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - HEADER_SEARCH_PATHS = ""; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)"; MACOSX_DEPLOYMENT_TARGET = 10.10; ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx10.10; - USER_HEADER_SEARCH_PATHS = .; + SDKROOT = macosx; + USER_HEADER_SEARCH_PATHS = ""; VALID_ARCHS = x86_64; }; name = Debug; @@ -450,16 +480,42 @@ C101046E088A0A7C001DFE4F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION_i386 = 4.0; GCC_VERSION_ppc = 3.3; - HEADER_SEARCH_PATHS = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)"; MACOSX_DEPLOYMENT_TARGET = 10.10; ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx10.10; - "SDKROOT[arch=i386]" = macosx10.10; - "SDKROOT[arch=ppc]" = macosx10.10; - USER_HEADER_SEARCH_PATHS = .; + SDKROOT = macosx; + "SDKROOT[arch=i386]" = macosx; + "SDKROOT[arch=ppc]" = macosx; + USER_HEADER_SEARCH_PATHS = ""; VALID_ARCHS = x86_64; }; name = Release; diff --git a/English.lproj/InfoPlist.strings b/en.lproj/InfoPlist.strings similarity index 100% rename from English.lproj/InfoPlist.strings rename to en.lproj/InfoPlist.strings From 2257a3ad296f186acd37895ec5342eb27e106e38 Mon Sep 17 00:00:00 2001 From: danomatika Date: Thu, 5 Dec 2019 17:05:49 +0100 Subject: [PATCH 03/20] fix conversion warnings --- Controller Classes/EndpointTableDataSource.m | 6 +++--- Controller Classes/PatchTableDataSource.m | 4 ++-- Controller Classes/PatchbayDocument.m | 10 +++++----- Model Classes/Patch.m | 2 +- PYMIDI/PYMIDIManager.m | 8 +++++--- PYMIDI/PYMIDIRealDestination.m | 4 ++-- PYMIDI/PYMIDIRealEndpoint.m | 4 ++-- PYMIDI/PYMIDIRealSource.m | 4 ++-- PYMIDI/PYMIDIUtils.m | 14 +++++++------- 9 files changed, 29 insertions(+), 27 deletions(-) diff --git a/Controller Classes/EndpointTableDataSource.m b/Controller Classes/EndpointTableDataSource.m index 930a9a1..9d4dfbc 100644 --- a/Controller Classes/EndpointTableDataSource.m +++ b/Controller Classes/EndpointTableDataSource.m @@ -38,7 +38,7 @@ - (void)setEndpointArray:(NSMutableArray*)newEndpointArray - (int)numberOfRowsInTableView:(NSTableView*)tableView { - return [endpointArray count]; + return (int)[endpointArray count]; } @@ -104,7 +104,7 @@ - (void)deleteSelection:(NSTableView*)tableView } else { - [self tableView:tableView removeEndpointAtIndex:[tableView selectedRow]]; + [self tableView:tableView removeEndpointAtIndex:(int)[tableView selectedRow]]; } } @@ -136,7 +136,7 @@ - (void)tableView:(NSTableView*)tableView newEndpointWithName:(NSString*)name // Allocate the new endpoint and add it to the endpoint array newEndpoint = [[endpointClass alloc] initWithName:newName]; - [self tableView:tableView addEndpoint:newEndpoint atIndex:[endpointArray count]]; + [self tableView:tableView addEndpoint:newEndpoint atIndex:(int)[endpointArray count]]; [newEndpoint release]; } diff --git a/Controller Classes/PatchTableDataSource.m b/Controller Classes/PatchTableDataSource.m index 80c097b..5ccb971 100644 --- a/Controller Classes/PatchTableDataSource.m +++ b/Controller Classes/PatchTableDataSource.m @@ -38,7 +38,7 @@ - (void)setPatchArray:(NSMutableArray*)newPatchArray - (int)numberOfRowsInTableView:(NSTableView*)tableView { - return [patchArray count]; + return (int)[patchArray count]; } @@ -91,7 +91,7 @@ - (void)tableView:(NSTableView*)tableView setObjectValue:(id)value forTableColum - (void)deleteSelection:(NSTableView*)tableView { - [document removePatchAtIndex:[tableView selectedRow]]; + [document removePatchAtIndex:(int)[tableView selectedRow]]; } diff --git a/Controller Classes/PatchbayDocument.m b/Controller Classes/PatchbayDocument.m index 0a26042..b361de1 100644 --- a/Controller Classes/PatchbayDocument.m +++ b/Controller Classes/PatchbayDocument.m @@ -237,7 +237,7 @@ - (void)midiSetupChanged:(NSNotification*)notification - (void)selectedPatchChanged:(NSNotification*)notification { - int patchIndex = [patchTable selectedRow]; + int patchIndex = (int)[patchTable selectedRow]; if (patchIndex != -1) selectedPatch = [patchArray objectAtIndex:patchIndex]; @@ -260,7 +260,7 @@ - (IBAction) addPatchButtonPressed:(id)sender { if (selectedPatch != nil) { Patch *patch = [[Patch alloc] initFromPatch:selectedPatch]; - [self addPatch:patch atIndex:[patchArray count]]; + [self addPatch:patch atIndex:(int)[patchArray count]]; [patch release]; } else { @@ -278,7 +278,7 @@ - (IBAction) addPatchButtonPressed:(id)sender do { output = [enumerator nextObject]; } while ([output isIACBus]); Patch *patch = [[Patch alloc] initWithInput:input output:output]; - [self addPatch:patch atIndex:[patchArray count]]; + [self addPatch:patch atIndex:(int)[patchArray count]]; [patch release]; } @@ -632,7 +632,7 @@ - (void)setShouldRemapChannel:(BOOL)shouldRemapChannel forPatch:(Patch*)patch - (IBAction)remapChannelPopUpChanged:(id)sender { - [self setRemappingChannel:[remapChannelPopUp indexOfSelectedItem] + 1 forPatch:selectedPatch]; + [self setRemappingChannel:(int)[remapChannelPopUp indexOfSelectedItem] + 1 forPatch:selectedPatch]; } @@ -1105,7 +1105,7 @@ - (IBAction)endpointPanelButtonPressed:(id)sender - (void)endpointPanelDidEnd:(NSWindow*)sheet returnCode:(int)returnCode contextInfo:(void*)contextInfo { - int tab = [virtualEndpointTabView indexOfTabViewItem:[virtualEndpointTabView selectedTabViewItem]]; + int tab = (int)[virtualEndpointTabView indexOfTabViewItem:[virtualEndpointTabView selectedTabViewItem]]; if (panelWasOpenedToInputs) { if (tab == 0 && [inputTable selectedRow] != -1) { diff --git a/Model Classes/Patch.m b/Model Classes/Patch.m index 4a15cab..59b7e01 100644 --- a/Model Classes/Patch.m +++ b/Model Classes/Patch.m @@ -504,7 +504,7 @@ - (void)setOutput:(PYMIDIEndpoint*)newOutput for (i = 0; i < packetList->numPackets; i++) packet = MIDIPacketNext (packet); - return (void*)packet - (void*)packetList; + return (unsigned int)((void*)packet - (void*)packetList); } diff --git a/PYMIDI/PYMIDIManager.m b/PYMIDI/PYMIDIManager.m index ab1af66..968ffc6 100644 --- a/PYMIDI/PYMIDIManager.m +++ b/PYMIDI/PYMIDIManager.m @@ -112,6 +112,8 @@ - (void)processMIDINotification:(const MIDINotification*)message [[NSNotificationCenter defaultCenter] postNotificationName:@"PYMIDISetupChanged" object:self]; } break; + default: + break; } isHandlingNotification = NO; @@ -143,7 +145,7 @@ - (void)updateRealSources // Find any non-virtual endpoints that we don't already know about int i; - int count = MIDIGetNumberOfSources(); + int count = (int)MIDIGetNumberOfSources(); for (i = 0; i < count; i++) { MIDIEndpointRef midiEndpointRef = MIDIGetSource (i); @@ -220,7 +222,7 @@ - (void)updateRealDestinations // Find any non-virtual endpoints that we don't already know about int i; - int count = MIDIGetNumberOfDestinations(); + int count = (int)MIDIGetNumberOfDestinations(); for (i = 0; i < count; i++) { MIDIEndpointRef midiEndpointRef = MIDIGetDestination (i); @@ -317,4 +319,4 @@ - (NSString*)nameOfNote:(Byte)note -@end \ No newline at end of file +@end diff --git a/PYMIDI/PYMIDIRealDestination.m b/PYMIDI/PYMIDIRealDestination.m index 09ed862..5749ce8 100644 --- a/PYMIDI/PYMIDIRealDestination.m +++ b/PYMIDI/PYMIDIRealDestination.m @@ -33,7 +33,7 @@ - (void)syncWithMIDIEndpoint if (midiEndpointRef && PYMIDIDoesDestinationStillExist (midiEndpointRef)) newEndpointRef = midiEndpointRef; else - newEndpointRef = NULL; + newEndpointRef = 0; if (!newEndpointRef) newEndpointRef = PYMIDIGetDestinationByUniqueID (uniqueID); if (!newEndpointRef) newEndpointRef = PYMIDIGetDestinationByName (name); @@ -64,7 +64,7 @@ - (void)stopIO if (!midiPortRef) return; MIDIPortDispose (midiPortRef); - midiPortRef = nil; + midiPortRef = 0; } diff --git a/PYMIDI/PYMIDIRealEndpoint.m b/PYMIDI/PYMIDIRealEndpoint.m index a05affe..34cb3ec 100644 --- a/PYMIDI/PYMIDIRealEndpoint.m +++ b/PYMIDI/PYMIDIRealEndpoint.m @@ -10,7 +10,7 @@ - (id)initWithMIDIEndpointRef:(MIDIEndpointRef)newMIDIEndpointRef self = [super initWithMIDIEndpointRef:newMIDIEndpointRef]; if (self != nil) { - midiPortRef = nil; + midiPortRef = 0; } return self; @@ -22,7 +22,7 @@ - (id)initWithDescriptor:(PYMIDIEndpointDescriptor*)descriptor self = [super initWithName:[descriptor name] uniqueID:[descriptor uniqueID]]; if (self != nil) { - midiPortRef = nil; + midiPortRef = 0; } return self; diff --git a/PYMIDI/PYMIDIRealSource.m b/PYMIDI/PYMIDIRealSource.m index 8921645..b46a45f 100644 --- a/PYMIDI/PYMIDIRealSource.m +++ b/PYMIDI/PYMIDIRealSource.m @@ -37,7 +37,7 @@ - (void)syncWithMIDIEndpoint if (midiEndpointRef && PYMIDIDoesSourceStillExist (midiEndpointRef)) newEndpointRef = midiEndpointRef; else - newEndpointRef = NULL; + newEndpointRef = 0; if (!newEndpointRef) newEndpointRef = PYMIDIGetSourceByUniqueID (uniqueID); if (!newEndpointRef) newEndpointRef = PYMIDIGetSourceByName (name); @@ -70,7 +70,7 @@ - (void)stopIO MIDIPortDisconnectSource (midiPortRef, midiEndpointRef); MIDIPortDispose (midiPortRef); - midiPortRef = nil; + midiPortRef = 0; } diff --git a/PYMIDI/PYMIDIUtils.m b/PYMIDI/PYMIDIUtils.m index e1970e7..e86e963 100644 --- a/PYMIDI/PYMIDIUtils.m +++ b/PYMIDI/PYMIDIUtils.m @@ -91,7 +91,7 @@ return endpoint; } - return NULL; + return 0; } @@ -109,7 +109,7 @@ if (name != nil && [name isEqualToString:nameToMatch]) return endpoint; } - return NULL; + return 0; } @@ -147,7 +147,7 @@ return endpoint; } - return NULL; + return 0; } @@ -164,7 +164,7 @@ if (name != nil && [name isEqualToString:nameToMatch]) return endpoint; } - return NULL; + return 0; } @@ -176,14 +176,14 @@ MIDIEndpointRef endpoint; SInt32 usedID; - count = MIDIGetNumberOfSources(); + count = (int)MIDIGetNumberOfSources(); for (index = 0; index < count; index++) { endpoint = MIDIGetSource (index); MIDIObjectGetIntegerProperty (endpoint, kMIDIPropertyUniqueID, &usedID); if (usedID == uniqueID) return true; } - count = MIDIGetNumberOfDestinations(); + count = (int)MIDIGetNumberOfDestinations(); for (index = 0; index < count; index++) { endpoint = MIDIGetDestination (index); MIDIObjectGetIntegerProperty (endpoint, kMIDIPropertyUniqueID, &usedID); @@ -201,7 +201,7 @@ static SInt32 sequence = 0; do { - uniqueID = time (NULL) + sequence++; + uniqueID = (SInt32)time(NULL) + sequence++; } while (PYMIDIIsUniqueIDInUse (uniqueID)); return uniqueID; From 5625a0a2dad0a157e1b251dc1ce6be37d4f47f2a Mon Sep 17 00:00:00 2001 From: danomatika Date: Thu, 5 Dec 2019 17:40:29 +0100 Subject: [PATCH 04/20] rework table view data source into base class to avoid need for performSelector: which was causing ARC warnings --- .../PatchbayDocument.nib/designable.nib | 48 +++++++++--------- .../PatchbayDocument.nib/keyedobjects.nib | Bin 29857 -> 35080 bytes Controller Classes/EndpointTableDataSource.h | 5 +- Controller Classes/PatchTableDataSource.h | 4 +- Controller Classes/TableDataSource.h | 8 +++ Controller Classes/TableDataSource.m | 7 +++ MIDI Patchbay.xcodeproj/project.pbxproj | 6 +++ View Classes/KeyTableView.m | 9 ++-- 8 files changed, 52 insertions(+), 35 deletions(-) create mode 100644 Controller Classes/TableDataSource.h create mode 100644 Controller Classes/TableDataSource.m diff --git a/Base.lproj/PatchbayDocument.nib/designable.nib b/Base.lproj/PatchbayDocument.nib/designable.nib index 0642ecd..b11bb5f 100644 --- a/Base.lproj/PatchbayDocument.nib/designable.nib +++ b/Base.lproj/PatchbayDocument.nib/designable.nib @@ -1,8 +1,9 @@ - - + + - + + @@ -52,11 +53,11 @@ - + - + @@ -74,7 +75,7 @@ - + @@ -90,14 +91,13 @@ - -