From ed9aac13d3b73f4ceae28757d915ffdccbbff0b1 Mon Sep 17 00:00:00 2001 From: Michele Sottile sottile Date: Tue, 13 Apr 2010 16:55:56 +0000 Subject: [PATCH] solved problems with update viewer --- src/meshlab_2.0/mainwindow_RunTime.cpp | 8 +- src/meshlab_2.0/multiViewer_Container.cpp | 297 +++++++++++++--------- src/meshlab_2.0/ui_layerDialog.h | 2 +- 3 files changed, 178 insertions(+), 129 deletions(-) diff --git a/src/meshlab_2.0/mainwindow_RunTime.cpp b/src/meshlab_2.0/mainwindow_RunTime.cpp index 513287ffc..55b973d67 100644 --- a/src/meshlab_2.0/mainwindow_RunTime.cpp +++ b/src/meshlab_2.0/mainwindow_RunTime.cpp @@ -238,13 +238,9 @@ void MainWindow::updateMenus() mvc = qobject_cast(mdiarea->currentSubWindow()->widget()); setUnsplitAct->setEnabled(mvc->viewerCounter()>1); - setSplitHAct->setEnabled(mvc->viewerCounter()<6); - setSplitVAct->setEnabled(mvc->viewerCounter()<6); GLArea* current =(GLArea*) mvc->currentView(); - if(current->size().height()/2 < current->minimumSizeHint().height()) - setSplitHAct->setEnabled(false); - if(current->size().width()/2 < current->minimumSizeHint().width()) - setSplitVAct->setEnabled(false); + setSplitHAct->setEnabled(current->size().height()/2 > current->minimumSizeHint().height()); + setSplitVAct->setEnabled(current->size().width()/2 > current->minimumSizeHint().width()); } // if active diff --git a/src/meshlab_2.0/multiViewer_Container.cpp b/src/meshlab_2.0/multiViewer_Container.cpp index 463755901..35e5d382d 100644 --- a/src/meshlab_2.0/multiViewer_Container.cpp +++ b/src/meshlab_2.0/multiViewer_Container.cpp @@ -46,8 +46,7 @@ MultiViewer_Container::MultiViewer_Container(QWidget *parent) } MultiViewer_Container::~MultiViewer_Container(){ - - foreach(Viewer* viewer,viewerList) + foreach(Viewer* viewer, viewerList) delete viewer; delete mainLayout; delete mainSplitter; @@ -62,6 +61,73 @@ void MultiViewer_Container::addView(Viewer* viewer, bool horiz){ viewerList.append(viewer); int count = viewerCounter(); + if (count==1){ + mainSplitter->addWidget((GLArea*) viewer); + } + + else{ + GLArea* current = (GLArea*)currentView(); + QSplitter* parentSplitter = qobject_cast(current->parent()); + if(parentSplitter->count()==1){ + if(horiz) + parentSplitter->setOrientation(Qt::Horizontal); + else parentSplitter->setOrientation(Qt::Vertical); + + QSplitter* newSplitter = new QSplitter(Qt::Horizontal); + + parentSplitter->addWidget(newSplitter); + newSplitter->addWidget((GLArea*)viewer); + + QList *sizes = new QList(); + + if(parentSplitter->orientation()== Qt::Horizontal){ + sizes->append(parentSplitter->width()/2); + sizes->append(parentSplitter->width()/2); + } + else{ + sizes->append(parentSplitter->height()/2); + sizes->append(parentSplitter->height()/2); + } + + parentSplitter->setSizes(*sizes); + + newSplitter->setChildrenCollapsible(false); + + } + else{ + int index = parentSplitter->indexOf(current); + QSplitter* newSplitter; + if(horiz) + newSplitter = new QSplitter(Qt::Horizontal); + else newSplitter = new QSplitter(Qt::Vertical); + + QList sizes2 = parentSplitter->sizes(); + parentSplitter->insertWidget(index, newSplitter); + + QSplitter* newSplitter2 = new QSplitter(Qt::Horizontal); + newSplitter2->addWidget((GLArea*)viewer); + current->setParent(newSplitter); + newSplitter->addWidget(newSplitter2); + + QList *sizes = new QList(); + if(newSplitter->orientation()== Qt::Horizontal){ + sizes->append(parentSplitter->width()/2); + sizes->append(parentSplitter->width()/2); + } + else{ + sizes->append(parentSplitter->height()/2); + sizes->append(parentSplitter->height()/2); + } + + parentSplitter->setSizes(sizes2); + newSplitter->setSizes(*sizes); + + newSplitter->setChildrenCollapsible(false); + newSplitter2->setChildrenCollapsible(false); + } + } + + //if (count<=2){ // if(horiz) // mainSplitter->setOrientation(Qt::Horizontal); @@ -90,125 +156,111 @@ void MultiViewer_Container::addView(Viewer* viewer, bool horiz){ // parentSplitter->addWidget((GLArea*)viewer); // }*/ //} - if (count==1){ - QSplitter* newSplitter = new QSplitter(Qt::Horizontal); - newSplitter->addWidget((GLArea*)viewer); - newSplitter->setChildrenCollapsible(false); - mainSplitter->addWidget(newSplitter); - } - else if (count==2){ - if(horiz) - mainSplitter->setOrientation(Qt::Horizontal); - else mainSplitter->setOrientation(Qt::Vertical); - QSplitter* newSplitter = new QSplitter(Qt::Horizontal); - newSplitter->addWidget((GLArea*)viewer); - newSplitter->setChildrenCollapsible(false); - newSplitter->setOpaqueResize(false); - QList *sizes = new QList(); - int width = mainSplitter->width(); - int heigh = mainSplitter->height(); - if(mainSplitter->orientation()== Qt::Horizontal){ - sizes->append(mainSplitter->width()/2); - sizes->append(mainSplitter->width()/2); - } - else{ - sizes->append(mainSplitter->height()/2); - sizes->append(mainSplitter->height()/2); - } - - - mainSplitter->addWidget(newSplitter); - mainSplitter->setSizes(*sizes); - } - else{ - GLArea* current = (GLArea*)currentView(); - QSplitter* parentSplitter = qobject_cast(current->parent()); - if(parentSplitter->count()==2){ - - int index = parentSplitter->indexOf(current); - QSplitter* newSplitter; - if(horiz) - newSplitter = new QSplitter(Qt::Horizontal); - else newSplitter = new QSplitter(Qt::Vertical); - QList sizes2 = parentSplitter->sizes(); - parentSplitter->insertWidget(index, newSplitter); - parentSplitter->setSizes(sizes2); - - current->setParent(newSplitter); - QSplitter* newSplitter2 = new QSplitter(Qt::Horizontal); - newSplitter2->addWidget((GLArea*)viewer); - newSplitter->addWidget(newSplitter2); - - - QList *sizes = new QList(); - int width = parentSplitter->width(); - int heigh = parentSplitter->height(); - if(newSplitter->orientation()== Qt::Horizontal){ - sizes->append(parentSplitter->width()/2); - sizes->append(parentSplitter->width()/2); - } - else{ - sizes->append(parentSplitter->height()/2); - sizes->append(parentSplitter->height()/2); - } - - newSplitter->setSizes(*sizes); - - newSplitter->setChildrenCollapsible(false); - newSplitter2->setChildrenCollapsible(false); - /*newSplitter->setOpaqueResize(false); - newSplitter2->setOpaqueResize(false);*/ - } - else{ - //if(parentSplitter->count()==2){ - //int index = parentSplitter->indexOf(current); - if(horiz) - parentSplitter->setOrientation(Qt::Horizontal); - else parentSplitter->setOrientation(Qt::Vertical); - - QSplitter* newSplitter = new QSplitter(Qt::Horizontal); - - parentSplitter->addWidget(newSplitter); - newSplitter->addWidget((GLArea*)viewer); - - QList *sizes = new QList(); - int width = parentSplitter->width(); - int heigh = parentSplitter->height(); - if(parentSplitter->orientation()== Qt::Horizontal){ - sizes->append(parentSplitter->width()/2); - sizes->append(parentSplitter->width()/2); - } - else{ - sizes->append(parentSplitter->height()/2); - sizes->append(parentSplitter->height()/2); - } - - parentSplitter->setSizes(*sizes); - - newSplitter->setChildrenCollapsible(false); - newSplitter->setOpaqueResize(false); - } - //} - /*else{ - if(horiz) - parentSplitter->setOrientation(Qt::Horizontal); - else parentSplitter->setOrientation(Qt::Vertical); - parentSplitter->addWidget((GLArea*)viewer); - }*/ - } - - - //int row = count/2; - //int column = count%2; - //if(column==0){ //new splitter - // QSplitter* splitter = new QSplitter(Qt::Horizontal); - // hSplitters.append(splitter); - // splitter->addWidget((GLArea*)viewer); - // vSplitter->addWidget(splitter); + //if (count==1){ + // mainSplitter->addWidget((GLArea*) viewer); + //} + //else if (count==2){ + // if(horiz) + // mainSplitter->setOrientation(Qt::Horizontal); + // else mainSplitter->setOrientation(Qt::Vertical); + // QSplitter* newSplitter = new QSplitter(Qt::Horizontal); + // newSplitter->addWidget((GLArea*)viewer); + // newSplitter->setChildrenCollapsible(false); + // newSplitter->setOpaqueResize(false); + + // QList *sizes = new QList(); + // int width = mainSplitter->width(); + // int heigh = mainSplitter->height(); + // if(mainSplitter->orientation()== Qt::Horizontal){ + // sizes->append(mainSplitter->width()/2); + // sizes->append(mainSplitter->width()/2); + // } + // else{ + // sizes->append(mainSplitter->height()/2); + // sizes->append(mainSplitter->height()/2); + // } + // + + // mainSplitter->addWidget(newSplitter); + // mainSplitter->setSizes(*sizes); + //} + //else{ + // GLArea* current = (GLArea*)currentView(); + // QSplitter* parentSplitter = qobject_cast(current->parent()); + // if(parentSplitter->count()==2){ + // + // int index = parentSplitter->indexOf(current); + // QSplitter* newSplitter; + // if(horiz) + // newSplitter = new QSplitter(Qt::Horizontal); + // else newSplitter = new QSplitter(Qt::Vertical); + // QList sizes2 = parentSplitter->sizes(); + // parentSplitter->insertWidget(index, newSplitter); + // parentSplitter->setSizes(sizes2); + + // current->setParent(newSplitter); + // QSplitter* newSplitter2 = new QSplitter(Qt::Horizontal); + // newSplitter2->addWidget((GLArea*)viewer); + // newSplitter->addWidget(newSplitter2); + + + // QList *sizes = new QList(); + // int width = parentSplitter->width(); + // int heigh = parentSplitter->height(); + // if(newSplitter->orientation()== Qt::Horizontal){ + // sizes->append(parentSplitter->width()/2); + // sizes->append(parentSplitter->width()/2); + // } + // else{ + // sizes->append(parentSplitter->height()/2); + // sizes->append(parentSplitter->height()/2); + // } + + // newSplitter->setSizes(*sizes); + + // newSplitter->setChildrenCollapsible(false); + // newSplitter2->setChildrenCollapsible(false); + // /*newSplitter->setOpaqueResize(false); + // newSplitter2->setOpaqueResize(false);*/ + // } + // else{ + // //if(parentSplitter->count()==2){ + // //int index = parentSplitter->indexOf(current); + // if(horiz) + // parentSplitter->setOrientation(Qt::Horizontal); + // else parentSplitter->setOrientation(Qt::Vertical); + + // QSplitter* newSplitter = new QSplitter(Qt::Horizontal); + + // parentSplitter->addWidget(newSplitter); + // newSplitter->addWidget((GLArea*)viewer); + + // QList *sizes = new QList(); + // int width = parentSplitter->width(); + // int heigh = parentSplitter->height(); + // if(parentSplitter->orientation()== Qt::Horizontal){ + // sizes->append(parentSplitter->width()/2); + // sizes->append(parentSplitter->width()/2); + // } + // else{ + // sizes->append(parentSplitter->height()/2); + // sizes->append(parentSplitter->height()/2); + // } + + // parentSplitter->setSizes(*sizes); + + // newSplitter->setChildrenCollapsible(false); + // //newSplitter->setOpaqueResize(false); + // } + // //} + // /*else{ + // if(horiz) + // parentSplitter->setOrientation(Qt::Horizontal); + // else parentSplitter->setOrientation(Qt::Vertical); + // parentSplitter->addWidget((GLArea*)viewer); + // }*/ //} - //else - // hSplitters.at(row)->addWidget((GLArea*)viewer); currentId = viewer->getId(); //action for new viewer @@ -217,6 +269,7 @@ void MultiViewer_Container::addView(Viewer* viewer, bool horiz){ } void MultiViewer_Container::removeView(int viewerId){ + //DA RIFARE for (int i=0; i< viewerList.count(); i++){ Viewer* viewer = viewerList.at(i); if (viewer->getId() == viewerId){ @@ -256,7 +309,7 @@ void MultiViewer_Container::updateCurrent(int current){ } void MultiViewer_Container::updateLayout(){ - foreach( Viewer* viewer,viewerList) + foreach(Viewer* viewer, viewerList) //splitter->removeWidget((GLArea*)viewer); for (int i=0; i< viewerList.count(); i++){ int row = i/2; @@ -266,7 +319,7 @@ void MultiViewer_Container::updateLayout(){ } Viewer* MultiViewer_Container::currentView(){ - foreach( Viewer* viewer,viewerList) + foreach ( Viewer* viewer, viewerList) if (viewer->getId() == currentId) return viewer; } @@ -327,4 +380,4 @@ void MultiViewer_Container::keyPressEvent(QKeyEvent *keyEv){ // } // imageMag->update(); //} -} +} \ No newline at end of file diff --git a/src/meshlab_2.0/ui_layerDialog.h b/src/meshlab_2.0/ui_layerDialog.h index 674a72070..1670eb03a 100644 --- a/src/meshlab_2.0/ui_layerDialog.h +++ b/src/meshlab_2.0/ui_layerDialog.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'layerDialog.ui' ** -** Created: Fri 9. Apr 16:41:36 2010 +** Created: Tue 13. Apr 16:55:48 2010 ** by: Qt User Interface Compiler version 4.5.3 ** ** WARNING! All changes made in this file will be lost when recompiling ui file!