1- using System ;
2- using System . Collections . Generic ;
1+ using System . Collections . Generic ;
32using System . Linq ;
43using InvvardDev . EZLayoutDisplay . Desktop . Model ;
54using InvvardDev . EZLayoutDisplay . Desktop . Model . Dictionary ;
65using InvvardDev . EZLayoutDisplay . Desktop . Model . Enum ;
6+ using InvvardDev . EZLayoutDisplay . Desktop . Model . Ez ;
7+ using InvvardDev . EZLayoutDisplay . Desktop . Model . Ez . Content ;
8+ using InvvardDev . EZLayoutDisplay . Desktop . Model . ZsaModels ;
79using NLog ;
810
911namespace InvvardDev . EZLayoutDisplay . Desktop . Helper
@@ -53,10 +55,10 @@ private EZLayer PrepareEZLayer(ErgodoxLayer ergodoxLayer)
5355 foreach ( var ergodoxKey in ergodoxLayer . Keys )
5456 {
5557 var keyDisplayMode = SelectKeyDisplayMode ( ergodoxKey ) ;
56- var key = PrepareKeyLabels ( ergodoxKey , keyDisplayMode ) ;
57- key . Color = GetColor ( ergodoxKey . GlowColor , layer . Color ) ;
58+ var key = PrepareKeyContent ( ergodoxKey , keyDisplayMode ) ;
59+ key . GlowColor = GetColor ( ergodoxKey . GlowColor , layer . Color ) ;
5860
59- layer . EZKeys . Add ( key ) ;
61+ layer . Keys . Add ( key ) ;
6062 }
6163
6264 Logger . DebugOutputParam ( nameof ( layer ) , layer ) ;
@@ -66,45 +68,73 @@ private EZLayer PrepareEZLayer(ErgodoxLayer ergodoxLayer)
6668
6769 private KeyDisplayMode SelectKeyDisplayMode ( ErgodoxKey ergodoxKey )
6870 {
69- var featureCount = new List < ErgodoxKeyFeature > {
71+ var features = new List < ErgodoxKeyFeature > {
7072 ergodoxKey . Tap ,
7173 ergodoxKey . Hold ,
7274 ergodoxKey . DoubleTap ,
7375 ergodoxKey . TapHold
7476 } . Where ( f => f != null )
75- . Count ( ) ;
77+ . ToList ( ) ;
78+
79+ var featureCount = features . Count ;
80+ KeyDefinition firstKeyDefinition = null ;
81+ if ( features . Any ( ) )
82+ {
83+ firstKeyDefinition = GetKeyDefinition ( features . First ( ) . Code ) ;
84+ }
7685
77- var displayMode = featureCount switch
86+ var category = featureCount switch
7887 {
79- _ when ! string . IsNullOrWhiteSpace ( ergodoxKey . CustomLabel ) => KeyDisplayMode . CustomLabel ,
80- 1 => KeyDisplayMode . SingleFeature ,
81- > 1 => KeyDisplayMode . DoubleFeature ,
82- _ => KeyDisplayMode . None ,
88+ 0 => KeyDisplayMode . Empty ,
89+ 1 when ergodoxKey . Tap ? . Macro != null => KeyDisplayMode . Macro ,
90+ 1 when firstKeyDefinition . Category == KeyCategory . Modifier => KeyDisplayMode . Modifier ,
91+ 1 when firstKeyDefinition . Category == KeyCategory . Shine => KeyDisplayMode . ColorControl ,
92+ 1 when ! string . IsNullOrWhiteSpace ( ergodoxKey . CustomLabel ) => KeyDisplayMode . CustomLabel ,
93+ >= 2 => KeyDisplayMode . DualFunction ,
94+ _ => KeyDisplayMode . Base
8395 } ;
8496
85- return displayMode ;
97+ return category ;
8698 }
8799
88- private EZKey PrepareKeyLabels ( ErgodoxKey ergodoxKey , KeyDisplayMode displayMode )
100+ private Key PrepareKeyContent ( ErgodoxKey ergodoxKey , KeyDisplayMode displayMode )
89101 {
90102 Logger . TraceMethod ( ) ;
91103 Logger . DebugInputParam ( nameof ( ergodoxKey ) , ergodoxKey ) ;
104+ Logger . DebugInputParam ( nameof ( displayMode ) , displayMode ) ;
92105
93- var key = new EZKey
94- {
95- DisplayMode = displayMode
96- } ;
106+ var features = new List < ErgodoxKeyFeature > {
107+ ergodoxKey . Tap ,
108+ ergodoxKey . Hold ,
109+ ergodoxKey . DoubleTap ,
110+ ergodoxKey . TapHold }
111+ . Where ( f => f != null )
112+ . ToList ( ) ;
113+
114+ var key = new Key ( ) { DisplayMode = displayMode } ;
97115
98- switch ( key . DisplayMode )
116+ switch ( displayMode )
99117 {
100118 case KeyDisplayMode . CustomLabel :
101- key . Primary = new KeyFeature ( ergodoxKey . CustomLabel ) ;
119+ key . Primary = new BaseContent { Label = ergodoxKey . CustomLabel } ;
120+ break ;
121+ case KeyDisplayMode . Macro :
122+ key . Primary = new BaseContent { Label = "Macro" } ;
102123 break ;
103- case KeyDisplayMode . SingleFeature :
104- ( key . Primary , _ ) = GetDisplayedFeature ( ergodoxKey ) ;
124+ case KeyDisplayMode . Base :
125+ case KeyDisplayMode . Modifier :
126+ case KeyDisplayMode . ColorControl :
127+ key . Primary = GetDisplayedFeature ( features [ 0 ] ) ;
105128 break ;
106- case KeyDisplayMode . DoubleFeature :
107- ( key . Primary , key . Secondary ) = GetDisplayedFeature ( ergodoxKey , 2 ) ;
129+ case KeyDisplayMode . DualFunction :
130+ key . Primary = GetDisplayedFeature ( features [ 0 ] ) ;
131+ key . Secondary = GetDisplayedFeature ( features [ 1 ] ) ;
132+
133+ if ( key . Primary . Label . Length > 1 ) key . Primary . Tag = "" ;
134+ if ( key . Secondary . Label . Length > 1 ) key . Secondary . Tag = "" ;
135+ break ;
136+ default :
137+ key . Primary = new BaseContent { Label = string . Empty } ;
108138 break ;
109139 }
110140
@@ -113,29 +143,24 @@ private EZKey PrepareKeyLabels(ErgodoxKey ergodoxKey, KeyDisplayMode displayMode
113143 return key ;
114144 }
115145
116- private ( KeyFeature , KeyFeature ) GetDisplayedFeature ( ErgodoxKey ergodoxKey , int count = 1 )
146+ private BaseContent GetDisplayedFeature ( ErgodoxKeyFeature feature )
117147 {
118- var features = new List < ErgodoxKeyFeature > {
119- ergodoxKey . Tap ,
120- ergodoxKey . Hold ,
121- ergodoxKey . DoubleTap ,
122- ergodoxKey . TapHold } . Where ( f => f != null ) . ToList ( ) ;
148+ var mods = ProcessModifiers ( feature . Modifiers ) ;
149+ var keyDefinition = GetKeyDefinition ( feature . Code ) ;
123150
124- KeyFeature [ ] keyFeatures = new KeyFeature [ 2 ] ;
125-
126- for ( int i = 0 ; i < count ; i ++ )
151+ var keyFeature = keyDefinition switch
127152 {
128- var feature = features . Count >= i + 1 ? features [ i ] : null ;
129- if ( feature != null )
130- {
131- var mods = ProcessModifiers ( feature . Modifiers ) ;
132- var keyDefinition = GetKeyDefinition ( feature . Code ) ;
133-
134- keyFeatures [ i ] = new KeyFeature ( keyDefinition . Label , keyDefinition . IsGlyph , keyDefinition . Tag , mods ) ;
135- }
136- }
153+ // ColorControl Key - Color picker
154+ { KeyCode : "RGB" } => new ColorPicker { Label = keyDefinition . Label , ColorCode = feature . Color } ,
155+ // Layer toggle key
156+ { Category : KeyCategory . Layer } => new Layer { Label = keyDefinition . Label , Id = feature . Layer . Value } ,
157+ { IsGlyph : true } => new Glyph { Label = keyDefinition . Label , Modifier = mods } ,
158+ // Modded label
159+ _ when ! string . IsNullOrWhiteSpace ( mods ) => new BaseContent { Label = $ " { mods } + { keyDefinition . Label } " , Tag = keyDefinition . Tag } ,
160+ _ => new BaseContent { Label = keyDefinition . Label , Tag = keyDefinition . Tag }
161+ } ;
137162
138- return ( keyFeatures [ 0 ] , keyFeatures [ 1 ] ) ;
163+ return keyFeature ;
139164 }
140165
141166 private static string GetColor ( string keyColor , string defaultColor = "#777" )
0 commit comments