Spracherkennung für: .qml vermutete Sprache: Abap {ABAP[69] Delphi[56] Cobol[52]} [Methode: maximale Elemente, drei Dimensionen]
/*****************************************************************************
* Copyright (C) 2025 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
import QtQuick
import QtQuick.Layouts
import QtQuick.Templates as T
import VLC.MainInterface
import VLC.Style
import VLC.Menus
import VLC.Util
T.Page {
id: root
//path of the current page loader
property var pagePrefix: []
//note that T.Page introduce an intermediate Item, so to access our delegate,
//we need to use contentChildren[0] rather than contentItem
readonly property Item _firstChild: contentChildren[0] ?? null
//indicates whether the subview support grid/list mode
property bool hasGridListMode: _firstChild?.hasGridListMode ?? false
property bool isSearchable: _firstChild?.isSearchable ?? false
property var sortModel: _firstChild?.sortModel ?? null
//property is *not* readOnly, a PageLoader may define a localMenuDelegate common for its subviews (music, video)
property SortMenu sortMenu: null
property int displayMarginBeginning: 0
property int displayMarginEnd: 0
property bool enableBeginningFade: true
property bool enableEndFade: true
readonly property SearchCtx search: _searchCtx
readonly property SortCtx sort: _sortCtx
SearchCtx {
id: _searchCtx
available: root.isSearchable
}
SortCtx {
id: _sortCtx
readonly property string _sortCriteriaKey: ["sortCriteria", ...root.pagePrefix].join("/")
readonly property string _sortOrderKey: ["sortOrder", ...root.pagePrefix].join("/")
available: Helpers.isArray(root.sortModel) && (root.sortModel).length > 0
model: root.sortModel
//save & restore setting of the page
Component.onCompleted: {
const criteria = MainCtx.settingValue(_sortCriteriaKey, undefined)
if (criteria !== undefined)
_sortCtx.criteria = criteria
const order = MainCtx.settingValue(_sortOrderKey, undefined)
if (order !== undefined)
_sortCtx.order = parseInt(order)
}
Component.onDestruction: {
MainCtx.setSettingValue(_sortCriteriaKey, _sortCtx.criteria)
MainCtx.setSettingValue(_sortOrderKey, _sortCtx.order)
}
}
Binding {
target: MainCtx
property: "hasGridListMode";
value: root.hasGridListMode
}
on_FirstChildChanged: {
if (!_firstChild)
return
_firstChild.Navigation.parentItem = root
_firstChild.Navigation.upItem = root.header
}
function positionContentAtBeginning() {
_firstChild?.positionContentAtBeginning?.()
}
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding
+ (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
header: DefaultPageHeader {
text: root.title
leftPadding: VLCStyle.dynamicAppMargins(width) + VLCStyle.layout_left_margin + root.leftPadding
rightPadding: VLCStyle.dynamicAppMargins(width) + VLCStyle.layout_right_margin + root.rightPadding
sortMenu: root.sortMenu
search: _searchCtx
sort: _sortCtx
Navigation.parentItem: root
Navigation.downAction: function() {
if (typeof root.setCurrentItemFocus === "function")
root.setCurrentItemFocus(Qt.TabFocusReason)
else if (typeof root._firstChild?.setCurrentItemFocus === "function")
root._firstChild.setCurrentItemFocus(Qt.TabFocusReason)
else if (root._firstChild)
root._firstChild.forceActiveFocus(Qt.TabFocusReason)
}
}
component DefaultPageHeader: T.ToolBar {
id: defaultPageHeader
// Properties
property alias text: label.text
property alias sortMenu: gridSortFilter.sortMenu
property alias search: gridSortFilter.search
property alias sort: gridSortFilter.sort
position: T.ToolBar.Header
topPadding: VLCStyle.layoutTitle_top_padding
bottomPadding: VLCStyle.layoutTitle_bottom_padding
// FIXME: `GridItem`'s background extends beyond its
// bounding rect, violating the hypothetical
// clip test (see 7e6b23db).
bottomInset: (MainCtx.hasGridListMode && MainCtx.gridView) ? VLCStyle.gridItemSelectedBorder : undefined
// Settings
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
Navigation.navigable: gridSortFilter.enabled
// Children
readonly property ColorContext colorContext: ColorContext {
id: theme
colorSet: ColorContext.View
}
background: Rectangle {
color: theme.bg.primary
}
RowLayout {
id: row
anchors.fill: parent
SubtitleLabel {
id: label
Layout.fillWidth: true
color: theme.fg.primary
}
GridSortFilterControls {
id: gridSortFilter
focus: true
sort: _sortCtx
search: _searchCtx
Navigation.parentItem: defaultPageHeader
}
}
}
}
[Dauer der Verarbeitung: 0.4 Sekunden, vorverarbeitet 2026-10-24]