diff --git a/modules/gui/src/sequence/sequence_table_view.cc b/modules/gui/src/sequence/sequence_table_view.cc index 4529101fed75e0805f086a646287e8e4a1ebecb2..628301d37e1c1065af6540202524e01ee9bd7877 100644 --- a/modules/gui/src/sequence/sequence_table_view.cc +++ b/modules/gui/src/sequence/sequence_table_view.cc @@ -349,6 +349,16 @@ void SequenceTableView::wheelEvent(QWheelEvent* event) } } +void SequenceTableView::keyPressEvent(QKeyEvent* event) +{ + if(event->matches(QKeySequence::Copy)){ + emit CopyEvent(event); + } + else{ + QTableView::keyPressEvent(event); + } +} + SequenceTableView::~SequenceTableView(){} }} diff --git a/modules/gui/src/sequence/sequence_table_view.hh b/modules/gui/src/sequence/sequence_table_view.hh index f8c07ee813d21cdf6a45fa9e6091bf54705e8502..e138d07eadc8dc63a4c110b4fbcb2900f82bac44 100644 --- a/modules/gui/src/sequence/sequence_table_view.hh +++ b/modules/gui/src/sequence/sequence_table_view.hh @@ -44,6 +44,7 @@ public: signals: void MouseWheelEvent(QWheelEvent* event); + void CopyEvent(QKeyEvent* event); public slots: void columnCountChanged(const QModelIndex& index, int old_count, int new_count); @@ -55,7 +56,8 @@ protected: virtual void mouseDoubleClickEvent(QMouseEvent* event); virtual void mouseReleaseEvent(QMouseEvent* event); virtual void resizeEvent(QResizeEvent* event); - virtual void wheelEvent (QWheelEvent* event); + virtual void wheelEvent(QWheelEvent* event); + virtual void keyPressEvent(QKeyEvent* event); virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers); void scrollTo (const QModelIndex & index, ScrollHint hint = EnsureVisible); diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc index 722c962d7bfb8fee5d1955b51d12bf300f7d59fe..4164bbeecdd5429488bbfbf2ba3a3c3d1e1c773c 100644 --- a/modules/gui/src/sequence/sequence_viewer.cc +++ b/modules/gui/src/sequence/sequence_viewer.cc @@ -23,10 +23,13 @@ #include <boost/pointer_cast.hpp> #include <QAbstractItemView> +#include <QApplication> +#include <QClipboard> #include <QHeaderView> #include <QPushButton> #include <QShortcut> #include <QVBoxLayout> +#include <QVarLengthArray> #include <ost/mol/chain_view.hh> #include <ost/mol/entity_view.hh> @@ -96,6 +99,7 @@ SequenceViewerV2::SequenceViewerV2(QWidget* parent): Widget(NULL,parent) connect(seq_table_view_,SIGNAL(doubleClicked(const QModelIndex&)),model_,SLOT(DoubleClicked(const QModelIndex&))); connect(seq_table_view_->GetStaticColumn(),SIGNAL(doubleClicked(const QModelIndex&)),this,SLOT(DoubleClicked(const QModelIndex&))); connect(seq_table_view_->GetStaticRow(),SIGNAL(doubleClicked(const QModelIndex&)),this,SLOT(DoubleClicked(const QModelIndex&))); + connect(seq_table_view_,SIGNAL(CopyEvent(QKeyEvent*)),this,SLOT(CopyEvent(QKeyEvent*))); connect(seq_table_view_,SIGNAL(MouseWheelEvent(QWheelEvent*)),this,SLOT(MouseWheelEvent(QWheelEvent*))); gfx::GfxNodeP root_node = gfx::Scene::Instance().GetRootNode(); @@ -128,8 +132,8 @@ void SequenceViewerV2::UpdateSearchBar() { QStringList sequence_names_; for(int i = 1; i< model_->rowCount(); i++){ - QString name = model_->data(model_->index(i,0),Qt::DisplayRole).toString(); - sequence_names_.append(name); + QString name = model_->data(model_->index(i,0),Qt::DisplayRole).toString(); + sequence_names_.append(name); } seq_search_bar_->UpdateItems(sequence_names_); } @@ -180,6 +184,27 @@ void SequenceViewerV2::MouseWheelEvent(QWheelEvent* event) event->accept(); } +void SequenceViewerV2::CopyEvent(QKeyEvent* event) +{ + const QModelIndexList& list = seq_table_view_->selectionModel()->selectedIndexes(); + if(list.size()>0){ + QString clipboard_string; + + QVarLengthArray<QString> clipboard_array(model_->rowCount()); + for(int i = 0; i < list.size(); i++){ + const QModelIndex& index = list[i]; + clipboard_array[index.row()].append(model_->data(index,Qt::DisplayRole).toString()); + } + for(int i = 0; i < clipboard_array.size(); i++){ + if(clipboard_array[i].size()>0){ + clipboard_string.append(clipboard_array[i]+"\n"); + } + } + QApplication::clipboard()->setText(clipboard_string); + } + event->accept(); +} + void SequenceViewerV2::FindInSequence() { if(seq_search_bar_->isHidden()){ diff --git a/modules/gui/src/sequence/sequence_viewer.hh b/modules/gui/src/sequence/sequence_viewer.hh index 112bb1c4b5ab92b591873c3b66140324d56d00ba..b04d242dc3c1d3befd3ffda6698e417b3322e2a2 100644 --- a/modules/gui/src/sequence/sequence_viewer.hh +++ b/modules/gui/src/sequence/sequence_viewer.hh @@ -56,10 +56,6 @@ public slots: /// \internal void OnSearchBarUpdate(const QString&, bool, const QString&); -private slots: -/// \brief show sequence search bar -void FindInSequence(); - private: void UpdateSearchBar(); void SelectList(const QModelIndexList& list); @@ -68,10 +64,12 @@ private: SequenceTableView* seq_table_view_; private slots: + /// \brief show sequence search bar + void FindInSequence(); void SelectionModelChanged(const QItemSelection&, const QItemSelection&); void DoubleClicked(const QModelIndex& index); void MouseWheelEvent(QWheelEvent* event); - + void CopyEvent(QKeyEvent* event); }; }}