diff --git a/keduvocdocument/CMakeLists.txt b/keduvocdocument/CMakeLists.txt index 7032955..380fd0c 100644 --- a/keduvocdocument/CMakeLists.txt +++ b/keduvocdocument/CMakeLists.txt @@ -1,235 +1,237 @@ if (BUILD_TESTING) add_subdirectory(autotests) add_subdirectory(tests) endif() ########### next target ############### include(ECMSetupVersion) ecm_setup_version(5.0.0 VARIABLE_PREFIX KDEEDU VERSION_HEADER "${CMAKE_BINARY_DIR}/keduvocdocument/keduvocdocument_version.h" PACKAGE_VERSION_FILE "${CMAKE_BINARY_DIR}/KEduVocDocumentVersion.cmake") include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) set(keduvocdocument_LIB_SRCS keduvocdocument.cpp keduvocidentifier.cpp keduvocexpression.cpp keduvoctranslation.cpp keduvoccontainer.cpp keduvoclesson.cpp keduvocleitnerbox.cpp keduvoctext.cpp keduvocarticle.cpp keduvocconjugation.cpp keduvocpersonalpronoun.cpp keduvocdeclension.cpp keduvocwordtype.cpp keduvockvtmlcompability.cpp keduvockvtml2writer.cpp keduvoccsvwriter.cpp keduvoccontainermodel.cpp keduvoclessonmodel.cpp keduvocreadonlycontainermodel.cpp keduvocvocabularymodel.cpp keduvocwordclassmodel.cpp keduvoccontainermimedata.cpp keduvocvocabularymimedata.cpp keduvocvocabularyfilter.cpp keduvoctranslator.cpp keduvocvocabularydelegate.cpp keduvocvocabularyheaderview.cpp keduvocvocabularycolumnsdialog.cpp keduvoccontainerview.cpp keduvocvocabularyview.cpp keduvocwordtypeview.cpp keduvoclessonview.cpp keduvocaudiowidget.cpp keduvocmultiplechoicewidget.cpp keduvoccomparisonwidget.cpp keduvocdeclensionwidget.cpp keduvocconjugationwidget.cpp keduvocinflectionwidget.cpp keduvocimagewidget.cpp keduvocimagechooserwidget.cpp keduvocsynonymwidget.cpp keduvocsummarywordwidget.cpp keduvoclatexrenderer.cpp keduvoclatexwidget.cpp keduvocscript.cpp keduvocdocumentproperties.cpp keduvoclanguagepropertiespage.cpp + keduvoclanguageproperties.cpp readerwriters/dummyreader.cpp readerwriters/failedreader.cpp readerwriters/keduvockvtmlreader.cpp readerwriters/keduvockvtml2reader.cpp readerwriters/keduvoccsvreader.cpp readerwriters/keduvocpaukerreader.cpp readerwriters/keduvocvokabelnreader.cpp readerwriters/keduvocwqlreader.cpp readerwriters/keduvocxdxfreader.cpp readerwriters/readermanager.cpp sharedkvtmlfiles.cpp ) ki18n_wrap_ui(keduvocdocument_LIB_SRCS keduvocaudiowidget.ui keduvocmultiplechoicewidget.ui keduvoccomparisonwidget.ui keduvocdeclensionwidget.ui keduvocconjugationwidget.ui keduvocimagechooserwidget.ui keduvocsynonymwidget.ui keduvocsummarywordwidget.ui keduvoclatexwidget.ui keduvocdocumentproperties.ui keduvoclanguagepropertiespage.ui ) include(ECMGenerateHeaders) ecm_generate_headers( KdeEdu_HEADERS HEADER_NAMES KEduVocDocument KEduVocIdentifier KEduVocExpression KEduVocText KEduVocArticle KEduVocConjugation KEduVocLesson KEduVocLeitnerBox KEduVocContainer KEduVocWordFlags KEduVocMultipleChoice KEduVocTranslation KEduVocWordtype KEduVocPersonalPronoun SharedKVTMLFiles KEduVocDeclension KEduVocKVTML2Writer KEduVocContainerModel KEduVocLessonModel KEduVocReadOnlyContainerModel KEduVocVocabularyModel KEduVocWordClassModel KEduVocContainerMimeData KEduVocVocabularyMimeData KEduVocVocabularyFilter KEduVocTranslator KEduVocVocabularyDelegate KEduVocVocabularyHeaderView KEduVocVocabularyColumnsDialog KEduVocContainerView KEduVocVocabularyView KEduVocWordTypeView KEduVocLessonView KEduVocAudioWidget KEduVocMultipleChoiceWidget KEduVocComparisonWidget KEduVocDeclensionWidget KEduVocConjugationWidget KEduVocInflectionWidget KEduVocImageWidget KEduVocImageChooserWidget KEduVocSynonymWidget KEduVocSummaryWordWidget KEduVocLatexRenderer KEduVocLatexWidget KEduVocScript KEduVocDocumentProperties KEduVocLanguagePropertiesPage + KEduVocLanguageProperties REQUIRED_HEADERS KdeEdu_HEADERS ) add_library(KEduVocDocument SHARED ${keduvocdocument_LIB_SRCS}) generate_export_header(KEduVocDocument BASE_NAME KEduVocDocument) # vHanda: Add library alias? target_link_libraries(KEduVocDocument PUBLIC Qt5::Xml Qt5::Gui Qt5::Core Qt5::Widgets Qt5::DBus Qt5::Multimedia PRIVATE KF5::I18n KF5::KIOCore KF5::KIOFileWidgets KF5::KIOWidgets KF5::KIONTLM KF5::Archive KF5::Completion KF5::WidgetsAddons KF5::SonnetCore KF5::SonnetUi KF5::Notifications KF5::XmlGui KF5::KrossCore KF5::KrossUi ) # vHanda: Add Export Name? set_target_properties(KEduVocDocument PROPERTIES VERSION ${KDEEDU_VERSION_STRING} SOVERSION ${KDEEDU_SOVERSION} ) target_include_directories(KEduVocDocument INTERFACE "$") #Library for non-api unittests add_library(keduvocdocument_static STATIC ${keduvocdocument_LIB_SRCS}) set_target_properties(keduvocdocument_static PROPERTIES COMPILE_FLAGS -DKEDUVOCDOCUMENT_STATIC_DEFINE) target_link_libraries(keduvocdocument_static PUBLIC KF5::KIOCore Qt5::Xml Qt5::Core Qt5::Gui Qt5::Widgets Qt5::DBus Qt5::Multimedia PRIVATE KF5::I18n KF5::KIOCore KF5::KIOFileWidgets KF5::KIOWidgets KF5::KIONTLM KF5::Archive KF5::Completion KF5::WidgetsAddons KF5::SonnetCore KF5::SonnetUi KF5::Notifications KF5::XmlGui KF5::KrossCore KF5::KrossUi ) # if we want to set our own version instead of following kde generic #set(LIB_KEDUVOCDOCUMENT_VERSION "5.0.0") #set(LIB_KEDUVOCDOCUMENT_SOVERSION "5") #set_target_properties(keduvocdocument # PROPERTIES VERSION ${LIB_KEDUVOCDOCUMENT_VERSION} # SOVERSION ${LIB_KEDUVOCDOCUMENT_SOVERSION} #) install(TARGETS KEduVocDocument EXPORT LibKEduVocDocumentTargets ${INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### install(FILES ${CMAKE_CURRENT_BINARY_DIR}/keduvocdocument_export.h ${KdeEdu_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/libkeduvocdocument COMPONENT Devel ) diff --git a/keduvocdocument/keduvoclanguageproperties.cpp b/keduvocdocument/keduvoclanguageproperties.cpp new file mode 100644 index 0000000..d1c09d3 --- /dev/null +++ b/keduvocdocument/keduvoclanguageproperties.cpp @@ -0,0 +1,217 @@ +/*************************************************************************** + Copyright 2008 Frederik Gladhorn + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "keduvoclanguageproperties.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +class KEduVocLanguageProperties::Private +{ +public: + Private( KEduVocDocument* doc ); + + KEduVocDocument* m_doc; + QList m_pages; + KEduVocLanguagePropertiesPage* m_page; +}; + +KEduVocLanguageProperties::Private::Private(KEduVocDocument* doc) +{ + m_doc = doc; + m_page = 0; +} + +KEduVocLanguageProperties::KEduVocLanguageProperties( KEduVocDocument* doc, QWidget * parent ) + : KPageDialog( parent ) + , d( new Private( doc ) ) +{ + setWindowTitle( i18n( "Edit Languages" ) ); + setFaceType( List ); + setStandardButtons( QDialogButtonBox::Ok | QDialogButtonBox::Cancel ); + + QAbstractButton * addLangButton( + buttonBox()->addButton( i18n( "Add language" ), QDialogButtonBox::ActionRole ) ); + addLangButton->setIcon( QIcon::fromTheme( "list-add" ) ); + + QAbstractButton * removeLangButton( + buttonBox()->addButton( i18n( "Remove language" ), QDialogButtonBox::ActionRole ) ); + removeLangButton->setIcon( QIcon::fromTheme( "list-remove" ) ); + + connect( addLangButton, SIGNAL( clicked() ), this, SLOT( slotAppendIdentifier() ) ); + connect( removeLangButton, SIGNAL( clicked() ), this, SLOT( slotDeleteIdentifier() ) ); + + for( int i = 0; i < d->m_doc->identifierCount(); i++ ) { + createPage( i ); + } +} + +KEduVocLanguageProperties::~KEduVocLanguageProperties() +{ + delete d; +} + + +/************** Slots for KEduVocLanguagePropertiesPage signals *****************/ + +void KEduVocLanguageProperties::loadLanguageSettings( QString locale ) { + emit languageSettingsChanged( locale ); +} + +void KEduVocLanguageProperties::loadEditorFont( QString locale ) { + emit editorFontChanged( locale, d->m_page ); +} + +void KEduVocLanguageProperties::loadPracticeFont( QString locale ) { + emit practiceFontChanged( locale, d->m_page ); +} + +void KEduVocLanguageProperties::loadKeyboardLayout( QString locale ) { + emit keyboardLayoutChanged( locale, d->m_page ); +} + +void KEduVocLanguageProperties::loadSpellChecker( QString locale ) { + emit spellCheckerChanged( locale, d->m_page ); +} + +void KEduVocLanguageProperties::saveEditorFont( QString locale, QFont font ) { + emit storeEditorFont( locale, font ); +} + +void KEduVocLanguageProperties::savePracticeFont( QString locale, QFont font ) { + emit storePracticeFont( locale, font ); +} + +void KEduVocLanguageProperties::saveKeyboardLayout( QString locale, QString keyboardLayout ) { + emit storeKeyboardLayout( locale, keyboardLayout ); +} + +void KEduVocLanguageProperties::saveSpellChecker( QString locale, QString spellChecker ) { + emit storeSpellChecker( locale, spellChecker ); +} + +void KEduVocLanguageProperties::storeSettings( QString locale ) { + emit saveSettings( locale ); +} + + +KPageWidgetItem* KEduVocLanguageProperties::createPage( int i ) +{ + d->m_page = new KEduVocLanguagePropertiesPage( d->m_doc, i, this ); + + // signal-slot connections between KEduVocLanguagePropertiesPage and KEduVocLanguageProperties + connect( d->m_page, &KEduVocLanguagePropertiesPage::languageSettingsChanged, this, &KEduVocLanguageProperties::loadLanguageSettings ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::editorFontChanged, this, &KEduVocLanguageProperties::loadEditorFont); + connect( d->m_page, &KEduVocLanguagePropertiesPage::practiceFontChanged, this, &KEduVocLanguageProperties::loadPracticeFont ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::keyboardLayoutChanged, this, &KEduVocLanguageProperties::loadKeyboardLayout ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::spellCheckerChanged, this, &KEduVocLanguageProperties::loadSpellChecker ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storeEditorFont, this, &KEduVocLanguageProperties::saveEditorFont ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storePracticeFont, this, &KEduVocLanguageProperties::savePracticeFont ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storeKeyboardLayout, this, &KEduVocLanguageProperties::saveKeyboardLayout ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storeSpellChecker, this, &KEduVocLanguageProperties::saveSpellChecker );; + connect( d->m_page, &KEduVocLanguagePropertiesPage::saveSettings, this, &KEduVocLanguageProperties::storeSettings ); + + QString name = i18n( "New Language" ); + + // check if this language already exists in the doc + if( d->m_doc->identifierCount() <= i ) { + d->m_doc->appendIdentifier(); + } + if( d->m_doc->identifierCount() > i ) { + name = d->m_doc->identifier( i ).name(); + emit languageSettingsChanged( d->m_doc->identifier(i).locale() ); + } + + KPageWidgetItem* editPage = new KPageWidgetItem( d->m_page, name ); + editPage->setHeader( i18nc( "Edit language properties", "Properties for %1", name ) ); + + d->m_pages.append( editPage ); + addPage( editPage ); + + editPage->setIcon( QIcon::fromTheme( "set-language" ) ); + + connect( d->m_page->identifierNameLineEdit(), &QLineEdit::textChanged, this, &KEduVocLanguageProperties::pageNameChanged ); + connect( this, &KEduVocLanguageProperties::accepted, d->m_page, &KEduVocLanguagePropertiesPage::accept ); + + return editPage; +} + +void KEduVocLanguageProperties::accept() +{ + KEduVocDocument *doc = d->m_doc; + int deleted = 0; + + for( int index = 0; index < d->m_pages.count(); index++ ) { + if( d->m_pages.value( index )->isEnabled() ) { + if( index - deleted >= doc->identifierCount() ) { + // add a language + doc->appendIdentifier(); + } + d->m_page = static_cast( d->m_pages.value( index )->widget() ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::languageSettingsChanged, this, &KEduVocLanguageProperties::loadLanguageSettings ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::editorFontChanged, this, &KEduVocLanguageProperties::loadEditorFont ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::practiceFontChanged, this, &KEduVocLanguageProperties::loadPracticeFont ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::keyboardLayoutChanged, this, &KEduVocLanguageProperties::loadKeyboardLayout ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::spellCheckerChanged, this, &KEduVocLanguageProperties::loadSpellChecker ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storeEditorFont, this, &KEduVocLanguageProperties::saveEditorFont ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storePracticeFont, this, &KEduVocLanguageProperties::savePracticeFont ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storeKeyboardLayout, this, &KEduVocLanguageProperties::saveKeyboardLayout ); + connect( d->m_page, &KEduVocLanguagePropertiesPage::storeSpellChecker, this, &KEduVocLanguageProperties::saveSpellChecker );; + connect( d->m_page, &KEduVocLanguagePropertiesPage::saveSettings, this, &KEduVocLanguageProperties::storeSettings ); + d->m_page->setLanguageIdentifierIndex( index - deleted ); + } else { + // page is disabled, delete the language + if( index < doc->identifierCount() ) { + if( KMessageBox::warningYesNo( this, i18n( "Really delete language: %1?", doc->identifier( index - deleted ).name() ), i18n( "Remove Language" ) ) == KMessageBox::Yes ) { + doc->removeIdentifier( index - deleted ); + deleted++; + } + } + } + } + + KPageDialog::accept(); +} + + +void KEduVocLanguageProperties::slotAppendIdentifier() +{ + // if a page that was "removed" is selected, simply enable it again to not delete it. + if( currentPage() && !currentPage()->isEnabled() ) { + currentPage()->setEnabled( true ); + return; + } + + int i = d->m_pages.count(); + KPageWidgetItem* newPage = createPage( i ); + setCurrentPage( newPage ); +} + +void KEduVocLanguageProperties::slotDeleteIdentifier() +{ + currentPage()->setEnabled( false ); +} + +void KEduVocLanguageProperties::pageNameChanged( const QString & newName ) +{ + currentPage()->setName( newName ); +} diff --git a/keduvocdocument/keduvoclanguagepropertiespage.h b/keduvocdocument/keduvoclanguageproperties.h similarity index 61% copy from keduvocdocument/keduvoclanguagepropertiespage.h copy to keduvocdocument/keduvoclanguageproperties.h index a11de11..042f892 100644 --- a/keduvocdocument/keduvoclanguagepropertiespage.h +++ b/keduvocdocument/keduvoclanguageproperties.h @@ -1,192 +1,170 @@ /*************************************************************************** Copyright 2008 Frederik Gladhorn ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ +#ifndef KEDUVOCLANGUAGEPROPERTIES_H +#define KEDUVOCLANGUAGEPROPERTIES_H -#ifndef KEDUVOCLANGUAGEPROPERTIESPAGE_H -#define KEDUVOCLANGUAGEPROPERTIESPAGE_H +#include #include - -#include +#include class KEduVocDocument; +class KEduVocLanguagePropertiesPage; -class KEDUVOCDOCUMENT_EXPORT KEduVocLanguagePropertiesPage : public QWidget +class KEDUVOCDOCUMENT_EXPORT KEduVocLanguageProperties : public KPageDialog { Q_OBJECT public: - KEduVocLanguagePropertiesPage( KEduVocDocument *doc, int identifierIndex, QWidget *parent = 0 ); - ~KEduVocLanguagePropertiesPage(); - - int languageIdentifierIndex(); - void setLanguageIdentifierIndex( int newIndex ); - - QFont editorFont(); - void setEditorFont( QFont editorFont ); - - QFont practiceFont(); - void setPracticeFont( QFont practiceFont ); - - QString keyboardLayout(); - void setKeyboardLayout( QString keyboardLayout ); - - QString spellChecker(); - void setSpellChecker( QString spellChecker ); + KEduVocLanguageProperties( KEduVocDocument* doc, QWidget* parent ); + ~KEduVocLanguageProperties(); public slots: - void accept(); - void downloadGrammar(); + virtual void accept(); + + // connect these with the signals from KEduVocLanguagePropertiesPage + void loadLanguageSettings( QString locale ); + void loadEditorFont( QString locale ); + void loadPracticeFont( QString locale ); + void loadKeyboardLayout( QString locale ); + void loadSpellChecker( QString locale ); + void saveEditorFont( QString locale, QFont font ); + void savePracticeFont( QString locale, QFont font ); + void saveKeyboardLayout( QString locale, QString keyboardLayout ); + void saveSpellChecker( QString locale, QString spellChecker ); + void storeSettings( QString locale ); signals: - void nameChanged( const QString ); /** * Sample corresponding slot for calling class : * - * void loadLanguageSettings( QString locale) { + * void loadLanguageSettings( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * } */ void languageSettingsChanged( QString ); /** * Sample corresponding slot for calling class : * - * void loadEditorFont( QString locale ) { + * void loadEditorFont( QString locale, KEduVocLanguagePropertiesPage* page ) { * LanguageSettings settings( locale ); * settings.load(); - * languagePropertiesPage.setEditorFont( settings.editorFont() ); + * page->setEditorFont( settings.editorFont() ); * } - * - * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ - void editorFontChanged( QString ); + void editorFontChanged( QString, KEduVocLanguagePropertiesPage* ); /** * Sample corresponding slot for calling class : * - * void loadPracticeFont( QString locale ) { + * void loadPracticeFont( QString locale, KEduVocLanguagePropertiesPage* page ) { * LanguageSettings settings( locale ); * settings.load(); - * languagePropertiesPage.setPracticeFont( settings.practiceFont() ); + * page->setPracticeFont( settings.practiceFont() ); * } - * - * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ - void practiceFontChanged( QString ); + void practiceFontChanged( QString, KEduVocLanguagePropertiesPage* ); /** * Sample corresponding slot for calling class : * - * void loadKeyboardLayout( QString locale ) { + * void loadKeyboardLayout( QString locale, KEduVocLanguagePropertiesPage* page ) { * LanguageSettings settings( locale ); * settings.load(); - * languagePropertiesPage.setKeyboardLayout( settings.keyboardLayout() ); + * page->setKeyboardLayout( settings.keyboardLayout() ); * } - * - * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ - void keyboardLayoutChanged( QString ); + void keyboardLayoutChanged( QString, KEduVocLanguagePropertiesPage* ); /** * Sample corresponding slot for calling class : * - * void loadSpellChecker( QString locale ) { + * void loadSpellChecker( QString locale, KEduVocLanguagePropertiesPage* page ) { * LanguageSettings settings( locale ); * settings.load(); - * languagePropertiesPage.setSpellChecker( settings.spellChecker() ); + * page->setSpellChecker( settings.spellChecker() ); * } - * - * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ - void spellCheckerChanged( QString ); + void spellCheckerChanged( QString, KEduVocLanguagePropertiesPage* ); /** * Sample corresponding slot for calling class : * * void saveEditorFont( QString locale, QFont font ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setEditorFont( font ); * } */ void storeEditorFont( QString, QFont ); /** * Sample corresponding slot for calling class : * * void savePracticeFont( QString locale, QFont font ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setPracticeFont( font ); * } */ void storePracticeFont( QString, QFont ); /** * Sample corresponding slot for calling class : * * void saveKeyboardLayout( QString locale, QString keyboardLayout ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setKeyboardLayout( keyboardLayout ); * } */ void storeKeyboardLayout( QString, QString ); /** * Sample corresponding slot for calling class : * * void saveSpellChecker( QString locale, QString spellChecker ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setSpellChecker( spellChecker ); * } */ void storeSpellChecker( QString, QString ); /** * Sample corresponding slot for calling class : * * void storeSettings( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * settings.save(); * } */ void saveSettings( QString ); private slots: - void localeChanged( const QString& ); - - // pronouns/conjugations - void updateCheckBoxes(); - - // tenses - void slotDeleteTense(); - void slotNewTense(); - void slotTenseChosen(int); - void slotModifyTense(); + void slotAppendIdentifier(); + void slotDeleteIdentifier(); + void pageNameChanged( const QString& newName ); private: - void updateListBox(int start); - - // initialize widgets with contents - void loadGrammarFromDocument(); + KPageWidgetItem* createPage( int identifierIndex ); class Private; Private * const d; }; #endif diff --git a/keduvocdocument/keduvoclanguagepropertiespage.cpp b/keduvocdocument/keduvoclanguagepropertiespage.cpp index 0e03c14..a2aa19e 100644 --- a/keduvocdocument/keduvoclanguagepropertiespage.cpp +++ b/keduvocdocument/keduvoclanguagepropertiespage.cpp @@ -1,500 +1,505 @@ /*************************************************************************** Copyright 2008 Frederik Gladhorn ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "keduvoclanguagepropertiespage.h" #include "ui_keduvoclanguagepropertiespage.h" #include #include #include #include #include #include #include #include #include #include #include #include #define TENSE_TAG ". " class KEduVocLanguagePropertiesPage::Private { public: Private( KEduVocDocument *doc, int identifierIndex ); int m_currentTense; QList m_tenseIndex; KEduVocDocument* m_doc; int m_identifierIndex; QString m_keyboardLayout; QString m_spellChecker; Ui::KEduVocLanguagePropertiesPage *m_ui; }; KEduVocLanguagePropertiesPage::Private::Private(KEduVocDocument* doc, int identifierIndex) { m_doc = doc; m_identifierIndex = identifierIndex; m_ui = new Ui::KEduVocLanguagePropertiesPage(); } KEduVocLanguagePropertiesPage::KEduVocLanguagePropertiesPage( KEduVocDocument *doc, int identifierIndex, QWidget *parent) : QWidget( parent ) , d( new Private( doc, identifierIndex ) ) { d->m_ui->setupUi( this ); connect( d->m_ui->localeComboBox, static_cast( &KComboBox::currentIndexChanged ), this, &KEduVocLanguagePropertiesPage::localeChanged ); connect( d->m_ui->downloadGrammarButton, &QPushButton::clicked, this, &KEduVocLanguagePropertiesPage::downloadGrammar ); QStringList languageCodes = QLocale().uiLanguages(); // qmap automatically sorts by keys QMap languageCodeMap; foreach( const QString & code, languageCodes ) { languageCodeMap[ QLocale( code ).nativeLanguageName() ] = code; } // add the language, but also it's code as data foreach( const QString & language, languageCodeMap.keys() ) { d->m_ui->localeComboBox->addItem( language, languageCodeMap.value( language ) ); } if( d->m_identifierIndex < d->m_doc->identifierCount() ) { d->m_ui->localeComboBox->setCurrentIndex( d->m_ui->localeComboBox->findData( d->m_doc->identifier( d->m_identifierIndex ).locale() ) ); d->m_ui->identifierNameLineEdit->setText( d->m_doc->identifier( d->m_identifierIndex ).name() ); } int index = ( d->m_identifierIndex < d->m_doc->identifierCount() ? d->m_identifierIndex : 0 ); emit languageSettingsChanged( d->m_doc->identifier( index ).locale() ); // fonts emit editorFontChanged( d->m_doc->identifier( index ).locale() ); emit practiceFontChanged( d->m_doc->identifier( index ).locale() ); // keyboard layout // try to talk to kxbk - get a list of keyboard layouts QDBusInterface kxbk( "org.kde.keyboard", "/Layouts", "org.kde.KeyboardLayouts" ); QDBusReply reply = kxbk.call( "getLayoutsList" ); if( reply.isValid() ) { QStringList layouts = reply; layouts.prepend( QString() ); d->m_ui->keyboardLayoutComboBox->clear(); d->m_ui->keyboardLayoutComboBox->addItems( layouts ); d->m_ui->keyboardLayoutComboBox->setEnabled( true ); QDBusReply currentLayout = kxbk.call( "getCurrentLayout" ); d->m_ui->keyboardLayoutComboBox->setCurrentIndex( d->m_ui->keyboardLayoutComboBox->findText( currentLayout ) ); if( d->m_identifierIndex < d->m_doc->identifierCount() ) { emit keyboardLayoutChanged( d->m_doc->identifier( index ).locale() ); if( !d->m_keyboardLayout.isEmpty() ) { d->m_ui->keyboardLayoutComboBox->setCurrentIndex( d->m_ui->keyboardLayoutComboBox->findText( d->m_keyboardLayout ) ); } } } else { qDebug() << "kxkb dbus error"; d->m_ui->keyboardLayoutComboBox->setEnabled( false ); d->m_ui->keyboardLayoutComboBox->addItem( i18n( "No KDE keyboard selector found." ) ); } Sonnet::Speller speller; QMap dicts = speller.availableDictionaries(); QMap ::const_iterator iter = dicts.constBegin(); while( iter != dicts.constEnd() ) { d->m_ui->spellcheckerComboBox->addItem( iter.key(), iter.value() ); ++iter; } d->m_ui->spellcheckerComboBox->model()->sort( 0 ); emit spellCheckerChanged( d->m_doc->identifier( index ).locale() ); d->m_ui->spellcheckerComboBox->setCurrentIndex( d->m_ui->spellcheckerComboBox->findData( d->m_spellChecker ) ); loadGrammarFromDocument(); } KEduVocLanguagePropertiesPage::~KEduVocLanguagePropertiesPage() { delete d; } int KEduVocLanguagePropertiesPage::languageIdentifierIndex() { return d->m_identifierIndex; } void KEduVocLanguagePropertiesPage::setLanguageIdentifierIndex( int newIndex ) { d->m_identifierIndex = newIndex; } QFont KEduVocLanguagePropertiesPage::editorFont() { return d->m_ui->editorFont->font(); } void KEduVocLanguagePropertiesPage::setEditorFont( QFont editorFont ) { d->m_ui->editorFont->setFont( editorFont ); } QFont KEduVocLanguagePropertiesPage::practiceFont() { return d->m_ui->practiceFont->font(); } void KEduVocLanguagePropertiesPage::setPracticeFont( QFont practiceFont ) { d->m_ui->practiceFont->setFont( practiceFont ); } QString KEduVocLanguagePropertiesPage::keyboardLayout() { return d->m_keyboardLayout; } void KEduVocLanguagePropertiesPage::setKeyboardLayout( QString keyboardLayout ) { d->m_keyboardLayout = keyboardLayout; } QString KEduVocLanguagePropertiesPage::spellChecker() { return d->m_spellChecker; } void KEduVocLanguagePropertiesPage::setSpellChecker( QString spellChecker ) { d->m_spellChecker = spellChecker; } +QLineEdit* KEduVocLanguagePropertiesPage::identifierNameLineEdit() +{ + return d->m_ui->identifierNameLineEdit; +} + /* TODO uncomment after adding ParleyDocument namespace DocumentHelper { void fetchGrammar( KEduVocDocument* doc, int languageIndex ); } */ void KEduVocLanguagePropertiesPage::downloadGrammar() { /* TODO uncomment after adding ParleyDocument DocumentHelper::fetchGrammar( d->m_doc, d->m_identifierIndex );*/ loadGrammarFromDocument(); } void KEduVocLanguagePropertiesPage::loadGrammarFromDocument() { if( d->m_identifierIndex < d->m_doc->identifierCount() ) { // articles KEduVocArticle articles = d->m_doc->identifier( d->m_identifierIndex ).article(); d->m_ui->def_male->setText( articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Masculine ) ); d->m_ui->indef_male->setText( articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Masculine ) ); d->m_ui->def_female->setText( articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Feminine ) ); d->m_ui->indef_female->setText( articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Feminine ) ); d->m_ui->def_natural->setText( articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Neuter ) ); d->m_ui->indef_natural->setText( articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Neuter ) ); d->m_ui->def_male_plural->setText( articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Masculine ) ); d->m_ui->indef_male_plural->setText( articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Masculine ) ); d->m_ui->def_female_plural->setText( articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Feminine ) ); d->m_ui->indef_female_plural->setText( articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Feminine ) ); d->m_ui->def_natural_plural->setText( articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Neuter ) ); d->m_ui->indef_natural_plural->setText( articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Neuter ) ); // personal pronouns const KEduVocWordFlags numS = KEduVocWordFlag::Singular; const KEduVocWordFlags numD = KEduVocWordFlag::Dual; const KEduVocWordFlags numP = KEduVocWordFlag::Plural; KEduVocPersonalPronoun pronoun = d->m_doc->identifier( d->m_identifierIndex ).personalPronouns(); d->m_ui->first_singular->setText( pronoun.personalPronoun( KEduVocWordFlag::First | numS ) ); d->m_ui->second_singular->setText( pronoun.personalPronoun( KEduVocWordFlag::Second | numS ) ); d->m_ui->thirdM_singular->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numS ) ); d->m_ui->thirdF_singular->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numS ) ); d->m_ui->thirdN_singular->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numS ) ); d->m_ui->dualFirstLineEdit->setText( pronoun.personalPronoun( KEduVocWordFlag::First | numD ) ); d->m_ui->dualSecondLineEdit->setText( pronoun.personalPronoun( KEduVocWordFlag::Second | numD ) ); d->m_ui->dualThirdMaleLineEdit->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numD ) ); d->m_ui->dualThirdFemaleLineEdit->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numD ) ); d->m_ui->dualThirdNeutralLineEdit->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numD ) ); d->m_ui->first_plural->setText( pronoun.personalPronoun( KEduVocWordFlag::First | numP ) ); d->m_ui->second_plural->setText( pronoun.personalPronoun( KEduVocWordFlag::Second | numP ) ); d->m_ui->thirdM_plural->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numP ) ); d->m_ui->thirdF_plural->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numP ) ); d->m_ui->thirdN_plural->setText( pronoun.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numP ) ); d->m_ui->maleFemaleDifferCheckBox->setChecked( pronoun.maleFemaleDifferent() ); d->m_ui->neutralCheckBox->setChecked( pronoun.neutralExists() ); d->m_ui->dualCheckBox->setChecked( pronoun.dualExists() ); } // update shown labels etc... updateCheckBoxes(); connect( d->m_ui->maleFemaleDifferCheckBox, &QCheckBox::toggled, this, &KEduVocLanguagePropertiesPage::updateCheckBoxes ); connect( d->m_ui->neutralCheckBox, &QCheckBox::toggled, this, &KEduVocLanguagePropertiesPage::updateCheckBoxes ); connect( d->m_ui->dualCheckBox, &QCheckBox::toggled, this, &KEduVocLanguagePropertiesPage::updateCheckBoxes ); // tenses connect( d->m_ui->tenseList, &QListWidget::currentRowChanged, this, &KEduVocLanguagePropertiesPage::slotTenseChosen ); connect( d->m_ui->deleteButton, &QPushButton::clicked, this, &KEduVocLanguagePropertiesPage::slotDeleteTense ); connect( d->m_ui->modifyButton, &QPushButton::clicked, this, &KEduVocLanguagePropertiesPage::slotModifyTense ); connect( d->m_ui->newButton, &QPushButton::clicked, this, &KEduVocLanguagePropertiesPage::slotNewTense ); if( d->m_identifierIndex < d->m_doc->identifierCount() ) { int i = 1; foreach( const QString & tenseName, d->m_doc->identifier( d->m_identifierIndex ).tenseList() ) { d->m_ui->tenseList->addItem( QString( "%1" ).arg( i++, 2 ).append( TENSE_TAG ).append( tenseName ) ); d->m_tenseIndex.append(i); } } d->m_currentTense = 0; if( d->m_ui->tenseList->count() > 0 ) { d->m_ui->tenseList->setCurrentRow( d->m_currentTense ); } d->m_ui->modifyButton->setEnabled( d->m_ui->tenseList->count() > 0 ); d->m_ui->deleteButton->setEnabled( d->m_ui->tenseList->count() > 0); d->m_ui->tenseList->setFocus(); } void KEduVocLanguagePropertiesPage::accept() { if( !isEnabled() ) { // disabled pages are deleted languages return; } // general QString locale = d->m_ui->localeComboBox->itemData( d->m_ui->localeComboBox->currentIndex() ).toString(); // if no locales are found (kdebase not installed?) at least fall back to using the language name as locale. if( locale.isEmpty() ) { locale = d->m_ui->identifierNameLineEdit->text(); } d->m_doc->identifier( d->m_identifierIndex ).setLocale( locale ); d->m_doc->identifier( d->m_identifierIndex ).setName( d->m_ui->identifierNameLineEdit->text() ); emit storeEditorFont( locale, d->m_ui->editorFont->font() ); emit storePracticeFont( locale, d->m_ui->practiceFont->font() ); if( d->m_ui->keyboardLayoutComboBox->isEnabled() ) { emit storeKeyboardLayout( locale, d->m_ui->keyboardLayoutComboBox->currentText() ); } int index = d->m_ui->spellcheckerComboBox->currentIndex(); emit storeSpellChecker( locale, d->m_ui->spellcheckerComboBox->itemData(index).toString() ); emit saveSettings( locale ); // articles const KEduVocWordFlag::Flags artSing = KEduVocWordFlag::Singular; // const KEduVocWordFlag::Flags artDual = KEduVocWordFlag::Dual; const KEduVocWordFlag::Flags artPlur = KEduVocWordFlag::Plural; const KEduVocWordFlag::Flags artDef = KEduVocWordFlag::Definite; const KEduVocWordFlag::Flags artIndef = KEduVocWordFlag::Indefinite; KEduVocArticle article; article.setArticle( d->m_ui->def_male->text(), artSing | artDef | KEduVocWordFlag::Masculine ); article.setArticle( d->m_ui->indef_male->text(), artSing | artIndef | KEduVocWordFlag::Masculine ); article.setArticle( d->m_ui->def_female->text(), artSing | artDef | KEduVocWordFlag::Feminine ); article.setArticle( d->m_ui->indef_female->text(), artSing | artIndef | KEduVocWordFlag::Feminine ); article.setArticle( d->m_ui->def_natural->text(), artSing | artDef | KEduVocWordFlag::Neuter ); article.setArticle( d->m_ui->indef_natural->text(), artSing | artIndef | KEduVocWordFlag::Neuter ); article.setArticle( d->m_ui->def_male_plural->text(), artPlur | artDef | KEduVocWordFlag::Masculine ); article.setArticle( d->m_ui->indef_male_plural->text(), artPlur | artIndef | KEduVocWordFlag::Masculine ); article.setArticle( d->m_ui->def_female_plural->text(), artPlur | artDef | KEduVocWordFlag::Feminine ); article.setArticle( d->m_ui->indef_female_plural->text(), artPlur | artIndef | KEduVocWordFlag::Feminine ); article.setArticle( d->m_ui->def_natural_plural->text(), artPlur | artDef | KEduVocWordFlag::Neuter ); article.setArticle( d->m_ui->indef_natural_plural->text(), artPlur | artIndef | KEduVocWordFlag::Neuter ); d->m_doc->identifier( d->m_identifierIndex ).setArticle( article ); // personal pronouns KEduVocPersonalPronoun pronoun; const KEduVocWordFlags numS = KEduVocWordFlag::Singular; const KEduVocWordFlags numD = KEduVocWordFlag::Dual; const KEduVocWordFlags numP = KEduVocWordFlag::Plural; pronoun.setPersonalPronoun( d->m_ui->first_singular->text(), KEduVocWordFlag::First | numS ); pronoun.setPersonalPronoun( d->m_ui->second_singular->text(), KEduVocWordFlag::Second | numS ); pronoun.setPersonalPronoun( d->m_ui->thirdM_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numS ); pronoun.setPersonalPronoun( d->m_ui->thirdF_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numS ); pronoun.setPersonalPronoun( d->m_ui->thirdN_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numS) ; pronoun.setPersonalPronoun( d->m_ui->dualFirstLineEdit->text(), KEduVocWordFlag::First | numD ); pronoun.setPersonalPronoun( d->m_ui->dualSecondLineEdit->text(), KEduVocWordFlag::Second | numD ); pronoun.setPersonalPronoun( d->m_ui->dualThirdMaleLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numD ); pronoun.setPersonalPronoun( d->m_ui->dualThirdFemaleLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numD ); pronoun.setPersonalPronoun( d->m_ui->dualThirdNeutralLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numD ); pronoun.setPersonalPronoun( d->m_ui->first_plural->text(), KEduVocWordFlag::First | numP ); pronoun.setPersonalPronoun( d->m_ui->second_plural->text(), KEduVocWordFlag::Second | numP ); pronoun.setPersonalPronoun( d->m_ui->thirdM_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numP ); pronoun.setPersonalPronoun( d->m_ui->thirdF_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numP ); pronoun.setPersonalPronoun( d->m_ui->thirdN_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numP ); pronoun.setMaleFemaleDifferent( d->m_ui->maleFemaleDifferCheckBox->isChecked() ); pronoun.setNeutralExists( d->m_ui->neutralCheckBox->isChecked() ); pronoun.setDualExists( d->m_ui->dualCheckBox->isChecked() ); d->m_doc->identifier( d->m_identifierIndex ).setPersonalPronouns( pronoun ); // tenses QList tenseIndex; QStringList tenses; QString str; for( int i = 0; i < (int) d->m_ui->tenseList->count(); i++ ) { str = d->m_ui->tenseList->item( i )->text(); tenses.append( str.mid( str.indexOf( TENSE_TAG ) + QString( TENSE_TAG ).length() ) ); } d->m_doc->identifier( d->m_identifierIndex ).setTenseList( tenses ); } void KEduVocLanguagePropertiesPage::updateCheckBoxes() { bool maleFemale = d->m_ui->maleFemaleDifferCheckBox->isChecked(); bool neutral = d->m_ui->neutralCheckBox->isChecked(); bool dual = d->m_ui->dualCheckBox->isChecked(); d->m_ui->neutralCheckBox->setVisible( maleFemale ); d->m_ui->male_c_label->setVisible( maleFemale ); d->m_ui->female_c_label->setVisible( maleFemale ); d->m_ui->thirdM_singular->setVisible( maleFemale ); d->m_ui->thirdF_singular->setVisible( maleFemale ); d->m_ui->thirdM_plural->setVisible( maleFemale ); d->m_ui->thirdF_plural->setVisible( maleFemale ); d->m_ui->dualLabel->setVisible( dual ); d->m_ui->dualFirstLineEdit->setVisible( dual ); d->m_ui->dualSecondLineEdit->setVisible( dual ); d->m_ui->dualThirdMaleLineEdit->setVisible( dual && maleFemale ); d->m_ui->dualThirdFemaleLineEdit->setVisible( dual && maleFemale ); if( !maleFemale ) { d->m_ui->natural_c_label->setVisible( false ); d->m_ui->thirdN_singular->setVisible( true ); d->m_ui->thirdN_plural->setVisible( true ); d->m_ui->dualThirdNeutralLineEdit->setVisible( dual ); } else { d->m_ui->natural_c_label->setVisible( neutral ); d->m_ui->thirdN_singular->setVisible( neutral ); d->m_ui->thirdN_plural->setVisible( neutral ); d->m_ui->dualThirdNeutralLineEdit->setVisible( dual && neutral ); } } void KEduVocLanguagePropertiesPage::localeChanged( const QString & locale ) { d->m_ui->identifierNameLineEdit->setText( locale ); } // ************** TENSES ********************* void KEduVocLanguagePropertiesPage::slotTenseChosen( int index ) { d->m_currentTense = index; } void KEduVocLanguagePropertiesPage::slotNewTense() { bool ok; QString getTense = QInputDialog::getText( this, i18n( "Tense Name" ), i18n( "Enter name of tense:" ), QLineEdit::Normal, QString(), &ok ); if( !ok ) return; QString str; int i = d->m_ui->tenseList->count() + 1; d->m_ui->tenseList->addItem( QString( "%1" ).arg( i, 2 ).append( TENSE_TAG ).append( getTense.simplified() ) ); d->m_tenseIndex.append( -( i - 1 ) ); d->m_currentTense = d->m_ui->tenseList->count(); d->m_ui->tenseList->setCurrentRow( i - 1 ); d->m_ui->modifyButton->setEnabled( true ); d->m_ui->deleteButton->setEnabled( true ); } void KEduVocLanguagePropertiesPage::slotModifyTense() { if( d->m_ui->tenseList->count() != 0 && (int) d->m_ui->tenseList->count() > d->m_currentTense ) { QString str = d->m_ui->tenseList->item( d->m_currentTense )->text(); str = str.mid( str.indexOf( TENSE_TAG ) + QString( TENSE_TAG ).length() ); bool ok; QString getTense = QInputDialog::getText( this, i18n( "Tense Name" ), i18n( "Enter name of tense:" ), QLineEdit::Normal, str, &ok ); if( !ok ) return; int i = d->m_currentTense + 1; d->m_ui->tenseList->item( d->m_currentTense )->setText( QString( "%1" ).arg( i, 2 ).append( TENSE_TAG ).append( getTense.simplified() ) ); } } void KEduVocLanguagePropertiesPage::updateListBox( int start ) { QString str; for( int i = start; i < (int) d->m_ui->tenseList->count(); i++ ) { str = d->m_ui->tenseList->item( i )->text(); str = str.mid( str.indexOf( TENSE_TAG ) + QString( TENSE_TAG ).length() ); d->m_ui->tenseList->item( i )->setText( QString( "%1" ).arg( i + 1, 2 ).append( TENSE_TAG ).append( str ) ); } } void KEduVocLanguagePropertiesPage::slotDeleteTense() { int act = d->m_currentTense; if( d->m_ui->tenseList->count() > 0 && (int) d->m_ui->tenseList->count() > act ) { QString t = d->m_ui->tenseList->item( act )->text(); foreach( KEduVocExpression * exp, d->m_doc->lesson()->entries( KEduVocLesson::Recursive ) ) { for( int lang = 0; lang < d->m_doc->identifierCount(); lang++ ) { if( exp->translation( lang )->conjugationTenses().contains( t ) ) { KMessageBox::information( this, i18n( "The selected user defined tense could not be deleted\nbecause it is in use." ), i18n( "Deleting Tense Description" ) ); return; } } } delete d->m_ui->tenseList->takeItem( act ); d->m_tenseIndex.erase( d->m_tenseIndex.begin() + act ); if( (int) d->m_ui->tenseList->count() <= act ) act = d->m_ui->tenseList->count() - 1; else updateListBox( act ); // update items after current if( act >= 0 ) d->m_ui->tenseList->setCurrentRow( act ); } d->m_ui->modifyButton->setEnabled( d->m_ui->tenseList->count() > 0 ); d->m_ui->deleteButton->setEnabled( d->m_ui->tenseList->count() > 0 ); } diff --git a/keduvocdocument/keduvoclanguagepropertiespage.h b/keduvocdocument/keduvoclanguagepropertiespage.h index a11de11..e084a6f 100644 --- a/keduvocdocument/keduvoclanguagepropertiespage.h +++ b/keduvocdocument/keduvoclanguagepropertiespage.h @@ -1,192 +1,195 @@ /*************************************************************************** Copyright 2008 Frederik Gladhorn ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef KEDUVOCLANGUAGEPROPERTIESPAGE_H #define KEDUVOCLANGUAGEPROPERTIESPAGE_H #include #include +#include class KEduVocDocument; class KEDUVOCDOCUMENT_EXPORT KEduVocLanguagePropertiesPage : public QWidget { Q_OBJECT public: KEduVocLanguagePropertiesPage( KEduVocDocument *doc, int identifierIndex, QWidget *parent = 0 ); ~KEduVocLanguagePropertiesPage(); int languageIdentifierIndex(); void setLanguageIdentifierIndex( int newIndex ); QFont editorFont(); void setEditorFont( QFont editorFont ); QFont practiceFont(); void setPracticeFont( QFont practiceFont ); QString keyboardLayout(); void setKeyboardLayout( QString keyboardLayout ); QString spellChecker(); void setSpellChecker( QString spellChecker ); + QLineEdit* identifierNameLineEdit(); + public slots: void accept(); void downloadGrammar(); signals: void nameChanged( const QString ); /** * Sample corresponding slot for calling class : * - * void loadLanguageSettings( QString locale) { + * void loadLanguageSettings( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * } */ void languageSettingsChanged( QString ); /** * Sample corresponding slot for calling class : * * void loadEditorFont( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * languagePropertiesPage.setEditorFont( settings.editorFont() ); * } * * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ void editorFontChanged( QString ); /** * Sample corresponding slot for calling class : * * void loadPracticeFont( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * languagePropertiesPage.setPracticeFont( settings.practiceFont() ); * } * * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ void practiceFontChanged( QString ); /** * Sample corresponding slot for calling class : * * void loadKeyboardLayout( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * languagePropertiesPage.setKeyboardLayout( settings.keyboardLayout() ); * } * * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ void keyboardLayoutChanged( QString ); /** * Sample corresponding slot for calling class : * * void loadSpellChecker( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * languagePropertiesPage.setSpellChecker( settings.spellChecker() ); * } * * Where languagePropertiesPage is a KEduVocLanguagePropertiesPage object */ void spellCheckerChanged( QString ); /** * Sample corresponding slot for calling class : * * void saveEditorFont( QString locale, QFont font ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setEditorFont( font ); * } */ void storeEditorFont( QString, QFont ); /** * Sample corresponding slot for calling class : * * void savePracticeFont( QString locale, QFont font ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setPracticeFont( font ); * } */ void storePracticeFont( QString, QFont ); /** * Sample corresponding slot for calling class : * * void saveKeyboardLayout( QString locale, QString keyboardLayout ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setKeyboardLayout( keyboardLayout ); * } */ void storeKeyboardLayout( QString, QString ); /** * Sample corresponding slot for calling class : * * void saveSpellChecker( QString locale, QString spellChecker ) { * LanguageSettings settings( locale ); * settings.load(); * settings.setSpellChecker( spellChecker ); * } */ void storeSpellChecker( QString, QString ); /** * Sample corresponding slot for calling class : * * void storeSettings( QString locale ) { * LanguageSettings settings( locale ); * settings.load(); * settings.save(); * } */ void saveSettings( QString ); private slots: void localeChanged( const QString& ); // pronouns/conjugations void updateCheckBoxes(); // tenses void slotDeleteTense(); void slotNewTense(); void slotTenseChosen(int); void slotModifyTense(); private: void updateListBox(int start); // initialize widgets with contents void loadGrammarFromDocument(); class Private; Private * const d; }; #endif