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@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@759: QList widths; insilmaril@759: widths<<30; insilmaril@759: widths<<150; insilmaril@759: setSizes(widths); 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@726: MapEditor* me=model->getMapEditor(); insilmaril@726: if (!me) me=new MapEditor (model); insilmaril@728: connect ( insilmaril@728: selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@728: me,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@753: me,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@728: me,SLOT (updateSelection(const QItemSelection &,const QItemSelection &))); insilmaril@745: connect ( insilmaril@745: model, SIGNAL (newChildObject(QModelIndex) ), insilmaril@745: this,SLOT (updateChilds (QModelIndex) ) ); insilmaril@746: connect ( insilmaril@753: model, SIGNAL (noteHasChanged(QModelIndex) ), insilmaril@753: mainWindow, SLOT (updateNoteEditor (QModelIndex) ) ); insilmaril@746: insilmaril@726: insilmaril@746: //me->viewport()->setFocus(); //FIXME-3 needed? insilmaril@732: me->setAntiAlias (mainWindow->isAliased()); insilmaril@732: me->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform()); insilmaril@726: insilmaril@726: addWidget (treeview); insilmaril@726: addWidget (me); insilmaril@726: insilmaril@726: // Set geometry insilmaril@726: QList sizes; insilmaril@735: sizes.append (120); insilmaril@726: sizes.append (600); insilmaril@726: setSizes (sizes); 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@726: insilmaril@745: void VymView::updateChilds (QModelIndex ix) insilmaril@745: { insilmaril@745: treeview->setExpanded (ix,true); insilmaril@745: } insilmaril@745: 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@727: } insilmaril@727: