1 module dcc.gtkd.tribuneinput; 2 3 private import std.stdio; 4 private import std.string : format; 5 6 private import gtk.TextView; 7 private import gtk.TextBuffer; 8 private import gtk.TextIter; 9 private import gtk.TextMark; 10 private import gtk.CssProvider; 11 12 private import gtkc.gtktypes; 13 14 private import gdk.Color; 15 16 private import dcc.engine.tribune; 17 private import dcc.gtkd.main; 18 19 class TribuneInput : TextView { 20 GtkTribune[string] tribunes; 21 TextBuffer buffer; 22 CssProvider css; 23 24 this() { 25 this.buffer = this.getBuffer(); 26 this.setEditable(true); 27 this.setWrapMode(WrapMode.CHAR); 28 29 this.setName("TribuneInput"); 30 31 this.css = new CssProvider(); 32 this.getStyleContext().addProvider(css, 600); 33 34 this.setBorderWindowSize(GtkTextWindowType.TOP, 2); 35 } 36 37 int lineHeight() { 38 int y, height; 39 TextIter iter = new TextIter(); 40 this.getBuffer().getEndIter(iter); 41 42 this.getLineYrange(iter, y, height); 43 44 return height; 45 } 46 47 void setCurrentTribune(GtkTribune tribune) { 48 if (tribune.tag !in this.tribunes) { 49 this.buffer.createTag(tribune.tag, "paragraph-background", tribune.color); 50 this.tribunes[tribune.tag] = tribune; 51 } 52 53 this.css.loadFromData(format(` 54 #TribuneInput { 55 margin-top: 2px; 56 background-color: %s; 57 } 58 `, tribune.color)); 59 } 60 } 61