Files
work-secretfile-selfcheck/UmiOCR-data/qt_res/qml/TabPages/GlobalConfigsPage/FontPanel.qml

229 lines
8.9 KiB
QML
Raw Normal View History

// ===========================================
// =============== 字体修改面板 ===============
// ===========================================
import QtQuick 2.15
import QtQuick.Controls 2.15
import "../../Widgets"
ModalLayer {
id: fRoot
property var fontsList: []
// 主要UI文字字体内容可控可以用裁切的ttf
property string fontFamily: ""
// 数据显示文字字体,内容不可控,用兼容性好的系统字体
property string dataFontFamily: ""
// 不可加载的字体
property var illegalFonts: ["", "Terminal", "System", "Small Fonts", "Script", "Roman", "MS Serif", "MS Sans Serif", "Modern", "Fixedsys"]
function setFontFamily(f) {
fontFamily = f
qmlapp.globalConfigs.setValue("ui.fontFamily", f)
}
function setDataFontFamily(f) {
dataFontFamily = f
qmlapp.globalConfigs.setValue("ui.dataFontFamily", f)
}
Component.onCompleted: {
// 将此组件的引用传入全局设置
qmlapp.globalConfigs.fontPanel = this
fontFamily = qmlapp.globalConfigs.getValue("ui.fontFamily")
dataFontFamily = qmlapp.globalConfigs.getValue("ui.dataFontFamily")
}
contentItem: Item {
id: content
anchors.fill: parent
}
Loader {
id: panelLoader
asynchronous: true
sourceComponent: com
active: fRoot.visible
}
Component {
id: com
DoubleRowLayout {
parent: content
anchors.fill: parent
initSplitterX: 0.5
Component.onCompleted: {
// 获取字体列表,过滤出以中文字符开头的字体
let fList = Qt.fontFamilies()
let newList = fList.filter(function(str) {
return /^[\u4e00-\u9fa5]/.test(str);
})
// 补充剩余字体
for(let i in fList) {
if(illegalFonts.includes(fList[i]))
continue
if(!newList.includes(fList[i]))
newList.push(fList[i])
}
// 将当前选中的移到最前面
const i1 = newList.indexOf(dataFontFamily)
if (i1 > -1) {
newList.splice(i1, 1)
newList.unshift(dataFontFamily)
}
const i2 = newList.indexOf(fontFamily)
if (i2 > -1 && i2 !== i1) {
newList.splice(i2, 1)
newList.unshift(fontFamily)
}
fRoot.fontsList = newList
}
leftItem: Panel {
anchors.fill: parent
clip: true
Row {
id: leftTop
anchors.top: parent.top
anchors.right: parent.right
anchors.margins: size_.spacing
anchors.topMargin: 0
anchors.rightMargin: size_.spacing * 3
spacing: size_.spacing
height: size_.line * 2
// Text_ {
// anchors.top: parent.top
// anchors.bottom: parent.bottom
// verticalAlignment: Text.AlignVCenter
// text: qsTr("设置为:")
// }
Text_ {
anchors.top: parent.top
anchors.bottom: parent.bottom
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
width: size_.line * 3
text: qsTr("界面")
}
Text_ {
anchors.top: parent.top
anchors.bottom: parent.bottom
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
width: size_.line * 3
text: qsTr("内容")
font.family: theme.dataFontFamily
}
}
Panel {
anchors.top: leftTop.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: size_.spacing
anchors.topMargin: 0
color: theme.bgColor
TableView {
id: leftTable
anchors.fill: parent
anchors.margins: size_.spacing
clip: true
model: fRoot.fontsList
contentWidth: width // 内容宽度
rowSpacing: size_.spacing // 行间隔
flickableDirection: Flickable.VerticalFlick // 只允许垂直滚动
columnWidthProvider: ()=>leftTable.width
delegate: Rectangle {
height: size_.line * 2
implicitWidth: 100
implicitHeight: height
width: leftTable.width
color: fontMouseArea.containsMouse?theme.coverColor2:"#00000000"
Text_ {
text: modelData
anchors.fill: parent
anchors.leftMargin: size_.spacing
verticalAlignment: Text.AlignVCenter
font.family: modelData
}
MouseArea {
id: fontMouseArea
anchors.fill: parent
hoverEnabled: true
}
// 右边,内容字体
IconButton {
id: btn2
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.margins: size_.smallSpacing
color: theme.yesColor
bgColor_: theme.coverColor1
width: size_.line * 3
borderWidth: 1
borderColor: theme.specialTextColor
bgHoverColor_: theme.coverColor3
icon_: dataFontFamily===modelData?"yes":""
onClicked: setDataFontFamily(modelData)
}
// 左边,界面字体
IconButton {
id: btn1
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: btn2.left
anchors.margins: size_.smallSpacing
anchors.rightMargin: size_.spacing
color: theme.yesColor
bgColor_: theme.coverColor1
width: size_.line * 3
borderWidth: 1
borderColor: theme.specialTextColor
bgHoverColor_: theme.coverColor3
icon_: fontFamily===modelData?"yes":""
onClicked: setFontFamily(modelData)
}
}
}
}
}
rightItem: Panel {
anchors.fill: parent
Item {
anchors.fill: parent
anchors.margins: size_.spacing * 3
Column {
anchors.fill: parent
spacing: size_.line
Text_ {
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.Wrap
font.family: fontFamily
text: qsTr("界面字体:\n软件中大部分UI的字体。")
}
Text_ {
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.Wrap
font.family: dataFontFamily
text: qsTr("内容字体:\n识别结果内容的字体。")
}
}
}
}
}
}
}