Index: tabs/tabbablewidget.cpp =================================================================== --- tabs/tabbablewidget.cpp (revision 845) +++ tabs/tabbablewidget.cpp (working copy) @@ -1,141 +1,147 @@ -/* - * tabbable.cpp - * Copyright (C) 2007 Kevin Smith - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include "tabbablewidget.h" -#include "tabmanager.h" -#include "tabdlg.h" -#include "common.h" -#include "jidutil.h" -#include "groupchatdlg.h" -#include - - -#ifdef Q_WS_WIN -#include -#endif - -//---------------------------------------------------------------------------- -// TabbableWidget -//---------------------------------------------------------------------------- - -TabbableWidget::TabbableWidget(const Jid &jid, PsiAccount *pa, TabManager *tabManager) - :AdvancedWidget(0), jid_(jid), pa_(pa), tabManager_(tabManager) -{ - hide(); - QTimer::singleShot(0,this,SLOT(ensureTabbedCorrectly())); -} - -void TabbableWidget::ensureTabbedCorrectly() { - if (tabManager_->shouldBeTabbed(this)) { - if (!isTabbed()) { - tabManager_->getTabs()->addTab(this); - } - } else { - if (isTabbed()) { - getManagingTabDlg()->closeTab(this, false); - } - } - show(); -} - -void TabbableWidget::bringToFront() -{ - if ( isTabbed() ) - { - getManagingTabDlg()->selectTab(this); - } - ::bringToFront(this); -} - -TabbableWidget::~TabbableWidget() -{ - hide(); -} - -void TabbableWidget::hideEvent ( QHideEvent * event ) { - Q_UNUSED(event); - if (!isVisible()) { - //you can have a hideEvent and still be visible, check the docs. - if (isTabbed()) { - getManagingTabDlg()->removeTabWithNoChecks(this); - } - } -} - -bool TabbableWidget::isTabbed() { - return tabManager_->isChatTabbed(this); -} - -TabDlg* TabbableWidget::getManagingTabDlg() -{ - return tabManager_->getManagingTabs(this); -} - -/** - * Runs any gumph necessary before hiding a tab. - * (checking new messages, setting the autodelete, cancelling composing etc) - * \return TabbableWidget is ready to be hidden. - */ -bool TabbableWidget::readyToHide() -{ - return true; -} - -Jid TabbableWidget::jid() const -{ - return jid_; -} - -const QString& TabbableWidget::getDisplayName() -{ - return jid_.user(); -} - -void TabbableWidget::activated() -{ -} - -bool TabbableWidget::isActiveTab() -{ - if ( isHidden() ) - { - return false; - } - if (!isTabbed()/* && !getManagingTabDlg()*/) - { - return isActiveWindow(); - } - return getManagingTabDlg()->isActiveWindow() && - getManagingTabDlg()->tabOnTop(this); -} - -void TabbableWidget::doFlash(bool on) -{ - flashing_ = on; - if (!isTabbed()) { - AdvancedWidget::doFlash(on); - } - emit updateFlashState(); -} - -bool TabbableWidget::flashing() const -{ - return flashing_; -} +/* + * tabbable.cpp + * Copyright (C) 2007 Kevin Smith + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "tabbablewidget.h" +#include "tabmanager.h" +#include "tabdlg.h" +#include "common.h" +#include "jidutil.h" +#include "groupchatdlg.h" +#include + + +#ifdef Q_WS_WIN +#include +#endif + +//---------------------------------------------------------------------------- +// TabbableWidget +//---------------------------------------------------------------------------- + +TabbableWidget::TabbableWidget(const Jid &jid, PsiAccount *pa, TabManager *tabManager) + :AdvancedWidget(0), jid_(jid), pa_(pa), tabManager_(tabManager) +{ + hide(); + QTimer::singleShot(0,this,SLOT(ensureTabbedCorrectly())); +} + +void TabbableWidget::ensureTabbedCorrectly() { + if (tabManager_->shouldBeTabbed(this)) { + if (!isTabbed()) { + tabManager_->getTabs()->addTab(this); + } + } else { + if (isTabbed()) { + getManagingTabDlg()->closeTab(this, false); + } + } + show(); +} + +void TabbableWidget::bringToFront() +{ + if ( isTabbed() ) + { + getManagingTabDlg()->selectTab(this); + } + ::bringToFront(this); +} + +TabbableWidget::~TabbableWidget() +{ + hide(); +} + +void TabbableWidget::hideEvent ( QHideEvent * event ) { + Q_UNUSED(event); + if (!isVisible()) { + //you can have a hideEvent and still be visible, check the docs. + if (isTabbed()) { + getManagingTabDlg()->removeTabWithNoChecks(this); + } + } +} + +bool TabbableWidget::isTabbed() { + return tabManager_->isChatTabbed(this); +} + +TabDlg* TabbableWidget::getManagingTabDlg() +{ + return tabManager_->getManagingTabs(this); +} + +/** + * Runs any gumph necessary before hiding a tab. + * (checking new messages, setting the autodelete, cancelling composing etc) + * \return TabbableWidget is ready to be hidden. + */ +bool TabbableWidget::readyToHide() +{ + return true; +} + +Jid TabbableWidget::jid() const +{ + return jid_; +} + +const QString& TabbableWidget::getDisplayName() +{ + return jid_.user(); +} + +void TabbableWidget::activated() +{ +} + +bool TabbableWidget::isActiveTab() +{ + if ( isHidden() ) + { + return false; + } + if (!isTabbed()/* && !getManagingTabDlg()*/) + { + return isActiveWindow(); + } + return getManagingTabDlg()->isActiveWindow() && + getManagingTabDlg()->tabOnTop(this); +} + +void TabbableWidget::doFlash(bool on) +{ + flashing_ = on; + if (!isTabbed()) { + AdvancedWidget::doFlash(on); + } + emit updateFlashState(); +} + +bool TabbableWidget::flashing() const +{ + return flashing_; +} + +void TabbableWidget::setWindowTitle(const QString &c) +{ + AdvancedWidget::setWindowTitle(c); + doFlash(flashing()); +} Index: tabs/tabbablewidget.h =================================================================== --- tabs/tabbablewidget.h (revision 845) +++ tabs/tabbablewidget.h (working copy) @@ -1,85 +1,87 @@ -/* - * tabbable.h - * Copyright (C) 2007 Kevin Smith - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef TABBABLE_H -#define TABBABLE_H - -#include "advwidget.h" -#include "im.h" // ChatState - -namespace XMPP { - class Jid; - class Message; -} -using namespace XMPP; - -class PsiAccount; -class TabManager; -class TabDlg; - -class TabbableWidget : public AdvancedWidget -{ - Q_OBJECT -public: - TabbableWidget(const Jid &, PsiAccount *, TabManager *tabManager); - ~TabbableWidget(); - - virtual Jid jid() const; - virtual const QString & getDisplayName(); - - virtual bool readyToHide(); - TabDlg* getManagingTabDlg(); - - /** - * Checks if the dialog is in a tabset - */ - bool isTabbed(); - - /** - * Returns true if this tab is active in the active window. - */ - bool isActiveTab(); - - // reimplemented - virtual void doFlash(bool on); - bool flashing() const; - -signals: - void updateFlashState(); - void eventsRead(const Jid &); - void captionChanged(QString); - void contactStateChanged(XMPP::ChatState); - void unreadEventUpdate(int); - -public slots: - virtual void activated(); - void bringToFront(); -protected: - virtual void hideEvent(QHideEvent *event); -protected slots: - void ensureTabbedCorrectly(); -private: - Jid jid_; - PsiAccount *pa_; - TabManager *tabManager_; - bool flashing_; -}; - -#endif +/* + * tabbable.h + * Copyright (C) 2007 Kevin Smith + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef TABBABLE_H +#define TABBABLE_H + +#include "advwidget.h" +#include "im.h" // ChatState + +namespace XMPP { + class Jid; + class Message; +} +using namespace XMPP; + +class PsiAccount; +class TabManager; +class TabDlg; + +class TabbableWidget : public AdvancedWidget +{ + Q_OBJECT +public: + TabbableWidget(const Jid &, PsiAccount *, TabManager *tabManager); + ~TabbableWidget(); + + virtual Jid jid() const; + virtual const QString & getDisplayName(); + + virtual bool readyToHide(); + TabDlg* getManagingTabDlg(); + + /** + * Checks if the dialog is in a tabset + */ + bool isTabbed(); + + /** + * Returns true if this tab is active in the active window. + */ + bool isActiveTab(); + + // reimplemented + virtual void doFlash(bool on); + bool flashing() const; + + void setWindowTitle( const QString &c ); + +signals: + void updateFlashState(); + void eventsRead(const Jid &); + void captionChanged(QString); + void contactStateChanged(XMPP::ChatState); + void unreadEventUpdate(int); + +public slots: + virtual void activated(); + void bringToFront(); +protected: + virtual void hideEvent(QHideEvent *event); +protected slots: + void ensureTabbedCorrectly(); +private: + Jid jid_; + PsiAccount *pa_; + TabManager *tabManager_; + bool flashing_; +}; + +#endif