diff --git a/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Defines.pas b/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Defines.pas index 2e3fdb2..3c39c9d 100644 --- a/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Defines.pas +++ b/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Defines.pas @@ -22,6 +22,7 @@ interface StatusLabelLeftMargin = 8; ButtonSpacing = 4; IconGlyphSize = 14; + ViewModeGroupIndex = 1; // TSpeedButton group for the mutually exclusive view mode buttons ToolbarLightColor = TColor($00F3F3F3); ToolbarDarkColor = TColor($002D2D2D); IconLightColor = TColor($00404040); diff --git a/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Main.pas b/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Main.pas index a6d90c2..52230df 100644 --- a/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Main.pas +++ b/Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Main.pas @@ -87,6 +87,9 @@ TPadChrome = record FItalicButton: TSpeedButton; FLinkButton: TSpeedButton; FCodeButton: TSpeedButton; + FViewEditorButton: TSpeedButton; + FViewSplitButton: TSpeedButton; + FViewPreviewButton: TSpeedButton; FThemeButton: TSpeedButton; FTocButton: TSpeedButton; FZenButton: TSpeedButton; @@ -175,6 +178,10 @@ TPadChrome = record procedure HandleItalicClick(Sender: TObject); procedure HandleLinkClick(Sender: TObject); procedure HandleCodeClick(Sender: TObject); + procedure HandleViewEditorClick(Sender: TObject); + procedure HandleViewSplitClick(Sender: TObject); + procedure HandleViewPreviewClick(Sender: TObject); + procedure UpdateViewModeButtons; procedure HandleExportClick(Sender: TObject); procedure HandleCopyHtmlClick(Sender: TObject); procedure ExecuteFormatCommand(const Command: TEditorCommand); @@ -394,6 +401,16 @@ procedure TMarkdown4DStudioVCLForm.BuildToolbar; AddSeparator; + // The view mode buttons share a GroupIndex, so the VCL keeps exactly one of them + // down: clicking one releases the other two, and clicking the active one keeps it + // down because AllowAllUp stays False. + FViewEditorButton := AddIconButton(GlyphViewEditor, HintViewEditor, HandleViewEditorClick); + FViewEditorButton.GroupIndex := ViewModeGroupIndex; + FViewSplitButton := AddIconButton(GlyphViewSplit, HintViewSplit, HandleViewSplitClick); + FViewSplitButton.GroupIndex := ViewModeGroupIndex; + FViewPreviewButton := AddIconButton(GlyphViewPreview, HintViewPreview, HandleViewPreviewClick); + FViewPreviewButton.GroupIndex := ViewModeGroupIndex; + FThemeButton := AddIconButton(GlyphTheme, HintTheme, HandleThemeClick); FTocButton := AddIconButton(GlyphToc, HintToc, HandleTocClick); FZenButton := AddIconButton(GlyphZen, HintZen, HandleZenClick); @@ -757,6 +774,34 @@ procedure TMarkdown4DStudioVCLForm.HandleCodeClick(Sender: TObject); mdEditor.SetFocus; end; +procedure TMarkdown4DStudioVCLForm.HandleViewEditorClick(Sender: TObject); +begin + SetViewMode(TPadViewMode.EditorOnly); +end; + +procedure TMarkdown4DStudioVCLForm.HandleViewSplitClick(Sender: TObject); +begin + SetViewMode(TPadViewMode.Split); +end; + +procedure TMarkdown4DStudioVCLForm.HandleViewPreviewClick(Sender: TObject); +begin + SetViewMode(TPadViewMode.PreviewOnly); +end; + +procedure TMarkdown4DStudioVCLForm.UpdateViewModeButtons; +begin + // Keep the pressed button in step with the mode however it was set: toolbar click, + // Ctrl+1/2/3, the command palette, session restore or leaving zen mode. The nil + // guard covers ApplyViewMode running before BuildToolbar. + if FViewSplitButton = nil then + Exit; + + FViewEditorButton.Down := FViewMode = TPadViewMode.EditorOnly; + FViewSplitButton.Down := FViewMode = TPadViewMode.Split; + FViewPreviewButton.Down := FViewMode = TPadViewMode.PreviewOnly; +end; + procedure TMarkdown4DStudioVCLForm.HandleExportClick(Sender: TObject); begin DoExportHtml; @@ -1742,6 +1787,7 @@ procedure TMarkdown4DStudioVCLForm.ApplyViewMode; end; end; + UpdateViewModeButtons; EnforceTopBarOrder; EnforceLeftPaneOrder; end; diff --git a/Examples/Shared/Markdown4DStudio.Defines.pas b/Examples/Shared/Markdown4DStudio.Defines.pas index 6116a62..a9bdec0 100644 --- a/Examples/Shared/Markdown4DStudio.Defines.pas +++ b/Examples/Shared/Markdown4DStudio.Defines.pas @@ -23,6 +23,9 @@ interface GlyphItalic = Char($E8DB); GlyphLink = Char($E71B); GlyphCode = Char($E943); + GlyphViewEditor = Char($E70F); // Edit (pencil) + GlyphViewSplit = Char($E89A); // TwoPage + GlyphViewPreview = Char($E890); // View (eye) GlyphTheme = Char($E793); GlyphToc = Char($E8FD); GlyphFind = Char($E721); @@ -41,6 +44,9 @@ interface HintItalic = 'Italic (Ctrl+I)'; HintLink = 'Link (Ctrl+K)'; HintCode = 'Code block'; + HintViewEditor = 'Editor only (Ctrl+1)'; + HintViewSplit = 'Split view (Ctrl+2)'; + HintViewPreview = 'Preview only (Ctrl+3)'; HintTheme = 'Toggle theme'; HintToc = 'Toggle contents'; HintFind = 'Find in preview';