15
15
* You should have received a copy of the GNU General Public License
16
16
* along with this library; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
48
50
//----------------------------------------------------------------------------
50
52
TabDlgDelegate::TabDlgDelegate(QObject *parent)
54
TabDlgDelegate::~TabDlgDelegate() {
57
Qt::WindowFlags TabDlgDelegate::initWindowFlags() const {
57
TabDlgDelegate::~TabDlgDelegate()
61
Qt::WindowFlags TabDlgDelegate::initWindowFlags() const
58
63
return (Qt::WindowFlags)0;
61
void TabDlgDelegate::create(QWidget *) {
64
void TabDlgDelegate::destroy(QWidget *) {
67
void TabDlgDelegate::tabWidgetCreated(QWidget *, PsiTabWidget *) {
70
bool TabDlgDelegate::paintEvent(QWidget *, QPaintEvent *) {
74
bool TabDlgDelegate::resizeEvent(QWidget *, QResizeEvent *) {
78
bool TabDlgDelegate::mousePressEvent(QWidget *, QMouseEvent *) {
82
bool TabDlgDelegate::mouseMoveEvent(QWidget *, QMouseEvent *) {
86
bool TabDlgDelegate::mouseReleaseEvent(QWidget *, QMouseEvent *) {
90
bool TabDlgDelegate::changeEvent(QWidget *, QEvent *) {
94
bool TabDlgDelegate::event(QWidget *, QEvent *) {
98
bool TabDlgDelegate::eventFilter(QWidget *, QObject *, QEvent *) {
66
void TabDlgDelegate::create(QWidget *)
70
void TabDlgDelegate::destroy(QWidget *)
74
void TabDlgDelegate::tabWidgetCreated(QWidget *, PsiTabWidget *)
78
bool TabDlgDelegate::paintEvent(QWidget *, QPaintEvent *)
83
bool TabDlgDelegate::resizeEvent(QWidget *, QResizeEvent *)
88
bool TabDlgDelegate::mousePressEvent(QWidget *, QMouseEvent *)
93
bool TabDlgDelegate::mouseMoveEvent(QWidget *, QMouseEvent *)
98
bool TabDlgDelegate::mouseReleaseEvent(QWidget *, QMouseEvent *)
103
bool TabDlgDelegate::changeEvent(QWidget *, QEvent *)
108
bool TabDlgDelegate::event(QWidget *, QEvent *)
113
bool TabDlgDelegate::eventFilter(QWidget *, QObject *, QEvent *)
111
127
* will manage some aspects of the TabDlg behavior. Ownership is not
114
TabDlg::TabDlg(TabManager* tabManager, QSize size, TabDlgDelegate *delegate)
130
TabDlg::TabDlg(TabManager* tabManager, const QString& geometryOption, TabDlgDelegate *delegate)
115
131
: AdvancedWidget<QWidget>(0, delegate ? delegate->initWindowFlags() : (Qt::WindowFlags)0)
116
132
, delegate_(delegate)
125
141
, tabManager_(tabManager)
126
142
, userManagement_(true)
127
143
, tabBarSingles_(true)
128
, simplifiedCaption_(false) {
144
, simplifiedCaption_(false)
145
, activateTabMapper_(0)
130
148
delegate_->create(this);
133
if (PsiOptions::instance()->getOption("options.ui.mac.use-brushed-metal-windows").toBool()) {
134
setAttribute(Qt::WA_MacMetalStyle);
138
152
qRegisterMetaType<TabDlg*>("TabDlg*");
139
153
qRegisterMetaType<TabbableWidget*>("TabbableWidget*");
141
155
tabWidget_ = new PsiTabWidget(this);
142
156
tabWidget_->setCloseIcon(IconsetFactory::icon("psi/closetab").icon());
143
157
connect(tabWidget_, SIGNAL(mouseDoubleClickTab(QWidget*)), SLOT(mouseDoubleClickTab(QWidget*)));
158
connect(tabWidget_, SIGNAL(mouseMiddleClickTab(QWidget*)), SLOT(mouseMiddleClickTab(QWidget*)));
144
159
connect(tabWidget_, SIGNAL(aboutToShowMenu(QMenu*)), SLOT(tab_aboutToShowMenu(QMenu*)));
145
160
connect(tabWidget_, SIGNAL(tabContextMenu(int, QPoint, QContextMenuEvent*)), SLOT(showTabMenu(int, QPoint, QContextMenuEvent*)));
146
161
connect(tabWidget_, SIGNAL(closeButtonClicked()), SLOT(closeCurrentTab()));
202
213
act_close_->setShortcuts(ShortcutManager::instance()->shortcuts("common.close"));
203
214
act_prev_->setShortcuts(ShortcutManager::instance()->shortcuts("chat.previous-tab"));
204
215
act_next_->setShortcuts(ShortcutManager::instance()->shortcuts("chat.next-tab"));
217
bool useTabShortcuts = PsiOptions::instance()->getOption("options.ui.tabs.use-tab-shortcuts").toBool();
218
if (useTabShortcuts && !activateTabMapper_) {
219
activateTabMapper_ = new QSignalMapper(this);
220
connect(activateTabMapper_, SIGNAL(mapped(int)), tabWidget_, SLOT(setCurrentPage(int)));
221
for (int i = 0; i < 10; ++i) {
222
QAction* action = new QAction(this);
223
connect(action, SIGNAL(triggered()), activateTabMapper_, SLOT(map()));
224
action->setShortcuts(QList<QKeySequence>() << QKeySequence(QString("Ctrl+%1").arg(i))
225
<< QKeySequence(QString("Alt+%1").arg(i)));
226
activateTabMapper_->setMapping(action, (i > 0 ? i : 10) - 1);
227
tabMapperActions_ += action;
231
else if (!useTabShortcuts && activateTabMapper_) {
232
qDeleteAll(tabMapperActions_);
233
tabMapperActions_.clear();
234
delete activateTabMapper_;
235
activateTabMapper_ = 0;
207
239
void TabDlg::resizeEvent(QResizeEvent *e)
368
400
connect(tab, SIGNAL(invalidateTabInfo()), SLOT(updateTab()));
369
401
connect(tab, SIGNAL(updateFlashState()), SLOT(updateFlashState()));
371
this->showWithoutActivation();
373
404
setUpdatesEnabled(true);
405
QTimer::singleShot(0, this, SLOT(showTabWithoutActivation()));
408
void TabDlg::showTabWithoutActivation()
410
showWithoutActivation();
376
413
void TabDlg::detachCurrentTab()
384
421
detachTab(static_cast<TabbableWidget*>(widget));
424
void TabDlg::mouseMiddleClickTab(QWidget* widget) {
425
closeTab(static_cast<TabbableWidget*>(widget));
387
428
void TabDlg::detachTab(TabbableWidget* tab)
389
430
if (tabWidget_->count() == 1 || !tab)
507
548
return static_cast<TabbableWidget*>(tabWidget_->page(i));
510
TabbableWidget* TabDlg::getTabPointer(QString fullJid)
551
TabbableWidget* TabDlg::getTabPointer(PsiAccount* account, QString fullJid)
512
553
foreach(TabbableWidget* tab, tabs_) {
513
if (tab->jid().full() == fullJid) {
554
if (tab->jid().full() == fullJid && tab->account() == account) {
641
void TabDlg::paintEvent(QPaintEvent *event) {
682
void TabDlg::paintEvent(QPaintEvent *event)
642
684
// delegate if possible, otherwise use default
643
685
if (delegate_ && delegate_->paintEvent(this, event)) {
650
void TabDlg::mousePressEvent(QMouseEvent *event) {
692
void TabDlg::mousePressEvent(QMouseEvent *event)
651
694
// delegate if possible, otherwise use default
652
695
if (delegate_ && delegate_->mousePressEvent(this, event)) {
659
void TabDlg::mouseMoveEvent(QMouseEvent *event) {
702
void TabDlg::mouseMoveEvent(QMouseEvent *event)
660
704
// delegate if possible, otherwise use default
661
705
if (delegate_ && delegate_->mouseMoveEvent(this, event)) {
668
void TabDlg::mouseReleaseEvent(QMouseEvent *event) {
712
void TabDlg::mouseReleaseEvent(QMouseEvent *event)
669
714
// delegate if possible, otherwise use default
670
715
if (delegate_ && delegate_->mouseReleaseEvent(this, event)) {
700
bool TabDlg::event(QEvent *event) {
745
bool TabDlg::event(QEvent *event)
701
747
// delegate if possible, otherwise use default
702
748
if (delegate_ && delegate_->event(this, event)) {
709
bool TabDlg::eventFilter(QObject *obj, QEvent *event) {
755
bool TabDlg::eventFilter(QObject *obj, QEvent *event)
710
757
// delegate if possible, otherwise use default
711
758
if (delegate_ && delegate_->eventFilter(this, obj, event)) {
718
int TabDlg::tabCount() const {
765
int TabDlg::tabCount() const
719
767
return tabs_.count();
722
void TabDlg::setUserManagementEnabled(bool enabled) {
770
void TabDlg::setUserManagementEnabled(bool enabled)
723
772
if (userManagement_ == enabled) {