File indexing completed on 2024-05-05 05:57:01

0001 /*
0002   SPDX-FileCopyrightText: 2008-2014 Eike Hein <hein@kde.org>
0003   SPDX-FileCopyrightText: 2009 Juan Carlos Torres <carlosdgtorres@gmail.com>
0004 
0005   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #ifndef TABBAR_H
0009 #define TABBAR_H
0010 
0011 #include <QHash>
0012 #include <QList>
0013 #include <QWidget>
0014 
0015 class MainWindow;
0016 class Skin;
0017 
0018 class QLineEdit;
0019 class QMenu;
0020 class QPushButton;
0021 class QToolButton;
0022 class QLabel;
0023 
0024 class TabBar : public QWidget
0025 {
0026     Q_OBJECT
0027     Q_CLASSINFO("D-Bus Interface", "org.kde.yakuake")
0028 
0029 public:
0030     enum InteractiveType {
0031         NonInteractive = 0,
0032         Interactive = 1,
0033     };
0034     explicit TabBar(MainWindow *mainWindow);
0035     ~TabBar();
0036 
0037     void applySkin();
0038 
0039 public Q_SLOTS:
0040     void addTab(int sessionId, const QString &title);
0041     void removeTab(int sessionId = -1);
0042 
0043     void interactiveRename(int sessionId);
0044 
0045     void selectTab(int sessionId);
0046     void selectNextTab();
0047     void selectPreviousTab();
0048 
0049     void moveTabLeft(int sessionId = -1);
0050     void moveTabRight(int sessionId = -1);
0051 
0052     Q_SCRIPTABLE QString tabTitle(int sessionId);
0053     Q_SCRIPTABLE void setTabTitle(int sessionId, const QString &newTitle, InteractiveType interactive = Interactive);
0054     void setTabTitleAutomated(int sessionId, const QString &newTitle);
0055 
0056     Q_SCRIPTABLE int sessionAtTab(int index);
0057 
0058 Q_SIGNALS:
0059     void newTabRequested();
0060     void tabSelected(int sessionId);
0061     void tabClosed(int sessionId);
0062 
0063     void requestTerminalHighlight(int terminalId);
0064     void requestRemoveTerminalHighlight();
0065     void tabContextMenuClosed();
0066     void lastTabClosed();
0067     void tabTitleEdited(int sessionId, QString title);
0068 
0069 protected:
0070     void resizeEvent(QResizeEvent *) override;
0071     void paintEvent(QPaintEvent *) override;
0072     void wheelEvent(QWheelEvent *) override;
0073     void keyPressEvent(QKeyEvent *) override;
0074     void mousePressEvent(QMouseEvent *) override;
0075     void mouseReleaseEvent(QMouseEvent *) override;
0076     void mouseMoveEvent(QMouseEvent *) override;
0077     void dragMoveEvent(QDragMoveEvent *) override;
0078     void dragEnterEvent(QDragEnterEvent *) override;
0079     void dragLeaveEvent(QDragLeaveEvent *) override;
0080     void dropEvent(QDropEvent *) override;
0081     void mouseDoubleClickEvent(QMouseEvent *) override;
0082     void contextMenuEvent(QContextMenuEvent *) override;
0083     void leaveEvent(QEvent *) override;
0084 
0085 private Q_SLOTS:
0086     void readySessionMenu();
0087 
0088     void contextMenuActionHovered(QAction *action);
0089 
0090     void closeTabButtonClicked();
0091 
0092     void interactiveRenameDone();
0093 
0094 private:
0095     QString standardTabTitle();
0096     QString makeTabTitle(int number);
0097     int tabAt(int x);
0098 
0099     void readyTabContextMenu();
0100 
0101     void updateMoveActions(int index);
0102     void updateToggleActions(int sessionId);
0103     void updateToggleKeyboardInputMenu(int sessionId = -1);
0104     void updateToggleMonitorSilenceMenu(int sessionId = -1);
0105     void updateToggleMonitorActivityMenu(int sessionId = -1);
0106 
0107     int drawTab(int x, int y, int index, QPainter &painter);
0108     void moveNewTabButton();
0109 
0110     void startDrag(int index);
0111     void drawDropIndicator(int index, bool disabled = false);
0112     int dropIndex(const QPoint pos);
0113     bool isSameTab(const QDropEvent *);
0114 
0115     MainWindow *m_mainWindow;
0116     Skin *m_skin;
0117 
0118     QToolButton *m_newTabButton;
0119     QPushButton *m_closeTabButton;
0120 
0121     QMenu *m_tabContextMenu;
0122     QMenu *m_toggleKeyboardInputMenu;
0123     QMenu *m_toggleMonitorActivityMenu;
0124     QMenu *m_toggleMonitorSilenceMenu;
0125     QMenu *m_sessionMenu;
0126 
0127     QLineEdit *m_lineEdit;
0128     int m_renamingSessionId;
0129 
0130     QList<int> m_tabs;
0131     QHash<int, QString> m_tabTitles;
0132     QHash<int, bool> m_tabTitlesSetInteractive;
0133     QList<int> m_tabWidths;
0134 
0135     int m_selectedSessionId;
0136 
0137     bool m_mousePressed;
0138     int m_mousePressedIndex;
0139 
0140     QPoint m_startPos;
0141     QLabel *m_dropIndicator;
0142     QRect m_dropRect;
0143 };
0144 
0145 #endif