| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- // SPDX-FileCopyrightText: 2016 Citra Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #pragma once
- #include <cstddef>
- #include <memory>
- #include <vector>
- #include <QDockWidget>
- #include <QTreeView>
- #include "common/common_types.h"
- #include "core/hle/kernel/k_auto_object.h"
- #include "core/hle/kernel/svc_common.h"
- class EmuThread;
- namespace Core {
- class System;
- }
- namespace Kernel {
- class KHandleTable;
- class KReadableEvent;
- class KSynchronizationObject;
- class KThread;
- } // namespace Kernel
- class WaitTreeThread;
- class WaitTreeItem : public QObject {
- Q_OBJECT
- public:
- WaitTreeItem();
- ~WaitTreeItem() override;
- virtual bool IsExpandable() const;
- virtual std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const;
- virtual QString GetText() const = 0;
- virtual QColor GetColor() const;
- void Expand();
- WaitTreeItem* Parent() const;
- const std::vector<std::unique_ptr<WaitTreeItem>>& Children() const;
- std::size_t Row() const;
- static std::vector<std::unique_ptr<WaitTreeThread>> MakeThreadItemList(Core::System& system);
- private:
- std::size_t row;
- bool expanded = false;
- WaitTreeItem* parent = nullptr;
- std::vector<std::unique_ptr<WaitTreeItem>> children;
- };
- class WaitTreeText : public WaitTreeItem {
- Q_OBJECT
- public:
- explicit WaitTreeText(QString text);
- ~WaitTreeText() override;
- QString GetText() const override;
- private:
- QString text;
- };
- class WaitTreeExpandableItem : public WaitTreeItem {
- Q_OBJECT
- public:
- WaitTreeExpandableItem();
- ~WaitTreeExpandableItem() override;
- bool IsExpandable() const override;
- };
- class WaitTreeCallstack : public WaitTreeExpandableItem {
- Q_OBJECT
- public:
- explicit WaitTreeCallstack(const Kernel::KThread& thread_, Core::System& system_);
- ~WaitTreeCallstack() override;
- QString GetText() const override;
- std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
- private:
- const Kernel::KThread& thread;
- Core::System& system;
- };
- class WaitTreeSynchronizationObject : public WaitTreeExpandableItem {
- Q_OBJECT
- public:
- explicit WaitTreeSynchronizationObject(const Kernel::KSynchronizationObject& object_,
- Core::System& system_);
- ~WaitTreeSynchronizationObject() override;
- static std::unique_ptr<WaitTreeSynchronizationObject> make(
- const Kernel::KSynchronizationObject& object, Core::System& system);
- QString GetText() const override;
- std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
- protected:
- const Kernel::KSynchronizationObject& object;
- private:
- Core::System& system;
- };
- class WaitTreeThread : public WaitTreeSynchronizationObject {
- Q_OBJECT
- public:
- explicit WaitTreeThread(const Kernel::KThread& thread, Core::System& system_);
- ~WaitTreeThread() override;
- QString GetText() const override;
- QColor GetColor() const override;
- std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
- private:
- Core::System& system;
- };
- class WaitTreeEvent : public WaitTreeSynchronizationObject {
- Q_OBJECT
- public:
- explicit WaitTreeEvent(const Kernel::KReadableEvent& object_, Core::System& system_);
- ~WaitTreeEvent() override;
- };
- class WaitTreeThreadList : public WaitTreeExpandableItem {
- Q_OBJECT
- public:
- explicit WaitTreeThreadList(std::vector<Kernel::KThread*>&& list, Core::System& system_);
- ~WaitTreeThreadList() override;
- QString GetText() const override;
- std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
- private:
- std::vector<Kernel::KThread*> thread_list;
- Core::System& system;
- };
- class WaitTreeModel : public QAbstractItemModel {
- Q_OBJECT
- public:
- explicit WaitTreeModel(Core::System& system_, QObject* parent = nullptr);
- ~WaitTreeModel() override;
- QVariant data(const QModelIndex& index, int role) const override;
- QModelIndex index(int row, int column, const QModelIndex& parent) const override;
- QModelIndex parent(const QModelIndex& index) const override;
- int rowCount(const QModelIndex& parent) const override;
- int columnCount(const QModelIndex& parent) const override;
- void ClearItems();
- void InitItems();
- private:
- std::vector<std::unique_ptr<WaitTreeThread>> thread_items;
- Core::System& system;
- };
- class WaitTreeWidget : public QDockWidget {
- Q_OBJECT
- public:
- explicit WaitTreeWidget(Core::System& system_, QWidget* parent = nullptr);
- ~WaitTreeWidget() override;
- public slots:
- void OnDebugModeEntered();
- void OnDebugModeLeft();
- void OnEmulationStarting(EmuThread* emu_thread);
- void OnEmulationStopping();
- private:
- QTreeView* view;
- WaitTreeModel* model;
- Core::System& system;
- };
|