Mercurial > hg > svapp
comparison framework/MainWindowBase.cpp @ 371:dfcc5b355f33
Merge from branch warnfix_no_size_t
author | Chris Cannam |
---|---|
date | Wed, 18 Jun 2014 13:51:38 +0100 |
parents | f1cab64363d7 |
children | 024226dd9f51 |
comparison
equal
deleted
inserted
replaced
355:e7a3fa8f4eec | 371:dfcc5b355f33 |
---|---|
150 m_recentTransforms("RecentTransforms", 20), | 150 m_recentTransforms("RecentTransforms", 20), |
151 m_documentModified(false), | 151 m_documentModified(false), |
152 m_openingAudioFile(false), | 152 m_openingAudioFile(false), |
153 m_abandoning(false), | 153 m_abandoning(false), |
154 m_labeller(0), | 154 m_labeller(0), |
155 m_lastPlayStatusSec(0) | 155 m_lastPlayStatusSec(0), |
156 m_initialDarkBackground(false), | |
157 m_defaultFfwdRwdStep(2, 0) | |
156 { | 158 { |
157 Profiler profiler("MainWindowBase::MainWindowBase"); | 159 Profiler profiler("MainWindowBase::MainWindowBase"); |
158 | 160 |
159 #ifdef Q_WS_X11 | 161 #ifdef Q_WS_X11 |
160 XSetErrorHandler(handle_x11_error); | 162 XSetErrorHandler(handle_x11_error); |
211 this, SLOT(paneDeleteButtonClicked(Pane *))); | 213 this, SLOT(paneDeleteButtonClicked(Pane *))); |
212 | 214 |
213 m_playSource = new AudioCallbackPlaySource(m_viewManager, | 215 m_playSource = new AudioCallbackPlaySource(m_viewManager, |
214 QApplication::applicationName()); | 216 QApplication::applicationName()); |
215 | 217 |
216 connect(m_playSource, SIGNAL(sampleRateMismatch(size_t, size_t, bool)), | 218 connect(m_playSource, SIGNAL(sampleRateMismatch(int, int, bool)), |
217 this, SLOT(sampleRateMismatch(size_t, size_t, bool))); | 219 this, SLOT(sampleRateMismatch(int, int, bool))); |
218 connect(m_playSource, SIGNAL(audioOverloadPluginDisabled()), | 220 connect(m_playSource, SIGNAL(audioOverloadPluginDisabled()), |
219 this, SLOT(audioOverloadPluginDisabled())); | 221 this, SLOT(audioOverloadPluginDisabled())); |
220 connect(m_playSource, SIGNAL(audioTimeStretchMultiChannelDisabled()), | 222 connect(m_playSource, SIGNAL(audioTimeStretchMultiChannelDisabled()), |
221 this, SLOT(audioTimeStretchMultiChannelDisabled())); | 223 this, SLOT(audioTimeStretchMultiChannelDisabled())); |
222 | 224 |
223 connect(m_viewManager, SIGNAL(outputLevelsChanged(float, float)), | 225 connect(m_viewManager, SIGNAL(outputLevelsChanged(float, float)), |
224 this, SLOT(outputLevelsChanged(float, float))); | 226 this, SLOT(outputLevelsChanged(float, float))); |
225 | 227 |
226 connect(m_viewManager, SIGNAL(playbackFrameChanged(unsigned long)), | 228 connect(m_viewManager, SIGNAL(playbackFrameChanged(int)), |
227 this, SLOT(playbackFrameChanged(unsigned long))); | 229 this, SLOT(playbackFrameChanged(int))); |
228 | 230 |
229 connect(m_viewManager, SIGNAL(globalCentreFrameChanged(unsigned long)), | 231 connect(m_viewManager, SIGNAL(globalCentreFrameChanged(int)), |
230 this, SLOT(globalCentreFrameChanged(unsigned long))); | 232 this, SLOT(globalCentreFrameChanged(int))); |
231 | 233 |
232 connect(m_viewManager, SIGNAL(viewCentreFrameChanged(View *, unsigned long)), | 234 connect(m_viewManager, SIGNAL(viewCentreFrameChanged(View *, int)), |
233 this, SLOT(viewCentreFrameChanged(View *, unsigned long))); | 235 this, SLOT(viewCentreFrameChanged(View *, int))); |
234 | 236 |
235 connect(m_viewManager, SIGNAL(viewZoomLevelChanged(View *, unsigned long, bool)), | 237 connect(m_viewManager, SIGNAL(viewZoomLevelChanged(View *, int, bool)), |
236 this, SLOT(viewZoomLevelChanged(View *, unsigned long, bool))); | 238 this, SLOT(viewZoomLevelChanged(View *, int, bool))); |
237 | 239 |
238 connect(Preferences::getInstance(), | 240 connect(Preferences::getInstance(), |
239 SIGNAL(propertyChanged(PropertyContainer::PropertyName)), | 241 SIGNAL(propertyChanged(PropertyContainer::PropertyName)), |
240 this, | 242 this, |
241 SLOT(preferenceChanged(PropertyContainer::PropertyName))); | 243 SLOT(preferenceChanged(PropertyContainer::PropertyName))); |
279 if (menu) finaliseMenu(menu); | 281 if (menu) finaliseMenu(menu); |
280 } | 282 } |
281 } | 283 } |
282 | 284 |
283 void | 285 void |
284 MainWindowBase::finaliseMenu(QMenu *menu) | 286 MainWindowBase::finaliseMenu(QMenu * |
287 #ifdef Q_OS_MAC | |
288 menu | |
289 #endif | |
290 ) | |
285 { | 291 { |
286 #ifdef Q_OS_MAC | 292 #ifdef Q_OS_MAC |
287 // See https://bugreports.qt-project.org/browse/QTBUG-38256 and | 293 // See https://bugreports.qt-project.org/browse/QTBUG-38256 and |
288 // our issue #890 http://code.soundsoftware.ac.uk/issues/890 -- | 294 // our issue #890 http://code.soundsoftware.ac.uk/issues/890 -- |
289 // single-key shortcuts that are associated only with a menu | 295 // single-key shortcuts that are associated only with a menu |
366 | 372 |
367 QString | 373 QString |
368 MainWindowBase::getOpenFileName(FileFinder::FileType type) | 374 MainWindowBase::getOpenFileName(FileFinder::FileType type) |
369 { | 375 { |
370 FileFinder *ff = FileFinder::getInstance(); | 376 FileFinder *ff = FileFinder::getInstance(); |
371 switch (type) { | 377 |
372 case FileFinder::SessionFile: | 378 if (type == FileFinder::AnyFile) { |
373 return ff->getOpenFileName(type, m_sessionFile); | |
374 case FileFinder::AudioFile: | |
375 return ff->getOpenFileName(type, m_audioFile); | |
376 case FileFinder::LayerFile: | |
377 return ff->getOpenFileName(type, m_sessionFile); | |
378 case FileFinder::LayerFileNoMidi: | |
379 return ff->getOpenFileName(type, m_sessionFile); | |
380 case FileFinder::LayerFileNonSV: | |
381 return ff->getOpenFileName(type, m_sessionFile); | |
382 case FileFinder::LayerFileNoMidiNonSV: | |
383 return ff->getOpenFileName(type, m_sessionFile); | |
384 case FileFinder::SessionOrAudioFile: | |
385 return ff->getOpenFileName(type, m_sessionFile); | |
386 case FileFinder::ImageFile: | |
387 return ff->getOpenFileName(type, m_sessionFile); | |
388 case FileFinder::CSVFile: | |
389 return ff->getOpenFileName(type, m_sessionFile); | |
390 case FileFinder::AnyFile: | |
391 if (getMainModel() != 0 && | 379 if (getMainModel() != 0 && |
392 m_paneStack != 0 && | 380 m_paneStack != 0 && |
393 m_paneStack->getCurrentPane() != 0) { // can import a layer | 381 m_paneStack->getCurrentPane() != 0) { // can import a layer |
394 return ff->getOpenFileName(FileFinder::AnyFile, m_sessionFile); | 382 return ff->getOpenFileName(FileFinder::AnyFile, m_sessionFile); |
395 } else { | 383 } else { |
396 return ff->getOpenFileName(FileFinder::SessionOrAudioFile, | 384 return ff->getOpenFileName(FileFinder::SessionOrAudioFile, |
397 m_sessionFile); | 385 m_sessionFile); |
398 } | 386 } |
399 } | 387 } |
400 return ""; | 388 |
389 QString lastPath = m_sessionFile; | |
390 | |
391 if (type == FileFinder::AudioFile) { | |
392 lastPath = m_audioFile; | |
393 } | |
394 | |
395 return ff->getOpenFileName(type, lastPath); | |
401 } | 396 } |
402 | 397 |
403 QString | 398 QString |
404 MainWindowBase::getSaveFileName(FileFinder::FileType type) | 399 MainWindowBase::getSaveFileName(FileFinder::FileType type) |
405 { | 400 { |
401 QString lastPath = m_sessionFile; | |
402 | |
403 if (type == FileFinder::AudioFile) { | |
404 lastPath = m_audioFile; | |
405 } | |
406 | |
406 FileFinder *ff = FileFinder::getInstance(); | 407 FileFinder *ff = FileFinder::getInstance(); |
407 switch (type) { | 408 return ff->getSaveFileName(type, lastPath); |
408 case FileFinder::SessionFile: | |
409 return ff->getSaveFileName(type, m_sessionFile); | |
410 case FileFinder::AudioFile: | |
411 return ff->getSaveFileName(type, m_audioFile); | |
412 case FileFinder::LayerFile: | |
413 return ff->getSaveFileName(type, m_sessionFile); | |
414 case FileFinder::LayerFileNoMidi: | |
415 return ff->getSaveFileName(type, m_sessionFile); | |
416 case FileFinder::LayerFileNonSV: | |
417 return ff->getSaveFileName(type, m_sessionFile); | |
418 case FileFinder::LayerFileNoMidiNonSV: | |
419 return ff->getSaveFileName(type, m_sessionFile); | |
420 case FileFinder::SessionOrAudioFile: | |
421 return ff->getSaveFileName(type, m_sessionFile); | |
422 case FileFinder::ImageFile: | |
423 return ff->getSaveFileName(type, m_sessionFile); | |
424 case FileFinder::CSVFile: | |
425 return ff->getSaveFileName(type, m_sessionFile); | |
426 case FileFinder::AnyFile: | |
427 return ff->getSaveFileName(type, m_sessionFile); | |
428 } | |
429 return ""; | |
430 } | 409 } |
431 | 410 |
432 void | 411 void |
433 MainWindowBase::registerLastOpenedFilePath(FileFinder::FileType type, QString path) | 412 MainWindowBase::registerLastOpenedFilePath(FileFinder::FileType type, QString path) |
434 { | 413 { |
547 emit canRenumberInstants(haveCurrentTimeInstantsLayer && haveSelection); | 526 emit canRenumberInstants(haveCurrentTimeInstantsLayer && haveSelection); |
548 emit canPlaySelection(haveMainModel && havePlayTarget && haveSelection); | 527 emit canPlaySelection(haveMainModel && havePlayTarget && haveSelection); |
549 emit canClearSelection(haveSelection); | 528 emit canClearSelection(haveSelection); |
550 emit canEditSelection(haveSelection && haveCurrentEditableLayer); | 529 emit canEditSelection(haveSelection && haveCurrentEditableLayer); |
551 emit canSave(m_sessionFile != "" && m_documentModified); | 530 emit canSave(m_sessionFile != "" && m_documentModified); |
531 emit canSaveAs(haveMainModel); | |
552 emit canSelectPreviousPane(havePrevPane); | 532 emit canSelectPreviousPane(havePrevPane); |
553 emit canSelectNextPane(haveNextPane); | 533 emit canSelectNextPane(haveNextPane); |
554 emit canSelectPreviousLayer(havePrevLayer); | 534 emit canSelectPreviousLayer(havePrevLayer); |
555 emit canSelectNextLayer(haveNextLayer); | 535 emit canSelectNextLayer(haveNextLayer); |
556 } | 536 } |
742 if (!model) return; | 722 if (!model) return; |
743 | 723 |
744 Pane *currentPane = m_paneStack->getCurrentPane(); | 724 Pane *currentPane = m_paneStack->getCurrentPane(); |
745 if (!currentPane) return; | 725 if (!currentPane) return; |
746 | 726 |
747 size_t startFrame, endFrame; | 727 int startFrame, endFrame; |
748 | 728 |
749 if (currentPane->getStartFrame() < 0) startFrame = 0; | 729 if (currentPane->getStartFrame() < 0) startFrame = 0; |
750 else startFrame = currentPane->getStartFrame(); | 730 else startFrame = currentPane->getStartFrame(); |
751 | 731 |
752 if (currentPane->getEndFrame() > model->getEndFrame()) endFrame = model->getEndFrame(); | 732 if (currentPane->getEndFrame() > model->getEndFrame()) endFrame = model->getEndFrame(); |
813 } | 793 } |
814 | 794 |
815 void | 795 void |
816 MainWindowBase::pasteAtPlaybackPosition() | 796 MainWindowBase::pasteAtPlaybackPosition() |
817 { | 797 { |
818 unsigned long pos = getFrame(); | 798 int pos = getFrame(); |
819 Clipboard &clipboard = m_viewManager->getClipboard(); | 799 Clipboard &clipboard = m_viewManager->getClipboard(); |
820 if (!clipboard.empty()) { | 800 if (!clipboard.empty()) { |
821 long firstEventFrame = clipboard.getPoints()[0].getFrame(); | 801 int firstEventFrame = clipboard.getPoints()[0].getFrame(); |
822 long offset = 0; | 802 int offset = 0; |
823 if (firstEventFrame < 0) { | 803 if (firstEventFrame < 0) { |
824 offset = (long)pos - firstEventFrame; | 804 offset = pos - firstEventFrame; |
825 } else if (firstEventFrame < pos) { | 805 } else if (firstEventFrame < pos) { |
826 offset = pos - (unsigned long)firstEventFrame; | 806 offset = pos - firstEventFrame; |
827 } else { | 807 } else { |
828 offset = -((unsigned long)firstEventFrame - pos); | 808 offset = -(firstEventFrame - pos); |
829 } | 809 } |
830 pasteRelative(offset); | 810 pasteRelative(offset); |
831 } | 811 } |
832 } | 812 } |
833 | 813 |
896 } | 876 } |
897 } | 877 } |
898 | 878 |
899 // FrameTimer method | 879 // FrameTimer method |
900 | 880 |
901 unsigned long | 881 int |
902 MainWindowBase::getFrame() const | 882 MainWindowBase::getFrame() const |
903 { | 883 { |
904 if (m_playSource && m_playSource->isPlaying()) { | 884 if (m_playSource && m_playSource->isPlaying()) { |
905 return m_playSource->getCurrentPlayingFrame(); | 885 return m_playSource->getCurrentPlayingFrame(); |
906 } else { | 886 } else { |
918 MainWindowBase::insertInstantsAtBoundaries() | 898 MainWindowBase::insertInstantsAtBoundaries() |
919 { | 899 { |
920 MultiSelection::SelectionList selections = m_viewManager->getSelections(); | 900 MultiSelection::SelectionList selections = m_viewManager->getSelections(); |
921 for (MultiSelection::SelectionList::iterator i = selections.begin(); | 901 for (MultiSelection::SelectionList::iterator i = selections.begin(); |
922 i != selections.end(); ++i) { | 902 i != selections.end(); ++i) { |
923 size_t start = i->getStartFrame(); | 903 int start = i->getStartFrame(); |
924 size_t end = i->getEndFrame(); | 904 int end = i->getEndFrame(); |
925 if (start != end) { | 905 if (start != end) { |
926 insertInstantAt(start); | 906 insertInstantAt(start); |
927 insertInstantAt(end); | 907 insertInstantAt(end); |
928 } | 908 } |
929 } | 909 } |
930 } | 910 } |
931 | 911 |
932 void | 912 void |
933 MainWindowBase::insertInstantAt(size_t frame) | 913 MainWindowBase::insertInstantAt(int frame) |
934 { | 914 { |
935 Pane *pane = m_paneStack->getCurrentPane(); | 915 Pane *pane = m_paneStack->getCurrentPane(); |
936 if (!pane) { | 916 if (!pane) { |
937 return; | 917 return; |
938 } | 918 } |
1020 MainWindowBase::insertItemAtSelection() | 1000 MainWindowBase::insertItemAtSelection() |
1021 { | 1001 { |
1022 MultiSelection::SelectionList selections = m_viewManager->getSelections(); | 1002 MultiSelection::SelectionList selections = m_viewManager->getSelections(); |
1023 for (MultiSelection::SelectionList::iterator i = selections.begin(); | 1003 for (MultiSelection::SelectionList::iterator i = selections.begin(); |
1024 i != selections.end(); ++i) { | 1004 i != selections.end(); ++i) { |
1025 size_t start = i->getStartFrame(); | 1005 int start = i->getStartFrame(); |
1026 size_t end = i->getEndFrame(); | 1006 int end = i->getEndFrame(); |
1027 if (start < end) { | 1007 if (start < end) { |
1028 insertItemAt(start, end - start); | 1008 insertItemAt(start, end - start); |
1029 } | 1009 } |
1030 } | 1010 } |
1031 } | 1011 } |
1032 | 1012 |
1033 void | 1013 void |
1034 MainWindowBase::insertItemAt(size_t frame, size_t duration) | 1014 MainWindowBase::insertItemAt(int frame, int duration) |
1035 { | 1015 { |
1036 Pane *pane = m_paneStack->getCurrentPane(); | 1016 Pane *pane = m_paneStack->getCurrentPane(); |
1037 if (!pane) { | 1017 if (!pane) { |
1038 return; | 1018 return; |
1039 } | 1019 } |
1040 | 1020 |
1041 // ugh! | 1021 // ugh! |
1042 | 1022 |
1043 size_t alignedStart = pane->alignFromReference(frame); | 1023 int alignedStart = pane->alignFromReference(frame); |
1044 size_t alignedEnd = pane->alignFromReference(frame + duration); | 1024 int alignedEnd = pane->alignFromReference(frame + duration); |
1045 if (alignedStart >= alignedEnd) return; | 1025 if (alignedStart >= alignedEnd) return; |
1046 size_t alignedDuration = alignedEnd - alignedStart; | 1026 int alignedDuration = alignedEnd - alignedStart; |
1047 | 1027 |
1048 Command *c = 0; | 1028 Command *c = 0; |
1049 | 1029 |
1050 QString name = tr("Add Item at %1 s") | 1030 QString name = tr("Add Item at %1 s") |
1051 .arg(RealTime::frame2RealTime | 1031 .arg(RealTime::frame2RealTime |
1235 if (!source.isAvailable()) return FileOpenFailed; | 1215 if (!source.isAvailable()) return FileOpenFailed; |
1236 source.waitForData(); | 1216 source.waitForData(); |
1237 | 1217 |
1238 m_openingAudioFile = true; | 1218 m_openingAudioFile = true; |
1239 | 1219 |
1240 size_t rate = 0; | 1220 int rate = 0; |
1241 | 1221 |
1242 if (Preferences::getInstance()->getResampleOnLoad()) { | 1222 if (Preferences::getInstance()->getFixedSampleRate() != 0) { |
1223 rate = Preferences::getInstance()->getFixedSampleRate(); | |
1224 } else if (Preferences::getInstance()->getResampleOnLoad()) { | |
1243 rate = m_playSource->getSourceSampleRate(); | 1225 rate = m_playSource->getSourceSampleRate(); |
1244 } | 1226 } |
1245 | 1227 |
1246 WaveFileModel *newModel = new WaveFileModel(source, rate); | 1228 WaveFileModel *newModel = new WaveFileModel(source, rate); |
1247 | 1229 |
1846 if (!source.isAvailable()) return FileOpenFailed; | 1828 if (!source.isAvailable()) return FileOpenFailed; |
1847 source.waitForData(); | 1829 source.waitForData(); |
1848 | 1830 |
1849 QXmlInputSource *inputSource = 0; | 1831 QXmlInputSource *inputSource = 0; |
1850 QFile *file = 0; | 1832 QFile *file = 0; |
1851 bool isTemplate = false; | |
1852 | 1833 |
1853 file = new QFile(source.getLocalFilename()); | 1834 file = new QFile(source.getLocalFilename()); |
1854 inputSource = new QXmlInputSource(file); | 1835 inputSource = new QXmlInputSource(file); |
1855 | 1836 |
1856 if (!checkSaveModified()) { | 1837 if (!checkSaveModified()) { |
1936 } | 1917 } |
1937 | 1918 |
1938 MainWindowBase::FileOpenStatus | 1919 MainWindowBase::FileOpenStatus |
1939 MainWindowBase::openLayersFromRDF(FileSource source) | 1920 MainWindowBase::openLayersFromRDF(FileSource source) |
1940 { | 1921 { |
1941 size_t rate = 0; | 1922 int rate = 0; |
1942 | 1923 |
1943 SVDEBUG << "MainWindowBase::openLayersFromRDF" << endl; | 1924 SVDEBUG << "MainWindowBase::openLayersFromRDF" << endl; |
1944 | 1925 |
1945 ProgressDialog dialog(tr("Importing from RDF..."), true, 2000, this); | 1926 ProgressDialog dialog(tr("Importing from RDF..."), true, 2000, this); |
1946 connect(&dialog, SIGNAL(showing()), this, SIGNAL(hideSplash())); | 1927 connect(&dialog, SIGNAL(showing()), this, SIGNAL(hideSplash())); |
2314 if (!currentPane) return; | 2295 if (!currentPane) return; |
2315 | 2296 |
2316 Model *model = getMainModel(); | 2297 Model *model = getMainModel(); |
2317 if (!model) return; | 2298 if (!model) return; |
2318 | 2299 |
2319 size_t start = model->getStartFrame(); | 2300 int start = model->getStartFrame(); |
2320 size_t end = model->getEndFrame(); | 2301 int end = model->getEndFrame(); |
2321 if (m_playSource) end = std::max(end, m_playSource->getPlayEndFrame()); | 2302 if (m_playSource) end = std::max(end, m_playSource->getPlayEndFrame()); |
2322 size_t pixels = currentPane->width(); | 2303 int pixels = currentPane->width(); |
2323 | 2304 |
2324 size_t sw = currentPane->getVerticalScaleWidth(); | 2305 int sw = currentPane->getVerticalScaleWidth(); |
2325 if (pixels > sw * 2) pixels -= sw * 2; | 2306 if (pixels > sw * 2) pixels -= sw * 2; |
2326 else pixels = 1; | 2307 else pixels = 1; |
2327 if (pixels > 4) pixels -= 4; | 2308 if (pixels > 4) pixels -= 4; |
2328 | 2309 |
2329 size_t zoomLevel = (end - start) / pixels; | 2310 int zoomLevel = (end - start) / pixels; |
2330 if (zoomLevel < 1) zoomLevel = 1; | 2311 if (zoomLevel < 1) zoomLevel = 1; |
2331 | 2312 |
2332 currentPane->setZoomLevel(zoomLevel); | 2313 currentPane->setZoomLevel(zoomLevel); |
2333 currentPane->setCentreFrame((start + end) / 2); | 2314 currentPane->setCentreFrame((start + end) / 2); |
2334 } | 2315 } |
2542 int frame = m_viewManager->getPlaybackFrame(); | 2523 int frame = m_viewManager->getPlaybackFrame(); |
2543 ++frame; | 2524 ++frame; |
2544 | 2525 |
2545 Pane *pane = m_paneStack->getCurrentPane(); | 2526 Pane *pane = m_paneStack->getCurrentPane(); |
2546 Layer *layer = getSnapLayer(); | 2527 Layer *layer = getSnapLayer(); |
2547 size_t sr = getMainModel()->getSampleRate(); | 2528 int sr = getMainModel()->getSampleRate(); |
2548 | 2529 |
2549 if (!layer) { | 2530 if (!layer) { |
2550 | 2531 |
2551 frame = RealTime::realTime2Frame | 2532 frame = RealTime::realTime2Frame |
2552 (RealTime::frame2RealTime(frame, sr) + RealTime(2, 0), sr); | 2533 (RealTime::frame2RealTime(frame, sr) + m_defaultFfwdRwdStep, sr); |
2553 if (frame > int(getMainModel()->getEndFrame())) { | 2534 if (frame > int(getMainModel()->getEndFrame())) { |
2554 frame = getMainModel()->getEndFrame(); | 2535 frame = getMainModel()->getEndFrame(); |
2555 } | 2536 } |
2556 | 2537 |
2557 } else { | 2538 } else { |
2558 | 2539 |
2559 size_t resolution = 0; | 2540 int resolution = 0; |
2560 if (pane) frame = pane->alignFromReference(frame); | 2541 if (pane) frame = pane->alignFromReference(frame); |
2561 if (layer->snapToFeatureFrame(m_paneStack->getCurrentPane(), | 2542 if (layer->snapToFeatureFrame(m_paneStack->getCurrentPane(), |
2562 frame, resolution, Layer::SnapRight)) { | 2543 frame, resolution, Layer::SnapRight)) { |
2563 if (pane) frame = pane->alignToReference(frame); | 2544 if (pane) frame = pane->alignToReference(frame); |
2564 } else { | 2545 } else { |
2567 } | 2548 } |
2568 | 2549 |
2569 if (frame < 0) frame = 0; | 2550 if (frame < 0) frame = 0; |
2570 | 2551 |
2571 if (m_viewManager->getPlaySelectionMode()) { | 2552 if (m_viewManager->getPlaySelectionMode()) { |
2572 frame = m_viewManager->constrainFrameToSelection(size_t(frame)); | 2553 frame = m_viewManager->constrainFrameToSelection(int(frame)); |
2573 } | 2554 } |
2574 | 2555 |
2575 m_viewManager->setPlaybackFrame(frame); | 2556 m_viewManager->setPlaybackFrame(frame); |
2576 | 2557 |
2577 if (frame == getMainModel()->getEndFrame() && | 2558 if (frame == (int)getMainModel()->getEndFrame() && |
2578 m_playSource && | 2559 m_playSource && |
2579 m_playSource->isPlaying() && | 2560 m_playSource->isPlaying() && |
2580 !m_viewManager->getPlayLoopMode()) { | 2561 !m_viewManager->getPlayLoopMode()) { |
2581 stop(); | 2562 stop(); |
2582 } | 2563 } |
2591 m_playSource->isPlaying() && | 2572 m_playSource->isPlaying() && |
2592 !m_viewManager->getPlayLoopMode()) { | 2573 !m_viewManager->getPlayLoopMode()) { |
2593 stop(); | 2574 stop(); |
2594 } | 2575 } |
2595 | 2576 |
2596 size_t frame = getMainModel()->getEndFrame(); | 2577 int frame = getMainModel()->getEndFrame(); |
2597 | 2578 |
2598 if (m_viewManager->getPlaySelectionMode()) { | 2579 if (m_viewManager->getPlaySelectionMode()) { |
2599 frame = m_viewManager->constrainFrameToSelection(frame); | 2580 frame = m_viewManager->constrainFrameToSelection(frame); |
2600 } | 2581 } |
2601 | 2582 |
2609 | 2590 |
2610 Layer *layer = getSnapLayer(); | 2591 Layer *layer = getSnapLayer(); |
2611 if (!layer) { ffwd(); return; } | 2592 if (!layer) { ffwd(); return; } |
2612 | 2593 |
2613 Pane *pane = m_paneStack->getCurrentPane(); | 2594 Pane *pane = m_paneStack->getCurrentPane(); |
2614 size_t sr = getMainModel()->getSampleRate(); | |
2615 | |
2616 int frame = m_viewManager->getPlaybackFrame(); | 2595 int frame = m_viewManager->getPlaybackFrame(); |
2617 | 2596 |
2618 size_t resolution = 0; | 2597 int resolution = 0; |
2619 if (pane) frame = pane->alignFromReference(frame); | 2598 if (pane) frame = pane->alignFromReference(frame); |
2620 if (layer->snapToSimilarFeature(m_paneStack->getCurrentPane(), | 2599 if (layer->snapToSimilarFeature(m_paneStack->getCurrentPane(), |
2621 frame, resolution, Layer::SnapRight)) { | 2600 frame, resolution, Layer::SnapRight)) { |
2622 if (pane) frame = pane->alignToReference(frame); | 2601 if (pane) frame = pane->alignToReference(frame); |
2623 } else { | 2602 } else { |
2625 } | 2604 } |
2626 | 2605 |
2627 if (frame < 0) frame = 0; | 2606 if (frame < 0) frame = 0; |
2628 | 2607 |
2629 if (m_viewManager->getPlaySelectionMode()) { | 2608 if (m_viewManager->getPlaySelectionMode()) { |
2630 frame = m_viewManager->constrainFrameToSelection(size_t(frame)); | 2609 frame = m_viewManager->constrainFrameToSelection(int(frame)); |
2631 } | 2610 } |
2632 | 2611 |
2633 m_viewManager->setPlaybackFrame(frame); | 2612 m_viewManager->setPlaybackFrame(frame); |
2634 | 2613 |
2635 if (frame == getMainModel()->getEndFrame() && | 2614 if (frame == (int)getMainModel()->getEndFrame() && |
2636 m_playSource && | 2615 m_playSource && |
2637 m_playSource->isPlaying() && | 2616 m_playSource->isPlaying() && |
2638 !m_viewManager->getPlayLoopMode()) { | 2617 !m_viewManager->getPlayLoopMode()) { |
2639 stop(); | 2618 stop(); |
2640 } | 2619 } |
2648 int frame = m_viewManager->getPlaybackFrame(); | 2627 int frame = m_viewManager->getPlaybackFrame(); |
2649 if (frame > 0) --frame; | 2628 if (frame > 0) --frame; |
2650 | 2629 |
2651 Pane *pane = m_paneStack->getCurrentPane(); | 2630 Pane *pane = m_paneStack->getCurrentPane(); |
2652 Layer *layer = getSnapLayer(); | 2631 Layer *layer = getSnapLayer(); |
2653 size_t sr = getMainModel()->getSampleRate(); | 2632 int sr = getMainModel()->getSampleRate(); |
2654 | 2633 |
2655 // when rewinding during playback, we want to allow a period | 2634 // when rewinding during playback, we want to allow a period |
2656 // following a rewind target point at which the rewind will go to | 2635 // following a rewind target point at which the rewind will go to |
2657 // the prior point instead of the immediately neighbouring one | 2636 // the prior point instead of the immediately neighbouring one |
2658 if (m_playSource && m_playSource->isPlaying()) { | 2637 if (m_playSource && m_playSource->isPlaying()) { |
2659 RealTime ct = RealTime::frame2RealTime(frame, sr); | 2638 RealTime ct = RealTime::frame2RealTime(frame, sr); |
2660 ct = ct - RealTime::fromSeconds(0.25); | 2639 ct = ct - RealTime::fromSeconds(0.15); |
2661 if (ct < RealTime::zeroTime) ct = RealTime::zeroTime; | 2640 if (ct < RealTime::zeroTime) ct = RealTime::zeroTime; |
2662 frame = RealTime::realTime2Frame(ct, sr); | 2641 frame = RealTime::realTime2Frame(ct, sr); |
2663 } | 2642 } |
2664 | 2643 |
2665 if (!layer) { | 2644 if (!layer) { |
2666 | 2645 |
2667 frame = RealTime::realTime2Frame | 2646 frame = RealTime::realTime2Frame |
2668 (RealTime::frame2RealTime(frame, sr) - RealTime(2, 0), sr); | 2647 (RealTime::frame2RealTime(frame, sr) - m_defaultFfwdRwdStep, sr); |
2669 if (frame < int(getMainModel()->getStartFrame())) { | 2648 if (frame < int(getMainModel()->getStartFrame())) { |
2670 frame = getMainModel()->getStartFrame(); | 2649 frame = getMainModel()->getStartFrame(); |
2671 } | 2650 } |
2672 | 2651 |
2673 } else { | 2652 } else { |
2674 | 2653 |
2675 size_t resolution = 0; | 2654 int resolution = 0; |
2676 if (pane) frame = pane->alignFromReference(frame); | 2655 if (pane) frame = pane->alignFromReference(frame); |
2677 if (layer->snapToFeatureFrame(m_paneStack->getCurrentPane(), | 2656 if (layer->snapToFeatureFrame(m_paneStack->getCurrentPane(), |
2678 frame, resolution, Layer::SnapLeft)) { | 2657 frame, resolution, Layer::SnapLeft)) { |
2679 if (pane) frame = pane->alignToReference(frame); | 2658 if (pane) frame = pane->alignToReference(frame); |
2680 } else { | 2659 } else { |
2683 } | 2662 } |
2684 | 2663 |
2685 if (frame < 0) frame = 0; | 2664 if (frame < 0) frame = 0; |
2686 | 2665 |
2687 if (m_viewManager->getPlaySelectionMode()) { | 2666 if (m_viewManager->getPlaySelectionMode()) { |
2688 frame = m_viewManager->constrainFrameToSelection(size_t(frame)); | 2667 frame = m_viewManager->constrainFrameToSelection(int(frame)); |
2689 } | 2668 } |
2690 | 2669 |
2691 m_viewManager->setPlaybackFrame(frame); | 2670 m_viewManager->setPlaybackFrame(frame); |
2692 } | 2671 } |
2693 | 2672 |
2694 void | 2673 void |
2695 MainWindowBase::rewindStart() | 2674 MainWindowBase::rewindStart() |
2696 { | 2675 { |
2697 if (!getMainModel()) return; | 2676 if (!getMainModel()) return; |
2698 | 2677 |
2699 size_t frame = getMainModel()->getStartFrame(); | 2678 int frame = getMainModel()->getStartFrame(); |
2700 | 2679 |
2701 if (m_viewManager->getPlaySelectionMode()) { | 2680 if (m_viewManager->getPlaySelectionMode()) { |
2702 frame = m_viewManager->constrainFrameToSelection(frame); | 2681 frame = m_viewManager->constrainFrameToSelection(frame); |
2703 } | 2682 } |
2704 | 2683 |
2712 | 2691 |
2713 Layer *layer = getSnapLayer(); | 2692 Layer *layer = getSnapLayer(); |
2714 if (!layer) { rewind(); return; } | 2693 if (!layer) { rewind(); return; } |
2715 | 2694 |
2716 Pane *pane = m_paneStack->getCurrentPane(); | 2695 Pane *pane = m_paneStack->getCurrentPane(); |
2717 size_t sr = getMainModel()->getSampleRate(); | |
2718 | |
2719 int frame = m_viewManager->getPlaybackFrame(); | 2696 int frame = m_viewManager->getPlaybackFrame(); |
2720 | 2697 |
2721 size_t resolution = 0; | 2698 int resolution = 0; |
2722 if (pane) frame = pane->alignFromReference(frame); | 2699 if (pane) frame = pane->alignFromReference(frame); |
2723 if (layer->snapToSimilarFeature(m_paneStack->getCurrentPane(), | 2700 if (layer->snapToSimilarFeature(m_paneStack->getCurrentPane(), |
2724 frame, resolution, Layer::SnapLeft)) { | 2701 frame, resolution, Layer::SnapLeft)) { |
2725 if (pane) frame = pane->alignToReference(frame); | 2702 if (pane) frame = pane->alignToReference(frame); |
2726 } else { | 2703 } else { |
2728 } | 2705 } |
2729 | 2706 |
2730 if (frame < 0) frame = 0; | 2707 if (frame < 0) frame = 0; |
2731 | 2708 |
2732 if (m_viewManager->getPlaySelectionMode()) { | 2709 if (m_viewManager->getPlaySelectionMode()) { |
2733 frame = m_viewManager->constrainFrameToSelection(size_t(frame)); | 2710 frame = m_viewManager->constrainFrameToSelection(int(frame)); |
2734 } | 2711 } |
2735 | 2712 |
2736 m_viewManager->setPlaybackFrame(frame); | 2713 m_viewManager->setPlaybackFrame(frame); |
2737 } | 2714 } |
2738 | 2715 |
2940 | 2917 |
2941 void | 2918 void |
2942 MainWindowBase::connectLayerEditDialog(ModelDataTableDialog *dialog) | 2919 MainWindowBase::connectLayerEditDialog(ModelDataTableDialog *dialog) |
2943 { | 2920 { |
2944 connect(m_viewManager, | 2921 connect(m_viewManager, |
2945 SIGNAL(globalCentreFrameChanged(unsigned long)), | 2922 SIGNAL(globalCentreFrameChanged(int)), |
2946 dialog, | 2923 dialog, |
2947 SLOT(userScrolledToFrame(unsigned long))); | 2924 SLOT(userScrolledToFrame(int))); |
2948 | 2925 |
2949 connect(m_viewManager, | 2926 connect(m_viewManager, |
2950 SIGNAL(playbackFrameChanged(unsigned long)), | 2927 SIGNAL(playbackFrameChanged(int)), |
2951 dialog, | 2928 dialog, |
2952 SLOT(playbackScrolledToFrame(unsigned long))); | 2929 SLOT(playbackScrolledToFrame(int))); |
2953 | 2930 |
2954 connect(dialog, | 2931 connect(dialog, |
2955 SIGNAL(scrollToFrame(unsigned long)), | 2932 SIGNAL(scrollToFrame(int)), |
2956 m_viewManager, | 2933 m_viewManager, |
2957 SLOT(setGlobalCentreFrame(unsigned long))); | 2934 SLOT(setGlobalCentreFrame(int))); |
2958 | 2935 |
2959 connect(dialog, | 2936 connect(dialog, |
2960 SIGNAL(scrollToFrame(unsigned long)), | 2937 SIGNAL(scrollToFrame(int)), |
2961 m_viewManager, | 2938 m_viewManager, |
2962 SLOT(setPlaybackFrame(unsigned long))); | 2939 SLOT(setPlaybackFrame(int))); |
2963 } | 2940 } |
2964 | 2941 |
2965 void | 2942 void |
2966 MainWindowBase::previousPane() | 2943 MainWindowBase::previousPane() |
2967 { | 2944 { |
3045 } | 3022 } |
3046 } | 3023 } |
3047 } | 3024 } |
3048 | 3025 |
3049 void | 3026 void |
3050 MainWindowBase::playbackFrameChanged(unsigned long frame) | 3027 MainWindowBase::playbackFrameChanged(int frame) |
3051 { | 3028 { |
3052 if (!(m_playSource && m_playSource->isPlaying()) || !getMainModel()) return; | 3029 if (!(m_playSource && m_playSource->isPlaying()) || !getMainModel()) return; |
3053 | 3030 |
3054 updatePositionStatusDisplays(); | 3031 updatePositionStatusDisplays(); |
3055 | 3032 |
3081 | 3058 |
3082 statusBar()->showMessage(m_myStatusMessage); | 3059 statusBar()->showMessage(m_myStatusMessage); |
3083 } | 3060 } |
3084 | 3061 |
3085 void | 3062 void |
3086 MainWindowBase::globalCentreFrameChanged(unsigned long ) | 3063 MainWindowBase::globalCentreFrameChanged(int ) |
3087 { | 3064 { |
3088 if ((m_playSource && m_playSource->isPlaying()) || !getMainModel()) return; | 3065 if ((m_playSource && m_playSource->isPlaying()) || !getMainModel()) return; |
3089 Pane *p = 0; | 3066 Pane *p = 0; |
3090 if (!m_paneStack || !(p = m_paneStack->getCurrentPane())) return; | 3067 if (!m_paneStack || !(p = m_paneStack->getCurrentPane())) return; |
3091 if (!p->getFollowGlobalPan()) return; | 3068 if (!p->getFollowGlobalPan()) return; |
3092 updateVisibleRangeDisplay(p); | 3069 updateVisibleRangeDisplay(p); |
3093 } | 3070 } |
3094 | 3071 |
3095 void | 3072 void |
3096 MainWindowBase::viewCentreFrameChanged(View *v, unsigned long frame) | 3073 MainWindowBase::viewCentreFrameChanged(View *v, int frame) |
3097 { | 3074 { |
3098 // SVDEBUG << "MainWindowBase::viewCentreFrameChanged(" << v << "," << frame << ")" << endl; | 3075 // SVDEBUG << "MainWindowBase::viewCentreFrameChanged(" << v << "," << frame << ")" << endl; |
3099 | 3076 |
3100 if (m_viewDataDialogMap.find(v) != m_viewDataDialogMap.end()) { | 3077 if (m_viewDataDialogMap.find(v) != m_viewDataDialogMap.end()) { |
3101 for (DataDialogSet::iterator i = m_viewDataDialogMap[v].begin(); | 3078 for (DataDialogSet::iterator i = m_viewDataDialogMap[v].begin(); |
3108 if (!m_paneStack || !(p = m_paneStack->getCurrentPane())) return; | 3085 if (!m_paneStack || !(p = m_paneStack->getCurrentPane())) return; |
3109 if (v == p) updateVisibleRangeDisplay(p); | 3086 if (v == p) updateVisibleRangeDisplay(p); |
3110 } | 3087 } |
3111 | 3088 |
3112 void | 3089 void |
3113 MainWindowBase::viewZoomLevelChanged(View *v, unsigned long , bool ) | 3090 MainWindowBase::viewZoomLevelChanged(View *v, int , bool ) |
3114 { | 3091 { |
3115 if ((m_playSource && m_playSource->isPlaying()) || !getMainModel()) return; | 3092 if ((m_playSource && m_playSource->isPlaying()) || !getMainModel()) return; |
3116 Pane *p = 0; | 3093 Pane *p = 0; |
3117 if (!m_paneStack || !(p = m_paneStack->getCurrentPane())) return; | 3094 if (!m_paneStack || !(p = m_paneStack->getCurrentPane())) return; |
3118 if (v == p) updateVisibleRangeDisplay(p); | 3095 if (v == p) updateVisibleRangeDisplay(p); |
3211 MainWindowBase::mainModelChanged(WaveFileModel *model) | 3188 MainWindowBase::mainModelChanged(WaveFileModel *model) |
3212 { | 3189 { |
3213 // SVDEBUG << "MainWindowBase::mainModelChanged(" << model << ")" << endl; | 3190 // SVDEBUG << "MainWindowBase::mainModelChanged(" << model << ")" << endl; |
3214 updateDescriptionLabel(); | 3191 updateDescriptionLabel(); |
3215 if (model) m_viewManager->setMainModelSampleRate(model->getSampleRate()); | 3192 if (model) m_viewManager->setMainModelSampleRate(model->getSampleRate()); |
3216 if (model && !m_playTarget && m_audioOutput) createPlayTarget(); | 3193 if (model && !m_playTarget && m_audioOutput) { |
3194 createPlayTarget(); | |
3195 } | |
3217 } | 3196 } |
3218 | 3197 |
3219 void | 3198 void |
3220 MainWindowBase::modelAboutToBeDeleted(Model *model) | 3199 MainWindowBase::modelAboutToBeDeleted(Model *model) |
3221 { | 3200 { |
3314 #ifdef Q_OS_MAC | 3293 #ifdef Q_OS_MAC |
3315 args.append(url); | 3294 args.append(url); |
3316 process->start("open", args); | 3295 process->start("open", args); |
3317 #else | 3296 #else |
3318 #ifdef Q_OS_WIN32 | 3297 #ifdef Q_OS_WIN32 |
3319 | 3298 QString pf(getenv("ProgramFiles")); |
3320 QString pf(getenv("ProgramFiles")); | 3299 QString command = pf + QString("\\Internet Explorer\\IEXPLORE.EXE"); |
3321 QString command = pf + QString("\\Internet Explorer\\IEXPLORE.EXE"); | 3300 |
3322 | 3301 args.append(url); |
3323 args.append(url); | 3302 process->start(command, args); |
3324 process->start(command, args); | |
3325 | |
3326 #else | 3303 #else |
3327 #ifdef Q_WS_X11 | |
3328 if (!qgetenv("KDE_FULL_SESSION").isEmpty()) { | 3304 if (!qgetenv("KDE_FULL_SESSION").isEmpty()) { |
3329 args.append("exec"); | 3305 args.append("exec"); |
3330 args.append(url); | 3306 args.append(url); |
3331 process->start("kfmclient", args); | 3307 process->start("kfmclient", args); |
3332 } else if (!qgetenv("BROWSER").isEmpty()) { | 3308 } else if (!qgetenv("BROWSER").isEmpty()) { |
3336 args.append(url); | 3312 args.append(url); |
3337 process->start("firefox", args); | 3313 process->start("firefox", args); |
3338 } | 3314 } |
3339 #endif | 3315 #endif |
3340 #endif | 3316 #endif |
3341 #endif | |
3342 } | 3317 } |
3343 | 3318 |
3344 | 3319 |