improve resizing

This commit is contained in:
Andrzej Rybczak
2009-02-16 00:37:03 +01:00
parent f9cdfa5d2b
commit ba6c2db0b1
16 changed files with 82 additions and 78 deletions

View File

@@ -53,6 +53,7 @@ void Browser::Init()
void Browser::Resize() void Browser::Resize()
{ {
w->Resize(COLS, main_height); w->Resize(COLS, main_height);
hasToBeResized = 0;
} }
void Browser::SwitchTo() void Browser::SwitchTo()
@@ -60,6 +61,9 @@ void Browser::SwitchTo()
if (myScreen == this) if (myScreen == this)
return; return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY; CLEAR_FIND_HISTORY;
w->Empty() ? myBrowser->GetDirectory(itsBrowsedDir) : myBrowser->UpdateItemList(); w->Empty() ? myBrowser->GetDirectory(itsBrowsedDir) : myBrowser->UpdateItemList();
myScreen = this; myScreen = this;

View File

@@ -56,10 +56,9 @@ void Clock::Resize()
if (Width <= size_t(COLS) && Height <= main_height) if (Width <= size_t(COLS) && Height <= main_height)
{ {
w->MoveTo((COLS-Width)/2, (LINES-Height)/2); w->MoveTo((COLS-Width)/2, (LINES-Height)/2);
if (myScreen == myClock) if (myScreen == this)
{ {
myPlaylist->Main()->Hide(); myPlaylist->Main()->Hide();
Prepare();
w->Display(); w->Display();
} }
} }
@@ -75,6 +74,9 @@ void Clock::SwitchTo()
if (myScreen == this) if (myScreen == this)
return; return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY; CLEAR_FIND_HISTORY;
myScreen = this; myScreen = this;
myPlaylist->Main()->Hide(); myPlaylist->Main()->Hide();

View File

@@ -49,7 +49,6 @@ namespace Global
extern bool block_progressbar_update; extern bool block_progressbar_update;
extern bool block_item_list_update; extern bool block_item_list_update;
extern bool header_update_status;
extern bool messages_allowed; extern bool messages_allowed;
extern bool redraw_header; extern bool redraw_header;

View File

@@ -40,20 +40,21 @@ void Help::Init()
void Help::Resize() void Help::Resize()
{ {
w->Resize(COLS, main_height); w->Resize(COLS, main_height);
hasToBeResized = 0;
} }
void Help::SwitchTo() void Help::SwitchTo()
{ {
if (myScreen != myHelp if (myScreen == this)
# ifdef HAVE_TAGLIB_H return;
&& myScreen != myTinyTagEditor
# endif // HAVE_TAGLIB_H if (hasToBeResized)
) Resize();
{
myScreen = this; myScreen = this;
w->Hide(); w->Hide();
redraw_header = 1; redraw_header = 1;
}
} }
std::string Help::Title() std::string Help::Title()

View File

