Files
qelectrotech-source-mirror/sources/ui/titleblockpropertieswidget.h
T
ispyisail 82fc56c5e6 Fix Project properties > OK marking the project modified with no edit
Pressing OK in Projet > Propriétés du projet without changing anything
marked the project modified and rewrote its defaults for new folios.
Besides the Page Num placeholder (fixed separately), four causes:

- Title block custom fields: since #271 the dialog offers the
  template's variables for filling in; those left empty came back as
  part of the context. Drop the ones not in the stored context.
- DiagramContext::remove() left the key's show flag behind, so a
  context with a key removed never equalled one without it.
- Guides: applyConf() marked the project modified whether or not the
  guides changed. Compare them like every other setting.
- Wire dash size and cross-reference offsets: the spin boxes cannot
  show the stored default (dash size 1 under a minimum of 2; offset 0
  under a minimum of 40 shown as "Default"), so the clamped value came
  back. Keep the stored value unless the box shows something else, as
  #1204 did for the wire panel.

Checked in the GUI (with the Page Num fix as well) on grafcet,
schema_indus and Projet_vierge: OK with no edit then Ctrl+S saves the
same file as Ctrl+S alone; master writes dash-size 1 -> 2, a
cross-reference offset 0 -> 40, and on Projet_vierge 22 empty custom
fields. New test for DiagramContext::remove() fails without the fix.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 21:04:54 +13:00

113 lines
3.6 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 TITLEBLOCKPROPERTIESWIDGET_H
#define TITLEBLOCKPROPERTIESWIDGET_H
#include "../autoNum/numerotationcontext.h"
#include "../qet.h"
#include "../qetproject.h"
#include "../titleblockproperties.h"
#include "diagramcontextwidget.h"
#include <QWidget>
class NumerotationContext;
class QETProject;
class QMenu;
class TitleBlockTemplatesCollection;
class TitleBlockTemplate;
namespace Ui {
class TitleBlockPropertiesWidget;
}
class TitleBlockPropertiesWidget : public QWidget
{
Q_OBJECT
public:
explicit TitleBlockPropertiesWidget(
const TitleBlockProperties &titleblock = TitleBlockProperties(),
bool current_date = false,
QETProject *project = nullptr,
QWidget *parent = nullptr);
explicit TitleBlockPropertiesWidget(
TitleBlockTemplatesCollection *tbt_collection,
const TitleBlockProperties &titleblock = TitleBlockProperties(),
bool current_date = false,
QETProject *project = nullptr,
QWidget *parent = nullptr);
explicit TitleBlockPropertiesWidget(
QList <TitleBlockTemplatesCollection *> tbt_collection,
const TitleBlockProperties &titleblock = TitleBlockProperties(),
bool current_date = false,
QETProject *project = nullptr,
QWidget *parent = nullptr);
~TitleBlockPropertiesWidget() override;
void setProperties(const TitleBlockProperties &properties);
TitleBlockProperties properties() const;
TitleBlockProperties propertiesAutoNum(QString autoNum) const;
TitleBlockTemplateLocation currentTitleBlockLocation () const;
void setPropertiesWithAutoNum(
const TitleBlockProperties &properties,
QString autoNum);
void setTitleBlockTemplatesVisible(const bool &visible);
void setReadOnly (const bool &ro);
static void addTemplateVariables(
DiagramContext &context,
const TitleBlockTemplate *tpl);
private:
void addCollection (
TitleBlockTemplatesCollection *tbt_collection);
QString currentTitleBlockTemplateName () const;
void initDialog(const bool &current_date, QETProject *project);
int getIndexFor (const QString &tbt_name,
const QET::QetCollection collection) const;
TitleBlockTemplate *templateForIndex (int index) const;
void addTemplateVariables (DiagramContext &context, int index) const;
private slots:
void editCurrentTitleBlockTemplate();
void duplicateCurrentTitleBlockTemplate();
void updateTemplateList();
void changeCurrentTitleBlockTemplate(int);
void on_m_date_now_pb_clicked();
void on_m_edit_autofolionum_pb_clicked();
signals:
void set_auto_page_num() const;
void openAutoNumFolioEditor (QString);
private:
Ui::TitleBlockPropertiesWidget *ui;
DiagramContextWidget *m_dcw;
/// keys of the context given to setProperties()
QStringList m_context_keys;
QAction *m_tbt_edit, *m_tbt_duplicate;
QMenu *m_tbt_menu;
QList <TitleBlockTemplatesCollection *> m_tbt_collection_list;
QList <QET::QetCollection> m_map_index_to_collection_type;
QList <QString> keys_2;
};
#endif // TITLEBLOCKPROPERTIESWIDGET_H