fresh/app/
view_actions.rs1use super::Editor;
6use crate::state::ViewMode;
7use rust_i18n::t;
8
9impl Editor {
10 pub fn handle_toggle_page_view(&mut self) {
12 let active_split = self.split_manager.active_split();
13 let active_buffer = self
14 .split_manager
15 .get_buffer_id(active_split.into())
16 .unwrap_or(crate::model::event::BufferId(0));
17 let default_wrap = self.resolve_line_wrap_for_buffer(active_buffer);
18 let default_line_numbers = self.config.editor.line_numbers;
19 let page_width = self
20 .buffers
21 .get(&active_buffer)
22 .and_then(|s| self.config.languages.get(&s.language))
23 .and_then(|lc| lc.page_width)
24 .or(self.config.editor.page_width);
25
26 let view_mode = {
27 let current = self
28 .split_view_states
29 .get(&active_split)
30 .map(|vs| vs.view_mode.clone())
31 .unwrap_or(ViewMode::Source);
32 match current {
33 ViewMode::PageView => ViewMode::Source,
34 _ => ViewMode::PageView,
35 }
36 };
37
38 if let Some(vs) = self.split_view_states.get_mut(&active_split) {
40 vs.view_mode = view_mode.clone();
41 vs.viewport.line_wrap_enabled = match view_mode {
45 ViewMode::PageView => false,
46 ViewMode::Source => default_wrap,
47 };
48 match view_mode {
49 ViewMode::PageView => {
50 vs.show_line_numbers = false;
51 if let Some(width) = page_width {
53 vs.compose_width = Some(width as u16);
54 }
55 }
56 ViewMode::Source => {
57 vs.compose_width = None;
59 vs.view_transform = None;
60 vs.show_line_numbers = default_line_numbers;
61 }
62 }
63 }
64
65 let mode_label = match view_mode {
66 ViewMode::PageView => t!("view.page_view").to_string(),
67 ViewMode::Source => "Source".to_string(),
68 };
69 self.set_status_message(t!("view.mode", mode = mode_label).to_string());
70 }
71}