/* 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" class BoxContentDivider; namespace Ui { class VerticalLayout; class FlatLabel; template class SlideWrap; } // namespace Ui namespace Info { namespace Profile { class Button; } // namespace Profile } // namespace Info namespace Passport { enum class SpecialFile; class PanelController; class ScanButton; struct ScanInfo; enum class ReadScanError { FileTooLarge, CantReadImage, BadImageSize, Unknown, }; class EditScans : public Ui::RpWidget { public: EditScans( QWidget *parent, not_null controller, const QString &header, const QString &errorMissing, std::vector &&files); EditScans( QWidget *parent, not_null controller, std::map &&specialFiles); base::optional validateGetErrorTop(); static void ChooseScan( QPointer parent, Fn doneCallback, Fn errorCallback); ~EditScans(); private: struct SpecialScan; void setupScans(const QString &header); void setupSpecialScans(std::map &&files); void init(); void chooseScan(); void chooseSpecialScan(SpecialFile type); void updateScan(ScanInfo &&info); void updateSpecialScan(SpecialFile type, ScanInfo &&info); void updateFileRow( not_null button, const ScanInfo &info); void pushScan(const ScanInfo &info); void createSpecialScanRow( SpecialScan &scan, const ScanInfo &info); base::unique_qptr> createScan( not_null parent, const ScanInfo &info, const QString &name); SpecialScan &findSpecialScan(SpecialFile type); rpl::producer uploadButtonText() const; void toggleError(bool shown); void hideError(); void errorAnimationCallback(); bool uploadedSomeMore() const; void toggleSpecialScanError(SpecialFile type, bool shown); void hideSpecialScanError(SpecialFile type); void specialScanErrorAnimationCallback(SpecialFile type); not_null _controller; std::vector _files; int _initialCount = 0; QString _errorMissing; object_ptr _content; QPointer> _divider; QPointer> _header; QPointer> _uploadMoreError; QPointer _wrap; std::vector>> _rows; QPointer _upload; rpl::event_stream> _uploadTexts; bool _errorShown = false; Animation _errorAnimation; std::map _specialScans; }; } // namespace Passport