@@ -59,6 +59,7 @@ void Info::Init()
void Info::Resize() void Info::Resize()
{ {
w->Resize(COLS, main_height); w->Resize(COLS, main_height);
hasToBeResized = 0;
} }
std::string Info::Title() std::string Info::Title()
@@ -83,10 +84,7 @@ void Info::GetSong()
{ {
if (myScreen == this) if (myScreen == this)
{ {
w->Hide(); myOldScreen->SwitchTo();
myScreen = myOldScreen;
redraw_header = 1;
myScreen->Refresh();
} }
else else
{ {
@@ -95,6 +93,9 @@ void Info::GetSong()
if (!s) if (!s)
return; return;
if (hasToBeResized)
Resize();
myOldScreen = myScreen; myOldScreen = myScreen;
myScreen = this; myScreen = this;
redraw_header = 1; redraw_header = 1;
@@ -112,10 +113,7 @@ void Info::GetArtist()
{ {
if (myScreen == this) if (myScreen == this)
{ {
w->Hide(); myOldScreen->SwitchTo();
myScreen = myOldScreen;
redraw_header = 1;
myScreen->Refresh();
} }
else else
{ {
@@ -138,6 +136,8 @@ void Info::GetArtist()
if (!artist->empty()) if (!artist->empty())
{ {
if (hasToBeResized)
Resize();
myOldScreen = myScreen; myOldScreen = myScreen;
myScreen = this; myScreen = this;
redraw_header = 1; redraw_header = 1;

View File

@@ -63,6 +63,7 @@ void Lyrics::Init()
void Lyrics::Resize() void Lyrics::Resize()
{ {
w->Resize(COLS, main_height); w->Resize(COLS, main_height);
hasToBeResized = 0;
} }
void Lyrics::Update() void Lyrics::Update()
@@ -86,10 +87,7 @@ void Lyrics::SwitchTo()
{ {
if (myScreen == this && !Reload) if (myScreen == this && !Reload)
{ {
w->Hide(); myOldScreen->SwitchTo();
myScreen = myOldScreen;
redraw_header = 1;
myScreen->Refresh();
} }
else else
{ {
@@ -114,6 +112,8 @@ void Lyrics::SwitchTo()
if (!s->GetArtist().empty() && !s->GetTitle().empty()) if (!s->GetArtist().empty() && !s->GetTitle().empty())
{ {
if (hasToBeResized)
Resize();
itsScrollBegin = 0; itsScrollBegin = 0;
itsSong = *s; itsSong = *s;
myOldScreen = myScreen; myOldScreen = myScreen;

View File

@@ -85,6 +85,8 @@ void MediaLibrary::Resize()
Albums->MoveTo(itsMiddleColStartX, main_start_y); Albums->MoveTo(itsMiddleColStartX, main_start_y);
Songs->MoveTo(itsRightColStartX, main_start_y); Songs->MoveTo(itsRightColStartX, main_start_y);
hasToBeResized = 0;
} }
void MediaLibrary::Refresh() void MediaLibrary::Refresh()
@@ -106,6 +108,9 @@ void MediaLibrary::SwitchTo()
if (myScreen == this) if (myScreen == this)
return; return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY; CLEAR_FIND_HISTORY;
myScreen = this; myScreen = this;
myPlaylist->Main()->Hide(); // hack, should be myScreen, but it doesn't always have 100% width myPlaylist->Main()->Hide(); // hack, should be myScreen, but it doesn't always have 100% width

View File

@@ -181,6 +181,7 @@ void Connection::UpdateStatus()
itsChanges.Random = 1; itsChanges.Random = 1;
itsChanges.Repeat = 1; itsChanges.Repeat = 1;
itsChanges.PlayerState = 1; itsChanges.PlayerState = 1;
itsChanges.StatusFlags = 1;
} }
else else
{ {
@@ -194,6 +195,7 @@ void Connection::UpdateStatus()
itsChanges.Random = itsOldStatus->random != itsCurrentStatus->random; itsChanges.Random = itsOldStatus->random != itsCurrentStatus->random;
itsChanges.Repeat = itsOldStatus->repeat != itsCurrentStatus->repeat; itsChanges.Repeat = itsOldStatus->repeat != itsCurrentStatus->repeat;
itsChanges.PlayerState = itsOldStatus->state != itsCurrentStatus->state; itsChanges.PlayerState = itsOldStatus->state != itsCurrentStatus->state;
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Crossfade || itsChanges.DBUpdating;
} }
itsUpdater(this, itsChanges, itsErrorHandlerUserdata); itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
} }

View File

@@ -42,7 +42,7 @@ namespace MPD
struct StatusChanges struct StatusChanges
{ {
StatusChanges() : Playlist(0), SongID(0), Database(0), DBUpdating(0), Volume(0), ElapsedTime(0), Crossfade(0), Random(0), Repeat(0), PlayerState(0) { } StatusChanges() : Playlist(0), SongID(0), Database(0), DBUpdating(0), Volume(0), ElapsedTime(0), Crossfade(0), Random(0), Repeat(0), PlayerState(0), StatusFlags(0) { }
bool Playlist:1; bool Playlist:1;
bool SongID:1; bool SongID:1;
bool Database:1; bool Database:1;
@@ -53,6 +53,7 @@ namespace MPD
bool Random:1; bool Random:1;
bool Repeat:1; bool Repeat:1;
bool PlayerState:1; bool PlayerState:1;
bool StatusFlags:1;
}; };
typedef std::vector<Item> ItemList; typedef std::vector<Item> ItemList;

View File

@@ -341,24 +341,26 @@ int main(int argc, char *argv[])
if (!Config.statusbar_visibility) if (!Config.statusbar_visibility)
main_height++; main_height++;
myHelp->Resize(); myHelp->hasToBeResized = 1;
myPlaylist->Resize(); myPlaylist->hasToBeResized = 1;
myBrowser->Resize(); myBrowser->hasToBeResized = 1;
mySearcher->Resize(); mySearcher->hasToBeResized = 1;
myLibrary->Resize(); myLibrary->hasToBeResized = 1;
myPlaylistEditor->Resize(); myPlaylistEditor->hasToBeResized = 1;
myInfo->Resize(); myInfo->hasToBeResized = 1;
myLyrics->Resize(); myLyrics->hasToBeResized = 1;
# ifdef HAVE_TAGLIB_H # ifdef HAVE_TAGLIB_H
myTinyTagEditor->Resize(); myTinyTagEditor->hasToBeResized = 1;
myTagEditor->Resize(); myTagEditor->hasToBeResized = 1;
# endif // HAVE_TAGLIB_H # endif // HAVE_TAGLIB_H
# ifdef ENABLE_CLOCK # ifdef ENABLE_CLOCK
myClock->Resize(); myClock->hasToBeResized = 1;
# endif // ENABLE_CLOCK # endif // ENABLE_CLOCK
myScreen->Resize();
if (Config.header_visibility) if (Config.header_visibility)
wHeader->Resize(COLS, wHeader->GetHeight()); wHeader->Resize(COLS, wHeader->GetHeight());
@@ -367,9 +369,9 @@ int main(int argc, char *argv[])
wFooter->Resize(COLS, wFooter->GetHeight()); wFooter->Resize(COLS, wFooter->GetHeight());
myScreen->Refresh(); myScreen->Refresh();
header_update_status = 1;
PlayerState mpd_state = Mpd->GetState(); PlayerState mpd_state = Mpd->GetState();
StatusChanges changes; StatusChanges changes;
changes.StatusFlags = 1; // force status update
if (mpd_state == psPlay || mpd_state == psPause) if (mpd_state == psPlay || mpd_state == psPause)
changes.ElapsedTime = 1; // restore status changes.ElapsedTime = 1; // restore status
else else
@@ -1340,15 +1342,6 @@ int main(int argc, char *argv[])
size_t id = mDialog->Choice(); size_t id = mDialog->Choice();
if (myScreen == myLibrary)
{
myLibrary->Refresh();
}
else if (myScreen == myPlaylistEditor)
{
myPlaylistEditor->Refresh();
}
else
myScreen->Refresh(); myScreen->Refresh();
if (id == 0) if (id == 0)

View File

@@ -51,6 +51,9 @@ void Playlist::SwitchTo()
if (myScreen == this) if (myScreen == this)
return; return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY; CLEAR_FIND_HISTORY;
myScreen = this; myScreen = this;
w->Hide(); w->Hide();
@@ -61,6 +64,7 @@ void Playlist::Resize()
{ {
w->Resize(COLS, main_height); w->Resize(COLS, main_height);
w->SetTitle(Config.columns_in_playlist ? Display::Columns(Config.song_columns_list_format) : ""); w->SetTitle(Config.columns_in_playlist ? Display::Columns(Config.song_columns_list_format) : "");
hasToBeResized = 0;
} }
std::string Playlist::Title() std::string Playlist::Title()

View File

@@ -34,10 +34,6 @@ using namespace Global;
using namespace MPD; using namespace MPD;
using std::string; using std::string;
//Window *Global::wPlaylistEditorActiveCol;
//Menu<string> *Global::List;
//Menu<Song> *Global::Content;
PlaylistEditor *myPlaylistEditor = new PlaylistEditor; PlaylistEditor *myPlaylistEditor = new PlaylistEditor;
size_t PlaylistEditor::LeftColumnWidth; size_t PlaylistEditor::LeftColumnWidth;
@@ -76,6 +72,8 @@ void PlaylistEditor::Resize()
Content->Resize(RightColumnWidth, main_height); Content->Resize(RightColumnWidth, main_height);
Content->MoveTo(RightColumnStartX, main_start_y); Content->MoveTo(RightColumnStartX, main_start_y);
hasToBeResized = 0;
} }
std::string PlaylistEditor::Title() std::string PlaylistEditor::Title()
@@ -95,6 +93,9 @@ void PlaylistEditor::SwitchTo()
if (myScreen == this) if (myScreen == this)
return; return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY; CLEAR_FIND_HISTORY;
myScreen = this; myScreen = this;
myPlaylist->Main()->Hide(); // hack, should be myScreen, but it doesn't always have 100% width myPlaylist->Main()->Hide(); // hack, should be myScreen, but it doesn't always have 100% width

View File

@@ -30,7 +30,7 @@
class BasicScreen class BasicScreen
{ {
public: public:
BasicScreen() { } BasicScreen() : hasToBeResized(0) { }
virtual ~BasicScreen() { } virtual ~BasicScreen() { }
virtual void *&Cmp() = 0; virtual void *&Cmp() = 0;
@@ -50,6 +50,8 @@ class BasicScreen
virtual MPD::Song *CurrentSong() { return 0; } virtual MPD::Song *CurrentSong() { return 0; }
bool hasToBeResized;
protected: protected:
void Select(List *); void Select(List *);
}; };

View File

@@ -55,6 +55,7 @@ void SearchEngine::Init()
void SearchEngine::Resize() void SearchEngine::Resize()
{ {
w->Resize(COLS, main_height); w->Resize(COLS, main_height);
hasToBeResized = 0;
} }
void SearchEngine::SwitchTo() void SearchEngine::SwitchTo()
@@ -62,6 +63,9 @@ void SearchEngine::SwitchTo()
if (myScreen == this) if (myScreen == this)
return; return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY; CLEAR_FIND_HISTORY;
if (w->Empty()) if (w->Empty())
Prepare(); Prepare();

View File

@@ -40,8 +40,6 @@ using std::string;
string Global::volume_state; string Global::volume_state;
bool Global::header_update_status = 0;
namespace namespace
{ {
time_t time_of_statusbar_lock; time_t time_of_statusbar_lock;
@@ -396,29 +394,24 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
{ {
mpd_repeat = Mpd->GetRepeat() ? 'r' : 0; mpd_repeat = Mpd->GetRepeat() ? 'r' : 0;
ShowMessage("Repeat is %s", !mpd_repeat ? "off" : "on"); ShowMessage("Repeat is %s", !mpd_repeat ? "off" : "on");
header_update_status = 1;
} }
if (changed.Random) if (changed.Random)
{ {
mpd_random = Mpd->GetRandom() ? 'z' : 0; mpd_random = Mpd->GetRandom() ? 'z' : 0;
ShowMessage("Random is %s", !mpd_random ? "off" : "on"); ShowMessage("Random is %s", !mpd_random ? "off" : "on");
header_update_status = 1;
} }
if (changed.Crossfade) if (changed.Crossfade)
{ {
int crossfade = Mpd->GetCrossfade(); int crossfade = Mpd->GetCrossfade();
mpd_crossfade = crossfade ? 'x' : 0; mpd_crossfade = crossfade ? 'x' : 0;
ShowMessage("Crossfade set to %d seconds", crossfade); ShowMessage("Crossfade set to %d seconds", crossfade);
header_update_status = 1;
} }
if (changed.DBUpdating) if (changed.DBUpdating)
{ {
mpd_db_updating = Mpd->GetDBIsUpdating() ? 'U' : 0; mpd_db_updating = Mpd->GetDBIsUpdating() ? 'U' : 0;
ShowMessage(!mpd_db_updating ? "Database update finished!" : "Database update started!"); ShowMessage(!mpd_db_updating ? "Database update finished!" : "Database update started!");
header_update_status = 1;
} }
if (header_update_status && Config.header_visibility) if (changed.StatusFlags && Config.header_visibility)
{ {
switch_state.clear(); switch_state.clear();
if (mpd_repeat) if (mpd_repeat)
@@ -445,7 +438,6 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
} }
attroff(A_BOLD|COLOR_PAIR(Config.state_line_color)); attroff(A_BOLD|COLOR_PAIR(Config.state_line_color));
refresh(); refresh();
header_update_status = 0;
} }
if (changed.Volume && Config.header_visibility) if (changed.Volume && Config.header_visibility)
{ {

View File

@@ -56,6 +56,7 @@ void TinyTagEditor::Init()
void TinyTagEditor::Resize() void TinyTagEditor::Resize()
{ {
w->Resize(COLS, main_height); w->Resize(COLS, main_height);
hasToBeResized = 0;
} }
void TinyTagEditor::SwitchTo() void TinyTagEditor::SwitchTo()
@@ -66,6 +67,8 @@ void TinyTagEditor::SwitchTo()
} }
else if (GetTags()) else if (GetTags())
{ {
if (hasToBeResized)
Resize();
myOldScreen = myScreen; myOldScreen = myScreen;
myScreen = this; myScreen = this;
redraw_header = 1; redraw_header = 1;
@@ -205,21 +208,7 @@ void TinyTagEditor::EnterPressed()
} }
case 15: case 15:
{ {
w->Clear(); myOldScreen->SwitchTo();
myScreen = myOldScreen;
redraw_header = 1;
if (myScreen == myLibrary)
{
myLibrary->Refresh();
}
else if (myScreen == myPlaylistEditor)
{
myPlaylistEditor->Refresh();
}
else if (myScreen == myTagEditor)
{
myTagEditor->Refresh();
}
break; break;
} }
} }
@@ -352,6 +341,8 @@ void TagEditor::Resize()
TagTypes->MoveTo(MiddleColumnStartX, main_start_y); TagTypes->MoveTo(MiddleColumnStartX, main_start_y);
Tags->MoveTo(RightColumnStartX, main_start_y); Tags->MoveTo(RightColumnStartX, main_start_y);
hasToBeResized = 0;
} }
std::string TagEditor::Title() std::string TagEditor::Title()
@@ -364,6 +355,9 @@ void TagEditor::SwitchTo()
if (myScreen == this) if (myScreen == this)
return; return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY; CLEAR_FIND_HISTORY;
myScreen = this; myScreen = this;