Beispiel #1
0
void PropertyWindow::rebuildTabs()
{
    _propertyTabs->blockSignals(true);
    while (_propertyTabs->count()) {
        QWidget *widget = _propertyTabs->widget(0);
        _propertyTabs->removeTab(0);
        delete widget;
    }
    if (_selection.empty())
        return;

    PrimitiveProperties *primProps = new PrimitiveProperties(_propertyTabs, _scene, _selection);
    connect(primProps, SIGNAL(primitiveNameChange(Primitive *)), this, SLOT(changePrimitiveName(Primitive *)));
    connect(primProps, SIGNAL(triggerRedraw()), _parent.previewWindow(), SLOT(update()));
    _propertyTabs->addTab(primProps, "Primitive");

    VerticalScrollArea *scrollArea = new VerticalScrollArea(_propertyTabs);
    BsdfProperties *bsdfProps = new BsdfProperties(scrollArea, _scene, _selection);
    connect(bsdfProps, SIGNAL(triggerRedraw()), _parent.previewWindow(), SLOT(update()));

    scrollArea->setWidget(bsdfProps);
    _propertyTabs->addTab(scrollArea, "Material");
    if (_openTab < _propertyTabs->count())
        _propertyTabs->setCurrentIndex(_openTab);
    else
        _openTab = 0;

    _propertyTabs->blockSignals(false);
}
int NvpChoiceDialog::choose(QVariant* new_value)
{
    if (!new_value) {
        return QDialog::DialogCode::Rejected;
    }
    m_new_value = new_value;
    setWindowTitle(m_title);

    QWidget* contentwidget = new QWidget();
    QVBoxLayout* contentlayout = new QVBoxLayout();
    contentwidget->setLayout(contentlayout);
    for (int i = 0; i < m_options.size(); ++i) {
        const NameValuePair& nvp = m_options.at(i);
        ClickableLabelWordWrapWide* label = new ClickableLabelWordWrapWide(
                    nvp.name());
        label->setSizePolicy(UiFunc::horizExpandingHFWPolicy());
        contentlayout->addWidget(label);
        connect(label, &ClickableLabelWordWrapWide::clicked,
                std::bind(&NvpChoiceDialog::itemClicked, this, i));
    }

    VerticalScrollArea* scroll = new VerticalScrollArea();
    scroll->setWidget(contentwidget);

    QVBoxLayout* mainlayout = new QVBoxLayout();
    mainlayout->addWidget(scroll);
    setLayout(mainlayout);

    mainlayout->addStretch();

    // Offer a cancel button
    QDialogButtonBox* standard_buttons = new QDialogButtonBox(
                QDialogButtonBox::Cancel);
    connect(standard_buttons, &QDialogButtonBox::rejected,
            this, &NvpChoiceDialog::reject);
    mainlayout->addWidget(standard_buttons);

    return exec();
}
void Questionnaire::build()
{
    // ========================================================================
    // Clean up any old page widgets
    // ========================================================================
    if (m_p_header) {
        m_p_header->deleteLater();  // later, in case it's currently calling us
    }
    if (m_p_content) {
        m_p_content->deleteLater();
    }
    if (m_mainlayout) {
        m_mainlayout->deleteLater();
    }
    if (m_background_widget) {
        m_background_widget->deleteLater();
    }

    // ========================================================================
    // Create new
    // ========================================================================
    m_background_widget = new QWidget();
    m_outer_layout->addWidget(m_background_widget);
    m_outer_layout->setContentsMargins(UiConst::NO_MARGINS);
    m_mainlayout = new QVBoxLayout();
    m_mainlayout->setContentsMargins(UiConst::NO_MARGINS);
    m_background_widget->setLayout(m_mainlayout);

    // Get page
    if (m_current_pagenum_zero_based < 0 ||
            m_current_pagenum_zero_based > m_pages.size()) {
        // Duff page!
        qWarning() << Q_FUNC_INFO << "Bad page number:"
                   << m_current_pagenum_zero_based;
        m_mainlayout->addWidget(new LabelWordWrapWide("BUG! Bad page number"));
        m_built = true;
        return;
    }
    QuPagePtr page = currentPagePtr();

    // Background
    QuPage::PageType page_type = page->type();
    if (page_type == QuPage::PageType::Inherit) {
        page_type = m_type;
    }
    QString background_css_name;
    switch (page_type) {
    case QuPage::PageType::Patient:
    case QuPage::PageType::ClinicianWithPatient:
    default:
        background_css_name = "questionnaire_background_patient";
        break;
    case QuPage::PageType::Clinician:
        background_css_name = "questionnaire_background_clinician";
        break;
    case QuPage::PageType::Config:
        background_css_name = "questionnaire_background_config";
        break;
    }
    m_background_widget->setObjectName(background_css_name);

    // Header
    QString header_css_name;
    if (page_type == QuPage::PageType::ClinicianWithPatient) {
        // Header has "clinician" style; main page has "patient" style
        header_css_name = "questionnaire_background_clinician";
    } else {
        header_css_name = background_css_name;
    }
    m_p_header = new QuestionnaireHeader(
        this, page->title(),
        m_read_only, m_jump_allowed, m_within_chain,
        header_css_name);
    m_mainlayout->addWidget(m_p_header);
    connect(m_p_header, &QuestionnaireHeader::cancelClicked,
            this, &Questionnaire::cancelClicked);
    connect(m_p_header, &QuestionnaireHeader::jumpClicked,
            this, &Questionnaire::jumpClicked);
    connect(m_p_header, &QuestionnaireHeader::previousClicked,
            this, &Questionnaire::previousClicked);
    connect(m_p_header, &QuestionnaireHeader::nextClicked,
            this, &Questionnaire::nextClicked);
    connect(m_p_header, &QuestionnaireHeader::finishClicked,
            this, &Questionnaire::finishClicked);

    // Content
    // The QScrollArea (a) makes text word wrap, by setting a horizontal size
    // limit (I presume), and (b) deals with the vertical.
    // But it doesn't get the horizontal widths right. So we use a substitute.
    VerticalScrollArea* scroll = new VerticalScrollArea();
    scroll->setObjectName(background_css_name);
    QWidget* pagewidget = page->widget(this);  // adds the content
#ifdef DEBUG_PAGE_LAYOUT
    ShowWatcher* showwatcher = new ShowWatcher(pagewidget, true);
    Q_UNUSED(showwatcher);
#endif
    scroll->setWidget(pagewidget);
    connect(page.data(), &QuPage::elementValueChanged,
            this, &Questionnaire::resetButtons,
            Qt::UniqueConnection);

    m_mainlayout->addWidget(scroll);

    // In case the questionnaire is vertically short:
    m_mainlayout->addStretch();

    m_built = true;

    resetButtons();

    emit pageAboutToOpen();
}