File: sessionstack.h

package info (click to toggle)
yakuake 25.12.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,932 kB
  • sloc: cpp: 5,636; xml: 500; sh: 10; makefile: 3
file content (153 lines) | stat: -rw-r--r-- 5,118 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
  SPDX-FileCopyrightText: 2008-2014 Eike Hein <hein@kde.org>
  SPDX-FileCopyrightText: 2009 Juan Carlos Torres <carlosdgtorres@gmail.com>

  SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/

#ifndef SESSIONSTACK_H
#define SESSIONSTACK_H

#include "session.h"

#include <config-yakuake.h>

#include <QHash>
#include <QStackedWidget>

class Session;
class VisualEventOverlay;
class KActionCollection;

class SessionStack : public QStackedWidget
{
    Q_OBJECT
    Q_CLASSINFO("D-Bus Interface", "org.kde.yakuake")

public:
    explicit SessionStack(QWidget *parent = nullptr);
    ~SessionStack() override;

    void closeActiveTerminal(int sessionId = -1);

    void editProfile(int sessionId = -1);

    void emitTitles();

    bool requiresVisualEventOverlay();

    QList<KActionCollection *> getPartActionCollections();

    bool wantsBlur() const;

public Q_SLOTS:
    int addSessionImpl(Session::SessionType type = Session::Single);
    Q_SCRIPTABLE int addSession();
    Q_SCRIPTABLE int addSessionTwoHorizontal();
    Q_SCRIPTABLE int addSessionTwoVertical();
    Q_SCRIPTABLE int addSessionQuad();

    Q_SCRIPTABLE void raiseSession(int sessionId);

    Q_SCRIPTABLE void removeSession(int sessionId);
    Q_SCRIPTABLE void removeTerminal(int terminalId);

    Q_SCRIPTABLE int splitSessionAuto(int sessionId);
    Q_SCRIPTABLE int splitSessionLeftRight(int sessionId);
    Q_SCRIPTABLE int splitSessionTopBottom(int sessionId);
    Q_SCRIPTABLE int splitTerminalLeftRight(int terminalId);
    Q_SCRIPTABLE int splitTerminalTopBottom(int terminalId);

    Q_SCRIPTABLE int tryGrowTerminalRight(int terminalId, uint pixels = 10);
    Q_SCRIPTABLE int tryGrowTerminalLeft(int terminalId, uint pixels = 10);
    Q_SCRIPTABLE int tryGrowTerminalTop(int terminalId, uint pixels = 10);
    Q_SCRIPTABLE int tryGrowTerminalBottom(int terminalId, uint pixels = 10);

    Q_SCRIPTABLE int activeSessionId()
    {
        return m_activeSessionId;
    }
    Q_SCRIPTABLE int activeTerminalId();

    Q_SCRIPTABLE const QString sessionIdList();
    Q_SCRIPTABLE const QString terminalIdList();
    Q_SCRIPTABLE const QString terminalIdsForSessionId(int sessionId);
    Q_SCRIPTABLE int sessionIdForTerminalId(int terminalId);

#if defined(REMOVE_SENDTEXT_RUNCOMMAND_DBUS_METHODS)
    void runCommand(const QString &command);
    void runCommandInTerminal(int terminalId, const QString &command);
#else
    Q_SCRIPTABLE void runCommand(const QString &command);
    Q_SCRIPTABLE void runCommandInTerminal(int terminalId, const QString &command);
#endif

    Q_SCRIPTABLE bool isSessionClosable(int sessionId);
    Q_SCRIPTABLE void setSessionClosable(int sessionId, bool closable);
    Q_SCRIPTABLE bool hasUnclosableSessions() const;

    Q_SCRIPTABLE bool isSessionKeyboardInputEnabled(int sessionId);
    Q_SCRIPTABLE void setSessionKeyboardInputEnabled(int sessionId, bool enabled);
    Q_SCRIPTABLE bool isTerminalKeyboardInputEnabled(int terminalId);
    Q_SCRIPTABLE void setTerminalKeyboardInputEnabled(int terminalId, bool enabled);
    Q_SCRIPTABLE bool hasTerminalsWithKeyboardInputEnabled(int sessionId);
    Q_SCRIPTABLE bool hasTerminalsWithKeyboardInputDisabled(int sessionId);

    Q_SCRIPTABLE bool isSessionMonitorActivityEnabled(int sessionId);
    Q_SCRIPTABLE void setSessionMonitorActivityEnabled(int sessionId, bool enabled);
    Q_SCRIPTABLE bool isTerminalMonitorActivityEnabled(int terminalId);
    Q_SCRIPTABLE void setTerminalMonitorActivityEnabled(int terminalId, bool enabled);
    Q_SCRIPTABLE bool hasTerminalsWithMonitorActivityEnabled(int sessionId);
    Q_SCRIPTABLE bool hasTerminalsWithMonitorActivityDisabled(int sessionId);

    Q_SCRIPTABLE bool isSessionMonitorSilenceEnabled(int sessionId);
    Q_SCRIPTABLE void setSessionMonitorSilenceEnabled(int sessionId, bool enabled);
    Q_SCRIPTABLE bool isTerminalMonitorSilenceEnabled(int terminalId);
    Q_SCRIPTABLE void setTerminalMonitorSilenceEnabled(int terminalId, bool enabled);
    Q_SCRIPTABLE bool hasTerminalsWithMonitorSilenceEnabled(int sessionId);
    Q_SCRIPTABLE bool hasTerminalsWithMonitorSilenceDisabled(int sessionId);

    void handleTerminalHighlightRequest(int terminalId);

Q_SIGNALS:
    void sessionAdded(int sessionId, const QString &title);
    void sessionRaised(int sessionId);
    void sessionRemoved(int sessionId);

    void activeTitleChanged(const QString &title);
    void titleChanged(int sessionId, const QString &title);

    void closeTerminal();

    void previousTerminal();
    void nextTerminal();

    void manageProfiles();

    void removeTerminalHighlight();

    void wantsBlurChanged();

protected:
    void showEvent(QShowEvent *event) override;

private Q_SLOTS:
    void handleManualTerminalActivation(Terminal *);

    void cleanup(int sessionId);

private:
    enum QueryCloseType {
        QueryCloseSession,
        QueryCloseTerminal,
    };
    bool queryClose(int sessionId, QueryCloseType type);

    VisualEventOverlay *m_visualEventOverlay = nullptr;

    int m_activeSessionId;

    QHash<int, Session *> m_sessions;
};

#endif