Cocoa Port:

- Completely revamp the ROM Info panel to have a more modern and mainstream look and feel.
- The ROM Info panel can now be resized and scrolled through.
- Each individual info section in the ROM Info panel can now be expanded or collapsed.
- Fix bugs where the ROM capacity and ROM used capacity info weren't being calculated correctly.
- Do a bunch of random UI text clipping fixes when running on OS X Yosemite.
This commit is contained in:
rogerman 2015-02-20 22:18:08 +00:00
parent 06ece0cb07
commit 83578add74
11 changed files with 61872 additions and 60362 deletions

View File

@ -741,6 +741,9 @@
ABAD3E7913AF1D6D00502E1E /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */; };
ABAD3E7A13AF1D6D00502E1E /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */; };
ABAD3E7B13AF1D6D00502E1E /* WavFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */; };
ABAF0A411A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; };
ABAF0A421A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; };
ABAF0A431A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; };
ABB24F6D1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; };
ABB24F6E1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; };
ABB24F6F1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; };
@ -1220,6 +1223,8 @@
ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sse_optimized.cpp; sourceTree = "<group>"; };
ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TDStretch.cpp; sourceTree = "<group>"; };
ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WavFile.cpp; sourceTree = "<group>"; };
ABAF0A3F1A96E67200B95B75 /* RomInfoPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RomInfoPanel.h; sourceTree = "<group>"; };
ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RomInfoPanel.mm; sourceTree = "<group>"; };
ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGLDisplayOutput_3_2.cpp; sourceTree = "<group>"; };
ABB24F6C1A81EE92006C1108 /* OGLDisplayOutput_3_2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGLDisplayOutput_3_2.h; sourceTree = "<group>"; };
ABB3C63B1501BB8300E0C22E /* DeSmuME_Prefix_OpenEmu.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeSmuME_Prefix_OpenEmu.pch; sourceTree = "<group>"; };
@ -1688,6 +1693,7 @@
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
ABAF0A3F1A96E67200B95B75 /* RomInfoPanel.h */,
AB564902186E6EBC002740F4 /* Slot2WindowDelegate.h */,
ABF2B9F81690412A000FF7C0 /* troubleshootingWindowDelegate.h */,
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
@ -1699,6 +1705,7 @@
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */,
AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */,
ABF2B9FA16904133000FF7C0 /* troubleshootingWindowDelegate.mm */,
);
@ -2765,6 +2772,7 @@
ABD1FF531345ACBF00AF11D1 /* ConvertUTF.c in Sources */,
ABAD3E7113AF1D6D00502E1E /* AAFilter.cpp in Sources */,
ABD1FED21345AC8400AF11D1 /* arm_instructions.cpp in Sources */,
ABAF0A421A96E67200B95B75 /* RomInfoPanel.mm in Sources */,
ABD1FED31345AC8400AF11D1 /* armcpu.cpp in Sources */,
ABD1FED41345AC8400AF11D1 /* bios.cpp in Sources */,
ABD1FF5B1345ACBF00AF11D1 /* cache.cpp in Sources */,
@ -2974,6 +2982,7 @@
AB796D0B15CDCBA200C59155 /* FIRFilter.cpp in Sources */,
AB796D0C15CDCBA200C59155 /* firmware.cpp in Sources */,
AB796D0D15CDCBA200C59155 /* fs-linux.cpp in Sources */,
ABAF0A411A96E67200B95B75 /* RomInfoPanel.mm in Sources */,
AB796D0E15CDCBA200C59155 /* gfx3d.cpp in Sources */,
AB796D0F15CDCBA200C59155 /* GPU.cpp in Sources */,
AB9038AF17C5ED2200F410BD /* slot1_retail_auto.cpp in Sources */,
@ -3132,6 +3141,7 @@
AB8F3C821A53AC2600A80BF6 /* decrypt.cpp in Sources */,
AB8F3C831A53AC2600A80BF6 /* directory.cpp in Sources */,
AB8F3C841A53AC2600A80BF6 /* Disassembler.cpp in Sources */,
ABAF0A431A96E67200B95B75 /* RomInfoPanel.mm in Sources */,
AB8F3C851A53AC2600A80BF6 /* disc.cpp in Sources */,
AB8F3C861A53AC2600A80BF6 /* dlditool.cpp in Sources */,
AB8F3C871A53AC2600A80BF6 /* driver.cpp in Sources */,
@ -3513,7 +3523,6 @@
"DEBUG=1",
GDB_STUB,
);
MACOSX_DEPLOYMENT_TARGET = 10.5;
PRODUCT_NAME = "DeSmuME (Debug, dev+)";
};
name = Debug;
@ -3526,7 +3535,6 @@
GDB_STUB,
);
LLVM_LTO = YES;
MACOSX_DEPLOYMENT_TARGET = 10.5;
PRODUCT_NAME = "DeSmuME (dev+)";
};
name = Release;
@ -3535,6 +3543,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_CXX_LIBRARY = "libc++";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/openemu\"",
@ -3551,6 +3560,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_CXX_LIBRARY = "libc++";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/openemu\"",
@ -3580,7 +3590,6 @@
INFOPLIST_FILE = Info.plist;
LLVM_LTO = YES;
LLVM_VECTORIZE_LOOPS = YES;
MACOSX_DEPLOYMENT_TARGET = 10.5;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_NAME = DeSmuME;
SKIP_INSTALL = NO;
@ -3603,7 +3612,6 @@
GCC_UNROLL_LOOPS = YES;
IBC_FLATTEN_NIBS = YES;
LLVM_LTO = YES;
MACOSX_DEPLOYMENT_TARGET = 10.5;
VALIDATE_PRODUCT = YES;
};
name = Release;
@ -3646,7 +3654,7 @@
IBC_FLATTEN_NIBS = NO;
INFOPLIST_FILE = "Info (Debug).plist";
LD_NO_PIE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.6;
MACOSX_DEPLOYMENT_TARGET = 10.5;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "DeSmuME (Debug)";
SDKROOT = macosx;
@ -3692,7 +3700,7 @@
INFOPLIST_FILE = Info.plist;
LD_NO_PIE = YES;
LLVM_VECTORIZE_LOOPS = YES;
MACOSX_DEPLOYMENT_TARGET = 10.6;
MACOSX_DEPLOYMENT_TARGET = 10.5;
PRODUCT_NAME = DeSmuME;
SDKROOT = macosx;
STRIP_INSTALLED_PRODUCT = NO;

View File

@ -1131,6 +1131,11 @@
ABC3AF3514B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */; };
ABC3AF3614B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */; };
ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
ABC3DEBD1A96EA96009EC345 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC3DEBC1A96EA96009EC345 /* RomInfoPanel.mm */; };
ABC3DEBE1A96EA96009EC345 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC3DEBC1A96EA96009EC345 /* RomInfoPanel.mm */; };
ABC3DEBF1A96EA96009EC345 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC3DEBC1A96EA96009EC345 /* RomInfoPanel.mm */; };
ABC3DEC01A96EA96009EC345 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC3DEBC1A96EA96009EC345 /* RomInfoPanel.mm */; };
ABC3DEC11A96EA96009EC345 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC3DEBC1A96EA96009EC345 /* RomInfoPanel.mm */; };
ABD0A53A1501AA5A0074A094 /* coreaudiosound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD0A5341501AA5A0074A094 /* coreaudiosound.cpp */; };
ABD0A53B1501AA5A0074A094 /* ringbuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD0A5351501AA5A0074A094 /* ringbuffer.cpp */; };
ABD597BC187CD95A00069403 /* Image_GuitarGrip.png in Resources */ = {isa = PBXBuildFile; fileRef = ABD597BB187CD95A00069403 /* Image_GuitarGrip.png */; };
@ -1428,6 +1433,8 @@
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeMute_16x16.png; path = images/Icon_VolumeMute_16x16.png; sourceTree = "<group>"; };
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeOneThird_16x16.png; path = images/Icon_VolumeOneThird_16x16.png; sourceTree = "<group>"; };
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeTwoThird_16x16.png; path = images/Icon_VolumeTwoThird_16x16.png; sourceTree = "<group>"; };
ABC3DEBB1A96EA96009EC345 /* RomInfoPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RomInfoPanel.h; sourceTree = "<group>"; };
ABC3DEBC1A96EA96009EC345 /* RomInfoPanel.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RomInfoPanel.mm; sourceTree = "<group>"; };
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = DefaultKeyMappings.plist; sourceTree = "<group>"; };
@ -1961,6 +1968,7 @@
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
AB213D43170CB141006DDB0F /* InputProfileController.h */,
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
ABC3DEBB1A96EA96009EC345 /* RomInfoPanel.h */,
ABAE2F7918682B6C00C92F4F /* Slot2WindowDelegate.h */,
ABA0356E169127BB00817C69 /* troubleshootingWindowDelegate.h */,
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
@ -1972,6 +1980,7 @@
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
AB213D44170CB141006DDB0F /* InputProfileController.mm */,
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
ABC3DEBC1A96EA96009EC345 /* RomInfoPanel.mm */,
ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */,
ABA0356F169127C000817C69 /* troubleshootingWindowDelegate.mm */,
);
@ -3380,6 +3389,7 @@
ABAE2F8818682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
ABECB50D18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51818A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEC11A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3524,6 +3534,7 @@
ABAE2F8418682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
ABECB50A18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51518A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEBD1A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3698,6 +3709,7 @@
AB8FFCB4186F8E5400C10085 /* slot2_mpcf.cpp in Sources */,
ABECB50918A460710052D52A /* xbrz.cpp in Sources */,
ABECB51418A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEBE1A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3872,6 +3884,7 @@
ABAE2F8718682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
ABECB50C18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51718A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEC01A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -4016,6 +4029,7 @@
ABAE2F8618682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
ABECB50B18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51618A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEBF1A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -4081,7 +4095,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = ppc;
"GCC_MODEL_TUNING[sdk=macosx10.5][arch=ppc]" = G5;
GCC_PREPROCESSOR_DEFINITIONS = (
NDEBUG,
PUBLIC_RELEASE,
@ -4269,10 +4282,7 @@
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
"GCC_MODEL_PPC64[sdk=macosx10.5][arch=ppc64]" = YES;
GCC_MODEL_TUNING = "";
"GCC_MODEL_TUNING[sdk=macosx10.4][arch=ppc]" = G4;
"GCC_MODEL_TUNING[sdk=macosx10.5][arch=ppc64]" = G5;
"GCC_MODEL_TUNING[sdk=macosx10.5][arch=ppc]" = G4;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 3;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = DeSmuME_Prefix.pch;

View File

@ -714,6 +714,8 @@
<true/>
<key>Render3D_Threads</key>
<integer>0</integer>
<key>RomInfoPanel_SectionViewState</key>
<dict/>
<key>Slot2_GBA_CartridgePath</key>
<string></string>
<key>Slot2_GBA_SRAMPath</key>

View File

@ -56,12 +56,14 @@
- (NSString *) serial;
- (NSString *) developerName;
- (NSString *) developerNameAndCode;
- (NSString *) unitCodeStringUsingID:(NSInteger)unitCodeID;
- (NSImage *) icon;
- (void) handleAdvansceneDatabaseInfo;
+ (void) changeRomSaveType:(NSInteger)saveTypeID;
+ (NSInteger) saveTypeByString:(NSString *)saveTypeString;
+ (NSMutableDictionary *) romNotLoadedBindings;
+ (NSString *) byteSizeStringWithLargerUnit:(NSUInteger)byteSize;
@end

View File

@ -175,6 +175,7 @@ static NSMutableDictionary *saveTypeValues = nil;
[self.header setValue:[self developerName] forKey:@"gameDeveloper"];
[self.header setValue:[self developerNameAndCode] forKey:@"gameDeveloperWithCode"];
[self.header setValue:[NSNumber numberWithInteger:ndsRomHeader->makerCode] forKey:@"makerCode"];
[self.header setValue:[NSNumber numberWithInteger:ndsRomHeader->unitCode] forKey:@"unitCode"];
[self.header setValue:[NSNumber numberWithInteger:ndsRomHeader->cardSize] forKey:@"romSize"];
[self.header setValue:[NSNumber numberWithInteger:ndsRomHeader->ARM9src] forKey:@"arm9BinaryOffset"];
[self.header setValue:[NSNumber numberWithInteger:ndsRomHeader->ARM9exe] forKey:@"arm9BinaryEntryAddress"];
@ -196,7 +197,8 @@ static NSMutableDictionary *saveTypeValues = nil;
[self.bindings setValue:[self.header objectForKey:@"gameDeveloper"] forKey:@"gameDeveloper"];
[self.bindings setValue:[self.header objectForKey:@"gameDeveloperWithCode"] forKey:@"gameDeveloperWithCode"];
[self.bindings setValue:[NSString stringWithFormat:@"0x%04X", [[self.header objectForKey:@"makerCode"] intValue]] forKey:@"makerCode"];
[self.bindings setValue:[NSString stringWithFormat:@"%i", [[self.header objectForKey:@"romSize"] intValue]] forKey:@"romSize"];
[self.bindings setValue:[self unitCodeStringUsingID:[[self.header objectForKey:@"unitCode"] intValue]] forKey:@"unitCode"];
[self.bindings setValue:[CocoaDSRom byteSizeStringWithLargerUnit:(128*1024) << [[self.header objectForKey:@"romSize"] intValue]] forKey:@"romSize"];
[self.bindings setValue:[NSString stringWithFormat:@"0x%08X", [[self.header objectForKey:@"arm9BinaryOffset"] intValue]] forKey:@"arm9BinaryOffset"];
[self.bindings setValue:[NSString stringWithFormat:@"0x%08X", [[self.header objectForKey:@"arm9BinaryEntryAddress"] intValue]] forKey:@"arm9BinaryEntryAddress"];
[self.bindings setValue:[NSString stringWithFormat:@"0x%08X", [[self.header objectForKey:@"arm9BinaryStartAddress"] intValue]] forKey:@"arm9BinaryStartAddress"];
@ -211,7 +213,8 @@ static NSMutableDictionary *saveTypeValues = nil;
[self.bindings setValue:[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, [[self.header objectForKey:@"fatSize"] intValue]] forKey:@"fatSize"];
[self.bindings setValue:[NSString stringWithFormat:@"0x%08X", [[self.header objectForKey:@"fatOffset"] intValue]] forKey:@"fatOffset"];
[self.bindings setValue:[NSString stringWithFormat:@"0x%08X", [[self.header objectForKey:@"iconOffset"] intValue]] forKey:@"iconOffset"];
[self.bindings setValue:[NSString stringWithFormat:@"%i", [[self.header objectForKey:@"usedRomSize"] intValue]] forKey:@"usedRomSize"];
[self.bindings setValue:[CocoaDSRom byteSizeStringWithLargerUnit:[[self.header objectForKey:@"usedRomSize"] intValue]] forKey:@"usedRomSize"];
[self.bindings setValue:[CocoaDSRom byteSizeStringWithLargerUnit:(((128*1024) << [[self.header objectForKey:@"romSize"] intValue]) - [[self.header objectForKey:@"usedRomSize"] intValue])] forKey:@"unusedCapacity"];
}
// Get ROM image
@ -344,6 +347,33 @@ static NSMutableDictionary *saveTypeValues = nil;
return [NSString stringWithFormat:@"%s [0x%04X]", getDeveloperNameByID(ndsRomHeader->makerCode).c_str(), ndsRomHeader->makerCode];
}
- (NSString *) unitCodeStringUsingID:(NSInteger)unitCodeID
{
switch (unitCodeID)
{
case 0:
return @"NDS";
break;
case 1:
return @"DSi (Invalid ID)";
break;
case 2:
return @"NDS + DSi";
break;
case 3:
return @"DSi";
break;
default:
break;
}
return @"Unknown";
}
- (NSImage *) icon
{
NSImage *newImage = nil;
@ -547,26 +577,53 @@ static NSMutableDictionary *saveTypeValues = nil;
NSSTRING_STATUS_NO_ROM_LOADED, @"gameCode",
NSSTRING_STATUS_NO_ROM_LOADED, @"gameDeveloper",
NSSTRING_STATUS_NO_ROM_LOADED, @"gameDeveloperWithCode",
NSSTRING_STATUS_NO_ROM_LOADED, @"unitCode",
NSSTRING_STATUS_NO_ROM_LOADED, @"makerCode",
[NSString stringWithFormat:NSSTRING_STATUS_NO_ROM_LOADED, 0], @"romSize",
[NSString stringWithFormat:@"0x%08X", 0], @"arm9BinaryOffset",
[NSString stringWithFormat:@"0x%08X", 0], @"arm9BinaryEntryAddress",
[NSString stringWithFormat:@"0x%08X", 0], @"arm9BinaryStartAddress",
[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"romSize",
@"----------", @"arm9BinaryOffset",
@"----------", @"arm9BinaryEntryAddress",
@"----------", @"arm9BinaryStartAddress",
[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"arm9BinarySize",
[NSString stringWithFormat:@"0x%08X", 0], @"arm7BinaryOffset",
[NSString stringWithFormat:@"0x%08X", 0], @"arm7BinaryEntryAddress",
[NSString stringWithFormat:@"0x%08X", 0], @"arm7BinaryStartAddress",
@"----------", @"arm7BinaryOffset",
@"----------", @"arm7BinaryEntryAddress",
@"----------", @"arm7BinaryStartAddress",
[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"arm7BinarySize",
[NSString stringWithFormat:@"0x%08X", 0], @"fntOffset",
@"----------", @"fntOffset",
[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"fntTableSize",
[NSString stringWithFormat:@"0x%08X", 0], @"fatOffset",
@"----------", @"fatOffset",
[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"fatSize",
[NSString stringWithFormat:@"0x%08X", 0], @"iconOffset",
[NSString stringWithFormat:NSSTRING_STATUS_NO_ROM_LOADED, 0], @"usedRomSize",
@"----------", @"iconOffset",
[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"usedRomSize",
[NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"unusedCapacity",
iconImage, @"iconImage",
nil];
}
+ (NSString *) byteSizeStringWithLargerUnit:(NSUInteger)byteSize
{
float kilobyteSize = byteSize / 1024.0;
float megabyteSize = kilobyteSize / 1024.0;
float gigabyteSize = megabyteSize / 1024.0;
NSString *byteString = [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, byteSize];
NSString *unitString = byteString;
if (gigabyteSize > 1.0f)
{
unitString = [NSString stringWithFormat:@"%@ (%1.1f GB)", byteString, gigabyteSize];
}
else if (megabyteSize > 1.0f)
{
unitString = [NSString stringWithFormat:@"%@ (%1.1f MB)", byteString, megabyteSize];
}
else if (kilobyteSize > 1.0f)
{
unitString = [NSString stringWithFormat:@"%@ (%1.1f KB)", byteString, kilobyteSize];
}
return unitString;
}
@end
/********************************************************************************************

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
/*
Copyright (C) 2015 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import <Cocoa/Cocoa.h>
#define ROMINFO_PANEL_SECTION_HEADER_HEIGHT 22
@interface RomInfoPanelSectionView : NSView
{
NSButton *disclosureButton;
NSTextField *sectionLabel;
CGFloat expandedHeight;
CGFloat collapsedHeight;
CGFloat contentHeight;
}
@property (readonly) IBOutlet NSButton *disclosureButton;
@property (readonly) IBOutlet NSTextField *sectionLabel;
@property (assign) BOOL isExpanded;
@property (readonly) CGFloat expandedHeight;
@property (readonly) CGFloat collapsedHeight;
@property (readonly) CGFloat contentHeight;
- (NSString *) stringFromSectionLabel;
@end
@interface RomInfoContentView : NSView
@end
@interface RomInfoPanel : NSPanel
{
NSSize _panelMaxSize;
NSSize _mainViewMaxSize;
RomInfoPanelSectionView *generalSectionView;
RomInfoPanelSectionView *titlesSectionView;
RomInfoPanelSectionView *armBinariesSectionView;
RomInfoPanelSectionView *fileSystemSectionView;
RomInfoPanelSectionView *miscSectionView;
NSArray *_sectionViewList;
}
@property (readonly) IBOutlet RomInfoPanelSectionView *generalSectionView;
@property (readonly) IBOutlet RomInfoPanelSectionView *titlesSectionView;
@property (readonly) IBOutlet RomInfoPanelSectionView *armBinariesSectionView;
@property (readonly) IBOutlet RomInfoPanelSectionView *fileSystemSectionView;
@property (readonly) IBOutlet RomInfoPanelSectionView *miscSectionView;
- (IBAction) toggleViewState:(id)sender;
- (void) autoLayout;
- (void) setupUserDefaults;
- (void) writeDefaults;
@end

View File

@ -0,0 +1,229 @@
/*
Copyright (C) 2015 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import "RomInfoPanel.h"
#import "cocoa_util.h"
@implementation RomInfoPanelSectionView
@synthesize disclosureButton;
@synthesize sectionLabel;
@dynamic isExpanded;
@synthesize expandedHeight;
@synthesize collapsedHeight;
@synthesize contentHeight;
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self == nil)
{
return self;
}
expandedHeight = frame.size.height;
collapsedHeight = ROMINFO_PANEL_SECTION_HEADER_HEIGHT;
contentHeight = expandedHeight - collapsedHeight;
return self;
}
- (void) setIsExpanded:(BOOL)theState
{
[disclosureButton setState:(theState) ? NSOnState : NSOffState];
NSRect newFrame = [self frame];
newFrame.size.height = (theState) ? expandedHeight : collapsedHeight;
[self setFrame:newFrame];
}
- (BOOL) isExpanded
{
return ([disclosureButton state] == NSOnState);
}
- (NSString *) stringFromSectionLabel
{
if (sectionLabel != nil)
{
return [sectionLabel stringValue];
}
return @"";
}
@end
@implementation RomInfoContentView
// Override this method here to prevent all forms of horizontal scrolling.
// This even includes scrolling by means of gestures.
- (NSRect)adjustScroll:(NSRect)proposedVisibleRect
{
proposedVisibleRect.origin.x = 0.0f;
return proposedVisibleRect;
}
@end
@implementation RomInfoPanel
@synthesize generalSectionView;
@synthesize titlesSectionView;
@synthesize armBinariesSectionView;
@synthesize fileSystemSectionView;
@synthesize miscSectionView;
- (id)init
{
self = [super init];
if(self == nil)
{
return nil;
}
_sectionViewList = nil;
_panelMaxSize.width = 1.0f;
_panelMaxSize.height = 1.0f;
_mainViewMaxSize.width = 1.0f;
_mainViewMaxSize.height = 1.0f;
return self;
}
- (void)dealloc
{
[_sectionViewList release];
[super dealloc];
}
- (IBAction) toggleViewState:(id)sender
{
NSButton *disclosureTriangle = (NSButton *)sender;
RomInfoPanelSectionView *sv = (RomInfoPanelSectionView *)[disclosureTriangle superview];
const BOOL isSectionExpanded = [CocoaDSUtil getIBActionSenderButtonStateBool:disclosureTriangle];
[sv setIsExpanded:isSectionExpanded];
[self autoLayout];
}
// Since we want to maintain backwards compatibility with OS X v10.5, we need to roll our
// own custom autolayout method.
- (void) autoLayout
{
// Calculate the heights of the superviews.
NSSize newMainViewSize = _mainViewMaxSize;
NSSize newPanelMaxSize = _panelMaxSize;
for (RomInfoPanelSectionView *sv in _sectionViewList)
{
const BOOL isExpanded = [sv isExpanded];
const CGFloat svContentHeight = [sv contentHeight];
newMainViewSize.height -= ((isExpanded) ? 0.0f : svContentHeight);
newPanelMaxSize.height -= ((isExpanded) ? 0.0f : svContentHeight);
}
// Set the superview heights.
NSView *mainView = [[_sectionViewList objectAtIndex:0] superview];
[mainView setFrameSize:newMainViewSize];
[self setContentMaxSize:newPanelMaxSize];
// Place all of the views in their final locations by enumerating through each section
// view and stacking them on top of one another. This requires that the enumeration is
// done in a specific order, so we'll enumerate manually in this case.
CGFloat originY = 0.0f; // Keeps track of the current origin location as we enumerate through each section view.
for (size_t j = 0; j < [_sectionViewList count]; j++)
{
RomInfoPanelSectionView *sv = (RomInfoPanelSectionView *)[_sectionViewList objectAtIndex:j];
NSPoint svOrigin = [sv frame].origin;
svOrigin.y = originY;
[sv setFrameOrigin:svOrigin];
originY += [sv frame].size.height;
}
// If the panel is currently larger than the new max size, automatically reduce its size
// to match the new max size.
CGFloat heightDiff = [[self contentView] frame].size.height - [self contentMaxSize].height;
if (heightDiff > 0.0f)
{
NSRect newFrameRect = [self frame];
newFrameRect.size.height -= heightDiff;
newFrameRect.origin.y += heightDiff;
[self setFrame:newFrameRect display:YES animate:NO];
}
}
- (void) setupUserDefaults
{
// Add each section view to this list as they would appear in the panel
// from bottom to top order.
_sectionViewList = [[NSArray alloc] initWithObjects:
miscSectionView,
fileSystemSectionView,
armBinariesSectionView,
titlesSectionView,
generalSectionView,
nil];
NSView *mainView = [[_sectionViewList objectAtIndex:0] superview];
_panelMaxSize = [self contentMaxSize];
_mainViewMaxSize = [mainView frame].size;
// Toggle each view state per user preferences.
NSDictionary *viewStatesDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"RomInfoPanel_SectionViewState"];
if (viewStatesDict != nil)
{
for (RomInfoPanelSectionView *sv in _sectionViewList)
{
NSNumber *theStateObj = (NSNumber *)[viewStatesDict objectForKey:[sv stringFromSectionLabel]];
[sv setIsExpanded:(theStateObj != nil) ? [theStateObj boolValue] : YES];
}
}
else
{
for (RomInfoPanelSectionView *sv in _sectionViewList)
{
[sv setIsExpanded:YES];
}
}
// Perform an autolayout to reflect possible changes to the panel states.
[self autoLayout];
}
- (void) writeDefaults
{
NSMutableDictionary *viewStatesDict = [NSMutableDictionary dictionaryWithCapacity:[_sectionViewList count]];
for (RomInfoPanelSectionView *sv in _sectionViewList)
{
[viewStatesDict setObject:[NSNumber numberWithBool:[sv isExpanded]] forKey:[sv stringFromSectionLabel]];
}
[[NSUserDefaults standardUserDefaults] setObject:viewStatesDict forKey:@"RomInfoPanel_SectionViewState"];
}
#pragma mark NSPanel Methods
- (BOOL)becomesKeyOnlyIfNeeded
{
return YES;
}
@end

View File

@ -21,6 +21,7 @@
@class InputPrefsView;
@class InputManager;
@class FileMigrationDelegate;
@class RomInfoPanel;
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
@ -41,6 +42,7 @@
NSArrayController *inputDeviceListController;
FileMigrationDelegate *migrationDelegate;
InputManager *inputManager;
RomInfoPanel *romInfoPanel;
NSWindow *prefWindow;
NSWindow *troubleshootingWindow;
@ -52,12 +54,6 @@
NSMenu *mLoadStateSlot;
NSMenu *mSaveStateSlot;
NSBox *boxGeneralInfo;
NSBox *boxTitles;
NSBox *boxARMBinaries;
NSBox *boxFileSystem;
NSBox *boxMisc;
BOOL isAppRunningOnIntel;
BOOL isDeveloperPlusBuild;
}
@ -82,12 +78,7 @@
@property (readonly) IBOutlet NSMenu *mLoadStateSlot;
@property (readonly) IBOutlet NSMenu *mSaveStateSlot;
@property (readonly) IBOutlet InputPrefsView *inputPrefsView;
@property (readonly) IBOutlet NSBox *boxGeneralInfo;
@property (readonly) IBOutlet NSBox *boxTitles;
@property (readonly) IBOutlet NSBox *boxARMBinaries;
@property (readonly) IBOutlet NSBox *boxFileSystem;
@property (readonly) IBOutlet NSBox *boxMisc;
@property (readonly) IBOutlet RomInfoPanel *romInfoPanel;
@property (assign) BOOL isAppRunningOnIntel;
@property (assign) BOOL isDeveloperPlusBuild;
@ -100,7 +91,6 @@
- (void) setupSlotMenuItems;
- (NSMenuItem *) addSlotMenuItem:(NSMenu *)menu slotNumber:(NSUInteger)slotNumber;
- (void) setupUserDefaults;
- (void) setRomInfoPanelBoxTitleColors;
- (void) restoreDisplayWindowStates;
- (void) saveDisplayWindowStates;

View File

@ -20,6 +20,7 @@
#import "DisplayWindowController.h"
#import "EmuControllerDelegate.h"
#import "FileMigrationDelegate.h"
#import "RomInfoPanel.h"
#import "Slot2WindowDelegate.h"
#import "preferencesWindowDelegate.h"
#import "troubleshootingWindowDelegate.h"
@ -56,12 +57,7 @@
@synthesize cheatWindowController;
@synthesize migrationDelegate;
@synthesize inputManager;
@synthesize boxGeneralInfo;
@synthesize boxTitles;
@synthesize boxARMBinaries;
@synthesize boxFileSystem;
@synthesize boxMisc;
@synthesize romInfoPanel;
@synthesize isAppRunningOnIntel;
@synthesize isDeveloperPlusBuild;
@ -172,10 +168,6 @@
[aboutWindowController setContent:aboutWindowProperties];
// Change the title colors of the NSBox objects in the ROM Info panel. We change the
// colors manually here because you can't change them in Interface Builder. Boo!!!
[self setRomInfoPanelBoxTitleColors];
// Set the preferences window to the general view by default.
[[prefWindowDelegate toolbar] setSelectedItemIdentifier:@"General"];
[prefWindowDelegate changePrefView:self];
@ -347,6 +339,7 @@
// Save some settings to user defaults before app termination
[self saveDisplayWindowStates];
[romInfoPanel writeDefaults];
[[NSUserDefaults standardUserDefaults] setDouble:[emuControl lastSetSpeedScalar] forKey:@"CoreControl_SpeedScalar"];
[[NSUserDefaults standardUserDefaults] setBool:[cdsCore isSpeedLimitEnabled] forKey:@"CoreControl_EnableSpeedLimit"];
[[NSUserDefaults standardUserDefaults] setBool:[cdsCore isFrameSkipEnabled] forKey:@"CoreControl_EnableAutoFrameSkip"];
@ -577,6 +570,9 @@
[inputManager setMappingsWithMappings:userMappings];
[[inputManager hidManager] setDeviceListController:inputDeviceListController];
// Set up the ROM Info panel.
[romInfoPanel setupUserDefaults];
// Set up the preferences window.
[prefWindowDelegate setupUserDefaults];
@ -587,23 +583,6 @@
[emuControl setupUserDefaults];
}
- (void) setRomInfoPanelBoxTitleColors
{
NSColor *boxTitleColor = [NSColor whiteColor];
[[boxGeneralInfo titleCell] setTextColor:boxTitleColor];
[[boxTitles titleCell] setTextColor:boxTitleColor];
[[boxARMBinaries titleCell] setTextColor:boxTitleColor];
[[boxFileSystem titleCell] setTextColor:boxTitleColor];
[[boxMisc titleCell] setTextColor:boxTitleColor];
[boxGeneralInfo setNeedsDisplay:YES];
[boxTitles setNeedsDisplay:YES];
[boxARMBinaries setNeedsDisplay:YES];
[boxFileSystem setNeedsDisplay:YES];
[boxMisc setNeedsDisplay:YES];
}
- (void) restoreDisplayWindowStates
{
EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content];