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 -
kbuttongroup.h
- 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 -
kbuttongroup.h
- 1 -
-
kcfg_StartExerciseAsSoonAsFileIsLoaded