summaryrefslogtreecommitdiff
path: root/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlTreeItem.h
blob: c6d63621d43ec32840e2f1ed65c953e2e4d9c9c3 (plain)
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
154
155
156
/* $Id$ */
/** @file
 * VBox Qt GUI - UIGuestControlTreeItem class declaration.
 */

/*
 * Copyright (C) 2016-2022 Oracle Corporation
 *
 * This file is part of VirtualBox Open Source Edition (OSE), as
 * available from http://www.virtualbox.org. This file is free software;
 * you can redistribute it and/or modify it under the terms of the GNU
 * General Public License (GPL) as published by the Free Software
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 */

#ifndef FEQT_INCLUDED_SRC_guestctrl_UIGuestControlTreeItem_h
#define FEQT_INCLUDED_SRC_guestctrl_UIGuestControlTreeItem_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif

/* GUI includes: */
#include "QITreeWidget.h"
#include "UIMainEventListener.h"

/* COM includes: */
#include "COMEnums.h"
#include "CEventListener.h"
#include "CGuestSession.h"

/* Forward declarations: */
class CEventSource;
class CGuestProcessStateChangedEvent;
class CGuestSessionStateChangedEvent;

/** QITreeWidgetItem extension serving as a base class
    to UIGuestSessionTreeItem and UIGuestProcessTreeItem classes */
class UIGuestControlTreeItem : public QITreeWidgetItem
{

    Q_OBJECT;

public:

    UIGuestControlTreeItem(QITreeWidget *pTreeWidget, const QStringList &strings = QStringList());
    UIGuestControlTreeItem(UIGuestControlTreeItem *pTreeWidgetItem, const QStringList &strings = QStringList());
    virtual ~UIGuestControlTreeItem();
    virtual QString propertyString() const = 0;

private slots:

protected:

    void prepareListener(CEventSource comEventSource, QVector<KVBoxEventType>& eventTypes);
    void cleanupListener(CEventSource comEventSource);
    void prepare();

    ComObjPtr<UIMainEventListenerImpl> m_pQtListener;

private:

    virtual void prepareListener() = 0;
    virtual void prepareConnections() = 0;
    virtual void cleanupListener() = 0;
    virtual void setColumnText() = 0;

    /** Holds the COM event listener instance. */
    CEventListener m_comEventListener;

};

/** UIGuestControlTreeItem extension. Represents a instance of CGuestSession
    and acts as an event listener for this com object. */
class UIGuestSessionTreeItem : public UIGuestControlTreeItem
{
    Q_OBJECT;

signals:

    void sigGuessSessionUpdated();
    void sigGuestSessionErrorText(QString strError);

public:

    UIGuestSessionTreeItem(QITreeWidget *pTreeWidget, CGuestSession& guestSession, const QStringList &strings = QStringList());
    UIGuestSessionTreeItem(UIGuestControlTreeItem *pTreeWidgetItem, CGuestSession& guestSession, const QStringList &strings = QStringList());
    virtual ~UIGuestSessionTreeItem();
    const CGuestSession& guestSession() const;
    void errorString(QString strError);
    KGuestSessionStatus status() const;
    virtual QString propertyString() const RT_OVERRIDE;

protected:

    void prepareListener(CEventSource comEventSource, QVector<KVBoxEventType>& eventTypes);
    void cleanupListener(CEventSource comEventSource);

private slots:

    void sltGuestSessionUpdated(const CGuestSessionStateChangedEvent& cEvent);
    void sltGuestProcessRegistered(CGuestProcess guestProcess);
    void sltGuestProcessUnregistered(CGuestProcess guestProcess);


private:

    virtual void prepareListener() RT_OVERRIDE;
    virtual void prepareConnections() RT_OVERRIDE;
    virtual void cleanupListener()  RT_OVERRIDE;
    virtual void setColumnText()  RT_OVERRIDE;
    void addGuestProcess(CGuestProcess guestProcess);
    void initProcessSubTree();
    CGuestSession m_comGuestSession;
};

/** UIGuestControlTreeItem extension. Represents a instance of CGuestProcess
    and acts as an event listener for this com object. */
class UIGuestProcessTreeItem : public UIGuestControlTreeItem
{
    Q_OBJECT;

signals:

    void sigGuestProcessErrorText(QString strError);

public:

    UIGuestProcessTreeItem(QITreeWidget *pTreeWidget, CGuestProcess& guestProcess, const QStringList &strings = QStringList());
    UIGuestProcessTreeItem(UIGuestControlTreeItem *pTreeWidgetItem, CGuestProcess& guestProcess, const QStringList &strings = QStringList());
    const CGuestProcess& guestProcess() const;
    virtual ~UIGuestProcessTreeItem();
    KProcessStatus status() const;
    virtual QString propertyString() const RT_OVERRIDE;

protected:

    void prepareListener(CEventSource comEventSource, QVector<KVBoxEventType>& eventTypes);
    void cleanupListener(CEventSource comEventSource);

private slots:

    void sltGuestProcessUpdated(const CGuestProcessStateChangedEvent &cEvent);

private:

    virtual void prepareListener() RT_OVERRIDE;
    virtual void prepareConnections() RT_OVERRIDE;
    virtual void cleanupListener()  RT_OVERRIDE;
    virtual void setColumnText()  RT_OVERRIDE;

    CGuestProcess m_comGuestProcess;
};

#endif /* !FEQT_INCLUDED_SRC_guestctrl_UIGuestControlTreeItem_h */