QWidget *QgsProcessingDistanceWidgetWrapper::createWidget() { const QgsProcessingParameterDistance *distanceDef = static_cast< const QgsProcessingParameterDistance * >( parameterDefinition() ); QWidget *spin = QgsProcessingNumericWidgetWrapper::createWidget(); switch ( type() ) { case QgsProcessingGui::Standard: { mLabel = new QLabel(); mUnitsCombo = new QComboBox(); mUnitsCombo->addItem( QgsUnitTypes::toString( QgsUnitTypes::DistanceMeters ), QgsUnitTypes::DistanceMeters ); mUnitsCombo->addItem( QgsUnitTypes::toString( QgsUnitTypes::DistanceKilometers ), QgsUnitTypes::DistanceKilometers ); mUnitsCombo->addItem( QgsUnitTypes::toString( QgsUnitTypes::DistanceFeet ), QgsUnitTypes::DistanceFeet ); mUnitsCombo->addItem( QgsUnitTypes::toString( QgsUnitTypes::DistanceMiles ), QgsUnitTypes::DistanceMiles ); mUnitsCombo->addItem( QgsUnitTypes::toString( QgsUnitTypes::DistanceYards ), QgsUnitTypes::DistanceYards ); const int labelMargin = static_cast< int >( std::round( mUnitsCombo->fontMetrics().width( 'X' ) ) ); QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget( spin, 1 ); layout->insertSpacing( 1, labelMargin / 2 ); layout->insertWidget( 2, mLabel ); layout->insertWidget( 3, mUnitsCombo ); // bit of fiddlyness here -- we want the initial spacing to only be visible // when the warning label is shown, so it's embedded inside mWarningLabel // instead of outside it mWarningLabel = new QWidget(); QHBoxLayout *warningLayout = new QHBoxLayout(); warningLayout->setMargin( 0 ); warningLayout->setContentsMargins( 0, 0, 0, 0 ); QLabel *warning = new QLabel(); QIcon icon = QgsApplication::getThemeIcon( QStringLiteral( "mIconWarning.svg" ) ); const int size = static_cast< int >( std::max( 24.0, spin->minimumSize().height() * 0.5 ) ); warning->setPixmap( icon.pixmap( icon.actualSize( QSize( size, size ) ) ) ); warning->setToolTip( tr( "Distance is in geographic degrees. Consider reprojecting to a projected local coordinate system for accurate results." ) ); warningLayout->insertSpacing( 0, labelMargin / 2 ); warningLayout->insertWidget( 1, warning ); mWarningLabel->setLayout( warningLayout ); layout->insertWidget( 4, mWarningLabel ); setUnits( distanceDef->defaultUnit() ); QWidget *w = new QWidget(); layout->setMargin( 0 ); layout->setContentsMargins( 0, 0, 0, 0 ); w->setLayout( layout ); return w; } case QgsProcessingGui::Batch: case QgsProcessingGui::Modeler: return spin; } return nullptr; }
/*********** File **************/ FileConfigControl::FileConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QWidget *_parent, QGridLayout *l, int &line ) : VStringConfigControl( _p_this, _p_item, _parent ) { label = new QLabel( qtr(p_item->psz_text) ); text = new QLineEdit( qfu(p_item->value.psz) ); browse = new QPushButton( qtr( "Browse..." ) ); QHBoxLayout *textAndButton = new QHBoxLayout(); textAndButton->setMargin( 0 ); textAndButton->addWidget( text, 2 ); textAndButton->addWidget( browse, 0 ); BUTTONACT( browse, updateField() ); finish(); if( !l ) { QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget( label, 0 ); layout->insertSpacing( 1, 10 ); layout->addLayout( textAndButton, LAST_COLUMN ); widget->setLayout( layout ); } else { l->addWidget( label, line, 0 ); l->setColumnMinimumWidth( 1, 10 ); l->addLayout( textAndButton, line, LAST_COLUMN ); } }
/*********** String **************/ StringConfigControl::StringConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QWidget *_parent, QGridLayout *l, int &line, bool pwd ) : VStringConfigControl( _p_this, _p_item, _parent ) { label = new QLabel( qtr(p_item->psz_text) ); text = new QLineEdit( qfu(p_item->value.psz) ); if( pwd ) text->setEchoMode( QLineEdit::Password ); finish(); if( !l ) { QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget( label, 0 ); layout->insertSpacing( 1, 10 ); layout->addWidget( text, LAST_COLUMN ); widget->setLayout( layout ); } else { l->addWidget( label, line, 0 ); l->setColumnMinimumWidth( 1, 10 ); l->addWidget( text, line, LAST_COLUMN ); } }
MainWindow::MainWindow(ChessGame* game) : m_game(nullptr), m_closing(false), m_readyToClose(false) { setAttribute(Qt::WA_DeleteOnClose, true); QHBoxLayout* clockLayout = new QHBoxLayout(); for (int i = 0; i < 2; i++) { m_chessClock[i] = new ChessClock(); clockLayout->addWidget(m_chessClock[i]); Chess::Side side = Chess::Side::Type(i); m_chessClock[i]->setPlayerName(side.toString()); } clockLayout->insertSpacing(1, 20); m_gameViewer = new GameViewer; m_gameViewer->setContentsMargins(6, 6, 6, 6); m_moveList = new MoveList(this); m_tagsModel = new PgnTagsModel(this); new ModelTest(m_tagsModel, this); QVBoxLayout* mainLayout = new QVBoxLayout(); mainLayout->addLayout(clockLayout); mainLayout->addWidget(m_gameViewer); // The content margins look stupid when used with dock widgets mainLayout->setContentsMargins(0, 0, 0, 0); QWidget* mainWidget = new QWidget(this); mainWidget->setLayout(mainLayout); setCentralWidget(mainWidget); setStatusBar(new QStatusBar()); createActions(); createMenus(); createToolBars(); createDockWindows(); connect(m_moveList, SIGNAL(moveClicked(int)), m_gameViewer, SLOT(viewMove(int))); connect(m_moveList, SIGNAL(commentClicked(int, QString)), this, SLOT(editMoveComment(int, QString))); connect(m_gameViewer, SIGNAL(moveSelected(int)), m_moveList, SLOT(selectMove(int))); connect(CuteChessApplication::instance()->gameManager(), SIGNAL(finished()), this, SLOT(onGameManagerFinished()), Qt::QueuedConnection); addGame(game); }
RecordDialog::RecordDialog(QWidget *parent, const char *name) :QDialog(parent, name, TRUE) { QVBoxLayout *layout = new QVBoxLayout(this); QHBoxLayout *hlayout = new QHBoxLayout(this); layout->insertSpacing(0,5); output = new QMultiLineEdit(this, "output"); output->setReadOnly(true); output->setWordWrap(QMultiLineEdit::WidgetWidth); output->setText(tr("Please enter the name of the new remote, and press Next\n")); layout->insertWidget(-1, output); layout->insertSpacing(-1, 5); layout->insertLayout(-1, hlayout); layout->insertSpacing(-1, 5); hlayout->insertSpacing(0, 5); input = new QLineEdit(this, "input"); hlayout->insertWidget(-1, input, 1); hlayout->insertSpacing(-1, 5); nextbtn = new QPushButton(tr("Next"), this, "next"); nextbtn->setDefault(true); hlayout->insertWidget(-1, nextbtn); hlayout->insertSpacing(-1, 5); connect(nextbtn, SIGNAL(clicked()), this, SLOT(nextPressed()) ); setCaption(tr("Learn Remote")); input->setFocus(); stepnum = 0; outputenabled = false; writeok = true; ignorekill = false; record = new OProcess; // We need to stop lircd because irrecord accesses the IR device directly lh = new LircHandler(); lh->stopLircd(); }
void JBlockerMessageViewBox::setupUI() { /* Text browser for display message body */ p_textBrowser = new QTextBrowser(this); /* OK button to exit message box */ p_exitButton = new QPushButton(QString("OK"), this); /* Setup layout */ QVBoxLayout* mainLayout = new QVBoxLayout(); /* Add components onto layout */ mainLayout->addWidget(p_textBrowser); /* Layout for bottom buttons */ QHBoxLayout* bottomLayout = new QHBoxLayout(); bottomLayout->insertSpacing(0, 220); bottomLayout->addWidget(p_exitButton); bottomLayout->insertSpacing(-1, 220); mainLayout->addLayout(bottomLayout); /* Add layout to message box */ this->setLayout(mainLayout); /* Set geometry of message box */ this->setGeometry(QRect(0, 0, 800, 480)); }
// Method to create the main title void Window::createTitle() { // Creates the group box titleGroupBox = new QGroupBox(); // Creates the Horizontal Box Layout for the group box QHBoxLayout *layout = new QHBoxLayout; // Creates the main title of the program label QLabel *mainTitle = new QLabel(tr("Scout Talker")); // Center aligns the label mainTitle->setAlignment(Qt::AlignCenter); QFont font; font.setFamily(font.defaultFamily()); // Sets the font as the default one font.setPointSize(20); // Sets font size font.setBold(true); // Sets font as bold // Changes the label font mainTitle->setFont(font); // Creates the main menu createMainMenu(); // Set alignment of the layout layout->setAlignment(Qt::AlignCenter); // Add an empty space with the size of 50 layout->insertSpacing(0, 50); // Add title widget to the layout layout->addWidget(mainTitle); // Add space between widgets layout->addSpacing(25); // Add button to the layout layout->addWidget(mainMenuButton); // Add an empty space with the size of 50 layout->addSpacing(50); // Sets the group box layout titleGroupBox->setLayout(layout); // Command to remove border of Group Box titleGroupBox->setStyleSheet("QGroupBox {border: 0px solid gray;}"); }
ProfileForm::ProfileForm(QWidget* parent) : QWidget{parent} , qr{nullptr} { bodyUI = new Ui::IdentitySettings; bodyUI->setupUi(this); core = Core::getInstance(); bodyUI->userNameLabel->setToolTip(tr("Tox user names cannot exceed %1 characters.") .arg(TOX_MAX_NAME_LENGTH)); bodyUI->userName->setMaxLength(TOX_MAX_NAME_LENGTH); // tox toxId = new ClickableTE(); toxId->setReadOnly(true); toxId->setFrame(false); toxId->setFont(Style::getFont(Style::Small)); toxId->setToolTip(bodyUI->toxId->toolTip()); QVBoxLayout* toxIdGroup = qobject_cast<QVBoxLayout*>(bodyUI->toxGroup->layout()); delete toxIdGroup->replaceWidget(bodyUI->toxId, toxId); // Original toxId is in heap, delete it bodyUI->toxId->hide(); /* Toxme section init */ bodyUI->toxmeServersList->addItem("toxme.io"); QString toxmeInfo = Settings::getInstance().getToxmeInfo(); if (toxmeInfo.isEmpty()) // User not registered { showRegisterToxme(); } else { showExistingToxme(); } bodyUI->qrLabel->setWordWrap(true); QRegExp re("[^@ ]+"); QRegExpValidator* validator = new QRegExpValidator(re, this); bodyUI->toxmeUsername->setValidator(validator); profilePicture = new MaskablePixmapWidget(this, QSize(64, 64), ":/img/avatar_mask.svg"); profilePicture->setPixmap(QPixmap(":/img/contact_dark.svg")); profilePicture->setContextMenuPolicy(Qt::CustomContextMenu); profilePicture->setClickable(true); profilePicture->installEventFilter(this); profilePicture->setAccessibleName("Profile avatar"); profilePicture->setAccessibleDescription("Set a profile avatar shown to all contacts"); connect(profilePicture, SIGNAL(clicked()), this, SLOT(onAvatarClicked())); connect(profilePicture, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showProfilePictureContextMenu(const QPoint&))); QHBoxLayout* publicGrouplayout = qobject_cast<QHBoxLayout*>(bodyUI->publicGroup->layout()); publicGrouplayout->insertWidget(0, profilePicture); publicGrouplayout->insertSpacing(1, 7); timer.setInterval(750); timer.setSingleShot(true); connect(&timer, &QTimer::timeout, this, [=]() { bodyUI->toxIdLabel->setText(bodyUI->toxIdLabel->text().replace(" ✔", "")); hasCheck = false; }); connect(bodyUI->toxIdLabel, SIGNAL(clicked()), this, SLOT(copyIdClicked())); connect(toxId, SIGNAL(clicked()), this, SLOT(copyIdClicked())); connect(core, &Core::idSet, this, &ProfileForm::setToxId); connect(bodyUI->userName, SIGNAL(editingFinished()), this, SLOT(onUserNameEdited())); connect(bodyUI->statusMessage, SIGNAL(editingFinished()), this, SLOT(onStatusMessageEdited())); connect(bodyUI->renameButton, &QPushButton::clicked, this, &ProfileForm::onRenameClicked); connect(bodyUI->exportButton, &QPushButton::clicked, this, &ProfileForm::onExportClicked); connect(bodyUI->deleteButton, &QPushButton::clicked, this, &ProfileForm::onDeleteClicked); connect(bodyUI->logoutButton, &QPushButton::clicked, this, &ProfileForm::onLogoutClicked); connect(bodyUI->deletePassButton, &QPushButton::clicked, this, &ProfileForm::onDeletePassClicked); connect(bodyUI->changePassButton, &QPushButton::clicked, this, &ProfileForm::onChangePassClicked); connect(bodyUI->deletePassButton, &QPushButton::clicked, this, &ProfileForm::setPasswordButtonsText); connect(bodyUI->changePassButton, &QPushButton::clicked, this, &ProfileForm::setPasswordButtonsText); connect(bodyUI->saveQr, &QPushButton::clicked, this, &ProfileForm::onSaveQrClicked); connect(bodyUI->copyQr, &QPushButton::clicked, this, &ProfileForm::onCopyQrClicked); connect(bodyUI->toxmeRegisterButton, &QPushButton::clicked, this, &ProfileForm::onRegisterButtonClicked); connect(bodyUI->toxmeUpdateButton, &QPushButton::clicked, this, &ProfileForm::onRegisterButtonClicked); connect(core, &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); }); connect(core, &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); }); for (QComboBox* cb : findChildren<QComboBox*>()) { cb->installEventFilter(this); cb->setFocusPolicy(Qt::StrongFocus); } retranslateUi(); Translator::registerHandler(std::bind(&ProfileForm::retranslateUi, this), this); }
ProfileForm::ProfileForm(QWidget *parent) : QWidget{parent}, qr{nullptr} { bodyUI = new Ui::IdentitySettings; bodyUI->setupUi(this); core = Core::getInstance(); head = new QWidget(this); QHBoxLayout* headLayout = new QHBoxLayout(); head->setLayout(headLayout); QLabel* imgLabel = new QLabel(); headLayout->addWidget(imgLabel); QLabel* nameLabel = new QLabel(); QFont bold; bold.setBold(true); nameLabel->setFont(bold); headLayout->addWidget(nameLabel); headLayout->addStretch(1); nameLabel->setText(tr("User Profile")); imgLabel->setPixmap(QPixmap(":/img/settings/identity.png").scaledToHeight(40, Qt::SmoothTransformation)); // tox toxId = new ClickableTE(); toxId->setReadOnly(true); toxId->setFrame(false); toxId->setFont(Style::getFont(Style::Small)); toxId->setToolTip(bodyUI->toxId->toolTip()); QVBoxLayout *toxIdGroup = qobject_cast<QVBoxLayout*>(bodyUI->toxGroup->layout()); toxIdGroup->replaceWidget(bodyUI->toxId, toxId); bodyUI->toxId->hide(); bodyUI->qrLabel->setWordWrap(true); profilePicture = new MaskablePixmapWidget(this, QSize(64, 64), ":/img/avatar_mask.svg"); profilePicture->setPixmap(QPixmap(":/img/contact_dark.svg")); profilePicture->setClickable(true); connect(profilePicture, SIGNAL(clicked()), this, SLOT(onAvatarClicked())); QHBoxLayout *publicGrouplayout = qobject_cast<QHBoxLayout*>(bodyUI->publicGroup->layout()); publicGrouplayout->insertWidget(0, profilePicture); publicGrouplayout->insertSpacing(1, 7); timer.setInterval(750); timer.setSingleShot(true); connect(&timer, &QTimer::timeout, this, [=]() {bodyUI->toxIdLabel->setText(bodyUI->toxIdLabel->text().replace(" ✔", "")); hasCheck = false;}); connect(bodyUI->toxIdLabel, SIGNAL(clicked()), this, SLOT(copyIdClicked())); connect(toxId, SIGNAL(clicked()), this, SLOT(copyIdClicked())); connect(core, &Core::idSet, this, &ProfileForm::setToxId); connect(core, &Core::statusSet, this, &ProfileForm::onStatusSet); connect(bodyUI->userName, SIGNAL(editingFinished()), this, SLOT(onUserNameEdited())); connect(bodyUI->statusMessage, SIGNAL(editingFinished()), this, SLOT(onStatusMessageEdited())); connect(bodyUI->loadButton, &QPushButton::clicked, this, &ProfileForm::onLoadClicked); connect(bodyUI->renameButton, &QPushButton::clicked, this, &ProfileForm::onRenameClicked); connect(bodyUI->exportButton, &QPushButton::clicked, this, &ProfileForm::onExportClicked); connect(bodyUI->deleteButton, &QPushButton::clicked, this, &ProfileForm::onDeleteClicked); connect(bodyUI->importButton, &QPushButton::clicked, this, &ProfileForm::onImportClicked); connect(bodyUI->newButton, &QPushButton::clicked, this, &ProfileForm::onNewClicked); connect(core, &Core::avStart, this, &ProfileForm::disableSwitching); connect(core, &Core::avStarting, this, &ProfileForm::disableSwitching); connect(core, &Core::avInvite, this, &ProfileForm::disableSwitching); connect(core, &Core::avRinging, this, &ProfileForm::disableSwitching); connect(core, &Core::avCancel, this, &ProfileForm::enableSwitching); connect(core, &Core::avEnd, this, &ProfileForm::enableSwitching); connect(core, &Core::avEnding, this, &ProfileForm::enableSwitching); connect(core, &Core::avPeerTimeout, this, &ProfileForm::enableSwitching); connect(core, &Core::avRequestTimeout, this, &ProfileForm::enableSwitching); connect(core, &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); }); connect(core, &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); }); for (QComboBox* cb : findChildren<QComboBox*>()) { cb->installEventFilter(this); cb->setFocusPolicy(Qt::StrongFocus); } }
InstrumentMidiIOView::InstrumentMidiIOView( QWidget* parent ) : QWidget( parent ), ModelView( NULL, this ), m_rpBtn( NULL ), m_wpBtn( NULL ) { QVBoxLayout* layout = new QVBoxLayout( this ); layout->setMargin( 5 ); m_midiInputGroupBox = new GroupBox( tr( "ENABLE MIDI INPUT" ) ); layout->addWidget( m_midiInputGroupBox ); QHBoxLayout* midiInputLayout = new QHBoxLayout( m_midiInputGroupBox ); midiInputLayout->setContentsMargins( 8, 18, 8, 8 ); midiInputLayout->setSpacing( 6 ); m_inputChannelSpinBox = new LcdSpinBox( 2, m_midiInputGroupBox ); m_inputChannelSpinBox->addTextForValue( 0, "--" ); m_inputChannelSpinBox->setLabel( tr( "CHANNEL" ) ); m_inputChannelSpinBox->setEnabled( false ); midiInputLayout->addWidget( m_inputChannelSpinBox ); m_fixedInputVelocitySpinBox = new LcdSpinBox( 3, m_midiInputGroupBox ); m_fixedInputVelocitySpinBox->setDisplayOffset( 1 ); m_fixedInputVelocitySpinBox->addTextForValue( 0, "---" ); m_fixedInputVelocitySpinBox->setLabel( tr( "VELOCITY" ) ); m_fixedInputVelocitySpinBox->setEnabled( false ); midiInputLayout->addWidget( m_fixedInputVelocitySpinBox ); midiInputLayout->addStretch(); connect( m_midiInputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_inputChannelSpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiInputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_fixedInputVelocitySpinBox, SLOT( setEnabled( bool ) ) ); m_midiOutputGroupBox = new GroupBox( tr( "ENABLE MIDI OUTPUT" ) ); layout->addWidget( m_midiOutputGroupBox ); QHBoxLayout* midiOutputLayout = new QHBoxLayout( m_midiOutputGroupBox ); midiOutputLayout->setContentsMargins( 8, 18, 8, 8 ); midiOutputLayout->setSpacing( 6 ); m_outputChannelSpinBox = new LcdSpinBox( 2, m_midiOutputGroupBox ); m_outputChannelSpinBox->setLabel( tr( "CHANNEL" ) ); m_outputChannelSpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_outputChannelSpinBox ); m_fixedOutputVelocitySpinBox = new LcdSpinBox( 3, m_midiOutputGroupBox ); m_fixedOutputVelocitySpinBox->setDisplayOffset( 1 ); m_fixedOutputVelocitySpinBox->addTextForValue( 0, "---" ); m_fixedOutputVelocitySpinBox->setLabel( tr( "VELOCITY" ) ); m_fixedOutputVelocitySpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_fixedOutputVelocitySpinBox ); m_outputProgramSpinBox = new LcdSpinBox( 3, m_midiOutputGroupBox ); m_outputProgramSpinBox->setLabel( tr( "PROGRAM" ) ); m_outputProgramSpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_outputProgramSpinBox ); m_fixedOutputNoteSpinBox = new LcdSpinBox( 3, m_midiOutputGroupBox ); m_fixedOutputNoteSpinBox->setDisplayOffset( 1 ); m_fixedOutputNoteSpinBox->addTextForValue( 0, "---" ); m_fixedOutputNoteSpinBox->setLabel( tr( "NOTE" ) ); m_fixedOutputNoteSpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_fixedOutputNoteSpinBox ); midiOutputLayout->addStretch(); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_outputChannelSpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_fixedOutputVelocitySpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_outputProgramSpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_fixedOutputNoteSpinBox, SLOT( setEnabled( bool ) ) ); if( !Engine::mixer()->midiClient()->isRaw() ) { m_rpBtn = new QToolButton; m_rpBtn->setMinimumSize( 32, 32 ); m_rpBtn->setText( tr( "MIDI devices to receive MIDI events from" ) ); m_rpBtn->setIcon( embed::getIconPixmap( "piano" ) ); m_rpBtn->setPopupMode( QToolButton::InstantPopup ); midiInputLayout->insertSpacing( 0, 4 ); midiInputLayout->insertWidget( 0, m_rpBtn ); m_wpBtn = new QToolButton; m_wpBtn->setMinimumSize( 32, 32 ); m_wpBtn->setText( tr( "MIDI devices to send MIDI events to" ) ); m_wpBtn->setIcon( embed::getIconPixmap( "piano" ) ); m_wpBtn->setPopupMode( QToolButton::InstantPopup ); midiOutputLayout->insertSpacing( 0, 4 ); midiOutputLayout->insertWidget( 0, m_wpBtn ); } #define PROVIDE_CUSTOM_BASE_VELOCITY_UI #ifdef PROVIDE_CUSTOM_BASE_VELOCITY_UI GroupBox* baseVelocityGroupBox = new GroupBox( tr( "CUSTOM BASE VELOCITY" ) ); layout->addWidget( baseVelocityGroupBox ); QVBoxLayout* baseVelocityLayout = new QVBoxLayout( baseVelocityGroupBox ); baseVelocityLayout->setContentsMargins( 8, 18, 8, 8 ); baseVelocityLayout->setSpacing( 6 ); QLabel* baseVelocityHelp = new QLabel( tr( "Specify the velocity normalization base for MIDI-based instruments at 100% note velocity" ) ); baseVelocityHelp->setWordWrap( true ); baseVelocityHelp->setFont( pointSize<8>( baseVelocityHelp->font() ) ); baseVelocityLayout->addWidget( baseVelocityHelp ); m_baseVelocitySpinBox = new LcdSpinBox( 3, baseVelocityGroupBox ); m_baseVelocitySpinBox->setLabel( tr( "BASE VELOCITY" ) ); m_baseVelocitySpinBox->setEnabled( false ); baseVelocityLayout->addWidget( m_baseVelocitySpinBox ); connect( baseVelocityGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_baseVelocitySpinBox, SLOT( setEnabled( bool ) ) ); #endif layout->addStretch(); }
SettingsPageTerrainColors::SettingsPageTerrainColors(QWidget *parent) : QWidget(parent), colorsChanged(false), m_autoSip( true ) { setObjectName("SettingsPageTerrainColors"); setWindowFlags( Qt::Tool ); setWindowModality( Qt::WindowModal ); setAttribute(Qt::WA_DeleteOnClose); setWindowTitle( tr("Settings - Terrain Colors") ); if( parent ) { resize( parent->size() ); } // Layout used by scroll area QHBoxLayout *sal = new QHBoxLayout; // new widget used as container for the dialog layout. QWidget* sw = new QWidget; // Scroll area QScrollArea* sa = new QScrollArea; sa->setWidgetResizable( true ); sa->setFrameStyle( QFrame::NoFrame ); sa->setWidget( sw ); #ifdef QSCROLLER QScroller::grabGesture( sa->viewport(), QScroller::LeftMouseButtonGesture ); #endif #ifdef QTSCROLLER QtScroller::grabGesture( sa->viewport(), QtScroller::LeftMouseButtonGesture ); #endif // Add scroll area to its own layout sal->addWidget( sa ); QHBoxLayout *contentLayout = new QHBoxLayout(this); // Pass scroll area layout to the content layout. contentLayout->addLayout( sal ); /** * Altitude levels in meters to be displayed in color combo box. */ const char *altitudes[51] = { "< 0", "0", "10", "25", "50", "75", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1250", "1500", "1750", "2000", "2250", "2500", "2750", "3000", "3250", "3500", "3750", "4000", "4250", "4500", "4750", "5000", "5250", "5500", "5750", "6000", "6250", "6500", "6750", "7000", "7250", "7500", "7750", "8000", "8250", "8500", "8750" }; // Determine pixmap size to be used for icons in dependency of the used font int size = QFontMetrics(font()).boundingRect("XM").height() - 2; pixmapSize = QSize( size, size ); QPixmap pixmap(pixmapSize); // load stored terrain colors into working list for( int i = 0; i < SIZEOF_TERRAIN_COLORS; i++ ) { QColor color = GeneralConfig::instance()->getTerrainColor(i); terrainColor[i] = color; } // load ground color groundColor = GeneralConfig::instance()->getGroundColor(); // put all widgets in a HBox layout QHBoxLayout *topLayout = new QHBoxLayout(sw); // create elevation color bar as image elevationImage = new ElevationColorImage( &terrainColor[0], this ); topLayout->addWidget( elevationImage ); // all editor widgets will be put into a group box to get a better view QGroupBox *editBox = new QGroupBox( tr("Color Selection"), this ); // put group box in an extra VBox layout to center it vertically QVBoxLayout *editAll = new QVBoxLayout; editAll->addStretch( 10 ); editAll->addWidget( editBox ); editAll->addStretch( 10 ); topLayout->addLayout( editAll ); // put all edit widgets (combo box and buttons) in a separate VBox layout QVBoxLayout *editLayout = new QVBoxLayout; editLayout->setSpacing( editLayout->spacing() * Layout::getIntScaledDensity() ); QLabel *label = new QLabel( tr("Terrain Level") ); editLayout->addWidget( label ); //-------------------------------------------------------------------------- // The users altitude unit (meters/feed) must be considered during // elevation display in the combo box. QString unit; elevationBox = new QComboBox( this ); #ifdef ANDROID QAbstractItemView* listView = elevationBox->view(); QScrollBar* lvsb = listView->verticalScrollBar(); lvsb->setStyleSheet( Layout::getCbSbStyle() ); #endif #ifdef QSCROLLER elevationBox->view()->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel ); QScroller::grabGesture( elevationBox->view()->viewport(), QScroller::LeftMouseButtonGesture ); #endif #ifdef QTSCROLLER elevationBox->view()->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel ); QtScroller::grabGesture( elevationBox->view()->viewport(), QtScroller::LeftMouseButtonGesture ); #endif if( Altitude::getUnit() == Altitude::meters ) { // use unit meter unit = "m"; for( int i = SIZEOF_TERRAIN_COLORS-1; i > 1; i-- ) { pixmap.fill( terrainColor[i] ); elevationBox->addItem( QIcon( pixmap ), QString(altitudes[i]) + unit ); } } else { // use unit feed unit = "ft"; for( int i = SIZEOF_TERRAIN_COLORS-1; i > 1; i-- ) { int altFeed = static_cast<int>(QString(altitudes[i]).toDouble() * 3.28095); pixmap.fill( terrainColor[i] ); elevationBox->addItem( QIcon( pixmap ), QString::number(altFeed) + unit ); } } pixmap.fill( terrainColor[1] ); elevationBox->addItem( QIcon( pixmap ), QString(altitudes[1]) ); pixmap.fill( terrainColor[0] ); elevationBox->addItem( QIcon( pixmap ), QString(altitudes[0]) ); // set index to level 0 elevationBox->setCurrentIndex( SIZEOF_TERRAIN_COLORS-2 ); editLayout->addWidget( elevationBox ); //-------------------------------------------------------------------------- // add push button for elevation color chooser dialog editColorButton = new QPushButton( tr("Terrain Color") ); // on click the color chooser dialog will be opened connect( editColorButton, SIGNAL(clicked()), this, SLOT(slot_editColor()) ); editLayout->addWidget( editColorButton ); //-------------------------------------------------------------------------- // add push button for ground color chooser dialog groundColorButton = new QPushButton( tr("Ground Color") ); pixmap.fill( groundColor ); groundColorButton->setIcon( QIcon(pixmap) ); // on click the color chooser dialog will be opened connect( groundColorButton, SIGNAL(clicked()), this, SLOT(slot_editGroundColor()) ); editLayout->addSpacing( 10 * Layout::getIntScaledDensity() ); editLayout->addWidget( groundColorButton ); editLayout->addSpacing( 20 * Layout::getIntScaledDensity() ); //-------------------------------------------------------------------------- // add button for assigning of default colors defaultColorButton = new QPushButton( tr("Color Defaults") ); // on click all colors are reset to the defaults connect( defaultColorButton, SIGNAL(clicked()), this, SLOT(slot_setColorDefaults()) ); editLayout->addWidget( defaultColorButton ); // add stretch items to posit editor widgets in the center of the VBox layout editLayout->insertStretch(0, 10 ); editLayout->addStretch( 10 ); editBox->setLayout(editLayout); //-------------------------------------------------------------------------- // add spin box for moving elevation zero line QGroupBox *setOffsetBox = new QGroupBox( tr("Elevation Offset"), this ); // put group box in an extra VBox layout to center it vertically QVBoxLayout *offsetLayout = new QVBoxLayout; offsetLayout->addStretch( 10 ); offsetLayout->addWidget( setOffsetBox ); offsetLayout->addStretch( 10 ); QVBoxLayout *spinboxLayout = new QVBoxLayout; elevationOffset = new QSpinBox; elevationOffset->setSingleStep(1); elevationOffset->setRange(-50, 50); connect( elevationOffset, SIGNAL(editingFinished()), MainWindow::mainWindow(), SLOT(slotCloseSip()) ); VarSpinBox* hspin = new VarSpinBox( elevationOffset ); spinboxLayout->addWidget(hspin); setOffsetBox->setLayout(spinboxLayout); topLayout->addLayout( offsetLayout ); topLayout->insertSpacing(1, 60 ); topLayout->addStretch( 10 ); QPushButton *cancel = new QPushButton(this); cancel->setIcon(QIcon(GeneralConfig::instance()->loadPixmap("cancel.png"))); cancel->setIconSize(QSize(Layout::getButtonSize(12), Layout::getButtonSize(12))); cancel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::QSizePolicy::Preferred); QPushButton *ok = new QPushButton(this); ok->setIcon(QIcon(GeneralConfig::instance()->loadPixmap("ok.png"))); ok->setIconSize(QSize(Layout::getButtonSize(12), Layout::getButtonSize(12))); ok->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::QSizePolicy::Preferred); QLabel *titlePix = new QLabel(this); titlePix->setAlignment( Qt::AlignCenter ); titlePix->setPixmap(GeneralConfig::instance()->loadPixmap("setup.png")); connect(ok, SIGNAL(pressed()), this, SLOT(slotAccept())); connect(cancel, SIGNAL(pressed()), this, SLOT(slotReject())); QVBoxLayout *buttonBox = new QVBoxLayout; buttonBox->setSpacing(0); buttonBox->addStretch(2); buttonBox->addWidget(cancel, 1); buttonBox->addSpacing(30); buttonBox->addWidget(ok, 1); buttonBox->addStretch(2); buttonBox->addWidget(titlePix); contentLayout->addLayout(buttonBox); load(); }
ProfileForm::ProfileForm(QWidget *parent) : QWidget{parent}, qr{nullptr} { bodyUI = new Ui::IdentitySettings; bodyUI->setupUi(this); core = Core::getInstance(); head = new QWidget(this); QHBoxLayout* headLayout = new QHBoxLayout(); head->setLayout(headLayout); QLabel* imgLabel = new QLabel(); headLayout->addWidget(imgLabel); nameLabel = new QLabel(); QFont bold; bold.setBold(true); nameLabel->setFont(bold); headLayout->addWidget(nameLabel); headLayout->addStretch(1); imgLabel->setPixmap(QPixmap(":/img/settings/identity.png").scaledToHeight(40, Qt::SmoothTransformation)); // tox toxId = new ClickableTE(); toxId->setReadOnly(true); toxId->setFrame(false); toxId->setFont(Style::getFont(Style::Small)); toxId->setToolTip(bodyUI->toxId->toolTip()); QVBoxLayout *toxIdGroup = qobject_cast<QVBoxLayout*>(bodyUI->toxGroup->layout()); delete toxIdGroup->replaceWidget(bodyUI->toxId, toxId); // Original toxId is in heap, delete it bodyUI->toxId->hide(); bodyUI->qrLabel->setWordWrap(true); profilePicture = new MaskablePixmapWidget(this, QSize(64, 64), ":/img/avatar_mask.svg"); profilePicture->setPixmap(QPixmap(":/img/contact_dark.svg")); profilePicture->setContextMenuPolicy(Qt::CustomContextMenu); profilePicture->setClickable(true); profilePicture->installEventFilter(this); connect(profilePicture, SIGNAL(clicked()), this, SLOT(onAvatarClicked())); connect(profilePicture, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showProfilePictureContextMenu(const QPoint&))); QHBoxLayout *publicGrouplayout = qobject_cast<QHBoxLayout*>(bodyUI->publicGroup->layout()); publicGrouplayout->insertWidget(0, profilePicture); publicGrouplayout->insertSpacing(1, 7); timer.setInterval(750); timer.setSingleShot(true); connect(&timer, &QTimer::timeout, this, [=]() {bodyUI->toxIdLabel->setText(bodyUI->toxIdLabel->text().replace(" ✔", "")); hasCheck = false;}); connect(bodyUI->toxIdLabel, SIGNAL(clicked()), this, SLOT(copyIdClicked())); connect(toxId, SIGNAL(clicked()), this, SLOT(copyIdClicked())); connect(core, &Core::idSet, this, &ProfileForm::setToxId); connect(bodyUI->userName, SIGNAL(editingFinished()), this, SLOT(onUserNameEdited())); connect(bodyUI->statusMessage, SIGNAL(editingFinished()), this, SLOT(onStatusMessageEdited())); connect(bodyUI->renameButton, &QPushButton::clicked, this, &ProfileForm::onRenameClicked); connect(bodyUI->exportButton, &QPushButton::clicked, this, &ProfileForm::onExportClicked); connect(bodyUI->deleteButton, &QPushButton::clicked, this, &ProfileForm::onDeleteClicked); connect(bodyUI->logoutButton, &QPushButton::clicked, this, &ProfileForm::onLogoutClicked); connect(bodyUI->deletePassButton, &QPushButton::clicked, this, &ProfileForm::onDeletePassClicked); connect(bodyUI->changePassButton, &QPushButton::clicked, this, &ProfileForm::onChangePassClicked); connect(bodyUI->saveQr, &QPushButton::clicked, this, &ProfileForm::onSaveQrClicked); connect(bodyUI->copyQr, &QPushButton::clicked, this, &ProfileForm::onCopyQrClicked); connect(core, &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); }); connect(core, &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); }); for (QComboBox* cb : findChildren<QComboBox*>()) { cb->installEventFilter(this); cb->setFocusPolicy(Qt::StrongFocus); } retranslateUi(); Translator::registerHandler(std::bind(&ProfileForm::retranslateUi, this), this); }
QWidget * DownloadRegionDialog::Private::createSelectionMethodBox() { m_visibleRegionMethodButton = new QRadioButton( tr( "Visible region" ) ); m_specifiedRegionMethodButton = new QRadioButton( tr( "Specify region" ) ); m_routeDownloadMethodButton = new QRadioButton( tr( "Download Route" ) ); m_routeDownloadMethodButton->setToolTip( tr( "Enabled when a route exists" ) ); m_routeDownloadMethodButton->setEnabled( hasRoute() ); m_routeDownloadMethodButton->setChecked( hasRoute() ); m_routeOffsetSpinBox = new QDoubleSpinBox(); m_routeOffsetSpinBox->setEnabled( hasRoute() ); m_routeOffsetSpinBox->setRange( minimumRouteOffset, maximumRouteOffset ); int defaultOffset = 500; m_routeOffsetSpinBox->setValue( defaultOffset ); m_routeOffsetSpinBox->setSingleStep( 100 ); m_routeOffsetSpinBox->setSuffix( " m" ); m_routeOffsetSpinBox->setDecimals( 0 ); m_routeOffsetSpinBox->setAlignment( Qt::AlignRight ); m_routeOffsetLabel = new QLabel( tr( "Offset from route:" ) ); m_routeOffsetLabel->setAlignment( Qt::AlignHCenter ); connect( m_visibleRegionMethodButton, SIGNAL(toggled(bool)), m_dialog, SLOT(toggleSelectionMethod()) ); connect( m_specifiedRegionMethodButton, SIGNAL(toggled(bool)), m_dialog, SLOT(toggleSelectionMethod())); connect( m_routeDownloadMethodButton, SIGNAL(toggled(bool)), m_dialog, SLOT(toggleSelectionMethod()) ); connect( m_routingModel, SIGNAL(modelReset()), m_dialog, SLOT(updateRouteDialog()) ); connect( m_routingModel, SIGNAL(rowsInserted(QModelIndex,int,int)), m_dialog, SLOT(updateRouteDialog()) ); connect( m_routingModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), m_dialog, SLOT(updateRouteDialog()) ); QHBoxLayout *routeOffsetLayout = new QHBoxLayout; routeOffsetLayout->addWidget( m_routeOffsetLabel ); routeOffsetLayout->insertSpacing( 0, 25 ); routeOffsetLayout->addWidget( m_routeOffsetSpinBox ); QVBoxLayout * const routeLayout = new QVBoxLayout; routeLayout->addWidget( m_routeDownloadMethodButton ); routeLayout->addLayout( routeOffsetLayout ); QVBoxLayout * const layout = new QVBoxLayout; layout->addWidget( m_visibleRegionMethodButton ); layout->addLayout( routeLayout ); layout->addWidget( m_specifiedRegionMethodButton ); layout->addWidget( m_latLonBoxWidget ); bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen; m_specifiedRegionMethodButton->setVisible( !smallScreen ); m_latLonBoxWidget->setVisible( !smallScreen ); if ( smallScreen ) { QWidget * const selectionMethodWidget = new QWidget; selectionMethodWidget->setLayout( layout ); return selectionMethodWidget; } else { QGroupBox * const selectionMethodBox = new QGroupBox( tr( "Selection Method" ) ); selectionMethodBox->setLayout( layout ); return selectionMethodBox; } }
FeedbackDialog::FeedbackDialog(QWidget * parent) : QDialog(parent) { setModal(true); setWindowFlags(Qt::Sheet); setWindowModality(Qt::WindowModal); setWindowTitle(tr("Feedback")); setMinimumSize(700, 460); resize(700, 460); setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); netManager = NULL; GenerateSpecs(); /* Top layout */ QVBoxLayout * pageLayout = new QVBoxLayout(); QHBoxLayout * summaryLayout = new QHBoxLayout(); QHBoxLayout * emailLayout = new QHBoxLayout(); QHBoxLayout * descriptionLayout = new QHBoxLayout(); QHBoxLayout * combinedTopLayout = new QHBoxLayout(); QHBoxLayout * systemLayout = new QHBoxLayout(); info = new QLabel(); info->setText(QString( "<style type=\"text/css\">" "a { color: #fc0; }" "b { color: #0df; }" "</style>" "<div align=\"center\"><h1>%1</h1>" "<h3>%2<h3>" "<h4>%3 <a href=\"http://hedgewars.org/kb/KnownBugs\">known bugs</a><h4>" "<h4>%4<h4>" "</div>") .arg(tr("Send us feedback!")) .arg(tr("We are always happy about suggestions, ideas, or bug reports.")) .arg(tr("If you found a bug, you can see if it's already been reported here: ")) .arg(tr("Your email address is optional, but necessary if you want us to get back at you.")) ); info->setOpenExternalLinks(true); pageLayout->addWidget(info); QVBoxLayout * summaryEmailLayout = new QVBoxLayout(); const int labelWidth = 90; label_email = new QLabel(); label_email->setText(QLabel::tr("Your Email")); label_email->setFixedWidth(labelWidth); emailLayout->addWidget(label_email); email = new QLineEdit(); emailLayout->addWidget(email); summaryEmailLayout->addLayout(emailLayout); label_summary = new QLabel(); label_summary->setText(QLabel::tr("Summary")); label_summary->setFixedWidth(labelWidth); summaryLayout->addWidget(label_summary); summary = new QLineEdit(); summaryLayout->addWidget(summary); summaryEmailLayout->addLayout(summaryLayout); combinedTopLayout->addLayout(summaryEmailLayout); CheckSendSpecs = new QCheckBox(); CheckSendSpecs->setText(QLabel::tr("Send system information")); CheckSendSpecs->setChecked(true); systemLayout->addWidget(CheckSendSpecs); BtnViewInfo = new QPushButton(tr("View")); systemLayout->addWidget(BtnViewInfo, 1); BtnViewInfo->setFixedSize(60, 30); connect(BtnViewInfo, SIGNAL(clicked()), this, SLOT(ShowSpecs())); combinedTopLayout->addLayout(systemLayout); combinedTopLayout->setStretch(0, 1); combinedTopLayout->insertSpacing(1, 20); pageLayout->addLayout(combinedTopLayout); label_description = new QLabel(); label_description->setText(QLabel::tr("Description")); label_description->setFixedWidth(labelWidth); descriptionLayout->addWidget(label_description, 0, Qt::AlignTop); description = new QTextBrowser(); description->setReadOnly(false); descriptionLayout->addWidget(description); pageLayout->addLayout(descriptionLayout); /* Bottom layout */ QHBoxLayout * bottomLayout = new QHBoxLayout(); QHBoxLayout * captchaLayout = new QHBoxLayout(); QVBoxLayout * captchaInputLayout = new QVBoxLayout(); QPushButton * BtnCancel = new QPushButton(tr("Cancel")); bottomLayout->addWidget(BtnCancel, 0); BtnCancel->setFixedSize(100, 40); connect(BtnCancel, SIGNAL(clicked()), this, SLOT(reject())); bottomLayout->insertStretch(1); label_captcha = new QLabel(); label_captcha->setStyleSheet("border: 3px solid #ffcc00; border-radius: 4px"); label_captcha->setText("loading<br>captcha"); label_captcha->setFixedSize(200, 50); captchaLayout->addWidget(label_captcha); label_captcha_input = new QLabel(); label_captcha_input->setText(QLabel::tr("Type the security code:")); captchaInputLayout->addWidget(label_captcha_input); captchaInputLayout->setAlignment(label_captcha, Qt::AlignBottom); captcha_code = new QLineEdit(); captcha_code->setFixedSize(165, 30); captchaInputLayout->addWidget(captcha_code); captchaInputLayout->setAlignment(captcha_code, Qt::AlignTop); captchaLayout->addLayout(captchaInputLayout); captchaLayout->setAlignment(captchaInputLayout, Qt::AlignLeft); bottomLayout->addLayout(captchaLayout); bottomLayout->addSpacing(40); // TODO: Set green arrow icon for send button (:/res/Start.png) BtnSend = new QPushButton(tr("Send Feedback")); bottomLayout->addWidget(BtnSend, 0); BtnSend->setFixedSize(120, 40); connect(BtnSend, SIGNAL(clicked()), this, SLOT(SendFeedback())); bottomLayout->setStretchFactor(captchaLayout, 0); bottomLayout->setStretchFactor(BtnSend, 1); QVBoxLayout * dialogLayout = new QVBoxLayout(this); dialogLayout->addLayout(pageLayout, 1); dialogLayout->addLayout(bottomLayout); LoadCaptchaImage(); }
/*! * Control creation for VorbitalDlg */ void VorbitalDlg::CreateControls() { qDebug() << "CreateControls."; setAcceptDrops(true); QVBoxLayout* rootLayout = new QVBoxLayout(); setLayout(rootLayout); QHBoxLayout* firstRowLayout = new QHBoxLayout(); rootLayout->addLayout(firstRowLayout); firstRowLayout->setContentsMargins(QMargins(0,0,0,0)); firstRowLayout->setSpacing(2); _btnBrowse = new QPushButton( this ); _btnBrowse->setIcon(QPixmap(add_xpm)); _btnBrowse->setToolTip("Add file to playlist."); connect(_btnBrowse, SIGNAL(released()), this, SLOT(OnButtonBrowseClick())); firstRowLayout->addWidget(_btnBrowse); _btnBrowseFolder = new QPushButton( this ); _btnBrowseFolder->setIcon(QPixmap(folder_xpm)); _btnBrowseFolder->setToolTip("Add folder to playlist."); connect(_btnBrowseFolder, SIGNAL(released()), this, SLOT(OnButtonBrowseFolderClick())); firstRowLayout->addWidget(_btnBrowseFolder); _btnRemove = new QPushButton( this ); _btnRemove->setIcon(QPixmap(remove_xpm)); _btnRemove->setToolTip("Remove selected item from playlist."); connect(_btnRemove, SIGNAL(released()), this, SLOT(OnButtonRemoveClick())); firstRowLayout->addWidget(_btnRemove); _btnClear = new QPushButton( this ); _btnClear->setIcon(QPixmap(null_xpm)); _btnClear->setToolTip("Clear playlist."); connect(_btnClear, SIGNAL(released()), this, SLOT(OnButtonClearClick())); firstRowLayout->addWidget(_btnClear); _btnReverse = new QPushButton( this ); _btnReverse->setIcon(QPixmap(reverse_xpm)); _btnReverse->setToolTip("Previous track."); connect(_btnReverse, SIGNAL(released()), this, SLOT(OnButtonReverseClick())); firstRowLayout->addWidget(_btnReverse); _btnPause = new QPushButton( this ); _btnPause->setIcon(QPixmap(pause_xpm)); _btnPause->setToolTip("Pause."); connect(_btnPause, SIGNAL(released()), this, SLOT(OnButtonPauseClick())); firstRowLayout->addWidget(_btnPause); _btnStop = new QPushButton( this ); _btnStop->setIcon(QPixmap(stop_xpm)); _btnStop->setToolTip("Stop."); connect(_btnStop, SIGNAL(released()), this, SLOT(OnButtonStopClick())); firstRowLayout->addWidget(_btnStop); _btnPlay = new QPushButton( this ); _btnPlay->setIcon(QPixmap(play_xpm)); _btnPlay->setToolTip("Play."); connect(_btnPlay, SIGNAL(released()), this, SLOT(OnButtonPlayClick())); firstRowLayout->addWidget(_btnPlay); _btnForward = new QPushButton( this ); _btnForward->setIcon(QPixmap(forward_xpm)); _btnForward->setToolTip("Next track."); connect(_btnForward, SIGNAL(released()), this, SLOT(OnButtonForwardClick())); firstRowLayout->addWidget(_btnForward); _btnRandomize = new QPushButton( this ); _btnRandomize->setIcon(QPixmap(normal_xpm)); _btnRandomize->setToolTip("Turn shuffle on or off."); connect(_btnRandomize, SIGNAL(released()), this, SLOT(OnButtonRandomizeClick())); firstRowLayout->addWidget(_btnRandomize); _btnAbout = new QPushButton( this ); _btnAbout->setIcon(QPixmap(question_xpm)); _btnAbout->setToolTip("About Vorbital Player."); connect(_btnAbout, SIGNAL(released()), this, SLOT(OnAbout())); firstRowLayout->addWidget(_btnAbout); QHBoxLayout* secondRowLayout = new QHBoxLayout(); rootLayout->addLayout(secondRowLayout); secondRowLayout->insertSpacing(6, 6); QLabel* itemStaticText16 = new QLabel(this); itemStaticText16->setText("SR:"); itemStaticText16->setToolTip("Sample rate."); secondRowLayout->addWidget(itemStaticText16); _txtSampleRate = new QLabel(this); _txtSampleRate->setText("0"); secondRowLayout->addWidget(_txtSampleRate); secondRowLayout->insertSpacing(4, 4); QLabel* itemStaticText20 = new QLabel(this); itemStaticText20->setText("BR:"); itemStaticText20->setToolTip("Bit rate."); secondRowLayout->addWidget(itemStaticText20); _txtBitRate = new QLabel(this); _txtBitRate->setText("0"); secondRowLayout->addWidget(_txtBitRate); secondRowLayout->insertSpacing(4, 4); _txtChannels = new QLabel(this); _txtChannels->setText("Stereo"); secondRowLayout->addWidget(_txtChannels); secondRowLayout->insertSpacing(10, 10); _volumeSlider = new QSlider(Qt::Horizontal, this); _volumeSlider->setMinimum(0); _volumeSlider->setMaximum(100); _volumeSlider->setValue(100); _volumeSlider->setMaximumSize(100, 24); connect(_volumeSlider, SIGNAL(valueChanged(int)), this, SLOT(OnVolume(int))); secondRowLayout->addWidget(_volumeSlider); secondRowLayout->insertSpacing(10, 10); _txtTime = new QLabel(this); _txtTime->setText("0:00"); secondRowLayout->addWidget(_txtTime); QBitmap* bitmap = new QBitmap(120, 120); _albumArt = new QLabel(this); _albumArt->setPixmap(*bitmap); rootLayout->addWidget(_albumArt); _albumArt->setVisible(false); _lstPlaylist = new QListWidget( this ); rootLayout->addWidget(_lstPlaylist); connect(_lstPlaylist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(OnPlaylistDoubleClick(QListWidgetItem*)), Qt::AutoConnection); connect(this, SIGNAL(bitrateChanged(int)), this, SLOT(OnBitrate(int)), Qt::AutoConnection); connect(this, SIGNAL(numchannelsChanged(int)), this, SLOT(OnNumChannels(int)), Qt::AutoConnection); connect(this, SIGNAL(samplerateChanged(int)), this, SLOT(OnSampleRate(int)), Qt::AutoConnection); connect(this, SIGNAL(timeChanged(int)), this, SLOT(OnTime(int)), Qt::AutoConnection); }
void GameWall::addGame(ChessGame* game) { Q_ASSERT(game != nullptr); QWidget* widget = new QWidget(this); ChessClock* clock[2] = { new ChessClock(), new ChessClock() }; QHBoxLayout* clockLayout = new QHBoxLayout(); for (int i = 0; i < 2; i++) { clock[i] = new ChessClock(); clockLayout->addWidget(clock[i]); Chess::Side side = Chess::Side::Type(i); clock[i]->setPlayerName(side.toString()); } clockLayout->insertSpacing(1, 20); BoardScene* scene = new BoardScene(); BoardView* view = new BoardView(scene); QVBoxLayout* mainLayout = new QVBoxLayout(); mainLayout->addLayout(clockLayout); mainLayout->addWidget(view); mainLayout->setContentsMargins(0, 0, 0, 0); widget->setLayout(mainLayout); layout()->addWidget(widget); game->lockThread(); connect(game, SIGNAL(fenChanged(QString)), scene, SLOT(setFenString(QString))); connect(game, SIGNAL(moveMade(Chess::GenericMove, QString, QString)), scene, SLOT(makeMove(Chess::GenericMove))); connect(game, SIGNAL(humanEnabled(bool)), view, SLOT(setEnabled(bool))); for (int i = 0; i < 2; i++) { ChessPlayer* player(game->player(Chess::Side::Type(i))); if (player->isHuman()) connect(scene, SIGNAL(humanMove(Chess::GenericMove, Chess::Side)), player, SLOT(onHumanMove(Chess::GenericMove, Chess::Side))); clock[i]->setPlayerName(player->name()); connect(player, SIGNAL(nameChanged(QString)), clock[i], SLOT(setPlayerName(QString))); clock[i]->setInfiniteTime(player->timeControl()->isInfinite()); if (player->state() == ChessPlayer::Thinking) clock[i]->start(player->timeControl()->activeTimeLeft()); else clock[i]->setTime(player->timeControl()->timeLeft()); connect(player, SIGNAL(startedThinking(int)), clock[i], SLOT(start(int))); connect(player, SIGNAL(stoppedThinking()), clock[i], SLOT(stop())); } scene->setBoard(game->pgn()->createBoard()); scene->populate(); foreach (const Chess::Move& move, game->moves()) scene->makeMove(move); game->unlockThread(); view->setEnabled(!game->isFinished() && game->playerToMove()->isHuman()); m_games[game] = widget; cleanupWidgets(); }