修改文件换行符,修正轮班图元长度计算问题

This commit is contained in:
2026-08-19 11:55:10 +08:00
parent 176b53b654
commit a274b75705
116 changed files with 68711 additions and 68660 deletions
+173 -173
View File
@@ -1,174 +1,174 @@
#include "ItemGeneralSettings.h"
#include "ui_ItemGeneralSettings.h"
#include <QDebug>
ItemGeneralSettings::ItemGeneralSettings(QWidget *parent) :
QWidget(parent),
ui(new Ui::ItemGeneralSettings)
{
ui->setupUi(this);
m_directionButtonGroup.addButton(ui->normalRBtn, NORMAL);
m_directionButtonGroup.addButton(ui->verMirrorRBtn, MIRROR_V);
m_directionButtonGroup.addButton(ui->horMirrorRBtn, MIRROR_H);
m_directionButtonGroup.addButton(ui->mirrorRBtn, MIRROR_VH);
m_directionButtonGroup.addButton(ui->m90NHorRBtn, MIRROR_H_R270);
m_directionButtonGroup.addButton(ui->a90RBtn, R90);
m_directionButtonGroup.addButton(ui->m90RBtn, R270);
m_directionButtonGroup.addButton(ui->m90NVerRBtn, MIRROR_V_R270);
connect(&m_directionButtonGroup, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked),
this, &ItemGeneralSettings::ondirectionChanged);
connect(ui->boldSpinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &ItemGeneralSettings::onBoldSpinBoxValueChanged);
connect(ui->txtSpanSpinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &ItemGeneralSettings::onLetterSpaceSpinBoxChanged);
connect(ui->invertCheckBox, &QCheckBox::stateChanged,
this, [this](int state) { onColorReversalCheckBoxChecked(state == Qt::Checked); });
initUI();
}
ItemGeneralSettings::~ItemGeneralSettings()
{
delete ui;
}
void ItemGeneralSettings::edit(PicTextItem *item)
{
m_currItem = item;
// 从item快照创建ViewModel(如果item为空,使用默认值)
setViewModel(TextItemModel::fromItem(item));
}
void ItemGeneralSettings::initUI()
{
ui->densitySpinBox->setValue(0);
ui->invertCheckBox->setChecked(false);
ui->alternateCheckBox->setChecked(false);
ui->boldSpinBox->setValue(0);
ui->txtSpanSpinBox->setValue(0);
ui->normalRBtn->setChecked(true);
ui->applyCounterCheckBox->setChecked(false);
ui->counterIDSpinBox->setValue(0);
}
void ItemGeneralSettings::setViewModel(const TextItemModel &vm)
{
m_vmSnapshot = vm;
m_vm = vm;
// 阻止信号以避免重复回调
auto blockBold = ui->boldSpinBox->blockSignals(true);
auto blockSpan = ui->txtSpanSpinBox->blockSignals(true);
auto blockInvert = ui->invertCheckBox->blockSignals(true);
// 根据m_vm更新UI显示
ui->boldSpinBox->setValue(m_vm.boldMultiple);
ui->txtSpanSpinBox->setValue(m_vm.letterSpace);
auto dirBtn = m_directionButtonGroup.button(m_vm.direction);
if (dirBtn) {
dirBtn->setChecked(true);
}
ui->invertCheckBox->setChecked(m_vm.colorReversal);
// 恢复信号
ui->boldSpinBox->blockSignals(blockBold);
ui->txtSpanSpinBox->blockSignals(blockSpan);
ui->invertCheckBox->blockSignals(blockInvert);
// 字间距可见性由item的类型决定
switch(m_vm.sourceType) {
case SourceType::TEXT:
case SourceType::DATETIME:
case SourceType::SCHEDULE_SHIFT:
ui->letterSpacePanel->setVisible(true);
break;
case SourceType::UNKNOWN:
default:
ui->letterSpacePanel->setVisible(false);
break;
}
updatePreview();
}
void ItemGeneralSettings::applyToItem(PicTextItem *item)
{
if (!item) {
return;
}
// VM的属性被逐一应用到item
item->setDirection(m_vm.direction);
item->setBoldMultiple(m_vm.boldMultiple);
item->setLetterSpace(m_vm.letterSpace);
item->setColorReversal(m_vm.colorReversal);
item->applyModify();
}
void ItemGeneralSettings::ondirectionChanged(int dir)
{
// 只更新VM,不直接修改item
m_vm.direction = ItemDirectionType(dir);
updatePreview();
}
void ItemGeneralSettings::onBoldSpinBoxValueChanged(int multiple)
{
// 只更新VM
m_vm.boldMultiple = multiple;
updatePreview();
}
void ItemGeneralSettings::onLetterSpaceSpinBoxChanged(int space)
{
// 只更新VM
m_vm.letterSpace = space;
updatePreview();
}
void ItemGeneralSettings::onColorReversalCheckBoxChecked(bool b)
{
// 只更新VM
m_vm.colorReversal = b;
updatePreview();
}
void ItemGeneralSettings::updatePreview()
{
// 预览需要基于item的source和m_vm的属性组合渲染
// 如果m_currItem为空,显示空图像
if (!m_currItem) {
if(m_vm.imageGenerator) {
ui->previewWidget->setImg(m_vm.imageGenerator());
}
else {
ui->previewWidget->setImg(QImage());
}
return;
}
// 临时应用VM到item以获取预览,随后还原
auto backupDir = m_currItem->direction();
auto backupBold = m_currItem->boldMultiple();
auto backupSpace = m_currItem->letterSpace();
auto backupReverse = m_currItem->colorReversal();
m_currItem->setDirection(m_vm.direction);
m_currItem->setBoldMultiple(m_vm.boldMultiple);
m_currItem->setLetterSpace(m_vm.letterSpace);
m_currItem->setColorReversal(m_vm.colorReversal);
m_currItem->applyModify();
ui->previewWidget->setImg(m_currItem->preview());
// 还原原始状态(preview()后item的属性不应该被留下改动)
m_currItem->setDirection(backupDir);
m_currItem->setBoldMultiple(backupBold);
m_currItem->setLetterSpace(backupSpace);
m_currItem->setColorReversal(backupReverse);
m_currItem->applyModify();
#include "ItemGeneralSettings.h"
#include "ui_ItemGeneralSettings.h"
#include <QDebug>
ItemGeneralSettings::ItemGeneralSettings(QWidget *parent) :
QWidget(parent),
ui(new Ui::ItemGeneralSettings)
{
ui->setupUi(this);
m_directionButtonGroup.addButton(ui->normalRBtn, NORMAL);
m_directionButtonGroup.addButton(ui->verMirrorRBtn, MIRROR_V);
m_directionButtonGroup.addButton(ui->horMirrorRBtn, MIRROR_H);
m_directionButtonGroup.addButton(ui->mirrorRBtn, MIRROR_VH);
m_directionButtonGroup.addButton(ui->m90NHorRBtn, MIRROR_H_R270);
m_directionButtonGroup.addButton(ui->a90RBtn, R90);
m_directionButtonGroup.addButton(ui->m90RBtn, R270);
m_directionButtonGroup.addButton(ui->m90NVerRBtn, MIRROR_V_R270);
connect(&m_directionButtonGroup, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked),
this, &ItemGeneralSettings::ondirectionChanged);
connect(ui->boldSpinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &ItemGeneralSettings::onBoldSpinBoxValueChanged);
connect(ui->txtSpanSpinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &ItemGeneralSettings::onLetterSpaceSpinBoxChanged);
connect(ui->invertCheckBox, &QCheckBox::stateChanged,
this, [this](int state) { onColorReversalCheckBoxChecked(state == Qt::Checked); });
initUI();
}
ItemGeneralSettings::~ItemGeneralSettings()
{
delete ui;
}
void ItemGeneralSettings::edit(PicTextItem *item)
{
m_currItem = item;
// 从item快照创建ViewModel(如果item为空,使用默认值)
setViewModel(TextItemModel::fromItem(item));
}
void ItemGeneralSettings::initUI()
{
ui->densitySpinBox->setValue(0);
ui->invertCheckBox->setChecked(false);
ui->alternateCheckBox->setChecked(false);
ui->boldSpinBox->setValue(0);
ui->txtSpanSpinBox->setValue(0);
ui->normalRBtn->setChecked(true);
ui->applyCounterCheckBox->setChecked(false);
ui->counterIDSpinBox->setValue(0);
}
void ItemGeneralSettings::setViewModel(const TextItemModel &vm)
{
m_vmSnapshot = vm;
m_vm = vm;
// 阻止信号以避免重复回调
auto blockBold = ui->boldSpinBox->blockSignals(true);
auto blockSpan = ui->txtSpanSpinBox->blockSignals(true);
auto blockInvert = ui->invertCheckBox->blockSignals(true);
// 根据m_vm更新UI显示
ui->boldSpinBox->setValue(m_vm.boldMultiple);
ui->txtSpanSpinBox->setValue(m_vm.letterSpace);
auto dirBtn = m_directionButtonGroup.button(m_vm.direction);
if (dirBtn) {
dirBtn->setChecked(true);
}
ui->invertCheckBox->setChecked(m_vm.colorReversal);
// 恢复信号
ui->boldSpinBox->blockSignals(blockBold);
ui->txtSpanSpinBox->blockSignals(blockSpan);
ui->invertCheckBox->blockSignals(blockInvert);
// 字间距可见性由item的类型决定
switch(m_vm.sourceType) {
case SourceType::TEXT:
case SourceType::DATETIME:
case SourceType::SCHEDULE_SHIFT:
ui->letterSpacePanel->setVisible(true);
break;
case SourceType::UNKNOWN:
default:
ui->letterSpacePanel->setVisible(false);
break;
}
updatePreview();
}
void ItemGeneralSettings::applyToItem(PicTextItem *item)
{
if (!item) {
return;
}
// VM的属性被逐一应用到item
item->setDirection(m_vm.direction);
item->setBoldMultiple(m_vm.boldMultiple);
item->setLetterSpace(m_vm.letterSpace);
item->setColorReversal(m_vm.colorReversal);
item->applyModify();
}
void ItemGeneralSettings::ondirectionChanged(int dir)
{
// 只更新VM,不直接修改item
m_vm.direction = ItemDirectionType(dir);
updatePreview();
}
void ItemGeneralSettings::onBoldSpinBoxValueChanged(int multiple)
{
// 只更新VM
m_vm.boldMultiple = multiple;
updatePreview();
}
void ItemGeneralSettings::onLetterSpaceSpinBoxChanged(int space)
{
// 只更新VM
m_vm.letterSpace = space;
updatePreview();
}
void ItemGeneralSettings::onColorReversalCheckBoxChecked(bool b)
{
// 只更新VM
m_vm.colorReversal = b;
updatePreview();
}
void ItemGeneralSettings::updatePreview()
{
// 预览需要基于item的source和m_vm的属性组合渲染
// 如果m_currItem为空,显示空图像
if (!m_currItem) {
if(m_vm.imageGenerator) {
ui->previewWidget->setImg(m_vm.imageGenerator());
}
else {
ui->previewWidget->setImg(QImage());
}
return;
}
// 临时应用VM到item以获取预览,随后还原
auto backupDir = m_currItem->direction();
auto backupBold = m_currItem->boldMultiple();
auto backupSpace = m_currItem->letterSpace();
auto backupReverse = m_currItem->colorReversal();
m_currItem->setDirection(m_vm.direction);
m_currItem->setBoldMultiple(m_vm.boldMultiple);
m_currItem->setLetterSpace(m_vm.letterSpace);
m_currItem->setColorReversal(m_vm.colorReversal);
m_currItem->applyModify();
ui->previewWidget->setImg(m_currItem->preview());
// 还原原始状态(preview()后item的属性不应该被留下改动)
m_currItem->setDirection(backupDir);
m_currItem->setBoldMultiple(backupBold);
m_currItem->setLetterSpace(backupSpace);
m_currItem->setColorReversal(backupReverse);
m_currItem->applyModify();
}