insilmaril@726: #include "vymview.h" insilmaril@726: insilmaril@727: #include insilmaril@742: using namespace std; insilmaril@727: insilmaril@732: #include "mainwindow.h" insilmaril@726: #include "mapeditor.h" insilmaril@769: #include "treeeditor.h" insilmaril@726: insilmaril@732: extern Main *mainWindow; insilmaril@732: insilmaril@732: insilmaril@742: VymView::VymView(VymModel *m) insilmaril@726: { insilmaril@742: model=m; insilmaril@742: insilmaril@726: // Create TreeView insilmaril@769: treeEditor=new TreeEditor (model); insilmaril@788: //treeEditor->setModel ((QAbstractItemModel*)model); insilmaril@769: //treeEditor->setMinimumWidth (50); insilmaril@761: insilmaril@788: treeEditor->setColumnWidth (0,150); insilmaril@788: treeEditor->setAnimated (true); insilmaril@726: insilmaril@801: proxySelModel=treeEditor->selectionModel(); insilmaril@801: selModel=new QItemSelectionModel (model); insilmaril@801: insilmaril@801: //model->setSelectionModel (proxySelModel); insilmaril@728: model->setSelectionModel (selModel); insilmaril@727: insilmaril@726: // Create good old MapEditor insilmaril@761: mapEditor=model->getMapEditor(); insilmaril@761: if (!mapEditor) mapEditor=new MapEditor (model); insilmaril@772: insilmaril@801: // Connect selections insilmaril@801: insilmaril@801: // Proxymodel changed insilmaril@801: connect ( insilmaril@801: proxySelModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@801: this,SLOT (changeProxySelection(const QItemSelection &,const QItemSelection &))); insilmaril@801: insilmaril@801: // Model changed insilmaril@801: connect ( insilmaril@801: selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@801: this,SLOT (changeSelection(const QItemSelection &,const QItemSelection &))); insilmaril@801: insilmaril@801: connect ( insilmaril@801: model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@801: mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &))); insilmaril@801: //FIXME-3 above and below necessary??? insilmaril@801: connect ( insilmaril@801: selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@801: mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &))); insilmaril@801: insilmaril@801: // Connect data changed signals insilmaril@753: connect ( insilmaril@753: model, SIGNAL (dataChanged(const QModelIndex &, const QModelIndex &)), insilmaril@761: mapEditor,SLOT (updateData(const QModelIndex &) ) ); insilmaril@726: insilmaril@800: connect ( insilmaril@800: model, SIGNAL (sortFilterChanged (const QString &)), insilmaril@800: treeEditor, SLOT (setSortFilter (const QString &) ) ); insilmaril@800: insilmaril@746: connect ( insilmaril@753: model, SIGNAL (noteHasChanged(QModelIndex) ), insilmaril@753: mainWindow, SLOT (updateNoteEditor (QModelIndex) ) ); insilmaril@746: insilmaril@763: connect ( insilmaril@763: model, SIGNAL (expandAll() ), insilmaril@763: this, SLOT (expandAll () ) ); insilmaril@763: insilmaril@763: connect ( insilmaril@763: model, SIGNAL (showSelection() ), insilmaril@763: this, SLOT (showSelection() ) ); insilmaril@763: insilmaril@726: insilmaril@761: mapEditor->setAntiAlias (mainWindow->isAliased()); insilmaril@761: mapEditor->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform()); insilmaril@726: insilmaril@769: addWidget (treeEditor); insilmaril@761: addWidget (mapEditor); insilmaril@726: insilmaril@726: // Set geometry insilmaril@761: QList widths; insilmaril@788: widths<<200; insilmaril@761: widths<<600; insilmaril@761: setSizes(widths); insilmaril@726: } insilmaril@726: insilmaril@772: VymView::~VymView() insilmaril@772: { insilmaril@772: //cout << "Destructor VymView\n"; insilmaril@772: } insilmaril@772: insilmaril@772: VymModel* VymView::getModel() insilmaril@772: { insilmaril@772: return model; insilmaril@772: } insilmaril@772: insilmaril@772: MapEditor* VymView::getMapEditor() insilmaril@772: { insilmaril@772: return mapEditor; insilmaril@772: } insilmaril@772: insilmaril@769: void VymView::initFocus() insilmaril@769: { insilmaril@769: mapEditor->setFocus(); insilmaril@769: } insilmaril@769: insilmaril@746: void VymView::changeSelection (const QItemSelection &newsel, const QItemSelection &oldsel) insilmaril@727: { insilmaril@746: // Notify mainwindow to update satellites like NoteEditor, if needed (model==currenModel...) insilmaril@777: mainWindow->changeSelection (model,newsel,oldsel); // FIXME-5 maybe connect VymModel <-> MainWindow directly? insilmaril@777: // would require to also get current model in mainWindow insilmaril@801: proxySelModel->select ( insilmaril@801: treeEditor->getProxyModel()->mapSelectionFromSource (newsel), insilmaril@801: QItemSelectionModel::ClearAndSelect ); insilmaril@801: showSelection(); insilmaril@801: } insilmaril@777: insilmaril@801: void VymView::changeProxySelection (const QItemSelection &newsel, const QItemSelection &oldsel) insilmaril@801: { insilmaril@801: // Notify mainwindow to update satellites, but map selection to insilmaril@801: // original model first insilmaril@801: insilmaril@801: // Re-emit but map selection first insilmaril@802: selModel->select (treeEditor->getProxyModel()->mapSelectionToSource (newsel), insilmaril@802: QItemSelectionModel::ClearAndSelect ); insilmaril@802: //showSelection(); insilmaril@727: } insilmaril@727: insilmaril@763: void VymView::expandAll() insilmaril@763: { insilmaril@769: treeEditor->expandAll(); insilmaril@763: } insilmaril@763: insilmaril@763: void VymView::showSelection() insilmaril@763: { insilmaril@772: QModelIndex ix=model->getSelectedIndex(); insilmaril@772: treeEditor->scrollTo( ix, QAbstractItemView::EnsureVisible); insilmaril@772: mapEditor->scrollTo ( ix); insilmaril@763: } insilmaril@763: