Skip to content

Commit 142973c

Browse files
committed
feat: Maybe working?..
1 parent 2f6b16a commit 142973c

File tree

3 files changed

+49
-25
lines changed

3 files changed

+49
-25
lines changed

hex_viewer.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ typedef struct {
4343
uint32_t file_offset;
4444
uint32_t file_read_bytes;
4545
uint32_t file_size;
46-
Stream* stream;
4746
bool mode; // Print address or content
47+
48+
Stream* stream;
4849
} HexViewerModel;
4950

5051

scenes/hex_viewer_scene_startscreen.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bool hex_viewer_scene_startscreen_on_event(void* context, SceneManagerEvent even
2222
if(event.type == SceneManagerEventTypeCustom) {
2323
switch(event.event) {
2424
case HexViewerCustomEventStartscreenLeft:
25-
app->model->mode = !hex_viewer->model->mode;
25+
app->model->mode = !app->model->mode;
2626
consumed = true;
2727
break;
2828
case HexViewerCustomEventStartscreenRight:

views/hex_viewer_startscreen.c

+46-23
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ struct HexViewerStartscreen {
1212

1313

1414
typedef struct {
15-
int some_value;
15+
uint8_t file_bytes[HEX_VIEWER_LINES_ON_SCREEN][HEX_VIEWER_BYTES_PER_LINE];
16+
uint32_t file_offset;
17+
uint32_t file_read_bytes;
18+
uint32_t file_size;
19+
bool mode; // Print address or content
1620
} HexViewerStartscreenModel;
1721

1822
void hex_viewer_startscreen_set_callback(
@@ -29,7 +33,7 @@ void hex_viewer_startscreen_draw(Canvas* canvas, HexViewerStartscreenModel* mode
2933
UNUSED(model);
3034
canvas_clear(canvas);
3135

32-
if (!app->model->file_size) {
36+
if (!model->file_size) {
3337
canvas_set_color(canvas, ColorBlack);
3438
canvas_set_font(canvas, FontPrimary);
3539
canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "HexViewer v2.0");
@@ -40,17 +44,17 @@ void hex_viewer_startscreen_draw(Canvas* canvas, HexViewerStartscreenModel* mode
4044
} else {
4145
canvas_set_color(canvas, ColorBlack);
4246

43-
elements_button_left(canvas, app->model->mode ? "Addr" : "Text");
47+
elements_button_left(canvas, model->mode ? "Addr" : "Text");
4448
elements_button_right(canvas, "Info");
4549
elements_button_center(canvas, "Menu");
4650

4751
int ROW_HEIGHT = 12;
4852
int TOP_OFFSET = 10;
4953
int LEFT_OFFSET = 3;
5054

51-
uint32_t line_count = app->model->file_size / HEX_VIEWER_BYTES_PER_LINE;
52-
if(app->model->file_size % HEX_VIEWER_BYTES_PER_LINE != 0) line_count += 1;
53-
uint32_t first_line_on_screen = app->model->file_offset / HEX_VIEWER_BYTES_PER_LINE;
55+
uint32_t line_count = model->file_size / HEX_VIEWER_BYTES_PER_LINE;
56+
if(model->file_size % HEX_VIEWER_BYTES_PER_LINE != 0) line_count += 1;
57+
uint32_t first_line_on_screen = model->file_offset / HEX_VIEWER_BYTES_PER_LINE;
5458
if(line_count > HEX_VIEWER_LINES_ON_SCREEN) {
5559
uint8_t width = canvas_width(canvas);
5660
elements_scrollbar_pos(
@@ -63,24 +67,24 @@ void hex_viewer_startscreen_draw(Canvas* canvas, HexViewerStartscreenModel* mode
6367
}
6468

6569
char temp_buf[32];
66-
uint32_t row_iters = app->model->file_read_bytes / HEX_VIEWER_BYTES_PER_LINE;
67-
if(app->model->file_read_bytes % HEX_VIEWER_BYTES_PER_LINE != 0) row_iters += 1;
70+
uint32_t row_iters = model->file_read_bytes / HEX_VIEWER_BYTES_PER_LINE;
71+
if(model->file_read_bytes % HEX_VIEWER_BYTES_PER_LINE != 0) row_iters += 1;
6872

6973
for(uint32_t i = 0; i < row_iters; ++i) {
7074
uint32_t bytes_left_per_row =
71-
app->model->file_read_bytes - i * HEX_VIEWER_BYTES_PER_LINE;
75+
model->file_read_bytes - i * HEX_VIEWER_BYTES_PER_LINE;
7276
bytes_left_per_row = MIN(bytes_left_per_row, HEX_VIEWER_BYTES_PER_LINE);
7377

74-
if(app->model->mode) {
75-
memcpy(temp_buf, app->model->file_bytes[i], bytes_left_per_row);
78+
if(model->mode) {
79+
memcpy(temp_buf, model->file_bytes[i], bytes_left_per_row);
7680
temp_buf[bytes_left_per_row] = '\0';
7781
for(uint32_t j = 0; j < bytes_left_per_row; ++j)
7882
if(!isprint((int)temp_buf[j])) temp_buf[j] = '.';
7983

8084
canvas_set_font(canvas, FontKeyboard);
8185
canvas_draw_str(canvas, LEFT_OFFSET, TOP_OFFSET + i * ROW_HEIGHT, temp_buf);
8286
} else {
83-
uint32_t addr = app->model->file_offset + i * HEX_VIEWER_BYTES_PER_LINE;
87+
uint32_t addr = model->file_offset + i * HEX_VIEWER_BYTES_PER_LINE;
8488
snprintf(temp_buf, 32, "%04lX", addr);
8589

8690
canvas_set_font(canvas, FontKeyboard);
@@ -89,7 +93,7 @@ void hex_viewer_startscreen_draw(Canvas* canvas, HexViewerStartscreenModel* mode
8993

9094
char* p = temp_buf;
9195
for(uint32_t j = 0; j < bytes_left_per_row; ++j)
92-
p += snprintf(p, 32, "%02X ", app->model->file_bytes[i][j]);
96+
p += snprintf(p, 32, "%02X ", model->file_bytes[i][j]);
9397

9498
canvas_set_font(canvas, FontKeyboard);
9599
canvas_draw_str(canvas, LEFT_OFFSET + 41, TOP_OFFSET + i * ROW_HEIGHT, temp_buf);
@@ -99,7 +103,20 @@ void hex_viewer_startscreen_draw(Canvas* canvas, HexViewerStartscreenModel* mode
99103
}
100104

101105
static void hex_viewer_startscreen_model_init(HexViewerStartscreenModel* const model) {
102-
model->some_value = 1;
106+
memset(model->file_bytes, 0, sizeof(model->file_bytes));
107+
model->file_offset = 0;
108+
model->file_read_bytes = 0;
109+
model->file_size = 0;
110+
model->mode = false;
111+
}
112+
113+
static void update_local_model_from_app(HexViewer* const app, HexViewerStartscreenModel* const model)
114+
{
115+
memcpy(model->file_bytes, app->model->file_bytes, sizeof(model->file_bytes));
116+
model->file_offset = app->model->file_offset;
117+
model->file_read_bytes = app->model->file_read_bytes;
118+
model->file_size = app->model->file_size;
119+
model->mode = app->model->mode;
103120
}
104121

105122
bool hex_viewer_startscreen_input(InputEvent* event, void* context) {
@@ -112,20 +129,21 @@ bool hex_viewer_startscreen_input(InputEvent* event, void* context) {
112129
instance->view,
113130
HexViewerStartscreenModel * model,
114131
{
115-
UNUSED(model);
116132
instance->callback(HexViewerCustomEventStartscreenBack, instance->context);
133+
update_local_model_from_app(instance->context, model);
117134
},
118135
true);
119136
break;
120137
case InputKeyLeft:
121138
with_view_model(
122-
instance->view,
123-
HexViewerStartscreenModel * model,
124-
{
125-
UNUSED(model);
126-
instance->callback(HexViewerCustomEventStartscreenLeft, instance->context);
127-
},
128-
true);
139+
instance->view,
140+
HexViewerStartscreenModel * model,
141+
{
142+
UNUSED(model);
143+
instance->callback(HexViewerCustomEventStartscreenLeft, instance->context);
144+
update_local_model_from_app(instance->context, model);
145+
},
146+
true);
129147
break;
130148
case InputKeyRight:
131149
with_view_model(
@@ -134,6 +152,7 @@ bool hex_viewer_startscreen_input(InputEvent* event, void* context) {
134152
{
135153
UNUSED(model);
136154
instance->callback(HexViewerCustomEventStartscreenRight, instance->context);
155+
update_local_model_from_app(instance->context, model);
137156
},
138157
true);
139158
break;
@@ -144,6 +163,7 @@ bool hex_viewer_startscreen_input(InputEvent* event, void* context) {
144163
{
145164
UNUSED(model);
146165
instance->callback(HexViewerCustomEventStartscreenUp, instance->context);
166+
update_local_model_from_app(instance->context, model);
147167
},
148168
true);
149169
break;
@@ -154,6 +174,7 @@ bool hex_viewer_startscreen_input(InputEvent* event, void* context) {
154174
{
155175
UNUSED(model);
156176
instance->callback(HexViewerCustomEventStartscreenDown, instance->context);
177+
update_local_model_from_app(instance->context, model);
157178
},
158179
true);
159180
break;
@@ -164,6 +185,7 @@ bool hex_viewer_startscreen_input(InputEvent* event, void* context) {
164185
{
165186
UNUSED(model);
166187
instance->callback(HexViewerCustomEventStartscreenOk, instance->context);
188+
update_local_model_from_app(instance->context, model);
167189
},
168190
true);
169191
break;
@@ -185,7 +207,8 @@ void hex_viewer_startscreen_enter(void* context) {
185207
instance->view,
186208
HexViewerStartscreenModel * model,
187209
{
188-
hex_viewer_startscreen_model_init(model);
210+
hex_viewer_startscreen_model_init(model);
211+
// TODO update_local_model_from_app(instance->context, model);
189212
},
190213
true
191214
);

0 commit comments

Comments
 (0)