mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Qt: Removed the Registers widget.
It was crashing and nobody actually uses this.
This commit is contained in:
		
							parent
							
								
									09b8a16414
								
							
						
					
					
						commit
						7786f41cc0
					
				@ -32,8 +32,6 @@ add_executable(yuzu
 | 
			
		||||
    debugger/graphics/graphics_surface.h
 | 
			
		||||
    debugger/profiler.cpp
 | 
			
		||||
    debugger/profiler.h
 | 
			
		||||
    debugger/registers.cpp
 | 
			
		||||
    debugger/registers.h
 | 
			
		||||
    debugger/wait_tree.cpp
 | 
			
		||||
    debugger/wait_tree.h
 | 
			
		||||
    game_list.cpp
 | 
			
		||||
@ -60,7 +58,6 @@ set(UIS
 | 
			
		||||
    configuration/configure_graphics.ui
 | 
			
		||||
    configuration/configure_input.ui
 | 
			
		||||
    configuration/configure_system.ui
 | 
			
		||||
    debugger/registers.ui
 | 
			
		||||
    hotkeys.ui
 | 
			
		||||
    main.ui
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -1,190 +0,0 @@
 | 
			
		||||
// Copyright 2014 Citra Emulator Project
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include <QTreeWidgetItem>
 | 
			
		||||
#include "core/arm/arm_interface.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "yuzu/debugger/registers.h"
 | 
			
		||||
#include "yuzu/util/util.h"
 | 
			
		||||
 | 
			
		||||
RegistersWidget::RegistersWidget(QWidget* parent) : QDockWidget(parent) {
 | 
			
		||||
    cpu_regs_ui.setupUi(this);
 | 
			
		||||
 | 
			
		||||
    tree = cpu_regs_ui.treeWidget;
 | 
			
		||||
    tree->addTopLevelItem(core_registers = new QTreeWidgetItem(QStringList(tr("Registers"))));
 | 
			
		||||
    tree->addTopLevelItem(vfp_registers = new QTreeWidgetItem(QStringList(tr("VFP Registers"))));
 | 
			
		||||
    tree->addTopLevelItem(vfp_system_registers =
 | 
			
		||||
                              new QTreeWidgetItem(QStringList(tr("VFP System Registers"))));
 | 
			
		||||
    tree->addTopLevelItem(cpsr = new QTreeWidgetItem(QStringList("CPSR")));
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < 16; ++i) {
 | 
			
		||||
        QTreeWidgetItem* child = new QTreeWidgetItem(QStringList(QString("R[%1]").arg(i)));
 | 
			
		||||
        core_registers->addChild(child);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < 32; ++i) {
 | 
			
		||||
        QTreeWidgetItem* child = new QTreeWidgetItem(QStringList(QString("S[%1]").arg(i)));
 | 
			
		||||
        vfp_registers->addChild(child);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QFont font = GetMonospaceFont();
 | 
			
		||||
 | 
			
		||||
    CreateCPSRChildren();
 | 
			
		||||
    CreateVFPSystemRegisterChildren();
 | 
			
		||||
 | 
			
		||||
    // Set Registers to display in monospace font
 | 
			
		||||
    for (int i = 0; i < core_registers->childCount(); ++i)
 | 
			
		||||
        core_registers->child(i)->setFont(1, font);
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < vfp_registers->childCount(); ++i)
 | 
			
		||||
        vfp_registers->child(i)->setFont(1, font);
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < vfp_system_registers->childCount(); ++i) {
 | 
			
		||||
        vfp_system_registers->child(i)->setFont(1, font);
 | 
			
		||||
        for (int x = 0; x < vfp_system_registers->child(i)->childCount(); ++x) {
 | 
			
		||||
            vfp_system_registers->child(i)->child(x)->setFont(1, font);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // Set CSPR to display in monospace font
 | 
			
		||||
    cpsr->setFont(1, font);
 | 
			
		||||
    for (int i = 0; i < cpsr->childCount(); ++i) {
 | 
			
		||||
        cpsr->child(i)->setFont(1, font);
 | 
			
		||||
        for (int x = 0; x < cpsr->child(i)->childCount(); ++x) {
 | 
			
		||||
            cpsr->child(i)->child(x)->setFont(1, font);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    setEnabled(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::OnDebugModeEntered() {
 | 
			
		||||
    if (!Core::System::GetInstance().IsPoweredOn())
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < core_registers->childCount(); ++i)
 | 
			
		||||
        core_registers->child(i)->setText(
 | 
			
		||||
            1, QString("0x%1").arg(Core::CurrentArmInterface().GetReg(i), 8, 16, QLatin1Char('0')));
 | 
			
		||||
 | 
			
		||||
    UpdateCPSRValues();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::OnDebugModeLeft() {}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::OnEmulationStarting(EmuThread* emu_thread) {
 | 
			
		||||
    setEnabled(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::OnEmulationStopping() {
 | 
			
		||||
    // Reset widget text
 | 
			
		||||
    for (int i = 0; i < core_registers->childCount(); ++i)
 | 
			
		||||
        core_registers->child(i)->setText(1, QString(""));
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < vfp_registers->childCount(); ++i)
 | 
			
		||||
        vfp_registers->child(i)->setText(1, QString(""));
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < cpsr->childCount(); ++i)
 | 
			
		||||
        cpsr->child(i)->setText(1, QString(""));
 | 
			
		||||
 | 
			
		||||
    cpsr->setText(1, QString(""));
 | 
			
		||||
 | 
			
		||||
    // FPSCR
 | 
			
		||||
    for (int i = 0; i < vfp_system_registers->child(0)->childCount(); ++i)
 | 
			
		||||
        vfp_system_registers->child(0)->child(i)->setText(1, QString(""));
 | 
			
		||||
 | 
			
		||||
    // FPEXC
 | 
			
		||||
    for (int i = 0; i < vfp_system_registers->child(1)->childCount(); ++i)
 | 
			
		||||
        vfp_system_registers->child(1)->child(i)->setText(1, QString(""));
 | 
			
		||||
 | 
			
		||||
    vfp_system_registers->child(0)->setText(1, QString(""));
 | 
			
		||||
    vfp_system_registers->child(1)->setText(1, QString(""));
 | 
			
		||||
    vfp_system_registers->child(2)->setText(1, QString(""));
 | 
			
		||||
    vfp_system_registers->child(3)->setText(1, QString(""));
 | 
			
		||||
 | 
			
		||||
    setEnabled(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::CreateCPSRChildren() {
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("M")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("T")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("F")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("I")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("A")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("E")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("IT")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("GE")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("DNM")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("J")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("Q")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("V")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("C")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("Z")));
 | 
			
		||||
    cpsr->addChild(new QTreeWidgetItem(QStringList("N")));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::UpdateCPSRValues() {
 | 
			
		||||
    const u32 cpsr_val = Core::CurrentArmInterface().GetCPSR();
 | 
			
		||||
 | 
			
		||||
    cpsr->setText(1, QString("0x%1").arg(cpsr_val, 8, 16, QLatin1Char('0')));
 | 
			
		||||
    cpsr->child(0)->setText(
 | 
			
		||||
        1, QString("b%1").arg(cpsr_val & 0x1F, 5, 2, QLatin1Char('0'))); // M - Mode
 | 
			
		||||
    cpsr->child(1)->setText(1, QString::number((cpsr_val >> 5) & 1));    // T - State
 | 
			
		||||
    cpsr->child(2)->setText(1, QString::number((cpsr_val >> 6) & 1));    // F - FIQ disable
 | 
			
		||||
    cpsr->child(3)->setText(1, QString::number((cpsr_val >> 7) & 1));    // I - IRQ disable
 | 
			
		||||
    cpsr->child(4)->setText(1, QString::number((cpsr_val >> 8) & 1));    // A - Imprecise abort
 | 
			
		||||
    cpsr->child(5)->setText(1, QString::number((cpsr_val >> 9) & 1));    // E - Data endianness
 | 
			
		||||
    cpsr->child(6)->setText(1,
 | 
			
		||||
                            QString::number((cpsr_val >> 10) & 0x3F)); // IT - If-Then state (DNM)
 | 
			
		||||
    cpsr->child(7)->setText(1,
 | 
			
		||||
                            QString::number((cpsr_val >> 16) & 0xF)); // GE - Greater-than-or-Equal
 | 
			
		||||
    cpsr->child(8)->setText(1, QString::number((cpsr_val >> 20) & 0xF)); // DNM - Do not modify
 | 
			
		||||
    cpsr->child(9)->setText(1, QString::number((cpsr_val >> 24) & 1));   // J - Jazelle
 | 
			
		||||
    cpsr->child(10)->setText(1, QString::number((cpsr_val >> 27) & 1));  // Q - Saturation
 | 
			
		||||
    cpsr->child(11)->setText(1, QString::number((cpsr_val >> 28) & 1));  // V - Overflow
 | 
			
		||||
    cpsr->child(12)->setText(1, QString::number((cpsr_val >> 29) & 1));  // C - Carry/Borrow/Extend
 | 
			
		||||
    cpsr->child(13)->setText(1, QString::number((cpsr_val >> 30) & 1));  // Z - Zero
 | 
			
		||||
    cpsr->child(14)->setText(1, QString::number((cpsr_val >> 31) & 1));  // N - Negative/Less than
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::CreateVFPSystemRegisterChildren() {
 | 
			
		||||
    QTreeWidgetItem* const fpscr = new QTreeWidgetItem(QStringList("FPSCR"));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("IOC")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("DZC")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("OFC")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("UFC")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("IXC")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("IDC")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("IOE")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("DZE")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("OFE")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("UFE")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("IXE")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("IDE")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList(tr("Vector Length"))));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList(tr("Vector Stride"))));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList(tr("Rounding Mode"))));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("FZ")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("DN")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("V")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("C")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("Z")));
 | 
			
		||||
    fpscr->addChild(new QTreeWidgetItem(QStringList("N")));
 | 
			
		||||
 | 
			
		||||
    QTreeWidgetItem* const fpexc = new QTreeWidgetItem(QStringList("FPEXC"));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList("IOC")));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList("OFC")));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList("UFC")));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList("INV")));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList(tr("Vector Iteration Count"))));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList("FP2V")));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList("EN")));
 | 
			
		||||
    fpexc->addChild(new QTreeWidgetItem(QStringList("EX")));
 | 
			
		||||
 | 
			
		||||
    vfp_system_registers->addChild(fpscr);
 | 
			
		||||
    vfp_system_registers->addChild(fpexc);
 | 
			
		||||
    vfp_system_registers->addChild(new QTreeWidgetItem(QStringList("FPINST")));
 | 
			
		||||
    vfp_system_registers->addChild(new QTreeWidgetItem(QStringList("FPINST2")));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegistersWidget::UpdateVFPSystemRegisterValues() {
 | 
			
		||||
    UNIMPLEMENTED();
 | 
			
		||||
}
 | 
			
		||||
