Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
// 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;
    }
  }
}