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
BorderSpacing.Around = 2
Layout = blGlyphBottom
OnClick = btnGoClick
Spacing = 0
TabOrder = 2
end

View File

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