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