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(); }