Ejemplo n.º 1
0
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+ 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
int option_detect(int argc, char **argv, struct option_info *info){
  int i;

  for(i=1;i<argc;i++){
    OPT_CHECK(command, argv[i], info);
    OPT_CHECK(mode, argv[i], info);
    OPT_CHECK(type, argv[i], info);
    OPT_CHECK(debounce, argv[i], info);
    OPT_CHECK(handler, argv[i], info);
    printf("unknown option: %s\n",argv[i]);
    return -1;
  }

  switch(info->command){
  case OPT_SET:
    if(info->gpio_no == COM_SUB_ALL) NOT_MATCH_OPT(command);
    switch(info->mode){
    case MODE_SUB_INPUT:
      switch(info->type){
      case TYPE_SUB_LOW:
      case TYPE_SUB_HIGH:
	NOT_MATCH_OPT(type);
	return -1;
      }
      if(info->handler == NULL){
	if(info->type){ IGNORE_OPT(type, info); }
	if(info->debounce) { IGNORE_OPT(debounce, info); }
      }
      break;
    case MODE_SUB_OUTPUT:
      switch(info->type){
      case TYPE_SUB_LOW_LEVEL:
      case TYPE_SUB_HIGH_LEVEL:
      case TYPE_SUB_FALLING_EDGE:
      case TYPE_SUB_RISING_EDGE:
	NOT_MATCH_OPT(type);
	return -1;
      }
      if(info->debounce){ IGNORE_OPT(debounce, info); }
      if(info->handler){ IGNORE_OPT(handler, info); }
      break;
    }
    break;
  case OPT_GET:
    if(info->mode){ IGNORE_OPT(mode, info); }
    if(info->type){ IGNORE_OPT(type, info); }
    if(info->debounce){ IGNORE_OPT(debounce, info); }
    if(info->handler){ IGNORE_OPT(handler, info); }
    break;
  }
  return 0;
}
Ejemplo n.º 2
0
void OpenconnectAuthWidget::processAuthForm(struct oc_auth_form *form)
{
    Q_D(OpenconnectAuthWidget);
    deleteAllFromLayout(d->ui.loginBoxLayout);
    if (form->banner) {
        addFormInfo(QLatin1String("dialog-information"), form->banner);
    }
    if (form->message) {
        addFormInfo(QLatin1String("dialog-information"), form->message);
    }
    if (form->error) {
        addFormInfo(QLatin1String("dialog-error"), form->error);
    }

    struct oc_form_opt *opt;
    QFormLayout *layout = new QFormLayout();
    QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    bool focusSet = false;
    for (opt = form->opts; opt; opt = opt->next) {
        if (opt->type == OC_FORM_OPT_HIDDEN || IGNORE_OPT(opt)) {
            continue;
        }
        QLabel *text = new QLabel(this);
        text->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
        text->setText(QString(opt->label));
        QWidget *widget = 0;
        const QString key = QString("form:%1:%2").arg(QLatin1String(form->auth_id)).arg(QLatin1String(opt->name));
        const QString value = d->secrets.value(key);
        if (opt->type == OC_FORM_OPT_PASSWORD || opt->type == OC_FORM_OPT_TEXT) {
            PasswordField *le = new PasswordField(this);
            le->setText(value);
            if (opt->type == OC_FORM_OPT_PASSWORD) {
                le->setPasswordModeEnabled(true);
            }
            if (!focusSet && le->text().isEmpty()) {
                le->setFocus(Qt::OtherFocusReason);
                focusSet = true;
            }
            widget = qobject_cast<QWidget*>(le);
        } else if (opt->type == OC_FORM_OPT_SELECT) {
            QComboBox *cmb = new QComboBox(this);
            struct oc_form_opt_select *sopt = reinterpret_cast<oc_form_opt_select *>(opt);
            for (int i = 0; i < sopt->nr_choices; i++) {
                cmb->addItem(QString::fromUtf8(FORMCHOICE(sopt, i)->label), QString::fromUtf8(FORMCHOICE(sopt, i)->name));
                if (value == QString::fromUtf8(FORMCHOICE(sopt, i)->name)) {
                    cmb->setCurrentIndex(i);
                    if (sopt == AUTHGROUP_OPT(form) && i != AUTHGROUP_SELECTION(form)) {
                        QTimer::singleShot(0, this, &OpenconnectAuthWidget::formGroupChanged);
                    }
                }
            }
            if (sopt == AUTHGROUP_OPT(form)) {
                connect(cmb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &OpenconnectAuthWidget::formGroupChanged);
            }
            widget = qobject_cast<QWidget*>(cmb);
        }
        if (widget) {
            widget->setProperty("openconnect_opt", (quintptr)opt);
            widget->setSizePolicy(policy);
            layout->addRow(text, widget);
        }
    }
    d->ui.loginBoxLayout->addLayout(layout);
    d->passwordFormIndex = d->ui.loginBoxLayout->count() - 1;

    QDialogButtonBox *box = new QDialogButtonBox(this);
    QPushButton *btn = box->addButton(QDialogButtonBox::Ok);
    btn->setText(i18n("Login"));
    btn->setDefault(true);
    d->ui.loginBoxLayout->addWidget(box);
    box->setProperty("openconnect_form", (quintptr)form);

    connect(box, &QDialogButtonBox::accepted, this, &OpenconnectAuthWidget::formLoginClicked);
}