mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-26 20:04:12 +02:00
12ecf6b28f
Refs discussion #886: a saved-report manager built on custom SQL and nomenclature.json. Most of what was asked for already existed -- Projet > Exporter au format CSV already builds/saves/reuses named SELECT queries via ElementQueryWidget and nomenclature.json, and Projet > Ajouter une nomenclature already inserts one into a folio. This fills the three real gaps. - projectDataBase::isReadOnlySelect() rejects anything that isn't a single SELECT/WITH statement. Checked in newQuery() itself, the one choke point every query path already goes through -- including a query loaded from a saved nomenclature/summary table's <query> element on project open, not just the dialog's own custom-SQL box. ElementQueryWidget shows the same check live as you type, and BOMExportDialog surfaces it before running or exporting anything. - BOMExportDialog gains a Preview button + table (QSqlQueryModel), so a report can be checked on screen before committing to a CSV file. - ElementQueryWidget gains Importer.../Exporter... buttons that read/write nomenclature.json's saved reports as a JSON file, so a report can be handed to a colleague or another install. Import asks before overwriting a locally-saved report of the same name. Verified: Qt 6.10.2, builds clean, ctest 8/8. Drove the real dialog through Xvfb: typed "DROP TABLE element" into the custom-SQL box and got the inline warning immediately, then confirmed Preview also refuses it with a "Requête refusée" dialog rather than running it. Preview against the real default query returned live column headers and a row. Export opens a save dialog without crashing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
138 lines
3.3 KiB
XML
138 lines
3.3 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<ui version="4.0">
|
|
<class>BOMExportDialog</class>
|
|
<widget class="QDialog" name="BOMExportDialog">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>0</x>
|
|
<y>0</y>
|
|
<width>610</width>
|
|
<height>480</height>
|
|
</rect>
|
|
</property>
|
|
<property name="windowTitle">
|
|
<string>Dialog</string>
|
|
</property>
|
|
<layout class="QVBoxLayout" name="m_main_layout">
|
|
<item>
|
|
<widget class="QGroupBox" name="groupBox">
|
|
<property name="title">
|
|
<string>Mise en page</string>
|
|
</property>
|
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
|
<item>
|
|
<widget class="QCheckBox" name="m_include_headers">
|
|
<property name="text">
|
|
<string>inclure les en-têtes</string>
|
|
</property>
|
|
<property name="checked">
|
|
<bool>true</bool>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="QCheckBox" name="m_format_as_bom">
|
|
<property name="text">
|
|
<string>Formater en tant que liste de materiel</string>
|
|
</property>
|
|
<property name="checked">
|
|
<bool>false</bool>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<spacer name="verticalSpacer">
|
|
<property name="orientation">
|
|
<enum>Qt::Vertical</enum>
|
|
</property>
|
|
<property name="sizeHint" stdset="0">
|
|
<size>
|
|
<width>20</width>
|
|
<height>40</height>
|
|
</size>
|
|
</property>
|
|
</spacer>
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="m_preview_layout">
|
|
<item>
|
|
<widget class="QPushButton" name="m_preview_pb">
|
|
<property name="text">
|
|
<string>Aperçu</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<spacer name="m_preview_spacer">
|
|
<property name="orientation">
|
|
<enum>Qt::Horizontal</enum>
|
|
</property>
|
|
<property name="sizeHint" stdset="0">
|
|
<size>
|
|
<width>40</width>
|
|
<height>20</height>
|
|
</size>
|
|
</property>
|
|
</spacer>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<widget class="QTableView" name="m_preview_table">
|
|
<property name="editTriggers">
|
|
<set>QAbstractItemView::NoEditTriggers</set>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="QDialogButtonBox" name="buttonBox">
|
|
<property name="orientation">
|
|
<enum>Qt::Horizontal</enum>
|
|
</property>
|
|
<property name="standardButtons">
|
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
<resources/>
|
|
<connections>
|
|
<connection>
|
|
<sender>buttonBox</sender>
|
|
<signal>accepted()</signal>
|
|
<receiver>BOMExportDialog</receiver>
|
|
<slot>accept()</slot>
|
|
<hints>
|
|
<hint type="sourcelabel">
|
|
<x>248</x>
|
|
<y>254</y>
|
|
</hint>
|
|
<hint type="destinationlabel">
|
|
<x>157</x>
|
|
<y>274</y>
|
|
</hint>
|
|
</hints>
|
|
</connection>
|
|
<connection>
|
|
<sender>buttonBox</sender>
|
|
<signal>rejected()</signal>
|
|
<receiver>BOMExportDialog</receiver>
|
|
<slot>reject()</slot>
|
|
<hints>
|
|
<hint type="sourcelabel">
|
|
<x>316</x>
|
|
<y>260</y>
|
|
</hint>
|
|
<hint type="destinationlabel">
|
|
<x>286</x>
|
|
<y>274</y>
|
|
</hint>
|
|
</hints>
|
|
</connection>
|
|
</connections>
|
|
</ui>
|