+void MainWindow::slotCopy() {
+ if (!m_activeDocument || !m_activeTimeline) return;
+ m_activeTimeline->projectView()->copyClip();
+}
+
+void MainWindow::slotPaste() {
+ if (!m_activeDocument || !m_activeTimeline) return;
+ m_activeTimeline->projectView()->pasteClip();
+}
+
+void MainWindow::slotPasteEffects() {
+ if (!m_activeDocument || !m_activeTimeline) return;
+ m_activeTimeline->projectView()->pasteClipEffects();
+}
+
+void MainWindow::slotFind() {
+ if (!m_activeDocument || !m_activeTimeline) return;
+ m_projectSearch->setEnabled(false);
+ m_findActivated = true;
+ m_findString = QString();
+ m_activeTimeline->projectView()->initSearchStrings();
+ statusBar()->showMessage(i18n("Starting -- find text as you type"));
+ m_findTimer.start(5000);
+ qApp->installEventFilter(this);
+}
+
+void MainWindow::slotFindNext() {
+ if (m_activeTimeline && m_activeTimeline->projectView()->findNextString(m_findString)) {
+ statusBar()->showMessage(i18n("Found : %1", m_findString));
+ } else {
+ statusBar()->showMessage(i18n("Reached end of project"));
+ }
+ m_findTimer.start(4000);
+}
+
+void MainWindow::findAhead() {
+ if (m_activeTimeline && m_activeTimeline->projectView()->findString(m_findString)) {
+ m_projectSearchNext->setEnabled(true);
+ statusBar()->showMessage(i18n("Found : %1", m_findString));
+ } else {
+ m_projectSearchNext->setEnabled(false);
+ statusBar()->showMessage(i18n("Not found : %1", m_findString));
+ }
+}
+
+void MainWindow::findTimeout() {
+ m_projectSearchNext->setEnabled(false);
+ m_findActivated = false;
+ m_findString = QString();
+ statusBar()->showMessage(i18n("Find stopped"), 3000);
+ if (m_activeTimeline) m_activeTimeline->projectView()->clearSearchStrings();
+ m_projectSearch->setEnabled(true);
+ removeEventFilter(this);
+}
+
+void MainWindow::keyPressEvent(QKeyEvent *ke) {
+ if (m_findActivated) {
+ if (ke->key() == Qt::Key_Backspace) {
+ m_findString = m_findString.left(m_findString.length() - 1);
+
+ if (!m_findString.isEmpty()) {
+ findAhead();
+ } else {
+ findTimeout();
+ }
+
+ m_findTimer.start(4000);
+ ke->accept();
+ return;
+ } else if (ke->key() == Qt::Key_Escape) {
+ findTimeout();
+ ke->accept();
+ return;
+ } else if (ke->key() == Qt::Key_Space || !ke->text().trimmed().isEmpty()) {
+ m_findString += ke->text();
+
+ findAhead();
+
+ m_findTimer.start(4000);
+ ke->accept();
+ return;
+ }
+ } else KXmlGuiWindow::keyPressEvent(ke);
+}
+
+bool MainWindow::eventFilter(QObject *obj, QEvent *event) {
+ if (m_findActivated) {
+ if (event->type() == QEvent::ShortcutOverride) {
+ QKeyEvent* ke = (QKeyEvent*) event;
+ if (ke->text().trimmed().isEmpty()) return false;
+ ke->accept();
+ return true;
+ } else return false;
+ } else {
+ // pass the event on to the parent class
+ return QMainWindow::eventFilter(obj, event);
+ }
+}
+
+void MainWindow::slotSaveZone(Render *render, QPoint zone) {
+ KDialog *dialog = new KDialog(this);
+ dialog->setCaption("Save clip zone");
+ dialog->setButtons(KDialog::Ok | KDialog::Cancel);
+
+ QWidget *widget = new QWidget(dialog);
+ dialog->setMainWidget(widget);
+
+ QVBoxLayout *vbox = new QVBoxLayout(widget);
+ QLabel *label1 = new QLabel(i18n("Save clip zone as:"), this);
+ QString path = m_activeDocument->projectFolder().path();
+ path.append("/");
+ path.append("untitled.westley");
+ KUrlRequester *url = new KUrlRequester(KUrl(path), this);
+ url->setFilter("video/mlt-playlist");
+ QLabel *label2 = new QLabel(i18n("Description:"), this);
+ KLineEdit *edit = new KLineEdit(this);
+ vbox->addWidget(label1);
+ vbox->addWidget(url);
+ vbox->addWidget(label2);
+ vbox->addWidget(edit);
+ if (dialog->exec() == QDialog::Accepted) render->saveZone(url->url(), edit->text(), zone);
+
+}
+
+void MainWindow::slotSetInPoint() {
+ if (m_clipMonitor->isActive()) {
+ m_clipMonitor->slotSetZoneStart();
+ } else m_activeTimeline->projectView()->setInPoint();
+}
+
+void MainWindow::slotSetOutPoint() {
+ if (m_clipMonitor->isActive()) {
+ m_clipMonitor->slotSetZoneEnd();
+ } else m_activeTimeline->projectView()->setOutPoint();
+}
+