diff options
author | Kevin Smith <git@kismith.co.uk> | 2009-06-15 21:31:15 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2009-06-15 21:31:15 (GMT) |
commit | af53136d04a72b05efd8c51cfa5573f97e93c6cf (patch) | |
tree | f96f9f75dad886a919d4dce4aad0511db5babfb0 | |
parent | 5f1d284169c89c30f061603a9f45ab753f4b8967 (diff) | |
download | swift-contrib-af53136d04a72b05efd8c51cfa5573f97e93c6cf.zip swift-contrib-af53136d04a72b05efd8c51cfa5573f97e93c6cf.tar.bz2 |
Moving towards allowing tabs to be closed. At the moment they'll then be lost to tabbing forever, though.
-rw-r--r-- | Swift/QtUI/QtChatTabs.cpp | 26 | ||||
-rw-r--r-- | Swift/QtUI/QtChatTabs.h | 5 | ||||
-rw-r--r-- | Swift/QtUI/QtTabbable.h | 1 |
3 files changed, 26 insertions, 6 deletions
diff --git a/Swift/QtUI/QtChatTabs.cpp b/Swift/QtUI/QtChatTabs.cpp index f52a3fe..78cdf2d 100644 --- a/Swift/QtUI/QtChatTabs.cpp +++ b/Swift/QtUI/QtChatTabs.cpp @@ -7,8 +7,11 @@ namespace Swift { QtChatTabs::QtChatTabs() : QWidget() { tabs_ = new QTabWidget(this); #if QT_VERSION >= 0x040500 - //For Macs, change the tab rendering. + /*For Macs, change the tab rendering.*/ tabs_->setDocumentMode(true); + /*Closable tabs are only in Qt4.5 and later*/ + tabs_->setTabsClosable(true); + connect(tabs_, SIGNAL(tabCloseRequested(int)), this, SLOT(handleTabCloseRequested(int))); #endif QVBoxLayout *layout = new QVBoxLayout; layout->setSpacing(0); @@ -20,14 +23,29 @@ QtChatTabs::QtChatTabs() : QWidget() { void QtChatTabs::addTab(QtTabbable* tab) { tabs_->addTab(tab, tab->windowTitle()); - connect(tab, SIGNAL(titleUpdated()), this, SLOT(tabTitleUpdated())); + connect(tab, SIGNAL(titleUpdated()), this, SLOT(handleTabTitleUpdated())); + connect(tab, SIGNAL(windowClosing()), this, SLOT(handleTabClosing())); } -void QtChatTabs::tabClosing() { +void QtChatTabs::handleTabClosing() { + QWidget* widget = qobject_cast<QWidget*>(sender()); + if (!widget) { + return; + } + int index = tabs_->indexOf(widget); + if (index < 0) { + return; + } + tabs_->removeTab(index); +} +void QtChatTabs::handleTabCloseRequested(int index) { + QWidget* widget = tabs_->widget(index); + tabs_->removeTab(index); + widget->hide(); } -void QtChatTabs::tabTitleUpdated() { +void QtChatTabs::handleTabTitleUpdated() { QWidget* widget = qobject_cast<QWidget*>(sender()); if (!widget) { return; diff --git a/Swift/QtUI/QtChatTabs.h b/Swift/QtUI/QtChatTabs.h index 39a3e44..37acc91 100644 --- a/Swift/QtUI/QtChatTabs.h +++ b/Swift/QtUI/QtChatTabs.h @@ -12,8 +12,9 @@ namespace Swift { void addTab(QtTabbable* tab); private slots: - void tabClosing(); - void tabTitleUpdated(); + void handleTabClosing(); + void handleTabTitleUpdated(); + void handleTabCloseRequested(int index); private: QTabWidget* tabs_; }; diff --git a/Swift/QtUI/QtTabbable.h b/Swift/QtUI/QtTabbable.h index dfae498..9894bfe 100644 --- a/Swift/QtUI/QtTabbable.h +++ b/Swift/QtUI/QtTabbable.h @@ -11,5 +11,6 @@ namespace Swift { signals: void titleUpdated(); + void windowClosing(); }; } |