mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-01 07:14:14 +02:00
Add an adjustable background frame to the element editor
Discussion #604. Revives #643, closed on 2026-09-10 only to clear the
review backlog, ported onto current master.
The element editor shows an infinite grid, with nothing to judge how
big a symbol will look on a real folio. Affichage > "Afficher le cadre
de fond" draws a dashed blue rectangle centred on the element's origin
(the hotspot), sized by default to the drawing area of a default folio
(BorderProperties: columns x column width by rows x row height,
1020 x 640). Affichage > "Taille du cadre de fond..." sets another
size. Both persist in QSettings (elementeditor/background_frame_*).
The frame is drawn in ElementView::drawBackground(), so it is not part
of the scene: it is never written to the .elmt file and never in the
SVG export (scene render).
Changed from #643: resolved against master's new-style connects and
the hotspot visibility switch; the toggle gets the unused
document-print-frame theme icon (light and dark), without which it
showed as a text button in the icon toolbar; the size action is
registered with ShortcutManager like the toggle.
(cherry picked from commit a245411f9f)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -59,6 +59,10 @@
|
||||
#include <QFileDialog>
|
||||
#include <QSvgGenerator>
|
||||
#include <QHBoxLayout>
|
||||
#include <QDialog>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QDoubleSpinBox>
|
||||
#include <QFormLayout>
|
||||
|
||||
/**
|
||||
* @brief QETElementEditor::QETElementEditor
|
||||
@@ -1138,6 +1142,47 @@ void QETElementEditor::setupActions()
|
||||
parts_toolbar -> setObjectName("parts");
|
||||
parts_toolbar -> addActions(m_add_part_action_grp -> actions());
|
||||
addToolBar(Qt::LeftToolBarArea, parts_toolbar);
|
||||
|
||||
//Background frame action: a visual-only reference rectangle, never
|
||||
//written to the saved .elmt file, to help proportion the drawing
|
||||
//against a representative folio surface.
|
||||
auto *toggle_background_frame_action = new QAction(QET::Icons::DocumentPrintFrame, tr("Afficher le cadre de fond"), this);
|
||||
toggle_background_frame_action -> setCheckable(true);
|
||||
toggle_background_frame_action -> setChecked(m_elmt_scene -> backgroundFrameVisible());
|
||||
connect(toggle_background_frame_action, &QAction::toggled, m_elmt_scene, &ElementScene::setBackgroundFrameVisible);
|
||||
ShortcutManager::instance().registerAction(toggle_background_frame_action, "elementeditor.toggle_background_frame", tr("Éditeur d'élément"), QKeySequence());
|
||||
ui->m_display_menu->addAction(toggle_background_frame_action);
|
||||
ui->m_view_toolbar->addAction(toggle_background_frame_action);
|
||||
|
||||
auto *configure_background_frame_action = new QAction(tr("Taille du cadre de fond..."), this);
|
||||
connect(configure_background_frame_action, &QAction::triggered, this, [this]() {
|
||||
QDialog dialog(this);
|
||||
dialog.setWindowTitle(tr("Taille du cadre de fond"));
|
||||
auto *layout = new QFormLayout(&dialog);
|
||||
|
||||
auto *width_spin = new QDoubleSpinBox(&dialog);
|
||||
width_spin -> setRange(1.0, 100000.0);
|
||||
width_spin -> setSuffix(tr(" px"));
|
||||
width_spin -> setValue(m_elmt_scene -> backgroundFrameSize().width());
|
||||
layout -> addRow(tr("Largeur"), width_spin);
|
||||
|
||||
auto *height_spin = new QDoubleSpinBox(&dialog);
|
||||
height_spin -> setRange(1.0, 100000.0);
|
||||
height_spin -> setSuffix(tr(" px"));
|
||||
height_spin -> setValue(m_elmt_scene -> backgroundFrameSize().height());
|
||||
layout -> addRow(tr("Hauteur"), height_spin);
|
||||
|
||||
auto *buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, &dialog);
|
||||
connect(buttons, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
|
||||
connect(buttons, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
|
||||
layout -> addRow(buttons);
|
||||
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
m_elmt_scene -> setBackgroundFrameSize(QSizeF(width_spin -> value(), height_spin -> value()));
|
||||
}
|
||||
});
|
||||
ShortcutManager::instance().registerAction(configure_background_frame_action, "elementeditor.configure_background_frame", tr("Éditeur d'élément"), QKeySequence());
|
||||
ui->m_display_menu->addAction(configure_background_frame_action);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user