#include <QHBoxLayout>
#include <QLabel>
#include <QMenu>
-#include <QPushButton>
#include <QToolButton>
#include <QVBoxLayout>
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to copy files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort Copying"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel Copying"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to copy the location of files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort Copying"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel Copying"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to copy the location of files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort Copying"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel Copying"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to cut files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort Cutting"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel Cutting"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to delete files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to duplicate files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort Duplicating"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel Duplicating"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
void BottomBarContentsContainer::addGeneralContents()
{
if (!m_overflowButton) {
- m_overflowButton = new QToolButton{this};
- // i18n: This button appears in a bar if there isn't enough horizontal space to fit all the other buttons.
- // The small icon-only button opens a menu that contains the actions that didn't fit on the bar.
- // Since this is an icon-only button this text will only appear as a tooltip and as accessibility text.
- m_overflowButton->setToolTip(i18nc("@action", "More"));
- m_overflowButton->setAccessibleName(m_overflowButton->toolTip());
- m_overflowButton->setIcon(QIcon::fromTheme(QStringLiteral("view-more-horizontal-symbolic")));
+ // i18n: This button appears in a bar if there isn't enough horizontal space to fit all the other buttons so please keep it short.
+ // The small button opens a menu that contains the actions that didn't fit on the bar.
+ m_overflowButton = new QPushButton{QIcon::fromTheme(QStringLiteral("view-more-symbolic")), i18nc("@action keep short", "More"), this};
m_overflowButton->setMenu(new QMenu{m_overflowButton});
- m_overflowButton->setPopupMode(QToolButton::ToolButtonPopupMode::InstantPopup);
m_overflowButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding); // Makes sure it has the same height as the labeled buttons.
m_layout->addWidget(m_overflowButton);
} else {
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to copy the location of files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort Moving"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel Moving"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process of moving files to the trash by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Abort"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
* So we first have to claim that we have different contents before requesting to leave selection mode. */
auto actuallyLeaveSelectionMode = [this]() {
m_contents = BottomBar::Contents::CopyLocationContents;
- Q_EMIT selectionModeLeavingRequested();
+ Q_EMIT barVisibilityChangeRequested(false);
};
auto *pasteButton = new QPushButton(this);
m_layout->addWidget(m_explanatoryLabel);
// i18n: Aborts the current step-by-step process to delete files by leaving the selection mode.
- auto *cancelButton = new QPushButton(i18nc("@action:button", "Stop Renaming"), this);
+ auto *cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-cancel")), i18nc("@action:button", "Cancel Renaming"), this);
connect(cancelButton, &QAbstractButton::clicked, this, &BottomBarContentsContainer::selectionModeLeavingRequested);
m_layout->addWidget(cancelButton);
}
}
}
+
+ auto separator = new QAction(m_internalContextMenu.get());
+ separator->setSeparator(true);
+ contextActions.emplace_back(separator);
+
+ // Add "Invert Selection" and "Select All" at the very end for better usability while in selection mode.
+ // Design-wise this decision is slightly questionable because the other actions in the bar apply to the selected items while
+ // the "select" actions apply to the view instead but we decided that there are more benefits than drawbacks to this.
+ auto invertSelectionAction = m_actionCollection->action(QStringLiteral("invert_selection"));
+ Q_ASSERT(invertSelectionAction && !internalContextMenuActions.contains(invertSelectionAction));
+ contextActions.emplace_back(invertSelectionAction);
+ auto selectAllAction = m_actionCollection->action(KStandardAction::name(KStandardAction::SelectAll));
+ Q_ASSERT(selectAllAction && !internalContextMenuActions.contains(selectAllAction));
+ contextActions.emplace_back(selectAllAction);
+
return contextActions;
}