@ -1,42 +0,0 @@
 | 
			
		||||
// Copyright 2014 Citra Emulator Project
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <QDockWidget>
 | 
			
		||||
#include "ui_registers.h"
 | 
			
		||||
 | 
			
		||||
class QTreeWidget;
 | 
			
		||||
class QTreeWidgetItem;
 | 
			
		||||
class EmuThread;
 | 
			
		||||
 | 
			
		||||
class RegistersWidget : public QDockWidget {
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    explicit RegistersWidget(QWidget* parent = nullptr);
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
    void OnDebugModeEntered();
 | 
			
		||||
    void OnDebugModeLeft();
 | 
			
		||||
 | 
			
		||||
    void OnEmulationStarting(EmuThread* emu_thread);
 | 
			
		||||
    void OnEmulationStopping();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void CreateCPSRChildren();
 | 
			
		||||
    void UpdateCPSRValues();
 | 
			
		||||
 | 
			
		||||
    void CreateVFPSystemRegisterChildren();
 | 
			
		||||
    void UpdateVFPSystemRegisterValues();
 | 
			
		||||
 | 
			
		||||
    Ui::ARMRegisters cpu_regs_ui;
 | 
			
		||||
 | 
			
		||||
    QTreeWidget* tree;
 | 
			
		||||
 | 
			
