Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cover art support #278

Merged
merged 86 commits into from
Nov 5, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
92247eb
Move CoverArtCache::extractEmbeddedCover to a utility class.
rryan Oct 21, 2014
34d48aa
Minor test cleanups.
rryan Oct 21, 2014
af707e4
Prevent deep-copy of QImage while checksumming it and move calculateHash
rryan Oct 21, 2014
f987621
Move CoverArtCache::cropImage to CoverArtUtils.
rryan Oct 21, 2014
5d2fa92
Move CoverArtCache::rescaleBigImage to CoverArtUtils.
rryan Oct 21, 2014
eb265df
Some NULL-safety changes.
rryan Oct 21, 2014
0f3f844
Remove 'widget' from method / var names.
rryan Oct 23, 2014
8cf9b8a
Move CoverArtCache::searchInTrackDirectory to CoverArtUtils.
rryan Oct 23, 2014
1af2430
Misc. fixes.
rryan Oct 26, 2014
f3eff5c
Remove default cover handling from CoverArtCache.
rryan Oct 26, 2014
32d9da9
More misc.
rryan Oct 26, 2014
08edc49
Avoid doing file I/O in the main thread.
rryan Oct 26, 2014
1ecde90
Move CoverInfo to coverart.h. Add CoverArt struct.
rryan Oct 26, 2014
7bbb903
Refactor to use the common structures in coverart.h.
rryan Oct 26, 2014
7c199cb
Cache-key improvements.
rryan Oct 26, 2014
107f9f9
Hash the full-sized image, not the cropped or size-capped image.
rryan Oct 26, 2014
807f621
Only check QPixmapCache if we have a non-empty cover hash.
rryan Oct 26, 2014
679f786
Add a debugging flag to CoverArtCache.
rryan Oct 26, 2014
b1b0f5e
Pull file extension regex generator into a utility file.
rryan Oct 27, 2014
2057607
Add source and type fields to CoverInfo and equality operators.
rryan Oct 27, 2014
cdf1a03
Add CoverArt property to TrackInfoObject.
rryan Oct 27, 2014
8183dc0
Add CoverArt widget to Deere.
rryan Oct 27, 2014
672111c
Add loadCover and selectCoverArtForTrack helper methods to CoverArtUt…
rryan Oct 27, 2014
42c8155
Massive cover art refactor.
rryan Oct 27, 2014
a5f2fc5
Avoid hard-coding size policies.
rryan Oct 27, 2014
5ef00f4
Rework WCoverArt <-> WTrackTableView signal flow.
rryan Oct 27, 2014
0477ae7
Remove hard-coded layout and sizes from WCoverArt.
rryan Oct 27, 2014
7000a9b
Add deck cover art to Deere.
rryan Oct 27, 2014
8572aa4
Remove unused BaseTrackCache update signals/slots.
rryan Oct 27, 2014
59ee4e5
Support drag and drop to/from WCoverArt.
rryan Oct 27, 2014
ae905d5
Use util/time.h instead of GuiTick for user action timing.
rryan Oct 27, 2014
cd4b3c8
Rename issueRepaint to signalWhenDone and remove update of WTrackTabl…
rryan Oct 27, 2014
9c0c1bb
Delete CoverAndAlbumInfo since album info is unused now.
rryan Oct 27, 2014
587ee29
Remove CoverArtCache use from WCoverArtMenu.
rryan Oct 27, 2014
946cb34
Remove unused member variable from TrackCollection.
rryan Oct 27, 2014
356d48c
Get supported cover extensions from CoverArtUtils.
rryan Oct 27, 2014
afdeb96
Add qDebug helpers for CoverArt and CoverInfo.
rryan Oct 28, 2014
0855f56
Early exit in CoverArtCache::requestCover if CoverInfo type is NONE.
rryan Oct 28, 2014
60c5853
Add CoverArtUtils::guessCoverArt helper method.
rryan Oct 28, 2014
e9aa413
No need to manually update() DlgTrackInfo.
rryan Oct 28, 2014
9bbbea5
Improve connection between WCoverArtMenu, WCoverArtLabel, WCoverArt, …
rryan Oct 28, 2014
31991b8
Disconnect TIO changed signals while applying track info edits.
rryan Oct 28, 2014
fb7570e
Don't crop cached pixmaps anymore.
rryan Oct 28, 2014
8e11ac5
Add coverArtUpdated signal to TrackInfoObject.
rryan Oct 28, 2014
da949ae
Fix test.
rryan Oct 28, 2014
8b77640
Allow segregation of multiple users of CoverArtCache.
rryan Oct 28, 2014
359dade
Move cover art to the Deere track text row.
rryan Oct 28, 2014
139a05a
Make a CoverArtUtils::selectCoverArtForTrack variant that doesn't
rryan Oct 28, 2014
c0cd784
Load the player's loaded track into WCoverArt upon creation.
rryan Oct 28, 2014
abf7eca
Use QStylePainter in WCoverArt so we can style the widget with CSS.
rryan Oct 28, 2014
a4132de
Default coverart_source and coverart_type to 0 instead of NULL.
rryan Oct 28, 2014
b90c5c6
Add first pass at cover art scan for UNKNOWN tracks.
rryan Oct 28, 2014
ea87686
Slight phrase tweaking.
rryan Oct 28, 2014
33509d1
Add warning about user data.
rryan Oct 28, 2014
29777ea
Merge remote-tracking branch 'cardinot/coverArtSupport' into
rryan Oct 28, 2014
49fee52
Fix issue where files on disk aren't picked up during existing-tracks…
rryan Oct 29, 2014
43cde9e
Fix QSet<int> signal queueing errors.
rryan Oct 29, 2014
d081ff7
Remove trackId from CoverInfo.
rryan Oct 29, 2014
1d4105c
When a library row's cover art is ready explictly refresh that row.
rryan Oct 29, 2014
dc82b07
Use foreach instead of C++-style iterator.
rryan Oct 29, 2014
94e511e
Address review comments.
rryan Oct 29, 2014
06b1952
Remove unnecessary use of CoverArt.
rryan Oct 29, 2014
0c48c06
Fix UTF-8 test.
rryan Oct 29, 2014
320a803
Change CoverInfo hash to an integer.
rryan Oct 29, 2014
dbe9811
Use cover hash as request reference in CoverArtDelegate.
rryan Oct 29, 2014
f9e9148
Support sorting by cover art.
rryan Oct 30, 2014
343f7c0
Delay trackSelected signal until the user interaction timeout.
rryan Oct 30, 2014
07fd51f
Only repaint cells that were cache misses when we hit the user
rryan Oct 30, 2014
0425bc4
Double-check that we are not overwriting USER_SELECTED covers.
rryan Oct 30, 2014
3d0f864
Delete unused method.
rryan Oct 30, 2014
fa683d8
Switch CoverArt use to CoverInfo.
rryan Oct 30, 2014
3468571
Revert DlgTrackInfo parentage change.
rryan Oct 30, 2014
8dea56a
Call activateWindow on DlgCoverArtFullSize.
rryan Oct 30, 2014
e394457
Compare potential cover filenames case-insensitively.
rryan Oct 31, 2014
dddeb3b
Handle COVER_NONE covers in WCoverArtMenu::slotChange.
rryan Oct 31, 2014
0980b6b
Support multiple-selection for cover art menu in WTrackTableView.
rryan Oct 31, 2014
cf7c539
Show cover art progress on the library scanner dialog.
rryan Oct 31, 2014
a7329e9
Update BaseTrackCache once cover art processing is done.
rryan Oct 31, 2014
4ad6b5d
Only pick non-matching cover files if there is only one option.
rryan Oct 31, 2014
f3e2c5c
Create a security token for files chosen via WCoverArtMenu.
rryan Oct 31, 2014
24874c5
Acquire sandbox tokens in various places for cover art.
rryan Oct 31, 2014
b95c452
Only save images in TIO if it is not NULL
Nov 5, 2014
09b16a3
Reduce code duplication in finding possible Covers
Nov 5, 2014
46fbd24
Move CoverArtUtil tests to own class
Nov 5, 2014
82085f3
Codying style clean up coverartcache
Nov 5, 2014
76113d0
Use COSlave instead of COThread
Nov 5, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build/depends.py
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,7 @@ def sources(self, build):
"library/missingtablemodel.cpp",
"library/hiddentablemodel.cpp",
"library/proxytrackmodel.cpp",
"library/coverart.cpp",
"library/coverartcache.cpp",

