diff --git a/CMakeLists.txt b/CMakeLists.txt index bf866ee..3541315 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,60 +1,60 @@ project(LibKEduVocDocument) cmake_minimum_required(VERSION 3.5) find_package(ECM 1.3.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) find_package(Qt5 5.2 REQUIRED NO_MODULE COMPONENTS Xml Gui Widgets DBus Core Multimedia) -find_package(KF5 5.3.0 REQUIRED COMPONENTS I18n Archive KIO Completion Sonnet Notifications XmlGui Kross NewStuff KCMUtils ) +find_package(KF5 5.3.0 REQUIRED COMPONENTS I18n Archive KIO Completion Sonnet Notifications XmlGui Kross NewStuff KCMUtils KHtml ) find_package(LibXml2) set_package_properties(LibXml2 PROPERTIES URL "http://xmlsoft.org" TYPE OPTIONAL PURPOSE "Required to build HTML export." ) include_directories(${LIBXML2_INCLUDE_DIR}) find_package(LibXslt) set_package_properties(LibXslt PROPERTIES URL "http://xmlsoft.org/XSLT" TYPE OPTIONAL PURPOSE "Required to build HTML export for Parley." ) include_directories(${LIBXSLT_INCLUDE_DIR}) #add_definitions( -Wall -fprofile-arcs -ftest-coverage ) include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ) remove_definitions(-DQT_NO_CAST_FROM_ASCII) remove_definitions(-DQT_NO_CAST_FROM_BYTEARRAY) remove_definitions(-DQT_NO_KEYWORDS) add_definitions(-DQT_NO_CAST_TO_ASCII) add_definitions(-DQT_NO_URL_CAST_FROM_STRING) add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) add_definitions(-DTRANSLATION_DOMAIN=\"libkeduvocdocument\") add_definitions(-DKF_DISABLE_DEPRECATED_BEFORE_AND_AT=0x060000) include(KDEInstallDirs) include(KDECompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) include(GenerateExportHeader) add_subdirectory(keduvocdocument) configure_file( "${LibKEduVocDocument_SOURCE_DIR}/LibKEduVocDocumentConfig.cmake.in" "${LibKEduVocDocument_BINARY_DIR}/LibKEduVocDocumentConfig.cmake" @ONLY ) set(_LibKEduVocDocument_CONFIG_DEST "${LIB_INSTALL_DIR}/cmake/libkeduvocdocument") install( FILES "${LibKEduVocDocument_BINARY_DIR}/LibKEduVocDocumentConfig.cmake" DESTINATION "${_LibKEduVocDocument_CONFIG_DEST}" ) install( EXPORT LibKEduVocDocumentTargets DESTINATION "${_LibKEduVocDocument_CONFIG_DEST}" NAMESPACE LibKEduVocDocumentImport__ FILE LibKEduVocDocumentTargets.cmake ) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/keduvocdocument/CMakeLists.txt b/keduvocdocument/CMakeLists.txt index 69544e3..c8f049f 100644 --- a/keduvocdocument/CMakeLists.txt +++ b/keduvocdocument/CMakeLists.txt @@ -1,255 +1,262 @@ 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 + keduvocbrowserwidget.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 keduvoceditordocument.cpp keduvocexportdialog.cpp keduvocscriptmanager.cpp keduvocscriptdialog.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 + keduvocbrowserwidget.ui keduvocmultiplechoicewidget.ui keduvoccomparisonwidget.ui keduvocdeclensionwidget.ui keduvocconjugationwidget.ui keduvocimagechooserwidget.ui keduvocsynonymwidget.ui keduvocsummarywordwidget.ui keduvoclatexwidget.ui keduvocdocumentproperties.ui keduvoclanguagepropertiespage.ui keduvocexportdialog.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 + KEduVocBrowserWidget KEduVocMultipleChoiceWidget KEduVocComparisonWidget KEduVocDeclensionWidget KEduVocConjugationWidget KEduVocInflectionWidget KEduVocImageWidget KEduVocImageChooserWidget KEduVocSynonymWidget KEduVocSummaryWordWidget KEduVocLatexRenderer KEduVocLatexWidget KEduVocScript KEduVocDocumentProperties KEduVocLanguagePropertiesPage KEduVocLanguageProperties KEduVocEditorDocument KEduVocExportDialog KEduVocScriptManager KEduVocScriptDialog 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 + KF5::KHtml ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} 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 KF5::NewStuff KF5::KCMUtils + KF5::KHtml ) # 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 KF5::KCMUtils + KF5::KHtml Qt5::Xml Qt5::Core Qt5::Gui Qt5::Widgets Qt5::DBus Qt5::Multimedia ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} 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 KF5::NewStuff KF5::KCMUtils + KF5::KHtml ) # 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/keduvocbrowserwidget.cpp b/keduvocdocument/keduvocbrowserwidget.cpp new file mode 100644 index 0000000..bf96bb3 --- /dev/null +++ b/keduvocdocument/keduvocbrowserwidget.cpp @@ -0,0 +1,179 @@ +/*************************************************************************** + + 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 "keduvocbrowserwidget.h" +#include "ui_keduvocbrowserwidget.h" + +#include +#include + +#include + +using namespace Editor; + +class KEduVocBrowserWidget::Private +{ +public: + Private(); + + /// Column in the document - corresponds to the language (-KV_COL_TRANS) + int m_currentTranslation; + /// Selection in the doc - if more than one row is selected behavior is different + KEduVocExpression* m_entry; + KHTMLPart *m_htmlPart; + QList m_providers; + int m_currentProvider; + Ui::KEduVocBrowserWidget* m_ui; +}; + +KEduVocBrowserWidget::Private::Private() +{ + m_currentTranslation = -1; + m_entry = 0; + m_currentProvider = 0; ///@todo kconfig? + m_htmlPart = 0; + m_ui = new Ui::KEduVocBrowserWidget(); +} + +KEduVocBrowserWidget::KEduVocBrowserWidget( QWidget *parent ) + : QWidget( parent ) + , d( new Private() ) +{ + d->m_ui->setupUi( this ); + + d->m_htmlPart = new KHTMLPart( d->m_ui->widget ); + QHBoxLayout *layout = new QHBoxLayout( d->m_ui->widget ); + d->m_ui->widget->setLayout( layout ); + layout->addWidget( d->m_htmlPart->widget() ); + + connect( d->m_htmlPart->browserExtension(), SIGNAL( openUrlRequest( const QUrl&, const KParts::OpenUrlArguments&, const KParts::BrowserArguments& ) ), + this, SLOT( openUrl( const QUrl& ) ) ); + + connect( d->m_ui->showCurrentButton, &QPushButton::clicked, this, &KEduVocBrowserWidget::showCurrentTranslation ); + + setupProviders(); + connect( d->m_ui->providerComboBox, static_cast( &KComboBox::currentIndexChanged ), this, &KEduVocBrowserWidget::providerChanged ); + + d->m_htmlPart->setJavaEnabled( false ); + d->m_htmlPart->setPluginsEnabled( false ); + d->m_htmlPart->setJScriptEnabled( true ); + d->m_htmlPart->setMetaRefreshEnabled( true ); + d->m_htmlPart->setDNDEnabled( true ); +} + +KEduVocBrowserWidget::~KEduVocBrowserWidget() +{ + delete d; +} + +void KEduVocBrowserWidget::setupProviders() +{ + d->m_ui->providerComboBox->clear(); + + DictionaryProvider provider; + provider.name = "De-Es Beolingus"; + provider.url = "http://beolingus.org/dings.cgi?service=dees&query=\\{@}"; + provider.languages << "de" << "es"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "De-En Beolingus"; + provider.url = "http://beolingus.org/dings.cgi?query=\\{@}"; + provider.languages << "de" << "en"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "De-En Leo"; + provider.url = "http://dict.leo.org/?search=\\{@}"; + provider.languages << "de" << "en"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "De-Es Leo"; + provider.url = "http://dict.leo.org/?lp=esde&search=\\{@}"; + provider.languages << "de" << "es"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "De-Fr Leo"; + provider.url = "http://dict.leo.org/?lp=frde&search=\\{@}"; + provider.languages << "de" << "fr"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "De-Es Pons"; + provider.url = "http://www.ponsline.de/cgi-bin/wb/w.pl?von=pons.de&Richtung=Spanisch&Begriff=\\{@}"; + provider.languages << "de" << "es"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "Ru-En Multitran"; + provider.url = "http://multitran.ru/c/m.exe?SHL=1&CL=1&l1=1&s=\\{@}"; + provider.languages << "ru" << "en"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "Ru-De Multitran"; + provider.url = "http://multitran.ru/c/m.exe?SHL=1&CL=1&l1=3&s=\\{@}"; + provider.languages << "ru" << "de"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "Ru-Fr Multitran"; + provider.url = "http://multitran.ru/c/m.exe?SHL=1&CL=1&l1=4&s=\\{@}"; + provider.languages << "ru" << "fr"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + + provider.name = "Heinzelnisse"; + provider.url = "http://heinzelnisse.info/dict?setOptions=true&searchItem=\\{@}&dictDeNoSearch=on&dictNoDeSearch=on&dictExactSearch=on&dictPhoneticSearch=on&wikiSearch=on&dictNynorskSearch=on&dictBokmaalSearch=checked&forumKeywordSearch=on&suggestion=on"; + provider.languages << "no" << "de"; + d->m_providers.append( provider ); + d->m_ui->providerComboBox->addItem( provider.name ); + +} + +void KEduVocBrowserWidget::setTranslation( KEduVocExpression* entry, int translation ) +{ + d->m_currentTranslation = translation; + d->m_entry = entry; + + if( d->m_ui->followTableCheckBox->isChecked() ) { + showCurrentTranslation(); + } +} + +void KEduVocBrowserWidget::showCurrentTranslation() +{ + if( d->m_entry ) { + if( d->m_entry->translation( d->m_currentTranslation ) ) { + QString text = d->m_entry->translation( d->m_currentTranslation )->text(); + if( !text.isEmpty() ) { + d->m_htmlPart->openUrl( QUrl( QString( d->m_providers.value( d->m_currentProvider ).url.replace( "\\{@}", text ) ) ) ); + } + } + } +} + +void KEduVocBrowserWidget::openUrl( const QUrl & targetUrl ) +{ + d->m_htmlPart->openUrl( targetUrl ); +} + +void KEduVocBrowserWidget::providerChanged( int provider ) +{ + d->m_currentProvider = provider; + showCurrentTranslation(); +} diff --git a/keduvocdocument/keduvocbrowserwidget.h b/keduvocdocument/keduvocbrowserwidget.h new file mode 100644 index 0000000..c8fccca --- /dev/null +++ b/keduvocdocument/keduvocbrowserwidget.h @@ -0,0 +1,68 @@ +/*************************************************************************** + + 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 KEDUVOCBROWSERWIDGET_H +#define KEDUVOCBROWSERWIDGET_H + +#include + +#include + +class KEduVocExpression; +class KHTMLPart; + + +namespace Editor +{ + +struct DictionaryProvider { + QString name; + QString url; + QStringList languages; +}; + +class KEDUVOCDOCUMENT_EXPORT KEduVocBrowserWidget : public QWidget +{ + Q_OBJECT +public: + explicit KEduVocBrowserWidget( QWidget* parent = 0 ); + ~KEduVocBrowserWidget(); + +public slots: + /** + * Update the word + * @param entry + * @param translation + */ + void setTranslation( KEduVocExpression* entry, int translation ); + + +private slots: + void showCurrentTranslation(); + void openUrl( const QUrl& targetUrl ); + void providerChanged( int ); +private: + class Private; + Private * const d; + + /** + * Load a list of providers of online dictionaries + */ + void setupProviders(); +}; + +} + +#endif diff --git a/keduvocdocument/keduvocbrowserwidget.ui b/keduvocdocument/keduvocbrowserwidget.ui new file mode 100644 index 0000000..1f9a8ab --- /dev/null +++ b/keduvocdocument/keduvocbrowserwidget.ui @@ -0,0 +1,48 @@ + + KEduVocBrowserWidget + + + + 0 + 0 + 514 + 535 + + + + + + + + + Lookup Current + + + + + + + + + + + + + + + Follow Table + + + + + + + + KComboBox + QComboBox +
kcombobox.h
+
+
+ + +