insilmaril@726: #include "vymview.h" insilmaril@726: insilmaril@804: #include "branchitem.h" 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: selModel=new QItemSelectionModel (model); insilmaril@801: insilmaril@728: model->setSelectionModel (selModel); insilmaril@804: treeEditor->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@808: // Create Layout insilmaril@829: QVBoxLayout* mainLayout = new QVBoxLayout (this); //FIXME-4 not needed insilmaril@829: QSplitter *splitter= new QSplitter (this); insilmaril@808: insilmaril@808: QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); insilmaril@808: splitter->setSizePolicy(sizePolicy); insilmaril@808: mainLayout->addWidget (splitter); insilmaril@808: insilmaril@801: // Connect selections insilmaril@801: insilmaril@804: // Selection in 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@804: // Tell MapEditor to update selection insilmaril@807: /* FIXME-3 done implicit here in VymView insilmaril@801: connect ( insilmaril@801: selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@801: mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &))); insilmaril@807: */ insilmaril@801: insilmaril@823: // Needed to update selbox during animation insilmaril@804: connect ( insilmaril@804: model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), insilmaril@804: mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &))); insilmaril@804: 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@804: model, SIGNAL (expandOneLevel() ), insilmaril@804: this, SLOT (expandOneLevel() ) ); insilmaril@804: insilmaril@804: connect ( insilmaril@804: model, SIGNAL (collapseOneLevel() ), insilmaril@804: this, SLOT (collapseOneLevel() ) ); insilmaril@804: insilmaril@804: connect ( insilmaril@763: model, SIGNAL (showSelection() ), insilmaril@763: this, SLOT (showSelection() ) ); insilmaril@763: insilmaril@761: mapEditor->setAntiAlias (mainWindow->isAliased()); insilmaril@761: mapEditor->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform()); insilmaril@726: insilmaril@808: splitter->addWidget (treeEditor); insilmaril@808: splitter->addWidget (mapEditor); insilmaril@726: insilmaril@726: // Set geometry insilmaril@761: QList widths; insilmaril@788: widths<<200; insilmaril@761: widths<<600; insilmaril@808: splitter->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@807: void VymView::changeSelection (const QItemSelection &newsel, const QItemSelection &oldsel) insilmaril@727: { insilmaril@807: //cout << "VV::changeSelection newsel.count="<changeSelection (model,newsel,oldsel); insilmaril@807: mapEditor->updateSelection (newsel,oldsel); insilmaril@804: insilmaril@804: if (newsel.indexes().count()>0) insilmaril@804: { insilmaril@804: insilmaril@807: insilmaril@804: QModelIndex ix=newsel.indexes().first(); insilmaril@804: selModel->setCurrentIndex (ix,QItemSelectionModel::ClearAndSelect ); insilmaril@804: treeEditor->setCurrentIndex (ix); insilmaril@804: showSelection(); insilmaril@807: insilmaril@804: } insilmaril@801: } insilmaril@777: insilmaril@763: void VymView::expandAll() insilmaril@763: { insilmaril@769: treeEditor->expandAll(); insilmaril@763: } insilmaril@763: insilmaril@804: void VymView::expandOneLevel() insilmaril@804: { insilmaril@804: int level=999999; insilmaril@804: int d; insilmaril@804: BranchItem *cur=NULL; insilmaril@804: BranchItem *prev=NULL; insilmaril@804: QModelIndex pix; insilmaril@804: insilmaril@804: // Find level to expand insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: while (cur) insilmaril@804: { insilmaril@804: pix=model->index (cur); insilmaril@804: d=cur->depth(); insilmaril@804: if (!treeEditor->isExpanded(pix) && d < level) insilmaril@804: level=d; insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: } insilmaril@804: insilmaril@804: // Expand all to level insilmaril@804: cur=NULL; insilmaril@804: prev=NULL; insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: while (cur) insilmaril@804: { insilmaril@804: pix=model->index (cur); insilmaril@804: d=cur->depth(); insilmaril@804: if (!treeEditor->isExpanded(pix) && d <= level && cur->branchCount()>0) insilmaril@804: treeEditor->setExpanded(pix,true); insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: } insilmaril@804: /* FIXME-3 optimize expanding by using flat version of next insilmaril@804: model->nextBranch(cur,prev,false); insilmaril@804: while (cur) insilmaril@804: { insilmaril@804: cout << "ok: "<getHeadingStd()<nextBranch(cur,prev,false); insilmaril@804: } insilmaril@804: */ insilmaril@804: } insilmaril@804: insilmaril@804: void VymView::collapseOneLevel() insilmaril@804: { insilmaril@804: int level=-1; insilmaril@804: int d; insilmaril@804: BranchItem *cur=NULL; insilmaril@804: BranchItem *prev=NULL; insilmaril@804: QModelIndex pix; insilmaril@804: insilmaril@804: // Find level to collapse insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: while (cur) insilmaril@804: { insilmaril@804: pix=model->index (cur); insilmaril@804: d=cur->depth(); insilmaril@804: if (treeEditor->isExpanded(pix) && d > level) insilmaril@804: level=d; insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: } insilmaril@804: insilmaril@804: // collapse all to level insilmaril@804: cur=NULL; insilmaril@804: prev=NULL; insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: while (cur) insilmaril@804: { insilmaril@804: pix=model->index (cur); insilmaril@804: d=cur->depth(); insilmaril@804: if (treeEditor->isExpanded(pix) && d >= level) insilmaril@804: treeEditor->setExpanded(pix,false); insilmaril@804: model->nextBranch(cur,prev); insilmaril@804: } insilmaril@804: } insilmaril@804: insilmaril@763: void VymView::showSelection() insilmaril@763: { insilmaril@772: QModelIndex ix=model->getSelectedIndex(); insilmaril@772: treeEditor->scrollTo( ix, QAbstractItemView::EnsureVisible); insilmaril@807: mapEditor->scrollTo ( ix); // FIXME-3 also called from MapEditor::updateSelection... insilmaril@763: } insilmaril@763: insilmaril@823: void VymView::toggleTreeEditor() insilmaril@823: { insilmaril@823: if (treeEditor->isVisible() ) insilmaril@823: treeEditor->hide(); insilmaril@823: else insilmaril@823: treeEditor->show(); insilmaril@823: } insilmaril@823: insilmaril@823: