fix(bug修复): wayland适配——双标题栏;窗口居中;修复bug同步
This commit is contained in:
parent
0ca04d08ef
commit
00760b759c
|
@ -8,9 +8,10 @@ GenericName[bo_CN]=བཤར་འབེབས།
|
|||
Comment=An interface-friendly scanner, which could be also used as one-click beautification, intelligent correction and text recognition tools.
|
||||
Comment[zh_CN]=一款可用于普通扫描、一键美化、智能纠偏和文字识别的界面友好扫描仪软件。
|
||||
Comment[bo_CN]=སྤྱིར་བཏང་གི་བཤར་འབེབས།མཐེབ་གཅིག་མཛེས་བཟོ།རིག་ནུས་ཡོ་འཁྱོག་དང་ཡི་གེ་དབྱེ་འབྱེད་་ལྡན་པའི་མཚམས་ངོས་མཛའ་མཐུན་གྱི་བཤར་འབེབས་མཉེན་ཆས་ཤིག
|
||||
Exec=kylin-scanner %U
|
||||
Exec=/usr/bin/kylin-scanner %U
|
||||
Icon=kylin-scanner
|
||||
Type=Application
|
||||
Categories=Application;Graphics;RasterGraphics;Scanning;OCR;2DGraphics;
|
||||
Keywords=scannerfrontend
|
||||
StartupNotify=true
|
||||
X-KDE-Wayland-Interfaces=org_kde_plasma_window_management,org_kde_plasma_activation_feedback,org_kde_kwin_keystate,org_kde_kwin_fake_input,zkde_screencast_unstable_v1
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
@ -1,3 +1,18 @@
|
|||
kylin-scanner (3.2.0.4-ok3) yangtze; urgency=medium
|
||||
|
||||
* BUG号:#109782 【用户手册】【摄像头】用户手册首页摄像头的图标icon需替换为寻光主题图标
|
||||
#120922 【UI】【扫描】浅色模式下,未连接扫描时,”连接扫描仪“按钮字体颜色为白色看不清
|
||||
#118765 【藏语】【扫描】藏文系统扫描部分界面显示为英文
|
||||
#126288 【扫描】扫描-关于中没有版本号
|
||||
#126519 【扫描】浅色主题下,开始扫描按钮不是蓝色的
|
||||
#127014 【wayland】【扫描】识别到扫描仪可扫描状态下"开始扫描"按钮未变为蓝色,需要将鼠标移上去变亮
|
||||
#127002 【wayland】【扫描】连接扫描仪后点击开始扫描,提示"扫描失败请检查当前扫描仪连接..."(低概率在10分钟后能够扫描成功)
|
||||
* 需求号:无
|
||||
* 其他改动说明:wayland部分适配:双标题栏;窗口不居中
|
||||
* 其他改动影响域:无
|
||||
|
||||
-- zhaoyuzhen <zhaoyuzhen@kylinos.cn> Mon, 18 Jul 2022 10:39:12 +0800
|
||||
|
||||
kylin-scanner (3.2.0.4-ok2) yangtze; urgency=medium
|
||||
|
||||
* Fix build error
|
||||
|
|
|
@ -4,31 +4,32 @@ Priority: optional
|
|||
Maintainer: Kylin Team <team+kylin@tracker.debian.org>
|
||||
Uploaders: handsome_feng <jianfengli@ubuntukylin.com>
|
||||
Build-Depends: debhelper-compat (=12),
|
||||
libqt5svg5-dev,
|
||||
libglib2.0-dev,
|
||||
libx11-dev,
|
||||
libgsettings-qt-dev,
|
||||
libsane-dev,
|
||||
libopencv-dev,
|
||||
libstb-dev,
|
||||
libgif-dev,
|
||||
libpng-dev,
|
||||
libfreeimage-dev,
|
||||
libfreeimageplus-dev,
|
||||
libgif-dev,
|
||||
libglib2.0-dev,
|
||||
libgsettings-qt-dev,
|
||||
libkf5windowsystem-dev,
|
||||
libkysdk-base-dev,
|
||||
libkysdk-kabase-dev,
|
||||
liblept5,
|
||||
libleptonica-dev,
|
||||
libopencv-dev,
|
||||
libpng-dev,
|
||||
libqt5svg5-dev,
|
||||
libqt5x11extras5-dev,
|
||||
libsane-dev,
|
||||
libstb-dev,
|
||||
libtesseract-dev,
|
||||
libukui-log4qt-dev,
|
||||
libx11-dev,
|
||||
pkgconf,
|
||||
policykit-1,
|
||||
libleptonica-dev,
|
||||
liblept5,
|
||||
qt5-qmake,
|
||||
qtbase5-dev,
|
||||
qtbase5-dev-tools,
|
||||
qttools5-dev-tools
|
||||
qttools5-dev-tools,
|
||||
libkf5windowsystem-dev,
|
||||
libqt5x11extras5-dev,
|
||||
pkgconf,
|
||||
libukui-log4qt-dev,
|
||||
policykit-1,
|
||||
libkysdk-kabase-dev,
|
||||
libkysdk-base-dev,
|
||||
libkysdk-applications-dev
|
||||
Standards-Version: 4.5.0
|
||||
Rules-Requires-Root: no
|
||||
Homepage: https://github.com/ubuntukylin/kylin-scanner
|
||||
|
@ -37,10 +38,10 @@ Vcs-Browser: https://github.com/ubuntukylin/kylin-scanner
|
|||
|
||||
Package: kylin-scanner
|
||||
Architecture: any
|
||||
Depends: tesseract-ocr,
|
||||
Depends: ${misc:Depends},
|
||||
tesseract-ocr,
|
||||
tesseract-ocr-chi-sim,
|
||||
tesseract-ocr-eng,
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Scanning utility based on SANE
|
||||
Kylin-scanner can scan according to the resolution, size and color
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Log 类中实现了 Qt 的日志注册函数并且调用了 kysdk-log 库中的日志模块,调用方需要链接 Qt库 及 kysdk-log 库
|
||||
*/
|
||||
|
||||
#ifndef LOG_HPP_
|
||||
#define LOG_HPP_
|
||||
|
||||
#include <qapplication.h>
|
||||
#include <libkylog.h>
|
||||
#include <QString>
|
||||
#include <QByteArray>
|
||||
|
||||
namespace kabase
|
||||
{
|
||||
|
||||
class Log
|
||||
{
|
||||
public:
|
||||
Log() = default;
|
||||
~Log() = default;
|
||||
|
||||
static void logOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
|
||||
{
|
||||
QByteArray localMsg = msg.toLocal8Bit();
|
||||
const char *message = localMsg.constData();
|
||||
const char *file = context.file ? context.file : "";
|
||||
const char *function = context.function ? context.function : "";
|
||||
|
||||
switch (type) {
|
||||
case QtDebugMsg:
|
||||
klog_debug("%s (%s:%u,%s)\n", message, file, context.line, function);
|
||||
break;
|
||||
case QtInfoMsg:
|
||||
klog_info("%s (%s:%u,%s)\n", message, file, context.line, function);
|
||||
break;
|
||||
case QtWarningMsg:
|
||||
klog_warning("%s (%s:%u,%s)\n", message, file, context.line, function);
|
||||
break;
|
||||
case QtCriticalMsg:
|
||||
klog_err("%s (%s:%u,%s)\n", message, file, context.line, function);
|
||||
break;
|
||||
case QtFatalMsg:
|
||||
klog_emerg("%s (%s:%u,%s)\n", message, file, context.line, function);
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,88 @@
|
|||
#ifndef QT_WINDOWMANAGE_HPP_
|
||||
#define QT_WINDOWMANAGE_HPP_
|
||||
|
||||
/*
|
||||
* windowmanage 类使用了 kysdk-waylandhelper 库,使用时需要链接 kysdk-waylandhelper 库
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QScreen>
|
||||
#include <QWidget>
|
||||
#include <QRect>
|
||||
|
||||
#include <windowmanager/windowmanager.h>
|
||||
#include <ukuistylehelper/ukuistylehelper.h>
|
||||
|
||||
namespace kabase
|
||||
{
|
||||
|
||||
class WindowManage : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
WindowManage() = default;
|
||||
~WindowManage() = default;
|
||||
|
||||
static void setScalingProperties(void)
|
||||
{
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
#endif
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||
#endif
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
static void setMiddleOfScreen(QWidget *w) {
|
||||
int sw = QGuiApplication::primaryScreen()->availableGeometry().width();
|
||||
int sh = QGuiApplication::primaryScreen()->availableGeometry().height();
|
||||
kdk::WindowManager::setGeometry(w->windowHandle(), QRect((sw - w->width()) / 2, (sh - w->height()) / 2, w->width(), w->height()));
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
static void removeHeader(QWidget *w) {
|
||||
kdk::UkuiStyleHelper::self()->removeHeader(w);
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
/* id 的初始值必须为 0 */
|
||||
static void getWindowId(quint32 *id) {
|
||||
connect(kdk::WindowManager::self(), &kdk::WindowManager::windowAdded, [=](const kdk::WindowId &windowId) {
|
||||
if (getpid() == (int)kdk::WindowManager::getPid(windowId) && *id == 0) {
|
||||
*id = windowId.toLongLong();
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
static void keepWindowAbove(const quint32 id) {
|
||||
kdk::WindowManager::keepWindowAbove(id);
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
static void activateWindow(const quint32 id) {
|
||||
kdk::WindowManager::activateWindow(id);
|
||||
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* wayland 下使用窗口置顶接口 desktop 文件需要注意以下两点
|
||||
* 1. 增加字段: X-KDE-Wayland-Interfaces=org_kde_plasma_window_management,org_kde_plasma_activation_feedback,org_kde_kwin_keystate,org_kde_kwin_fake_input,zkde_screencast_unstable_v1
|
||||
* 2. Exec字段需要为绝对路径并且不能携带参数
|
||||
*/
|
||||
|
||||
#endif
|
|
@ -0,0 +1,306 @@
|
|||
/*
|
||||
* BuriedPoint 类使用了 kysdk-log 和 kysdk-diagnostics 库,调用方需要链接 kysdk-log 和 kysdk-diagnostics 库
|
||||
*/
|
||||
|
||||
#ifndef BURIEDPOINT_HPP_
|
||||
#define BURIEDPOINT_HPP_
|
||||
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <string.h>
|
||||
#include <map>
|
||||
|
||||
#include <libkydiagnostics.h>
|
||||
#include <libkylog.h>
|
||||
|
||||
#include "utils.hpp"
|
||||
|
||||
namespace kabase
|
||||
{
|
||||
|
||||
class BuriedPoint
|
||||
{
|
||||
public:
|
||||
BuriedPoint() = default;
|
||||
~BuriedPoint() = default;
|
||||
|
||||
/* 埋点类型 */
|
||||
enum BuriedPointType {
|
||||
FunctionType = 0, /* 功能性打点 */
|
||||
PerformanceType, /* 性能型打点 */
|
||||
StabilityType, /* 稳定型打点 */
|
||||
TestType /* 测试预留 */
|
||||
};
|
||||
|
||||
/* 点位 */
|
||||
/* 规则说明 */
|
||||
/* 0x 00 0 000
|
||||
* | | |
|
||||
* 应用标识 类型标识 点位
|
||||
*/
|
||||
enum PT {
|
||||
KylinIpmsgNicknameModify = 0x010001, /* 昵称修改 */
|
||||
KylinIpmsgOpenSaveDir = 0x010002, /* 打开文件保存目录(主界面入口) */
|
||||
KylinIpmsgMainSearch = 0x010003, /* 主界面搜索 */
|
||||
KylinIpmsgHistorySearch = 0x010004, /* 历史记录搜索 */
|
||||
KylinIpmsgSetTop = 0x010005, /* 设置置顶 */
|
||||
KylinIpmsgModifyFriendNotes = 0x010006, /* 修改好友备注 */
|
||||
KylinIpmsgViewInformation = 0x010007, /* 查看资料 */
|
||||
KylinIpmsgChangeDir = 0x010008, /* 更改目录 */
|
||||
KylinIpmsgCleanCache = 0x010009, /* 清空缓存 */
|
||||
KylinIpmsgClearChatRecord = 0x010010, /* 清空聊天记录 */
|
||||
KylinIpmsgClearSingleChatRecord = 0x010011, /* 清空单人聊天记录 */
|
||||
KylinIpmsgDeleteRecord = 0x010012, /* 删除记录 */
|
||||
KylinIpmsgBatchDelete = 0x010013, /* 批量删除 */
|
||||
KylinIpmsgSendMessage = 0x010014, /* 发送消息 */
|
||||
KylinIpmsgSendFiles = 0x010015, /* 发送文件 */
|
||||
KylinIpmsgSendDir = 0x010016, /* 发送目录 */
|
||||
KylinIpmsgSendScreenshot = 0x010017, /* 发送截屏 */
|
||||
KylinIpmsgResend = 0x010018, /* 重新发送 */
|
||||
KylinIpmsgCopy = 0x010019, /* 复制 */
|
||||
KylinIpmsgOpen = 0x010020, /* 打开 */
|
||||
KylinIpmsgOpenDir = 0x010021, /* 打开目录 */
|
||||
KylinIpmsgSaveAs = 0x010022, /* 另存为 */
|
||||
KylinIpmsgTray = 0x010023, /* 托盘 */
|
||||
|
||||
KylinFontViewInstallFont = 0x020001, /* 安装字体 */
|
||||
KylinFontViewUninstallFont = 0x020002, /* 卸载字体 */
|
||||
KylinFontViewSearchFont = 0x020003, /* 搜索字体 */
|
||||
KylinFontViewApplyFont = 0x020004, /* 应用字体 */
|
||||
KylinFontViewExportFont = 0x020005, /* 导出字体 */
|
||||
KylinFontViewCollectionFont = 0x020006, /* 收藏字体 */
|
||||
KylinFontViewCancelCollectionFont = 0x020007, /* 取消收藏字体 */
|
||||
KylinFontViewFontInformation = 0x020008, /* 字体信息 */
|
||||
KylinFontViewCopywritingChange = 0x020009, /* 文案更改 */
|
||||
KylinFontViewFontSizeChange = 0x020010, /* 预览字号调整 */
|
||||
|
||||
KylinCalaulatorStandardMode = 0x030001, /* 标准模式 */
|
||||
KylinCalaulatorScientificMode = 0x030002, /* 科学模式 */
|
||||
KylinCalaulatorRateMode = 0x030003, /* 汇率模式 */
|
||||
KylinCalaulatorProgrammerMode = 0x030004, /* 程序员模式 */
|
||||
|
||||
KylinWeatherCollection = 0x040001, /* 收藏 */
|
||||
KylinWeatherChangeCity = 0x040002, /* 切换城市 */
|
||||
KylinWeatherCitySearch = 0x040003, /* 城市搜索 */
|
||||
KylinWeatherFullScreen = 0x040004, /* 全屏 */
|
||||
|
||||
KylinPhotoViewerOpenPicture = 0x050001, /* 打开图片 */
|
||||
KylinPhotoViewerSwitchPicture = 0x050002, /* 切换图片 */
|
||||
KylinPhotoViewerFlip = 0x050003, /* 翻转 */
|
||||
KylinPhotoViewerRotate = 0x050004, /* 旋转 */
|
||||
KylinPhotoViewerAddPicture = 0x050005, /* 添加图片 */
|
||||
KylinPhotoViewerZoomInandOut = 0x050006, /* 放大缩小 */
|
||||
KylinPhotoViewerPictureDetails = 0x050007, /* 图片详情 */
|
||||
KylinPhotoViewerCutting = 0x050008, /* 裁剪 */
|
||||
KylinPhotoViewerCoyp = 0x050009, /* 复制 */
|
||||
KylinPhotoViewerPrint = 0x050010, /* 打印 */
|
||||
KylinPhotoViewerDelete = 0x050011, /* 删除 */
|
||||
KylinPhotoViewerSaveAs = 0x050012, /* 另存为 */
|
||||
KylinPhotoViewerRename = 0x050013, /* 重命名 */
|
||||
KylinPhotoViewerSetAsDesktopWallpaper = 0x050014, /* 设置为桌面壁纸 */
|
||||
KylinPhotoViewerShowInFolder = 0x050015, /* 在文件夹中显示 */
|
||||
KylinPhotoViewerPicturePreview = 0x050016, /* 图片预览 */
|
||||
KylinPhotoViewerCurrentPointZoom = 0x050017, /* 当前点缩放 */
|
||||
|
||||
KylinServiceSupportFileUpload = 0x060001, /* 文件上传 */
|
||||
KylinServiceSupportVideoape = 0x060002, /* 录像 */
|
||||
KylinServiceSupportFileCopy = 0x060003, /* 文件拷贝 */
|
||||
KylinServiceSupportJumpOfficicalWebsite = 0x060004, /* 跳转官网主页 */
|
||||
KylinServiceSupportJumpOnlineService = 0x060005, /* 跳转在线客服 */
|
||||
|
||||
KylinPrinterManuallyInstallPrinter = 0x070001, /* 手动安装打印机 */
|
||||
KylinPrinterSetResolution = 0x070002, /* 设置分辨率 */
|
||||
KylinPrinterSetPaperSize = 0x070003, /* 设置纸张大小 */
|
||||
KylinPrinterSetPaperType = 0x070004, /* 设置纸张类型 */
|
||||
KylinPrinterSetCationSource = 0x070005, /* 设置纸盒来源 */
|
||||
KylinPrinterSetDuplexPrint = 0x070006, /* 设置双面打印 */
|
||||
KylinPrinterSetInkType = 0x070007, /* 设置墨水类型 */
|
||||
KylinPrinterADDRemovePrinter = 0x070008, /* 添加删除打印机 */
|
||||
KylinPrinterSetShareStartup = 0x070009, /* 设置共享启动 */
|
||||
KylinPrintTestPage = 0x070010, /* 打印测试页 */
|
||||
KylinPrinterCancelPrintJob = 0x070011, /* 取消打印任务 */
|
||||
KylinPrinterDeletePrintJob = 0x070012, /* 删除打印任务 */
|
||||
KylinPrinterRePrint = 0x070013, /* 重新打印 */
|
||||
KylinPrinterManualyModifyDrive = 0x070014, /* 手动修改驱动 */
|
||||
KylinPrinterRename = 0x070015, /* 重命名 */
|
||||
|
||||
KylinRecorderRecording = 0x080001, /* 录音 */
|
||||
KylinRecorderPlayPause = 0x080002, /* 播放暂停 */
|
||||
KylinRecorderClip = 0x080003, /* 剪辑 */
|
||||
KylinRecorderSign = 0x080004, /* 标记 */
|
||||
KylinRecorderDelete = 0x080005, /* 删除 */
|
||||
KylinRecorderBluetoothRecord = 0x080006, /* 蓝牙录音 */
|
||||
KylinRecorderSaveAs = 0x080007, /* 另存为 */
|
||||
KylinRecorderOpenFileLocation = 0x080008, /* 打开文件位置 */
|
||||
KylinRecorderTopicSwitch = 0x080009, /* 主题切换 */
|
||||
|
||||
KylinCameraPreviewMonitor = 0x090001, /* 预览画面 */
|
||||
KylinCameraSingleShot = 0x090002, /* 单拍 */
|
||||
KylinCameraContinuousShot = 0x090003, /* 连拍 */
|
||||
KylinCameraDelay = 0x090004, /* 延时拍照 */
|
||||
KylinCameraVideotape = 0x090005, /* 录像 */
|
||||
KylinCameraCameraSelection = 0x090006, /* 摄像头选用 */
|
||||
KylinCameraResolutionSelection = 0x090007, /* 分辨率选用 */
|
||||
KylinCameraVideoFormatSelection = 0x090008, /* 视频格式选用 */
|
||||
KylinCameraPictureFormatSelection = 0x090009, /* 图片格式选用 */
|
||||
KylinCameraChangeSavePath = 0x090010, /* 更改存储路径 */
|
||||
KylinCameraThumbnail = 0x090011, /* 缩略图 */
|
||||
KylinCameraGridLine = 0x090012, /* 网格线 */
|
||||
KylinCameraMirrorFun = 0x090013, /* 镜像功能 */
|
||||
|
||||
KylinNotebookOrderList = 0x100001, /* 有序列表 */
|
||||
KylinNotebookUnorderList = 0x100002, /* 无序列表 */
|
||||
KylinNotebookBold = 0x100003, /* 加粗 */
|
||||
KylinNotebookItalics = 0x100004, /* 斜体 */
|
||||
KylinNotebookUnderline = 0x100005, /* 下划线 */
|
||||
KylinNotebookDeleteline = 0x100006, /* 删除线 */
|
||||
KylinNotebookFontSize = 0x100007, /* 字号 */
|
||||
KylinNotebookFontColor = 0x100008, /* 字体颜色 */
|
||||
KylinNotebookInsertPicture = 0x100009, /* 插入图片 */
|
||||
KylinNotebookInterfaceColor = 0x100010, /* 界面配色 */
|
||||
KylinNotebookDeleteCurrent = 0x100011, /* 删除当前 */
|
||||
KylinNotebookUiTop = 0x100012, /* UI 置顶 */
|
||||
KylinNotebookListMode = 0x100013, /* 列表模式 */
|
||||
KylinNotebookIconMode = 0x100014, /* 图标模式 */
|
||||
KylinNotebookNewNote = 0x100015, /* 新建便签 */
|
||||
KylinNotebookSearch = 0x100016, /* 搜索 */
|
||||
KylinNotebookDelete = 0x100017, /* 删除 */
|
||||
KylinNotebookModeChange = 0x100018, /* 模式切换 */
|
||||
|
||||
KylinOsManagerGarbageClean = 0x110001, /* 垃圾清理 */
|
||||
KylinOsManagerFileShredding = 0x110002, /* 文件粉碎 */
|
||||
|
||||
KylinGpuControllerBaseInfo = 0x120001, /* 基本信息 */
|
||||
KylinGpuControllerRunState = 0x120002, /* 运行状态 */
|
||||
KylinGpuControllerDriveInfo = 0x120003, /* 驱动信息 */
|
||||
KylinGpuControllerSwitch = 0x120003, /* 显卡切换 */
|
||||
|
||||
KylinNetworkCheckStartCheck = 0x130001, /* 开始检测 */
|
||||
|
||||
KylinGallerySwitchFolder = 0x140001, /* 切换目录 */
|
||||
KylinGalleryOpenViewer = 0x140002, /* 打开麒麟看图 */
|
||||
|
||||
KylinMobileAssistantAndroidConn = 0x150001, /* 安卓链接 */
|
||||
KylinMobileAssistantPcConn = 0x150002, /* PC链接 */
|
||||
KylinMobileAssistantUsbConn = 0x150003, /* Usb链接 */
|
||||
KylinMobileAssistantWifiConn = 0x150004, /* Wifi链接 */
|
||||
KylinMobileAssistantDeviceDiscovery = 0x150005, /* 设备发现 */
|
||||
KylinMobileAssistantDisconnect = 0x150006, /* 断开链接 */
|
||||
KylinMobileAssistantMobileScreen = 0x150007, /* 手机投屏 */
|
||||
KylinMobileAssistantPcScreen = 0x150008, /* PC 投屏 */
|
||||
KylinMobileAssistantPictureList = 0x150009, /* 图片列表 */
|
||||
KylinMobileAssistantVideoList = 0x150010, /* 视频列表 */
|
||||
KylinMobileAssistantAudioList = 0x150011, /* 音频列表 */
|
||||
KylinMobileAssistantDocList = 0x150012, /* 文档列表 */
|
||||
KylinMobileAssistantQQFileList = 0x150013, /* QQ 文件列表 */
|
||||
KylinMobileAssistantWechatFileList = 0x150014, /* 微信文件列表 */
|
||||
KylinMobileAssistantMobileStorage = 0x150015, /* 手机存储 */
|
||||
KylinMobileAssistantSwitchView = 0x150016, /* 切换视图 */
|
||||
KylinMobileAssistantRefreshList = 0x150017, /* 刷新列表 */
|
||||
KylinMobileAssistantUploadFile = 0x150018, /* 上传文件 */
|
||||
KylinMobileAssistantDownloadFile = 0x150019, /* 下载文件 */
|
||||
KylinMobileAssistantOpenFile = 0x150020, /* 打开文件 */
|
||||
|
||||
KylinScannerOneClickBeautification = 0x160001, /* 一键美化 */
|
||||
KylinScannerRectification = 0x160002, /* 自动纠偏 */
|
||||
KylinScannerTextRecognition = 0x160003, /* 文本识别 */
|
||||
KylinScannerCutting = 0x160004, /* 裁剪 */
|
||||
KylinScannerRotate = 0x160005, /* 旋转 */
|
||||
KylinScannerImage = 0x160006, /* 镜像 */
|
||||
KylinScannerAddWatermark = 0x160007, /* 加水印 */
|
||||
KylinScannerSendMail = 0x160008, /* 发送邮件 */
|
||||
KylinScannerSaveAs = 0x160009, /* 另存为 */
|
||||
KylinScannerSinglePageScan = 0x160010, /* 单页扫描 */
|
||||
KylinScannerMultiPageScan = 0x160011, /* 多页扫描 */
|
||||
|
||||
KylinCalendarMonthDetails = 0x170001, /* 查看月详情 */
|
||||
KylinCalendarMonthSwitch = 0x170002, /* 月切换 */
|
||||
KylinCalendarDoday = 0x170003, /* 定位到今天 */
|
||||
|
||||
TestFunPoint = 0x999999 /* 测试预留 */
|
||||
};
|
||||
|
||||
static bool functionBuriedPoint(AppName packageName, PT point)
|
||||
{
|
||||
static char *messageType = (char *)"FunctionType";
|
||||
char *appName = strdup(Utils::getAppName(packageName).c_str());
|
||||
|
||||
std::string hex;
|
||||
std::stringstream ss;
|
||||
|
||||
ss << std::hex << point;
|
||||
ss >> hex;
|
||||
|
||||
KBuriedPoint pt;
|
||||
pt.key = "FunctionName";
|
||||
pt.value = hex.c_str();
|
||||
|
||||
if (kdk_buried_point(appName, messageType, &pt, 1)) {
|
||||
free(appName);
|
||||
klog_err("kabase: buried point fail !\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
free(appName);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
static bool buriedPoint(AppName packageName, BuriedPointType buriedPointType, std::map<std::string, std::string> data)
|
||||
{
|
||||
char *appName = strdup(Utils::getAppName(packageName).c_str());
|
||||
|
||||
char type[128];
|
||||
memset(type, '\0', sizeof(type));
|
||||
switch (buriedPointType) {
|
||||
case BuriedPointType::FunctionType:
|
||||
strcpy(type, "FunctionType");
|
||||
break;
|
||||
case BuriedPointType::PerformanceType:
|
||||
strcpy(type, "PerformanceType");
|
||||
break;
|
||||
case BuriedPointType::StabilityType:
|
||||
strcpy(type, "StabilityType");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!strlen(type)) {
|
||||
klog_err("kabase: buried point type is empty !\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
int size = data.size();
|
||||
if (size == 0) {
|
||||
klog_err("kabase: buried point data is empty !\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
KBuriedPoint *pt = (KBuriedPoint *)malloc(sizeof(KBuriedPoint) * size);
|
||||
{
|
||||
int i;
|
||||
std::map<std::string, std::string>::iterator it;
|
||||
for (i = 0, it = data.begin(); it != data.end() && i < size; it++, i++) {
|
||||
pt[i].key = it->first.c_str();
|
||||
pt[i].value = it->second.c_str();
|
||||
}
|
||||
}
|
||||
|
||||
if (kdk_buried_point(appName, type, pt, size)) {
|
||||
free(appName);
|
||||
free(pt);
|
||||
klog_err("kabase: buried point fail !\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
free(appName);
|
||||
free(pt);
|
||||
|
||||
return true;
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,88 @@
|
|||
#ifndef UTILS_HPP_
|
||||
#define UTILS_HPP_
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace kabase
|
||||
{
|
||||
|
||||
/* 应用名 */
|
||||
enum AppName {
|
||||
KylinIpmsg = 0, /* 传书 */
|
||||
KylinFontViewer, /* 字体管理器 */
|
||||
KylinCalculator, /* 麒麟计算器 */
|
||||
KylinGpuController, /* 显卡控制器 */
|
||||
KylinMusic, /* 音乐 */
|
||||
KylinWeather, /* 天气 */
|
||||
KylinPhotoViewer, /* 看图 */
|
||||
KylinServiceSupport, /* 服务与支持 */
|
||||
KylinPrinter, /* 麒麟打印 */
|
||||
KylinCalendar, /* 日历 */
|
||||
KylinRecorder, /* 录音 */
|
||||
KylinCamera, /* 摄像头 */
|
||||
KylinNotebook, /* 便签 */
|
||||
KylinOsManager, /* 麒麟管家 */
|
||||
KylinNetworkCheck, /* 网络检测工具 */
|
||||
KylinGallery, /* 相册 */
|
||||
KylinScanner, /* 扫描 */
|
||||
KylinMobileAssistant, /* 多端协同 */
|
||||
KylinTest /* 测试预留 */
|
||||
};
|
||||
|
||||
class Utils
|
||||
{
|
||||
public:
|
||||
Utils() = default;
|
||||
~Utils() = default;
|
||||
|
||||
static std::string getAppName(AppName appName)
|
||||
{
|
||||
switch (appName) {
|
||||
case AppName::KylinCalculator:
|
||||
return "kylin-calaulator";
|
||||
case AppName::KylinCalendar:
|
||||
return "kylin-calendar";
|
||||
case AppName::KylinCamera:
|
||||
return "kylin-camera";
|
||||
case AppName::KylinFontViewer:
|
||||
return "kylin-font-viewer";
|
||||
case AppName::KylinGpuController:
|
||||
return "kylin-gpu-controller";
|
||||
case AppName::KylinIpmsg:
|
||||
return "kylin-ipmsg";
|
||||
case AppName::KylinMusic:
|
||||
return "kylin-music";
|
||||
case AppName::KylinPhotoViewer:
|
||||
return "kylin-photo-viewer";
|
||||
case AppName::KylinPrinter:
|
||||
return "kylin-printer";
|
||||
case AppName::KylinRecorder:
|
||||
return "kylin-recorder";
|
||||
case AppName::KylinServiceSupport:
|
||||
return "kylin-service-support";
|
||||
case AppName::KylinWeather:
|
||||
return "kylin-weather";
|
||||
case AppName::KylinNotebook:
|
||||
return "kylin-notebook";
|
||||
case AppName::KylinOsManager:
|
||||
return "kylin-os-manager";
|
||||
case AppName::KylinNetworkCheck:
|
||||
return "kylin-network-check-tools";
|
||||
case AppName::KylinGallery:
|
||||
return "kylin-gallery";
|
||||
case AppName::KylinScanner:
|
||||
return "kylin-scanner";
|
||||
case AppName::KylinMobileAssistant:
|
||||
return "kylin-mobile-assistant";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
|
||||
/* 不应该被执行 */
|
||||
return "";
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -13,9 +13,10 @@ QT += \
|
|||
svg
|
||||
|
||||
# 配置kysdk
|
||||
PKGCONFIG += kysdk-kabase
|
||||
PKGCONFIG += kysdk-kabase kysdk-waylandhelper kysdk-qtwidgets kysdk-waylandhelper kysdk-alm kysdk-ukenv kysdk-log kysdk-diagnostics
|
||||
INCLUDEPATH += /usr/include/kysdk/applications/kabase/
|
||||
|
||||
INCLUDEPATH += kabase/ \
|
||||
kabase/Qt
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = kylin-scanner
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "about.h"
|
||||
#include "ui_about.h"
|
||||
#include <kylin_system/window_management.hpp>
|
||||
#include "kabase/Qt/windowmanage.hpp"
|
||||
#include <gsettings.hpp>
|
||||
|
||||
|
||||
|
@ -24,9 +24,9 @@ AboutDialog::AboutDialog(QWidget *parent)
|
|||
|
||||
void AboutDialog::titlebar_icon_theme_changed()
|
||||
{
|
||||
setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
ui->labelLogo->setPixmap(QIcon::fromTheme("kylin-scanner").pixmap(ui->labelLogo->size()));
|
||||
ui->labelIcon->setPixmap(QIcon::fromTheme("kylin-scanner").pixmap(96, 96));
|
||||
// setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// ui->labelLogo->setPixmap(QIcon::fromTheme("kylin-scanner").pixmap(ui->labelLogo->size()));
|
||||
// ui->labelIcon->setPixmap(QIcon::fromTheme("kylin-scanner").pixmap(96, 96));
|
||||
}
|
||||
|
||||
void AboutDialog::titlebar_style_changed()
|
||||
|
@ -59,11 +59,11 @@ AboutDialog::~AboutDialog()
|
|||
|
||||
void AboutDialog::initWindow()
|
||||
{
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setWindowModality(Qt::ApplicationModal);
|
||||
setWindowTitle(tr("About"));
|
||||
setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
|
||||
setFixedSize(QSize(420, 448-80));
|
||||
}
|
||||
|
@ -72,9 +72,14 @@ void AboutDialog::initLayout()
|
|||
{
|
||||
QString appVersion = QCoreApplication::applicationVersion();
|
||||
ui->labelVersion->setText(tr("Version: " ) + appVersion);
|
||||
|
||||
ui->labelLogo->setPixmap(QIcon::fromTheme("kylin-scanner").pixmap(ui->labelLogo->size()));
|
||||
ui->labelIcon->setPixmap(QIcon::fromTheme("kylin-scanner").pixmap(96, 96));
|
||||
ui->titleIcon->setIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
ui->titleIcon->setFixedSize(30,30);
|
||||
ui->titleIcon->setIconSize(QSize(24,24));
|
||||
ui->titleIcon->setStyleSheet("QPushButton{border:0px;background:transparent;}");
|
||||
ui->bigIcon->setIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
ui->bigIcon->setFixedSize(96,96);
|
||||
ui->bigIcon->setIconSize(QSize(96,96));
|
||||
ui->bigIcon->setStyleSheet("QPushButton{border:0px;background:transparent;}");
|
||||
|
||||
ui->labelName->setText(tr("Scanner"));
|
||||
ui->labelTitle->setText(tr("Scanner"));
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelLogo">
|
||||
<widget class="QPushButton" name="titleIcon">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
|
@ -79,9 +79,27 @@
|
|||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -141,12 +159,36 @@
|
|||
<number>16</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelIcon">
|
||||
<widget class="QPushButton" name="bigIcon">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>96</width>
|
||||
<height>96</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>96</width>
|
||||
<height>96</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>96</width>
|
||||
<height>96</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -36,12 +36,6 @@ bool FailedPageWidget::isDarkTheme()
|
|||
}
|
||||
void FailedPageWidget::setupGui()
|
||||
{
|
||||
if(themeColor == "white"){
|
||||
m_failedPageIcon->setPixmap(QPixmap(":/default-connect-page/detect_fail_light.svg"));
|
||||
}else{
|
||||
m_failedPageIcon->setPixmap(QPixmap(":/default-connect-page/detect_fail_dark.svg"));
|
||||
}
|
||||
|
||||
m_failedPageIcon->setFixedSize(FailedPageIconSize);
|
||||
|
||||
m_failedPageText->setEnabled(false);
|
||||
|
@ -54,8 +48,13 @@ void FailedPageWidget::setupGui()
|
|||
m_failedPageButton->setFocus();
|
||||
m_failedPageButton->setDefault(true);
|
||||
|
||||
m_failedPageButton->setStyleSheet("QPushButton{background-color:rgb(55,144,250);color:rgb(255,255,255);}");
|
||||
|
||||
// m_failedPageButton->setStyleSheet("QPushButton{background-color:rgb(55,144,250);color:rgb(255,255,255);}");
|
||||
QPalette palette;
|
||||
QColor color(55, 144, 250);
|
||||
palette.setColor(QPalette::Button, color);
|
||||
QColor colorFont(255, 255, 255);
|
||||
palette.setColor(QPalette::ButtonText,colorFont);
|
||||
m_failedPageButton->setPalette(palette);
|
||||
|
||||
m_failedPageVLayout->setSpacing(0);
|
||||
m_failedPageVLayout->addStretch();
|
||||
|
|
|
@ -216,8 +216,6 @@ void GlobalUserSignal::stopOcrTimer()
|
|||
{
|
||||
emit stopOcrTimerSignal();
|
||||
}
|
||||
|
||||
|
||||
GlobalUserSignal::GlobalUserSignal(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
/******** Mainwidget ********/
|
||||
#define MainWidgetWidth 960
|
||||
#define MainWidgetHeight 676
|
||||
#define MainWidgetHeight 677
|
||||
#define ApplicationName "Scanner"
|
||||
|
||||
/******** TitlebarWidget ********/
|
||||
|
@ -40,7 +40,7 @@
|
|||
// font size by desinger maybe small, so normal font can make window large
|
||||
#define AddWidthForLargeFontSize 20
|
||||
|
||||
#define ScanSettingsWidgetWidth (248+AddWidthForLargeFontSize)
|
||||
#define ScanSettingsWidgetWidth (250+AddWidthForLargeFontSize)
|
||||
#define ScanSettingsWidgetHeight (MainWidgetHeight-TitlebarHeight)
|
||||
#define ScanSettingsWidgetScanButtonSize QSize(144, 36)//216, 36
|
||||
#define ScanSettingsWidgetComboboxSize QSize(144, 36)//166, 36
|
||||
|
@ -54,7 +54,7 @@
|
|||
/******** LeftSuccessPageWidget ********/
|
||||
#define LeftSuccessPageWidth (MainWidgetWidth-ScanSettingsWidgetWidth)
|
||||
#define LeftSuccessPageHeight (MainWidgetHeight-TitlebarHeight)
|
||||
#define LeftSuccessPageIconSize QSize(101, 91)
|
||||
#define LeftSuccessPageIconSize QSize(128, 128)
|
||||
|
||||
/******** LeftImageHandleSuccessPageWidget ********/
|
||||
#define LeftImageHandleSuccessPageWidth (MainWidgetWidth-ScanSettingsWidgetWidth)
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*
|
||||
*/
|
||||
#include "leftsuccesspagewidget.h"
|
||||
#include "include/theme.h"
|
||||
#include <gsettings.hpp>
|
||||
|
||||
LeftSuccessPageWidget::LeftSuccessPageWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
|
@ -24,12 +26,32 @@ LeftSuccessPageWidget::LeftSuccessPageWidget(QWidget *parent) :
|
|||
m_connectSuccessVLayout(new QVBoxLayout(this))
|
||||
{
|
||||
setupGui();
|
||||
initTheme();
|
||||
connect(kdk::kabase::Gsettings::getPoint(), &kdk::kabase::Gsettings::systemThemeChange, this, &LeftSuccessPageWidget::initTheme);
|
||||
}
|
||||
|
||||
void LeftSuccessPageWidget::initTheme(){
|
||||
if (isDarkTheme()) {
|
||||
m_connectSuccessIcon->setPixmap(QPixmap(":/default-connect-page/detect_fail_dark.svg"));
|
||||
} else {
|
||||
m_connectSuccessIcon->setPixmap(QPixmap(":/default-connect-page/detect_fail_light.svg"));
|
||||
}
|
||||
}
|
||||
bool LeftSuccessPageWidget::isDarkTheme()
|
||||
{
|
||||
QString systemTheme = kdk::kabase::Gsettings::getSystemTheme().toString();
|
||||
|
||||
if (systemTheme == STYLE_NAME_KEY_DARK || systemTheme == STYLE_NAME_KEY_BLACK) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void LeftSuccessPageWidget::setupGui()
|
||||
{
|
||||
setMinimumSize(LeftSuccessPageWidth, LeftSuccessPageHeight);
|
||||
m_connectSuccessIcon->setPixmap(QPixmap(":/default-connect-page/detect-success.svg"));
|
||||
m_connectSuccessIcon->setPixmap(QPixmap(":/default-connect-page/detect_fail_light.svg"));
|
||||
m_connectSuccessIcon->setFixedSize(LeftSuccessPageIconSize);
|
||||
|
||||
m_connectSuccessText->setEnabled(false);
|
||||
|
|
|
@ -46,6 +46,9 @@ private:
|
|||
QLabel *m_connectSuccessIcon;
|
||||
QLabel *m_connectSuccessText;
|
||||
QVBoxLayout *m_connectSuccessVLayout;
|
||||
bool isDarkTheme();
|
||||
private slots:
|
||||
void initTheme();
|
||||
|
||||
};
|
||||
|
||||
|
|
45
src/main.cpp
45
src/main.cpp
|
@ -38,8 +38,10 @@
|
|||
#include <QFileInfo>
|
||||
#include <fstream>
|
||||
#include <stdio.h>
|
||||
#include <log.hpp>
|
||||
#include <single_application/single_application.hpp>
|
||||
#include "log.hpp"
|
||||
#include "windowmanage.hpp"
|
||||
#include <singleapplication.h>
|
||||
#include <QDebug>
|
||||
|
||||
#define TRANS_PATH "/usr/share/kylin-scanner/translations"
|
||||
|
||||
|
@ -148,7 +150,7 @@ static QString getAppVersion()
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
/* 使用sdk管理日志 */
|
||||
qInstallMessageHandler(kdk::kabase::Log::logOutput);
|
||||
qInstallMessageHandler(::kabase::Log::logOutput);
|
||||
|
||||
QString scannerFileName;
|
||||
if (argc > 1) {
|
||||
|
@ -165,13 +167,13 @@ int main(int argc, char *argv[])
|
|||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||
#endif
|
||||
/* 适配4K屏 */
|
||||
::kabase::WindowManage::setScalingProperties();
|
||||
|
||||
kdk::kabase::QtSingleApplication app(argc, argv);
|
||||
kdk::QtSingleApplication app(argc, argv);
|
||||
|
||||
createScannerDir();
|
||||
|
||||
// Global::global_init();
|
||||
|
||||
getSystemArchitecture();
|
||||
app.setApplicationVersion(getAppVersion());
|
||||
app.setWindowIcon (QIcon::fromTheme("kylin-scanner"));
|
||||
|
@ -258,6 +260,7 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
qDebug() << "加载中文失败";
|
||||
}
|
||||
app.setApplicationVersion("3.2.0");
|
||||
|
||||
if (! app.isRunning()) {
|
||||
QString userNow = getCurrentUserName();
|
||||
|
@ -265,11 +268,31 @@ int main(int argc, char *argv[])
|
|||
|
||||
doWrite(userNow, pidNow);
|
||||
|
||||
MainWidget w;
|
||||
// app.w = &w;
|
||||
// w.show();
|
||||
app.setActivationWindow(&w);
|
||||
w.show();
|
||||
MainWidget *w = new MainWidget;
|
||||
/* 最小化拉起 */
|
||||
app.setActivationWindow(w);
|
||||
|
||||
/* wayland最小化拉起 */
|
||||
quint32 mainWidgetWindowId = w->getWindowId();
|
||||
qDebug() << "mainWidgetWindowId: " << mainWidgetWindowId;
|
||||
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
|
||||
QObject::connect(&app, &kdk::QtSingleApplication::messageReceived, [=](){
|
||||
printf("mainWidgetWindowId: %d",mainWidgetWindowId);
|
||||
qDebug() << "mainWidgetWindowId: " << mainWidgetWindowId;
|
||||
::kabase::WindowManage::activateWindow(mainWidgetWindowId);
|
||||
});
|
||||
}
|
||||
|
||||
/* 移除标题栏 */
|
||||
::kabase::WindowManage::removeHeader(w);
|
||||
|
||||
/* 解决置顶失效 */
|
||||
kabase::WindowManage::keepWindowAbove(w->windowId);
|
||||
|
||||
w->show();
|
||||
|
||||
/* 居中显示 */
|
||||
::kabase::WindowManage::setMiddleOfScreen(w);
|
||||
|
||||
|
||||
return app.exec();
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <gsettings.hpp>
|
||||
#include <kylin_system/user_manual.hpp>
|
||||
#include <KWindowEffects>
|
||||
#include "kabase/Qt/windowmanage.hpp"
|
||||
|
||||
|
||||
|
||||
|
@ -39,6 +40,7 @@ MainWidget::MainWidget(QWidget *parent)
|
|||
// m_displayScrollArea(new QScrollArea),
|
||||
m_mainWidgetVLayout(new QVBoxLayout())
|
||||
{
|
||||
kabase::WindowManage::getWindowId(&windowId);
|
||||
setupGui();
|
||||
initConnect();
|
||||
initGsettings();
|
||||
|
@ -68,13 +70,13 @@ void MainWidget::setupGui()
|
|||
this->setAttribute(Qt::WA_TranslucentBackground, true);
|
||||
|
||||
// Add window control protocol
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
resize(MainWidgetWidth, MainWidgetHeight);
|
||||
setMinimumSize(MainWidgetWidth, MainWidgetHeight);
|
||||
setWindowTitle(tr("kylin-scanner"));
|
||||
this->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// this->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
setMouseTracking(true);
|
||||
setAutoFillBackground(true);
|
||||
setAcceptDrops(true);
|
||||
|
@ -191,7 +193,7 @@ void MainWidget::themeChange()
|
|||
void MainWidget::iconThemeNameChange()
|
||||
{
|
||||
|
||||
this->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// this->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
|
||||
}
|
||||
|
||||
|
@ -225,7 +227,7 @@ void MainWidget::warnMsg(QString msg)
|
|||
|
||||
msgBox->setText(msg);
|
||||
msgBox->setIcon(QMessageBox::Warning);
|
||||
msgBox->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// msgBox->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
msgBox->setWindowTitle(tr("Scanner"));
|
||||
msgBox->setStandardButtons(QMessageBox::Yes);
|
||||
msgBox->setContextMenuPolicy(Qt::NoContextMenu);
|
||||
|
@ -374,7 +376,9 @@ void MainWidget::maximizeWindowSlot()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
quint32 MainWidget::getWindowId(){
|
||||
return windowId;
|
||||
}
|
||||
void MainWidget::closeWindowSlot()
|
||||
{
|
||||
exit(0);
|
||||
|
|
|
@ -162,10 +162,11 @@ public:
|
|||
void fontSizeChange();
|
||||
void transparencyChange();
|
||||
void warnMsg(QString msg);
|
||||
|
||||
quint32 getWindowId();
|
||||
void reboot();
|
||||
|
||||
static int const EXIT_CODE_REBOOT;
|
||||
quint32 windowId = 0;
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
*/
|
||||
|
||||
#include "runningdialog.h"
|
||||
#include <kylin_system/window_management.hpp>
|
||||
#include <gsettings.hpp>
|
||||
#include "kabase/Qt/windowmanage.hpp"
|
||||
|
||||
RunningDialog::RunningDialog(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
|
@ -33,7 +33,8 @@ RunningDialog::RunningDialog(QWidget *parent)
|
|||
, hLayoutCancel (new QHBoxLayout())
|
||||
, vLayout (new QVBoxLayout())
|
||||
{
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
/* 移除标题栏 */
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT);
|
||||
|
||||
|
@ -119,7 +120,7 @@ RunningDialog::RunningDialog(QWidget *parent, QString text)
|
|||
, vLayout (new QVBoxLayout())
|
||||
|
||||
{
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT);
|
||||
|
||||
|
|
|
@ -183,11 +183,13 @@ static SANE_Status onScanning(FILE *ofp)
|
|||
|
||||
do {
|
||||
if (!first_frame) {
|
||||
qDebug() << "sane start!";
|
||||
status = sane_start (g_device);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
qDebug()<<"sane get parameter";
|
||||
status = sane_get_parameters (g_device, &parm);
|
||||
KyInfo() << "Parm : status = " << sane_strstatus(status)
|
||||
<< "format = " << parm.format
|
||||
|
@ -230,6 +232,7 @@ static SANE_Status onScanning(FILE *ofp)
|
|||
switch(g_sane_object->output_format)
|
||||
{
|
||||
case OUTPUT_PNM:
|
||||
qDebug()<<"start write file!";
|
||||
writePnmHeader (parm.format, parm.pixels_per_line, parm.lines, parm.depth, ofp);
|
||||
break;
|
||||
#if HAVE_LIBJPEG
|
||||
|
@ -282,7 +285,9 @@ static SANE_Status onScanning(FILE *ofp)
|
|||
hundred_percent = parm.bytes_per_line * parm.lines \
|
||||
*((parm.format == SANE_FRAME_RGB || parm.format == SANE_FRAME_GRAY) ? 1 : 3);
|
||||
while (1) {
|
||||
static int i =0;
|
||||
double progr;
|
||||
qDebug()<<"read file!" << i++;
|
||||
status = sane_read (g_device, g_buf, g_BufSize, &len);
|
||||
total_bytes += (SANE_Word) len;
|
||||
if(hundred_percent == 0){
|
||||
|
@ -1083,9 +1088,13 @@ SANE_Status setOptionResolutions(SANE_Handle sane_handle, SANE_Int val_resolutio
|
|||
|
||||
KyInfo() << "Set resolution option = " << val_resolution;
|
||||
|
||||
int index = -1;
|
||||
if(!g_sane_object->getSaneOptIndex(SANE_NAME_SCAN_RESOLUTION,index)){
|
||||
status = sane_control_option(sane_handle, g_optDesc.numResolution,
|
||||
SANE_ACTION_SET_VALUE, &val_resolution, nullptr);
|
||||
|
||||
}else{
|
||||
status = sane_control_option(sane_handle,index,SANE_ACTION_SET_VALUE, &val_resolution, nullptr);
|
||||
}
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "status = " << status << "desc: " << sane_strstatus(status);
|
||||
return status;
|
||||
|
@ -1128,7 +1137,7 @@ SANE_Status setOptionSizes(SANE_Handle sane_handle, int optnum, SANE_Int val_siz
|
|||
{
|
||||
SANE_Status status = SANE_STATUS_GOOD;
|
||||
|
||||
KyInfo() << "Set size option = " << val_size;
|
||||
KyInfo() << "Set size option = "<< optnum << val_size;
|
||||
|
||||
status = sane_control_option(sane_handle, optnum,
|
||||
SANE_ACTION_SET_VALUE, &val_size, nullptr);
|
||||
|
@ -1146,27 +1155,55 @@ SANE_Status setOptionSizesReal(SANE_Handle sane_handle, SANE_Int val_size_br_x,
|
|||
{
|
||||
SANE_Status status = SANE_STATUS_GOOD;
|
||||
KyInfo() << "Size bottom-right location(xy) = " << val_size_br_x << val_size_br_y;
|
||||
|
||||
status = setOptionSizes(sane_handle, g_optDesc.numSizeBrX, SANE_FIX(val_size_br_x));
|
||||
int index = -1;
|
||||
if(g_sane_object->getSaneOptIndex(SANE_NAME_SCAN_BR_X,index)){
|
||||
status = setOptionSizes(sane_handle, index, SANE_FIX(val_size_br_x));
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "status = " << sane_strstatus(status);
|
||||
return status;
|
||||
}
|
||||
status = setOptionSizes(sane_handle, g_optDesc.numPageWidth, SANE_FIX(val_size_br_x));
|
||||
index = -1;
|
||||
}
|
||||
if(g_sane_object->getSaneOptIndex(SANE_NAME_SCAN_BR_Y,index)){
|
||||
status = setOptionSizes(sane_handle, index, SANE_FIX(val_size_br_y));
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "status = " << sane_strstatus(status);
|
||||
return status;
|
||||
}
|
||||
status = setOptionSizes(sane_handle, g_optDesc.numSizeBrY, SANE_FIX(val_size_br_y));
|
||||
index = -1;
|
||||
}
|
||||
if(g_sane_object->getSaneOptIndex(SANE_NAME_SCAN_TL_X,index)){
|
||||
status = setOptionSizes(sane_handle, index, SANE_FIX(0));
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "status = " << sane_strstatus(status);
|
||||
return status;
|
||||
}
|
||||
status = setOptionSizes(sane_handle, g_optDesc.numPageHeight, SANE_FIX(val_size_br_y));
|
||||
index = -1;
|
||||
}
|
||||
if(g_sane_object->getSaneOptIndex(SANE_NAME_SCAN_TL_Y,index)){
|
||||
status = setOptionSizes(sane_handle, index, SANE_FIX(0));
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "status = " << sane_strstatus(status);
|
||||
return status;
|
||||
}
|
||||
index = -1;
|
||||
}
|
||||
if(g_sane_object->getSaneOptIndex(SANE_NAME_PAGE_WIDTH,index)){
|
||||
status = setOptionSizes(sane_handle, index, SANE_FIX(val_size_br_x - 0));
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "status = " << sane_strstatus(status);
|
||||
return status;
|
||||
}
|
||||
index = -1;
|
||||
}
|
||||
if(g_sane_object->getSaneOptIndex(SANE_NAME_PAGE_HEIGHT,index)){
|
||||
status = setOptionSizes(sane_handle, index, SANE_FIX(val_size_br_y - 0));
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "status = " << sane_strstatus(status);
|
||||
return status;
|
||||
}
|
||||
index = -1;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1919,9 +1956,44 @@ void SaneObject::saneClose()
|
|||
}
|
||||
stopSaneRead(true);
|
||||
}
|
||||
/*
|
||||
* #define SANE_NAME_SCAN_MODE "mode"
|
||||
#define SANE_NAME_SCAN_SPEED "speed"
|
||||
#define SANE_NAME_SCAN_SOURCE "source"
|
||||
#define SANE_NAME_SCAN_TL_X "tl-x"
|
||||
#define SANE_NAME_SCAN_TL_Y "tl-y"
|
||||
#define SANE_NAME_SCAN_BR_X "br-x"
|
||||
#define SANE_NAME_SCAN_BR_Y "br-y"
|
||||
#define SANE_NAME_SCAN_RESOLUTION "resolution"
|
||||
#define SANE_NAME_SCAN_X_RESOLUTION "x-resolution"
|
||||
#define SANE_NAME_SCAN_Y_RESOLUTION "y-resolution"
|
||||
#define SANE_NAME_PAGE_WIDTH "page-width"
|
||||
#define SANE_NAME_PAGE_HEIGHT "page-height"
|
||||
*/
|
||||
|
||||
void SaneObject::dumpScannerOptions()
|
||||
{
|
||||
m_saneOptions.clear();
|
||||
for(auto opt = 0; const SANE_Option_Descriptor *desc = sane_get_option_descriptor(g_sane_object->handle,opt);opt++)
|
||||
{
|
||||
qDebug ()<<opt << desc->name << desc->desc;
|
||||
if(QString::compare(SANE_NAME_SCAN_MODE,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_SCAN_SOURCE,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_SCAN_RESOLUTION,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_SCAN_TL_X,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_SCAN_TL_Y,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_SCAN_BR_X,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_SCAN_BR_Y,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_PAGE_WIDTH,desc->name) == 0 ||
|
||||
QString::compare(SANE_NAME_PAGE_HEIGHT,desc->name) == 0) {
|
||||
m_saneOptions.insert(desc->name,opt);
|
||||
}
|
||||
}
|
||||
qDebug() << m_saneOptions;
|
||||
}
|
||||
void SaneObject::setSaneAllParametersByUser()
|
||||
{
|
||||
dumpScannerOptions();
|
||||
setSaneNameByUser();
|
||||
setSanePageNumberByUser();
|
||||
setSaneTimeByUser();
|
||||
|
@ -2041,15 +2113,10 @@ void SaneObject::setSaneResolutionByUser()
|
|||
SANE_Status status = SANE_STATUS_GOOD;
|
||||
QString resolution = g_sane_object->userInfo.resolution;
|
||||
SANE_Int i_resolution;
|
||||
|
||||
KyInfo() << "resolution = " << resolution;
|
||||
|
||||
resolutionValue = getSaneResolutionByUser(resolution);
|
||||
i_resolution = static_cast<SANE_Int>(resolutionValue);
|
||||
|
||||
resolution_value = i_resolution;
|
||||
|
||||
|
||||
status = setOptionResolutions(g_sane_object->handle, i_resolution);
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
KyInfo() << "Failed to set option resolution: " << resolution
|
||||
|
@ -2299,3 +2366,16 @@ bool SaneObject::testScannerIsAlive(QString deviceName)
|
|||
KyInfo() << "deviceName= " << deviceName;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SaneObject::getSaneOptIndex(QString desc,int &index)
|
||||
{
|
||||
auto k = m_saneOptions.find(desc);
|
||||
if(k==m_saneOptions.end()){
|
||||
return false;
|
||||
} else {
|
||||
qDebug() << "Found" << k.key() << k.value();
|
||||
index = k.value();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
//using namespace std;
|
||||
|
||||
#include "globalsignal.h"
|
||||
|
||||
#include <QMap>
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 1024
|
||||
#endif
|
||||
|
@ -196,7 +196,7 @@ public:
|
|||
int output_format = OUTPUT_PNM;
|
||||
int resolution_value;
|
||||
|
||||
|
||||
bool getSaneOptIndex(QString desc,int &index);
|
||||
private:
|
||||
static SaneObject *instance;
|
||||
|
||||
|
@ -206,7 +206,9 @@ private:
|
|||
SaneObject &operator = (const SaneObject &) = delete ;
|
||||
|
||||
ScanDeviceInfo devicesInfo;
|
||||
|
||||
//QString : 属性描述, int:属性index
|
||||
QMap<QString,int> m_saneOptions;
|
||||
void dumpScannerOptions();
|
||||
public slots:
|
||||
void stopSaneRead(bool isStoped);
|
||||
void stopSaneForException();
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
SaveFileDialog::SaveFileDialog(QWidget *parent) : QFileDialog(parent)
|
||||
{
|
||||
setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
setNameFilter(QLatin1String("*.jpg;;*.png;;*.pdf;;*.bmp"));
|
||||
setAcceptMode(QFileDialog::AcceptSave);
|
||||
this->findChildren<QLineEdit *>("fileNameEdit").at(0)->setText(initFilename);
|
||||
|
@ -57,7 +57,7 @@ SaveFileDialog::SaveFileDialog(QWidget *parent, int ocrFlag, QString filename, Q
|
|||
{
|
||||
Q_UNUSED(parent);
|
||||
|
||||
setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
setWindowTitle(titlename);
|
||||
setAcceptMode(QFileDialog::AcceptSave);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "scandialog.h"
|
||||
#include "./utils/xatom-helper.h"
|
||||
#include "globalsignal.h"
|
||||
#include <kylin_system/window_management.hpp>
|
||||
#include "kabase/Qt/windowmanage.hpp"
|
||||
#include <gsettings.hpp>
|
||||
#include "include/theme.h"
|
||||
|
||||
|
@ -22,10 +22,10 @@ ScanDialog::ScanDialog(QWidget *parent) : QDialog(parent),
|
|||
|
||||
void ScanDialog::setupGui()
|
||||
{
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setWindowModality(Qt::ApplicationModal);
|
||||
setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
this->setWindowTitle(tr("Scanner"));
|
||||
this->setFixedSize(ScanDialogWindowSize);
|
||||
|
||||
|
|
|
@ -506,7 +506,11 @@ void ScanSettingsWidget::setupGui()
|
|||
// m_scanButton->setFixedSize(QSize(193+AddWidthForLargeFontSize, 36));
|
||||
m_scanButton->setCursor(Qt::PointingHandCursor);
|
||||
scanButtonRightLabel->setStyleSheet("color:white;");
|
||||
m_scanButton->setStyleSheet("QPushButton{background: rgba(55, 144, 250, 1);}");
|
||||
// m_scanButton->setStyleSheet("QPushButton{background: rgb(55, 144, 250);}");
|
||||
QPalette palette;
|
||||
QColor color(55, 144, 250);
|
||||
palette.setColor(QPalette::Button, color);
|
||||
m_scanButton->setPalette(palette);
|
||||
|
||||
// m_deviceComboBox->setFixedSize(ScanSettingsWidgetComboboxSize);
|
||||
|
||||
|
@ -579,8 +583,6 @@ void ScanSettingsWidget::setupGui()
|
|||
m_sendMailButton->setMinimumSize(ScanSettingsWidgetButtonSize);
|
||||
m_SaveAsButton->setMinimumSize(ScanSettingsWidgetButtonSize);
|
||||
|
||||
|
||||
|
||||
m_buttonsHLayout->setSpacing(0);
|
||||
//m_buttonsHLayout->addSpacing(16-spacing);
|
||||
m_buttonsHLayout->addWidget(m_sendMailButton);
|
||||
|
@ -594,9 +596,9 @@ void ScanSettingsWidget::setupGui()
|
|||
m_mainVLayout->addSpacing(16);
|
||||
m_mainVLayout->addLayout(m_settingsFormLayout);
|
||||
//m_mainVLayout->addStretch();
|
||||
m_mainVLayout->addSpacing(32);
|
||||
m_mainVLayout->addLayout(m_buttonsHLayout);
|
||||
m_mainVLayout->addSpacing(16);
|
||||
m_mainVLayout->addLayout(m_buttonsHLayout);
|
||||
m_mainVLayout->addSpacing(24);
|
||||
m_mainVLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
|
||||
|
@ -1125,7 +1127,7 @@ void ScanSettingsWidget::warnMsg(QString msg)
|
|||
|
||||
msgBox->setText(msg);
|
||||
msgBox->setIcon(QMessageBox::Warning);
|
||||
msgBox->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// msgBox->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
msgBox->setWindowTitle(tr("Scanner"));
|
||||
msgBox->setStandardButtons(QMessageBox::Yes);
|
||||
msgBox->setContextMenuPolicy(Qt::NoContextMenu);
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "sendmail.h"
|
||||
#include <kylin_system/window_management.hpp>
|
||||
#include "kabase/Qt/windowmanage.hpp"
|
||||
|
||||
NoMailDialog::NoMailDialog(QWidget *parent) : QDialog(parent)
|
||||
, m_noMailTitleTextLabel (new QLabel())
|
||||
|
@ -47,7 +48,7 @@ NoMailDialog::~NoMailDialog()
|
|||
|
||||
void NoMailDialog::initWindow()
|
||||
{
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setWindowTitle (tr("No email client"));
|
||||
setFixedSize(NoMailWindowWidth, NoMainWindowHeight);
|
||||
|
@ -211,7 +212,7 @@ SendMailDialog::~SendMailDialog()
|
|||
|
||||
void SendMailDialog::initWindow()
|
||||
{
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setWindowTitle (tr("Select email client"));
|
||||
setFixedSize(SendMailWindowWidth, SendMainWindowHeight);
|
||||
|
|
|
@ -10,23 +10,25 @@ ThumbnailWidget::ThumbnailWidget(QWidget *parent) : QListView(parent)
|
|||
setupGui();
|
||||
initConnect();
|
||||
initSettings();
|
||||
themeChange();
|
||||
|
||||
}
|
||||
|
||||
void ThumbnailWidget::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
QPainter p(this);
|
||||
p.setRenderHint(QPainter::Antialiasing);
|
||||
QPainterPath rectPath;
|
||||
rectPath.addRoundedRect(this->rect(), 0, 0);
|
||||
QStyleOption opt;
|
||||
opt.init(this);
|
||||
//void ThumbnailWidget::paintEvent(QPaintEvent *event)
|
||||
//{
|
||||
// Q_UNUSED(event);
|
||||
// QPainter p(this);
|
||||
// p.setRenderHint(QPainter::Antialiasing);
|
||||
// QPainterPath rectPath;
|
||||
// rectPath.addRoundedRect(this->rect(), 0, 0);
|
||||
// QStyleOption opt;
|
||||
// opt.init(this);
|
||||
|
||||
QColor mainColor;
|
||||
mainColor = opt.palette.color(QPalette::Base);
|
||||
// QColor mainColor;
|
||||
// mainColor = opt.palette.color(QPalette::Base);
|
||||
|
||||
p.fillPath(rectPath,QBrush(mainColor));
|
||||
}
|
||||
// p.fillPath(rectPath,QBrush(mainColor));
|
||||
//}
|
||||
void ThumbnailWidget::setupGui()
|
||||
{
|
||||
this->setFixedWidth(ThumbnailWidgetMinimumWidth);
|
||||
|
@ -52,11 +54,40 @@ void ThumbnailWidget::initConnect()
|
|||
{
|
||||
|
||||
connect(g_user_signal, &GlobalUserSignal::scanThreadFinishedImageLoadSignal, this, &ThumbnailWidget::showNormalImageAfterScan);
|
||||
|
||||
connect(this, &ThumbnailWidget::clicked, this, &ThumbnailWidget::clickedItemSlot);
|
||||
connect(kdk::kabase::Gsettings::getPoint(), &kdk::kabase::Gsettings::systemThemeChange, this, &ThumbnailWidget::themeChange);
|
||||
|
||||
}
|
||||
void ThumbnailWidget::themeChange()
|
||||
{
|
||||
QPalette pal(palette());
|
||||
if (isDarkTheme()) {
|
||||
this->setStyleSheet("QListView{outline:none;background:rgba(38,38, 38, 1);border-radius: 0px;}"
|
||||
"QListView::item{margin:0 1px 0 1px;background:rgba(38, 38, 38, 0.8);border-radius: 6px; }"
|
||||
"QListView::item:selected{border:1px solid #3790FA;background:rgba(38, 38, 38, 0.8);}"
|
||||
"QListView::item:hover{background:rgba(55, 144, 250, 0.5);}");
|
||||
// pal.setColor(QPalette::Background, QColor(64, 64, 64));
|
||||
} else {
|
||||
this->setStyleSheet("QListView{outline:none;background:rgba(255,255, 255, 1);border-radius: 0px;}"
|
||||
"QListView::item{margin:0 1px 0 1px;background:rgba(255, 255, 255, 0.8);border-radius: 6px; }"
|
||||
"QListView::item:selected{border:1px solid #3790FA;background:rgba(255, 255, 255, 0.8);}"
|
||||
"QListView::item:hover{background:rgba(55, 144, 250, 0.5);}");
|
||||
|
||||
// pal.setColor(QPalette::Background, QColor(240, 240, 240));
|
||||
}
|
||||
setAutoFillBackground(true);
|
||||
setPalette(pal);
|
||||
}
|
||||
bool ThumbnailWidget::isDarkTheme()
|
||||
{
|
||||
QString systemTheme = kdk::kabase::Gsettings::getSystemTheme().toString();
|
||||
|
||||
if (systemTheme == STYLE_NAME_KEY_DARK || systemTheme == STYLE_NAME_KEY_BLACK) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
void ThumbnailWidget::initSettings()
|
||||
{
|
||||
showThumbnailIcon();
|
||||
|
@ -91,9 +122,9 @@ void ThumbnailWidget::showNormalImageAfterScan()
|
|||
Mat iconMat = KylinImageCodec::loadThumbnailToMat(scanFullName).mat;
|
||||
QPixmap iconPix = KylinImageCodec::converFormat(iconMat);
|
||||
|
||||
QPixmap fitpixmap =iconPix.scaled(QSize(40, 40), Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
|
||||
|
||||
QPixmap fitpixmap = iconPix.scaled(QSize(40, 40), Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
|
||||
|
||||
qDebug() << "image mesg:" << fitpixmap;
|
||||
ScanStandardItem *item = new ScanStandardItem();
|
||||
item->setIcon(QIcon(fitpixmap));
|
||||
item->setToolTip(tooltipName);
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#include <QFileInfo>
|
||||
#include <QPaintEvent>
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
#include <QStyleOption>
|
||||
#include <QStyle>
|
||||
|
||||
|
@ -47,6 +46,7 @@ public:
|
|||
private:
|
||||
QString m_path;
|
||||
int rowCountLocation;
|
||||
|
||||
};
|
||||
|
||||
class ThumbnailWidget : public QListView
|
||||
|
@ -60,10 +60,12 @@ public:
|
|||
void setupGui();
|
||||
void initConnect();
|
||||
void initSettings();
|
||||
void themeChange();
|
||||
bool isDarkTheme();
|
||||
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
// void paintEvent(QPaintEvent *event) override;
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
@ -40,6 +40,15 @@ TitleBar::TitleBar(QWidget *parent) :
|
|||
|
||||
m_menu->addAction(tr("About"), this, [ = ]() {
|
||||
g_user_signal->showAboutDialog();
|
||||
// using namespace kdk;
|
||||
// m_aboutWindow = new KAboutDialog(this,QIcon::fromTheme("kylin-camera"),tr(appShowingName.toLocal8Bit()),tr("Version: ") + appVersion);
|
||||
// m_aboutWindow->setBodyText(tr("Message provides text chat and file transfer functions in the LAN. "
|
||||
// "There is no need to build a server. "
|
||||
// "It supports multiple people to interact at the same time "
|
||||
// "and send and receive in parallel."));
|
||||
// m_aboutWindow->setBodyTextVisiable(true);
|
||||
// m_aboutWindow->setWindowModality(Qt::WindowModal);
|
||||
// m_aboutWindow->setWindowModality(Qt::ApplicationModal);
|
||||
});
|
||||
|
||||
m_menu->addAction(tr("Exit"), [ = ]() {
|
||||
|
@ -156,7 +165,7 @@ int TitleBar::warnCloseWindow()
|
|||
|
||||
msgBox->setText(tr("The current document is not saved. Do you want to save it?"));
|
||||
msgBox->setIcon(QMessageBox::Warning);
|
||||
msgBox->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
// msgBox->setWindowIcon(QIcon::fromTheme("kylin-scanner"));
|
||||
msgBox->setWindowTitle(tr("Scanner"));
|
||||
// msgBox->setStandardButtons(QMessageBox::Yes);
|
||||
msgBox->setContextMenuPolicy(Qt::NoContextMenu);
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
#include <QWidget>
|
||||
#include <QStyleOption>
|
||||
#include <QSize>
|
||||
// 主题sdk关于
|
||||
//#include "kaboutdialog.h"
|
||||
|
||||
//#include "../globalsignal.h"
|
||||
|
||||
|
@ -77,6 +79,9 @@ public slots:
|
|||
private:
|
||||
Ui::TitleBar *ui;
|
||||
QMenu *m_menu = nullptr;
|
||||
// kdk::KAboutDialog *m_aboutWindow = nullptr; // 关于界面
|
||||
// QString appShowingName = tr("kylin-camera");
|
||||
// QString appVersion = qApp->applicationVersion();
|
||||
};
|
||||
|
||||
#endif // TITLEBAR_H
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include "watermarkdialog.h"
|
||||
#include <kylin_system/window_management.hpp>
|
||||
#include "kabase/Qt/windowmanage.hpp"
|
||||
|
||||
WatermarkDialog::WatermarkDialog(QWidget *parent) : QDialog(parent)
|
||||
, m_titleLable (new QLabel())
|
||||
|
@ -22,7 +22,7 @@ WatermarkDialog::WatermarkDialog(QWidget *parent) : QDialog(parent)
|
|||
|
||||
void WatermarkDialog::initWindow()
|
||||
{
|
||||
kdk::kabase::WindowManagement::setWindowMotifHint(winId());
|
||||
::kabase::WindowManage::removeHeader(this);
|
||||
|
||||
setWindowTitle (tr("Scanner"));
|
||||
setFixedSize(QSize(380, 176));
|
||||
|
|
Binary file not shown.
|
@ -582,7 +582,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>ADF Duplex</source>
|
||||
<translation>ADF Duplex</translation>
|
||||
<translation>ADF གོ་ཉིས་ཆོད་</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>4800 dpi</source>
|
||||
|
@ -694,6 +694,10 @@
|
|||
<source>Multiple</source>
|
||||
<translation>སྣ་མང་།</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ADF Duplex</source>
|
||||
<translation type="unfinished">ADF གོ་ཉིས་ཆོད་</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ScanDialog</name>
|
||||
|
@ -1096,7 +1100,7 @@
|
|||
<name>main</name>
|
||||
<message>
|
||||
<source>Open file <filename></source>
|
||||
<translation>ཁ་ཕྱེ་བའི་ཡིག་ཆ།<filename></translation>
|
||||
<translation>ཁ་ཕྱེ་བའི་ཡིག་ཆ།<ཡིག་ཆའི་མིང་།></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Filename</source>
|
||||
|
|
Binary file not shown.
|
@ -332,6 +332,10 @@
|
|||
<source>Multiple</source>
|
||||
<translation type="unfinished">Бірнешеу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ADF Duplex</source>
|
||||
<translation type="unfinished">ADF Duplex</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ScanDialog</name>
|
||||
|
|
Binary file not shown.
|
@ -332,6 +332,10 @@
|
|||
<source>Multiple</source>
|
||||
<translation type="unfinished">Көп</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ADF Duplex</source>
|
||||
<translation type="unfinished">АДФ Дуплекс</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ScanDialog</name>
|
||||
|
|
Binary file not shown.
|
@ -332,6 +332,10 @@
|
|||
<source>Multiple</source>
|
||||
<translation type="unfinished">كۆپ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ADF Duplex</source>
|
||||
<translation type="unfinished">ADF Duplex</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ScanDialog</name>
|
||||
|
|
Binary file not shown.
|
@ -121,7 +121,7 @@
|
|||
<translation type="vanished">检测扫描设备中,请稍后 ……</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/detectpagewidget.cpp" line="43"/>
|
||||
<location filename="../src/detectpagewidget.cpp" line="44"/>
|
||||
<source>Detect scanners, please waiting</source>
|
||||
<translation>检测扫描设备中,请稍后</translation>
|
||||
</message>
|
||||
|
@ -129,12 +129,12 @@
|
|||
<context>
|
||||
<name>FailedPageWidget</name>
|
||||
<message>
|
||||
<location filename="../src/failedpagewidget.cpp" line="44"/>
|
||||
<location filename="../src/failedpagewidget.cpp" line="42"/>
|
||||
<source>Not detect scanners, please connect scanners firstly!</source>
|
||||
<translation>未检测到可用扫描设备,请先连接扫描设备</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/failedpagewidget.cpp" line="47"/>
|
||||
<location filename="../src/failedpagewidget.cpp" line="45"/>
|
||||
<source>Connect</source>
|
||||
<translation>连接扫描仪</translation>
|
||||
</message>
|
||||
|
@ -170,7 +170,7 @@
|
|||
<context>
|
||||
<name>LeftSuccessPageWidget</name>
|
||||
<message>
|
||||
<location filename="../src/leftsuccesspagewidget.cpp" line="36"/>
|
||||
<location filename="../src/leftsuccesspagewidget.cpp" line="58"/>
|
||||
<source>Connect scanners, please click scan button to start scanning.</source>
|
||||
<translation>已连接扫描设备,点击按钮开始扫描</translation>
|
||||
</message>
|
||||
|
@ -178,17 +178,17 @@
|
|||
<context>
|
||||
<name>MainWidget</name>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="75"/>
|
||||
<location filename="../src/mainwidget.cpp" line="76"/>
|
||||
<source>kylin-scanner</source>
|
||||
<translation>麒麟扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="228"/>
|
||||
<location filename="../src/mainwidget.cpp" line="229"/>
|
||||
<source>Scanner</source>
|
||||
<translation>扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="231"/>
|
||||
<location filename="../src/mainwidget.cpp" line="232"/>
|
||||
<source>Yes</source>
|
||||
<translation>是</translation>
|
||||
</message>
|
||||
|
@ -197,67 +197,67 @@
|
|||
<translation type="vanished">存在新设备连接,请手动重启应用使用该新设备。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="489"/>
|
||||
<location filename="../src/mainwidget.cpp" line="510"/>
|
||||
<location filename="../src/mainwidget.cpp" line="548"/>
|
||||
<location filename="../src/mainwidget.cpp" line="496"/>
|
||||
<location filename="../src/mainwidget.cpp" line="517"/>
|
||||
<location filename="../src/mainwidget.cpp" line="555"/>
|
||||
<source>There is a new scanner connect, redetect all scanners, please wait a moment. </source>
|
||||
<translation>存在新设备连接,正在重新检测所有扫描设备,请稍等。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="521"/>
|
||||
<location filename="../src/mainwidget.cpp" line="592"/>
|
||||
<location filename="../src/mainwidget.cpp" line="528"/>
|
||||
<location filename="../src/mainwidget.cpp" line="599"/>
|
||||
<source>No available device</source>
|
||||
<translation>无可用设备</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="605"/>
|
||||
<location filename="../src/mainwidget.cpp" line="623"/>
|
||||
<location filename="../src/mainwidget.cpp" line="612"/>
|
||||
<location filename="../src/mainwidget.cpp" line="630"/>
|
||||
<source>device </source>
|
||||
<translation>设备 </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="605"/>
|
||||
<location filename="../src/mainwidget.cpp" line="623"/>
|
||||
<location filename="../src/mainwidget.cpp" line="612"/>
|
||||
<location filename="../src/mainwidget.cpp" line="630"/>
|
||||
<source> has been disconnect.</source>
|
||||
<translation> 已经断开连接!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="700"/>
|
||||
<location filename="../src/mainwidget.cpp" line="707"/>
|
||||
<source>Single</source>
|
||||
<translation>单页扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="741"/>
|
||||
<location filename="../src/mainwidget.cpp" line="748"/>
|
||||
<source>Invalid argument, please change arguments or switch other scanners.</source>
|
||||
<translation>非法参数,请更改扫描参数或切换到其他扫描仪。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="757"/>
|
||||
<location filename="../src/mainwidget.cpp" line="764"/>
|
||||
<source>Device busy, please wait or switch other scanners.</source>
|
||||
<translation>设备正忙,请耐心等待或切换到其他扫描仪。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="759"/>
|
||||
<location filename="../src/mainwidget.cpp" line="766"/>
|
||||
<source>Document feeder out of documents, please place papers and scan again.</source>
|
||||
<translation>扫描件为空,请放置扫描件重新扫描。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="761"/>
|
||||
<location filename="../src/mainwidget.cpp" line="768"/>
|
||||
<source>Scan operation has been cancelled.</source>
|
||||
<translation>扫描操作已经被取消!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="763"/>
|
||||
<location filename="../src/mainwidget.cpp" line="770"/>
|
||||
<source>Scan failed, please check your scanner or switch other scanners.</source>
|
||||
<translation>扫描失败,请检查当前扫描仪连接或切换到其他扫描仪。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="807"/>
|
||||
<location filename="../src/mainwidget.cpp" line="814"/>
|
||||
<source>Running beauty ...</source>
|
||||
<translation>一键美化中 ...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="836"/>
|
||||
<location filename="../src/mainwidget.cpp" line="843"/>
|
||||
<source>Running rectify ...</source>
|
||||
<translation>智能纠偏中 ...</translation>
|
||||
</message>
|
||||
|
@ -308,8 +308,8 @@
|
|||
<context>
|
||||
<name>OcrThread</name>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="1088"/>
|
||||
<location filename="../src/mainwidget.cpp" line="1101"/>
|
||||
<location filename="../src/mainwidget.cpp" line="1095"/>
|
||||
<location filename="../src/mainwidget.cpp" line="1108"/>
|
||||
<source>Unable to read text</source>
|
||||
<translation>不能识别到文本。</translation>
|
||||
</message>
|
||||
|
@ -366,87 +366,87 @@
|
|||
<translation>默认类型</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="871"/>
|
||||
<location filename="../src/saneobject.cpp" line="874"/>
|
||||
<source>Flatbed</source>
|
||||
<translation>平板式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="881"/>
|
||||
<location filename="../src/saneobject.cpp" line="884"/>
|
||||
<source>ADF</source>
|
||||
<translation>馈纸式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="890"/>
|
||||
<location filename="../src/saneobject.cpp" line="893"/>
|
||||
<source>ADF Front</source>
|
||||
<translation>ADF 正面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="899"/>
|
||||
<location filename="../src/saneobject.cpp" line="902"/>
|
||||
<source>ADF Back</source>
|
||||
<translation>ADF背面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="908"/>
|
||||
<location filename="../src/saneobject.cpp" line="911"/>
|
||||
<source>ADF Duplex</source>
|
||||
<translation>ADF 双面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="959"/>
|
||||
<location filename="../src/saneobject.cpp" line="1023"/>
|
||||
<location filename="../src/saneobject.cpp" line="961"/>
|
||||
<location filename="../src/saneobject.cpp" line="1025"/>
|
||||
<source>4800 dpi</source>
|
||||
<translation>4800 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="962"/>
|
||||
<location filename="../src/saneobject.cpp" line="1027"/>
|
||||
<location filename="../src/saneobject.cpp" line="964"/>
|
||||
<location filename="../src/saneobject.cpp" line="1029"/>
|
||||
<source>2400 dpi</source>
|
||||
<translation>2400 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="965"/>
|
||||
<location filename="../src/saneobject.cpp" line="1031"/>
|
||||
<location filename="../src/saneobject.cpp" line="967"/>
|
||||
<location filename="../src/saneobject.cpp" line="1033"/>
|
||||
<source>1200 dpi</source>
|
||||
<translation>1200 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="968"/>
|
||||
<location filename="../src/saneobject.cpp" line="1035"/>
|
||||
<location filename="../src/saneobject.cpp" line="970"/>
|
||||
<location filename="../src/saneobject.cpp" line="1037"/>
|
||||
<source>600 dpi</source>
|
||||
<translation>600 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="971"/>
|
||||
<location filename="../src/saneobject.cpp" line="1039"/>
|
||||
<location filename="../src/saneobject.cpp" line="973"/>
|
||||
<location filename="../src/saneobject.cpp" line="1041"/>
|
||||
<source>300 dpi</source>
|
||||
<translation>300 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="974"/>
|
||||
<location filename="../src/saneobject.cpp" line="1043"/>
|
||||
<location filename="../src/saneobject.cpp" line="976"/>
|
||||
<location filename="../src/saneobject.cpp" line="1045"/>
|
||||
<source>200 dpi</source>
|
||||
<translation>200 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="977"/>
|
||||
<location filename="../src/saneobject.cpp" line="1047"/>
|
||||
<location filename="../src/saneobject.cpp" line="979"/>
|
||||
<location filename="../src/saneobject.cpp" line="1049"/>
|
||||
<source>150 dpi</source>
|
||||
<translation>150 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="980"/>
|
||||
<location filename="../src/saneobject.cpp" line="1051"/>
|
||||
<location filename="../src/saneobject.cpp" line="982"/>
|
||||
<location filename="../src/saneobject.cpp" line="1053"/>
|
||||
<source>100 dpi</source>
|
||||
<translation>100 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="983"/>
|
||||
<location filename="../src/saneobject.cpp" line="1055"/>
|
||||
<location filename="../src/saneobject.cpp" line="985"/>
|
||||
<location filename="../src/saneobject.cpp" line="1057"/>
|
||||
<source>75 dpi</source>
|
||||
<translation>75 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="1001"/>
|
||||
<location filename="../src/saneobject.cpp" line="1071"/>
|
||||
<location filename="../src/saneobject.cpp" line="1003"/>
|
||||
<location filename="../src/saneobject.cpp" line="1073"/>
|
||||
<source>Auto</source>
|
||||
<translation>自动</translation>
|
||||
</message>
|
||||
|
@ -469,27 +469,27 @@
|
|||
<context>
|
||||
<name>SaneObject</name>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="1987"/>
|
||||
<location filename="../src/saneobject.cpp" line="1989"/>
|
||||
<source>Default Type</source>
|
||||
<translation>默认类型</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="1979"/>
|
||||
<location filename="../src/saneobject.cpp" line="1981"/>
|
||||
<source>Flatbed</source>
|
||||
<translation>平板式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="1981"/>
|
||||
<location filename="../src/saneobject.cpp" line="1983"/>
|
||||
<source>ADF</source>
|
||||
<translation>馈纸式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="1983"/>
|
||||
<location filename="../src/saneobject.cpp" line="1985"/>
|
||||
<source>ADF Front</source>
|
||||
<translation>ADF 正面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="1985"/>
|
||||
<location filename="../src/saneobject.cpp" line="1987"/>
|
||||
<source>ADF Back</source>
|
||||
<translation>ADF 背面</translation>
|
||||
</message>
|
||||
|
@ -506,52 +506,57 @@
|
|||
<translation type="vanished">彩色</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2058"/>
|
||||
<location filename="../src/saneobject.cpp" line="1991"/>
|
||||
<source>ADF Duplex</source>
|
||||
<translation type="unfinished">ADF 双面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2062"/>
|
||||
<source>Auto</source>
|
||||
<translation>自动</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2062"/>
|
||||
<location filename="../src/saneobject.cpp" line="2066"/>
|
||||
<source>75 dpi</source>
|
||||
<translation>75 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2064"/>
|
||||
<location filename="../src/saneobject.cpp" line="2068"/>
|
||||
<source>150 dpi</source>
|
||||
<translation>150 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2066"/>
|
||||
<location filename="../src/saneobject.cpp" line="2070"/>
|
||||
<source>200 dpi</source>
|
||||
<translation>200 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2068"/>
|
||||
<location filename="../src/saneobject.cpp" line="2072"/>
|
||||
<source>300 dpi</source>
|
||||
<translation>300 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2070"/>
|
||||
<location filename="../src/saneobject.cpp" line="2074"/>
|
||||
<source>600 dpi</source>
|
||||
<translation>600 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2072"/>
|
||||
<location filename="../src/saneobject.cpp" line="2076"/>
|
||||
<source>1200 dpi</source>
|
||||
<translation>1200 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2074"/>
|
||||
<location filename="../src/saneobject.cpp" line="2078"/>
|
||||
<source>2400 dpi</source>
|
||||
<translation>2400 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2076"/>
|
||||
<location filename="../src/saneobject.cpp" line="2080"/>
|
||||
<source>4800 dpi</source>
|
||||
<translation>4800 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/saneobject.cpp" line="2260"/>
|
||||
<location filename="../src/saneobject.cpp" line="2264"/>
|
||||
<source>Multiple</source>
|
||||
<translation type="unfinished">多页扫描</translation>
|
||||
</message>
|
||||
|
@ -598,95 +603,95 @@
|
|||
<context>
|
||||
<name>ScanSettingsWidget</name>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="477"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="494"/>
|
||||
<source>Begin Scan</source>
|
||||
<translation>开始扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="496"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="513"/>
|
||||
<source>Scanner device</source>
|
||||
<translation>扫描仪设备</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="431"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="624"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="448"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="639"/>
|
||||
<source>Time</source>
|
||||
<translation>延时</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="511"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="528"/>
|
||||
<source>File settings</source>
|
||||
<translation>文件预设</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="429"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="446"/>
|
||||
<source>Device</source>
|
||||
<translation>设备</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="101"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="111"/>
|
||||
<source>Select a directory</source>
|
||||
<translation>选择目录</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="123"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="133"/>
|
||||
<source>Currently user has no permission to modify directory </source>
|
||||
<translation>目前用户没有权限更改目录</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="180"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="695"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="190"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="710"/>
|
||||
<source>Multiple</source>
|
||||
<translation>多页扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="430"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="447"/>
|
||||
<source>Pages</source>
|
||||
<translation>页数</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="432"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="449"/>
|
||||
<source>Type</source>
|
||||
<translation>类型</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="217"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="748"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="234"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="763"/>
|
||||
<source>Color</source>
|
||||
<translation>彩色</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="434"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="451"/>
|
||||
<source>Resolution</source>
|
||||
<translation>分辨率</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="435"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="452"/>
|
||||
<source>Size</source>
|
||||
<translation>尺寸</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="436"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="453"/>
|
||||
<source>Format</source>
|
||||
<translation>格式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="437"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="454"/>
|
||||
<source>Name</source>
|
||||
<translation>名称</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="518"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="535"/>
|
||||
<source>scanner01</source>
|
||||
<translation>scanner01</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="438"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="455"/>
|
||||
<source>Save</source>
|
||||
<translation>扫描至</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="443"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="460"/>
|
||||
<source>Mail to</source>
|
||||
<translation>发送邮件</translation>
|
||||
</message>
|
||||
|
@ -695,143 +700,143 @@
|
|||
<translation type="vanished">发送至邮箱</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="537"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="885"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="554"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="900"/>
|
||||
<source>Save as</source>
|
||||
<translation>另存为</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="667"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="682"/>
|
||||
<source>No available scanners</source>
|
||||
<translation>无可用设备</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="191"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="695"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="201"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="710"/>
|
||||
<source>Single</source>
|
||||
<translation>单页扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="230"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="247"/>
|
||||
<source>4800 dpi</source>
|
||||
<translation>4800 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="231"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="248"/>
|
||||
<source>2400 dpi</source>
|
||||
<translation>2400 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="232"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="249"/>
|
||||
<source>1200 dpi</source>
|
||||
<translation>1200 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="234"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="251"/>
|
||||
<source>This resolution will take a loog time to scan, please choose carelly.</source>
|
||||
<translation>该分辨率将会花费很长时间扫描,请谨慎选择!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="259"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="378"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="276"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="395"/>
|
||||
<source>cannot contain '/' character.</source>
|
||||
<translation>不能包含字符 / 。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="265"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="383"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="282"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="400"/>
|
||||
<source>cannot save as hidden file.</source>
|
||||
<translation>不能存为隐藏文件。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="332"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="877"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="349"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="892"/>
|
||||
<source>Store text</source>
|
||||
<translation>存储文本</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="342"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="359"/>
|
||||
<source>Save as dialog</source>
|
||||
<translation>另存为</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="433"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="450"/>
|
||||
<source>Colour</source>
|
||||
<translation>颜色</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="709"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="724"/>
|
||||
<source>3s</source>
|
||||
<translation>3 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="709"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="724"/>
|
||||
<source>5s</source>
|
||||
<translation>5 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="709"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="724"/>
|
||||
<source>7s</source>
|
||||
<translation>7 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="709"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="724"/>
|
||||
<source>10s</source>
|
||||
<translation>10 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="709"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="724"/>
|
||||
<source>15s</source>
|
||||
<translation>15 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="726"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="741"/>
|
||||
<source>Flatbed</source>
|
||||
<translation>平板式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="726"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="741"/>
|
||||
<source>ADF</source>
|
||||
<translation>馈纸式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="748"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="763"/>
|
||||
<source>Gray</source>
|
||||
<translation>灰度</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="219"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="748"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="236"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="763"/>
|
||||
<source>Lineart</source>
|
||||
<translation>黑白</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="770"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="785"/>
|
||||
<source>75 dpi</source>
|
||||
<translation>75 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="770"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="785"/>
|
||||
<source>100 dpi</source>
|
||||
<translation>100 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="770"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="785"/>
|
||||
<source>150 dpi</source>
|
||||
<translation>150 dpi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="787"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="802"/>
|
||||
<source>Resolution is empty!</source>
|
||||
<translation>当前扫描分辨率为空!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="802"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="817"/>
|
||||
<source>A4</source>
|
||||
<translation>A4</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="802"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="817"/>
|
||||
<source>A5</source>
|
||||
<translation>A5</translation>
|
||||
</message>
|
||||
|
@ -840,12 +845,12 @@
|
|||
<translation type="vanished">扫描文档名称的长度不能超过252。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="1115"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="1127"/>
|
||||
<source>Scanner</source>
|
||||
<translation>扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/scansettingswidget.cpp" line="1118"/>
|
||||
<location filename="../src/scansettingswidget.cpp" line="1130"/>
|
||||
<source>Yes</source>
|
||||
<translation>是</translation>
|
||||
</message>
|
||||
|
@ -853,32 +858,32 @@
|
|||
<context>
|
||||
<name>ScanThread</name>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="904"/>
|
||||
<location filename="../src/mainwidget.cpp" line="911"/>
|
||||
<source>Multiple</source>
|
||||
<translation>多页扫描</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="983"/>
|
||||
<location filename="../src/mainwidget.cpp" line="990"/>
|
||||
<source>3s</source>
|
||||
<translation>3 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="986"/>
|
||||
<location filename="../src/mainwidget.cpp" line="993"/>
|
||||
<source>5s</source>
|
||||
<translation>5 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="989"/>
|
||||
<location filename="../src/mainwidget.cpp" line="996"/>
|
||||
<source>7s</source>
|
||||
<translation>7 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="992"/>
|
||||
<location filename="../src/mainwidget.cpp" line="999"/>
|
||||
<source>10s</source>
|
||||
<translation>10 秒</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwidget.cpp" line="995"/>
|
||||
<location filename="../src/mainwidget.cpp" line="1002"/>
|
||||
<source>15s</source>
|
||||
<translation>15 秒</translation>
|
||||
</message>
|
||||
|
@ -926,7 +931,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<location filename="../src/titlebar/titlebar.ui" line="112"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="161"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="160"/>
|
||||
<source>Scanner</source>
|
||||
<translation>扫描</translation>
|
||||
</message>
|
||||
|
@ -947,7 +952,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<location filename="../src/titlebar/titlebar.ui" line="260"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="104"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="103"/>
|
||||
<source>Maximize</source>
|
||||
<translation>最大化</translation>
|
||||
</message>
|
||||
|
@ -976,22 +981,22 @@
|
|||
<translation>退出</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="101"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="100"/>
|
||||
<source>Restore</source>
|
||||
<translation>还原</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="158"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="157"/>
|
||||
<source>The current document is not saved. Do you want to save it?</source>
|
||||
<translation>当前文档未保存,是否保存?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="165"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="164"/>
|
||||
<source>Straight &Exit</source>
|
||||
<translation>直接退出</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="167"/>
|
||||
<location filename="../src/titlebar/titlebar.cpp" line="166"/>
|
||||
<source>&Save Exit</source>
|
||||
<translation>保存后退出</translation>
|
||||
</message>
|
||||
|
@ -1076,17 +1081,17 @@
|
|||
<context>
|
||||
<name>main</name>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="199"/>
|
||||
<location filename="../src/main.cpp" line="201"/>
|
||||
<source>Open file <filename></source>
|
||||
<translation>打开文件 <filename></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="200"/>
|
||||
<location filename="../src/main.cpp" line="202"/>
|
||||
<source>Filename</source>
|
||||
<translation>文件名</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="204"/>
|
||||
<location filename="../src/main.cpp" line="206"/>
|
||||
<source>Hide scan settings widget</source>
|
||||
<translation>隐藏扫描设置页面</translation>
|
||||
</message>
|
||||
|
|
Loading…
Reference in New Issue