Link to: header | prefs
directory
Copyright Turtle Creek Software 1996-2006. All Rights Reserved.
Comments
CNetworkPreferences
This class manages network preferences for the Goldenseal accounting software,
small business management software, construction
project management software and
construction
accounting software.
It's the storage object for network preferences. This is how the user makes a
server file so it is available to clients over the network in our client/server
environment. It also controls a few networking details.
SUPERCLASS = DB_PersistentObject
Constructor
/******************************************************************************
default constructor TCS 4/24/03
******************************************************************************/
CNetworkPreferences::CNetworkPreferences()
{
mMultiUserType = sharing_singleuser;
mAllowDataEntry = false;
mShowNetworkLog = true;
mFutureEnum1 = mFutureEnum2 = 0; // TCS 4/10/04
mNetFiller = 0;
mPortID = cDefaultPortNum;
mExpansionShort = 0;
mExpansionID = 0;
mEndSafetyTag = tag_endsafetytag;
}
Source Code
/*********************************************************************************
GetFileLength TCS 4/24/03
return the file length used by this object
*********************************************************************************/
NeoSize CNetworkPreferences::GetFileLength(const CNeoFormat *aFormat) const
{
NeoVersion version = GetVersion();
if (version > 2)
{
return THE_SUPERCLASS::GetFileLength(aFormat) +
ARRAY_FILE_SIZE(mClientSettingsArray) +
mExpansionString.FileLength(cStandardTextLen) +
cFileLength3;
}
else if (version > 1)
{
return THE_SUPERCLASS::GetFileLength(aFormat) +
ARRAY_FILE_SIZE(mClientSettingsArray) +
cFileLength;
}
else
{
return THE_SUPERCLASS::GetFileLength(aFormat) +
cFileLength;
}
}
/*********************************************************************************
GetMemberValue TCS 4/24/03
get the next number for an item
*********************************************************************************/
Boolean CNetworkPreferences::GetMemberValue(const TagType aTag, const TagType aType,
void *aValue) const
{
switch (aTag)
{
case tag_networkport: // TCS 4/10/04
return ConvertMember(&mPortID, type_short, aValue, aType);
break;
case tag_multiuser:
return ConvertEnumMember(mMultiUserType, MENU_MultiUserTypes, aValue, aType);
break;
case tag_allowserverdataentry:
return ConvertBitFieldMember(mAllowDataEntry, aValue, aType);
break;
case tag_shownetworklog:
return ConvertBitFieldMember(mShowNetworkLog, aValue, aType);
break;
case tag_font: // TCS 7/7/03
{
SInt16 defaultFont = TCS_GetSystemFont();
if (gDBFile)
defaultFont = gDBFile->GetDefaultFont();
return ConvertMember(&defaultFont, type_short, aValue, aType);
}
break;
case tag_reportfont: // TCS 7/7/03
{
SInt16 printFont = TCS_GetSystemFont();
if (gDBFile)
printFont = gDBFile->GetDefaultPrintFont();
return ConvertMember(&printFont, type_short, aValue, aType);
}
break;
default:
return THE_SUPERCLASS::GetMemberValue(aTag, aType, aValue);
break;
}
}
/*********************************************************************************
SetMemberValue TCS 4/24/03
set the value of the member with the given tag
*********************************************************************************/
Boolean CNetworkPreferences::SetMemberValue(const TagType aTag, const TagType aType,
const void *aValue)
{
switch (aTag)
{
case tag_networkport: // TCS 4/10/04
return ConvertMember(aValue, aType, &mPortID, type_short);
break;
case tag_multiuser:
return ConvertMember(aValue, aType, &mMultiUserType, type_enum);
break;
case tag_allowserverdataentry:
mAllowDataEntry = ConvertDataToBitField(aValue, aType);
return true;
break;
case tag_shownetworklog:
mShowNetworkLog = ConvertDataToBitField(aValue, aType);
return true;
break;
case tag_font: // we don't store these here TCS 7/7/03
case tag_reportfont:
return true;
break;
default:
return THE_SUPERCLASS::SetMemberValue(aTag, aType, aValue);
break;
}
}
/*********************************************************************************
ReadObject TCS 4/24/03
read the persistent object's data in from a stream
*********************************************************************************/
void CNetworkPreferences::ReadObject(CNeoStream *aStream, const TagType aTag)
{
TCS_FailNILMsg(aStream, TCS_GetErrString(errID_BadStream));
CNeoDebugImport checker(aStream, this, cCheckTooSmall);
THE_SUPERCLASS::ReadObject(aStream, aTag);
if (!IsIOValid())
return;
NeoVersion version = GetVersion();
if (version > 1)
ReadSettingsArrayFromStream(aStream, mClientSettingsArray, cHasSafetyTag);
if (version > 2) // TCS 4/10/04
ReadTextFromStream(aStream, &mExpansionString);
mMultiUserType = aStream->ReadChar(); // TCS 5/14/03
mFutureEnum1 = aStream->ReadChar();
mFutureEnum2 = aStream->ReadChar();
*((UInt8*)&mFutureEnum2 + sizeof(mFutureEnum2)) = aStream->ReadBits(2); // --Bitfield
if (version > 2) // TCS 4/10/04
{
mPortID = aStream->ReadShort();
mExpansionShort = aStream->ReadShort();
mExpansionID = aStream->ReadLong();
mExpansionMoney.ReadFromStream(aStream);
}
mEndSafetyTag = aStream->ReadEndSafetyTag(this);
if (!IsValidEndTag(mEndSafetyTag))
ReportDamagedObject(GetDBClassID(), GetDBID());
}
/*********************************************************************************
WriteObject TCS 4/24/03
write the persistent object's data to a stream
*********************************************************************************/
void CNetworkPreferences::WriteObject(CNeoStream *aStream, const TagType aTag)
{
TCS_FailNILMsg(aStream, TCS_GetErrString(errID_BadStream));
// make sure we have valid data to write
if (!IsValidEndTag(mEndSafetyTag))
{
ReportDamagedObject(GetDBClassID(), GetDBID());
mEndSafetyTag = tag_endsafetytag;
}
CNeoDebugExport checker(aStream, this, cCheckTooSmall);
THE_SUPERCLASS::WriteObject(aStream, aTag);
NeoVersion version = GetVersion();
if (version > 1)
WriteSettingsArrayToStream(aStream, mClientSettingsArray, cHasSafetyTag);
if (version > 2) // TCS 4/10/04
WriteTextToStream(aStream, mExpansionString, cStandardTextLen);
aStream->WriteChar(mMultiUserType); // TCS 5/14/03
aStream->WriteChar(mFutureEnum1);
aStream->WriteChar(mFutureEnum2);
aStream->WriteChar(*((UInt8*)&mFutureEnum2 + sizeof(mFutureEnum2))); // --Bitfield
if (version > 2) // TCS 4/10/04
{
aStream->WriteShort(mPortID);
aStream->WriteShort(mExpansionShort);
aStream->WriteLong(mExpansionID);
mExpansionMoney.WriteToStream(aStream);
}
aStream->WriteEndSafetyTag(mEndSafetyTag, this);
}
#if CAN_USE_MARK
#pragma mark -
#endif
/*********************************************************************************
GetClientSettings TCS 7/6/03
fetch settings for the given user ID. We return default values if none
are found
*********************************************************************************/
SClientSettings CNetworkPreferences::GetClientSettings(const DBid userID) const
{
SClientSettings outInfo;
TClientSettingsArrayIterator iter(mClientSettingsArray);
while (iter.Next(outInfo))
{
if (outInfo.userID == userID)
return outInfo;
}
// if we get this far we didn't find a stored value,
// so let's fill in defaults and return that
InitializeSettingsInfo(userID, outInfo);
return outInfo;
}
/*********************************************************************************
SaveClientSettings TCS 7/6/03
save settings for the given user ID.
*********************************************************************************/
void CNetworkPreferences::SaveClientSettings(const SClientSettings &info)
{
TCS_ASSERTMsg(!IsInDatabase(), TCS_GetErrString(errID_BadLengthChange));
SClientSettings tempInfo;
TClientSettingsArrayIterator iter(mClientSettingsArray);
while (iter.Next(tempInfo))
{
if (tempInfo.userID == info.userID)
{
mClientSettingsArray.AssignItemAt(iter.GetCurrentIndex(), info);
return;
}
}
// if we get this far, we don't have settings
// stored yet for this user
mClientSettingsArray.Append(info);
}
/*********************************************************************************
InitializeSettingsInfo TCS 7/6/03
fetch in default values for client settings
*********************************************************************************/
void CNetworkPreferences::InitializeSettingsInfo(const DBid userID, SClientSettings &info) const
{
info.userID = userID;
info.screenFont = gDBFile->GetDefaultFont();
info.printFont = gDBFile->GetDefaultPrintFont();
info.longValue = 0;
info.secondLong = 0;
info.thirdLong = 0;
info.fourthLong = 0;
info.firstByte = 0;
info.secondByte = 0;
info.thirdByte = 0;
info.fourthByte = 0;
}
/*********************************************************************************
GetClientFont TCS 7/7/03
fetch settings for the given user ID. We return default values if none
are found
*********************************************************************************/
SInt32 CNetworkPreferences::GetClientFont(const DBid userID) const
{
SClientSettings outInfo;
TClientSettingsArrayIterator iter(mClientSettingsArray);
while (iter.Next(outInfo))
{
if (outInfo.userID == userID)
return outInfo.screenFont;
}
// if we get this far we didn't find a stored value
return gDBFile->GetDefaultFont();
}
/*********************************************************************************
GetClientPrintFont TCS 7/7/03
fetch settings for the given user ID. We return default values if none
are found
*********************************************************************************/
SInt32 CNetworkPreferences::GetClientPrintFont(const DBid userID) const
{
SClientSettings outInfo;
TClientSettingsArrayIterator iter(mClientSettingsArray);
while (iter.Next(outInfo))
{
if (outInfo.userID == userID)
return outInfo.printFont;
}
// if we get this far we didn't find a stored value
return gDBFile->GetDefaultFont();
}
#if CAN_USE_MARK
#pragma mark -
#endif
/*********************************************************************************
FillDataReport TCS 4/24/03
fill in a diagnostic table that shows data field values.
*********************************************************************************/
void CNetworkPreferences::FillDataReport(CTCS_Table *table, CNeoStream *stream) const
{
TCS_FailNILMsg(table, TCS_GetErrString(errID_BadTable));
TCS_FailNILMsg(stream, TCS_GetErrString(errID_BadStream));
THE_SUPERCLASS::FillDataReport(table, stream);
NeoVersion version = GetVersion();
if (version > 1)
FillFieldArrayRow(table, stream, "mClientSettingsArray", mClientSettingsArray);
if (version > 2)
FillFieldStringRow(table, stream, "mExpansionString", mExpansionString);
FillFieldEnumRow(table, stream, tag_multiuser, mMultiUserType, MENU_MultiUserTypes);
FillFieldStockRow(table, stream, stockID_Expansion, cCharSize, SInt32(mFutureEnum1));
FillFieldStockRow(table, stream, stockID_Expansion, cCharSize, SInt32(mFutureEnum2));
FillFieldBitRow(table, stream, tag_allowserverdataentry, mAllowDataEntry, true);
FillFieldBitRow(table, stream, tag_shownetworklog, mShowNetworkLog);
FillFieldStockRow(table, stream, stockID_Padding, -6, SInt32(mFutureEnum1));
if (version > 2) // TCS 4/10/04
{
FillFieldTagRow(table, stream, tag_networkport, cShortSize, SInt32(mPortID));
FillFieldStockRow(table, stream, stockID_Expansion, cShortSize, SInt32(mExpansionShort));
FillFieldStockRow(table, stream, stockID_Expansion, cLongSize, mExpansionID);
FillFieldStockRow(table, stream, stockID_Expansion, cMoneySize, mExpansionMoney.GetNumberString());
}
FillEndSafetyTag(table, stream, mEndSafetyTag);
}
|