tagging release
[dasher.git] / Src / Qt / QtDasherScreen.cc
blob6c8dd8d29bdcb6501df683d69f1c7de8a9dab197
1 // QtDasherScreen.cc
2 // (c) 2003 Yann Dirson
3 // Derived from GtkDasherCanvas.cc
4 // (c) 2002 Philip Cowans
6 #include "../Common/Common.h"
8 #include <iostream>
9 #include <string>
11 #include <qpointarray.h>
12 #include <qpoint.h>
14 #include "QtDasherScreen.h"
15 #include "DasherScreen.h"
16 #include "SettingsStore.h"
18 #define MAXFONTSIZE 25
19 #define MINFONTSIZE 8
21 #include <iconv.h>
22 #include <iostream>
24 QtDasherScreen::QtDasherScreen(int _width, int _height, CDasherInterface *_interface, QWidget *_parent, Dasher::CDashEditbox *edit):QWidget(_parent), interface(_interface), fontname("fixed"), // fontsize(12),
25 Dasher::CDasherScreen(_width, _height) {
26 // font = new QFont (fontname, fontsize);
27 painter = new QPainter();
29 pixmap = new QPixmap(_width, _height);
30 pixmap->setOptimization(QPixmap::BestOptim);
31 interface->SetSettingsStore(new CSettingsStore);
33 interface->ChangeLanguageModel(0);
34 interface->ChangeView(0);
35 interface->ChangeEdit(edit);
37 interface->GetFontSizes(&FontSizes);
39 for(int i = 0; i < FontSizes.size(); i++) {
40 if(FontSizes[i] > Fonts.size())
41 Fonts.resize((FontSizes[i]) + 1);
42 Fonts[FontSizes[i]] = QFont(fontname.c_str(), FontSizes[i]);
43 Fonts[FontSizes[i]].setPixelSize(FontSizes[i]);
46 interface->ChangeScreen(this);
48 paused = true;
50 QTimer *tmr = new QTimer(this);
51 connect(tmr, SIGNAL(timeout()), SLOT(timer()));
52 tmr->start(40);
56 long QtDasherScreen::get_time() {
57 long s_now;
58 long ms_now;
60 struct timeval tv;
61 struct timezone tz;
63 gettimeofday(&tv, &tz);
65 s_now = tv.tv_sec - 1054487600;
67 ms_now = tv.tv_usec / 1000;
69 return (long (s_now * 1000 + ms_now));
73 QtDasherScreen::~QtDasherScreen() {
74 delete painter;
75 delete interface;
76 delete edit;
79 QColor QtDasherScreen::getColor(int Color, const Opts::ColorSchemes ColorScheme) const {
80 switch (ColorScheme) {
81 case Dasher::Opts::Nodes1:
82 switch (Color) {
83 case 0:
84 return QColor(180, 245, 180);
85 case 1:
86 return QColor(160, 200, 160);
87 case 2:
88 return QColor(0, 255, 255);
89 default:
90 abort();
92 case Dasher::Opts::Nodes2:
93 switch (Color) {
94 case 0:
95 return QColor(255, 185, 255);
96 case 1:
97 return QColor(140, 200, 255);
98 case 2:
99 return QColor(255, 175, 175);
100 default:
101 abort();
103 case Dasher::Opts::Special1:
104 return QColor(240, 240, 240);
105 case Dasher::Opts::Special2:
106 return QColor(255, 255, 255);
107 case Dasher::Opts::Groups:
108 switch (Color) {
109 case 0:
110 return QColor(255, 255, 0);
111 case 1:
112 return QColor(255, 100, 100);
113 case 2:
114 return QColor(0, 255, 0);
115 default:
116 abort();
118 case Dasher::Opts::Objects:
119 return QColor(0, 0, 0);
120 default:
121 abort();
125 void QtDasherScreen::DrawRectangle(int x1, int y1, int x2, int y2, int Color, Opts::ColorSchemes ColorScheme) const {
126 if(y2 - y1 >= 5) {
127 painter->setBrush(getColor(Color, ColorScheme));
128 painter->drawRect(x1, y1, x2 - x1, y2 - y1);
132 static void Points_to_QPointArray(const Dasher::CDasherScreen::point *const points, int number, QPointArray &qpa) {
133 for(int i = 0; i < number; i++) {
134 qpa.setPoint(i, points[i].x, points[i].y);
138 void QtDasherScreen::Polyline(point *Points, int Number) const {
139 QPointArray qpa(Number);
140 Points_to_QPointArray(Points, Number, qpa);
141 painter->setPen(SolidLine);
142 painter->drawPolyline(qpa);
143 painter->setPen(NoPen);
146 void QtDasherScreen::DrawPolygon(point *Points, int Number, int Color, Opts::ColorSchemes ColorScheme) const {
147 painter->setBrush(getColor(Color, ColorScheme));
148 QPointArray qpa(Number);
149 Points_to_QPointArray(Points, Number, qpa);
150 painter->drawPolygon(qpa);
153 void QtDasherScreen::mousePressEvent(QMouseEvent *e) {
154 paused = false;
155 interface->Unpause(get_time());
158 void QtDasherScreen::mouseReleaseEvent(QMouseEvent *e) {
159 QPoint p = e->pos();
160 interface->PauseAt(p.x(), p.y());
161 paused = true;
164 void QtDasherScreen::timer() {
165 if(paused == false) {
166 QPoint cursorpos;
167 cursorpos = this->cursor().pos();
168 cursorpos = mapFromGlobal(cursorpos);
170 interface->TapOn(cursorpos.x(), cursorpos.y(), get_time());