| 1 | // Aseprite | 
|---|
| 2 | // Copyright (C) 2018-2022  Igara Studio S.A. | 
|---|
| 3 | // Copyright (C) 2001-2018  David Capello | 
|---|
| 4 | // | 
|---|
| 5 | // This program is distributed under the terms of | 
|---|
| 6 | // the End-User License Agreement for Aseprite. | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef APP_UI_STATUS_BAR_H_INCLUDED | 
|---|
| 9 | #define APP_UI_STATUS_BAR_H_INCLUDED | 
|---|
| 10 | #pragma once | 
|---|
| 11 |  | 
|---|
| 12 | #include "app/color.h" | 
|---|
| 13 | #include "app/context_observer.h" | 
|---|
| 14 | #include "app/tools/active_tool_observer.h" | 
|---|
| 15 | #include "app/ui/doc_observer_widget.h" | 
|---|
| 16 | #include "base/time.h" | 
|---|
| 17 | #include "doc/tile.h" | 
|---|
| 18 | #include "ui/base.h" | 
|---|
| 19 | #include "ui/box.h" | 
|---|
| 20 |  | 
|---|
| 21 | #include <string> | 
|---|
| 22 | #include <vector> | 
|---|
| 23 |  | 
|---|
| 24 | namespace ui { | 
|---|
| 25 | class Box; | 
|---|
| 26 | class Button; | 
|---|
| 27 | class Entry; | 
|---|
| 28 | class Label; | 
|---|
| 29 | class TooltipManager; | 
|---|
| 30 | class Window; | 
|---|
| 31 | } | 
|---|
| 32 |  | 
|---|
| 33 | namespace render { | 
|---|
| 34 | class Zoom; | 
|---|
| 35 | } | 
|---|
| 36 |  | 
|---|
| 37 | namespace app { | 
|---|
| 38 | class ButtonSet; | 
|---|
| 39 | class Editor; | 
|---|
| 40 | class ZoomEntry; | 
|---|
| 41 |  | 
|---|
| 42 | namespace tools { | 
|---|
| 43 | class Tool; | 
|---|
| 44 | } | 
|---|
| 45 |  | 
|---|
| 46 | class StatusBar : public DocObserverWidget<ui::HBox> | 
|---|
| 47 | , public tools::ActiveToolObserver { | 
|---|
| 48 | static StatusBar* m_instance; | 
|---|
| 49 | public: | 
|---|
| 50 | static StatusBar* instance() { return m_instance; } | 
|---|
| 51 |  | 
|---|
| 52 | enum BackupIcon { None, Normal, Small }; | 
|---|
| 53 |  | 
|---|
| 54 | StatusBar(ui::TooltipManager* tooltipManager); | 
|---|
| 55 | ~StatusBar(); | 
|---|
| 56 |  | 
|---|
| 57 | void clearText(); | 
|---|
| 58 | void showDefaultText(); | 
|---|
| 59 | void showDefaultText(Doc* doc); | 
|---|
| 60 | void showAbout(); | 
|---|
| 61 |  | 
|---|
| 62 | bool setStatusText(int msecs, const std::string& text); | 
|---|
| 63 | void showTip(int msecs, const std::string& msg); | 
|---|
| 64 | void showColor(int msecs, const Color& color, | 
|---|
| 65 | const std::string& text = std::string()); | 
|---|
| 66 | void showTile(int msecs, doc::tile_t tile, | 
|---|
| 67 | const std::string& text = std::string()); | 
|---|
| 68 | void showTool(int msecs, tools::Tool* tool); | 
|---|
| 69 | void showSnapToGridWarning(bool state); | 
|---|
| 70 |  | 
|---|
| 71 | // Used by AppEditor to update the zoom level in the status bar. | 
|---|
| 72 | void updateFromEditor(Editor* editor); | 
|---|
| 73 |  | 
|---|
| 74 | void showBackupIcon(BackupIcon icon); | 
|---|
| 75 |  | 
|---|
| 76 | protected: | 
|---|
| 77 | void onInitTheme(ui::InitThemeEvent& ev) override; | 
|---|
| 78 | void onResize(ui::ResizeEvent& ev) override; | 
|---|
| 79 |  | 
|---|
| 80 | // ContextObserver impl | 
|---|
| 81 | void onActiveSiteChange(const Site& site) override; | 
|---|
| 82 |  | 
|---|
| 83 | // DocObserver impl | 
|---|
| 84 | void onPixelFormatChanged(DocEvent& ev) override; | 
|---|
| 85 |  | 
|---|
| 86 | // ActiveToolObserver impl | 
|---|
| 87 | void onSelectedToolChange(tools::Tool* tool) override; | 
|---|
| 88 |  | 
|---|
| 89 | private: | 
|---|
| 90 | void onCelOpacitySliderChange(); | 
|---|
| 91 | void newFrame(); | 
|---|
| 92 | void onChangeZoom(const render::Zoom& zoom); | 
|---|
| 93 | void updateSnapToGridWindowPosition(); | 
|---|
| 94 | void showIndicators(); | 
|---|
| 95 |  | 
|---|
| 96 | base::tick_t m_timeout; | 
|---|
| 97 |  | 
|---|
| 98 | // About text | 
|---|
| 99 | class AboutStatusBar; | 
|---|
| 100 | AboutStatusBar* m_about; | 
|---|
| 101 |  | 
|---|
| 102 | // Indicators | 
|---|
| 103 | class Indicators; | 
|---|
| 104 | class IndicatorsGeneration; | 
|---|
| 105 | Indicators* m_indicators; | 
|---|
| 106 |  | 
|---|
| 107 | // Box of main commands | 
|---|
| 108 | ui::Widget* m_docControls; | 
|---|
| 109 | ui::Box* m_commandsBox; | 
|---|
| 110 | ui::Label* m_frameLabel; | 
|---|
| 111 | ui::Entry* m_currentFrame;        // Current frame and go to frame entry | 
|---|
| 112 | ui::Button* m_newFrame;           // Button to create a new frame | 
|---|
| 113 | ZoomEntry* m_zoomEntry; | 
|---|
| 114 |  | 
|---|
| 115 | // Tip window | 
|---|
| 116 | class CustomizedTipWindow; | 
|---|
| 117 | CustomizedTipWindow* m_tipwindow; | 
|---|
| 118 |  | 
|---|
| 119 | // Snap to grid window | 
|---|
| 120 | class SnapToGridWindow; | 
|---|
| 121 | SnapToGridWindow* m_snapToGridWindow; | 
|---|
| 122 | }; | 
|---|
| 123 |  | 
|---|
| 124 | } // namespace app | 
|---|
| 125 |  | 
|---|
| 126 | #endif | 
|---|
| 127 |  | 
|---|