		||||
    QTreeWidgetItem* core_registers;
 | 
			
		||||
    QTreeWidgetItem* vfp_registers;
 | 
			
		||||
    QTreeWidgetItem* vfp_system_registers;
 | 
			
		||||
    QTreeWidgetItem* cpsr;
 | 
			
		||||
};
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<ui version="4.0">
 | 
			
		||||
 <class>ARMRegisters</class>
 | 
			
		||||
 <widget class="QDockWidget" name="ARMRegisters">
 | 
			
		||||
  <property name="geometry">
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>400</width>
 | 
			
		||||
    <height>300</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="windowTitle">
 | 
			
		||||
   <string>ARM Registers</string>
 | 
			
		||||
  </property>
 | 
			
		||||
  <widget class="QWidget" name="dockWidgetContents">
 | 
			
		||||
   <layout class="QVBoxLayout" name="verticalLayout">
 | 
			
		||||
    <item>
 | 
			
		||||
     <widget class="QTreeWidget" name="treeWidget">
 | 
			
		||||
      <property name="alternatingRowColors">
 | 
			
		||||
       <bool>true</bool>
 | 
			
		||||
      </property>
 | 
			
		||||
      <column>
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>Register</string>
 | 
			
		||||
       </property>
 | 
			
		||||
      </column>
 | 
			
		||||
      <column>
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>Value</string>
 | 
			
		||||
       </property>
 | 
			
		||||
      </column>
 | 
			
		||||
     </widget>
 | 
			
		||||
    </item>
 | 
			
		||||
   </layout>
 | 
			
		||||
  </widget>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
