diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,8 +33,8 @@
NotifyConfig
NewStuff
Notifications
+ WindowSystem
XmlGui
- KDELibs4Support
)
include_directories (${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,6 +14,7 @@
########### next target ###############
set(kwordquiz_SRCS
+ filterproxysearchline.cpp
kwordquizprefs.cpp
kwordquiz.cpp
main.cpp
@@ -83,7 +84,7 @@
KF5::NotifyConfig
KF5::XmlGui
KF5::GuiAddons
- KF5::KDELibs4Support
+ KF5::WindowSystem
LibKEduVocDocumentImport__KEduVocDocument
Phonon::phonon4qt5
)
diff --git a/src/cleardialogbase.ui b/src/cleardialogbase.ui
--- a/src/cleardialogbase.ui
+++ b/src/cleardialogbase.ui
@@ -16,7 +16,7 @@
0
-
-
+
Selection
@@ -110,14 +110,6 @@
-
-
- KButtonGroup
- QGroupBox
-
- 1
-
-
diff --git a/src/filterproxysearchline.h b/src/filterproxysearchline.h
new file mode 100644
--- /dev/null
+++ b/src/filterproxysearchline.h
@@ -0,0 +1,49 @@
+/*
+ * This file is part of KDevelop
+ *
+ * Copyright 2018 Friedrich W. H. Kossebau
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KDEPROVIDER_FILTERPROXYSEARCHLINE_H
+#define KDEPROVIDER_FILTERPROXYSEARCHLINE_H
+
+// Qt
+#include
+
+class QTimer;
+class QSortFilterProxyModel;
+
+class FilterProxySearchLine : public QLineEdit
+{
+ Q_OBJECT
+
+public:
+ explicit FilterProxySearchLine(QWidget* parent = nullptr);
+
+public:
+ void setFilterProxyModel(QSortFilterProxyModel* filterProxyModel);
+
+private:
+ void updateFilter();
+
+private:
+ QTimer* m_delayTimer;
+ QSortFilterProxyModel* m_filterProxyModel = nullptr;
+};
+
+#endif
diff --git a/src/filterproxysearchline.cpp b/src/filterproxysearchline.cpp
new file mode 100644
--- /dev/null
+++ b/src/filterproxysearchline.cpp
@@ -0,0 +1,58 @@
+/*
+ * This file is part of KDevelop
+ *
+ * Copyright 2018 Friedrich W. H. Kossebau
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "filterproxysearchline.h"
+
+// KF
+#include
+// Qt
+#include
+#include
+
+
+FilterProxySearchLine::FilterProxySearchLine(QWidget *parent)
+ : QLineEdit(parent)
+ , m_delayTimer(new QTimer(this))
+{
+ setClearButtonEnabled(true);
+ setPlaceholderText(i18n("Search"));
+
+ m_delayTimer->setSingleShot(true);
+ m_delayTimer->setInterval(300);
+ connect(m_delayTimer, &QTimer::timeout,
+ this, &FilterProxySearchLine::updateFilter);
+ connect(this, &FilterProxySearchLine::textChanged,
+ m_delayTimer, static_cast(&QTimer::start));
+}
+
+void FilterProxySearchLine::setFilterProxyModel(QSortFilterProxyModel* filterProxyModel)
+{
+ m_filterProxyModel = filterProxyModel;
+}
+
+void FilterProxySearchLine::updateFilter()
+{
+ if (!m_filterProxyModel) {
+ return;
+ }
+
+ m_filterProxyModel->setFilterFixedString(text());
+}
diff --git a/src/kwordquiz.h b/src/kwordquiz.h
--- a/src/kwordquiz.h
+++ b/src/kwordquiz.h
@@ -27,13 +27,14 @@
#include
#include
+#include "filterproxysearchline.h"
#include "kwqquizmodel.h"
class KActionMenu;
class KRecentFilesAction;
class KPageWidget;
class KPageWidgetItem;
-class KFilterProxySearchLine;
+class FilterProxySearchLine;
class KEduVocDocument;
class KWQTableModel;
class KWQSortFilterModel;
@@ -249,7 +250,7 @@
KWordQuizPrefs *m_prefDialog;
- KFilterProxySearchLine *m_searchLine;
+ FilterProxySearchLine *m_searchLine;
/** m_doc represents your actual document and is created only once. It keeps
* information such as filename and does the serialization of your files.
diff --git a/src/kwordquiz.cpp b/src/kwordquiz.cpp
--- a/src/kwordquiz.cpp
+++ b/src/kwordquiz.cpp
@@ -32,7 +32,7 @@
#include
#include
-#include
+//#include
#include
#include
#include
@@ -50,13 +50,13 @@
#include
#include
#include
-#include
#include
#include
#include
#include
#include
+#include "filterproxysearchline.h"
#include "keduvocdocument.h"
#include "keduvoclesson.h"
#include "keduvocexpression.h"
@@ -461,8 +461,7 @@
updateSpecialCharIcons();
- if (!initialGeometrySet())
- resize( QSize(650, 450).expandedTo(minimumSizeHint()));
+ resize( QSize(650, 450).expandedTo(minimumSizeHint()));
setupGUI(ToolBar | Keys | StatusBar | Create);
setAutoSaveSettings();
@@ -518,10 +517,10 @@
QVBoxLayout *editorLayout = new QVBoxLayout();
editorLayout->setMargin(0);
- m_searchLine = new KFilterProxySearchLine(this);
- m_searchLine->lineEdit()->setFocusPolicy(Qt::ClickFocus);
- m_searchLine->lineEdit()->setPlaceholderText(i18n("Enter search terms here"));
- m_searchLine->setProxy(m_sortFilterModel);
+ m_searchLine = new FilterProxySearchLine(this);
+ m_searchLine->setFocusPolicy(Qt::ClickFocus);
+ m_searchLine->setPlaceholderText(i18n("Enter search terms here"));
+ m_searchLine->setFilterProxyModel(m_sortFilterModel);
m_tableView = new KWQTableView(m_undoStack, this);
editorLayout->addWidget(m_searchLine);
@@ -699,16 +698,13 @@
bool modified = _cfg.readEntry("modified", false);
if(modified)
{
- bool canRecover;
- QString tempname = kapp->checkRecoverFile(filename, canRecover);
- QUrl _url(tempname);
-
- if(canRecover)
- {
- m_doc->open(_url);
- setWindowTitle(_url.fileName() + "[*]");
- setWindowModified(true);
- QFile::remove(tempname);
+ QTemporaryFile tmpfile(filename);
+ if (tmpfile.open()) {
+ QUrl _url(QUrl::fromLocalFile(tmpfile.fileName()));
+ m_doc->open(_url);
+ m_doc->setModified();
+ setWindowTitle(_url.fileName() + "[*]");
+ setWindowModified(true);
}
}
else
diff --git a/src/kwqcardscene.cpp b/src/kwqcardscene.cpp
--- a/src/kwqcardscene.cpp
+++ b/src/kwqcardscene.cpp
@@ -148,7 +148,7 @@
void KWQCardScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
- QGraphicsItem *item = itemAt(mouseEvent->scenePos());
+ QGraphicsItem *item = itemAt(mouseEvent->scenePos(), QTransform());
if (item != 0)
emit cardClicked();
QGraphicsScene::mouseReleaseEvent(mouseEvent);
diff --git a/src/kwqcleardialog.cpp b/src/kwqcleardialog.cpp
--- a/src/kwqcleardialog.cpp
+++ b/src/kwqcleardialog.cpp
@@ -41,11 +41,10 @@
okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
- //PORTING SCRIPT: WARNING mainLayout->addWidget(buttonBox) must be last item in layout. Please move it.
mainLayout->addWidget(buttonBox);
setupUi(mainWidget);
- connect(clearButtonGroup, &KButtonGroup::changed, this, &KWQClearDialog::buttonGroupChanged);
+ connect(clearButtonGroup, &QGroupBox::clicked, this, &KWQClearDialog::buttonGroupChanged);
updateCheckBoxes();
}
diff --git a/src/kwqtablemodel.cpp b/src/kwqtablemodel.cpp
--- a/src/kwqtablemodel.cpp
+++ b/src/kwqtablemodel.cpp
@@ -213,8 +213,9 @@
void KWQTableModel::setDocument(KEduVocDocument * doc)
{
+ beginResetModel();
m_doc = doc;
- reset();
+ endResetModel();
}
bool KWQTableModel::isEmpty()
diff --git a/src/kwqtableview.h b/src/kwqtableview.h
--- a/src/kwqtableview.h
+++ b/src/kwqtableview.h
@@ -81,6 +81,7 @@
void verticalHeaderResized(int, int, int);
void horizontalHeaderResized(int, int, int);
void horizontalHeaderDataChanged(Qt::Orientation, int, int);
+ void slotPrintPreviewRequested(QPrinter* printer);
private:
// Disable from public calling; use setFilterModel() instead.
diff --git a/src/kwqtableview.cpp b/src/kwqtableview.cpp
--- a/src/kwqtableview.cpp
+++ b/src/kwqtableview.cpp
@@ -17,28 +17,27 @@
#include "kwqtableview.h"
+#include
+#include
+#include
+#include
#include
-#include
-#include
+#include
+#include
+#include
#include
+#include
#include
-#include
-#include
+#include
#include
-#include
+#include
+#include
#include
-#include
#include
-#include
-#include
-#include
-#include
+#include
#include
#include
-#include
-#include
-#include
#include
#include "kwqtablemodel.h"
@@ -78,7 +77,8 @@
WQPrintDialogPage * p = new WQPrintDialogPage(this);
p->setPrintStyle(Prefs::printStyle());
- QPrintDialog *printDialog = KdePrint::createPrintDialog(&printer, QList() << p, this);
+ QPrintDialog *printDialog = new QPrintDialog(&printer, this);
+ printDialog->setOptionTabs(QList() << p);
if (printDialog->exec() == QDialog::Accepted) {
Prefs::setPrintStyle(p->printStyle());
QTextDocument td;
@@ -90,11 +90,17 @@
void KWQTableView::doPrintPreview()
{
QPrinter printer;
- QPointer preview = new KPrintPreview(&printer, this);
+ QPrintPreviewDialog preview(&printer);
+
+ connect(&preview, &QPrintPreviewDialog::paintRequested, this, &KWQTableView::slotPrintPreviewRequested);
+
+ preview.exec();
+}
+
+void KWQTableView::slotPrintPreviewRequested(QPrinter* printer)
+{
QTextDocument td;
- createPages(&printer, &td, true);
- preview->exec();
- delete preview;
+ KWQTableView::createPages(printer, &td, true);
}
bool KWQTableView::doHtmlExport(const QUrl &url)
@@ -717,11 +723,23 @@
void KWQTableView::doVocabImage()
{
QUrl currentUrl(model()->data(currentIndex(), KWQTableModel::ImageRole).toString());
+ QStringList imageFormats;
+ for(const QByteArray b: QImageReader::supportedMimeTypes()) {
+ if (! b.isEmpty()) imageFormats.append(QString(b));
+ }
- QUrl imageUrl = KFileDialog::getImageOpenUrl(currentUrl, this, i18n("Select Image"));
- if (!imageUrl.isEmpty()) {
- KWQCommandImage *kwqc = new KWQCommandImage(this, imageUrl);
- m_undoStack->push(kwqc);
+ QFileDialog imageOpenDialog(this);
+ imageOpenDialog.setWindowTitle(i18nc("@title:window", "Select Image"));
+ imageOpenDialog.setDirectory(currentUrl.path());
+ imageOpenDialog.setMimeTypeFilters(imageFormats);
+ imageOpenDialog.setAcceptMode(QFileDialog::AcceptOpen);
+ imageOpenDialog.setFileMode(QFileDialog::ExistingFile);
+ if (imageOpenDialog.exec() == QDialog::Accepted) {
+ QUrl imageUrl = QUrl::fromLocalFile(imageOpenDialog.selectedFiles().first());
+ if (!imageUrl.isEmpty()) {
+ KWQCommandImage *kwqc = new KWQCommandImage(this, imageUrl);
+ m_undoStack->push(kwqc);
+ }
}
}
@@ -730,7 +748,7 @@
{
QUrl currentUrl(model()->data(currentIndex(), KWQTableModel::SoundRole).toString());
- QUrl soundUrl = QFileDialog::getOpenFileUrl(this, i18n("Select Sound"), currentUrl, i18n("*|All Files"));
+ QUrl soundUrl = QFileDialog::getOpenFileUrl(this, i18n("Select Sound"), currentUrl, i18n("All Files (*)"));
if (!soundUrl.isEmpty()) {
KWQCommandSound *kwqc = new KWQCommandSound(this, soundUrl);
m_undoStack->push(kwqc);
diff --git a/src/kwqtutor.cpp b/src/kwqtutor.cpp
--- a/src/kwqtutor.cpp
+++ b/src/kwqtutor.cpp
@@ -26,7 +26,7 @@
#include
#include
#include
-#include
+#include
#include
#include
#include
@@ -140,14 +140,12 @@
void KWQTutor::loadFile()
{
QString filter = KEduVocDocument::pattern(KEduVocDocument::Reading);
- QPointer fd = new KFileDialog(QUrl(), filter, 0);
- fd->setOperationMode(KFileDialog::Opening);
- fd->setMode(KFile::File | KFile::ExistingOnly);
- fd->setWindowTitle(i18n("Open Vocabulary Document"));
+ QPointer fd = new QFileDialog(nullptr, i18n("Open Vocabulary Document"), QString(), filter);
+ fd->setFileMode(QFileDialog::ExistingFiles);
if (fd->exec() == QDialog::Accepted)
{
- m_tutorDoc->open(fd->selectedUrl());
- Prefs::setLastVocabFile(fd->selectedUrl().toLocalFile());
+ m_tutorDoc->open(fd->selectedUrls().at(0));
+ Prefs::setLastVocabFile(fd->selectedUrls().at(0).toLocalFile());
if (Prefs::startExerciseAsSoonAsFileIsLoaded())
startStopPressed();
}
diff --git a/src/preftutor.cpp b/src/preftutor.cpp
--- a/src/preftutor.cpp
+++ b/src/preftutor.cpp
@@ -21,7 +21,7 @@
PrefTutor::PrefTutor(QWidget *parent) : QWidget(parent)
{
setupUi(this);
- connect(kcfg_TutorTiming, &KButtonGroup::changed, this, &PrefTutor::timingChanged);
+ connect(kcfg_TutorTiming, &QGroupBox::clicked, this, &PrefTutor::timingChanged);
}
void PrefTutor::timingChanged (int id)
diff --git a/src/preftutorbase.ui b/src/preftutorbase.ui
--- a/src/preftutorbase.ui
+++ b/src/preftutorbase.ui
@@ -12,7 +12,7 @@
-
-
+
Tutor Timing
@@ -156,7 +156,7 @@
-
-
+
Flashcard Appearance
@@ -215,14 +215,6 @@
-
-
- KButtonGroup
- QGroupBox
-
- 1
-
-
kcfg_StartExerciseAsSoonAsFileIsLoaded