annotate view/ViewManager.cpp @ 312:6de6f78b13a1

* Make it possible to drop audio files, layer files, session files and images onto SV panes. Need to do a bit more work on where we expect the dropped file to go, particularly in the case of audio files -- at the moment they're always opened in new panes, but it may be better to by default replace whatever is in the target pane.
author Chris Cannam
date Wed, 10 Oct 2007 15:18:02 +0000
parents 5636eeacc467
children 7b96a3261e1c
rev   line source
Chris@127 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@127 2
Chris@127 3 /*
Chris@127 4 Sonic Visualiser
Chris@127 5 An audio file viewer and annotation editor.
Chris@127 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@127 8
Chris@127 9 This program is free software; you can redistribute it and/or
Chris@127 10 modify it under the terms of the GNU General Public License as
Chris@127 11 published by the Free Software Foundation; either version 2 of the
Chris@127 12 License, or (at your option) any later version. See the file
Chris@127 13 COPYING included with this distribution for more information.
Chris@127 14 */
Chris@127 15
Chris@127 16 #include "ViewManager.h"
Chris@128 17 #include "base/AudioPlaySource.h"
Chris@128 18 #include "data/model/Model.h"
Chris@128 19 #include "base/CommandHistory.h"
Chris@211 20 #include "View.h"
Chris@127 21
Chris@133 22 #include <QSettings>
Chris@292 23 #include <QApplication>
Chris@133 24
Chris@127 25 #include <iostream>
Chris@127 26
Chris@180 27 //#define DEBUG_VIEW_MANAGER 1
Chris@127 28
Chris@127 29 ViewManager::ViewManager() :
Chris@127 30 m_playSource(0),
Chris@127 31 m_globalCentreFrame(0),
Chris@127 32 m_globalZoom(1024),
Chris@127 33 m_playbackFrame(0),
Chris@301 34 m_playbackModel(0),
Chris@127 35 m_mainModelSampleRate(0),
Chris@127 36 m_lastLeft(0),
Chris@127 37 m_lastRight(0),
Chris@127 38 m_inProgressExclusive(true),
Chris@127 39 m_toolMode(NavigateMode),
Chris@127 40 m_playLoopMode(false),
Chris@127 41 m_playSelectionMode(false),
Chris@301 42 m_playSoloMode(false),
Chris@189 43 m_overlayMode(StandardOverlays),
Chris@292 44 m_zoomWheelsEnabled(true),
Chris@292 45 m_lightPalette(QApplication::palette()),
Chris@292 46 m_darkPalette(QApplication::palette())
Chris@127 47 {
Chris@133 48 QSettings settings;
Chris@133 49 settings.beginGroup("MainWindow");
Chris@133 50 m_overlayMode = OverlayMode
Chris@133 51 (settings.value("overlay-mode", int(m_overlayMode)).toInt());
Chris@133 52 m_zoomWheelsEnabled =
Chris@133 53 settings.value("zoom-wheels-enabled", m_zoomWheelsEnabled).toBool();
Chris@133 54 settings.endGroup();
Chris@292 55
Chris@292 56 if (getGlobalDarkBackground()) {
Chris@293 57
Chris@293 58 std::cerr << "dark palette:" << std::endl;
Chris@293 59 std::cerr << "window = " << QApplication::palette().color(QPalette::Window).name().toStdString() << std::endl;
Chris@293 60 std::cerr << "windowtext = " << QApplication::palette().color(QPalette::WindowText).name().toStdString() << std::endl;
Chris@293 61 std::cerr << "base = " << QApplication::palette().color(QPalette::Base).name().toStdString() << std::endl;
Chris@293 62 std::cerr << "alternatebase = " << QApplication::palette().color(QPalette::AlternateBase).name().toStdString() << std::endl;
Chris@293 63 std::cerr << "text = " << QApplication::palette().color(QPalette::Text).name().toStdString() << std::endl;
Chris@293 64 std::cerr << "button = " << QApplication::palette().color(QPalette::Button).name().toStdString() << std::endl;
Chris@293 65 std::cerr << "buttontext = " << QApplication::palette().color(QPalette::ButtonText).name().toStdString() << std::endl;
Chris@293 66 std::cerr << "brighttext = " << QApplication::palette().color(QPalette::BrightText).name().toStdString() << std::endl;
Chris@293 67 std::cerr << "light = " << QApplication::palette().color(QPalette::Light).name().toStdString() << std::endl;
Chris@293 68 std::cerr << "dark = " << QApplication::palette().color(QPalette::Dark).name().toStdString() << std::endl;
Chris@293 69 std::cerr << "mid = " << QApplication::palette().color(QPalette::Mid).name().toStdString() << std::endl;
Chris@293 70
Chris@293 71 m_lightPalette = QPalette(QColor("#000000"), // WindowText
Chris@293 72 QColor("#dddfe4"), // Button
Chris@293 73 QColor("#ffffff"), // Light
Chris@293 74 QColor("#555555"), // Dark
Chris@293 75 QColor("#c7c7c7"), // Mid
Chris@293 76 QColor("#000000"), // Text
Chris@293 77 QColor("#ffffff"), // BrightText
Chris@293 78 QColor("#ffffff"), // Base
Chris@293 79 QColor("#efefef")); // Window
Chris@293 80
Chris@293 81
Chris@292 82 } else {
Chris@293 83 std::cerr << "light palette:" << std::endl;
Chris@293 84 std::cerr << "window = " << QApplication::palette().color(QPalette::Window).name().toStdString() << std::endl;
Chris@293 85 std::cerr << "windowtext = " << QApplication::palette().color(QPalette::WindowText).name().toStdString() << std::endl;
Chris@293 86 std::cerr << "base = " << QApplication::palette().color(QPalette::Base).name().toStdString() << std::endl;
Chris@293 87 std::cerr << "alternatebase = " << QApplication::palette().color(QPalette::AlternateBase).name().toStdString() << std::endl;
Chris@293 88 std::cerr << "text = " << QApplication::palette().color(QPalette::Text).name().toStdString() << std::endl;
Chris@293 89 std::cerr << "button = " << QApplication::palette().color(QPalette::Button).name().toStdString() << std::endl;
Chris@293 90 std::cerr << "buttontext = " << QApplication::palette().color(QPalette::ButtonText).name().toStdString() << std::endl;
Chris@293 91 std::cerr << "brighttext = " << QApplication::palette().color(QPalette::BrightText).name().toStdString() << std::endl;
Chris@293 92 std::cerr << "light = " << QApplication::palette().color(QPalette::Light).name().toStdString() << std::endl;
Chris@293 93 std::cerr << "dark = " << QApplication::palette().color(QPalette::Dark).name().toStdString() << std::endl;
Chris@293 94 std::cerr << "mid = " << QApplication::palette().color(QPalette::Mid).name().toStdString() << std::endl;
Chris@293 95
Chris@293 96 m_darkPalette = QPalette(QColor("#ffffff"), // WindowText
Chris@293 97 QColor("#3e3e3e"), // Button
Chris@293 98 QColor("#808080"), // Light
Chris@293 99 QColor("#1e1e1e"), // Dark
Chris@293 100 QColor("#404040"), // Mid
Chris@293 101 QColor("#ffffff"), // Text
Chris@293 102 QColor("#ffffff"), // BrightText
Chris@293 103 QColor("#000000"), // Base
Chris@293 104 QColor("#202020")); // Window
Chris@292 105 }
Chris@127 106 }
Chris@127 107
Chris@127 108 ViewManager::~ViewManager()
Chris@127 109 {
Chris@127 110 }
Chris@127 111
Chris@127 112 unsigned long
Chris@127 113 ViewManager::getGlobalCentreFrame() const
Chris@127 114 {
Chris@127 115 #ifdef DEBUG_VIEW_MANAGER
Chris@127 116 std::cout << "ViewManager::getGlobalCentreFrame: returning " << m_globalCentreFrame << std::endl;
Chris@127 117 #endif
Chris@127 118 return m_globalCentreFrame;
Chris@127 119 }
Chris@127 120
Chris@180 121 void
Chris@180 122 ViewManager::setGlobalCentreFrame(unsigned long f)
Chris@180 123 {
Chris@180 124 #ifdef DEBUG_VIEW_MANAGER
Chris@180 125 std::cout << "ViewManager::setGlobalCentreFrame to " << f << std::endl;
Chris@180 126 #endif
Chris@180 127 m_globalCentreFrame = f;
Chris@211 128 emit globalCentreFrameChanged(f);
Chris@180 129 }
Chris@180 130
Chris@127 131 unsigned long
Chris@127 132 ViewManager::getGlobalZoom() const
Chris@127 133 {
Chris@127 134 #ifdef DEBUG_VIEW_MANAGER
Chris@127 135 std::cout << "ViewManager::getGlobalZoom: returning " << m_globalZoom << std::endl;
Chris@127 136 #endif
Chris@127 137 return m_globalZoom;
Chris@127 138 }
Chris@127 139
Chris@127 140 unsigned long
Chris@127 141 ViewManager::getPlaybackFrame() const
Chris@127 142 {
Chris@127 143 if (m_playSource && m_playSource->isPlaying()) {
Chris@127 144 m_playbackFrame = m_playSource->getCurrentPlayingFrame();
Chris@127 145 }
Chris@127 146 return m_playbackFrame;
Chris@127 147 }
Chris@127 148
Chris@127 149 void
Chris@127 150 ViewManager::setPlaybackFrame(unsigned long f)
Chris@127 151 {
Chris@127 152 if (m_playbackFrame != f) {
Chris@127 153 m_playbackFrame = f;
Chris@127 154 emit playbackFrameChanged(f);
Chris@127 155 if (m_playSource && m_playSource->isPlaying()) {
Chris@127 156 m_playSource->play(f);
Chris@127 157 }
Chris@127 158 }
Chris@127 159 }
Chris@127 160
Chris@301 161 Model *
Chris@301 162 ViewManager::getPlaybackModel() const
Chris@301 163 {
Chris@301 164 return m_playbackModel;
Chris@301 165 }
Chris@301 166
Chris@301 167 void
Chris@301 168 ViewManager::setPlaybackModel(Model *model)
Chris@301 169 {
Chris@301 170 m_playbackModel = model;
Chris@301 171 }
Chris@301 172
Chris@127 173 bool
Chris@127 174 ViewManager::haveInProgressSelection() const
Chris@127 175 {
Chris@127 176 return !m_inProgressSelection.isEmpty();
Chris@127 177 }
Chris@127 178
Chris@127 179 const Selection &
Chris@127 180 ViewManager::getInProgressSelection(bool &exclusive) const
Chris@127 181 {
Chris@127 182 exclusive = m_inProgressExclusive;
Chris@127 183 return m_inProgressSelection;
Chris@127 184 }
Chris@127 185
Chris@127 186 void
Chris@127 187 ViewManager::setInProgressSelection(const Selection &selection, bool exclusive)
Chris@127 188 {
Chris@127 189 m_inProgressExclusive = exclusive;
Chris@127 190 m_inProgressSelection = selection;
Chris@127 191 if (exclusive) clearSelections();
Chris@127 192 emit inProgressSelectionChanged();
Chris@127 193 }
Chris@127 194
Chris@127 195 void
Chris@127 196 ViewManager::clearInProgressSelection()
Chris@127 197 {
Chris@127 198 m_inProgressSelection = Selection();
Chris@127 199 emit inProgressSelectionChanged();
Chris@127 200 }
Chris@127 201
Chris@127 202 const MultiSelection &
Chris@127 203 ViewManager::getSelection() const
Chris@127 204 {
Chris@127 205 return m_selections;
Chris@127 206 }
Chris@127 207
Chris@127 208 const MultiSelection::SelectionList &
Chris@127 209 ViewManager::getSelections() const
Chris@127 210 {
Chris@127 211 return m_selections.getSelections();
Chris@127 212 }
Chris@127 213
Chris@127 214 void
Chris@127 215 ViewManager::setSelection(const Selection &selection)
Chris@127 216 {
Chris@127 217 MultiSelection ms(m_selections);
Chris@127 218 ms.setSelection(selection);
Chris@127 219 setSelections(ms);
Chris@127 220 }
Chris@127 221
Chris@127 222 void
Chris@127 223 ViewManager::addSelection(const Selection &selection)
Chris@127 224 {
Chris@127 225 MultiSelection ms(m_selections);
Chris@127 226 ms.addSelection(selection);
Chris@127 227 setSelections(ms);
Chris@127 228 }
Chris@127 229
Chris@127 230 void
Chris@127 231 ViewManager::removeSelection(const Selection &selection)
Chris@127 232 {
Chris@127 233 MultiSelection ms(m_selections);
Chris@127 234 ms.removeSelection(selection);
Chris@127 235 setSelections(ms);
Chris@127 236 }
Chris@127 237
Chris@127 238 void
Chris@127 239 ViewManager::clearSelections()
Chris@127 240 {
Chris@127 241 MultiSelection ms(m_selections);
Chris@127 242 ms.clearSelections();
Chris@127 243 setSelections(ms);
Chris@127 244 }
Chris@127 245
Chris@127 246 void
Chris@127 247 ViewManager::setSelections(const MultiSelection &ms)
Chris@127 248 {
Chris@127 249 if (m_selections.getSelections() == ms.getSelections()) return;
Chris@127 250 SetSelectionCommand *command = new SetSelectionCommand(this, ms);
Chris@127 251 CommandHistory::getInstance()->addCommand(command);
Chris@127 252 }
Chris@127 253
Chris@271 254 size_t
Chris@271 255 ViewManager::constrainFrameToSelection(size_t frame) const
Chris@271 256 {
Chris@271 257 MultiSelection::SelectionList sl = getSelections();
Chris@271 258 if (sl.empty()) return frame;
Chris@271 259
Chris@271 260 size_t selectionStartFrame = sl.begin()->getStartFrame();
Chris@271 261 if (frame < selectionStartFrame) {
Chris@271 262 frame = selectionStartFrame;
Chris@271 263 return frame;
Chris@271 264 }
Chris@271 265
Chris@271 266 MultiSelection::SelectionList::iterator i = sl.end();
Chris@271 267 --i;
Chris@271 268 size_t selectionEndFrame = i->getEndFrame();
Chris@271 269 if (frame > selectionEndFrame) frame = selectionEndFrame;
Chris@271 270
Chris@271 271 return frame;
Chris@271 272 }
Chris@271 273
Chris@127 274 void
Chris@127 275 ViewManager::signalSelectionChange()
Chris@127 276 {
Chris@127 277 emit selectionChanged();
Chris@127 278 }
Chris@127 279
Chris@127 280 ViewManager::SetSelectionCommand::SetSelectionCommand(ViewManager *vm,
Chris@127 281 const MultiSelection &ms) :
Chris@127 282 m_vm(vm),
Chris@127 283 m_oldSelection(vm->m_selections),
Chris@127 284 m_newSelection(ms)
Chris@127 285 {
Chris@127 286 }
Chris@127 287
Chris@127 288 ViewManager::SetSelectionCommand::~SetSelectionCommand() { }
Chris@127 289
Chris@127 290 void
Chris@127 291 ViewManager::SetSelectionCommand::execute()
Chris@127 292 {
Chris@127 293 m_vm->m_selections = m_newSelection;
Chris@127 294 m_vm->signalSelectionChange();
Chris@127 295 }
Chris@127 296
Chris@127 297 void
Chris@127 298 ViewManager::SetSelectionCommand::unexecute()
Chris@127 299 {
Chris@127 300 m_vm->m_selections = m_oldSelection;
Chris@127 301 m_vm->signalSelectionChange();
Chris@127 302 }
Chris@127 303
Chris@127 304 QString
Chris@127 305 ViewManager::SetSelectionCommand::getName() const
Chris@127 306 {
Chris@127 307 if (m_newSelection.getSelections().empty()) return tr("Clear Selection");
Chris@127 308 else return tr("Select");
Chris@127 309 }
Chris@127 310
Chris@127 311 Selection
Chris@127 312 ViewManager::getContainingSelection(size_t frame, bool defaultToFollowing) const
Chris@127 313 {
Chris@127 314 return m_selections.getContainingSelection(frame, defaultToFollowing);
Chris@127 315 }
Chris@127 316
Chris@127 317 void
Chris@127 318 ViewManager::setToolMode(ToolMode mode)
Chris@127 319 {
Chris@127 320 m_toolMode = mode;
Chris@127 321
Chris@127 322 emit toolModeChanged();
Chris@127 323 }
Chris@127 324
Chris@127 325 void
Chris@127 326 ViewManager::setPlayLoopMode(bool mode)
Chris@127 327 {
Chris@177 328 if (m_playLoopMode != mode) {
Chris@127 329
Chris@177 330 m_playLoopMode = mode;
Chris@177 331
Chris@177 332 emit playLoopModeChanged();
Chris@177 333 emit playLoopModeChanged(mode);
Chris@177 334 }
Chris@127 335 }
Chris@127 336
Chris@127 337 void
Chris@127 338 ViewManager::setPlaySelectionMode(bool mode)
Chris@127 339 {
Chris@177 340 if (m_playSelectionMode != mode) {
Chris@127 341
Chris@177 342 m_playSelectionMode = mode;
Chris@177 343
Chris@177 344 emit playSelectionModeChanged();
Chris@177 345 emit playSelectionModeChanged(mode);
Chris@177 346 }
Chris@127 347 }
Chris@127 348
Chris@301 349 void
Chris@301 350 ViewManager::setPlaySoloMode(bool mode)
Chris@301 351 {
Chris@301 352 if (m_playSoloMode != mode) {
Chris@301 353
Chris@301 354 m_playSoloMode = mode;
Chris@301 355
Chris@301 356 emit playSoloModeChanged();
Chris@301 357 emit playSoloModeChanged(mode);
Chris@301 358 }
Chris@301 359 }
Chris@301 360
Chris@224 361 size_t
Chris@224 362 ViewManager::getPlaybackSampleRate() const
Chris@224 363 {
Chris@224 364 if (m_playSource) {
Chris@224 365 return m_playSource->getSourceSampleRate();
Chris@224 366 }
Chris@224 367 return 0;
Chris@224 368 }
Chris@224 369
Chris@127 370 size_t
Chris@224 371 ViewManager::getOutputSampleRate() const
Chris@127 372 {
Chris@127 373 if (m_playSource) {
Chris@127 374 return m_playSource->getTargetSampleRate();
Chris@127 375 }
Chris@127 376 return 0;
Chris@127 377 }
Chris@127 378
Chris@127 379 void
Chris@127 380 ViewManager::setAudioPlaySource(AudioPlaySource *source)
Chris@127 381 {
Chris@127 382 if (!m_playSource) {
Chris@127 383 QTimer::singleShot(100, this, SLOT(checkPlayStatus()));
Chris@127 384 }
Chris@127 385 m_playSource = source;
Chris@127 386 }
Chris@127 387
Chris@127 388 void
Chris@248 389 ViewManager::playStatusChanged(bool /* playing */)
Chris@127 390 {
Chris@127 391 checkPlayStatus();
Chris@127 392 }
Chris@127 393
Chris@127 394 void
Chris@127 395 ViewManager::checkPlayStatus()
Chris@127 396 {
Chris@127 397 if (m_playSource && m_playSource->isPlaying()) {
Chris@127 398
Chris@127 399 float left = 0, right = 0;
Chris@127 400 if (m_playSource->getOutputLevels(left, right)) {
Chris@127 401 if (left != m_lastLeft || right != m_lastRight) {
Chris@127 402 emit outputLevelsChanged(left, right);
Chris@127 403 m_lastLeft = left;
Chris@127 404 m_lastRight = right;
Chris@127 405 }
Chris@127 406 }
Chris@127 407
Chris@127 408 m_playbackFrame = m_playSource->getCurrentPlayingFrame();
Chris@127 409
Chris@127 410 #ifdef DEBUG_VIEW_MANAGER
Chris@127 411 std::cout << "ViewManager::checkPlayStatus: Playing, frame " << m_playbackFrame << ", levels " << m_lastLeft << "," << m_lastRight << std::endl;
Chris@127 412 #endif
Chris@127 413
Chris@127 414 emit playbackFrameChanged(m_playbackFrame);
Chris@127 415
Chris@127 416 QTimer::singleShot(20, this, SLOT(checkPlayStatus()));
Chris@127 417
Chris@127 418 } else {
Chris@127 419
Chris@127 420 QTimer::singleShot(100, this, SLOT(checkPlayStatus()));
Chris@127 421
Chris@127 422 if (m_lastLeft != 0.0 || m_lastRight != 0.0) {
Chris@127 423 emit outputLevelsChanged(0.0, 0.0);
Chris@127 424 m_lastLeft = 0.0;
Chris@127 425 m_lastRight = 0.0;
Chris@127 426 }
Chris@127 427
Chris@127 428 #ifdef DEBUG_VIEW_MANAGER
Chris@127 429 // std::cout << "ViewManager::checkPlayStatus: Not playing" << std::endl;
Chris@127 430 #endif
Chris@127 431 }
Chris@127 432 }
Chris@127 433
Chris@127 434 bool
Chris@127 435 ViewManager::isPlaying() const
Chris@127 436 {
Chris@127 437 return m_playSource && m_playSource->isPlaying();
Chris@127 438 }
Chris@127 439
Chris@127 440 void
Chris@211 441 ViewManager::viewCentreFrameChanged(unsigned long f, bool locked,
Chris@211 442 PlaybackFollowMode mode)
Chris@127 443 {
Chris@211 444 View *v = dynamic_cast<View *>(sender());
Chris@211 445
Chris@127 446 if (locked) {
Chris@211 447 m_globalCentreFrame = f;
Chris@211 448 emit globalCentreFrameChanged(f);
Chris@211 449 } else {
Chris@211 450 if (v) emit viewCentreFrameChanged(v, f);
Chris@127 451 }
Chris@127 452
Chris@211 453 if (mode == PlaybackIgnore) {
Chris@211 454 return;
Chris@211 455 }
Chris@211 456
Chris@211 457 seek(f);
Chris@211 458 }
Chris@211 459
Chris@211 460 void
Chris@211 461 ViewManager::seek(unsigned long f)
Chris@211 462 {
Chris@127 463 #ifdef DEBUG_VIEW_MANAGER
Chris@211 464 std::cout << "ViewManager::seek(" << f << ")" << std::endl;
Chris@127 465 #endif
Chris@127 466
Chris@127 467 if (m_playSource && m_playSource->isPlaying()) {
Chris@127 468 unsigned long playFrame = m_playSource->getCurrentPlayingFrame();
Chris@127 469 unsigned long diff = std::max(f, playFrame) - std::min(f, playFrame);
Chris@127 470 if (diff > 20000) {
Chris@127 471 m_playbackFrame = f;
Chris@127 472 m_playSource->play(f);
Chris@127 473 #ifdef DEBUG_VIEW_MANAGER
Chris@127 474 std::cout << "ViewManager::considerSeek: reseeking from " << playFrame << " to " << f << std::endl;
Chris@127 475 #endif
Chris@211 476 emit playbackFrameChanged(f);
Chris@127 477 }
Chris@127 478 } else {
Chris@211 479 if (m_playbackFrame != f) {
Chris@211 480 m_playbackFrame = f;
Chris@211 481 emit playbackFrameChanged(f);
Chris@211 482 }
Chris@127 483 }
Chris@127 484 }
Chris@127 485
Chris@127 486 void
Chris@222 487 ViewManager::viewZoomLevelChanged(unsigned long z, bool locked)
Chris@127 488 {
Chris@222 489 View *v = dynamic_cast<View *>(sender());
Chris@222 490
Chris@222 491 if (!v) {
Chris@222 492 std::cerr << "ViewManager::viewZoomLevelChanged: WARNING: sender is not a view" << std::endl;
Chris@222 493 return;
Chris@222 494 }
Chris@222 495
Chris@222 496 //!!! emit zoomLevelChanged();
Chris@133 497
Chris@127 498 if (locked) {
Chris@127 499 m_globalZoom = z;
Chris@127 500 }
Chris@127 501
Chris@127 502 #ifdef DEBUG_VIEW_MANAGER
Chris@222 503 std::cout << "ViewManager::viewZoomLevelChanged(" << v << ", " << z << ", " << locked << ")" << std::endl;
Chris@127 504 #endif
Chris@222 505
Chris@222 506 emit viewZoomLevelChanged(v, z, locked);
Chris@127 507 }
Chris@127 508
Chris@127 509 void
Chris@127 510 ViewManager::setOverlayMode(OverlayMode mode)
Chris@127 511 {
Chris@127 512 if (m_overlayMode != mode) {
Chris@127 513 m_overlayMode = mode;
Chris@127 514 emit overlayModeChanged();
Chris@127 515 }
Chris@133 516
Chris@133 517 QSettings settings;
Chris@133 518 settings.beginGroup("MainWindow");
Chris@133 519 settings.setValue("overlay-mode", int(m_overlayMode));
Chris@133 520 settings.endGroup();
Chris@127 521 }
Chris@127 522
Chris@133 523 void
Chris@133 524 ViewManager::setZoomWheelsEnabled(bool enabled)
Chris@133 525 {
Chris@133 526 if (m_zoomWheelsEnabled != enabled) {
Chris@133 527 m_zoomWheelsEnabled = enabled;
Chris@133 528 emit zoomWheelsEnabledChanged();
Chris@133 529 }
Chris@127 530
Chris@133 531 QSettings settings;
Chris@133 532 settings.beginGroup("MainWindow");
Chris@133 533 settings.setValue("zoom-wheels-enabled", m_zoomWheelsEnabled);
Chris@133 534 settings.endGroup();
Chris@133 535 }
Chris@133 536
Chris@292 537 void
Chris@292 538 ViewManager::setGlobalDarkBackground(bool dark)
Chris@292 539 {
Chris@292 540 // also save the current palette, in case the user has changed it
Chris@292 541 // since construction
Chris@292 542 if (getGlobalDarkBackground()) {
Chris@292 543 m_darkPalette = QApplication::palette();
Chris@292 544 } else {
Chris@292 545 m_lightPalette = QApplication::palette();
Chris@292 546 }
Chris@292 547
Chris@292 548 if (dark) {
Chris@292 549 QApplication::setPalette(m_darkPalette);
Chris@292 550 } else {
Chris@292 551 QApplication::setPalette(m_lightPalette);
Chris@292 552 }
Chris@292 553 }
Chris@292 554
Chris@292 555 bool
Chris@292 556 ViewManager::getGlobalDarkBackground() const
Chris@292 557 {
Chris@292 558 bool dark = false;
Chris@292 559 QColor windowBg = QApplication::palette().color(QPalette::Window);
Chris@292 560 if (windowBg.red() + windowBg.green() + windowBg.blue() < 384) {
Chris@292 561 dark = true;
Chris@292 562 }
Chris@292 563 return dark;
Chris@292 564 }
Chris@292 565