Mercurial > hg > tony
comparison src/MainWindow.cpp @ 70:5310637392f6
Revert to using three separate tool modes (more like SV). This is less like the proposed design for Tony but better than the previous situation with two incomprehensible toggle buttons.
author | Chris Cannam |
---|---|
date | Tue, 26 Nov 2013 16:59:31 +0000 |
parents | 8b7383948381 |
children | 081202998535 |
comparison
equal
deleted
inserted
replaced
69:045360070b66 | 70:5310637392f6 |
---|---|
71 #include <QScrollArea> | 71 #include <QScrollArea> |
72 | 72 |
73 #include <iostream> | 73 #include <iostream> |
74 #include <cstdio> | 74 #include <cstdio> |
75 #include <errno.h> | 75 #include <errno.h> |
76 | |
77 using std::cerr; | |
78 using std::endl; | |
79 | 76 |
80 using std::vector; | 77 using std::vector; |
81 | 78 |
82 | 79 |
83 MainWindow::MainWindow(bool withAudioOutput, bool withOSCSupport) : | 80 MainWindow::MainWindow(bool withAudioOutput, bool withOSCSupport) : |
581 | 578 |
582 toolbar = addToolBar(tr("Playback Controls")); | 579 toolbar = addToolBar(tr("Playback Controls")); |
583 toolbar->addWidget(m_playSpeed); | 580 toolbar->addWidget(m_playSpeed); |
584 toolbar->addWidget(m_fader); | 581 toolbar->addWidget(m_fader); |
585 | 582 |
583 toolbar = addToolBar(tr("Tools Toolbar")); | |
584 | |
585 CommandHistory::getInstance()->registerToolbar(toolbar); | |
586 | |
587 m_keyReference->setCategory(tr("Tool Selection")); | |
588 | |
589 toolbar = addToolBar(tr("Tools Toolbar")); | |
590 QActionGroup *group = new QActionGroup(this); | |
591 | |
592 QAction *action = toolbar->addAction(il.load("navigate"), | |
593 tr("Navigate")); | |
594 action->setCheckable(true); | |
595 action->setChecked(true); | |
596 action->setShortcut(tr("1")); | |
597 action->setStatusTip(tr("Navigate")); | |
598 connect(action, SIGNAL(triggered()), this, SLOT(toolNavigateSelected())); | |
599 connect(this, SIGNAL(replacedDocument()), action, SLOT(trigger())); | |
600 group->addAction(action); | |
601 m_keyReference->registerShortcut(action); | |
602 | |
603 action = toolbar->addAction(il.load("move"), | |
604 tr("Edit")); | |
605 action->setCheckable(true); | |
606 action->setShortcut(tr("2")); | |
607 action->setStatusTip(tr("Edit with Note Intelligence")); | |
608 connect(action, SIGNAL(triggered()), this, SLOT(toolEditSelected())); | |
609 connect(this, SIGNAL(canEditLayer(bool)), action, SLOT(setEnabled(bool))); | |
610 group->addAction(action); | |
611 m_keyReference->registerShortcut(action); | |
612 | |
613 action = toolbar->addAction(il.load("notes"), | |
614 tr("Free Edit")); | |
615 action->setCheckable(true); | |
616 action->setShortcut(tr("3")); | |
617 action->setStatusTip(tr("Free Edit")); | |
618 connect(action, SIGNAL(triggered()), this, SLOT(toolFreeEditSelected())); | |
619 group->addAction(action); | |
620 m_keyReference->registerShortcut(action); | |
621 | |
622 | |
623 /* | |
586 toolbar = addToolBar(tr("Test actions toolbar")); // GF: temporary toolbar for triggering actions manually | 624 toolbar = addToolBar(tr("Test actions toolbar")); // GF: temporary toolbar for triggering actions manually |
587 | 625 |
588 // GF: TEMP : this created a menu item | 626 // GF: TEMP : this created a menu item |
589 m_editSelectAction = toolbar->addAction(il.load("move"), tr("Edit")); | 627 m_editSelectAction = toolbar->addAction(il.load("move"), tr("Edit")); |
590 m_editSelectAction->setShortcut(tr("Home")); | 628 m_editSelectAction->setShortcut(tr("Home")); |
599 m_toggleIntelligenceAction = toolbar->addAction(il.load("notes"), tr("EditMode")); | 637 m_toggleIntelligenceAction = toolbar->addAction(il.load("notes"), tr("EditMode")); |
600 // m_toggleIntelligenceAction->setShortcut(tr("Home")); | 638 // m_toggleIntelligenceAction->setShortcut(tr("Home")); |
601 m_toggleIntelligenceAction->setStatusTip(tr("Toggle note edit boundary constraints and automation")); | 639 m_toggleIntelligenceAction->setStatusTip(tr("Toggle note edit boundary constraints and automation")); |
602 m_toggleIntelligenceAction->setEnabled(true); | 640 m_toggleIntelligenceAction->setEnabled(true); |
603 connect(m_toggleIntelligenceAction, SIGNAL(triggered()), this, SLOT(toggleNoteEditIntelligence())); | 641 connect(m_toggleIntelligenceAction, SIGNAL(triggered()), this, SLOT(toggleNoteEditIntelligence())); |
604 | 642 */ |
605 Pane::registerShortcuts(*m_keyReference); | 643 Pane::registerShortcuts(*m_keyReference); |
606 } | 644 } |
607 | 645 |
646 void | |
647 MainWindow::toolNavigateSelected() | |
648 { | |
649 m_viewManager->setToolMode(ViewManager::NavigateMode); | |
650 m_intelligentActionOn = true; | |
651 } | |
652 | |
653 void | |
654 MainWindow::toolEditSelected() | |
655 { | |
656 m_viewManager->setToolMode(ViewManager::EditMode); | |
657 m_intelligentActionOn = true; | |
658 m_analyser->setIntelligentActions(m_intelligentActionOn); | |
659 } | |
660 | |
661 void | |
662 MainWindow::toolFreeEditSelected() | |
663 { | |
664 m_viewManager->setToolMode(ViewManager::EditMode); | |
665 m_intelligentActionOn = false; | |
666 m_analyser->setIntelligentActions(m_intelligentActionOn); | |
667 } | |
668 | |
669 /* | |
608 void | 670 void |
609 MainWindow::selectNoteEditMode() | 671 MainWindow::selectNoteEditMode() |
610 { | 672 { |
611 IconLoader il; | 673 IconLoader il; |
612 if (m_viewManager->getToolMode() == ViewManager::NoteEditMode) { | 674 if (m_viewManager->getToolMode() == ViewManager::NoteEditMode) { |
613 m_viewManager->setToolMode(ViewManager::NavigateMode); | 675 m_viewManager->setToolMode(ViewManager::NavigateMode); |
614 m_editSelectAction->setIcon(il.load("move")); | 676 m_editSelectAction->setIcon(il.load("move")); |
615 } else { | 677 } else { |
616 std::cerr << "NoteEdit mode selected" << std::endl; | 678 cerr << "NoteEdit mode selected" << endl; |
617 m_viewManager->setToolMode(ViewManager::NoteEditMode); | 679 m_viewManager->setToolMode(ViewManager::NoteEditMode); |
618 m_editSelectAction->setIcon(il.load("navigate")); | 680 m_editSelectAction->setIcon(il.load("navigate")); |
619 } | 681 } |
620 } | 682 } |
621 | 683 |
631 m_toggleIntelligenceAction->setIcon(il.load("notes")); | 693 m_toggleIntelligenceAction->setIcon(il.load("notes")); |
632 m_intelligentActionOn = true; | 694 m_intelligentActionOn = true; |
633 m_analyser->setIntelligentActions(true); | 695 m_analyser->setIntelligentActions(true); |
634 } | 696 } |
635 } | 697 } |
698 */ | |
636 | 699 |
637 void | 700 void |
638 MainWindow::updateMenuStates() | 701 MainWindow::updateMenuStates() |
639 { | 702 { |
640 MainWindowBase::updateMenuStates(); | 703 MainWindowBase::updateMenuStates(); |
836 { | 899 { |
837 QObject *obj = sender(); | 900 QObject *obj = sender(); |
838 QAction *action = qobject_cast<QAction *>(obj); | 901 QAction *action = qobject_cast<QAction *>(obj); |
839 | 902 |
840 if (!action) { | 903 if (!action) { |
841 std::cerr << "WARNING: MainWindow::openRecentFile: sender is not an action" | 904 cerr << "WARNING: MainWindow::openRecentFile: sender is not an action" |
842 << std::endl; | 905 << endl; |
843 return; | 906 return; |
844 } | 907 } |
845 | 908 |
846 QString path = action->text(); | 909 QString path = action->text(); |
847 if (path == "") return; | 910 if (path == "") return; |
920 } | 983 } |
921 | 984 |
922 void | 985 void |
923 MainWindow::configureNewPane(Pane *pane) | 986 MainWindow::configureNewPane(Pane *pane) |
924 { | 987 { |
925 std::cerr << "MainWindow::configureNewPane(" << pane << ")" << std::endl; | 988 cerr << "MainWindow::configureNewPane(" << pane << ")" << endl; |
926 | 989 |
927 if (!pane) { | 990 if (!pane) { |
928 pane = m_paneStack->addPane(); | 991 pane = m_paneStack->addPane(); |
929 } | 992 } |
930 | 993 |
932 } | 995 } |
933 | 996 |
934 void | 997 void |
935 MainWindow::closeEvent(QCloseEvent *e) | 998 MainWindow::closeEvent(QCloseEvent *e) |
936 { | 999 { |
937 // std::cerr << "MainWindow::closeEvent" << std::endl; | 1000 // cerr << "MainWindow::closeEvent" << endl; |
938 | 1001 |
939 if (m_openingAudioFile) { | 1002 if (m_openingAudioFile) { |
940 // std::cerr << "Busy - ignoring close event" << std::endl; | 1003 // cerr << "Busy - ignoring close event" << endl; |
941 e->ignore(); | 1004 e->ignore(); |
942 return; | 1005 return; |
943 } | 1006 } |
944 | 1007 |
945 if (!m_abandoning && !checkSaveModified()) { | 1008 if (!m_abandoning && !checkSaveModified()) { |
946 // std::cerr << "Ignoring close event" << std::endl; | 1009 // cerr << "Ignoring close event" << endl; |
947 e->ignore(); | 1010 e->ignore(); |
948 return; | 1011 return; |
949 } | 1012 } |
950 | 1013 |
951 QSettings settings; | 1014 QSettings settings; |
1197 PlaySpeedRangeMapper mapper(0, 200); | 1260 PlaySpeedRangeMapper mapper(0, 200); |
1198 | 1261 |
1199 float percent = m_playSpeed->mappedValue(); | 1262 float percent = m_playSpeed->mappedValue(); |
1200 float factor = mapper.getFactorForValue(percent); | 1263 float factor = mapper.getFactorForValue(percent); |
1201 | 1264 |
1202 std::cerr << "speed = " << position << " percent = " << percent << " factor = " << factor << std::endl; | 1265 cerr << "speed = " << position << " percent = " << percent << " factor = " << factor << endl; |
1203 | 1266 |
1204 bool something = (position != 100); | 1267 bool something = (position != 100); |
1205 | 1268 |
1206 int pc = lrintf(percent); | 1269 int pc = lrintf(percent); |
1207 | 1270 |
1377 MainWindow::modelAdded(Model *model) | 1440 MainWindow::modelAdded(Model *model) |
1378 { | 1441 { |
1379 MainWindowBase::modelAdded(model); | 1442 MainWindowBase::modelAdded(model); |
1380 DenseTimeValueModel *dtvm = qobject_cast<DenseTimeValueModel *>(model); | 1443 DenseTimeValueModel *dtvm = qobject_cast<DenseTimeValueModel *>(model); |
1381 if (dtvm) { | 1444 if (dtvm) { |
1382 std::cerr << "A dense time-value model (such as an audio file) has been loaded" << std::endl; | 1445 cerr << "A dense time-value model (such as an audio file) has been loaded" << endl; |
1383 } | 1446 } |
1384 } | 1447 } |
1385 | 1448 |
1386 void | 1449 void |
1387 MainWindow::modelAboutToBeDeleted(Model *model) | 1450 MainWindow::modelAboutToBeDeleted(Model *model) |
1472 } | 1535 } |
1473 | 1536 |
1474 void | 1537 void |
1475 MainWindow::rightButtonMenuRequested(Pane *pane, QPoint position) | 1538 MainWindow::rightButtonMenuRequested(Pane *pane, QPoint position) |
1476 { | 1539 { |
1477 // std::cerr << "MainWindow::rightButtonMenuRequested(" << pane << ", " << position.x() << ", " << position.y() << ")" << std::endl; | 1540 // cerr << "MainWindow::rightButtonMenuRequested(" << pane << ", " << position.x() << ", " << position.y() << ")" << endl; |
1478 m_paneStack->setCurrentPane(pane); | 1541 m_paneStack->setCurrentPane(pane); |
1479 m_rightButtonMenu->popup(position); | 1542 m_rightButtonMenu->popup(position); |
1480 } | 1543 } |
1481 | 1544 |
1482 void | 1545 void |
1483 MainWindow::handleOSCMessage(const OSCMessage &message) | 1546 MainWindow::handleOSCMessage(const OSCMessage &message) |
1484 { | 1547 { |
1485 std::cerr << "MainWindow::handleOSCMessage: Not implemented" << std::endl; | 1548 cerr << "MainWindow::handleOSCMessage: Not implemented" << endl; |
1486 } | 1549 } |
1487 | 1550 |
1488 void | 1551 void |
1489 MainWindow::mouseEnteredWidget() | 1552 MainWindow::mouseEnteredWidget() |
1490 { | 1553 { |