00001
00002
00003
00004
00005
00006 #include <iostream>
00007 #include <string>
00008
00009 #include <qpointarray.h>
00010 #include <qpoint.h>
00011
00012 #include "QtDasherScreen.h"
00013 #include "DasherScreen.h"
00014 #include "SettingsStore.h"
00015
00016 #define MAXFONTSIZE 25
00017 #define MINFONTSIZE 8
00018
00019 QtDasherScreen::QtDasherScreen (int _width, int _height,
00020 CDasherInterface *_interface,
00021 QWidget * _parent,
00022 Dasher::CDashEditbox *_edit):
00023 QWidget(_parent),
00024 Dasher::CDasherScreen(_width, _height),
00025 fontsize(12),
00026 interface( _interface ),
00027 fontname( "fixed" )
00028 {
00029 font = QFont (fontname.c_str(), fontsize);
00030 painter = new QPainter ();
00031
00032 pixmap = new QPixmap (_width, _height);
00033 pixmap->setOptimization(QPixmap::BestOptim);
00034 interface->SetSettingsStore(new CSettingsStore);
00035
00036 interface->ChangeLanguageModel(0);
00037 interface->ChangeView(0);
00038 interface->ChangeEdit(_edit);
00039 edit = _edit;
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 interface->ChangeScreen(this);
00052
00053 paused=true;
00054
00055 QTimer *tmr = new QTimer(this);
00056 connect (tmr, SIGNAL(timeout()), SLOT(timer()));
00057 tmr->start(200);
00058
00059 }
00060
00061 long QtDasherScreen::get_time()
00062 {
00063 long s_now;
00064 long ms_now;
00065
00066 struct timeval tv;
00067 struct timezone tz;
00068
00069 gettimeofday( &tv, &tz );
00070
00071 s_now = tv.tv_sec-1054487600;
00072
00073 ms_now = tv.tv_usec / 1000;
00074
00075 return( long(s_now*1000 + ms_now) );
00076
00077 }
00078
00079 QtDasherScreen::~QtDasherScreen()
00080 {
00081 delete painter;
00082 }
00083
00084 QColor QtDasherScreen::getColor(int Color, const Opts::ColorSchemes ColorScheme) const
00085 {
00086 switch (ColorScheme) {
00087 case Dasher::Opts::Nodes1:
00088 switch (Color) {
00089 case 0: return QColor (180, 245, 180);
00090 case 1: return QColor (160, 200, 160);
00091 case 2: return QColor (0, 255, 255);
00092 default: abort ();
00093 }
00094 case Dasher::Opts::Nodes2:
00095 switch (Color) {
00096 case 0: return QColor (255, 185, 255);
00097 case 1: return QColor (140, 200, 255);
00098 case 2: return QColor (255, 175, 175);
00099 default: abort ();
00100 }
00101 case Dasher::Opts::Special1: return QColor (240, 240, 240);
00102 case Dasher::Opts::Special2: return QColor (255, 255, 255);
00103 case Dasher::Opts::Groups:
00104 switch (Color) {
00105 case 0: return QColor (255, 255, 0);
00106 case 1: return QColor (255, 100, 100);
00107 case 2: return QColor (0, 255, 0);
00108 default: abort ();
00109 }
00110 case Dasher::Opts::Objects: return QColor (0, 0, 0);
00111 default: abort();
00112 }
00113 }
00114
00115 void QtDasherScreen::DrawRectangle(int x1, int y1, int x2, int y2,
00116 int Color, Opts::ColorSchemes ColorScheme) const
00117 {
00118 painter->setBrush (getColor (Color, ColorScheme));
00119 painter->drawRect (x1, y1, x2-x1, y2-y1);
00120 }
00121
00122 static void Points_to_QPointArray(const Dasher::CDasherScreen::point* const points,
00123 int number,
00124 QPointArray &qpa)
00125 {
00126 for (int i = 0; i < number; i++) {
00127 qpa.setPoint (i, points[i].x, points[i].y);
00128 }
00129 }
00130
00131 void QtDasherScreen::Polyline(point* Points, int Number) const
00132 {
00133 QPointArray qpa(Number);
00134 Points_to_QPointArray (Points, Number, qpa);
00135 painter->setPen (SolidLine);
00136 painter->drawPolyline (qpa);
00137 painter->setPen (NoPen);
00138 }
00139
00140 void QtDasherScreen::DrawPolygon(point* Points, int Number, int Color,
00141 Opts::ColorSchemes ColorScheme) const
00142 {
00143 painter->setBrush (getColor (Color, ColorScheme));
00144 QPointArray qpa(Number);
00145 Points_to_QPointArray (Points, Number, qpa);
00146 painter->drawPolygon (qpa);
00147 }
00148
00149 void QtDasherScreen::mousePressEvent (QMouseEvent *)
00150 {
00151 paused=false;
00152 interface->Unpause(get_time());
00153 }
00154
00155 void QtDasherScreen::mouseReleaseEvent(QMouseEvent *e)
00156 {
00157 QPoint p = e->pos();
00158 interface->PauseAt(p.x(), p.y());
00159 paused=true;
00160 }
00161
00162 void QtDasherScreen::timer()
00163 {
00164 if (paused==false) {
00165 QPoint cursorpos;
00166 cursorpos=this->cursor().pos();
00167 cursorpos=mapFromGlobal(cursorpos);
00168
00169 interface->TapOn(cursorpos.x(), cursorpos.y(), get_time());
00170 }
00171 }
00172
00173
00174
00175
00176
00177
00178
00179
00180