Skip to content

Commit 9f71ce9

Browse files
Add rlwinm decoder window (#83)
* Add rlwinm decoder window * Remove extra files * Create Cargo.lock * Make fmt happy * Update Cargo.lock * Update Cargo.lock * Update Cargo.lock
1 parent d9fb488 commit 9f71ce9

File tree

5 files changed

+69
-13
lines changed

5 files changed

+69
-13
lines changed

Cargo.lock

Lines changed: 23 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objdiff-gui/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ bytes = "1.6.0"
2929
cfg-if = "1.0.0"
3030
const_format = "0.2.32"
3131
cwdemangle = "1.0.0"
32+
rlwinmdec = "1.0.1"
3233
dirs = "5.0.1"
3334
egui = "0.27.2"
3435
egui_extras = "0.27.2"

objdiff-gui/src/app.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ use crate::{
3939
function_diff::function_diff_ui,
4040
graphics::{graphics_window, GraphicsConfig, GraphicsViewState},
4141
jobs::jobs_ui,
42+
rlwinm::{rlwinm_decode_window, RlwinmDecodeViewState},
4243
symbol_diff::{symbol_diff_ui, DiffViewState, View},
4344
},
4445
};
@@ -48,11 +49,13 @@ pub struct ViewState {
4849
pub jobs: JobQueue,
4950
pub config_state: ConfigViewState,
5051
pub demangle_state: DemangleViewState,
52+
pub rlwinm_decode_state: RlwinmDecodeViewState,
5153
pub diff_state: DiffViewState,
5254
pub graphics_state: GraphicsViewState,
5355
pub frame_history: FrameHistory,
5456
pub show_appearance_config: bool,
5557
pub show_demangle: bool,
58+
pub show_rlwinm_decode: bool,
5659
pub show_project_config: bool,
5760
pub show_arch_config: bool,
5861
pub show_debug: bool,
@@ -450,11 +453,13 @@ impl eframe::App for App {
450453
jobs,
451454
config_state,
452455
demangle_state,
456+
rlwinm_decode_state,
453457
diff_state,
454458
graphics_state,
455459
frame_history,
456460
show_appearance_config,
457461
show_demangle,
462+
show_rlwinm_decode,
458463
show_project_config,
459464
show_arch_config,
460465
show_debug,
@@ -513,6 +518,10 @@ impl eframe::App for App {
513518
*show_demangle = !*show_demangle;
514519
ui.close_menu();
515520
}
521+
if ui.button("Rlwinm Decoder…").clicked() {
522+
*show_rlwinm_decode = !*show_rlwinm_decode;
523+
ui.close_menu();
524+
}
516525
});
517526
ui.menu_button("Diff Options", |ui| {
518527
if ui.button("Arch Settings…").clicked() {
@@ -598,6 +607,7 @@ impl eframe::App for App {
598607
project_window(ctx, config, show_project_config, config_state, appearance);
599608
appearance_window(ctx, show_appearance_config, appearance);
600609
demangle_window(ctx, show_demangle, demangle_state, appearance);
610+
rlwinm_decode_window(ctx, show_rlwinm_decode, rlwinm_decode_state, appearance);
601611
arch_config_window(ctx, config, show_arch_config, appearance);
602612
debug_window(ctx, show_debug, frame_history, appearance);
603613
graphics_window(ctx, show_graphics, frame_history, graphics_state, appearance);

objdiff-gui/src/views/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ pub(crate) mod frame_history;
1010
pub(crate) mod function_diff;
1111
pub(crate) mod graphics;
1212
pub(crate) mod jobs;
13+
pub(crate) mod rlwinm;
1314
pub(crate) mod symbol_diff;
1415

1516
#[inline]

objdiff-gui/src/views/rlwinm.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use egui::TextStyle;
2+
3+
use crate::views::appearance::Appearance;
4+
5+
#[derive(Default)]
6+
pub struct RlwinmDecodeViewState {
7+
pub text: String,
8+
}
9+
10+
pub fn rlwinm_decode_window(
11+
ctx: &egui::Context,
12+
show: &mut bool,
13+
state: &mut RlwinmDecodeViewState,
14+
appearance: &Appearance,
15+
) {
16+
egui::Window::new("Rlwinm Decoder").open(show).show(ctx, |ui| {
17+
ui.text_edit_singleline(&mut state.text);
18+
ui.add_space(10.0);
19+
if let Some(demangled) = rlwinmdec::decode(&state.text) {
20+
ui.scope(|ui| {
21+
ui.style_mut().override_text_style = Some(TextStyle::Monospace);
22+
ui.colored_label(appearance.replace_color, &demangled);
23+
});
24+
if ui.button("Copy").clicked() {
25+
ui.output_mut(|output| output.copied_text = demangled);
26+
}
27+
} else {
28+
ui.scope(|ui| {
29+
ui.style_mut().override_text_style = Some(TextStyle::Monospace);
30+
ui.colored_label(appearance.replace_color, "[invalid]");
31+
});
32+
}
33+
});
34+
}

0 commit comments

Comments
 (0)