Go to the documentation of this file.
45 LOG(VB_GENERAL, LOG_ERR,
"Cannot load screen 'searchview'");
54 QVariant::fromValue(0));
56 QVariant::fromValue(1));
58 QVariant::fromValue(2));
60 QVariant::fromValue(3));
62 QVariant::fromValue(4));
146 if (mdata && mdata->ID() == trackID)
149 mdata->
toMap(metadataMap);
162 if ((dce ==
nullptr) || (dce->GetResult() < 0))
165 QString resultid = dce->
GetId();
166 QString resulttext = dce->GetResultText();
167 if (resultid ==
"searchviewmenu")
169 if (resulttext == tr(
"Add To Playlist") || resulttext == tr(
"Remove From Playlist"))
181 else if (resulttext == tr(
"Play Now"))
193 else if (resulttext == tr(
"Prefer Play Now"))
197 else if (resulttext == tr(
"Prefer Add Tracks"))
201 else if (resulttext == tr(
"Search List..."))
220 for (
int i = 0; i < actions.size() && !handled; i++)
222 const QString&
action = actions[i];
246 else if (
action ==
"PLAY")
278 QString label = tr(
"Search Actions");
280 auto *
menu =
new MythMenu(label,
this,
"searchviewmenu");
289 menu->AddItem(tr(
"Remove From Playlist"));
294 menu->AddItem(tr(
"Play Now"));
295 menu->AddItem(tr(
"Add To Playlist"));
296 menu->AddItem(tr(
"Prefer Add To Playlist"));
300 menu->AddItem(tr(
"Add To Playlist"));
301 menu->AddItem(tr(
"Play Now"));
302 menu->AddItem(tr(
"Prefer Play Now"));
309 menu->AddItem(tr(
"Search List..."));
317 if (menuPopup->Create())
348 int field = item->
GetData().toInt();
353 if (searchStr.isEmpty())
355 sql =
"SELECT song_id "
366 sql =
"SELECT song_id "
368 "LEFT JOIN music_artists ON "
369 " music_songs.artist_id=music_artists.artist_id "
370 "WHERE music_artists.artist_name LIKE '%" + searchStr +
"%' ";
376 sql =
"SELECT song_id "
378 "LEFT JOIN music_albums ON music_songs.album_id=music_albums.album_id "
379 "WHERE music_albums.album_name LIKE '%" + searchStr +
"%' ";
385 sql =
"SELECT song_id "
387 "WHERE music_songs.name LIKE '%" + searchStr +
"%' ";
393 sql =
"SELECT song_id "
395 "LEFT JOIN music_genres ON music_songs.genre_id=music_genres.genre_id "
396 "WHERE music_genres.genre LIKE '%" + searchStr +
"%' ";
408 sql =
"SELECT song_id "
410 "LEFT JOIN music_artists ON "
411 " music_songs.artist_id=music_artists.artist_id "
412 "LEFT JOIN music_albums ON music_songs.album_id=music_albums.album_id "
413 "LEFT JOIN music_artists AS music_comp_artists ON "
414 " music_albums.artist_id=music_comp_artists.artist_id "
415 "LEFT JOIN music_genres ON music_songs.genre_id=music_genres.genre_id "
416 "WHERE music_songs.name LIKE '%" + searchStr +
"%' "
417 "OR music_artists.artist_name LIKE '%" + searchStr +
"%' "
418 "OR music_albums.album_name LIKE '%" + searchStr +
"%' "
419 "OR music_genres.genre LIKE '%" + searchStr +
"%' ";
434 int trackid = query.
value(0).toInt();
440 newitem->SetData(QVariant::fromValue(mdata));
442 mdata->
toMap(metadataMap);
443 newitem->SetTextFromMap(metadataMap);
446 newitem->DisplayState(
"on",
"selectedstate");
448 newitem->DisplayState(
"off",
"selectedstate");
487 if (artFile.isEmpty())
490 item->
SetImage(mdata->getAlbumArtFile());
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
bool isActive(void) const
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
QSqlQuery wrapper that fetches a DB connection from the connection pool.
static void editTrackInfo(MusicMetadata *mdata)
void fieldSelected(MythUIButtonListItem *item)
void criteriaChanged(void)
bool keyPressEvent(QKeyEvent *e) override
Key event handler.
void playlistItemClicked(MythUIButtonListItem *item)
MythMenu * createSubMenu(void)
static bool getPlayNow(void)
QVariant value(int i) const
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
static void showTrackInfo(MusicMetadata *mdata)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Screen in which all other widgets are contained and rendered.
static const Type kMetadataChangedEvent
QString GetText(void) const
Playlist * getCurrentPlaylist(void)
MythUIText * m_matchesText
static const Type kAllTracksRemovedEvent
MythUITextEdit * m_criteriaEdit
MythUIType * GetFocusWidget(void) const
QHash< QString, QString > InfoMap
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
void removeTrack(MusicMetadata::IdType trackID)
bool SetFocusWidget(MythUIType *widget=nullptr)
MythUIButtonList * m_fieldList
Basic menu dialog, message and a list of options.
static MythThemedMenu * menu
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
static void DBError(const QString &where, const MSqlQuery &query)
void BuildFocusList(void)
SearchView(MythScreenStack *parent, MythScreenType *parentScreen)
void addTrack(MusicMetadata::IdType trackID, bool update_display)
Given a tracks ID, add that track to this playlist.
MythUIButtonList * m_currentPlaylist
static void trackClicked(MythUIButtonListItem *item)
bool Create(void) override
void ShowMenu(void) override
bool checkTrack(MusicMetadata::IdType trackID) const
MusicMetadata * getMetadata(int an_id)
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
void searchButtonList(void)
void customEvent(QEvent *event) override
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
MythUIButtonList * m_tracksList
static void trackVisible(MythUIButtonListItem *item)
virtual void SetText(const QString &text)
static const Type kEventType
MythMainWindow * GetMythMainWindow(void)
static const Type kTrackRemovedEvent
MythScreenStack * GetStack(const QString &Stackname)
static const Type kTrackAddedEvent
static void setPlayNow(bool PlayNow)
whether we prefer Play Now over Add Tracks
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
void customEvent(QEvent *event) override
void updateTracksList(void)
void ShowMenu(void) override
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.