+void MainWindow::slotFind() {
+ m_projectSearch->setEnabled(false);
+ m_findActivated = true;
+ m_findString = QString();
+ TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
+ currentTab->projectView()->initSearchStrings();
+ statusBar()->showMessage(i18n("Starting -- find text as you type"));
+ m_findTimer.start(5000);
+ qApp->installEventFilter(this);
+}
+
+void MainWindow::slotFindNext() {
+ TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
+ if (currentTab->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() {
+ TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
+ if (currentTab->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);
+ TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
+ currentTab->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);
+ }
+}
+