/* 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 RoundButton; } // 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 { ValueClass valueClass = ValueClass::Fields; PanelDetailsType inputType = PanelDetailsType(); QString key; QString label; Fn(const QString &value)> error; Fn format; int lengthLimit = 0; }; std::vector rows; QString rowsHeader; QString scansHeader; }; class PanelEditDocument : public Ui::RpWidget { public: using Scheme = EditDocumentScheme; PanelEditDocument( QWidget *parent, not_null controller, Scheme scheme, const ValueMap &data, const ValueMap &scanData, const QString &missingScansError, std::vector &&files, std::map &&specialFiles); PanelEditDocument( QWidget *parent, not_null controller, Scheme scheme, const ValueMap &data); bool hasUnsavedChanges() const; protected: void focusInEvent(QFocusEvent *e) override; void resizeEvent(QResizeEvent *e) override; private: struct Result; void setupControls( const ValueMap &data, const ValueMap *scanData, const QString &missingScansError, std::vector &&files, std::map &&specialFiles); not_null setupContent( const ValueMap &data, const ValueMap *scanData, const QString &missingScansError, std::vector &&files, std::map &&specialFiles); void updateControlsGeometry(); Result collect() const; bool validate(); void save(); not_null _controller; Scheme _scheme; object_ptr _scroll; object_ptr _topShadow; object_ptr _bottomShadow; QPointer _editScans; std::map> _details; 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