window_theme_editor.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "data/data_cloud_themes.h"
  9. #include "ui/rp_widget.h"
  10. #include "base/object_ptr.h"
  11. namespace style {
  12. struct colorizer;
  13. } // namespace style
  14. namespace Ui {
  15. class FlatButton;
  16. class ScrollArea;
  17. class CrossButton;
  18. class MultiSelect;
  19. class PlainShadow;
  20. class DropdownMenu;
  21. class IconButton;
  22. } // namespace Ui
  23. namespace Window {
  24. class Controller;
  25. namespace Theme {
  26. struct ParsedTheme {
  27. QByteArray palette;
  28. QByteArray background;
  29. bool isPng = false;
  30. bool tiled = false;
  31. };
  32. [[nodiscard]] QByteArray ColorHexString(const QColor &color);
  33. [[nodiscard]] QByteArray ReplaceValueInPaletteContent(
  34. const QByteArray &content,
  35. const QByteArray &name,
  36. const QByteArray &value);
  37. [[nodiscard]] QByteArray WriteCloudToText(const Data::CloudTheme &cloud);
  38. [[nodiscard]] Data::CloudTheme ReadCloudFromText(const QByteArray &text);
  39. [[nodiscard]] QByteArray StripCloudTextFields(const QByteArray &text);
  40. class Editor : public TWidget {
  41. public:
  42. Editor(
  43. QWidget*,
  44. not_null<Window::Controller*> window,
  45. const Data::CloudTheme &cloud);
  46. [[nodiscard]] static QByteArray ColorizeInContent(
  47. QByteArray content,
  48. const style::colorizer &colorizer);
  49. protected:
  50. void paintEvent(QPaintEvent *e) override;
  51. void resizeEvent(QResizeEvent *e) override;
  52. void keyPressEvent(QKeyEvent *e) override;
  53. void focusInEvent(QFocusEvent *e) override;
  54. private:
  55. void save();
  56. void showMenu();
  57. void exportTheme();
  58. void importTheme();
  59. void closeEditor();
  60. void closeWithConfirmation();
  61. void updateControlsGeometry();
  62. const not_null<Window::Controller*> _window;
  63. const Data::CloudTheme _cloud;
  64. object_ptr<Ui::ScrollArea> _scroll;
  65. class Inner;
  66. QPointer<Inner> _inner;
  67. object_ptr<Ui::CrossButton> _close;
  68. object_ptr<Ui::IconButton> _menuToggle;
  69. base::unique_qptr<Ui::DropdownMenu> _menu;
  70. object_ptr<Ui::MultiSelect> _select;
  71. object_ptr<Ui::PlainShadow> _leftShadow;
  72. object_ptr<Ui::PlainShadow> _topShadow;
  73. object_ptr<Ui::FlatButton> _save;
  74. bool _saving = false;
  75. };
  76. } // namespace Theme
  77. } // namespace Window