#include <QVBoxLayout>
#include <QGraphicsRectItem>
#include <QMenu>
+#include <QInputDialog>
-Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent) :
+Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidget* parent) :
QWidget(parent),
m_profile(profile),
m_paramRect(NULL),
m_geom(NULL),
m_path(NULL),
- m_fixedMode(false)
+ m_fixedMode(false),
+ m_frameSize(frame_size)
{
m_ui.setupUi(this);
QVBoxLayout* vbox = new QVBoxLayout(m_ui.widget);
m_ui.buttonMenu->setPopupMode(QToolButton::QToolButton::InstantPopup);
+ configMenu->addAction(i18n("Geometry"), this, SLOT(slotGeometry()));
+
m_scaleMenu = new QMenu(i18n("Resize..."), this);
configMenu->addMenu(m_scaleMenu);
m_scaleMenu->addAction(i18n("50%"), this, SLOT(slotResize50()));
m_scaleMenu->addAction(i18n("100%"), this, SLOT(slotResize100()));
m_scaleMenu->addAction(i18n("200%"), this, SLOT(slotResize200()));
-
+ m_scaleMenu->addAction(i18n("Original size"), this, SLOT(slotResizeOriginal()));
+ m_scaleMenu->addAction(i18n("Custom"), this, SLOT(slotResizeCustom()));
m_alignMenu = new QMenu(i18n("Align..."), this);
configMenu->addMenu(m_alignMenu);
connect(m_ui.buttonDelete , SIGNAL(clicked()) , this , SLOT(slotDeleteFrame()));
connect(m_ui.buttonAdd , SIGNAL(clicked()) , this , SLOT(slotAddFrame()));
connect(m_scene, SIGNAL(actionFinished()), this, SLOT(slotUpdateTransitionProperties()));
+ connect(m_scene, SIGNAL(doubleClickEvent()), this, SLOT(slotGeometry()));
+
}
void Geometryval::slotAlignCenter()
slotUpdateTransitionProperties();
}
+void Geometryval::slotResizeOriginal()
+{
+ if (m_frameSize.isNull()) slotResize100();
+ int pos = m_ui.spinPos->value();
+ Mlt::GeometryItem item;
+ int error = m_geom->fetch(&item, pos);
+ if (error || item.key() == false) {
+ // no keyframe under cursor
+ return;
+ }
+ m_paramRect->setRect(0, 0, m_frameSize.x(), m_frameSize.y());
+ slotUpdateTransitionProperties();
+}
+
+void Geometryval::slotResizeCustom()
+{
+ int pos = m_ui.spinPos->value();
+ Mlt::GeometryItem item;
+ int error = m_geom->fetch(&item, pos);
+ if (error || item.key() == false) {
+ // no keyframe under cursor
+ return;
+ }
+ int scale = m_paramRect->rect().width() * 100 / m_profile.width;
+ bool ok;
+ scale = QInputDialog::getInteger(this, i18n("Resize..."), i18n("Scale"), scale, 1, 2147483647, 10, &ok);
+ if (!ok) return;
+ m_paramRect->setRect(0, 0, m_profile.width * scale / 100, m_profile.height * scale / 100);
+ slotUpdateTransitionProperties();
+}
+
void Geometryval::slotTransparencyChanged(int transp)
{
int pos = m_ui.spinPos->value();
// no keyframe under cursor
return;
}
+ QRectF r = m_paramRect->rect().normalized();
item.x(m_paramRect->pos().x());
item.y(m_paramRect->pos().y());
- item.w(m_paramRect->rect().width());
- item.h(m_paramRect->rect().height());
+ item.w(r.width());
+ item.h(r.height());
m_geom->insert(item);
updateTransitionPath();
emit parameterChanged();
}
+
+void Geometryval::slotGeometry()
+{
+ int pos = m_ui.spinPos->value();
+ Mlt::GeometryItem item;
+ int error = m_geom->fetch(&item, pos);
+ if (error || item.key() == false) {
+ // no keyframe under cursor
+ return;
+ }
+ QRectF r = m_paramRect->rect().normalized();
+
+ QDialog d(this);
+ m_view = new Ui::GeometryPosition_UI();
+ m_view->setupUi(&d);
+ d.setWindowTitle(i18n("Frame Geometry"));
+ m_view->value_x->setMaximum(10000);
+ m_view->value_x->setMinimum(-10000);
+ m_view->value_y->setMaximum(10000);
+ m_view->value_y->setMinimum(-10000);
+ m_view->value_width->setMaximum(500000);
+ m_view->value_width->setMinimum(1);
+ m_view->value_height->setMaximum(500000);
+ m_view->value_height->setMinimum(1);
+
+ m_view->value_x->setValue(m_paramRect->pos().x());
+ m_view->value_y->setValue(m_paramRect->pos().y());
+ m_view->value_width->setValue(r.width());
+ m_view->value_height->setValue(r.height());
+ connect(m_view->button_reset , SIGNAL(clicked()) , this , SLOT(slotResetPosition()));
+
+ if (d.exec() == QDialog::Accepted) {
+ m_paramRect->setPos(m_view->value_x->value(), m_view->value_y->value());
+ m_paramRect->setRect(0, 0, m_view->value_width->value(), m_view->value_height->value());
+ slotUpdateTransitionProperties();
+ }
+ delete m_view;
+}
+
+void Geometryval::slotResetPosition()
+{
+ m_view->value_x->setValue(0);
+ m_view->value_y->setValue(0);
+
+ if (m_frameSize.isNull()) {
+ m_view->value_width->setValue(m_profile.width);
+ m_view->value_height->setValue(m_profile.height);
+ } else {
+ m_view->value_width->setValue(m_frameSize.x());
+ m_view->value_height->setValue(m_frameSize.y());
+ }
+}