/** add comments here */ LordExchange::LordExchange( QWidget * parent, const char * name ) :QDialog( parent, name, true ) { _lordLeft = 0; _lordRight = 0; _socket = 0; _presentation = new PresentationWidget( this ); QTabWidget * tab = new QTabWidget( this ); _generalities = new DisplayBothGeneralities( this ); _units = new DisplayBothUnits( this ); _artefacts = new DisplayBothArtefacts( this ); _machines = new DisplayBothMachines( this ); tab->insertTab( _generalities, "Generalities" ); tab->insertTab( _units, "Units" ); tab->insertTab( _artefacts, "Artefacts" ); tab->insertTab( _machines, "War Machines" ); tab->setCurrentPage( 0 ); QPushButton * butOk = createButtonOk( this ); QHBoxLayout * layH1 = new QHBoxLayout(); layH1->addStretch( 1 ); layH1->addWidget( butOk ); layH1->addStretch( 1 ); QGridLayout * layout = new QGridLayout( this, 3, 1 ); layout->addWidget( _presentation, 0 , 0 ); layout->setRowStretch( 1, 1 ); layout->addWidget( tab, 1, 0 ); layout->addLayout( layH1, 2, 0 ); layout->activate(); connect( butOk, SIGNAL( clicked() ), SLOT( accept() ) ); }
void MainWindow::addUIs() { QGridLayout *pLayout = new QGridLayout(ui->centralWidget) ; m_pSplitter = new QSplitter(this) ; pLayout->addWidget(m_pSplitter) ; { m_pStageTree = new QTreeView(this) ; m_pStageTree->setModel(gEditData.getStageModel()) ; m_pStageTree->setMinimumSize(100, 300) ; m_pStageTree->setHeaderHidden(true) ; gEditData.setStageTreeView(m_pStageTree) ; m_pGameView = new Form_GameDetail(this) ; QTabWidget *pTabWidget = new QTabWidget(this) ; Form_Maptab *pMapTab = new Form_Maptab(this) ; pTabWidget->insertTab(0, pMapTab, "Map") ; pTabWidget->insertTab(1, new QWidget(this), "Object") ; // TODO:GUI作る connect(m_pStageTree, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slot_stageTreeCustomContextMenu(QPoint))) ; connect(m_pStageTree, SIGNAL(clicked(QModelIndex)), m_pGameView, SLOT(slot_clickStageTree(QModelIndex))) ; connect(pMapTab, SIGNAL(sig_changeMapSize()), m_pGameView, SLOT(slot_changeMapSize())) ; m_pSplitter->addWidget(m_pStageTree) ; m_pSplitter->addWidget(m_pGameView) ; m_pSplitter->addWidget(pTabWidget) ; } }
CVMIDialog::CVMIDialog(QWidget* parent) : QDialog(parent) // : QDialog (0, Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint|Qt::WindowSystemMenuHint|Qt::WindowCloseButtonHint|Qt::Dialog) { // Select page selectPage = new CVMISelectPage; Q_ASSERT(connect(selectPage, SIGNAL(vmSelected(CVMIRelease)), this, SLOT(showVMCreate(CVMIRelease)))); selectPage->setReady(false); // Create page createPage = new CVMICreatePage; Q_ASSERT(connect(createPage, SIGNAL(back()), this, SLOT(showVMSelect()))); Q_ASSERT(connect(createPage, SIGNAL(createVM(CVMIInstanceConfig)), this, SLOT(showVMInstall(CVMIInstanceConfig)))); // Install page installPage = new CVMIInstallPage; Q_ASSERT(connect(installPage, SIGNAL(done()), this, SLOT(showVMSelect()))); // Config page CVMIConfigPage* configPage = new CVMIConfigPage; Q_ASSERT(connect(configPage, SIGNAL(displayOptionChanged()), selectPage, SLOT(displayOptionChanged()))); Q_ASSERT(connect(configPage, SIGNAL(configChanged()), this, SLOT(verifyConfig()))); // About page CVMIAboutPage* aboutPage = new CVMIAboutPage; // Stacked Widget contentWidget = new QStackedWidget; contentWidget->addWidget (selectPage); contentWidget->addWidget (createPage); contentWidget->addWidget (installPage); // Tabs QTabWidget *tabWidget = new QTabWidget; tabWidget->insertTab(0, contentWidget, tr("Installer")); tabWidget->insertTab(1, configPage, tr("Preferences")); tabWidget->insertTab(2, aboutPage, tr("About")); // Window decoration setWindowTitle(tr("CernVM installation tool")); setWindowFlags(windowFlags() | Qt::WindowMinMaxButtonsHint | Qt::CustomizeWindowHint); // Layout QHBoxLayout *bodyLayout = new QHBoxLayout; bodyLayout->addWidget(tabWidget); setLayout(bodyLayout); // Application icon this->setWindowIcon(QIcon(":images/application_icon.png")); verifyConfig(); }
void QtDNDTabBar::dropEvent(QDropEvent* dropEvent) { QtDNDTabBar* sourceTabBar = dynamic_cast<QtDNDTabBar*>(dropEvent->source()); if (sourceTabBar && dropEvent->mimeData() && dropEvent->mimeData()->data("action") == QByteArray("application/tab-detach")) { QtDNDTabBar* source = dynamic_cast<QtDNDTabBar*>(dropEvent->source()); int targetTabIndex = tabAt(dropEvent->pos()); QRect rect = tabRect(targetTabIndex); if (targetTabIndex >= 0 && (dropEvent->pos().x() - rect.left() - rect.width()/2 > 0)) { targetTabIndex++; } QWidget* tab = source->getDragWidget(); assert(tab); QTabWidget* targetTabWidget = dynamic_cast<QTabWidget*>(parentWidget()); QString tabText = source->getDragText(); /* * When you add a widget to an empty QTabWidget, it's automatically made the current widget. * Making the widget the current widget, widget->show() is called for the widget. Directly reacting * to that event, and adding the widget again to the QTabWidget results in undefined behavior. For * example the tab label is shown but the widget is neither has the old nor in the new QTabWidget as * parent. Blocking signals on the QWidget to be added to a QTabWidget prevents this behavior. */ targetTabWidget->setUpdatesEnabled(false); tab->blockSignals(true); targetTabWidget->insertTab(targetTabIndex, tab, tabText); dropEvent->acceptProposedAction(); tab->blockSignals(false); targetTabWidget->setUpdatesEnabled(true); onDropSucceeded(); } }
int QTabWidgetProto::insertTab(int index, QWidget *page, const QIcon &icon, const QString & label) { QTabWidget *item = qscriptvalue_cast<QTabWidget*>(thisObject()); if (item) return item->insertTab(index, page, icon, label); return 0; }
int ScriptToolbox::tabInsertTab(QWidget * tab, int idx, QWidget * page, const QString & text) { QTabWidget *tw = qobject_cast<QTabWidget*>(tab); int i = -1; if(tw) i = tw->insertTab(idx, page, text); return i; }
//constructor MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent) { managerLoginPage(); receptionPage(); cateringPage(); QTabWidget *tabWidget = new QTabWidget; tabWidget->insertTab(0, receptionWidget,tr("&Reception")); tabWidget->insertTab(1, managerLoginWidget, tr("Manager Login")); tabWidget->insertTab(2, cateringWidget, tr("Catering Services")); tabWidget->setTabEnabled(0, true); setCentralWidget(tabWidget); cateringServices = new CateringServices; //A universal catering service object. Reinitailise for new use. manager = new Management; updateVisit_MonthCount(); //update month count for token }
int TabWidget::insertTab( lua_State * L ) { QTabWidget* obj = ObjectHelper<QTabWidget>::check( L, 1 ); int index = 0; if ( Util::isNum( L, 2 ) ) { index = Util::toInt( L, 2 ); } QWidget* widget = ObjectHelper<QWidget>::check( L, 3 ); if ( Util::isStr( L, 4) ) // QString* label = ValueInstaller2<QString>::cast( L, 5 )) { //QString* l = ValueInstaller2<QString>::check( L, 4 ); Util::push( L, obj->insertTab( index, widget, Util::toString( L, 4 ) ) ); // int insertTab ( int index, QWidget * widget, const QString & label ) } else { QIcon* icon = ValueInstaller2<QIcon>::check( L, 4 ); //QString* l = ValueInstaller2<QString>::check( L, 5 ); Util::push( L, obj->insertTab( index, widget, *icon, Util::toString( L, 5 ) ) ); // int insertTab ( int index, QWidget * widget, const QIcon & icon, const QString & label ) } return 1; }
void MainWindow::createWidgets() { setCentralWidget(new QWidget(this)); QVBoxLayout* mainFormBaseLayout = new QVBoxLayout(centralWidget(), 1, 1); QSplitter* splitter = new QSplitter(centralWidget()); splitter->setOrientation( Qt::Vertical ); mainFormBaseLayout->addWidget(splitter); m_tabEditor = new EditorTabWidget(splitter, this); splitter->setCollapsible(m_tabEditor, false); splitter->setOpaqueResize(true); QTabWidget* tabDebug = new QTabWidget(splitter); splitter->setCollapsible(tabDebug, false); tabDebug->setGeometry(0,0,0,height()/15); QWidget* globalVarTab = new QWidget(tabDebug); QVBoxLayout* globalVarTabLayout = new QVBoxLayout(globalVarTab, 1, 1); m_globaVarList = new VariablesListView(globalVarTab); globalVarTabLayout->addWidget(m_globaVarList); tabDebug->insertTab(globalVarTab, QString("Global")); QWidget* tabStack = new QWidget(tabDebug); QVBoxLayout* varTabLayout = new QVBoxLayout(tabStack, 1, 1); QHBoxLayout* stackComboLayout = new QHBoxLayout(0, 6, 6); QLabel* stackLabel = new QLabel(tabStack); stackLabel->setText(("Stack:")); stackLabel->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, stackLabel->sizePolicy().hasHeightForWidth())); stackComboLayout->addWidget(stackLabel); m_stackCombo = new DebuggerComboStack(tabStack); stackComboLayout->addWidget(m_stackCombo); varTabLayout->addLayout(stackComboLayout); m_localVarList= new VariablesListView(tabStack); varTabLayout->addWidget(m_localVarList); tabDebug->insertTab(tabStack, QString("Local")); QWidget* tabWatch = new QWidget(tabDebug); QVBoxLayout* watchTabLayout = new QVBoxLayout(tabWatch, 1, 1); QHBoxLayout* addWatchLayout = new QHBoxLayout(0, 6, 6); QLabel* addLabel = new QLabel(tabWatch); addLabel->setText(("Watch:")); addWatchLayout->addWidget(addLabel); m_edAddWatch = new KLineEdit(tabWatch); m_edAddWatch->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, m_edAddWatch->sizePolicy().hasHeightForWidth())); addWatchLayout->addWidget(m_edAddWatch); m_btAddWatch = new KPushButton(tabWatch); m_btAddWatch->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, m_btAddWatch->sizePolicy().hasHeightForWidth())); m_btAddWatch->setText(("Add")); addWatchLayout->addWidget(m_btAddWatch); QSpacerItem* spacer = new QSpacerItem(430, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); addWatchLayout->addItem(spacer); watchTabLayout->addLayout(addWatchLayout); m_watchList = new WatchListView(tabWatch); watchTabLayout->addWidget(m_watchList); tabDebug->insertTab(tabWatch, QString("Watch")); QWidget* breakpointTab = new QWidget(tabDebug); QVBoxLayout* breakpointTabLayout = new QVBoxLayout(breakpointTab, 1, 1); m_breakpointList = new BreakpointListView(breakpointTab); breakpointTabLayout->addWidget(m_breakpointList); tabDebug->insertTab(breakpointTab, QString("Breakpoints")); QWidget* logTab = new QWidget(tabDebug); QVBoxLayout* logTabLayout = new QVBoxLayout(logTab, 1, 1); m_logListView = new LogListView(logTab); logTabLayout->addWidget(m_logListView); tabDebug->insertTab(logTab, QString("Messages")); QWidget* outputTab = new QWidget(tabDebug); QVBoxLayout* outputTabLayout = new QVBoxLayout(outputTab, 1, 1); m_edOutput = new KTextEdit(outputTab); outputTabLayout->addWidget(m_edOutput); m_edOutput->setReadOnly(true); m_edOutput->setTextFormat(Qt::PlainText); m_edOutput->setPaper( QBrush(QColor("white"))); /* KTextEditor::Document* doc = KTextEditor::EditorChooser::createDocument( 0L, "KTextEditor::Document"); //doc->setReadWrite(false); m_edOutput = dynamic_cast<KTextEditor::EditInterface*>(doc); m_edOutput->setText("oioi"); outputTabLayout->addWidget(doc->createView(outputTab)); */ tabDebug->insertTab(outputTab, QString("Output")); }
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(); }
int drv_tabwidget(int drvid, void *a0, void* a1, void* a2, void* a3, void* a4, void* a5, void* a6, void* a7, void* a8, void* a9) { handle_head* head = (handle_head*)a0; QTabWidget *self = (QTabWidget*)head->native; switch (drvid) { case TABWIDGET_INIT: { drvNewObj(a0,new QTabWidget); break; } case TABWIDGET_ADDTAB: { self->addTab(drvGetWidget(a1),drvGetString(a2)); break; } case TABWIDGET_CLEAR: { self->clear(); break; } case TABWIDGET_COUNT: { drvSetInt(a1,self->count()); break; } case TABWIDGET_CURRENTINDEX: { drvSetInt(a1,self->currentIndex()); break; } case TABWIDGET_CURRENTWIDGET: { drvSetHandle(a1,self->currentWidget()); break; } case TABWIDGET_SETCURRENTINDEX: { self->setCurrentIndex(drvGetInt(a1)); break; } case TABWIDGET_SETCURRENTWIDGET: { self->setCurrentWidget(drvGetWidget(a1)); break; } case TABWIDGET_INDEXOF: { drvSetInt(a2,self->indexOf(drvGetWidget(a1))); break; } case TABWIDGET_INSERTTAB: { self->insertTab(drvGetInt(a1),drvGetWidget(a2),drvGetString(a3)); break; } case TABWIDGET_REMOVETAB: { self->removeTab(drvGetInt(a1)); break; } case TABWIDGET_SETTABTEXT: { self->setTabText(drvGetInt(a1),drvGetString(a2)); break; } case TABWIDGET_SETTABTOOLTIP: { self->setTabToolTip(drvGetInt(a1),drvGetString(a2)); break; } case TABWIDGET_TABTEXT: { drvSetString(a2,self->tabText(drvGetInt(a1))); break; } case TABWIDGET_TABTOOLTIP: { drvSetString(a2,self->tabToolTip(drvGetInt(a1))); break; } case TABWIDGET_WIDGETOF: { drvSetHandle(a2,self->widget(drvGetInt(a1))); break; } case TABWIDGET_ONCURRENTCHANGED: { QObject::connect(self,SIGNAL(currentChanged(int)),drvNewSignal(self,a1,a2),SLOT(call(int))); break; } default: return 0; } return 1; }
HomescreenSettings::HomescreenSettings(QWidget* parent, Qt::WFlags fl) : QDialog( parent, fl) { setWindowTitle(tr("Homescreen")); connect( qApp, SIGNAL(appMessage(QString,QByteArray)), this, SLOT(appMessage(QString,QByteArray)) ); QVBoxLayout *layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); QTabWidget *tabWidget = new QTabWidget(this); //appearance tab QWidget *appearance = new QWidget; QScrollArea *appearanceWrapper = new QScrollArea; appearanceWrapper->setFocusPolicy(Qt::NoFocus); appearanceWrapper->setFrameStyle(QFrame::NoFrame); appearanceWrapper->setWidget(appearance); appearanceWrapper->setWidgetResizable(true); appearanceWrapper->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QFormLayout *appearanceLayout = new QFormLayout(appearance); QSettings config("Trolltech", "qpe"); config.beginGroup( "HomeScreen" ); QString hsImgName = config.value("HomeScreenPicture").toString(); int hsDisplayMode = config.value("HomeScreenPictureMode", 0).toInt(); image = new QPushButton(); image->setIconSize(QSize(50,75)); image->setMinimumHeight(80); imageMode = new QComboBox; imageMode->addItem(tr("Scale & Crop")); imageMode->addItem(tr("Stretch")); imageMode->addItem(tr("Tile")); imageMode->addItem(tr("Center")); imageMode->addItem(tr("Scale")); imageMode->setCurrentIndex(hsDisplayMode); hsImage = QContent(hsImgName); if (!hsImage.isValid()) { image->setText(tr("No image")); imageMode->setVisible(false); } else { image->setIcon(QIcon(hsImage.fileName())); } connect( image, SIGNAL(clicked()), this, SLOT(editPhoto()) ); QVBoxLayout *imageLayout = new QVBoxLayout; imageLayout->setContentsMargins(0, 0, 0, 0); imageLayout->setSpacing(0); imageLayout->addWidget(image); imageLayout->addWidget(imageMode); appearanceLayout->addRow(tr("Image"), imageLayout); time = new QCheckBox(tr("Time")); date = new QCheckBox(tr("Date")); op = new QCheckBox(tr("Operator")); profile = new QCheckBox(tr("Profile")); location = new QCheckBox(tr("Location")); time->setCheckState(config.value("ShowTime", "true").toBool() ? Qt::Checked : Qt::Unchecked); date->setCheckState(config.value("ShowDate", "true").toBool() ? Qt::Checked : Qt::Unchecked); op->setCheckState(config.value("ShowOperator", "true").toBool() ? Qt::Checked : Qt::Unchecked); profile->setCheckState(config.value("ShowProfile", "true").toBool() ? Qt::Checked : Qt::Unchecked); location->setCheckState(config.value("ShowLocation", "true").toBool() ? Qt::Checked : Qt::Unchecked); QVBoxLayout *checkLayout = new QVBoxLayout; checkLayout->setContentsMargins(0, 0, 0, 0); checkLayout->setSpacing(0); checkLayout->addWidget(time); checkLayout->addWidget(date); checkLayout->addWidget(op); checkLayout->addWidget(profile); checkLayout->addWidget(location); appearanceLayout->addRow(tr("Display"), checkLayout); //idle tab QWidget *idle = new QWidget; QVBoxLayout *idleLayout = new QVBoxLayout(idle); QLabel *label = new QLabel(tr("Return to homescreen:")); QHBoxLayout *h1 = new QHBoxLayout; QHBoxLayout *h2 = new QHBoxLayout; QHBoxLayout *h3 = new QHBoxLayout; homeScreen = new QComboBox; homeScreen->addItem(tr("On display off")); homeScreen->addItem(tr("On suspend")); homeScreen->addItem(tr("Never")); label->setBuddy(homeScreen); connect(homeScreen, SIGNAL(activated(int)), this, SLOT(homeScreenActivated(int))); QString showHomeScreen = config.value("ShowHomeScreen", "Never").toString(); if (showHomeScreen == "DisplayOff") homeScreen->setCurrentIndex(0); else if (showHomeScreen == "Suspend") homeScreen->setCurrentIndex(1); else homeScreen->setCurrentIndex(2); lock = new QCheckBox(tr("Lock keys")); lock->setCheckState(config.value("AutoKeyLock", false).toBool() ? Qt::Checked : Qt::Unchecked); lock->setEnabled(homeScreen->currentIndex() == homeScreen->count()-1 ? false : true); powerNote = new QLabel; powerNote->setWordWrap( true ); QFont font = QApplication::font(); font.setItalic( true ); powerNote->setFont( font ); homeScreenActivated( homeScreen->currentIndex() ); screenSaver_vsi = new QValueSpaceItem( "/Hardware/ScreenSaver/State", this ); connect( screenSaver_vsi, SIGNAL(contentsChanged()), this, SLOT(homeScreenActivated()) ); h1->addSpacing(20); h1->addWidget(homeScreen); h2->addSpacing(20); h2->addWidget(lock); h3->addSpacing(20); h3->addWidget(powerNote); idleLayout->addWidget(label); idleLayout->addLayout(h1); idleLayout->addLayout(h2); idleLayout->addLayout(h3); idleLayout->addStretch(1); //secondary screen tab //TODO: reduce amount of duplicated code between tabs if (QApplication::desktop()->numScreens() > 1) { QWidget *secondary = new QWidget; QScrollArea *secondaryWrapper = new QScrollArea; secondaryWrapper->setFocusPolicy(Qt::NoFocus); secondaryWrapper->setFrameStyle(QFrame::NoFrame); secondaryWrapper->setWidget(secondary); secondaryWrapper->setWidgetResizable(true); secondaryWrapper->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QFormLayout *secondaryLayout = new QFormLayout(secondary); hsImgName = config.value("SecondaryHomeScreenPicture").toString(); hsDisplayMode = config.value("SecondaryHomeScreenPictureMode", 0).toInt(); secondaryImage = new QPushButton(); secondaryImage->setIconSize(QSize(50,75)); secondaryImage->setMinimumHeight(80); secondaryImageMode = new QComboBox; secondaryImageMode->addItem(tr("Scale & Crop")); secondaryImageMode->addItem(tr("Stretch")); secondaryImageMode->addItem(tr("Tile")); secondaryImageMode->addItem(tr("Center")); secondaryImageMode->addItem(tr("Scale")); secondaryImageMode->setCurrentIndex(hsDisplayMode); secondaryHsImage = QContent(hsImgName); if (!secondaryHsImage.isValid()) { secondaryImage->setText(tr("No image")); secondaryImageMode->setVisible(false); } else { secondaryImage->setIcon(QIcon(secondaryHsImage.fileName())); } connect( secondaryImage, SIGNAL(clicked()), this, SLOT(editSecondaryPhoto()) ); QVBoxLayout *secondaryImageLayout = new QVBoxLayout; secondaryImageLayout->setContentsMargins(0, 0, 0, 0); secondaryImageLayout->setSpacing(0); secondaryImageLayout->addWidget(secondaryImage); secondaryImageLayout->addWidget(secondaryImageMode); secondaryLayout->addRow(tr("Image"), secondaryImageLayout); tabWidget->addTab(secondaryWrapper, tr("Secondary","Secondary Display")); } tabWidget->insertTab(0, appearanceWrapper, tr("Appearance")); tabWidget->insertTab(1, idle, tr("Idle")); tabWidget->setCurrentIndex(0); layout->addWidget(tabWidget); QDrmContentPlugin::initialize(); }