1use gpui::{AnyElement, Modifiers, WeakView};
2use markdown_preview::{
3 markdown_preview_view::MarkdownPreviewView, OpenPreview, OpenPreviewToTheSide,
4};
5use ui::{prelude::*, text_for_keystroke, IconButtonShape, Tooltip};
6use workspace::Workspace;
7
8use crate::QuickActionBar;
9
10impl QuickActionBar {
11 pub fn render_toggle_markdown_preview(
12 &self,
13 workspace: WeakView<Workspace>,
14 cx: &mut ViewContext<Self>,
15 ) -> Option<AnyElement> {
16 let mut active_editor_is_markdown = false;
17
18 if let Some(workspace) = self.workspace.upgrade() {
19 workspace.update(cx, |workspace, cx| {
20 active_editor_is_markdown =
21 MarkdownPreviewView::resolve_active_item_as_markdown_editor(workspace, cx)
22 .is_some();
23 });
24 }
25
26 if !active_editor_is_markdown {
27 return None;
28 }
29
30 let alt_click = gpui::Keystroke {
31 key: "click".into(),
32 modifiers: Modifiers::alt(),
33 ..Default::default()
34 };
35
36 let button = IconButton::new("toggle-markdown-preview", IconName::Eye)
37 .shape(IconButtonShape::Square)
38 .icon_size(IconSize::Small)
39 .style(ButtonStyle::Subtle)
40 .tooltip(move |cx| {
41 Tooltip::with_meta(
42 "Preview Markdown",
43 Some(&markdown_preview::OpenPreview),
44 format!(
45 "{} to open in a split",
46 text_for_keystroke(&alt_click, PlatformStyle::platform())
47 ),
48 cx,
49 )
50 })
51 .on_click(move |_, cx| {
52 if let Some(workspace) = workspace.upgrade() {
53 workspace.update(cx, |_, cx| {
54 if cx.modifiers().alt {
55 cx.dispatch_action(Box::new(OpenPreviewToTheSide));
56 } else {
57 cx.dispatch_action(Box::new(OpenPreview));
58 }
59 });
60 }
61 });
62
63 Some(button.into_any_element())
64 }
65}