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]
Indent = 16
NameFont.Color = clWindowText
OnEditorFilter = inspectorEditorFilter
OnModified = inspectorModified
PreferredSplitterX = 170
SplitterX = 170

View File

@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, FileUtil, RTTIGrids, Forms, Controls, Graphics, ExtCtrls,
Menus, ComCtrls, Buttons, ce_common, ce_widget, ce_interfaces,
ce_observer;
ce_observer, PropEdits, ObjectInspector;
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.
{ TCEOptionEditorWidget }
TCEOptionEditorWidget = class(TCEWidget)
btnCancel: TSpeedButton;
btnAccept: TSpeedButton;
@ -33,6 +35,8 @@ type
selCat: TTreeView;
procedure btnAcceptClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure inspectorEditorFilter(Sender: TObject; aEditor: TPropertyEditor;
var aShow: boolean);
procedure inspectorModified(Sender: TObject);
procedure selCatDeletion(Sender: TObject; Node: TTreeNode);
procedure selCatSelectionChanged(Sender: TObject);
@ -175,6 +179,18 @@ begin
.optionedEvent(oeeCancel);
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);
begin
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]
Indent = 16
NameFont.Color = clWindowText
OnEditorFilter = inspectorEditorFilter
OnModified = inspectorModified
PreferredSplitterX = 145
SplitterX = 145

View File

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

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