File indexing completed on 2024-04-28 07:39:24
0001 /* 0002 SPDX-FileCopyrightText: 1999-2001 Ewald Arnold <kvoctrain@ewald-arnold.de> 0003 SPDX-FileCopyrightText: 2004-2007 Peter Hedlund <peter.hedlund@kdemail.net> 0004 SPDX-FileCopyrightText: 2007-2009 Frederik Gladhorn <gladhorn@kde.org> 0005 SPDX-FileCopyrightText: 2008 Daniel Laidig <d.laidig@gmx.de> 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "editor.h" 0010 0011 #include <config-parley.h> 0012 0013 // Qt models on top of the KEduVocDocument 0014 #include "containermodel.h" 0015 #include "lessonmodel.h" 0016 #include "vocabularyfilter.h" 0017 #include "vocabularymodel.h" 0018 #include "wordclassmodel.h" 0019 0020 // Views 0021 #include "containerview.h" 0022 #include "lessonview.h" 0023 #include "vocabularyview.h" 0024 #include "wordtypeview.h" 0025 0026 #include "audiowidget.h" 0027 #include "browserwidget.h" 0028 #include "comparisonwidget.h" 0029 #include "imagechooserwidget.h" 0030 #include "inflectionwidget.h" 0031 #include "latexwidget.h" 0032 #include "multiplechoicewidget.h" 0033 #include "parleyactions.h" 0034 #include "parleyadaptor.h" 0035 #include "parleymainwindow.h" 0036 #include "prefs.h" 0037 #include "settings/parleyprefs.h" 0038 #include "summarywordwidget.h" 0039 #include "synonymwidget.h" 0040 0041 #include <KActionCollection> 0042 #include <KActionMenu> 0043 #include <KCharSelect> 0044 #include <KToggleAction> 0045 0046 #include <QDockWidget> 0047 #include <QHeaderView> 0048 #include <QMenu> 0049 #include <QScrollArea> 0050 #include <QStackedWidget> 0051 #include <QTimer> 0052 0053 using namespace Editor; 0054 0055 EditorWindow::EditorWindow(ParleyMainWindow *parent) 0056 : KXmlGuiWindow(parent) 0057 , m_mainWindow(parent) 0058 { 0059 // KXmlGui 0060 setXMLFile(QStringLiteral("editorui.rc")); 0061 setObjectName(QStringLiteral("Editor")); 0062 0063 setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); 0064 setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); 0065 setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); 0066 setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); 0067 0068 initView(); 0069 initModel(); 0070 0071 initDockWidgets(); 0072 initActions(); 0073 0074 KConfigGroup cfg(KSharedConfig::openConfig(QStringLiteral("parleyrc")), objectName()); 0075 applyMainWindowSettings(cfg); 0076 0077 connect(parent->parleyDocument(), &ParleyDocument::documentChanged, this, &EditorWindow::updateDocument); 0078 connect(parent->parleyDocument(), &ParleyDocument::languagesChanged, this, &EditorWindow::slotLanguagesChanged); 0079 connect(parent->parleyDocument(), SIGNAL(statesNeedSaving()), this, SLOT(saveState())); 0080 connect(parent, &ParleyMainWindow::preferencesChanged, this, &EditorWindow::applyPrefs); 0081 } 0082 0083 EditorWindow::~EditorWindow() 0084 { 0085 saveState(); 0086 KConfigGroup cfg(KSharedConfig::openConfig(QStringLiteral("parleyrc")), objectName()); 0087 saveMainWindowSettings(cfg); 0088 } 0089 0090 void EditorWindow::updateDocument(const std::shared_ptr<KEduVocDocument> &doc) 0091 { 0092 m_vocabularyView->setDocument(doc); 0093 m_vocabularyModel->setDocument(doc.get()); 0094 0095 m_lessonModel->setDocument(doc); 0096 m_wordTypeModel->setDocument(doc); 0097 0098 m_summaryWordWidget->slotDocumentChanged(doc); 0099 m_inflectionWidget->setDocument(doc); 0100 m_comparisonWidget->setDocument(doc.get()); 0101 m_synonymWidget->setDocument(doc.get()); 0102 m_antonymWidget->setDocument(doc.get()); 0103 m_falseFriendWidget->setDocument(doc.get()); 0104 m_audioWidget->setDocument(doc.get()); 0105 0106 if (!m_mainWindow->parleyDocument()->document()) { 0107 return; 0108 } 0109 0110 if (!doc) { 0111 return; 0112 } 0113 0114 // expand the root items 0115 m_lessonView->expandToDepth(0); 0116 m_wordTypeView->expandToDepth(0); 0117 0118 connect(m_vocabularyView->selectionModel(), &QItemSelectionModel::selectionChanged, m_summaryWordWidget, &SummaryWordWidget::slotSelectionChanged); 0119 connect(m_vocabularyView->selectionModel(), &QItemSelectionModel::selectionChanged, m_latexWidget, &LatexWidget::slotSelectionChanged); 0120 0121 m_spellCheckMenu->menu()->clear(); 0122 for (int i = 0; i < doc->identifierCount(); ++i) { 0123 QAction *languageSpellCheck = new QAction(doc->identifier(i).name(), m_spellCheckMenu->menu()); 0124 m_spellCheckMenu->menu()->addAction(languageSpellCheck); 0125 connect(languageSpellCheck, &QAction::triggered, this, [=] { 0126 m_vocabularyView->checkSpelling(i); 0127 }); 0128 } 0129 } 0130 0131 void EditorWindow::initDockWidgets() 0132 { 0133 // Lesson dockwidget 0134 QDockWidget *lessonDockWidget = new QDockWidget(i18n("Units"), this); 0135 lessonDockWidget->setObjectName(QStringLiteral("LessonDock")); 0136 m_lessonView = new LessonView(this); 0137 lessonDockWidget->setWidget(m_lessonView); 0138 addDockWidget(Qt::LeftDockWidgetArea, lessonDockWidget); 0139 m_dockWidgets.append(lessonDockWidget); 0140 actionCollection()->addAction(QStringLiteral("show_units_dock"), lessonDockWidget->toggleViewAction()); 0141 0142 m_lessonModel = new LessonModel(this); 0143 m_lessonView->setModel(m_lessonModel); 0144 m_lessonView->setToolTip( 0145 i18n("Right click to add, delete, or rename units. \n" 0146 "With the checkboxes you can select which units you want to practice. \n" 0147 "Only checked units [x] will be asked in the practice!")); 0148 0149 connect(m_lessonView, &LessonView::selectedLessonChanged, m_vocabularyModel, &VocabularyModel::setLesson); 0150 0151 connect(m_lessonView, &LessonView::signalShowContainer, m_vocabularyModel, &VocabularyModel::showContainer); 0152 0153 connect(m_vocabularyView, &VocabularyView::translationChanged, m_lessonView, &LessonView::setTranslation); 0154 0155 // Word classes dock widget 0156 QDockWidget *wordTypeDockWidget = new QDockWidget(i18n("Word Types"), this); 0157 wordTypeDockWidget->setObjectName(QStringLiteral("WordTypeDock")); 0158 m_wordTypeView = new WordTypeView(this); 0159 wordTypeDockWidget->setWidget(m_wordTypeView); 0160 addDockWidget(Qt::LeftDockWidgetArea, wordTypeDockWidget); 0161 m_dockWidgets.append(wordTypeDockWidget); 0162 0163 m_wordTypeModel = new WordClassModel(this); 0164 wordTypeDockWidget->setVisible(false); 0165 actionCollection()->addAction(QStringLiteral("show_wordtype_dock"), wordTypeDockWidget->toggleViewAction()); 0166 0167 ///@todo test, should be fixed with the lesson one though 0168 ///@todo remove before release 0169 // new ModelTest(m_wordTypeModel, this); 0170 0171 m_wordTypeView->setModel(m_wordTypeModel); 0172 0173 connect(m_vocabularyView, &VocabularyView::translationChanged, m_wordTypeView, &WordTypeView::setTranslation); 0174 0175 // Inflections 0176 QDockWidget *inflectionDock = new QDockWidget(i18n("Inflection (verbs, adjectives, nouns)"), this); 0177 inflectionDock->setObjectName(QStringLiteral("InflectionDock")); 0178 m_inflectionWidget = new InflectionWidget(this); 0179 QScrollArea *inflectionScrollArea = new QScrollArea(this); 0180 inflectionScrollArea->setWidgetResizable(true); 0181 inflectionScrollArea->setWidget(m_inflectionWidget); 0182 inflectionDock->setWidget(inflectionScrollArea); 0183 addDockWidget(Qt::RightDockWidgetArea, inflectionDock); 0184 m_dockWidgets.append(inflectionDock); 0185 actionCollection()->addAction(QStringLiteral("show_inflection_dock"), inflectionDock->toggleViewAction()); 0186 connect(m_mainWindow->parleyDocument(), &ParleyDocument::documentChanged, m_inflectionWidget, &InflectionWidget::setDocument); 0187 connect(m_vocabularyView, &VocabularyView::translationChanged, m_inflectionWidget, &InflectionWidget::setTranslation); 0188 0189 // Comparison forms 0190 QDockWidget *comparisonDock = new QDockWidget(i18n("Comparison Forms"), this); 0191 comparisonDock->setObjectName(QStringLiteral("ComparisonDock")); 0192 m_comparisonWidget = new ComparisonWidget(this); 0193 QScrollArea *comparisonScrollArea = new QScrollArea(this); 0194 comparisonScrollArea->setWidgetResizable(true); 0195 comparisonScrollArea->setWidget(m_comparisonWidget); 0196 comparisonDock->setWidget(comparisonScrollArea); 0197 addDockWidget(Qt::RightDockWidgetArea, comparisonDock); 0198 m_dockWidgets.append(comparisonDock); 0199 actionCollection()->addAction(QStringLiteral("show_comparison_dock"), comparisonDock->toggleViewAction()); 0200 comparisonDock->setVisible(false); 0201 connect(m_vocabularyView, &VocabularyView::translationChanged, m_comparisonWidget, &ComparisonWidget::setTranslation); 0202 tabifyDockWidget(comparisonDock, inflectionDock); 0203 0204 // Multiple choice 0205 QDockWidget *multipleChoiceDock = new QDockWidget(i18n("Multiple Choice"), this); 0206 multipleChoiceDock->setObjectName(QStringLiteral("MultipleChoiceDock")); 0207 MultipleChoiceWidget *multipleChoiceWidget = new MultipleChoiceWidget(this); 0208 QScrollArea *multipleChoiceScrollArea = new QScrollArea(this); 0209 multipleChoiceScrollArea->setWidgetResizable(true); 0210 multipleChoiceScrollArea->setWidget(multipleChoiceWidget); 0211 multipleChoiceDock->setWidget(multipleChoiceScrollArea); 0212 addDockWidget(Qt::RightDockWidgetArea, multipleChoiceDock); 0213 m_dockWidgets.append(multipleChoiceDock); 0214 actionCollection()->addAction(QStringLiteral("show_multiplechoice_dock"), multipleChoiceDock->toggleViewAction()); 0215 multipleChoiceDock->setVisible(false); 0216 connect(m_vocabularyView, &VocabularyView::translationChanged, multipleChoiceWidget, &MultipleChoiceWidget::setTranslation); 0217 0218 // Synonym (and the same for antonym and false friends) 0219 QDockWidget *synonymDock = new QDockWidget(i18n("Synonyms"), this); 0220 synonymDock->setObjectName(QStringLiteral("SynonymDock")); 0221 m_synonymWidget = new SynonymWidget(SynonymWidget::Synonym, this); 0222 QScrollArea *synonymScrollArea = new QScrollArea(this); 0223 synonymScrollArea->setWidgetResizable(true); 0224 synonymScrollArea->setWidget(m_synonymWidget); 0225 synonymDock->setWidget(synonymScrollArea); 0226 addDockWidget(Qt::RightDockWidgetArea, synonymDock); 0227 m_dockWidgets.append(synonymDock); 0228 actionCollection()->addAction(QStringLiteral("show_synonym_dock"), synonymDock->toggleViewAction()); 0229 synonymDock->setVisible(false); 0230 connect(m_vocabularyView, &VocabularyView::translationChanged, m_synonymWidget, &SynonymWidget::setTranslation); 0231 0232 QDockWidget *antonymDock = new QDockWidget(i18n("Antonyms"), this); 0233 antonymDock->setObjectName(QStringLiteral("AntonymDock")); 0234 m_antonymWidget = new SynonymWidget(SynonymWidget::Antonym, this); 0235 QScrollArea *antonymScrollArea = new QScrollArea(this); 0236 antonymScrollArea->setWidgetResizable(true); 0237 antonymScrollArea->setWidget(m_antonymWidget); 0238 antonymDock->setWidget(antonymScrollArea); 0239 addDockWidget(Qt::RightDockWidgetArea, antonymDock); 0240 m_dockWidgets.append(antonymDock); 0241 actionCollection()->addAction(QStringLiteral("show_antonym_dock"), antonymDock->toggleViewAction()); 0242 antonymDock->setVisible(false); 0243 connect(m_vocabularyView, &VocabularyView::translationChanged, m_antonymWidget, &SynonymWidget::setTranslation); 0244 tabifyDockWidget(synonymDock, antonymDock); 0245 0246 QDockWidget *falseFriendDock = new QDockWidget(i18n("False Friends"), this); 0247 falseFriendDock->setObjectName(QStringLiteral("FalseFriendDock")); 0248 m_falseFriendWidget = new SynonymWidget(SynonymWidget::FalseFriend, this); 0249 QScrollArea *falseFriendScrollArea = new QScrollArea(this); 0250 falseFriendScrollArea->setWidgetResizable(true); 0251 falseFriendScrollArea->setWidget(m_falseFriendWidget); 0252 falseFriendDock->setWidget(falseFriendScrollArea); 0253 addDockWidget(Qt::RightDockWidgetArea, falseFriendDock); 0254 m_dockWidgets.append(falseFriendDock); 0255 actionCollection()->addAction(QStringLiteral("show_falsefriend_dock"), falseFriendDock->toggleViewAction()); 0256 falseFriendDock->setVisible(false); 0257 connect(m_vocabularyView, &VocabularyView::translationChanged, m_falseFriendWidget, &SynonymWidget::setTranslation); 0258 tabifyDockWidget(antonymDock, falseFriendDock); 0259 0260 // Pronunciation symbols - Use KCharSelect 0261 QDockWidget *charSelectDock = new QDockWidget(i18n("Phonetic Symbols"), this); 0262 charSelectDock->setObjectName(QStringLiteral("IPADock")); 0263 KCharSelect *charSelectWidget = new KCharSelect(this, nullptr, KCharSelect::SearchLine | KCharSelect::BlockCombos | KCharSelect::CharacterTable); 0264 charSelectWidget->setCurrentChar(QChar(0x0250)); 0265 QScrollArea *charSelectScrollArea = new QScrollArea(this); 0266 charSelectScrollArea->setWidgetResizable(true); 0267 charSelectScrollArea->setWidget(charSelectWidget); 0268 charSelectDock->setWidget(charSelectScrollArea); 0269 addDockWidget(Qt::BottomDockWidgetArea, charSelectDock); 0270 m_dockWidgets.append(charSelectDock); 0271 actionCollection()->addAction(QStringLiteral("show_pronunciation_dock"), charSelectDock->toggleViewAction()); 0272 charSelectDock->setVisible(false); 0273 connect(charSelectWidget, &KCharSelect::charSelected, m_vocabularyView, &VocabularyView::appendChar); 0274 0275 // Image 0276 QDockWidget *imageDock = new QDockWidget(i18n("Image"), this); 0277 imageDock->setObjectName(QStringLiteral("ImageDock")); 0278 ImageChooserWidget *imageChooserWidget = new ImageChooserWidget(this); 0279 QScrollArea *imageScrollArea = new QScrollArea(this); 0280 imageScrollArea->setWidgetResizable(true); 0281 imageScrollArea->setWidget(imageChooserWidget); 0282 imageDock->setWidget(imageScrollArea); 0283 addDockWidget(Qt::RightDockWidgetArea, imageDock); 0284 m_dockWidgets.append(imageDock); 0285 actionCollection()->addAction(QStringLiteral("show_image_dock"), imageDock->toggleViewAction()); 0286 imageDock->setVisible(false); 0287 connect(m_vocabularyView, &VocabularyView::translationChanged, imageChooserWidget, &ImageChooserWidget::setTranslation); 0288 tabifyDockWidget(multipleChoiceDock, imageDock); 0289 0290 // Summary word 0291 QDockWidget *summaryDock = new QDockWidget(i18n("Summary"), this); 0292 summaryDock->setObjectName(QStringLiteral("SummaryDock")); 0293 m_summaryWordWidget = new SummaryWordWidget(m_vocabularyFilter, m_mainWindow->parleyDocument()->document(), this); 0294 QScrollArea *summaryScrollArea = new QScrollArea(this); 0295 summaryScrollArea->setWidgetResizable(true); 0296 summaryScrollArea->setWidget(m_summaryWordWidget); 0297 summaryDock->setWidget(summaryScrollArea); 0298 addDockWidget(Qt::BottomDockWidgetArea, summaryDock); 0299 actionCollection()->addAction(QStringLiteral("show_summary_dock"), summaryDock->toggleViewAction()); 0300 summaryDock->setVisible(false); 0301 m_dockWidgets.append(summaryDock); 0302 connect(m_vocabularyView, &VocabularyView::translationChanged, m_summaryWordWidget, &SummaryWordWidget::setTranslation); 0303 0304 // Sound 0305 QDockWidget *audioDock = new QDockWidget(i18n("Sound"), this); 0306 audioDock->setObjectName(QStringLiteral("AudioDock")); 0307 m_audioWidget = new AudioWidget(this); 0308 QScrollArea *audioScrollArea = new QScrollArea(this); 0309 audioScrollArea->setWidgetResizable(true); 0310 audioScrollArea->setWidget(m_audioWidget); 0311 audioDock->setWidget(audioScrollArea); 0312 addDockWidget(Qt::RightDockWidgetArea, audioDock); 0313 m_dockWidgets.append(audioDock); 0314 actionCollection()->addAction(QStringLiteral("show_audio_dock"), audioDock->toggleViewAction()); 0315 audioDock->setVisible(false); 0316 connect(m_vocabularyView, &VocabularyView::translationChanged, m_audioWidget, &AudioWidget::setTranslation); 0317 tabifyDockWidget(imageDock, audioDock); 0318 0319 // browser 0320 QDockWidget *browserDock = new QDockWidget(i18n("Internet"), this); 0321 browserDock->setObjectName(QStringLiteral("BrowserDock")); 0322 BrowserWidget *htmlPart = new BrowserWidget(browserDock); 0323 QScrollArea *browserScrollArea = new QScrollArea(this); 0324 browserScrollArea->setWidgetResizable(true); 0325 browserScrollArea->setWidget(htmlPart); 0326 browserDock->setWidget(browserScrollArea); 0327 addDockWidget(Qt::BottomDockWidgetArea, browserDock); 0328 m_dockWidgets.append(browserDock); 0329 actionCollection()->addAction(QStringLiteral("show_browser_dock"), browserDock->toggleViewAction()); 0330 browserDock->setVisible(false); 0331 connect(m_vocabularyView, &VocabularyView::translationChanged, htmlPart, &BrowserWidget::setTranslation); 0332 tabifyDockWidget(summaryDock, browserDock); 0333 0334 // LaTeX 0335 QDockWidget *latexDock = new QDockWidget(i18n("LaTeX"), this); 0336 latexDock->setObjectName(QStringLiteral("LatexDock")); 0337 m_latexWidget = new LatexWidget(m_vocabularyFilter, m_mainWindow->parleyDocument()->document().get(), this); 0338 QScrollArea *latexScrollArea = new QScrollArea(this); 0339 latexScrollArea->setWidgetResizable(true); 0340 latexScrollArea->setWidget(m_latexWidget); 0341 latexDock->setWidget(latexScrollArea); 0342 addDockWidget(Qt::RightDockWidgetArea, latexDock); 0343 actionCollection()->addAction(QStringLiteral("show_latex_dock"), latexDock->toggleViewAction()); 0344 latexDock->setVisible(false); 0345 m_dockWidgets.append(latexDock); 0346 connect(m_vocabularyView, &VocabularyView::translationChanged, m_latexWidget, &LatexWidget::setTranslation); 0347 tabifyDockWidget(audioDock, latexDock); 0348 0349 // Grades 0350 // QDockWidget *gradeDock = new QDockWidget(i18n("Grade"), this); 0351 // gradeDock->setObjectName("gradeDock"); 0352 // QLabel *gradeWidget = new QLabel("grade placeholder", this); 0353 // gradeDock->setWidget(gradeWidget); 0354 // addDockWidget(Qt::RightDockWidgetArea, gradeDock); 0355 // connect(this, SIGNAL(signalSetData(KEduVocTranslation*)), m_declensionWidget, SLOT(setTranslation(KEduVocTranslation*))); 0356 } 0357 0358 void EditorWindow::initActions() 0359 { 0360 ParleyActions::create(ParleyActions::RemoveGrades, this, SLOT(removeGrades()), actionCollection()); 0361 m_spellCheckMenu = ParleyActions::create(ParleyActions::CheckSpelling, nullptr, "", actionCollection()); 0362 m_spellCheckMenu->setMenu(new QMenu(this)); 0363 0364 ParleyActions::create(ParleyActions::ToggleShowSublessons, m_vocabularyModel, SLOT(showEntriesOfSubcontainers(bool)), actionCollection()); 0365 ParleyActions::create(ParleyActions::AutomaticTranslation, m_vocabularyModel, SLOT(automaticTranslation(bool)), actionCollection()); 0366 ParleyActions::create(ParleyActions::StartPractice, m_mainWindow, SLOT(showPracticeConfiguration()), actionCollection()); 0367 actionCollection()->action(QStringLiteral("practice_start"))->setText(i18n("Practice")); 0368 actionCollection()->action(QStringLiteral("practice_start"))->setToolTip(i18n("Practice")); 0369 ParleyActions::create(ParleyActions::ConfigurePractice, m_mainWindow, SLOT(configurePractice()), actionCollection()); 0370 ParleyActions::create(ParleyActions::ToggleSearchBar, this, SLOT(slotConfigShowSearch()), actionCollection()); 0371 ParleyActions::create(ParleyActions::SearchVocabulary, this, SLOT(startSearch()), actionCollection()); 0372 ParleyActions::create(ParleyActions::LanguagesProperties, m_mainWindow->parleyDocument(), SLOT(languageProperties()), actionCollection()); 0373 0374 new EditorWindowAdaptor(this); 0375 0376 QDBusConnection dbus = QDBusConnection::sessionBus(); 0377 dbus.registerObject(QStringLiteral("/AddWithTranslation"), this); 0378 } 0379 0380 void EditorWindow::addWordWithTranslation(const QStringList &w) 0381 { 0382 KEduVocExpression *kexpr = new KEduVocExpression(w); 0383 0384 m_vocabularyModel->appendEntry(kexpr); 0385 } 0386 0387 void EditorWindow::initModel() 0388 { 0389 m_vocabularyModel = new VocabularyModel(this); 0390 m_vocabularyFilter = new VocabularyFilter(this); 0391 m_vocabularyFilter->setSourceModel(m_vocabularyModel); 0392 m_vocabularyView->setFilter(m_vocabularyFilter); 0393 0394 // connect(m_mainWindow->parleyDocument(), SIGNAL(documentChanged(KEduVocDocument*)), m_vocabularyModel, SLOT(setDocument(KEduVocDocument*))); 0395 // connect(m_mainWindow->parleyDocument(), SIGNAL(documentChanged(KEduVocDocument*)), m_vocabularyView, SLOT(setDocument(KEduVocDocument*))); 0396 connect(m_searchLine, &QLineEdit::textChanged, m_vocabularyFilter, &VocabularyFilter::setSearchString); 0397 } 0398 0399 /** 0400 * This initializes the main widgets and table. 0401 */ 0402 void EditorWindow::initView() 0403 { 0404 QWidget *mainWidget = new QWidget(this); 0405 setCentralWidget(mainWidget); 0406 QVBoxLayout *topLayout = new QVBoxLayout(mainWidget); 0407 0408 m_searchLine = new QLineEdit(this); 0409 m_searchLine->show(); 0410 m_searchLine->setFocusPolicy(Qt::ClickFocus); 0411 m_searchLine->setClearButtonEnabled(true); 0412 m_searchLine->setPlaceholderText(i18n("Enter search terms here")); 0413 m_searchLine->setToolTip(i18n("Search your vocabulary")); 0414 0415 QLabel *label = new QLabel(i18n("S&earch:"), this); 0416 label->setBuddy(m_searchLine); 0417 label->show(); 0418 0419 m_searchWidget = new QWidget(this); 0420 QHBoxLayout *layout = new QHBoxLayout(m_searchWidget); 0421 layout->setContentsMargins(0, 0, 0, 0); 0422 layout->addWidget(label); 0423 layout->addWidget(m_searchLine); 0424 0425 ///@todo centralWidget()-> delete layout 0426 QVBoxLayout *rightLayout = new QVBoxLayout(); 0427 rightLayout->setContentsMargins(0, 0, 0, 0); 0428 rightLayout->addWidget(m_searchWidget); 0429 m_searchWidget->setVisible(Prefs::showSearch()); 0430 0431 m_vocabularyView = new VocabularyView(this); 0432 rightLayout->addWidget(m_vocabularyView, 1); 0433 0434 topLayout->addLayout(rightLayout); 0435 } 0436 0437 void EditorWindow::slotConfigShowSearch() 0438 { 0439 m_searchWidget->setVisible(m_searchWidget->isHidden()); 0440 Prefs::setShowSearch(m_searchWidget->isVisible()); 0441 } 0442 0443 void EditorWindow::startSearch() 0444 { 0445 m_searchWidget->setVisible(true); 0446 m_searchLine->setFocus(); 0447 } 0448 0449 void EditorWindow::applyPrefs() 0450 { 0451 m_vocabularyView->reset(); 0452 } 0453 0454 void EditorWindow::removeGrades() 0455 { 0456 m_mainWindow->parleyDocument()->document()->lesson()->resetGrades(-1, KEduVocContainer::Recursive); 0457 } 0458 0459 void EditorWindow::saveState() 0460 { 0461 m_vocabularyView->saveColumnVisibility(); 0462 } 0463 0464 void EditorWindow::slotLanguagesChanged() 0465 { 0466 m_vocabularyModel->resetLanguages(); 0467 } 0468 0469 #include "moc_editor.cpp"