Changeset View
Changeset View
Standalone View
Standalone View
src/qml/MediaTrackMetadataView.qml
Show All 23 Lines | |||||
24 | import QtGraphicalEffects 1.0 | 24 | import QtGraphicalEffects 1.0 | ||
25 | import org.kde.elisa 1.0 | 25 | import org.kde.elisa 1.0 | ||
26 | 26 | | |||
27 | Window { | 27 | Window { | ||
28 | id: trackMetadata | 28 | id: trackMetadata | ||
29 | 29 | | |||
30 | property int databaseId: 0 | 30 | property int databaseId: 0 | ||
31 | property string fileName | 31 | property string fileName | ||
32 | property bool radio: false | ||||
astippich: call this isRadio/isStream for consistency and make it an alias of realModel.isRadio | |||||
32 | 33 | | |||
33 | signal rejected() | 34 | signal rejected() | ||
34 | 35 | | |||
35 | LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft | 36 | LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft | ||
36 | LayoutMirroring.childrenInherit: true | 37 | LayoutMirroring.childrenInherit: true | ||
37 | 38 | | |||
38 | title: i18nc("Window title for track metadata", "View Details") | 39 | title: { | ||
40 | if(trackMetadata.radio && databaseId === -1){ | ||||
41 | return i18nc("Window title for track metadata", "Create a Radio") | ||||
42 | } | ||||
43 | | ||||
44 | return i18nc("Window title for track metadata", "View Details") | ||||
45 | } | ||||
39 | 46 | | |||
40 | TrackMetadataModel { | 47 | TrackMetadataModel { | ||
41 | id: realModel | 48 | id: realModel | ||
42 | 49 | | |||
43 | manager: elisa.musicManager | 50 | isRadio: trackMetadata.radio | ||
51 | manager: elisa.musicManager //Important | ||||
astippich: remove comment :) | |||||
44 | } | 52 | } | ||
45 | 53 | | |||
46 | modality: Qt.NonModal | 54 | modality: Qt.NonModal | ||
47 | flags: Qt.Dialog | Qt.WindowCloseButtonHint | 55 | flags: Qt.Dialog | Qt.WindowCloseButtonHint | ||
48 | 56 | | |||
49 | color: myPalette.window | 57 | color: myPalette.window | ||
50 | 58 | | |||
51 | minimumHeight: elisaTheme.coverImageSize * 1.8 | 59 | minimumHeight: elisaTheme.coverImageSize * 1.8 | ||
Show All 23 Lines | 76 | Image { | |||
75 | 83 | | |||
76 | Layout.alignment: Qt.AlignTop | Qt.AlignHCenter | 84 | Layout.alignment: Qt.AlignTop | Qt.AlignHCenter | ||
77 | Layout.preferredHeight: elisaTheme.coverImageSize | 85 | Layout.preferredHeight: elisaTheme.coverImageSize | ||
78 | Layout.preferredWidth: elisaTheme.coverImageSize | 86 | Layout.preferredWidth: elisaTheme.coverImageSize | ||
79 | Layout.minimumHeight: elisaTheme.coverImageSize | 87 | Layout.minimumHeight: elisaTheme.coverImageSize | ||
80 | Layout.minimumWidth: elisaTheme.coverImageSize | 88 | Layout.minimumWidth: elisaTheme.coverImageSize | ||
81 | Layout.maximumHeight: elisaTheme.coverImageSize | 89 | Layout.maximumHeight: elisaTheme.coverImageSize | ||
82 | Layout.maximumWidth: elisaTheme.coverImageSize | 90 | Layout.maximumWidth: elisaTheme.coverImageSize | ||
91 | | ||||
92 | visible: !trackMetadata.radio | ||||
mgallien: Web radios cannot have an image ? | |||||
At first, I disabled the feature for radio to focus only on Title, Address and Comment (comment is not yet used I admit). jguidon: At first, I disabled the feature for radio to focus only on Title, Address and Comment (comment… | |||||
mgallien: Yes sure. Let's not delay that for a picture. | |||||
83 | } | 93 | } | ||
84 | 94 | | |||
85 | ListView { | 95 | ListView { | ||
86 | id: trackData | 96 | id: trackData | ||
87 | 97 | | |||
88 | Layout.fillWidth: true | 98 | Layout.fillWidth: true | ||
89 | Layout.fillHeight: true | 99 | Layout.fillHeight: true | ||
90 | Layout.leftMargin: 2 * elisaTheme.layoutHorizontalMargin | 100 | Layout.leftMargin: 2 * elisaTheme.layoutHorizontalMargin | ||
Show All 9 Lines | |||||
100 | ScrollHelper { | 110 | ScrollHelper { | ||
101 | id: scrollHelper | 111 | id: scrollHelper | ||
102 | flickable: trackData | 112 | flickable: trackData | ||
103 | anchors.fill: trackData | 113 | anchors.fill: trackData | ||
104 | } | 114 | } | ||
105 | model: realModel | 115 | model: realModel | ||
106 | 116 | | |||
107 | delegate: MetaDataDelegate { | 117 | delegate: MetaDataDelegate { | ||
118 | radio: trackMetadata.radio | ||||
108 | width: scrollBar.visible ? (!LayoutMirroring.enabled ? trackData.width - scrollBar.width : trackData.width) : trackData.width | 119 | width: scrollBar.visible ? (!LayoutMirroring.enabled ? trackData.width - scrollBar.width : trackData.width) : trackData.width | ||
120 | onRadioEdited: applyButton.enabled = true | ||||
109 | } | 121 | } | ||
110 | } | 122 | } | ||
111 | } | 123 | } | ||
112 | 124 | | |||
113 | RowLayout { | 125 | RowLayout { | ||
114 | Layout.alignment: Qt.AlignLeft | Qt.AlignBottom | 126 | Layout.alignment: Qt.AlignLeft | Qt.AlignBottom | ||
115 | Layout.topMargin: elisaTheme.layoutVerticalMargin | 127 | Layout.topMargin: elisaTheme.layoutVerticalMargin | ||
116 | Layout.bottomMargin: elisaTheme.layoutVerticalMargin | 128 | Layout.bottomMargin: elisaTheme.layoutVerticalMargin | ||
Show All 14 Lines | 142 | LabelWithToolTip { | |||
131 | id: fileNameLabel | 143 | id: fileNameLabel | ||
132 | 144 | | |||
133 | Layout.fillWidth: true | 145 | Layout.fillWidth: true | ||
134 | 146 | | |||
135 | text: realModel.fileUrl | 147 | text: realModel.fileUrl | ||
136 | 148 | | |||
137 | elide: Text.ElideRight | 149 | elide: Text.ElideRight | ||
138 | } | 150 | } | ||
151 | | ||||
152 | visible: !trackMetadata.radio | ||||
153 | } | ||||
154 | | ||||
155 | RowLayout{ | ||||
156 | spacing: elisaTheme.layoutVerticalMargin | ||||
157 | | ||||
158 | DialogButtonBox { | ||||
159 | Layout.minimumHeight: implicitHeight | ||||
160 | alignment: Qt.AlignLeft | ||||
161 | | ||||
162 | Button { | ||||
163 | id: deleteButton | ||||
164 | text: qsTr("Delete") | ||||
165 | DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole | ||||
166 | onClicked: realModel.deleteRadio() | ||||
167 | } | ||||
139 | } | 168 | } | ||
140 | 169 | | |||
141 | DialogButtonBox { | 170 | DialogButtonBox { | ||
142 | id: buttons | 171 | id: buttons | ||
143 | 172 | | |||
144 | Layout.fillWidth: true | 173 | Layout.fillWidth: true | ||
145 | Layout.minimumHeight: implicitHeight | 174 | Layout.minimumHeight: implicitHeight | ||
175 | alignment: Qt.AlignRight | ||||
176 | | ||||
177 | Button { | ||||
178 | id: applyButton | ||||
179 | | ||||
180 | text: qsTr("Apply") | ||||
181 | DialogButtonBox.buttonRole: DialogButtonBox.ApplyRole | ||||
182 | onClicked: realModel.saveData() | ||||
183 | enabled: false | ||||
184 | } | ||||
185 | Button { | ||||
186 | text: qsTr("Close") | ||||
187 | DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole | ||||
188 | onClicked: trackMetadata.close() | ||||
189 | } | ||||
190 | } | ||||
191 | | ||||
192 | visible: trackMetadata.radio | ||||
193 | } | ||||
194 | | ||||
195 | DialogButtonBox { | ||||
196 | id: buttonsTrack | ||||
197 | | ||||
198 | Layout.fillWidth: true | ||||
199 | Layout.minimumHeight: implicitHeight | ||||
146 | 200 | | |||
147 | standardButtons: DialogButtonBox.Close | 201 | standardButtons: DialogButtonBox.Close | ||
148 | alignment: Qt.AlignRight | 202 | alignment: Qt.AlignRight | ||
149 | onRejected: trackMetadata.rejected() | 203 | onRejected: trackMetadata.close() | ||
204 | | ||||
205 | visible: !trackMetadata.radio | ||||
150 | } | 206 | } | ||
151 | } | 207 | } | ||
152 | 208 | | |||
153 | Connections { | 209 | Connections { | ||
154 | target: elisa | 210 | target: elisa | ||
155 | 211 | | |||
156 | onMusicManagerChanged: { | 212 | onMusicManagerChanged: { | ||
157 | if (databaseId !== 0) { | 213 | if (databaseId === -1) { | ||
214 | realModel.initializeForNewRadio() | ||||
215 | } else if (databaseId !== 0) { | ||||
158 | realModel.initializeByTrackId(databaseId) | 216 | realModel.initializeByTrackId(databaseId) | ||
159 | } else { | 217 | } else { | ||
160 | realModel.initializeByTrackFileName(fileName) | 218 | realModel.initializeByTrackFileName(fileName) | ||
161 | } | 219 | } | ||
162 | } | 220 | } | ||
163 | } | 221 | } | ||
164 | 222 | | |||
223 | Connections{ | ||||
224 | target: realModel | ||||
225 | | ||||
226 | onDisableApplyButton: applyButton.enabled = false | ||||
227 | onShowDeleteButton: deleteButton.visible = true | ||||
228 | onHideDeleteButton: deleteButton.visible = false | ||||
229 | onCloseWindow: trackMetadata.rejected() | ||||
230 | } | ||||
231 | | ||||
165 | Component.onCompleted: { | 232 | Component.onCompleted: { | ||
166 | if (elisa.musicManager) { | 233 | if (elisa.musicManager) { | ||
167 | if (databaseId !== 0) { | 234 | if (databaseId === -1) { | ||
235 | realModel.initializeForNewRadio() | ||||
236 | } else if (databaseId !== 0) { | ||||
168 | realModel.initializeByTrackId(databaseId) | 237 | realModel.initializeByTrackId(databaseId) | ||
169 | } else { | 238 | } else { | ||
170 | realModel.initializeByTrackFileName(fileName) | 239 | realModel.initializeByTrackFileName(fileName) | ||
171 | } | 240 | } | ||
172 | } | 241 | } | ||
173 | } | 242 | } | ||
174 | } | 243 | } |
call this isRadio/isStream for consistency and make it an alias of realModel.isRadio