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