added TODO list editable options

previous option is not saved anymore using the centralized system.
This commit is contained in:
Basile Burg 2015-02-24 10:07:03 +01:00
parent a9c03259d7
commit fa92f10491
2 changed files with 120 additions and 42 deletions

View File

@ -62,7 +62,6 @@ inherited CETodoListWidget: TCETodoListWidget
Align = alLeft Align = alLeft
BorderSpacing.Around = 2 BorderSpacing.Around = 2
Layout = blGlyphBottom Layout = blGlyphBottom
OnClick = btnGoClick
Spacing = 0 Spacing = 0
TabOrder = 2 TabOrder = 2
end end

View File

@ -8,10 +8,22 @@ uses
Classes, SysUtils, FileUtil, ListFilterEdit, Forms, Controls, Classes, SysUtils, FileUtil, ListFilterEdit, Forms, Controls,
strutils, Graphics, Dialogs, ExtCtrls, Menus, Buttons, ComCtrls, strutils, Graphics, Dialogs, ExtCtrls, Menus, Buttons, ComCtrls,
ce_widget, process, ce_common, ce_interfaces, ce_synmemo, ce_widget, process, ce_common, ce_interfaces, ce_synmemo,
ce_project, ce_symstring; ce_project, ce_symstring, ce_writableComponent, ce_observer, EditBtn;
type type
TCETodoOptions = class(TWritableLfmTextComponent)
private
fAutoRefresh: boolean;
fSingleClick: boolean;
published
property autoRefresh: boolean read fAutoRefresh write fAutoRefresh;
property singleClickSelect: boolean read fSingleClick write fSingleClick;
public
procedure AssignTo(Dest: TPersistent); override;
procedure Assign(Src: TPersistent); override;
end;
TTodoContext = (tcNone, tcProject, tcFile); TTodoContext = (tcNone, tcProject, tcFile);
// represents a TODO item // represents a TODO item
@ -55,22 +67,26 @@ type
property item[index: integer]: TTodoItem read getItem; default; property item[index: integer]: TTodoItem read getItem; default;
end; end;
TCETodoListWidget = class(TCEWidget, ICEMultiDocObserver, ICEProjectObserver, ICESessionOptionsObserver) { TCETodoListWidget }
TCETodoListWidget = class(TCEWidget, ICEMultiDocObserver, ICEProjectObserver, ICEEditableOptions)
btnRefresh: TBitBtn; btnRefresh: TBitBtn;
btnGo: TBitBtn; btnGo: TBitBtn;
lstItems: TListView; lstItems: TListView;
lstfilter: TListFilterEdit; lstfilter: TListFilterEdit;
mnuAutoRefresh: TMenuItem; mnuAutoRefresh: TMenuItem;
Panel1: TPanel; Panel1: TPanel;
procedure btnGoClick(Sender: TObject); procedure handleListClick(Sender: TObject);
procedure mnuAutoRefreshClick(Sender: TObject); procedure mnuAutoRefreshClick(Sender: TObject);
private private
fAutoRefresh: Boolean; fAutoRefresh: Boolean;
fSingleClick: Boolean;
fProj: TCEProject; fProj: TCEProject;
fDoc: TCESynMemo; fDoc: TCESynMemo;
fToolProcess: TCheckedAsyncProcess; fToolProcess: TCheckedAsyncProcess;
fTodos: TTodoItems; fTodos: TTodoItems;
fMsgs: ICEMessagesDisplay; fMsgs: ICEMessagesDisplay;
fOptions: TCETodoOptions;
// ICEMultiDocObserver // ICEMultiDocObserver
procedure docNew(aDoc: TCESynMemo); procedure docNew(aDoc: TCESynMemo);
procedure docFocused(aDoc: TCESynMemo); procedure docFocused(aDoc: TCESynMemo);
@ -82,6 +98,11 @@ type
procedure projClosing(aProject: TCEProject); procedure projClosing(aProject: TCEProject);
procedure projFocused(aProject: TCEProject); procedure projFocused(aProject: TCEProject);
procedure projCompiling(aProject: TCEProject); procedure projCompiling(aProject: TCEProject);
// ICEEditableOptions
function optionedWantCategory(): string;
function optionedWantEditorKind: TOptionEditorKind;
function optionedWantContainer: TPersistent;
procedure optionedEvent(anEvent: TOptionEditorEvent);
// TODOlist things // TODOlist things
function getContext: TTodoContext; function getContext: TTodoContext;
procedure killToolProcess; procedure killToolProcess;
@ -92,19 +113,18 @@ type
procedure fillTodoList; procedure fillTodoList;
procedure lstItemsColumnClick(Sender : TObject; Column : TListColumn); procedure lstItemsColumnClick(Sender : TObject; Column : TListColumn);
procedure lstItemsCompare(Sender : TObject; item1, item2: TListItem;Data : Integer; var Compare : Integer); procedure lstItemsCompare(Sender : TObject; item1, item2: TListItem;Data : Integer; var Compare : Integer);
procedure lstItemsDoubleClick(sender: TObject);
procedure btnRefreshClick(sender: TObject); procedure btnRefreshClick(sender: TObject);
procedure filterItems(sender: TObject); procedure filterItems(sender: TObject);
procedure setSingleClick(aValue: boolean);
procedure setAutoRefresh(aValue: boolean);
protected protected
procedure SetVisible(Value: boolean); override; procedure SetVisible(Value: boolean); override;
// ICESessionOptionsObserver
procedure optset_AutoReafresh(aReader: TReader);
procedure optget_AutoReafresh(aWriter: TWriter);
procedure sesoptDeclareProperties(aFiler: TFiler); override;
procedure sesoptAfterLoad; override;
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override; destructor destroy; override;
//
property singleClickSelect: boolean read fSingleClick write setSingleClick;
property autoRefresh: boolean read fAutoRefresh write setAutoRefresh;
end; end;
implementation implementation
@ -112,6 +132,7 @@ implementation
const const
ToolExeName = 'cetodo' + exeExt; ToolExeName = 'cetodo' + exeExt;
OptFname = 'todolist.txt';
{$REGION TTodoItems ------------------------------------------------------------} {$REGION TTodoItems ------------------------------------------------------------}
constructor TTodoItems.create(aOwner: TComponent); constructor TTodoItems.create(aOwner: TComponent);
@ -168,16 +189,24 @@ end;
constructor TCETodoListWidget.create(aOwner: TComponent); constructor TCETodoListWidget.create(aOwner: TComponent);
var var
png: TPortableNetworkGraphic; png: TPortableNetworkGraphic;
fname: string;
begin begin
inherited; inherited;
//
fOptions := TCETodoOptions.Create(self);
fOptions.autoRefresh := true;
fOptions.Name := 'todolistOptions';
//
fTodos := TTodoItems.Create(self); fTodos := TTodoItems.Create(self);
lstItems.OnDblClick := @lstItemsDoubleClick; lstItems.OnDblClick := @handleListClick;
btnRefresh.OnClick := @btnRefreshClick; btnRefresh.OnClick := @btnRefreshClick;
lstItems.OnColumnClick:= @lstItemsColumnClick; lstItems.OnColumnClick:= @lstItemsColumnClick;
lstItems.OnCompare := @lstItemsCompare; lstItems.OnCompare := @lstItemsCompare;
fAutoRefresh := true; fAutoRefresh := true;
fSingleClick := false;
mnuAutoRefresh.Checked := true; mnuAutoRefresh.Checked := true;
lstfilter.OnChange:= @filterItems; lstfilter.OnChange:= @filterItems;
btnGo.OnClick:= @handleListClick;
// //
png := TPortableNetworkGraphic.Create; png := TPortableNetworkGraphic.Create;
try try
@ -188,10 +217,18 @@ begin
finally finally
png.Free; png.Free;
end; end;
//
fname := getCoeditDocPath + OptFname;
if FileExists(fname) then
fOptions.loadFromFile(fname);
fOptions.AssignTo(self);
//
EntitiesConnector.addObserver(self);
end; end;
destructor TCETodoListWidget.destroy; destructor TCETodoListWidget.destroy;
begin begin
fOptions.saveToFile(getCoeditDocPath + OptFname);
killToolProcess; killToolProcess;
inherited; inherited;
end; end;
@ -199,35 +236,60 @@ end;
procedure TCETodoListWidget.SetVisible(Value: boolean); procedure TCETodoListWidget.SetVisible(Value: boolean);
begin begin
inherited; inherited;
if Value then if Value and fAutoRefresh then
callToolProcess; callToolProcess;
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICESessionOptionsObserver --------------------------------------------} {$REGION ICEEditableOptions ----------------------------------------------------}
procedure TCETodoListWidget.optset_AutoReafresh(aReader: TReader); procedure TCETodoOptions.AssignTo(Dest: TPersistent);
var
widg: TCETodoListWidget;
begin begin
fAutoRefresh := aReader.ReadBoolean; if Dest is TCETodoListWidget then
begin
widg := TCETodoListWidget(Dest);
widg.singleClickSelect := fSingleClick;
widg.autoRefresh := fAutoRefresh;
end
else inherited;
end; end;
procedure TCETodoListWidget.optget_AutoReafresh(aWriter: TWriter); procedure TCETodoOptions.Assign(Src: TPersistent);
var
widg: TCETodoListWidget;
begin begin
aWriter.WriteBoolean(fAutoRefresh); if Src is TCETodoListWidget then
begin
widg := TCETodoListWidget(Src);
fSingleClick := widg.singleClickSelect;
fAutoRefresh := widg.autoRefresh;
end
else inherited;
end; end;
procedure TCETodoListWidget.sesoptDeclareProperties(aFiler: TFiler); function TCETodoListWidget.optionedWantCategory(): string;
begin begin
inherited; exit('Todo list');
aFiler.DefineProperty(Name + '_AutoRefresh', @optset_AutoReafresh, @optget_AutoReafresh, true);
end; end;
procedure TCETodoListWidget.sesoptAfterLoad; function TCETodoListWidget.optionedWantEditorKind: TOptionEditorKind;
begin begin
inherited; exit(oekGeneric);
mnuAutoRefresh.Checked := fAutoRefresh;
end; end;
{$ENDREGIOn}
function TCETodoListWidget.optionedWantContainer: TPersistent;
begin
fOptions.Assign(self);
exit(fOptions);
end;
procedure TCETodoListWidget.optionedEvent(anEvent: TOptionEditorEvent);
begin
if anEvent <> oeeAccept then exit;
fOptions.AssignTo(self);
end;
{$ENDREGION}
{$REGION ICEMultiDocObserver ---------------------------------------------------} {$REGION ICEMultiDocObserver ---------------------------------------------------}
procedure TCETodoListWidget.docNew(aDoc: TCESynMemo); procedure TCETodoListWidget.docNew(aDoc: TCESynMemo);
@ -250,7 +312,8 @@ procedure TCETodoListWidget.docClosing(aDoc: TCESynMemo);
begin begin
if fDoc <> aDoc then exit; if fDoc <> aDoc then exit;
fDoc := nil; fDoc := nil;
callToolProcess; if Visible and fAutoRefresh then
callToolProcess;
end; end;
{$ENDREGION} {$ENDREGION}
@ -271,7 +334,8 @@ procedure TCETodoListWidget.projClosing(aProject: TCEProject);
begin begin
if fProj <> aProject then exit; if fProj <> aProject then exit;
fProj := nil; fProj := nil;
callToolProcess; if Visible and fAutoRefresh then
callToolProcess;
end; end;
procedure TCETodoListWidget.projFocused(aProject: TCEProject); procedure TCETodoListWidget.projFocused(aProject: TCEProject);
@ -433,21 +497,10 @@ begin
end; end;
end; end;
procedure TCETodoListWidget.btnGoClick(Sender: TObject); procedure TCETodoListWidget.handleListClick(Sender: TObject);
begin
lstItemsDoubleClick(nil);
end;
procedure TCETodoListWidget.mnuAutoRefreshClick(Sender: TObject);
begin
fAutoRefresh := mnuAutoRefresh.Checked;
end;
procedure TCETodoListWidget.lstItemsDoubleClick(sender: TObject);
var var
itm: TTodoItem; itm : TTodoItem;
fname: string; fname, ln : string;
ln: string;
begin begin
if lstItems.Selected = nil then exit; if lstItems.Selected = nil then exit;
if lstItems.Selected.Data = nil then exit; if lstItems.Selected.Data = nil then exit;
@ -464,6 +517,12 @@ begin
fDoc.SelectLine; fDoc.SelectLine;
end; end;
procedure TCETodoListWidget.mnuAutoRefreshClick(Sender: TObject);
begin
autoRefresh := mnuAutoRefresh.Checked;
fOptions.autoRefresh := autoRefresh;
end;
procedure TCETodoListWidget.lstItemsColumnClick(Sender : TObject; Column : procedure TCETodoListWidget.lstItemsColumnClick(Sender : TObject; Column :
TListColumn); TListColumn);
var var
@ -510,7 +569,27 @@ end;
procedure TCETodoListWidget.filterItems(sender: TObject); procedure TCETodoListWidget.filterItems(sender: TObject);
begin begin
fillTodoList fillTodoList;
end;
procedure TCETodoListWidget.setSingleClick(aValue: boolean);
begin
fSingleClick := aValue;
if fSingleClick then begin
lstItems.OnClick := @handleListClick;
lstItems.OnDblClick := nil;
end else
begin
lstItems.OnClick := nil;
lstItems.OnDblClick := @handleListClick;
end;
end;
procedure TCETodoListWidget.setAutoRefresh(aValue: boolean);
begin
fAutoRefresh := aValue;
mnuAutoRefresh.Checked:= aValue;
if fAutoRefresh then callToolProcess;
end; end;
{$ENDREGION} {$ENDREGION}