Probably fixed #39.

This commit is contained in:
Martin Rotter 2014-03-25 13:47:45 +01:00
parent b8ef2dcab2
commit b5b4611ba2
2 changed files with 20 additions and 16 deletions

View File

@ -111,18 +111,31 @@ void TabWidget::checkTabBarVisibility() {
void TabWidget::tabInserted(int index) { void TabWidget::tabInserted(int index) {
QTabWidget::tabInserted(index); QTabWidget::tabInserted(index);
checkTabBarVisibility(); checkTabBarVisibility();
int count_of_tabs = count();
if (index < count_of_tabs - 1 && count_of_tabs > 1) {
// New tab was inserted and the tab is not the last one.
fixContentsAfterMove(index, count_of_tabs - 1);
}
} }
void TabWidget::tabRemoved(int index) { void TabWidget::tabRemoved(int index) {
QTabWidget::tabRemoved(index); QTabWidget::tabRemoved(index);
checkTabBarVisibility(); checkTabBarVisibility();
int count_of_tabs = count();
if (index < count_of_tabs && count_of_tabs > 1) {
// Some tab was removed and the tab was not the last one.
fixContentsAfterMove(index, count_of_tabs - 1);
}
} }
void TabWidget::createConnections() { void TabWidget::createConnections() {
connect(tabBar(), SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); connect(tabBar(), SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
connect(tabBar(), SIGNAL(emptySpaceDoubleClicked()), this, SLOT(addEmptyBrowser())); connect(tabBar(), SIGNAL(emptySpaceDoubleClicked()), this, SLOT(addEmptyBrowser()));
connect(tabBar(), SIGNAL(tabMoved(int,int)), this, SLOT(fixContentsAfterMove(int,int))); connect(tabBar(), SIGNAL(tabMoved(int,int)), this, SLOT(fixContentsAfterMove(int,int)));
connect(tabBar(), SIGNAL(currentChanged(int)), this, SLOT(fixContentAfterIndexChange(int)));
} }
void TabWidget::initializeTabs() { void TabWidget::initializeTabs() {
@ -324,17 +337,12 @@ void TabWidget::changeTitle(int index, const QString &new_title) {
setTabToolTip(index, new_title); setTabToolTip(index, new_title);
} }
void TabWidget::fixContentAfterIndexChange(int from) {
fixContentsIndexes(from, count() - 1);
}
void TabWidget::fixContentsAfterMove(int from, int to) { void TabWidget::fixContentsAfterMove(int from, int to) {
fixContentsIndexes(qMin(from, to), qMax(from, to)); from = qMin(from, to);
} to = qMax(from, to);
void TabWidget::fixContentsIndexes(int starting_index, int ending_index) { for ( ; from <= to; from++) {
for ( ; starting_index <= ending_index; starting_index++) { TabContent *content = static_cast<TabContent*>(widget(from));
TabContent *content = static_cast<TabContent*>(widget(starting_index)); content->setIndex(from);
content->setIndex(starting_index);
} }
} }

View File

@ -85,12 +85,8 @@ class TabWidget : public QTabWidget {
public slots: public slots:
// Fixes tabs indexes. // Fixes tabs indexes.
void fixContentAfterIndexChange(int from);
void fixContentsAfterMove(int from, int to); void fixContentsAfterMove(int from, int to);
// Fixes indexes of tab contents.
void fixContentsIndexes(int starting_index, int ending_index);
// Called when number of tab pages changes. // Called when number of tab pages changes.
void checkTabBarVisibility(); void checkTabBarVisibility();