initialize screens only if necessary

This commit is contained in:
Andrzej Rybczak
2009-06-26 18:48:00 +02:00
parent 1147795fc6
commit 450bf1b636
26 changed files with 99 additions and 41 deletions

View File

@@ -1,7 +1,7 @@
AC_INIT(configure.in)
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE(ncmpcpp, 0.3.5)
AM_INIT_AUTOMAKE(ncmpcpp, 0.3.6_pre)
AC_PREREQ(2.59)

View File

@@ -60,6 +60,7 @@ void Browser::Init()
w->SetSelectSuffix(&Config.selected_item_suffix);
w->SetItemDisplayer(Display::Items);
w->SetGetStringFunction(ItemToString);
isInitialized = 1;
}
void Browser::Resize()
@@ -73,6 +74,9 @@ void Browser::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -29,7 +29,6 @@ class Browser : public Screen< Menu<MPD::Item> >
public:
Browser() : itsScrollBeginning(0), itsBrowsedDir("/") { }
virtual void Init();
virtual void Resize();
virtual void SwitchTo();
@@ -57,7 +56,10 @@ class Browser : public Screen< Menu<MPD::Item> >
void ClearDirectory(const std::string &) const;
void ChangeBrowseMode();
void UpdateItemList();
protected:
virtual void Init();
private:
static bool hasSupportedExtension(const std::string &);
static std::string ItemToString(const MPD::Item &, void *);

View File

