Index: trunk/ChameleonPrefPane/Sources/ChameleonPrefPane.mm =================================================================== --- trunk/ChameleonPrefPane/Sources/ChameleonPrefPane.mm (revision 47) +++ trunk/ChameleonPrefPane/Sources/ChameleonPrefPane.mm (revision 48) @@ -101,10 +101,7 @@ [mPartitionsDict retain]; // Initialize bootConfig desc dict - [[BootSetupController instance] addOptionsDesc]; - [[BootFlagsController instance] addOptionsDesc]; - [[PeripheralsController instance] addOptionsDesc]; - [[AdvancedSetupController instance] addOptionsDesc]; + [PreferencesControllerBase doForEachGroup: AddOptionsDesc withOption: nil]; if (oldGlobalPreferences!=nil) { @@ -115,10 +112,8 @@ else { // Create a preference plist file with Defaults values oldGlobalPreferences = [[NSMutableDictionary alloc] init]; - [[BootSetupController instance]loadOptionsFromPreferencesFile: oldGlobalPreferences]; - [[BootSetupController instance]loadOptionsFromPreferencesFile: oldGlobalPreferences]; - [[BootSetupController instance]loadOptionsFromPreferencesFile: oldGlobalPreferences]; - [[BootSetupController instance]loadOptionsFromPreferencesFile: oldGlobalPreferences]; + [PreferencesControllerBase doForEachGroup: LoadPreferencesOptions withOption: oldGlobalPreferences]; + // Initialize defaults [oldGlobalPreferences setObject: [[NSNumber alloc] initWithInt: CurrentPreferencesFileVersion] forKey: keyPreferencesFileVersion]; @@ -156,10 +151,7 @@ [mStatusText setEnabled:[self isUnlocked]]; // Refresh other panels - [[BootSetupController instance] refreshLockStates]; - [[BootFlagsController instance] refreshLockStates]; - [[PeripheralsController instance] refreshLockStates]; - [[AdvancedSetupController instance] refreshLockStates]; + [PreferencesControllerBase doForEachGroup: RefreshLockStates withOption: nil]; } @@ -263,7 +255,10 @@ val = [mOptionsDict valueForKey: keySwapHD02]; [[BootSetupController instance]->mSwapHD02 setIntValue: [val intValue] ]; [[BootSetupController instance] doSwapHD: [val boolValue] save: false src:0 dst:2]; - + + // Load all boot Options into the interface components + [PreferencesControllerBase loadOptionsFromBootFile]; + [self selectDefaultPartition]; } Index: trunk/ChameleonPrefPane/Sources/PreferencesControllerBase.h =================================================================== --- trunk/ChameleonPrefPane/Sources/PreferencesControllerBase.h (revision 47) +++ trunk/ChameleonPrefPane/Sources/PreferencesControllerBase.h (revision 48) @@ -7,10 +7,27 @@ #import #import +#import "string_util.h" #import "BootPropertyList.h" #import -// ENHANCE ME: remove this globals and integrate them in ChameleonPrefPan or at least + +//-------------------------------------------------------------------------- +const char * const kKernelFlags = "Kernel Flags"; + +//-------------------------------------------------------------------------- +typedef enum GroupAction +{ + SetDefaultValues, + RefreshLockStates, + LoadPreferencesOptions, + LoadBootConfigOptions, + AddOptionsDesc, + SaveBootConfigOptions +}; + + +// ENHANCE ME: remove this globals and integrate them in ChameleonPrefPane or at least // add function accessor entry points extern PartitionExtractor * partExtractor; extern BootPropertyList * prop; @@ -33,8 +50,7 @@ // Set refresh all group states {enabled | disabled} depending on the authorizations state - (void) refreshLockStates; - -// load the corresponding Options from the interface +// load the corresponding pref filer options from the interface - (void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict; @end @@ -47,15 +63,25 @@ // from the id to desc map in prop, set all default values for dict + (void) setDefaultValues: (NSMutableDictionary*) dict; +// Register the Group panel for further automatic iteration matters ++ (void) registerPreferencesGroup:(id) myGroup; + +// Iterate and execute action for each register group ++ (void) doForEachGroup: (GroupAction) action withOption:(id) option; + // Set refresh state {enabled | disabled} depending on the authorizations state - (void) refreshLockState: (id) item; +// Unitary Method for Load One option of any type ++ (void) loadOptionsFromBootFile; + +// Method for loading all registred options components in the interface ++ (void) loadOptionFromBootFile:(id) optionID; + - (void) loadPreferences; - (bool) savePreferences; -- (bool) handleSender: (id) sender withButton: (NSButton*) button forKey: (const char *) key; -- (bool) handleSender: (id) sender withButton: (NSButton*) button andField:(NSTextField*) field - forKey: (const char *) key; +- (bool) handleSender: (id) sender; -(NSMutableDictionary*) preferencesFile; -(NSMutableDictionary*) preferencesParts; Index: trunk/ChameleonPrefPane/Sources/string_util.h =================================================================== --- trunk/ChameleonPrefPane/Sources/string_util.h (revision 47) +++ trunk/ChameleonPrefPane/Sources/string_util.h (revision 48) @@ -5,6 +5,10 @@ * Created by Rekursor on 1/22/10. * */ +#ifndef __CHSTR_UTIL_H +#define __CHSTR_UTIL_H +#include +#include /** * trim the space (or any substring) chars on the right of a string @@ -31,3 +35,36 @@ { return trim_left( trim_right( source , substr) , substr ); } + +// const char* str input versions +inline std::string trim_right(const char* src , const std::string& substr = " ") +{ + std::string str = src ? src : ""; + return str.erase( str.find_last_not_of(substr) + 1); +} + +/** + * trim the space chars (or any substring) on the left of a string + */ +inline std::string trim_left( const char* src, const std::string& substr = " ") +{ + std::string str = src ? src : ""; + return str.erase(0 , str.find_first_not_of(substr) ); +} + +/** + * trim the space chars (or any substring) on the left and the right of a string + */ +inline std::string trim(const char* src, const std::string& substr = " ") +{ + return trim_left( trim_right( src , substr) , substr ); +} + +/** + * String Tokenizer + * In: src string and separator + * Out: a list of string tokens + */ +std::list tokenize(const std::string& src, const std::string& sep=" "); + +#endif Index: trunk/ChameleonPrefPane/Sources/PeripheralsController.mm =================================================================== --- trunk/ChameleonPrefPane/Sources/PeripheralsController.mm (revision 47) +++ trunk/ChameleonPrefPane/Sources/PeripheralsController.mm (revision 48) @@ -11,6 +11,7 @@ @implementation PeripheralsController +//-------------------------------------------------------------------------- - (id) init { self = [super init]; @@ -32,6 +33,7 @@ prop->addOptionDesc(mEthernetBuiltIn, nil, OptionYesNo, "EthernetBuiltIn", "No"); } +//-------------------------------------------------------------------------- - (void) refreshLockStates { [self refreshLockState: mLegacyLogo ]; @@ -48,19 +50,22 @@ [self refreshLockState: mEthernetBuiltIn ]; } +//-------------------------------------------------------------------------- -(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict { } +//-------------------------------------------------------------------------- -(IBAction) onCheckButtonChange: (NSButton*) sender { - + [self handleSender: sender]; } +//-------------------------------------------------------------------------- -(IBAction) onTextFiedChange: (NSTextField*) sender { - + [self handleSender: sender]; } + (PeripheralsController *)instance { return(gInstance);} Index: trunk/ChameleonPrefPane/Sources/BootFlagsController.mm =================================================================== --- trunk/ChameleonPrefPane/Sources/BootFlagsController.mm (revision 47) +++ trunk/ChameleonPrefPane/Sources/BootFlagsController.mm (revision 48) @@ -15,12 +15,14 @@ @implementation BootFlagsController +//-------------------------------------------------------------------------- - (id) init { self = [super init]; return (gInstance = self); } +//-------------------------------------------------------------------------- -(void) addOptionsDesc { prop->addOptionDesc(mVerbose, nil, OptionUnix, "-v", ""); @@ -36,6 +38,7 @@ prop->addOptionDesc(mRescanSingleDrive, nil, OptionYesNo, "Rescan SingleDrive", "No"); } +//-------------------------------------------------------------------------- - (void) refreshLockStates { [self refreshLockState: mVerbose]; @@ -52,19 +55,22 @@ [self refreshLockState: mRescanSingleDrive]; } +//-------------------------------------------------------------------------- -(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict { } +//-------------------------------------------------------------------------- -(IBAction) onCheckButtonChange: (NSButton*) sender { - + [self handleSender: sender]; } +//-------------------------------------------------------------------------- -(IBAction) onTextFiedChange: (NSTextField*) sender { - + [self handleSender: sender]; } + (BootFlagsController *)instance { return(gInstance);} Index: trunk/ChameleonPrefPane/Sources/BootSetupController.mm =================================================================== --- trunk/ChameleonPrefPane/Sources/BootSetupController.mm (revision 47) +++ trunk/ChameleonPrefPane/Sources/BootSetupController.mm (revision 48) @@ -25,9 +25,9 @@ //-------------------------------------------------------------------------- - (void) addOptionsDesc { - prop->addOptionDesc(mDefaultPartition, nil, OptionString, "Default Partition", ""); - prop->addOptionDesc(mHidePartition , mHidePartitionText, OptionString, "HidePartition", ""); - prop->addOptionDesc(mRenamePartition , mRenamePartitionText, OptionString, "RenamePartition", ""); + prop->addOptionDesc(mDefaultPartition, mDefaultPartitionText, OptionString, "Default Partition", ""); + prop->addOptionDesc(mHidePartition , mHidePartitionText, OptionString, "Hide Partition", ""); + prop->addOptionDesc(mRenamePartition , mRenamePartitionText, OptionString, "Rename Partition", ""); } //-------------------------------------------------------------------------- @@ -62,13 +62,24 @@ } //-------------------------------------------------------------------------- +-(void) loadOptionsFromBootFile +{ +// // Get the Partitions options +// [self loadOptionFromBootFile: mDefaultPartition]; +// [self loadOptionFromBootFile: mHidePartition]; +// [self loadOptionFromBootFile: mRenamePartition]; +} + +//-------------------------------------------------------------------------- +//-------------------------------------------------------------------------- - (void) loadFrozenParts { std::vector& partList = partExtractor->editPartList(); //rw // iterate for all entries to add - char keyPartN[32] = ""; + char keyPartN[32] = ""; char buffer[256]=""; int k=0; + partList.clear(); for (int i=0; i< [[self preferencesParts] count]; i++) { @@ -223,6 +234,8 @@ { [self onInjectPartsToFreeze: mInjectFrozenParts]; } + + // Factorize this code by using the options descriptor map: else if ( [self handleSender:sender withButton: mDefaultPartition andField: mDefaultPartitionText forKey: kDefaultPartition] ) { Index: trunk/ChameleonPrefPane/Sources/AdvancedSetupController.mm =================================================================== --- trunk/ChameleonPrefPane/Sources/AdvancedSetupController.mm (revision 47) +++ trunk/ChameleonPrefPane/Sources/AdvancedSetupController.mm (revision 48) @@ -11,6 +11,7 @@ @implementation AdvancedSetupController +//-------------------------------------------------------------------------- - (id) init { self = [super init]; @@ -20,14 +21,14 @@ //-------------------------------------------------------------------------- - (void) addOptionsDesc { - prop->addOptionDesc(mKernel, mKernelText, OptionKernel1, "", "mach_kernel"); // empty field for 1 field only "i.e: mach_kernel" syntax - prop->addOptionDesc(mDeviceRd, mDeviceRdText, OptionKernel, "rd", "disk0s1"); - prop->addOptionDesc(mArch, mArchText, OptionKernel, "arch", "X86_64"); - prop->addOptionDesc(mCPU, mCPUText, OptionKernel, "cpus", "4"); - prop->addOptionDesc(mBusRatio, mBusRatioText, OptionKernel, "busratio", "20"); - prop->addOptionDesc(mDebug, mDebugText, OptionString, "debug", "0x144"); - prop->addOptionDesc(mIO, mIOText, OptionString, "io", "0xffffffff"); - prop->addOptionDesc(mDisableKextsBlacklisting, nil, OptionString, "blacklist", "1"); + prop->addOptionDesc(mKernel, mKernelText, OptionKernel1, "Kernel", "mach_kernel"); // empty field for 1 field only "i.e: mach_kernel" syntax + prop->addOptionDesc(mDeviceRd, mDeviceRdText, OptionKernel, "rd", ""); + prop->addOptionDesc(mArch, mArchText, OptionKernel, "arch", ""); + prop->addOptionDesc(mCPU, mCPUText, OptionKernel, "cpus", ""); + prop->addOptionDesc(mBusRatio, mBusRatioText, OptionKernel, "busratio", ""); + prop->addOptionDesc(mDebug, mDebugText, OptionString, "debug", ""); + prop->addOptionDesc(mIO, mIOText, OptionString, "io", ""); + prop->addOptionDesc(mDisableKextsBlacklisting, nil, OptionString, "blacklist", ""); prop->addOptionDesc(mDSDTFile, mDSDTFileText, OptionString, "DSDT", ""); prop->addOptionDesc(mDSDTDrop, nil, OptionYesNo, "DropSSDT", "No"); prop->addOptionDesc(mSMBIOSFile,mSMBIOSFileText, OptionString, "SMBIOS", ""); @@ -37,6 +38,7 @@ prop->addOptionDesc(mWakeImage, mWakeImageText, OptionString, "WakeImage", ""); } +//-------------------------------------------------------------------------- - (void) refreshLockStates { [self refreshLockState: mKernel ]; @@ -66,19 +68,22 @@ [self refreshLockState: mWakeImageText ]; } +//-------------------------------------------------------------------------- -(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict { } +//-------------------------------------------------------------------------- -(IBAction) onCheckButtonChange: (NSButton*) sender { - + [self handleSender: sender]; } +//-------------------------------------------------------------------------- -(IBAction) onTextFiedChange: (NSTextField*) sender { - + [self handleSender: sender]; } + (AdvancedSetupController *)instance { return(gInstance);} Index: trunk/ChameleonPrefPane/Sources/PreferencesControllerBase.mm =================================================================== --- trunk/ChameleonPrefPane/Sources/PreferencesControllerBase.mm (revision 47) +++ trunk/ChameleonPrefPane/Sources/PreferencesControllerBase.mm (revision 48) @@ -6,17 +6,35 @@ // #import "PreferencesControllerBase.h" +#import "KernOptionsParser.h" #include +#include +#include +#include +//-------------------------------------------------------------------------- +static std::list groupList; + +// for unix-like options types +static std::map IdToUCmdList; +static KernOptionsParser kernelFlags; + +//-------------------------------------------------------------------------- + + @implementation PreferencesControllerBase -(ChameleonPrefPane*) chameleon { return [ChameleonPrefPane instance]; } + //-------------------------------------------------------------------------- - (id) init { self = [super init]; + + [PreferencesControllerBase registerPreferencesGroup: self]; + return self; } @@ -24,7 +42,6 @@ // from the id to desc map in prop, set all default values for dict + (void) setDefaultValues: (NSMutableDictionary*) dict { - for(const BootOptionDesc* bod = prop->firstOption();bod; bod=prop->nextOption()) { switch (bod->Type) @@ -48,7 +65,128 @@ } } } + //-------------------------------------------------------------------------- ++ (void) registerPreferencesGroup:(id) myGroup +{ + groupList.push_back(myGroup); +} + +//-------------------------------------------------------------------------- ++ (void) doForEachGroup: (GroupAction) action withOption:(id) option +{ + std::list::iterator it; + for (it=groupList.begin(); it!=groupList.end(); it++) + { + switch (action) { + case SetDefaultValues: + [*it setDefaultValues: option]; + break; + case RefreshLockStates: + [*it refreshLockStates ]; + break; + case LoadPreferencesOptions: + [*it loadOptionsFromPreferencesFile: option]; + break; + case LoadBootConfigOptions: + [*it loadOptionsFromBootFile]; + break; + case AddOptionsDesc: + [*it addOptionsDesc]; + break; + case SaveBootConfigOptions: + break; + default: + break; + } + } +} + +//-------------------------------------------------------------------------- ++ (void) loadOptionsFromBootFile +{ + // *** TODO + // parse unix like command string: + kernelFlags.parseOptions(prop->getStringForKey(kKernelFlags)); + + for (const BootOptionDesc* bod=prop->firstOption(); bod; bod=prop->nextOption()) + { + [PreferencesControllerBase loadOptionFromBootFile:(id)bod->ID ]; + } +} + +//-------------------------------------------------------------------------- + ++ (void) loadOptionFromBootFile:(id) optionID +{ + const BootOptionDesc* bod = prop->findOption(optionID); + if (!bod) + { + NSRunAlertPanel(@"Error Parsing Option",@"loadOptionFromBootFile failed",@"OK", nil, nil); + return; + } + + const char * stringForKey = prop->getStringForKey(bod->Name); + std::string s = stringForKey ? trim(stringForKey) : ""; + + switch (bod->Type) + { + case OptionYesNo: + if (stringForKey!=NULL) + [(NSButton*)optionID setIntValue: (toupper(s[0])=='Y' ? 1 : 0 ) ]; + break; + + case OptionKernel1: + { + int val = (s.length()>0 ? 1 : 0 ); + [(NSButton*)optionID setIntValue: val ]; + [(NSTextField*) bod->contentID setStringValue: + [[NSString alloc] initWithUTF8String: s.c_str()] ]; + [(NSTextField*) bod->contentID setEnabled: val ? true : false]; + [(NSTextField*) bod->contentID setEditable: val ? true : false]; + } + break; + case OptionString: + [(NSButton*)optionID setIntValue: (s.length()>0 ? 1 : 0 ) ]; + [(NSTextField*) bod->contentID setStringValue: + [[NSString alloc] initWithUTF8String: s.c_str()] ]; + break; + + case OptionUnix: + case OptionKernel: + { + std::string s = kernelFlags.stringFromKey(bod->Name); + if (s.length()>0) + { + [(NSButton*)optionID setIntValue: 1 ]; + if(bod->Type==OptionKernel) + { + [(NSTextField*) bod->contentID setStringValue: + [[NSString alloc] initWithUTF8String: + kernelFlags.rightMember(s).c_str()] ]; + [(NSTextField*) bod->contentID setEnabled: true]; + [(NSTextField*) bod->contentID setEditable: true]; + } + + } + else + { // set the default for thiso option + [(NSButton*)optionID setIntValue: (bod->Default[0] ? 1 :0) ]; + if(bod->Type==OptionKernel) + { + [(NSTextField*) bod->contentID setEnabled: false]; + [(NSTextField*) bod->contentID setEditable: false]; + } + + } + } + break; + default: + break; + } + +} +//-------------------------------------------------------------------------- - (void) refreshLockState: (id) item { [item setEnabled:[[ChameleonPrefPane instance] isUnlocked]]; @@ -80,35 +218,31 @@ } //-------------------------------------------------------------------------- -- (bool) handleSender: (id) sender withButton: (NSButton*) button forKey:(const char*) key +- (bool) handleSender: (id) sender { - return [self handleSender: sender withButton: button andField: nil forKey: key]; -} -//-------------------------------------------------------------------------- -- (bool) handleSender: (id) sender withButton: (NSButton*) button andField:(NSTextField*) field forKey:(const char*) key -{ - if((NSButton*)sender!=button || (NSTextField*)sender !=field) return false; - if ((NSButton*)sender==button) + const BootOptionDesc * bod = prop->findOption(sender); + + if (!bod) { + NSTextField* textField = (NSTextField*) sender; + std::string content = [[textField stringValue] UTF8String ]; + } + else { - if (prop && prop->isValid()) - { - std::string keyValue = prop->getStringForKey(key); - if ( !![button intValue]) - { - - } - else - { - - } + + int state = [sender intValue]; + + switch (bod->Type) { + case OptionKernel: + case OptionKernel1: + case OptionString: + [(NSTextField*) bod->contentID setEnabled: state ? true : false]; + [(NSTextField*) bod->contentID setEditable: state ? true : false]; + break; + default: + break; } - } - else - { // field - - } - + } return true; } Index: trunk/ChameleonPrefPane/CHANGES =================================================================== --- trunk/ChameleonPrefPane/CHANGES (revision 47) +++ trunk/ChameleonPrefPane/CHANGES (revision 48) @@ -1,3 +1,10 @@ +- Added full bootOptions loading into the interface with no custom code needed, + all loading features are implemented in base class PreferencesControllerBase, + with the automatic parser engine. +- Implemented the bootOption automatic and generic parsing engine. + Now any option is parsed from bootFile automatically (incl. defaults) + thanks to the underlying engine based on a dynamically constructed + id to desc map and also to the group panel registration init process - Fixed dmg archives would appear in dynamic partition listing - Added FREEZE (lock) features, see README. - Refined cosmetics for the GUI Index: trunk/ChameleonPrefPane/ChameleonPrefPane.xcodeproj/project.pbxproj =================================================================== --- trunk/ChameleonPrefPane/ChameleonPrefPane.xcodeproj/project.pbxproj (revision 47) +++ trunk/ChameleonPrefPane/ChameleonPrefPane.xcodeproj/project.pbxproj (revision 48) @@ -26,6 +26,9 @@ 01993567110AA9FA003B056E /* BootPropertyList.h in Headers */ = {isa = PBXBuildFile; fileRef = 01993565110AA9FA003B056E /* BootPropertyList.h */; }; 01993568110AA9FA003B056E /* BootPropertyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01993566110AA9FA003B056E /* BootPropertyList.cpp */; }; 01A40F75110550F4002A74CD /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 01A40F74110550F4002A74CD /* CHANGES */; }; + 01AF5E69110C1C6800816AA8 /* string_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01AF5E68110C1C6800816AA8 /* string_util.cpp */; }; + 01AF5E6C110C1C9C00816AA8 /* KernOptionsParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01AF5E6A110C1C9C00816AA8 /* KernOptionsParser.cpp */; }; + 01AF5E6D110C1C9C00816AA8 /* KernOptionsParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 01AF5E6B110C1C9C00816AA8 /* KernOptionsParser.h */; }; 01B0E8141108B85A00ACF21B /* ChameleonPrefPane.h in Headers */ = {isa = PBXBuildFile; fileRef = 01B0E80E1108B85A00ACF21B /* ChameleonPrefPane.h */; }; 01B0E8151108B85A00ACF21B /* ChameleonPrefPane.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01B0E80F1108B85A00ACF21B /* ChameleonPrefPane.mm */; }; 01B0E8161108B85A00ACF21B /* ShellProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01B0E8101108B85A00ACF21B /* ShellProcess.cpp */; }; @@ -68,6 +71,9 @@ 01993565110AA9FA003B056E /* BootPropertyList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BootPropertyList.h; path = Sources/BootPropertyList.h; sourceTree = ""; }; 01993566110AA9FA003B056E /* BootPropertyList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BootPropertyList.cpp; path = Sources/BootPropertyList.cpp; sourceTree = ""; }; 01A40F74110550F4002A74CD /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGES; sourceTree = ""; }; + 01AF5E68110C1C6800816AA8 /* string_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_util.cpp; path = ../../../../../../devl/OSX/voodoo/chameleonApplications/trunk/ChameleonPrefPane/Sources/string_util.cpp; sourceTree = SOURCE_ROOT; }; + 01AF5E6A110C1C9C00816AA8 /* KernOptionsParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KernOptionsParser.cpp; path = ../../../../../../devl/OSX/voodoo/chameleonApplications/trunk/ChameleonPrefPane/Sources/KernOptionsParser.cpp; sourceTree = SOURCE_ROOT; }; + 01AF5E6B110C1C9C00816AA8 /* KernOptionsParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KernOptionsParser.h; path = ../../../../../../devl/OSX/voodoo/chameleonApplications/trunk/ChameleonPrefPane/Sources/KernOptionsParser.h; sourceTree = SOURCE_ROOT; }; 01B0E80E1108B85A00ACF21B /* ChameleonPrefPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChameleonPrefPane.h; path = Sources/ChameleonPrefPane.h; sourceTree = ""; }; 01B0E80F1108B85A00ACF21B /* ChameleonPrefPane.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ChameleonPrefPane.mm; path = Sources/ChameleonPrefPane.mm; sourceTree = ""; }; 01B0E8101108B85A00ACF21B /* ShellProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ShellProcess.cpp; path = Sources/ShellProcess.cpp; sourceTree = ""; }; @@ -151,11 +157,10 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( - 01993198110A2C61003B056E /* string_util.h */, + 01B0E80E1108B85A00ACF21B /* ChameleonPrefPane.h */, + 01B0E80F1108B85A00ACF21B /* ChameleonPrefPane.mm */, 019931DB110A37FA003B056E /* PreferencesControllerBase.h */, 019931DC110A37FA003B056E /* PreferencesControllerBase.mm */, - 01B0E80E1108B85A00ACF21B /* ChameleonPrefPane.h */, - 01B0E80F1108B85A00ACF21B /* ChameleonPrefPane.mm */, 019930DF110A0CB4003B056E /* BootSetupController.h */, 019930E0110A0CB4003B056E /* BootSetupController.mm */, 019930E6110A0D80003B056E /* BootFlagsController.h */, @@ -164,12 +169,16 @@ 019930FD110A0E6F003B056E /* PeripheralsController.mm */, 01993113110A0EB9003B056E /* AdvancedSetupController.h */, 01993114110A0EB9003B056E /* AdvancedSetupController.mm */, + 01993198110A2C61003B056E /* string_util.h */, + 01AF5E68110C1C6800816AA8 /* string_util.cpp */, 01B0E8111108B85A00ACF21B /* ShellProcess.h */, 01B0E8101108B85A00ACF21B /* ShellProcess.cpp */, 01B0E8131108B85A00ACF21B /* PropertyList.h */, 01B0E8121108B85A00ACF21B /* PropertyList.cpp */, 01993565110AA9FA003B056E /* BootPropertyList.h */, 01993566110AA9FA003B056E /* BootPropertyList.cpp */, + 01AF5E6B110C1C9C00816AA8 /* KernOptionsParser.h */, + 01AF5E6A110C1C9C00816AA8 /* KernOptionsParser.cpp */, ); name = Classes; sourceTree = ""; @@ -234,6 +243,7 @@ 01993199110A2C61003B056E /* string_util.h in Headers */, 019931DD110A37FA003B056E /* PreferencesControllerBase.h in Headers */, 01993567110AA9FA003B056E /* BootPropertyList.h in Headers */, + 01AF5E6D110C1C9C00816AA8 /* KernOptionsParser.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -326,6 +336,8 @@ 01993116110A0EB9003B056E /* AdvancedSetupController.mm in Sources */, 019931DE110A37FA003B056E /* PreferencesControllerBase.mm in Sources */, 01993568110AA9FA003B056E /* BootPropertyList.cpp in Sources */, + 01AF5E69110C1C6800816AA8 /* string_util.cpp in Sources */, + 01AF5E6C110C1C9C00816AA8 /* KernOptionsParser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; Index: trunk/ChameleonPrefPane/English.lproj/Chameleon.xib =================================================================== --- trunk/ChameleonPrefPane/English.lproj/Chameleon.xib (revision 47) +++ trunk/ChameleonPrefPane/English.lproj/Chameleon.xib (revision 48) @@ -12,7 +12,7 @@ YES - + YES @@ -732,7 +732,7 @@ 2 - + 256 YES @@ -784,7 +784,7 @@ 611450433 272630784 - hd(0,2) + YES @@ -835,7 +835,7 @@ 611450433 272630784 - hd(0,2) + YES @@ -876,7 +876,7 @@ 611450433 272630784 - hd(0,2) + YES @@ -1042,7 +1042,6 @@ {{10, 33}, {640, 267}} - Boot Setup @@ -1461,7 +1460,7 @@ -1536033215 272630784 - 1920x1080x32@60 + YES @@ -1767,7 +1766,7 @@ Item 8 - + 256 YES @@ -1856,7 +1855,7 @@ 611450433 272630784 - disk0s2 + YES @@ -1895,7 +1894,7 @@ 611450433 272630784 - mach_kernel + YES @@ -1956,7 +1955,7 @@ -1536033215 272630784 - x86_64 + YES @@ -1995,7 +1994,7 @@ -1536033215 272630784 - 0x144 + YES @@ -2012,7 +2011,7 @@ 611450433 272630784 - 0xffffffff + YES @@ -2029,7 +2028,7 @@ -1536033215 272630784 - 1 + YES @@ -2046,7 +2045,7 @@ 611450433 272630784 - 20 + YES @@ -2413,20 +2412,21 @@ {{10, 33}, {640, 267}} + Advanced - + 0 YES YES YES - + @@ -2473,8 +2473,9 @@ About the Chameleon Preferences Pane NSPanel + {1.79769e+308, 1.79769e+308} - + 256 YES @@ -2483,7 +2484,6 @@ 268 {{245, 218}, {38, 17}} - YES 68288064 @@ -2503,7 +2503,6 @@ 268 {{182, 218}, {52, 17}} - YES 68288064 @@ -2520,7 +2519,6 @@ 268 {{46, 49}, {373, 154}} - YES -1805517311 @@ -2539,8 +2537,6 @@ {464, 255} - - {{0, 0}, {1920, 1058}} {1.79769e+308, 1.79769e+308} @@ -3332,6 +3328,142 @@ 698 + + + onCheckButtonChange: + + + + 699 + + + + onCheckButtonChange: + + + + 700 + + + + onCheckButtonChange: + + + + 701 + + + + onCheckButtonChange: + + + + 702 + + + + onCheckButtonChange: + + + + 703 + + + + onCheckButtonChange: + + + + 704 + + + + onCheckButtonChange: + + + + 705 + + + + onCheckButtonChange: + + + + 706 + + + + onCheckButtonChange: + + + + 707 + + + + onCheckButtonChange: + + + + 708 + + + + onCheckButtonChange: + + + + 709 + + + + onTextFiedChange: + + + + 710 + + + + onTextFiedChange: + + + + 711 + + + + onTextFiedChange: + + + + 712 + + + + onTextFiedChange: + + + + 713 + + + + onTextFiedChange: + + + + 714 + + + + onTextFiedChange: + + + + 715 + @@ -3754,9 +3886,9 @@ - + @@ -3775,20 +3907,6 @@ - 369 - - - YES - - - - - - 370 - - - - 372 @@ -4741,6 +4859,20 @@ + + 369 + + + YES + + + + + + 370 + + + @@ -4964,10 +5096,6 @@ 589.IBPluginDependency 590.IBPluginDependency 591.IBPluginDependency - 596.IBPluginDependency - 597.IBPluginDependency - 598.IBPluginDependency - 599.IBPluginDependency 6.IBPluginDependency 6.ImportedFromIB2 603.IBPluginDependency @@ -5007,9 +5135,9 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{62, 335}, {668, 368}} + {{344, 266}, {668, 368}} com.apple.InterfaceBuilder.CocoaPlugin - {{62, 335}, {668, 368}} + {{344, 266}, {668, 368}} {224.664, 10} @@ -5510,10 +5638,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -5583,7 +5707,7 @@ - 698 + 715