Go to the documentation of this file.
44 LOG(VB_GENERAL, LOG_ERR,
"Cannot load screen 'searchview'");
53 QVariant::fromValue(0));
55 QVariant::fromValue(1));
57 QVariant::fromValue(2));
59 QVariant::fromValue(3));
61 QVariant::fromValue(4));
145 if (mdata && mdata->ID() == trackID)
148 mdata->
toMap(metadataMap);
161 if ((dce ==
nullptr) || (dce->GetResult() < 0))
164 QString resultid = dce->
GetId();
165 QString resulttext = dce->GetResultText();
166 if (resultid ==
"searchviewmenu")
168 if (resulttext == tr(
"Add To Playlist") || resulttext == tr(
"Remove From Playlist"))
180 else if (resulttext == tr(
"Play Now"))
192 else if (resulttext == tr(
"Prefer Play Now"))
194 else if (resulttext == tr(
"Prefer Add Tracks"))
196 else if (resulttext == tr(
"Search List..."))
213 for (
int i = 0; i < actions.size() && !handled; i++)
215 QString
action = actions[i];
237 else if (
action ==
"PLAY")
265 QString label = tr(
"Search Actions");
267 auto *
menu =
new MythMenu(label,
this,
"searchviewmenu");
276 menu->AddItem(tr(
"Remove From Playlist"));
281 menu->AddItem(tr(
"Play Now"));
282 menu->AddItem(tr(
"Add To Playlist"));
283 menu->AddItem(tr(
"Prefer Add To Playlist"));
287 menu->AddItem(tr(
"Add To Playlist"));
288 menu->AddItem(tr(
"Play Now"));
289 menu->AddItem(tr(
"Prefer Play Now"));
296 menu->AddItem(tr(
"Search List..."));
304 if (menuPopup->Create())
333 int field = item->
GetData().toInt();
338 if (searchStr.isEmpty())
340 sql =
"SELECT song_id "
351 sql =
"SELECT song_id "
353 "LEFT JOIN music_artists ON "
354 " music_songs.artist_id=music_artists.artist_id "
355 "WHERE music_artists.artist_name LIKE '%" + searchStr +
"%' ";
361 sql =
"SELECT song_id "
363 "LEFT JOIN music_albums ON music_songs.album_id=music_albums.album_id "
364 "WHERE music_albums.album_name LIKE '%" + searchStr +
"%' ";
370 sql =
"SELECT song_id "
372 "WHERE music_songs.name LIKE '%" + searchStr +
"%' ";
378 sql =
"SELECT song_id "
380 "LEFT JOIN music_genres ON music_songs.genre_id=music_genres.genre_id "
381 "WHERE music_genres.genre LIKE '%" + searchStr +
"%' ";
393 sql =
"SELECT song_id "
395 "LEFT JOIN music_artists ON "
396 " music_songs.artist_id=music_artists.artist_id "
397 "LEFT JOIN music_albums ON music_songs.album_id=music_albums.album_id "
398 "LEFT JOIN music_artists AS music_comp_artists ON "
399 " music_albums.artist_id=music_comp_artists.artist_id "
400 "LEFT JOIN music_genres ON music_songs.genre_id=music_genres.genre_id "
401 "WHERE music_songs.name LIKE '%" + searchStr +
"%' "
402 "OR music_artists.artist_name LIKE '%" + searchStr +
"%' "
403 "OR music_albums.album_name LIKE '%" + searchStr +
"%' "
404 "OR music_genres.genre LIKE '%" + searchStr +
"%' ";
419 int trackid = query.
value(0).toInt();
425 newitem->SetData(QVariant::fromValue(mdata));
427 mdata->
toMap(metadataMap);
428 newitem->SetTextFromMap(metadataMap);
431 newitem->DisplayState(
"on",
"selectedstate");
433 newitem->DisplayState(
"off",
"selectedstate");
472 if (artFile.isEmpty())
475 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.