@@ -53,6 +53,7 @@ void Clock::Init()
w = new Window((COLS-Width)/2, (LINES-Height)/2, Width, Height-1, "", Config.main_color, Border(Config.main_color));
w->SetTimeout(ncmpcpp_window_timeout);
isInitialized = 1;
}
void Clock::Resize()
@@ -80,6 +81,9 @@ void Clock::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -33,7 +33,6 @@
class Clock : public Screen<Window>
{
public:
virtual void Init();
virtual void Resize();
virtual void SwitchTo();
@@ -50,6 +49,9 @@ class Clock : public Screen<Window>
virtual List *GetList() { return 0; }
protected:
virtual void Init();
private:
static void Prepare();
static void Set(int, int);

View File

@@ -35,6 +35,7 @@ void Help::Init()
w->SetTimeout(ncmpcpp_window_timeout);
GetKeybindings();
w->Flush();
isInitialized = 1;
}
void Help::Resize()
@@ -48,6 +49,9 @@ void Help::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -27,7 +27,6 @@
class Help : public Screen<Scrollpad>
{
public:
virtual void Init();
virtual void Resize();
virtual void SwitchTo();
@@ -40,6 +39,9 @@ class Help : public Screen<Scrollpad>
virtual List *GetList() { return 0; }
protected:
virtual void Init();
private:
std::string DisplayKeys(int *, int = 2);
void GetKeybindings();

View File

@@ -61,6 +61,7 @@ void Info::Init()
{
w = new Scrollpad(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
w->SetTimeout(ncmpcpp_window_timeout);
isInitialized = 1;
}
void Info::Resize()
@@ -96,6 +97,9 @@ void Info::GetSong()
}
else
{
if (!isInitialized)
Init();
MPD::Song *s = myScreen->CurrentSong();
if (!s)
@@ -125,6 +129,9 @@ void Info::GetArtist()
}
else
{
if (!isInitialized)
Init();
# ifdef HAVE_PTHREAD_H
if (Downloader && !ArtistReady)
{

View File

@@ -28,7 +28,6 @@
class Info : public Screen<Scrollpad>
{
public:
virtual void Init();
virtual void SwitchTo() { }
virtual void Resize();
@@ -50,6 +49,9 @@ class Info : public Screen<Scrollpad>
void GetArtist();
# endif // HAVE_CURL_CURL_H
protected:
virtual void Init();
private:
std::string itsArtist;
std::string itsTitle;

View File

@@ -71,6 +71,7 @@ void Lyrics::Init()
{
w = new Scrollpad(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
w->SetTimeout(ncmpcpp_window_timeout);
isInitialized = 1;
}
void Lyrics::Resize()
@@ -104,6 +105,9 @@ void Lyrics::SwitchTo()
}
else
{
if (!isInitialized)
Init();
# if defined(HAVE_CURL_CURL_H) && defined(HAVE_PTHREAD_H)
if (Downloader && !Ready)
{

View File

@@ -43,7 +43,6 @@ class Lyrics : public Screen<Scrollpad>
Lyrics() : itsScrollBegin(0) { }
~Lyrics() { }
virtual void Init();
virtual void Resize();
virtual void SwitchTo();
@@ -66,6 +65,9 @@ class Lyrics : public Screen<Scrollpad>
static const char *GetPluginName(int offset);
# endif // HAVE_CURL_CURL_H
protected:
virtual void Init();
private:
std::string itsFilenamePath;

View File

@@ -75,6 +75,7 @@ void MediaLibrary::Init()
Songs->SetGetStringFunction(SongToString);
w = Artists;
isInitialized = 1;
}
void MediaLibrary::Resize()
@@ -141,6 +142,9 @@ void MediaLibrary::SwitchTo()
Albums->SetTitle("Albums");
}
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -37,7 +37,6 @@ class MediaLibrary : public Screen<Window>
};
public:
virtual void Init();
virtual void SwitchTo();
virtual void Resize();
@@ -68,6 +67,9 @@ class MediaLibrary : public Screen<Window>
Menu< std::pair<std::string, SearchConstraints> > *Albums;
Menu<MPD::Song> *Songs;
protected:
virtual void Init();
private:
void AddToPlaylist(bool);

View File

@@ -160,7 +160,7 @@ void Connection::UpdateStatus()
{
itsChanges.Playlist = 1;
itsChanges.SongID = 1;
itsChanges.Database = 1;
itsChanges.Database = 0;
itsChanges.DBUpdating = 1;
itsChanges.Volume = 1;
itsChanges.ElapsedTime = 1;

View File

@@ -133,27 +133,6 @@ int main(int argc, char *argv[])
if (!Config.statusbar_visibility)
MainHeight++;
myPlaylist->Init();
myBrowser->Init();
mySearcher->Init();
myLibrary->Init();
myPlaylistEditor->Init();
# ifdef HAVE_TAGLIB_H
myTinyTagEditor->Init();
myTagEditor->Init();
# endif // HAVE_TAGLIB_H
# ifdef ENABLE_OUTPUTS
myOutputs->Init();
# endif // ENABLE_OUTPUTS
# ifdef ENABLE_CLOCK
myClock->Init();
# endif // ENABLE_CLOCK
myHelp->Init();
myInfo->Init();
myLyrics->Init();
if (Config.header_visibility)
{
wHeader = new Window(0, 0, COLS, 1, "", Config.header_color, brNone);
@@ -169,8 +148,7 @@ int main(int argc, char *argv[])
wFooter->CreateHistory();
*wFooter << fmtBold; // bold by default
myScreen = myPlaylist;
myPlaylist->SwitchTo();
myPlaylist->UpdateTimer();
Mpd->SetStatusUpdater(NcmpcppStatusChanged, NULL);

View File

@@ -38,6 +38,7 @@ void Outputs::Init()
w->SetItemDisplayer(Display::Pairs);
FetchList();
isInitialized = 1;
}
void Outputs::SwitchTo()
@@ -45,6 +46,9 @@ void Outputs::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -34,7 +34,6 @@
class Outputs : public Screen< Menu<MPD::Output> >
{
public:
virtual void Init();
virtual void SwitchTo();
virtual void Resize();
@@ -49,6 +48,9 @@ class Outputs : public Screen< Menu<MPD::Output> >
virtual List *GetList() { return w; }
void FetchList();
protected:
virtual void Init();
};
extern Outputs *myOutputs;

View File

@@ -80,6 +80,8 @@ void Playlist::Init()
SortDialog->AddOption(std::make_pair("Sort", static_cast<MPD::Song::GetFunction>(0)));
SortDialog->AddOption(std::make_pair("Reverse", static_cast<MPD::Song::GetFunction>(0)));
SortDialog->AddOption(std::make_pair("Cancel", static_cast<MPD::Song::GetFunction>(0)));
isInitialized = 1;
}
void Playlist::SwitchTo()
@@ -87,6 +89,9 @@ void Playlist::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
itsScrollBegin = 0;
if (hasToBeResized)

View File

@@ -33,7 +33,6 @@ class Playlist : public Screen< Menu<MPD::Song> >
Playlist() : NowPlaying(-1), OldPlaying(-1), itsTotalLength(0), itsRemainingTime(0), itsScrollBegin(0) { }
~Playlist() { }
virtual void Init();
virtual void SwitchTo();
virtual void Resize();
@@ -76,6 +75,9 @@ class Playlist : public Screen< Menu<MPD::Song> >
static bool BlockUpdate;
static bool BlockRefreshing;
protected:
virtual void Init();
private:
std::string TotalLength();

View File

@@ -64,6 +64,7 @@ void PlaylistEditor::Init()
Content->SetGetStringFunctionUserData(&Config.song_list_format);
w = Playlists;
isInitialized = 1;
}
void PlaylistEditor::Resize()
@@ -97,6 +98,9 @@ void PlaylistEditor::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -26,7 +26,6 @@
class PlaylistEditor : public Screen<Window>
{
public:
virtual void Init();
virtual void SwitchTo();
virtual void Resize();
@@ -54,7 +53,10 @@ class PlaylistEditor : public Screen<Window>
Menu<std::string> *Playlists;
Menu<MPD::Song> *Content;
protected:
virtual void Init();
private:
void AddToPlaylist(bool);

View File

@@ -30,12 +30,11 @@
class BasicScreen
{
public:
BasicScreen() : hasToBeResized(0) { }
BasicScreen() : hasToBeResized(0), isInitialized(0) { }
virtual ~BasicScreen() { }
virtual void *ActiveWindow() = 0;
virtual void Init() = 0;
virtual void SwitchTo() = 0;
virtual void Resize() = 0;
@@ -62,6 +61,11 @@ class BasicScreen
virtual List *GetList() = 0;
bool hasToBeResized;
protected:
virtual void Init() = 0;
bool isInitialized;
};
template <typename WindowType> class Screen : public BasicScreen

View File

@@ -52,6 +52,7 @@ void SearchEngine::Init()
w->SetSelectPrefix(&Config.selected_item_prefix);
w->SetSelectSuffix(&Config.selected_item_suffix);
w->SetGetStringFunction(SearchEngineOptionToString);
isInitialized = 1;
}
void SearchEngine::Resize()
@@ -65,6 +66,9 @@ void SearchEngine::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -40,7 +40,6 @@ class SearchEngine : public Screen< Menu< std::pair<Buffer *, MPD::Song *> > >
};
public:
virtual void Init();
virtual void Resize();
virtual void SwitchTo();
@@ -69,6 +68,9 @@ class SearchEngine : public Screen< Menu< std::pair<Buffer *, MPD::Song *> > >
static const char *NormalMode;
static const char *StrictMode;
protected:
virtual void Init();
private:
void Prepare();
void Search();

View File

@@ -52,6 +52,7 @@ void TinyTagEditor::Init()
w->SetTimeout(ncmpcpp_window_timeout);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->SetItemDisplayer(Display::Generic);
isInitialized = 1;
}
void TinyTagEditor::Resize()
@@ -258,6 +259,9 @@ bool TinyTagEditor::GetTags()
ext = ext.substr(ext.rfind(".")+1);
ToLower(ext);
if (!isInitialized)
Init();
w->Clear();
w->Reset();
@@ -353,6 +357,7 @@ void TagEditor::Init()
Tags->SetGetStringFunctionUserData(TagTypes);
w = LeftColumn;
isInitialized = 1;
}
void TagEditor::Resize()
@@ -383,6 +388,9 @@ void TagEditor::SwitchTo()
if (myScreen == this)
return;
if (!isInitialized)
Init();
if (hasToBeResized)
Resize();

View File

@@ -36,7 +36,6 @@
class TinyTagEditor : public Screen< Menu<Buffer> >
{
public:
virtual void Init();
virtual void Resize();
virtual void SwitchTo();
@@ -52,6 +51,9 @@ class TinyTagEditor : public Screen< Menu<Buffer> >
bool SetEdited(MPD::Song *);
protected:
virtual void Init();
private:
bool GetTags();
MPD::Song itsEdited;
@@ -64,7 +66,6 @@ class TagEditor : public Screen<Window>
public:
TagEditor() : itsBrowsedDir("/") { }
virtual void Init();
virtual void Resize();
virtual void SwitchTo();
@@ -102,6 +103,9 @@ class TagEditor : public Screen<Window>
static void ReadTags(mpd_Song *);
static bool WriteTags(MPD::Song &);
protected:
virtual void Init();
private:
static std::string CapitalizeFirstLetters(const std::string &);
static void CapitalizeFirstLetters(MPD::Song &);