]> rtime.felk.cvut.cz Git - vajnamar/orte.git/blob - orte/contrib/shape/MyQFrame.cpp
23e8d7559c89eb7bb285bb5900498d433431a507
[vajnamar/orte.git] / orte / contrib / shape / MyQFrame.cpp
1 /****************************************************************
2 **
3 ** Implementation MyQFrame class
4 **
5 ****************************************************************/
6
7 #include "MyQFrame.h"
8 #include <QPolygon>
9 #include <QMouseEvent>
10 #include <QPaintEvent>
11 #include <QWheelEvent>
12 #include <QKeyEvent>
13
14 MyQFrame::MyQFrame( QWidget *parent)
15         : QFrame( parent)
16 {
17     mousePressed=0;
18     objects[0]=objects[1]=objects[2]=objects[3]=objects[4]=0;
19     rotations[0]=rotations[1]=rotations[2]=rotations[3]=rotations[4]=0;
20     zooms[0]=zooms[1]=zooms[2]=zooms[3]=zooms[4]=1;
21     rotation_mode=0;
22     wheel_delta=0;
23     scale_factor=1;
24
25     setFocusPolicy(Qt::StrongFocus);
26
27     connect(this,SIGNAL(changed()),this,SLOT(update()));
28 }
29
30
31 void MyQFrame::activateObject(int object,int color, int shape) {
32     if (object>4) return;
33     objects[object]=1;
34     switch(color) {
35         case 0:colors[object]=QColor(0,0,255);break;
36         case 1:colors[object]=QColor(0,255,0);break;
37         case 2:colors[object]=QColor(255,0,0);break;
38         case 3:colors[object]=QColor(0,0,0);break;
39         case 4:colors[object]=QColor(255,255,0);break;
40     }
41     shapes[object]=shape;
42 }
43
44 void MyQFrame::deactivateObject(int object) {
45     if (object>4) return;
46     objects[object]=0;
47     emit changed();
48 }
49
50 void MyQFrame::setPosition(int object,QRect position) {
51     positions[object]=position;
52     emit changed();
53 }
54
55 void MyQFrame::setZoom(int object,double zoom) {
56     zooms[object]=zoom;
57     emit changed();
58 }
59
60 void MyQFrame::setRotation(int object,int rotation) {
61     rotations[object]=rotation;
62     emit changed();
63 }
64
65 void MyQFrame::paintEvent(QPaintEvent*)
66 {
67     QPainter p(this);
68         
69     for(int i=0;i<5;i++) {
70         if (!objects[i]) continue;
71         p.setBrush(colors[i]);
72         p.setPen(Qt::NoPen);
73
74         p.save();
75         p.translate(positions[i].center().x(),positions[i].center().y());
76         p.rotate(rotations[i]);
77         p.scale(zooms[i],zooms[i]);
78
79         switch(shapes[i]){
80             case 0://rectangle
81                 p.drawRect(positions[i].topLeft().x()-positions[i].center().x(),
82                            positions[i].topLeft().y()-positions[i].center().y(),
83                            positions[i].width(), positions[i].height());
84                 break;
85             case 1: //ellipse
86                 p.drawEllipse(positions[i].topLeft().x()-positions[i].center().x(),
87                               positions[i].topLeft().y()-positions[i].center().y(),
88                               positions[i].width(), positions[i].height());
89                 break;
90             case 2: //triangle
91                 QPolygon pt;
92                 pt.putPoints(0,3, 0, positions[i].top()-positions[i].center().y(),
93                                   positions[i].right()-positions[i].center().x(),positions[i].bottom()-positions[i].center().y(),
94                                   positions[i].left()-positions[i].center().x(),positions[i].bottom()-positions[i].center().y());
95                 p.drawPolygon(pt);
96                 break;
97         }
98         p.restore();
99
100         QString strPos;
101         strPos="X:" + QString::number(positions[i].center().x())+" " +
102                "Y:"+QString::number(positions[i].center().y());
103         p.drawText(positions[i].left()-(70-positions[i].width())/2,positions[i].top()-1,strPos);
104     }
105
106 }
107
108 void MyQFrame::mouseMoveEvent(QMouseEvent *e)
109 {
110     if(mousePressed==0) return; 
111     mouseX=e->pos().x();
112     mouseY=e->pos().y();
113 }
114
115 void MyQFrame::mousePressEvent (QMouseEvent *e)
116 {
117     mousePressed=1;
118     mouseX=e->pos().x();
119     mouseY=e->pos().y();
120 }
121
122 void MyQFrame::mouseReleaseEvent (QMouseEvent *)
123 {
124     mousePressed=0;
125 }
126
127 void MyQFrame::wheelEvent (QWheelEvent *e)
128 {
129     if(!rotation_mode)
130       wheel_delta += e->delta()/120;
131     else
132       scale_factor += (double)e->delta()/1200;
133     e->accept();
134 }
135
136 void MyQFrame::keyPressEvent (QKeyEvent *e)
137 {
138     if (e->key() == Qt::Key_Control)
139       rotation_mode=1;
140     else
141       QFrame::keyPressEvent(e);
142 }
143
144 void MyQFrame::keyReleaseEvent (QKeyEvent *e)
145 {
146     if (e->key() == Qt::Key_Control)
147       rotation_mode=0;
148     else
149       QFrame::keyPressEvent(e);
150 }