classes cleaning

This commit is contained in:
unK
2008-09-05 10:17:47 +02:00
parent db996a3e86
commit c997e13091
9 changed files with 122 additions and 195 deletions

View File

@@ -20,7 +20,7 @@
#include "window.h" #include "window.h"
ColorPair Window::into_color(const string &str) ColorPair Window::IntoColor(const string &str)
{ {
ColorPair colors; ColorPair colors;
@@ -400,7 +400,7 @@ ColorPair Window::into_color(const string &str)
return itsColors.top(); return itsColors.top();
} }
bool is_valid_color(const string &str) bool Window::IsValidColor(const string &str)
{ {
return str == "[/]" || return str == "[/]" ||
str == "[.b]" || str == "[.b]" ||

View File

@@ -356,7 +356,7 @@ string DisplaySongInColumns(const Song &s, void *s_template)
} }
cols.push_back(song_template); cols.push_back(song_template);
ncmpcpp_string_t result, v; my_string_t result, v;
# ifdef UTF8_ENABLED # ifdef UTF8_ENABLED
const wstring space = L" "; const wstring space = L" ";
@@ -373,7 +373,7 @@ string DisplaySongInColumns(const Song &s, void *s_template)
for (vector<string>::const_iterator it = cols.begin(); it != cols.end(); it++) for (vector<string>::const_iterator it = cols.begin(); it != cols.end(); it++)
{ {
int width = StrToInt(GetLineValue(*it, '(', ')')); int width = StrToInt(GetLineValue(*it, '(', ')'));
ncmpcpp_string_t color = TO_WSTRING(GetLineValue(*it, '[', ']')); my_string_t color = TO_WSTRING(GetLineValue(*it, '[', ']'));
char type = GetLineValue(*it, '{', '}')[0]; char type = GetLineValue(*it, '{', '}')[0];
width *= COLS/100.0; width *= COLS/100.0;
@@ -424,7 +424,7 @@ string DisplaySongInColumns(const Song &s, void *s_template)
break; break;
} }
v = TO_WSTRING(OmitBBCodes(ss)).substr(0, width-1); v = TO_WSTRING(Window::OmitBBCodes(ss)).substr(0, width-1);
for (int i = v.length(); i < width; i++, v += space); for (int i = v.length(); i < width; i++, v += space);
if (!color.empty()) if (!color.empty())
result += open_col + color + close_col; result += open_col + color + close_col;

View File

