1 module examplewidgets.tabtext;
2 
3 import qt.config;
4 import qt.core.coreevent;
5 import qt.helpers;
6 import qt.widgets.ui;
7 import qt.widgets.widget;
8 
9 class TabText : QWidget
10 {
11     mixin(Q_OBJECT_D);
12 
13 public:
14     /+ explicit +/this(QWidget parent = null)
15     {
16         import core.stdcpp.new_;
17         super(parent);
18         this.ui = cpp_new!(typeof(*ui));
19 
20         ui.setupUi(this);
21 
22         connect(ui.textEdit.signal!"undoAvailable", ui.pushButtonUndo.slot!"setEnabled");
23         connect(ui.textEdit.signal!"redoAvailable", ui.pushButtonRedo.slot!"setEnabled");
24         connect(ui.pushButtonUndo.signal!"clicked", ui.textEdit.slot!"undo");
25         connect(ui.pushButtonRedo.signal!"clicked", ui.textEdit.slot!"redo");
26 
27         connect(ui.pushButtonBold.signal!"clicked", this.slot!"changeFormat");
28         connect(ui.pushButtonItalic.signal!"clicked", this.slot!"changeFormat");
29 
30         on_textEdit_textChanged();
31     }
32     ~this()
33     {
34         import core.stdcpp.new_;
35 
36         cpp_delete(ui);
37     }
38 
39 private /+ slots +/:
40     @QSlot final void on_textEdit_textChanged()
41     {
42         ui.textBrowser.setHtml(ui.textEdit.document().toHtml());
43     }
44 
45     @QSlot final void on_textEdit_cursorPositionChanged()
46     {
47         import qt.gui.font;
48         import qt.gui.textcursor;
49 
50         QTextCursor cursor = ui.textEdit.textCursor();
51         ui.pushButtonList.setChecked(cursor.currentList() !is null);
52         ui.pushButtonBold.setChecked(cursor.charFormat().fontWeight() == QFont.Weight.Bold);
53         ui.pushButtonItalic.setChecked(cursor.charFormat().fontItalic());
54     }
55 
56     @QSlot final void changeFormat()
57     {
58         import qt.gui.font;
59         import qt.gui.textcursor;
60         import qt.gui.textformat;
61 
62         QTextCharFormat format;
63         format.setFontWeight(ui.pushButtonBold.isChecked() ? QFont.Weight.Bold : QFont.Weight.Normal);
64         format.setFontItalic(ui.pushButtonItalic.isChecked());
65         QTextCursor cursor = ui.textEdit.textCursor();
66         cursor.mergeCharFormat(format);
67         ui.textEdit.mergeCurrentCharFormat(format);
68         ui.textEdit.setFocus();
69     }
70 
71     @QSlot final void on_pushButtonList_clicked()
72     {
73         import qt.gui.textcursor;
74         import qt.gui.textformat;
75         import qt.gui.textlist;
76 
77         QTextCursor cursor = ui.textEdit.textCursor();
78         if(ui.pushButtonList.isChecked())
79         {
80             QTextListFormat listFmt;
81             listFmt.setStyle(QTextListFormat.Style.ListDecimal);
82             //cursor.createList(listFmt);TODO: only the following works
83             cursor.createList(QTextListFormat.Style.ListDecimal);
84         }
85         else
86         {
87             QTextList list = cursor.currentList();
88             if(list)
89             {
90                 list.remove(cursor.block());
91             }
92 
93             QTextBlockFormat blockFmt = cursor.blockFormat();
94             blockFmt.setIndent(0);
95             cursor.setBlockFormat(blockFmt);
96         }
97     }
98 
99 protected:
100     override extern(C++) void changeEvent(QEvent event)
101     {
102         if(event.type() == QEvent.Type.LanguageChange)
103             ui.retranslateUi(this);
104         QWidget.changeEvent(event);
105     }
106 
107 private:
108     UIStruct!"tabtext.ui"* ui;
109 }
110