Merge branch 'a12_2_a13'

This commit is contained in:
Basile Burg 2015-02-24 10:08:35 +01:00
commit 4d1a11a0ca
6 changed files with 141 additions and 51 deletions

View File

@ -66,6 +66,7 @@ inherited CEOptionEditorWidget: TCEOptionEditorWidget
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper] Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
Indent = 16 Indent = 16
NameFont.Color = clWindowText NameFont.Color = clWindowText
OnEditorFilter = inspectorEditorFilter
OnModified = inspectorModified OnModified = inspectorModified
PreferredSplitterX = 170 PreferredSplitterX = 170
SplitterX = 170 SplitterX = 170

View File

@ -7,7 +7,7 @@ interface
uses uses
Classes, SysUtils, FileUtil, RTTIGrids, Forms, Controls, Graphics, ExtCtrls, Classes, SysUtils, FileUtil, RTTIGrids, Forms, Controls, Graphics, ExtCtrls,
Menus, ComCtrls, Buttons, ce_common, ce_widget, ce_interfaces, Menus, ComCtrls, Buttons, ce_common, ce_widget, ce_interfaces,
ce_observer; ce_observer, PropEdits, ObjectInspector;
type type
@ -22,6 +22,8 @@ type
//TODO-cbugfix: linux only, a conversion error is raised after a color's been edited using the dialog color. //TODO-cbugfix: linux only, a conversion error is raised after a color's been edited using the dialog color.
{ TCEOptionEditorWidget }
TCEOptionEditorWidget = class(TCEWidget) TCEOptionEditorWidget = class(TCEWidget)
btnCancel: TSpeedButton; btnCancel: TSpeedButton;
btnAccept: TSpeedButton; btnAccept: TSpeedButton;
@ -33,6 +35,8 @@ type
selCat: TTreeView; selCat: TTreeView;
procedure btnAcceptClick(Sender: TObject); procedure btnAcceptClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject); procedure btnCancelClick(Sender: TObject);
procedure inspectorEditorFilter(Sender: TObject; aEditor: TPropertyEditor;
var aShow: boolean);
procedure inspectorModified(Sender: TObject); procedure inspectorModified(Sender: TObject);
procedure selCatDeletion(Sender: TObject; Node: TTreeNode); procedure selCatDeletion(Sender: TObject; Node: TTreeNode);
procedure selCatSelectionChanged(Sender: TObject); procedure selCatSelectionChanged(Sender: TObject);
@ -175,6 +179,18 @@ begin
.optionedEvent(oeeCancel); .optionedEvent(oeeCancel);
end; end;
procedure TCEOptionEditorWidget.inspectorEditorFilter(Sender: TObject;aEditor:
TPropertyEditor; var aShow: boolean);
begin
if aEditor.GetComponent(0) is TComponent then
begin
if aEditor.GetPropInfo^.Name = 'Tag' then
aSHow := false;
if aEditor.GetPropInfo^.Name = 'Name' then
aSHow := false;
end;
end;
procedure TCEOptionEditorWidget.btnAcceptClick(Sender: TObject); procedure TCEOptionEditorWidget.btnAcceptClick(Sender: TObject);
begin begin
if selCat.Selected = nil then exit; if selCat.Selected = nil then exit;

View File

@ -147,7 +147,6 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper] Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
Indent = 16 Indent = 16
NameFont.Color = clWindowText NameFont.Color = clWindowText
OnEditorFilter = inspectorEditorFilter
OnModified = inspectorModified OnModified = inspectorModified
PreferredSplitterX = 145 PreferredSplitterX = 145
SplitterX = 145 SplitterX = 145

View File

@ -27,7 +27,6 @@ type
procedure btnDelConfClick(Sender: TObject); procedure btnDelConfClick(Sender: TObject);
procedure btnCloneCurrClick(Sender: TObject); procedure btnCloneCurrClick(Sender: TObject);
procedure btnSyncEditClick(Sender: TObject); procedure btnSyncEditClick(Sender: TObject);
procedure inspectorEditorFilter(Sender: TObject; aEditor: TPropertyEditor;var aShow: boolean);
procedure inspectorModified(Sender: TObject); procedure inspectorModified(Sender: TObject);
procedure selConfChange(Sender: TObject); procedure selConfChange(Sender: TObject);
procedure TreeChange(Sender: TObject; Node: TTreeNode); procedure TreeChange(Sender: TObject; Node: TTreeNode);
@ -153,12 +152,6 @@ begin
inspector.TIObject := getGridTarget; inspector.TIObject := getGridTarget;
end; end;
procedure TCEProjectConfigurationWidget.inspectorEditorFilter(Sender: TObject;
aEditor: TPropertyEditor; var aShow: boolean);
begin
if aEditor.ClassType = TCollectionPropertyEditor then aShow := false;
end;
procedure TCEProjectConfigurationWidget.setSyncroMode(aValue: boolean); procedure TCEProjectConfigurationWidget.setSyncroMode(aValue: boolean);
var var
png: TPortableNetworkGraphic; png: TPortableNetworkGraphic;
@ -316,12 +309,15 @@ procedure TCEProjectConfigurationWidget.GridFilter(Sender: TObject; aEditor: TPr
var aShow: boolean); var aShow: boolean);
begin begin
if fProj = nil then exit; if fProj = nil then exit;
// filter TComponent things. // filter TComponent things.
if getGridTarget = fProj then if getGridTarget = fProj then
begin begin
if aEditor.GetName = 'Name' then if aEditor.GetName = 'Name' then
aShow := false aShow := false
else if aEditor.GetName = 'Tag' then else if aEditor.GetName = 'Tag' then
aShow := false
else if aEditor.ClassType = TCollectionPropertyEditor then
aShow := false; aShow := false;
end; end;
// deprecated field // deprecated field

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,6 +312,7 @@ procedure TCETodoListWidget.docClosing(aDoc: TCESynMemo);
begin begin
if fDoc <> aDoc then exit; if fDoc <> aDoc then exit;
fDoc := nil; fDoc := nil;
if Visible and fAutoRefresh then
callToolProcess; callToolProcess;
end; end;
{$ENDREGION} {$ENDREGION}
@ -271,6 +334,7 @@ procedure TCETodoListWidget.projClosing(aProject: TCEProject);
begin begin
if fProj <> aProject then exit; if fProj <> aProject then exit;
fProj := nil; fProj := nil;
if Visible and fAutoRefresh then
callToolProcess; callToolProcess;
end; end;
@ -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}