feat: 添加ElaWidgetTool库

This commit is contained in:
sleepwithoutbz
2025-09-19 22:40:52 +08:00
parent 5f93e8caf6
commit 4eef5c7fd5
407 changed files with 36325 additions and 7 deletions

View File

@@ -0,0 +1,90 @@
#include "ElaSpinBoxPrivate.h"
#include "ElaMenu.h"
#include "ElaSpinBox.h"
#include "ElaTheme.h"
#include <QClipboard>
#include <QGuiApplication>
#include <QLineEdit>
#include <QTimer>
ElaSpinBoxPrivate::ElaSpinBoxPrivate(QObject* parent)
: QObject{parent}
{
}
ElaSpinBoxPrivate::~ElaSpinBoxPrivate()
{
}
void ElaSpinBoxPrivate::onThemeChanged(ElaThemeType::ThemeMode themeMode)
{
Q_Q(ElaSpinBox);
_themeMode = themeMode;
QPalette palette;
palette.setColor(QPalette::Base, Qt::transparent);
palette.setColor(QPalette::Text, ElaThemeColor(_themeMode, BasicText));
q->lineEdit()->setPalette(palette);
}
ElaMenu* ElaSpinBoxPrivate::_createStandardContextMenu()
{
Q_Q(ElaSpinBox);
QLineEdit* lineEdit = q->lineEdit();
ElaMenu* menu = new ElaMenu(q);
menu->setMenuItemHeight(27);
menu->setAttribute(Qt::WA_DeleteOnClose);
QAction* action = nullptr;
if (!lineEdit->isReadOnly())
{
action = menu->addElaIconAction(ElaIconType::ArrowRotateLeft, tr("撤销"), QKeySequence::Undo);
action->setEnabled(lineEdit->isUndoAvailable());
connect(action, &QAction::triggered, lineEdit, &QLineEdit::undo);
action = menu->addElaIconAction(ElaIconType::ArrowRotateRight, tr("恢复"), QKeySequence::Redo);
action->setEnabled(lineEdit->isRedoAvailable());
connect(action, &QAction::triggered, lineEdit, &QLineEdit::redo);
menu->addSeparator();
}
#ifndef QT_NO_CLIPBOARD
if (!lineEdit->isReadOnly())
{
action = menu->addElaIconAction(ElaIconType::KnifeKitchen, tr("剪切"), QKeySequence::Cut);
action->setEnabled(!lineEdit->isReadOnly() && lineEdit->hasSelectedText() && lineEdit->echoMode() == QLineEdit::Normal);
connect(action, &QAction::triggered, lineEdit, &QLineEdit::cut);
}
action = menu->addElaIconAction(ElaIconType::Copy, tr("复制"), QKeySequence::Copy);
action->setEnabled(lineEdit->hasSelectedText() && lineEdit->echoMode() == QLineEdit::Normal);
connect(action, &QAction::triggered, lineEdit, &QLineEdit::copy);
if (!lineEdit->isReadOnly())
{
action = menu->addElaIconAction(ElaIconType::Paste, tr("粘贴"), QKeySequence::Paste);
action->setEnabled(!lineEdit->isReadOnly() && !QGuiApplication::clipboard()->text().isEmpty());
connect(action, &QAction::triggered, lineEdit, &QLineEdit::paste);
}
#endif
if (!lineEdit->isReadOnly())
{
action = menu->addElaIconAction(ElaIconType::DeleteLeft, tr("删除"));
action->setEnabled(!lineEdit->isReadOnly() && !lineEdit->text().isEmpty() && lineEdit->hasSelectedText());
connect(action, &QAction::triggered, this, [=](bool checked) {
if (lineEdit->hasSelectedText())
{
int startIndex = lineEdit->selectionStart();
int endIndex = lineEdit->selectionEnd();
lineEdit->setText(lineEdit->text().remove(startIndex, endIndex - startIndex));
}
});
}
if (!menu->isEmpty())
{
menu->addSeparator();
}
action = menu->addAction(tr("全选"));
action->setShortcut(QKeySequence::SelectAll);
action->setEnabled(!lineEdit->text().isEmpty() && !(lineEdit->selectedText() == lineEdit->text()));
connect(action, &QAction::triggered, q, &ElaSpinBox::selectAll);
return menu;
}