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