insilmaril@726: #include "vymview.h" insilmaril@726: insilmaril@727: #include insilmaril@742: using namespace std; insilmaril@727: insilmaril@763: #include "linkablemapobj.h" insilmaril@732: #include "mainwindow.h" insilmaril@726: #include "mapeditor.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@727: treeview=new QTreeView; insilmaril@726: treeview->setModel ((QAbstractItemModel*)model); insilmaril@759: //treeview->setMinimumWidth (50); insilmaril@761: insilmaril@726: treeview->setColumnWidth (0,350); insilmaril@726: insilmaril@727: selModel=treeview->selectionModel(); insilmaril@728: model->setSelectionModel (selModel); insilmaril@727: connect ( insilmaril@727: selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@727: this,SLOT (changeSelection(const QItemSelection &,const QItemSelection &))); insilmaril@727: insilmaril@726: // Create good old MapEditor insilmaril@761: mapEditor=model->getMapEditor(); insilmaril@761: if (!mapEditor) mapEditor=new MapEditor (model); insilmaril@728: connect ( insilmaril@728: selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@761: mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &))); insilmaril@753: /* insilmaril@729: connect ( insilmaril@729: selModel, SIGNAL (currentChanged(const QModelIndex &, const QModelIndex &)), insilmaril@729: me,SLOT (updateCurrent(const QModelIndex &,const QModelIndex &))); insilmaril@753: */ insilmaril@753: /* insilmaril@753: */ insilmaril@753: connect ( insilmaril@753: model, SIGNAL (dataChanged(const QModelIndex &, const QModelIndex &)), insilmaril@761: mapEditor,SLOT (updateData(const QModelIndex &) ) ); insilmaril@726: insilmaril@746: // VymModel may want to update selection or other data, e.g. during animation insilmaril@728: connect ( insilmaril@728: model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@761: mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &))); insilmaril@761: 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->viewport()->setFocus(); //FIXmapEditor-3 needed? insilmaril@761: mapEditor->setAntiAlias (mainWindow->isAliased()); insilmaril@761: mapEditor->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform()); insilmaril@726: insilmaril@726: addWidget (treeview); insilmaril@761: addWidget (mapEditor); insilmaril@726: insilmaril@726: // Set geometry insilmaril@761: QList widths; insilmaril@761: widths<<120; insilmaril@761: widths<<600; insilmaril@761: setSizes(widths); insilmaril@726: } insilmaril@726: insilmaril@726: QItemSelectionModel* VymView::selectionModel() insilmaril@726: { insilmaril@728: if (treeview) insilmaril@728: return selModel; insilmaril@728: else insilmaril@728: std::cout <<"VymView::selectionModel: hey, no treeview so far???\n"; insilmaril@726: return NULL; insilmaril@726: } insilmaril@726: insilmaril@746: void VymView::changeSelection (const QItemSelection &newsel, const QItemSelection &oldsel) insilmaril@727: { insilmaril@746: /* insilmaril@746: cout <<"VymView::changeSelection ("; insilmaril@746: if (!newsel.indexes().isEmpty() ) insilmaril@746: cout << model->getItem(newsel.indexes().first() )->getHeading().toStdString(); insilmaril@746: cout << " <- "; insilmaril@746: if (!oldsel.indexes().isEmpty() ) insilmaril@746: cout << model->getItem(oldsel.indexes().first() )->getHeading().toStdString(); insilmaril@746: cout << ")\n"; insilmaril@746: */ insilmaril@727: insilmaril@746: // Notify mainwindow to update satellites like NoteEditor, if needed (model==currenModel...) insilmaril@746: mainWindow->changeSelection (model,newsel,oldsel); // FIXME-3 maybe connect VymModel <-> MainWindow directly? insilmaril@767: showSelection(); insilmaril@727: } insilmaril@727: insilmaril@763: void VymView::expandAll() insilmaril@763: { insilmaril@763: treeview->expandAll(); insilmaril@763: } insilmaril@763: insilmaril@763: void VymView::showSelection() insilmaril@763: { insilmaril@763: treeview->scrollTo( insilmaril@763: model->getSelectedIndex(), insilmaril@763: //QAbstractItemView::PositionAtCenter insilmaril@763: QAbstractItemView::EnsureVisible insilmaril@763: ); insilmaril@763: insilmaril@763: LinkableMapObj* lmo=model->getSelectedLMO(); insilmaril@767: if (lmo) insilmaril@767: mapEditor->setScrollBarPosTarget (lmo->getBBox() ); insilmaril@763: } insilmaril@763: