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

[WIP] crates widget #1656

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions build/depends.py
Original file line number Diff line number Diff line change
Expand Up @@ -886,6 +886,7 @@ def sources(self, build):
"widget/wcombobox.cpp",
"widget/wsplitter.cpp",
"widget/wcoverart.cpp",
"widget/wcratelist.cpp",
"widget/wcoverartlabel.cpp",
"widget/wcoverartmenu.cpp",
"widget/wsingletoncontainer.cpp",
Expand Down
53 changes: 43 additions & 10 deletions res/skins/Deere/library.xml
Original file line number Diff line number Diff line change
Expand Up @@ -147,16 +147,49 @@
<LibrarySidebar>
</LibrarySidebar>

<CoverArt>
<ObjectName>LibraryCoverArt</ObjectName>
<TooltipId>coverart</TooltipId>
<SizePolicy>me,me</SizePolicy>
<MinimumSize>30,30</MinimumSize>
<Connection>
<ConfigKey>[Library],show_coverart</ConfigKey>
<BindProperty>visible</BindProperty>
</Connection>
</CoverArt>

<!--Cover Art / Crates-->
<Splitter>
<ObjectName>CratesSplitter</ObjectName>
<Size>me,me</Size>
<SplitSizes>1,1</SplitSizes>
<SplitSizesConfigKey>[LateNight],CratesSplitSize</SplitSizesConfigKey>
<Orientation>horizontal</Orientation>
<Collapsible>0,0</Collapsible>
<Children>
<WidgetGroup>
<Layout>vertical</Layout>
<SizePolicy>min,me</SizePolicy>
<MinimumSize>100,-1</MinimumSize>
<Connection>
<ConfigKey persist="true">[Library],show_coverart</ConfigKey>
<BindProperty>visible</BindProperty>
</Connection>
<Children>
<CoverArt>
<SizePolicy>me,me</SizePolicy>
<MinimumSize>40,40</MinimumSize>
</CoverArt>
</Children>
</WidgetGroup>
<WidgetGroup>
<Layout>vertical</Layout>
<SizePolicy>min,me</SizePolicy>
<MinimumSize>100,-1</MinimumSize>
<Connection>
<ConfigKey persist="true">[Library],show_crates</ConfigKey>
<BindProperty>visible</BindProperty>
</Connection>
<Children>
<CrateList>
<SizePolicy>me,me</SizePolicy>
<MinimumSize>40,40</MinimumSize>
<Group>[Library]</Group>
</CrateList>
</Children>
</WidgetGroup>
</Children>
</Splitter>
</Children>
</Splitter>
</Children>
Expand Down
51 changes: 42 additions & 9 deletions res/skins/LateNight/library.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,48 @@
<Children>
<!--Library Tree View-->
<LibrarySidebar></LibrarySidebar>
<!--Cover Art-->
<CoverArt>
<SizePolicy>me,me</SizePolicy>
<MinimumSize>40,40</MinimumSize>
<Connection>
<ConfigKey persist="true">[Library],show_coverart</ConfigKey>
<BindProperty>visible</BindProperty>
</Connection>
</CoverArt>
<!--Cover Art / Crates-->
<Splitter>
<ObjectName>CratesSplitter</ObjectName>
<Size>me,me</Size>
<SplitSizes>1,1</SplitSizes>
<SplitSizesConfigKey>[LateNight],CratesSplitSize</SplitSizesConfigKey>
<Orientation>horizontal</Orientation>
<Collapsible>0,0</Collapsible>
<Children>
<WidgetGroup>
<Layout>vertical</Layout>
<SizePolicy>min,me</SizePolicy>
<MinimumSize>100,-1</MinimumSize>
<Connection>
<ConfigKey persist="true">[Library],show_coverart</ConfigKey>
<BindProperty>visible</BindProperty>
</Connection>
<Children>
<CoverArt>
<SizePolicy>me,me</SizePolicy>
<MinimumSize>40,40</MinimumSize>
</CoverArt>
</Children>
</WidgetGroup>
<WidgetGroup>
<Layout>vertical</Layout>
<SizePolicy>min,me</SizePolicy>
<MinimumSize>100,-1</MinimumSize>
<Connection>
<ConfigKey persist="true">[Library],show_crates</ConfigKey>
<BindProperty>visible</BindProperty>
</Connection>
<Children>
<CrateList>
<SizePolicy>me,me</SizePolicy>
<MinimumSize>40,40</MinimumSize>
<Group>[Library]</Group>
</CrateList>
</Children>
</WidgetGroup>
</Children>
</Splitter>
</Children>
</Splitter>

