1 module examplewidgets.tabpainter;
2 
3 import qt.config;
4 import qt.core.string;
5 import qt.core.timer;
6 import qt.gui.brush;
7 import qt.gui.color;
8 import qt.gui.event;
9 import qt.gui.image;
10 import qt.gui.painter;
11 import qt.gui.picture;
12 import qt.gui.pixmap;
13 import qt.gui.statictext;
14 import qt.helpers;
15 import qt.widgets.widget;
16 
17 class TabPainter : QWidget
18 {
19     mixin(Q_OBJECT_D);
20 public:
21     /+ explicit +/this(QWidget parent = null)
22     {
23         super(parent);
24 
25         timer = new QTimer(this);
26         connect(timer.signal!"timeout", this.slot!"update");
27         timer.setInterval(100);
28         timer.start();
29 
30         staticText = QStaticText(globalInitVar!QString);
31         staticText.setText(QString("drawStaticText"));
32     }
33 
34 protected:
35     override extern(C++) void paintEvent(QPaintEvent e)
36     {
37         auto p = QPainter(this);
38         drawImage(&p, QString("QPainter(QWidget)"));
39 
40         QImage image = createImage();
41         QPixmap pixmap = createPixmap();
42         QPicture picture = createPicture();
43 
44         p.drawImage(0, 100, image);
45         p.drawPixmap(0, 200, pixmap);
46         p.drawPicture(0, 300, picture);
47     }
48     override extern(C++) void contextMenuEvent(QContextMenuEvent event)
49     {
50         import qt.gui.action;
51         import qt.widgets.filedialog;
52         import qt.widgets.menu;
53         import qt.gui.pagesize;
54         import qt.gui.pdfwriter;
55 
56         scope menu = new QMenu(this);
57         QAction pdfAction = menu.addAction(QString("Create PDF"));
58         QAction selected = menu.exec(event.globalPos());
59 
60         if(selected == pdfAction)
61         {
62             QString filename = QFileDialog.getSaveFileName(this, globalInitVar!QString, globalInitVar!QString, QString("*.pdf"));
63             if(!filename.isEmpty())
64             {
65                 scope writer = new QPdfWriter(filename);
66                 writer.setPageSize(QPageSize(QPageSize.PageSizeId.A4));
67                 writer.setResolution(50);
68                 auto p = QPainter(writer);
69                 drawImage(&p, QString("QPainter(QPdfWriter)"));
70             }
71         }
72     }
73 
74 private:
75     QTimer timer;
76     QStaticText staticText;
77 
78     final void drawImage(QPainter* p, const(QString) title)
79     {
80         import qt.core.datetime;
81         import qt.core.namespace;
82         import qt.core.rect;
83         import qt.gui.textoption;
84 
85         p.drawText(15, 20, title);
86         p.setBrush(QBrush(/+ Qt:: +/qt.core.namespace.GlobalColor.blue));
87         p.drawRect(15, 30, 100, 30);
88         p.drawText(QRectF(15, 30, 100, 30), QString("drawRect"), QTextOption(/+ Qt:: +/qt.core.namespace.Alignment.AlignCenter));
89 
90         p.setBrush(QBrush(/+ Qt:: +/qt.core.namespace.GlobalColor.green));
91         p.drawEllipse(140, 30, 100, 30);
92         p.drawText(QRectF(140, 30, 100, 30), QString("drawEllipse"), QTextOption(/+ Qt:: +/qt.core.namespace.Alignment.AlignCenter));
93 
94         p.drawStaticText(270, 30, staticText);
95 
96         p.drawText(15, 90, "currentDateTime: " ~ QDateTime.currentDateTime().toString(/+ Qt:: +/qt.core.namespace.DateFormat.ISODate));
97     }
98     final QImage createImage()
99     {
100         import qt.core.namespace;
101 
102         auto image = QImage(400, 100, QImage.Format.Format_RGBA8888);
103         image.fill(QColor(/+ Qt:: +/qt.core.namespace.GlobalColor.white));
104         auto p = QPainter(image.paintDevice);
105         drawImage(&p, QString("QPainter(QImage)"));
106         return image;
107     }
108     final QPixmap createPixmap()
109     {
110         import qt.core.namespace;
111 
112         auto image = QPixmap(400, 100);
113         image.fill(QColor(/+ Qt:: +/qt.core.namespace.GlobalColor.gray));
114         auto p = QPainter(image.paintDevice);
115         drawImage(&p, QString("QPainter(QPixmap)"));
116         return image;
117     }
118     final QPicture createPicture()
119     {
120         QPicture image = QPicture(-1);
121         auto p = QPainter(image.paintDevice);
122         drawImage(&p, QString("QPainter(QPicture)"));
123         return image;
124     }
125 }
126