virtual int setup() { QScrollArea *qw; QWidget *qChild; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; QLayout *qLayout; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QScrollArea(); qChild=new QWidget(); qChild->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); qw->setWidget(qChild); qLayout=new QVBoxLayout(qChild); qw->setWidgetResizable(true); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT5_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT5_DIALOG_WIDGET_LAYOUT, (void*) qLayout); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; }
PaletteBox::PaletteBox(QWidget* parent) : QDockWidget(tr("Palettes"), parent) { setObjectName("palette-box"); setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); QScrollArea* sa = new QScrollArea; sa->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); sa->setContextMenuPolicy(Qt::CustomContextMenu); sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); sa->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); sa->setWidgetResizable(true); setWidget(sa); QWidget* paletteList = new QWidget; sa->setWidget(paletteList); vbox = new QVBoxLayout; paletteList->setLayout(vbox); _dirty = false; vbox->setMargin(0); vbox->setSpacing(1); vbox->addStretch(); paletteList->show(); // connect(sa, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(contextMenu(const QPoint&))); }
EffectStackEdit::EffectStackEdit(QWidget *parent) : QWidget(parent), m_in(0), m_out(0), m_frameSize(QPoint()) { setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); QVBoxLayout *vbox1 = new QVBoxLayout(parent); vbox1->setContentsMargins(0, 0, 0, 0); vbox1->setSpacing(0); QScrollArea *area = new QScrollArea; QWidget *wid = new QWidget(parent); area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); area->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); wid->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); area->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding)); vbox1->addWidget(area); area->setWidget(wid); area->setWidgetResizable(true); m_vbox = new QVBoxLayout(wid); m_vbox->setContentsMargins(0, 0, 0, 0); m_vbox->setSpacing(0); wid->show(); }
NotifyManager::NotifyManager(QWidget *parent) : QWidget(parent), m_dbus(new Notification("com.deepin.dde.Notification", "/com/deepin/dde/Notification", QDBusConnection::sessionBus(), this)) { QWidget *widget = new QWidget; m_connectLayout = new QVBoxLayout(widget); m_connectLayout->setMargin(0); m_connectLayout->setSpacing(1); m_connectLayout->addStretch(); QScrollArea *scrollarea = new QScrollArea; scrollarea->setWidget(widget); scrollarea->setObjectName("scrollarea"); scrollarea->setWidgetResizable(true); scrollarea->setFocusPolicy(Qt::NoFocus); scrollarea->setFrameStyle(QFrame::NoFrame); scrollarea->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding); scrollarea->setContentsMargins(0, 0, 0, 0); scrollarea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollarea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollarea->setStyleSheet("background-color:transparent;"); QScrollBar *bar = scrollarea->verticalScrollBar(); connect(bar, &QScrollBar::valueChanged, this, [=](int value){ if (m_checkIndex && value == bar->maximum()) onLoadAgain(); }); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setMargin(0); mainLayout->setSpacing(0); m_clearButton = new DImageButton; m_clearButton->setText(tr("Clear all")); m_clearButton->setStyleSheet("padding: 4px 0;"); mainLayout->addWidget(m_clearButton, 0, Qt::AlignHCenter); mainLayout->addWidget(scrollarea); setLayout(mainLayout); m_clearButton->setVisible(false); connect(m_clearButton, &DImageButton::clicked, this, &NotifyManager::onCloseAllItem); connect(m_dbus, &Notification::RecordAdded, this, &NotifyManager::onNotifyAdded); m_dbus->setSync(false); QDBusPendingReply<QString> notify = m_dbus->GetAllRecords(); QDBusPendingCallWatcher *notifyWatcher = new QDBusPendingCallWatcher(notify, this); connect(notifyWatcher, &QDBusPendingCallWatcher::finished, this, &NotifyManager::onNotifyGetAllFinished); }
SearchPinyin::SearchPinyin() { QVBoxLayout* vtLayout = new QVBoxLayout(this); QLabel* pinyinLabel = new QLabel(this); pinyinLabel->setText("Pinyin:"); vtLayout->addWidget(pinyinLabel); pinyin = new QLineEdit(this); vtLayout->addWidget(pinyin); QLabel* disambiguateLabel = new QLabel(this); disambiguateLabel->setText("Disambiguate:"); disambiguateLabel->setObjectName(QString::fromUtf8("label")); vtLayout->addWidget(disambiguateLabel); QScrollArea* candidatesScrollArea = new QScrollArea(this); QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); sizePolicy.setHeightForWidth(candidatesScrollArea->sizePolicy().hasHeightForWidth()); candidatesScrollArea->setSizePolicy(sizePolicy); candidatesScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); candidatesScrollArea->setWidgetResizable(true); candidates = new RowedList(font(), false, candidatesScrollArea); candidatesScrollArea->setWidget(candidates); candidatesScrollArea->setWidgetResizable(true); vtLayout->addWidget(candidatesScrollArea); stmt = createStatement( "select utf8 from utf8Table join \ kMandarinTable on kMandarinTable.code = utf8Table.code \ where kMandarinTable.kMandarin = ?;"); connect(pinyin, SIGNAL(textEdited(QString)), this, SLOT(searchTermChanged(QString))); connect(candidates, SIGNAL(characterSelected(QString)), this, SLOT(disambiguated(QString))); }
void Kleo::CryptoConfigModule::init( Layout layout ) { Kleo::CryptoConfig * const config = mConfig; const KPageView::FaceType type=determineJanusFace( config, layout ); setFaceType(type); QVBoxLayout * vlay = 0; QWidget * vbox = 0; if ( type == Plain ) { vbox = new QWidget(this); vlay = new QVBoxLayout( vbox ); vlay->setSpacing( KDialog::spacingHint() ); vlay->setMargin( 0 ); addPage( vbox, i18n("GpgConf Error") ); } const QStringList components = config->componentList(); for ( QStringList::const_iterator it = components.begin(); it != components.end(); ++it ) { //kDebug(5150) <<"Component" << (*it).toLocal8Bit() <<":"; Kleo::CryptoConfigComponent* comp = config->component( *it ); Q_ASSERT( comp ); if ( comp->groupList().empty() ) continue; if ( type != Plain ) { vbox = new QWidget(this); vlay = new QVBoxLayout( vbox ); vlay->setSpacing( KDialog::spacingHint() ); vlay->setMargin( 0 ); KPageWidgetItem *pageItem = new KPageWidgetItem( vbox, comp->description() ); if ( type != Tabbed ) pageItem->setIcon( loadIcon( comp->iconName() ) ); addPage(pageItem); } QScrollArea* scrollArea = type == Tabbed ? new QScrollArea( this ) : new ScrollArea( this ); scrollArea->setWidgetResizable( true ); vlay->addWidget( scrollArea ); CryptoConfigComponentGUI* compGUI = new CryptoConfigComponentGUI( this, comp, scrollArea ); compGUI->setObjectName( *it ); scrollArea->setWidget( compGUI ); scrollArea->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); // KJanusWidget doesn't seem to have iterators, so we store a copy... mComponentGUIs.append( compGUI ); // Set a nice startup size const int deskHeight = QApplication::desktop()->height(); int dialogHeight; if (deskHeight > 1000) // very big desktop ? dialogHeight = 800; else if (deskHeight > 650) // big desktop ? dialogHeight = 500; else // small (800x600, 640x480) desktop dialogHeight = 400; assert( scrollArea->widget() ); if ( type != Tabbed ) scrollArea->setMinimumHeight( qMin( compGUI->sizeHint().height(), dialogHeight ) ); } if ( mComponentGUIs.empty() ) { const QString msg = i18n("The gpgconf tool used to provide the information " "for this dialog does not seem to be installed " "properly. It did not return any components. " "Try running \"%1\" on the command line for more " "information.", components.empty() ? "gpgconf --list-components" : "gpgconf --list-options gpg" ); QLabel * label = new QLabel( msg, vbox ); label->setWordWrap( true); label->setMinimumHeight( fontMetrics().lineSpacing() * 5 ); vlay->addWidget( label ); } }
void CloudDialog::createWidgets() { QLabel * label = 0; bool isConnected = false; m_amazonProviderWidget = new AmazonProviderWidget(this); m_blankProviderWidget = new BlankProviderWidget(this); m_vagrantProviderWidget = new VagrantProviderWidget(this); // BLANK PAGE QWidget * blankPageWidget = new QWidget(); // LOGIN PAGE QHBoxLayout * mainLoginLayout = new QHBoxLayout; mainLoginLayout->setContentsMargins(QMargins(0,0,0,0)); mainLoginLayout->setSpacing(5); QWidget * loginPageWidget = new QWidget; loginPageWidget->setLayout(mainLoginLayout); // LEFT LOGIN LAYOUT m_leftLoginLayout = new QVBoxLayout(); mainLoginLayout->addLayout(m_leftLoginLayout); label = new QLabel; label->setObjectName("H2"); label->setText("Cloud Resources"); m_leftLoginLayout->addWidget(label,0,Qt::AlignTop | Qt::AlignLeft); m_cloudResourceComboBox = new QComboBox(); m_leftLoginLayout->addWidget(m_cloudResourceComboBox,0,Qt::AlignTop | Qt::AlignLeft); //m_cloudResourceComboBox->addItem(NO_PROVIDER); if(showVagrant()) m_cloudResourceComboBox->addItem(VAGRANT_PROVIDER); m_cloudResourceComboBox->addItem(AMAZON_PROVIDER); isConnected = connect(m_cloudResourceComboBox, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(cloudResourceChanged(const QString &))); OS_ASSERT(isConnected); // LOGIN STACKED WIDGET m_loginStackedWidget = new QStackedWidget(); m_leftLoginLayout->addWidget(m_loginStackedWidget); m_loginStackedWidget->addWidget(m_blankProviderWidget->m_loginWidget); m_loginStackedWidget->addWidget(m_vagrantProviderWidget->m_loginWidget); m_loginStackedWidget->addWidget(m_amazonProviderWidget->m_loginWidget); m_loginStackedWidget->setCurrentIndex(m_blankProviderIdx); // RIGHT LOGIN LAYOUT m_rightLoginLayout = new QVBoxLayout(); mainLoginLayout->addLayout(m_rightLoginLayout); m_legalAgreement = new QLabel; m_legalAgreement->hide(); m_legalAgreement->setWordWrap(true); AWSSettings awsSettings; m_legalAgreement->setText(awsSettings.userAgreementText().c_str()); QScrollArea * scrollArea = new QScrollArea(); scrollArea->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); scrollArea->setFixedWidth(TEXT_WIDTH + 15); scrollArea->setMinimumHeight(TEXT_HEIGHT); scrollArea->setStyleSheet("background-color:transparent;"); scrollArea->setWidget(m_legalAgreement); scrollArea->setWidgetResizable(true); scrollArea->setAlignment(Qt::AlignTop); scrollArea->setFrameShape(QFrame::NoFrame); m_rightLoginLayout->addWidget(scrollArea); m_iAcceptCheckBox = new QCheckBox("I Agree"); m_iAcceptCheckBox->hide(); m_rightLoginLayout->addWidget(m_iAcceptCheckBox,0,Qt::AlignTop | Qt::AlignLeft); m_rightLoginLayout->addSpacing(5); isConnected = connect(m_iAcceptCheckBox, SIGNAL(clicked(bool)), this, SLOT(iAcceptClicked(bool))); OS_ASSERT(isConnected); m_rightLoginLayout->addSpacing(5); // SETTINGS PAGE m_mainSettingsLayout = new QVBoxLayout; m_mainSettingsLayout->setContentsMargins(QMargins(0,0,0,0)); m_mainSettingsLayout->setSpacing(5); QWidget * settingsPageWidget = new QWidget; settingsPageWidget->setLayout(m_mainSettingsLayout); // SETTINGS STACKED WIDGET m_settingsStackedWidget = new QStackedWidget(); m_mainSettingsLayout->addWidget(m_settingsStackedWidget); QWidget * widget = new QWidget(); QHBoxLayout * hLayout = new QHBoxLayout; hLayout->setContentsMargins(QMargins(0,0,0,0)); hLayout->setSpacing(5); widget->setLayout(hLayout); hLayout->addWidget(m_blankProviderWidget->m_leftSettingsWidget); hLayout->addWidget(m_blankProviderWidget->m_rightSettingsWidget); m_settingsStackedWidget->addWidget(widget); widget = new QWidget(); hLayout = new QHBoxLayout; hLayout->setContentsMargins(QMargins(0,0,0,0)); hLayout->setSpacing(5); widget->setLayout(hLayout); hLayout->addWidget(m_vagrantProviderWidget->m_leftSettingsWidget); hLayout->addWidget(m_vagrantProviderWidget->m_rightSettingsWidget); m_settingsStackedWidget->addWidget(widget); widget = new QWidget(); hLayout = new QHBoxLayout; hLayout->setContentsMargins(QMargins(0,0,0,0)); hLayout->setSpacing(5); widget->setLayout(hLayout); hLayout->addWidget(m_amazonProviderWidget->m_leftSettingsWidget); hLayout->addWidget(m_amazonProviderWidget->m_rightSettingsWidget); m_settingsStackedWidget->addWidget(widget); m_settingsStackedWidget->setCurrentIndex(m_blankProviderIdx); // PAGE STACKED WIDGET m_pageStackedWidget = new QStackedWidget(); upperLayout()->addWidget(m_pageStackedWidget); m_blankPageIdx = m_pageStackedWidget->addWidget(blankPageWidget); m_loginPageIdx = m_pageStackedWidget->addWidget(loginPageWidget); m_settingsPageIdx = m_pageStackedWidget->addWidget(settingsPageWidget); m_pageStackedWidget->setCurrentIndex(m_loginPageIdx); // BUTTONS this->okButton()->setText("Save"); this->backButton()->setText("Continue"); this->backButton()->setEnabled(false); this->backButton()->show(); // OS SETTINGS #ifdef Q_OS_MAC setWindowFlags(Qt::FramelessWindowHint); #elif defined(Q_OS_WIN32) setWindowFlags(Qt::WindowCloseButtonHint | Qt::MSWindowsFixedSizeDialogHint); #endif cloudResourceChanged(m_cloudResourceComboBox->currentText()); }
// Setup widget void MyWidget::setup(int layoutMargin, QString borderColor, QString backgroundColor) { // Some styling visibleArea = QSize(600,400); this->borderColor = borderColor; this->backgroundColor = (backgroundColor == "" ? "rgba(0,0,0,200)" : backgroundColor); borderLeftRight = -1; borderTopDown = -1; fullscreen = false; // The different QRects rectShown = QRect(); rectHidden = QRect(0,-10,10,10); rectAni = QRect(); // The current geometry and position isShown = false; this->setGeometry(rectHidden); // Fading backOpacityShow = 0.5; backOpacityCur = 0; centerOpacityCur = 0; fade = new QTimeLine; fadeIN = true; fadeEffectCenter = new QGraphicsOpacityEffect; connect(fade, SIGNAL(valueChanged(qreal)), this, SLOT(fadeStep())); connect(fade, SIGNAL(finished()), this, SLOT(aniFinished())); // The current widget look this->setStyleSheet(QString("background: rgba(0,0,0,%1);").arg(255*backOpacityShow)); // the central widget containing all the information center = new QWidget(this); center->setGraphicsEffect(fadeEffectCenter); center->setObjectName("center"); // For some reason, if the border is not defined right here at the beginning, it wont be visible... if(borderColor == "") center->setStyleSheet(QString("#center { background: %1; border-radius: 10px; font-size: 12pt; }").arg(this->backgroundColor)); else center->setStyleSheet(QString("#center {background: %1; border-radius: 15px; font-size: 12pt; border: 2px solid %2; }").arg(this->backgroundColor).arg(borderColor)); // Create and set the scrollarea with main layout QVBoxLayout *central = new QVBoxLayout; central->setMargin(layoutMargin); QScrollArea *scroll = new QScrollArea(this); scroll->setObjectName("scrollWidget"); scroll->setStyleSheet("QWidget#scrollWidget { background: transparent; padding-bottom: 3px; border-radius: 0px; }"); QWidget *scrollWidget = new QWidget(scroll->widget()); scrollWidget->setStyleSheet("background: transparent;"); scroll->setWidgetResizable(true); scroll->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); scrollWidget->setLayout(central); scroll->setWidget(scrollWidget); mainlayout = new QVBoxLayout; if(layoutMargin == 0) mainlayout->setMargin(0); center->setLayout(mainlayout); mainlayout->addWidget(scroll); // This widget gets the main layout set to centralWidget = new QWidget; central->addWidget(centralWidget); // And set the custom scrollbar scrollbar = new CustomScrollbar; scroll->setVerticalScrollBar(scrollbar); // And in case the monitor resolution is so small, that the horizontal scrollbar is visible: CustomScrollbar *scrollbarHor = new CustomScrollbar; scroll->setHorizontalScrollBar(scrollbarHor); }
MainWindow::MainWindow() { setupUi(this); m_dirty = false; m_logWindow->setVisible(false); m_imageView->setFocus(); m_imageView->setHandler(this); ParamGroup *g, *gg; new ParamChoice(this, "output", "edges", "edges|fill|fill+edges", &output); new ParamChoice(this, "input_gamma", "linear-rgb", "srgb|linear-rgb", &input_gamma); g = new ParamGroup(this, "structure_tensor"); new ParamChoice(g, "st_type", "scharr-lab", "central-diff|sobel-rgb|sobel-lab|sobel-L|scharr-rgb|scharr-lab|gaussian-deriv|etf-full|etf-xy", &st_type); new ParamDouble(g, "sigma_c", 2.28, 0, 20, 0.1, &sigma_c); new ParamDouble(g, "precision_sigma_c", sqrt(-2*log(0.05)), 1, 10, 1, &precision_sigma_c); new ParamInt (g, "etf_N", 3, 0, 10, 1, &etf_N); g = new ParamGroup(this, "bilateral_filter", false, &enable_bf); new ParamChoice(g, "type", "xy", "oa|xy|fbl|full", &filter_type); new ParamInt (g, "n_e", 1, 0, 20, 1, &n_e); new ParamInt (g, "n_a", 4, 0, 20, 1, &n_a); new ParamDouble(g, "sigma_dg", 3, 0, 20, 0.05, &sigma_dg); new ParamDouble(g, "sigma_dt", 3, 0, 20, 0.05, &sigma_dt); new ParamDouble(g, "sigma_rg", 4.25, 0, 100, 0.05, &sigma_rg); new ParamDouble(g, "sigma_rt", 4.25, 0, 100, 0.05, &sigma_rt); new ParamDouble(g, "bf_alpha", 0, 0, 10000, 1, &bf_alpha); new ParamDouble(g, "precision_g", 2, 1, 10, 1, &precision_g); new ParamDouble(g, "precision_t", 2, 1, 10, 1, &precision_t); g = new ParamGroup(this, "dog"); ParamGroup* dog_group = g; connect(g, SIGNAL(dirty()), SLOT(dogChanged())); new ParamChoice(g, "type", "flow-based", "isotropic|flow-based", &dog_type); new ParamDouble(g, "sigma_e", 1.4, 0, 20, 0.005, &sigma_e); new ParamDouble(g, "dog_k", 1.6, 1, 10, 0.01, &dog_k); new ParamDouble(g, "precision_e", 3, 1, 5, 0.1, &precision_e); new ParamDouble(g, "sigma_m", 4.4, 0, 20, 1, &sigma_m); new ParamDouble(g, "precision_m", 2, 1, 5, 0.1, &precision_m); new ParamDouble(g, "step_m", 1, 0.01, 2, 0.1, &step_m); new ParamChoice(g, "adj_func", "smoothstep", "smoothstep|tanh", &dog_adj_func); new ParamBool (g, "dog_reparam", true, &dog_reparam); gg = new ParamGroup(g, "", true); dog_tau_g = gg; dog_eps_ptr = new ParamDouble(gg, "epsilon", 3.50220, -100, 100, 0.005, &dog_eps); dog_tau_ptr = new ParamDouble(gg, "tau", 0.95595, 0, 2, 0.005, &dog_tau); dog_phi_ptr = new ParamDouble(gg, "phi", 0.3859, 0, 1e32, 0.1, &dog_phi); gg = new ParamGroup(g, "", false); dog_p_g = gg; dog_p_ptr = new ParamDouble(gg, "p", 21.7, 0, 1e6, 1, &dog_p); dog_eps_p_ptr = new ParamDouble(gg, "epsilon_p", 79.5, -1e32, 1e32, 0.5, &dog_eps_p); dog_phi_p_ptr = new ParamDouble(gg, "phi_p", 0.017, -1e32, 1e32, 0.05, &dog_phi_p); new ParamChoice(g, "dog_fgauss", "euler", "euler|rk2-nn|rk2|rk4", &dog_fgauss); g = new ParamGroup(this, "quantization", false, &quantization); new ParamChoice(g, "quant_type", "adaptive", "fixed|adaptive", &quant_type); new ParamInt (g, "nbins", 8, 1, 255, 1, &nbins); new ParamDouble(g, "phi_q", 2, 0, 100, 0.025, &phi_q); new ParamDouble(g, "lambda_delta", 0, 0, 100, 1, &lambda_delta); new ParamDouble(g, "omega_delta", 2, 0, 100, 1, &omega_delta); new ParamDouble(g, "lambda_phi", 0.9, 0, 100, 1, &lambda_phi); new ParamDouble(g, "omega_phi", 1.6, 0, 100, 1, &omega_phi); g = new ParamGroup(this, "warp_sharp", false, &warp_sharp); new ParamDouble(g, "sigma_w", 1.5, 0, 20, 1, &sigma_w); new ParamDouble(g, "precision_w", 2, 1, 5, 0.1, &precision_w); new ParamDouble(g, "phi_w", 2.7, 0, 100, 0.025, &phi_w); g = new ParamGroup(this, "final_smooth", true, &final_smooth); new ParamChoice(g, "type", "flow-nearest", "3x3|5x5|flow-nearest|flow-linear", &final_type); new ParamDouble(g, "sigma_a", 1.0, 0, 10, 1, &sigma_a); QScrollArea *sa = new QScrollArea(this); QWidget *parea = new QWidget(sa); sa->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding); sa->setFixedWidth(300); sa->setWidget(parea); sa->setFrameStyle(QFrame::NoFrame); sa->setFocusPolicy(Qt::NoFocus); sa->setWidgetResizable(true); sa->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); m_vbox1->addWidget(sa); m_paramui = new ParamUI(parea, this); QVBoxLayout *pbox = new QVBoxLayout(parea); pbox->setContentsMargins(4,4,4,4); pbox->addWidget(m_paramui); pbox->addStretch(0); connect(m_select, SIGNAL(currentIndexChanged(int)), this, SLOT(onIndexChanged(int))); m_player = new VideoPlayer(this, ":/test.png"); connect(m_player, SIGNAL(videoChanged(int)), this, SLOT(onVideoChanged(int))); connect(m_player, SIGNAL(currentFrameChanged(int)), this, SLOT(setDirty())); connect(m_player, SIGNAL(outputChanged(const QImage&)), m_imageView, SLOT(setImage(const QImage&))); connect(this, SIGNAL(imageChanged(const QImage&)), m_player, SLOT(setOutput(const QImage&))); m_videoControls->setFrameStyle(QFrame::NoFrame); m_videoControls->setAutoHide(true); connect(m_videoControls, SIGNAL(stepForward()), m_player, SLOT(stepForward())); connect(m_videoControls, SIGNAL(stepBack()), m_player, SLOT(stepBack())); connect(m_videoControls, SIGNAL(currentFrameTracked(int)), m_player, SLOT(setCurrentFrame(int))); connect(m_videoControls, SIGNAL(playbackChanged(bool)), m_player, SLOT(setPlayback(bool))); connect(m_videoControls, SIGNAL(trackingChanged(bool)), this, SLOT(setDirty())); connect(m_player, SIGNAL(videoChanged(int)), m_videoControls, SLOT(setFrameCount(int))); connect(m_player, SIGNAL(playbackChanged(bool)), m_videoControls, SLOT(setPlayback(bool))); connect(m_player, SIGNAL(currentFrameChanged(int)), m_videoControls, SLOT(setCurrentFrame(int))); }
NoteWidget::NoteWidget(QString title, QString text, QWidget *parent) : QWidget(parent) { ui.setupUi(this); setBackgroundImage(); this->setContentsMargins(0,0,0,0); /* create the GUI objects */ backButton = new ButtonLabel(QPixmap(":/icons/backButton.png"), QPixmap(":/icons/backButtonPushed.png"), this); connect(backButton, SIGNAL(released()), this, SLOT(close())); quitButton = new ButtonLabel(QPixmap(":/icons/quitButton.png"), QPixmap(":/icons/quitButtonPushed.png"), this); connect(quitButton, SIGNAL(released()), QApplication::instance(), SLOT(quit())); patientIcon = new QLabel(this); patientIcon->setPixmap(QPixmap(":/icons/patientIcon.png")); /* initialize the footer object */ footer = new ChangePatientFooter(this); QLabel *headerText = new QLabel(this); headerText->setStyleSheet("font-family: arial; font-weight: bold; font-size: 18px;"); headerText->setText("<font color=\"#622181\">Paziente</font><font color=\"#9C9E9F\"> / </font><font color=\"#0B72B5\">Immagini</font>"); QHBoxLayout *headerLayout = new QHBoxLayout(); headerLayout->setContentsMargins(13, 13, 13, 0); headerLayout->addWidget(patientIcon); headerLayout->addSpacing(3); headerLayout->addWidget(headerText); headerLayout->setAlignment(headerText, Qt::AlignVCenter); headerLayout->addStretch(); headerLayout->addWidget(quitButton); QLabel *titleLabel = new QLabel("<font color=\"black\">Soggetto<br/></font> <font color=\"white\" >"+ title +"</font>", this); titleLabel->setMinimumHeight(100); titleLabel->setAutoFillBackground(true); titleLabel->setFont(QFont("helvetica")); titleLabel->setAlignment(Qt::AlignVCenter); QPalette titlePal(titleLabel->palette()); titlePal.setColor(QPalette::Background, QColor(190,10,38)); titleLabel->setPalette(titlePal); QLabel *note = new QLabel(text, this); note->setFont(QFont("helvetica")); QPalette notePal(note->palette()); notePal.setColor(QPalette::Text, Qt::black); note->setPalette(notePal); note->setWordWrap(true); note->setAlignment(Qt::AlignJustify); note->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QScrollArea *scrollArea = new QScrollArea(); scrollArea->setWidgetResizable(true); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); scrollArea->setWidget(note); scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QVBoxLayout *mainLayout = new QVBoxLayout(); mainLayout->addLayout(headerLayout); mainLayout->addWidget(titleLabel); QHBoxLayout *backHLayout = new QHBoxLayout(); backHLayout->setContentsMargins(15, 0,0,0); backHLayout->addWidget(backButton); QHBoxLayout *scrollLayout = new QHBoxLayout(); scrollLayout->addWidget(scrollArea); scrollLayout->setAlignment(scrollArea, Qt::AlignVCenter); mainLayout->addLayout(scrollLayout); mainLayout->addStretch(3); mainLayout->addLayout(backHLayout); mainLayout->addStretch(1); mainLayout->addWidget(footer); setLayout(mainLayout); }
OLD_MAIN(QWidget* pParent = nullptr) : QMainWindow(pParent) { Q_INIT_RESOURCE(Resources); // Settings persistence ReadSettings(); // Appearance LUT PlayerApperances appearances; // Build player table model from file PlayerTableModel* playerTableModel = new PlayerTableModel(this); playerTableModel->LoadHittingProjections(appearances); playerTableModel->LoadPitchingProjections(appearances); playerTableModel->CalculateHittingScores(); playerTableModel->CalculatePitchingScores(); playerTableModel->InitializeTargetValues(); // Draft delegate DraftDelegate* draftDelegate = new DraftDelegate(playerTableModel); LinkDelegate* linkDelegate = new LinkDelegate(this); TagDelegate* tagDelegate = new TagDelegate(this); // Hitter sort-model PlayerSortFilterProxyModel* hitterSortFilterProxyModel = new PlayerSortFilterProxyModel(Player::Hitter); hitterSortFilterProxyModel->setSourceModel(playerTableModel); hitterSortFilterProxyModel->setSortRole(PlayerTableModel::RawDataRole); // Hitter table view QTableView* hitterTableView = MakeTableView(hitterSortFilterProxyModel, true, PlayerTableModel::COLUMN_Z); hitterTableView->setItemDelegateForColumn(FindColumn(hitterSortFilterProxyModel, PlayerTableModel::COLUMN_DRAFT_BUTTON), draftDelegate); hitterTableView->setItemDelegateForColumn(FindColumn(hitterSortFilterProxyModel, PlayerTableModel::COLUMN_ID_LINK), linkDelegate); hitterTableView->setItemDelegateForColumn(FindColumn(hitterSortFilterProxyModel, PlayerTableModel::COLUMN_FLAG), tagDelegate); hitterTableView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked); // Context menu QMenu* contextMenu = new QMenu(); contextMenu->addAction("&Remove Player"); // Apply to hitter table view hitterTableView->setContextMenuPolicy(Qt::CustomContextMenu); connect(hitterTableView, &QWidget::customContextMenuRequested, [=](const QPoint& pos) { QPoint globalPos = hitterTableView->mapToGlobal(pos); QAction* selectedItem = contextMenu->exec(globalPos); if (selectedItem) { auto proxyIndex = hitterTableView->indexAt(pos); auto srcIndex = hitterSortFilterProxyModel->mapToSource(proxyIndex); playerTableModel->RemovePlayer(srcIndex.row()); } }); // Pitcher sort-model PlayerSortFilterProxyModel* pitcherSortFilterProxyModel = new PlayerSortFilterProxyModel(Player::Pitcher); pitcherSortFilterProxyModel->setSourceModel(playerTableModel); pitcherSortFilterProxyModel->setSortRole(PlayerTableModel::RawDataRole); // Pitcher table view QTableView* pitcherTableView = MakeTableView(pitcherSortFilterProxyModel, true, PlayerTableModel::COLUMN_Z); pitcherTableView->setItemDelegateForColumn(FindColumn(pitcherSortFilterProxyModel, PlayerTableModel::COLUMN_DRAFT_BUTTON), draftDelegate); pitcherTableView->setItemDelegateForColumn(FindColumn(pitcherSortFilterProxyModel, PlayerTableModel::COLUMN_ID_LINK), linkDelegate); pitcherTableView->setItemDelegateForColumn(FindColumn(pitcherSortFilterProxyModel, PlayerTableModel::COLUMN_FLAG), tagDelegate); pitcherTableView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked); // Top/Bottom splitter QSplitter* topBottomSplitter = new QSplitter(Qt::Vertical); topBottomSplitter->setContentsMargins(5, 5, 5, 5); // Hitter/Pitcher tab View enum PlayerTableTabs { Hitters, Pitchers, Unknown }; QTabWidget* hitterPitcherTabs = new QTabWidget(this); hitterPitcherTabs->insertTab(PlayerTableTabs::Hitters, hitterTableView, "Hitters"); hitterPitcherTabs->insertTab(PlayerTableTabs::Pitchers, pitcherTableView, "Pitchers"); topBottomSplitter->addWidget(hitterPitcherTabs); // Tab lookup helper auto CaterogyToTab = [](uint32_t catergory) { switch (catergory) { case Player::Hitter: return PlayerTableTabs::Hitters; case Player::Pitcher: return PlayerTableTabs::Pitchers; default: return PlayerTableTabs::Unknown; } }; // Drafted filter action QAction* filterDrafted = new QAction(this); connect(filterDrafted, &QAction::toggled, hitterSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterDrafted); connect(filterDrafted, &QAction::toggled, pitcherSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterDrafted); filterDrafted->setText(tr("Drafted")); filterDrafted->setToolTip("Toggle Drafted Players"); filterDrafted->setCheckable(true); filterDrafted->toggle(); QAction* filterReplacement = new QAction(this); connect(filterReplacement, &QAction::toggled, hitterSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterReplacement); connect(filterReplacement, &QAction::toggled, pitcherSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterReplacement); filterReplacement->setText(tr("($1)")); filterReplacement->setToolTip("Toggle replacements players with value under $1"); filterReplacement->setCheckable(true); filterReplacement->toggle(); // NL filter action QAction* filterNL = new QAction(this); connect(filterNL, &QAction::toggled, hitterSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterNL); connect(filterNL, &QAction::toggled, pitcherSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterNL); filterNL->setText(tr("NL")); filterNL->setToolTip("Toggle National Leauge"); filterNL->setCheckable(true); filterNL->toggle(); // AL filter action QAction* filterAL = new QAction(this); connect(filterAL, &QAction::toggled, hitterSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterAL); connect(filterAL, &QAction::toggled, pitcherSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterAL); filterAL->setText(tr("AL")); filterAL->setToolTip("Toggle American Leauge"); filterAL->setCheckable(true); filterAL->toggle(); // FA filter action QAction* filterFA = new QAction(this); connect(filterFA, &QAction::toggled, hitterSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterFA); connect(filterFA, &QAction::toggled, pitcherSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterFA); filterFA->setText(tr("FA")); filterFA->setToolTip("Toggle Free Agents"); filterFA->setCheckable(true); filterAL->toggle(); filterAL->toggle(); // General filter group QActionGroup* generalFilters = new QActionGroup(this); generalFilters->addAction(filterAL); generalFilters->addAction(filterNL); generalFilters->addAction(filterFA); generalFilters->setExclusive(false); // Starter filter action QAction* filterStarter = new QAction(this); connect(filterStarter, &QAction::toggled, pitcherSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterSP); filterStarter->setText(tr("SP")); filterStarter->setToolTip("Toggle Starting Pitchers"); filterStarter->setCheckable(true); filterStarter->toggle(); // Relief filter action QAction* filterRelief = new QAction(this); connect(filterRelief, &QAction::toggled, pitcherSortFilterProxyModel, &PlayerSortFilterProxyModel::OnFilterRP); filterRelief->setText(tr("RP")); filterRelief->setToolTip("Toggle Relief Pitchers"); filterRelief->setCheckable(true); filterRelief->toggle(); // Pitching filter group QActionGroup* pitchingFilters = new QActionGroup(this); pitchingFilters->addAction(filterStarter); pitchingFilters->addAction(filterRelief); pitchingFilters->setExclusive(false); // Hitting filter group QActionGroup* hittingFilters = new QActionGroup(this); hittingFilters->setExclusive(false); // Filter helper auto MakeHitterFilter = [=](QString text, QString toolTip, const auto& onFilterFn) -> QAction* { QAction* action = new QAction(this); connect(action, &QAction::toggled, hitterSortFilterProxyModel, onFilterFn); action->setText(text); action->setToolTip(toolTip); action->setCheckable(true); action->toggle(); hittingFilters->addAction(action); return action; }; // Hitter filters QAction* filterC = MakeHitterFilter("C", "Filter Catchers", &PlayerSortFilterProxyModel::OnFilterC); QAction* filter1B = MakeHitterFilter("1B", "Filter 1B", &PlayerSortFilterProxyModel::OnFilter1B); QAction* filter2B = MakeHitterFilter("2B", "Filter 2B", &PlayerSortFilterProxyModel::OnFilter2B); QAction* filterSS = MakeHitterFilter("SS", "Filter SS", &PlayerSortFilterProxyModel::OnFilterSS); QAction* filter3B = MakeHitterFilter("3B", "Filter 3B", &PlayerSortFilterProxyModel::OnFilter3B); QAction* filterOF = MakeHitterFilter("OF", "Filter Outfielders", &PlayerSortFilterProxyModel::OnFilterOF); QAction* filterCI = MakeHitterFilter("CI", "Filter Corner Infielders", &PlayerSortFilterProxyModel::OnFilterCI); QAction* filterMI = MakeHitterFilter("MI", "Filter Middle Infielders", &PlayerSortFilterProxyModel::OnFilterMI); QAction* filterDH = MakeHitterFilter("DH", "Filter Designated Hitters", &PlayerSortFilterProxyModel::OnFilterDH); QAction* filterU = MakeHitterFilter("U", "Filter Utility", &PlayerSortFilterProxyModel::OnFilterU); // Menu spacer QWidget* spacer = new QWidget(this); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // Completion Widget QCompleter* completer = new QCompleter(this); completer->setModel(playerTableModel); completer->setCompletionColumn(PlayerTableModel::COLUMN_NAME); completer->setFilterMode(Qt::MatchContains); completer->setCaseSensitivity(Qt::CaseInsensitive); // Select auto HighlightPlayerInTable = [=](const QModelIndex& srcIdx) { // Lookup catergory auto catergoryIdx = srcIdx.model()->index(srcIdx.row(), PlayerTableModel::COLUMN_CATERGORY); auto catergory = srcIdx.model()->data(catergoryIdx).toUInt(); // Change to tab hitterPitcherTabs->setCurrentIndex(CaterogyToTab(catergory)); // Select row if (catergory == Player::Catergory::Hitter) { auto proxyModel = dynamic_cast<QSortFilterProxyModel*>(hitterTableView->model()); auto proxyIdx = proxyModel->mapFromSource(srcIdx); hitterTableView->selectRow(proxyIdx.row()); hitterTableView->setFocus(); } else if (catergory == Player::Catergory::Pitcher) { auto proxyModel = dynamic_cast<QSortFilterProxyModel*>(pitcherTableView->model()); auto proxyIdx = proxyModel->mapFromSource(srcIdx); pitcherTableView->selectRow(proxyIdx.row()); pitcherTableView->setFocus(); } }; // Select the target connect(completer, static_cast<void (QCompleter::*)(const QModelIndex&)>(&QCompleter::activated), [=](const QModelIndex& index) { // Get player index QAbstractProxyModel* proxyModel = dynamic_cast<QAbstractProxyModel*>(completer->completionModel()); auto srcIdx = proxyModel->mapToSource(index); // Highlight this player HighlightPlayerInTable(srcIdx); }); // Search widget QLineEdit* playerSearch = new QLineEdit(this); playerSearch->setCompleter(completer); // Main toolbar QToolBar* toolbar = new QToolBar("Toolbar"); toolbar->addWidget(new QLabel(" Status: ", this)); toolbar->addActions(QList<QAction*>{filterDrafted, filterReplacement}); toolbar->addSeparator(); toolbar->addWidget(new QLabel(" Leagues: ", this)); toolbar->addActions(QList<QAction*>{filterAL, filterNL, filterFA}); toolbar->addSeparator(); toolbar->addWidget(new QLabel(" Positions: ", this)); toolbar->addActions(QList<QAction*>{filterStarter, filterRelief}); toolbar->addActions(QList<QAction*>{filterC, filter1B, filter2B, filterSS, filter3B, filterOF, filterCI, filterMI, filterDH, filterU}); toolbar->addWidget(spacer); toolbar->addWidget(new QLabel("Player Search: ", this)); toolbar->addWidget(playerSearch); toolbar->setFloatable(false); toolbar->setMovable(false); QMainWindow::addToolBar(toolbar); // Helper to adjust filters auto ToggleFilterGroups = [=](int index) { switch (index) { case uint32_t(PlayerTableTabs::Hitters): pitchingFilters->setVisible(false); hittingFilters->setVisible(true); break; case uint32_t(PlayerTableTabs::Pitchers): pitchingFilters->setVisible(true); hittingFilters->setVisible(false); break; default: break; } }; // Set default filter group ToggleFilterGroups(hitterPitcherTabs->currentIndex()); //--------------------------------------------------------------------- // Bottom Section //--------------------------------------------------------------------- // Owner widget QHBoxLayout* ownersLayout = new QHBoxLayout(this); ownersLayout->setSizeConstraint(QLayout::SetNoConstraint); // Owner models std::vector<OwnerSortFilterProxyModel*> vecOwnerSortFilterProxyModels; // Owner labels QList<QLabel*>* pVecOwnerLabels; pVecOwnerLabels = new QList<QLabel*>(); pVecOwnerLabels->append(new QLabel("--")); for (auto i = 1u; i <= DraftSettings::Get().OwnerCount; i++) { pVecOwnerLabels->append(new QLabel(DraftSettings::Get().OwnerNames[i])); } // Update label helper auto UpdateOwnerLabels = [=]() { for (auto i = 1u; i <= DraftSettings::Get().OwnerCount; i++) { pVecOwnerLabels->at(i)->setText(DraftSettings::Get().OwnerNames[i]); } }; // Initialize UpdateOwnerLabels(); // Loop owners for (uint32_t ownerId = 1; ownerId <= DraftSettings::Get().OwnerCount; ownerId++) { // V-Layout per owner QVBoxLayout* perOwnerLayout = new QVBoxLayout(this); ownersLayout->addLayout(perOwnerLayout); perOwnerLayout->setSizeConstraint(QLayout::SetNoConstraint); // Proxy model for this owner OwnerSortFilterProxyModel* ownerSortFilterProxyModel = new OwnerSortFilterProxyModel(ownerId, playerTableModel, this); vecOwnerSortFilterProxyModels.push_back(ownerSortFilterProxyModel); // Owner name label pVecOwnerLabels->at(ownerId)->setAlignment(Qt::AlignCenter); perOwnerLayout->addWidget(pVecOwnerLabels->at(ownerId)); // Per-owner roster table view const uint32_t tableWidth = 225; QTableView* ownerRosterTableView = MakeTableView(ownerSortFilterProxyModel, true, 0); ownerRosterTableView->setMinimumSize(tableWidth, 65); ownerRosterTableView->setMaximumSize(tableWidth, 4096); ownerRosterTableView->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); perOwnerLayout->addWidget(ownerRosterTableView); // XXX: This should be a form layout... QGridLayout* ownerSummaryGridLayout = new QGridLayout(this); ownerSummaryGridLayout->setSpacing(0); ownerSummaryGridLayout->addWidget(MakeLabel("Budget: "), 0, 0); ownerSummaryGridLayout->addWidget(MakeLabel("# Hitters: "), 1, 0); ownerSummaryGridLayout->addWidget(MakeLabel("# Pitchers: "), 2, 0); ownerSummaryGridLayout->addWidget(MakeLabel("Max Bid: "), 3, 0); QLabel* budgetLabel = MakeLabel(); QLabel* numHittersLabel = MakeLabel(); QLabel* numPitchersLabel = MakeLabel(); QLabel* maxBidLabel = MakeLabel(); // Helper auto UpdateLabels = [=]() { budgetLabel->setText(QString("$%1").arg(ownerSortFilterProxyModel->GetRemainingBudget())); numHittersLabel->setText(QString("%1 / %2").arg(ownerSortFilterProxyModel->Count(Player::Hitter)).arg(DraftSettings::Get().HitterCount)); numPitchersLabel->setText(QString("%1 / %2").arg(ownerSortFilterProxyModel->Count(Player::Pitcher)).arg(DraftSettings::Get().PitcherCount)); maxBidLabel->setText(QString("$%1").arg(ownerSortFilterProxyModel->GetMaxBid())); }; // Update labels when a draft event happens connect(playerTableModel, &PlayerTableModel::DraftedEnd, [=]() { UpdateLabels(); }); UpdateLabels(); ownerSummaryGridLayout->addWidget(budgetLabel, 0, 1); ownerSummaryGridLayout->addWidget(numHittersLabel, 1, 1); ownerSummaryGridLayout->addWidget(numPitchersLabel, 2, 1); ownerSummaryGridLayout->addWidget(maxBidLabel, 3, 1); QSpacerItem* spacer = new QSpacerItem(1, 1, QSizePolicy::Preferred, QSizePolicy::Preferred); ownerSummaryGridLayout->addItem(spacer, 0, 2); ownerSummaryGridLayout->addItem(spacer, 1, 2); ownerSummaryGridLayout->addItem(spacer, 2, 2); ownerSummaryGridLayout->addItem(spacer, 3, 2); perOwnerLayout->addLayout(ownerSummaryGridLayout); perOwnerLayout->addSpacerItem(spacer); } // Owner widget QWidget* scrollAreaWidgetContents = new QWidget(this); scrollAreaWidgetContents->setLayout(ownersLayout); scrollAreaWidgetContents->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); // Owner scroll area QScrollArea* ownerScrollArea = new QScrollArea(this); ownerScrollArea->setWidget(scrollAreaWidgetContents); ownerScrollArea->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); ownerScrollArea->setBackgroundRole(QPalette::Light); ownerScrollArea->setFrameShape(QFrame::NoFrame); ownerScrollArea->setWidgetResizable(true); // Target value widget QWidget* targetValueWidget = new QWidget(this); QFormLayout* targetValueLayout = new QFormLayout(this); targetValueWidget->setLayout(targetValueLayout); auto values = { PlayerTableModel::COLUMN_AVG, PlayerTableModel::COLUMN_HR, PlayerTableModel::COLUMN_R, PlayerTableModel::COLUMN_RBI, PlayerTableModel::COLUMN_SB, PlayerTableModel::COLUMN_SO, PlayerTableModel::COLUMN_ERA, PlayerTableModel::COLUMN_WHIP, PlayerTableModel::COLUMN_W, PlayerTableModel::COLUMN_SV, }; for (auto value : values) { auto name = playerTableModel->headerData(value, Qt::Horizontal, Qt::DisplayRole).toString(); auto target = QString::number(playerTableModel->GetTargetValue(value), 'f', 3); targetValueLayout->addRow(name, new QLabel(target)); } // Player scatter plot PlayerScatterPlotChart* chartView = new PlayerScatterPlotChart(playerTableModel, hitterSortFilterProxyModel, this); connect(hitterSortFilterProxyModel, &QSortFilterProxyModel::layoutChanged, chartView, &PlayerScatterPlotChart::Update); connect(pitcherSortFilterProxyModel, &QSortFilterProxyModel::layoutChanged, chartView, &PlayerScatterPlotChart::Update); connect(playerTableModel, &QAbstractItemModel::dataChanged, chartView, &PlayerScatterPlotChart::Update); // Summary view SummaryWidget* summary = new SummaryWidget(playerTableModel, vecOwnerSortFilterProxyModels, this); // Bottom tabs enum BottomSectionTabs { Rosters, Summary, Targets, ChartView, Log }; QTabWidget* bottomTabs = new QTabWidget(this); topBottomSplitter->addWidget(bottomTabs); bottomTabs->insertTab(BottomSectionTabs::Rosters, ownerScrollArea, "Rosters"); bottomTabs->insertTab(BottomSectionTabs::Summary, summary, "Summary"); bottomTabs->insertTab(BottomSectionTabs::Targets, targetValueWidget, "Targets"); bottomTabs->insertTab(BottomSectionTabs::ChartView, chartView, "Scatter Chart"); bottomTabs->insertTab(BottomSectionTabs::Log, GlobalLogger::Get(), "Log"); // Make top section 3x the size of the bottom topBottomSplitter->setStretchFactor(0, 3); topBottomSplitter->setStretchFactor(1, 1); //---------------------------------------------------------------------- // Connections //---------------------------------------------------------------------- // Connect tab filters connect(hitterPitcherTabs, &QTabWidget::currentChanged, this, [=](int index) { // Update filters ToggleFilterGroups(index); // Update chart view switch (index) { case PlayerTableTabs::Hitters: chartView->SetProxyModel(hitterSortFilterProxyModel); break; case PlayerTableTabs::Pitchers: chartView->SetProxyModel(pitcherSortFilterProxyModel); break; default: break; } }); // Connect chart click connect(chartView, &PlayerScatterPlotChart::PlayerClicked, this, [=](const QModelIndex& index) { HighlightPlayerInTable(index); }); // Connect summary model connect(playerTableModel, &PlayerTableModel::DraftedEnd, summary, &SummaryWidget::OnDraftedEnd); //---------------------------------------------------------------------- // Main //---------------------------------------------------------------------- // Set as main window QMainWindow::setCentralWidget(topBottomSplitter); // Create main menu bar QMenuBar* mainMenuBar = new QMenuBar(); QMainWindow::setMenuBar(mainMenuBar); // Main Menu > File menu QMenu* fileMenu = mainMenuBar->addMenu("&File"); // File dialog helper auto GetFileDialog = [&](QFileDialog::AcceptMode mode) -> QFileDialog* { QFileDialog* dialog = new QFileDialog(this); dialog->setWindowModality(Qt::WindowModal); dialog->setAcceptMode(mode); dialog->setNameFilter("CSV files (*.csv)"); return dialog; }; // Ask for the save location auto SetSaveAsFile = [=]() { QStringList files; auto dialog = GetFileDialog(QFileDialog::AcceptSave); if (dialog->exec()) { files = dialog->selectedFiles(); } else { return false; } m_currentFile = files.at(0); return true; }; // Update title bar auto UpdateApplicationName = [this]() { auto name = QString("fbb -- %1").arg(QFileInfo(m_currentFile).fileName()); QCoreApplication::setApplicationName(name); setWindowTitle(name); }; // Main Menu > File menu > Save action QAction* saveResultsAction = new QAction("&Save Results", this); connect(saveResultsAction, &QAction::triggered, [=](bool checked) { if (m_currentFile.isEmpty()) { SetSaveAsFile(); } GlobalLogger::AppendMessage(QString("Saving file: %1...").arg(m_currentFile)); UpdateApplicationName(); return playerTableModel->SaveDraftStatus(m_currentFile); }); fileMenu->addAction(saveResultsAction); // Main Menu > File menu > Save As action QAction* saveResultsAsAction = new QAction("Save Results &As...", this); connect(saveResultsAsAction, &QAction::triggered, [=](bool checked) { SetSaveAsFile(); GlobalLogger::AppendMessage(QString("Saving file: %1...").arg(m_currentFile)); UpdateApplicationName(); return playerTableModel->SaveDraftStatus(m_currentFile); }); fileMenu->addAction(saveResultsAsAction); // Main Menu > File menu > Load action QAction* loadResultsAction = new QAction("&Load Results...", this); connect(loadResultsAction, &QAction::triggered, [=](bool checked) { auto dialog = GetFileDialog(QFileDialog::AcceptOpen); QStringList files; if (dialog->exec()) { files = dialog->selectedFiles(); } else { return false; } m_currentFile = files.at(0); GlobalLogger::AppendMessage(QString("Loading file: %1...").arg(m_currentFile)); UpdateApplicationName(); return playerTableModel->LoadDraftStatus(m_currentFile); }); fileMenu->addAction(loadResultsAction); // Main Menu > File menu QMenu* settingsMenu = mainMenuBar->addMenu("&Settings"); // Main Menu > Settings menu > Options action QAction* settingsAction = new QAction("&Settings...", this); connect(settingsAction, &QAction::triggered, [=](bool checked) { DraftSettingsDialog draftSettingsDialog; if (draftSettingsDialog.exec()) { UpdateOwnerLabels(); } }); settingsMenu->addAction(settingsAction); // Main Menu > Settings menu > Options action QAction* demoDataAction = new QAction("&DemoData...", this); connect(demoDataAction, &QAction::triggered, [=](bool checked) { playerTableModel->DraftRandom(); }); settingsMenu->addAction(demoDataAction); // show me QMainWindow::show(); }
void MainPanel::init() { if (!db.init()) { QMessageBox error; error.critical(0, "Error!", "An error occured while trying to load the database."); exit(EXIT_FAILURE); return; } stack = new QStackedWidget(this); QString style = getStylesheet(":/Styles/Content.css"); // Prepare UI objects for each tab libraryPtr = new Library(db); libraryPtr->setStyleSheet(style); browserPtr = new Browser(); browserPtr->setStyleSheet(style); stack->addWidget(libraryPtr); stack->addWidget(browserPtr); stack->setCurrentWidget(libraryPtr); // System layout QHBoxLayout* systemLayout = new QHBoxLayout; systemLayout->setSpacing(0); systemLayout->setMargin(8); // Header spacing QVBoxLayout* topLayout = new QVBoxLayout; topLayout->setMargin(0); // Header layout QHBoxLayout* headerLayout = new QHBoxLayout; headerLayout->setSpacing(0); headerLayout->setMargin(0); // Window title QLabel* windowTitle = new QLabel(this); windowTitle->setObjectName("windowTitle"); windowTitle->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); windowTitle->setMinimumWidth(175); windowTitle->setMaximumWidth(175); windowTitle->setAlignment(Qt::AlignTop); windowTitle->setFont(QFont("Sansation", 18)); windowTitle->setText("Project \nASCENSION"); windowTitle->setStyleSheet("color: #7D818C;"); windowTitle->setAttribute(Qt::WA_TransparentForMouseEvents); // Post-initialization header spacing topLayout->addLayout(systemLayout); topLayout->addLayout(headerLayout); topLayout->addSpacing(10); headerLayout->addSpacing(20); headerLayout->addWidget(windowTitle); headerLayout->addSpacing(40); // Header tabs libraryTab = new TabLabel(this); libraryTab = g_tabFactory(libraryTab, "libraryTab", "LIBRARY"); headerLayout->addSpacing(8); headerLayout->addWidget(libraryTab); libraryTab->setStyleSheet("font-weight: bold; color: lightgreen;"); storeTab = new TabLabel(this); storeTab = g_tabFactory(storeTab, "storeTab", " STORE"); headerLayout->addSpacing(8); headerLayout->addWidget(storeTab); modsTab = new TabLabel(this); modsTab = g_tabFactory(modsTab, "modsTab", " MODS"); headerLayout->addSpacing(8); headerLayout->addWidget(modsTab); newsTab = new TabLabel(this); newsTab = g_tabFactory(newsTab, "newsTab", "NEWS"); headerLayout->addSpacing(8); headerLayout->addWidget(newsTab); browserTab = new TabLabel(this); browserTab = g_tabFactory(browserTab, "browserTab", "BROWSER"); headerLayout->addSpacing(8); headerLayout->addWidget(browserTab); activeTab = libraryTab; headerLayout->addStretch(); // System buttons systemLayout->addStretch(); // Minimize QPushButton* pushButtonMinimize = new QPushButton("", this); pushButtonMinimize->setObjectName("pushButtonMinimize"); systemLayout->addWidget(pushButtonMinimize); QObject::connect(pushButtonMinimize, SIGNAL(clicked()), this, SLOT(pushButtonMinimize())); // Maximize QPushButton* pushButtonMaximize = new QPushButton("", this); pushButtonMaximize->setObjectName("pushButtonMaximize"); systemLayout->addWidget(pushButtonMaximize); QObject::connect(pushButtonMaximize, SIGNAL(clicked()), this, SLOT(pushButtonMaximize())); // Close QPushButton* pushButtonClose = new QPushButton("", this); pushButtonClose->setObjectName("pushButtonClose"); systemLayout->addWidget(pushButtonClose); QObject::connect(pushButtonClose, SIGNAL(clicked()), this, SLOT(pushButtonClose())); // Main panel layout QGridLayout* mainGridLayout = new QGridLayout(); mainGridLayout->setSpacing(0); mainGridLayout->setMargin(0); setLayout(mainGridLayout); // Central widget QWidget* centralWidget = new QWidget(this); centralWidget->setObjectName("centralWidget"); centralWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // Main panel scroll area QScrollArea* scrollArea = new QScrollArea(this); scrollArea->setWidgetResizable(true); scrollArea->setObjectName("mainPanelScrollArea"); scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); // Vertical layout example QVBoxLayout* verticalLayout = new QVBoxLayout(); verticalLayout->setSpacing(5); verticalLayout->setMargin(0); verticalLayout->setAlignment(Qt::AlignHCenter); verticalLayout->addLayout(topLayout, 1); verticalLayout->addWidget(stack, 4); // Connect signals connect(libraryTab, SIGNAL(clicked()), this, SLOT(setTabLibrary())); connect(browserTab, SIGNAL(clicked()), this, SLOT(setTabBrowser())); // Show centralWidget->setLayout(verticalLayout); scrollArea->setWidget(centralWidget); mainGridLayout->addWidget(scrollArea); }