void CALL BSGL_Impl::Control_GetState() { ScreenWidget* sw = ScreenWidget::instance(); QPoint mousePos = sw->mapFromGlobal(sw->cursor().pos()); _mouse_x = mousePos.x(); _mouse_y = mousePos.y(); if (qtLeftButton) { _key_buf[INP_MOUSEL] = _key_buf[INP_MOUSEL] << 1 | 1; }else { _key_buf[INP_MOUSEL] = _key_buf[INP_MOUSEL] << 1; } if (qtRightButton) { _key_buf[INP_MOUSER] = _key_buf[INP_MOUSER] << 1 | 1; }else { _key_buf[INP_MOUSER] = _key_buf[INP_MOUSER] << 1; } PROC_KEY(A); PROC_KEY(B); PROC_KEY(C); PROC_KEY(D); PROC_KEY(E); PROC_KEY(F); PROC_KEY(G); PROC_KEY(H); PROC_KEY(I); PROC_KEY(J); PROC_KEY(K); PROC_KEY(L); PROC_KEY(M); PROC_KEY(N); PROC_KEY(O); PROC_KEY(P); PROC_KEY(Q); PROC_KEY(R); PROC_KEY(S); PROC_KEY(T); PROC_KEY(U); PROC_KEY(V); PROC_KEY(W); PROC_KEY(X); PROC_KEY(Y); PROC_KEY(Z); PROC_KEY(0); PROC_KEY(1); PROC_KEY(2); PROC_KEY(3); PROC_KEY(4); PROC_KEY(5); PROC_KEY(6); PROC_KEY(7); PROC_KEY(8); PROC_KEY(9); }
void ScreenBoard::ensureMouseOnAScreen() { // Find out if the mouse is on a screen m_mouseOnAScreen = false; int i, size = m_screenWidgets.size(); for (i = 0; i < size; ++i) { ScreenWidget *screenWidget = m_screenWidgets[i]; if (screenWidget) m_mouseOnAScreen |= screenWidget->mouseOnScreen(); } if (!m_mouseOnAScreen) // Ensure that there is a screen under the mouse cursor. // We need a slot invocation, since this method could be called in an event // handler. QMetaObject::invokeMethod(this, "trackCursor", Qt::QueuedConnection); }
void ScreenWidget::mouseDoubleClickEvent(QMouseEvent *e) { if(!m_curMode) { qDebug()<<"ScreenWidget::mouseDoubleClickEvent"; return QWidget::mouseDoubleClickEvent(e); } ScreenWidget* widget; int count = m_ContainWidgetList.count(); if(count ==0){ return; } for(int i=0;i<count;i++){ widget= m_ContainWidgetList.at(i); widget->UsingFlag(true); } m_ContainWidgetList.clear(); emit changeSpanSignal(this); }
int main( int argc, char **argv ) { int i; QString m1,n1,o1; struct args pargs; QApplication *a; InitWidget *b; ScreenWidget *c; TextWidget *textOut; QProgressDialog *qProg; QPixmap *qpxMeshIcon=NULL; struct model_error model1,model2; int rcode; struct outbuf *log; struct prog_reporter pr; /* Initialize application */ a = NULL; b = NULL; c = NULL; qProg = NULL; memset(&model1,0,sizeof(model1)); memset(&model2,0,sizeof(model2)); memset(&pr,0,sizeof(pr)); log = NULL; i = 0; while (i<argc) { if (strcmp(argv[i],"-t") == 0) /* text version requested */ break; if (strcmp(argv[i],"-h") == 0) /* just asked for command line help */ break; i++; } if (i == argc) { /* no text version requested, initialize QT */ a = new QApplication( argc, argv ); /* Load pixmap for icon */ qpxMeshIcon = new QPixmap((const char**)meshIcon); if (a != NULL) a->connect( a, SIGNAL(lastWindowClosed()), a, SLOT(quit()) ); } else { a = NULL; /* No QT app needed */ } /* Parse arguments */ parse_args(argc,argv,&pargs); /* Display starting dialog if insufficient arguments */ if (pargs.m1_fname != NULL || pargs.m2_fname != NULL) { if (pargs.m1_fname == NULL || pargs.m2_fname == NULL) { fprintf(stderr,"ERROR: missing file name(s) in command line\n"); exit(1); } if (!pargs.do_wlog) { log = outbuf_new(stdio_puts,stdout); } else { textOut = new TextWidget(); textOut->setIcon(*qpxMeshIcon); log = outbuf_new(TextWidget_puts,textOut); textOut->show(); } if (pargs.no_gui) { pr.prog = stdio_prog; pr.cb_out = stdout; } else { qProg = new QProgressDialog("Calculating distance",0,100); qProg->setIcon(*qpxMeshIcon); qProg->setMinimumDuration(1500); pr.prog = QT_prog; pr.cb_out = qProg; } mesh_run(&pargs, &model1, &model2, log, &pr); } else { b = new InitWidget(pargs, &model1, &model2); b->setIcon(*qpxMeshIcon); b->show(); } if (a != NULL) { if (pargs.m1_fname != NULL || pargs.m2_fname != NULL) { c = new ScreenWidget(&model1, &model2, &pargs); c->setIcon(*qpxMeshIcon); a->setMainWidget(c); c->show(); } rcode = a->exec(); } else { rcode = 0; } /* Free widgets */ outbuf_delete(log); delete qProg; delete qpxMeshIcon; delete b; delete c; delete a; // QApplication must be last QT thing to delete /* Free model data */ if (model1.mesh != NULL) __free_raw_model(model1.mesh); free(model1.verror); free(model1.info); free_face_error(model1.fe); if (model2.mesh != NULL) __free_raw_model(model2.mesh); free(model2.verror); free(model2.info); /* Return exit code */ return rcode; }
// Refresh the screen widgets pool, depending on stored drawings void ScreenBoard::reallocScreenWidgets() { QDesktopWidget *desktop = QApplication::desktop(); int i, screensCount = desktop->numScreens(); // Delete exceeding screens and resize to screensCount for (i = screensCount; i < m_screenWidgets.size(); ++i) { m_screenWidgets[i]->hide(); m_screenWidgets[i]->deleteLater(); // Ensures no event about it is pending. // Note that updates may be invoked in event handlers. } m_screenWidgets.resize(desktop->numScreens()); // Re-initialize the screen widgets list for (i = 0; i < screensCount; ++i) { ScreenWidget *screenWidget = m_screenWidgets[i]; if (screenWidget) screenWidget->drawings().clear(); } // Turn on a ScreenWidget for each screen crossed by any drawing int j, drawingsCount = m_drawings.size(); for (i = 0; i < screensCount; ++i) { ScreenWidget *screenWidget = m_screenWidgets[i]; const QRect &screenGeom = desktop->screenGeometry(i); for (j = 0; j < drawingsCount; ++j) { Drawing *drawing = m_drawings[j]; if (drawing->acceptScreenEvents(screenGeom)) { // Allocate the associated screen widget if necessary if (!screenWidget) { m_screenWidgets[i] = screenWidget = new ScreenWidget(0, m_grabbing); if (m_grabbing) screenWidget->setCursor(m_cursor); screenWidget->setGeometry(screenGeom); screenWidget->show(); } // Add the drawing to the widget screenWidget->drawings().push_back(drawing); } } } // Remove screens without drawings for (i = 0; i < screensCount; ++i) { ScreenWidget *screenWidget = m_screenWidgets[i]; if (screenWidget && screenWidget->drawings().empty()) { screenWidget->hide(); screenWidget->deleteLater(); m_screenWidgets[i] = 0; } } }