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));
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(
"Add To Playlist And Play"))
193 else if (resulttext == tr(
"Search List..."))
210 for (
int i = 0; i < actions.size() && !handled; i++)
212 QString
action = actions[i];
234 else if (
action ==
"PLAY")
262 QString label = tr(
"Search Actions");
264 auto *
menu =
new MythMenu(label,
this,
"searchviewmenu");
273 menu->AddItem(tr(
"Remove From Playlist"));
276 menu->AddItem(tr(
"Add To Playlist"));
277 menu->AddItem(tr(
"Add To Playlist And Play"));
283 menu->AddItem(tr(
"Search List..."));
291 if (menuPopup->Create())
321 int field = item->
GetData().toInt();
326 if (searchStr.isEmpty())
328 sql =
"SELECT song_id "
339 sql =
"SELECT song_id "
341 "LEFT JOIN music_artists ON "
342 " music_songs.artist_id=music_artists.artist_id "
343 "WHERE music_artists.artist_name LIKE '%" + searchStr +
"%' ";
349 sql =
"SELECT song_id "
351 "LEFT JOIN music_albums ON music_songs.album_id=music_albums.album_id "
352 "WHERE music_albums.album_name LIKE '%" + searchStr +
"%' ";
358 sql =
"SELECT song_id "
360 "WHERE music_songs.name LIKE '%" + searchStr +
"%' ";
366 sql =
"SELECT song_id "
368 "LEFT JOIN music_genres ON music_songs.genre_id=music_genres.genre_id "
369 "WHERE music_genres.genre LIKE '%" + searchStr +
"%' ";
376 [[clang::fallthrough]];
381 sql =
"SELECT song_id "
383 "LEFT JOIN music_artists ON "
384 " music_songs.artist_id=music_artists.artist_id "
385 "LEFT JOIN music_albums ON music_songs.album_id=music_albums.album_id "
386 "LEFT JOIN music_artists AS music_comp_artists ON "
387 " music_albums.artist_id=music_comp_artists.artist_id "
388 "LEFT JOIN music_genres ON music_songs.genre_id=music_genres.genre_id "
389 "WHERE music_songs.name LIKE '%" + searchStr +
"%' "
390 "OR music_artists.artist_name LIKE '%" + searchStr +
"%' "
391 "OR music_albums.album_name LIKE '%" + searchStr +
"%' "
392 "OR music_genres.genre LIKE '%" + searchStr +
"%' ";
407 int trackid = query.
value(0).toInt();
413 newitem->SetData(QVariant::fromValue(mdata));
415 mdata->
toMap(metadataMap);
416 newitem->SetTextFromMap(metadataMap);
419 newitem->DisplayState(
"on",
"selectedstate");
421 newitem->DisplayState(
"off",
"selectedstate");
460 if (artFile.isEmpty())
463 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)
QVariant value(int i) const
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
static Type TrackAddedEvent
static void showTrackInfo(MusicMetadata *mdata)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Screen in which all other widgets are contained and rendered.
static Type MetadataChangedEvent
QString GetText(void) const
Playlist * getCurrentPlaylist(void)
MythUIText * m_matchesText
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 Type AllTracksRemovedEvent
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 Type TrackRemovedEvent
static void trackVisible(MythUIButtonListItem *item)
virtual void SetText(const QString &text)
MythMainWindow * GetMythMainWindow(void)
MythScreenStack * GetStack(const QString &Stackname)
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.