Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (4)
......@@ -57,6 +57,12 @@ FocusScope {
readonly property int rowHeight: cellHeight + verticalSpacing
// This property enables you to reuse items that are instantiated for
// different indexes when particular index goes out of view
// not setting may result in large performance penalty
// default is true
property bool reuseItems: true
property int rowX: 0
property int horizontalSpacing: VLCStyle.column_spacing
property int verticalSpacing: VLCStyle.column_spacing
......@@ -94,12 +100,33 @@ FocusScope {
property int _currentFocusReason: Qt.OtherFocusReason
//delegate to display the extended item
property Component delegate: Item{}
// The delegate provides a template defining each item instantiated by the view.
// 'delegate' must have following properties defined -
// 'var model'
// - set by ExpandGridView, this defines model data associated with item
// index data can be accesses by the model roles
// 'int index'
// - set by ExpandGridView, this defines the index to which this delegate
// is associated to
// 'bool selected'
// - set by ExpandGridView, this defines if the associated index is selected
// in selectionModel
//
// optional properties -
// 'bool delayRemove'
// - if defined and set, item will not be removed when it goes out of view
// ExpandGridView will never modify this value
//
property Component delegate: Item {
property var model: null
property int index: - 1
property bool selected: false
}
property var _idChildrenList: []
property var _unusedItemList: []
property var _currentRange: [0,0]
property var _delayedChildrenMap: ({})
// Aliases
......@@ -175,6 +202,13 @@ FocusScope {
flickable.layout(true)
}
onReuseItemsChanged: {
if (!reuseItems) {
_unusedItemList.forEach((item) => { item.destroy() })
_unusedItemList = []
}
}
// Keys
Keys.onPressed: (event) => {
......@@ -255,6 +289,9 @@ FocusScope {
const iMin = topLeft.row
const iMax = bottomRight.row + 1 // [] => [)
const f_l = _currentRange
_refreshDelayedChildData(iMin, iMax)
if (iMin < f_l[1] && f_l[0] < iMax) {
_refreshData(iMin, iMax)
}
......@@ -283,9 +320,15 @@ FocusScope {
function _updateSelectedRange(topLeft, bottomRight, select) {
let iMin = topLeft.row
let iMax = bottomRight.row + 1 // [] => [)
// delayed children can be out of currentRange
_updateDelayedChildSelected(iMin, iMax, select)
if (iMin < root._currentRange[1] && root._currentRange[0] < iMax) {
// only update item in the view
iMin = Math.max(iMin, root._currentRange[0])
iMax = Math.min(iMax, root._currentRange[1])
for (let j = iMin; j < iMax; j++) {
const item = root._getItem(j)
console.assert(item)
......@@ -511,16 +554,28 @@ FocusScope {
return rowCol[0] % 2 + 2 * (rowCol[1] % 2)
}
function _repositionItem(id, x, y) {
const item = _getItem(id)
console.assert(item !== undefined, "wrong child: " + id)
function _updatePosition(id, item, x, y) {
//theses properties are always defined in Item
item.x = x
item.y = y
item.z = _indexToZ(id)
// update required property (do we need this??)
item.selected = selectionModel.isSelected(id)
}
function _repositionItem(id, x, y) {
const item = _getItem(id)
console.assert(item !== undefined, "wrong child: " + id)
_updatePosition(id, item, x, y)
return item
}
function _repositionDelayedItem(id, x, y) {
const item = _delayedChildrenMap[id]
_updatePosition(id, item, x, y)
return item
}
......@@ -558,17 +613,63 @@ FocusScope {
return item
}
function _takeDelayedChild(id) {
const item = _delayedChildrenMap[id]
console.assert(typeof item !== "undefined")
delete _delayedChildrenMap[id]
return item
}
function _shouldDelayRemove(item) {
return Helpers.get(item, "delayRemove", false)
}
function _delayRemove(id, item) {
_delayedChildrenMap[id] = item
item.delayRemoveChanged.connect(() => {
if (id in _delayedChildrenMap && !item.delayRemove) {
const removed = _takeDelayedChild(id)
console.assert(removed === item)
item.destroy()
}
})
}
function _refreshDelayedChildData(iMin, iMax) {
for (let i = iMin; i < iMax; ++i) {
if (!(i in _delayedChildrenMap))
continue
const item = _delayedChildrenMap[i]
item.model = model.getDataAt(i)
}
}
function _updateDelayedChildSelected(iMin, iMax, select) {
for (let i = iMin; i < iMax; ++i) {
if (!(i in _delayedChildrenMap))
continue
const item = _delayedChildrenMap[i]
item.selected = select
}
}
function _setupChild(id, ydelta) {
const pos = getItemPos(id)
pos[1] += ydelta
let item;
if (_containsItem(id))
item = _repositionItem(id, pos[0], pos[1] + ydelta)
else if (_unusedItemList.length > 0)
item = _recycleItem(id, pos[0], pos[1] + ydelta)
item = _repositionItem(id, pos[0], pos[1])
else if (id in _delayedChildrenMap)
item = _repositionDelayedItem(id, pos[0], pos[1])
else if (_unusedItemList.length > 0) // if reuseItems is false, _unusedItemList is always empty
item = _recycleItem(id, pos[0], pos[1])
else
item = _createItem(id, pos[0], pos[1] + ydelta)
item = _createItem(id, pos[0], pos[1])
// NOTE: This makes sure we have the proper focus reason on the GridItem.
if (activeFocus && currentIndex === item.index && expandIndex === -1)
......@@ -749,8 +850,13 @@ FocusScope {
function _updateChildrenMap(first, last) {
if (first >= last) {
root._idChildrenList.forEach(function(item) { item.visible = false; })
root._unusedItemList = root._idChildrenList
if (root.reuseItems) {
root._idChildrenList.forEach((item) => { item.visible = false; })
root._unusedItemList = root._idChildrenList
} else {
root._idChildrenList.forEach((item) => { item.destroy() })
}
root._idChildrenList = []
root._currentRange = [0, 0]
return
......@@ -760,16 +866,31 @@ FocusScope {
const newList = new Array(last - first)
// move items from currentRange still in view
for (let i = overlapped[0]; i < overlapped[1]; ++i) {
newList[i - first] = root._getItem(i)
root._setItem(i, undefined)
}
for (let id in _delayedChildrenMap) {
if (id >= first && id < last) {
newList[id - first] = _takeDelayedChild(id)
}
}
// handle item from current range which are not in view
for (let i = root._currentRange[0]; i < root._currentRange[1]; ++i) {
const item = root._getItem(i)
if (typeof item !== "undefined") {
item.visible = false
root._unusedItemList.push(item)
if (_shouldDelayRemove(item)) {
_delayRemove(i, item)
} else if (root.reuseItems) {
item.visible = false
root._unusedItemList.push(item)
} else {
item.destroy()
}
// root._setItem(i, undefined) // not needed the list will be reset following this loop
}
}
......@@ -812,6 +933,26 @@ FocusScope {
// Place the delegates after the expandItem
_setupIndexes(forceRelayout, [topGridEndId, lastId], root._expandItemVerticalSpace)
// handle delayedRemoveChildren
if (forceRelayout) {
for (let id in _delayedChildrenMap) {
// check invariant: delayedRemove child must be reused when they come in view
console.assert((id < root._currentRange[0]) || (id >= root._currentRange[1]))
if (id >= root._count) {
// index is no longer valid
const item = _takeDelayedChild(id)
item.destroy()
} else {
const yDelta = (id >= topGridEndId) ? root._expandItemVerticalSpace : 0
_setupChild(id, yDelta)
}
}
}
if (!root.reuseItems) // check invariant: correct cleanup if reuseItems is not set
console.assert(_unusedItemList.length == 0)
}
Connections {
......