Adjust handling of selected prefix and suffix in columns mode
This commit is contained in:
@@ -144,9 +144,22 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, const SongList &l
|
|||||||
bool separate_albums, is_now_playing, is_selected, discard_colors;
|
bool separate_albums, is_now_playing, is_selected, discard_colors;
|
||||||
setProperties(menu, s, list, separate_albums, is_now_playing, is_selected, discard_colors);
|
setProperties(menu, s, list, separate_albums, is_now_playing, is_selected, discard_colors);
|
||||||
|
|
||||||
|
int menu_width = menu.getWidth();
|
||||||
|
if (is_now_playing)
|
||||||
|
{
|
||||||
|
menu_width -= Config.now_playing_prefix_length;
|
||||||
|
menu_width -= Config.now_playing_suffix_length;
|
||||||
|
}
|
||||||
|
if (is_selected)
|
||||||
|
{
|
||||||
|
menu_width -= Config.selected_item_prefix_length;
|
||||||
|
menu_width -= Config.selected_item_suffix_length;
|
||||||
|
}
|
||||||
|
|
||||||
int width;
|
int width;
|
||||||
int y = menu.getY();
|
int y = menu.getY();
|
||||||
int remained_width = menu.getWidth();
|
int remained_width = menu_width;
|
||||||
|
|
||||||
std::vector<Column>::const_iterator it, last = Config.columns.end() - 1;
|
std::vector<Column>::const_iterator it, last = Config.columns.end() - 1;
|
||||||
for (it = Config.columns.begin(); it != Config.columns.end(); ++it)
|
for (it = Config.columns.begin(); it != Config.columns.end(); ++it)
|
||||||
{
|
{
|
||||||
@@ -157,7 +170,7 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, const SongList &l
|
|||||||
if (it->stretch_limit >= 0) // (*)
|
if (it->stretch_limit >= 0) // (*)
|
||||||
width = remained_width - it->stretch_limit;
|
width = remained_width - it->stretch_limit;
|
||||||
else
|
else
|
||||||
width = it->fixed ? it->width : it->width * menu.getWidth() * 0.01;
|
width = it->fixed ? it->width : it->width * menu_width * 0.01;
|
||||||
// columns with relative width may shrink to 0, omit them
|
// columns with relative width may shrink to 0, omit them
|
||||||
if (width == 0)
|
if (width == 0)
|
||||||
continue;
|
continue;
|
||||||
@@ -166,30 +179,6 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, const SongList &l
|
|||||||
if (it != last)
|
if (it != last)
|
||||||
--width;
|
--width;
|
||||||
|
|
||||||
if (it == Config.columns.begin() && (is_now_playing || is_selected))
|
|
||||||
{
|
|
||||||
// here comes the shitty part. if we applied now playing or selected
|
|
||||||
// prefix, first column's width needs to be properly modified, so
|
|
||||||
// next column is not affected by them. if prefixes fit, we just
|
|
||||||
// subtract their width from allowed column's width. if they don't,
|
|
||||||
// then we pretend that they do, but we adjust current cursor position
|
|
||||||
// so part of them will be overwritten by next column.
|
|
||||||
int offset = 0;
|
|
||||||
if (is_now_playing)
|
|
||||||
offset += Config.now_playing_prefix_length;
|
|
||||||
if (is_selected)
|
|
||||||
offset += Config.selected_item_prefix_length;
|
|
||||||
if (width-offset < 0)
|
|
||||||
{
|
|
||||||
remained_width -= width + 1;
|
|
||||||
menu.goToXY(width, y);
|
|
||||||
menu << ' ';
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
width -= offset;
|
|
||||||
remained_width -= offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if column doesn't fit into screen, discard it and any other after it.
|
// if column doesn't fit into screen, discard it and any other after it.
|
||||||
if (remained_width-width < 0 || width < 0 /* this one may come from (*) */)
|
if (remained_width-width < 0 || width < 0 /* this one may come from (*) */)
|
||||||
break;
|
break;
|
||||||
@@ -231,21 +220,8 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, const SongList &l
|
|||||||
menu << NC::Color::End;
|
menu << NC::Color::End;
|
||||||
}
|
}
|
||||||
|
|
||||||
// here comes the shitty part, second chapter. here we apply
|
|
||||||
// now playing suffix or/and make room for selected suffix
|
|
||||||
// (as it will be applied in Menu::Refresh when this function
|
|
||||||
// returns there).
|
|
||||||
if (is_now_playing)
|
if (is_now_playing)
|
||||||
{
|
|
||||||
int np_x = menu.getWidth() - Config.now_playing_suffix_length;
|
|
||||||
if (is_selected)
|
|
||||||
np_x -= Config.selected_item_suffix_length;
|
|
||||||
menu.goToXY(np_x, y);
|
|
||||||
menu << Config.now_playing_suffix;
|
menu << Config.now_playing_suffix;
|
||||||
}
|
|
||||||
if (is_selected)
|
|
||||||
menu.goToXY(menu.getWidth() - Config.selected_item_suffix_length, y);
|
|
||||||
|
|
||||||
if (separate_albums)
|
if (separate_albums)
|
||||||
menu << NC::Format::NoUnderline;
|
menu << NC::Format::NoUnderline;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user