diff options
-rw-r--r-- | mappingtreewidget.cpp | 71 | ||||
-rw-r--r-- | mappingtreewidget.h | 23 | ||||
-rw-r--r-- | pictureswidget.cpp | 1 |
3 files changed, 68 insertions, 27 deletions
diff --git a/mappingtreewidget.cpp b/mappingtreewidget.cpp index ab9b844..dcebb02 100644 --- a/mappingtreewidget.cpp +++ b/mappingtreewidget.cpp @@ -208,15 +208,6 @@ void MappingTreeWidget::deleteType(){ } } -void MappingTreeWidget::selectPath(const QList<int> &data, bool reverse){ - QModelIndex pathIdx = mModel->indexFromParentPath(data, reverse); - if(!pathIdx.isValid()){ - return; - } - QModelIndex real = mProxy->mapFromSource(pathIdx); - mTree->setCurrentIndex(real); -} - void MappingTreeWidget::hideEvent(QHideEvent *event){ QString type = mTypeBox->currentText(); if(!type.isEmpty()){ @@ -283,11 +274,38 @@ void MappingTreeView::contextMenuEvent(QContextMenuEvent *e){ ctxMenu.exec(e->globalPos()); } +void MappingTreeView::keyPressEvent(QKeyEvent *e){ + if(e->key() == Qt::Key_Right && (e->modifiers() & Qt::ControlModifier)){ + clearFocus(); + emit shiftFocus(); + return; + } + if(e->key() == Qt::Key_Right){ + emit addMapping(); + } + if(e->key() == Qt::Key_Delete){ + emit clearMappings(); + } + SmTreeView::keyPressEvent(e); +} + MappingTreeResultView::MappingTreeResultView(QWidget *parent) : SmTreeView(parent) { setAlternatingRowColors(true); setPalette(qApp->palette()); } +void MappingTreeResultView::keyPressEvent(QKeyEvent *e){ + if(e->key() == Qt::Key_Left && (e->modifiers() & Qt::ControlModifier)){ + clearFocus(); + emit shiftFocus(); + return; + } + if(e->key() == Qt::Key_Left){ + emit removeMapping(); + } + SmTreeView::keyPressEvent(e); +} + MappingEditWidget::MappingEditWidget(QWidget *parent) : QWidget(parent){ //the views mMappingTree = new MappingTreeWidget; @@ -298,13 +316,19 @@ MappingEditWidget::MappingEditWidget(QWidget *parent) : QWidget(parent){ mMappingResult->setColumnHidden(1, true); mMappingResult->setColumnHidden(2, true); mMappingResult->setColumnHidden(3, true); - connect(mMappingResult->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(resultMappingChanged(QModelIndex,QModelIndex))); + connect(mMappingTree->mappingTreeView(), SIGNAL(addMapping()), this, SLOT(addMapping())); + connect(mMappingTree->mappingTreeView(), SIGNAL(clearMappings()), this, SLOT(clearMapping())); + connect(mMappingTree->mappingTreeView(), SIGNAL(shiftFocus()), this, SLOT(shiftFocusResult())); + connect(mMappingResult, SIGNAL(shiftFocus()), this, SLOT(shiftFocusMappings())); + connect(mMappingResult, SIGNAL(removeMapping()), this, SLOT(removeMapping())); //buttons mAddMapping = new QPushButton(tr(">>")); connect(mAddMapping, SIGNAL(clicked()), this, SLOT(addMapping())); mRemoveMapping = new QPushButton(tr("<<")); connect(mRemoveMapping, SIGNAL(clicked()), this, SLOT(removeMapping())); + mClearMapping = new QPushButton(tr("&Clear")); + connect(mClearMapping, SIGNAL(clicked()), this, SLOT(clearMapping())); //layout QHBoxLayout *mainLayout = new QHBoxLayout; @@ -313,16 +337,19 @@ MappingEditWidget::MappingEditWidget(QWidget *parent) : QWidget(parent){ buttonLayout->addStretch(); buttonLayout->addWidget(mAddMapping); buttonLayout->addWidget(mRemoveMapping); + buttonLayout->addWidget(mClearMapping); buttonLayout->addStretch(); mainLayout->addLayout(buttonLayout); mainLayout->addWidget(mMappingResult); setLayout(mainLayout); + mMappingTree->mappingTreeView()->setFocus(); } void MappingEditWidget::addMapping(){ MappingData selected = mMappingTree->selectedItem(); mResultModel->addItem(selected); mMappingResult->expandAll(); + mMappingTree->mappingTreeView()->setFocus(); } void MappingEditWidget::removeMapping(){ @@ -335,6 +362,12 @@ void MappingEditWidget::removeMapping(){ mResultModel->removeItem(firstIdx); } mMappingResult->expandAll(); + mMappingTree->mappingTreeView()->setFocus(); +} + +void MappingEditWidget::clearMapping(){ + mResultModel->clearData(); + mMappingTree->mappingTreeView()->setFocus(); } void MappingEditWidget::setMappings(const QList<MappingData> &mappings){ @@ -352,18 +385,12 @@ void MappingEditWidget::expandAllResults(){ mMappingResult->expandAll(); } -void MappingEditWidget::resultMappingChanged(const QModelIndex &cur, const QModelIndex &prev){ - Q_UNUSED(prev); - if(!cur.isValid()){ - return; - } - QModelIndex idx = cur; - QList<int> path; - while(idx.isValid()){ - path << idx.data(MappingTreeResultModel::MappingIdRole).toInt(); - idx = idx.parent(); - } - mMappingTree->selectPath(path, false); +void MappingEditWidget::shiftFocusResult(){ + mMappingResult->setFocus(); +} + +void MappingEditWidget::shiftFocusMappings(){ + mMappingTree->mappingTreeView()->setFocus(); } MappingInputDialog::MappingInputDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ diff --git a/mappingtreewidget.h b/mappingtreewidget.h index b1647b5..24e50ab 100644 --- a/mappingtreewidget.h +++ b/mappingtreewidget.h @@ -30,13 +30,13 @@ class MappingTreeWidget : public QWidget { public: explicit MappingTreeWidget(QWidget *parent = 0); MappingData selectedItem() const; + MappingTreeView *mappingTreeView() const { return mTree; } public slots: void addChild(); void addType(); void deleteChild(); void deleteType(); - void selectPath(const QList<int> &data, bool reverse = true); protected: virtual void hideEvent(QHideEvent *event); @@ -73,14 +73,28 @@ class MappingTreeView : public SmTreeView { public: MappingTreeView(QWidget *parent = 0); + signals: + void addMapping(); + void removeMapping(); + void clearMappings(); + void shiftFocus(); + protected: virtual void contextMenuEvent(QContextMenuEvent *e); + virtual void keyPressEvent(QKeyEvent *e); }; class MappingTreeResultView : public SmTreeView { Q_OBJECT public: explicit MappingTreeResultView(QWidget *parent = 0); + + signals: + void shiftFocus(); + void removeMapping(); + + protected: + virtual void keyPressEvent(QKeyEvent *e); }; class MappingEditWidget : public QWidget { @@ -92,11 +106,11 @@ class MappingEditWidget : public QWidget { public slots: void addMapping(); void removeMapping(); + void clearMapping(); void setMappings(const QList<MappingData> &mappings); void expandAllResults(); - - private slots: - void resultMappingChanged(const QModelIndex &cur, const QModelIndex &prev); + void shiftFocusResult(); + void shiftFocusMappings(); private: MappingTreeWidget *mMappingTree; @@ -104,6 +118,7 @@ class MappingEditWidget : public QWidget { MappingTreeResultModel *mResultModel; QPushButton *mAddMapping; QPushButton *mRemoveMapping; + QPushButton *mClearMapping; }; class MappingInputDialog : public QDialog { diff --git a/pictureswidget.cpp b/pictureswidget.cpp index c23af06..d27d801 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -84,7 +84,6 @@ void PicturesWidget::readSettings(){ for(int i = 0; i < ps.count(); ++i){ path << ps.at(i).toInt(); } - mMappingTree->selectPath(path); mPictureView->readHeaderConfig(); } |