181 lines
6.7 KiB
JavaScript
181 lines
6.7 KiB
JavaScript
/*
|
|
* SPDX-FileCopyrightText: 2024 Anton Kharuzhy <publicantroids@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
function isX11() {
|
|
const isX11Plugin = Qt.platform.pluginName == "xcb";
|
|
return isX11Plugin;
|
|
}
|
|
|
|
function copyLayoutConstraint(from, to) {
|
|
Object.assign(to.Layout, {
|
|
"alignment": Qt.binding(function () { return from.Layout.alignment }),
|
|
"bottomMargin": Qt.binding(function () { return from.Layout.bottomMargin }),
|
|
"column": Qt.binding(function () { return from.Layout.column }),
|
|
"columnSpan": Qt.binding(function () { return from.Layout.columnSpan }),
|
|
"fillHeight": Qt.binding(function () { return from.Layout.fillHeight }),
|
|
"fillWidth": Qt.binding(function () { return from.Layout.fillWidth }),
|
|
"horizontalStretchFactor": Qt.binding(function () { return from.Layout.horizontalStretchFactor }),
|
|
"leftMargin": Qt.binding(function () { return from.Layout.leftMargin }),
|
|
"maximumHeight": Qt.binding(function () { return from.Layout.maximumHeight }),
|
|
"maximumWidth": Qt.binding(function () { return from.Layout.maximumWidth }),
|
|
"minimumHeight": Qt.binding(function () { return from.Layout.minimumHeight }),
|
|
"minimumWidth": Qt.binding(function () { return from.Layout.minimumWidth }),
|
|
"preferredHeight": Qt.binding(function () { return from.Layout.preferredHeight }),
|
|
"preferredWidth": Qt.binding(function () { return from.Layout.preferredWidth }),
|
|
"rightMargin": Qt.binding(function () { return from.Layout.rightMargin }),
|
|
"row": Qt.binding(function () { return from.Layout.row }),
|
|
"rowSpan": Qt.binding(function () { return from.Layout.rowSpan }),
|
|
"topMargin": Qt.binding(function () { return from.Layout.topMargin }),
|
|
"verticalStretchFactor": Qt.binding(function () { return from.Layout.verticalStretchFactor })
|
|
})
|
|
}
|
|
|
|
function calculateItemPreferredWidth(item) {
|
|
var preferredWidth = 0;
|
|
|
|
if (item && item.Layout) {
|
|
preferredWidth += item.Layout.preferredWidth || 0;
|
|
preferredWidth += item.Layout.leftMargin || 0;
|
|
preferredWidth += item.Layout.rightMargin || 0;
|
|
}
|
|
|
|
return preferredWidth;
|
|
}
|
|
|
|
function widgetElementModelFromName(name) {
|
|
switch (name) {
|
|
case "windowCloseButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.CloseButton
|
|
};
|
|
case "windowMinimizeButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.MinimizeButton
|
|
};
|
|
case "windowMaximizeButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.MaximizeButton
|
|
};
|
|
case "windowAllDesktopsButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.AllDesktopsButton
|
|
};
|
|
case "windowKeepAboveButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.KeepAboveButton
|
|
};
|
|
case "windowKeepBelowButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.KeepBelowButton
|
|
};
|
|
case "windowShadeButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.ShadeButton
|
|
};
|
|
case "windowHelpButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.HelpButton
|
|
};
|
|
case "windowMenuButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.MenuButton
|
|
};
|
|
case "windowAppMenuButton":
|
|
return {
|
|
"type": WidgetElement.Type.WindowControlButton,
|
|
"windowControlButtonType": WindowControlButton.Type.AppMenuButton
|
|
};
|
|
case "windowTitle":
|
|
return {
|
|
"type": WidgetElement.Type.WindowTitle
|
|
};
|
|
case "windowIcon":
|
|
return {
|
|
"type": WidgetElement.Type.WindowIcon
|
|
};
|
|
case "spacer":
|
|
return {
|
|
"type": WidgetElement.Type.Spacer
|
|
};
|
|
}
|
|
}
|
|
|
|
function truncateString(str, n) {
|
|
return (str.length > n) ? str.slice(0, n - 1) + '\u2026' : str;
|
|
};
|
|
|
|
class Replacement {
|
|
replace(_title) {
|
|
throw new Error("Not implemented");
|
|
}
|
|
|
|
static createReplacement(type, pattern, template) {
|
|
switch (type) {
|
|
case 0: return new StringReplacement(pattern, template);
|
|
case 1: return new RegExpReplacement(pattern, template);
|
|
default:
|
|
throw new Error("Unknown replacement type: " + type);
|
|
}
|
|
}
|
|
|
|
static createReplacementList(types, patterns, templates) {
|
|
const length = types.length;
|
|
let result = new Array();
|
|
for (let i = 0; i < length; i++) {
|
|
const type = types[i];
|
|
const pattern = patterns[i];
|
|
const template = templates[i];
|
|
if (type === undefined || pattern === undefined || template === undefined) {
|
|
break; // Inconsistent state
|
|
} else {
|
|
result.push(Replacement.createReplacement(type, pattern, template));
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
static applyReplacementList(title, replacements) {
|
|
return replacements.reduce((acc, cur) => cur.replace(acc), title);
|
|
}
|
|
}
|
|
|
|
class StringReplacement extends Replacement {
|
|
constructor(stringToReplace, stringReplacement) {
|
|
super();
|
|
this.stringToReplace = stringToReplace;
|
|
this.stringReplacement = stringReplacement;
|
|
}
|
|
|
|
replace(title) {
|
|
let replaced = title.replace(this.stringToReplace, this.stringReplacement);
|
|
while (replaced !== title) {
|
|
title = replaced;
|
|
replaced = title.replace(this.stringToReplace, this.stringReplacement);
|
|
}
|
|
return replaced;
|
|
}
|
|
}
|
|
|
|
class RegExpReplacement extends Replacement {
|
|
constructor(regExp, replacement) {
|
|
super();
|
|
this.regExp = new RegExp(regExp, "g");
|
|
this.replacement = replacement;
|
|
}
|
|
|
|
replace(title) {
|
|
return title.replace(this.regExp, this.replacement);
|
|
}
|
|
} |