source: trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_mouseEvent.cpp @ 81

Last change on this file since 81 was 81, checked in by rosiere, 16 years ago
  • Finish Environment (and test)
  • Continue predictor_unit
  • Add external tools
  • svn keyword "Id" set
  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 9.6 KB
Line 
1#include "window.h"
2
3using namespace std;
4using namespace morpheo::tools::viewer::parser;
5using namespace morpheo::tools::viewer::bdd;
6using namespace morpheo::tools::viewer::graphics;
7
8/*mouse press event handler*/
9void Window::mousePressEvent (QMouseEvent *e){
10  if(paint && (p.getArchitecture() != NULL)){
11
12    compo = p.getComponent();
13   
14    QMouseEvent *mouseEvent = (QMouseEvent *) e;
15   
16    mouseX = mouseEvent->x();
17    mouseY = mouseEvent->y();
18   
19    bool bc,b3 = false;
20    int cx,cy,tx,ty;
21    string s2,cc,nc,type,comm;
22    bool found = false;
23
24    /*search the component under the mouse focus*/
25    for(QList<Component>::iterator it=compo->begin();it!=compo->end();++it){
26      Coord *co = it->get_Position();
27      int px = co->get_hg_x();
28      int py = co->get_hg_y();
29      int taillex = co->get_size_x();
30      int tailley = co->get_size_y();
31      QString t=QString::fromStdString(it->getName());
32      //QString t=QString::fromStdString(it->getType()).toLower();
33      /*go to the next level if comoponent doubleclicked*/
34      if(e->type() == QMouseEvent::MouseButtonDblClick && e->button() == Qt::LeftButton){
35       
36        if(mouseX >= px + MARGEX  && mouseY >= py +MARGEY && mouseX <= px+taillex + MARGEX  && mouseY <= py+tailley + MARGEY) {
37         
38          bc = false;
39          paint = false;
40          repaint();
41          found=true;
42          this->setDisabled(true);
43        }
44      }
45      if(found){ 
46        mess = new QWidget();
47        mess->setFixedSize(200,50);
48        mess->move(200,50);
49        QBoxLayout *b = new QBoxLayout(QBoxLayout::TopToBottom,0);
50        QLabel *l = new QLabel();
51        l->setText("please wait while charging");
52        b->addWidget(l);
53        mess->setLayout(b);
54        mess->show();
55        mess_open = true;
56
57        p=base->get_BasePos(t.toStdString());
58        entity = p.getEntity();
59        c = new Coord(250,250,250,250);
60        port_east = entity->getPortEast(c);
61        port_west = entity->getPortWest(c);
62        port_north = entity->getPortNorth(c);
63        port_south = entity->getPortSouth(c);
64        if(cpt_level!=0)
65          tab[cpt_level]=father;
66        father = current;
67        current = QString::fromStdString(t.toStdString());
68        cpt_level++;
69        tab[cpt_level] = father;
70        paint = true;
71        repaint();
72        erase_line(lt,ltype);
73        erase_line(ln,lname);
74        erase_comment();
75        found = false;
76        this->setDisabled(false);
77        component_clicked = false;
78      }
79      /*search and display the informations of the component clicked*/
80      if(e->type() == QMouseEvent::MouseButtonPress && e->button() == Qt::LeftButton){
81        if(mouseX >= px + MARGEX  && mouseY >= py +MARGEY && mouseX <= px+taillex + MARGEX  && mouseY <= py+tailley + MARGEY) {
82          bc = true;
83          nc = it->getName();
84          cx = px;
85          cy = py;
86          tx = taillex;
87          ty = tailley;
88          type = it->getType();
89          BaseP tp = base->get_BasePos(t.toStdString());
90          if(&tp != NULL)
91            cc=tp.getComment();
92          component_clicked = true;
93        }
94       
95        for(QList<Port>::iterator it=port_east.begin(); it!=port_east.end(); ++it){
96          portX = it->get_x();
97          portY = it->get_y();
98          if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
99            b3 = true;
100            s2 = it->getName();
101            comm = it->getComment();
102            type = it->getDirection();
103          }
104        } 
105   
106        for(QList<Port>::iterator it=port_west.begin(); it!=port_west.end(); ++it){
107          portX = it->get_x() ;
108          portY = it->get_y() ;
109          if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 + MARGEY){
110            b3 = true;
111            s2 = it->getName();
112            comm = it->getComment();
113            type = it->getDirection();
114          }
115        }
116   
117        for(QList<Port>::iterator it=port_north.begin(); it!=port_north.end(); ++it){
118          portX = it->get_x() ;
119          portY = it->get_y() ;
120          if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 +MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 +MARGEY){
121            b3 = true;
122            s2 = it->getName();
123            type = it->getDirection();
124            comm = it->getComment();
125          }
126        }
127   
128        for(QList<Port>::iterator it=port_south.begin(); it!=port_south.end(); ++it){
129          portX = it->get_x() ;
130          portY = it->get_y() ;
131          if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
132            b3 = true;
133            s2 = it->getName();
134            comm = it->getComment();
135            type = it->getDirection();
136          }
137        }
138      }
139    }
140    if(bc){
141      write_name("component",nc);
142      write_type(type);
143      write_comment(cc);
144    }
145    if(b3){
146      write_name("signal",s2);
147      write_type(type);
148      write_comment(comm);
149      component_clicked = true;
150    }
151  }
152}
153
154/*mouse move event handler*/
155void Window::mouseMoveEvent(QMouseEvent *e){
156  bool b  = false;
157  bool b2 = false;
158  bool b3 = false;
159  int px,py,taillex,tailley,ppx,ppy;
160  string s,s2,c,type;
161  string comm;
162
163   if(paint && !component_clicked){
164     if(p.getArchitecture() != NULL){
165
166       compo = p.getComponent();
167       
168       QMouseEvent *mouseEvent = (QMouseEvent *) e;
169       
170       mouseX = mouseEvent->x();
171       mouseY = mouseEvent->y();
172       
173       /*display the component under the mouse focus*/
174       for(QList<Component>::iterator it=compo->begin();it!=compo->end();++it){
175         Coord *co = it->get_Position();
176         px = co->get_hg_x();
177         py = co->get_hg_y();
178         taillex = co->get_size_x();
179         tailley = co->get_size_y();
180         QString t=QString::fromStdString(it->getName());
181         //QString t=QString::fromStdString(it->getType()).toLower();
182         QList<PortMap> *pm=it->getPortMap();
183         
184         if(e->type() == QMouseEvent::MouseMove){
185           if(mouseX >= px + MARGEX  && mouseY >= py +MARGEY && mouseX <= px+taillex + MARGEX  && mouseY <= py+tailley + MARGEY) {
186             b = true;
187             s = it->getName();
188             type = it->getType();
189             BaseP tp=base->get_BasePos(t.toStdString());
190             if(&tp!=NULL)
191               c=tp.getComment();
192             ppx = px;
193             ppy = py;
194             break;
195           }
196           else{
197             for (QList<PortMap>::iterator it3=pm->begin();it3!=pm->end();++it3) {
198               Signal *sig=base->getSignal(&p,it->getName(),new PortMap(*it3));
199               if(mouseX >= sig->get_src_x() - 15  + MARGEX  && mouseY >= sig->get_src_y() - 15 + MARGEY && mouseX <= sig->get_src_x() + 15  + MARGEX  && mouseY <= sig->get_src_y() + 15 +MARGEY){
200                 b2 = true;
201                 s = it3->getName();
202                 break;
203               }
204             }
205           }   
206         }
207       }
208       
209       if(b){
210         write_name("component",s);
211         write_type(type);
212         write_comment(c);
213         b3 = false;
214         b2 = false;
215       }
216     
217       if(b2){
218         write_name("signal",s);
219         erase_line(lt,ltype);
220         erase_comment();
221         b3 = false;
222         b = false;
223       }
224     
225       if(!b && !b2){
226         erase_line(lt,ltype);
227         erase_line(ln,lname);
228         erase_comment();
229       }
230     }
231   
232     p=base->get_BasePos(current.toStdString());
233     Entity *ent = p.getEntity();
234     Coord *c = new Coord(250,250,250,250);
235     port_east = ent->getPortEast(c);
236     port_west = ent->getPortWest(c);
237     port_north = ent->getPortNorth(c);
238     port_south = ent->getPortSouth(c);
239
240     /*display the signal under the mouse focus*/
241     for(QList<Port>::iterator it=port_east.begin(); it!=port_east.end(); ++it){
242       portX = it->get_x();
243       portY = it->get_y();
244       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
245         b3 = true;
246         s2 = it->getName();
247         comm = it->getComment();
248         type = it->getDirection();
249       }
250     } 
251   
252     for(QList<Port>::iterator it=port_west.begin(); it!=port_west.end(); ++it){
253       portX = it->get_x() ;
254       portY = it->get_y() ;
255       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 + MARGEY){
256         b3 = true;
257         s2 = it->getName();
258         comm = it->getComment();
259         type = it->getDirection();
260       }
261     }
262   
263     for(QList<Port>::iterator it=port_north.begin(); it!=port_north.end(); ++it){
264       portX = it->get_x() ;
265       portY = it->get_y() ;
266       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 +MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 +MARGEY){
267         b3 = true;
268         s2 = it->getName();
269         comm = it->getComment();
270         type = it->getDirection();
271       }
272     }
273   
274     for(QList<Port>::iterator it=port_south.begin(); it!=port_south.end(); ++it){
275       portX = it->get_x() ;
276       portY = it->get_y() ;
277       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
278         b3 = true;
279         s2 = it->getName();
280         comm = it->getComment();
281         type = it->getDirection();
282       }
283     }
284     if(b3){
285       b = false;
286       erase_line(ln,lname);
287       write_type(type);
288       erase_comment();
289       write_comment(comm);
290       write_name("signal",s2);
291     }
292   }
293}
294
295
296/*return to the previous level if back button has been clicked*/
297void Window::_back(){
298  if(cpt_level==0){
299    QMessageBox *m = new QMessageBox(this);
300    m->setText("can't go up, you're on the top level !");
301    m->addButton("ok",QMessageBox::YesRole);
302    m->show(); 
303  }
304 
305  else{
306    this->setDisabled(true);
307    paint = false;
308    repaint();
309    cpt_level--;
310    mess_charg = new QWidget();
311    mess_charg->setFixedSize(200,50);
312    mess_charg->move(200,50);
313    charg_open = true;
314    QBoxLayout *b = new QBoxLayout(QBoxLayout::TopToBottom,0);
315    QLabel *l = new QLabel();
316    l->setText("please wait while charging");
317    b->addWidget(l);
318    mess_charg->setLayout(b);
319    mess_charg->show();
320   
321    p = base->get_BasePos(father.toStdString());
322    entity = p.getEntity();
323    c = new Coord(250,250,250,250);
324    port_east = entity->getPortEast(c);
325    port_west = entity->getPortWest(c);
326    port_north = entity->getPortNorth(c);
327    port_south = entity->getPortSouth(c);
328    father = tab[cpt_level];
329    current = QString::fromStdString(entity->getName());
330    paint = true;
331    repaint();
332    this->setDisabled(false);
333    component_clicked = false;
334  }
335}
336
Note: See TracBrowser for help on using the repository browser.