improve resizing
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
15
src/help.cpp
15
src/help.cpp
@@ -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
|
||||
)
|
||||
{
|
||||
if (myScreen == this)
|
||||
return;
|
||||
|
||||
if (hasToBeResized)
|
||||
Resize();
|
||||
|
||||
myScreen = this;
|
||||
w->Hide();
|
||||
redraw_header = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
std::string Help::Title()
|
||||
|
||||
16
src/info.cpp
16
src/info.cpp
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,15 +1342,6 @@ 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();
|
||||
|
||||
if (id == 0)
|
||||
|
||||
@@ -51,6 +51,9 @@ 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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 *);
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user