/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "ui/rp_widget.h" namespace Ui { class InputField; class ScrollArea; class FadeShadow; class PlainShadow; class FlatLabel; class RoundButton; template class SlideWrap; } // namespace Ui namespace Info { namespace Profile { class Button; } // namespace Profile } // namespace Info namespace Passport { class PanelController; struct ValueMap; struct ScanInfo; class EditScans; class PanelDetailsRow; enum class SpecialFile; enum class PanelDetailsType; struct EditDocumentScheme { enum class ValueClass { Fields, Scans, }; struct Row { using Validator = Fn(const QString &value)>; using Formatter = Fn; ValueClass valueClass = ValueClass::Fields; PanelDetailsType inputType = PanelDetailsType(); QString key; QString label; Validator error; Formatter format; int lengthLimit = 0; QString keyForAttachmentTo; // attach [last|middle]_name to first_* }; std::vector rows; QString fieldsHeader; QString detailsHeader; QString scansHeader; }; class PanelEditDocument : public Ui::RpWidget { public: using Scheme = EditDocumentScheme; PanelEditDocument( QWidget *parent, not_null controller, Scheme scheme, const QString &error, const ValueMap &data, const QString &scansError, const ValueMap &scansData, const QString &missingScansError, std::vector &&files, std::map &&specialFiles); PanelEditDocument( QWidget *parent, not_null controller, Scheme scheme, const QString &scansError, const ValueMap &scansData, const QString &missingScansError, std::vector &&files, std::map &&specialFiles); PanelEditDocument( QWidget *parent, not_null controller, Scheme scheme, const QString &error, const ValueMap &data); bool hasUnsavedChanges() const; protected: void focusInEvent(QFocusEvent *e) override; void resizeEvent(QResizeEvent *e) override; private: struct Result; void setupControls( const QString *error, const ValueMap *data, const QString *scansError, const ValueMap *scansData, const QString &missingScansError, std::vector &&files, std::map &&specialFiles); not_null setupContent( const QString *error, const ValueMap *data, const QString *scansError, const ValueMap *scansData, const QString &missingScansError, std::vector &&files, std::map &&specialFiles); void updateControlsGeometry(); void updateCommonError(); Result collect() const; bool validate(); void save(); not_null _controller; Scheme _scheme; object_ptr _scroll; object_ptr _topShadow; object_ptr _bottomShadow; QPointer _editScans; QPointer> _commonError; std::map> _details; bool _fieldsChanged = false; QPointer _delete; object_ptr _done; }; object_ptr RequestIdentityType( Fn submit, std::vector labels); object_ptr RequestAddressType( Fn submit, std::vector labels); object_ptr ConfirmDeleteDocument( Fn submit, const QString &text, const QString &detailsCheckbox = QString()); } // namespace Passport