diff options
| -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();  	};  } | 
 Swift
 Swift