Source control.
This commit is contained in:
parent
a1a996c1e6
commit
2b30ac393d
|
@ -7,9 +7,10 @@
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "xenia/debug/ui/views/cpu/call_stack_control.h"
|
||||||
|
|
||||||
#include "el/animation_manager.h"
|
#include "el/animation_manager.h"
|
||||||
#include "xenia/base/string_buffer.h"
|
#include "xenia/base/string_buffer.h"
|
||||||
#include "xenia/debug/ui/views/cpu/call_stack_control.h"
|
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace debug {
|
namespace debug {
|
||||||
|
|
|
@ -7,9 +7,10 @@
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "xenia/debug/ui/views/cpu/cpu_view.h"
|
||||||
|
|
||||||
#include "el/animation_manager.h"
|
#include "el/animation_manager.h"
|
||||||
#include "xenia/base/string_buffer.h"
|
#include "xenia/base/string_buffer.h"
|
||||||
#include "xenia/debug/ui/views/cpu/cpu_view.h"
|
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace debug {
|
namespace debug {
|
||||||
|
@ -50,24 +51,6 @@ el::Element* CpuView::BuildUI() {
|
||||||
.type(EditType::kSearch)
|
.type(EditType::kSearch)
|
||||||
.placeholder("Filter")));
|
.placeholder("Filter")));
|
||||||
|
|
||||||
auto source_code_node =
|
|
||||||
LayoutBoxNode()
|
|
||||||
.gravity(Gravity::kAll)
|
|
||||||
.distribution(LayoutDistribution::kAvailable)
|
|
||||||
.axis(Axis::kY)
|
|
||||||
.child(
|
|
||||||
LayoutBoxNode()
|
|
||||||
.gravity(Gravity::kTop | Gravity::kLeftRight)
|
|
||||||
.distribution(LayoutDistribution::kGravity)
|
|
||||||
.distribution_position(LayoutDistributionPosition::kLeftTop)
|
|
||||||
.axis(Axis::kX)
|
|
||||||
.child(ButtonNode("A")))
|
|
||||||
.child(TextBoxNode("source!")
|
|
||||||
.id("source_textbox")
|
|
||||||
.gravity(Gravity::kAll)
|
|
||||||
.is_multiline(true)
|
|
||||||
.is_read_only(true));
|
|
||||||
|
|
||||||
auto register_list_node = ListBoxNode()
|
auto register_list_node = ListBoxNode()
|
||||||
.gravity(Gravity::kAll)
|
.gravity(Gravity::kAll)
|
||||||
.item("A")
|
.item("A")
|
||||||
|
@ -121,7 +104,8 @@ el::Element* CpuView::BuildUI() {
|
||||||
.axis(Axis::kY)
|
.axis(Axis::kY)
|
||||||
.fixed_pane(FixedPane::kSecond)
|
.fixed_pane(FixedPane::kSecond)
|
||||||
.value(240)
|
.value(240)
|
||||||
.pane(source_code_node)
|
.pane(LabelNode("<source control>")
|
||||||
|
.id("source_placeholder"))
|
||||||
.pane(source_registers_node))
|
.pane(source_registers_node))
|
||||||
.pane(source_tools_node)));
|
.pane(source_tools_node)));
|
||||||
|
|
||||||
|
@ -145,18 +129,23 @@ el::Element* CpuView::BuildUI() {
|
||||||
root_element_.set_layout_distribution(LayoutDistribution::kAvailable);
|
root_element_.set_layout_distribution(LayoutDistribution::kAvailable);
|
||||||
root_element_.LoadNodeTree(node);
|
root_element_.LoadNodeTree(node);
|
||||||
|
|
||||||
|
el::Label* source_placeholder;
|
||||||
el::Label* gr_registers_placeholder;
|
el::Label* gr_registers_placeholder;
|
||||||
el::Label* fr_registers_placeholder;
|
el::Label* fr_registers_placeholder;
|
||||||
el::Label* vr_registers_placeholder;
|
el::Label* vr_registers_placeholder;
|
||||||
el::Label* host_registers_placeholder;
|
el::Label* host_registers_placeholder;
|
||||||
el::Label* call_stack_placeholder;
|
el::Label* call_stack_placeholder;
|
||||||
root_element_.GetElementsById({
|
root_element_.GetElementsById({
|
||||||
|
{TBIDC("source_placeholder"), &source_placeholder},
|
||||||
{TBIDC("gr_registers_placeholder"), &gr_registers_placeholder},
|
{TBIDC("gr_registers_placeholder"), &gr_registers_placeholder},
|
||||||
{TBIDC("fr_registers_placeholder"), &fr_registers_placeholder},
|
{TBIDC("fr_registers_placeholder"), &fr_registers_placeholder},
|
||||||
{TBIDC("vr_registers_placeholder"), &vr_registers_placeholder},
|
{TBIDC("vr_registers_placeholder"), &vr_registers_placeholder},
|
||||||
{TBIDC("host_registers_placeholder"), &host_registers_placeholder},
|
{TBIDC("host_registers_placeholder"), &host_registers_placeholder},
|
||||||
{TBIDC("call_stack_placeholder"), &call_stack_placeholder},
|
{TBIDC("call_stack_placeholder"), &call_stack_placeholder},
|
||||||
});
|
});
|
||||||
|
source_placeholder->parent()->ReplaceChild(source_placeholder,
|
||||||
|
source_control_.BuildUI());
|
||||||
|
source_control_.Setup(client_);
|
||||||
gr_registers_placeholder->parent()->ReplaceChild(
|
gr_registers_placeholder->parent()->ReplaceChild(
|
||||||
gr_registers_placeholder, gr_registers_control_.BuildUI());
|
gr_registers_placeholder, gr_registers_control_.BuildUI());
|
||||||
gr_registers_control_.Setup(client_);
|
gr_registers_control_.Setup(client_);
|
||||||
|
@ -274,6 +263,7 @@ void CpuView::UpdateThreadList() {
|
||||||
|
|
||||||
void CpuView::SwitchCurrentThread(model::Thread* thread) {
|
void CpuView::SwitchCurrentThread(model::Thread* thread) {
|
||||||
current_thread_ = thread;
|
current_thread_ = thread;
|
||||||
|
source_control_.set_thread(thread);
|
||||||
gr_registers_control_.set_thread(thread);
|
gr_registers_control_.set_thread(thread);
|
||||||
fr_registers_control_.set_thread(thread);
|
fr_registers_control_.set_thread(thread);
|
||||||
vr_registers_control_.set_thread(thread);
|
vr_registers_control_.set_thread(thread);
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "xenia/debug/ui/view.h"
|
#include "xenia/debug/ui/view.h"
|
||||||
#include "xenia/debug/ui/views/cpu/call_stack_control.h"
|
#include "xenia/debug/ui/views/cpu/call_stack_control.h"
|
||||||
#include "xenia/debug/ui/views/cpu/register_list_control.h"
|
#include "xenia/debug/ui/views/cpu/register_list_control.h"
|
||||||
|
#include "xenia/debug/ui/views/cpu/source_control.h"
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace debug {
|
namespace debug {
|
||||||
|
@ -43,6 +44,7 @@ class CpuView : public View {
|
||||||
// TODO(benvanik): better state machine.
|
// TODO(benvanik): better state machine.
|
||||||
model::Thread* current_thread_ = nullptr;
|
model::Thread* current_thread_ = nullptr;
|
||||||
|
|
||||||
|
SourceControl source_control_;
|
||||||
RegisterListControl gr_registers_control_;
|
RegisterListControl gr_registers_control_;
|
||||||
RegisterListControl fr_registers_control_;
|
RegisterListControl fr_registers_control_;
|
||||||
RegisterListControl vr_registers_control_;
|
RegisterListControl vr_registers_control_;
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "xenia/debug/ui/views/cpu/register_list_control.h"
|
||||||
|
|
||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
@ -14,7 +16,6 @@
|
||||||
#include "xenia/base/string_buffer.h"
|
#include "xenia/base/string_buffer.h"
|
||||||
#include "xenia/base/string_util.h"
|
#include "xenia/base/string_util.h"
|
||||||
#include "xenia/cpu/x64_context.h"
|
#include "xenia/cpu/x64_context.h"
|
||||||
#include "xenia/debug/ui/views/cpu/register_list_control.h"
|
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace debug {
|
namespace debug {
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2015 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "xenia/debug/ui/views/cpu/source_control.h"
|
||||||
|
|
||||||
|
#include "el/animation_manager.h"
|
||||||
|
#include "xenia/base/string_buffer.h"
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace debug {
|
||||||
|
namespace ui {
|
||||||
|
namespace views {
|
||||||
|
namespace cpu {
|
||||||
|
|
||||||
|
SourceControl::SourceControl() = default;
|
||||||
|
|
||||||
|
SourceControl::~SourceControl() = default;
|
||||||
|
|
||||||
|
el::Element* SourceControl::BuildUI() {
|
||||||
|
using namespace el::dsl; // NOLINT(build/namespaces)
|
||||||
|
el::AnimationBlocker animation_blocker;
|
||||||
|
|
||||||
|
auto node = LayoutBoxNode()
|
||||||
|
.gravity(Gravity::kAll)
|
||||||
|
.distribution(LayoutDistribution::kAvailable)
|
||||||
|
.axis(Axis::kY)
|
||||||
|
.child(LayoutBoxNode()
|
||||||
|
.gravity(Gravity::kTop | Gravity::kLeftRight)
|
||||||
|
.distribution(LayoutDistribution::kGravity)
|
||||||
|
.distribution_position(
|
||||||
|
LayoutDistributionPosition::kLeftTop)
|
||||||
|
.axis(Axis::kX)
|
||||||
|
.child(ButtonNode("A")))
|
||||||
|
.child(TextBoxNode("source!")
|
||||||
|
.id("source_textbox")
|
||||||
|
.gravity(Gravity::kAll)
|
||||||
|
.is_multiline(true)
|
||||||
|
.is_read_only(true));
|
||||||
|
|
||||||
|
root_element_.set_gravity(Gravity::kAll);
|
||||||
|
root_element_.set_layout_distribution(LayoutDistribution::kAvailable);
|
||||||
|
root_element_.LoadNodeTree(node);
|
||||||
|
|
||||||
|
handler_ = std::make_unique<el::EventHandler>(&root_element_);
|
||||||
|
|
||||||
|
return &root_element_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SourceControl::Setup(DebugClient* client) {
|
||||||
|
client_ = client;
|
||||||
|
|
||||||
|
// system()->on_thread_state_updated.AddListener([this](model::Thread* thread)
|
||||||
|
// {
|
||||||
|
// if (thread == thread_) {
|
||||||
|
// InvalidateCallStack();
|
||||||
|
// }
|
||||||
|
//});
|
||||||
|
}
|
||||||
|
|
||||||
|
void SourceControl::set_thread(model::Thread* thread) {
|
||||||
|
thread_ = thread;
|
||||||
|
// InvalidateCallStack();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace cpu
|
||||||
|
} // namespace views
|
||||||
|
} // namespace ui
|
||||||
|
} // namespace debug
|
||||||
|
} // namespace xe
|
|
@ -0,0 +1,46 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2015 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XENIA_DEBUG_UI_VIEWS_CPU_SOURCE_CONTROL_H_
|
||||||
|
#define XENIA_DEBUG_UI_VIEWS_CPU_SOURCE_CONTROL_H_
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "xenia/debug/ui/control.h"
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace debug {
|
||||||
|
namespace ui {
|
||||||
|
namespace views {
|
||||||
|
namespace cpu {
|
||||||
|
|
||||||
|
class SourceControl : public Control {
|
||||||
|
public:
|
||||||
|
SourceControl();
|
||||||
|
~SourceControl() override;
|
||||||
|
|
||||||
|
el::Element* BuildUI() override;
|
||||||
|
|
||||||
|
void Setup(xe::debug::DebugClient* client) override;
|
||||||
|
|
||||||
|
model::Thread* thread() const { return thread_; }
|
||||||
|
void set_thread(model::Thread* thread);
|
||||||
|
|
||||||
|
private:
|
||||||
|
model::Thread* thread_ = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace cpu
|
||||||
|
} // namespace views
|
||||||
|
} // namespace ui
|
||||||
|
} // namespace debug
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
#endif // XENIA_DEBUG_UI_VIEWS_CPU_SOURCE_CONTROL_H_
|
Loading…
Reference in New Issue