Commit 9dd86279 authored by Eugen Mohr's avatar Eugen Mohr Committed by Julius Künzel
Browse files

Add more "What's this?" texts

Texts contributed by Bernd Jordan @bjordan

Related to #1528
parent b4560015
Pipeline #311983 passed with stage
in 6 minutes and 52 seconds
......@@ -85,6 +85,8 @@ AssetPanel::AssetPanel(QWidget *parent)
m_saveEffectStack = new QToolButton(this);
m_saveEffectStack->setIcon(QIcon::fromTheme(QStringLiteral("document-save-all")));
m_saveEffectStack->setToolTip(i18n("Save Effect Stack…"));
m_saveEffectStack->setWhatsThis(xi18nc("@info:whatsthis", "Saves the entire effect stack as an XML file for use in other projects."));
// Would be better to have something like `setVisible(false)` here, but this apparently removes the button.
// See https://stackoverflow.com/a/17645563/5172513
m_saveEffectStack->setEnabled(false);
......@@ -95,6 +97,7 @@ AssetPanel::AssetPanel(QWidget *parent)
m_splitButton->setActiveIcon(QIcon::fromTheme(QStringLiteral("view-right-close")));
m_splitButton->setInactiveIcon(QIcon::fromTheme(QStringLiteral("view-split-left-right")));
m_splitButton->setToolTip(i18n("Compare effect"));
m_splitButton->setWhatsThis(xi18nc("@info:whatsthis", "Turns on or off the split view in the project and/or clip monitor: on the left the clip with effect is shown, on the right the clip without effect."));
m_splitButton->setVisible(false);
connect(m_splitButton, &KDualAction::activeChangedByUser, this, &AssetPanel::processSplitEffect);
buttonToolbar->addAction(m_splitButton);
......@@ -106,10 +109,10 @@ AssetPanel::AssetPanel(QWidget *parent)
m_enableStackButton->setVisible(false);
buttonToolbar->addAction(m_enableStackButton);
m_timelineButton = new KDualAction(i18n("Display keyframes in timeline"), i18n("Display keyframes in timeline"), this);
m_timelineButton = new KDualAction(i18n("Display keyframes in timeline"), i18n("Hide keyframes in timeline"), this);
m_timelineButton->setWhatsThis(i18n("Toggles the display of keyframes in the clip on the timeline"));
m_timelineButton->setInactiveIcon(QIcon::fromTheme(QStringLiteral("keyframe-disable")));
m_timelineButton->setActiveIcon(QIcon::fromTheme(QStringLiteral("keyframe")));
m_timelineButton->setToolTip(i18n("Hide keyframes in timeline"));
m_timelineButton->setVisible(false);
connect(m_timelineButton, &KDualAction::activeChangedByUser, this, &AssetPanel::showKeyframes);
buttonToolbar->addAction(m_timelineButton);
......
......@@ -147,6 +147,7 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
m_volumeSlider->setRange(0, 100);
m_volumeSlider->setValue(60);
m_volumeSlider->setToolTip(i18n("Volume"));
m_volumeSlider->setWhatsThis(xi18nc("@info:whatsthis", "Adjusts the output volume of the audio track (affects all audio clips equally)."));
m_volumeSpin = new QDoubleSpinBox(this);
m_volumeSpin->setRange(-50, 24);
m_volumeSpin->setSuffix(i18n("dB"));
......@@ -169,6 +170,7 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
m_balanceSlider->setTickPosition(QSlider::TicksBelow);
m_balanceSlider->setTickInterval(50);
m_balanceSlider->setToolTip(i18n("Balance"));
m_balanceSlider->setWhatsThis(xi18nc("@info:whatsthis", "Adjusts the output balance of the track. Negative values move the output towards the left, positive values to the right. Affects all audio clips equally."));
labelLeft = new QLabel(i18nc("Left", "L"), this);
labelLeft->setAlignment(Qt::AlignHCenter);
......@@ -180,6 +182,7 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
m_balanceSpin->setValue(0);
m_balanceSpin->setFrame(false);
m_balanceSpin->setToolTip(i18n("Balance"));
m_balanceSpin->setWhatsThis(xi18nc("@info:whatsthis", "Adjusts the output balance of the track. Negative values move the output towards the left, positive values to the right. Affects all audio clips equally."));
}
// Check if we already have build-in filters for this tractor
......@@ -242,6 +245,7 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
m_trackLabel->setTextElideMode(Qt::ElideRight);
setTrackName(trackName);
m_muteAction = new KDualAction(i18n("Mute track"), i18n("Unmute track"), this);
m_muteAction->setWhatsThis(i18n("Mutes/un-mutes the audio track."));
m_muteAction->setActiveIcon(QIcon::fromTheme(QStringLiteral("kdenlive-hide-audio")));
m_muteAction->setInactiveIcon(QIcon::fromTheme(QStringLiteral("kdenlive-show-audio")));
......@@ -280,11 +284,12 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
setFixedWidth(3 * mute->sizeHint().width());
if (m_tid > -1) {
// No solo / rec button on master
// Solo / rec button only on tracks (not on master)
m_solo = new QToolButton(this);
m_solo->setCheckable(true);
m_solo->setIcon(QIcon::fromTheme("headphones"));
m_solo->setToolTip(i18n("Solo mode"));
m_solo->setWhatsThis(xi18nc("@info:whatsthis", "When selected mutes all other audio tracks."));
m_solo->setAutoRaise(true);
connect(m_solo, &QToolButton::toggled, this, [&](bool toggled) {
emit toggleSolo(m_tid, toggled);
......@@ -293,7 +298,8 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
m_monitor = new QToolButton(this);
m_monitor->setIcon(QIcon::fromTheme("audio-input-microphone"));
m_monitor->setToolTip(i18n("Monitor audio input"));
m_monitor->setToolTip(i18n("Record audio"));
m_monitor->setWhatsThis(xi18nc("@info:whatsthis", "Puts the audio track into recording mode."));
m_monitor->setCheckable(true);
m_monitor->setAutoRaise(true);
connect(m_monitor, &QToolButton::toggled, this, [&](bool toggled) {
......@@ -307,6 +313,7 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
m_collapse = new QToolButton(this);
m_collapse->setIcon(KdenliveSettings::mixerCollapse() ? QIcon::fromTheme("arrow-left") : QIcon::fromTheme("arrow-right"));
m_collapse->setToolTip(i18n("Show channels"));
m_collapse->setWhatsThis(xi18nc("@info:whatsthis", "Toggles the display of the audio track controls in the audio mixer view."));
m_collapse->setCheckable(true);
m_collapse->setAutoRaise(true);
m_collapse->setChecked(KdenliveSettings::mixerCollapse());
......@@ -319,6 +326,11 @@ void MixerWidget::buildUI(Mlt::Tractor *service, const QString &trackName)
showEffects = new QToolButton(this);
showEffects->setIcon(QIcon::fromTheme("autocorrection"));
showEffects->setToolTip(i18n("Open Effect Stack"));
if (m_tid > -1) {
showEffects->setWhatsThis(xi18nc("@info:whatsthis", "Opens the effect stack for the audio track."));
} else {
showEffects->setWhatsThis(xi18nc("@info:whatsthis", "Opens the effect stack for the audio master."));
}
showEffects->setAutoRaise(true);
connect(showEffects, &QToolButton::clicked, this, [&]() { emit m_manager->showEffectStack(m_tid); });
......
......@@ -1371,6 +1371,7 @@ Bin::Bin(std::shared_ptr<ProjectItemModel> model, QWidget *parent, bool isMainBi
m_filterButton->setPopupMode(QToolButton::MenuButtonPopup);
m_filterButton->setIcon(QIcon::fromTheme(QStringLiteral("view-filter")));
m_filterButton->setToolTip(i18n("Filter"));
m_filterButton->setWhatsThis(xi18nc("@info:whatsthis", "Filter the project bin contents. Click on the filter icon to toggles the filter display. Click on the arrow icon to open a list of possible filter settings."));
m_filterButton->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont));
m_filterButton->setMenu(m_filterMenu);
......@@ -2408,6 +2409,7 @@ void Bin::selectProxyModel(const QModelIndex &id)
clip = std::static_pointer_cast<ProjectClip>(currentItem);
m_tagsWidget->setTagData(clip->tags());
m_deleteAction->setText(i18n("Delete Clip"));
m_deleteAction->setWhatsThis(i18n("Deletes the currently selected clips from the project bin and also from the timeline."));
m_proxyAction->setText(i18n("Proxy Clip"));
} else if (itemType == AbstractProjectItem::FolderItem) {
// A folder was selected, disable editing clip
......@@ -2419,6 +2421,7 @@ void Bin::selectProxyModel(const QModelIndex &id)
auto subClip = std::static_pointer_cast<ProjectSubClip>(currentItem);
clip = subClip->getMasterClip();
m_deleteAction->setText(i18n("Delete Clip"));
m_deleteAction->setWhatsThis(i18n("Deletes the currently selected clips from the project bin and also from the timeline."));
m_proxyAction->setText(i18n("Proxy Clip"));
}
bool isImported = false;
......
......@@ -202,6 +202,7 @@ EncodingProfilesChooser::EncodingProfilesChooser(QWidget *parent, EncodingProfil
buttonInfo->setCheckable(true);
buttonInfo->setIcon(QIcon::fromTheme(QStringLiteral("help-about")));
buttonConfigure->setToolTip(i18n("Show Profile Parameters"));
buttonConfigure->setWhatsThis(xi18nc("@info:whatsthis", "Opens a window with encoding profiles and their parameters. From here you can create, change, delete and download profiles used for timeline preview, proxy generation, and video, screen and decklink capture."));
m_info = new QPlainTextEdit();
m_info->setReadOnly(true);
......
......@@ -103,12 +103,19 @@ SubtitleEdit::SubtitleEdit(QWidget *parent)
connect(buttonOut, &QToolButton::clicked, []() { pCore->triggerAction(QStringLiteral("resize_timeline_clip_end")); });
connect(buttonDelete, &QToolButton::clicked, []() { pCore->triggerAction(QStringLiteral("delete_timeline_clip")); });
buttonNext->setToolTip(i18n("Go to next subtitle"));
buttonNext->setWhatsThis(xi18nc("@info:whatsthis", "Moves the playhead in the timeline to the beginning of the subtitle to the right."));
buttonPrev->setToolTip(i18n("Go to previous subtitle"));
buttonPrev->setWhatsThis(xi18nc("@info:whatsthis", "Moves the playhead in the timeline to the beginning of the subtitle to the left."));
buttonAdd->setToolTip(i18n("Add subtitle"));
buttonAdd->setWhatsThis(xi18nc("@info:whatsthis", "Creates a new subtitle with the default length (set in <interface>Settings->Configure Kdenlive…->Misc</interface>) at the current playhead position/frame."));
buttonCut->setToolTip(i18n("Split subtitle at cursor position"));
buttonCut->setWhatsThis(xi18nc("@info:whatsthis", "Cuts the subtitle text at the cursor position and creates a new subtitle to the right (like cutting a clip)."));
buttonApply->setToolTip(i18n("Update subtitle text"));
buttonApply->setWhatsThis(xi18nc("@info:whatsthis", "Updates the subtitle display in the timeline."));
buttonStyle->setToolTip(i18n("Show style options"));
buttonStyle->setWhatsThis(xi18nc("@info:whatsthis", "Toggles a list to adjust font, size, color, outline style, shadow, position and background."));
buttonDelete->setToolTip(i18n("Delete subtitle"));
buttonDelete->setWhatsThis(xi18nc("@info:whatsthis", "Deletes the currently selected subtitle (doesn’t work on multiple subtitles)."));
// Styling dialog
connect(fontSize, QOverload<int>::of(&QSpinBox::valueChanged), this, &SubtitleEdit::updateStyle);
......
......@@ -1688,15 +1688,20 @@ TimeRemap::TimeRemap(QWidget *parent)
});
button_add->setIcon(QIcon::fromTheme(QStringLiteral("keyframe-add")));
button_add->setToolTip(i18n("Add keyframe"));
button_add->setWhatsThis(xi18nc("@info:whatsthis", "Inserts a keyframe at the current playhead position/frame."));
button_next->setIcon(QIcon::fromTheme(QStringLiteral("keyframe-next")));
button_next->setToolTip(i18n("Go to next keyframe"));
button_next->setWhatsThis(xi18nc("@info:whatsthis", "Moves the playhead to the next keyframe to the right."));
button_prev->setIcon(QIcon::fromTheme(QStringLiteral("keyframe-previous")));
button_prev->setToolTip(i18n("Go to previous keyframe"));
button_prev->setWhatsThis(xi18nc("@info:whatsthis", "Moves the playhead to the next keyframe to the left."));
connect(m_view, &RemapView::updateKeyframes, this, &TimeRemap::updateKeyframes);
connect(m_view, &RemapView::updateKeyframesWithUndo, this, &TimeRemap::updateKeyframesWithUndo);
connect(m_in, &TimecodeDisplay::timeCodeUpdated, this, [this]() { m_view->updateInPos(m_in->getValue() + m_view->m_inFrame); });
button_center->setToolTip(i18n("Move selected keyframe to cursor"));
button_center->setWhatsThis(xi18nc("@info:whatsthis", "Moves the selected keyframes to the current playhead position/frame."));
button_center_top->setToolTip(i18n("Move selected keyframe to cursor"));
button_center_top->setWhatsThis(xi18nc("@info:whatsthis", "Moves the selected keyframes to the current playhead position/frame."));
connect(m_out, &TimecodeDisplay::timeCodeUpdated, this, [this]() { m_view->updateOutPos(m_out->getValue() + m_view->m_inFrame); });
connect(button_center, &QToolButton::clicked, m_view, &RemapView::centerCurrentKeyframe);
connect(button_center_top, &QToolButton::clicked, m_view, &RemapView::centerCurrentTopKeyframe);
......@@ -1704,9 +1709,11 @@ TimeRemap::TimeRemap(QWidget *parent)
if (atKeyframe) {
button_add->setIcon(QIcon::fromTheme(QStringLiteral("keyframe-remove")));
button_add->setToolTip(i18n("Delete keyframe"));
button_add->setWhatsThis(xi18nc("@info:whatsthis", "Deletes the keyframe at the current position of the playhead."));
} else {
button_add->setIcon(QIcon::fromTheme(QStringLiteral("keyframe-add")));
button_add->setToolTip(i18n("Add keyframe"));
button_add->setWhatsThis(xi18nc("@info:whatsthis", "Inserts a keyframe at the current playhead position/frame."));
}
button_add->setEnabled(!atKeyframe || !last);
});
......
......@@ -48,10 +48,13 @@ CollapsibleEffectView::CollapsibleEffectView(const std::shared_ptr<EffectItemMod
QString effectName = EffectsRepository::get()->getName(effectId);
buttonUp->setIcon(QIcon::fromTheme(QStringLiteral("kdenlive-up")));
buttonUp->setToolTip(i18n("Move effect up"));
buttonUp->setWhatsThis(xi18nc("@info:whatsthis", "Moves the effect above the one right above it. Effects are handled sequentially from top to bottom so sequence is important."));
buttonDown->setIcon(QIcon::fromTheme(QStringLiteral("kdenlive-down")));
buttonDown->setToolTip(i18n("Move effect down"));
buttonDown->setWhatsThis(xi18nc("@info:whatsthis", "Moves the effect below the one right below it. Effects are handled sequentially from top to bottom so sequence is important."));
buttonDel->setIcon(QIcon::fromTheme(QStringLiteral("kdenlive-deleffect")));
buttonDel->setToolTip(i18n("Delete effect"));
buttonDel->setWhatsThis(xi18nc("@info:whatsthis", "Deletes the effect from the effect stack."));
if (effectId == QLatin1String("speed")) {
// Speed effect is a "pseudo" effect, cannot be moved
......@@ -99,6 +102,7 @@ CollapsibleEffectView::CollapsibleEffectView(const std::shared_ptr<EffectItemMod
// Enable button
m_enabledButton = new KDualAction(i18n("Disable Effect"), i18n("Enable Effect"), this);
m_enabledButton->setWhatsThis(i18n("Enables the effect. Useful to compare before and after settings."));
m_enabledButton->setActiveIcon(QIcon::fromTheme(QStringLiteral("hint")));
m_enabledButton->setInactiveIcon(QIcon::fromTheme(QStringLiteral("visibility")));
enabledButton->setDefaultAction(m_enabledButton);
......@@ -129,6 +133,7 @@ CollapsibleEffectView::CollapsibleEffectView(const std::shared_ptr<EffectItemMod
setIn->setIcon(QIcon::fromTheme(QStringLiteral("zone-in")));
setIn->setAutoRaise(true);
setIn->setToolTip(i18n("Set zone in"));
setIn->setWhatsThis(xi18nc("@info:whatsthis", "Sets the current frame/playhead position as start of the zone."));
layZone->addWidget(setIn);
m_inPos = new TimecodeDisplay(this);
layZone->addWidget(m_inPos);
......@@ -140,6 +145,7 @@ CollapsibleEffectView::CollapsibleEffectView(const std::shared_ptr<EffectItemMod
setOut->setIcon(QIcon::fromTheme(QStringLiteral("zone-out")));
setOut->setAutoRaise(true);
setOut->setToolTip(i18n("Set zone out"));
setOut->setWhatsThis(xi18nc("@info:whatsthis", "Sets the current frame/playhead position as end of the zone."));
layZone->addWidget(setOut);
m_outPos = new TimecodeDisplay(this);
layZone->addWidget(m_outPos);
......@@ -223,6 +229,7 @@ CollapsibleEffectView::CollapsibleEffectView(const std::shared_ptr<EffectItemMod
presetButton->setIcon(QIcon::fromTheme(QStringLiteral("adjustlevels")));
presetButton->setMenu(m_view->presetMenu());
presetButton->setToolTip(i18n("Presets"));
presetButton->setWhatsThis(xi18nc("@info:whatsthis", "Opens a list of advanced options to manage presets for the effect."));
connect(saveEffectButton, &QAbstractButton::clicked, this, &CollapsibleEffectView::slotSaveEffect);
saveEffectButton->setIcon(QIcon::fromTheme(QStringLiteral("document-save")));
......
......@@ -455,6 +455,7 @@ void MainWindow::init(const QString &mltPath)
connect(iconAction, &QAction::triggered, this, &MainWindow::forceIconSet);
m_mixerDock = addDock(i18n("Audio Mixer"), QStringLiteral("mixer"), pCore->mixer());
m_mixerDock->setWhatsThis(i18n("Toggles the audio mixer panel/widget."));
QAction *showMixer = new QAction(QIcon::fromTheme(QStringLiteral("view-media-equalizer")), i18n("Audio Mixer"), this);
showMixer->setCheckable(true);
addAction(QStringLiteral("audiomixer_button"), showMixer);
......@@ -512,6 +513,7 @@ void MainWindow::init(const QString &mltPath)
widgetlist->setDefaultWidget(m_effectBasket);
// widgetlist->setText(i18n("Favorite Effects"));
widgetlist->setToolTip(i18n("Favorite Effects"));
widgetlist->setWhatsThis(xi18nc("@info:whatsthis", "Click to show a list of favorite effects. Double-click on an effect to add it to the selected clip."));
widgetlist->setIcon(QIcon::fromTheme(QStringLiteral("favorite")));
auto *menu = new QMenu(this);
menu->addAction(widgetlist);
......@@ -523,6 +525,8 @@ void MainWindow::init(const QString &mltPath)
basketButton->setPopupMode(QToolButton::InstantPopup);
// basketButton->setText(i18n("Favorite Effects"));
basketButton->setToolTip(i18n("Favorite Effects"));
basketButton->setWhatsThis(xi18nc("@info:whatsthis", "Click to show a list of favorite effects. Double-click on an effect to add it to the selected clip."));
basketButton->setIcon(QIcon::fromTheme(QStringLiteral("favorite")));
auto *toolButtonAction = new QWidgetAction(this);
......@@ -1115,6 +1119,7 @@ void MainWindow::setupActions()
actionCollection()->setShortcutsConfigurable(sceneMode, false);
m_useTimelineZone = new KDualAction(i18n("Do not Use Timeline Zone for Insert"), i18n("Use Timeline Zone for Insert"), this);
m_useTimelineZone->setWhatsThis(i18n("Toggles between using the timeline zone for inserting (on) or not (off)."));
m_useTimelineZone->setActiveIcon(QIcon::fromTheme(QStringLiteral("timeline-use-zone-on")));
m_useTimelineZone->setInactiveIcon(QIcon::fromTheme(QStringLiteral("timeline-use-zone-off")));
m_useTimelineZone->setAutoToggle(true);
......
......@@ -172,6 +172,7 @@ Monitor::Monitor(Kdenlive::MonitorId id, MonitorManager *manager, QWidget *paren
auto *scalingAction = new QComboBox(this);
scalingAction->setToolTip(i18n("Preview resolution - lower resolution means faster preview"));
scalingAction->setWhatsThis(xi18nc("@info:whatsthis", "Sets the preview resolution of the project/clip monitor. One can select between 1:1, 720p, 540p, 360p, 270p (the lower the resolution the faster the preview)."));
// Combobox padding is bad, so manually add a space before text
scalingAction->addItems({QStringLiteral(" ") + i18n("1:1"), QStringLiteral(" ") + i18n("720p"), QStringLiteral(" ") + i18n("540p"),
QStringLiteral(" ") + i18n("360p"), QStringLiteral(" ") + i18n("270p")});
......
......@@ -47,6 +47,7 @@ ProfileWidget::ProfileWidget(QWidget *parent)
labelLay->addWidget(manage_profiles);
manage_profiles->setIcon(QIcon::fromTheme(QStringLiteral("configure")));
manage_profiles->setToolTip(i18n("Manage project profiles"));
manage_profiles->setWhatsThis(xi18nc("@info:whatsthis", "Opens the profile dialog window in which you can change project profiles. Note: The profile used in the open project cannot be changed."));
connect(manage_profiles, &QAbstractButton::clicked, this, &ProfileWidget::slotEditProfiles);
lay->addLayout(labelLay);
......
......@@ -371,6 +371,7 @@ TitleWidget::TitleWidget(const QUrl &url, QString projectTitlePath, Monitor *mon
m_buttonCursor->setCheckable(true);
m_buttonCursor->setShortcut(Qt::ALT | Qt::Key_S);
m_buttonCursor->setToolTip(i18n("Selection Tool") + QLatin1Char(' ') + m_buttonCursor->shortcut().toString());
m_buttonCursor->setWhatsThis(i18n("When selected, a click on an asset in the timeline selects the asset (e.g. clip, composition)."));
connect(m_buttonCursor, &QAction::triggered, this, &TitleWidget::slotSelectTool);
m_buttonText = m_toolbar->addAction(QIcon::fromTheme(QStringLiteral("insert-text")), i18n("Add Text"));
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment