#include "TrackerSettings.h"
#include <Debug.h>
#include "Tracker.h"
#include "TrackerDefaults.h"
#include "WidgetAttributeText.h"
#define RGBTOHEX(c) ((c.alpha << 24) | (c.red << 16) | (c.green << 8) | (c.blue))
class TTrackerState : public Settings {
public:
static TTrackerState* Get();
void Release();
void LoadSettingsIfNeeded();
void SaveSettings(bool onlyIfNonDefault = true);
TTrackerState();
~TTrackerState();
private:
friend class BPrivate::TrackerSettings;
static void InitIfNeeded();
TTrackerState(const TTrackerState&);
BooleanValueSetting* fShowDisksIcon;
BooleanValueSetting* fMountVolumesOntoDesktop;
BooleanValueSetting* fDesktopFilePanelRoot;
BooleanValueSetting* fMountSharedVolumesOntoDesktop;
BooleanValueSetting* fEjectWhenUnmounting;
BooleanValueSetting* fShowFullPathInTitleBar;
BooleanValueSetting* fSingleWindowBrowse;
BooleanValueSetting* fShowNavigator;
BooleanValueSetting* fShowSelectionWhenInactive;
BooleanValueSetting* fTransparentSelection;
BooleanValueSetting* fSortFolderNamesFirst;
BooleanValueSetting* fHideDotFiles;
BooleanValueSetting* fTypeAheadFiltering;
BooleanValueSetting* fGenerateImageThumbnails;
ScalarValueSetting* fRecentApplicationsCount;
ScalarValueSetting* fRecentDocumentsCount;
ScalarValueSetting* fRecentFoldersCount;
BooleanValueSetting* fShowVolumeSpaceBar;
HexScalarValueSetting* fUsedSpaceColor;
HexScalarValueSetting* fFreeSpaceColor;
HexScalarValueSetting* fWarningSpaceColor;
Benaphore fInitLock;
bool fInited;
bool fSettingsLoaded;
int32 fUseCounter;
typedef Settings _inherited;
};
static TTrackerState gTrackerState;
rgb_color ValueToColor(int32 value)
{
rgb_color color;
color.alpha = static_cast<uchar>((value >> 24L) & 0xff);
color.red = static_cast<uchar>((value >> 16L) & 0xff);
color.green = static_cast<uchar>((value >> 8L) & 0xff);
color.blue = static_cast<uchar>(value & 0xff);
return color;
}
int32 ColorToValue(rgb_color color)
{
return color.alpha << 24L | color.red << 16L | color.green << 8L
| color.blue;
}
TTrackerState::TTrackerState()
:
Settings("TrackerSettings", "Tracker"),
fShowDisksIcon(NULL),
fMountVolumesOntoDesktop(NULL),
fDesktopFilePanelRoot(NULL),
fMountSharedVolumesOntoDesktop(NULL),
fEjectWhenUnmounting(NULL),
fShowFullPathInTitleBar(NULL),
fSingleWindowBrowse(NULL),
fShowNavigator(NULL),
fShowSelectionWhenInactive(NULL),
fTransparentSelection(NULL),
fSortFolderNamesFirst(NULL),
fHideDotFiles(NULL),
fTypeAheadFiltering(NULL),
fGenerateImageThumbnails(NULL),
fRecentApplicationsCount(NULL),
fRecentDocumentsCount(NULL),
fRecentFoldersCount(NULL),
fShowVolumeSpaceBar(NULL),
fUsedSpaceColor(NULL),
fFreeSpaceColor(NULL),
fWarningSpaceColor(NULL),
fInited(false),
fSettingsLoaded(false)
{
}
TTrackerState::TTrackerState(const TTrackerState&)
:
Settings("", ""),
fShowDisksIcon(NULL),
fMountVolumesOntoDesktop(NULL),
fDesktopFilePanelRoot(NULL),
fMountSharedVolumesOntoDesktop(NULL),
fEjectWhenUnmounting(NULL),
fShowFullPathInTitleBar(NULL),
fSingleWindowBrowse(NULL),
fShowNavigator(NULL),
fShowSelectionWhenInactive(NULL),
fTransparentSelection(NULL),
fSortFolderNamesFirst(NULL),
fHideDotFiles(NULL),
fTypeAheadFiltering(NULL),
fGenerateImageThumbnails(NULL),
fRecentApplicationsCount(NULL),
fRecentDocumentsCount(NULL),
fRecentFoldersCount(NULL),
fShowVolumeSpaceBar(NULL),
fUsedSpaceColor(NULL),
fFreeSpaceColor(NULL),
fWarningSpaceColor(NULL),
fInited(false),
fSettingsLoaded(false)
{
DEBUGGER("Don't make a copy of this!");
}
TTrackerState::~TTrackerState()
{
}
void
TTrackerState::SaveSettings(bool onlyIfNonDefault)
{
if (fSettingsLoaded)
_inherited::SaveSettings(onlyIfNonDefault);
}
void
TTrackerState::LoadSettingsIfNeeded()
{
if (fSettingsLoaded)
return;
Add(fShowDisksIcon = new BooleanValueSetting("ShowDisksIcon", kDefaultShowDisksIcon));
Add(fMountVolumesOntoDesktop
= new BooleanValueSetting("MountVolumesOntoDesktop", kDefaultMountVolumesOntoDesktop));
Add(fMountSharedVolumesOntoDesktop = new BooleanValueSetting(
"MountSharedVolumesOntoDesktop", kDefaultMountSharedVolumesOntoDesktop));
Add(fEjectWhenUnmounting
= new BooleanValueSetting("EjectWhenUnmounting", kDefaultEjectWhenUnmounting));
Add(fDesktopFilePanelRoot
= new BooleanValueSetting("DesktopFilePanelRoot", kDefaultDesktopFilePanelRoot));
Add(fShowSelectionWhenInactive
= new BooleanValueSetting("ShowSelectionWhenInactive", kDefaultShowSelectionWhenInactive));
Add(fShowFullPathInTitleBar
= new BooleanValueSetting("ShowFullPathInTitleBar", kDefaultShowFullPathInTitleBar));
Add(fSingleWindowBrowse
= new BooleanValueSetting("SingleWindowBrowse", kDefaultSingleWindowBrowse));
Add(fShowNavigator = new BooleanValueSetting("ShowNavigator", kDefaultShowNavigator));
Add(fTransparentSelection
= new BooleanValueSetting("TransparentSelection", kDefaultTransparentSelection));
Add(fSortFolderNamesFirst
= new BooleanValueSetting("SortFolderNamesFirst", kDefaultSortFolderNamesFirst));
Add(fHideDotFiles = new BooleanValueSetting("HideDotFiles", kDefaultHideDotFiles));
Add(fTypeAheadFiltering
= new BooleanValueSetting("TypeAheadFiltering", kDefaultTypeAheadFiltering));
Add(fGenerateImageThumbnails
= new BooleanValueSetting("GenerateImageThumbnails", kDefaultGenerateImageThumbnails));
Add(fRecentApplicationsCount
= new ScalarValueSetting("RecentApplications", kDefaultRecentApplications, "", ""));
Add(fRecentDocumentsCount
= new ScalarValueSetting("RecentDocuments", kDefaultRecentDocuments, "", ""));
Add(fRecentFoldersCount
= new ScalarValueSetting("RecentFolders", kDefaultRecentFolders, "", ""));
Add(fShowVolumeSpaceBar
= new BooleanValueSetting("ShowVolumeSpaceBar", kDefaultShowVolumeSpaceBar));
Add(fUsedSpaceColor
= new HexScalarValueSetting("UsedSpaceColor", RGBTOHEX(kDefaultUsedSpaceColor), "", ""));
Add(fFreeSpaceColor
= new HexScalarValueSetting("FreeSpaceColor", RGBTOHEX(kDefaultFreeSpaceColor), "", ""));
Add(fWarningSpaceColor
= new HexScalarValueSetting("WarningSpaceColor", RGBTOHEX(kDefaultWarningSpaceColor),
"", ""));
TryReadingSettings();
NameAttributeText::SetSortFolderNamesFirst(
fSortFolderNamesFirst->Value());
RealNameAttributeText::SetSortFolderNamesFirst(
fSortFolderNamesFirst->Value());
fSettingsLoaded = true;
}
TrackerSettings::TrackerSettings()
{
gTrackerState.LoadSettingsIfNeeded();
}
void
TrackerSettings::SaveSettings(bool onlyIfNonDefault)
{
gTrackerState.SaveSettings(onlyIfNonDefault);
}
bool
TrackerSettings::ShowDisksIcon()
{
return gTrackerState.fShowDisksIcon->Value();
}
void
TrackerSettings::SetShowDisksIcon(bool enabled)
{
gTrackerState.fShowDisksIcon->SetValue(enabled);
gTrackerState.fMountVolumesOntoDesktop->SetValue(!enabled);
}
bool
TrackerSettings::DesktopFilePanelRoot()
{
return gTrackerState.fDesktopFilePanelRoot->Value();
}
void
TrackerSettings::SetDesktopFilePanelRoot(bool enabled)
{
gTrackerState.fDesktopFilePanelRoot->SetValue(enabled);
}
bool
TrackerSettings::MountVolumesOntoDesktop()
{
return gTrackerState.fMountVolumesOntoDesktop->Value();
}
void
TrackerSettings::SetMountVolumesOntoDesktop(bool enabled)
{
gTrackerState.fShowDisksIcon->SetValue(!enabled);
gTrackerState.fMountVolumesOntoDesktop->SetValue(enabled);
}
bool
TrackerSettings::MountSharedVolumesOntoDesktop()
{
return gTrackerState.fMountSharedVolumesOntoDesktop->Value();
}
void
TrackerSettings::SetMountSharedVolumesOntoDesktop(bool enabled)
{
gTrackerState.fMountSharedVolumesOntoDesktop->SetValue(enabled);
}
bool
TrackerSettings::EjectWhenUnmounting()
{
return gTrackerState.fEjectWhenUnmounting->Value();
}
void
TrackerSettings::SetEjectWhenUnmounting(bool enabled)
{
gTrackerState.fEjectWhenUnmounting->SetValue(enabled);
}
bool
TrackerSettings::ShowVolumeSpaceBar()
{
return gTrackerState.fShowVolumeSpaceBar->Value();
}
void
TrackerSettings::SetShowVolumeSpaceBar(bool enabled)
{
gTrackerState.fShowVolumeSpaceBar->SetValue(enabled);
}
rgb_color
TrackerSettings::UsedSpaceColor()
{
return ValueToColor(gTrackerState.fUsedSpaceColor->Value());
}
void
TrackerSettings::SetUsedSpaceColor(rgb_color color)
{
gTrackerState.fUsedSpaceColor->ValueChanged(ColorToValue(color));
}
rgb_color
TrackerSettings::FreeSpaceColor()
{
return ValueToColor(gTrackerState.fFreeSpaceColor->Value());
}
void
TrackerSettings::SetFreeSpaceColor(rgb_color color)
{
gTrackerState.fFreeSpaceColor->ValueChanged(ColorToValue(color));
}
rgb_color
TrackerSettings::WarningSpaceColor()
{
return ValueToColor(gTrackerState.fWarningSpaceColor->Value());
}
void
TrackerSettings::SetWarningSpaceColor(rgb_color color)
{
gTrackerState.fWarningSpaceColor->ValueChanged(ColorToValue(color));
}
bool
TrackerSettings::ShowFullPathInTitleBar()
{
return gTrackerState.fShowFullPathInTitleBar->Value();
}
void
TrackerSettings::SetShowFullPathInTitleBar(bool enabled)
{
gTrackerState.fShowFullPathInTitleBar->SetValue(enabled);
}
bool
TrackerSettings::SortFolderNamesFirst()
{
return gTrackerState.fSortFolderNamesFirst->Value();
}
void
TrackerSettings::SetSortFolderNamesFirst(bool enabled)
{
gTrackerState.fSortFolderNamesFirst->SetValue(enabled);
NameAttributeText::SetSortFolderNamesFirst(enabled);
RealNameAttributeText::SetSortFolderNamesFirst(enabled);
}
bool
TrackerSettings::HideDotFiles()
{
return gTrackerState.fHideDotFiles->Value();
}
void
TrackerSettings::SetHideDotFiles(bool hide)
{
gTrackerState.fHideDotFiles->SetValue(hide);
}
bool
TrackerSettings::TypeAheadFiltering()
{
return gTrackerState.fTypeAheadFiltering->Value();
}
void
TrackerSettings::SetTypeAheadFiltering(bool enabled)
{
gTrackerState.fTypeAheadFiltering->SetValue(enabled);
}
bool
TrackerSettings::GenerateImageThumbnails()
{
return gTrackerState.fGenerateImageThumbnails->Value();
}
void
TrackerSettings::SetGenerateImageThumbnails(bool enabled)
{
gTrackerState.fGenerateImageThumbnails->SetValue(enabled);
}
bool
TrackerSettings::ShowSelectionWhenInactive()
{
return gTrackerState.fShowSelectionWhenInactive->Value();
}
void
TrackerSettings::SetShowSelectionWhenInactive(bool enabled)
{
gTrackerState.fShowSelectionWhenInactive->SetValue(enabled);
}
bool
TrackerSettings::TransparentSelection()
{
return gTrackerState.fTransparentSelection->Value();
}
void
TrackerSettings::SetTransparentSelection(bool enabled)
{
gTrackerState.fTransparentSelection->SetValue(enabled);
}
bool
TrackerSettings::SingleWindowBrowse()
{
return gTrackerState.fSingleWindowBrowse->Value();
}
void
TrackerSettings::SetSingleWindowBrowse(bool enabled)
{
gTrackerState.fSingleWindowBrowse->SetValue(enabled);
}
bool
TrackerSettings::ShowNavigator()
{
return gTrackerState.fShowNavigator->Value();
}
void
TrackerSettings::SetShowNavigator(bool enabled)
{
gTrackerState.fShowNavigator->SetValue(enabled);
}
void
TrackerSettings::RecentCounts(int32* applications, int32* documents,
int32* folders)
{
if (applications != NULL)
*applications = gTrackerState.fRecentApplicationsCount->Value();
if (documents != NULL)
*documents = gTrackerState.fRecentDocumentsCount->Value();
if (folders != NULL)
*folders = gTrackerState.fRecentFoldersCount->Value();
}
void
TrackerSettings::SetRecentApplicationsCount(int32 count)
{
gTrackerState.fRecentApplicationsCount->ValueChanged(count);
}
void
TrackerSettings::SetRecentDocumentsCount(int32 count)
{
gTrackerState.fRecentDocumentsCount->ValueChanged(count);
}
void
TrackerSettings::SetRecentFoldersCount(int32 count)
{
gTrackerState.fRecentFoldersCount->ValueChanged(count);
}