Commit 37797ea0 authored by Ronan's avatar Ronan
Browse files

feat(src/components/codecs/CodecsModel): in progress

parent cf938262
......@@ -85,6 +85,42 @@ QVariant CodecsModel::data (const QModelIndex &index, int role) const {
return QVariant();
}
bool CodecsModel::moveRow (
const QModelIndex &source_parent,
int source_row,
const QModelIndex &destination_parent,
int destination_child
) {
return moveRows(source_parent, source_row, 1, destination_parent, destination_child);
}
bool CodecsModel::moveRows (
const QModelIndex &source_parent,
int source_row,
int count,
const QModelIndex &destination_parent,
int destination_child
) {
int limit = source_row + count - 1;
if (source_row < 0 || count < 0 || limit >= m_codecs.count())
return false;
beginMoveRows(source_parent, source_row, limit, destination_parent, destination_child);
if (destination_child < source_row) {
for (int i = source_row; i <= limit; ++i)
m_codecs.move(source_row, destination_child + i - source_row);
} else {
for (int i = source_row; i <= limit; ++i)
m_codecs.move(source_row, destination_child + i);
}
endRemoveRows();
return true;
}
// -----------------------------------------------------------------------------
void CodecsModel::enableCodec (int id, bool status) {
......
......@@ -53,6 +53,21 @@ public:
QHash<int, QByteArray> roleNames () const override;
QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
bool moveRow (
const QModelIndex &source_parent,
int source_row,
const QModelIndex &destination_parent,
int destination_child
);
bool moveRows (
const QModelIndex &source_parent,
int source_row,
int count,
const QModelIndex &destination_parent,
int destination_child
) override;
void enableCodec (int id, bool status);
private:
......
......@@ -8,7 +8,7 @@ import Linphone.Styles 1.0
// =============================================================================
Column {
property alias model: visualModel.model
property alias model: view.model
// ---------------------------------------------------------------------------
// Header.
......@@ -76,129 +76,111 @@ Column {
height: count * CodecsViewerStyle.attribute.height
model: DelegateModel {
id: visualModel
// -----------------------------------------------------------------------
// One codec.
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// One codec.
// -----------------------------------------------------------------------
delegate: MouseArea {
id: dragArea
delegate: MouseArea {
id: dragArea
property bool held: false
property bool held: false
anchors {
left: parent.left
right: parent.right
}
drag {
axis: Drag.YAxis
maximumY: (view.count - DelegateModel.itemsIndex) * height - height
minimumY: -DelegateModel.itemsIndex * height
target: held ? content : undefined
}
height: CodecsViewerStyle.attribute.height
onPressed: held = true
onReleased: {
held = false
anchors {
left: parent.left
right: parent.right
}
content.y = 0
}
drag {
axis: Drag.YAxis
Rectangle {
id: content
maximumY: (view.count - index) * height - height
minimumY: -index * height
Drag.active: dragArea.held
Drag.source: dragArea
Drag.hotSpot.x: width / 2
Drag.hotSpot.y: height / 2
target: held ? content : undefined
}
color: CodecsViewerStyle.attribute.background.color.normal
height: CodecsViewerStyle.attribute.height
height: dragArea.height
width: dragArea.width
onPressed: held = true
onReleased: {
held = false
console.log('toto', content.y)
content.y = 0
}
RowLayout {
anchors.fill: parent
Rectangle {
id: content
spacing: CodecsViewerStyle.column.spacing
Drag.active: dragArea.held
Drag.source: dragArea
Drag.hotSpot.x: width / 2
Drag.hotSpot.y: height / 2
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.mimeWidth
text: $codec.mime
}
color: CodecsViewerStyle.attribute.background.color.normal
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.encoderDescriptionWidth
text: $codec.encoderDescription
}
height: dragArea.height
width: dragArea.width
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.clockRateWidth
text: $codec.clockRate
}
RowLayout {
anchors.fill: parent
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.bitrateWidth
text: $codec.bitrate
}
spacing: CodecsViewerStyle.column.spacing
TextField {
Layout.preferredWidth: CodecsViewerStyle.column.recvFmtpWidth
text: $codec.recvFmtp
}
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.mimeWidth
text: $codec.mime
}
Switch {
Layout.fillWidth: true
Layout.leftMargin: 10
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.encoderDescriptionWidth
text: $codec.encoderDescription
}
checked: $codec.enabled
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.clockRateWidth
text: $codec.clockRate
}
onClicked: visualModel.model.enableCodec(index, !checked)
}
CodecAttribute {
Layout.preferredWidth: CodecsViewerStyle.column.bitrateWidth
text: $codec.bitrate
}
}
DropArea {
anchors {
fill: parent
margins: CodecsViewerStyle.attribute.dropArea.margins
TextField {
Layout.preferredWidth: CodecsViewerStyle.column.recvFmtpWidth
text: $codec.recvFmtp
}
onEntered: {
visualModel.items.move(
drag.source.DelegateModel.itemsIndex,
dragArea.DelegateModel.itemsIndex
)
Switch {
Layout.fillWidth: true
Layout.leftMargin: 10
checked: $codec.enabled
onClicked: view.model.enableCodec(index, !checked)
}
}
}
MouseArea {
id: mouseArea
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
anchors.fill: parent
hoverEnabled: true
onPressed: mouse.accepted = false
}
onPressed: mouse.accepted = false
}
// ---------------------------------------------------------------------
// Animations/States codec.
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Animations/States codec.
// ---------------------------------------------------------------------
states: State {
when: mouseArea.containsMouse
states: State {
when: mouseArea.containsMouse
PropertyChanges {
target: content
color: CodecsViewerStyle.attribute.background.color.hovered
}
PropertyChanges {
target: content
color: CodecsViewerStyle.attribute.background.color.hovered
}
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment