1e8e5ed697b43f1521acc1c27de1087365458319
[ncmpc-debian.git] / src / StatusBar.hxx
1 /* ncmpc (Ncurses MPD Client)
2  * (c) 2004-2018 The Music Player Daemon Project
3  * Project homepage: http://musicpd.org
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19
20 #ifndef NCMPC_STATUS_BAR_HXX
21 #define NCMPC_STATUS_BAR_HXX
22
23 #include "config.h"
24 #include "AsioServiceFwd.hxx"
25 #include "Window.hxx"
26
27 #ifndef NCMPC_MINI
28 #include "hscroll.hxx"
29 #endif
30
31 #include <mpd/status.h>
32
33 #include <boost/asio/steady_timer.hpp>
34
35 #include <string>
36
37 struct mpd_status;
38 struct mpd_song;
39 class DelayedSeek;
40
41 class StatusBar {
42         Window window;
43
44         std::string message;
45         boost::asio::steady_timer message_timer;
46
47 #ifndef NCMPC_MINI
48         class hscroll hscroll;
49 #endif
50
51         const char *left_text;
52         char right_text[64];
53
54         std::string center_text;
55
56         unsigned left_width, right_width;
57 #ifndef NCMPC_MINI
58         unsigned center_width;
59 #endif
60
61 public:
62         StatusBar(boost::asio::io_service &io_service,
63                   Point p, unsigned width) noexcept;
64         ~StatusBar() noexcept;
65
66         Window &GetWindow() noexcept {
67                 return window;
68         }
69
70         void SetMessage(const char *msg) noexcept;
71         void ClearMessage() noexcept;
72
73         void OnResize(Point p, unsigned width) noexcept;
74         void Update(const struct mpd_status *status,
75                     const struct mpd_song *song,
76                     const DelayedSeek &seek) noexcept;
77         void Paint() const noexcept;
78
79 private:
80         void OnMessageTimer(const boost::system::error_code &error) noexcept {
81                 if (!error)
82                         ClearMessage();
83         }
84 };
85
86 #endif