</ui>
 | 
			
		||||
@ -33,7 +33,6 @@
 | 
			
		||||
#include "yuzu/debugger/graphics/graphics_breakpoints.h"
 | 
			
		||||
#include "yuzu/debugger/graphics/graphics_surface.h"
 | 
			
		||||
#include "yuzu/debugger/profiler.h"
 | 
			
		||||
#include "yuzu/debugger/registers.h"
 | 
			
		||||
#include "yuzu/debugger/wait_tree.h"
 | 
			
		||||
#include "yuzu/game_list.h"
 | 
			
		||||
#include "yuzu/hotkeys.h"
 | 
			
		||||
@ -169,15 +168,6 @@ void GMainWindow::InitializeDebugWidgets() {
 | 
			
		||||
    debug_menu->addAction(microProfileDialog->toggleViewAction());
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    registersWidget = new RegistersWidget(this);
 | 
			
		||||
    addDockWidget(Qt::RightDockWidgetArea, registersWidget);
 | 
			
		||||
    registersWidget->hide();
 | 
			
		||||
    debug_menu->addAction(registersWidget->toggleViewAction());
 | 
			
		||||
    connect(this, &GMainWindow::EmulationStarting, registersWidget,
 | 
			
		||||
            &RegistersWidget::OnEmulationStarting);
 | 
			
		||||
    connect(this, &GMainWindow::EmulationStopping, registersWidget,
 | 
			
		||||
            &RegistersWidget::OnEmulationStopping);
 | 
			
		||||
 | 
			
		||||
    graphicsBreakpointsWidget = new GraphicsBreakPointsWidget(debug_context, this);
 | 
			
		||||
    addDockWidget(Qt::RightDockWidgetArea, graphicsBreakpointsWidget);
 | 
			
		||||
    graphicsBreakpointsWidget->hide();
 | 
			
		||||
@ -460,17 +450,12 @@ void GMainWindow::BootGame(const QString& filename) {
 | 
			
		||||
    connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
 | 
			
		||||
    // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views
 | 
			
		||||
    // before the CPU continues
 | 
			
		||||
    connect(emu_thread.get(), &EmuThread::DebugModeEntered, registersWidget,
 | 
			
		||||
            &RegistersWidget::OnDebugModeEntered, Qt::BlockingQueuedConnection);
 | 
			
		||||
    connect(emu_thread.get(), &EmuThread::DebugModeEntered, waitTreeWidget,
 | 
			
		||||
            &WaitTreeWidget::OnDebugModeEntered, Qt::BlockingQueuedConnection);
 | 
			
		||||
    connect(emu_thread.get(), &EmuThread::DebugModeLeft, registersWidget,
 | 
			
		||||
            &RegistersWidget::OnDebugModeLeft, Qt::BlockingQueuedConnection);
 | 
			
		||||
    connect(emu_thread.get(), &EmuThread::DebugModeLeft, waitTreeWidget,
 | 
			
		||||
            &WaitTreeWidget::OnDebugModeLeft, Qt::BlockingQueuedConnection);
 | 
			
		||||
 | 
			
		||||
    // Update the GUI
 | 
			
		||||
    registersWidget->OnDebugModeEntered();
 | 
			
		||||
    if (ui.action_Single_Window_Mode->isChecked()) {
 | 
			
		||||
        game_list->hide();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,6 @@ class GraphicsSurfaceWidget;
 | 
			
		||||
class GRenderWindow;
 | 
			
		||||
class MicroProfileDialog;
 | 
			
		||||
class ProfilerWidget;
 | 
			
		||||
class RegistersWidget;
 | 
			
		||||
class WaitTreeWidget;
 | 
			
		||||
 | 
			
		||||
namespace Tegra {
 | 
			
		||||
@ -163,7 +162,6 @@ private:
 | 
			
		||||
    // Debugger panes
 | 
			
		||||
    ProfilerWidget* profilerWidget;
 | 
			
		||||
    MicroProfileDialog* microProfileDialog;
 | 
			
		||||
    RegistersWidget* registersWidget;
 | 
			
		||||
    GraphicsBreakPointsWidget* graphicsBreakpointsWidget;
 | 
			
		||||
    GraphicsSurfaceWidget* graphicsSurfaceWidget;
 | 
			
		||||
    WaitTreeWidget* waitTreeWidget;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user