File indexing completed on 2025-04-27 03:58:31
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2005-03-22 0007 * Description : a widget to manage sidebar in GUI - Multi-tab bar frame implementation. 0008 * 0009 * SPDX-FileCopyrightText: 2005-2006 by Joern Ahrens <joern dot ahrens at kdemail dot net> 0010 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * SPDX-FileCopyrightText: 2008-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de> 0012 * SPDX-FileCopyrightText: 2001-2003 by Joseph Wenninger <jowenn at kde dot org> 0013 * 0014 * SPDX-License-Identifier: GPL-2.0-or-later 0015 * 0016 * ============================================================ */ 0017 0018 #include "sidebar_p.h" 0019 0020 namespace Digikam 0021 { 0022 0023 DMultiTabBarFrame::DMultiTabBarFrame(QWidget* const parent, Qt::Edge pos) 0024 : QFrame(parent), 0025 d (new Private) 0026 { 0027 d->position = pos; 0028 0029 if ((pos == Qt::LeftEdge) || (pos == Qt::RightEdge)) 0030 { 0031 d->mainLayout = new QVBoxLayout(this); 0032 } 0033 else 0034 { 0035 d->mainLayout = new QHBoxLayout(this); 0036 } 0037 0038 d->mainLayout->setContentsMargins(QMargins()); 0039 d->mainLayout->setSpacing(0); 0040 d->mainLayout->addStretch(); 0041 setFrameStyle(NoFrame); 0042 setBackgroundRole(QPalette::Window); 0043 } 0044 0045 DMultiTabBarFrame::~DMultiTabBarFrame() 0046 { 0047 qDeleteAll(d->tabs); 0048 d->tabs.clear(); 0049 delete d; 0050 } 0051 0052 void DMultiTabBarFrame::setStyle(DMultiTabBar::TextStyle style) 0053 { 0054 d->style = style; 0055 0056 for (int i = 0 ; i < d->tabs.count() ; ++i) 0057 { 0058 d->tabs.at(i)->setStyle(d->style); 0059 } 0060 0061 updateGeometry(); 0062 } 0063 0064 void DMultiTabBarFrame::contentsMousePressEvent(QMouseEvent* e) 0065 { 0066 e->ignore(); 0067 } 0068 0069 void DMultiTabBarFrame::mousePressEvent(QMouseEvent* e) 0070 { 0071 e->ignore(); 0072 } 0073 0074 DMultiTabBarTab* DMultiTabBarFrame::tab(int id) const 0075 { 0076 QListIterator<DMultiTabBarTab*> it(d->tabs); 0077 0078 while (it.hasNext()) 0079 { 0080 DMultiTabBarTab* const tab = it.next(); 0081 0082 if (tab->id() == id) 0083 { 0084 return tab; 0085 } 0086 } 0087 0088 return nullptr; 0089 } 0090 0091 void DMultiTabBarFrame::appendTab(const QIcon& pic, int id, const QString& text) 0092 { 0093 DMultiTabBarTab* const tab = new DMultiTabBarTab(pic, text, id, this, d->position, d->style); 0094 d->tabs.append(tab); 0095 0096 // Insert before the stretch. 0097 0098 d->mainLayout->insertWidget(d->tabs.size()-1, tab); 0099 tab->show(); 0100 } 0101 0102 void DMultiTabBarFrame::removeTab(int id) 0103 { 0104 for (int pos = 0 ; pos < d->tabs.count() ; ++pos) 0105 { 0106 if (d->tabs.at(pos)->id() == id) 0107 { 0108 // remove & delete the tab 0109 0110 delete d->tabs.takeAt(pos); 0111 break; 0112 } 0113 } 0114 } 0115 0116 void DMultiTabBarFrame::setPosition(Qt::Edge pos) 0117 { 0118 d->position = pos; 0119 0120 for (int i = 0 ; i < d->tabs.count() ; ++i) 0121 { 0122 d->tabs.at(i)->setPosition(d->position); 0123 } 0124 0125 updateGeometry(); 0126 } 0127 0128 QList<DMultiTabBarTab*>* DMultiTabBarFrame::tabs() 0129 { 0130 return &d->tabs; 0131 } 0132 0133 } // namespace Digikam