In "porting" one of my programs from VB to PB, I really needed to maintain some use of that ability to manage all my configuration settings in a single place so it was not only easy to access and use, but to also be able to export and import the settings. Really critical stuff when you want to be able to permit the user of the program to adjust things to their taste, and not have to do it each time they start the program.
So, I wrote a class which would fufill that need:
Code:
' class Configuration Manager %INSERTCONSTANTS% CLASS ConfigurationClass %INSERTINSTANCES% CLASS METHOD CREATE() END METHOD CLASS METHOD DESTROY() END METHOD INTERFACE ConfigurationHandler INHERIT IUNKNOWN PROPERTY GET cString(BYVAL ItemIndex AS LONG) AS STRING LOCAL rString AS STRING IF ItemIndex <= %cfgMax THEN SELECT CASE ItemIndex %INSERTGETSTRING% END SELECT END IF PROPERTY = rString END PROPERTY PROPERTY SET cString(BYVAL ItemIndex AS LONG, BYVAL ItemValue AS STRING) IF ItemIndex <= %cfgMax THEN SELECT CASE ItemIndex %INSERTSETSTRING% END SELECT END IF END PROPERTY PROPERTY GET cTitle(BYVAL ItemIndex AS LONG) AS STRING LOCAL rString AS STRING IF ItemIndex <= %cfgMax THEN SELECT CASE ItemIndex %INSERTGETTITLE% END SELECT END IF PROPERTY = rString END PROPERTY PROPERTY GET cValue(BYVAL ItemIndex AS LONG) AS LONG LOCAL rValue AS LONG IF ItemIndex <= %cfgMax THEN SELECT CASE ItemIndex %INSERTGETVALUES% END SELECT END IF PROPERTY = rValue END PROPERTY PROPERTY SET cValue(BYVAL ItemIndex AS LONG, BYVAL ItemValue AS LONG) IF ItemIndex <= %cfgMax THEN SELECT CASE ItemIndex %INSERTSETVALUES% END SELECT END IF END PROPERTY PROPERTY GET cBoolean(BYVAL ItemIndex AS LONG) AS LONG LOCAL rBoolean AS LONG IF ItemIndex <= %cfgMax THEN SELECT CASE ItemIndex %INSERTGETBOOLEAN% END SELECT END IF PROPERTY = ISTRUE rBoolean END PROPERTY PROPERTY SET cBoolean(BYVAL ItemIndex AS LONG, BYVAL ItemValue AS LONG) IF ItemIndex <= %cfgMax THEN ItemValue = ISTRUE ItemValue SELECT CASE ItemIndex %INSERTSETBOOLEAN% END SELECT END IF END PROPERTY PROPERTY GET cName(BYVAL ItemIndex AS LONG) AS STRING LOCAL rName AS STRING IF ItemIndex <= %cfgMax THEN SELECT CASE ItemIndex %INSERTGETNAME% END SELECT END IF PROPERTY = rName END PROPERTY PROPERTY GET cIndex(BYVAL ItemName AS STRING) AS LONG LOCAL rIndex AS LONG SELECT CASE UCASE$(ItemName) %INSERTGETINDEX% CASE ELSE rIndex = -1 END SELECT PROPERTY = rIndex END PROPERTY METHOD MakeConfigurationString(BYVAL ItemIndex AS LONG) AS STRING LOCAL cString AS STRING cString = me.cName(ItemIndex) IF LEN(cString) > 0 THEN cString = cString & "=" SELECT CASE ItemIndex %INSERTCONSTRUCTORS% END SELECT END IF METHOD = cString END METHOD METHOD SetConfigurationValue(BYVAL cString AS STRING) AS LONG LOCAL ItemIndex AS LONG LOCAL cValue AS STRING LOCAL Success AS LONG ItemIndex = me.cIndex(TRIM$(PARSE$(cString, "=", 1))) cValue = TRIM$(PARSE$(cString, "=", 2)) Success = %TRUE SELECT CASE ItemIndex %INSERTDESTRUCTORS% CASE ELSE Success = %FALSE END SELECT METHOD = Success END METHOD END INTERFACE END CLASS
%INSERTCONSTANTS%
Code:
%cfgActiveFolder = 0 %cfgCloseGracefully = 1 %cfgSaveOnExit = 2 %cfgScreenX = 3 %cfgScreenY = 4 %cfgUseLongNames = 5 %cfgWindowCount = 6 %cfgWorkingFolder = 7 %cfgMax = 7
%INSERTINSTANCES%
Code:
INSTANCE cfgActiveFolder AS STRING INSTANCE cfgCloseGracefully AS LONG ' Boolean INSTANCE cfgSaveOnExit AS LONG ' Boolean INSTANCE cfgScreenX AS LONG INSTANCE cfgScreenY AS LONG INSTANCE cfgUseLongNames AS LONG ' Boolean INSTANCE cfgWindowCount AS LONG INSTANCE cfgWorkingFolder AS STRING
%INSERTGETSTRING% / %INSERTSETSTRING% (cString)
Code:
SELECT CASE ItemIndex CASE %cfgActiveFolder rString = cfgActiveFolder
Code:
SELECT CASE ItemIndex CASE %cfgActiveFolder cfgActiveFolder = ItemValue
%INSERTGETTITLE% (cTitle)
Code:
SELECT CASE ItemIndex CASE %cfgWorkingFolder rString = "Select Default Working Folder"
%INSERTGETVALUES% / %INSERTSETVALUES% (cValue)
Code:
SELECT CASE ItemIndex CASE %cfgScreenX rValue = cfgScreenX
Code:
SELECT CASE ItemIndex CASE %cfgScreenX cfgScreenX = ItemValue
%INSERTGETBOOLEAN% / %INSERTSETBOOLEAN% (cBoolean)
Code:
SELECT CASE ItemIndex CASE %cfgCloseGracefully rBoolean = cfgCloseGracefully
Code:
SELECT CASE ItemIndex CASE %cfgCloseGracefully cfgCloseGracefully = ItemValue
%INSERTGETNAME% (cName)
Code:
SELECT CASE ItemIndex CASE %cfgActiveFolder rName = "cfgActiveFolder"
Code:
SELECT CASE UCASE$(ItemName) CASE "CFGACTIVEFOLDER" rIndex = %cfgActiveFolder
%INSERTCONSTRUCTORS% (MakeConfigurationString)
Code:
SELECT CASE ItemIndex CASE %cfgActiveFolder cString = cString & ME.cString(ItemIndex) CASE %cfgCloseGracefully cString = cString & IIF$(ISTRUE ME.cBoolean(ItemIndex), "True", "False") CASE %cfgScreenX cString = cString & FORMAT$(ME.cValue(ItemIndex))
Code:
SELECT CASE ItemIndex CASE %cfgActiveFolder ME.cString(ItemIndex) = cValue CASE %cfgCloseGracefully ME.cBoolean(ItemIndex) = IIF(ucase$(cValue) = "TRUE", %TRUE, %FALSE) CASE %cfgScreenX ME.cValue(ItemIndex) = VAL(cValue)