VIP inspection tooling #4
|
@ -41,7 +41,7 @@ impl UiExt for Ui {
|
||||||
frame.inner_margin.top += 2.0;
|
frame.inner_margin.top += 2.0;
|
||||||
let res = self.push_id(&title, |ui| {
|
let res = self.push_id(&title, |ui| {
|
||||||
frame.show(ui, |ui| {
|
frame.show(ui, |ui| {
|
||||||
ui.set_min_width(ui.available_width());
|
ui.set_max_width(ui.available_width());
|
||||||
add_contents(ui);
|
add_contents(ui);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
@ -143,6 +143,7 @@ pub struct NumberEdit<'a, T: Number> {
|
||||||
precision: usize,
|
precision: usize,
|
||||||
min: Option<T>,
|
min: Option<T>,
|
||||||
max: Option<T>,
|
max: Option<T>,
|
||||||
|
desired_width: Option<f32>,
|
||||||
arrows: bool,
|
arrows: bool,
|
||||||
hex: bool,
|
hex: bool,
|
||||||
}
|
}
|
||||||
|
@ -155,6 +156,7 @@ impl<'a, T: Number> NumberEdit<'a, T> {
|
||||||
precision: 3,
|
precision: 3,
|
||||||
min: None,
|
min: None,
|
||||||
max: None,
|
max: None,
|
||||||
|
desired_width: None,
|
||||||
arrows: true,
|
arrows: true,
|
||||||
hex: false,
|
hex: false,
|
||||||
}
|
}
|
||||||
|
@ -178,6 +180,13 @@ impl<'a, T: Number> NumberEdit<'a, T> {
|
||||||
Self { min, max, ..self }
|
Self { min, max, ..self }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn desired_width(self, desired_width: f32) -> Self {
|
||||||
|
Self {
|
||||||
|
desired_width: Some(desired_width),
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn arrows(self, arrows: bool) -> Self {
|
pub fn arrows(self, arrows: bool) -> Self {
|
||||||
Self { arrows, ..self }
|
Self { arrows, ..self }
|
||||||
}
|
}
|
||||||
|
@ -246,9 +255,16 @@ impl<T: Number> Widget for NumberEdit<'_, T> {
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
let mut desired_width = self
|
||||||
|
.desired_width
|
||||||
|
.unwrap_or_else(|| ui.spacing().text_edit_width);
|
||||||
|
if self.arrows {
|
||||||
|
desired_width -= 16.0;
|
||||||
|
}
|
||||||
let text = TextEdit::singleline(&mut str)
|
let text = TextEdit::singleline(&mut str)
|
||||||
.horizontal_align(Align::Max)
|
.horizontal_align(Align::Max)
|
||||||
.id(id)
|
.id(id)
|
||||||
|
.desired_width(desired_width)
|
||||||
.margin(Margin {
|
.margin(Margin {
|
||||||
left: 4.0,
|
left: 4.0,
|
||||||
right: if self.arrows { 20.0 } else { 4.0 },
|
right: if self.arrows { 20.0 } else { 4.0 },
|
||||||
|
|
|
@ -195,7 +195,7 @@ impl AppWindow for BgMapWindow {
|
||||||
CentralPanel::default().show(ctx, |ui| {
|
CentralPanel::default().show(ctx, |ui| {
|
||||||
ui.horizontal_top(|ui| {
|
ui.horizontal_top(|ui| {
|
||||||
StripBuilder::new(ui)
|
StripBuilder::new(ui)
|
||||||
.size(Size::relative(0.3))
|
.size(Size::relative(0.3).at_most(200.0))
|
||||||
.size(Size::remainder())
|
.size(Size::remainder())
|
||||||
.horizontal(|mut strip| {
|
.horizontal(|mut strip| {
|
||||||
strip.cell(|ui| {
|
strip.cell(|ui| {
|
||||||
|
|
|
@ -259,7 +259,7 @@ impl AppWindow for CharacterDataWindow {
|
||||||
CentralPanel::default().show(ctx, |ui| {
|
CentralPanel::default().show(ctx, |ui| {
|
||||||
ui.horizontal_top(|ui| {
|
ui.horizontal_top(|ui| {
|
||||||
StripBuilder::new(ui)
|
StripBuilder::new(ui)
|
||||||
.size(Size::relative(0.3))
|
.size(Size::relative(0.3).at_most(200.0))
|
||||||
.size(Size::remainder())
|
.size(Size::remainder())
|
||||||
.horizontal(|mut strip| {
|
.horizontal(|mut strip| {
|
||||||
strip.cell(|ui| {
|
strip.cell(|ui| {
|
||||||
|
|
|
@ -161,7 +161,7 @@ impl AppWindow for FrameBufferWindow {
|
||||||
CentralPanel::default().show(ctx, |ui| {
|
CentralPanel::default().show(ctx, |ui| {
|
||||||
ui.horizontal_top(|ui| {
|
ui.horizontal_top(|ui| {
|
||||||
StripBuilder::new(ui)
|
StripBuilder::new(ui)
|
||||||
.size(Size::relative(0.3))
|
.size(Size::relative(0.3).at_most(200.0))
|
||||||
.size(Size::remainder())
|
.size(Size::remainder())
|
||||||
.horizontal(|mut strip| {
|
.horizontal(|mut strip| {
|
||||||
strip.cell(|ui| {
|
strip.cell(|ui| {
|
||||||
|
|
|
@ -216,7 +216,7 @@ impl AppWindow for ObjectWindow {
|
||||||
CentralPanel::default().show(ctx, |ui| {
|
CentralPanel::default().show(ctx, |ui| {
|
||||||
ui.horizontal_top(|ui| {
|
ui.horizontal_top(|ui| {
|
||||||
StripBuilder::new(ui)
|
StripBuilder::new(ui)
|
||||||
.size(Size::relative(0.3))
|
.size(Size::relative(0.3).at_most(200.0))
|
||||||
.size(Size::remainder())
|
.size(Size::remainder())
|
||||||
.horizontal(|mut strip| {
|
.horizontal(|mut strip| {
|
||||||
strip.cell(|ui| {
|
strip.cell(|ui| {
|
||||||
|
|
|
@ -39,15 +39,16 @@ impl RegisterWindow {
|
||||||
let mut intpnd = InterruptReg::parse(raw_intpnd);
|
let mut intpnd = InterruptReg::parse(raw_intpnd);
|
||||||
ui.section("Interrupt", |ui| {
|
ui.section("Interrupt", |ui| {
|
||||||
let width = ui.available_width();
|
let width = ui.available_width();
|
||||||
|
let xspace = ui.spacing().item_spacing.x;
|
||||||
ui.with_layout(Layout::top_down_justified(Align::Center), |ui| {
|
ui.with_layout(Layout::top_down_justified(Align::Center), |ui| {
|
||||||
TableBuilder::new(ui)
|
TableBuilder::new(ui)
|
||||||
.id_salt("raw_values")
|
.id_salt("raw_values")
|
||||||
.columns(Column::exact(width * 0.5), 2)
|
.columns(Column::exact(width * 0.5 - xspace), 2)
|
||||||
.cell_layout(Layout::left_to_right(Align::Max))
|
.cell_layout(Layout::left_to_right(Align::Max))
|
||||||
.body(|mut body| {
|
.body(|mut body| {
|
||||||
body.row(row_height, |mut row| {
|
body.row(row_height, |mut row| {
|
||||||
row.col(|ui| {
|
row.col(|ui| {
|
||||||
ui.add_sized(ui.available_size(), Label::new("INTENB"));
|
ui.label("INTENB");
|
||||||
});
|
});
|
||||||
row.col(|ui| {
|
row.col(|ui| {
|
||||||
let mut text = format!("{raw_intenb:04x}");
|
let mut text = format!("{raw_intenb:04x}");
|
||||||
|
@ -73,8 +74,8 @@ impl RegisterWindow {
|
||||||
ui.add_space(8.0);
|
ui.add_space(8.0);
|
||||||
TableBuilder::new(ui)
|
TableBuilder::new(ui)
|
||||||
.id_salt("flags")
|
.id_salt("flags")
|
||||||
.column(Column::exact(width * 0.5))
|
.column(Column::exact(width * 0.5 - xspace))
|
||||||
.columns(Column::exact(width * 0.25), 2)
|
.columns(Column::exact(width * 0.25 - xspace), 2)
|
||||||
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
|
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
|
||||||
.body(|mut body| {
|
.body(|mut body| {
|
||||||
body.row(row_height, |mut row| {
|
body.row(row_height, |mut row| {
|
||||||
|
@ -114,8 +115,8 @@ impl RegisterWindow {
|
||||||
add_row("LFBEND", &mut intenb.lfbend, &mut intpnd.lfbend);
|
add_row("LFBEND", &mut intenb.lfbend, &mut intpnd.lfbend);
|
||||||
add_row("SCANERR", &mut intenb.scanerr, &mut intpnd.scanerr);
|
add_row("SCANERR", &mut intenb.scanerr, &mut intpnd.scanerr);
|
||||||
});
|
});
|
||||||
ui.allocate_space(ui.available_size());
|
|
||||||
});
|
});
|
||||||
|
ui.allocate_space(ui.available_size());
|
||||||
});
|
});
|
||||||
if intpnd.update(&mut raw_intpnd) {
|
if intpnd.update(&mut raw_intpnd) {
|
||||||
self.memory.write(self.sim_id, 0x0005f800, &raw_intpnd);
|
self.memory.write(self.sim_id, 0x0005f800, &raw_intpnd);
|
||||||
|
@ -129,6 +130,7 @@ impl RegisterWindow {
|
||||||
let row_height = self.row_height(ui);
|
let row_height = self.row_height(ui);
|
||||||
let mut raw_dpstts = self.read_address(0x0005f820);
|
let mut raw_dpstts = self.read_address(0x0005f820);
|
||||||
let mut dpstts = DisplayReg::parse(raw_dpstts);
|
let mut dpstts = DisplayReg::parse(raw_dpstts);
|
||||||
|
ui.add_space(-ui.spacing().item_spacing.x);
|
||||||
ui.section("Display", |ui| {
|
ui.section("Display", |ui| {
|
||||||
let width = ui.available_width();
|
let width = ui.available_width();
|
||||||
TableBuilder::new(ui)
|
TableBuilder::new(ui)
|
||||||
|
@ -211,6 +213,7 @@ impl RegisterWindow {
|
||||||
let row_height = self.row_height(ui);
|
let row_height = self.row_height(ui);
|
||||||
let [mut raw_xpstts, raw_xpctrl] = self.read_address(0x0005f840);
|
let [mut raw_xpstts, raw_xpctrl] = self.read_address(0x0005f840);
|
||||||
let mut xpstts = DrawingReg::parse(raw_xpstts);
|
let mut xpstts = DrawingReg::parse(raw_xpstts);
|
||||||
|
ui.add_space(-ui.spacing().item_spacing.x);
|
||||||
ui.section("Drawing", |ui| {
|
ui.section("Drawing", |ui| {
|
||||||
let width = ui.available_width();
|
let width = ui.available_width();
|
||||||
TableBuilder::new(ui)
|
TableBuilder::new(ui)
|
||||||
|
@ -308,10 +311,13 @@ impl RegisterWindow {
|
||||||
fn show_colors(&mut self, ui: &mut Ui) {
|
fn show_colors(&mut self, ui: &mut Ui) {
|
||||||
let row_height = self.row_height(ui);
|
let row_height = self.row_height(ui);
|
||||||
let registers = self.registers.borrow();
|
let registers = self.registers.borrow();
|
||||||
|
ui.add_space(-ui.spacing().item_spacing.x);
|
||||||
ui.section("Colors", |ui| {
|
ui.section("Colors", |ui| {
|
||||||
|
let width = ui.available_width();
|
||||||
|
let xspace = ui.spacing().item_spacing.x;
|
||||||
TableBuilder::new(ui)
|
TableBuilder::new(ui)
|
||||||
.column(Column::auto())
|
.column(Column::exact(width * 0.2 - xspace))
|
||||||
.columns(Column::remainder(), 4)
|
.columns(Column::exact(width * 0.20 - xspace), 4)
|
||||||
.cell_layout(Layout::left_to_right(Align::Max))
|
.cell_layout(Layout::left_to_right(Align::Max))
|
||||||
.body(|mut body| {
|
.body(|mut body| {
|
||||||
body.row(row_height, |mut row| {
|
body.row(row_height, |mut row| {
|
||||||
|
@ -388,6 +394,7 @@ impl RegisterWindow {
|
||||||
.add(
|
.add(
|
||||||
NumberEdit::new(value)
|
NumberEdit::new(value)
|
||||||
.range(0..256)
|
.range(0..256)
|
||||||
|
.desired_width(width * 0.2)
|
||||||
.arrows(false)
|
.arrows(false)
|
||||||
.hex(true),
|
.hex(true),
|
||||||
)
|
)
|
||||||
|
@ -398,7 +405,11 @@ impl RegisterWindow {
|
||||||
});
|
});
|
||||||
row.col(|ui| {
|
row.col(|ui| {
|
||||||
if ui
|
if ui
|
||||||
.add(NumberEdit::new(&mut c1).range(0..4).arrows(false))
|
.add(
|
||||||
|
NumberEdit::new(&mut c1)
|
||||||
|
.range(0..4)
|
||||||
|
.desired_width(ui.available_width() - xspace),
|
||||||
|
)
|
||||||
.changed()
|
.changed()
|
||||||
{
|
{
|
||||||
*value = (*value & 0xfff3) | (c1 << 2);
|
*value = (*value & 0xfff3) | (c1 << 2);
|
||||||
|
@ -407,7 +418,11 @@ impl RegisterWindow {
|
||||||
});
|
});
|
||||||
row.col(|ui| {
|
row.col(|ui| {
|
||||||
if ui
|
if ui
|
||||||
.add(NumberEdit::new(&mut c2).range(0..4).arrows(false))
|
.add(
|
||||||
|
NumberEdit::new(&mut c2)
|
||||||
|
.range(0..4)
|
||||||
|
.desired_width(ui.available_width() - xspace),
|
||||||
|
)
|
||||||
.changed()
|
.changed()
|
||||||
{
|
{
|
||||||
*value = (*value & 0xffcf) | (c2 << 4);
|
*value = (*value & 0xffcf) | (c2 << 4);
|
||||||
|
@ -416,7 +431,11 @@ impl RegisterWindow {
|
||||||
});
|
});
|
||||||
row.col(|ui| {
|
row.col(|ui| {
|
||||||
if ui
|
if ui
|
||||||
.add(NumberEdit::new(&mut c3).range(0..4).arrows(false))
|
.add(
|
||||||
|
NumberEdit::new(&mut c3)
|
||||||
|
.range(0..4)
|
||||||
|
.desired_width(ui.available_width() - xspace),
|
||||||
|
)
|
||||||
.changed()
|
.changed()
|
||||||
{
|
{
|
||||||
*value = (*value & 0xff3f) | (c3 << 6);
|
*value = (*value & 0xff3f) | (c3 << 6);
|
||||||
|
@ -445,7 +464,11 @@ impl RegisterWindow {
|
||||||
row.col(|ui| {
|
row.col(|ui| {
|
||||||
let mut bkcol: u16 = read_address(®isters, 0x0005f870);
|
let mut bkcol: u16 = read_address(®isters, 0x0005f870);
|
||||||
if ui
|
if ui
|
||||||
.add(NumberEdit::new(&mut bkcol).range(0..4).arrows(false))
|
.add(
|
||||||
|
NumberEdit::new(&mut bkcol)
|
||||||
|
.range(0..4)
|
||||||
|
.desired_width(ui.available_width() - xspace),
|
||||||
|
)
|
||||||
.changed()
|
.changed()
|
||||||
{
|
{
|
||||||
self.memory.write(self.sim_id, 0x0005f870, &bkcol);
|
self.memory.write(self.sim_id, 0x0005f870, &bkcol);
|
||||||
|
@ -478,12 +501,14 @@ impl RegisterWindow {
|
||||||
|
|
||||||
fn show_objects(&mut self, ui: &mut Ui) {
|
fn show_objects(&mut self, ui: &mut Ui) {
|
||||||
let row_height = self.row_height(ui);
|
let row_height = self.row_height(ui);
|
||||||
|
ui.add_space(-ui.spacing().item_spacing.x);
|
||||||
ui.section("Objects", |ui| {
|
ui.section("Objects", |ui| {
|
||||||
let width = ui.available_width();
|
let width = ui.available_width();
|
||||||
|
let xspace = ui.spacing().item_spacing.x;
|
||||||
TableBuilder::new(ui)
|
TableBuilder::new(ui)
|
||||||
.column(Column::exact(width * 0.25))
|
.column(Column::exact(width * 0.25 - xspace))
|
||||||
.column(Column::exact(width * 0.25))
|
.column(Column::exact(width * 0.25 - xspace))
|
||||||
.column(Column::exact(width * 0.5))
|
.column(Column::exact(width * 0.5 - xspace))
|
||||||
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
|
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
|
||||||
.body(|mut body| {
|
.body(|mut body| {
|
||||||
body.row(row_height, |mut row| {
|
body.row(row_height, |mut row| {
|
||||||
|
@ -526,11 +551,13 @@ impl RegisterWindow {
|
||||||
fn show_misc(&mut self, ui: &mut Ui) {
|
fn show_misc(&mut self, ui: &mut Ui) {
|
||||||
let row_height = self.row_height(ui);
|
let row_height = self.row_height(ui);
|
||||||
let registers = self.registers.borrow();
|
let registers = self.registers.borrow();
|
||||||
|
ui.add_space(-ui.spacing().item_spacing.x);
|
||||||
ui.section("Misc.", |ui| {
|
ui.section("Misc.", |ui| {
|
||||||
let width = ui.available_width();
|
let width = ui.available_width();
|
||||||
|
let xspace = ui.spacing().item_spacing.x;
|
||||||
TableBuilder::new(ui)
|
TableBuilder::new(ui)
|
||||||
.column(Column::exact(width * 0.5))
|
.column(Column::exact(width * 0.5 - xspace))
|
||||||
.column(Column::exact(width * 0.5))
|
.column(Column::exact(width * 0.5 - xspace))
|
||||||
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
|
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
|
||||||
.body(|mut body| {
|
.body(|mut body| {
|
||||||
body.row(row_height, |mut row| {
|
body.row(row_height, |mut row| {
|
||||||
|
@ -626,12 +653,13 @@ impl AppWindow for RegisterWindow {
|
||||||
CentralPanel::default().show(ctx, |ui| {
|
CentralPanel::default().show(ctx, |ui| {
|
||||||
ScrollArea::vertical().show(ui, |ui| {
|
ScrollArea::vertical().show(ui, |ui| {
|
||||||
ui.horizontal_top(|ui| {
|
ui.horizontal_top(|ui| {
|
||||||
let width = ui.available_width() - (ui.spacing().item_spacing.x * 8.0);
|
let xspace = ui.spacing().item_spacing.x;
|
||||||
|
let width = ui.available_width() - (xspace * 5.0);
|
||||||
StripBuilder::new(ui)
|
StripBuilder::new(ui)
|
||||||
.size(Size::exact(width * 0.2))
|
.size(Size::exact(width * 0.2 - xspace))
|
||||||
.size(Size::exact(width * 0.2))
|
.size(Size::exact(width * 0.2 - xspace))
|
||||||
.size(Size::exact(width * 0.3))
|
.size(Size::exact(width * 0.4 - xspace))
|
||||||
.size(Size::exact(width * 0.2))
|
.size(Size::exact(width * 0.2 - xspace))
|
||||||
.horizontal(|mut strip| {
|
.horizontal(|mut strip| {
|
||||||
strip.cell(|ui| {
|
strip.cell(|ui| {
|
||||||
self.show_interrupts(ui);
|
self.show_interrupts(ui);
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
use egui::{Color32, Image, ImageSource, Response, Sense, TextureOptions, Ui, Widget};
|
use egui::{Color32, Image, ImageSource, Response, Sense, TextureOptions, Ui, Widget};
|
||||||
|
|
||||||
pub const GENERIC_PALETTE: [u8; 4] = [0, 64, 128, 255];
|
pub const GENERIC_PALETTE: [u8; 4] = [0, 32, 64, 128];
|
||||||
|
|
||||||
pub fn shade(brt: u8, color: Color32) -> Color32 {
|
pub fn shade(brt: u8, color: Color32) -> Color32 {
|
||||||
color.gamma_multiply(brt as f32 / 255.0)
|
let corrected = if brt & 0x80 != 0 {
|
||||||
|
255
|
||||||
|
} else {
|
||||||
|
(brt << 1) | (brt >> 6)
|
||||||
|
};
|
||||||
|
color.gamma_multiply(corrected as f32 / 255.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generic_palette(color: Color32) -> [Color32; 4] {
|
pub fn generic_palette(color: Color32) -> [Color32; 4] {
|
||||||
|
|
|
@ -453,7 +453,7 @@ impl AppWindow for WorldWindow {
|
||||||
CentralPanel::default().show(ctx, |ui| {
|
CentralPanel::default().show(ctx, |ui| {
|
||||||
ui.horizontal_top(|ui| {
|
ui.horizontal_top(|ui| {
|
||||||
StripBuilder::new(ui)
|
StripBuilder::new(ui)
|
||||||
.size(Size::relative(0.3))
|
.size(Size::relative(0.3).at_most(200.0))
|
||||||
.size(Size::remainder())
|
.size(Size::remainder())
|
||||||
.horizontal(|mut strip| {
|
.horizontal(|mut strip| {
|
||||||
strip.cell(|ui| {
|
strip.cell(|ui| {
|
||||||
|
|
Loading…
Reference in New Issue