diff --git a/panels/effectcontrols.cpp b/panels/effectcontrols.cpp index c6a8740b1..505d4bb43 100644 --- a/panels/effectcontrols.cpp +++ b/panels/effectcontrols.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "panels/panels.h" #include "project/effect.h" @@ -52,6 +53,7 @@ EffectControls::EffectControls(QWidget *parent) : lblMultipleClipsSelected->setVisible(false); + connect(keyframeView, SIGNAL(wheel_event_signal(QWheelEvent*)), effects_area, SLOT(receive_wheel_event(QWheelEvent*))); connect(horizontalScrollBar, SIGNAL(valueChanged(int)), headers, SLOT(set_scroll(int))); connect(horizontalScrollBar, SIGNAL(resize_move(double)), keyframeView, SLOT(resize_move(double))); connect(horizontalScrollBar, SIGNAL(valueChanged(int)), keyframeView, SLOT(set_x_scroll(int))); @@ -439,7 +441,17 @@ void EffectControls::setup_ui() { hlayout->addWidget(splitter); - setWidget(contents); + setWidget(contents); +} + +void EffectControls::update_scrollbar() { + verticalScrollBar->setMaximum(qMax(0, effects_area->height() - keyframeView->height() - headers->height())); + verticalScrollBar->setPageStep(verticalScrollBar->height()); +} + +void EffectControls::queue_post_update() { + keyframeView->update(); + update_scrollbar(); } void EffectControls::load_effects() { @@ -469,10 +481,10 @@ void EffectControls::load_effects() { } if (selected_clips.size() > 0) { setWindowTitle(panel_name + sequence->clips.at(selected_clips.at(0))->name); - verticalScrollBar->setMaximum(qMax(0, effects_area->sizeHint().height() - headers->height() + scrollArea->horizontalScrollBar()->height()/* - keyframeView->height() - headers->height()*/)); keyframeView->setEnabled(true); headers->setVisible(true); - keyframeView->update(); + + QTimer::singleShot(50, this, SLOT(queue_post_update())); } } } @@ -532,7 +544,7 @@ void EffectControls::audio_transition_click() { } void EffectControls::resizeEvent(QResizeEvent*) { - verticalScrollBar->setMaximum(qMax(0, effects_area->height() - keyframeView->height() - headers->height())); + update_scrollbar(); } bool EffectControls::is_focused() { @@ -556,8 +568,6 @@ EffectsArea::EffectsArea(QWidget* parent) : QWidget(parent) {} -void EffectsArea::resizeEvent(QResizeEvent*) { -// parent_widget->setMinimumWidth(sizeHint().width()); -// parent_widget->resize(sizeHint().width(), parent_widget->height()); -// parent_widget->updateGeometry(); +void EffectsArea::receive_wheel_event(QWheelEvent *e) { + QApplication::sendEvent(this, e); } diff --git a/panels/effectcontrols.h b/panels/effectcontrols.h index 67d88e819..cce0b2dda 100644 --- a/panels/effectcontrols.h +++ b/panels/effectcontrols.h @@ -19,12 +19,14 @@ class QScrollBar; class QHBoxLayout; class EffectsArea : public QWidget { + Q_OBJECT public: - EffectsArea(QWidget* parent = 0); - void resizeEvent(QResizeEvent *event); + EffectsArea(QWidget* parent = 0); QScrollArea* parent_widget; KeyframeView* keyframe_area; TimelineHeader* header; +public slots: + void receive_wheel_event(QWheelEvent* e); }; class EffectControls : public QDockWidget @@ -65,6 +67,9 @@ private slots: void audio_transition_click(); void deselect_all_effects(QWidget*); + + void update_scrollbar(); + void queue_post_update(); protected: void resizeEvent(QResizeEvent *event); private: diff --git a/ui/keyframeview.cpp b/ui/keyframeview.cpp index 99ea806ae..8cfb38f0c 100644 --- a/ui/keyframeview.cpp +++ b/ui/keyframeview.cpp @@ -167,7 +167,11 @@ void KeyframeView::paintEvent(QPaintEvent*) { /*if (mouseover && mouseover_row < rowY.size()) { draw_keyframe(p, getScreenPointFromFrame(panel_effect_controls->zoom, mouseover_frame - visible_in), rowY.at(mouseover_row), true); - }*/ + }*/ +} + +void KeyframeView::wheelEvent(QWheelEvent *e) { + emit wheel_event_signal(e); } bool KeyframeView::keyframeIsSelected(EffectField *field, int keyframe) { diff --git a/ui/keyframeview.h b/ui/keyframeview.h index 51bbd361d..984a3b541 100644 --- a/ui/keyframeview.h +++ b/ui/keyframeview.h @@ -21,6 +21,8 @@ public: long visible_in; long visible_out; +signals: + void wheel_event_signal(QWheelEvent*); public slots: void set_x_scroll(int); void set_y_scroll(int); @@ -36,6 +38,7 @@ private: void mouseMoveEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event); + void wheelEvent(QWheelEvent* e); bool mousedown; bool dragging; bool keys_selected;