@@ -48,12 +48,12 @@ class Menu : public Window
typedef string (*ItemDisplayer) (const T &, void *); typedef string (*ItemDisplayer) (const T &, void *);
public: public:
Menu(int startx, int starty, int width, int height, string title, Color color, Border border) : itsItemDisplayer(0), itsUserdata(0), Window(startx, starty, width, height, title, color, border), itsSelectedPrefix("[.r]"), itsSelectedSuffix("[/r]"), itsStaticsNumber(0), itsBeginning(0), itsHighlight(0), itsHighlightColor(itsBaseColor), itsHighlightEnabled(1) { SetColor(color); } Menu(int startx, int starty, int width, int height, string title, Color color, Border border) : itsItemDisplayer(0), itsItemDisplayerUserdata(0), Window(startx, starty, width, height, title, color, border), itsSelectedPrefix("[.r]"), itsSelectedSuffix("[/r]"), itsStaticsNumber(0), itsBeginning(0), itsHighlight(0), itsHighlightColor(itsBaseColor), itsHighlightEnabled(1) { SetColor(color); }
Menu(const Menu &); Menu(const Menu &);
virtual ~Menu(); virtual ~Menu();
void SetItemDisplayer(ItemDisplayer ptr) { itsItemDisplayer = ptr; } void SetItemDisplayer(ItemDisplayer ptr) { itsItemDisplayer = ptr; }
void SetItemDisplayerUserData(void *data) { itsUserdata = data; } void SetItemDisplayerUserData(void *data) { itsItemDisplayerUserdata = data; }
void AddOption(const T &, Location = lLeft, bool separator = 0); void AddOption(const T &, Location = lLeft, bool separator = 0);
void AddBoldOption(const T &item, Location location = lLeft, bool separator = 0); void AddBoldOption(const T &item, Location location = lLeft, bool separator = 0);
@@ -65,10 +65,8 @@ class Menu : public Window
void MakeStatic(int, bool); void MakeStatic(int, bool);
void DeleteOption(int); void DeleteOption(int);
void Swap(int, int); void Swap(int, int);
string GetCurrentOption() const; virtual string GetOption(int i = -1) const;
virtual string GetOption(int i) const;
virtual void Display(bool redraw_whole_window = 0);
virtual void Refresh(bool redraw_whole_window = 0); virtual void Refresh(bool redraw_whole_window = 0);
virtual void Go(Where); virtual void Go(Where);
virtual void Highlight(int); virtual void Highlight(int);
@@ -76,34 +74,32 @@ class Menu : public Window
virtual void Clear(bool clear_screen = 1); virtual void Clear(bool clear_screen = 1);
virtual void Select(int, bool); virtual void Select(int, bool);
virtual bool Selected(int); virtual bool Selected(int) const;
virtual bool IsAnySelected(); virtual bool IsAnySelected() const;
virtual void GetSelectedList(vector<int> &); virtual void GetSelectedList(vector<int> &) const;
void SetSelectPrefix(string str) { itsSelectedPrefix = str; } void SetSelectPrefix(string str) { itsSelectedPrefix = str; }
void SetSelectSuffix(string str) { itsSelectedSuffix = str; } void SetSelectSuffix(string str) { itsSelectedSuffix = str; }
void HighlightColor(Color col) { itsHighlightColor = col; NeedsRedraw.push_back(itsHighlight); } void HighlightColor(Color col) { itsHighlightColor = col; NeedsRedraw.push_back(itsHighlight); }
virtual void Highlighting(bool hl) { itsHighlightEnabled = hl; NeedsRedraw.push_back(itsHighlight); Refresh(); } void Highlighting(bool hl) { itsHighlightEnabled = hl; NeedsRedraw.push_back(itsHighlight); Refresh(); }
int GetRealChoice() const; int GetRealChoice() const;
virtual int GetChoice() const { return itsHighlight; } virtual int GetChoice() const { return itsHighlight; }
virtual int Size() const { return itsOptions.size(); } virtual int Size() const { return itsOptions.size(); }
bool Empty() { return itsOptions.empty(); } bool Empty() const { return itsOptions.empty(); }
virtual bool IsStatic(int); virtual bool IsStatic(int) const;
virtual Window * Clone() { return new Menu(*this); } virtual Window * Clone() const { return new Menu(*this); }
virtual Window * EmptyClone(); virtual Window * EmptyClone() const;
T & at(int i) { return itsOptions.at(i)->item; } T & at(int i) { return itsOptions.at(i)->item; }
const T & at(int i) const { return itsOptions.at(i)->item; } const T & at(int i) const { return itsOptions.at(i)->item; }
const T & operator[](int i) const { return itsOptions[i]->item; } const T & operator[](int i) const { return itsOptions[i]->item; }
T & operator[](int i) { return itsOptions[i]->item; } T & operator[](int i) { return itsOptions[i]->item; }
protected: protected:
string DisplayOption(const T &t) const; string DisplayOption(const T &t) const;
ItemDisplayer itsItemDisplayer; ItemDisplayer itsItemDisplayer;
void *itsUserdata; void *itsItemDisplayerUserdata;
vector<Option<T> *> itsOptions; vector<Option<T> *> itsOptions;
vector<int> NeedsRedraw; vector<int> NeedsRedraw;
@@ -134,7 +130,7 @@ Menu<T>::Menu(const Menu &m) : Window(m)
itsOptions.push_back(new_option); itsOptions.push_back(new_option);
} }
itsItemDisplayer = m.itsItemDisplayer; itsItemDisplayer = m.itsItemDisplayer;
itsUserdata = m.itsUserdata; itsItemDisplayerUserdata = m.itsItemDisplayerUserdata;
NeedsRedraw = m.NeedsRedraw; NeedsRedraw = m.NeedsRedraw;
itsSelectedPrefix = m.itsSelectedPrefix; itsSelectedPrefix = m.itsSelectedPrefix;
itsSelectedSuffix = m.itsSelectedSuffix; itsSelectedSuffix = m.itsSelectedSuffix;
@@ -182,7 +178,7 @@ int Menu<T>::count_length(string str)
if (!collect && !tmp.empty()) if (!collect && !tmp.empty())
{ {
if (is_valid_color(TO_STRING(tmp))) if (IsValidColor(TO_STRING(tmp)))
length -= tmp.length(); length -= tmp.length();
tmp.clear(); tmp.clear();
} }
@@ -290,25 +286,12 @@ void Menu<T>::MakeStatic(int index, bool stat)
} }
} }
template <class T>
string Menu<T>::GetCurrentOption() const
{
try
{
return DisplayOption(itsOptions.at(itsHighlight)->item);
}
catch (std::out_of_range)
{
return "";
}
}
template <class T> template <class T>
string Menu<T>::GetOption(int i) const string Menu<T>::GetOption(int i) const
{ {
try try
{ {
return DisplayOption(itsOptions.at(i)->item); return DisplayOption(itsOptions.at(i == -1 ? itsHighlight : i)->item);
} }
catch (std::out_of_range) catch (std::out_of_range)
{ {
@@ -380,13 +363,6 @@ void Menu<T>::redraw_screen()
NeedsRedraw.push_back(i); NeedsRedraw.push_back(i);
} }
template <class T>
void Menu<T>::Display(bool redraw_whole_window)
{
Window::show_border();
Refresh(redraw_whole_window);
}
template <class T> template <class T>
void Menu<T>::Refresh(bool redraw_whole_window) void Menu<T>::Refresh(bool redraw_whole_window)
{ {
@@ -709,7 +685,7 @@ void Menu<T>::Select(int option, bool selected)
} }
template <class T> template <class T>
bool Menu<T>::Selected(int option) bool Menu<T>::Selected(int option) const
{ {
try try
{ {
@@ -722,7 +698,7 @@ bool Menu<T>::Selected(int option)
} }
template <class T> template <class T>
bool Menu<T>::IsAnySelected() bool Menu<T>::IsAnySelected() const
{ {
bool result = 0; bool result = 0;
for (T_const_iterator it = itsOptions.begin(); it != itsOptions.end(); it++) for (T_const_iterator it = itsOptions.begin(); it != itsOptions.end(); it++)
@@ -737,7 +713,7 @@ bool Menu<T>::IsAnySelected()
} }
template <class T> template <class T>
void Menu<T>::GetSelectedList(vector<int> &v) void Menu<T>::GetSelectedList(vector<int> &v) const
{ {
int i = 0; int i = 0;
for (T_const_iterator it = itsOptions.begin(); it != itsOptions.end(); it++, i++) for (T_const_iterator it = itsOptions.begin(); it != itsOptions.end(); it++, i++)
@@ -757,7 +733,7 @@ int Menu<T>::GetRealChoice() const
} }
template <class T> template <class T>
bool Menu<T>::IsStatic(int option) bool Menu<T>::IsStatic(int option) const
{ {
try try
{ {
@@ -770,7 +746,7 @@ bool Menu<T>::IsStatic(int option)
} }
template <class T> template <class T>
Window * Menu<T>::EmptyClone() Window * Menu<T>::EmptyClone() const
{ {
return new Menu(GetStartX(),GetStartY(),GetWidth(),GetHeight(),itsTitle,itsBaseColor,itsBorder); return new Menu(GetStartX(),GetStartY(),GetWidth(),GetHeight(),itsTitle,itsBaseColor,itsBorder);
} }
@@ -778,7 +754,7 @@ Window * Menu<T>::EmptyClone()
template <class T> template <class T>
string Menu<T>::DisplayOption(const T &t) const string Menu<T>::DisplayOption(const T &t) const
{ {
return itsItemDisplayer ? itsItemDisplayer(t, itsUserdata) : ""; return itsItemDisplayer ? itsItemDisplayer(t, itsItemDisplayerUserdata) : "";
} }
template <> template <>

View File

@@ -432,7 +432,7 @@ int main(int argc, char *argv[])
if (current_screen == csBrowser) if (current_screen == csBrowser)
{ {
int max_length_without_scroll = wHeader->GetWidth()-volume_state.length()-title.length(); int max_length_without_scroll = wHeader->GetWidth()-volume_state.length()-title.length();
ncmpcpp_string_t wbrowseddir = TO_WSTRING(browsed_dir); my_string_t wbrowseddir = TO_WSTRING(browsed_dir);
wHeader->Bold(1); wHeader->Bold(1);
if (browsed_dir.length() > max_length_without_scroll) if (browsed_dir.length() > max_length_without_scroll)
{ {
@@ -442,7 +442,7 @@ int main(int argc, char *argv[])
wbrowseddir += " ** "; wbrowseddir += " ** ";
# endif # endif
const int scrollsize = max_length_without_scroll; const int scrollsize = max_length_without_scroll;
ncmpcpp_string_t part = wbrowseddir.substr(browsed_dir_scroll_begin++, scrollsize); my_string_t part = wbrowseddir.substr(browsed_dir_scroll_begin++, scrollsize);
if (part.length() < scrollsize) if (part.length() < scrollsize)
part += wbrowseddir.substr(0, scrollsize-part.length()); part += wbrowseddir.substr(0, scrollsize-part.length());
wHeader->WriteXY(title.length(), 0, part); wHeader->WriteXY(title.length(), 0, part);
@@ -485,12 +485,12 @@ int main(int argc, char *argv[])
mLibAlbums->Reset(); mLibAlbums->Reset();
mLibSongs->Clear(0); mLibSongs->Clear(0);
TagList list; TagList list;
Mpd->GetAlbums(mLibArtists->GetCurrentOption(), list); Mpd->GetAlbums(mLibArtists->GetOption(), list);
for (TagList::iterator it = list.begin(); it != list.end(); it++) for (TagList::iterator it = list.begin(); it != list.end(); it++)
{ {
SongList l; SongList l;
Mpd->StartSearch(1); Mpd->StartSearch(1);
Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetCurrentOption()); Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetOption());
Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, *it); Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, *it);
Mpd->CommitSearch(l); Mpd->CommitSearch(l);
for (SongList::const_iterator j = l.begin(); j != l.end(); j++) for (SongList::const_iterator j = l.begin(); j != l.end(); j++)
@@ -526,22 +526,22 @@ int main(int argc, char *argv[])
mLibAlbums->WriteXY(0, 0, "No albums found."); mLibAlbums->WriteXY(0, 0, "No albums found.");
mLibSongs->Clear(0); mLibSongs->Clear(0);
Mpd->StartSearch(1); Mpd->StartSearch(1);
Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetCurrentOption()); Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetOption());
Mpd->CommitSearch(list); Mpd->CommitSearch(list);
} }
else else
{ {
mLibSongs->Clear(0); mLibSongs->Clear(0);
Mpd->StartSearch(1); Mpd->StartSearch(1);
Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetCurrentOption()); Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetOption());
Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, mLibAlbums->GetCurrentOption()); Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, mLibAlbums->GetOption());
Mpd->CommitSearch(list); Mpd->CommitSearch(list);
if (list.empty()) if (list.empty())
{ {
const int year_length = 7; const int year_length = 7;
const string &album = mLibAlbums->GetCurrentOption(); const string &album = mLibAlbums->GetOption();
Mpd->StartSearch(1); Mpd->StartSearch(1);
Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetCurrentOption()); Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, mLibArtists->GetOption());
Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, album.substr(year_length)); Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, album.substr(year_length));
Mpd->CommitSearch(list); Mpd->CommitSearch(list);
} }
@@ -589,7 +589,7 @@ int main(int argc, char *argv[])
{ {
mPlaylistEditor->Reset(); mPlaylistEditor->Reset();
SongList list; SongList list;
Mpd->GetPlaylistContent(mPlaylistList->GetCurrentOption(), list); Mpd->GetPlaylistContent(mPlaylistList->GetOption(), list);
if (!list.empty()) if (!list.empty())
mPlaylistEditor->SetTitle("Playlist's content (" + IntoStr(list.size()) + " item" + (list.size() == 1 ? ")" : "s)")); mPlaylistEditor->SetTitle("Playlist's content (" + IntoStr(list.size()) + " item" + (list.size() == 1 ? ")" : "s)"));
else else
@@ -1139,7 +1139,7 @@ int main(int argc, char *argv[])
if (wCurrent == mLibArtists) if (wCurrent == mLibArtists)
{ {
const string &artist = mLibArtists->GetCurrentOption(); const string &artist = mLibArtists->GetOption();
Mpd->StartSearch(1); Mpd->StartSearch(1);
Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, artist); Mpd->AddSearch(MPD_TAG_ITEM_ARTIST, artist);
Mpd->CommitSearch(list); Mpd->CommitSearch(list);
@@ -1164,7 +1164,7 @@ int main(int argc, char *argv[])
Mpd->QueueAddSong(mLibSongs->at(i)); Mpd->QueueAddSong(mLibSongs->at(i));
if (Mpd->CommitQueue()) if (Mpd->CommitQueue())
{ {
ShowMessage("Adding songs from: " + mLibArtists->GetCurrentOption() + " \"" + mLibAlbums->GetCurrentOption() + "\""); ShowMessage("Adding songs from: " + mLibArtists->GetOption() + " \"" + mLibAlbums->GetOption() + "\"");
Song *s = &mPlaylist->at(mPlaylist->Size()-mLibSongs->Size()); Song *s = &mPlaylist->at(mPlaylist->Size()-mLibSongs->Size());
if (s->GetHash() == mLibSongs->at(0).GetHash()) if (s->GetHash() == mLibSongs->at(0).GetHash())
{ {
@@ -1208,7 +1208,7 @@ int main(int argc, char *argv[])
if (wCurrent == mPlaylistList) if (wCurrent == mPlaylistList)
{ {
const string &playlist = mPlaylistList->GetCurrentOption(); const string &playlist = mPlaylistList->GetOption();
Mpd->GetPlaylistContent(playlist, list); Mpd->GetPlaylistContent(playlist, list);
for (SongList::const_iterator it = list.begin(); it != list.end(); it++) for (SongList::const_iterator it = list.begin(); it != list.end(); it++)
Mpd->QueueAddSong(**it); Mpd->QueueAddSong(**it);
@@ -1471,10 +1471,10 @@ int main(int argc, char *argv[])
mPlaylistEditor->GetSelectedList(list); mPlaylistEditor->GetSelectedList(list);
for (vector<int>::const_reverse_iterator it = list.rbegin(); it != list.rend(); it++) for (vector<int>::const_reverse_iterator it = list.rbegin(); it != list.rend(); it++)
{ {
Mpd->QueueDeleteFromPlaylist(mPlaylistList->GetCurrentOption(), *it); Mpd->QueueDeleteFromPlaylist(mPlaylistList->GetOption(), *it);
mPlaylistEditor->DeleteOption(*it); mPlaylistEditor->DeleteOption(*it);
} }
ShowMessage("Selected items deleted from playlist '" + mPlaylistList->GetCurrentOption() + "'!"); ShowMessage("Selected items deleted from playlist '" + mPlaylistList->GetOption() + "'!");
redraw_me = 1; redraw_me = 1;
} }
else else
@@ -1484,7 +1484,7 @@ int main(int argc, char *argv[])
{ {
TraceMpdStatus(); TraceMpdStatus();
timer = time(NULL); timer = time(NULL);
Mpd->QueueDeleteFromPlaylist(mPlaylistList->GetCurrentOption(), mPlaylistEditor->GetChoice()); Mpd->QueueDeleteFromPlaylist(mPlaylistList->GetOption(), mPlaylistEditor->GetChoice());
mPlaylistEditor->DeleteOption(mPlaylistEditor->GetChoice()); mPlaylistEditor->DeleteOption(mPlaylistEditor->GetChoice());
mPlaylistEditor->Refresh(); mPlaylistEditor->Refresh();
mPlaylistEditor->ReadKey(input); mPlaylistEditor->ReadKey(input);
@@ -1628,7 +1628,7 @@ int main(int argc, char *argv[])
} }
for (int i = 0; i < list.size(); i++) for (int i = 0; i < list.size(); i++)
if (origs[i] != list[i]) if (origs[i] != list[i])
Mpd->QueueMove(mPlaylistList->GetCurrentOption(), origs[i], list[i]); Mpd->QueueMove(mPlaylistList->GetOption(), origs[i], list[i]);
Mpd->CommitQueue(); Mpd->CommitQueue();
} }
else else
@@ -1645,7 +1645,7 @@ int main(int argc, char *argv[])
mPlaylistEditor->ReadKey(input); mPlaylistEditor->ReadKey(input);
} }
if (from != to) if (from != to)
Mpd->Move(mPlaylistList->GetCurrentOption(), from, to); Mpd->Move(mPlaylistList->GetOption(), from, to);
} }
mPlaylistEditor->SetTimeout(ncmpcpp_window_timeout); mPlaylistEditor->SetTimeout(ncmpcpp_window_timeout);
} }
@@ -1721,7 +1721,7 @@ int main(int argc, char *argv[])
} }
for (int i = list.size()-1; i >= 0; i--) for (int i = list.size()-1; i >= 0; i--)
if (origs[i] != list[i]) if (origs[i] != list[i])
Mpd->QueueMove(mPlaylistList->GetCurrentOption(), origs[i], list[i]); Mpd->QueueMove(mPlaylistList->GetOption(), origs[i], list[i]);
Mpd->CommitQueue(); Mpd->CommitQueue();
} }
else else
@@ -1738,7 +1738,7 @@ int main(int argc, char *argv[])
mPlaylistEditor->ReadKey(input); mPlaylistEditor->ReadKey(input);
} }
if (from != to) if (from != to)
Mpd->Move(mPlaylistList->GetCurrentOption(), from, to); Mpd->Move(mPlaylistList->GetOption(), from, to);
} }
mPlaylistEditor->SetTimeout(ncmpcpp_window_timeout); mPlaylistEditor->SetTimeout(ncmpcpp_window_timeout);
} }
@@ -2244,7 +2244,7 @@ int main(int argc, char *argv[])
ShowMessage("Searching..."); ShowMessage("Searching...");
for (int i = (wCurrent == mSearcher ? search_engine_static_option-1 : 0); i < wCurrent->Size(); i++) for (int i = (wCurrent == mSearcher ? search_engine_static_option-1 : 0); i < wCurrent->Size(); i++)
{ {
string name = OmitBBCodes(wCurrent->GetOption(i)); string name = Window::OmitBBCodes(wCurrent->GetOption(i));
transform(name.begin(), name.end(), name.begin(), tolower); transform(name.begin(), name.end(), name.begin(), tolower);
if (name.find(findme) != string::npos && !wCurrent->IsStatic(i)) if (name.find(findme) != string::npos && !wCurrent->IsStatic(i))
{ {

View File

@@ -68,7 +68,7 @@ void Scrollpad::Add(string str)
if (!collect && !tmp.empty()) if (!collect && !tmp.empty())
{ {
if (is_valid_color(TO_STRING(tmp))) if (IsValidColor(TO_STRING(tmp)))
itsXPos -= tmp.length(); itsXPos -= tmp.length();
tmp.clear(); tmp.clear();
} }
@@ -99,10 +99,10 @@ void Scrollpad::Add(string str)
} }
} }
itsContent += TO_STRING(s); itsContent += TO_STRING(s);
recreate_win(); Recreate();
} }
void Scrollpad::recreate_win() void Scrollpad::Recreate()
{ {
delwin(itsWindow); delwin(itsWindow);
itsWindow = newpad(itsRealHeight, itsWidth); itsWindow = newpad(itsRealHeight, itsWidth);
@@ -111,12 +111,6 @@ void Scrollpad::recreate_win()
Write(itsContent.c_str()); Write(itsContent.c_str());
} }
void Scrollpad::Display(bool stub)
{
Window::show_border();
Refresh(stub);
}
void Scrollpad::Refresh(bool stub) void Scrollpad::Refresh(bool stub)
{ {
prefresh(itsWindow,itsBeginning,0,itsStartY,itsStartX,itsStartY+itsHeight-1,itsStartX+itsWidth); prefresh(itsWindow,itsBeginning,0,itsStartY,itsStartX,itsStartY+itsHeight-1,itsStartX+itsWidth);
@@ -148,18 +142,13 @@ void Scrollpad::Resize(int width, int height)
string tmp = itsRawContent; string tmp = itsRawContent;
itsRawContent.clear(); itsRawContent.clear();
Add(tmp); Add(tmp);
recreate_win(); Recreate();
} }
} }
void Scrollpad::Go(Where where) void Scrollpad::Go(Where where)
{ {
int MaxBeginning; int MaxBeginning = itsContent.size() < itsHeight ? 0 : itsRealHeight-itsHeight;
if (itsContent.size() < itsHeight)
MaxBeginning = 0;
else
MaxBeginning = itsRealHeight-itsHeight;
switch (where) switch (where)
{ {
@@ -198,20 +187,6 @@ void Scrollpad::Go(Where where)
} }
} }
void Scrollpad::SetBorder(Border border)
{
if (have_to_recreate(border))
recreate_win();
itsBorder = border;
}
void Scrollpad::SetTitle(string newtitle)
{
if (have_to_recreate(newtitle))
recreate_win();
itsTitle = newtitle;
}
void Scrollpad::Clear(bool clear_screen) void Scrollpad::Clear(bool clear_screen)
{ {
itsBeginning = 0; itsBeginning = 0;
@@ -227,7 +202,7 @@ void Scrollpad::Clear(bool clear_screen)
Window::Clear(); Window::Clear();
} }
Window * Scrollpad::EmptyClone() Window * Scrollpad::EmptyClone() const
{ {
return new Scrollpad(GetStartX(),GetStartY(),GetWidth(),GetHeight(),itsTitle,itsBaseColor,itsBorder); return new Scrollpad(GetStartX(),GetStartY(),GetWidth(),GetHeight(),itsTitle,itsBaseColor,itsBorder);
} }