"library/playlisttablemodel.cpp",
Expand Down Expand Up @@ -780,7 +781,6 @@ def sources(self, build):
"library/dao/libraryhashdao.cpp",
"library/dao/settingsdao.cpp",
"library/dao/analysisdao.cpp",
"library/dao/coverartdao.cpp",

"library/librarycontrol.cpp",
"library/schemamanager.cpp",
Expand Down
13 changes: 6 additions & 7 deletions res/schema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -385,15 +385,14 @@ METADATA
</revision>
<revision version="24" min_compatible="3">
<description>
Add cover art support
Add cover art support. Default source is UNKNOWN and default type is NONE.
See library/coverart.h.
</description>
<sql>
CREATE TABLE IF NOT EXISTS cover_art (
id INTEGER primary key AUTOINCREMENT,
location TEXT,
hash TEXT UNIQUE
);
ALTER TABLE library ADD COLUMN cover_art INTEGER DEFAULT NULL REFERENCES covert_art(id);
ALTER TABLE library ADD COLUMN coverart_source INTEGER DEFAULT 0;
ALTER TABLE library ADD COLUMN coverart_type INTEGER DEFAULT 0;
ALTER TABLE library ADD COLUMN coverart_location TEXT DEFAULT "";
ALTER TABLE library ADD COLUMN coverart_hash INTEGER DEFAULT 0;
</sql>
</revision>
</schema>
114 changes: 63 additions & 51 deletions res/skins/Deere/deck_text_row.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,80 +8,92 @@
<Template>
<WidgetGroup>
<ObjectName>DeckTextRow</ObjectName>
<Layout>vertical</Layout>
<Layout>horizontal</Layout>
<SizePolicy>me,max</SizePolicy>
<Children>
<CoverArt>
<ObjectName>DeckCoverArt</ObjectName>
<SizePolicy>min,min</SizePolicy>
<MinimumSize>58,58</MinimumSize>
<Group><Variable name="group"/></Group>
</CoverArt>
<WidgetGroup>
<ObjectName>UpperTextRow</ObjectName>
<Layout>horizontal</Layout>
<!-- When TextRow is laid out, we need to ignore our children. Otherwise
decks might end up with different widths based on the size of the
labels in this row -->
<SizePolicy>i,max</SizePolicy>
<ObjectName>DeckTextColumn</ObjectName>
<Layout>vertical</Layout>
<Children>
<WidgetGroup>
<ObjectName>TitleGutter</ObjectName>
<ObjectName>UpperTextRow</ObjectName>
<Layout>horizontal</Layout>
<SizePolicy>min,max</SizePolicy>
<!-- When TextRow is laid out, we need to ignore our children. Otherwise
decks might end up with different widths based on the size of the
labels in this row -->
<SizePolicy>i,max</SizePolicy>
<Children>
<TrackProperty>
<TooltipId>track_title</TooltipId>
<SizePolicy>me,min</SizePolicy>
<Property>title</Property>
<Group><Variable name="group"/></Group>
</TrackProperty>
<WidgetGroup>
<ObjectName>BPMGutter</ObjectName>
<ObjectName>TitleGutter</ObjectName>
<Layout>horizontal</Layout>
<SizePolicy>min,max</SizePolicy>
<Children>
<Key>
<TrackProperty>
<TooltipId>track_title</TooltipId>
<SizePolicy>me,min</SizePolicy>
<Property>title</Property>
<Group><Variable name="group"/></Group>
<SizePolicy>min,</SizePolicy>
<Connection>
<ConfigKey><Variable name="group"/>,visual_key</ConfigKey>
</Connection>
</Key>
<NumberBpm>
<Group><Variable name="group"/></Group>
<SizePolicy>min,</SizePolicy>
<Connection>
<ConfigKey><Variable name="group"/>,visual_bpm</ConfigKey>
</Connection>
</NumberBpm>
</TrackProperty>
<WidgetGroup>
<ObjectName>BPMGutter</ObjectName>
<Layout>horizontal</Layout>
<SizePolicy>min,max</SizePolicy>
<Children>
<Key>
<Group><Variable name="group"/></Group>
<SizePolicy>min,</SizePolicy>
<Connection>
<ConfigKey><Variable name="group"/>,visual_key</ConfigKey>
</Connection>
</Key>
<NumberBpm>
<Group><Variable name="group"/></Group>
<SizePolicy>min,</SizePolicy>
<Connection>
<ConfigKey><Variable name="group"/>,visual_bpm</ConfigKey>
</Connection>
</NumberBpm>
</Children>
</WidgetGroup>
</Children>
</WidgetGroup>
</Children>
</WidgetGroup>
</Children>
</WidgetGroup>
<WidgetGroup>
<ObjectName>LowerTextRow</ObjectName>
<Layout>horizontal</Layout>
<!-- When TextRow is laid out, we need to ignore our children. Otherwise
decks might end up with different widths based on the size of the
labels in this row -->
<SizePolicy>i,max</SizePolicy>
<Children>
<WidgetGroup>
<ObjectName>ArtistGutter</ObjectName>
<ObjectName>LowerTextRow</ObjectName>
<Layout>horizontal</Layout>
<SizePolicy>me,max</SizePolicy>
<!-- When TextRow is laid out, we need to ignore our children. Otherwise
decks might end up with different widths based on the size of the
labels in this row -->
<SizePolicy>i,max</SizePolicy>
<Children>
<TrackProperty>
<TooltipId>track_artist</TooltipId>
<Property>artist</Property>
<SizePolicy>me,min</SizePolicy>
<Group><Variable name="group"/></Group>
</TrackProperty>
<WidgetGroup>
<ObjectName>PositionGutter</ObjectName>
<ObjectName>ArtistGutter</ObjectName>
<Layout>horizontal</Layout>
<SizePolicy>min,max</SizePolicy>
<SizePolicy>me,max</SizePolicy>
<Children>
<NumberPos>
<TrackProperty>
<TooltipId>track_artist</TooltipId>
<Property>artist</Property>
<SizePolicy>me,min</SizePolicy>
<Group><Variable name="group"/></Group>
</NumberPos>
</TrackProperty>
<WidgetGroup>
<ObjectName>PositionGutter</ObjectName>
<Layout>horizontal</Layout>
<SizePolicy>min,max</SizePolicy>
<Children>
<NumberPos>
<Group><Variable name="group"/></Group>
</NumberPos>
</Children>
</WidgetGroup>
</Children>
</WidgetGroup>
</Children>
Expand Down
4 changes: 4 additions & 0 deletions res/skins/Deere/library.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@
</WidgetGroup>
<LibrarySidebar>
</LibrarySidebar>
<CoverArt>
<SizePolicy>me,me</SizePolicy>
<MinimumSize>100,100</MinimumSize>
</CoverArt>
</Children>
</WidgetGroup>
<Library>
Expand Down
7 changes: 6 additions & 1 deletion res/skins/Deere/style.qss
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,13 @@
border: 1px solid #555;
}

