From e348c6baa9e2714d7393d3af4b0a9dd80f1af1b2 Mon Sep 17 00:00:00 2001 From: Marek Kochanowicz Date: Fri, 21 Feb 2014 13:30:52 +0100 Subject: [PATCH] =?UTF-8?q?accept=20drops=20from=20filters=20table.=20Cool?= =?UTF-8?q?.=20=E2=98=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/opencs/view/filter/editwidget.cpp | 9 ++++++++- apps/opencs/view/filter/editwidget.hpp | 2 ++ apps/opencs/view/filter/filterbox.cpp | 1 + apps/opencs/view/filter/filterbox.hpp | 1 + apps/opencs/view/filter/recordfilterbox.cpp | 2 ++ apps/opencs/view/filter/recordfilterbox.hpp | 1 + apps/opencs/view/world/table.hpp | 3 +-- apps/opencs/view/world/tablesubview.cpp | 22 +++++++++++++++------ apps/opencs/view/world/tablesubview.hpp | 3 ++- 9 files changed, 34 insertions(+), 10 deletions(-) diff --git a/apps/opencs/view/filter/editwidget.cpp b/apps/opencs/view/filter/editwidget.cpp index b6a5618a1..cc1578bdd 100644 --- a/apps/opencs/view/filter/editwidget.cpp +++ b/apps/opencs/view/filter/editwidget.cpp @@ -154,7 +154,7 @@ void CSVFilter::EditWidget::createFilterRequest (std::vector< std::pair< std::st if (ss.str().length() >4) { clear(); - insert (QString::fromStdString (ss.str().c_str())); + insert (QString::fromUtf8(ss.str().c_str())); } } @@ -194,3 +194,10 @@ std::string CSVFilter::EditWidget::generateFilter (std::pair< std::string, std:: return ss.str(); } + +void CSVFilter::EditWidget::useFilterRequest (const std::string& idOfFilter) +{ + clear(); + insert(QString::fromUtf8(idOfFilter.c_str())); +} + diff --git a/apps/opencs/view/filter/editwidget.hpp b/apps/opencs/view/filter/editwidget.hpp index 59fb89883..555b6d360 100644 --- a/apps/opencs/view/filter/editwidget.hpp +++ b/apps/opencs/view/filter/editwidget.hpp @@ -49,6 +49,8 @@ namespace CSVFilter void createFilterRequest(std::vector > >& filterSource, Qt::DropAction action); + + void useFilterRequest(const std::string& idOfFilter); }; } diff --git a/apps/opencs/view/filter/filterbox.cpp b/apps/opencs/view/filter/filterbox.cpp index 132beca22..a33288025 100644 --- a/apps/opencs/view/filter/filterbox.cpp +++ b/apps/opencs/view/filter/filterbox.cpp @@ -28,6 +28,7 @@ CSVFilter::FilterBox::FilterBox (CSMWorld::Data& data, QWidget *parent) connect(this, SIGNAL(createFilterRequest(std::vector > >&, Qt::DropAction)), recordFilterBox, SIGNAL(createFilterRequest(std::vector > >&, Qt::DropAction))); + connect(this, SIGNAL(useFilterRequest(const std::string&)), recordFilterBox, SIGNAL(useFilterRequest(const std::string&))); setAcceptDrops(true); } diff --git a/apps/opencs/view/filter/filterbox.hpp b/apps/opencs/view/filter/filterbox.hpp index 0c5ba667b..3817d5e70 100644 --- a/apps/opencs/view/filter/filterbox.hpp +++ b/apps/opencs/view/filter/filterbox.hpp @@ -36,6 +36,7 @@ namespace CSVFilter void recordDropped (std::vector& types, Qt::DropAction action); void createFilterRequest(std::vector > >& filterSource, Qt::DropAction action); + void useFilterRequest(const std::string& idOfFilter); }; } diff --git a/apps/opencs/view/filter/recordfilterbox.cpp b/apps/opencs/view/filter/recordfilterbox.cpp index 530ce8714..2a1a1407f 100644 --- a/apps/opencs/view/filter/recordfilterbox.cpp +++ b/apps/opencs/view/filter/recordfilterbox.cpp @@ -27,4 +27,6 @@ CSVFilter::RecordFilterBox::RecordFilterBox (CSMWorld::Data& data, QWidget *pare connect(this, SIGNAL(createFilterRequest(std::vector > >&, Qt::DropAction)), editWidget, SLOT(createFilterRequest(std::vector > >&, Qt::DropAction))); + + connect(this, SIGNAL(useFilterRequest(const std::string&)), editWidget, SLOT(useFilterRequest(const std::string&))); } diff --git a/apps/opencs/view/filter/recordfilterbox.hpp b/apps/opencs/view/filter/recordfilterbox.hpp index ac21c840f..3638dc6c3 100644 --- a/apps/opencs/view/filter/recordfilterbox.hpp +++ b/apps/opencs/view/filter/recordfilterbox.hpp @@ -30,6 +30,7 @@ namespace CSVFilter void filterChanged (boost::shared_ptr filter); void createFilterRequest(std::vector > >& filterSource, Qt::DropAction action); + void useFilterRequest(const std::string& idOfFilter); }; } diff --git a/apps/opencs/view/world/table.hpp b/apps/opencs/view/world/table.hpp index 3b72c36d5..615a31b4d 100644 --- a/apps/opencs/view/world/table.hpp +++ b/apps/opencs/view/world/table.hpp @@ -64,10 +64,9 @@ namespace CSVWorld void dragEnterEvent(QDragEnterEvent *event); - void dropEvent(QDropEvent *event); - void dragMoveEvent(QDragMoveEvent *event); + void dropEvent(QDropEvent *event); public: diff --git a/apps/opencs/view/world/tablesubview.cpp b/apps/opencs/view/world/tablesubview.cpp index ec509ae13..e330d4775 100644 --- a/apps/opencs/view/world/tablesubview.cpp +++ b/apps/opencs/view/world/tablesubview.cpp @@ -2,6 +2,7 @@ #include "tablesubview.hpp" #include +#include #include "../../model/doc/document.hpp" #include "../../model/world/tablemimedata.hpp" @@ -44,7 +45,7 @@ CSVWorld::TableSubView::TableSubView (const CSMWorld::UniversalId& id, CSMDoc::D mTable->tableSizeUpdate(); mTable->selectionSizeUpdate(); - mTable->installEventFilter(this); + mTable->viewport()->installEventFilter(this); mBottom->installEventFilter(this); filterBox->installEventFilter(this); @@ -68,6 +69,8 @@ CSVWorld::TableSubView::TableSubView (const CSMWorld::UniversalId& id, CSMDoc::D connect(filterBox, SIGNAL(recordDropped(std::vector&, Qt::DropAction)), this, SLOT(createFilterRequest(std::vector&, Qt::DropAction))); + connect(this, SIGNAL(useFilterRequest(const std::string&)), filterBox, SIGNAL(useFilterRequest(const std::string&))); + connect(this, SIGNAL(createFilterRequest(std::vector > >&, Qt::DropAction)), filterBox, SIGNAL(createFilterRequest(std::vector > >&, Qt::DropAction))); } @@ -114,9 +117,16 @@ void CSVWorld::TableSubView::createFilterRequest (std::vector< CSMWorld::Univers bool CSVWorld::TableSubView::eventFilter (QObject* object, QEvent* event) { + if (event->type() == QEvent::Drop) + { + QDropEvent* drop = dynamic_cast(event); + const CSMWorld::TableMimeData* data = dynamic_cast(drop->mimeData()); + bool handled = data->holdsType(CSMWorld::UniversalId::Type_Filter); + if (handled) + { + emit useFilterRequest(data->returnMatching(CSMWorld::UniversalId::Type_Filter).getId()); + } + return handled; + } return false; -} - -void CSVWorld::TableSubView::dropEvent (QDropEvent* event) -{ -} +} \ No newline at end of file diff --git a/apps/opencs/view/world/tablesubview.hpp b/apps/opencs/view/world/tablesubview.hpp index 399d6ce0b..1f67e0262 100644 --- a/apps/opencs/view/world/tablesubview.hpp +++ b/apps/opencs/view/world/tablesubview.hpp @@ -41,14 +41,15 @@ namespace CSVWorld virtual void setStatusBar (bool show); + protected: bool eventFilter(QObject* object, QEvent *event); - void dropEvent(QDropEvent *event); signals: void cloneRequest(const std::string&, const CSMWorld::UniversalId::Type); void createFilterRequest(std::vector > >& filterSource, Qt::DropAction action); + void useFilterRequest(const std::string& idOfFilter); private slots: