From 4fa112a08caff507864fd7eb362777cf6921f413 Mon Sep 17 00:00:00 2001 From: aquiles Date: Mon, 8 Nov 2010 14:14:28 +0100 Subject: [PATCH] Changed: #1168 default checkbox activated, formdelegate adapted to introduced proxymodel --- .../georges_editor_qt/src/formdelegate.cpp | 22 ++-- .../georges_editor_qt/src/formitem.cpp | 4 + .../src/georges_treeview_dialog.cpp | 100 +++++++++-------- .../src/georges_treeview_dialog.h | 2 +- .../src/georges_treeview_form.ui | 4 +- .../src/georgesform_model.cpp | 101 ++++++++++++++++-- .../georges_editor_qt/src/georgesform_model.h | 7 ++ .../src/georgesform_proxy_model.cpp | 74 ++++++++++--- .../georges_editor_qt/src/log_form.ui | 10 +- 9 files changed, 242 insertions(+), 82 deletions(-) diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp index 2dc637058..ff48889fc 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formdelegate.cpp @@ -35,6 +35,7 @@ along with this program. If not, see . #include // Project includes #include "georgesform_model.h" +#include "georgesform_proxy_model.h" #include "formitem.h" namespace NLQT @@ -49,14 +50,15 @@ namespace NLQT const QStyleOptionViewItem & option , const QModelIndex &index) const { - CFormItem *item = static_cast(index.internalPointer()); + const CGeorgesFormProxyModel * mp = dynamic_cast(index.model()); + const CGeorgesFormModel * m = dynamic_cast(mp->sourceModel()); + CFormItem *item = static_cast(mp->mapToSource(index).internalPointer()); QString value = item->data(1).toString(); - if (value.isEmpty()) + if (value.isEmpty() || !mp || !m) return 0; - const NLGEORGES::UType *type = dynamic_cast(index.model())-> - getItem(index)->getFormElm()->getType(); + const NLGEORGES::UType *type = m->getItem(mp->mapToSource(index))->getFormElm()->getType(); if(type) { int numDefinitions = type->getNumDefinition(); @@ -130,8 +132,10 @@ namespace NLQT void FormDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { - const NLGEORGES::UType *type = dynamic_cast(index.model())-> - getItem(index)->getFormElm()->getType(); + const CGeorgesFormProxyModel * mp = dynamic_cast(index.model()); + const CGeorgesFormModel * m = dynamic_cast(mp->sourceModel()); + + const NLGEORGES::UType *type = m->getItem(mp->mapToSource(index))->getFormElm()->getType(); int numDefinitions = type->getNumDefinition(); QString value = index.model()->data(index, Qt::DisplayRole).toString(); @@ -175,8 +179,10 @@ namespace NLQT void FormDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { - const NLGEORGES::UType *type = dynamic_cast(index.model())-> - getItem(index)->getFormElm()->getType(); + const CGeorgesFormProxyModel * mp = dynamic_cast(index.model()); + const CGeorgesFormModel * m = dynamic_cast(mp->sourceModel()); + + const NLGEORGES::UType *type = m->getItem(mp->mapToSource(index))->getFormElm()->getType(); int numDefinitions = type->getNumDefinition(); if (numDefinitions) diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp index 74f3f5625..3ec84e4e1 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/formitem.cpp @@ -85,6 +85,10 @@ namespace NLQT if (column < 0 || column >= itemData.size()) return false; + // TODO: default values + if (!formElm) + return false; + itemData[column] = value; if (formElm->isAtom()) { diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp index 3eb02e301..b163799d2 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.cpp @@ -65,10 +65,12 @@ namespace NLQT _ui.treeView->setItemDelegateForColumn(1, formdelegate); - connect(_ui.treeView, SIGNAL(doubleClicked (QModelIndex)), - this, SLOT(doubleClicked (QModelIndex))); - connect(_ui.checkBoxParent, SIGNAL(stateChanged(int)), - this, SLOT(showParentRows (int))); + //connect(_ui.treeView, SIGNAL(doubleClicked (QModelIndex)), + // this, SLOT(doubleClicked (QModelIndex))); + connect(_ui.checkBoxParent, SIGNAL(toggled(bool)), + this, SLOT(filterRows())); + connect(_ui.checkBoxDefaults, SIGNAL(toggled(bool)), + this, SLOT(filterRows())); } CGeorgesTreeViewDialog::~CGeorgesTreeViewDialog() @@ -131,9 +133,9 @@ namespace NLQT _ui.treeView->resizeColumnToContents(0); _ui.treeView->resizeColumnToContents(1); _ui.treeView->resizeColumnToContents(2); - _ui.treeView->hideColumn(3); + //_ui.treeView->hideColumn(3); - showParentRows(_ui.checkBoxParent->isChecked()); + filterRows(); //_ui.treeView->setRowHidden(0,QModelIndex(),true); connect(model, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), @@ -237,8 +239,10 @@ namespace NLQT void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index ) { - if (index.column() == 1) + if (index.column() == 1) { + //QTreeView::doubleClicked(index); return; + } CFormItem *item = static_cast(index.internalPointer()); @@ -264,53 +268,61 @@ namespace NLQT } else { - Modules::mainWin().getTreeViewList().removeOne(this); - if(!Modules::mainWin().getTreeViewList().size()) + if(Modules::mainWin().getTreeViewList().size() == 1) { - Modules::mainWin().createEmptyView(); + Modules::mainWin().createEmptyView( + Modules::mainWin().getTreeViewList().takeFirst()); } deleteLater(); } } - void CGeorgesTreeViewDialog::showParentRows(int newState) + void CGeorgesTreeViewDialog::filterRows() { + nlinfo("CGeorgesTreeViewDialog::filterRows"); CGeorgesFormProxyModel * mp = dynamic_cast(_ui.treeView->model()); CGeorgesFormModel *m = dynamic_cast(mp->sourceModel()); - - for (int i = 0; i < m->rowCount(); i++) - { - const QModelIndex in = m->index(i,0); - if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm) - { - if (newState == Qt::Checked) - { - _ui.treeView->setRowHidden(in.row(),in.parent(),false); - } - else - { - _ui.treeView->setRowHidden(in.row(),in.parent(),true); - } - } - else - { // search childs // recursive? - for (int j = 0; j < m->rowCount(in); j++) - { - const QModelIndex in2 = m->index(j,0,in); - if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm) - { - if (newState == Qt::Checked) - { - _ui.treeView->setRowHidden(in2.row(),in,false); - } - else - { - _ui.treeView->setRowHidden(in2.row(),in,true); - } - } - } - } // end of search childs + if (m) { + m->setShowParents(_ui.checkBoxParent->isChecked()); + m->setShowDefaults(_ui.checkBoxDefaults->isChecked()); } + + //CGeorgesFormProxyModel * mp = dynamic_cast(_ui.treeView->model()); + //CGeorgesFormModel *m = dynamic_cast(mp->sourceModel()); + + //for (int i = 0; i < m->rowCount(); i++) + //{ + // const QModelIndex in = m->index(i,0); + // if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm) + // { + // if (newState == Qt::Checked) + // { + // _ui.treeView->setRowHidden(in.row(),in.parent(),false); + // } + // else + // { + // _ui.treeView->setRowHidden(in.row(),in.parent(),true); + // } + // } + // else + // { // search childs // recursive? + // for (int j = 0; j < m->rowCount(in); j++) + // { + // const QModelIndex in2 = m->index(j,0,in); + // if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm) + // { + // if (newState == Qt::Checked) + // { + // _ui.treeView->setRowHidden(in2.row(),in,false); + // } + // else + // { + // _ui.treeView->setRowHidden(in2.row(),in,true); + // } + // } + // } + // } // end of search childs + //} } } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h index 39e7cfbc9..88fa02c7b 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_dialog.h @@ -66,7 +66,7 @@ namespace NLQT private Q_SLOTS: void doubleClicked ( const QModelIndex & index ); void modifiedFile( ); - void showParentRows(int); + void filterRows(); private: Ui::CGeorgesTreeViewDialog _ui; diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_form.ui b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_form.ui index 873747794..4cff36c92 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_form.ui +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georges_treeview_form.ui @@ -18,8 +18,8 @@ - 241 - 236 + 199 + 165 diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp index 3ce2c30a6..79fe69319 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.cpp @@ -76,11 +76,48 @@ namespace NLQT } case Qt::BackgroundRole: { - if (getItem(p_index)->valueFrom() == UFormElm::ValueDefaultDfn) - return QBrush(QColor(255,0,0,30)); - if (getItem(p_index)->nodeFrom() == UFormElm::NodeParentForm) - return QBrush(QColor(0,255,0,30)); - return QVariant(); + QBrush defaultBrush = QBrush(QColor(255,0,0,30)); + QBrush parentBrush = QBrush(QColor(0,255,0,30)); + + switch (getItem(p_index)->nodeFrom()) + { + case NLGEORGES::UFormElm::NodeParentForm: + { + switch (getItem(p_index)->valueFrom()) + { + case NLGEORGES::UFormElm::ValueDefaultDfn: + { + return defaultBrush; + } + default: + { + return parentBrush; + } + } + } + case NLGEORGES::UFormElm::NodeForm: + { + switch (getItem(p_index)->valueFrom()) + { + case NLGEORGES::UFormElm::ValueParentForm: + { + return parentBrush; + } + case NLGEORGES::UFormElm::ValueDefaultDfn: + { + return defaultBrush; + } + default: + { + return QVariant(); + } + } + } + default: + { + return QVariant(); + } + } } case Qt::DecorationRole: { @@ -363,21 +400,57 @@ namespace NLQT elmtType.append("_noValue"); } columnData << QString(elmName.c_str()) << QString(value.c_str()) << "" << elmtType; + qDebug() << columnData; parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN)); //if (parents.last()->childCount() > 0) { // parents << parents.last()->child(parents.last()->childCount()-1); //} loadFormData(elmt, parent->child(parent->childCount()-1)); - } + } else { // add Defaults + // TODO: spams warnings for non ATOM values but i dont get type of non existing nodes + bool success = root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); + switch (*whereN) + { + case UFormElm::NodeForm: + elmtType.append("_fromForm"); break; + case UFormElm::NodeParentForm: + elmtType.append("_fromParentForm"); break; + case UFormElm::NodeDfn: + elmtType.append("_isDFN"); break; + case UFormElm::NodeType: + elmtType.append("_isType"); break; + default: + elmtType.append("_noNode"); + } + switch (*whereV) + { + case UFormElm::ValueForm: + elmtType.append("_formValue"); break; + case UFormElm::ValueParentForm: + elmtType.append("_parentValue"); break; + case UFormElm::ValueDefaultDfn: + elmtType.append("_dfnValue"); break; + case UFormElm::ValueDefaultType: + elmtType.append("_typeValue"); break; + default: + elmtType.append("_noValue"); + } + + columnData << QString(elmName.c_str()) << QString(value.c_str()) << "" << elmtType; + parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN)); + //columnData << QString(elmName.c_str()) << QString("default") << QString("default"); //parent->appendChild(new CFormItem(elmt, columnData, parent, UFormElm::ValueDefaultDfn, UFormElm::NodeDfn)); } + } + else + { + nlinfo("getNodeByName returned false"); } } - num++; } } @@ -474,6 +547,20 @@ namespace NLQT loadFormHeader(); loadFormData(_rootElm, _rootItem); } + + /******************************************************************************/ + + void CGeorgesFormModel::setShowParents( bool show ) { + _showParents = show; + Q_EMIT layoutAboutToBeChanged(); + Q_EMIT layoutChanged(); + } + void CGeorgesFormModel::setShowDefaults( bool show ) + { + _showDefaults = show; + Q_EMIT layoutAboutToBeChanged(); + Q_EMIT layoutChanged(); + } } /* namespace NLQT */ /* end of file */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h index 923da9fa1..d7665c271 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_model.h @@ -55,6 +55,10 @@ namespace NLQT int columnCount(const QModelIndex &parent = QModelIndex()) const; CFormItem *getItem(const QModelIndex &index) const; CGeorgesFormModel *model() { return this; } + bool showParents() { return _showParents;} + bool showDefaults() { return _showDefaults;} + void setShowParents( bool show ); + void setShowDefaults( bool show ); private: void setupModelData(); @@ -68,6 +72,9 @@ namespace NLQT QStringList _parents; QList* _parentRows; + bool _showParents; + bool _showDefaults; + };/* class CGeorgesFormModel */ } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp index 5ab408525..ff09f73f5 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/georgesform_proxy_model.cpp @@ -17,9 +17,16 @@ */ #include "georgesform_proxy_model.h" +#include "georgesform_model.h" // NeL includes #include +#include + +// project includes +#include "formitem.h" + +#include namespace NLQT { @@ -27,21 +34,58 @@ namespace NLQT bool CGeorgesFormProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - nlinfo("CGeorgesFormProxyModel::filterAcceptsRow"); - //QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); - //QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent); - //QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent); + //nlinfo("CGeorgesFormProxyModel::filterAcceptsRow"); - //return (sourceModel()->data(index0).toString().contains(filterRegExp()) - // || sourceModel()->data(index1).toString().contains(filterRegExp())) - // && dateInRange(sourceModel()->data(index2).toDate()); - - // if (getItem(p_index)->valueFrom() == UFormElm::ValueDefaultDfn) - // return QBrush(QColor(255,0,0,30)); - // if (getItem(p_index)->nodeFrom() == UFormElm::NodeParentForm) - // return QBrush(QColor(0,255,0,30)); - // return QVariant(); - return true; + // column doesnt matter for item + CGeorgesFormModel *smodel = dynamic_cast(sourceModel()); + QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); + CFormItem *item = smodel->getItem(index); + + //qDebug() << smodel->showParents() << (item->valueFrom() == NLGEORGES::UFormElm::NodeParentForm); + //nlinfo("%s %d %d %d %d", item->data(index.column()).toString().toStdString().c_str(), + // item->valueFrom(), + // item->nodeFrom(), + // smodel->showParents(), + // (item->valueFrom() == NLGEORGES::UFormElm::NodeParentForm)); + switch (item->nodeFrom()) + { + case NLGEORGES::UFormElm::NodeParentForm: + { + switch (item->valueFrom()) + { + case NLGEORGES::UFormElm::ValueDefaultDfn: + { + return smodel->showDefaults(); + } + default: + { + return smodel->showParents();; + } + } + } + case NLGEORGES::UFormElm::NodeForm: + { + switch (item->valueFrom()) + { + case NLGEORGES::UFormElm::ValueParentForm: + { + return smodel->showParents(); + } + case NLGEORGES::UFormElm::ValueDefaultDfn: + { + return smodel->showDefaults(); + } + default: + { + return true; + } + } + } + default: + { + return true; + } + } } /******************************************************************************/ @@ -49,7 +93,7 @@ namespace NLQT bool CGeorgesFormProxyModel::filterAcceptsColumn(int sourceRow, const QModelIndex &sourceParent) const { - nlinfo("CGeorgesFormProxyModel::filterAcceptsColumn"); + //nlinfo("CGeorgesFormProxyModel::filterAcceptsColumn"); return QSortFilterProxyModel::filterAcceptsColumn(sourceRow, sourceParent); } } /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_form.ui b/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_form.ui index 7a22af13e..218a6e43d 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_form.ui +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/log_form.ui @@ -6,8 +6,8 @@ 0 0 - 472 - 310 + 540 + 370 @@ -18,8 +18,8 @@ - 89 - 122 + 0 + 0 @@ -41,7 +41,7 @@ 0 - 100 + 0