diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi index 4354b366..7c5fd891 100644 --- a/lazproj/coedit.lpi +++ b/lazproj/coedit.lpi @@ -151,6 +151,7 @@ + @@ -213,7 +214,6 @@ - @@ -237,7 +237,6 @@ - @@ -264,16 +263,15 @@ - - + @@ -290,6 +288,7 @@ + @@ -305,6 +304,7 @@ + @@ -324,7 +324,6 @@ - @@ -341,7 +340,6 @@ - @@ -353,7 +351,7 @@ - + diff --git a/src/ce_main.pas b/src/ce_main.pas index 01bc78f9..09a04788 100644 --- a/src/ce_main.pas +++ b/src/ce_main.pas @@ -7,8 +7,8 @@ interface uses Classes, SysUtils, FileUtil, SynEditKeyCmds, SynHighlighterLFM, Forms, AnchorDocking, AnchorDockStorage, AnchorDockOptionsDlg, Controls, Graphics, - Dialogs, Menus, ActnList, ExtCtrls, process, XMLPropStorage, dynlibs, SynExportHTML, - ce_common, ce_dmdwrap, ce_project, ce_dcd, ce_plugin, ce_synmemo, ce_widget, + Dialogs, Menus, ActnList, ExtCtrls, process, XMLPropStorage, SynExportHTML, + ce_common, ce_dmdwrap, ce_project, ce_dcd, ce_synmemo, ce_widget, ce_messages, ce_interfaces, ce_editor, ce_projinspect, ce_projconf, ce_search, ce_staticexplorer, ce_miniexplorer, ce_libman, ce_libmaneditor, ce_todolist, ce_observer, ce_writableComponent, ce_toolseditor, ce_procinput, ce_optionseditor, diff --git a/src/ce_messages.lfm b/src/ce_messages.lfm index c2225b2e..2e6fa9b5 100644 --- a/src/ce_messages.lfm +++ b/src/ce_messages.lfm @@ -37,7 +37,6 @@ inherited CEMessagesWidget: TCEMessagesWidget ShowLines = False ShowRoot = False TabOrder = 0 - OnDblClick = ListDblClick OnKeyDown = ListKeyDown Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoToolTips, tvoThemedDraw] end @@ -63,6 +62,7 @@ inherited CEMessagesWidget: TCEMessagesWidget end object ToolButton2: TToolButton Left = 133 + Height = 24 Top = 2 Width = 5 Caption = 'ToolButton2' @@ -76,6 +76,7 @@ inherited CEMessagesWidget: TCEMessagesWidget end object ToolButton4: TToolButton Left = 238 + Height = 24 Top = 2 Width = 5 Caption = 'ToolButton4' @@ -89,6 +90,7 @@ inherited CEMessagesWidget: TCEMessagesWidget end object ToolButton8: TToolButton Left = 343 + Height = 24 Top = 2 Width = 5 Caption = 'ToolButton8' @@ -102,6 +104,7 @@ inherited CEMessagesWidget: TCEMessagesWidget end object ToolButton10: TToolButton Left = 448 + Height = 24 Top = 2 Width = 5 Caption = 'ToolButton10' @@ -158,6 +161,7 @@ inherited CEMessagesWidget: TCEMessagesWidget end object ToolButton1: TToolButton Left = 28 + Height = 24 Top = 2 Width = 5 Caption = 'ToolButton1' diff --git a/src/ce_messages.pas b/src/ce_messages.pas index 8188cb59..149c6aa5 100644 --- a/src/ce_messages.pas +++ b/src/ce_messages.pas @@ -24,9 +24,19 @@ type private fMaxCount: Integer; fAutoSelect: boolean; + fSingleClick: boolean; + fFont: TFont; + procedure setFont(aValue: TFont); published property maxMessageCount: integer read fMaxCount write fMaxCount; property autoSelect: boolean read fAutoSelect write fAutoSelect; + property singleMessageClick: boolean read fSingleClick write fSingleClick; + property font: TFont read fFont write setFont; + public + constructor Create(AOwner: TComponent); override; + destructor destroy; override; + procedure assign(Source: TPersistent); override; + procedure AssignTo(Dest: TPersistent); override; end; TCEMessagesWidget = class(TCEWidget, ICEEditableOptions, ICEMultiDocObserver, ICEProjectObserver, ICEMessagesDisplay) @@ -44,7 +54,6 @@ type btnSelProj: TToolButton; ToolButton8: TToolButton; btnSelApp: TToolButton; - procedure ListDblClick(Sender: TObject); procedure ListKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private fActAutoSel: TAction; @@ -58,7 +67,9 @@ type fDoc: TCESynMemo; fCtxt: TCEAppMessageCtxt; fAutoSelect: boolean; - fEditableOptions: TCEMessagesOptions; + fSingleClick: boolean; + fOptions: TCEMessagesOptions; + fOptionsBackup: TCEMessagesOptions; fBtns: array[TCEAppMessageCtxt] of TToolButton; procedure filterMessages(aCtxt: TCEAppMessageCtxt); procedure clearOutOfRangeMessg; @@ -69,14 +80,12 @@ type procedure actCopyMsgExecute(Sender: TObject); procedure actSelAllExecute(Sender: TObject); procedure setMaxMessageCount(aValue: Integer); + procedure setAutoSelectCategory(aValue: boolean); + procedure setSingleMessageClick(aValue: boolean); procedure listDeletion(Sender: TObject; Node: TTreeNode); procedure selCtxtClick(Sender: TObject); function iconIndex(aKind: TCEAppMessageKind): Integer; - // - procedure optset_MaxMessageCount(aReader: TReader); - procedure optget_MaxMessageCount(aWriter: TWriter); - procedure optset_AutoSelect(aReader: TReader); - procedure optget_AutoSelect(aWriter: TWriter); + procedure handleMessageClick(Sender: TObject); // procedure projNew(aProject: TCEProject); procedure projClosing(aProject: TCEProject); @@ -99,19 +108,19 @@ type procedure clearbyContext(aCtxt: TCEAppMessageCtxt); procedure clearbyData(aData: Pointer); protected - procedure sesoptDeclareProperties(aFiler: TFiler); override; // function contextName: string; override; function contextActionCount: integer; override; function contextAction(index: integer): TAction; override; - published - property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount default 125; + // + property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount; + property autoSelectCategory: boolean read fAutoSelect write setAutoSelectCategory; + property singleMessageClick: boolean read fSingleClick write setSingleMessageClick; public constructor create(aOwner: TComponent); override; destructor destroy; override; // procedure scrollToBack; - end; function guessMessageKind(const aMessg: string): TCEAppMessageKind; @@ -121,8 +130,73 @@ type implementation {$R *.lfm} +const + optname = 'messages.txt'; + +{$REGION TCEMessagesOptions ----------------------------------------------------} +constructor TCEMessagesOptions.Create(AOwner: TComponent); +begin + inherited; + fFont := TFont.Create; +end; + +destructor TCEMessagesOptions.destroy; +begin + fFont.Free; + inherited; +end; + +procedure TCEMessagesOptions.setFont(aValue: TFont); +begin + fFont.Assign(aValue); +end; + +procedure TCEMessagesOptions.assign(Source: TPersistent); +var + widg : TCEMessagesWidget; + opts : TCEMessagesOptions; +begin + if Source is TCEMessagesOptions then + begin + opts := TCEMessagesOptions(Source); + fFont.BeginUpdate; + fFont.Assign(opts.font); + fMaxCount := opts.fMaxCount; + fAutoSelect := opts.fAutoSelect; + fSingleClick := opts.fSingleClick; + fFont.EndUpdate; + end + else if Source is TCEMessagesWidget then + begin + widg := TCEMessagesWidget(Source); + fFont.Assign(widg.List.Font); + fMaxCount := widg.fMaxMessCnt; + fAutoSelect := widg.fAutoSelect; + fSingleClick := widg.fSingleClick; + end + else inherited; +end; + +procedure TCEMessagesOptions.AssignTo(Dest: TPersistent); +var + widg : TCEMessagesWidget; +begin + if Dest is TCEMessagesWidget then + begin + widg := TCEMessagesWidget(Dest); + widg.List.Font.Assign(fFont); + widg.maxMessageCount := fMaxCount; + widg.autoSelectCategory := fAutoSelect; + widg.singleMessageClick := fSingleClick; + end + else inherited; +end; +{$ENDREGION} + {$REGION Standard Comp/Obj------------------------------------------------------} constructor TCEMessagesWidget.create(aOwner: TComponent); +var + fname: string; begin fMaxMessCnt := 500; fCtxt := amcAll; @@ -149,8 +223,10 @@ begin // inherited; // - fEditableOptions := TCEMessagesOptions.Create(Self); - fEditableOptions.Name:= 'messageOptions'; + fOptions := TCEMessagesOptions.Create(Self); + fOptions.assign(self); + fOptions.Name:= 'messageOptions'; + fOptionsBackup := TCEMessagesOptions.Create(Self); // List.PopupMenu := contextMenu; List.OnDeletion := @ListDeletion; @@ -168,12 +244,20 @@ begin // btnClearCat.OnClick := @actClearCurCatExecute; // + fname := getCoeditDocPath + optname; + if fileExists(fname) then + begin + fOptions.loadFromFile(fname); + fOptions.AssignTo(self); + end; + // EntitiesConnector.addObserver(self); EntitiesConnector.addSingleService(self); end; destructor TCEMessagesWidget.destroy; begin + fOptions.saveToFile(getCoeditDocPath + optname); EntitiesConnector.removeObserver(self); Inherited; end; @@ -181,7 +265,7 @@ end; procedure TCEMessagesWidget.listDeletion(Sender: TObject; Node: TTreeNode); begin if node.Data <> nil then - Dispose( PMessageData(Node.Data)); + Dispose(PMessageData(Node.Data)); end; procedure TCEMessagesWidget.ListKeyDown(Sender: TObject; var Key: Word; @@ -225,6 +309,36 @@ begin fCtxt := amcMisc; filterMessages(fCtxt); end; + +procedure TCEMessagesWidget.setMaxMessageCount(aValue: Integer); +begin + if aValue < 5 then + aValue := 5; + if fMaxMessCnt = aValue then + exit; + fMaxMessCnt := aValue; + clearOutOfRangeMessg; +end; + +procedure TCEMessagesWidget.setAutoSelectCategory(aValue: boolean); +begin + fAutoSelect := aValue; + fActAutoSel.Checked:= fAutoSelect; +end; + +procedure TCEMessagesWidget.setSingleMessageClick(aValue: boolean); +begin + fSingleClick := aValue; + if fSingleClick then + begin + List.OnClick := @handleMessageClick; + List.OnDblClick:= nil; + end else begin + List.OnClick := nil; + List.OnDblClick:= @handleMessageClick; + end; +end; + {$ENDREGION} {$REGION ICEEditableOptions ----------------------------------------------------} @@ -240,61 +354,20 @@ end; function TCEMessagesWidget.optionedWantContainer: TPersistent; begin - fEditableOptions.maxMessageCount:= fMaxMessCnt; - fEditableOptions.autoSelect:= fActAutoSel.Checked; - exit(fEditableOptions); + fOptions.assign(self); + fOptionsBackup.assign(self); + exit(fOptions); end; procedure TCEMessagesWidget.optionedEvent(anEvent: TOptionEditorEvent); begin - if anEvent = oeeAccept then - begin - fMaxMessCnt := fEditableOptions.maxMessageCount; - fActAutoSel.Checked := fEditableOptions.autoSelect; - clearOutOfRangeMessg; + case anEvent of + oeeAccept: + fOptionsBackup.assign(fOptions); + oeeCancel: + fOptions.assign(fOptionsBackup); end; -end; -{$ENDREGION} - -{$REGION ICESessionOptionsObserver ---------------------------------------------} -procedure TCEMessagesWidget.setMaxMessageCount(aValue: Integer); -begin - if aValue < 5 then - aValue := 5; - if fMaxMessCnt = aValue then - exit; - fMaxMessCnt := aValue; - clearOutOfRangeMessg; -end; - -procedure TCEMessagesWidget.optset_MaxMessageCount(aReader: TReader); -begin - maxMessageCount := aReader.ReadInteger; -end; - -procedure TCEMessagesWidget.optget_MaxMessageCount(aWriter: TWriter); -begin - aWriter.WriteInteger(fMaxMessCnt); -end; - -procedure TCEMessagesWidget.optset_AutoSelect(aReader: TReader); -begin - fAutoSelect := aReader.ReadBoolean; - fActAutoSel.Checked := fAutoSelect; -end; - -procedure TCEMessagesWidget.optget_AutoSelect(aWriter: TWriter); -begin - aWriter.WriteBoolean(fAutoSelect); -end; - -procedure TCEMessagesWidget.sesoptDeclareProperties(aFiler: TFiler); -begin - inherited; - aFiler.DefineProperty(Name + '_MaxMessageCount', @optset_MaxMessageCount, - @optget_MaxMessageCount, true); - aFiler.DefineProperty(Name + '_AutoSelectCategory', @optset_AutoSelect, - @optget_AutoSelect, true); + fOptions.AssignTo(self); end; {$ENDREGION} @@ -537,7 +610,7 @@ begin List.BottomItem.MakeVisible; end; -procedure TCEMessagesWidget.ListDblClick(Sender: TObject); +procedure TCEMessagesWidget.handleMessageClick(Sender: TObject); var pos: TPoint; msg: string; diff --git a/src/ce_optionseditor.pas b/src/ce_optionseditor.pas index f6a0aab1..9bdb1411 100644 --- a/src/ce_optionseditor.pas +++ b/src/ce_optionseditor.pas @@ -6,7 +6,7 @@ interface uses Classes, SysUtils, FileUtil, RTTIGrids, Forms, Controls, Graphics, ExtCtrls, - Menus, ComCtrls, StdCtrls, Buttons, ce_common, ce_widget, ce_interfaces, + Menus, ComCtrls, Buttons, ce_common, ce_widget, ce_interfaces, ce_observer; type @@ -155,12 +155,11 @@ begin if selCat.Selected = nil then exit; if selcat.Selected.Data = nil then exit; // + if inspector.Parent <> nil then + inspector.ItemIndex := -1; PCategoryData(selCat.Selected.Data)^ .observer .optionedEvent(oeeCancel); - // - // if generic editor then - // refresh displayed value since the provider may have updated the options container end; procedure TCEOptionEditorWidget.btnAcceptClick(Sender: TObject); @@ -168,6 +167,8 @@ begin if selCat.Selected = nil then exit; if selcat.Selected.Data = nil then exit; // + if inspector.Parent <> nil then + inspector.ItemIndex := -1; PCategoryData(selCat.Selected.Data)^ .observer .optionedEvent(oeeAccept); diff --git a/src/ce_shortcutseditor.pas b/src/ce_shortcutseditor.pas index d2cf7ea9..d9927c21 100644 --- a/src/ce_shortcutseditor.pas +++ b/src/ce_shortcutseditor.pas @@ -6,7 +6,7 @@ interface uses Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, Menus, Graphics, - ExtCtrls, LCLProc, ComCtrls, StdCtrls, LMessages, Buttons, LCLType, + ExtCtrls, LCLProc, ComCtrls, StdCtrls, Buttons, LCLType, ce_observer, ce_interfaces, ce_common, ce_writableComponent; type @@ -41,8 +41,6 @@ type property item[index: Integer]: TShortcutItem read getShortcut; default; end; - { TCEShortcutEditor } - TCEShortcutEditor = class(TFrame, ICEEditableOptions) shcCatch: TEdit; Panel1: TPanel; @@ -189,7 +187,6 @@ end; procedure TCEShortcutEditor.optionedEvent(anEvent: TOptionEditorEvent); begin - // todo end; {$ENDREGION} diff --git a/src/ce_todolist.pas b/src/ce_todolist.pas index 772d51b9..4afb2439 100644 --- a/src/ce_todolist.pas +++ b/src/ce_todolist.pas @@ -5,9 +5,9 @@ unit ce_todolist; interface uses - Classes, SysUtils, FileUtil, TreeFilterEdit, ListFilterEdit, Forms, Controls, - strutils, Graphics, Dialogs, ExtCtrls, Menus, Buttons, StdCtrls, ComCtrls, - asyncprocess, ce_widget, process, ce_common, ce_interfaces, ce_synmemo, + Classes, SysUtils, FileUtil, ListFilterEdit, Forms, Controls, + strutils, Graphics, Dialogs, ExtCtrls, Menus, Buttons, ComCtrls, + ce_widget, process, ce_common, ce_interfaces, ce_synmemo, ce_project, ce_symstring; type diff --git a/src/ce_writablecomponent.pas b/src/ce_writablecomponent.pas index 1804c17b..58f84c63 100644 --- a/src/ce_writablecomponent.pas +++ b/src/ce_writablecomponent.pas @@ -5,7 +5,7 @@ unit ce_writableComponent; interface uses - Classes, SysUtils, ce_common, typinfo, fpjson, jsonparser, fpjsonrtti, fpjsondataset; + Classes, SysUtils, ce_common, typinfo, fpjson, jsonparser, fpjsonrtti; type