actions: use unique_ptr for storing actions
[ncmpcpp.git] / src / screen_type.cpp
blobdfee972575cfebb681bd90fe27f132d0543bf3a3
1 /***************************************************************************
2 * Copyright (C) 2008-2016 by Andrzej Rybczak *
3 * electricityispower@gmail.com *
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 *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
21 #include "config.h"
22 #include "screen_type.h"
24 #include "browser.h"
25 #include "clock.h"
26 #include "help.h"
27 #include "lastfm.h"
28 #include "lyrics.h"
29 #include "media_library.h"
30 #include "outputs.h"
31 #include "playlist.h"
32 #include "playlist_editor.h"
33 #include "search_engine.h"
34 #include "sel_items_adder.h"
35 #include "server_info.h"
36 #include "song_info.h"
37 #include "sort_playlist.h"
38 #include "tag_editor.h"
39 #include "tiny_tag_editor.h"
40 #include "visualizer.h"
42 std::string screenTypeToString(ScreenType st)
44 switch (st)
46 case ScreenType::Browser:
47 return "browser";
48 #ifdef ENABLE_CLOCK
49 case ScreenType::Clock:
50 return "clock";
51 #endif // ENABLE_CLOCK
52 case ScreenType::Help:
53 return "help";
54 case ScreenType::Lastfm:
55 return "last_fm";
56 case ScreenType::Lyrics:
57 return "lyrics";
58 case ScreenType::MediaLibrary:
59 return "media_library";
60 #ifdef ENABLE_OUTPUTS
61 case ScreenType::Outputs:
62 return "outputs";
63 #endif // ENABLE_OUTPUTS
64 case ScreenType::Playlist:
65 return "playlist";
66 case ScreenType::PlaylistEditor:
67 return "playlist_editor";
68 case ScreenType::SearchEngine:
69 return "search_engine";
70 case ScreenType::SelectedItemsAdder:
71 return "selected_items_adder";
72 case ScreenType::ServerInfo:
73 return "server_info";
74 case ScreenType::SongInfo:
75 return "song_info";
76 case ScreenType::SortPlaylistDialog:
77 return "sort_playlist_dialog";
78 #ifdef HAVE_TAGLIB_H
79 case ScreenType::TagEditor:
80 return "tag_editor";
81 case ScreenType::TinyTagEditor:
82 return "tiny_tag_editor";
83 #endif // HAVE_TAGLIB_H
84 case ScreenType::Unknown:
85 return "unknown";
86 #ifdef ENABLE_VISUALIZER
87 case ScreenType::Visualizer:
88 return "visualizer";
89 #endif // ENABLE_VISUALIZER
91 // silence gcc warning
92 throw std::runtime_error("unreachable");
95 ScreenType stringtoStartupScreenType(const std::string &s)
97 ScreenType result = ScreenType::Unknown;
98 if (s == "browser")
99 result = ScreenType::Browser;
100 # ifdef ENABLE_CLOCK
101 else if (s == "clock")
102 result = ScreenType::Clock;
103 # endif // ENABLE_CLOCK
104 else if (s == "help")
105 result = ScreenType::Help;
106 else if (s == "media_library")
107 result = ScreenType::MediaLibrary;
108 # ifdef ENABLE_OUTPUTS
109 else if (s == "outputs")
110 result = ScreenType::Outputs;
111 # endif // ENABLE_OUTPUTS
112 else if (s == "playlist")
113 result = ScreenType::Playlist;
114 else if (s == "playlist_editor")
115 result = ScreenType::PlaylistEditor;
116 else if (s == "search_engine")
117 result = ScreenType::SearchEngine;
118 # ifdef HAVE_TAGLIB_H
119 else if (s == "tag_editor")
120 result = ScreenType::TagEditor;
121 # endif // HAVE_TAGLIB_H
122 # ifdef ENABLE_VISUALIZER
123 else if (s == "visualizer")
124 result = ScreenType::Visualizer;
125 # endif // ENABLE_VISUALIZER
126 return result;
129 ScreenType stringToScreenType(const std::string &s)
131 ScreenType result = stringtoStartupScreenType(s);
132 if (result == ScreenType::Unknown)
134 if (s == "lyrics")
135 result = ScreenType::Lyrics;
136 else if (s == "last_fm")
137 result = ScreenType::Lastfm;
138 else if (s == "selected_items_adder")
139 result = ScreenType::SelectedItemsAdder;
140 else if (s == "server_info")
141 result = ScreenType::ServerInfo;
142 else if (s == "song_info")
143 result = ScreenType::SongInfo;
144 else if (s == "sort_playlist_dialog")
145 result = ScreenType::SortPlaylistDialog;
146 # ifdef HAVE_TAGLIB_H
147 else if (s == "tiny_tag_editor")
148 result = ScreenType::TinyTagEditor;
149 # endif // HAVE_TAGLIB_H
151 return result;
154 BaseScreen *toScreen(ScreenType st)
156 switch (st)
158 case ScreenType::Browser:
159 return myBrowser;
160 # ifdef ENABLE_CLOCK
161 case ScreenType::Clock:
162 return myClock;
163 # endif // ENABLE_CLOCK
164 case ScreenType::Help:
165 return myHelp;
166 case ScreenType::Lastfm:
167 return myLastfm;
168 case ScreenType::Lyrics:
169 return myLyrics;
170 case ScreenType::MediaLibrary:
171 return myLibrary;
172 # ifdef ENABLE_OUTPUTS
173 case ScreenType::Outputs:
174 return myOutputs;
175 # endif // ENABLE_OUTPUTS
176 case ScreenType::Playlist:
177 return myPlaylist;
178 case ScreenType::PlaylistEditor:
179 return myPlaylistEditor;
180 case ScreenType::SearchEngine:
181 return mySearcher;
182 case ScreenType::SelectedItemsAdder:
183 return mySelectedItemsAdder;
184 case ScreenType::ServerInfo:
185 return myServerInfo;
186 case ScreenType::SongInfo:
187 return mySongInfo;
188 case ScreenType::SortPlaylistDialog:
189 return mySortPlaylistDialog;
190 # ifdef HAVE_TAGLIB_H
191 case ScreenType::TagEditor:
192 return myTagEditor;
193 case ScreenType::TinyTagEditor:
194 return myTinyTagEditor;
195 # endif // HAVE_TAGLIB_H
196 # ifdef ENABLE_VISUALIZER
197 case ScreenType::Visualizer:
198 return myVisualizer;
199 # endif // ENABLE_VISUALIZER
200 default:
201 return nullptr;