File indexing completed on 2024-05-19 04:59:22

0001 /* ============================================================
0002 * VerticalTabs plugin for Falkon
0003 * Copyright (C) 2018 David Rosca <nowrep@gmail.com>
0004 *
0005 * This program is free software: you can redistribute it and/or modify
0006 * it under the terms of the GNU General Public License as published by
0007 * the Free Software Foundation, either version 3 of the License, or
0008 * (at your option) any later version.
0009 *
0010 * This program is distributed in the hope that it will be useful,
0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0013 * GNU General Public License for more details.
0014 *
0015 * You should have received a copy of the GNU General Public License
0016 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0017 * ============================================================ */
0018 #include "verticaltabscontroller.h"
0019 #include "verticaltabsplugin.h"
0020 #include "verticaltabswidget.h"
0021 
0022 #include "tabwidget.h"
0023 
0024 #include <QAction>
0025 #include <QKeyEvent>
0026 
0027 VerticalTabsController::VerticalTabsController(VerticalTabsPlugin *plugin)
0028     : SideBarInterface(plugin)
0029     , m_plugin(plugin)
0030 {
0031 }
0032 
0033 QString VerticalTabsController::title() const
0034 {
0035     return tr("Vertical Tabs");
0036 }
0037 
0038 QAction *VerticalTabsController::createMenuAction()
0039 {
0040     auto *act = new QAction(title(), this);
0041     act->setCheckable(true);
0042     return act;
0043 }
0044 
0045 QWidget *VerticalTabsController::createSideBarWidget(BrowserWindow *window)
0046 {
0047     auto *widget = new VerticalTabsWidget(window);
0048     widget->setViewType(m_plugin->viewType());
0049     widget->setStyleSheet(m_plugin->styleSheet());
0050     connect(m_plugin, &VerticalTabsPlugin::viewTypeChanged, widget, &VerticalTabsWidget::setViewType);
0051     connect(m_plugin, &VerticalTabsPlugin::styleSheetChanged, widget, &VerticalTabsWidget::setStyleSheet);
0052 
0053     m_widgets[window] = widget;
0054     return widget;
0055 }
0056 
0057 bool VerticalTabsController::handleKeyPress(QKeyEvent *event, TabWidget *tabWidget)
0058 {
0059     auto switchToNextTab = [=]() {
0060         VerticalTabsWidget *widget = m_widgets.value(tabWidget->browserWindow());
0061         if (widget) {
0062             widget->switchToNextTab();
0063             return true;
0064         }
0065         return false;
0066     };
0067 
0068     auto switchToPreviousTab = [=]() {
0069         VerticalTabsWidget *widget = m_widgets.value(tabWidget->browserWindow());
0070         if (widget) {
0071             widget->switchToPreviousTab();
0072             return true;
0073         }
0074         return false;
0075     };
0076 
0077     switch (event->key()) {
0078     case Qt::Key_Tab:
0079     case Qt::Key_PageDown:
0080         if (event->modifiers() == Qt::ControlModifier) {
0081             if (switchToNextTab()) {
0082                 return true;
0083             }
0084         }
0085         break;
0086 
0087     case Qt::Key_Backtab:
0088         if (event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) {
0089             if (switchToPreviousTab()) {
0090                 return true;
0091             }
0092         }
0093         break;
0094 
0095     case Qt::Key_PageUp:
0096         if (event->modifiers() == Qt::ControlModifier) {
0097             if (switchToPreviousTab()) {
0098                 return true;
0099             }
0100         }
0101         break;
0102 
0103     default:
0104         break;
0105     }
0106 
0107     return false;
0108 }