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 {