1 /* 2 Open Tracker License 3 4 Terms and Conditions 5 6 Copyright (c) 1991-2000, Be Incorporated. All rights reserved. 7 8 Permission is hereby granted, free of charge, to any person obtaining a copy of 9 this software and associated documentation files (the "Software"), to deal in 10 the Software without restriction, including without limitation the rights to 11 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12 of the Software, and to permit persons to whom the Software is furnished to do 13 so, subject to the following conditions: 14 15 The above copyright notice and this permission notice applies to all licensees 16 and shall be included in all copies or substantial portions of the Software. 17 18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, 20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21 BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION 23 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 25 Except as contained in this notice, the name of Be Incorporated shall not be 26 used in advertising or otherwise to promote the sale, use or other dealings in 27 this Software without prior written authorization from Be Incorporated. 28 29 Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks 30 of Be Incorporated in the United States and other countries. Other brand product 31 names are registered trademarks or trademarks of their respective holders. 32 All 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 48 class TTrackerState : public Settings { 49 public: 50 static TTrackerState* Get(); 51 void Release(); 52 53 void LoadSettingsIfNeeded(); 54 void SaveSettings(bool onlyIfNonDefault = true); 55 56 TTrackerState(); 57 ~TTrackerState(); 58 59 private: 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 100 static TTrackerState gTrackerState; 101 102 103 rgb_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 115 int32 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 125 TTrackerState::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 155 TTrackerState::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 189 TTrackerState::~TTrackerState() 190 { 191 } 192 193 194 void 195 TTrackerState::SaveSettings(bool onlyIfNonDefault) 196 { 197 if (fSettingsLoaded) 198 _inherited::SaveSettings(onlyIfNonDefault); 199 } 200 201 202 void 203 TTrackerState::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 269 TrackerSettings::TrackerSettings() 270 { 271 gTrackerState.LoadSettingsIfNeeded(); 272 } 273 274 275 void 276 TrackerSettings::SaveSettings(bool onlyIfNonDefault) 277 { 278 gTrackerState.SaveSettings(onlyIfNonDefault); 279 } 280 281 282 bool 283 TrackerSettings::ShowDisksIcon() 284 { 285 return gTrackerState.fShowDisksIcon->Value(); 286 } 287 288 289 void 290 TrackerSettings::SetShowDisksIcon(bool enabled) 291 { 292 gTrackerState.fShowDisksIcon->SetValue(enabled); 293 } 294 295 296 bool 297 TrackerSettings::DesktopFilePanelRoot() 298 { 299 return gTrackerState.fDesktopFilePanelRoot->Value(); 300 } 301 302 303 void 304 TrackerSettings::SetDesktopFilePanelRoot(bool enabled) 305 { 306 gTrackerState.fDesktopFilePanelRoot->SetValue(enabled); 307 } 308 309 310 bool 311 TrackerSettings::MountVolumesOntoDesktop() 312 { 313 return gTrackerState.fMountVolumesOntoDesktop->Value(); 314 } 315 316 317 void 318 TrackerSettings::SetMountVolumesOntoDesktop(bool enabled) 319 { 320 gTrackerState.fMountVolumesOntoDesktop->SetValue(enabled); 321 } 322 323 324 bool 325 TrackerSettings::MountSharedVolumesOntoDesktop() 326 { 327 return gTrackerState.fMountSharedVolumesOntoDesktop->Value(); 328 } 329 330 331 void 332 TrackerSettings::SetMountSharedVolumesOntoDesktop(bool enabled) 333 { 334 gTrackerState.fMountSharedVolumesOntoDesktop->SetValue(enabled); 335 } 336 337 338 bool 339 TrackerSettings::EjectWhenUnmounting() 340 { 341 return gTrackerState.fEjectWhenUnmounting->Value(); 342 } 343 344 345 void 346 TrackerSettings::SetEjectWhenUnmounting(bool enabled) 347 { 348 gTrackerState.fEjectWhenUnmounting->SetValue(enabled); 349 } 350 351 352 bool 353 TrackerSettings::ShowVolumeSpaceBar() 354 { 355 return gTrackerState.fShowVolumeSpaceBar->Value(); 356 } 357 358 359 void 360 TrackerSettings::SetShowVolumeSpaceBar(bool enabled) 361 { 362 gTrackerState.fShowVolumeSpaceBar->SetValue(enabled); 363 } 364 365 366 rgb_color 367 TrackerSettings::UsedSpaceColor() 368 { 369 return ValueToColor(gTrackerState.fUsedSpaceColor->Value()); 370 } 371 372 373 void 374 TrackerSettings::SetUsedSpaceColor(rgb_color color) 375 { 376 gTrackerState.fUsedSpaceColor->ValueChanged(ColorToValue(color)); 377 } 378 379 380 rgb_color 381 TrackerSettings::FreeSpaceColor() 382 { 383 return ValueToColor(gTrackerState.fFreeSpaceColor->Value()); 384 } 385 386 387 void 388 TrackerSettings::SetFreeSpaceColor(rgb_color color) 389 { 390 gTrackerState.fFreeSpaceColor->ValueChanged(ColorToValue(color)); 391 } 392 393 394 rgb_color 395 TrackerSettings::WarningSpaceColor() 396 { 397 return ValueToColor(gTrackerState.fWarningSpaceColor->Value()); 398 } 399 400 401 void 402 TrackerSettings::SetWarningSpaceColor(rgb_color color) 403 { 404 gTrackerState.fWarningSpaceColor->ValueChanged(ColorToValue(color)); 405 } 406 407 408 bool 409 TrackerSettings::ShowFullPathInTitleBar() 410 { 411 return gTrackerState.fShowFullPathInTitleBar->Value(); 412 } 413 414 415 void 416 TrackerSettings::SetShowFullPathInTitleBar(bool enabled) 417 { 418 gTrackerState.fShowFullPathInTitleBar->SetValue(enabled); 419 } 420 421 422 bool 423 TrackerSettings::SortFolderNamesFirst() 424 { 425 return gTrackerState.fSortFolderNamesFirst->Value(); 426 } 427 428 429 void 430 TrackerSettings::SetSortFolderNamesFirst(bool enabled) 431 { 432 gTrackerState.fSortFolderNamesFirst->SetValue(enabled); 433 NameAttributeText::SetSortFolderNamesFirst(enabled); 434 RealNameAttributeText::SetSortFolderNamesFirst(enabled); 435 } 436 437 438 bool 439 TrackerSettings::HideDotFiles() 440 { 441 return gTrackerState.fHideDotFiles->Value(); 442 } 443 444 445 void 446 TrackerSettings::SetHideDotFiles(bool hide) 447 { 448 gTrackerState.fHideDotFiles->SetValue(hide); 449 } 450 451 452 bool 453 TrackerSettings::TypeAheadFiltering() 454 { 455 return gTrackerState.fTypeAheadFiltering->Value(); 456 } 457 458 459 void 460 TrackerSettings::SetTypeAheadFiltering(bool enabled) 461 { 462 gTrackerState.fTypeAheadFiltering->SetValue(enabled); 463 } 464 465 466 bool 467 TrackerSettings::GenerateImageThumbnails() 468 { 469 return gTrackerState.fGenerateImageThumbnails->Value(); 470 } 471 472 473 void 474 TrackerSettings::SetGenerateImageThumbnails(bool enabled) 475 { 476 gTrackerState.fGenerateImageThumbnails->SetValue(enabled); 477 } 478 479 480 bool 481 TrackerSettings::ShowSelectionWhenInactive() 482 { 483 return gTrackerState.fShowSelectionWhenInactive->Value(); 484 } 485 486 487 void 488 TrackerSettings::SetShowSelectionWhenInactive(bool enabled) 489 { 490 gTrackerState.fShowSelectionWhenInactive->SetValue(enabled); 491 } 492 493 494 bool 495 TrackerSettings::TransparentSelection() 496 { 497 return gTrackerState.fTransparentSelection->Value(); 498 } 499 500 501 void 502 TrackerSettings::SetTransparentSelection(bool enabled) 503 { 504 gTrackerState.fTransparentSelection->SetValue(enabled); 505 } 506 507 508 bool 509 TrackerSettings::SingleWindowBrowse() 510 { 511 return gTrackerState.fSingleWindowBrowse->Value(); 512 } 513 514 515 void 516 TrackerSettings::SetSingleWindowBrowse(bool enabled) 517 { 518 gTrackerState.fSingleWindowBrowse->SetValue(enabled); 519 } 520 521 522 bool 523 TrackerSettings::ShowNavigator() 524 { 525 return gTrackerState.fShowNavigator->Value(); 526 } 527 528 529 void 530 TrackerSettings::SetShowNavigator(bool enabled) 531 { 532 gTrackerState.fShowNavigator->SetValue(enabled); 533 } 534 535 536 void 537 TrackerSettings::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 551 void 552 TrackerSettings::SetRecentApplicationsCount(int32 count) 553 { 554 gTrackerState.fRecentApplicationsCount->ValueChanged(count); 555 } 556 557 558 void 559 TrackerSettings::SetRecentDocumentsCount(int32 count) 560 { 561 gTrackerState.fRecentDocumentsCount->ValueChanged(count); 562 } 563 564 565 void 566 TrackerSettings::SetRecentFoldersCount(int32 count) 567 { 568 gTrackerState.fRecentFoldersCount->ValueChanged(count); 569 } 570