diff --git a/keduvocdocument/CMakeLists.txt b/keduvocdocument/CMakeLists.txt index 73181e7..ca5ab8d 100644 --- a/keduvocdocument/CMakeLists.txt +++ b/keduvocdocument/CMakeLists.txt @@ -1,158 +1,162 @@ 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 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 ) 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 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 PRIVATE KF5::I18n KF5::KIOCore KF5::Archive KF5::Completion + KF5::WidgetsAddons ) # 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 PRIVATE KF5::I18n KF5::Archive KF5::Completion + KF5::WidgetsAddons ) # 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/keduvocvocabularycolumnsdialog.cpp b/keduvocdocument/keduvocvocabularycolumnsdialog.cpp new file mode 100644 index 0000000..a2d6850 --- /dev/null +++ b/keduvocdocument/keduvocvocabularycolumnsdialog.cpp @@ -0,0 +1,204 @@ +/*************************************************************************** + + options to enable/disable columns for the languages + + ----------------------------------------------------------------------- + copyright :(C) 2008 Javier goday + ----------------------------------------------------------------------- + + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 "keduvocvocabularycolumnsdialog.h" + +// KDE imports +#include +#include +#include +#include + +// Qt imports +#include +#include +#include +#include +#include +#include +#include +#include + +const int COLUMNS_LIMIT = 1; // columns for row + +using namespace Editor; + +class KEduVocVocabularyColumnsDialog::Private +{ +public: + Private( KEduVocDocument *doc, QList visibleColumns ); + + QGridLayout *m_box; + KEduVocDocument *m_doc; + QMap m_models; + QList m_visibleColumns; +}; + +KEduVocVocabularyColumnsDialog::Private::Private( KEduVocDocument *doc, QList visibleColumns ) + : m_models() +{ + m_box = new QGridLayout(); + m_doc = doc; + m_visibleColumns = visibleColumns; +} + +void KEduVocVocabularyColumnsDialog::setBox( QGridLayout * box ) +{ + d->m_box = box; +} + +QGridLayout* KEduVocVocabularyColumnsDialog::box() +{ + return d->m_box; +} + +void KEduVocVocabularyColumnsDialog::setDoc( KEduVocDocument * doc ) +{ + d->m_doc = doc; +} + +KEduVocDocument* KEduVocVocabularyColumnsDialog::doc() +{ + return d->m_doc; +} + +void KEduVocVocabularyColumnsDialog::setModels( QMap models ) +{ + d->m_models = models; +} + +QMap KEduVocVocabularyColumnsDialog::models() +{ + return d->m_models; +} + +void KEduVocVocabularyColumnsDialog::setVisibleColumns(QList< int > visibleColumns) +{ + d->m_visibleColumns = visibleColumns; +} + +QList< int > KEduVocVocabularyColumnsDialog::visibleColumns() +{ + return d->m_visibleColumns; +} + +KEduVocVocabularyColumnsDialog::KEduVocVocabularyColumnsDialog(KEduVocDocument *doc, QList visibleColumns, QWidget *parent) + : QDialog(parent), + d( new Private( doc, visibleColumns ) ) +{ + QDialogButtonBox * button_dialog = new QDialogButtonBox; + button_dialog->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel ); + + setWindowTitle( i18n("Vocabulary Columns") ); + + QWidget *main_widget = new QWidget( this ); + main_widget->setLayout( d->m_box ); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget( main_widget ); + layout->addWidget( button_dialog ); + + setLayout( layout ); + + connect( button_dialog, &QDialogButtonBox::accepted, this, &KEduVocVocabularyColumnsDialog::accept ); + connect( button_dialog, &QDialogButtonBox::rejected, this, &KEduVocVocabularyColumnsDialog::reject ); + + KTitleWidget *titleWidget = new KTitleWidget(this); + titleWidget->setText( i18n( "Enable/Disable the columns for each language" ) ); + titleWidget->setPixmap( QIcon::fromTheme( "view-file-columns" ).pixmap( 22, 22 ), KTitleWidget::ImageRight ); + d->m_box->addWidget( titleWidget, 0, 0, 1, 2 ); + + createLanguagesLayout(); +} + +KEduVocVocabularyColumnsDialog::~KEduVocVocabularyColumnsDialog() +{ + delete d; +} + +void KEduVocVocabularyColumnsDialog::accept() +{ + saveVisibleColumns(); + QDialog::accept(); +} + +void KEduVocVocabularyColumnsDialog::createLanguagesLayout() +{ + int row = 1; + int column = 0; + for( int i = 0; i < d->m_doc->identifierCount(); i++ ) { + d->m_models[i] = new QStandardItemModel( this ); + + QGroupBox *box = new QGroupBox( d->m_doc->identifier( i ).name(), 0 ); + QVBoxLayout *box_layout = new QVBoxLayout( 0 ); + + d->m_box->addWidget( box, row, column ); + + if( column < COLUMNS_LIMIT ) { + column ++; + } else { + row ++; + column = 0; + } + + box->setLayout( box_layout ); + + addLanguage( i, box_layout ); + } +} + +void KEduVocVocabularyColumnsDialog::addLanguage( int i, QVBoxLayout *parent ) +{ + for( int c = 1; c < KEduVocVocabularyModel::EntryColumnsMAX; c++ ) { + QStandardItem *item_data = new QStandardItem( KEduVocVocabularyModel::columnTitle( d->m_doc, i, c ) ); + item_data->setData( QVariant( c - 1 ), KEduVocVocabularyColumnsDialog::ColumnRole ); + item_data->setData( QVariant( i ), KEduVocVocabularyColumnsDialog::LanguageRole ); + item_data->setCheckable( true ); + item_data->setEditable( false ); + + // check if the column is active + if( d->m_visibleColumns.size() >= ( i * 8 + c ) ) { + item_data->setCheckState( d->m_visibleColumns.at( i * 8 + c ) == 1 ? Qt::Checked : Qt::Unchecked ); + } + + d->m_models[i]->insertRow( c - 1, item_data ); + } + + QTreeView *treeView = new QTreeView(this); + treeView->header()->hide(); + treeView->setModel( d->m_models [i] ); + + parent->addWidget( treeView ); +} + +void KEduVocVocabularyColumnsDialog::saveVisibleColumns() +{ + QList columns; + + for( int i = 0; i < d->m_doc->identifierCount(); i++ ) { // each model for every language + columns << 1; + for( int row = 0; row < d->m_models[i]->rowCount(); row++ ) { // the columns for one language + int enabled = ( d->m_models [i]->item( row )->checkState() == Qt::Checked ) ? 1 : 0; + columns << enabled; + } + } + + // i think that this is not the place for this + setVisibleColumns(columns); +} diff --git a/keduvocdocument/keduvocvocabularycolumnsdialog.h b/keduvocdocument/keduvocvocabularycolumnsdialog.h new file mode 100644 index 0000000..cb4e16f --- /dev/null +++ b/keduvocdocument/keduvocvocabularycolumnsdialog.h @@ -0,0 +1,127 @@ +/*************************************************************************** + + options to enable/disable columns for the languages + + ----------------------------------------------------------------------- + copyright :(C) 2008 Javier goday + ----------------------------------------------------------------------- + + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 KEDUVOCVOCABULARYCOLUMNSDIALOG_H +#define KEDUVOCVOCABULARYCOLUMNSDIALOG_H + +#include +#include +#include + +#include +#include + +class QGridLayout; +class QStandardItem; +class QStandardItemModel; +class QVBoxLayout; +class KEduVocDocument; +class KEduVocVocabularyModel; + +namespace Editor +{ + +/** +* Show options to enable/disable the columns for each language of the current document +*/ +class KEDUVOCDOCUMENT_EXPORT KEduVocVocabularyColumnsDialog : public QDialog +{ + Q_OBJECT +public: + enum Roles { + ColumnRole = 0x12, + LanguageRole = 0x18 + }; + + /** + * @param visibleColumns Represents DocumentSettings::visibleColumns() + * Example usage: Use doc->url().url() for this parameter, where doc is the KEduVocDocument object passed to this function as @param doc + * Save the settings using DocumentSettings::save() + */ + KEduVocVocabularyColumnsDialog(KEduVocDocument *doc, QList visibleColumns, QWidget *parent); + ~KEduVocVocabularyColumnsDialog(); + + void accept(); + + /** + * Initialize the gridlayout of the widget + * with one treeview for each language showing the possible columns + */ + void createLanguagesLayout(); + + /** + * Adds a language to the main gridlayout + */ + void addLanguage(int language, QVBoxLayout *parent); + + /** + * Save the visible columns for each language in the document settings + */ + void saveVisibleColumns(); + + /** + * Set the Grid Layout + */ + void setBox( QGridLayout * box ); + + /** + * Return the current Grid Layout + */ + QGridLayout* box(); + + /** + * Set the KEduVocDocument + */ + void setDoc( KEduVocDocument * doc ); + + /** + * Return the current KEduVocDocument + */ + KEduVocDocument* doc(); + + /** + * Set the list of ItemModels + * @param visibleColumns Represents DocumentSettings::visibleColumns() + * Example usage: Use doc->url().url() for this parameter, where doc is the KEduVocDocument object passed to this function as @param doc + * Save the settings using DocumentSettings::save() + */ + void setModels( QMap models ); + + /** + * Return the current list of ItemModels + */ + QMap models(); + + /** + * Set the visibleColumns list + */ + void setVisibleColumns( QList visibleColumns ); + + /** + * Return the current visibleColumns list + */ + QList visibleColumns(); + +private: + class Private; + Private * const d; +}; +} + +#endif