1 module jcli.text.widgets.shortcuts; 2 3 import std, jcli.text; 4 5 struct ShortcutsWidget(uint count) 6 { 7 static struct Shortcut 8 { 9 string key; 10 string desc; 11 } 12 13 Shortcut[count] shortcuts; 14 AnsiColour bg; 15 AnsiStyleSet keyStyle; 16 AnsiStyleSet descStyle; 17 18 void render(TextBuffer buffer) 19 { 20 auto area = Rect(0, buffer.height-1, buffer.width, buffer.height); 21 buffer.setCells(area, " ", AnsiStyleSet.init.bg(this.bg)); 22 23 foreach(shortcut; this.shortcuts) 24 { 25 Vector lastChar; 26 buffer.setCell(Vector(area.left, area.top), " ", this.keyStyle); 27 area.left++; 28 buffer.setString(area, shortcut.key, lastChar, this.keyStyle); 29 area.left = lastChar.x + 1; 30 buffer.setCell(Vector(area.left, area.top), " ", this.keyStyle); 31 area.left += 2; 32 buffer.setString(area, shortcut.desc, lastChar, this.descStyle); 33 area.left = lastChar.x + 2; 34 } 35 } 36 } 37 38 struct ShortcutsWidgetBuilder(uint count) 39 { 40 private ShortcutsWidget!count _widget; 41 42 typeof(this) withShortcut(uint index, string key, string desc) 43 { 44 this._widget.shortcuts[index] = typeof(_widget).Shortcut(key, desc); 45 return this; 46 } 47 48 typeof(this) withBackground(AnsiColour colour) 49 { 50 this._widget.bg = colour; 51 return this; 52 } 53 54 typeof(this) withKeyStyle(AnsiStyleSet style) 55 { 56 this._widget.keyStyle = style; 57 return this; 58 } 59 60 typeof(this) withDescriptionStyle(AnsiStyleSet style) 61 { 62 this._widget.descStyle = style; 63 return this; 64 } 65 66 auto build() 67 { 68 return this._widget; 69 } 70 }