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