View File

@@ -30,20 +30,14 @@ class Scrollpad: public Window
Scrollpad(const Scrollpad &); Scrollpad(const Scrollpad &);
virtual ~Scrollpad() {} virtual ~Scrollpad() {}
virtual void Add(string); virtual void Add(string);
virtual void Display(bool = 0);
virtual void Refresh(bool = 0); virtual void Refresh(bool = 0);
virtual void Go(Where); virtual void Go(Where);
virtual void MoveTo(int newx, int newy) { reallocate_win(newx, newy); }
virtual void Resize(int, int); virtual void Resize(int, int);
virtual void SetBorder(Border);
virtual void SetTitle(string);
virtual void Clear(bool clear_screen = 1); virtual void Clear(bool clear_screen = 1);
virtual Window * Clone() { return new Scrollpad(*this); } virtual Window * Clone() const { return new Scrollpad(*this); }
virtual Window * EmptyClone(); virtual Window * EmptyClone() const;
protected: protected:
void print_content(); virtual void Recreate();
virtual void recreate_win();
string itsContent; string itsContent;
string itsRawContent; string itsRawContent;
int itsBeginning; int itsBeginning;

View File

@@ -314,7 +314,7 @@ void NcmpcppStatusChanged(MPDConnection *Mpd, MPDStatusChanges changed, void *da
tracklength = " [" + ShowTime(elapsed) + "/" + s.GetLength() + "]"; tracklength = " [" + ShowTime(elapsed) + "/" + s.GetLength() + "]";
else else
tracklength = " [" + ShowTime(elapsed) + "]"; tracklength = " [" + ShowTime(elapsed) + "]";
ncmpcpp_string_t playing_song = TO_WSTRING(DisplaySong(s, &Config.song_status_format)); my_string_t playing_song = TO_WSTRING(DisplaySong(s, &Config.song_status_format));
int max_length_without_scroll = wFooter->GetWidth()-player_state.length()-tracklength.length(); int max_length_without_scroll = wFooter->GetWidth()-player_state.length()-tracklength.length();
@@ -328,7 +328,7 @@ void NcmpcppStatusChanged(MPDConnection *Mpd, MPDStatusChanges changed, void *da
playing_song += " ** "; playing_song += " ** ";
# endif # endif
const int scrollsize = max_length_without_scroll+playing_song.length(); const int scrollsize = max_length_without_scroll+playing_song.length();
ncmpcpp_string_t part = playing_song.substr(playing_song_scroll_begin++, scrollsize); my_string_t part = playing_song.substr(playing_song_scroll_begin++, scrollsize);
if (part.length() < scrollsize) if (part.length() < scrollsize)
part += playing_song.substr(0, scrollsize-part.length()); part += playing_song.substr(0, scrollsize-part.length());
wFooter->WriteXY(player_state.length(), 1, part); wFooter->WriteXY(player_state.length(), 1, part);

View File

@@ -20,7 +20,7 @@
#include "window.h" #include "window.h"
Window::Window(int startx, int starty, int width, int height, string title, Color color, Border border) : itsWindow(0), itsWinBorder(0), itsGetStringHelper(0), itsStartX(startx), itsStartY(starty), itsWidth(width), itsHeight(height), itsWindowTimeout(-1), BBEnabled(1), AutoRefreshEnabled(1), itsTitle(title), itsColor(color), itsBaseColor(color), itsBgColor(clDefault), itsBaseBgColor(clDefault), itsBorder(border) Window::Window(int startx, int starty, int width, int height, const string &title, Color color, Border border) : itsWindow(0), itsWinBorder(0), itsGetStringHelper(0), itsStartX(startx), itsStartY(starty), itsWidth(width), itsHeight(height), itsWindowTimeout(-1), BBEnabled(1), AutoRefreshEnabled(1), itsTitle(title), itsColor(color), itsBaseColor(color), itsBgColor(clDefault), itsBaseBgColor(clDefault), itsBorder(border)
{ {
if (itsStartX < 0) itsStartX = 0; if (itsStartX < 0) itsStartX = 0;
if (itsStartY < 0) itsStartY = 0; if (itsStartY < 0) itsStartY = 0;
@@ -91,7 +91,7 @@ void Window::SetBaseColor(Color col, Color background)
itsBaseBgColor = background; itsBaseBgColor = background;
} }
bool Window::have_to_recreate(Border border) void Window::SetBorder(Border border)
{ {
if (border == brNone && itsBorder != brNone) if (border == brNone && itsBorder != brNone)
{ {
@@ -100,9 +100,9 @@ bool Window::have_to_recreate(Border border)
itsStartY--; itsStartY--;
itsHeight += 2; itsHeight += 2;
itsWidth += 2; itsWidth += 2;
return true; Recreate();
} }
if (border != brNone && itsBorder == brNone) else if (border != brNone && itsBorder == brNone)
{ {
itsWinBorder = newpad(itsHeight,itsWidth); itsWinBorder = newpad(itsHeight,itsWidth);
wattron(itsWinBorder,COLOR_PAIR(border)); wattron(itsWinBorder,COLOR_PAIR(border));
@@ -111,45 +111,33 @@ bool Window::have_to_recreate(Border border)
itsStartY++; itsStartY++;
itsHeight -= 2; itsHeight -= 2;
itsWidth -= 2; itsWidth -= 2;
return true; Recreate();
} }
return false;
}
bool Window::have_to_recreate(string newtitle)
{
if (!newtitle.empty() && itsTitle.empty())
{
itsStartY += 2;
itsHeight -= 2;
return true;
}
if (newtitle.empty() && !itsTitle.empty())
{
itsStartY -= 2;
itsHeight += 2;
return true;
}
return false;
}
void Window::SetBorder(Border border)
{
if (have_to_recreate(border))
recreate_win();
itsBorder = border; itsBorder = border;
} }
void Window::SetTitle(string newtitle) void Window::SetTitle(const string &newtitle)
{ {
if (itsTitle == newtitle) if (itsTitle == newtitle)
{
return; return;
if (have_to_recreate(newtitle)) }
recreate_win(); else if (!newtitle.empty() && itsTitle.empty())
{
itsStartY += 2;
itsHeight -= 2;
Recreate();
}
else if (newtitle.empty() && !itsTitle.empty())
{
itsStartY -= 2;
itsHeight += 2;
Recreate();
}
itsTitle = newtitle; itsTitle = newtitle;
} }
void Window::recreate_win() void Window::Recreate()
{ {
delwin(itsWindow); delwin(itsWindow);
itsWindow = newwin(itsHeight, itsWidth, itsStartY, itsStartX); itsWindow = newwin(itsHeight, itsWidth, itsStartY, itsStartX);
@@ -157,25 +145,23 @@ void Window::recreate_win()
SetColor(itsColor, itsBgColor); SetColor(itsColor, itsBgColor);
} }
bool Window::reallocate_win(int newx, int newy)
{
if (newx < 0 || newy < 0 || (newx == itsStartX && newy == itsStartY)) return false;
itsStartX = newx;
itsStartY = newy;
if (itsBorder != brNone)
{
itsStartX++;
itsStartY++;
}
if (!itsTitle.empty())
itsStartY += 2;
return true;
}
void Window::MoveTo(int newx, int newy) void Window::MoveTo(int newx, int newy)
{ {
if (reallocate_win(newx, newy)) if (newx < 0 || newy < 0 || (newx == itsStartX && newy == itsStartY))
return;
else
{
itsStartX = newx;
itsStartY = newy;
if (itsBorder != brNone)
{
itsStartX++;
itsStartY++;
}
if (!itsTitle.empty())
itsStartY += 2;
mvwin(itsWindow, itsStartY, itsStartX); mvwin(itsWindow, itsStartY, itsStartX);
}
} }
void Window::Resize(int width, int height) void Window::Resize(int width, int height)
@@ -199,7 +185,7 @@ void Window::Resize(int width, int height)
} }
} }
void Window::show_border() const void Window::ShowBorder() const
{ {
if (itsBorder != brNone) if (itsBorder != brNone)
{ {
@@ -223,8 +209,8 @@ void Window::show_border() const
void Window::Display(bool stub) void Window::Display(bool stub)
{ {
show_border(); ShowBorder();
wrefresh(itsWindow); Refresh(stub);
} }
void Window::Refresh(bool stub) void Window::Refresh(bool stub)
@@ -320,9 +306,9 @@ void Window::Write(int limit, const string &str, bool clrtoeol)
{ {
waddstr(itsWindow,tmp.c_str()); waddstr(itsWindow,tmp.c_str());
tmp.clear(); tmp.clear();
if (is_valid_color(color)) if (IsValidColor(color))
{ {
ColorPair colors = into_color(color); ColorPair colors = IntoColor(color);
SetColor(colors.first, colors.second); SetColor(colors.first, colors.second);
} }
else else
@@ -383,9 +369,9 @@ void Window::Write(int limit, const wstring &str, bool clrtoeol)
{ {
waddwstr(itsWindow,tmp.c_str()); waddwstr(itsWindow,tmp.c_str());
tmp.clear(); tmp.clear();
if (is_valid_color(ToString(color))) if (IsValidColor(ToString(color)))
{ {
ColorPair colors = into_color(ToString(color)); ColorPair colors = IntoColor(ToString(color));
SetColor(colors.first, colors.second); SetColor(colors.first, colors.second);
} }
else else
@@ -420,7 +406,6 @@ void Window::WriteXY(int x, int y, int limit, const string &str, bool cleartoeol
Write(limit, str, cleartoeol); Write(limit, str, cleartoeol);
} }
string Window::GetString(const string &base, unsigned int length) const string Window::GetString(const string &base, unsigned int length) const
{ {
curs_set(1); curs_set(1);
@@ -604,7 +589,7 @@ void Window::EnableColors()
} }
} }
Window * Window::EmptyClone() Window * Window::EmptyClone() const
{ {
return new Window(GetStartX(),GetStartY(),GetWidth(),GetHeight(),itsTitle,itsBaseColor,itsBorder); return new Window(GetStartX(),GetStartY(),GetWidth(),GetHeight(),itsTitle,itsBaseColor,itsBorder);
} }
@@ -653,7 +638,7 @@ wstring ToWString(const string &s)
} }
string OmitBBCodes(const string &str) string Window::OmitBBCodes(const string &str)
{ {
if (str.empty()) if (str.empty())
return ""; return "";
@@ -684,7 +669,7 @@ string OmitBBCodes(const string &str)
{ {
result += tmp; result += tmp;
tmp.clear(); tmp.clear();
if (!is_valid_color(color)) if (!IsValidColor(color))
tmp += color; tmp += color;
color.clear(); color.clear();
} }
@@ -726,7 +711,7 @@ string OmitBBCodes(const string &str)
if (!collect) if (!collect)
{ {
if (!is_valid_color(color)) if (!IsValidColor(color))
length -= color.length(); length -= color.length();
color.clear(); color.clear();
} }
@@ -767,7 +752,7 @@ int CountBBCodes(const wstring &str)
if (!collect) if (!collect)
{ {
if (!is_valid_color(ToString(color))) if (!IsValidColor(ToString(color)))
length -= color.length(); length -= color.length();
color.clear(); color.clear();
} }

View File

@@ -30,11 +30,11 @@
#include <cstring> #include <cstring>
#ifdef UTF8_ENABLED #ifdef UTF8_ENABLED
# define ncmpcpp_string_t wstring # define my_string_t wstring
# define TO_STRING(x) ToString(x) # define TO_STRING(x) ToString(x)
# define TO_WSTRING(x) ToWString(x) # define TO_WSTRING(x) ToWString(x)
#else #else
# define ncmpcpp_string_t string # define my_string_t string
# define TO_STRING(x) x # define TO_STRING(x) x
# define TO_WSTRING(x) x # define TO_WSTRING(x) x
#endif #endif
@@ -55,25 +55,23 @@ wchar_t * ToWString(const char *);
string ToString(const wstring &); string ToString(const wstring &);
wstring ToWString(const string &); wstring ToWString(const string &);
bool is_valid_color(const string &);
string OmitBBCodes(const string &);
//int CountBBCodes(const string &); //int CountBBCodes(const string &);
//int CountBBCodes(const wstring &); //int CountBBCodes(const wstring &);
class Window class Window
{ {
public: public:
Window(int, int, int, int, string, Color, Border); Window(int, int, int, int, const string &, Color, Border);
Window(const Window &); Window(const Window &);
virtual ~Window(); virtual ~Window();
virtual WINDOW *RawWin() { return itsWindow; } virtual WINDOW *RawWin() const { return itsWindow; }
virtual void SetGetStringHelper(GetStringHelper helper) { itsGetStringHelper = helper; } virtual void SetGetStringHelper(GetStringHelper helper) { itsGetStringHelper = helper; }
virtual void SetColor(Color, Color = clDefault); virtual void SetColor(Color, Color = clDefault);
virtual void SetBaseColor(Color, Color = clDefault); virtual void SetBaseColor(Color, Color = clDefault);
virtual void SetBorder(Border); virtual void SetBorder(Border);
virtual void EnableBB() { BBEnabled = 1; } virtual void EnableBB() { BBEnabled = 1; }
virtual void DisableBB() { BBEnabled = 0; } virtual void DisableBB() { BBEnabled = 0; }
virtual void SetTitle(string); virtual void SetTitle(const string &);
virtual void MoveTo(int, int); virtual void MoveTo(int, int);
virtual void Resize(int, int); virtual void Resize(int, int);
virtual void Display(bool = 0); virtual void Display(bool = 0);
@@ -111,31 +109,30 @@ class Window
virtual Color GetColor() const; virtual Color GetColor() const;
virtual Border GetBorder() const; virtual Border GetBorder() const;
virtual Window * Clone() { return new Window(*this); } virtual Window * Clone() const { return new Window(*this); }
virtual Window * EmptyClone(); virtual Window * EmptyClone() const;
// stubs for inherits, ugly shit, needs improvement // stubs for inherits, ugly shit, needs improvement
virtual void Select(int, bool) { } virtual void Select(int, bool) { }
virtual bool Selected(int) { return 0; } virtual bool Selected(int) const { return 0; }
virtual int Size() const { return 0; } virtual int Size() const { return 0; }
virtual bool IsAnySelected() { return 0; } virtual bool IsAnySelected() const { return 0; }
virtual void GetSelectedList(vector<int> &) { } virtual void GetSelectedList(vector<int> &) const { }
virtual bool IsStatic(int) { return 0; } virtual bool IsStatic(int) const { return 0; }
virtual void Highlight(int) { } virtual void Highlight(int) { }
virtual string GetOption(int) const { return ""; } virtual string GetOption(int = -1) const { return ""; }
virtual void Go(Where) { } // for Menu and Scrollpad class virtual void Go(Where) { } // for Menu and Scrollpad class
virtual int GetChoice() const { return -1; } // for Menu class virtual int GetChoice() const { return -1; } // for Menu class
virtual void Add(string str) { Write(str); } // for Scrollpad class virtual void Add(string str) { Write(str); } // for Scrollpad class
static void EnableColors(); static void EnableColors();
static bool IsValidColor(const string &);
static string OmitBBCodes(const string &);
protected: protected:
virtual bool have_to_recreate(string); virtual void Recreate();
virtual bool have_to_recreate(Border); virtual void ShowBorder() const;
virtual bool reallocate_win(int, int); virtual ColorPair IntoColor(const string &);
virtual void recreate_win();
virtual void show_border() const;
virtual ColorPair into_color(const string &);
WINDOW *itsWindow; WINDOW *itsWindow;
WINDOW *itsWinBorder; WINDOW *itsWinBorder;
GetStringHelper itsGetStringHelper; GetStringHelper itsGetStringHelper;