valentina/src/app/tape/tmainwindow.h

283 lines
9.0 KiB
C
Raw Normal View History

/************************************************************************
**
** @file tmainwindow.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 10 7, 2015
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2015 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina 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 3 of the License, or
** (at your option) any later version.
**
** Valentina 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 Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef TMAINWINDOW_H
#define TMAINWINDOW_H
#include <QTableWidget>
#include "../vmisc/def.h"
#include "../vmisc/vlockguard.h"
#include "../vformat/vmeasurements.h"
#include "../vmisc/vtablesearch.h"
#include "../vwidgets/vabstractmainwindow.h"
namespace Ui
{
class TMainWindow;
} // namespace Ui
class QLabel;
class QxtCsvModel;
class VMeasurement;
class TMainWindow : public VAbstractMainWindow
{
2022-08-12 17:50:13 +02:00
Q_OBJECT // NOLINT
public:
explicit TMainWindow(QWidget *parent = nullptr);
2022-08-12 17:50:13 +02:00
~TMainWindow() override;
2022-08-12 17:50:13 +02:00
auto CurrentFile() const -> QString;
void RetranslateTable();
2022-08-12 17:50:13 +02:00
auto SetDimensionABase(int base) -> bool;
auto SetDimensionBBase(int base) -> bool;
auto SetDimensionCBase(int base) -> bool;
void SetPUnit(Unit unit);
2022-08-12 17:50:13 +02:00
auto LoadFile(const QString &path) -> bool;
2021-05-21 19:51:46 +02:00
void UpdateWindowTitle();
protected:
2022-08-12 17:50:13 +02:00
void closeEvent(QCloseEvent *event) override;
void changeEvent(QEvent* event) override;
auto eventFilter(QObject *object, QEvent *event) -> bool override;
void ExportToCSVData(const QString &fileName, bool withHeader, int mib, const QChar &separator) final;
auto RecentFileList() const -> QStringList override;
private slots:
void FileNew();
void OpenIndividual();
void OpenMultisize();
void OpenTemplate();
void CreateFromExisting();
void Preferences();
void ToolBarStyles();
2022-08-12 17:50:13 +02:00
bool FileSave(); // NOLINT(modernize-use-trailing-return-type)
bool FileSaveAs(); // NOLINT(modernize-use-trailing-return-type)
2015-07-12 17:56:34 +02:00
void AboutToShowWindowMenu();
void ShowWindow() const;
void ImportDataFromCSV();
#if defined(Q_OS_MAC)
void AboutToShowDockMenu();
void OpenAt(QAction *where);
#endif //defined(Q_OS_MAC)
void SaveCustomerName();
void SaveEmail();
void SaveGender(int index);
void SaveBirthDate(const QDate & date);
void SaveNotes();
void SavePMSystem(int index);
void Remove();
void MoveTop();
void MoveUp();
void MoveDown();
void MoveBottom();
void Fx();
void AddCustom();
void AddKnown();
2022-02-05 14:00:22 +01:00
void AddSeparator();
void ImportFromPattern();
2015-07-12 17:56:34 +02:00
2020-10-03 06:34:25 +02:00
void DimensionABaseChanged();
void DimensionBBaseChanged();
void DimensionCBaseChanged();
void GradationChanged();
void ShowMData();
void DeployFormula();
void SaveMName(const QString &text);
void SaveMValue();
void SaveMBaseValue(double value);
2020-10-03 17:52:31 +02:00
void SaveMShiftA(double value);
void SaveMShiftB(double value);
void SaveMShiftC(double value);
void SaveMCorrectionValue(double value);
void SaveMDescription();
void SaveMFullName();
2020-10-03 17:52:31 +02:00
void SaveMUnits();
void SaveMDimension();
void FullCircumferenceChanged(bool checked);
void ExportToIndividual();
void RestrictFirstDimesion();
2020-10-05 14:14:38 +02:00
void RestrictSecondDimesion();
void RestrictThirdDimesion();
2020-10-08 12:34:38 +02:00
void EditDimensionLabels();
2022-02-14 12:26:24 +01:00
void DimensionCustomNames();
2020-10-08 12:34:38 +02:00
void SetDefaultGUILanguage();
private:
2022-08-12 17:50:13 +02:00
// cppcheck-suppress unknownMacro
Q_DISABLE_COPY_MOVE(TMainWindow) // NOLINT
Ui::TMainWindow *ui;
2022-08-12 17:50:13 +02:00
VMeasurements *m_m{nullptr};
VContainer *m_data{nullptr};
Unit m_mUnit{Unit::Cm};
Unit m_pUnit{Unit::Cm};
MeasurementsType m_mType{MeasurementsType::Individual};
qreal m_currentDimensionA{0};
qreal m_currentDimensionB{0};
qreal m_currentDimensionC{0};
QString m_curFile{};
QComboBox *m_gradationDimensionA{nullptr};
QComboBox *m_gradationDimensionB{nullptr};
QComboBox *m_gradationDimensionC{nullptr};
QComboBox *m_comboBoxUnits{nullptr};
int m_formulaBaseHeight;
QSharedPointer<VLockGuard<char>> m_lock{nullptr};
2021-11-22 14:24:48 +01:00
QSharedPointer<VTableSearch> m_search{};
2022-08-12 17:50:13 +02:00
QLabel *m_labelGradationDimensionA{nullptr};
QLabel *m_labelGradationDimensionB{nullptr};
QLabel *m_labelGradationDimensionC{nullptr};
QLabel *m_labelPatternUnit{nullptr};
bool m_isInitialized{false};
bool m_mIsReadOnly{false};
QTimer *m_gradation;
2021-11-22 14:24:48 +01:00
QMenu *m_searchHistory;
2022-08-12 17:50:13 +02:00
QVector<QObject *> m_hackedWidgets{};
struct MultisizeMeasurement
{
MultisizeMeasurement() = default;
QString name{}; // NOLINT(misc-non-private-member-variables-in-classes)
qreal base{0}; // NOLINT(misc-non-private-member-variables-in-classes)
qreal shiftA{0}; // NOLINT(misc-non-private-member-variables-in-classes)
qreal shiftB{0}; // NOLINT(misc-non-private-member-variables-in-classes)
qreal shiftC{0}; // NOLINT(misc-non-private-member-variables-in-classes)
QString fullName{}; // NOLINT(misc-non-private-member-variables-in-classes)
QString description{}; // NOLINT(misc-non-private-member-variables-in-classes)
};
void SetupMenu();
void InitWindow();
void InitMenu();
2020-10-01 15:56:44 +02:00
void InitDimensionsBaseValue();
2020-10-03 06:34:25 +02:00
void InitDimensionGradation(int index, const MeasurementDimension_p &dimension, QComboBox *control);
void InitDimensionControls();
2020-10-03 17:52:31 +02:00
void InitDimesionShifts();
void InitTable();
void SetDecimals();
2020-10-03 17:52:31 +02:00
void InitPatternUnits();
void InitComboBoxUnits();
2020-10-03 17:52:31 +02:00
void InitMeasurementUnits();
2022-08-12 17:50:13 +02:00
static void InitGender(QComboBox *gender);
void InitMeasurementDimension();
2021-11-22 14:24:48 +01:00
void InitSearch();
void InitSearchHistory();
void SaveSearchRequest();
void UpdateSearchControlsTooltips();
void RetranslateTableHeaders();
void ShowNewMData(bool fresh);
void ShowUnits();
2022-08-12 17:50:13 +02:00
static void ShowHeaderUnits(QTableWidget *table, int column, const QString &unit);
void MeasurementsWereSaved(bool saved);
void SetCurrentFile(const QString &fileName);
2022-08-12 17:50:13 +02:00
auto SaveMeasurements(const QString &fileName, QString &error) -> bool;
2022-08-12 17:50:13 +02:00
auto MaybeSave() -> bool;
2022-08-12 17:50:13 +02:00
auto AddCell(const QString &text, int row, int column, int aligment, bool ok = true) -> QTableWidgetItem *;
auto AddSeparatorCell(const QString &text, int row, int column, int aligment, bool ok = true) -> QTableWidgetItem*;
void RefreshData(bool freshCall = false);
void RefreshTable(bool freshCall = false);
2022-08-12 17:50:13 +02:00
void RefreshMeasurementData(const QSharedPointer<VMeasurement> &meash, qint32 currentRow);
2022-08-12 17:50:13 +02:00
auto GetCustomName() const -> QString;
static auto ClearCustomName(const QString &name) -> QString;
2022-08-12 17:50:13 +02:00
auto EvalFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label, bool specialUnits) -> bool;
void ShowMDiagram(const QString &name);
void Open(const QString &pathTo, const QString &filter);
void UpdatePadlock(bool ro);
void MeasurementGUI();
void Controls();
void MFields(bool enabled);
void ReadSettings();
void WriteSettings();
2022-08-12 17:50:13 +02:00
static auto FilterMeasurements(const QStringList &mNew, const QStringList &mFilter) -> QStringList;
void UpdatePatternUnit();
2022-08-12 17:50:13 +02:00
auto LoadFromExistingFile(const QString &path) -> bool;
void CreateWindowMenu(QMenu *menu);
template <class T>
void HackWidget(T **widget);
void HackDimensionBaseValue();
2020-10-03 17:52:31 +02:00
void HackDimensionShifts();
2022-08-12 17:50:13 +02:00
auto CheckMName(const QString &name, const QSet<QString> &importedNames) const -> QString;
void ShowError(const QString &text);
void RefreshDataAfterImport();
2020-10-10 18:31:23 +02:00
void ImportIndividualMeasurements(const QxtCsvModel &csv, const QVector<int> &map);
void ImportMultisizeMeasurements(const QxtCsvModel &csv, const QVector<int> &map);
2022-08-12 17:50:13 +02:00
auto ImportMultisizeMeasurement(const QxtCsvModel &csv, int i, const QVector<int> &map,
int dimensionsCount, QSet<QString> &importedNames) -> MultisizeMeasurement;
void SetCurrentPatternUnit();
2020-10-01 15:56:44 +02:00
2020-10-03 06:34:25 +02:00
void ShowDimensionControls();
void SetDimensionBases();
void SetCurrentDimensionValues();
2022-08-12 17:50:13 +02:00
auto DimensionRestrictedValues(int index, const MeasurementDimension_p &dimension) -> QVector<double>;
2022-08-12 17:50:13 +02:00
auto OrderedMeasurments() const -> QMap<int, QSharedPointer<VMeasurement> >;
};
#endif // TMAINWINDOW_H