void FrostEdit::closeTabWidgetFrame(TabWidgetFrame* tabWidFrame) { QWidget* parent = tabWidFrame->parentWidget(); QSplitter* parentsplitter = qobject_cast<QSplitter*>(parent); if(tabWidFrame->tabWidget() == mCurrentTabWidget) mCurrentTabWidget = nullptr; if(parentsplitter != NULL) { for(int i = 0; i < tabWidFrame->tabWidget()->count(); i++) { closeTab(tabWidFrame->tabWidget(), i); } int index = mTabWidgetFrames.indexOf(tabWidFrame); mTabWidgetFrames.first()->tabWidget()->setActive(true); mTabWidgetFrames.remove(index); delete tabWidFrame; if(!parentsplitter->count() > 1) { FrostEdit* edit = qobject_cast<FrostEdit*>(parentsplitter->parentWidget()); QSplitter* splitter = qobject_cast<QSplitter*>(parentsplitter->parentWidget()); TabWidgetFrame* wid = toTabWidgetFrame(parentsplitter->widget(0)); if(edit != nullptr && splitter == nullptr) { edit->setCentralWidget(wid); wid->setParent(edit); } else if (splitter != nullptr && edit == nullptr) { splitter->addWidget(wid); wid->setParent(splitter); } delete parentsplitter; } } }
void KateViewManager::removeViewSpace (KateViewSpace *viewspace) { // abort if viewspace is 0 if (!viewspace) return; // abort if this is the last viewspace if (m_viewSpaceList.count() < 2) return; // get current splitter QSplitter *currentSplitter = qobject_cast<QSplitter*>(viewspace->parentWidget()); // no splitter found, bah if (!currentSplitter) return; // delete views of the viewspace while (viewspace->viewCount() > 0 && viewspace->currentView()) { deleteView( viewspace->currentView(), false ); } // cu viewspace m_viewSpaceList.removeAt( m_viewSpaceList.indexOf( viewspace ) ); delete viewspace; // at this point, the splitter has exactly 1 child Q_ASSERT( currentSplitter->count() == 1 ); // if we are not the root splitter, move the child one level up and delete // the splitter then. if (currentSplitter != this) { // get parent splitter QSplitter *parentSplitter = qobject_cast<QSplitter*>(currentSplitter->parentWidget()); // only do magic if found ;) if (parentSplitter) { int index = parentSplitter->indexOf (currentSplitter); // save current splitter size, as the removal of currentSplitter looses the info QList<int> parentSizes = parentSplitter->sizes(); parentSplitter->insertWidget (index, currentSplitter->widget (0)); if (qVersion() == QLatin1String("4.6.2")) currentSplitter->hide(); // bug in Qt v4.6.2, prevents crash (bug:232140), line can be removed once we are sure that noone uses Qt 4.6.2 anymore. delete currentSplitter; // now restore the sizes again parentSplitter->setSizes(parentSizes); } } else if( QSplitter* splitter = qobject_cast<QSplitter*>(currentSplitter->widget(0)) ) { // we are the root splitter and have only one child, which is also a splitter // -> eliminate the redundant splitter and move both children into the root splitter QList<int> sizes = splitter->sizes(); // adapt splitter orientation to the splitter we are about to delete currentSplitter->setOrientation(splitter->orientation()); currentSplitter->addWidget( splitter->widget(0) ); currentSplitter->addWidget( splitter->widget(0) ); delete splitter; currentSplitter->setSizes( sizes ); } // find the view that is now active. KTextEditor::View* v = activeViewSpace()->currentView(); if ( v ) activateView( v ); updateViewSpaceActions (); emit viewChanged(); }