Mercurial > hg > svgui
comparison view/View.cpp @ 320:984c1975f1ff
* Some tidying up to handling of alignment; add alignment status label to
pane; ensure alignment when dragging with mouse as well as when playing
author | Chris Cannam |
---|---|
date | Thu, 25 Oct 2007 14:32:23 +0000 |
parents | c0b9eec70639 |
children | 973a0272b712 |
comparison
equal
deleted
inserted
replaced
319:2a50c1ecc990 | 320:984c1975f1ff |
---|---|
324 update(); | 324 update(); |
325 | 325 |
326 changeVisible = true; | 326 changeVisible = true; |
327 } | 327 } |
328 | 328 |
329 if (e) emit centreFrameChanged(f, m_followPan, m_followPlay); | 329 if (e) emit centreFrameChanged(alignFromReference(f), |
330 m_followPan, m_followPlay); | |
330 } | 331 } |
331 | 332 |
332 return changeVisible; | 333 return changeVisible; |
333 } | 334 } |
334 | 335 |
529 this, SLOT(layerNameChanged())); | 530 this, SLOT(layerNameChanged())); |
530 connect(layer, SIGNAL(modelChanged()), | 531 connect(layer, SIGNAL(modelChanged()), |
531 this, SLOT(modelChanged())); | 532 this, SLOT(modelChanged())); |
532 connect(layer, SIGNAL(modelCompletionChanged()), | 533 connect(layer, SIGNAL(modelCompletionChanged()), |
533 this, SLOT(modelCompletionChanged())); | 534 this, SLOT(modelCompletionChanged())); |
535 connect(layer, SIGNAL(modelAlignmentCompletionChanged()), | |
536 this, SLOT(modelAlignmentCompletionChanged())); | |
534 connect(layer, SIGNAL(modelChanged(size_t, size_t)), | 537 connect(layer, SIGNAL(modelChanged(size_t, size_t)), |
535 this, SLOT(modelChanged(size_t, size_t))); | 538 this, SLOT(modelChanged(size_t, size_t))); |
536 connect(layer, SIGNAL(modelReplaced()), | 539 connect(layer, SIGNAL(modelReplaced()), |
537 this, SLOT(modelReplaced())); | 540 this, SLOT(modelReplaced())); |
538 | 541 |
570 this, SLOT(layerNameChanged())); | 573 this, SLOT(layerNameChanged())); |
571 disconnect(layer, SIGNAL(modelChanged()), | 574 disconnect(layer, SIGNAL(modelChanged()), |
572 this, SLOT(modelChanged())); | 575 this, SLOT(modelChanged())); |
573 disconnect(layer, SIGNAL(modelCompletionChanged()), | 576 disconnect(layer, SIGNAL(modelCompletionChanged()), |
574 this, SLOT(modelCompletionChanged())); | 577 this, SLOT(modelCompletionChanged())); |
578 disconnect(layer, SIGNAL(modelAlignmentCompletionChanged()), | |
579 this, SLOT(modelAlignmentCompletionChanged())); | |
575 disconnect(layer, SIGNAL(modelChanged(size_t, size_t)), | 580 disconnect(layer, SIGNAL(modelChanged(size_t, size_t)), |
576 this, SLOT(modelChanged(size_t, size_t))); | 581 this, SLOT(modelChanged(size_t, size_t))); |
577 disconnect(layer, SIGNAL(modelReplaced()), | 582 disconnect(layer, SIGNAL(modelReplaced()), |
578 this, SLOT(modelReplaced())); | 583 this, SLOT(modelReplaced())); |
579 | 584 |
802 QObject *obj = sender(); | 807 QObject *obj = sender(); |
803 checkProgress(obj); | 808 checkProgress(obj); |
804 } | 809 } |
805 | 810 |
806 void | 811 void |
812 View::modelAlignmentCompletionChanged() | |
813 { | |
814 std::cerr << "View(" << this << ")::modelAlignmentCompletionChanged()" << std::endl; | |
815 | |
816 QObject *obj = sender(); | |
817 checkProgress(obj); | |
818 } | |
819 | |
820 void | |
807 View::modelReplaced() | 821 View::modelReplaced() |
808 { | 822 { |
809 #ifdef DEBUG_VIEW_WIDGET_PAINT | 823 #ifdef DEBUG_VIEW_WIDGET_PAINT |
810 std::cerr << "View(" << this << ")::modelReplaced()" << std::endl; | 824 std::cerr << "View(" << this << ")::modelReplaced()" << std::endl; |
811 #endif | 825 #endif |
856 | 870 |
857 void | 871 void |
858 View::globalCentreFrameChanged(unsigned long f) | 872 View::globalCentreFrameChanged(unsigned long f) |
859 { | 873 { |
860 if (m_followPan) { | 874 if (m_followPan) { |
861 setCentreFrame(f, false); | 875 setCentreFrame(alignToReference(f), false); |
862 } | 876 } |
863 } | 877 } |
864 | 878 |
865 void | 879 void |
866 View::viewCentreFrameChanged(View *, unsigned long ) | 880 View::viewCentreFrameChanged(View *, unsigned long ) |
1072 } | 1086 } |
1073 | 1087 |
1074 return models; | 1088 return models; |
1075 } | 1089 } |
1076 | 1090 |
1091 Model * | |
1092 View::getAligningModel() const | |
1093 { | |
1094 if (!m_manager || | |
1095 !m_manager->getAlignMode() || | |
1096 !m_manager->getPlaybackModel()) { | |
1097 return 0; | |
1098 } | |
1099 | |
1100 Model *anyModel = 0; | |
1101 Model *goodModel = 0; | |
1102 | |
1103 for (LayerList::const_iterator i = m_layers.begin(); | |
1104 i != m_layers.end(); ++i) { | |
1105 | |
1106 Layer *layer = *i; | |
1107 | |
1108 if (!layer) continue; | |
1109 if (dynamic_cast<TimeRulerLayer *>(layer)) continue; | |
1110 | |
1111 Model *model = (*i)->getModel(); | |
1112 if (!model) continue; | |
1113 | |
1114 if (model->getAlignmentReference()) { | |
1115 anyModel = model; | |
1116 if (layer->isLayerOpaque() || | |
1117 dynamic_cast<RangeSummarisableTimeValueModel *>(model)) { | |
1118 goodModel = model; | |
1119 } | |
1120 } | |
1121 } | |
1122 | |
1123 if (goodModel) return goodModel; | |
1124 else return anyModel; | |
1125 } | |
1126 | |
1127 size_t | |
1128 View::alignFromReference(size_t f) const | |
1129 { | |
1130 Model *aligningModel = getAligningModel(); | |
1131 if (!aligningModel) return f; | |
1132 return aligningModel->alignFromReference(f); | |
1133 } | |
1134 | |
1135 size_t | |
1136 View::alignToReference(size_t f) const | |
1137 { | |
1138 Model *aligningModel = getAligningModel(); | |
1139 if (!aligningModel) return f; | |
1140 return aligningModel->alignToReference(f); | |
1141 } | |
1142 | |
1077 int | 1143 int |
1078 View::getAlignedPlaybackFrame() const | 1144 View::getAlignedPlaybackFrame() const |
1079 { | 1145 { |
1080 if (!m_manager) return 0; | 1146 Model *aligningModel = getAligningModel(); |
1081 if (!m_manager->getAlignMode() || | |
1082 !m_manager->getPlaybackModel()) { | |
1083 return m_manager->getPlaybackFrame(); | |
1084 } | |
1085 | |
1086 RangeSummarisableTimeValueModel *waveformModel = 0; | |
1087 for (LayerList::const_iterator i = m_layers.begin(); i != m_layers.end(); ++i) { | |
1088 | |
1089 if (!*i) continue; | |
1090 if (dynamic_cast<TimeRulerLayer *>(*i)) continue; | |
1091 | |
1092 Model *model = (*i)->getModel(); | |
1093 if (!model) continue; | |
1094 | |
1095 waveformModel = dynamic_cast<RangeSummarisableTimeValueModel *>(model); | |
1096 if (!waveformModel) { | |
1097 waveformModel = dynamic_cast<RangeSummarisableTimeValueModel *> | |
1098 (model->getSourceModel()); | |
1099 } | |
1100 | |
1101 if (waveformModel) break; | |
1102 } | |
1103 | 1147 |
1104 int pf = m_manager->getPlaybackFrame(); | 1148 int pf = m_manager->getPlaybackFrame(); |
1105 | 1149 |
1106 if (!waveformModel) return pf; | 1150 if (!aligningModel) return pf; |
1107 | 1151 |
1108 RangeSummarisableTimeValueModel *pm = | 1152 Model *pm = m_manager->getPlaybackModel(); |
1109 dynamic_cast<RangeSummarisableTimeValueModel *> | |
1110 (m_manager->getPlaybackModel()); | |
1111 | 1153 |
1112 // std::cerr << "View[" << this << "]::getAlignedPlaybackFrame: pf = " << pf; | 1154 // std::cerr << "View[" << this << "]::getAlignedPlaybackFrame: pf = " << pf; |
1113 | 1155 |
1114 if (pm) { | 1156 if (pm) { |
1115 pf = pm->alignFromReference(pf); | 1157 pf = pm->alignFromReference(pf); |
1116 // std::cerr << " -> " << pf; | 1158 // std::cerr << " -> " << pf; |
1117 } | 1159 } |
1118 | 1160 |
1119 int af = waveformModel->alignToReference(pf); | 1161 int af = aligningModel->alignToReference(pf); |
1120 | 1162 |
1121 // std::cerr << ", aligned = " << af << std::endl; | 1163 // std::cerr << ", aligned = " << af << std::endl; |
1122 return af; | 1164 return af; |
1123 } | 1165 } |
1124 | 1166 |