Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
46 changes: 46 additions & 0 deletions Examples/Markdown4DStudioVCL/Markdown4DStudioVCL.Main.pas
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ TPadChrome = record
FItalicButton: TSpeedButton;
FLinkButton: TSpeedButton;
FCodeButton: TSpeedButton;
FViewEditorButton: TSpeedButton;
FViewSplitButton: TSpeedButton;
FViewPreviewButton: TSpeedButton;
FThemeButton: TSpeedButton;
FTocButton: TSpeedButton;
FZenButton: TSpeedButton;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -1742,6 +1787,7 @@ procedure TMarkdown4DStudioVCLForm.ApplyViewMode;
end;
end;

UpdateViewModeButtons;
EnforceTopBarOrder;
EnforceLeftPaneOrder;
end;
Expand Down
6 changes: 6 additions & 0 deletions Examples/Shared/Markdown4DStudio.Defines.pas
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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';
Expand Down