From 16ada6f88d1a6c9133e8bc1b889134f748ed16d9 Mon Sep 17 00:00:00 2001 From: lazarus-bart Date: Thu, 9 Jan 2020 17:32:21 +0000 Subject: [PATCH] LazEdit: disable HTML-actions if editor is not Html. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7254 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- applications/lazedit/main.pp | 50 ++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/applications/lazedit/main.pp b/applications/lazedit/main.pp index 4e2355956..bc92be8ad 100644 --- a/applications/lazedit/main.pp +++ b/applications/lazedit/main.pp @@ -45,7 +45,7 @@ uses LCLProc, Menus, ActnList, ClipBrd, LclIntf, LazFileUtils, LazUtf8, LMessages, {for overridden IsShortCut} - SynEdit, SynEditTypes, + SynEdit, SynEditTypes, SynHighLighterHtml {because we need the type TSynHTMLSyn in code somewhere}, EditorPageControl, lazedit_config, HtmlCode, HtmlDialogs, lazedit_constants, lazedit_translations, lazedit_about, mrulists; @@ -454,7 +454,7 @@ type procedure GatherAppOptions(var Options: TLazEditOptions); procedure TagMenuItemsAndActions; - procedure UpdateMenuItems; + procedure UpdateMenuItemsAndActions; procedure CreateMruMenuItemsArray; function TryHlMenuTagToFileType(ATag: PtrInt; out AFileType: TEditorFileType): Boolean; function TryLangMenuTagToLangId(ATag: PtrInt; out ALangId: TLanguageIds): Boolean; @@ -523,6 +523,7 @@ type //NoteBook and Editor Events procedure OnEditorStatusChange(Sender: TObject; Changes: TSynStatusChanges); + procedure OnPageChange(Sender: TObject); procedure OnBeforeCloseEditor(Sender: TTabSheet; var Cancel: Boolean); procedure OnCharsetChange(Sender: TEditor; const OldCharset, NewCharset: String; const LineNr: Integer); procedure OnMruListChange(Sender: TObject); @@ -546,11 +547,13 @@ const pXY = 0; //Panels constanten pIns = 2; pName = 3; + //Initial text for FileNew commands+ //High(Tag) = 7FFFFFFF [01111111111111111111111111111111] + // 1 shl (8+0..15) used for Highlighter menu tgNeedsEditor = $01; tgNeedsSelection = $02; tgNeedsClipPaste = $04; + tgHtmlOnly = (1 shl 3) or tgNeedsEditor; - //Initial text for FileNew commands itXml = ''; itBat = '@echo off'; itUnixShellScript = '#!/bin/bash'; @@ -741,7 +744,7 @@ end; procedure TLazEditMainForm.TopLevelMenuClick(Sender: TObject); begin - UpdateMenuItems; + UpdateMenuItemsAndActions; end; procedure TLazEditMainForm.mnuEditCutClick(Sender: TObject); @@ -1146,6 +1149,7 @@ begin NoteBook.OnStatusChange := @OnEditorStatusChange; NoteBook.OnBeforeCloseEditor := @OnBeforeCloseEditor; NoteBook.OnEditorCharsetChange := @OnCharsetChange; + NoteBook.OnChange := @OnPageChange; NoteBook.EditorPopUpMenu := EditorPopupMenu; //Creating dialogs @@ -1720,13 +1724,14 @@ begin if (C is TAction) or (C is TMenuItem) then begin C.Tag := 0; //initialize all Tags to 0 - //Things that need an open editor - if Pos('LAYOUT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; + //Things that need an open editor and maybe OnlyHtml + if Pos('LAYOUT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgHtmlOnly; + if Pos('INSERT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgHtmlOnly; if Pos('EDIT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; if Pos('INSERT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; if Pos('FILESAVE',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; if Pos('CURRENT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; - if Pos('GROUPING',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; + if Pos('GROUPING',UpperCase(N)) > 0 then C.Tag := C.Tag or tgHtmlOnly; if Pos('HIGHLIGHTER',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; if Pos('FONT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; if Pos('VIEWHL',UpperCase(N)) > 0 then @@ -1766,6 +1771,8 @@ begin //needs to be _after_ 'OPEN' if Pos('BROWSER',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; end; + mnuFileOpenInBrowser.Tag := tgHtmlOnly; + //Top level menus mnuFile.Tag := 0; mnuEdit.Tag := 0; @@ -1773,6 +1780,7 @@ begin mnuGrouping.Tag := 0; mnuView.Tag := 0; mnuAbout.Tag := 0; + mnuLayout.Tag := 0; { if (C is TMenuItem) or (C is TAction) then @@ -1788,12 +1796,12 @@ begin acEditCopy.Caption := 'Kopiƫren'; end; -procedure TLazEditMainForm.UpdateMenuItems; +procedure TLazEditMainForm.UpdateMenuItemsAndActions; var i: Integer; C: TComponent; HasEditor, HasSelection, HasClipPaste: Boolean; - NeedsEditor, NeedsSelection, NeedsClipPaste: Boolean; + NeedsEditor, NeedsSelection, NeedsClipPaste, HtmlOnly, DoEnable: Boolean; AFileType: TEditorFileType; Ed: TEditor; begin @@ -1804,14 +1812,20 @@ begin for i := 0 to ComponentCount - 1 do begin C := Components[i]; - if (C is TMenuItem) then + if (C is TMenuItem) or (C is TAction) then begin NeedsEditor := (C.Tag and tgNeedsEditor) > 0; NeedsSelection := (C.Tag and tgNeedsSelection) > 0; NeedsClipPaste := (C.Tag and tgNeedsClipPaste) > 0; - TMenuItem(C).Enabled := ((NeedsEditor and HasEditor) or (not NeedsEditor)) and - ((NeedsSelection and HasSelection) or (not NeedsSelection)) and - ((NeedsClipPaste and HasClipPaste) or (not NeedsClipPaste)); + HtmlOnly := (C.Tag and tgHtmlOnly) = tgHtmlOnly; + DoEnable := ((NeedsEditor and HasEditor) or (not NeedsEditor)) and + ((HtmlOnly and HasEditor and ((Ed.FileType=eftHtml) or (Ed.Highlighter is TSynHTMLSyn))) or (not HtmlOnly)) and + ((NeedsSelection and HasSelection) or (not NeedsSelection)) and + ((NeedsClipPaste and HasClipPaste) or (not NeedsClipPaste)); + if (C is TMenuItem) then + TMenuItem(C).Enabled := DoEnable + else + TAction(C).Enabled := DoEnable; if HasEditor and (Pos('MNUVIEWHL', UpperCase(C.Name)) = 1) then begin @@ -1893,6 +1907,11 @@ begin end; end; +procedure TLazEditMainForm.OnPageChange(Sender: TObject); +begin + UpdateMenuItemsAndActions; +end; + procedure TLazEditMainForm.OnCharsetChange(Sender: TEditor; const OldCharset, NewCharset: String; const LineNr: Integer); begin MessageDlg(Format('Let op: html charset is gewijzigd van %s naar %s'^m'(Regel %d)',[OldCharset, NewCharset, LineNr]), @@ -2073,6 +2092,7 @@ begin Result := False; //OnEditorStatusChange(nil, scAll); end; + UpdateMenuItemsAndActions; end else Result := False; end; @@ -2095,6 +2115,7 @@ begin Result := IoFail; //OnEditorStatusChange(nil, scAll); end; + UpdateMenuItemsAndActions; end else Result := IoFail; end; @@ -2107,6 +2128,8 @@ begin Idx := NoteBook.ActivePageIndex; Result := NoteBook.ClosePage(Idx); + if Result then + UpdateMenuItemsAndActions; end; function TLazEditMainForm.TryFileSaveAll(out Failures: String): Boolean; @@ -2237,6 +2260,7 @@ begin Ed.TextBetweenPoints[Point(0,0),Point(0,0)] := InitialText else Ed.Modified := False; + UpdateMenuItemsAndActions; end; end;