/*! Add smileys by setting a imgage file and a textlist of textual representations. */ void EmoticonMenu::addEmoticon(const QString &imgPath, const QStringList &texts) { QToolButton *button = new QToolButton(this); button->setIcon(QIcon(imgPath)); button->setAutoRaise(true); button->setToolTip(texts.first()); button->setProperty("smiley", QString("<img src=\"%1\" />").arg(imgPath)); connect(button, &QToolButton::clicked, this, &EmoticonMenu::onEmoticonTriggered); connect(button, &QToolButton::clicked, this, &EmoticonMenu::close); layout->addWidget(button, layout->count()/5, layout->count()%5); getSmileyHash().insert(imgPath, texts); }
foreach (MVAbstractViewFactory* f, factories) { QToolButton* button = new QToolButton; QFont font = button->font(); font.setPixelSize(14); button->setFont(font); button->setText(f->name()); button->setProperty("action_name", f->id()); d->m_flow_layout->addWidget(button); d->m_viewMapper->setMapping(button, f); QObject::connect(button, SIGNAL(clicked()), d->m_viewMapper, SLOT(map())); //QObject::connect(f, SIGNAL(enabledChanged(bool)), button, SLOT(setEnabled(bool))); d->m_buttons[f->name()] = button; }
Core::NavigationView FolderNavigationWidgetFactory::createWidget() { Core::NavigationView n; FolderNavigationWidget *fnw = new FolderNavigationWidget; n.widget = fnw; QToolButton *filter = new QToolButton; filter->setIcon(QIcon(QLatin1String(Core::Constants::ICON_FILTER))); filter->setToolTip(tr("Filter Files")); filter->setPopupMode(QToolButton::InstantPopup); filter->setProperty("noArrow", true); QMenu *filterMenu = new QMenu(filter); filterMenu->addAction(fnw->m_filterHiddenFilesAction); filter->setMenu(filterMenu); n.dockToolBarWidgets << filter << fnw->m_toggleSync; return n; }
QToolButton* courseEditDockWidget::newToolButton(int cp_num, int cr_num, const QIcon& icon, const QString& text) { Q_UNUSED(icon); QToolButton* button = new QToolButton(); button->setToolButtonStyle(Qt::ToolButtonIconOnly); button->setToolTip(text); button->setProperty("name",cr_num); Symbol* symstr; for (int i=0; i<controller->getMap()->getNumSymbols(); i++) { symstr=controller->getMap()->getSymbol(i); if (symstr->getNumberAsString()==reinterpret_cast<courseWidget::cpVector*>(cw->getcontrolpoints(rownum))->at(cp_num)->value(cw->xml_names[cr_num])) { button->setIcon(QPixmap::fromImage(symstr->getIcon(controller->getMap(),false).copy())); break; } } button->setText(text); button->setWhatsThis("<a href=\"courses.html#setup\">See more</a>"); return button; }
weapon_filter_quick_opt_widget::weapon_filter_quick_opt_widget(filter_p f, QWidget* parent) : QWidget( parent ) , filter_( *static_cast<weapon_filter*>( f.get() ) ) { QHBoxLayout* lay = new QHBoxLayout(this); lay->setContentsMargins(0, 0, 0, 0); group_ = new QButtonGroup(this); group_->setExclusive(false); BOOST_FOREACH(Gear g, forbidden( AllGear ) ) { QToolButton* tb = new QToolButton( this ); tb->setProperty("gear", g); tb->setIcon( QIcon( icon(g) ) ); tb->setToolTip(gear(g)); tb->setCheckable(true); tb->setAutoRaise(true); group_->addButton(tb, g); lay->addWidget(tb); }
void MainWidget::init() { createUi(); m_uiFactory = new ScxmlUiFactory(this); m_stateProperties->setUIFactory(m_uiFactory); m_colorThemes = new ColorThemes(this); m_shapesFrame->setUIFactory(m_uiFactory); m_navigator = new Navigator(this); m_navigator->setVisible(false); m_magnifier = new Magnifier(this); m_magnifier->setVisible(false); // Create, init and connect Error-pane m_errorPane = new ErrorWidget; m_outputPaneWindow->addPane(m_errorPane); connect(m_outputPaneWindow, &OutputTabWidget::visibilityChanged, this, &MainWidget::handleTabVisibilityChanged); // Init warningProvider auto provider = static_cast<WarningProvider*>(m_uiFactory->object(Constants::C_OBJECTNAME_WARNINGPROVIDER)); if (provider) provider->init(m_errorPane->warningModel()); connect(m_errorPane, &ErrorWidget::mouseExited, this, [this]() { StateView *view = m_views.last(); if (view) view->scene()->unhighlightAll(); }); connect(m_errorPane, &ErrorWidget::warningEntered, [this](Warning *w) { StateView *view = m_views.last(); if (view) view->scene()->highlightWarningItem(w); }); connect(m_errorPane, &ErrorWidget::warningSelected, [this](Warning *w) { StateView *view = m_views.last(); if (view) view->scene()->selectWarningItem(w); }); connect(m_errorPane, &ErrorWidget::warningDoubleClicked, [this](Warning *w) { StateView *view = m_views.last(); if (view) view->view()->zoomToItem(view->scene()->findItem(view->scene()->tagByWarning(w))); }); // Create and init Error-pane m_searchPane = new Search; m_outputPaneWindow->addPane(m_searchPane); m_document = new ScxmlDocument; connect(m_document, &ScxmlDocument::endTagChange, this, &MainWidget::endTagChange); connect(m_document, &ScxmlDocument::documentChanged, this, &MainWidget::dirtyChanged); connect(m_stackedWidget, &QStackedWidget::currentChanged, this, &MainWidget::initView); m_actionHandler = new ActionHandler(this); // Connect actions connect(m_actionHandler->action(ActionZoomIn), &QAction::triggered, this, [this]() { StateView *view = m_views.last(); if (view) view->view()->zoomIn(); }); connect(m_actionHandler->action(ActionZoomOut), &QAction::triggered, this, [this]() { StateView *view = m_views.last(); if (view) view->view()->zoomOut(); }); connect(m_actionHandler->action(ActionFitToView), &QAction::triggered, this, &MainWidget::fitToView); connect(m_actionHandler->action(ActionPan), &QAction::toggled, this, [this](bool toggled) { StateView *view = m_views.last(); if (view) view->view()->setPanning(toggled); }); connect(m_actionHandler->action(ActionMagnifier), &QAction::toggled, this, &MainWidget::setMagnifier); connect(m_navigator, &Navigator::hideFrame, this, [this]() { m_actionHandler->action(ActionNavigator)->setChecked(false); }); connect(m_actionHandler->action(ActionNavigator), &QAction::toggled, m_navigator, &Navigator::setVisible); connect(m_actionHandler->action(ActionCopy), &QAction::triggered, this, [this]() { StateView *view = m_views.last(); if (view) view->scene()->copy(); }); connect(m_actionHandler->action(ActionCut), &QAction::triggered, this, [this]() { StateView *view = m_views.last(); if (view) view->scene()->cut(); }); connect(m_actionHandler->action(ActionPaste), &QAction::triggered, this, [this]() { StateView *view = m_views.last(); if (view) view->scene()->paste(view->view()->mapToScene(QPoint(30, 30))); }); connect(m_actionHandler->action(ActionExportToImage), &QAction::triggered, this, &MainWidget::exportToImage); connect(m_actionHandler->action(ActionScreenshot), &QAction::triggered, this, &MainWidget::saveScreenShot); connect(m_errorPane->warningModel(), &WarningModel::warningsChanged, this, [this]() { m_actionHandler->action(ActionFullNamespace)->setEnabled(m_errorPane->warningModel()->count(Warning::ErrorType) <= 0); }); connect(m_actionHandler->action(ActionFullNamespace), &QAction::triggered, this, [this](bool checked) { m_document->setUseFullNameSpace(checked); }); connect(m_actionHandler->action(ActionAlignLeft), &QAction::triggered, this, [this]() { alignButtonClicked(ActionAlignLeft); }); connect(m_actionHandler->action(ActionAlignRight), &QAction::triggered, this, [this]() { alignButtonClicked(ActionAlignRight); }); connect(m_actionHandler->action(ActionAlignTop), &QAction::triggered, this, [this]() { alignButtonClicked(ActionAlignTop); }); connect(m_actionHandler->action(ActionAlignBottom), &QAction::triggered, this, [this]() { alignButtonClicked(ActionAlignBottom); }); connect(m_actionHandler->action(ActionAlignHorizontal), &QAction::triggered, this, [this]() { alignButtonClicked(ActionAlignHorizontal); }); connect(m_actionHandler->action(ActionAlignVertical), &QAction::triggered, this, [this]() { alignButtonClicked(ActionAlignVertical); }); connect(m_actionHandler->action(ActionAdjustWidth), &QAction::triggered, this, [this]() { adjustButtonClicked(ActionAdjustWidth); }); connect(m_actionHandler->action(ActionAdjustHeight), &QAction::triggered, this, [this]() { adjustButtonClicked(ActionAdjustHeight); }); connect(m_actionHandler->action(ActionAdjustSize), &QAction::triggered, this, [this]() { adjustButtonClicked(ActionAdjustSize); }); connect(m_actionHandler->action(ActionStatistics), &QAction::triggered, this, [this]() { StatisticsDialog dialog; dialog.setDocument(m_document); dialog.exec(); }); // Init ToolButtons auto stateColorButton = new ColorToolButton("StateColor", ":/scxmleditor/images/state_color.png", tr("State Color")); auto fontColorButton = new ColorToolButton("FontColor", ":/scxmleditor/images/font_color.png", tr("Font Color")); QToolButton *alignToolButton = createToolButton(toolButtonIcon(ActionAlignLeft), tr("Align Left"), QToolButton::MenuButtonPopup); QToolButton *adjustToolButton = createToolButton(toolButtonIcon(ActionAdjustWidth), tr("Adjust Width"), QToolButton::MenuButtonPopup); // Connect state color change connect(stateColorButton, &ColorToolButton::colorSelected, [this](const QString &color) { StateView *view = m_views.last(); if (view) view->scene()->setEditorInfo(Constants::C_SCXML_EDITORINFO_STATECOLOR, color); }); // Connect font color change connect(fontColorButton, &ColorToolButton::colorSelected, [this](const QString &color) { StateView *view = m_views.last(); if (view) view->scene()->setEditorInfo(Constants::C_SCXML_EDITORINFO_FONTCOLOR, color); }); // Connect alignment change alignToolButton->setProperty("currentAlignment", ActionAlignLeft); connect(alignToolButton, &QToolButton::clicked, this, [=] { StateView *view = m_views.last(); if (view) view->scene()->alignStates(alignToolButton->property("currentAlignment").toInt()); }); // Connect alignment change adjustToolButton->setProperty("currentAdjustment", ActionAdjustWidth); connect(adjustToolButton, &QToolButton::clicked, this, [=] { StateView *view = m_views.last(); if (view) view->scene()->adjustStates(adjustToolButton->property("currentAdjustment").toInt()); }); auto alignmentMenu = new QMenu(tr("Alignment"), this); for (int i = ActionAlignLeft; i <= ActionAlignVertical; ++i) alignmentMenu->addAction(m_actionHandler->action(ActionType(i))); alignToolButton->setMenu(alignmentMenu); auto adjustmentMenu = new QMenu(tr("Adjustment"), this); for (int i = ActionAdjustWidth; i <= ActionAdjustSize; ++i) adjustmentMenu->addAction(m_actionHandler->action(ActionType(i))); adjustToolButton->setMenu(adjustmentMenu); m_toolButtons << stateColorButton << fontColorButton << alignToolButton << adjustToolButton; const QSettings *s = Core::ICore::settings(); m_horizontalSplitter->restoreState(s->value(Constants::C_SETTINGS_SPLITTER).toByteArray()); m_actionHandler->action(ActionPaste)->setEnabled(false); connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested, this, &MainWidget::saveSettings); }
void ShaderParamsDialog::buildLayout() { QPushButton *loadButton = NULL; QPushButton *saveButton = NULL; QPushButton *removeButton = NULL; QPushButton *applyButton = NULL; QHBoxLayout *topButtonLayout = NULL; QMenu *loadMenu = NULL; QMenu *saveMenu = NULL; QMenu *removeMenu = NULL; struct video_shader *menu_shader = NULL; struct video_shader *video_shader = NULL; struct video_shader *avail_shader = NULL; const char *shader_path = NULL; unsigned i; bool hasPasses = false; getShaders(&menu_shader, &video_shader); /* NOTE: For some reason, menu_shader_get() returns a COPY of what get_current_shader() gives us. * And if you want to be able to change shader settings/parameters from both the raster menu and * Qt at the same time... you must change BOTH or one will overwrite the other. * * AND, during a context reset, video_shader will be NULL but not menu_shader, so don't totally bail * just because video_shader is NULL. * * Someone please fix this mess. */ if (video_shader) { avail_shader = video_shader; if (video_shader->passes == 0) setWindowTitle(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS)); } /* Normally we'd only use video_shader, but the vulkan driver returns a NULL shader when there * are zero passes, so just fall back to menu_shader. */ else if (menu_shader) { avail_shader = menu_shader; if (menu_shader->passes == 0) setWindowTitle(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS)); } else { setWindowTitle(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS)); /* no shader is available yet, just keep retrying until it is */ QTimer::singleShot(0, this, SLOT(buildLayout())); return; } clearLayout(); /* Only check video_shader for the path, menu_shader seems stale... e.g. if you remove all the shader passes, * it still has the old path in it, but video_shader does not */ if (video_shader) { if (!string_is_empty(video_shader->path)) { shader_path = video_shader->path; setWindowTitle(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_CURRENT_SHADER)) + ": " + QFileInfo(shader_path).fileName()); } } else if (menu_shader) { if (!string_is_empty(menu_shader->path)) { shader_path = menu_shader->path; setWindowTitle(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_CURRENT_SHADER)) + ": " + QFileInfo(shader_path).fileName()); } } else setWindowTitle(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS)); loadButton = new QPushButton(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_LOAD), this); saveButton = new QPushButton(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_SAVE), this); removeButton = new QPushButton(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_REMOVE), this); applyButton = new QPushButton(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_APPLY), this); loadMenu = new QMenu(loadButton); loadMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET), this, SLOT(onShaderLoadPresetClicked())); loadMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_SHADER_ADD_PASS), this, SLOT(onShaderAddPassClicked())); loadButton->setMenu(loadMenu); saveMenu = new QMenu(saveButton); saveMenu->addAction(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS)) + "...", this, SLOT(onShaderSavePresetAsClicked())); saveMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE), this, SLOT(onShaderSaveCorePresetClicked())); saveMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_PARENT), this, SLOT(onShaderSaveParentPresetClicked())); saveMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME), this, SLOT(onShaderSaveGamePresetClicked())); saveButton->setMenu(saveMenu); removeMenu = new QMenu(removeButton); /* When there are no passes, at least on first startup, it seems video_shader erroneously shows 1 pass, with an empty source file. * So we use menu_shader instead for that. */ if (menu_shader) { for (i = 0; i < menu_shader->passes; i++) { QFileInfo fileInfo(menu_shader->pass[i].source.path); QString shaderBasename = fileInfo.completeBaseName(); QAction *action = removeMenu->addAction(shaderBasename, this, SLOT(onShaderRemovePassClicked())); action->setData(i); } } removeMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_SHADER_CLEAR_ALL_PASSES), this, SLOT(onShaderClearAllPassesClicked())); removeButton->setMenu(removeMenu); connect(applyButton, SIGNAL(clicked()), this, SLOT(onShaderApplyClicked())); topButtonLayout = new QHBoxLayout(); topButtonLayout->addWidget(loadButton); topButtonLayout->addWidget(saveButton); topButtonLayout->addWidget(removeButton); topButtonLayout->addWidget(applyButton); m_layout->addLayout(topButtonLayout); /* NOTE: We assume that parameters are always grouped in order by the pass number, e.g., all parameters for pass 0 come first, then params for pass 1, etc. */ for (i = 0; avail_shader && i < avail_shader->passes; i++) { QFormLayout *form = NULL; QGroupBox *groupBox = NULL; QFileInfo fileInfo(avail_shader->pass[i].source.path); QString shaderBasename = fileInfo.completeBaseName(); QHBoxLayout *filterScaleHBoxLayout = NULL; QComboBox *filterComboBox = new QComboBox(this); QComboBox *scaleComboBox = new QComboBox(this); QToolButton *moveDownButton = NULL; QToolButton *moveUpButton = NULL; unsigned j = 0; /* Sometimes video_shader shows 1 pass with no source file, when there are really 0 passes. */ if (shaderBasename.isEmpty()) continue; hasPasses = true; filterComboBox->setProperty("pass", i); scaleComboBox->setProperty("pass", i); moveDownButton = new QToolButton(this); moveDownButton->setText("↓"); moveDownButton->setProperty("pass", i); moveUpButton = new QToolButton(this); moveUpButton->setText("↑"); moveUpButton->setProperty("pass", i); /* Can't move down if we're already at the bottom. */ if (i < avail_shader->passes - 1) connect(moveDownButton, SIGNAL(clicked()), this, SLOT(onShaderPassMoveDownClicked())); else moveDownButton->setDisabled(true); /* Can't move up if we're already at the top. */ if (i > 0) connect(moveUpButton, SIGNAL(clicked()), this, SLOT(onShaderPassMoveUpClicked())); else moveUpButton->setDisabled(true); for (;;) { QString filterLabel = getFilterLabel(j); if (filterLabel.isEmpty()) break; if (j == 0) filterLabel = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DONT_CARE); filterComboBox->addItem(filterLabel, j); j++; } for (j = 0; j < 7; j++) { QString label; if (j == 0) label = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DONT_CARE); else label = QString::number(j) + "x"; scaleComboBox->addItem(label, j); } filterComboBox->setCurrentIndex(static_cast<int>(avail_shader->pass[i].filter)); scaleComboBox->setCurrentIndex(static_cast<int>(avail_shader->pass[i].fbo.scale_x)); /* connect the signals only after the initial index is set */ connect(filterComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onFilterComboBoxIndexChanged(int))); connect(scaleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onScaleComboBoxIndexChanged(int))); form = new QFormLayout(); groupBox = new QGroupBox(shaderBasename); groupBox->setLayout(form); groupBox->setProperty("pass", i); groupBox->setContextMenuPolicy(Qt::CustomContextMenu); connect(groupBox, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(onGroupBoxContextMenuRequested(const QPoint&))); m_layout->addWidget(groupBox); filterScaleHBoxLayout = new QHBoxLayout(); filterScaleHBoxLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred)); filterScaleHBoxLayout->addWidget(new QLabel(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FILTER)) + ":", this)); filterScaleHBoxLayout->addWidget(filterComboBox); filterScaleHBoxLayout->addWidget(new QLabel(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCALE)) + ":", this)); filterScaleHBoxLayout->addWidget(scaleComboBox); filterScaleHBoxLayout->addSpacerItem(new QSpacerItem(20, 0, QSizePolicy::Preferred, QSizePolicy::Preferred)); if (moveUpButton) filterScaleHBoxLayout->addWidget(moveUpButton); if (moveDownButton) filterScaleHBoxLayout->addWidget(moveDownButton); form->addRow("", filterScaleHBoxLayout); for (j = 0; j < avail_shader->num_parameters; j++) { struct video_shader_parameter *param = &avail_shader->parameters[j]; if (param->pass != static_cast<int>(i)) continue; addShaderParam(param, form); } } if (!hasPasses) { QLabel *noParamsLabel = new QLabel(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_SHADER_NO_PASSES), this); noParamsLabel->setAlignment(Qt::AlignCenter); m_layout->addWidget(noParamsLabel); } m_layout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding)); /* Why is this required?? The layout is corrupt without both resizes. */ resize(width() + 1, height()); show(); resize(width() - 1, height()); }
FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumentFind) : m_plugin(plugin), m_currentDocumentFind(currentDocumentFind), m_findCompleter(new QCompleter(this)), m_replaceCompleter(new QCompleter(this)), m_enterFindStringAction(0), m_findNextAction(0), m_findPreviousAction(0), m_replaceNextAction(0), m_widget(new QWidget) { //setup ui m_ui.setupUi(m_widget); addWidget(m_widget); setFocusProxy(m_ui.findEdit); setProperty("topBorder", true); m_ui.findEdit->setAttribute(Qt::WA_MacShowFocusRect, false); m_ui.replaceEdit->setAttribute(Qt::WA_MacShowFocusRect, false); connect(m_ui.findEdit, SIGNAL(editingFinished()), this, SLOT(invokeResetIncrementalSearch())); QWidget *spacerItem = new QWidget; spacerItem->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); addWidget(spacerItem); QToolButton *close = new QToolButton; close->setProperty("type", QLatin1String("dockbutton")); close->setIcon(QIcon(":/core/images/closebutton.png")); connect(close, SIGNAL(clicked()), this, SLOT(hideAndResetFocus())); addWidget(close); m_ui.findPreviousButton->setProperty("type", QLatin1String("dockbutton")); m_ui.findNextButton->setProperty("type", QLatin1String("dockbutton")); m_ui.replacePreviousButton->setProperty("type", QLatin1String("dockbutton")); m_ui.replaceNextButton->setProperty("type", QLatin1String("dockbutton")); m_ui.replaceAllButton->setProperty("type", QLatin1String("dockbutton")); m_findCompleter->setModel(m_plugin->findCompletionModel()); m_replaceCompleter->setModel(m_plugin->replaceCompletionModel()); m_ui.findEdit->setCompleter(m_findCompleter); m_findCompleter->popup()->installEventFilter(this); m_ui.replaceEdit->setCompleter(m_replaceCompleter); m_ui.findEdit->setSide(qApp->layoutDirection() == Qt::LeftToRight ? Core::Utils::FancyLineEdit::Right : Core::Utils::FancyLineEdit::Left); QMenu *lineEditMenu = new QMenu(m_ui.findEdit); m_ui.findEdit->setMenu(lineEditMenu); m_ui.findEdit->installEventFilter(this); m_ui.replaceEdit->installEventFilter(this); m_widget->installEventFilter(this); connect(m_ui.findEdit, SIGNAL(textChanged(const QString&)), this, SLOT(invokeFindIncremental())); connect(m_ui.findEdit, SIGNAL(returnPressed()), this, SLOT(invokeFindEnter())); connect(m_ui.replaceEdit, SIGNAL(returnPressed()), this, SLOT(invokeReplaceEnter())); QAction *shiftEnterAction = new QAction(m_ui.findEdit); shiftEnterAction->setShortcut(QKeySequence("Shift+Enter")); shiftEnterAction->setShortcutContext(Qt::WidgetShortcut); connect(shiftEnterAction, SIGNAL(triggered()), this, SLOT(invokeFindPrevious())); m_ui.findEdit->addAction(shiftEnterAction); QAction *shiftReturnAction = new QAction(m_ui.findEdit); shiftReturnAction->setShortcut(QKeySequence("Shift+Return")); shiftReturnAction->setShortcutContext(Qt::WidgetShortcut); connect(shiftReturnAction, SIGNAL(triggered()), this, SLOT(invokeFindPrevious())); m_ui.findEdit->addAction(shiftReturnAction); QAction *shiftEnterReplaceAction = new QAction(m_ui.replaceEdit); shiftEnterReplaceAction->setShortcut(QKeySequence("Shift+Enter")); shiftEnterReplaceAction->setShortcutContext(Qt::WidgetShortcut); connect(shiftEnterReplaceAction, SIGNAL(triggered()), this, SLOT(invokeReplacePrevious())); m_ui.replaceEdit->addAction(shiftEnterReplaceAction); QAction *shiftReturnReplaceAction = new QAction(m_ui.replaceEdit); shiftReturnReplaceAction->setShortcut(QKeySequence("Shift+Return")); shiftReturnReplaceAction->setShortcutContext(Qt::WidgetShortcut); connect(shiftReturnReplaceAction, SIGNAL(triggered()), this, SLOT(invokeReplacePrevious())); m_ui.replaceEdit->addAction(shiftReturnReplaceAction); // need to make sure QStringList is registered as metatype QMetaTypeId<QStringList>::qt_metatype_id(); //register actions QList<int> globalcontext; globalcontext << Core::Constants::C_GLOBAL_ID; Core::ActionManager *am = Core::ICore::instance()->actionManager(); Core::ActionContainer *mfind = am->actionContainer(Constants::M_FIND); Core::Command *cmd; m_findInDocumentAction = new QAction(tr("Current Document"), this); cmd = am->registerAction(m_findInDocumentAction, Constants::FIND_IN_DOCUMENT, globalcontext); cmd->setDefaultKeySequence(QKeySequence::Find); mfind->addAction(cmd, Constants::G_FIND_CURRENTDOCUMENT); connect(m_findInDocumentAction, SIGNAL(triggered()), this, SLOT(openFind())); if (QApplication::clipboard()->supportsFindBuffer()) { m_enterFindStringAction = new QAction(tr("Enter Find String"), this); cmd = am->registerAction(m_enterFindStringAction, tr("Find.EnterFindString"), globalcontext); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+E"))); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); connect(m_enterFindStringAction, SIGNAL(triggered()), this, SLOT(putSelectionToFindClipboard())); connect(QApplication::clipboard(), SIGNAL(findBufferChanged()), this, SLOT(updateFromFindClipboard())); } m_findNextAction = new QAction(tr("Find Next"), this); cmd = am->registerAction(m_findNextAction, Constants::FIND_NEXT, globalcontext); cmd->setDefaultKeySequence(QKeySequence::FindNext); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); connect(m_findNextAction, SIGNAL(triggered()), this, SLOT(invokeFindNext())); m_ui.findNextButton->setDefaultAction(cmd->action()); m_findPreviousAction = new QAction(tr("Find Previous"), this); cmd = am->registerAction(m_findPreviousAction, Constants::FIND_PREVIOUS, globalcontext); cmd->setDefaultKeySequence(QKeySequence::FindPrevious); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); connect(m_findPreviousAction, SIGNAL(triggered()), this, SLOT(invokeFindPrevious())); m_ui.findPreviousButton->setDefaultAction(cmd->action()); m_replaceNextAction = new QAction(tr("Replace && Find Next"), this); cmd = am->registerAction(m_replaceNextAction, Constants::REPLACE_NEXT, globalcontext); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+="))); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); connect(m_replaceNextAction, SIGNAL(triggered()), this, SLOT(invokeReplaceNext())); m_ui.replaceNextButton->setDefaultAction(cmd->action()); m_replacePreviousAction = new QAction(tr("Replace && Find Previous"), this); cmd = am->registerAction(m_replacePreviousAction, Constants::REPLACE_PREVIOUS, globalcontext); // shortcut removed, clashes with Ctrl++ on many keyboard layouts //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+="))); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); connect(m_replacePreviousAction, SIGNAL(triggered()), this, SLOT(invokeReplacePrevious())); m_ui.replacePreviousButton->setDefaultAction(cmd->action()); m_replaceAllAction = new QAction(tr("Replace All"), this); cmd = am->registerAction(m_replaceAllAction, Constants::REPLACE_ALL, globalcontext); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); connect(m_replaceAllAction, SIGNAL(triggered()), this, SLOT(invokeReplaceAll())); m_ui.replaceAllButton->setDefaultAction(cmd->action()); m_caseSensitiveAction = new QAction(tr("Case Sensitive"), this); m_caseSensitiveAction->setIcon(QIcon(":/find/images/casesensitively.png")); m_caseSensitiveAction->setCheckable(true); m_caseSensitiveAction->setChecked(false); cmd = am->registerAction(m_caseSensitiveAction, Constants::CASE_SENSITIVE, globalcontext); mfind->addAction(cmd, Constants::G_FIND_FLAGS); connect(m_caseSensitiveAction, SIGNAL(triggered(bool)), m_plugin, SLOT(setCaseSensitive(bool))); lineEditMenu->addAction(m_caseSensitiveAction); m_wholeWordAction = new QAction(tr("Whole Words Only"), this); m_wholeWordAction->setIcon(QIcon(":/find/images/wholewords.png")); m_wholeWordAction->setCheckable(true); m_wholeWordAction->setChecked(false); cmd = am->registerAction(m_wholeWordAction, Constants::WHOLE_WORDS, globalcontext); mfind->addAction(cmd, Constants::G_FIND_FLAGS); connect(m_wholeWordAction, SIGNAL(triggered(bool)), m_plugin, SLOT(setWholeWord(bool))); lineEditMenu->addAction(m_wholeWordAction); connect(m_currentDocumentFind, SIGNAL(changed()), this, SLOT(updateActions())); updateActions(); updateIcons(); connect(m_plugin, SIGNAL(findFlagsChanged()), this, SLOT(findFlagsChanged())); }
void VPiano::initExtraControllers() { QWidget *w = NULL; QCheckBox *chkbox = NULL; Knob *knob = NULL; QSpinBox *spin = NULL; QSlider *slider = NULL; QToolButton *button = NULL; foreach(const QString& s, m_extraControls) { QString lbl; int control = 0; int type = 0; int minValue = 0; int maxValue = 127; int defValue = 0; int value = 0; int size = 100; QString fileName; ExtraControl::decodeString( s, lbl, control, type, minValue, maxValue, defValue, size, fileName ); if (m_ctlState[m_channel].contains(control)) value = m_ctlState[m_channel][control]; else value = defValue; switch(type) { case 0: chkbox = new QCheckBox(this); if (dlgPreferences()->getStyledWidgets()) { chkbox->setStyle(m_dialStyle); } chkbox->setProperty(MIDICTLONVALUE, maxValue); chkbox->setProperty(MIDICTLOFFVALUE, minValue); chkbox->setChecked(bool(value)); connect(chkbox, SIGNAL(clicked(bool)), SLOT(slotControlClicked(bool))); w = chkbox; break; case 1: knob = new Knob(this); knob->setFixedSize(32, 32); knob->setStyle(dlgPreferences()->getStyledWidgets()? m_dialStyle : NULL); knob->setMinimum(minValue); knob->setMaximum(maxValue); knob->setValue(value); knob->setToolTip(QString::number(value)); knob->setDefaultValue(defValue); knob->setDialMode(Knob::LinearMode); connect(knob, SIGNAL(sliderMoved(int)), SLOT(slotExtraController(int))); w = knob; break; case 2: spin = new QSpinBox(this); spin->setMinimum(minValue); spin->setMaximum(maxValue); spin->setValue(value); connect(spin, SIGNAL(valueChanged(int)), SLOT(slotExtraController(int))); w = spin; break; case 3: slider = new QSlider(this); slider->setOrientation(Qt::Horizontal); slider->setFixedWidth(size); slider->setMinimum(minValue); slider->setMaximum(maxValue); slider->setToolTip(QString::number(value)); slider->setValue(value); connect(slider, SIGNAL(sliderMoved(int)), SLOT(slotExtraController(int))); w = slider; break; case 4: button = new QToolButton(this); button->setText(lbl); button->setProperty(MIDICTLONVALUE, maxValue); button->setProperty(MIDICTLOFFVALUE, minValue); connect(button, SIGNAL(clicked(bool)), SLOT(slotControlClicked(bool))); w = button; break; case 5: control = 255; button = new QToolButton(this); button->setText(lbl); button->setProperty(SYSEXFILENAME, fileName); button->setProperty(SYSEXFILEDATA, readSysexDataFile(fileName)); connect(button, SIGNAL(clicked(bool)), SLOT(slotControlClicked(bool))); w = button; break; default: w = NULL; } if (w != NULL) { if (!lbl.isEmpty() && type < 4) { QLabel *qlbl = new QLabel(lbl, this); qlbl->setMargin(TOOLBARLABELMARGIN); ui.toolBarExtra->addWidget(qlbl); //connect(qlbl, SIGNAL(destroyed(QObject*)), SLOT(slotDebugDestroyed(QObject*))); } w->setProperty(MIDICTLNUMBER, control); w->setFocusPolicy(Qt::NoFocus); ui.toolBarExtra->addWidget(w); //connect(w, SIGNAL(destroyed(QObject*)), SLOT(slotDebugDestroyed(QObject*))); } }