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

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 SESSIONSTACK_H
0009 #define SESSIONSTACK_H
0010 
0011 #include "session.h"
0012 
0013 #include <config-yakuake.h>
0014 
0015 #include <QHash>
0016 #include <QStackedWidget>
0017 
0018 class Session;
0019 class VisualEventOverlay;
0020 class KActionCollection;
0021 
0022 class SessionStack : public QStackedWidget
0023 {
0024     Q_OBJECT
0025     Q_CLASSINFO("D-Bus Interface", "org.kde.yakuake")
0026 
0027 public:
0028     explicit SessionStack(QWidget *parent = nullptr);
0029     ~SessionStack();
0030 
0031     void closeActiveTerminal(int sessionId = -1);
0032 
0033     void editProfile(int sessionId = -1);
0034 
0035     void emitTitles();
0036 
0037     bool requiresVisualEventOverlay();
0038 
0039     QList<KActionCollection *> getPartActionCollections();
0040 
0041     bool wantsBlur() const;
0042 
0043 public Q_SLOTS:
0044     int addSessionImpl(Session::SessionType type = Session::Single);
0045     Q_SCRIPTABLE int addSession();
0046     Q_SCRIPTABLE int addSessionTwoHorizontal();
0047     Q_SCRIPTABLE int addSessionTwoVertical();
0048     Q_SCRIPTABLE int addSessionQuad();
0049 
0050     Q_SCRIPTABLE void raiseSession(int sessionId);
0051 
0052     Q_SCRIPTABLE void removeSession(int sessionId);
0053     Q_SCRIPTABLE void removeTerminal(int terminalId);
0054 
0055     Q_SCRIPTABLE int splitSessionLeftRight(int sessionId);
0056     Q_SCRIPTABLE int splitSessionTopBottom(int sessionId);
0057     Q_SCRIPTABLE int splitTerminalLeftRight(int terminalId);
0058     Q_SCRIPTABLE int splitTerminalTopBottom(int terminalId);
0059 
0060     Q_SCRIPTABLE int tryGrowTerminalRight(int terminalId, uint pixels = 10);
0061     Q_SCRIPTABLE int tryGrowTerminalLeft(int terminalId, uint pixels = 10);
0062     Q_SCRIPTABLE int tryGrowTerminalTop(int terminalId, uint pixels = 10);
0063     Q_SCRIPTABLE int tryGrowTerminalBottom(int terminalId, uint pixels = 10);
0064 
0065     Q_SCRIPTABLE int activeSessionId()
0066     {
0067         return m_activeSessionId;
0068     }
0069     Q_SCRIPTABLE int activeTerminalId();
0070 
0071     Q_SCRIPTABLE const QString sessionIdList();
0072     Q_SCRIPTABLE const QString terminalIdList();
0073     Q_SCRIPTABLE const QString terminalIdsForSessionId(int sessionId);
0074     Q_SCRIPTABLE int sessionIdForTerminalId(int terminalId);
0075 
0076 #if defined(REMOVE_SENDTEXT_RUNCOMMAND_DBUS_METHODS)
0077     void runCommand(const QString &command);
0078     void runCommandInTerminal(int terminalId, const QString &command);
0079 #else
0080     Q_SCRIPTABLE void runCommand(const QString &command);
0081     Q_SCRIPTABLE void runCommandInTerminal(int terminalId, const QString &command);
0082 #endif
0083 
0084     Q_SCRIPTABLE bool isSessionClosable(int sessionId);
0085     Q_SCRIPTABLE void setSessionClosable(int sessionId, bool closable);
0086     Q_SCRIPTABLE bool hasUnclosableSessions() const;
0087 
0088     Q_SCRIPTABLE bool isSessionKeyboardInputEnabled(int sessionId);
0089     Q_SCRIPTABLE void setSessionKeyboardInputEnabled(int sessionId, bool enabled);
0090     Q_SCRIPTABLE bool isTerminalKeyboardInputEnabled(int terminalId);
0091     Q_SCRIPTABLE void setTerminalKeyboardInputEnabled(int terminalId, bool enabled);
0092     Q_SCRIPTABLE bool hasTerminalsWithKeyboardInputEnabled(int sessionId);
0093     Q_SCRIPTABLE bool hasTerminalsWithKeyboardInputDisabled(int sessionId);
0094 
0095     Q_SCRIPTABLE bool isSessionMonitorActivityEnabled(int sessionId);
0096     Q_SCRIPTABLE void setSessionMonitorActivityEnabled(int sessionId, bool enabled);
0097     Q_SCRIPTABLE bool isTerminalMonitorActivityEnabled(int terminalId);
0098     Q_SCRIPTABLE void setTerminalMonitorActivityEnabled(int terminalId, bool enabled);
0099     Q_SCRIPTABLE bool hasTerminalsWithMonitorActivityEnabled(int sessionId);
0100     Q_SCRIPTABLE bool hasTerminalsWithMonitorActivityDisabled(int sessionId);
0101 
0102     Q_SCRIPTABLE bool isSessionMonitorSilenceEnabled(int sessionId);
0103     Q_SCRIPTABLE void setSessionMonitorSilenceEnabled(int sessionId, bool enabled);
0104     Q_SCRIPTABLE bool isTerminalMonitorSilenceEnabled(int terminalId);
0105     Q_SCRIPTABLE void setTerminalMonitorSilenceEnabled(int terminalId, bool enabled);
0106     Q_SCRIPTABLE bool hasTerminalsWithMonitorSilenceEnabled(int sessionId);
0107     Q_SCRIPTABLE bool hasTerminalsWithMonitorSilenceDisabled(int sessionId);
0108 
0109     void handleTerminalHighlightRequest(int terminalId);
0110 
0111 Q_SIGNALS:
0112     void sessionAdded(int sessionId, const QString &title);
0113     void sessionRaised(int sessionId);
0114     void sessionRemoved(int sessionId);
0115 
0116     void activeTitleChanged(const QString &title);
0117     void titleChanged(int sessionId, const QString &title);
0118 
0119     void closeTerminal();
0120 
0121     void previousTerminal();
0122     void nextTerminal();
0123 
0124     void manageProfiles();
0125 
0126     void removeTerminalHighlight();
0127 
0128     void wantsBlurChanged();
0129 
0130 protected:
0131     virtual void showEvent(QShowEvent *event) override;
0132 
0133 private Q_SLOTS:
0134     void handleManualTerminalActivation(Terminal *);
0135 
0136     void cleanup(int sessionId);
0137 
0138 private:
0139     enum QueryCloseType {
0140         QueryCloseSession,
0141         QueryCloseTerminal,
0142     };
0143     bool queryClose(int sessionId, QueryCloseType type);
0144 
0145     VisualEventOverlay *m_visualEventOverlay;
0146 
0147     int m_activeSessionId;
0148 
0149     QHash<int, Session *> m_sessions;
0150 };
0151 
0152 #endif