1/* 2Open Tracker License 3 4Terms and Conditions 5 6Copyright (c) 1991-2000, Be Incorporated. All rights reserved. 7 8Permission is hereby granted, free of charge, to any person obtaining a copy of 9this software and associated documentation files (the "Software"), to deal in 10the Software without restriction, including without limitation the rights to 11use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12of the Software, and to permit persons to whom the Software is furnished to do 13so, subject to the following conditions: 14 15The above copyright notice and this permission notice applies to all licensees 16and shall be included in all copies or substantial portions of the Software. 17 18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, 20FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION 23WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 25Except as contained in this notice, the name of Be Incorporated shall not be 26used in advertising or otherwise to promote the sale, use or other dealings in 27this Software without prior written authorization from Be Incorporated. 28 29Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks 30of Be Incorporated in the United States and other countries. Other brand product 31names are registered trademarks or trademarks of their respective holders. 32All rights reserved. 33*/ 34 35 36#include "TrackerSettings.h" 37 38#include <Debug.h> 39 40#include "Tracker.h" 41#include "TrackerDefaults.h" 42#include "WidgetAttributeText.h" 43 44 45#define RGBTOHEX(c) ((c.alpha << 24) | (c.red << 16) | (c.green << 8) | (c.blue)) 46 47 48class TTrackerState : public Settings { 49public: 50 static TTrackerState* Get(); 51 void Release(); 52 53 void LoadSettingsIfNeeded(); 54 void SaveSettings(bool onlyIfNonDefault = true); 55 56 TTrackerState(); 57 ~TTrackerState(); 58 59private: 60 friend class BPrivate::TrackerSettings; 61 62 static void InitIfNeeded(); 63 TTrackerState(const TTrackerState&); 64 65 BooleanValueSetting* fShowDisksIcon; 66 BooleanValueSetting* fMountVolumesOntoDesktop; 67 BooleanValueSetting* fDesktopFilePanelRoot; 68 BooleanValueSetting* fMountSharedVolumesOntoDesktop; 69 BooleanValueSetting* fEjectWhenUnmounting; 70 71 BooleanValueSetting* fShowFullPathInTitleBar; 72 BooleanValueSetting* fSingleWindowBrowse; 73 BooleanValueSetting* fShowNavigator; 74 BooleanValueSetting* fShowSelectionWhenInactive; 75 BooleanValueSetting* fTransparentSelection; 76 BooleanValueSetting* fSortFolderNamesFirst; 77 BooleanValueSetting* fHideDotFiles; 78 BooleanValueSetting* fTypeAheadFiltering; 79 BooleanValueSetting* fGenerateImageThumbnails; 80 81 ScalarValueSetting* fRecentApplicationsCount; 82 ScalarValueSetting* fRecentDocumentsCount; 83 ScalarValueSetting* fRecentFoldersCount; 84 85 BooleanValueSetting* fShowVolumeSpaceBar; 86 HexScalarValueSetting* fUsedSpaceColor; 87 HexScalarValueSetting* fFreeSpaceColor; 88 HexScalarValueSetting* fWarningSpaceColor; 89 90 Benaphore fInitLock; 91 bool fInited; 92 bool fSettingsLoaded; 93 94 int32 fUseCounter; 95 96 typedef Settings _inherited; 97}; 98 99 100static TTrackerState gTrackerState; 101 102 103rgb_color ValueToColor(int32 value) 104{ 105 rgb_color color; 106 color.alpha = static_cast<uchar>((value >> 24L) & 0xff); 107 color.red = static_cast<uchar>((value >> 16L) & 0xff); 108 color.green = static_cast<uchar>((value >> 8L) & 0xff); 109 color.blue = static_cast<uchar>(value & 0xff); 110 111 return color; 112} 113 114 115int32 ColorToValue(rgb_color color) 116{ 117 return color.alpha << 24L | color.red << 16L | color.green << 8L 118 | color.blue; 119} 120 121 122// #pragma mark - TTrackerState 123 124 125TTrackerState::TTrackerState() 126 : 127 Settings("TrackerSettings", "Tracker"), 128 fShowDisksIcon(NULL), 129 fMountVolumesOntoDesktop(NULL), 130 fDesktopFilePanelRoot(NULL), 131 fMountSharedVolumesOntoDesktop(NULL), 132 fEjectWhenUnmounting(NULL), 133 fShowFullPathInTitleBar(NULL), 134 fSingleWindowBrowse(NULL), 135 fShowNavigator(NULL), 136 fShowSelectionWhenInactive(NULL), 137 fTransparentSelection(NULL), 138 fSortFolderNamesFirst(NULL), 139 fHideDotFiles(NULL), 140 fTypeAheadFiltering(NULL), 141 fGenerateImageThumbnails(NULL), 142 fRecentApplicationsCount(NULL), 143 fRecentDocumentsCount(NULL), 144 fRecentFoldersCount(NULL), 145 fShowVolumeSpaceBar(NULL), 146 fUsedSpaceColor(NULL), 147 fFreeSpaceColor(NULL), 148 fWarningSpaceColor(NULL), 149 fInited(false), 150 fSettingsLoaded(false) 151{ 152} 153 154 155TTrackerState::TTrackerState(const TTrackerState&) 156 : 157 Settings("", ""), 158 fShowDisksIcon(NULL), 159 fMountVolumesOntoDesktop(NULL), 160 fDesktopFilePanelRoot(NULL), 161 fMountSharedVolumesOntoDesktop(NULL), 162 fEjectWhenUnmounting(NULL), 163 fShowFullPathInTitleBar(NULL), 164 fSingleWindowBrowse(NULL), 165 fShowNavigator(NULL), 166 fShowSelectionWhenInactive(NULL), 167 fTransparentSelection(NULL), 168 fSortFolderNamesFirst(NULL), 169 fHideDotFiles(NULL), 170 fTypeAheadFiltering(NULL), 171 fGenerateImageThumbnails(NULL), 172 fRecentApplicationsCount(NULL), 173 fRecentDocumentsCount(NULL), 174 fRecentFoldersCount(NULL), 175 fShowVolumeSpaceBar(NULL), 176 fUsedSpaceColor(NULL), 177 fFreeSpaceColor(NULL), 178 fWarningSpaceColor(NULL), 179 fInited(false), 180 fSettingsLoaded(false) 181{ 182 // Placeholder copy constructor to prevent others from accidentally using 183 // the default copy constructor. Note, the DEBUGGER call is for the off 184 // chance that a TTrackerState method (or friend) tries to make a copy. 185 DEBUGGER("Don't make a copy of this!"); 186} 187 188 189TTrackerState::~TTrackerState() 190{ 191} 192 193 194void 195TTrackerState::SaveSettings(bool onlyIfNonDefault) 196{ 197 if (fSettingsLoaded) 198 _inherited::SaveSettings(onlyIfNonDefault); 199} 200 201 202void 203TTrackerState::LoadSettingsIfNeeded() 204{ 205 if (fSettingsLoaded) 206 return; 207 208 // Set default settings before reading from disk 209 210 Add(fShowDisksIcon = new BooleanValueSetting("ShowDisksIcon", kDefaultShowDisksIcon)); 211 Add(fMountVolumesOntoDesktop 212 = new BooleanValueSetting("MountVolumesOntoDesktop", kDefaultMountVolumesOntoDesktop)); 213 Add(fMountSharedVolumesOntoDesktop = new BooleanValueSetting( 214 "MountSharedVolumesOntoDesktop", kDefaultMountSharedVolumesOntoDesktop)); 215 Add(fEjectWhenUnmounting 216 = new BooleanValueSetting("EjectWhenUnmounting", kDefaultEjectWhenUnmounting)); 217 218 Add(fDesktopFilePanelRoot // deprecated 219 = new BooleanValueSetting("DesktopFilePanelRoot", kDefaultDesktopFilePanelRoot)); 220 Add(fShowSelectionWhenInactive // deprecated 221 = new BooleanValueSetting("ShowSelectionWhenInactive", kDefaultShowSelectionWhenInactive)); 222 223 Add(fShowFullPathInTitleBar 224 = new BooleanValueSetting("ShowFullPathInTitleBar", kDefaultShowFullPathInTitleBar)); 225 Add(fSingleWindowBrowse 226 = new BooleanValueSetting("SingleWindowBrowse", kDefaultSingleWindowBrowse)); 227 Add(fShowNavigator = new BooleanValueSetting("ShowNavigator", kDefaultShowNavigator)); 228 Add(fTransparentSelection 229 = new BooleanValueSetting("TransparentSelection", kDefaultTransparentSelection)); 230 Add(fSortFolderNamesFirst 231 = new BooleanValueSetting("SortFolderNamesFirst", kDefaultSortFolderNamesFirst)); 232 Add(fHideDotFiles = new BooleanValueSetting("HideDotFiles", kDefaultHideDotFiles)); 233 Add(fTypeAheadFiltering 234 = new BooleanValueSetting("TypeAheadFiltering", kDefaultTypeAheadFiltering)); 235 Add(fGenerateImageThumbnails 236 = new BooleanValueSetting("GenerateImageThumbnails", kDefaultGenerateImageThumbnails)); 237 238 Add(fRecentApplicationsCount 239 = new ScalarValueSetting("RecentApplications", kDefaultRecentApplications, "", "")); 240 Add(fRecentDocumentsCount 241 = new ScalarValueSetting("RecentDocuments", kDefaultRecentDocuments, "", "")); 242 Add(fRecentFoldersCount 243 = new ScalarValueSetting("RecentFolders", kDefaultRecentFolders, "", "")); 244 245 Add(fShowVolumeSpaceBar 246 = new BooleanValueSetting("ShowVolumeSpaceBar", kDefaultShowVolumeSpaceBar)); 247 Add(fUsedSpaceColor 248 = new HexScalarValueSetting("UsedSpaceColor", RGBTOHEX(kDefaultUsedSpaceColor), "", "")); 249 Add(fFreeSpaceColor 250 = new HexScalarValueSetting("FreeSpaceColor", RGBTOHEX(kDefaultFreeSpaceColor), "", "")); 251 Add(fWarningSpaceColor 252 = new HexScalarValueSetting("WarningSpaceColor", RGBTOHEX(kDefaultWarningSpaceColor), 253 "", "")); 254 255 TryReadingSettings(); 256 257 NameAttributeText::SetSortFolderNamesFirst( 258 fSortFolderNamesFirst->Value()); 259 RealNameAttributeText::SetSortFolderNamesFirst( 260 fSortFolderNamesFirst->Value()); 261 262 fSettingsLoaded = true; 263} 264 265 266// #pragma mark - TrackerSettings 267 268 269TrackerSettings::TrackerSettings() 270{ 271 gTrackerState.LoadSettingsIfNeeded(); 272} 273 274 275void 276TrackerSettings::SaveSettings(bool onlyIfNonDefault) 277{ 278 gTrackerState.SaveSettings(onlyIfNonDefault); 279} 280 281 282bool 283TrackerSettings::ShowDisksIcon() 284{ 285 return gTrackerState.fShowDisksIcon->Value(); 286} 287 288 289void 290TrackerSettings::SetShowDisksIcon(bool enabled) 291{ 292 gTrackerState.fShowDisksIcon->SetValue(enabled); 293} 294 295 296bool 297TrackerSettings::DesktopFilePanelRoot() 298{ 299 return gTrackerState.fDesktopFilePanelRoot->Value(); 300} 301 302 303void 304TrackerSettings::SetDesktopFilePanelRoot(bool enabled) 305{ 306 gTrackerState.fDesktopFilePanelRoot->SetValue(enabled); 307} 308 309 310bool 311TrackerSettings::MountVolumesOntoDesktop() 312{ 313 return gTrackerState.fMountVolumesOntoDesktop->Value(); 314} 315 316 317void 318TrackerSettings::SetMountVolumesOntoDesktop(bool enabled) 319{ 320 gTrackerState.fMountVolumesOntoDesktop->SetValue(enabled); 321} 322 323 324bool 325TrackerSettings::MountSharedVolumesOntoDesktop() 326{ 327 return gTrackerState.fMountSharedVolumesOntoDesktop->Value(); 328} 329 330 331void 332TrackerSettings::SetMountSharedVolumesOntoDesktop(bool enabled) 333{ 334 gTrackerState.fMountSharedVolumesOntoDesktop->SetValue(enabled); 335} 336 337 338bool 339TrackerSettings::EjectWhenUnmounting() 340{ 341 return gTrackerState.fEjectWhenUnmounting->Value(); 342} 343 344 345void 346TrackerSettings::SetEjectWhenUnmounting(bool enabled) 347{ 348 gTrackerState.fEjectWhenUnmounting->SetValue(enabled); 349} 350 351 352bool 353TrackerSettings::ShowVolumeSpaceBar() 354{ 355 return gTrackerState.fShowVolumeSpaceBar->Value(); 356} 357 358 359void 360TrackerSettings::SetShowVolumeSpaceBar(bool enabled) 361{ 362 gTrackerState.fShowVolumeSpaceBar->SetValue(enabled); 363} 364 365 366rgb_color 367TrackerSettings::UsedSpaceColor() 368{ 369 return ValueToColor(gTrackerState.fUsedSpaceColor->Value()); 370} 371 372 373void 374TrackerSettings::SetUsedSpaceColor(rgb_color color) 375{ 376 gTrackerState.fUsedSpaceColor->ValueChanged(ColorToValue(color)); 377} 378 379 380rgb_color 381TrackerSettings::FreeSpaceColor() 382{ 383 return ValueToColor(gTrackerState.fFreeSpaceColor->Value()); 384} 385 386 387void 388TrackerSettings::SetFreeSpaceColor(rgb_color color) 389{ 390 gTrackerState.fFreeSpaceColor->ValueChanged(ColorToValue(color)); 391} 392 393 394rgb_color 395TrackerSettings::WarningSpaceColor() 396{ 397 return ValueToColor(gTrackerState.fWarningSpaceColor->Value()); 398} 399 400 401void 402TrackerSettings::SetWarningSpaceColor(rgb_color color) 403{ 404 gTrackerState.fWarningSpaceColor->ValueChanged(ColorToValue(color)); 405} 406 407 408bool 409TrackerSettings::ShowFullPathInTitleBar() 410{ 411 return gTrackerState.fShowFullPathInTitleBar->Value(); 412} 413 414 415void 416TrackerSettings::SetShowFullPathInTitleBar(bool enabled) 417{ 418 gTrackerState.fShowFullPathInTitleBar->SetValue(enabled); 419} 420 421 422bool 423TrackerSettings::SortFolderNamesFirst() 424{ 425 return gTrackerState.fSortFolderNamesFirst->Value(); 426} 427 428 429void 430TrackerSettings::SetSortFolderNamesFirst(bool enabled) 431{ 432 gTrackerState.fSortFolderNamesFirst->SetValue(enabled); 433 NameAttributeText::SetSortFolderNamesFirst(enabled); 434 RealNameAttributeText::SetSortFolderNamesFirst(enabled); 435} 436 437 438bool 439TrackerSettings::HideDotFiles() 440{ 441 return gTrackerState.fHideDotFiles->Value(); 442} 443 444 445void 446TrackerSettings::SetHideDotFiles(bool hide) 447{ 448 gTrackerState.fHideDotFiles->SetValue(hide); 449} 450 451 452bool 453TrackerSettings::TypeAheadFiltering() 454{ 455 return gTrackerState.fTypeAheadFiltering->Value(); 456} 457 458 459void 460TrackerSettings::SetTypeAheadFiltering(bool enabled) 461{ 462 gTrackerState.fTypeAheadFiltering->SetValue(enabled); 463} 464 465 466bool 467TrackerSettings::GenerateImageThumbnails() 468{ 469 return gTrackerState.fGenerateImageThumbnails->Value(); 470} 471 472 473void 474TrackerSettings::SetGenerateImageThumbnails(bool enabled) 475{ 476 gTrackerState.fGenerateImageThumbnails->SetValue(enabled); 477} 478 479 480bool 481TrackerSettings::ShowSelectionWhenInactive() 482{ 483 return gTrackerState.fShowSelectionWhenInactive->Value(); 484} 485 486 487void 488TrackerSettings::SetShowSelectionWhenInactive(bool enabled) 489{ 490 gTrackerState.fShowSelectionWhenInactive->SetValue(enabled); 491} 492 493 494bool 495TrackerSettings::TransparentSelection() 496{ 497 return gTrackerState.fTransparentSelection->Value(); 498} 499 500 501void 502TrackerSettings::SetTransparentSelection(bool enabled) 503{ 504 gTrackerState.fTransparentSelection->SetValue(enabled); 505} 506 507 508bool 509TrackerSettings::SingleWindowBrowse() 510{ 511 return gTrackerState.fSingleWindowBrowse->Value(); 512} 513 514 515void 516TrackerSettings::SetSingleWindowBrowse(bool enabled) 517{ 518 gTrackerState.fSingleWindowBrowse->SetValue(enabled); 519} 520 521 522bool 523TrackerSettings::ShowNavigator() 524{ 525 return gTrackerState.fShowNavigator->Value(); 526} 527 528 529void 530TrackerSettings::SetShowNavigator(bool enabled) 531{ 532 gTrackerState.fShowNavigator->SetValue(enabled); 533} 534 535 536void 537TrackerSettings::RecentCounts(int32* applications, int32* documents, 538 int32* folders) 539{ 540 if (applications != NULL) 541 *applications = gTrackerState.fRecentApplicationsCount->Value(); 542 543 if (documents != NULL) 544 *documents = gTrackerState.fRecentDocumentsCount->Value(); 545 546 if (folders != NULL) 547 *folders = gTrackerState.fRecentFoldersCount->Value(); 548} 549 550 551void 552TrackerSettings::SetRecentApplicationsCount(int32 count) 553{ 554 gTrackerState.fRecentApplicationsCount->ValueChanged(count); 555} 556 557 558void 559TrackerSettings::SetRecentDocumentsCount(int32 count) 560{ 561 gTrackerState.fRecentDocumentsCount->ValueChanged(count); 562} 563 564 565void 566TrackerSettings::SetRecentFoldersCount(int32 count) 567{ 568 gTrackerState.fRecentFoldersCount->ValueChanged(count); 569} 570