void WaveformWidgetFactory::notifyZoomChange(WWaveformViewer* viewer) { WaveformWidgetAbstract* pWaveformWidget = viewer->getWaveformWidget(); if (pWaveformWidget != NULL && isZoomSync()) { //qDebug() << "WaveformWidgetFactory::notifyZoomChange"; int refZoom = pWaveformWidget->getZoomFactor(); for (int i = 0; i < m_waveformWidgetHolders.size(); ++i) { WaveformWidgetHolder& holder = m_waveformWidgetHolders[i]; if (holder.m_waveformViewer != viewer) { holder.m_waveformViewer->setZoom(refZoom); } } } }
bool WaveformWidgetFactory::setWidgetTypeFromHandle(int handleIndex) { if (handleIndex < 0 && handleIndex > (int)m_waveformWidgetHandles.size()) { qDebug() << "WaveformWidgetFactory::setWidgetType - invalid handle --> use of 'EmptyWaveform'"; // fallback empty type setWidgetType(WaveformWidgetType::EmptyWaveform); return false; } WaveformWidgetAbstractHandle& handle = m_waveformWidgetHandles[handleIndex]; if (handle.m_type == m_type) { qDebug() << "WaveformWidgetFactory::setWidgetType - type already in use"; return true; } // change the type setWidgetType(handle.m_type); m_skipRender = true; //qDebug() << "recreate start"; //re-create/setup all waveform widgets for (int i = 0; i < m_waveformWidgetHolders.size(); i++) { WaveformWidgetHolder& holder = m_waveformWidgetHolders[i]; WaveformWidgetAbstract* previousWidget = holder.m_waveformWidget; TrackPointer pTrack = previousWidget->getTrackInfo(); //previousWidget->hold(); int previousZoom = previousWidget->getZoomFactor(); delete previousWidget; WWaveformViewer* viewer = holder.m_waveformViewer; WaveformWidgetAbstract* widget = createWaveformWidget(m_type, holder.m_waveformViewer); holder.m_waveformWidget = widget; viewer->setWaveformWidget(widget); viewer->setup(holder.m_skinNodeCache, holder.m_skinContextCache); viewer->setZoom(previousZoom); // resize() doesn't seem to get called on the widget. I think Qt skips // it since the size didn't change. //viewer->resize(viewer->size()); widget->resize(viewer->width(), viewer->height()); widget->setTrack(pTrack); widget->getWidget()->show(); viewer->update(); } m_skipRender = false; //qDebug() << "recreate done"; return true; }