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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -85,6 +85,8 @@ void MediaLibrary::Resize()
Albums->MoveTo(itsMiddleColStartX, main_start_y);
Songs->MoveTo(itsRightColStartX, main_start_y);
hasToBeResized = 0;
}
void MediaLibrary::Refresh()
@@ -106,6 +108,9 @@ void MediaLibrary::SwitchTo()
if (myScreen == this)
return;
if (hasToBeResized)
Resize();
CLEAR_FIND_HISTORY;
myScreen = this;
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.Repeat = 1;
itsChanges.PlayerState = 1;
itsChanges.StatusFlags = 1;
}
else
{
@@ -194,6 +195,7 @@ void Connection::UpdateStatus()
itsChanges.Random = itsOldStatus->random != itsCurrentStatus->random;
itsChanges.Repeat = itsOldStatus->repeat != itsCurrentStatus->repeat;
itsChanges.PlayerState = itsOldStatus->state != itsCurrentStatus->state;
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Crossfade || itsChanges.DBUpdating;
}
itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
}

View File

@@ -42,7 +42,7 @@ namespace MPD
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 SongID:1;
bool Database:1;
@@ -53,6 +53,7 @@ namespace MPD
bool Random:1;
bool Repeat:1;
bool PlayerState:1;
bool StatusFlags:1;
};
typedef std::vector<Item> ItemList;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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