fix, shortcut editor want first/want next, always handle the last result

This commit is contained in:
Basile Burg 2015-02-23 03:50:40 +01:00
parent e1034fa8a4
commit a460b168a4
2 changed files with 30 additions and 17 deletions

View File

@ -44,6 +44,7 @@ object CEShortcutEditor: TCEShortcutEditor
HideSelection = False HideSelection = False
ReadOnly = True ReadOnly = True
ScrollBars = ssAutoBoth ScrollBars = ssAutoBoth
SortType = stText
TabOrder = 1 TabOrder = 1
OnSelectionChanged = treeSelectionChanged OnSelectionChanged = treeSelectionChanged
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]

View File

@ -65,6 +65,7 @@ type
procedure optionedEvent(anEvent: TOptionEditorEvent); procedure optionedEvent(anEvent: TOptionEditorEvent);
// //
function findCategory(const aName: string; aData: Pointer): TTreeNode; function findCategory(const aName: string; aData: Pointer): TTreeNode;
function sortCategories(Cat1, Cat2: TTreeNode): integer;
procedure updateFromObservers; procedure updateFromObservers;
procedure updateEditCtrls; procedure updateEditCtrls;
protected protected
@ -253,31 +254,26 @@ begin
exit(tree.Items[i]); exit(tree.Items[i]);
end; end;
function TCEShortcutEditor.sortCategories(Cat1, Cat2: TTreeNode): integer;
begin
result := CompareText(Cat1.Text, Cat2.Text);
end;
procedure TCEShortcutEditor.updateFromObservers; procedure TCEShortcutEditor.updateFromObservers;
var var
i: Integer; i: Integer;
obs: ICEEditableShortCut; obs: ICEEditableShortCut;
cat: string; cat: string;
prt: TTreeNode;
sht: word; sht: word;
idt: string; idt: string;
itm: TShortcutItem; itm: TShortcutItem;
begin procedure addItem();
tree.Items.Clear; var
fShortcuts.items.Clear; prt: TTreeNode;
fBackup.items.Clear;
cat := '';
idt := '';
for i:= 0 to fObservers.observersCount-1 do
begin
obs := fObservers.observers[i] as ICEEditableShortCut;
if obs.scedWantFirst then while obs.scedWantNext(cat, idt, sht) do
begin begin
// root category // root category
if cat = '' then if cat = '' then exit;
continue; if idt = '' then exit;
if idt = '' then
continue;
prt := findCategory(cat, obs); prt := findCategory(cat, obs);
if prt = nil then if prt = nil then
prt := tree.Items.AddObject(nil, cat, obs); prt := tree.Items.AddObject(nil, cat, obs);
@ -289,8 +285,24 @@ begin
cat := ''; cat := '';
idt := ''; idt := '';
end; end;
begin
tree.Items.Clear;
fShortcuts.items.Clear;
fBackup.items.Clear;
cat := '';
idt := '';
for i:= 0 to fObservers.observersCount-1 do
begin
obs := fObservers.observers[i] as ICEEditableShortCut;
if obs.scedWantFirst then
begin
while obs.scedWantNext(cat, idt, sht) do
addItem();
addItem();
end; end;
end; end;
tree.Items.SortTopLevelNodes(@sortCategories);
end;
{$ENDREGION} {$ENDREGION}
initialization initialization