mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-08-03 10:34:14 +02:00
ee4ba82d28
Reported by @scorpio810 on #626: "The field does not update automatically; you need to list the other rules for it to update." Two reasons, both mine: The refresh was wired to the combo boxes' activated() signal, which Qt emits only for user interaction. Nothing that changed a context programmatically -- which is to say, numbering an element -- ever reached it. Re-picking a rule from the combo was not a workaround so much as the only code path that refreshed at all. And there was no signal to hang it on for two of the three categories: addElementAutoNum() emitted elementAutoNumAdded(), but addConductorAutoNum() and addFolioAutoNum() emitted nothing, so even a listener would not have heard a conductor counter advance. Add QETProject::autoNumContextUpdated(), emitted by all three setters, and have the dock re-read its three fields on it. Kept deliberately separate from the existing *AutoNumAdded/*Removed signals: those make listeners rebuild their rule lists, which is both heavier than needed here and would disturb the user's current selection every time an element is numbered. This one only says "re-read me". The automatic refresh skips a field that has keyboard focus, so numbering an element cannot overwrite a value half-typed under the cursor. Explicit refreshes after a reset or an edit still write unconditionally, so the field always ends up showing the canonical stored value. Measured, advancing a counter the way numbering advances it and without touching the combo box: field before advance "5" context after advance 6 field after advance "6" (was still "5")
103 lines
3.1 KiB
C++
103 lines
3.1 KiB
C++
/*
|
|
Copyright 2006-2026 The QElectroTech Team
|
|
This file is part of QElectroTech.
|
|
|
|
QElectroTech is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
QElectroTech is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef AUTONUMBERINGDOCKWIDGET_H
|
|
#define AUTONUMBERINGDOCKWIDGET_H
|
|
|
|
#include "../../projectview.h"
|
|
#include "../../qetproject.h"
|
|
|
|
#include <QDockWidget>
|
|
|
|
class QComboBox;
|
|
class QLineEdit;
|
|
|
|
namespace Ui {
|
|
class AutoNumberingDockWidget;
|
|
}
|
|
|
|
class AutoNumberingDockWidget : public QDockWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit AutoNumberingDockWidget(QWidget *parent = nullptr);
|
|
~AutoNumberingDockWidget() override;
|
|
|
|
void setContext();
|
|
void setProject(QETProject*, ProjectView*);
|
|
|
|
public slots:
|
|
void setActive();
|
|
void setConductorActive(DiagramView*);
|
|
|
|
private slots:
|
|
void on_m_conductor_cb_activated(int);
|
|
void on_m_element_cb_activated(int);
|
|
void on_m_folio_cb_activated(int);
|
|
void conductorAutoNumChanged();
|
|
void elementAutoNumChanged();
|
|
void folioAutoNumChanged();
|
|
void clear();
|
|
void projectClosed();
|
|
void refreshValueFields();
|
|
|
|
void on_m_configure_pb_clicked();
|
|
|
|
void on_m_conductor_reset_start_pb_clicked();
|
|
void on_m_element_reset_start_pb_clicked();
|
|
void on_m_folio_reset_start_pb_clicked();
|
|
|
|
void on_m_conductor_value_le_editingFinished();
|
|
void on_m_element_value_le_editingFinished();
|
|
void on_m_folio_value_le_editingFinished();
|
|
|
|
signals:
|
|
void folioAutoNumChanged(QString);
|
|
|
|
private:
|
|
enum class AutoNumCategory { Conductor, Element, Folio };
|
|
|
|
/**
|
|
@brief resetAutoNum
|
|
Reset the numerotation context currently selected in combo_box
|
|
(for the given category) to a per-type starting value. Does
|
|
nothing if no context is selected.
|
|
*/
|
|
void resetAutoNum(QComboBox *combo_box, AutoNumCategory category);
|
|
|
|
/// Read/write the numerotation context named in combo_box.
|
|
NumerotationContext contextFor(QComboBox *combo_box, AutoNumCategory category) const;
|
|
void storeContext(QComboBox *combo_box, AutoNumCategory category, const NumerotationContext &context);
|
|
|
|
/// Index of the counter the value field shows and edits: the last
|
|
/// part that actually progresses. Returns -1 when the context has
|
|
/// no such part (e.g. it is only fixed text).
|
|
static int counterIndex(const NumerotationContext &context);
|
|
|
|
/// Refresh a value field from its context, and apply a typed value.
|
|
void refreshValueField(QComboBox *combo_box, QLineEdit *line_edit, AutoNumCategory category);
|
|
void applyValueField(QComboBox *combo_box, QLineEdit *line_edit, AutoNumCategory category);
|
|
|
|
Ui::AutoNumberingDockWidget *ui;
|
|
QETProject* m_project = nullptr;
|
|
ProjectView* m_project_view = nullptr;
|
|
|
|
};
|
|
|
|
#endif // AUTONUMBERINGDOCKWIDGET_H
|