| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include "../hex_viewer.h"
- #include "../helpers/hex_viewer_custom_event.h"
- void hex_viewer_scene_scroll_callback(void* context) {
- HexViewer* app = (HexViewer*)context;
- view_dispatcher_send_custom_event(
- app->view_dispatcher, HexViewerCustomEventMenuPercentEntered);
- }
- void hex_viewer_scene_scroll_on_enter(void* context) {
- furi_assert(context);
- HexViewer* app = context;
- TextInput* text_input = app->text_input;
- text_input_set_header_text(text_input, "Scroll to percentage (0..100)");
- text_input_set_result_callback(
- text_input,
- hex_viewer_scene_scroll_callback,
- app,
- app->percent_buf,
- HEX_VIEWER_PERCENT_INPUT,
- false);
- view_dispatcher_switch_to_view(app->view_dispatcher, HexViewerSceneScroll);
- }
- bool hex_viewer_scene_scroll_on_event(void* context, SceneManagerEvent event) {
- HexViewer* app = (HexViewer*)context;
- bool consumed = false;
- if(event.type == SceneManagerEventTypeCustom) {
- if(event.event == HexViewerCustomEventMenuPercentEntered) {
- int ipercent = atoi(app->percent_buf);
- ipercent = MIN(ipercent, 100);
- ipercent = MAX(ipercent, 0);
- float percent = ipercent / 100.0;
- uint32_t line_count = app->model->file_size / HEX_VIEWER_BYTES_PER_LINE;
- if(app->model->file_size % HEX_VIEWER_BYTES_PER_LINE != 0) line_count += 1;
- uint32_t scrollable_lines = line_count - HEX_VIEWER_LINES_ON_SCREEN;
- uint32_t target_line = (uint32_t)(percent * scrollable_lines);
- uint32_t new_file_offset = target_line * HEX_VIEWER_BYTES_PER_LINE;
- if(app->model->file_size > new_file_offset) {
- app->model->file_offset = new_file_offset;
- if(!hex_viewer_read_file(app)) new_file_offset = new_file_offset; // TODO Do smth
- }
- scene_manager_search_and_switch_to_previous_scene(
- app->scene_manager, HexViewerViewIdStartscreen);
- consumed = true;
- }
- }
- return consumed;
- }
- void hex_viewer_scene_scroll_on_exit(void* context) {
- UNUSED(context);
- }
|