#UpperTextRow {
#DeckTextRow {
border-top: 1px solid #555;
}

#UpperTextRow {
/* top 0px seems required for bottom 1px to work O_o */
border-top: 0px solid #555;
border-bottom: 1px solid #555;
}

Expand Down
2 changes: 1 addition & 1 deletion src/basetrackplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ void BaseTrackPlayer::slotFinishLoading(TrackPointer pTrackInfoObject)
m_replaygainPending = false;
// Read the tags if required
if (!m_pLoadedTrack->getHeaderParsed()) {
m_pLoadedTrack->parse();
m_pLoadedTrack->parse(false);
}

// m_pLoadedTrack->setPlayedAndUpdatePlaycount(true); // Actually the song is loaded but not played
Expand Down
2 changes: 1 addition & 1 deletion src/controllers/controlpickermenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -687,7 +687,7 @@ ControlPickerMenu::ControlPickerMenu(QWidget* pParent)
tr("Show/hide the preview deck"), guiMenu);
addControl("[Library]", "show_coverart",
tr("Cover Art Show/Hide"),
tr("Show/hide the cover art"), guiMenu);
tr("Show/hide cover art"), guiMenu);

const int iNumDecks = ControlObject::get(ConfigKey("[Master]", "num_decks"));
QString spinnyTitle = tr("Vinyl Spinner Show/Hide");
Expand Down
4 changes: 2 additions & 2 deletions src/dlganalysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ DlgAnalysis::DlgAnalysis(QWidget* parent,
connect(m_pAnalysisLibraryTableView, SIGNAL(loadTrackToPlayer(TrackPointer, QString)),
this, SIGNAL(loadTrackToPlayer(TrackPointer, QString)));

connect(m_pAnalysisLibraryTableView, SIGNAL(loadCoverArt(CoverInfo, bool)),
this, SIGNAL(loadCoverArt(CoverInfo, bool)));
connect(m_pAnalysisLibraryTableView, SIGNAL(trackSelected(TrackPointer)),
this, SIGNAL(trackSelected(TrackPointer)));

QBoxLayout* box = dynamic_cast<QBoxLayout*>(layout());
Q_ASSERT(box); // Assumes the form layout is a QVBox/QHBoxLayout!
Expand Down
3 changes: 1 addition & 2 deletions src/dlganalysis.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
#include <QItemSelection>
#include "ui_dlganalysis.h"
#include "configobject.h"
#include "library/coverartcache.h"
#include "library/libraryview.h"
#include "library/trackcollection.h"
#include "library/analysislibrarytablemodel.h"
Expand Down Expand Up @@ -48,7 +47,7 @@ class DlgAnalysis : public QWidget, public Ui::DlgAnalysis, public virtual Libra
void loadTrackToPlayer(TrackPointer pTrack, QString player);
void analyzeTracks(QList<int> trackIds);
void stopAnalysis();
void loadCoverArt(CoverInfo info, bool cachedOnly);
void trackSelected(TrackPointer pTrack);

private:
//Note m_pTrackTablePlaceholder is defined in the .ui file
Expand Down
4 changes: 2 additions & 2 deletions src/dlgautodj.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ DlgAutoDJ::DlgAutoDJ(QWidget* parent, ConfigObject<ConfigValue>* pConfig,
connect(m_pTrackTableView, SIGNAL(loadTrackToPlayer(TrackPointer, QString, bool)),
this, SIGNAL(loadTrackToPlayer(TrackPointer, QString, bool)));

connect(m_pTrackTableView, SIGNAL(loadCoverArt(CoverInfo, bool)),
this, SIGNAL(loadCoverArt(CoverInfo, bool)));
connect(m_pTrackTableView, SIGNAL(trackSelected(TrackPointer)),
this, SIGNAL(trackSelected(TrackPointer)));

QBoxLayout* box = dynamic_cast<QBoxLayout*>(layout());
Q_ASSERT(box); //Assumes the form layout is a QVBox/QHBoxLayout!
Expand Down
3 changes: 1 addition & 2 deletions src/dlgautodj.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
#include "configobject.h"
#include "controlpushbutton.h"
#include "trackinfoobject.h"
#include "library/coverartcache.h"
#include "library/libraryview.h"
#include "library/trackcollection.h"
#include "library/dao/playlistdao.h"
Expand Down Expand Up @@ -52,7 +51,7 @@ class DlgAutoDJ : public QWidget, public Ui::DlgAutoDJ, public LibraryView {
void addRandomButton(bool buttonChecked);
void loadTrack(TrackPointer tio);
void loadTrackToPlayer(TrackPointer tio, QString group, bool);
void loadCoverArt(CoverInfo info, bool cachedOnly);
void trackSelected(TrackPointer pTrack);

private:
enum ADJstates {
Expand Down
34 changes: 13 additions & 21 deletions src/dlgcoverartfullsize.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <QDesktopWidget>

#include "dlgcoverartfullsize.h"
#include "library/coverartutils.h"

DlgCoverArtFullSize::DlgCoverArtFullSize(QWidget* parent)
: QDialog(parent) {
Expand All @@ -12,37 +13,27 @@ DlgCoverArtFullSize::~DlgCoverArtFullSize() {
}

void DlgCoverArtFullSize::init(CoverInfo info) {
// this cannot be null
QWidget* activeWindow = QApplication::activeWindow();
if (!activeWindow) {
return;
}

CoverArtCache* cache = CoverArtCache::instance();
if (info.coverLocation.isEmpty()) {
info.coverLocation = cache->trackInDBHash(info.trackId);
}

if (info.coverLocation == cache->getDefaultCoverLocation()) {
return;
}

// TODO(rryan): don't do this in the main thread
QImage cover = CoverArtUtils::loadCover(info);
QPixmap pixmap;
if (info.coverLocation == "ID3TAG") {
pixmap.convertFromImage(
cache->extractEmbeddedCover(info.trackLocation));
} else {
pixmap = QPixmap(info.coverLocation);
if (!cover.isNull()) {
pixmap.convertFromImage(cover);
}

if (pixmap.isNull()) {
return;
}

QWidgetList windows = QApplication::topLevelWidgets();
QSize largestWindowSize;
foreach (QWidget* pWidget, windows) {
largestWindowSize = largestWindowSize.expandedTo(pWidget->size());
}

// If cover is bigger than Mixxx, it must be resized!
// In this case, it need to do a small adjust to make
// this dlg a bit smaller than the Mixxx window.
QSize mixxxSize = activeWindow->size() / qreal(1.2);
QSize mixxxSize = largestWindowSize / qreal(1.2);
if (pixmap.height() > mixxxSize.height()
|| pixmap.width() > mixxxSize.width()) {
pixmap = pixmap.scaled(
Expand All @@ -54,4 +45,5 @@ void DlgCoverArtFullSize::init(CoverInfo info) {
show();
move(QApplication::desktop()->screenGeometry().center() - rect().center());
raise();
activateWindow();
}
5 changes: 2 additions & 3 deletions src/dlgcoverartfullsize.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@
#include <QDialog>

#include "ui_dlgcoverartfullsize.h"
#include "library/coverartcache.h"
#include "library/coverart.h"

class DlgCoverArtFullSize
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This shouldn't be a Singleton -- I see why it's easier to make it one but this is a GUI widget. It increases the risk of lifetime issues -- for example it depends on CoverArtCache yet it is destroyed after CoverArtCache is destroyed.

  • Create a separate DlgCoverArtFullSize per time it is needed. Since it seems to be modal there isn't a risk of popping two at once.
  • Create a single one at the same time the GUI is created and pass that into the skin loader, thread that further down. This is annoying but better practice than a singleton.

: public QDialog,
public Ui::DlgCoverArtFullSize
{
public Ui::DlgCoverArtFullSize {
Q_OBJECT
public:
DlgCoverArtFullSize(QWidget* parent=0);
Expand Down
4 changes: 2 additions & 2 deletions src/dlghidden.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ DlgHidden::DlgHidden(QWidget* parent, ConfigObject<ConfigValue>* pConfig,
this,
SLOT(selectionChanged(const QItemSelection&, const QItemSelection&)));

connect(m_pTrackTableView, SIGNAL(loadCoverArt(CoverInfo, bool)),
this, SIGNAL(loadCoverArt(CoverInfo, bool)));
connect(m_pTrackTableView, SIGNAL(trackSelected(TrackPointer)),
this, SIGNAL(trackSelected(TrackPointer)));
}

DlgHidden::~DlgHidden() {
Expand Down
3 changes: 1 addition & 2 deletions src/dlghidden.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

#include "ui_dlghidden.h"
#include "configobject.h"
#include "library/coverartcache.h"
#include "library/libraryview.h"
#include "library/trackcollection.h"
#include "mixxxkeyboard.h"
Expand All @@ -28,7 +27,7 @@ class DlgHidden : public QWidget, public Ui::DlgHidden, public LibraryView {
void selectionChanged(const QItemSelection&, const QItemSelection&);

signals:
void loadCoverArt(CoverInfo info, bool cachedOnly);
void trackSelected(TrackPointer pTrack);

private:
void activateButtons(bool enable);
Expand Down
4 changes: 2 additions & 2 deletions src/dlgmissing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ DlgMissing::DlgMissing(QWidget* parent, ConfigObject<ConfigValue>* pConfig,
this,
SLOT(selectionChanged(const QItemSelection&, const QItemSelection&)));

connect(m_pTrackTableView, SIGNAL(loadCoverArt(CoverInfo, bool)),
this, SIGNAL(loadCoverArt(CoverInfo, bool)));
connect(m_pTrackTableView, SIGNAL(trackSelected(TrackPointer)),
this, SIGNAL(trackSelected(TrackPointer)));
}

DlgMissing::~DlgMissing() {
Expand Down
Loading