Expand Down
1 change: 1 addition & 0 deletions res/skins/LateNight/skin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
<attribute persist="true" config_key="[Master],show_eqs">1</attribute>
<attribute persist="true" config_key="[Master],show_eq_kill_buttons">1</attribute>
<attribute persist="true" config_key="[Library],show_coverart">1</attribute>
<attribute persist="true" config_key="[Library],show_crates">0</attribute>
<attribute persist="true" config_key="[Master],show_4decks">0</attribute>
<attribute persist="true" config_key="[Master],show_4effectunits">0</attribute>
<attribute persist="true" config_key="[Spinny],show_spinnies">1</attribute>
Expand Down
51 changes: 50 additions & 1 deletion res/skins/LateNight/style.qss
Original file line number Diff line number Diff line change
Expand Up @@ -1507,13 +1507,19 @@ WBaseLibrary QLabel {
margin: 0px;
}

QTreeView::item:selected:active,
QListView::item {
color: #cfb32c;
}

QTreeView::item:selected:active,
QListView::item:selected:active,
QTableView::item:selected:active {
color: #cfb32c;
background-color: #725309;
}

QTreeView::item:selected:!active,
QListView::item:selected:!active,
QTableView::item:selected:!active {
color: #cfb32c;
background-color: #4c3b11;
Expand Down Expand Up @@ -1677,6 +1683,15 @@ WCoverArt {
color: #ACACAC;
}

WCrateList {
border-left: 2px solid #585858;
background-color: #0e0e0e;
padding-top: 2px;
padding-bottom: 2px;
/*border-top: 1px solid #585858;*/
}


/* splitter between treeview and library */
#LibrarySplitter::handle {
image: url(skin:/style/style_handle_unchecked.png);
Expand Down Expand Up @@ -1840,3 +1855,37 @@ QToolTip {
border: 1px solid #333;
border-radius: 2px;
}

/* Spacing between treeview and searchbar */
QListView { margin: 10px 0px 0px 0px; }
QListView:focus { border: 1px solid #8E5C00; }

/* triangle for closed/opened branches in treeview */
QListView { show-decoration-selected: 0; background-color: #151515; } /* Suppresses that selected sidebar items branch indicator shows wrong color when out of focus ; lp:880588 */
QListView::branch:has-children:!has-siblings:closed,
QListView::branch:closed:has-children:has-siblings { border-image: none; image: url(skin:/style/style_branch_closed.png);
background-color:#0f0f0f;
}
QListView::branch:open:has-children:!has-siblings,
QListView::branch:open:has-children:has-siblings { border-image: none; image: url(skin:/style/style_branch_open.png);
background-color:#0f0f0f;
}
QListView::branch:has-children:!has-siblings:closed:selected,
QListView::branch:closed:has-children:has-siblings:selected { border-image: none; image: url(skin:/style/style_branch_closed.png);
background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #585858, stop:1 #0f0f0f);
}
QListView::branch:open:has-children:!has-siblings:selected,
QListView::branch:open:has-children:has-siblings:selected { border-image: none; image: url(skin:/style/style_branch_open.png);
background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #585858, stop:1 #0f0f0f);
}

QListView WCrateItemSome {
background-color: #FF0000;
color: black;
}

QListView WCrateItemSome {
background-color: #FF0000;
color: black;
}

3 changes: 3 additions & 0 deletions src/controllers/controlpickermenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,9 @@ ControlPickerMenu::ControlPickerMenu(QWidget* pParent)
addControl("[Master]", "maximize_library",
tr("Library Maximize/Restore"),
tr("Maximize the track library to take up all the available screen space."), guiMenu);
addControl("[Library]", "show_crates",
tr("Crates List Show/Hide"),
tr("Show/hide list of crates"), guiMenu);

QString spinnyTitle = tr("Vinyl Spinner Show/Hide");
QString spinnyDescription = tr("Show/hide spinning vinyl widget");
Expand Down
1 change: 1 addition & 0 deletions src/library/crate/crate.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,6 @@ class Crate: public DbNamedEntity<CrateId> {
bool m_autoDjSource;
};

Q_DECLARE_METATYPE(Crate);

#endif // MIXXX_CRATE_H
1 change: 1 addition & 0 deletions src/library/crate/cratesummary.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,6 @@ class CrateSummary: public Crate {
double m_trackDuration;
};

Q_DECLARE_METATYPE(CrateSummary);

#endif // MIXXX_CRATESUMMARY_H
2 changes: 2 additions & 0 deletions src/library/library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,8 @@ void Library::addFeature(LibraryFeature* feature) {
this, SIGNAL(enableCoverArtDisplay(bool)));
connect(feature, SIGNAL(trackSelected(TrackPointer)),
this, SIGNAL(trackSelected(TrackPointer)));
connect(feature, SIGNAL(trackSelection(QList<TrackPointer>)),
this, SIGNAL(trackSelection(QList<TrackPointer>)));

connect(feature, SIGNAL(hovered(LibraryFeature*)),
this, SLOT(slotSetHoveredFeature(LibraryFeature*)));
Expand Down
6 changes: 6 additions & 0 deletions src/library/library.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class WBaseLibrary;
class WLibraryPane;
class WLibrarySidebar;
class WLibraryBreadCrumb;
class WCrateList;
class WButtonBar;
class WSearchLineEdit;
class TreeItem;
Expand Down Expand Up @@ -92,6 +93,10 @@ class Library: public QObject,
return m_trackTableFont;
}

inline TrackCollection* getTrackCollection() {
return m_pTrackCollection;
}

void switchToFeature(LibraryFeature* pFeature);
void showBreadCrumb(int paneId, TreeItem* pTree);
void showBreadCrumb(int paneId, const QString& text, const QIcon& icon);
Expand Down Expand Up @@ -142,6 +147,7 @@ class Library: public QObject,
// emit this signal to enable/disable the cover art widget
void enableCoverArtDisplay(bool);
void trackSelected(TrackPointer pTrack);
void trackSelection(QList<TrackPointer> pTrack);

void setTrackTableFont(const QFont& font);
void setTrackTableRowHeight(int rowHeight);
Expand Down
2 changes: 2 additions & 0 deletions src/library/libraryfeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,8 @@ parented_ptr<WTrackTableView> LibraryFeature::createTableWidget(int paneId, QWid
this, SIGNAL(loadTrackToPlayer(TrackPointer, QString, bool)));
connect(pTrackTableView.get(), SIGNAL(trackSelected(TrackPointer)),
this, SIGNAL(trackSelected(TrackPointer)));
connect(pTrackTableView.get(), SIGNAL(trackSelection(QList<TrackPointer>)),
this, SIGNAL(trackSelection(QList<TrackPointer>)));
connect(pTrackTableView.get(), SIGNAL(tableChanged()),
this, SLOT(restoreSaveButton()));

Expand Down
1 change: 1 addition & 0 deletions src/library/libraryfeature.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ class LibraryFeature : public QObject {
// emit this signal to enable/disable the cover art widget
void enableCoverArtDisplay(bool);
void trackSelected(TrackPointer);
void trackSelection(QList<TrackPointer>);

void hovered(LibraryFeature* pLibraryFeature);
void leaved(LibraryFeature* pLibraryFeature);
Expand Down
42 changes: 42 additions & 0 deletions src/skin/legacyskinparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include "widget/controlwidgetconnection.h"
#include "widget/wbasewidget.h"
#include "widget/wcoverart.h"
#include "widget/wcratelist.h"
#include "widget/wwidget.h"
#include "widget/wknob.h"
#include "widget/wknobcomposed.h"
Expand Down Expand Up @@ -534,6 +535,8 @@ QList<QWidget*> LegacySkinParser::parseNode(const QDomElement& node) {
result = wrapWidget(parseText(node));
} else if (nodeName == "TrackProperty") {
result = wrapWidget(parseTrackProperty(node));
} else if (nodeName == "CrateList") {
result = wrapWidget(parseCrateList(node));
} else if (nodeName == "StarRating") {
result = wrapWidget(parseStarRating(node));
} else if (nodeName == "VuMeter") {
Expand Down Expand Up @@ -1225,6 +1228,7 @@ QWidget* LegacySkinParser::parseSearchBox(const QDomElement& node) {

QWidget* LegacySkinParser::parseCoverArt(const QDomElement& node) {
QString channel = lookupNodeGroup(node);

BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channel);

WCoverArt* pCoverArt = new WCoverArt(m_pParent, m_pConfig, channel, pPlayer);
Expand All @@ -1246,6 +1250,44 @@ QWidget* LegacySkinParser::parseCoverArt(const QDomElement& node) {
return pCoverArt;
}


QWidget* LegacySkinParser::parseCrateList(const QDomElement& node) {
QString channelStr = lookupNodeGroup(node);
const char* pSafeChannelStr = safeChannelString(channelStr);

BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr);

if (!pPlayer && channelStr.compare("[Library]", Qt::CaseInsensitive) != 0) {
SKIN_WARNING(node, *m_pContext)
<< "CrateList widget requires a Deck or Library group";
return NULL;
}

WCrateList* p = new WCrateList(pSafeChannelStr, m_pConfig, m_pLibrary->getTrackCollection(), m_pParent);

commonWidgetSetup(node, p);
p->setup(node, *m_pContext);

if (pPlayer) {
connect(pPlayer, SIGNAL(newTrackLoaded(TrackPointer)),
p, SLOT(slotTrackLoaded(TrackPointer)));
connect(pPlayer, SIGNAL(loadingTrack(TrackPointer, TrackPointer)),
p, SLOT(slotTrackLoaded(TrackPointer)));

TrackPointer pTrack = pPlayer->getLoadedTrack();
if (pTrack) {
p->slotTrackLoaded(pTrack);
}
} else {
// hookup to library
connect(m_pLibrary, SIGNAL(switchToView(const QString&)),
p, SLOT(slotReset()));
connect(m_pLibrary, SIGNAL(trackSelection(QList<TrackPointer>)),
p, SLOT(slotTrackSelection(QList<TrackPointer>)));
}
return p;
}

void LegacySkinParser::parseSingletonDefinition(const QDomElement& node) {
QString objectName = m_pContext->selectString(node, "ObjectName");
if (objectName.isEmpty()) {
Expand Down
1 change: 1 addition & 0 deletions src/skin/legacyskinparser.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ class LegacySkinParser : public QObject, public SkinParser {
void setupLabelWidget(const QDomElement& element, WLabel* pLabel);
QWidget* parseText(const QDomElement& node);
QWidget* parseTrackProperty(const QDomElement& node);
QWidget* parseCrateList(const QDomElement& node);
QWidget* parseStarRating(const QDomElement& node);
QWidget* parseNumberRate(const QDomElement& node);
QWidget* parseNumberPos(const QDomElement& node);
Expand Down
4 changes: 4 additions & 0 deletions src/skin/tooltips.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ void Tooltips::addStandardTooltips() {
<< tr("Cover Art")
<< tr("Show/hide Cover Art.");

add("show_crates")
<< tr("Crates List")
<< tr("Show/hide Crates List.");

add("toggle_4decks")
<< tr("Toggle 4 Decks")
<< tr("Switches between showing 2 decks and 4 decks.");
Expand Down
3 changes: 3 additions & 0 deletions src/track/track.h
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,9 @@ class Track : public QObject {
// The list of cue points for the track
QList<CuePointer> m_cuePoints;

// A resolved list of the crates the track is in
QStringList m_cratesList;

// Storage for the track's beats
BeatsPointer m_pBeats;

Expand Down
Loading