Skip to content

Commit cd8a913

Browse files
committed
[QuickAccess] Implemented Quick Access feature. Press Control + T to activate search
1 parent 5964123 commit cd8a913

33 files changed

+1172
-59
lines changed

WDE.DatabaseEditors/Solution/DatabaseTableSolutionItemProvider.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public IEnumerable<ISolutionItemProvider> Provide()
6565
}
6666
}
6767

68-
internal class DatabaseTableSolutionItemProvider : ISolutionItemProvider, IRelatedSolutionItemCreator
68+
internal class DatabaseTableSolutionItemProvider : ISolutionItemProvider, IRelatedSolutionItemCreator, INumberSolutionItemProvider
6969
{
7070
private readonly IDatabaseTableDataProvider tableDataProvider;
7171
private readonly IItemFromListProvider itemFromListProvider;
@@ -180,5 +180,12 @@ public bool CanCreatedRelatedSolutionItem(RelatedSolutionItem related)
180180
related.Type == RelatedSolutionItem.RelatedType.QuestEntry &&
181181
definition.Picker == "QuestParameter";
182182
}
183+
184+
public Task<ISolutionItem?> CreateSolutionItem(long number)
185+
{
186+
return Create((uint)number);
187+
}
188+
189+
public string ParameterName => definition.Picker;
183190
}
184191
}

WDE.Parameters.Test/UnitTest1.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using NSubstitute;
22
using NUnit.Framework;
3+
using WDE.Common;
34
using WDE.Common.Parameters;
5+
using WDE.Common.QuickAccess;
6+
using WDE.Parameters.QuickAccess;
47

