add noctalia and fuzzel
This commit is contained in:
@@ -0,0 +1,290 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
import qs.Modules.MainScreen
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
SmartPanel {
|
||||
id: root
|
||||
|
||||
preferredWidth: Math.round(840 * Style.uiScaleRatio)
|
||||
preferredHeight: Math.round(910 * Style.uiScaleRatio)
|
||||
|
||||
// Settings panel mode: "centered", "attached", "window"
|
||||
readonly property string settingsPanelMode: Settings.data.ui.settingsPanelMode
|
||||
readonly property bool isWindowMode: settingsPanelMode === "window"
|
||||
readonly property bool attachToBar: settingsPanelMode === "attached"
|
||||
|
||||
readonly property string barDensity: Settings.data.bar.density
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property bool barFloating: Settings.data.bar.barType === "floating"
|
||||
readonly property real barMarginH: barFloating ? Math.ceil(Settings.data.bar.marginHorizontal) : 0
|
||||
readonly property real barMarginV: barFloating ? Math.ceil(Settings.data.bar.marginVertical) : 0
|
||||
|
||||
forceAttachToBar: attachToBar
|
||||
panelAnchorHorizontalCenter: !root.useButtonPosition && (attachToBar ? (barPosition === "top" || barPosition === "bottom") : true)
|
||||
panelAnchorVerticalCenter: !root.useButtonPosition && (attachToBar ? (barPosition === "left" || barPosition === "right") : true)
|
||||
panelAnchorTop: !root.useButtonPosition && attachToBar && barPosition === "top"
|
||||
panelAnchorBottom: !root.useButtonPosition && attachToBar && barPosition === "bottom"
|
||||
panelAnchorLeft: !root.useButtonPosition && attachToBar && barPosition === "left"
|
||||
panelAnchorRight: !root.useButtonPosition && attachToBar && barPosition === "right"
|
||||
|
||||
onAttachToBarChanged: {
|
||||
if (isPanelOpen) {
|
||||
Qt.callLater(root.setPosition);
|
||||
}
|
||||
}
|
||||
|
||||
onBarPositionChanged: {
|
||||
if (isPanelOpen) {
|
||||
Qt.callLater(root.setPosition);
|
||||
}
|
||||
}
|
||||
|
||||
onBarDensityChanged: {
|
||||
if (isPanelOpen) {
|
||||
Qt.callLater(root.setPosition);
|
||||
}
|
||||
}
|
||||
|
||||
onBarFloatingChanged: {
|
||||
if (isPanelOpen) {
|
||||
Qt.callLater(root.setPosition);
|
||||
}
|
||||
}
|
||||
|
||||
onBarMarginHChanged: {
|
||||
if (isPanelOpen) {
|
||||
Qt.callLater(root.setPosition);
|
||||
}
|
||||
}
|
||||
|
||||
onBarMarginVChanged: {
|
||||
if (isPanelOpen) {
|
||||
Qt.callLater(root.setPosition);
|
||||
}
|
||||
}
|
||||
|
||||
// Tabs enumeration, order is NOT relevant
|
||||
enum Tab {
|
||||
About,
|
||||
Audio,
|
||||
Bar,
|
||||
ColorScheme,
|
||||
LockScreen,
|
||||
ControlCenter,
|
||||
DesktopWidgets,
|
||||
OSD,
|
||||
Display,
|
||||
Dock,
|
||||
General,
|
||||
Hooks,
|
||||
Idle,
|
||||
Launcher,
|
||||
Location,
|
||||
Connections,
|
||||
Notifications,
|
||||
Plugins,
|
||||
SessionMenu,
|
||||
System,
|
||||
UserInterface,
|
||||
Wallpaper
|
||||
}
|
||||
|
||||
property int requestedTab: SettingsPanel.Tab.General
|
||||
property int requestedSubTab: -1
|
||||
property var requestedEntry: null
|
||||
|
||||
// Content state - these are synced with SettingsContent when panel opens
|
||||
property int currentTabIndex: 0
|
||||
property var tabsModel: []
|
||||
property var activeScrollView: null
|
||||
|
||||
// Internal reference to the content (set when panel content loads)
|
||||
property var _settingsContent: null
|
||||
|
||||
// Override toggle to handle window mode
|
||||
function toggle(buttonItem, buttonName) {
|
||||
if (isWindowMode) {
|
||||
SettingsPanelService.toggleWindow(requestedTab);
|
||||
return;
|
||||
}
|
||||
// Call parent toggle
|
||||
if (isPanelOpen) {
|
||||
close();
|
||||
} else {
|
||||
open(buttonItem, buttonName);
|
||||
}
|
||||
}
|
||||
|
||||
// Override open to handle window mode
|
||||
function open(buttonItem, buttonName) {
|
||||
if (isWindowMode) {
|
||||
SettingsPanelService.openWindow(requestedTab);
|
||||
return;
|
||||
}
|
||||
|
||||
// Panel mode: replicate SmartPanel.open() logic
|
||||
if (!buttonItem && buttonName) {
|
||||
if (typeof buttonName === "object" && buttonName.x !== undefined && buttonName.y !== undefined) {
|
||||
root.buttonItem = null;
|
||||
root.buttonPosition = buttonName;
|
||||
root.buttonWidth = 0;
|
||||
root.buttonHeight = 0;
|
||||
root.useButtonPosition = true;
|
||||
} else {
|
||||
buttonItem = BarService.lookupWidget(buttonName, screen.name);
|
||||
}
|
||||
}
|
||||
|
||||
if (buttonItem) {
|
||||
root.buttonItem = buttonItem;
|
||||
var buttonPos = buttonItem.mapToItem(null, 0, 0);
|
||||
root.buttonPosition = Qt.point(buttonPos.x, buttonPos.y);
|
||||
root.buttonWidth = buttonItem.width;
|
||||
root.buttonHeight = buttonItem.height;
|
||||
root.useButtonPosition = true;
|
||||
} else if (!(buttonName && typeof buttonName === "object" && buttonName.x !== undefined && buttonName.y !== undefined)) {
|
||||
root.buttonItem = null;
|
||||
root.useButtonPosition = false;
|
||||
}
|
||||
|
||||
isPanelOpen = true;
|
||||
PanelService.willOpenPanel(root);
|
||||
}
|
||||
|
||||
// Open to a specific tab and optionally a subtab
|
||||
function openToTab(tab, subTab, buttonItem, buttonName) {
|
||||
requestedTab = tab !== undefined ? tab : SettingsPanel.Tab.General;
|
||||
requestedSubTab = subTab !== undefined ? subTab : -1;
|
||||
open(buttonItem, buttonName);
|
||||
}
|
||||
|
||||
// When the panel opens, initialize content
|
||||
onOpened: {
|
||||
if (_settingsContent) {
|
||||
if (requestedEntry) {
|
||||
_settingsContent.requestedTab = requestedEntry.tab;
|
||||
_settingsContent.initialize();
|
||||
const entry = requestedEntry;
|
||||
requestedEntry = null;
|
||||
Qt.callLater(() => _settingsContent.navigateToResult(entry));
|
||||
} else {
|
||||
_settingsContent.requestedTab = requestedTab;
|
||||
if (requestedSubTab >= 0) {
|
||||
_settingsContent._pendingSubTab = requestedSubTab;
|
||||
requestedSubTab = -1;
|
||||
}
|
||||
_settingsContent.initialize();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll functions - delegate to content
|
||||
function scrollDown() {
|
||||
if (_settingsContent)
|
||||
_settingsContent.scrollDown();
|
||||
}
|
||||
|
||||
function scrollUp() {
|
||||
if (_settingsContent)
|
||||
_settingsContent.scrollUp();
|
||||
}
|
||||
|
||||
function scrollPageDown() {
|
||||
if (_settingsContent)
|
||||
_settingsContent.scrollPageDown();
|
||||
}
|
||||
|
||||
function scrollPageUp() {
|
||||
if (_settingsContent)
|
||||
_settingsContent.scrollPageUp();
|
||||
}
|
||||
|
||||
// Navigation functions - delegate to content
|
||||
function selectNextTab() {
|
||||
if (_settingsContent)
|
||||
_settingsContent.selectNextTab();
|
||||
}
|
||||
|
||||
function selectPreviousTab() {
|
||||
if (_settingsContent)
|
||||
_settingsContent.selectPreviousTab();
|
||||
}
|
||||
|
||||
// Override keyboard handlers from SmartPanel
|
||||
function onTabPressed() {
|
||||
selectNextTab();
|
||||
}
|
||||
|
||||
function onBackTabPressed() {
|
||||
selectPreviousTab();
|
||||
}
|
||||
|
||||
function onUpPressed() {
|
||||
if (_settingsContent && _settingsContent.searchText.trim() !== "") {
|
||||
_settingsContent.searchSelectPrevious();
|
||||
} else {
|
||||
scrollUp();
|
||||
}
|
||||
}
|
||||
|
||||
function onDownPressed() {
|
||||
if (_settingsContent && _settingsContent.searchText.trim() !== "") {
|
||||
_settingsContent.searchSelectNext();
|
||||
} else {
|
||||
scrollDown();
|
||||
}
|
||||
}
|
||||
|
||||
function onPageUpPressed() {
|
||||
scrollPageUp();
|
||||
}
|
||||
|
||||
function onPageDownPressed() {
|
||||
scrollPageDown();
|
||||
}
|
||||
|
||||
function onCtrlJPressed() {
|
||||
if (_settingsContent && _settingsContent.searchText.trim() !== "") {
|
||||
_settingsContent.searchSelectNext();
|
||||
} else {
|
||||
scrollDown();
|
||||
}
|
||||
}
|
||||
|
||||
function onCtrlKPressed() {
|
||||
if (_settingsContent && _settingsContent.searchText.trim() !== "") {
|
||||
_settingsContent.searchSelectPrevious();
|
||||
} else {
|
||||
scrollUp();
|
||||
}
|
||||
}
|
||||
|
||||
panelContent: Rectangle {
|
||||
id: panelContent
|
||||
color: "transparent"
|
||||
|
||||
SettingsContent {
|
||||
id: settingsContent
|
||||
anchors.fill: parent
|
||||
screen: root.screen
|
||||
onCloseRequested: root.close()
|
||||
Component.onCompleted: {
|
||||
root._settingsContent = settingsContent;
|
||||
root.tabsModel = Qt.binding(function () {
|
||||
return settingsContent.tabsModel;
|
||||
});
|
||||
root.currentTabIndex = Qt.binding(function () {
|
||||
return settingsContent.currentTabIndex;
|
||||
});
|
||||
root.activeScrollView = Qt.binding(function () {
|
||||
return settingsContent.activeScrollView;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user