Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Multimedia
Kdenlive
Commits
cf5e56aa
Commit
cf5e56aa
authored
May 20, 2022
by
Jean-Baptiste Mardelle
Browse files
Fix several small glitches in bin selection
parent
cf5c0a47
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/bin/bin.cpp
View file @
cf5e56aa
...
...
@@ -683,7 +683,6 @@ void MyListView::leaveEvent(QEvent *event)
void
MyListView
::
mousePressEvent
(
QMouseEvent
*
event
)
{
QListView
::
mousePressEvent
(
event
);
if
(
event
->
button
()
==
Qt
::
LeftButton
)
{
QModelIndex
ix
=
indexAt
(
event
->
pos
());
if
(
ix
.
isValid
())
{
...
...
@@ -696,7 +695,7 @@ void MyListView::mousePressEvent(QMouseEvent *event)
}
emit
updateDragMode
(
m_dragType
);
}
event
->
accept
(
);
QListView
::
mousePressEvent
(
event
);
}
void
MyListView
::
mouseMoveEvent
(
QMouseEvent
*
event
)
...
...
@@ -706,6 +705,7 @@ void MyListView::mouseMoveEvent(QMouseEvent *event)
QModelIndexList
indexes
=
selectedIndexes
();
if
(
indexes
.
isEmpty
())
{
// Dragging from empty zone, abort
QListView
::
mouseMoveEvent
(
event
);
return
;
}
auto
*
drag
=
new
QDrag
(
this
);
...
...
@@ -734,7 +734,9 @@ void MyListView::mouseMoveEvent(QMouseEvent *event)
}
drag
->
exec
();
emit
processDragEnd
();
return
;
}
QListView
::
mouseMoveEvent
(
event
);
return
;
}
QModelIndex
index
=
indexAt
(
event
->
pos
());
...
...
@@ -829,8 +831,10 @@ void MyTreeView::mouseMoveEvent(QMouseEvent *event)
int
distance
=
(
event
->
pos
()
-
m_startPos
).
manhattanLength
();
if
(
distance
>=
QApplication
::
startDragDistance
())
{
dragged
=
performDrag
();
return
;
}
}
QTreeView
::
mouseMoveEvent
(
event
);
return
;
}
else
{
QModelIndex
index
=
indexAt
(
event
->
pos
());
...
...
@@ -932,6 +936,7 @@ bool MyTreeView::performDrag()
drag
->
setPixmap
(
QPixmap
::
fromImage
(
image
));
}
drag
->
exec
();
drag
->
deleteLater
();
emit
processDragEnd
();
return
true
;
}
...
...
@@ -2260,7 +2265,6 @@ void Bin::selectClipById(const QString &clipId, int frame, const QPoint &zone, b
m_itemView
->
scrollTo
(
m_proxyModel
->
mapFromSource
(
ix
),
QAbstractItemView
::
EnsureVisible
);
}
}
else
{
m_proxyModel
->
selectionModel
()
->
clearSelection
();
std
::
shared_ptr
<
ProjectClip
>
clip
=
getBinClip
(
clipId
);
if
(
clip
==
nullptr
)
{
return
;
...
...
@@ -2295,8 +2299,10 @@ void Bin::selectProxyModel(const QModelIndex &id)
// Set item as current so that it displays its content in clip monitor
setCurrent
(
currentItem
);
AbstractProjectItem
::
PROJECTITEMTYPE
itemType
=
currentItem
->
itemType
();
bool
isClip
=
itemType
==
AbstractProjectItem
::
ClipItem
;
bool
isFolder
=
itemType
==
AbstractProjectItem
::
FolderItem
;
std
::
shared_ptr
<
ProjectClip
>
clip
=
nullptr
;
if
(
i
temType
==
AbstractProjectItem
::
ClipItem
)
{
if
(
i
sClip
)
{
clip
=
std
::
static_pointer_cast
<
ProjectClip
>
(
currentItem
);
m_tagsWidget
->
setTagData
(
clip
->
tags
());
m_deleteAction
->
setText
(
i18n
(
"Delete Clip"
));
...
...
@@ -2319,7 +2325,7 @@ void Bin::selectProxyModel(const QModelIndex &id)
if
(
clip
&&
clip
->
statusReady
())
{
emit
requestShowClipProperties
(
clip
,
false
);
m_proxyAction
->
blockSignals
(
true
);
if
(
i
temType
==
AbstractProjectItem
::
ClipItem
)
{
if
(
i
sClip
)
{
emit
findInTimeline
(
clip
->
clipId
(),
clip
->
timelineInstances
());
}
clipService
=
clip
->
getProducerProperty
(
QStringLiteral
(
"mlt_service"
));
...
...
@@ -2335,30 +2341,30 @@ void Bin::selectProxyModel(const QModelIndex &id)
emit
findInTimeline
(
QString
());
m_openAction
->
setEnabled
(
false
);
}
m_clipsActionsMenu
->
setEnabled
(
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_editAction
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_clipsActionsMenu
->
setEnabled
(
!
is
Folder
);
m_editAction
->
setVisible
(
!
is
Folder
);
m_editAction
->
setEnabled
(
true
);
m_extractAudioAction
->
menuAction
()
->
setVisible
(
hasAudio
);
m_extractAudioAction
->
setEnabled
(
hasAudio
);
m_openAction
->
setEnabled
(
type
==
ClipType
::
Image
||
type
==
ClipType
::
Audio
||
type
==
ClipType
::
TextTemplate
||
type
==
ClipType
::
Text
);
m_openAction
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_duplicateAction
->
setEnabled
(
i
temType
==
AbstractProjectItem
::
ClipItem
);
m_duplicateAction
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_inTimelineAction
->
setEnabled
(
i
temType
==
AbstractProjectItem
::
ClipItem
);
m_inTimelineAction
->
setVisible
(
i
temType
==
AbstractProjectItem
::
ClipItem
);
m_locateAction
->
setEnabled
(
itemType
!=
AbstractProjectItem
::
Folder
Item
&&
isImported
);
m_locateAction
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
&&
isImported
);
m_proxyAction
->
setEnabled
(
m_doc
->
useProxy
()
&&
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_reloadAction
->
setEnabled
(
i
temType
==
AbstractProjectItem
::
ClipItem
);
m_reloadAction
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_replaceAction
->
setEnabled
(
i
temType
==
AbstractProjectItem
::
ClipItem
);
m_replaceAction
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_openAction
->
setVisible
(
!
is
Folder
);
m_duplicateAction
->
setEnabled
(
i
sClip
);
m_duplicateAction
->
setVisible
(
!
is
Folder
);
m_inTimelineAction
->
setEnabled
(
i
sClip
);
m_inTimelineAction
->
setVisible
(
i
sClip
);
m_locateAction
->
setEnabled
(
!
is
Folder
&&
isImported
);
m_locateAction
->
setVisible
(
!
is
Folder
&&
isImported
);
m_proxyAction
->
setEnabled
(
m_doc
->
useProxy
()
&&
!
is
Folder
);
m_reloadAction
->
setEnabled
(
i
sClip
);
m_reloadAction
->
setVisible
(
!
is
Folder
);
m_replaceAction
->
setEnabled
(
i
sClip
);
m_replaceAction
->
setVisible
(
!
is
Folder
);
m_clipsActionsMenu
->
menuAction
()
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
&&
!
is
Folder
&&
(
clipService
.
contains
(
QStringLiteral
(
"avformat"
))
||
clipService
.
contains
(
QStringLiteral
(
"xml"
))
||
clipService
.
contains
(
QStringLiteral
(
"consumer"
))));
m_transcodeAction
->
setEnabled
(
itemType
!=
AbstractProjectItem
::
Folder
Item
);
m_transcodeAction
->
setVisible
(
itemType
!=
AbstractProjectItem
::
Folder
Item
&&
(
type
==
ClipType
::
Playlist
||
type
==
ClipType
::
Text
||
clipService
.
contains
(
QStringLiteral
(
"avformat"
))));
m_transcodeAction
->
setEnabled
(
!
is
Folder
);
m_transcodeAction
->
setVisible
(
!
is
Folder
&&
(
type
==
ClipType
::
Playlist
||
type
==
ClipType
::
Text
||
clipService
.
contains
(
QStringLiteral
(
"avformat"
))));
m_deleteAction
->
setEnabled
(
true
);
m_renameAction
->
setEnabled
(
true
);
...
...
@@ -3027,14 +3033,14 @@ void Bin::selectClip(const std::shared_ptr<ProjectClip> &clip)
view
->
expand
(
m_proxyModel
->
mapFromSource
(
ix
.
parent
()));
const
QModelIndex
id2
=
m_itemModel
->
index
(
row
,
m_itemModel
->
columnCount
()
-
1
,
ix
.
parent
());
if
(
id
.
isValid
()
&&
id2
.
isValid
())
{
m_proxyModel
->
selectionModel
()
->
select
(
QItemSelection
(
m_proxyModel
->
mapFromSource
(
id
),
m_proxyModel
->
mapFromSource
(
id2
)),
QItemSelectionModel
::
Select
Current
);
m_proxyModel
->
selectionModel
()
->
select
(
QItemSelection
(
m_proxyModel
->
mapFromSource
(
id
),
m_proxyModel
->
mapFromSource
(
id2
)),
QItemSelectionModel
::
ClearAndSelect
|
QItemSelectionModel
::
Current
);
}
}
else
{
// Ensure parent folder is currently opened
m_itemView
->
setRootIndex
(
m_proxyModel
->
mapFromSource
(
ix
.
parent
()));
m_upAction
->
setEnabled
(
!
ix
.
parent
().
data
(
AbstractProjectItem
::
DataId
).
toString
().
isEmpty
());
if
(
id
.
isValid
())
{
m_proxyModel
->
selectionModel
()
->
se
tCurrentIndex
(
m_proxyModel
->
mapFromSource
(
id
),
QItemSelectionModel
::
ClearAndSelect
);
m_proxyModel
->
selectionModel
()
->
se
lect
(
m_proxyModel
->
mapFromSource
(
id
),
QItemSelectionModel
::
ClearAndSelect
|
QItemSelectionModel
::
Current
);
}
}
m_itemView
->
scrollTo
(
m_proxyModel
->
mapFromSource
(
ix
),
QAbstractItemView
::
EnsureVisible
);
...
...
src/bin/projectsortproxymodel.cpp
View file @
cf5e56aa
...
...
@@ -158,15 +158,38 @@ void ProjectSortProxyModel::slotClearSearchFilters()
void
ProjectSortProxyModel
::
onCurrentRowChanged
(
const
QItemSelection
&
current
,
const
QItemSelection
&
previous
)
{
Q_UNUSED
(
previous
)
QModelIndexList
indexes
=
current
.
indexes
();
// Warning: the "current" parameter only represents the item that was newly selected, but not all selected items
QModelIndexList
indexes
=
m_selection
->
selectedIndexes
();
if
(
indexes
.
isEmpty
())
{
// No item selected
emit
selectModel
(
QModelIndex
());
return
;
}
for
(
int
ix
=
0
;
ix
<
indexes
.
count
();
ix
++
)
{
if
(
indexes
.
at
(
ix
).
column
()
==
0
||
indexes
.
at
(
ix
).
column
()
==
7
)
{
emit
selectModel
(
indexes
.
at
(
ix
));
break
;
if
(
indexes
.
contains
(
m_selection
->
currentIndex
()))
{
// Select current item
emit
selectModel
(
m_selection
->
currentIndex
());
}
else
{
QModelIndexList
newlySelected
=
current
.
indexes
();
if
(
!
newlySelected
.
isEmpty
())
{
QModelIndex
ix
=
newlySelected
.
takeLast
();
while
(
ix
.
column
()
!=
0
&&
!
newlySelected
.
isEmpty
())
{
ix
=
newlySelected
.
takeLast
();
}
if
(
ix
.
column
()
==
0
)
{
emit
selectModel
(
ix
);
return
;
}
}
else
{
if
(
!
indexes
.
isEmpty
())
{
QModelIndex
ix
=
indexes
.
takeLast
();
while
(
ix
.
column
()
!=
0
&&
!
indexes
.
isEmpty
())
{
ix
=
indexes
.
takeLast
();
}
if
(
ix
.
column
()
==
0
)
{
emit
selectModel
(
ix
);
return
;
}
}
}
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment