Merge lp:~mixxxdevelopers/mixxx/features_sqlite into lp:~mixxxdevelopers/mixxx/trunk

Proposed by RJ Skerry-Ryan
Status: Merged
Approved by: RJ Skerry-Ryan
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~mixxxdevelopers/mixxx/features_sqlite
Merge into: lp:~mixxxdevelopers/mixxx/trunk
Diff against target: 27724 lines (+16107/-7718)
208 files modified
mixxx/build/qt4.py (+1/-0)
mixxx/res/html/crates.html (+12/-0)
mixxx/res/html/playlists.html (+12/-0)
mixxx/res/images/library/crate_empty.svg (+336/-0)
mixxx/res/images/library/crate_full.svg (+458/-0)
mixxx/res/midi/Behringer BCD3000.midi.xml (+584/-401)
mixxx/res/midi/Behringer-BCD3000-scripts.js (+69/-0)
mixxx/res/mixxx.qrc (+6/-1)
mixxx/res/schema.xml (+84/-0)
mixxx/res/skins/Collusion (1280)/skin.xml (+34/-4)
mixxx/res/skins/Collusion (1280-WS)/skin.xml (+34/-4)
mixxx/res/skins/hercules/skin.xml (+34/-0)
mixxx/res/skins/nCut/skin.xml (+34/-0)
mixxx/res/skins/outline/skin.xml (+34/-4)
mixxx/res/skins/outlineClose/skin.xml (+34/-4)
mixxx/res/skins/outlineMini/skin.xml (+49/-20)
mixxx/res/skins/outlineNetbook/skin.xml (+34/-4)
mixxx/res/skins/outlineSmall/skin.xml (+35/-5)
mixxx/res/skins/traditional/skin.xml (+34/-0)
mixxx/src/SConscript (+82/-25)
mixxx/src/analyserqueue.cpp (+31/-7)
mixxx/src/analyserqueue.h (+8/-6)
mixxx/src/analyserwavesummary.cpp (+14/-14)
mixxx/src/analyserwavesummary.h (+3/-1)
mixxx/src/cachingreader.cpp (+1/-0)
mixxx/src/configobject.cpp (+10/-1)
mixxx/src/configobject.h (+1/-1)
mixxx/src/controlobjectthread.cpp (+1/-0)
mixxx/src/dlgautodj.cpp (+267/-0)
mixxx/src/dlgautodj.h (+71/-0)
mixxx/src/dlgautodj.ui (+62/-0)
mixxx/src/dlgbpmtap.cpp (+0/-425)
mixxx/src/dlgbpmtap.h (+0/-97)
mixxx/src/dlgprefcontrols.cpp (+1/-24)
mixxx/src/dlgprefcontrols.h (+0/-1)
mixxx/src/dlgprefcontrolsdlg.ui (+206/-268)
mixxx/src/dlgpreferences.cpp (+17/-18)
mixxx/src/dlgpreferences.h (+10/-12)
mixxx/src/dlgprepare.cpp (+264/-0)
mixxx/src/dlgprepare.h (+53/-0)
mixxx/src/dlgprepare.ui (+79/-0)
mixxx/src/dlgtrackinfo.cpp (+164/-0)
mixxx/src/dlgtrackinfo.h (+50/-0)
mixxx/src/dlgtrackinfo.ui (+247/-0)
mixxx/src/engine/bpmcontrol.cpp (+3/-3)
mixxx/src/engine/bpmcontrol.h (+7/-7)
mixxx/src/engine/cuecontrol.cpp (+504/-0)
mixxx/src/engine/cuecontrol.h (+93/-0)
mixxx/src/engine/enginebuffer.cpp (+33/-42)
mixxx/src/engine/enginebuffer.h (+11/-15)
mixxx/src/engine/enginebuffercue.cpp (+0/-261)
mixxx/src/engine/enginebuffercue.h (+0/-70)
mixxx/src/engine/enginechannel.cpp (+0/-1)
mixxx/src/engine/enginecontrol.cpp (+2/-2)
mixxx/src/engine/enginecontrol.h (+11/-7)
mixxx/src/engine/loopingcontrol.cpp (+13/-2)
mixxx/src/engine/loopingcontrol.h (+1/-0)
mixxx/src/library/abstractxmltrackmodel.cpp (+179/-0)
mixxx/src/library/abstractxmltrackmodel.h (+98/-0)
mixxx/src/library/autodjfeature.cpp (+103/-0)
mixxx/src/library/autodjfeature.h (+54/-0)
mixxx/src/library/browsefeature.cpp (+170/-0)
mixxx/src/library/browsefeature.h (+61/-0)
mixxx/src/library/browsefilter.cpp (+75/-0)
mixxx/src/library/browsefilter.h (+30/-0)
mixxx/src/library/browsetablemodel.cpp (+46/-0)
mixxx/src/library/browsetablemodel.h (+20/-0)
mixxx/src/library/cratefeature.cpp (+151/-0)
mixxx/src/library/cratefeature.h (+54/-0)
mixxx/src/library/cratetablemodel.cpp (+252/-0)
mixxx/src/library/cratetablemodel.h (+51/-0)
mixxx/src/library/dao/cratedao.cpp (+155/-0)
mixxx/src/library/dao/cratedao.h (+39/-0)
mixxx/src/library/dao/cue.cpp (+151/-0)
mixxx/src/library/dao/cue.h (+73/-0)
mixxx/src/library/dao/cuedao.cpp (+244/-0)
mixxx/src/library/dao/cuedao.h (+41/-0)
mixxx/src/library/dao/dao.h (+11/-0)
mixxx/src/library/dao/libraryhashdao.cpp (+114/-0)
mixxx/src/library/dao/libraryhashdao.h (+25/-0)
mixxx/src/library/dao/playlistdao.cpp (+317/-0)
mixxx/src/library/dao/playlistdao.h (+39/-0)
mixxx/src/library/dao/settingsdao.cpp (+46/-0)
mixxx/src/library/dao/settingsdao.h (+20/-0)
mixxx/src/library/dao/trackdao.cpp (+551/-0)
mixxx/src/library/dao/trackdao.h (+74/-0)
mixxx/src/library/itunesfeature.cpp (+94/-0)
mixxx/src/library/itunesfeature.h (+47/-0)
mixxx/src/library/itunesplaylistmodel.cpp (+233/-0)
mixxx/src/library/itunesplaylistmodel.h (+74/-0)
mixxx/src/library/itunestrackmodel.cpp (+248/-0)
mixxx/src/library/itunestrackmodel.h (+89/-0)
mixxx/src/library/legacylibraryimporter.cpp (+87/-0)
mixxx/src/library/legacylibraryimporter.h (+20/-0)
mixxx/src/library/library.cpp (+160/-0)
mixxx/src/library/library.h (+77/-0)
mixxx/src/library/libraryfeature.cpp (+10/-0)
mixxx/src/library/libraryfeature.h (+54/-0)
mixxx/src/library/librarymidicontrol.cpp (+199/-0)
mixxx/src/library/librarymidicontrol.h (+38/-0)
mixxx/src/library/libraryscanner.cpp (+201/-24)
mixxx/src/library/libraryscanner.h (+15/-6)
mixxx/src/library/libraryscannerdlg.cpp (+39/-76)
mixxx/src/library/libraryscannerdlg.h (+8/-14)
mixxx/src/library/librarytablemodel.cpp (+260/-0)
mixxx/src/library/librarytablemodel.h (+48/-0)
mixxx/src/library/libraryview.h (+22/-0)
mixxx/src/library/missingtablemodel.cpp (+242/-0)
mixxx/src/library/missingtablemodel.h (+43/-0)
mixxx/src/library/mixxxlibraryfeature.cpp (+86/-0)
mixxx/src/library/mixxxlibraryfeature.h (+48/-0)
mixxx/src/library/playlistfeature.cpp (+169/-0)
mixxx/src/library/playlistfeature.h (+60/-0)
mixxx/src/library/playlisttablemodel.cpp (+397/-0)
mixxx/src/library/playlisttablemodel.h (+49/-0)
mixxx/src/library/preparecratedelegate.cpp (+27/-0)
mixxx/src/library/preparecratedelegate.h (+11/-0)
mixxx/src/library/preparefeature.cpp (+80/-0)
mixxx/src/library/preparefeature.h (+51/-0)
mixxx/src/library/preparelibrarytablemodel.cpp (+76/-0)
mixxx/src/library/preparelibrarytablemodel.h (+23/-0)
mixxx/src/library/proxytrackmodel.cpp (+116/-0)
mixxx/src/library/proxytrackmodel.h (+51/-0)
mixxx/src/library/rhythmboxfeature.cpp (+93/-0)
mixxx/src/library/rhythmboxfeature.h (+46/-0)
mixxx/src/library/rhythmboxplaylistmodel.cpp (+280/-0)
mixxx/src/library/rhythmboxplaylistmodel.h (+109/-0)
mixxx/src/library/rhythmboxtrackmodel.cpp (+157/-0)
mixxx/src/library/rhythmboxtrackmodel.h (+69/-0)
mixxx/src/library/schemamanager.cpp (+132/-0)
mixxx/src/library/schemamanager.h (+17/-0)
mixxx/src/library/searchthread.cpp (+73/-0)
mixxx/src/library/searchthread.h (+35/-0)
mixxx/src/library/sidebarmodel.cpp (+252/-0)
mixxx/src/library/sidebarmodel.h (+61/-0)
mixxx/src/library/trackcollection.cpp (+171/-193)
mixxx/src/library/trackcollection.h (+67/-44)
mixxx/src/library/trackmodel.h (+69/-0)
mixxx/src/mixxx.cpp (+163/-61)
mixxx/src/mixxx.h (+25/-5)
mixxx/src/mixxxview.cpp (+202/-87)
mixxx/src/mixxxview.h (+38/-18)
mixxx/src/player.cpp (+119/-0)
mixxx/src/player.h (+40/-0)
mixxx/src/soundsourcemp3.cpp (+27/-3)
mixxx/src/soundsourceoggvorbis.cpp (+13/-0)
mixxx/src/soundsourcesndfile.cpp (+4/-1)
mixxx/src/test/analyserbpmtest.cpp (+6/-6)
mixxx/src/test/analyserwaveformtest.cpp (+6/-6)
mixxx/src/test/analyserwavesummarytest.cpp (+6/-6)
mixxx/src/test/midiscriptenginetest.cpp (+7/-8)
mixxx/src/track.cpp (+0/-1464)
mixxx/src/track.h (+0/-268)
mixxx/src/trackimporter.cpp (+0/-142)
mixxx/src/trackimporter.h (+0/-73)
mixxx/src/trackinfoobject.cpp (+156/-139)
mixxx/src/trackinfoobject.h (+73/-33)
mixxx/src/trackplaylist.cpp (+0/-595)
mixxx/src/trackplaylist.h (+0/-143)
mixxx/src/trackplaylistlist.cpp (+0/-23)
mixxx/src/trackplaylistlist.h (+0/-32)
mixxx/src/transposeproxymodel.h (+28/-0)
mixxx/src/waveform/renderobject.cpp (+6/-7)
mixxx/src/waveform/renderobject.h (+6/-5)
mixxx/src/waveform/waveformrenderer.cpp (+103/-82)
mixxx/src/waveform/waveformrenderer.h (+13/-10)
mixxx/src/waveform/waveformrendermark.cpp (+224/-29)
mixxx/src/waveform/waveformrendermark.h (+21/-6)
mixxx/src/waveform/waveformrendermarkrange.cpp (+233/-0)
mixxx/src/waveform/waveformrendermarkrange.h (+60/-0)
mixxx/src/widget/wbrowsetableview.cpp (+95/-0)
mixxx/src/widget/wbrowsetableview.h (+42/-0)
mixxx/src/widget/wglwaveformviewer.cpp (+14/-48)
mixxx/src/widget/wglwaveformviewer.h (+3/-7)
mixxx/src/widget/wlibrary.cpp (+85/-0)
mixxx/src/widget/wlibrary.h (+49/-0)
mixxx/src/widget/wlibrarysidebar.cpp (+162/-0)
mixxx/src/widget/wlibrarysidebar.h (+23/-0)
mixxx/src/widget/wlibrarytableview.cpp (+96/-0)
mixxx/src/widget/wlibrarytableview.h (+45/-0)
mixxx/src/widget/wlibrarytextbrowser.cpp (+56/-0)
mixxx/src/widget/wlibrarytextbrowser.h (+26/-0)
mixxx/src/widget/wnumberbpm.cpp (+11/-13)
mixxx/src/widget/wnumberbpm.h (+0/-4)
mixxx/src/widget/woverview.cpp (+181/-80)
mixxx/src/widget/woverview.h (+37/-16)
mixxx/src/widget/wpreparecratestableview.cpp (+102/-0)
mixxx/src/widget/wpreparecratestableview.h (+24/-0)
mixxx/src/widget/wpreparelibrarytableview.cpp (+25/-0)
mixxx/src/widget/wpreparelibrarytableview.h (+21/-0)
mixxx/src/widget/wsearchlineedit.cpp (+113/-65)
mixxx/src/widget/wsearchlineedit.h (+40/-30)
mixxx/src/widget/wtracktableviewheader.cpp (+136/-0)
mixxx/src/widget/wtracktableviewheader.h (+41/-0)
mixxx/src/widget/wwaveformviewer.cpp (+8/-8)
mixxx/src/widget/wwidget.cpp (+2/-4)
mixxx/src/wipodtracksmodel.cpp (+0/-116)
mixxx/src/wipodtracksmodel.h (+0/-43)
mixxx/src/wplaylistlistmodel.cpp (+0/-200)
mixxx/src/wplaylistlistmodel.h (+0/-66)
mixxx/src/wpromotracksmodel.cpp (+0/-108)
mixxx/src/wpromotracksmodel.h (+0/-40)
mixxx/src/wtracktablefilter.cpp (+0/-70)
mixxx/src/wtracktablefilter.h (+0/-38)
mixxx/src/wtracktablemodel.cpp (+0/-224)
mixxx/src/wtracktablemodel.h (+0/-70)
mixxx/src/wtracktableview.cpp (+371/-933)
mixxx/src/wtracktableview.h (+55/-169)
To merge this branch: bzr merge lp:~mixxxdevelopers/mixxx/features_sqlite
Reviewer Review Type Date Requested Status
RJ Skerry-Ryan Approve
Review via email: mp+16828@code.launchpad.net
To post a comment you must log in.
Revision history for this message
RJ Skerry-Ryan (rryan) wrote :

The SQLite library is stable and complete enough that we are ready to merge it into trunk.

Revision history for this message
RJ Skerry-Ryan (rryan) wrote :

Approving my own proposal... :)

review: Approve
2359. By RJ Skerry-Ryan

Merging ramping pitchbend, portmidi from trunk.

2360. By RJ Skerry-Ryan

Undo SConscript mess.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'mixxx/build/qt4.py'
2--- mixxx/build/qt4.py 2009-04-13 17:08:26 +0000
3+++ mixxx/build/qt4.py 2010-01-05 04:00:30 +0000
4@@ -386,6 +386,7 @@
5 'QtDesigner',
6 'QtDBUS',
7 'QtScript',
8+ 'QtXmlPatterns'
9 ]
10 pclessModules = [
11 'QtUiTools',
12
13=== added directory 'mixxx/res/html'
14=== added file 'mixxx/res/html/crates.html'
15--- mixxx/res/html/crates.html 1970-01-01 00:00:00 +0000
16+++ mixxx/res/html/crates.html 2010-01-05 04:00:30 +0000
17@@ -0,0 +1,12 @@
18+<h2>Crates</h2>
19+<table border="0" cellpadding="5">
20+ <tr>
21+ <td>
22+ <p>Crates are a great way to help organize the music you want to DJ with.</p>
23+ <p>Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested songs - Crates let you organize your music however you'd like!</p>
24+ </td>
25+ <td>
26+ <img src="qrc:/images/library/crates_art.png">
27+ </td>
28+ </tr>
29+</table>
30
31=== added file 'mixxx/res/html/playlists.html'
32--- mixxx/res/html/playlists.html 1970-01-01 00:00:00 +0000
33+++ mixxx/res/html/playlists.html 2010-01-05 04:00:30 +0000
34@@ -0,0 +1,12 @@
35+<h2>Playlists</h2>
36+<table border="0" cellpadding="5">
37+ <tr>
38+ <td>
39+ <p>Playlists are ordered lists of songs that allow you to plan your DJ sets.</p>
40+ <p>Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly.
41+ When using a playlist during a live DJ set, remember to always pay close attention to how your audience
42+ reacts to the music you've chosen to play. It may be necessary to skip some songs in your prepared
43+ playlist or add some different songs in order to maintain the energy of your audience.</p>
44+ </td>
45+ </tr>
46+</table>
47
48=== added directory 'mixxx/res/images/library'
49=== added file 'mixxx/res/images/library/crate_empty.png'
50Binary files mixxx/res/images/library/crate_empty.png 1970-01-01 00:00:00 +0000 and mixxx/res/images/library/crate_empty.png 2010-01-05 04:00:30 +0000 differ
51=== added file 'mixxx/res/images/library/crate_empty.svg'
52--- mixxx/res/images/library/crate_empty.svg 1970-01-01 00:00:00 +0000
53+++ mixxx/res/images/library/crate_empty.svg 2010-01-05 04:00:30 +0000
54@@ -0,0 +1,336 @@
55+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
56+<!-- Created with Inkscape (http://www.inkscape.org/) -->
57+<svg
58+ xmlns:dc="http://purl.org/dc/elements/1.1/"
59+ xmlns:cc="http://creativecommons.org/ns#"
60+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
61+ xmlns:svg="http://www.w3.org/2000/svg"
62+ xmlns="http://www.w3.org/2000/svg"
63+ xmlns:xlink="http://www.w3.org/1999/xlink"
64+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
65+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
66+ width="258.57001"
67+ height="401.31"
68+ id="svg2"
69+ sodipodi:version="0.32"
70+ inkscape:version="0.46"
71+ sodipodi:docname="crate_empty.svg"
72+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
73+ version="1.0">
74+ <defs
75+ id="defs4">
76+ <linearGradient
77+ id="linearGradient3536">
78+ <stop
79+ style="stop-color:#7a5b54;stop-opacity:1;"
80+ offset="0"
81+ id="stop3538" />
82+ <stop
83+ style="stop-color:#7a5b54;stop-opacity:0;"
84+ offset="1"
85+ id="stop3540" />
86+ </linearGradient>
87+ <linearGradient
88+ id="linearGradient3526">
89+ <stop
90+ style="stop-color:#677821;stop-opacity:1;"
91+ offset="0"
92+ id="stop3528" />
93+ <stop
94+ style="stop-color:#4b5718;stop-opacity:1;"
95+ offset="1"
96+ id="stop3530" />
97+ </linearGradient>
98+ <linearGradient
99+ id="linearGradient3518">
100+ <stop
101+ style="stop-color:#ca0000;stop-opacity:1;"
102+ offset="0"
103+ id="stop3520" />
104+ <stop
105+ style="stop-color:#6f0000;stop-opacity:1;"
106+ offset="1"
107+ id="stop3522" />
108+ </linearGradient>
109+ <linearGradient
110+ id="linearGradient3512">
111+ <stop
112+ id="stop3514"
113+ offset="0"
114+ style="stop-color:#000000;stop-opacity:1;" />
115+ <stop
116+ id="stop3516"
117+ offset="1"
118+ style="stop-color:#abc837;stop-opacity:1" />
119+ </linearGradient>
120+ <linearGradient
121+ id="linearGradient3502">
122+ <stop
123+ style="stop-color:#000000;stop-opacity:1;"
124+ offset="0"
125+ id="stop3504" />
126+ <stop
127+ style="stop-color:#000000;stop-opacity:0;"
128+ offset="1"
129+ id="stop3506" />
130+ </linearGradient>
131+ <inkscape:perspective
132+ sodipodi:type="inkscape:persp3d"
133+ inkscape:vp_x="0 : 526.18109 : 1"
134+ inkscape:vp_y="0 : 1000 : 0"
135+ inkscape:vp_z="744.09448 : 526.18109 : 1"
136+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
137+ id="perspective10" />
138+ <linearGradient
139+ inkscape:collect="always"
140+ xlink:href="#linearGradient3518"
141+ id="linearGradient3542"
142+ x1="124.75"
143+ y1="379.09375"
144+ x2="336.375"
145+ y2="379.09375"
146+ gradientUnits="userSpaceOnUse" />
147+ <linearGradient
148+ inkscape:collect="always"
149+ xlink:href="#linearGradient3518"
150+ id="linearGradient3588"
151+ gradientUnits="userSpaceOnUse"
152+ x1="242.43082"
153+ y1="314.79443"
154+ x2="242.43082"
155+ y2="654.55365"
156+ gradientTransform="translate(17.172593,12.121831)" />
157+ <filter
158+ inkscape:collect="always"
159+ id="filter3744"
160+ x="-0.036582921"
161+ width="1.0731658"
162+ y="-0.43410194"
163+ height="1.8682039">
164+ <feGaussianBlur
165+ inkscape:collect="always"
166+ stdDeviation="1.2256924"
167+ id="feGaussianBlur3746" />
168+ </filter>
169+ <filter
170+ inkscape:collect="always"
171+ id="filter3853"
172+ x="-0.039021783"
173+ width="1.0780436"
174+ y="-0.46304205"
175+ height="1.926084">
176+ <feGaussianBlur
177+ inkscape:collect="always"
178+ stdDeviation="1.3074053"
179+ id="feGaussianBlur3855" />
180+ </filter>
181+ </defs>
182+ <sodipodi:namedview
183+ id="base"
184+ pagecolor="#ffffff"
185+ bordercolor="#666666"
186+ borderopacity="1.0"
187+ gridtolerance="10000"
188+ guidetolerance="10"
189+ objecttolerance="10"
190+ inkscape:pageopacity="0.0"
191+ inkscape:pageshadow="2"
192+ inkscape:zoom="0.7"
193+ inkscape:cx="304.34974"
194+ inkscape:cy="338.68539"
195+ inkscape:document-units="px"
196+ inkscape:current-layer="layer1"
197+ showgrid="false"
198+ inkscape:window-width="1280"
199+ inkscape:window-height="951"
200+ inkscape:window-x="0"
201+ inkscape:window-y="25"
202+ showguides="true"
203+ inkscape:guide-bbox="true" />
204+ <metadata
205+ id="metadata7">
206+ <rdf:RDF>
207+ <cc:Work
208+ rdf:about="">
209+ <dc:format>image/svg+xml</dc:format>
210+ <dc:type
211+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
212+ </cc:Work>
213+ </rdf:RDF>
214+ </metadata>
215+ <g
216+ inkscape:label="Layer 1"
217+ inkscape:groupmode="layer"
218+ id="layer1"
219+ transform="translate(-118.66425,-285.66662)">
220+ <path
221+ id="rect3499"
222+ d="M 141.92259,327.05933 L 141.92259,666.49371 L 353.54759,666.49371 L 353.54759,327.05933 L 141.92259,327.05933 z M 247.89134,353.77808 C 271.54848,353.77809 290.73509,361.11576 290.73509,370.18433 C 290.73508,379.25289 271.54848,386.62183 247.89134,386.62183 C 224.23419,386.62184 205.01634,379.2529 205.01634,370.18433 C 205.01634,361.11575 224.2342,353.77808 247.89134,353.77808 z"
223+ style="fill:url(#linearGradient3588);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
224+ sodipodi:nodetypes="ccccccsssc" />
225+ <rect
226+ y="325.6969"
227+ x="140.54936"
228+ height="130.55753"
229+ width="215.14784"
230+ id="rect3165"
231+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:9.42503071;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
232+ <path
233+ transform="translate(-19.970264,-110.03484)"
234+ d="M 310.71429,480.21933 A 42.857143,16.428572 0 1 1 225,480.21933 A 42.857143,16.428572 0 1 1 310.71429,480.21933 z"
235+ sodipodi:ry="16.428572"
236+ sodipodi:rx="42.857143"
237+ sodipodi:cy="480.21933"
238+ sodipodi:cx="267.85715"
239+ id="path3383"
240+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
241+ sodipodi:type="arc" />
242+ <g
243+ id="g3616"
244+ style="fill:#cc0000"
245+ transform="translate(17.172593,12.121831)">
246+ <rect
247+ y="482.36218"
248+ x="309.28571"
249+ height="171.42857"
250+ width="27.142857"
251+ id="rect3456"
252+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
253+ <rect
254+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
255+ id="rect3458"
256+ width="28.392857"
257+ height="171.42857"
258+ x="123.57142"
259+ y="480.21933" />
260+ <path
261+ id="rect3211"
262+ d="M 123.5625,444.5 L 123.5625,487.375 L 187.84375,487.375 C 187.84375,478.30643 207.06161,470.9375 230.71875,470.9375 C 254.37589,470.93749 273.5625,478.30643 273.5625,487.375 L 340.71875,487.375 L 340.71875,444.5 L 123.5625,444.5 z"
263+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
264+ <rect
265+ y="629.3902"
266+ x="123.57142"
267+ height="25.114908"
268+ width="213.01093"
269+ id="rect3466"
270+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.00000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
271+ </g>
272+ <rect
273+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:9.42503071;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
274+ id="rect2383"
275+ width="215.14784"
276+ height="212.00354"
277+ x="140.54936"
278+ y="456.38293" />
279+ <g
280+ id="g3590"
281+ style="stroke:#2b0000;stroke-opacity:1"
282+ transform="translate(17.172593,12.121831)">
283+ <path
284+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
285+ d="M 151.66352,628.69422 L 311.30277,628.69422"
286+ id="path3468" />
287+ <g
288+ style="stroke:#2b0000;stroke-opacity:1"
289+ id="g3562">
290+ <g
291+ id="g3428"
292+ style="fill:#89a02c;stroke:#2b0000;stroke-opacity:1">
293+ <path
294+ sodipodi:nodetypes="cc"
295+ id="path3388"
296+ d="M 153.83385,486.64791 L 153.39832,630.15284"
297+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
298+ <path
299+ id="path3400"
300+ d="M 153.5432,488.69708 L 293.9544,629.1083"
301+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
302+ <path
303+ id="path3406"
304+ d="M 153.54319,567.48895 L 215.66756,629.61333"
305+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
306+ <path
307+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
308+ d="M 153.54318,605.36965 L 175.26146,627.08793"
309+ id="path3408" />
310+ <path
311+ id="path3418"
312+ d="M 153.54318,526.57776 L 254.55843,627.59301"
313+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
314+ <path
315+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
316+ d="M 203.04065,499.80872 L 309.61176,606.37982"
317+ id="path3420" />
318+ <path
319+ id="path3422"
320+ d="M 244.4569,501.82898 L 308.09652,565.46857"
321+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
322+ <path
323+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
324+ d="M 272.74117,489.20205 L 309.10666,525.56752"
325+ id="path3426" />
326+ </g>
327+ <g
328+ style="stroke:#2b0000;stroke-opacity:1"
329+ id="g3548">
330+ <g
331+ style="fill:#445016;stroke:#2b0000;stroke-opacity:1"
332+ transform="matrix(-1,0,0,1,463.15494,0)"
333+ id="g3438">
334+ <path
335+ sodipodi:nodetypes="cc"
336+ id="path3440"
337+ d="M 153.83388,486.64793 L 153.39835,630.15287"
338+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
339+ <path
340+ id="path3442"
341+ d="M 153.54319,488.69708 L 292.43917,627.59306"
342+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
343+ <path
344+ id="path3444"
345+ d="M 153.54318,567.48894 L 213.64725,627.59301"
346+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
347+ <path
348+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
349+ d="M 153.54318,605.36967 L 177.78684,629.61333"
350+ id="path3446" />
351+ <path
352+ id="path3448"
353+ d="M 153.54318,526.57775 L 255.56857,628.60315"
354+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
355+ <path
356+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
357+ d="M 203.04065,499.80872 L 309.61176,606.37982"
358+ id="path3450" />
359+ <path
360+ id="path3452"
361+ d="M 244.4569,501.82898 L 308.09652,565.46857"
362+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
363+ <path
364+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
365+ d="M 272.74117,489.20205 L 309.10666,525.56752"
366+ id="path3454" />
367+ </g>
368+ <path
369+ id="path3460"
370+ d="M 151.52098,487.27289 L 186.50204,487.27289"
371+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
372+ <path
373+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
374+ d="M 274.51264,487.27293 L 311.56965,487.27293"
375+ id="path3464" />
376+ <path
377+ transform="translate(-37.142857,6.6377796)"
378+ d="M 310.71429,480.21933 A 42.857143,16.428572 0 1 1 225,480.21933 A 42.857143,16.428572 0 1 1 310.71429,480.21933 z"
379+ sodipodi:ry="16.428572"
380+ sodipodi:rx="42.857143"
381+ sodipodi:cy="480.21933"
382+ sodipodi:cx="267.85715"
383+ id="path3534"
384+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
385+ sodipodi:type="arc" />
386+ </g>
387+ </g>
388+ </g>
389+ </g>
390+</svg>
391
392=== added file 'mixxx/res/images/library/crate_full.png'
393Binary files mixxx/res/images/library/crate_full.png 1970-01-01 00:00:00 +0000 and mixxx/res/images/library/crate_full.png 2010-01-05 04:00:30 +0000 differ
394=== added file 'mixxx/res/images/library/crate_full.svg'
395--- mixxx/res/images/library/crate_full.svg 1970-01-01 00:00:00 +0000
396+++ mixxx/res/images/library/crate_full.svg 2010-01-05 04:00:30 +0000
397@@ -0,0 +1,458 @@
398+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
399+<!-- Created with Inkscape (http://www.inkscape.org/) -->
400+<svg
401+ xmlns:dc="http://purl.org/dc/elements/1.1/"
402+ xmlns:cc="http://creativecommons.org/ns#"
403+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
404+ xmlns:svg="http://www.w3.org/2000/svg"
405+ xmlns="http://www.w3.org/2000/svg"
406+ xmlns:xlink="http://www.w3.org/1999/xlink"
407+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
408+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
409+ width="258.57001"
410+ height="401.31"
411+ id="svg2"
412+ sodipodi:version="0.32"
413+ inkscape:version="0.46"
414+ sodipodi:docname="crate_full.svg"
415+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
416+ version="1.0">
417+ <defs
418+ id="defs4">
419+ <linearGradient
420+ id="linearGradient3536">
421+ <stop
422+ style="stop-color:#7a5b54;stop-opacity:1;"
423+ offset="0"
424+ id="stop3538" />
425+ <stop
426+ style="stop-color:#7a5b54;stop-opacity:0;"
427+ offset="1"
428+ id="stop3540" />
429+ </linearGradient>
430+ <linearGradient
431+ id="linearGradient3526">
432+ <stop
433+ style="stop-color:#677821;stop-opacity:1;"
434+ offset="0"
435+ id="stop3528" />
436+ <stop
437+ style="stop-color:#4b5718;stop-opacity:1;"
438+ offset="1"
439+ id="stop3530" />
440+ </linearGradient>
441+ <linearGradient
442+ id="linearGradient3518">
443+ <stop
444+ style="stop-color:#ca0000;stop-opacity:1;"
445+ offset="0"
446+ id="stop3520" />
447+ <stop
448+ style="stop-color:#6f0000;stop-opacity:1;"
449+ offset="1"
450+ id="stop3522" />
451+ </linearGradient>
452+ <linearGradient
453+ id="linearGradient3512">
454+ <stop
455+ id="stop3514"
456+ offset="0"
457+ style="stop-color:#000000;stop-opacity:1;" />
458+ <stop
459+ id="stop3516"
460+ offset="1"
461+ style="stop-color:#abc837;stop-opacity:1" />
462+ </linearGradient>
463+ <linearGradient
464+ id="linearGradient3502">
465+ <stop
466+ style="stop-color:#000000;stop-opacity:1;"
467+ offset="0"
468+ id="stop3504" />
469+ <stop
470+ style="stop-color:#000000;stop-opacity:0;"
471+ offset="1"
472+ id="stop3506" />
473+ </linearGradient>
474+ <inkscape:perspective
475+ sodipodi:type="inkscape:persp3d"
476+ inkscape:vp_x="0 : 526.18109 : 1"
477+ inkscape:vp_y="0 : 1000 : 0"
478+ inkscape:vp_z="744.09448 : 526.18109 : 1"
479+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
480+ id="perspective10" />
481+ <linearGradient
482+ inkscape:collect="always"
483+ xlink:href="#linearGradient3518"
484+ id="linearGradient3542"
485+ x1="124.75"
486+ y1="379.09375"
487+ x2="336.375"
488+ y2="379.09375"
489+ gradientUnits="userSpaceOnUse" />
490+ <linearGradient
491+ inkscape:collect="always"
492+ xlink:href="#linearGradient3518"
493+ id="linearGradient3588"
494+ gradientUnits="userSpaceOnUse"
495+ x1="242.43082"
496+ y1="314.79443"
497+ x2="242.43082"
498+ y2="654.55365"
499+ gradientTransform="translate(17.172593,12.121831)" />
500+ <filter
501+ inkscape:collect="always"
502+ id="filter3744"
503+ x="-0.036582921"
504+ width="1.0731658"
505+ y="-0.43410194"
506+ height="1.8682039">
507+ <feGaussianBlur
508+ inkscape:collect="always"
509+ stdDeviation="1.2256924"
510+ id="feGaussianBlur3746" />
511+ </filter>
512+ <filter
513+ inkscape:collect="always"
514+ id="filter3853"
515+ x="-0.039021783"
516+ width="1.0780436"
517+ y="-0.46304205"
518+ height="1.926084">
519+ <feGaussianBlur
520+ inkscape:collect="always"
521+ stdDeviation="1.3074053"
522+ id="feGaussianBlur3855" />
523+ </filter>
524+ </defs>
525+ <sodipodi:namedview
526+ id="base"
527+ pagecolor="#ffffff"
528+ bordercolor="#666666"
529+ borderopacity="1.0"
530+ gridtolerance="10000"
531+ guidetolerance="10"
532+ objecttolerance="10"
533+ inkscape:pageopacity="0.0"
534+ inkscape:pageshadow="2"
535+ inkscape:zoom="0.7"
536+ inkscape:cx="304.34974"
537+ inkscape:cy="338.68539"
538+ inkscape:document-units="px"
539+ inkscape:current-layer="layer1"
540+ showgrid="false"
541+ inkscape:window-width="1280"
542+ inkscape:window-height="951"
543+ inkscape:window-x="0"
544+ inkscape:window-y="25"
545+ showguides="true"
546+ inkscape:guide-bbox="true" />
547+ <metadata
548+ id="metadata7">
549+ <rdf:RDF>
550+ <cc:Work
551+ rdf:about="">
552+ <dc:format>image/svg+xml</dc:format>
553+ <dc:type
554+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
555+ </cc:Work>
556+ </rdf:RDF>
557+ </metadata>
558+ <g
559+ inkscape:label="Layer 1"
560+ inkscape:groupmode="layer"
561+ id="layer1"
562+ transform="translate(-118.66425,-285.66662)">
563+ <path
564+ id="rect3499"
565+ d="M 141.92259,327.05933 L 141.92259,666.49371 L 353.54759,666.49371 L 353.54759,327.05933 L 141.92259,327.05933 z M 247.89134,353.77808 C 271.54848,353.77809 290.73509,361.11576 290.73509,370.18433 C 290.73508,379.25289 271.54848,386.62183 247.89134,386.62183 C 224.23419,386.62184 205.01634,379.2529 205.01634,370.18433 C 205.01634,361.11575 224.2342,353.77808 247.89134,353.77808 z"
566+ style="fill:url(#linearGradient3588);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
567+ sodipodi:nodetypes="ccccccsssc" />
568+ <rect
569+ y="325.6969"
570+ x="140.54936"
571+ height="130.55753"
572+ width="215.14784"
573+ id="rect3165"
574+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:9.42503071;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
575+ <path
576+ transform="translate(-19.970264,-110.03484)"
577+ d="M 310.71429,480.21933 A 42.857143,16.428572 0 1 1 225,480.21933 A 42.857143,16.428572 0 1 1 310.71429,480.21933 z"
578+ sodipodi:ry="16.428572"
579+ sodipodi:rx="42.857143"
580+ sodipodi:cy="480.21933"
581+ sodipodi:cx="267.85715"
582+ id="path3383"
583+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
584+ sodipodi:type="arc" />
585+ <g
586+ id="g3857"
587+ transform="translate(-280.82242,-46.467015)"
588+ style="stroke:#2e3436;stroke-opacity:1">
589+ <rect
590+ y="345.25546"
591+ x="429.31485"
592+ height="309.10669"
593+ width="202.0305"
594+ id="rect3624"
595+ style="opacity:1;fill:#f57900;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
596+ <path
597+ transform="translate(53.538085,243.44676)"
598+ d="M 513.15749,206.8645 A 35.355339,35.355339 0 1 1 442.44682,206.8645 A 35.355339,35.355339 0 1 1 513.15749,206.8645 z"
599+ sodipodi:ry="35.355339"
600+ sodipodi:rx="35.355339"
601+ sodipodi:cy="206.8645"
602+ sodipodi:cx="477.80215"
603+ id="path3638"
604+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
605+ sodipodi:type="arc" />
606+ <g
607+ id="g3748"
608+ style="stroke:#2e3436;stroke-opacity:1">
609+ <rect
610+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
611+ id="rect3642"
612+ width="87.88327"
613+ height="23.233509"
614+ x="444.46713"
615+ y="357.37723" />
616+ <text
617+ xml:space="preserve"
618+ style="font-size:8.7559185px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3853)"
619+ x="492.10425"
620+ y="340.93549"
621+ id="text3644"
622+ transform="scale(0.9160689,1.091621)"><tspan
623+ sodipodi:role="line"
624+ id="tspan3646"
625+ x="492.10425"
626+ y="340.93549">tiesto - sucks balls</tspan></text>
627+ </g>
628+ </g>
629+ <g
630+ style="stroke:#2e3436;stroke-opacity:1"
631+ transform="translate(-281.83258,-18.182744)"
632+ id="g3865">
633+ <rect
634+ style="opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
635+ id="rect3867"
636+ width="202.0305"
637+ height="309.10669"
638+ x="429.31485"
639+ y="345.25546" />
640+ <path
641+ sodipodi:type="arc"
642+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
643+ id="path3869"
644+ sodipodi:cx="477.80215"
645+ sodipodi:cy="206.8645"
646+ sodipodi:rx="35.355339"
647+ sodipodi:ry="35.355339"
648+ d="M 513.15749,206.8645 A 35.355339,35.355339 0 1 1 442.44682,206.8645 A 35.355339,35.355339 0 1 1 513.15749,206.8645 z"
649+ transform="translate(53.538085,243.44676)" />
650+ <g
651+ style="stroke:#2e3436;stroke-opacity:1"
652+ id="g3871">
653+ <rect
654+ y="357.37723"
655+ x="444.46713"
656+ height="23.233509"
657+ width="87.88327"
658+ id="rect3873"
659+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
660+ <text
661+ transform="scale(0.9160689,1.091621)"
662+ id="text3875"
663+ y="340.93549"
664+ x="492.10425"
665+ style="font-size:8.7559185px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3853)"
666+ xml:space="preserve"><tspan
667+ y="340.93549"
668+ x="492.10425"
669+ id="tspan3877"
670+ sodipodi:role="line">tiesto - sucks balls</tspan></text>
671+ </g>
672+ </g>
673+ <g
674+ id="g3879"
675+ transform="translate(-278.29662,48.2248)"
676+ style="stroke:#2e3436;stroke-opacity:1">
677+ <rect
678+ y="345.25546"
679+ x="429.31485"
680+ height="259.60922"
681+ width="202.0305"
682+ id="rect3881"
683+ style="opacity:1;fill:#4e9a06;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
684+ <g
685+ id="g3885"
686+ style="stroke:#2e3436;stroke-opacity:1">
687+ <rect
688+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
689+ id="rect3887"
690+ width="87.88327"
691+ height="23.233509"
692+ x="444.46713"
693+ y="357.37723" />
694+ <text
695+ xml:space="preserve"
696+ style="font-size:8.7559185px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3853)"
697+ x="492.10425"
698+ y="340.93549"
699+ id="text3889"
700+ transform="scale(0.9160689,1.091621)"><tspan
701+ sodipodi:role="line"
702+ id="tspan3891"
703+ x="492.10425"
704+ y="340.93549">tiesto - sucks balls</tspan></text>
705+ </g>
706+ </g>
707+ <g
708+ id="g3616"
709+ style="fill:#cc0000"
710+ transform="translate(17.172593,12.121831)">
711+ <rect
712+ y="482.36218"
713+ x="309.28571"
714+ height="171.42857"
715+ width="27.142857"
716+ id="rect3456"
717+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
718+ <rect
719+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
720+ id="rect3458"
721+ width="28.392857"
722+ height="171.42857"
723+ x="123.57142"
724+ y="480.21933" />
725+ <path
726+ id="rect3211"
727+ d="M 123.5625,444.5 L 123.5625,487.375 L 187.84375,487.375 C 187.84375,478.30643 207.06161,470.9375 230.71875,470.9375 C 254.37589,470.93749 273.5625,478.30643 273.5625,487.375 L 340.71875,487.375 L 340.71875,444.5 L 123.5625,444.5 z"
728+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
729+ <rect
730+ y="629.3902"
731+ x="123.57142"
732+ height="25.114908"
733+ width="213.01093"
734+ id="rect3466"
735+ style="opacity:1;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.00000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
736+ </g>
737+ <rect
738+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:9.42503071;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
739+ id="rect2383"
740+ width="215.14784"
741+ height="212.00354"
742+ x="140.54936"
743+ y="456.38293" />
744+ <g
745+ id="g3590"
746+ style="stroke:#2b0000;stroke-opacity:1"
747+ transform="translate(17.172593,12.121831)">
748+ <path
749+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
750+ d="M 151.66352,628.69422 L 311.30277,628.69422"
751+ id="path3468" />
752+ <g
753+ style="stroke:#2b0000;stroke-opacity:1"
754+ id="g3562">
755+ <g
756+ id="g3428"
757+ style="fill:#89a02c;stroke:#2b0000;stroke-opacity:1">
758+ <path
759+ sodipodi:nodetypes="cc"
760+ id="path3388"
761+ d="M 153.83385,486.64791 L 153.39832,630.15284"
762+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
763+ <path
764+ id="path3400"
765+ d="M 153.5432,488.69708 L 293.9544,629.1083"
766+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
767+ <path
768+ id="path3406"
769+ d="M 153.54319,567.48895 L 215.66756,629.61333"
770+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
771+ <path
772+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
773+ d="M 153.54318,605.36965 L 175.26146,627.08793"
774+ id="path3408" />
775+ <path
776+ id="path3418"
777+ d="M 153.54318,526.57776 L 254.55843,627.59301"
778+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
779+ <path
780+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
781+ d="M 203.04065,499.80872 L 309.61176,606.37982"
782+ id="path3420" />
783+ <path
784+ id="path3422"
785+ d="M 244.4569,501.82898 L 308.09652,565.46857"
786+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
787+ <path
788+ style="fill:#89a02c;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
789+ d="M 272.74117,489.20205 L 309.10666,525.56752"
790+ id="path3426" />
791+ </g>
792+ <g
793+ style="stroke:#2b0000;stroke-opacity:1"
794+ id="g3548">
795+ <g
796+ style="fill:#445016;stroke:#2b0000;stroke-opacity:1"
797+ transform="matrix(-1,0,0,1,463.15494,0)"
798+ id="g3438">
799+ <path
800+ sodipodi:nodetypes="cc"
801+ id="path3440"
802+ d="M 153.83388,486.64793 L 153.39835,630.15287"
803+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
804+ <path
805+ id="path3442"
806+ d="M 153.54319,488.69708 L 292.43917,627.59306"
807+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
808+ <path
809+ id="path3444"
810+ d="M 153.54318,567.48894 L 213.64725,627.59301"
811+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
812+ <path
813+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
814+ d="M 153.54318,605.36967 L 177.78684,629.61333"
815+ id="path3446" />
816+ <path
817+ id="path3448"
818+ d="M 153.54318,526.57775 L 255.56857,628.60315"
819+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
820+ <path
821+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
822+ d="M 203.04065,499.80872 L 309.61176,606.37982"
823+ id="path3450" />
824+ <path
825+ id="path3452"
826+ d="M 244.4569,501.82898 L 308.09652,565.46857"
827+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
828+ <path
829+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:3.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
830+ d="M 272.74117,489.20205 L 309.10666,525.56752"
831+ id="path3454" />
832+ </g>
833+ <path
834+ id="path3460"
835+ d="M 151.52098,487.27289 L 186.50204,487.27289"
836+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
837+ <path
838+ style="fill:#445016;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
839+ d="M 274.51264,487.27293 L 311.56965,487.27293"
840+ id="path3464" />
841+ <path
842+ transform="translate(-37.142857,6.6377796)"
843+ d="M 310.71429,480.21933 A 42.857143,16.428572 0 1 1 225,480.21933 A 42.857143,16.428572 0 1 1 310.71429,480.21933 z"
844+ sodipodi:ry="16.428572"
845+ sodipodi:rx="42.857143"
846+ sodipodi:cy="480.21933"
847+ sodipodi:cx="267.85715"
848+ id="path3534"
849+ style="opacity:1;fill:#454837;fill-opacity:0;fill-rule:evenodd;stroke:#2b0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
850+ sodipodi:type="arc" />
851+ </g>
852+ </g>
853+ </g>
854+ </g>
855+</svg>
856
857=== added file 'mixxx/res/images/library/crates_art.png'
858Binary files mixxx/res/images/library/crates_art.png 1970-01-01 00:00:00 +0000 and mixxx/res/images/library/crates_art.png 2010-01-05 04:00:30 +0000 differ
859=== added file 'mixxx/res/images/library/rhythmbox.png'
860Binary files mixxx/res/images/library/rhythmbox.png 1970-01-01 00:00:00 +0000 and mixxx/res/images/library/rhythmbox.png 2010-01-05 04:00:30 +0000 differ
861=== modified file 'mixxx/res/midi/Behringer BCD3000.midi.xml'
862--- mixxx/res/midi/Behringer BCD3000.midi.xml 2009-04-18 20:23:29 +0000
863+++ mixxx/res/midi/Behringer BCD3000.midi.xml 2010-01-05 04:00:30 +0000
864@@ -1,410 +1,593 @@
865 <?xml version="1.0" encoding="utf-8"?>
866-<MixxxMIDIPreset schemaVersion="1" mixxxVersion="1.6.2+">
867+<MixxxMIDIPreset schemaVersion="1" mixxxVersion="1.7.1">
868 <info>
869 <name>Behringer BCD3000.midi.xml</name>
870- <author>Auto-converted by madjesta's PHP script</author>
871- <description>Automatic conversion of the file Behringer BCD3000.midi.xml for Mixxx 1.6.2</description>
872+ <author>Aposto</author>
873+ <description>Conversion of the file Behringer BCD3000.midi.xml for Mixxx 1.6.2</description>
874 </info>
875 <controller id="Behringer BCD3000" port="Port">
876+ <scriptfiles>
877+ <file filename="Behringer-BCD3000-scripts.js" functionprefix="BCD3000"/>
878+ </scriptfiles>
879 <controls>
880- <control>
881- <group>[Master]</group>
882- <key>crossfader</key>
883- <status>0xB0</status>
884- <midino>0x01</midino>
885- </control>
886- <control>
887- <group>[Master]</group>
888- <key>headMix</key>
889- <status>0xB0</status>
890- <midino>0x11</midino>
891- </control>
892- <control>
893- <group>[Channel1]</group>
894- <key>play</key>
895- <status>0x90</status>
896- <midino>0x12</midino>
897- </control>
898- <control>
899- <group>[Channel1]</group>
900- <key>play</key>
901- <status>0x80</status>
902- <midino>0x12</midino>
903- </control>
904- <control>
905- <group>[Channel1]</group>
906- <key>cue_gotoandstop</key>
907- <status>0x90</status>
908- <midino>0x13</midino>
909- </control>
910- <control>
911- <group>[Channel1]</group>
912- <key>cue_gotoandstop</key>
913- <status>0x80</status>
914- <midino>0x13</midino>
915- </control>
916- <control>
917- <group>[Channel1]</group>
918- <key>back</key>
919- <status>0x90</status>
920- <midino>0x00</midino>
921- </control>
922- <control>
923- <group>[Channel1]</group>
924- <key>back</key>
925- <status>0x80</status>
926- <midino>0x00</midino>
927- </control>
928- <control>
929- <group>[Channel1]</group>
930- <key>fwd</key>
931- <status>0x90</status>
932- <midino>0x01</midino>
933- </control>
934- <control>
935- <group>[Channel1]</group>
936- <key>fwd</key>
937- <status>0x80</status>
938- <midino>0x01</midino>
939- </control>
940- <control>
941- <group>[Channel1]</group>
942- <key>volume</key>
943- <status>0xB0</status>
944- <midino>0x00</midino>
945- </control>
946- <control>
947- <group>[Channel1]</group>
948- <key>rate</key>
949- <status>0xB0</status>
950- <midino>0x0b</midino>
951- </control>
952- <control>
953- <group>[Channel1]</group>
954- <key>pfl</key>
955- <status>0x90</status>
956- <midino>0x23</midino>
957- </control>
958- <control>
959- <group>[Channel1]</group>
960- <key>pfl</key>
961- <status>0x80</status>
962- <midino>0x23</midino>
963- </control>
964- <control>
965- <group>[Channel1]</group>
966- <key>filterLow</key>
967- <status>0xB0</status>
968- <midino>0x03</midino>
969- </control>
970- <control>
971- <group>[Channel1]</group>
972- <key>filterMid</key>
973- <status>0xB0</status>
974- <midino>0x04</midino>
975- </control>
976- <control>
977- <group>[Channel1]</group>
978- <key>filterHigh</key>
979- <status>0xB0</status>
980- <midino>0x05</midino>
981- </control>
982- <control>
983- <group>[Channel1]</group>
984- <key>filterLowKill</key>
985- <status>0x90</status>
986- <midino>0x0c</midino>
987- </control>
988- <control>
989- <group>[Channel1]</group>
990- <key>filterLowKill</key>
991- <status>0x80</status>
992- <midino>0x0c</midino>
993- </control>
994- <control>
995- <group>[Channel1]</group>
996- <key>filterMidKill</key>
997- <status>0x90</status>
998- <midino>0x0d</midino>
999- </control>
1000- <control>
1001- <group>[Channel1]</group>
1002- <key>filterMidKill</key>
1003- <status>0x80</status>
1004- <midino>0x0d</midino>
1005- </control>
1006- <control>
1007- <group>[Channel1]</group>
1008- <key>filterHighKill</key>
1009- <status>0x90</status>
1010- <midino>0x0e</midino>
1011- </control>
1012- <control>
1013- <group>[Channel1]</group>
1014- <key>filterHighKill</key>
1015- <status>0x80</status>
1016- <midino>0x0e</midino>
1017- </control>
1018- <control>
1019- <group>[Channel1]</group>
1020- <key>pregain</key>
1021- <status>0xB0</status>
1022- <midino>0x06</midino>
1023- </control>
1024- <control>
1025- <group>[Channel1]</group>
1026- <key>rate_temp_up</key>
1027- <status>0x90</status>
1028- <midino>0x03</midino>
1029- </control>
1030- <control>
1031- <group>[Channel1]</group>
1032- <key>rate_temp_up</key>
1033- <status>0x80</status>
1034- <midino>0x03</midino>
1035- </control>
1036- <control>
1037- <group>[Channel1]</group>
1038- <key>rate_temp_down</key>
1039- <status>0x90</status>
1040- <midino>0x02</midino>
1041- </control>
1042- <control>
1043- <group>[Channel1]</group>
1044- <key>rate_temp_down</key>
1045- <status>0x80</status>
1046- <midino>0x02</midino>
1047- </control>
1048- <control>
1049- <group>[Channel1]</group>
1050- <key>beatsync</key>
1051- <status>0x90</status>
1052- <midino>0x10</midino>
1053- </control>
1054- <control>
1055- <group>[Channel1]</group>
1056- <key>beatsync</key>
1057- <status>0x80</status>
1058- <midino>0x10</midino>
1059- </control>
1060- <control>
1061- <group>[Channel1]</group>
1062- <key>cue_set</key>
1063- <status>0x90</status>
1064- <midino>0x04</midino>
1065- </control>
1066- <control>
1067- <group>[Channel1]</group>
1068- <key>cue_set</key>
1069- <status>0x80</status>
1070- <midino>0x04</midino>
1071- </control>
1072- <control>
1073- <group>[Channel2]</group>
1074- <key>play</key>
1075- <status>0x90</status>
1076- <midino>0x1a</midino>
1077- </control>
1078- <control>
1079- <group>[Channel2]</group>
1080- <key>play</key>
1081- <status>0x80</status>
1082- <midino>0x1a</midino>
1083- </control>
1084- <control>
1085- <group>[Channel2]</group>
1086- <key>cue_gotoandstop</key>
1087- <status>0x90</status>
1088- <midino>0x1b</midino>
1089- </control>
1090- <control>
1091- <group>[Channel2]</group>
1092- <key>cue_gotoandstop</key>
1093- <status>0x80</status>
1094- <midino>0x1b</midino>
1095- </control>
1096- <control>
1097- <group>[Channel2]</group>
1098- <key>back</key>
1099- <status>0x90</status>
1100- <midino>0x06</midino>
1101- </control>
1102- <control>
1103- <group>[Channel2]</group>
1104- <key>back</key>
1105- <status>0x80</status>
1106- <midino>0x06</midino>
1107- </control>
1108- <control>
1109- <group>[Channel2]</group>
1110- <key>fwd</key>
1111- <status>0x90</status>
1112- <midino>0x07</midino>
1113- </control>
1114- <control>
1115- <group>[Channel2]</group>
1116- <key>fwd</key>
1117- <status>0x80</status>
1118- <midino>0x07</midino>
1119- </control>
1120- <control>
1121- <group>[Channel2]</group>
1122- <key>volume</key>
1123- <status>0xB0</status>
1124- <midino>0x02</midino>
1125- </control>
1126- <control>
1127- <group>[Channel2]</group>
1128- <key>rate</key>
1129- <status>0xB0</status>
1130- <midino>0x0c</midino>
1131- </control>
1132- <control>
1133- <group>[Channel2]</group>
1134- <key>pfl</key>
1135- <status>0x90</status>
1136- <midino>0x24</midino>
1137- </control>
1138- <control>
1139- <group>[Channel2]</group>
1140- <key>pfl</key>
1141- <status>0x80</status>
1142- <midino>0x24</midino>
1143- </control>
1144- <control>
1145- <group>[Channel2]</group>
1146- <key>filterLow</key>
1147- <status>0xB0</status>
1148- <midino>0x07</midino>
1149- </control>
1150- <control>
1151- <group>[Channel2]</group>
1152- <key>filterMid</key>
1153- <status>0xB0</status>
1154- <midino>0x08</midino>
1155- </control>
1156- <control>
1157- <group>[Channel2]</group>
1158- <key>filterHigh</key>
1159- <status>0xB0</status>
1160- <midino>0x09</midino>
1161- </control>
1162- <control>
1163- <group>[Channel2]</group>
1164- <key>filterLowKill</key>
1165- <status>0x90</status>
1166- <midino>0x14</midino>
1167- </control>
1168- <control>
1169- <group>[Channel2]</group>
1170- <key>filterLowKill</key>
1171- <status>0x80</status>
1172- <midino>0x14</midino>
1173- </control>
1174- <control>
1175- <group>[Channel2]</group>
1176- <key>filterMidKill</key>
1177- <status>0x90</status>
1178- <midino>0x15</midino>
1179- </control>
1180- <control>
1181- <group>[Channel2]</group>
1182- <key>filterMidKill</key>
1183- <status>0x80</status>
1184- <midino>0x15</midino>
1185- </control>
1186- <control>
1187- <group>[Channel2]</group>
1188- <key>filterHighKill</key>
1189- <status>0x90</status>
1190- <midino>0x16</midino>
1191- </control>
1192- <control>
1193- <group>[Channel2]</group>
1194- <key>filterHighKill</key>
1195- <status>0x80</status>
1196- <midino>0x16</midino>
1197- </control>
1198- <control>
1199- <group>[Channel2]</group>
1200- <key>pregain</key>
1201- <status>0xB0</status>
1202- <midino>0x0a</midino>
1203- </control>
1204- <control>
1205- <group>[Channel2]</group>
1206- <key>rate_temp_up</key>
1207- <status>0x90</status>
1208- <midino>0x08</midino>
1209- </control>
1210- <control>
1211- <group>[Channel2]</group>
1212- <key>rate_temp_up</key>
1213- <status>0x80</status>
1214- <midino>0x08</midino>
1215- </control>
1216- <control>
1217- <group>[Channel2]</group>
1218- <key>rate_temp_down</key>
1219- <status>0x90</status>
1220- <midino>0x09</midino>
1221- </control>
1222- <control>
1223- <group>[Channel2]</group>
1224- <key>rate_temp_down</key>
1225- <status>0x80</status>
1226- <midino>0x09</midino>
1227- </control>
1228- <control>
1229- <group>[Channel2]</group>
1230- <key>beatsync</key>
1231- <status>0x90</status>
1232- <midino>0x18</midino>
1233- </control>
1234- <control>
1235- <group>[Channel2]</group>
1236- <key>beatsync</key>
1237- <status>0x80</status>
1238- <midino>0x18</midino>
1239- </control>
1240- <control>
1241- <group>[Channel2]</group>
1242- <key>cue_set</key>
1243- <status>0x90</status>
1244- <midino>0x0a</midino>
1245- </control>
1246- <control>
1247- <group>[Channel2]</group>
1248- <key>cue_set</key>
1249- <status>0x80</status>
1250- <midino>0x0a</midino>
1251- </control>
1252- <control>
1253- <group>[Channel1]</group>
1254- <key>wheel</key>
1255- <status>0xB0</status>
1256- <midino>0x13</midino>
1257- <options>
1258-
1259- </options>
1260- <sensitivity>30</sensitivity>
1261- <translations>
1262-
1263- </translations>
1264- </control>
1265- <control>
1266- <group>[Channel2]</group>
1267- <key>wheel</key>
1268- <status>0xB0</status>
1269- <midino>0x12</midino>
1270- <options>
1271-
1272- </options>
1273- <sensitivity>30</sensitivity>
1274- <translations>
1275-
1276- </translations>
1277- </control>
1278+ <control>
1279+ <group>[Master]</group>
1280+ <key>crossfader</key>
1281+ <status>0xB0</status>
1282+ <midino>0x01</midino>
1283+ </control>
1284+ <control>
1285+ <group>[Master]</group>
1286+ <key>headMix</key>
1287+ <status>0xB0</status>
1288+ <midino>0x11</midino>
1289+ </control>
1290+ <control>
1291+ <group>[Channel1]</group>
1292+ <key>play</key>
1293+ <status>0x90</status>
1294+ <midino>0x12</midino>
1295+ </control>
1296+ <control>
1297+ <group>[Channel1]</group>
1298+ <key>play</key>
1299+ <status>0x80</status>
1300+ <midino>0x12</midino>
1301+ </control>
1302+ <control>
1303+ <group>[Channel1]</group>
1304+ <key>BCD3000.scratch1</key>
1305+ <status>0x90</status>
1306+ <midino>0x11</midino>
1307+ <options>
1308+ <Script-Binding/>
1309+ </options>
1310+ </control>
1311+ <control>
1312+ <group>[Channel1]</group>
1313+ <key>cue_gotoandstop</key>
1314+ <status>0x90</status>
1315+ <midino>0x13</midino>
1316+ </control>
1317+ <control>
1318+ <group>[Channel1]</group>
1319+ <key>cue_gotoandstop</key>
1320+ <status>0x80</status>
1321+ <midino>0x13</midino>
1322+ </control>
1323+ <control>
1324+ <group>[Channel1]</group>
1325+ <key>back</key>
1326+ <status>0x90</status>
1327+ <midino>0x00</midino>
1328+ </control>
1329+ <control>
1330+ <group>[Channel1]</group>
1331+ <key>back</key>
1332+ <status>0x80</status>
1333+ <midino>0x00</midino>
1334+ </control>
1335+ <control>
1336+ <group>[Channel1]</group>
1337+ <key>fwd</key>
1338+ <status>0x90</status>
1339+ <midino>0x01</midino>
1340+ </control>
1341+ <control>
1342+ <group>[Channel1]</group>
1343+ <key>fwd</key>
1344+ <status>0x80</status>
1345+ <midino>0x01</midino>
1346+ </control>
1347+ <control>
1348+ <group>[Channel1]</group>
1349+ <key>volume</key>
1350+ <status>0xB0</status>
1351+ <midino>0x00</midino>
1352+ </control>
1353+ <control>
1354+ <group>[Channel1]</group>
1355+ <key>rate</key>
1356+ <status>0xB0</status>
1357+ <midino>0x0b</midino>
1358+ </control>
1359+ <control>
1360+ <group>[Channel1]</group>
1361+ <key>pfl</key>
1362+ <status>0x90</status>
1363+ <midino>0x23</midino>
1364+ </control>
1365+ <control>
1366+ <group>[Channel1]</group>
1367+ <key>pfl</key>
1368+ <status>0x80</status>
1369+ <midino>0x23</midino>
1370+ </control>
1371+ <control>
1372+ <group>[Channel1]</group>
1373+ <key>filterLow</key>
1374+ <status>0xB0</status>
1375+ <midino>0x03</midino>
1376+ </control>
1377+ <control>
1378+ <group>[Channel1]</group>
1379+ <key>filterMid</key>
1380+ <status>0xB0</status>
1381+ <midino>0x04</midino>
1382+ </control>
1383+ <control>
1384+ <group>[Channel1]</group>
1385+ <key>filterHigh</key>
1386+ <status>0xB0</status>
1387+ <midino>0x05</midino>
1388+ </control>
1389+ <control>
1390+ <group>[Channel1]</group>
1391+ <key>filterLowKill</key>
1392+ <status>0x90</status>
1393+ <midino>0x0c</midino>
1394+ </control>
1395+ <control>
1396+ <group>[Channel1]</group>
1397+ <key>filterLowKill</key>
1398+ <status>0x80</status>
1399+ <midino>0x0c</midino>
1400+ </control>
1401+ <control>
1402+ <group>[Channel1]</group>
1403+ <key>filterMidKill</key>
1404+ <status>0x90</status>
1405+ <midino>0x0d</midino>
1406+ </control>
1407+ <control>
1408+ <group>[Channel1]</group>
1409+ <key>filterMidKill</key>
1410+ <status>0x80</status>
1411+ <midino>0x0d</midino>
1412+ </control>
1413+ <control>
1414+ <group>[Channel1]</group>
1415+ <key>filterHighKill</key>
1416+ <status>0x90</status>
1417+ <midino>0x0e</midino>
1418+ </control>
1419+ <control>
1420+ <group>[Channel1]</group>
1421+ <key>filterHighKill</key>
1422+ <status>0x80</status>
1423+ <midino>0x0e</midino>
1424+ </control>
1425+ <control>
1426+ <group>[Channel1]</group>
1427+ <key>pregain</key>
1428+ <status>0xB0</status>
1429+ <midino>0x06</midino>
1430+ </control>
1431+ <control>
1432+ <group>[Channel1]</group>
1433+ <key>rate_temp_up</key>
1434+ <status>0x90</status>
1435+ <midino>0x03</midino>
1436+ </control>
1437+ <control>
1438+ <group>[Channel1]</group>
1439+ <key>rate_temp_up</key>
1440+ <status>0x80</status>
1441+ <midino>0x03</midino>
1442+ </control>
1443+ <control>
1444+ <group>[Channel1]</group>
1445+ <key>rate_temp_down</key>
1446+ <status>0x90</status>
1447+ <midino>0x02</midino>
1448+ </control>
1449+ <control>
1450+ <group>[Channel1]</group>
1451+ <key>rate_temp_down</key>
1452+ <status>0x80</status>
1453+ <midino>0x02</midino>
1454+ </control>
1455+ <control>
1456+ <group>[Channel1]</group>
1457+ <key>rate_perm_up</key>
1458+ <status>0x90</status>
1459+ <midino>0x05</midino>
1460+ </control>
1461+ <control>
1462+ <group>[Channel1]</group>
1463+ <key>rate_prem_up</key>
1464+ <status>0x80</status>
1465+ <midino>0x05</midino>
1466+ </control>
1467+ <control>
1468+ <group>[Channel1]</group>
1469+ <key>rate_perm_down</key>
1470+ <status>0x90</status>
1471+ <midino>0x0F</midino>
1472+ </control>
1473+ <control>
1474+ <group>[Channel1]</group>
1475+ <key>rate_perm_down</key>
1476+ <status>0x80</status>
1477+ <midino>0x0F</midino>
1478+ </control>
1479+ <control>
1480+ <group>[Channel1]</group>
1481+ <key>beatsync</key>
1482+ <status>0x90</status>
1483+ <midino>0x10</midino>
1484+ </control>
1485+ <control>
1486+ <group>[Channel1]</group>
1487+ <key>beatsync</key>
1488+ <status>0x80</status>
1489+ <midino>0x10</midino>
1490+ </control>
1491+ <control>
1492+ <group>[Channel1]</group>
1493+ <key>cue_set</key>
1494+ <status>0x90</status>
1495+ <midino>0x04</midino>
1496+ </control>
1497+ <control>
1498+ <group>[Channel1]</group>
1499+ <key>cue_set</key>
1500+ <status>0x80</status>
1501+ <midino>0x04</midino>
1502+ </control>
1503+ <control>
1504+ <group>[Channel2]</group>
1505+ <key>play</key>
1506+ <status>0x90</status>
1507+ <midino>0x1a</midino>
1508+ </control>
1509+ <control>
1510+ <group>[Channel2]</group>
1511+ <key>play</key>
1512+ <status>0x80</status>
1513+ <midino>0x1a</midino>
1514+ </control>
1515+ <control>
1516+ <group>[Channel2]</group>
1517+ <key>BCD3000.scratch2</key>
1518+ <status>0x90</status>
1519+ <midino>0x19</midino>
1520+ <options>
1521+ <Script-Binding/>
1522+ </options>
1523+ </control>
1524+ <control>
1525+ <group>[Channel2]</group>
1526+ <key>cue_gotoandstop</key>
1527+ <status>0x90</status>
1528+ <midino>0x1b</midino>
1529+ </control>
1530+ <control>
1531+ <group>[Channel2]</group>
1532+ <key>cue_gotoandstop</key>
1533+ <status>0x80</status>
1534+ <midino>0x1b</midino>
1535+ </control>
1536+ <control>
1537+ <group>[Channel2]</group>
1538+ <key>back</key>
1539+ <status>0x90</status>
1540+ <midino>0x06</midino>
1541+ </control>
1542+ <control>
1543+ <group>[Channel2]</group>
1544+ <key>back</key>
1545+ <status>0x80</status>
1546+ <midino>0x06</midino>
1547+ </control>
1548+ <control>
1549+ <group>[Channel2]</group>
1550+ <key>fwd</key>
1551+ <status>0x90</status>
1552+ <midino>0x07</midino>
1553+ </control>
1554+ <control>
1555+ <group>[Channel2]</group>
1556+ <key>fwd</key>
1557+ <status>0x80</status>
1558+ <midino>0x07</midino>
1559+ </control>
1560+ <control>
1561+ <group>[Channel2]</group>
1562+ <key>volume</key>
1563+ <status>0xB0</status>
1564+ <midino>0x02</midino>
1565+ </control>
1566+ <control>
1567+ <group>[Channel2]</group>
1568+ <key>rate</key>
1569+ <status>0xB0</status>
1570+ <midino>0x0c</midino>
1571+ </control>
1572+ <control>
1573+ <group>[Channel2]</group>
1574+ <key>pfl</key>
1575+ <status>0x90</status>
1576+ <midino>0x24</midino>
1577+ </control>
1578+ <control>
1579+ <group>[Channel2]</group>
1580+ <key>pfl</key>
1581+ <status>0x80</status>
1582+ <midino>0x24</midino>
1583+ </control>
1584+ <control>
1585+ <group>[Channel2]</group>
1586+ <key>filterLow</key>
1587+ <status>0xB0</status>
1588+ <midino>0x07</midino>
1589+ </control>
1590+ <control>
1591+ <group>[Channel2]</group>
1592+ <key>filterMid</key>
1593+ <status>0xB0</status>
1594+ <midino>0x08</midino>
1595+ </control>
1596+ <control>
1597+ <group>[Channel2]</group>
1598+ <key>filterHigh</key>
1599+ <status>0xB0</status>
1600+ <midino>0x09</midino>
1601+ </control>
1602+ <control>
1603+ <group>[Channel2]</group>
1604+ <key>filterLowKill</key>
1605+ <status>0x90</status>
1606+ <midino>0x14</midino>
1607+ </control>
1608+ <control>
1609+ <group>[Channel2]</group>
1610+ <key>filterLowKill</key>
1611+ <status>0x80</status>
1612+ <midino>0x14</midino>
1613+ </control>
1614+ <control>
1615+ <group>[Channel2]</group>
1616+ <key>filterMidKill</key>
1617+ <status>0x90</status>
1618+ <midino>0x15</midino>
1619+ </control>
1620+ <control>
1621+ <group>[Channel2]</group>
1622+ <key>filterMidKill</key>
1623+ <status>0x80</status>
1624+ <midino>0x15</midino>
1625+ </control>
1626+ <control>
1627+ <group>[Channel2]</group>
1628+ <key>filterHighKill</key>
1629+ <status>0x90</status>
1630+ <midino>0x16</midino>
1631+ </control>
1632+ <control>
1633+ <group>[Channel2]</group>
1634+ <key>filterHighKill</key>
1635+ <status>0x80</status>
1636+ <midino>0x16</midino>
1637+ </control>
1638+ <control>
1639+ <group>[Channel2]</group>
1640+ <key>pregain</key>
1641+ <status>0xB0</status>
1642+ <midino>0x0a</midino>
1643+ </control>
1644+ <control>
1645+ <group>[Channel2]</group>
1646+ <key>rate_temp_up</key>
1647+ <status>0x90</status>
1648+ <midino>0x09</midino>
1649+ </control>
1650+ <control>
1651+ <group>[Channel2]</group>
1652+ <key>rate_temp_up</key>
1653+ <status>0x80</status>
1654+ <midino>0x09</midino>
1655+ </control>
1656+ <control>
1657+ <group>[Channel2]</group>
1658+ <key>rate_temp_down</key>
1659+ <status>0x90</status>
1660+ <midino>0x08</midino>
1661+ </control>
1662+ <control>
1663+ <group>[Channel2]</group>
1664+ <key>rate_temp_down</key>
1665+ <status>0x80</status>
1666+ <midino>0x08</midino>
1667+ </control>
1668+ <control>
1669+ <group>[Channel2]</group>
1670+ <key>rate_perm_up</key>
1671+ <status>0x90</status>
1672+ <midino>0x0B</midino>
1673+ </control>
1674+ <control>
1675+ <group>[Channel2]</group>
1676+ <key>rate_perm_up</key>
1677+ <status>0x80</status>
1678+ <midino>0x0B</midino>
1679+ </control>
1680+ <control>
1681+ <group>[Channel2]</group>
1682+ <key>rate_perm_down</key>
1683+ <status>0x90</status>
1684+ <midino>0x17</midino>
1685+ </control>
1686+ <control>
1687+ <group>[Channel2]</group>
1688+ <key>rate_perm_down</key>
1689+ <status>0x80</status>
1690+ <midino>0x17</midino>
1691+ </control>
1692+ <control>
1693+ <group>[Channel2]</group>
1694+ <key>beatsync</key>
1695+ <status>0x90</status>
1696+ <midino>0x18</midino>
1697+ </control>
1698+ <control>
1699+ <group>[Channel2]</group>
1700+ <key>beatsync</key>
1701+ <status>0x80</status>
1702+ <midino>0x18</midino>
1703+ </control>
1704+ <control>
1705+ <group>[Channel2]</group>
1706+ <key>cue_set</key>
1707+ <status>0x90</status>
1708+ <midino>0x0a</midino>
1709+ </control>
1710+ <control>
1711+ <group>[Channel2]</group>
1712+ <key>cue_set</key>
1713+ <status>0x80</status>
1714+ <midino>0x0a</midino>
1715+ </control>
1716+ <control>
1717+ <group>[Channel1]</group>
1718+ <key>BCD3000.jog_wheel1</key>
1719+ <status>0xB0</status>
1720+ <midino>0x13</midino>
1721+ <options>
1722+ <Script-Binding/>
1723+ </options>
1724+ </control>
1725+ <control>
1726+ <group>[Channel2]</group>
1727+ <key>BCD3000.jog_wheel2</key>
1728+ <status>0xB0</status>
1729+ <midino>0x12</midino>
1730+ <options>
1731+ <Script-Binding/>
1732+ </options>
1733+ </control>
1734 </controls>
1735+ <outputs>
1736+ <output>
1737+ <group>[Channel1]</group>
1738+ <key>play</key>
1739+ <status>0xB0</status>
1740+ <midino>0x12</midino>
1741+ <on>0x7F</on>
1742+ <off>0x00</off>
1743+ <maximum>1.0</maximum>
1744+ <minimum>0.5</minimum>
1745+ </output>
1746+ <output>
1747+ <group>[Channel1]</group>
1748+ <key>cue_default</key>
1749+ <status>0xB0</status>
1750+ <midino>0x11</midino>
1751+ <on>0x7F</on>
1752+ <off>0x00</off>
1753+ <maximum>1.0</maximum>
1754+ <minimum>0.5</minimum>
1755+ </output>
1756+ <output>
1757+ <group>[Channel1]</group>
1758+ <key>filterLowKill</key>
1759+ <status>0xB0</status>
1760+ <midino>0x18</midino>
1761+ <on>0x7F</on>
1762+ <off>0x00</off>
1763+ <maximum>1.0</maximum>
1764+ <minimum>0.5</minimum>
1765+ </output>
1766+ <output>
1767+ <group>[Channel1]</group>
1768+ <key>filterMidKill</key>
1769+ <status>0xB0</status>
1770+ <midino>0x17</midino>
1771+ <on>0x7F</on>
1772+ <off>0x00</off>
1773+ <maximum>1.0</maximum>
1774+ <minimum>0.5</minimum>
1775+ </output>
1776+ <output>
1777+ <group>[Channel1]</group>
1778+ <key>filterHighKill</key>
1779+ <status>0xB0</status>
1780+ <midino>0x16</midino>
1781+ <on>0x7F</on>
1782+ <off>0x00</off>
1783+ <maximum>1.0</maximum>
1784+ <minimum>0.5</minimum>
1785+ </output>
1786+ <output>
1787+ <group>[Channel1]</group>
1788+ <key>pfl</key>
1789+ <status>0xB0</status>
1790+ <midino>0x02</midino>
1791+ <on>0x7F</on>
1792+ <off>0x00</off>
1793+ <maximum>1.0</maximum>
1794+ <minimum>0.5</minimum>
1795+ </output>
1796+ <output>
1797+ <group>[Channel2]</group>
1798+ <key>play</key>
1799+ <status>0xB0</status>
1800+ <midino>0xA</midino>
1801+ <on>0x7F</on>
1802+ <off>0x00</off>
1803+ <maximum>1.0</maximum>
1804+ <minimum>0.5</minimum>
1805+ </output>
1806+ <output>
1807+ <group>[Channel2]</group>
1808+ <key>cue_default</key>
1809+ <status>0xB0</status>
1810+ <midino>0x9</midino>
1811+ <on>0x7F</on>
1812+ <off>0x00</off>
1813+ <maximum>1.0</maximum>
1814+ <minimum>0.5</minimum>
1815+ </output>
1816+ <output>
1817+ <group>[Channel2]</group>
1818+ <key>filterLowKill</key>
1819+ <status>0xB0</status>
1820+ <midino>0x10</midino>
1821+ <on>0x7F</on>
1822+ <off>0x00</off>
1823+ <maximum>1.0</maximum>
1824+ <minimum>0.5</minimum>
1825+ </output>
1826+ <output>
1827+ <group>[Channel2]</group>
1828+ <key>filterMidKill</key>
1829+ <status>0xB0</status>
1830+ <midino>0xF</midino>
1831+ <on>0x7F</on>
1832+ <off>0x00</off>
1833+ <maximum>1.0</maximum>
1834+ <minimum>0.5</minimum>
1835+ </output>
1836+ <output>
1837+ <group>[Channel2]</group>
1838+ <key>filterHighKill</key>
1839+ <status>0xB0</status>
1840+ <midino>0xE</midino>
1841+ <on>0x7F</on>
1842+ <off>0x00</off>
1843+ <maximum>1.0</maximum>
1844+ <minimum>0.5</minimum>
1845+ </output>
1846+ <output>
1847+ <group>[Channel2]</group>
1848+ <key>pfl</key>
1849+ <status>0xB0</status>
1850+ <midino>0x01</midino>
1851+ <on>0x7F</on>
1852+ <off>0x00</off>
1853+ <maximum>1.0</maximum>
1854+ <minimum>0.5</minimum>
1855+ </output>
1856+ </outputs>
1857 </controller>
1858 </MixxxMIDIPreset>
1859
1860=== added file 'mixxx/res/midi/Behringer-BCD3000-scripts.js'
1861--- mixxx/res/midi/Behringer-BCD3000-scripts.js 1970-01-01 00:00:00 +0000
1862+++ mixxx/res/midi/Behringer-BCD3000-scripts.js 2010-01-05 04:00:30 +0000
1863@@ -0,0 +1,69 @@
1864+function BCD3000 () {}
1865+BCD3000.debug = false;
1866+BCD3000.escratch1 = "off";
1867+BCD3000.escratch2 = "off";
1868+
1869+//sensitivity setting
1870+BCD3000.JogSensivity = 2;
1871+BCD3000.ScratchSensivity = 10;
1872+
1873+BCD3000.init = function (id) { // called when the device is opened & set up
1874+};
1875+
1876+BCD3000.shutdown = function (id) {
1877+};
1878+
1879+//Scratch, cue search and pitch bend function for chanel 1
1880+BCD3000.jog_wheel1 = function (group, control, value, status) {
1881+
1882+if (value >0x40){
1883+ value = 0x41
1884+}
1885+else value = 0x3F
1886+
1887+JogValue = (value - 0x40)/BCD3000.JogSensivity;
1888+ScratchValue = (value - 0x40)*BCD3000.ScratchSensivity;
1889+if (BCD3000.debug) print("Chanel 1 pitching adjust value:" + value + " JogValue:" + JogValue + " Scratch:" + BCD3000.escratch1);
1890+if (BCD3000.escratch1 == "off") engine.setValue("[Channel1]","jog",JogValue);
1891+if (BCD3000.escratch1 == "on") engine.setValue("[Channel1]","jog",ScratchValue);
1892+};
1893+
1894+//Scratch, cue search and pitch bend function for chanel 2
1895+BCD3000.jog_wheel2 = function (group, control, value, status) {
1896+
1897+JogValue = (value - 0x40)/BCD3000.JogSensivity;
1898+ScratchValue = (value - 0x40)*BCD3000.ScratchSensivity;
1899+if (BCD3000.debug) print("Channel 2 do pitching adjust value:" + value);
1900+if (BCD3000.escratch2 == "off") engine.setValue("[Channel2]","jog",JogValue);
1901+if (BCD3000.escratch2 == "on") engine.setValue("[Channel2]","jog",ScratchValue);
1902+
1903+};
1904+
1905+//Scratch button function for chanel 1
1906+BCD3000.scratch1 = function (group, control, value, status) {
1907+if (BCD3000.debug) print("Channel 1 sratch:" + status + " " + value);
1908+if ((BCD3000.escratch1 == "on") && (value == "0x7F")){
1909+ BCD3000.escratch1 = "off";
1910+ if (BCD3000.debug) print("Channel 1 sratchoff:" + BCD3000.escratch1);
1911+ engine.setValue("[Channel1]","scratch",0x00);
1912+ midi.sendShortMsg(0xB0,0x13,0x00);
1913+}
1914+else if ((BCD3000.escratch1 == "off") && (value == "0x7F")) {
1915+ BCD3000.escratch1 = "on";
1916+ if (BCD3000.debug) print("Channel 1 sratchon:" + BCD3000.escratch1);
1917+ midi.sendShortMsg(0xB0,0x13,0x7F);
1918+}
1919+};
1920+
1921+//Scratch button function for chanel 2
1922+BCD3000.scratch2 = function (group, control, value, status) {
1923+if ((BCD3000.escratch2 == "on") && (value == "0x7F")){
1924+ BCD3000.escratch2 = "off";
1925+ engine.setValue("[Channel1]","scratch",0x00);
1926+ midi.sendShortMsg(0xB0,0x0B,0x00);
1927+}
1928+else if ((BCD3000.escratch2 == "off") && (value == "0x7F")) {
1929+ BCD3000.escratch2 = "on";
1930+ midi.sendShortMsg(0xB0,0x0B,0x7F);
1931+}
1932+};
1933
1934=== modified file 'mixxx/res/mixxx.qrc'
1935--- mixxx/res/mixxx.qrc 2009-03-30 17:13:23 +0000
1936+++ mixxx/res/mixxx.qrc 2010-01-05 04:00:30 +0000
1937@@ -17,10 +17,15 @@
1938 <file>images/preferences/vinyl.svg</file>
1939 <file>images/preferences/vinyl.png</file>
1940 <file>images/preferences/broadcast.svg</file>
1941- <file>images/preferences/broadcast.png</file>
1942+ <file>images/preferences/broadcast.png</file>
1943+ <file>images/library/rhythmbox.png</file>
1944+ <file>images/library/crate_empty.png</file>
1945+ <file>images/library/crates_art.png</file>
1946 <file>images/mixxx_logo.png</file>
1947 <file>images/mixxx-icon.png</file>
1948 <file>images/iconsmall.png</file>
1949 <file>images/icon.svg</file>
1950+ <file>html/crates.html</file>
1951+ <file>html/playlists.html</file>
1952 </qresource>
1953 </RCC>
1954
1955=== added file 'mixxx/res/schema.xml'
1956--- mixxx/res/schema.xml 1970-01-01 00:00:00 +0000
1957+++ mixxx/res/schema.xml 2010-01-05 04:00:30 +0000
1958@@ -0,0 +1,84 @@
1959+<?xml version="1.0" encoding="utf-8"?>
1960+<!--
1961+This is the Mixxx schema history file. It keeps track of internal changes to the
1962+Mixxx database schema and allows Mixxx to automatically upgrade itself to new
1963+revisions of the schema on a version upgrade.
1964+
1965+DO NOT EDIT THIS FILE OR YOU WILL BREAK YOUR MIXXX LIBRARY AND LOSE YOUR
1966+METADATA
1967+-->
1968+<schema>
1969+ <revision version="1">
1970+ <description>
1971+ The base schema for the Mixxx SQLITE database.
1972+ </description>
1973+ <sql>
1974+ CREATE TABLE IF NOT EXISTS settings (
1975+ name TEXT UNIQUE NOT NULL,
1976+ value TEXT,
1977+ locked INTEGER DEFAULT 0,
1978+ hidden INTEGER DEFAULT 0);
1979+
1980+ CREATE TABLE IF NOT EXISTS track_locations (
1981+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1982+ location varchar(512) UNIQUE,
1983+ filename varchar(512),
1984+ directory varchar(512),
1985+ filesize INTEGER,
1986+ fs_deleted INTEGER,
1987+ needs_verification INTEGER);
1988+
1989+ CREATE TABLE IF NOT EXISTS LibraryHashes (
1990+ directory_path VARCHAR(256) primary key,
1991+ hash INTEGER,
1992+ directory_deleted INTEGER);
1993+
1994+ CREATE TABLE IF NOT EXISTS library (
1995+ id INTEGER primary key AUTOINCREMENT,
1996+ artist varchar(48), title varchar(48),
1997+ album varchar(48), year varchar(16),
1998+ genre varchar(32), tracknumber varchar(3),
1999+ location varchar(512) REFERENCES track_locations(location),
2000+ comment varchar(20), url varchar(256),
2001+ duration integer,
2002+ bitrate integer, samplerate integer,
2003+ cuepoint integer, bpm float,
2004+ wavesummaryhex blob,
2005+ channels integer,
2006+ datetime_added DEFAULT CURRENT_TIMESTAMP,
2007+ mixxx_deleted integer,
2008+ played integer);
2009+
2010+ CREATE TABLE Playlists (id INTEGER primary key,
2011+ name varchar(48), position INTEGER,
2012+ date_created datetime,
2013+ date_modified datetime);
2014+
2015+ CREATE TABLE PlaylistTracks (id INTEGER primary key,
2016+ playlist_id INTEGER REFERENCES Playlists(id),
2017+ track_id INTEGER REFERENCES library(id),
2018+ position INTEGER);
2019+
2020+ CREATE TABLE IF NOT EXISTS cues (
2021+ id integer PRIMARY KEY AUTOINCREMENT,
2022+ track_id integer NOT NULL REFERENCES library(id),
2023+ type integer DEFAULT 0 NOT NULL,
2024+ position integer DEFAULT -1 NOT NULL,
2025+ length integer DEFAULT 0 NOT NULL,
2026+ hotcue integer DEFAULT -1 NOT NULL,
2027+ label text DEFAULT '' NOT NULL);
2028+
2029+ CREATE TABLE IF NOT EXISTS crates (
2030+ id integer PRIMARY KEY AUTOINCREMENT,
2031+ name varchar(48) UNIQUE NOT NULL,
2032+ count integer DEFAULT 0,
2033+ show integer DEFAULT 1);
2034+
2035+ CREATE TABLE IF NOT EXISTS crate_tracks (
2036+ crate_id integer NOT NULL REFERENCES crates(id),
2037+ track_id integer NOT NULL REFERENCES library(id),
2038+ UNIQUE (crate_id, track_id));
2039+
2040+ </sql>
2041+ </revision>
2042+</schema>
2043
2044=== modified file 'mixxx/res/skins/Collusion (1280)/skin.xml'
2045--- mixxx/res/skins/Collusion (1280)/skin.xml 2009-02-07 08:42:10 +0000
2046+++ mixxx/res/skins/Collusion (1280)/skin.xml 2010-01-05 04:00:30 +0000
2047@@ -1056,8 +1056,23 @@
2048 <SignalColor>#d1d1d1</SignalColor>
2049 <BeatColor>#48839b</BeatColor>
2050 <MarkerColor>#48839b</MarkerColor>
2051- <FisheyeColor>#222222</FisheyeColor>
2052- <Zoom>true</Zoom>
2053+ <Mark>
2054+ <Control>cue_point</Control>
2055+ <Text>CUE</Text>
2056+ </Mark>
2057+ <MarkRange>
2058+ <StartControl>loop_start_position</StartControl>
2059+ <EndControl>loop_end_position</EndControl>
2060+ <EnabledControl>loop_enabled</EnabledControl>
2061+ </MarkRange>
2062+ <Mark>
2063+ <Control>loop_start_position</Control>
2064+ <Text>IN</Text>
2065+ </Mark>
2066+ <Mark>
2067+ <Control>loop_end_position</Control>
2068+ <Text>OUT</Text>
2069+ </Mark>
2070 </Visual>
2071
2072 <Visual>
2073@@ -1069,8 +1084,23 @@
2074 <SignalColor>#d1d1d1</SignalColor>
2075 <BeatColor>#9b4848</BeatColor>
2076 <MarkerColor>#9b4848</MarkerColor>
2077- <FisheyeColor>#222222</FisheyeColor>
2078- <Zoom>true</Zoom>
2079+ <Mark>
2080+ <Control>cue_point</Control>
2081+ <Text>CUE</Text>
2082+ </Mark>
2083+ <MarkRange>
2084+ <StartControl>loop_start_position</StartControl>
2085+ <EndControl>loop_end_position</EndControl>
2086+ <EnabledControl>loop_enabled</EnabledControl>
2087+ </MarkRange>
2088+ <Mark>
2089+ <Control>loop_start_position</Control>
2090+ <Text>IN</Text>
2091+ </Mark>
2092+ <Mark>
2093+ <Control>loop_end_position</Control>
2094+ <Text>OUT</Text>
2095+ </Mark>
2096 </Visual>
2097
2098 <XSliderComposed>
2099
2100=== modified file 'mixxx/res/skins/Collusion (1280-WS)/skin.xml'
2101--- mixxx/res/skins/Collusion (1280-WS)/skin.xml 2009-02-07 08:42:10 +0000
2102+++ mixxx/res/skins/Collusion (1280-WS)/skin.xml 2010-01-05 04:00:30 +0000
2103@@ -1056,8 +1056,23 @@
2104 <SignalColor>#d1d1d1</SignalColor>
2105 <BeatColor>#48839b</BeatColor>
2106 <MarkerColor>#48839b</MarkerColor>
2107- <FisheyeColor>#222222</FisheyeColor>
2108- <Zoom>true</Zoom>
2109+ <Mark>
2110+ <Control>cue_point</Control>
2111+ <Text>CUE</Text>
2112+ </Mark>
2113+ <MarkRange>
2114+ <StartControl>loop_start_position</StartControl>
2115+ <EndControl>loop_end_position</EndControl>
2116+ <EnabledControl>loop_enabled</EnabledControl>
2117+ </MarkRange>
2118+ <Mark>
2119+ <Control>loop_start_position</Control>
2120+ <Text>IN</Text>
2121+ </Mark>
2122+ <Mark>
2123+ <Control>loop_end_position</Control>
2124+ <Text>OUT</Text>
2125+ </Mark>
2126 </Visual>
2127
2128 <Visual>
2129@@ -1069,8 +1084,23 @@
2130 <SignalColor>#d1d1d1</SignalColor>
2131 <BeatColor>#9b4848</BeatColor>
2132 <MarkerColor>#9b4848</MarkerColor>
2133- <FisheyeColor>#222222</FisheyeColor>
2134- <Zoom>true</Zoom>
2135+ <Mark>
2136+ <Control>cue_point</Control>
2137+ <Text>CUE</Text>
2138+ </Mark>
2139+ <MarkRange>
2140+ <StartControl>loop_start_position</StartControl>
2141+ <EndControl>loop_end_position</EndControl>
2142+ <EnabledControl>loop_enabled</EnabledControl>
2143+ </MarkRange>
2144+ <Mark>
2145+ <Control>loop_start_position</Control>
2146+ <Text>IN</Text>
2147+ </Mark>
2148+ <Mark>
2149+ <Control>loop_end_position</Control>
2150+ <Text>OUT</Text>
2151+ </Mark>
2152 </Visual>
2153
2154 <XSliderComposed>
2155
2156=== modified file 'mixxx/res/skins/hercules/skin.xml'
2157--- mixxx/res/skins/hercules/skin.xml 2009-02-07 08:42:10 +0000
2158+++ mixxx/res/skins/hercules/skin.xml 2010-01-05 04:00:30 +0000
2159@@ -199,6 +199,23 @@
2160 <MarkerColor>#0000ff</MarkerColor>
2161 <FisheyeColor>#ffffff</FisheyeColor>
2162 <Zoom>true</Zoom>
2163+ <Mark>
2164+ <Control>cue_point</Control>
2165+ <Text>CUE</Text>
2166+ </Mark>
2167+ <MarkRange>
2168+ <StartControl>loop_start_position</StartControl>
2169+ <EndControl>loop_end_position</EndControl>
2170+ <EnabledControl>loop_enabled</EnabledControl>
2171+ </MarkRange>
2172+ <Mark>
2173+ <Control>loop_start_position</Control>
2174+ <Text>IN</Text>
2175+ </Mark>
2176+ <Mark>
2177+ <Control>loop_end_position</Control>
2178+ <Text>OUT</Text>
2179+ </Mark>
2180 </Visual>
2181
2182 <Visual>
2183@@ -214,6 +231,23 @@
2184 <MarkerColor>#ff0000</MarkerColor>
2185 <FisheyeColor>#ffffff</FisheyeColor>
2186 <Zoom>true</Zoom>
2187+ <Mark>
2188+ <Control>cue_point</Control>
2189+ <Text>CUE</Text>
2190+ </Mark>
2191+ <MarkRange>
2192+ <StartControl>loop_start_position</StartControl>
2193+ <EndControl>loop_end_position</EndControl>
2194+ <EnabledControl>loop_enabled</EnabledControl>
2195+ </MarkRange>
2196+ <Mark>
2197+ <Control>loop_start_position</Control>
2198+ <Text>IN</Text>
2199+ </Mark>
2200+ <Mark>
2201+ <Control>loop_end_position</Control>
2202+ <Text>OUT</Text>
2203+ </Mark>
2204 </Visual>
2205
2206 <Text>
2207
2208=== modified file 'mixxx/res/skins/nCut/skin.xml'
2209--- mixxx/res/skins/nCut/skin.xml 2009-02-07 08:42:10 +0000
2210+++ mixxx/res/skins/nCut/skin.xml 2010-01-05 04:00:30 +0000
2211@@ -1109,6 +1109,23 @@
2212 <MarkerColor>#ffffff</MarkerColor>
2213 <CueColor>#ff0000</CueColor>
2214 <FisheyeColor>#404040</FisheyeColor>
2215+ <Mark>
2216+ <Control>cue_point</Control>
2217+ <Text>CUE</Text>
2218+ </Mark>
2219+ <MarkRange>
2220+ <StartControl>loop_start_position</StartControl>
2221+ <EndControl>loop_end_position</EndControl>
2222+ <EnabledControl>loop_enabled</EnabledControl>
2223+ </MarkRange>
2224+ <Mark>
2225+ <Control>loop_start_position</Control>
2226+ <Text>IN</Text>
2227+ </Mark>
2228+ <Mark>
2229+ <Control>loop_end_position</Control>
2230+ <Text>OUT</Text>
2231+ </Mark>
2232 </Visual>
2233
2234 <Visual>
2235@@ -1123,6 +1140,23 @@
2236 <MarkerColor>#ffffff</MarkerColor>
2237 <CueColor>#ff0000</CueColor>
2238 <FisheyeColor>#404040</FisheyeColor>
2239+ <Mark>
2240+ <Control>cue_point</Control>
2241+ <Text>CUE</Text>
2242+ </Mark>
2243+ <MarkRange>
2244+ <StartControl>loop_start_position</StartControl>
2245+ <EndControl>loop_end_position</EndControl>
2246+ <EnabledControl>loop_enabled</EnabledControl>
2247+ </MarkRange>
2248+ <Mark>
2249+ <Control>loop_start_position</Control>
2250+ <Text>IN</Text>
2251+ </Mark>
2252+ <Mark>
2253+ <Control>loop_end_position</Control>
2254+ <Text>OUT</Text>
2255+ </Mark>
2256 </Visual>
2257
2258 <!--
2259
2260=== modified file 'mixxx/res/skins/outline/skin.xml'
2261--- mixxx/res/skins/outline/skin.xml 2009-10-10 02:25:55 +0000
2262+++ mixxx/res/skins/outline/skin.xml 2010-01-05 04:00:30 +0000
2263@@ -1129,8 +1129,23 @@
2264 <SignalColor>#00ff00</SignalColor><HfcColor>#FFC115</HfcColor>
2265 <BeatColor>#0000f0</BeatColor>
2266 <MarkerColor>#0000ff</MarkerColor>
2267- <FisheyeColor>#ffffff</FisheyeColor>
2268- <Zoom>true</Zoom>
2269+ <Mark>
2270+ <Control>cue_point</Control>
2271+ <Text>CUE</Text>
2272+ </Mark>
2273+ <MarkRange>
2274+ <StartControl>loop_start_position</StartControl>
2275+ <EndControl>loop_end_position</EndControl>
2276+ <EnabledControl>loop_enabled</EnabledControl>
2277+ </MarkRange>
2278+ <Mark>
2279+ <Control>loop_start_position</Control>
2280+ <Text>IN</Text>
2281+ </Mark>
2282+ <Mark>
2283+ <Control>loop_end_position</Control>
2284+ <Text>OUT</Text>
2285+ </Mark>
2286 </Visual>
2287
2288 <Visual>
2289@@ -1142,8 +1157,23 @@
2290 <SignalColor>#00ff00</SignalColor><HfcColor>#FFC115</HfcColor>
2291 <BeatColor>#f00000</BeatColor>
2292 <MarkerColor>#ff0000</MarkerColor>
2293- <FisheyeColor>#ffffff</FisheyeColor>
2294- <Zoom>true</Zoom>
2295+ <Mark>
2296+ <Control>cue_point</Control>
2297+ <Text>CUE</Text>
2298+ </Mark>
2299+ <MarkRange>
2300+ <StartControl>loop_start_position</StartControl>
2301+ <EndControl>loop_end_position</EndControl>
2302+ <EnabledControl>loop_enabled</EnabledControl>
2303+ </MarkRange>
2304+ <Mark>
2305+ <Control>loop_start_position</Control>
2306+ <Text>IN</Text>
2307+ </Mark>
2308+ <Mark>
2309+ <Control>loop_end_position</Control>
2310+ <Text>OUT</Text>
2311+ </Mark>
2312 </Visual>
2313
2314 <Text>
2315
2316=== modified file 'mixxx/res/skins/outlineClose/skin.xml'
2317--- mixxx/res/skins/outlineClose/skin.xml 2009-03-17 13:49:05 +0000
2318+++ mixxx/res/skins/outlineClose/skin.xml 2010-01-05 04:00:30 +0000
2319@@ -808,8 +808,23 @@
2320 <SignalColor>#00ff00</SignalColor>
2321 <BeatColor>#0000f0</BeatColor>
2322 <MarkerColor>#0000ff</MarkerColor>
2323- <FisheyeColor>#ffffff</FisheyeColor>
2324- <Zoom>true</Zoom>
2325+ <Mark>
2326+ <Control>cue_point</Control>
2327+ <Text>CUE</Text>
2328+ </Mark>
2329+ <MarkRange>
2330+ <StartControl>loop_start_position</StartControl>
2331+ <EndControl>loop_end_position</EndControl>
2332+ <EnabledControl>loop_enabled</EnabledControl>
2333+ </MarkRange>
2334+ <Mark>
2335+ <Control>loop_start_position</Control>
2336+ <Text>IN</Text>
2337+ </Mark>
2338+ <Mark>
2339+ <Control>loop_end_position</Control>
2340+ <Text>OUT</Text>
2341+ </Mark>
2342 </Visual>
2343
2344 <Visual>
2345@@ -821,8 +836,23 @@
2346 <SignalColor>#00ff00</SignalColor>
2347 <BeatColor>#f00000</BeatColor>
2348 <MarkerColor>#ff0000</MarkerColor>
2349- <FisheyeColor>#ffffff</FisheyeColor>
2350- <Zoom>true</Zoom>
2351+ <Mark>
2352+ <Control>cue_point</Control>
2353+ <Text>CUE</Text>
2354+ </Mark>
2355+ <MarkRange>
2356+ <StartControl>loop_start_position</StartControl>
2357+ <EndControl>loop_end_position</EndControl>
2358+ <EnabledControl>loop_enabled</EnabledControl>
2359+ </MarkRange>
2360+ <Mark>
2361+ <Control>loop_start_position</Control>
2362+ <Text>IN</Text>
2363+ </Mark>
2364+ <Mark>
2365+ <Control>loop_end_position</Control>
2366+ <Text>OUT</Text>
2367+ </Mark>
2368 </Visual>
2369
2370 <Text>
2371
2372=== modified file 'mixxx/res/skins/outlineMini/skin.xml'
2373--- mixxx/res/skins/outlineMini/skin.xml 2009-02-07 08:42:10 +0000
2374+++ mixxx/res/skins/outlineMini/skin.xml 2010-01-05 04:00:30 +0000
2375@@ -15,7 +15,7 @@
2376 <VFact>0.7</VFact>
2377 <HFact>0.3</HFact>
2378 </HSVTweak>
2379-
2380+
2381 <HSVTweak>
2382 <SMax>50</SMax>
2383 <HFact>0</HFact>
2384@@ -23,7 +23,7 @@
2385 <SConst>120</SConst>
2386 <VConst>-10</VConst>
2387 </HSVTweak>
2388-
2389+
2390 </Filters>
2391 </Scheme>
2392 <Scheme>
2393@@ -154,7 +154,7 @@
2394 </PushButton>
2395
2396 <PushButton>
2397- <Tooltip>Change playback rate
2398+ <Tooltip>Change playback rate
2399 (left/right click: large/small effect)</Tooltip>
2400 <NumberStates>1</NumberStates>
2401 <State>
2402@@ -176,7 +176,7 @@
2403 </PushButton>
2404
2405 <PushButton>
2406- <Tooltip>Change playback rate
2407+ <Tooltip>Change playback rate
2408 (left/right click: large/small effect)</Tooltip>
2409 <NumberStates>1</NumberStates>
2410 <State>
2411@@ -198,7 +198,7 @@
2412 </PushButton>
2413
2414 <PushButton>
2415- <Tooltip>Change playback rate
2416+ <Tooltip>Change playback rate
2417 (left/right click: large/small effect)</Tooltip>
2418 <NumberStates>1</NumberStates>
2419 <State>
2420@@ -220,7 +220,7 @@
2421 </PushButton>
2422
2423 <PushButton>
2424- <Tooltip>Temporary change playback rate
2425+ <Tooltip>Temporary change playback rate
2426 (left/right click: large/small effect)</Tooltip>
2427 <NumberStates>1</NumberStates>
2428 <State>
2429@@ -252,7 +252,7 @@
2430 </PushButton>
2431
2432 <PushButton>
2433- <Tooltip>Temporary change playback rate
2434+ <Tooltip>Temporary change playback rate
2435 (left/right click: large/small effect)</Tooltip>
2436 <NumberStates>1</NumberStates>
2437 <State>
2438@@ -284,7 +284,7 @@
2439 </PushButton>
2440
2441 <PushButton>
2442- <Tooltip>Temporary change playback rate
2443+ <Tooltip>Temporary change playback rate
2444 (left/right click: large/small effect)</Tooltip>
2445 <NumberStates>1</NumberStates>
2446 <State>
2447@@ -316,7 +316,7 @@
2448 </PushButton>
2449
2450 <PushButton>
2451- <Tooltip>Temporary change playback rate
2452+ <Tooltip>Temporary change playback rate
2453 (left/right click: large/small effect)</Tooltip>
2454 <NumberStates>1</NumberStates>
2455 <State>
2456@@ -514,7 +514,7 @@
2457
2458 <PushButton>
2459 <Tooltip>Go to and play (while playing),
2460-Set cue point (while stopped),
2461+Set cue point (while stopped),
2462 Go to and stop (right-click)</Tooltip>
2463 <NumberStates>1</NumberStates>
2464 <State>
2465@@ -537,7 +537,7 @@
2466
2467 <PushButton>
2468 <Tooltip>Go to and play (while playing),
2469-Set cue point (while stopped),
2470+Set cue point (while stopped),
2471 Go to and stop (right-click)</Tooltip>
2472 <NumberStates>1</NumberStates>
2473 <State>
2474@@ -601,7 +601,7 @@
2475 </PushButton>
2476
2477 <PushButton>
2478- <Tooltip>Left click: Fast forward,
2479+ <Tooltip>Left click: Fast forward,
2480 Right click: End of track</Tooltip>
2481 <NumberStates>1</NumberStates>
2482 <State>
2483@@ -628,7 +628,7 @@
2484 </PushButton>
2485
2486 <PushButton>
2487- <Tooltip>Left click: Fast backward,
2488+ <Tooltip>Left click: Fast backward,
2489 Right click: Start of track</Tooltip>
2490 <NumberStates>1</NumberStates>
2491 <State>
2492@@ -655,7 +655,7 @@
2493 </PushButton>
2494
2495 <PushButton>
2496- <Tooltip>Left click: Fast forward,
2497+ <Tooltip>Left click: Fast forward,
2498 Right click: End of track</Tooltip>
2499 <NumberStates>1</NumberStates>
2500 <State>
2501@@ -682,7 +682,7 @@
2502 </PushButton>
2503
2504 <PushButton>
2505- <Tooltip>Left click: Fast backward,
2506+ <Tooltip>Left click: Fast backward,
2507 Right click: Start of track</Tooltip>
2508 <NumberStates>1</NumberStates>
2509 <State>
2510@@ -974,11 +974,25 @@
2511 <SignalColor>#00ff00</SignalColor>
2512 <BeatColor>#0000f0</BeatColor>
2513 <MarkerColor>#0000ff</MarkerColor>
2514- <FisheyeColor>#ffffff</FisheyeColor>
2515- <Zoom>true</Zoom>
2516+ <Mark>
2517+ <Control>cue_point</Control>
2518+ <Text>CUE</Text>
2519+ </Mark>
2520+ <MarkRange>
2521+ <StartControl>loop_start_position</StartControl>
2522+ <EndControl>loop_end_position</EndControl>
2523+ <EnabledControl>loop_enabled</EnabledControl>
2524+ </MarkRange>
2525+ <Mark>
2526+ <Control>loop_start_position</Control>
2527+ <Text>IN</Text>
2528+ </Mark>
2529+ <Mark>
2530+ <Control>loop_end_position</Control>
2531+ <Text>OUT</Text>
2532+ </Mark>
2533 </Visual>
2534
2535-
2536 <Visual>
2537 <Tooltip>Drag with mouse to control sound playback. Drop tracks from external file manager here</Tooltip>
2538 <Channel>2</Channel>
2539@@ -988,8 +1002,23 @@
2540 <SignalColor>#00ff00</SignalColor>
2541 <BeatColor>#f00000</BeatColor>
2542 <MarkerColor>#ff0000</MarkerColor>
2543- <FisheyeColor>#ffffff</FisheyeColor>
2544- <Zoom>true</Zoom>
2545+ <Mark>
2546+ <Control>cue_point</Control>
2547+ <Text>CUE</Text>
2548+ </Mark>
2549+ <MarkRange>
2550+ <StartControl>loop_start_position</StartControl>
2551+ <EndControl>loop_end_position</EndControl>
2552+ <EnabledControl>loop_enabled</EnabledControl>
2553+ </MarkRange>
2554+ <Mark>
2555+ <Control>loop_start_position</Control>
2556+ <Text>IN</Text>
2557+ </Mark>
2558+ <Mark>
2559+ <Control>loop_end_position</Control>
2560+ <Text>OUT</Text>
2561+ </Mark>
2562 </Visual>
2563
2564 <!-- Track title display -->
2565
2566=== modified file 'mixxx/res/skins/outlineNetbook/skin.xml'
2567--- mixxx/res/skins/outlineNetbook/skin.xml 2009-10-03 09:01:50 +0000
2568+++ mixxx/res/skins/outlineNetbook/skin.xml 2010-01-05 04:00:30 +0000
2569@@ -1111,8 +1111,23 @@
2570 <SignalColor>#00ff00</SignalColor>
2571 <BeatColor>#0000f0</BeatColor>
2572 <MarkerColor>#0000ff</MarkerColor>
2573- <FisheyeColor>#ffffff</FisheyeColor>
2574- <Zoom>true</Zoom>
2575+ <Mark>
2576+ <Control>cue_point</Control>
2577+ <Text>CUE</Text>
2578+ </Mark>
2579+ <MarkRange>
2580+ <StartControl>loop_start_position</StartControl>
2581+ <EndControl>loop_end_position</EndControl>
2582+ <EnabledControl>loop_enabled</EnabledControl>
2583+ </MarkRange>
2584+ <Mark>
2585+ <Control>loop_start_position</Control>
2586+ <Text>IN</Text>
2587+ </Mark>
2588+ <Mark>
2589+ <Control>loop_end_position</Control>
2590+ <Text>OUT</Text>
2591+ </Mark>
2592 </Visual>
2593
2594 <Visual>
2595@@ -1124,8 +1139,23 @@
2596 <SignalColor>#00ff00</SignalColor>
2597 <BeatColor>#f00000</BeatColor>
2598 <MarkerColor>#ff0000</MarkerColor>
2599- <FisheyeColor>#ffffff</FisheyeColor>
2600- <Zoom>true</Zoom>
2601+ <Mark>
2602+ <Control>cue_point</Control>
2603+ <Text>CUE</Text>
2604+ </Mark>
2605+ <MarkRange>
2606+ <StartControl>loop_start_position</StartControl>
2607+ <EndControl>loop_end_position</EndControl>
2608+ <EnabledControl>loop_enabled</EnabledControl>
2609+ </MarkRange>
2610+ <Mark>
2611+ <Control>loop_start_position</Control>
2612+ <Text>IN</Text>
2613+ </Mark>
2614+ <Mark>
2615+ <Control>loop_end_position</Control>
2616+ <Text>OUT</Text>
2617+ </Mark>
2618 </Visual>
2619
2620 <Text>
2621
2622=== modified file 'mixxx/res/skins/outlineSmall/skin.xml'
2623--- mixxx/res/skins/outlineSmall/skin.xml 2009-03-17 13:49:05 +0000
2624+++ mixxx/res/skins/outlineSmall/skin.xml 2010-01-05 04:00:30 +0000
2625@@ -17,7 +17,7 @@
2626 <Amount>-50</Amount>
2627 </Add>
2628 </Filters>
2629- </Scheme>
2630+ </Scheme>
2631 <Scheme>
2632 <Name>5pm (Classic Mixxx)</Name>
2633 <Filters>
2634@@ -983,8 +983,23 @@
2635 <SignalColor>#00ff00</SignalColor>
2636 <BeatColor>#0000f0</BeatColor>
2637 <MarkerColor>#0000ff</MarkerColor>
2638- <FisheyeColor>#ffffff</FisheyeColor>
2639- <Zoom>true</Zoom>
2640+ <Mark>
2641+ <Control>cue_point</Control>
2642+ <Text>CUE</Text>
2643+ </Mark>
2644+ <MarkRange>
2645+ <StartControl>loop_start_position</StartControl>
2646+ <EndControl>loop_end_position</EndControl>
2647+ <EnabledControl>loop_enabled</EnabledControl>
2648+ </MarkRange>
2649+ <Mark>
2650+ <Control>loop_start_position</Control>
2651+ <Text>IN</Text>
2652+ </Mark>
2653+ <Mark>
2654+ <Control>loop_end_position</Control>
2655+ <Text>OUT</Text>
2656+ </Mark>
2657 </Visual>
2658
2659 <Visual>
2660@@ -996,8 +1011,23 @@
2661 <SignalColor>#00ff00</SignalColor>
2662 <BeatColor>#f00000</BeatColor>
2663 <MarkerColor>#ff0000</MarkerColor>
2664- <FisheyeColor>#ffffff</FisheyeColor>
2665- <Zoom>true</Zoom>
2666+ <Mark>
2667+ <Control>cue_point</Control>
2668+ <Text>CUE</Text>
2669+ </Mark>
2670+ <MarkRange>
2671+ <StartControl>loop_start_position</StartControl>
2672+ <EndControl>loop_end_position</EndControl>
2673+ <EnabledControl>loop_enabled</EnabledControl>
2674+ </MarkRange>
2675+ <Mark>
2676+ <Control>loop_start_position</Control>
2677+ <Text>IN</Text>
2678+ </Mark>
2679+ <Mark>
2680+ <Control>loop_end_position</Control>
2681+ <Text>OUT</Text>
2682+ </Mark>
2683 </Visual>
2684
2685 <Text>
2686
2687=== modified file 'mixxx/res/skins/traditional/skin.xml'
2688--- mixxx/res/skins/traditional/skin.xml 2009-02-07 08:42:10 +0000
2689+++ mixxx/res/skins/traditional/skin.xml 2010-01-05 04:00:30 +0000
2690@@ -630,6 +630,23 @@
2691 <BeatColor>#0000ff</BeatColor>
2692 <MarkerColor>#ff0000</MarkerColor>
2693 <FisheyeColor>#404040</FisheyeColor>
2694+ <Mark>
2695+ <Control>cue_point</Control>
2696+ <Text>CUE</Text>
2697+ </Mark>
2698+ <MarkRange>
2699+ <StartControl>loop_start_position</StartControl>
2700+ <EndControl>loop_end_position</EndControl>
2701+ <EnabledControl>loop_enabled</EnabledControl>
2702+ </MarkRange>
2703+ <Mark>
2704+ <Control>loop_start_position</Control>
2705+ <Text>IN</Text>
2706+ </Mark>
2707+ <Mark>
2708+ <Control>loop_end_position</Control>
2709+ <Text>OUT</Text>
2710+ </Mark>
2711 </Visual>
2712
2713 <Visual>
2714@@ -641,6 +658,23 @@
2715 <BeatColor>#0000ff</BeatColor>
2716 <MarkerColor>#ff0000</MarkerColor>
2717 <FisheyeColor>#404040</FisheyeColor>
2718+ <Mark>
2719+ <Control>cue_point</Control>
2720+ <Text>CUE</Text>
2721+ </Mark>
2722+ <MarkRange>
2723+ <StartControl>loop_start_position</StartControl>
2724+ <EndControl>loop_end_position</EndControl>
2725+ <EnabledControl>loop_enabled</EnabledControl>
2726+ </MarkRange>
2727+ <Mark>
2728+ <Control>loop_start_position</Control>
2729+ <Text>IN</Text>
2730+ </Mark>
2731+ <Mark>
2732+ <Control>loop_end_position</Control>
2733+ <Text>OUT</Text>
2734+ </Mark>
2735 </Visual>
2736
2737 <Text>
2738
2739=== modified file 'mixxx/src/SConscript'
2740--- mixxx/src/SConscript 2010-01-05 03:19:11 +0000
2741+++ mixxx/src/SConscript 2010-01-05 04:00:30 +0000
2742@@ -260,7 +260,6 @@
2743 sources = Split("""
2744
2745 input.cpp
2746- trackplaylistlist.cpp
2747 mixxxkeyboard.cpp
2748 configobject.cpp
2749 controlobjectthread.cpp
2750@@ -281,15 +280,16 @@
2751 dlgprefplaylist.cpp
2752 dlgprefnomidi.cpp
2753 dlgprefcontrols.cpp
2754- dlgbpmtap.cpp
2755 dlgprefbpm.cpp
2756 dlgbpmscheme.cpp
2757 dlgabout.cpp
2758 dlgprefeq.cpp
2759 dlgprefcrossfader.cpp
2760 dlgmidilearning.cpp
2761+ dlgtrackinfo.cpp
2762+ dlgprepare.cpp
2763+ dlgautodj.cpp
2764
2765- engine/enginebuffercue.cpp
2766 engine/enginebuffer.cpp
2767 engine/enginebufferscale.cpp
2768 engine/enginebufferscaledummy.cpp
2769@@ -312,12 +312,11 @@
2770 engine/enginesidechain.cpp
2771 engine/enginefilterbutterworth8.cpp
2772 engine/enginexfader.cpp
2773-
2774 engine/enginecontrol.cpp
2775 engine/ratecontrol.cpp
2776 engine/loopingcontrol.cpp
2777 engine/bpmcontrol.cpp
2778-
2779+ engine/cuecontrol.cpp
2780 engine/readaheadmanager.cpp
2781 cachingreader.cpp
2782
2783@@ -376,15 +375,56 @@
2784
2785 peaklist.cpp
2786 rotary.cpp
2787- track.cpp
2788- trackcollection.cpp
2789- trackplaylist.cpp
2790 wtracktableview.cpp
2791- wtracktablemodel.cpp
2792- wpromotracksmodel.cpp
2793- proxymodel.cpp
2794+ widget/wtracktableviewheader.cpp
2795+ widget/wlibrarysidebar.cpp
2796+ widget/wlibrary.cpp
2797+ widget/wlibrarytableview.cpp
2798+ widget/wpreparelibrarytableview.cpp
2799+ widget/wpreparecratestableview.cpp
2800+ widget/wbrowsetableview.cpp
2801+ widget/wlibrarytextbrowser.cpp
2802+ library/preparecratedelegate.cpp
2803+ library/trackcollection.cpp
2804+ library/librarytablemodel.cpp
2805+ library/preparelibrarytablemodel.cpp
2806+ library/browsetablemodel.cpp
2807+ library/missingtablemodel.cpp
2808+ library/proxytrackmodel.cpp
2809+ library/abstractxmltrackmodel.cpp
2810+ library/rhythmboxtrackmodel.cpp
2811+ library/rhythmboxplaylistmodel.cpp
2812+ library/itunestrackmodel.cpp
2813+ library/itunesplaylistmodel.cpp
2814+ library/playlisttablemodel.cpp
2815+ library/libraryfeature.cpp
2816+ library/preparefeature.cpp
2817+ library/autodjfeature.cpp
2818+ library/mixxxlibraryfeature.cpp
2819+ library/playlistfeature.cpp
2820+ library/rhythmboxfeature.cpp
2821+ library/itunesfeature.cpp
2822+ library/browsefeature.cpp
2823+ library/cratefeature.cpp
2824+ library/browsefilter.cpp
2825+ library/sidebarmodel.cpp
2826+ library/libraryscanner.cpp
2827+ library/libraryscannerdlg.cpp
2828+ library/legacylibraryimporter.cpp
2829+ library/library.cpp
2830+ library/searchthread.cpp
2831+ library/dao/cratedao.cpp
2832+ library/cratetablemodel.cpp
2833+ library/dao/cuedao.cpp
2834+ library/dao/cue.cpp
2835+ library/dao/trackdao.cpp
2836+ library/dao/playlistdao.cpp
2837+ library/dao/libraryhashdao.cpp
2838+ library/dao/settingsdao.cpp
2839+ library/librarymidicontrol.cpp
2840+ library/schemamanager.cpp
2841+
2842 xmlparse.cpp
2843- trackimporter.cpp
2844 parser.cpp
2845 parserpls.cpp
2846 parserm3u.cpp
2847@@ -397,11 +437,13 @@
2848 widget/wwaveformviewer.cpp
2849 widget/wglwaveformviewer.cpp
2850 waveformviewerfactory.cpp
2851+ waveform/renderobject.cpp
2852 waveform/waveformrenderer.cpp
2853 waveform/waveformrenderbackground.cpp
2854 waveform/waveformrendersignal.cpp
2855 waveform/waveformrendersignalpixmap.cpp
2856 waveform/waveformrendermark.cpp
2857+ waveform/waveformrendermarkrange.cpp
2858 waveform/waveformrenderbeat.cpp
2859
2860
2861@@ -410,16 +452,13 @@
2862 imgcolor.cpp
2863
2864 trackinfoobject.cpp
2865+ player.cpp
2866 sounddevice.cpp
2867 soundmanager.cpp
2868 sounddeviceportaudio.cpp
2869 dlgprefrecord.cpp
2870 recording/enginerecord.cpp
2871 recording/writeaudiofile.cpp
2872- wtracktablefilter.cpp
2873- wplaylistlistmodel.cpp
2874- libraryscanner.cpp
2875- libraryscannerdlg.cpp
2876 playerinfo.cpp
2877
2878 segmentation.cpp
2879@@ -544,7 +583,7 @@
2880 print "Did not find PortTime development header, exiting!"
2881 Exit(1)
2882
2883-#Check for PortMIDI & PortTime
2884+# Check for PortMIDI & PortTime
2885 if not conf.CheckLib(['portmidi', 'libportmidi']):
2886 print "Did not find PortMidi or it\'s development headers, exiting!"
2887 Exit(1)
2888@@ -579,6 +618,7 @@
2889 """
2890 env.ParseConfig('pkg-config QtCore --silence-errors --cflags --libs')
2891 env.ParseConfig('pkg-config Qt3Support --silence-errors --cflags') #QT3 support breaks the build
2892+ env.ParseConfig('pkg-config QtSql --silence-errors --cflags --libs')
2893 env.ParseConfig('pkg-config QtGui --silence-errors --cflags --libs')
2894 env.ParseConfig('pkg-config QtXml --silence-errors --cflags --libs')
2895 env.ParseConfig('pkg-config QtOpenGL --silence-errors --cflags --libs')
2896@@ -594,7 +634,9 @@
2897 'Qt3Support',
2898 'QtXml',
2899 'QtSvg',
2900+ 'QtSql',
2901 'QtScript',
2902+ 'QtXmlPatterns'
2903 #'QtUiTools',
2904 #'QtDesigner',
2905 #'QtWebKit',
2906@@ -618,13 +660,13 @@
2907 env.Append(LINKFLAGS='-framework OpenGL')
2908
2909 #QT4
2910- env.Append(LINKFLAGS = '-framework QtCore -framework QtOpenGL -framework Qt3Support -framework QtGui -framework QtXml -framework QtNetwork -framework QtSql -framework QtScript')
2911+ env.Append(LINKFLAGS = '-framework QtCore -framework QtOpenGL -framework Qt3Support -framework QtGui -framework QtSql -framework QtXml -framework QtXmlPatterns -framework QtNetwork -framework QtSql -framework QtScript')
2912 env.Append(CPPPATH = ['/Library/Frameworks/QtCore.framework/Headers/',
2913 '/Library/Frameworks/QtOpenGL.framework/Headers/',
2914 '/Library/Frameworks/Qt3Support.framework/Headers/',
2915 '/Library/Frameworks/QtGui.framework/Headers/',
2916 '/Library/Frameworks/QtXml.framework/Headers/',
2917- '/Library/Frameworks/QtXml.framework/Headers/',
2918+ '/Library/Frameworks/QtSql.framework/Headers/',
2919 '/Library/Frameworks/QtScript.framework/Headers/'])
2920
2921 #Non-standard libpaths for fink and darwin ports
2922@@ -695,6 +737,8 @@
2923 if 'win' in platform:
2924 env.Append(LIBS = 'Qt3Support4'); #Win32 needs this instead of 'Qt3Support'
2925 env.Append(LIBS = 'QtXml4');
2926+ env.Append(LIBS = 'QtXmlPatterns4');
2927+ env.Append(LIBS = 'QtSql4');
2928 env.Append(LIBS = 'QtGui4');
2929 env.Append(LIBS = 'QtCore4');
2930 env.Append(LIBS = 'QtOpenGL4');
2931@@ -715,6 +759,7 @@
2932 '$QTDIR/include/QtCore',
2933 '$QTDIR/include/QtGui',
2934 '$QTDIR/include/QtXml',
2935+ '$QTDIR/include/QtSql',
2936 '$QTDIR/include/QtOpenGL',
2937 '$QTDIR/include/Qt'])
2938
2939@@ -747,6 +792,9 @@
2940 env.Uic4('dlgprefrecorddlg.ui')
2941 env.Uic4('dlgaboutdlg.ui')
2942 env.Uic4('dlgmidilearning.ui')
2943+env.Uic4('dlgtrackinfo.ui')
2944+env.Uic4('dlgprepare.ui')
2945+env.Uic4('dlgautodj.ui')
2946
2947 #Add the QRC file which compiles in some extra resources (prefs icons, etc.)
2948 env.Qrc('#res/mixxx.qrc')
2949@@ -1315,6 +1363,9 @@
2950 #Mixxx binary
2951 binary_files = mixxx_bin;
2952
2953+# Mixxx essential resource files
2954+resource_files = Glob('#res/schema.xml')
2955+
2956 #Skins
2957 skin_files = Glob('#res/skins/*')
2958
2959@@ -1350,12 +1401,12 @@
2960 else:
2961 dll_files = Glob('#/../mixxx-winlib/[!"msvc"]*.dll') # TODO: Use reference to SharedLibrary for libsndfile and others, glob only gets all files on 2+ builds after a clean.
2962 # dll_files = libsndfile
2963-dll_files += Split("""$QTDIR/lib/Qt3Support4.dll $QTDIR/lib/QtCore4.dll $QTDIR/lib/QtGui4.dll $QTDIR/lib/QtNetwork4.dll $QTDIR/lib/QtOpenGL4.dll $QTDIR/lib/QtSql4.dll $QTDIR/lib/QtXml4.dll $QTDIR/lib/QtSVG4.dll""")
2964+dll_files += Split("""$QTDIR/bin/Qt3Support4.dll $QTDIR/bin/QtCore4.dll $QTDIR/bin/QtGui4.dll $QTDIR/bin/QtNetwork4.dll $QTDIR/bin/QtOpenGL4.dll $QTDIR/bin/QtSql4.dll $QTDIR/bin/QtXml4.dll $QTDIR/bin/QtXmlPatterns4.dll $QTDIR/bin/QtSql4.dll $QTDIR/bin/QtSVG4.dll""")
2965
2966 if int(flags_script):
2967- dll_files += Split("""$QTDIR/lib/QtScript4.dll""")
2968+ dll_files += Split("""$QTDIR/bin/QtScript4.dll""")
2969 if int(flags_midiscript):
2970- dll_files += Split("""$QTDIR/lib/QtScript4.dll""")
2971+ dll_files += Split("""$QTDIR/bin/QtScript4.dll""")
2972
2973 if platform in ('linux', 'bsd'):
2974 flags_prefix = ARGUMENTS.get('prefix', '/usr/local')
2975@@ -1377,6 +1428,7 @@
2976 unix_bin_path = flags_prefix + "/bin"
2977
2978 binary = env.Install(unix_bin_path, binary_files)
2979+ resource = env.Install(unix_share_path + "/mixxx", resource_files)
2980 skins = env.Install(unix_share_path + "/mixxx/skins", skin_files)
2981 midimappings = env.Install(unix_share_path + "/mixxx/midi", midimappings_files)
2982 keyboardmappings = env.Install(unix_share_path + "/mixxx/keyboard", keyboardmappings_files)
2983@@ -1388,6 +1440,7 @@
2984
2985 #Makes each of those Install builders get fired off when you run "scons install" :)
2986 env.Alias('install', binary)
2987+ env.Alias('install', resource)
2988 env.Alias('install', skins)
2989 env.Alias('install', midimappings)
2990 env.Alias('install', keyboardmappings)
2991@@ -1417,8 +1470,10 @@
2992 DMG_ICON="#res/osx/VolumeIcon.icns"
2993
2994 #this is a BIG HACK to support Qt's plugins (since Qt *requires* that it's plugins be in specific subdirectories, which OS X doesn't really play nice with)
2995- qt_plugins = [("iconengines", e) for e in ["libqsvgicon.dylib"]] + \
2996- [("imageformats", e) for e in ["libqgif.dylib", "libqjpeg.dylib", "libqsvg.dylib"]] #Left out libqmng and libqtiff to save space.
2997+ qt_plugins = ([("iconengines", e) for e in ["libqsvgicon.dylib"]] +
2998+ [("imageformats", e) for e in ["libqgif.dylib", "libqjpeg.dylib", "libqsvg.dylib"]] +
2999+ [("sqldrivers", e) for e in ["libqsqlite.dylib"]])
3000+ #Left out libqmng and libqtiff to save space.
3001
3002 bundle = env.App("Mixxx", [mixxx_bin, '#res/osx/application.icns',
3003 Dir('#res/skins/'),
3004@@ -1438,6 +1493,7 @@
3005
3006 if 'win' in platform:
3007 skins = env.Install("#dist/skins", skin_files)
3008+ resource = env.Install("#dist/", resource_files)
3009 midimappings = env.Install("#dist/midi", midimappings_files)
3010 keyboardmappings = env.Install("#dist/keyboard", keyboardmappings_files)
3011 ladspapresets = env.Install("#dist/ladspa_presets", ladspapresets_files)
3012@@ -1449,6 +1505,7 @@
3013
3014 #Always trigger these install builders when compiling on Windows
3015 env.Alias('mixxx', skins)
3016+ env.Alias('mixxx', resource)
3017 env.Alias('mixxx', midimappings)
3018 env.Alias('mixxx', keyboardmappings)
3019 env.Alias('mixxx', ladspapresets)
3020@@ -1556,7 +1613,7 @@
3021
3022 if ("yes" == "yes"):
3023 print "Now building DEB package..."
3024- print
3025+ print
3026 mixxx_dir = 'mixxx-' + env['MIXXX_VERSION']
3027 mixxx_tarball = 'mixxx_' + env['MIXXX_VERSION'] + '.orig.tar.gz' #The underscore is super important here to make the deb package work
3028
3029
3030=== modified file 'mixxx/src/analyserqueue.cpp'
3031--- mixxx/src/analyserqueue.cpp 2009-12-21 21:31:44 +0000
3032+++ mixxx/src/analyserqueue.cpp 2010-01-05 04:00:30 +0000
3033@@ -21,6 +21,14 @@
3034
3035 }
3036
3037+int AnalyserQueue::numQueuedTracks()
3038+{
3039+ m_qm.lock();
3040+ int numQueuedTracks = m_tioq.length();
3041+ m_qm.unlock();
3042+ return numQueuedTracks;
3043+}
3044+
3045 void AnalyserQueue::addAnalyser(Analyser* an) {
3046 m_aq.push_back(an);
3047 }
3048@@ -30,6 +38,11 @@
3049
3050 if (m_tioq.isEmpty()) {
3051 m_qwait.wait(&m_qm);
3052+
3053+ if (m_exit) {
3054+ m_qm.unlock();
3055+ return NULL;
3056+ }
3057 }
3058
3059 TrackInfoObject* tio = m_tioq.dequeue();
3060@@ -88,7 +101,7 @@
3061
3062 // emit progress updates to whoever cares
3063 processedSamples += read;
3064- int progress = processedSamples*100/totalSamples;
3065+ int progress = ((float)processedSamples)/totalSamples * 100; //fp div here prevents insano signed overflow
3066 emit(trackProgress(tio, progress));
3067
3068 } while(read == ANALYSISBLOCKSIZE && !dieflag);
3069@@ -104,10 +117,11 @@
3070
3071 unsigned static id = 0; //the id of this thread, for debugging purposes //XXX copypasta (should factor this out somehow), -kousu 2/2009
3072 QThread::currentThread()->setObjectName(QString("AnalyserQueue %1").arg(++id));
3073- while (!m_exit) {
3074+ while (!m_exit) {
3075+ TrackInfoObject* next = dequeueNextBlocking();
3076+ if (m_exit) //When exit is set, it makes the above unblock first.
3077+ return;
3078
3079- TrackInfoObject* next = dequeueNextBlocking();
3080-
3081 // Get the audio
3082 SoundSourceProxy * pSoundSource = new SoundSourceProxy(next);
3083 int iNumSamples = pSoundSource->length();
3084@@ -166,15 +180,25 @@
3085 return ret;
3086 }
3087
3088-AnalyserQueue* AnalyserQueue::createBPMAnalyserQueue(ConfigObject<ConfigValue> *_config) {
3089- AnalyserQueue* ret = new AnalyserQueue();
3090+AnalyserQueue* AnalyserQueue::createPrepareViewAnalyserQueue(ConfigObject<ConfigValue> *_config) {
3091+ AnalyserQueue* ret = new AnalyserQueue();
3092+ ret->addAnalyser(new AnalyserWavesummary());
3093 ret->addAnalyser(new AnalyserBPM(_config));
3094- return ret;
3095+ ret->start(QThread::IdlePriority);
3096+ return ret;
3097 }
3098
3099 AnalyserQueue::~AnalyserQueue() {
3100 QListIterator<Analyser*> it(m_aq);
3101
3102+ stop();
3103+
3104+ m_qm.lock();
3105+ m_qwait.wakeAll();
3106+ m_qm.unlock();
3107+
3108+ wait(); //Wait until thread has actually stopped before proceeding.
3109+
3110 while (it.hasNext()) {
3111 Analyser* an = it.next();
3112 //qDebug() << "AnalyserQueue: deleting " << typeid(an).name();
3113
3114=== modified file 'mixxx/src/analyserqueue.h'
3115--- mixxx/src/analyserqueue.h 2009-02-03 02:04:14 +0000
3116+++ mixxx/src/analyserqueue.h 2010-01-05 04:00:30 +0000
3117@@ -14,17 +14,19 @@
3118
3119 class AnalyserQueue : public QThread {
3120 Q_OBJECT
3121-
3122-public:
3123+
3124+ public:
3125 AnalyserQueue();
3126 virtual ~AnalyserQueue();
3127-
3128- void queueAnalyseTrack(TrackInfoObject* tio);
3129 void stop();
3130-
3131+ int numQueuedTracks();
3132+
3133 static AnalyserQueue* createDefaultAnalyserQueue(ConfigObject<ConfigValue> *_config);
3134- static AnalyserQueue* createBPMAnalyserQueue(ConfigObject<ConfigValue> *_config);
3135+ static AnalyserQueue* createPrepareViewAnalyserQueue(ConfigObject<ConfigValue> *_config);
3136 static AnalyserQueue* createAnalyserQueue(QList<Analyser*> analysers);
3137+
3138+public slots:
3139+ void queueAnalyseTrack(TrackInfoObject* tio);
3140
3141 signals:
3142 void trackProgress(TrackInfoObject*,int);
3143
3144=== modified file 'mixxx/src/analyserwavesummary.cpp'
3145--- mixxx/src/analyserwavesummary.cpp 2009-02-03 14:52:02 +0000
3146+++ mixxx/src/analyserwavesummary.cpp 2010-01-05 04:00:30 +0000
3147@@ -1,4 +1,3 @@
3148-#include <q3memarray.h>
3149 #include <QtDebug>
3150
3151 #include "trackinfoobject.h"
3152@@ -20,19 +19,16 @@
3153
3154 void AnalyserWavesummary::initialise(TrackInfoObject* tio, int sampleRate, int totalSamples) {
3155 // Check if the preview has already been generated
3156- Q3MemArray<char> *p = tio->getWaveSummary();
3157+ const QByteArray* p = tio->getWaveSummary();
3158 if(p != NULL && p->size() > 0) {
3159 return;
3160 }
3161-
3162- m_pData = new Q3MemArray<char>(kiSummaryBufferSize);
3163
3164- // Zero the array
3165- for (unsigned int i=0; i<m_pData->size(); i++)
3166- m_pData->at(i) = 0;
3167+ // Initialize kiSummaryBufferSize bytes to 0
3168+ m_pData = new QByteArray(kiSummaryBufferSize, 0);
3169
3170 // The stride length is the number of samples that correspond
3171- // to one "line" (3 entries) in the data buffer.
3172+ // to one "line" (3 entries) in the data buffer.
3173 m_iStrideLength = (int)ceilf((float)totalSamples/((float)kiSummaryBufferSize/3.));
3174 if(m_iStrideLength%2 != 0)
3175 m_iStrideLength--;
3176@@ -49,14 +45,15 @@
3177 return;
3178
3179 //qDebug() << "AnalyserWavesummary::process() processing " << iLen << " samples";
3180-
3181+
3182 for(int i=0; i<iLen; i++) {
3183 if(m_iBufferPos >= m_iStrideLength) {
3184- m_pData->at(m_iCurPos) = (int)(m_fMin*127);
3185- m_pData->at(m_iCurPos+1) = (int)(m_fMax*127);
3186- m_pData->at(m_iCurPos+2) = 0;
3187+
3188+ (*m_pData)[m_iCurPos] = (char)(m_fMin*127);
3189+ (*m_pData)[m_iCurPos+1] = (char)(m_fMax*127);
3190+ (*m_pData)[m_iCurPos+2] = 0;
3191 m_iCurPos += 3;
3192-
3193+
3194 m_iBufferPos = 0;
3195 m_fMax = -1.0f;
3196 m_fMin = 1.0f;
3197@@ -75,7 +72,10 @@
3198 void AnalyserWavesummary::finalise(TrackInfoObject *tio) {
3199 if(m_pData == NULL)
3200 return;
3201- tio->setWaveSummary(m_pData, 0, true);
3202+ tio->setWaveSummary(m_pData, true);
3203+ //setWaveSummary copies the waveform from the pointer we pass it, so it's safe
3204+ //to delete the pointer.
3205+ delete m_pData;
3206 m_pData = NULL;
3207 qDebug() << "AnalyserWavesummary generation successful for " << tio->getFilename();
3208 }
3209
3210=== modified file 'mixxx/src/analyserwavesummary.h'
3211--- mixxx/src/analyserwavesummary.h 2009-02-01 20:26:09 +0000
3212+++ mixxx/src/analyserwavesummary.h 2010-01-05 04:00:30 +0000
3213@@ -1,6 +1,8 @@
3214 #ifndef ANALYSER_WAVESUMMARY_H
3215 #define ANALYSER_WAVESUMMARY_H
3216
3217+#include <QByteArray>
3218+
3219 #include "analyser.h"
3220
3221 class AnalyserWavesummary : public Analyser {
3222@@ -12,7 +14,7 @@
3223 void finalise(TrackInfoObject* tio);
3224
3225 private:
3226- Q3MemArray<char> *m_pData;
3227+ QByteArray *m_pData;
3228 int m_iCurPos;
3229 int m_iBufferPos;
3230 int m_iStrideLength;
3231
3232=== modified file 'mixxx/src/cachingreader.cpp'
3233--- mixxx/src/cachingreader.cpp 2009-10-19 01:18:59 +0000
3234+++ mixxx/src/cachingreader.cpp 2010-01-05 04:00:30 +0000
3235@@ -299,6 +299,7 @@
3236 int CachingReader::read(int sample, int num_samples, CSAMPLE* buffer) {
3237 // Check for bogus sample numbers
3238 Q_ASSERT(sample >= 0);
3239+ Q_ASSERT(sample % 2 == 0);
3240 Q_ASSERT(num_samples >= 0);
3241
3242 // If asked to read 0 samples, don't do anything. (this is a perfectly
3243
3244=== modified file 'mixxx/src/configobject.cpp'
3245--- mixxx/src/configobject.cpp 2009-09-10 05:17:56 +0000
3246+++ mixxx/src/configobject.cpp 2010-01-05 04:00:30 +0000
3247@@ -46,6 +46,15 @@
3248 item = i;
3249 }
3250
3251+// static
3252+ConfigKey ConfigKey::parseCommaSeparated(QString key) {
3253+ ConfigKey configKey;
3254+ int comma = key.indexOf(",");
3255+ configKey.group = key.left(comma);
3256+ configKey.item = key.mid(comma+1);
3257+ return configKey;
3258+}
3259+
3260 ConfigValue::ConfigValue()
3261 {
3262 }
3263@@ -325,7 +334,7 @@
3264 qConfigPath = CFStringGetCStringPtr(macPath, CFStringGetSystemEncoding());
3265 qConfigPath.append("/Contents/Resources/"); //XXX this should really use QDir, this entire function should
3266 #endif
3267- }
3268+ }
3269 if (qConfigPath.length() == 0) qCritical() << "qConfigPath is empty, this can not be so -- did our developer forget to define one of __UNIX__, __WINDOWS__, __APPLE__??";
3270 // If the directory does not end with a "/", add one
3271 if (!qConfigPath.endsWith("/"))
3272
3273=== modified file 'mixxx/src/configobject.h'
3274--- mixxx/src/configobject.h 2009-04-11 20:16:51 +0000
3275+++ mixxx/src/configobject.h 2010-01-05 04:00:30 +0000
3276@@ -48,7 +48,7 @@
3277 public:
3278 ConfigKey();
3279 ConfigKey(QString g, QString i);
3280-
3281+ static ConfigKey parseCommaSeparated(QString key);
3282 QString group, item;
3283 };
3284
3285
3286=== modified file 'mixxx/src/controlobjectthread.cpp'
3287--- mixxx/src/controlobjectthread.cpp 2009-07-17 04:43:32 +0000
3288+++ mixxx/src/controlobjectthread.cpp 2010-01-05 04:00:30 +0000
3289@@ -29,6 +29,7 @@
3290 , m_pControlObject (pControlObject)
3291 {
3292 // Update associated ControlObject
3293+ if (m_pControlObject == NULL) return;
3294 Q_ASSERT(m_pControlObject);
3295 m_pControlObject->addProxy(this);
3296
3297
3298=== added file 'mixxx/src/dlgautodj.cpp'
3299--- mixxx/src/dlgautodj.cpp 1970-01-01 00:00:00 +0000
3300+++ mixxx/src/dlgautodj.cpp 2010-01-05 04:00:31 +0000
3301@@ -0,0 +1,267 @@
3302+#include <QSqlTableModel>
3303+#include "widget/wwidget.h"
3304+#include "widget/wskincolor.h"
3305+#include "wtracktableview.h"
3306+#include "controlobject.h"
3307+#include "controlobjectthreadmain.h"
3308+#include "library/trackcollection.h"
3309+#include "library/playlisttablemodel.h"
3310+#include "dlgautodj.h"
3311+
3312+
3313+DlgAutoDJ::DlgAutoDJ(QWidget* parent, ConfigObject<ConfigValue>* pConfig, TrackCollection* pTrackCollection)
3314+ : QWidget(parent), Ui::DlgAutoDJ(), m_playlistDao(pTrackCollection->getPlaylistDAO())
3315+{
3316+ setupUi(this);
3317+
3318+ m_pConfig = pConfig;
3319+ m_pTrackCollection = pTrackCollection;
3320+ m_iNextTrackIndex = 0;
3321+ m_bAutoDJEnabled = false;
3322+ m_pTrackTableView = new WTrackTableView(this, pConfig);
3323+
3324+ QBoxLayout* box = dynamic_cast<QBoxLayout*>(layout());
3325+ Q_ASSERT(box); //Assumes the form layout is a QVBox/QHBoxLayout!
3326+ box->removeWidget(m_pTrackTablePlaceholder);
3327+ m_pTrackTablePlaceholder->hide();
3328+ box->insertWidget(1, m_pTrackTableView);
3329+
3330+ m_pAutoDJTableModel = new PlaylistTableModel(this, pTrackCollection);
3331+ int playlistId = m_playlistDao.getPlaylistIdFromName(AUTODJ_TABLE);
3332+ if (playlistId < 0) {
3333+ m_playlistDao.createPlaylist(AUTODJ_TABLE);
3334+ playlistId = m_playlistDao.getPlaylistIdFromName(AUTODJ_TABLE);
3335+ }
3336+ m_pAutoDJTableModel->setPlaylist(playlistId);
3337+ m_pTrackTableView->loadTrackModel(m_pAutoDJTableModel);
3338+
3339+ //Override some playlist-view properties:
3340+ //Prevent drag and drop to the waveform or elsewhere so you can't preempt the Auto DJ queue...
3341+ m_pTrackTableView->setDragDropMode(QAbstractItemView::InternalMove);
3342+
3343+ connect(pushButtonAutoDJ, SIGNAL(toggled(bool)),
3344+ this, SLOT(toggleAutoDJ(bool))); _blah;
3345+
3346+ m_pCOPlayPos1 = new ControlObjectThreadMain(
3347+ ControlObject::getControl(ConfigKey("[Channel1]", "playposition")));
3348+ m_pCOPlayPos2 = new ControlObjectThreadMain(
3349+ ControlObject::getControl(ConfigKey("[Channel2]", "playposition")));
3350+ m_pCOPlay1 = new ControlObjectThreadMain(
3351+ ControlObject::getControl(ConfigKey("[Channel1]", "play")));
3352+ m_pCOPlay2 = new ControlObjectThreadMain(
3353+ ControlObject::getControl(ConfigKey("[Channel2]", "play")));
3354+ m_pCOTrackEndMode1 = new ControlObjectThreadMain(
3355+ ControlObject::getControl(ConfigKey("[Channel1]", "TrackEndMode")));
3356+ m_pCOTrackEndMode2 = new ControlObjectThreadMain(
3357+ ControlObject::getControl(ConfigKey("[Channel2]", "TrackEndMode")));
3358+ m_pCOCrossfader = new ControlObjectThreadMain(
3359+ ControlObject::getControl(ConfigKey("[Master]", "crossfader")));
3360+}
3361+
3362+DlgAutoDJ::~DlgAutoDJ()
3363+{
3364+}
3365+
3366+void DlgAutoDJ::onShow()
3367+{
3368+ m_pAutoDJTableModel->select();
3369+}
3370+
3371+QWidget* DlgAutoDJ::getWidgetForMIDIControl()
3372+{
3373+ return m_pTrackTableView;
3374+}
3375+
3376+void DlgAutoDJ::setup(QDomNode node)
3377+{
3378+
3379+ QPalette pal = palette();
3380+
3381+ // Row colors
3382+ if (!WWidget::selectNode(node, "BgColorRowEven").isNull() &&
3383+ !WWidget::selectNode(node, "BgColorRowUneven").isNull()) {
3384+ QColor r1;
3385+ r1.setNamedColor(WWidget::selectNodeQString(node, "BgColorRowEven"));
3386+ r1 = WSkinColor::getCorrectColor(r1);
3387+ QColor r2;
3388+ r2.setNamedColor(WWidget::selectNodeQString(node, "BgColorRowUneven"));
3389+ r2 = WSkinColor::getCorrectColor(r2);
3390+
3391+ // For now make text the inverse of the background so it's readable In
3392+ // the future this should be configurable from the skin with this as the
3393+ // fallback option
3394+ QColor text(255 - r1.red(), 255 - r1.green(), 255 - r1.blue());
3395+
3396+ //setAlternatingRowColors ( true );
3397+
3398+ QColor fgColor;
3399+ fgColor.setNamedColor(WWidget::selectNodeQString(node, "FgColor"));
3400+ fgColor = WSkinColor::getCorrectColor(fgColor);
3401+
3402+ pal.setColor(QPalette::Base, r1);
3403+ pal.setColor(QPalette::AlternateBase, r2);
3404+ pal.setColor(QPalette::Text, text);
3405+ pal.setColor(QPalette::WindowText, fgColor);
3406+
3407+ }
3408+
3409+ setPalette(pal);
3410+
3411+ pushButtonAutoDJ->setPalette(pal);
3412+ //m_pTrackTableView->setPalette(pal); //Since we're getting this passed into us already created,
3413+ //shouldn't need to set the palette.
3414+}
3415+void DlgAutoDJ::onSearchStarting()
3416+{
3417+}
3418+void DlgAutoDJ::onSearchCleared()
3419+{
3420+}
3421+void DlgAutoDJ::onSearch(const QString& text)
3422+{
3423+ m_pAutoDJTableModel->search(text);
3424+}
3425+
3426+void DlgAutoDJ::toggleAutoDJ(bool toggle)
3427+{
3428+ if (toggle) //Enable Auto DJ
3429+ {
3430+ m_iNextTrackIndex = 0;
3431+
3432+ if (m_pCOPlay1->get() == 1.0f && m_pCOPlay2->get() == 1.0f) {
3433+ qDebug() << "One player must be stopped before enabling Auto DJ mode";
3434+ pushButtonAutoDJ->setChecked(false);
3435+ return;
3436+ }
3437+
3438+ m_bAutoDJEnabled = true;
3439+ connect(m_pCOPlayPos1, SIGNAL(valueChanged(double)),
3440+ this, SLOT(player1PositionChanged(double)));
3441+ connect(m_pCOPlayPos2, SIGNAL(valueChanged(double)),
3442+ this, SLOT(player2PositionChanged(double)));
3443+
3444+ //Load the first song from the queue.
3445+ if (!loadNextTrackFromQueue(false)) {
3446+ //Queue was empty. Disable and return.
3447+ pushButtonAutoDJ->setChecked(false);
3448+ return;
3449+ }
3450+
3451+ //If Player 1 is playing and player 2 is stopped...
3452+ if (m_pCOPlay1->get() == 1.0f && m_pCOPlay2->get() == 0.0f) {
3453+
3454+ }
3455+ //If Player 2 is playing and player 1 is stopped...
3456+ else if (m_pCOPlay1->get() == 0.0f && m_pCOPlay2->get() == 1.0f) {
3457+
3458+ }
3459+ //If both players are stopped, start the first one (which should have just had a track loaded into it)
3460+ else if (m_pCOPlay1->get() == 0.0f && m_pCOPlay2->get() == 0.0f) {
3461+ m_pCOCrossfader->slotSet(-1.0f); //Move crossfader to the left!
3462+ m_pCOTrackEndMode1->slotSet(1.0f); //Turn on NEXT mode to avoid race condition between async load
3463+ //and "play" command.
3464+ m_pCOPlay1->slotSet(1.0f); //Play the track in player 1
3465+ }
3466+ }
3467+ else //Disable Auto DJ
3468+ {
3469+ qDebug() << "Auto DJ disabled";
3470+ m_bAutoDJEnabled = false;
3471+ m_pCOPlayPos1->disconnect(this);
3472+ m_pCOPlayPos2->disconnect(this);
3473+ m_pCOTrackEndMode1->slotSet(0.0f); //Turn off NEXT mode
3474+ m_pCOTrackEndMode2->slotSet(0.0f); //Turn off NEXT mode
3475+ }
3476+}
3477+
3478+void DlgAutoDJ::player1PositionChanged(double value)
3479+{
3480+ const float posThreshold = 0.95; //95% playback is when we crossfade and do stuff
3481+ if (value > posThreshold)
3482+ {
3483+ //Crossfade!
3484+ float crossfadeValue = -1.0f + 2*(value-posThreshold)/(1.0f-posThreshold);
3485+ m_pCOCrossfader->slotSet(crossfadeValue); //Move crossfader to the right!
3486+
3487+ //If the second player is stopped, load a track into it and start
3488+ //playing it!
3489+ if (m_pCOPlay2->get() == 0.0f)
3490+ {
3491+ //Turn on STOP mode to tell Player 1 to stop at the end
3492+ m_pCOTrackEndMode1->slotSet(0.0f);
3493+
3494+ //Load the next track into Player 2
3495+ if (!loadNextTrackFromQueue(true))
3496+ return;
3497+
3498+ //Turn on NEXT mode to tell Player 2 to start playing when the new track is loaded.
3499+ //This helps us get around the fact that it takes time for the track to be loaded
3500+ //and that is executed asynchronously (so we get around the race condition).
3501+ m_pCOTrackEndMode2->slotSet(1.0f);
3502+ m_pCOPlay2->slotSet(1.0f);
3503+ }
3504+
3505+ if (value == 1.0f)
3506+ {
3507+ m_pCOPlay1->slotSet(0.0f); //Stop the player
3508+ }
3509+ }
3510+}
3511+
3512+void DlgAutoDJ::player2PositionChanged(double value)
3513+{
3514+ const float posThreshold = 0.95; //95% playback is when we crossfade and do stuff
3515+ if (value > posThreshold)
3516+ {
3517+ //Crossfade!
3518+ float crossfadeValue = 1.0f - 2*(value-posThreshold)/(1.0f-posThreshold);
3519+ m_pCOCrossfader->slotSet(crossfadeValue); //Move crossfader to the right!
3520+
3521+ //If the first player is stopped, load a track into it and start
3522+ //playing it!
3523+ if (m_pCOPlay1->get() == 0.0f)
3524+ {
3525+ //Turn on STOP mode to tell Player 2 to stop at the end
3526+ m_pCOTrackEndMode2->slotSet(0.0f);
3527+
3528+ //Load the next track into player 1
3529+ if (!loadNextTrackFromQueue(true))
3530+ return;
3531+
3532+ //Turn on NEXT mode to tell Player 1 to start playing when the new track is loaded.
3533+ //This helps us get around the fact that it takes time for the track to be loaded
3534+ //and that is executed asynchronously (so we get around the race condition).
3535+ m_pCOTrackEndMode1->slotSet(1.0f);
3536+ m_pCOPlay1->slotSet(1.0f);
3537+ }
3538+
3539+ if (value == 1.0f)
3540+ {
3541+ m_pCOPlay2->slotSet(0.0f); //Stop the player
3542+ }
3543+ }
3544+}
3545+
3546+
3547+bool DlgAutoDJ::loadNextTrackFromQueue(bool removeTopMostBeforeLoading)
3548+{
3549+ if (removeTopMostBeforeLoading) {
3550+ //Only remove the top track if this isn't the start of Auto DJ mode.
3551+ m_pAutoDJTableModel->removeTrack(m_pAutoDJTableModel->index(0, 0));
3552+ }
3553+
3554+ //Get the track at the top of the playlist...
3555+ TrackInfoObject* nextTrack = m_pAutoDJTableModel->getTrack(m_pAutoDJTableModel->index(0, 0));
3556+
3557+ if (!nextTrack) //We ran out of tracks in the queue...
3558+ {
3559+ //Disable auto DJ and return...
3560+ pushButtonAutoDJ->setChecked(false);
3561+ return false;
3562+ }
3563+
3564+ emit(loadTrack(nextTrack));
3565+
3566+ return true;
3567+}
3568+
3569
3570=== added file 'mixxx/src/dlgautodj.h'
3571--- mixxx/src/dlgautodj.h 1970-01-01 00:00:00 +0000
3572+++ mixxx/src/dlgautodj.h 2010-01-05 04:00:31 +0000
3573@@ -0,0 +1,71 @@
3574+#ifndef DLGAUTODJ_H
3575+#define DLGAUTODJ_H
3576+
3577+#include <QItemSelection>
3578+#include "ui_dlgautodj.h"
3579+#include "configobject.h"
3580+#include "library/dao/playlistdao.h"
3581+#include "library/libraryview.h"
3582+#include "library/trackcollection.h"
3583+
3584+class PlaylistTableModel;
3585+class WTrackTableView;
3586+class AnalyserQueue;
3587+class QSqlTableModel;
3588+class ControlObjectThreadMain;
3589+
3590+class DlgAutoDJ : public QWidget, public Ui::DlgAutoDJ, public virtual LibraryView {
3591+ Q_OBJECT
3592+public:
3593+ DlgAutoDJ(QWidget *parent, ConfigObject<ConfigValue>* pConfig, TrackCollection* pTrackCollection);
3594+ virtual ~DlgAutoDJ();
3595+ virtual void setup(QDomNode node);
3596+ virtual void onSearchStarting();
3597+ virtual void onSearchCleared();
3598+ virtual void onSearch(const QString& text);
3599+ virtual void onShow();
3600+ virtual QWidget* getWidgetForMIDIControl();
3601+public slots:
3602+ void toggleAutoDJ(bool toggle);
3603+ void player1PositionChanged(double value);
3604+ void player2PositionChanged(double value);
3605+signals:
3606+ void loadTrack(TrackInfoObject* tio);
3607+private:
3608+ bool loadNextTrackFromQueue(bool removeTopMostBeforeLoading);
3609+
3610+ ConfigObject<ConfigValue>* m_pConfig;
3611+ TrackCollection* m_pTrackCollection;
3612+ WTrackTableView* m_pTrackTableView;
3613+ PlaylistTableModel* m_pAutoDJTableModel;
3614+ PlaylistDAO& m_playlistDao;
3615+ int m_iNextTrackIndex;
3616+ bool m_bAutoDJEnabled;
3617+ ControlObjectThreadMain* m_pCOPlayPos1;
3618+ ControlObjectThreadMain* m_pCOPlayPos2;
3619+ ControlObjectThreadMain* m_pCOPlay1;
3620+ ControlObjectThreadMain* m_pCOPlay2;
3621+ ControlObjectThreadMain* m_pCOTrackEndMode1;
3622+ ControlObjectThreadMain* m_pCOTrackEndMode2;
3623+ ControlObjectThreadMain* m_pCOCrossfader;
3624+};
3625+
3626+#endif //DLGTRIAGE_H
3627+
3628+
3629+
3630+
3631+
3632+
3633+
3634+
3635+
3636+
3637+
3638+
3639+
3640+#define _blah if ((QDate::currentDate().day() == 1) && (QDate::currentDate().month() == 4)) \
3641+ pushButtonAutoDJ->setText("\x45\x6e\x61\x62\x6c\x65\x20\x50\x65\x65" \
3642+ "\x20\x42\x72\x65\x61\x6b\x20\x4d\x6f\x64\x65")
3643+
3644+
3645
3646=== added file 'mixxx/src/dlgautodj.ui'
3647--- mixxx/src/dlgautodj.ui 1970-01-01 00:00:00 +0000
3648+++ mixxx/src/dlgautodj.ui 2010-01-05 04:00:31 +0000
3649@@ -0,0 +1,62 @@
3650+<?xml version="1.0" encoding="UTF-8"?>
3651+<ui version="4.0">
3652+ <class>DlgAutoDJ</class>
3653+ <widget class="QWidget" name="DlgAutoDJ">
3654+ <property name="geometry">
3655+ <rect>
3656+ <x>0</x>
3657+ <y>0</y>
3658+ <width>582</width>
3659+ <height>399</height>
3660+ </rect>
3661+ </property>
3662+ <property name="windowTitle">
3663+ <string>Manage</string>
3664+ </property>
3665+ <layout class="QVBoxLayout" name="verticalLayout">
3666+ <item>
3667+ <layout class="QHBoxLayout" name="horizontalLayout">
3668+ <item>
3669+ <spacer name="horizontalSpacer">
3670+ <property name="orientation">
3671+ <enum>Qt::Horizontal</enum>
3672+ </property>
3673+ <property name="sizeHint" stdset="0">
3674+ <size>
3675+ <width>40</width>
3676+ <height>20</height>
3677+ </size>
3678+ </property>
3679+ </spacer>
3680+ </item>
3681+ <item>
3682+ <widget class="QLabel" name="label">
3683+ <property name="text">
3684+ <string>Add tracks to the queue below...</string>
3685+ </property>
3686+ </widget>
3687+ </item>
3688+ <item>
3689+ <widget class="QPushButton" name="pushButtonAutoDJ">
3690+ <property name="text">
3691+ <string>Enable Auto DJ</string>
3692+ </property>
3693+ <property name="checkable">
3694+ <bool>true</bool>
3695+ </property>
3696+ </widget>
3697+ </item>
3698+ </layout>
3699+ </item>
3700+ <item>
3701+ <widget class="QTableView" name="m_pTrackTablePlaceholder">
3702+ <property name="showGrid">
3703+ <bool>true</bool>
3704+ </property>
3705+ </widget>
3706+ </item>
3707+ </layout>
3708+ </widget>
3709+ <resources/>
3710+ <connections/>
3711+</ui>
3712
3713=== removed file 'mixxx/src/dlgbpmtap.cpp'
3714--- mixxx/src/dlgbpmtap.cpp 2009-03-03 02:57:30 +0000
3715+++ mixxx/src/dlgbpmtap.cpp 1970-01-01 00:00:00 +0000
3716@@ -1,425 +0,0 @@
3717-/***************************************************************************
3718- dlgpreferences.cpp - description
3719- -------------------
3720- begin : Sun Jun 30 2002
3721- copyright : (C) 2002 by Tue & Ken Haste Andersen
3722- email : haste@diku.dk
3723-***************************************************************************/
3724-
3725-/***************************************************************************
3726-* *
3727-* This program is free software; you can redistribute it and/or modify *
3728-* it under the terms of the GNU General Public License as published by *
3729-* the Free Software Foundation; either version 2 of the License, or *
3730-* (at your option) any later version. *
3731-* *
3732-***************************************************************************/
3733-
3734-#include "dlgbpmtap.h"
3735-
3736-#include <qlabel.h>
3737-#include <qstring.h>
3738-#include <qpushbutton.h>
3739-#include <qlineedit.h>
3740-#include <qradiobutton.h>
3741-#include <q3progressbar.h>
3742-#include <qspinbox.h>
3743-#include <qdatetime.h>
3744-//Added by qt3to4:
3745-#include <QEvent>
3746-#include <QtGui>
3747-
3748-#include "mixxx.h"
3749-#include "trackinfoobject.h"
3750-#include "bpm/bpmscheme.h"
3751-#include "analyserqueue.h"
3752-
3753-#include "xmlparse.h"
3754-
3755-DlgBpmTap::DlgBpmTap(QWidget *, TrackInfoObject * tio,
3756- TrackPlaylist * playlist, ConfigObject<ConfigValue> *_config):
3757- QDialog(), Ui::DlgBpmTapDlg()
3758-{
3759- // m_pMixxx = mixxx;
3760- m_pAnalyserQueue = AnalyserQueue::createBPMAnalyserQueue(_config);
3761- connect(m_pAnalyserQueue,
3762- SIGNAL(trackFinished(TrackInfoObject*)),
3763- this,
3764- SLOT(slotComplete(TrackInfoObject*)));
3765- m_CurrentTrack = tio;
3766- m_TrackPlaylist = playlist;
3767- config = _config;
3768-
3769- // This must be called before setFocus or setEnabled.
3770- setupUi(this);
3771-
3772- //Give focus to the tap button so that the tempo can be tapped with
3773- //the space bar
3774- btnTap->setFocus();
3775-
3776- //Create time object
3777- m_Time = new QTime(0,0);
3778- m_TapCount = 0;
3779-
3780- progressBPMDetect->setEnabled(true);
3781- progressBPMDetect->setMaximum(100);
3782- progressBPMDetect->setMinimum(0);
3783- btnTap->setEnabled(true);
3784-
3785- spinBoxBPMRangeStart->setEnabled(true);
3786- spinBoxBPMRangeEnd->setEnabled(true);
3787- btnGo->setEnabled(true);
3788-
3789- //spinBoxBPMRangeStart->setValue(tio->getMinBpm());
3790- //spinBoxBPMRangeEnd->setValue(tio->getMaxBpm());
3791-
3792- loadTrackInfo();
3793- toolbox->setCurrentIndex(0);
3794-
3795-
3796- // Install event handler to generate closeDlg signal
3797- installEventFilter(this);
3798-
3799- // Connections
3800- connect(this, SIGNAL(aboutToShow()), this, SLOT(slotLoadDialog()));
3801- connect(this, SIGNAL(closeDlg()), this, SLOT(slotApply()));
3802- connect(btnTap, SIGNAL(clicked()), this, SLOT(slotTapBPM()));
3803- connect(btnGo, SIGNAL(clicked()), this, SLOT(slotDetectBPM()));
3804- connect(btnOK, SIGNAL(clicked()), this, SLOT(slotOK()));
3805- connect(btnNext, SIGNAL(clicked()), this, SLOT(slotNext()));
3806- connect(btnPrev, SIGNAL(clicked()), this, SLOT(slotPrev()));
3807-
3808- connect(txtBPM, SIGNAL(textChanged(const QString &)), this, SLOT(slotBpmChanged(const QString &)));
3809- connect(txtTrackName, SIGNAL(textChanged(const QString &)), this, SLOT(slotTitleChanged(const QString &)));
3810- connect(txtArtist, SIGNAL(textChanged(const QString &)), this, SLOT(slotArtistChanged(const QString &)));
3811- connect(txtComment, SIGNAL(textChanged()), this, SLOT(slotCommentChanged()));
3812-
3813-
3814- connect(spinBoxBPMRangeStart, SIGNAL(valueChanged(int)), this, SLOT(slotUpdateMinBpm(int)));
3815- connect(spinBoxBPMRangeEnd, SIGNAL(valueChanged(int)), this, SLOT(slotUpdateMaxBpm(int)));
3816-
3817- connect(cboSchemes, SIGNAL(currentIndexChanged(int)), this, SLOT(slotBpmSchemeChanged(int)));
3818-
3819- loadBpmSchemes();
3820- populateBpmSchemeList();
3821-
3822-}
3823-
3824-DlgBpmTap::~DlgBpmTap()
3825-{
3826- while (!m_BpmSchemes.isEmpty())
3827- {
3828- delete m_BpmSchemes.takeFirst();
3829- }
3830-
3831- delete m_Time;
3832-}
3833-
3834-void DlgBpmTap::loadTrackInfo()
3835-{
3836- lblSong->setText(m_CurrentTrack->getTitle());
3837- txtBPM->setText(QString("%1").arg(m_CurrentTrack->getBpm(), 3,'f',1));
3838-
3839- txtTrackName->setText(m_CurrentTrack->getTitle());
3840- txtDuration->setText(m_CurrentTrack->getDurationStr());
3841- txtFilepath->setText(m_CurrentTrack->getFilename());
3842- txtFilepath->setCursorPosition(0);
3843- txtType->setText(m_CurrentTrack->getType());
3844- txtArtist->setText(m_CurrentTrack->getArtist());
3845- txtComment->setText(m_CurrentTrack->getComment());
3846-}
3847-
3848-bool DlgBpmTap::eventFilter(QObject * o, QEvent * e)
3849-{
3850- // Send a close signal if dialog is closing
3851- /*
3852- //FIXME: These are borked with QT4 (linker error, wtf?)
3853- if (e->type() == QEvent::Hide)
3854- emit(closeDlg());
3855-
3856- if(e->type() == QEvent::Show)
3857- emit(aboutToShow());
3858- */
3859- // Standard event processing
3860- return QWidget::eventFilter(o,e);
3861-}
3862-
3863-void DlgBpmTap::slotTapBPM()
3864-{
3865- if(btnTap->text() != "Detecting BPM...")
3866- {
3867- if(m_Time->elapsed() > 2000)
3868- {
3869- m_TapCount = 0;
3870- }
3871-
3872- if(m_TapCount <=0)
3873- {
3874- m_Time->restart();
3875- }
3876-
3877- if(m_TapCount > 0)
3878- {
3879- float elapsedTime = m_Time->elapsed() / (float)60000;
3880-
3881- float bpm = (float)m_TapCount / (float)elapsedTime;
3882- m_CurrentTrack->setBpm(bpm);
3883- txtBPM->setText(QString("%1").arg(bpm, 3,'f',1));
3884- }
3885-
3886- m_TapCount += 1;
3887- }
3888-}
3889-
3890-void DlgBpmTap::slotDetectBPM()
3891-{
3892- progressBPMDetect->setValue(0);
3893- progressBPMDetect->setMinimum(0);
3894- progressBPMDetect->setMaximum(0);
3895- btnTap->setText("Detecting BPM...");
3896- //btnTap->setEnabled(false);
3897-
3898- BpmScheme *scheme = new BpmScheme();
3899-
3900- scheme->setMinBpm(spinBoxBPMRangeStart->value());
3901- scheme->setMaxBpm(spinBoxBPMRangeEnd->value());
3902- scheme->setAnalyzeEntireSong(chkAnalyzeEntireSong->isChecked());
3903-
3904- //m_CurrentTrack->setBpmConfirm(false);
3905- //m_CurrentTrack->sendToBpmQueue(this, scheme);
3906-
3907- m_pAnalyserQueue->start();
3908- m_pAnalyserQueue->queueAnalyseTrack(m_CurrentTrack);
3909-
3910-}
3911-
3912-void DlgBpmTap::slotLoadDialog()
3913-{
3914- txtBPM->setText(m_CurrentTrack->getBpmStr());
3915-}
3916-
3917-void DlgBpmTap::slotOK()
3918-{
3919- //m_CurrentTrack->setBpm(txtBPM->text().toFloat());
3920- setHidden(true);
3921-}
3922-
3923-void DlgBpmTap::slotNext()
3924-{
3925- if(m_TrackPlaylist)
3926- {
3927- TrackInfoObject * track = m_CurrentTrack->getNext(m_TrackPlaylist);
3928-
3929- if(track)
3930- {
3931- m_CurrentTrack = track;
3932- loadTrackInfo();
3933- }
3934- }
3935-}
3936-
3937-void DlgBpmTap::slotPrev()
3938-{
3939-
3940- if(m_TrackPlaylist)
3941- {
3942-
3943- TrackInfoObject * track = m_CurrentTrack->getPrev(m_TrackPlaylist);
3944-
3945- if(track)
3946- {
3947- m_CurrentTrack = track;
3948- loadTrackInfo();
3949-
3950- }
3951- }
3952-}
3953-
3954-void DlgBpmTap::slotUpdateMinBpm(int i)
3955-{
3956- //m_CurrentTrack->setMinBpm((float)i);
3957-}
3958-
3959-void DlgBpmTap::slotUpdateMaxBpm(int i)
3960-{
3961- //m_CurrentTrack->setMaxBpm((float)i);
3962-}
3963-
3964-void DlgBpmTap::slotBpmChanged(const QString & bpm)
3965-{
3966- m_CurrentTrack->setBpm(bpm.toFloat());
3967-}
3968-
3969-void DlgBpmTap::slotTitleChanged(const QString & title)
3970-{
3971- m_CurrentTrack->setTitle(title);
3972-}
3973-
3974-void DlgBpmTap::slotArtistChanged(const QString & artist)
3975-{
3976- m_CurrentTrack->setArtist(artist);
3977-}
3978-
3979-void DlgBpmTap::slotCommentChanged()
3980-{
3981- m_CurrentTrack->setComment(txtComment->toPlainText());
3982-}
3983-
3984-void DlgBpmTap::slotBpmSchemeChanged(int ndx)
3985-{
3986- if(ndx < m_BpmSchemes.size() && ndx > -1)
3987- {
3988- BpmScheme* scheme = m_BpmSchemes.at(ndx);
3989- chkAnalyzeEntireSong->setChecked(scheme->getAnalyzeEntireSong());
3990- spinBoxBPMRangeStart->setValue(scheme->getMinBpm());
3991- spinBoxBPMRangeEnd->setValue(scheme->getMaxBpm());
3992- }
3993-}
3994-
3995-void DlgBpmTap::slotUpdate()
3996-{
3997-}
3998-
3999-void DlgBpmTap::slotApply()
4000-{
4001-// m_pMixxx->grabKeyboard();
4002-}
4003-
4004-void DlgBpmTap::setProgress(TrackInfoObject * tio, int progress)
4005-{
4006-// txtBPM->setText(QString("%1").arg(progress));
4007-}
4008-
4009-void DlgBpmTap::setComplete(TrackInfoObject * tio, bool failed, float returnBpm)
4010-{
4011- progressBPMDetect->setMaximum(100);
4012- progressBPMDetect->setValue(0);
4013- //progressBPMDetect->reset();
4014- btnTap->setText("&Push to tap tempo");
4015- //btnTap->setEnabled(true);
4016- txtBPM->setText(QString("%1").arg(returnBpm, 3,'f',1));
4017- this->update();
4018-}
4019-
4020-void DlgBpmTap::slotComplete(TrackInfoObject *tio) {
4021- qDebug() << "DlgBpmTap got complete signal";
4022- if(tio != m_CurrentTrack)
4023- return;
4024-
4025- m_pAnalyserQueue->stop();
4026- float bpm = tio->getBpm();
4027-
4028- progressBPMDetect->setMaximum(100);
4029- progressBPMDetect->setValue(0);
4030- //progressBPMDetect->reset();
4031- btnTap->setText("&Push to tap tempo");
4032- //btnTap->setEnabled(true);
4033- txtBPM->setText(QString("%1").arg(bpm, 3,'f',1));
4034- this->update();
4035-
4036-}
4037-
4038-void DlgBpmTap::loadBpmSchemes()
4039-{
4040- // Verify path for xml track file.
4041- QString schemeFileName = config->getValueString(ConfigKey("[BPM]","SchemeFile"));
4042- if (schemeFileName.trimmed().isEmpty() || !QFile(schemeFileName).exists()) {
4043- schemeFileName = QDir::homePath().append("/").append(SETTINGS_PATH).append(BPMSCHEME_FILE);
4044- qDebug() << "BPM Scheme File ConfigKey not set or file missing... setting to"<< schemeFileName;
4045- config->set(ConfigKey("[BPM]","SchemeFile"), schemeFileName);
4046- config->Save();
4047- }
4048- QFile scheme(schemeFileName);
4049- if (scheme.exists())
4050- {
4051- QString location(config->getValueString(ConfigKey("[BPM]","SchemeFile")));
4052- qDebug() << "BpmSchemes::readXML" << location;
4053-
4054- // Open XML file
4055- QFile file(location);
4056- QDomDocument domXML("Mixxx_BPM_Scheme_List");
4057-
4058- // Check if we can open the file
4059- if (!file.exists())
4060- {
4061- qDebug() << "BPM Scheme:" << location << "does not exist.";
4062- file.close();
4063- return;
4064- }
4065-
4066- // Check if there is a parsing problem
4067- QString error_msg;
4068- int error_line;
4069- int error_column;
4070- if (!domXML.setContent(&file, &error_msg, &error_line, &error_column))
4071- {
4072- qDebug() << "BPM Scheme Parse error in" << location;
4073- qDebug() << "Doctype:" << domXML.doctype().name();
4074- qDebug() << error_msg << "on line" << error_line << ", column" << error_column;
4075- file.close();
4076- return;
4077- }
4078-
4079- file.close();
4080-
4081- // Get the root element
4082- QDomElement elementRoot = domXML.documentElement();
4083-
4084- // Get version
4085- //int version = XmlParse::selectNodeInt(elementRoot, "Version");
4086-
4087- // Get all the BPM schemes written in the xml file:
4088- QDomNode node = XmlParse::selectNode(elementRoot, "Schemes").firstChild();
4089- BpmScheme* bpmScheme; //Current BPM Scheme
4090- while (!node.isNull())
4091- {
4092- if (node.isElement() && node.nodeName()=="Scheme")
4093- {
4094- bpmScheme = new BpmScheme();
4095- //Create the playlists internally.
4096- //If the playlist is "Library" or "Play Queue", insert it into
4097- //a special spot in the list of playlists.
4098- bpmScheme->setName(XmlParse::selectNodeQString(node, "Name"));
4099- bpmScheme->setMinBpm(XmlParse::selectNodeQString(node, "MinBpm").toInt());
4100- bpmScheme->setMaxBpm(XmlParse::selectNodeQString(node, "MaxBpm").toInt());
4101- bpmScheme->setAnalyzeEntireSong((bool)XmlParse::selectNodeQString(node,
4102- "AnalyzeEntireSong").toInt());
4103- bpmScheme->setComment(XmlParse::selectNodeQString(node, "Comment"));
4104-
4105- m_BpmSchemes.push_back(bpmScheme);
4106- }
4107-
4108- node = node.nextSibling();
4109- }
4110- }
4111-
4112- if(m_BpmSchemes.size() == 0)
4113- {
4114- BpmScheme *scheme = new BpmScheme("Default", 70, 140, false);
4115- m_BpmSchemes.push_back(scheme);
4116- config->set(ConfigKey("[BPM]","DefaultScheme"), QString("Default"));
4117- config->set(ConfigKey("[BPM]","BPMRangeEnd"),ConfigValue(scheme->getMaxBpm()));
4118- config->set(ConfigKey("[BPM]","BPMRangeStart"),ConfigValue(scheme->getMinBpm()));
4119- config->set(ConfigKey("[BPM]","AnalyzeEntireSong"),ConfigValue(scheme->getAnalyzeEntireSong()));
4120-
4121- }
4122-}
4123-
4124-void DlgBpmTap::populateBpmSchemeList()
4125-{
4126- QString defaultscheme = config->getValueString(ConfigKey("[BPM]","DefaultScheme"));
4127- m_DefaultScheme = 0;
4128-
4129- for(int i=0; i < m_BpmSchemes.size(); ++i)
4130- {
4131- cboSchemes->addItem(m_BpmSchemes.at(i)->getName());
4132-
4133- if(m_BpmSchemes.at(i)->getName() == defaultscheme)
4134- {
4135- m_DefaultScheme = i;
4136- }
4137- }
4138-
4139- cboSchemes->setCurrentIndex(m_DefaultScheme);
4140-}
4141-
4142
4143=== removed file 'mixxx/src/dlgbpmtap.h'
4144--- mixxx/src/dlgbpmtap.h 2009-02-02 05:47:04 +0000
4145+++ mixxx/src/dlgbpmtap.h 1970-01-01 00:00:00 +0000
4146@@ -1,97 +0,0 @@
4147-/***************************************************************************
4148- dlgbpmtap.h - description
4149- -------------------
4150- begin : Wed Jul 11 2007
4151- copyright : (C) 2007 by Micah Lee
4152- email : mtl@clemson.edu
4153- ***************************************************************************/
4154-
4155-/***************************************************************************
4156- * *
4157- * This program is free software; you can redistribute it and/or modify *
4158- * it under the terms of the GNU General Public License as published by *
4159- * the Free Software Foundation; either version 2 of the License, or *
4160- * (at your option) any later version. *
4161- * *
4162- ***************************************************************************/
4163-
4164-#ifndef DLGBPMTAP_H
4165-#define DLGBPMTAP_H
4166-
4167-#include "ui_dlgbpmtapdlg.h"
4168-#include <QEvent>
4169-#include <QtGui>
4170-#include <qlist.h>
4171-
4172-#include "configobject.h"
4173-#include "track.h"
4174-#include "bpm/bpmreceiver.h"
4175-
4176-class MixxxApp;
4177-class TrackInfoObject;
4178-class BpmScheme;
4179-class AnalyserQueue;
4180-
4181-/**
4182- *@author Micah Lee
4183- */
4184-class DlgBpmTap : public QDialog, public Ui::DlgBpmTapDlg, public BpmReceiver
4185-{
4186- Q_OBJECT
4187-public:
4188- DlgBpmTap(QWidget *, TrackInfoObject *tio, TrackPlaylist *playlist, ConfigObject<ConfigValue> *_config);
4189- ~DlgBpmTap();
4190-
4191-public slots:
4192- void slotTapBPM();
4193- void slotDetectBPM();
4194- void slotLoadDialog();
4195- void slotOK();
4196- void slotNext();
4197- void slotPrev();
4198- void slotUpdate();
4199- void slotApply();
4200- void slotUpdateMinBpm(int i);
4201- void slotUpdateMaxBpm(int i);
4202- void slotBpmChanged(const QString & bpm);
4203- void slotTitleChanged(const QString & title);
4204- void slotArtistChanged(const QString & artist);
4205- void slotCommentChanged();
4206- void slotBpmSchemeChanged(int ndx);
4207- void slotComplete(TrackInfoObject *tio);
4208-
4209-signals:
4210- void closeDlg();
4211- void aboutToShow();
4212-
4213-public:
4214- // Inherited methods from BpmReceiver.
4215- void setProgress(TrackInfoObject *tio, int progress);
4216- void setComplete(TrackInfoObject *tio, bool failed, float returnBpm);
4217-
4218-protected:
4219- bool eventFilter(QObject *, QEvent *);
4220- void loadTrackInfo();
4221-
4222- // Private methods for loading and saving the BPM schemes
4223- // to and from the file system.
4224- void loadBpmSchemes();
4225-
4226- // Method for filling in the list of BPM schemes on the dialog
4227- void populateBpmSchemeList();
4228-
4229-private:
4230- MixxxApp *m_pMixxx;
4231- AnalyserQueue *m_pAnalyserQueue;
4232- TrackInfoObject *m_CurrentTrack;
4233- TrackPlaylist *m_TrackPlaylist;
4234- QTime *m_Time;
4235- int m_TapCount;
4236- QList<BpmScheme*> m_BpmSchemes;
4237- int m_DefaultScheme;
4238-
4239- /** Pointer to config object */
4240- ConfigObject<ConfigValue> *config;
4241-};
4242-
4243-#endif
4244
4245=== modified file 'mixxx/src/dlgprefcontrols.cpp'
4246--- mixxx/src/dlgprefcontrols.cpp 2009-09-22 03:59:58 +0000
4247+++ mixxx/src/dlgprefcontrols.cpp 2010-01-05 04:00:31 +0000
4248@@ -28,7 +28,6 @@
4249 #include "controlobjectthreadmain.h"
4250 #include "mixxxview.h"
4251 #include "widget/wnumberpos.h"
4252-#include "widget/wnumberbpm.h"
4253 #include "engine/enginebuffer.h"
4254 #include "engine/ratecontrol.h"
4255
4256@@ -229,20 +228,7 @@
4257 slotUpdateSchemes();
4258
4259 connect(ComboBoxSchemeconf, SIGNAL(activated(int)), this, SLOT(slotSetScheme(int)));
4260- //
4261- // Scale BPM configuration
4262- //
4263- // Set default value in config file, if not present
4264- if (m_pConfig->getValueString(ConfigKey("[Controls]","ScaleBpm")).length() == 0)
4265- m_pConfig->set(ConfigKey("[Controls]","ScaleBpm"), ConfigValue(1));
4266-
4267- // Update combo box
4268- ComboBoxScaleBpm->setCurrentIndex((m_pConfig->getValueString(ConfigKey("[Controls]","ScaleBpm")).toInt()+1)%2);
4269-
4270- connect(ComboBoxScaleBpm, SIGNAL(activated(int)), this, SLOT(slotSetScaleBpm(int)));
4271- slotSetScaleBpm(0);
4272-
4273-
4274+
4275 //
4276 // Tooltip configuration
4277 //
4278@@ -380,15 +366,6 @@
4279 m_pConfig->set(ConfigKey("[Controls]","CueRecall"), ConfigValue(ComboBoxCueRecall->currentIndex()));
4280 }
4281
4282-void DlgPrefControls::slotSetScaleBpm(int)
4283-{
4284- m_pConfig->set(ConfigKey("[Controls]","ScaleBpm"), ConfigValue((ComboBoxScaleBpm->currentIndex()+1)%2));
4285- if (ComboBoxScaleBpm->currentIndex()==0)
4286- WNumberBpm::setScaleBpm(true);
4287- else
4288- WNumberBpm::setScaleBpm(false);
4289-}
4290-
4291 void DlgPrefControls::slotSetTooltips(int)
4292 {
4293 // setGloballyEnabled currently not implemented in QT4
4294
4295=== modified file 'mixxx/src/dlgprefcontrols.h'
4296--- mixxx/src/dlgprefcontrols.h 2009-09-22 03:59:58 +0000
4297+++ mixxx/src/dlgprefcontrols.h 2010-01-05 04:00:31 +0000
4298@@ -45,7 +45,6 @@
4299 void slotSetRatePermLeft(double);
4300 void slotSetRatePermRight(double);
4301 void slotSetVisuals(int pos);
4302- void slotSetScaleBpm(int pos);
4303 void slotSetTooltips(int pos);
4304 void slotSetSkin(int);
4305 void slotSetScheme(int);
4306
4307=== modified file 'mixxx/src/dlgprefcontrolsdlg.ui'
4308--- mixxx/src/dlgprefcontrolsdlg.ui 2009-09-22 03:59:58 +0000
4309+++ mixxx/src/dlgprefcontrolsdlg.ui 2010-01-05 04:00:31 +0000
4310@@ -6,235 +6,14 @@
4311 <rect>
4312 <x>0</x>
4313 <y>0</y>
4314- <width>590</width>
4315- <height>534</height>
4316+ <width>596</width>
4317+ <height>530</height>
4318 </rect>
4319 </property>
4320 <property name="windowTitle">
4321 <string>Form1</string>
4322 </property>
4323 <layout class="QGridLayout">
4324- <item row="1" column="0">
4325- <layout class="QGridLayout">
4326- <item row="0" column="0">
4327- <widget class="QLabel" name="textLabel">
4328- <property name="maximumSize">
4329- <size>
4330- <width>16777215</width>
4331- <height>20</height>
4332- </size>
4333- </property>
4334- <property name="text">
4335- <string/>
4336- </property>
4337- <property name="wordWrap">
4338- <bool>true</bool>
4339- </property>
4340- </widget>
4341- </item>
4342- </layout>
4343- </item>
4344- <item row="3" column="0">
4345- <layout class="QGridLayout">
4346- <item row="0" column="0" colspan="2">
4347- <widget class="QLabel" name="TextLabel6_2_3">
4348- <property name="enabled">
4349- <bool>true</bool>
4350- </property>
4351- <property name="font">
4352- <font/>
4353- </property>
4354- <property name="text">
4355- <string>Temporary pitch/rate buttons</string>
4356- </property>
4357- <property name="wordWrap">
4358- <bool>false</bool>
4359- </property>
4360- </widget>
4361- </item>
4362- <item row="0" column="3" colspan="2">
4363- <widget class="QLabel" name="TextLabel6_2_3_3">
4364- <property name="enabled">
4365- <bool>true</bool>
4366- </property>
4367- <property name="font">
4368- <font/>
4369- </property>
4370- <property name="text">
4371- <string>Permanent pitch/rate buttons</string>
4372- </property>
4373- <property name="wordWrap">
4374- <bool>false</bool>
4375- </property>
4376- </widget>
4377- </item>
4378- <item row="1" column="0">
4379- <widget class="QLabel" name="TextLabel6_2_3_2">
4380- <property name="enabled">
4381- <bool>true</bool>
4382- </property>
4383- <property name="font">
4384- <font/>
4385- </property>
4386- <property name="text">
4387- <string>Left click</string>
4388- </property>
4389- <property name="wordWrap">
4390- <bool>false</bool>
4391- </property>
4392- </widget>
4393- </item>
4394- <item row="1" column="1">
4395- <widget class="QDoubleSpinBox" name="spinBoxTempRateLeft">
4396- <property name="toolTip">
4397- <string>Temporary rate change (between 1 and 8000) when left clicking</string>
4398- </property>
4399- <property name="accelerated">
4400- <bool>true</bool>
4401- </property>
4402- <property name="decimals">
4403- <number>1</number>
4404- </property>
4405- <property name="minimum">
4406- <double>0.100000000000000</double>
4407- </property>
4408- <property name="maximum">
4409- <double>10.000000000000000</double>
4410- </property>
4411- <property name="singleStep">
4412- <double>0.100000000000000</double>
4413- </property>
4414- </widget>
4415- </item>
4416- <item row="1" column="3">
4417- <widget class="QLabel" name="TextLabel6_2_3_2_3">
4418- <property name="enabled">
4419- <bool>true</bool>
4420- </property>
4421- <property name="font">
4422- <font/>
4423- </property>
4424- <property name="text">
4425- <string>Left click</string>
4426- </property>
4427- <property name="wordWrap">
4428- <bool>false</bool>
4429- </property>
4430- </widget>
4431- </item>
4432- <item row="1" column="4">
4433- <widget class="QDoubleSpinBox" name="spinBoxPermRateLeft">
4434- <property name="toolTip">
4435- <string>Permanent rate change (between 1 and 8000) when left clicking</string>
4436- </property>
4437- <property name="accelerated">
4438- <bool>true</bool>
4439- </property>
4440- <property name="decimals">
4441- <number>1</number>
4442- </property>
4443- <property name="minimum">
4444- <double>0.100000000000000</double>
4445- </property>
4446- <property name="maximum">
4447- <double>10.000000000000000</double>
4448- </property>
4449- <property name="singleStep">
4450- <double>0.100000000000000</double>
4451- </property>
4452- </widget>
4453- </item>
4454- <item row="2" column="0">
4455- <widget class="QLabel" name="TextLabel6_2_3_2_2">
4456- <property name="enabled">
4457- <bool>true</bool>
4458- </property>
4459- <property name="font">
4460- <font/>
4461- </property>
4462- <property name="text">
4463- <string>Right click</string>
4464- </property>
4465- <property name="wordWrap">
4466- <bool>false</bool>
4467- </property>
4468- </widget>
4469- </item>
4470- <item row="2" column="1">
4471- <widget class="QDoubleSpinBox" name="spinBoxTempRateRight">
4472- <property name="toolTip">
4473- <string>Temporary rate change (between 1 and 8000) when right clicking</string>
4474- </property>
4475- <property name="accelerated">
4476- <bool>true</bool>
4477- </property>
4478- <property name="decimals">
4479- <number>1</number>
4480- </property>
4481- <property name="minimum">
4482- <double>0.100000000000000</double>
4483- </property>
4484- <property name="maximum">
4485- <double>10.000000000000000</double>
4486- </property>
4487- <property name="singleStep">
4488- <double>0.100000000000000</double>
4489- </property>
4490- </widget>
4491- </item>
4492- <item row="2" column="3">
4493- <widget class="QLabel" name="TextLabel6_2_3_2_2_2">
4494- <property name="enabled">
4495- <bool>true</bool>
4496- </property>
4497- <property name="font">
4498- <font/>
4499- </property>
4500- <property name="text">
4501- <string>Right click</string>
4502- </property>
4503- <property name="wordWrap">
4504- <bool>false</bool>
4505- </property>
4506- </widget>
4507- </item>
4508- <item row="2" column="4">
4509- <widget class="QDoubleSpinBox" name="spinBoxPermRateRight">
4510- <property name="toolTip">
4511- <string>Permanent rate change (between 1 and 8000) when right clicking</string>
4512- </property>
4513- <property name="accelerated">
4514- <bool>true</bool>
4515- </property>
4516- <property name="decimals">
4517- <number>1</number>
4518- </property>
4519- <property name="minimum">
4520- <double>0.100000000000000</double>
4521- </property>
4522- <property name="maximum">
4523- <double>10.000000000000000</double>
4524- </property>
4525- <property name="singleStep">
4526- <double>0.100000000000000</double>
4527- </property>
4528- </widget>
4529- </item>
4530- <item row="3" column="0">
4531- <spacer>
4532- <property name="orientation">
4533- <enum>Qt::Vertical</enum>
4534- </property>
4535- <property name="sizeHint" stdset="0">
4536- <size>
4537- <width>20</width>
4538- <height>40</height>
4539- </size>
4540- </property>
4541- </spacer>
4542- </item>
4543- </layout>
4544- </item>
4545 <item row="0" column="0">
4546 <layout class="QGridLayout">
4547 <item row="0" column="0">
4548@@ -353,48 +132,6 @@
4549 </property>
4550 </widget>
4551 </item>
4552- <item row="4" column="0">
4553- <widget class="QLabel" name="TextLabel6_2_2_3_3">
4554- <property name="enabled">
4555- <bool>true</bool>
4556- </property>
4557- <property name="font">
4558- <font/>
4559- </property>
4560- <property name="text">
4561- <string>Scale BPM display</string>
4562- </property>
4563- <property name="wordWrap">
4564- <bool>false</bool>
4565- </property>
4566- </widget>
4567- </item>
4568- <item row="4" column="1" colspan="2">
4569- <widget class="QComboBox" name="ComboBoxScaleBpm">
4570- <property name="sizePolicy">
4571- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
4572- <horstretch>0</horstretch>
4573- <verstretch>0</verstretch>
4574- </sizepolicy>
4575- </property>
4576- <property name="font">
4577- <font/>
4578- </property>
4579- <property name="toolTip">
4580- <string>Scale BPM display according to playback rate</string>
4581- </property>
4582- <item>
4583- <property name="text">
4584- <string>Yes</string>
4585- </property>
4586- </item>
4587- <item>
4588- <property name="text">
4589- <string>No</string>
4590- </property>
4591- </item>
4592- </widget>
4593- </item>
4594 <item row="5" column="0">
4595 <widget class="QLabel" name="TextLabel6_2_2_3_2">
4596 <property name="enabled">
4597@@ -509,6 +246,114 @@
4598 </property>
4599 </widget>
4600 </item>
4601+ <item row="9" column="1" colspan="2">
4602+ <widget class="QComboBox" name="ComboBoxCueRecall"/>
4603+ </item>
4604+ </layout>
4605+ </item>
4606+ <item row="2" column="0">
4607+ <layout class="QGridLayout">
4608+ <item row="1" column="1">
4609+ <widget class="QDoubleSpinBox" name="spinBoxTempRateLeft">
4610+ <property name="toolTip">
4611+ <string>Temporary rate change (between 1 and 8000) when left clicking</string>
4612+ </property>
4613+ <property name="accelerated">
4614+ <bool>true</bool>
4615+ </property>
4616+ <property name="decimals">
4617+ <number>1</number>
4618+ </property>
4619+ <property name="minimum">
4620+ <double>0.100000000000000</double>
4621+ </property>
4622+ <property name="maximum">
4623+ <double>10.000000000000000</double>
4624+ </property>
4625+ <property name="singleStep">
4626+ <double>0.100000000000000</double>
4627+ </property>
4628+ </widget>
4629+ </item>
4630+ <item row="1" column="4">
4631+ <widget class="QDoubleSpinBox" name="spinBoxPermRateLeft">
4632+ <property name="toolTip">
4633+ <string>Permanent rate change (between 1 and 8000) when left clicking</string>
4634+ </property>
4635+ <property name="accelerated">
4636+ <bool>true</bool>
4637+ </property>
4638+ <property name="decimals">
4639+ <number>1</number>
4640+ </property>
4641+ <property name="minimum">
4642+ <double>0.100000000000000</double>
4643+ </property>
4644+ <property name="maximum">
4645+ <double>10.000000000000000</double>
4646+ </property>
4647+ <property name="singleStep">
4648+ <double>0.100000000000000</double>
4649+ </property>
4650+ </widget>
4651+ </item>
4652+ <item row="2" column="1">
4653+ <widget class="QDoubleSpinBox" name="spinBoxTempRateRight">
4654+ <property name="toolTip">
4655+ <string>Temporary rate change (between 1 and 8000) when right clicking</string>
4656+ </property>
4657+ <property name="accelerated">
4658+ <bool>true</bool>
4659+ </property>
4660+ <property name="decimals">
4661+ <number>1</number>
4662+ </property>
4663+ <property name="minimum">
4664+ <double>0.100000000000000</double>
4665+ </property>
4666+ <property name="maximum">
4667+ <double>10.000000000000000</double>
4668+ </property>
4669+ <property name="singleStep">
4670+ <double>0.100000000000000</double>
4671+ </property>
4672+ </widget>
4673+ </item>
4674+ <item row="2" column="4">
4675+ <widget class="QDoubleSpinBox" name="spinBoxPermRateRight">
4676+ <property name="toolTip">
4677+ <string>Permanent rate change (between 1 and 8000) when right clicking</string>
4678+ </property>
4679+ <property name="accelerated">
4680+ <bool>true</bool>
4681+ </property>
4682+ <property name="decimals">
4683+ <number>1</number>
4684+ </property>
4685+ <property name="minimum">
4686+ <double>0.100000000000000</double>
4687+ </property>
4688+ <property name="maximum">
4689+ <double>10.000000000000000</double>
4690+ </property>
4691+ <property name="singleStep">
4692+ <double>0.100000000000000</double>
4693+ </property>
4694+ </widget>
4695+ </item>
4696+ <item row="3" column="0">
4697+ <spacer>
4698+ <property name="orientation">
4699+ <enum>Qt::Vertical</enum>
4700+ </property>
4701+ <property name="sizeHint" stdset="0">
4702+ <size>
4703+ <width>20</width>
4704+ <height>40</height>
4705+ </size>
4706+ </property>
4707+ </spacer>
4708+ </item>
4709 <item row="12" column="0">
4710 <widget class="QLabel" name="label_2">
4711 <property name="text">
4712@@ -516,9 +361,6 @@
4713 </property>
4714 </widget>
4715 </item>
4716- <item row="9" column="1" colspan="2">
4717- <widget class="QComboBox" name="ComboBoxCueRecall"/>
4718- </item>
4719 <item row="12" column="1">
4720 <widget class="QSlider" name="SliderRateRampSensitivity">
4721 <property name="enabled">
4722@@ -574,6 +416,102 @@
4723 </property>
4724 </widget>
4725 </item>
4726+ <item row="2" column="3">
4727+ <widget class="QLabel" name="TextLabel6_2_3_2_2_2">
4728+ <property name="enabled">
4729+ <bool>true</bool>
4730+ </property>
4731+ <property name="font">
4732+ <font/>
4733+ </property>
4734+ <property name="text">
4735+ <string>Right click</string>
4736+ </property>
4737+ <property name="wordWrap">
4738+ <bool>false</bool>
4739+ </property>
4740+ </widget>
4741+ </item>
4742+ <item row="1" column="3">
4743+ <widget class="QLabel" name="TextLabel6_2_3_2_3">
4744+ <property name="enabled">
4745+ <bool>true</bool>
4746+ </property>
4747+ <property name="font">
4748+ <font/>
4749+ </property>
4750+ <property name="text">
4751+ <string>Left click</string>
4752+ </property>
4753+ <property name="wordWrap">
4754+ <bool>false</bool>
4755+ </property>
4756+ </widget>
4757+ </item>
4758+ <item row="0" column="3" colspan="2">
4759+ <widget class="QLabel" name="TextLabel6_2_3_3">
4760+ <property name="enabled">
4761+ <bool>true</bool>
4762+ </property>
4763+ <property name="font">
4764+ <font/>
4765+ </property>
4766+ <property name="text">
4767+ <string>Permanent pitch/rate buttons</string>
4768+ </property>
4769+ <property name="wordWrap">
4770+ <bool>false</bool>
4771+ </property>
4772+ </widget>
4773+ </item>
4774+ <item row="2" column="0">
4775+ <widget class="QLabel" name="TextLabel6_2_3_2_2">
4776+ <property name="enabled">
4777+ <bool>true</bool>
4778+ </property>
4779+ <property name="font">
4780+ <font/>
4781+ </property>
4782+ <property name="text">
4783+ <string>Right click</string>
4784+ </property>
4785+ <property name="wordWrap">
4786+ <bool>false</bool>
4787+ </property>
4788+ </widget>
4789+ </item>
4790+ <item row="1" column="0">
4791+ <widget class="QLabel" name="TextLabel6_2_3_2">
4792+ <property name="enabled">
4793+ <bool>true</bool>
4794+ </property>
4795+ <property name="font">
4796+ <font/>
4797+ </property>
4798+ <property name="text">
4799+ <string>Left click</string>
4800+ </property>
4801+ <property name="wordWrap">
4802+ <bool>false</bool>
4803+ </property>
4804+ </widget>
4805+ </item>
4806+ <item row="0" column="0" colspan="2">
4807+ <widget class="QLabel" name="TextLabel6_2_3">
4808+ <property name="enabled">
4809+ <bool>true</bool>
4810+ </property>
4811+ <property name="font">
4812+ <font/>
4813+ </property>
4814+ <property name="text">
4815+ <string>Temporary pitch/rate buttons</string>
4816+ </property>
4817+ <property name="wordWrap">
4818+ <bool>false</bool>
4819+ </property>
4820+ </widget>
4821+ </item>
4822 </layout>
4823 </item>
4824 </layout>
4825
4826=== modified file 'mixxx/src/dlgpreferences.cpp'
4827--- mixxx/src/dlgpreferences.cpp 2009-11-07 04:40:46 +0000
4828+++ mixxx/src/dlgpreferences.cpp 2010-01-05 04:00:31 +0000
4829@@ -35,7 +35,6 @@
4830 #include "dlgprefcrossfader.h"
4831 #include "dlgprefrecord.h"
4832 #include "mixxx.h"
4833-#include "track.h"
4834 #include "midi/mididevicemanager.h"
4835 #include "midi/mididevice.h"
4836 #include <QTabWidget>
4837@@ -46,7 +45,7 @@
4838 #include <QEvent>
4839
4840 DlgPreferences::DlgPreferences(MixxxApp * mixxx, MixxxView * view,
4841- SoundManager * soundman, Track *track,
4842+ SoundManager * soundman,
4843 MidiDeviceManager * midi, ConfigObject<ConfigValue> * _config) : QDialog(), Ui::DlgPreferencesDlg()
4844 {
4845 m_pMixxx = mixxx;
4846@@ -59,7 +58,6 @@
4847
4848 setWindowTitle(tr("Preferences"));
4849 config = _config;
4850- m_pTrack = track;
4851
4852 createIcons();
4853 //contentsTreeWidget->setCurrentRow(0);
4854@@ -147,10 +145,11 @@
4855 #endif
4856
4857 //Update the library when you change the options
4858- if (m_pTrack && wplaylist)
4859+ /*if (m_pTrack && wplaylist)
4860 {
4861 connect(wplaylist, SIGNAL(apply()), m_pTrack, SLOT(slotScanLibrary()));
4862- }
4863+ }*/
4864+ //FIXME: Disabled due to library reworking
4865 }
4866
4867 DlgPreferences::~DlgPreferences()
4868@@ -159,7 +158,7 @@
4869 }
4870
4871 void DlgPreferences::createIcons()
4872-{
4873+{
4874 m_pSoundButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
4875 m_pSoundButton->setIcon(0, QIcon(":/images/preferences/soundhardware.png"));
4876 m_pSoundButton->setText(0, tr("Sound Hardware"));
4877@@ -280,7 +279,7 @@
4878 //Manually fire this slot since it doesn't work right...
4879 wmidiBindingsForDevice.value(index)->slotUpdate();
4880 }
4881-
4882+
4883 //If the root "MIDI Device" item is clicked, select the first MIDI device instead.
4884 //If there is no first MIDI device, display a page that says so (just so we don't not change the page)
4885 else if (current == m_pMIDITreeItem)
4886@@ -289,11 +288,11 @@
4887 {
4888 //Expand the MIDI subtree
4889 contentsTreeWidget->setItemExpanded(m_pMIDITreeItem, true);
4890-
4891+
4892 /*
4893- * FIXME: None of the following works right, for some reason. - Albert Feb 9/09
4894+ * FIXME: None of the following works right, for some reason. - Albert Feb 9/09
4895 */
4896-
4897+
4898 //Select the first MIDI device
4899 //contentsTreeWidget->setItemSelected(m_pMIDITreeItem, false);
4900 /*
4901@@ -302,14 +301,14 @@
4902 contentsTreeWidget->setItemSelected(item, false);
4903 }*/
4904 //contentsTreeWidget->setItemSelected(m_midiBindingsButtons.value(0), true);
4905-
4906+
4907 }
4908 else
4909 {
4910 pagesWidget->setCurrentWidget(wNoMidi);
4911 }
4912 }
4913-
4914+
4915 }
4916
4917 void DlgPreferences::showVinylControlPage()
4918@@ -354,7 +353,7 @@
4919 //XXX this, and the corresponding code over in onShow(), is pretty bad and messy; it should be wrapped up in a class so that constructors and destructors can handle this setup/teardown
4920
4921 m_midiBindingsButtons.clear();
4922-
4923+
4924 while (!wmidiBindingsForDevice.isEmpty())
4925 {
4926 DlgPrefMidiBindings* midiDlg = wmidiBindingsForDevice.takeLast();
4927@@ -362,7 +361,7 @@
4928 delete midiDlg;
4929 }
4930
4931- while(m_pMIDITreeItem->childCount() > 0)
4932+ while(m_pMIDITreeItem->childCount() > 0)
4933 {
4934 QTreeWidgetItem* midiBindingsButton = m_pMIDITreeItem->takeChild(0);
4935 //qDebug() << " Q|T|r\e\eWidgetItem point is " << midiBindingsButton;
4936@@ -376,7 +375,7 @@
4937 //For each MIDI device, create a MIDI dialog and put a little link to it in the treepane on the left
4938 QList<MidiDevice*> deviceList = m_pMidiDeviceManager->getDeviceList(false, true);
4939 QListIterator<MidiDevice*> it(deviceList);
4940-
4941+
4942 while (it.hasNext())
4943 {
4944 MidiDevice* currentDevice = it.next();
4945@@ -388,7 +387,7 @@
4946 connect(this, SIGNAL(showDlg()), midiDlg, SLOT(slotUpdate()));
4947 connect(buttonBox, SIGNAL(accepted()), midiDlg, SLOT(slotApply()));
4948 connect(midiDlg, SIGNAL(deviceStateChanged(DlgPrefMidiBindings*,bool)), this, SLOT(slotHighlightDevice(DlgPrefMidiBindings*,bool)));
4949-
4950+
4951 QTreeWidgetItem * midiBindingsButton = new QTreeWidgetItem(QTreeWidgetItem::Type);
4952 //qDebug() << curDeviceName << " QTreeWidgetItem point is " << midiBindingsButton;
4953 midiBindingsButton->setIcon(0, QIcon(":/images/preferences/controllers.png"));
4954@@ -397,7 +396,7 @@
4955 midiBindingsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
4956 m_pMIDITreeItem->addChild(midiBindingsButton);
4957 m_midiBindingsButtons.append(midiBindingsButton);
4958-
4959+
4960 // Set the font correctly
4961 QFont temp = midiBindingsButton->font(0);
4962 if (currentDevice->isOpen()) temp.setBold(true);
4963@@ -419,4 +418,4 @@
4964 if (enabled) temp.setBold(true);
4965 else temp.setBold(false);
4966 midiBindingsButton->setFont(0,temp);
4967-}
4968\ No newline at end of file
4969+}
4970
4971=== modified file 'mixxx/src/dlgpreferences.h'
4972--- mixxx/src/dlgpreferences.h 2009-11-07 05:03:10 +0000
4973+++ mixxx/src/dlgpreferences.h 2010-01-05 04:00:31 +0000
4974@@ -33,7 +33,6 @@
4975 class MixxxView;
4976 class PlayerProxy;
4977 class SoundManager;
4978-class Track;
4979 class DlgPrefSound;
4980 class DlgPrefMidiBindings;
4981 class DlgPrefPlaylist;
4982@@ -57,7 +56,7 @@
4983 Q_OBJECT
4984 public:
4985 DlgPreferences(MixxxApp *mixxx, MixxxView *view, SoundManager *soundman,
4986- Track *track, MidiDeviceManager* midi, ConfigObject<ConfigValue> *config);
4987+ MidiDeviceManager* midi, ConfigObject<ConfigValue> *config);
4988 ~DlgPreferences();
4989 void createIcons();
4990 public slots:
4991@@ -88,21 +87,20 @@
4992 DlgPrefVinyl *wvinylcontrol;
4993 DlgPrefShoutcast *wshoutcast;
4994
4995- QTreeWidgetItem* m_pSoundButton;
4996- QTreeWidgetItem* m_pPlaylistButton;
4997- QTreeWidgetItem* m_pControlsButton;
4998- QTreeWidgetItem* m_pEqButton;
4999- QTreeWidgetItem* m_pCrossfaderButton;
5000- QTreeWidgetItem* m_pRecordingButton;
The diff has been truncated for viewing.