58
namespace WDE.Parameters.Test
69
{
@@ -11,7 +14,7 @@ public class FactoryTests
1114
[SetUp]
1215
public void SetUp()
1316
{
14-
parameterFactory = new ParameterFactory();
17+
parameterFactory = new ParameterFactory(Substitute.For<IQuickAccessRegisteredParameters>());
1518
}
1619

1720
private IParameter<long> Register(string name)

WDE.Parameters/Models/ParameterSpecModel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public struct ParameterSpecModel
1919
[JsonProperty(PropertyName = "inmenu")]
2020
public bool InMenu { get; set; }
2121

22+
[JsonProperty(PropertyName = "quickaccess")]
23+
public QuickAccessMode QuickAccess { get; set; }
24+
2225
[JsonProperty(PropertyName = "prefix")]
2326
public string Prefix { get; set; }
2427

WDE.Parameters/ParameterFactory.cs

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,31 @@
44
using System.Reactive.Linq;
55
using System.Reactive.Subjects;
66
using WDE.Common.Parameters;
7+
using WDE.Common.Utils;
78
using WDE.Module.Attributes;
89
using WDE.MVVM.Observable;
910
using WDE.Parameters.Models;
11+
using WDE.Parameters.QuickAccess;
1012

1113
namespace WDE.Parameters
1214
{
1315
[AutoRegister]
1416
[SingleInstance]
1517
public class ParameterFactory : IParameterFactory
1618
{
17-
private readonly Dictionary<string, ParameterSpecModel> data = new();
18-
private readonly Dictionary<string, IParameter<long>> parameters = new();
19-
private readonly Dictionary<string, IParameter<string>> stringParameters = new();
20-
19+
private readonly IQuickAccessRegisteredParameters quickAccessRegisteredParameters;
20+
private readonly Dictionary<string, ParameterSpecModel> data;
21+
private readonly Dictionary<string, IParameter<long>> parameters;
22+
private readonly Dictionary<string, IParameter<string>> stringParameters;
23+
24+
internal ParameterFactory(IQuickAccessRegisteredParameters quickAccessRegisteredParameters)
25+
{
26+
this.quickAccessRegisteredParameters = quickAccessRegisteredParameters;
27+
data = new(StringComparer.OrdinalIgnoreCase);
28+
parameters = new(StringComparer.OrdinalIgnoreCase);
29+
stringParameters = new(StringComparer.OrdinalIgnoreCase);
30+
}
31+
2132
public IParameter<long> Factory(string type)
2233
{
2334
if (parameters.TryGetValue(type, out var parameter))
@@ -42,14 +53,15 @@ public bool IsRegisteredString(string type)
4253
return stringParameters.ContainsKey(type);
4354
}
4455

45-
public void Register(string key, IParameter<long> parameter)
56+
public void Register(string key, IParameter<long> parameter, QuickAccessMode quickAccessMode = QuickAccessMode.None)
4657
{
4758
parameters.Add(key, parameter);
4859
if (pendingObservables.TryGetValue(key, out var pending))
4960
pending.Publish(parameter);
5061
if (pendingLongObservables.TryGetValue(key, out var pending2))
5162
pending2.Publish(parameter);
5263
registration.OnNext(parameter);
64+
quickAccessRegisteredParameters.Register(quickAccessMode, key, key.Replace("Parameter", "").ToTitleCase());
5365
}
5466

5567
public void Register(string key, IParameter<string> parameter)
@@ -125,30 +137,32 @@ public ParameterSpecModel GetDefinition(string key)
125137

126138
////
127139
public void RegisterCombined(string name, string param1, string param2,
128-
Func<IParameter<long>, IParameter<long>, IParameter<long>> creator)
140+
Func<IParameter<long>, IParameter<long>, IParameter<long>> creator,
141+
QuickAccessMode quickAccessMode = QuickAccessMode.None)
129142
{
130143
OnRegisterLong(param1).CombineLatest(OnRegisterLong(param2)).Subscribe(pair =>
131144
{
132-
Register(name, creator(pair.First, pair.Second));
145+
Register(name, creator(pair.First, pair.Second), quickAccessMode);
133146
});
134147
}
135148

136149
public void RegisterCombined(string name, string param1, string param2, string param3, string param4,
137-
Func<IParameter<long>, IParameter<long>, IParameter<long>, IParameter<long>, IParameter<long>> creator)
150+
Func<IParameter<long>, IParameter<long>, IParameter<long>, IParameter<long>, IParameter<long>> creator,
151+
QuickAccessMode quickAccessMode = QuickAccessMode.None)
138152
{
139153
OnRegisterLong(param1)
140154
.CombineLatest(OnRegisterLong(param2), OnRegisterLong(param3), OnRegisterLong(param4))
141155
.Subscribe(pair =>
142156
{
143-
Register(name, creator(pair.First, pair.Second, pair.Third, pair.Fourth));
157+
Register(name, creator(pair.First, pair.Second, pair.Third, pair.Fourth), quickAccessMode);
144158
});
145159
}
146160

147-
public void RegisterDepending(string name, string dependsOn, Func<IParameter<long>, IParameter<long>> creator)
161+
public void RegisterDepending(string name, string dependsOn, Func<IParameter<long>, IParameter<long>> creator, QuickAccessMode quickAccessMode = QuickAccessMode.None)
148162
{
149163
OnRegisterLong(dependsOn).Subscribe(item =>
150164
{
151-
Register(name, creator(item));
165+
Register(name, creator(item), quickAccessMode);
152166
});
153167
}
154168

WDE.Parameters/ParameterLoader.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
using WDE.Common.Providers;
1010
using WDE.Common.Services;
1111
using WDE.MVVM.Observable;
12+
using WDE.Parameters.Models;
1213
using WDE.Parameters.Parameters;
1314
using WDE.Parameters.Providers;
15+
using WDE.Parameters.QuickAccess;
1416

1517
namespace WDE.Parameters
1618
{
@@ -22,22 +24,25 @@ public class ParameterLoader
2224
private readonly IItemFromListProvider itemFromListProvider;
2325
private readonly IEventAggregator eventAggregator;
2426
private readonly ILoadingEventAggregator loadingEventAggregator;
27+
private readonly IQuickAccessRegisteredParameters quickAccessRegisteredParameters;
2528

2629
private Dictionary<Type, List<IDatabaseObserver>> reloadable = new();
2730
private List<LateLoadParameter> databaseParameters = new();
28-
public ParameterLoader(IDatabaseProvider database,
31+
internal ParameterLoader(IDatabaseProvider database,
2932
IParameterDefinitionProvider parameterDefinitionProvider,
3033
IServerIntegration serverIntegration,
3134
IItemFromListProvider itemFromListProvider,
3235
IEventAggregator eventAggregator,
33-
ILoadingEventAggregator loadingEventAggregator)
36+
ILoadingEventAggregator loadingEventAggregator,
37+
IQuickAccessRegisteredParameters quickAccessRegisteredParameters)
3438
{
3539
this.database = database;
3640
this.parameterDefinitionProvider = parameterDefinitionProvider;
3741
this.serverIntegration = serverIntegration;
3842
this.itemFromListProvider = itemFromListProvider;
3943
this.eventAggregator = eventAggregator;
4044
this.loadingEventAggregator = loadingEventAggregator;
45+
this.quickAccessRegisteredParameters = quickAccessRegisteredParameters;
4146
}
4247

4348
public void Load(ParameterFactory factory)
@@ -46,26 +51,30 @@ public void Load(ParameterFactory factory)
4651
{
4752
if (pair.Value.StringValues != null)
4853
{
49-
SwitchStringParameter stringParameter = new SwitchStringParameter(pair.Value.StringValues);
54+
SwitchStringParameter stringParameter = new SwitchStringParameter(pair.Value.StringValues, pair.Value.Prefix);
5055
factory.Register(pair.Key, stringParameter);
5156
}
5257
else if (pair.Value.Values != null)
5358
{
5459
Parameter p = pair.Value.IsFlag ? new FlagParameter() : new Parameter();
5560
p.Items = pair.Value.Values;
56-
factory.Register(pair.Key, p);
61+
p.Prefix = pair.Value.Prefix;
62+
factory.Register(pair.Key, p);
5763
}
64+
65+
if (pair.Value.QuickAccess != QuickAccessMode.None)
66+
quickAccessRegisteredParameters.Register(pair.Value.QuickAccess, pair.Key, pair.Value.Name);
5867
}
5968

6069
factory.Register("FloatParameter", new FloatIntParameter(1000));
6170
factory.Register("DecifloatParameter", new FloatIntParameter(100));
62-
factory.Register("GameEventParameter", AddDatabaseParameter(new GameEventParameter(database)));
63-
factory.Register("CreatureParameter", AddDatabaseParameter(new CreatureParameter(database, serverIntegration)));
71+
factory.Register("GameEventParameter", AddDatabaseParameter(new GameEventParameter(database)), QuickAccessMode.Limited);
72+
factory.Register("CreatureParameter", AddDatabaseParameter(new CreatureParameter(database, serverIntegration)), QuickAccessMode.Limited);
6473
factory.Register("CreatureGameobjectNameParameter", AddDatabaseParameter(new CreatureGameobjectNameParameter(database)));
6574
factory.Register("CreatureGameobjectParameter", AddDatabaseParameter(new CreatureGameobjectParameter(database)));
66-
factory.Register("QuestParameter", AddDatabaseParameter(new QuestParameter(database)));
75+
factory.Register("QuestParameter", AddDatabaseParameter(new QuestParameter(database)), QuickAccessMode.Limited);
6776
factory.Register("PrevQuestParameter", AddDatabaseParameter(new PrevQuestParameter(database)));
68-
factory.Register("GameobjectParameter", AddDatabaseParameter(new GameobjectParameter(database, serverIntegration, itemFromListProvider)));
77+
factory.Register("GameobjectParameter", AddDatabaseParameter(new GameobjectParameter(database, serverIntegration, itemFromListProvider)), QuickAccessMode.Limited);
6978
factory.Register("GossipMenuParameter", AddDatabaseParameter(new GossipMenuParameter(database)));
7079
factory.Register("NpcTextParameter", AddDatabaseParameter(new NpcTextParameter(database)));
7180
factory.Register("ConversationTemplateParameter", new ConversationTemplateParameter(database));

WDE.Parameters/Parameters/parameters.json

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"QuestFlagParameter": {
6969
"isflag": true,
7070
"inmenu": true,
71+
"quickaccess": "Full",
7172
"name": "Quest flags",
7273
"prefix": "QUEST_FLAGS_",
7374
"values": {
@@ -109,6 +110,7 @@
109110
"UnitFlagParameter": {
110111
"isflag": true,
111112
"inmenu": true,
113+
"quickaccess": "Full",
112114
"name": "Unit flags",
113115
"prefix": "UNIT_FLAG_",
114116
"values": {
@@ -149,6 +151,7 @@
149151
"UnitFlags2Parameter": {
150152
"isflag": true,
151153
"inmenu": true,
154+
"quickaccess": "Full",
152155
"name": "Unit flags2",
153156
"prefix": "UNIT_FLAG2_",
154157
"values": {
@@ -178,6 +181,7 @@
178181
"NpcFlagParameter": {
179182
"isflag": true,
180183
"inmenu": true,
184+
"quickaccess": "Full",
181185
"name": "NPC flags",
182186
"prefix": "UNIT_NPC_FLAG_",
183187
"values": {
@@ -240,6 +244,7 @@
240244
"MovementFlagParameter": {
241245
"isflag": true,
242246
"inmenu": true,
247+
"quickaccess": "Full",
243248
"name": "Movement flag",
244249
"prefix": "MOVEMENT_FLAG_",
245250
"values": {
@@ -317,6 +322,7 @@
317322
"ExtraFlagParameter": {
318323
"isflag": true,
319324
"inmenu": true,
325+
"quickaccess": "Full",
320326
"name": "Creature extra flags",
321327
"prefix": "CREATURE_FLAG_EXTRA_",
322328
"values": {
@@ -1211,6 +1217,7 @@
12111217
"name": "Dynamic flags",
12121218
"isflag": true,
12131219
"prefix": "UNIT_DYNFLAG_",
1220+
"quickaccess": "Full",
12141221
"values": {
12151222
"0": {
12161223
"name": "NONE"
@@ -1675,7 +1682,8 @@
16751682
},
16761683
"GameobjectTypeParameter": {
16771684
"name": "Types of gameobject",
1678-
"prefix": "GAMEOBJECT_TYPE",
1685+
"prefix": "GAMEOBJECT_TYPE_",
1686+
"quickaccess": "Full",
16791687
"values": {
16801688
"0" : {
16811689
"name": "DOOR"
@@ -1888,6 +1896,7 @@
18881896
"GameObjectFlagParameter": {
18891897
"name": "Gameobject flags",
18901898
"isflag": true,
1899+
"quickaccess": "Full",
18911900
"prefix": "GO_FLAG_",
18921901
"values": {
18931902
"0": {"name": "none"},
@@ -1927,6 +1936,7 @@
19271936
},
19281937
"StandStateParameter": {
19291938
"prefix": "UNIT_STAND_",
1939+
"quickaccess": "Full",
19301940
"name": "Stand state",
19311941
"values": {
19321942
"0": {"name": "STAND"},
@@ -1944,6 +1954,7 @@
19441954
"UnitStandFlagParameter": {
19451955
"isflag": true,
19461956
"prefix": "UNIT_STAND_FLAGS_",
1957+
"quickaccess": "Full",
19471958
"name": "Unit stand",
19481959
"values": {
19491960
"0": {"name": "none"},
@@ -1956,6 +1967,7 @@
19561967
},
19571968
"AnimationTierParameter": {
19581969
"name": "Animation tier",
1970+
"quickaccess": "Full",
19591971
"values": {
19601972
"0": {"name": "Ground"},
19611973
"1": {"name": "Swim"},
@@ -1966,6 +1978,7 @@
19661978
},
19671979
"SheathStateParameter": {
19681980
"name": "Sheath state",
1981+
"quickaccess": "Full",
19691982
"values": {
19701983
"0": {"name": "Unarmed"},
19711984
"1": {"name": "Melee"},
@@ -2036,6 +2049,7 @@
20362049
"QuestStatusParameter": {
20372050
"isflag": true,
20382051
"prefix": "QUEST_STATUS",
2052+
"quickaccess": "Full",
20392053
"name": "Quest status (mask)",
20402054
"values": {
20412055
"1": {"name": "none", "description": "Player does not have or had quest at all. He could accept it, but he did not (yet)."},
@@ -2058,6 +2072,7 @@
20582072
},
20592073
"GossipIconParameter": {
20602074
"name": "Gossip icons for gossip_menu",
2075+
"quickaccess": "Full",
20612076
"prefix": "GOSSIP_ICON_",
20622077
"values": {
20632078
"0": {"name": "Chat", "description": "White chat bubble"},
@@ -2075,6 +2090,7 @@
20752090
},
20762091
"GossipOptionTypeParameter": {
20772092
"name": "Gossip menu option types",
2093+
"quickaccess": "Full",
20782094
"prefix": "GOSSIP_OPTION_",
20792095
"values": {
20802096
"0": {"name": "None", "description": "Requires npc flag NONE"},
@@ -2343,7 +2359,8 @@
23432359
},
23442360
"UnitStateParameter": {
23452361
"name": "Unit state",
2346-
"isflag": true,
2362+
"isflag": true,
2363+
"quickaccess": "Full",
23472364
"values": {
23482365
"1": {"name": "UNIT_STATE_DIED", "description": "player has fake death aura"},
23492366
"2": {"name": "UNIT_STATE_MELEE_ATTACKING", "description": "player is melee attacking someone"},

WDE.Parameters/ParametersModule.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
using Prism.Events;
1+
using System.Runtime.CompilerServices;
2+
using Prism.Events;
23
using Prism.Ioc;
34
using WDE.Common.Events;
45
using WDE.Module;
56
using WDE.Module.Attributes;
67

8+
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
9+
[assembly: InternalsVisibleTo("WDE.Parameters.Test")]
710
namespace WDE.Parameters
811
{
912
[AutoRegister]

0 commit comments

Comments
 (0)