//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// //+ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// 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; }
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); }