New upstream version 4.0.0.0

This commit is contained in:
xibowen 2023-03-24 16:47:15 +08:00
parent ca8cd9f37f
commit f9bfc7b891
30 changed files with 970 additions and 328 deletions

View File

@ -0,0 +1,184 @@
/*
* Qt5-UKUI's Library
*
* Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this library. If not, see <https://www.gnu.org/licenses/>.
*
* Authors: Yue Lan <lanyue@kylinos.cn>
*
*/
#include "platform-theme-fontdata.h"
#include <QDebug>
#undef signals
#undef slots
#undef emit
#include <gio/gio.h>
PlatformThemeFontData::PlatformThemeFontData()
{
}
PlatformThemeFontData::~PlatformThemeFontData()
{
}
bool PlatformThemeFontData::chooseFontFile(QString path)
{
QStringList list = path.split(".");
QString fontTypeTTF = "ttf";
QString fontTypeOTF = "otf";
QString fontType = list.at(list.size()-1);
if (fontType.compare(fontTypeTTF, Qt::CaseInsensitive) == 0) {
return true;
} else if (fontType.compare(fontTypeOTF, Qt::CaseInsensitive) == 0) {
return true;
}
return false;
}
QMap<QString, QString> PlatformThemeFontData::getAllFontInformation()
{
QMap<QString, QString> fontMap;
QList<FontInformation> ret;
ret.clear();
FT_Library ft_library;
FT_Error err = FT_Init_FreeType(&ft_library);
if (err != FT_Err_Ok) {
qCritical() << "Error : LibFun , getAllFontInformation , init freetype fail";
return fontMap;
}
if (!FcInitReinitialize()) {
qCritical() << "Error : LibFun , getAllFontInformation , init font list fail";
return fontMap;
}
FcConfig *config = FcInitLoadConfigAndFonts();
FcPattern *pat = FcPatternCreate();
FcObjectSet *os = FcObjectSetBuild(FC_FILE , FC_FAMILY , FC_STYLE , FC_INDEX , NULL);
FcFontSet *fs = FcFontList(config , pat , os);
qInfo() << "Info : LibFun , getAllFontInformation , total matching fonts is " << fs->nfont;
for (int i = 0 ; i < fs->nfont && fs != NULL ; i++) {
FontInformation item;
FcChar8 *path = NULL;
FcChar8 *family = NULL;
// FcChar8 *style = NULL;
int index;
FcPattern *font = fs->fonts[i];
if (FcPatternGetString(font , FC_FILE , 0 , &path) == FcResultMatch &&
FcPatternGetString(font , FC_FAMILY , 0 , &family) == FcResultMatch &&
// FcPatternGetString(font , FC_STYLE , 0 , &style) == FcResultMatch &&
FcPatternGetInteger(font , FC_INDEX , 0 , &index) == FcResultMatch)
{
item.path = QString((char *)path);
item.family = QString((char *)family);
// item.style = QString((char *)style);
}
/* 对字体文件进行判断(判断后缀名是否为.ttf .otf*/
if (!chooseFontFile(item.path)) {
continue;
}
gchar *fontData = NULL;
gsize fontDataLenth;
g_autoptr(GError) error = NULL;
GFile *fd = g_file_new_for_path((const gchar *)path);
if (!g_file_load_contents(fd , NULL , &fontData , &fontDataLenth , NULL , &error)) {
qWarning() << "Waring : LibFun , getAllFontInformation , load font file fail , Path is [ " << path << " ]" << " error is [ " << error->message << " ]";
ret << item;
continue;
}
FT_Error ft_error;
FT_Face ft_retval;
ft_error = FT_New_Memory_Face(ft_library , (const FT_Byte *)fontData , (FT_Long)fontDataLenth , index , &ft_retval);
if (ft_error != FT_Err_Ok) {
qWarning() << "Waring : LibFun , getAllFontInformation , read font data fail , Path is [ " << path << " ]";
ret << item;
continue;
}
/*
///名字
if (ft_retval->family_name) {
item.name = QString((char *)ft_retval->family_name);
}
///样式
if (ft_retval->style_name) {
item.style = QString((char *)ft_retval->style_name);
}
///路径
g_autofree gchar *location = NULL;
location = g_file_get_path(fd);
item.path = QString((char *)location);
///种类
g_autoptr(GFileInfo) fileInfo;
fileInfo = g_file_query_info(fd , G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," G_FILE_ATTRIBUTE_STANDARD_SIZE , G_FILE_QUERY_INFO_NONE , NULL , NULL);
if (fileInfo != NULL) {
g_autofree gchar *fileType = g_content_type_get_description(g_file_info_get_content_type(fileInfo));
item.type = QString((char *)fileType);
}
qDebug() << "name:" << item.name << "style:" << item.style << "path:" << item.path << "family:" << item.family;
*/
ret << item;
fontMap.insert(item.family, item.path);
FT_Done_Face(ft_retval);
g_object_unref(fd);
g_free(fontData);
}
if (pat) {
FcPatternDestroy(pat);
}
if (os) {
FcObjectSetDestroy(os);
}
if (fs) {
FcFontSetDestroy(fs);
}
return fontMap;
}

View File

@ -0,0 +1,61 @@
/*
* Qt5-UKUI's Library
*
* Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this library. If not, see <https://www.gnu.org/licenses/>.
*
* Authors: Yue Lan <lanyue@kylinos.cn>
*
*/
#ifndef PLATFORMTHEMEFONTDATA_H
#define PLATFORMTHEMEFONTDATA_H
#include <QObject>
#include <QFont>
#include <fontconfig/fontconfig.h>
#include <freetype2/ft2build.h>
#include <freetype2/freetype/freetype.h>
typedef struct _FontInformation
{
QString path; /* 路径 */
QString family; /* 系列 */
QString style; /* 样式 */
// QString name; /* 名称 */
// QString type; /* 种类 */
// QString version; /* 版本 */
// QString copyright; /* 版权 */
// QString manufacturer; /* 商标 */
// QString description; /* 描述 */
// QString designer; /* 设计师 */
// QString license; /* 许可证 */
} FontInformation;
class PlatformThemeFontData : public QObject
{
Q_OBJECT
public:
PlatformThemeFontData();
~PlatformThemeFontData();
public:
QMap<QString, QString> getAllFontInformation();
bool chooseFontFile(QString path);
};
#endif // PLATFORMTHEMEFONTDATA_H

View File

@ -50,6 +50,7 @@
#include "widget/messagebox/message-box.h"
#include "widget/filedialog/kyfiledialog.h"
#include "widget/filedialog/debug.h"
#include "platform-theme-fontdata.h"
#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
static bool isDBusTrayAvailable() {
@ -65,6 +66,69 @@ static bool isDBusTrayAvailable() {
}
#endif
void Qt5UKUIPlatformTheme::slotChangeStyle(const QString& key)
{
auto settings = UKUIStyleSettings::globalInstance();
if (key == "iconThemeName" || key == "icon-theme-name") {
QString icontheme = settings->get("icon-theme-name").toString();
QIcon::setThemeName(icontheme);
QIcon icon = qApp->windowIcon();
qApp->setWindowIcon(QIcon::fromTheme(icon.name()));
// update all widgets for repaint new themed icons.
for (auto widget : QApplication::allWidgets()) {
widget->update();
}
}
if (key == "systemFont" || key == "system-font") {
//Skip QGuiApplication avoid it crash when we setfont
auto *app = qobject_cast<QApplication *>(qApp);
if(app == nullptr)
return;
QString font = settings->get("system-font").toString();
QFontDatabase db;
int id = 0;
if (!db.families().contains(font)) {
PlatformThemeFontData fontData;
QMap<QString, QString> fontMap = fontData.getAllFontInformation();
if(fontMap.contains(font)){
auto iter = fontMap.find(font);
id = QFontDatabase::addApplicationFont(iter.value());
}
}
QFontDatabase newDb;
if (newDb.families().contains(font)) {
QFont oldFont = QApplication::font();
m_system_font.setFamily(font);
m_fixed_font.setFamily(font);
oldFont.setFamily(font);
QApplication::setFont(oldFont);
}
}
if (key == "systemFontSize" || key == "system-font-size") {
//Skip QGuiApplication avoid it crash when we setfont
auto *app = qobject_cast<QApplication *>(qApp);
if(app == nullptr)
return;
if (qApp->property("noChangeSystemFontSize").isValid() && qApp->property("noChangeSystemFontSize").toBool())
return;
double fontSize = settings->get("system-font-size").toString().toDouble();
if (fontSize > 0) {
QFont oldFont = QApplication::font();
m_system_font.setPointSize(fontSize);
m_fixed_font.setPointSize(fontSize*1.2);
oldFont.setPointSizeF(fontSize);
QApplication::setFont(oldFont);
}
}
}
Qt5UKUIPlatformTheme::Qt5UKUIPlatformTheme(const QStringList &args)
{
//FIXME:
@ -95,55 +159,16 @@ Qt5UKUIPlatformTheme::Qt5UKUIPlatformTheme(const QStringList &args)
QApplication::setFont(m_system_font);
}
connect(settings, &QGSettings::changed, this, [=](const QString &key){
if (key == "iconThemeName") {
QString icontheme = settings->get("icon-theme-name").toString();
if (app->applicationName().toLower().contains(QLatin1String("kwin"))) {
QDBusConnection::sessionBus().connect(QString(),
QStringLiteral("/UKUIPlatformTheme"),
QStringLiteral("org.ukui.UKUIPlatformTheme"),
QStringLiteral("refreshFonts"),
this,
SLOT(slotChangeStyle(QString)));
}
QIcon::setThemeName(icontheme);
QIcon icon = qApp->windowIcon();
qApp->setWindowIcon(QIcon::fromTheme(icon.name()));
// update all widgets for repaint new themed icons.
for (auto widget : QApplication::allWidgets()) {
widget->update();
}
}
if (key == "systemFont") {
//Skip QGuiApplication avoid it crash when we setfont
auto *app = qobject_cast<QApplication *>(qApp);
if(app == nullptr)
return;
QString font = settings->get("system-font").toString();
QFontDatabase db;
if (db.families().contains(font)) {
QFont oldFont = QApplication::font();
m_system_font.setFamily(font);
m_fixed_font.setFamily(font);
oldFont.setFamily(font);
QApplication::setFont(oldFont);
}
}
if (key == "systemFontSize") {
//Skip QGuiApplication avoid it crash when we setfont
auto *app = qobject_cast<QApplication *>(qApp);
if(app == nullptr)
return;
if (qApp->property("noChangeSystemFontSize").isValid() && qApp->property("noChangeSystemFontSize").toBool())
return;
double fontSize = settings->get("system-font-size").toString().toDouble();
if (fontSize > 0) {
QFont oldFont = QApplication::font();
m_system_font.setPointSize(fontSize);
m_fixed_font.setPointSize(fontSize*1.2);
oldFont.setPointSizeF(fontSize);
QApplication::setFont(oldFont);
}
}
});
connect(settings, &QGSettings::changed, this, &Qt5UKUIPlatformTheme::slotChangeStyle);
}
// // add qqc2 style
@ -239,11 +264,7 @@ bool Qt5UKUIPlatformTheme::usePlatformNativeDialog(DialogType type) const
{
switch (type) {
case QPlatformTheme::FileDialog:
#ifdef UseNativeFileDialog
return true;
#else
return false;
#endif
case QPlatformTheme::FontDialog:
case QPlatformTheme::ColorDialog:
return false;
@ -262,11 +283,7 @@ QPlatformDialogHelper *Qt5UKUIPlatformTheme::createPlatformDialogHelper(DialogTy
{
switch (type) {
case QPlatformTheme::FileDialog:
#ifdef UseNativeFileDialog
return new KyFileDialogHelper;
#else
return QPlatformTheme::createPlatformDialogHelper(type);
#endif
case QPlatformTheme::FontDialog:
case QPlatformTheme::ColorDialog:
return QPlatformTheme::createPlatformDialogHelper(type);
@ -302,4 +319,5 @@ QPlatformSystemTrayIcon *Qt5UKUIPlatformTheme::createPlatformSystemTrayIcon() co
return new QDBusTrayIcon();
return nullptr;
}
#endif

View File

@ -86,6 +86,9 @@ public:
QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const override;
#endif
public Q_SLOTS:
void slotChangeStyle(const QString& key);
private:
QFont m_system_font;
QFont m_fixed_font;

View File

@ -15,8 +15,8 @@ TARGET = qt5-ukui-platformtheme
TEMPLATE = lib
CONFIG += plugin
CONFIG += c++11 link_pkgconfig lrelease
PKGCONFIG += gsettings-qt Qt5XdgIconLoader peony kysdk-waylandhelper
LIBS += -lX11
PKGCONFIG += gsettings-qt Qt5XdgIconLoader peony fontconfig freetype2
LIBS += -lX11 -lfontconfig -lfreetype
include(../libqt5-ukui-style/libqt5-ukui-style.pri)
@ -45,11 +45,13 @@ include(widget/widget.pri)
SOURCES += \
qt5-ukui-platform-theme.cpp \
platform-theme-fontdata.cpp \
main.cpp
HEADERS += \
qt5-ukui-platform-theme.h \
qt5-ukui-platformtheme_global.h
qt5-ukui-platformtheme_global.h \
platform-theme-fontdata.h
TRANSLATIONS += \
$$PWD/translations/qt5-ukui-platformtheme_zh_CN.ts \

View File

@ -2,10 +2,6 @@
#define PDEBUG_H
#include <QDebug>
//#ifndef UseNativeFileDialog
//#define UseNativeFileDialog
//#endif
#define SERVICE "com.kylin.statusmanager.interface"
#define PATH "/"
#define INTERFACE "com.kylin.statusmanager.interface"

View File

@ -1,6 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#include "kyfiledialog.h"
#include <QDebug>
#include "ui_kyfiledialog.h"
@ -31,6 +29,9 @@
#include <qwindow.h>
#include <QScreen>
#include <QDesktopWidget>
#include <QPainterPath>
#include <QDBusInterface>
#include <QDBusMessage>
#include <qpa/qplatformdialoghelper.h>
#include "xatom-helper.h"
#include <peony-qt/file-utils.h>
@ -68,11 +69,18 @@ KyNativeFileDialog::KyNativeFileDialog(QWidget *parent)
mKyFileDialogUi = new Ui_KyFileDialog;
setStyle(nullptr);
// setStyle(nullptr);
// m_fileSystemModel = new QFileSystemModel();
connect(d_ptr.get()->m_timer, &QTimer::timeout, this, &KyNativeFileDialog::show);
connect(d_ptr.get()->m_timer, &QTimer::timeout, this, [&](){
// pDebug << "timeout isActive:..........." << d_ptr.get()->m_timer->isActive();
this->show();
if(d_ptr.get()->m_timer->isActive()){
pDebug << "timer stop....";
d_ptr.get()->m_timer->stop();
}
});
mKyFileDialogUi->setupUi(this);
d_ptr.get()->m_container = mKyFileDialogUi->m_container;
@ -125,6 +133,8 @@ KyNativeFileDialog::KyNativeFileDialog(QWidget *parent)
connect(getCurrentPage(), &Peony::DirectoryViewContainer::updateWindowLocationRequest, this, [=](const QString &uri, bool addToHistory, bool forceUpdate){
pDebug << "page updateWindowLocationRequest.....uri:" << uri << getCurrentUri() << forceUpdate;
if(uri == "")
return;
QString s = uri;
QString s1 = s.endsWith("/") ? s.remove(s.length() - 1, 1) : s;
QString s2 = getCurrentUri();
@ -283,6 +293,7 @@ KyNativeFileDialog::KyNativeFileDialog(QWidget *parent)
refreshContainerSort();
updateMaximizeState();
onSwitchView();
isTableModel();
m_model = new QStringListModel();
m_completer = new QCompleter(mKyFileDialogUi->m_fileNameEdit);
@ -303,6 +314,7 @@ KyNativeFileDialog::KyNativeFileDialog(QWidget *parent)
KyNativeFileDialog::~KyNativeFileDialog()
{
pDebug << "~~~~~~~~KyNativeFileDialog";
}
@ -332,7 +344,10 @@ Peony::FMWindowIface *KyNativeFileDialog::create(const QStringList &uris)
const QStringList KyNativeFileDialog::getCurrentSelections()
{
return containerView()->getSelections();
if(containerView())
return containerView()->getSelections();
else
return QStringList();
}
const QStringList KyNativeFileDialog::getCurrentSelectionsList()
@ -346,7 +361,9 @@ const QStringList KyNativeFileDialog::getCurrentSelectionsList()
const QStringList KyNativeFileDialog::getCurrentAllFileUris()
{
return containerView()->getAllFileUris();
if(containerView())
return containerView()->getAllFileUris();
return QStringList();
}
const QList<std::shared_ptr<Peony::FileInfo>> KyNativeFileDialog::getCurrentSelectionFileInfos()
{
@ -365,8 +382,10 @@ void KyNativeFileDialog::setCurrentSelections(QStringList selections)
foreach (QString str, selections) {
list.append(Peony::FileUtils::urlEncode(str));
}
containerView()->setSelections(list);
pDebug << "get setCurrentSelections....:" << containerView()->getSelections();
if(containerView()){
containerView()->setSelections(list);
pDebug << "get setCurrentSelections....:" << containerView()->getSelections();
}
}
Qt::SortOrder KyNativeFileDialog::getCurrentSortOrder()
@ -441,7 +460,8 @@ void KyNativeFileDialog::forceStopLoading()
if (Peony::ClipboardUtils::isClipboardHasFiles())
{
Peony::ClipboardUtils::clearClipboard();
containerView()->repaintView();
if(containerView())
containerView()->repaintView();
}
}
@ -474,7 +494,8 @@ void KyNativeFileDialog::setCurrentSelectionUris(const QStringList &uris)
if (Peony::ClipboardUtils::isClipboardHasFiles())
{
Peony::ClipboardUtils::clearClipboard();
containerView()->repaintView();
if(containerView())
containerView()->repaintView();
}
}
@ -490,12 +511,14 @@ void KyNativeFileDialog::setCurrentSortColumn (int sortColumn)
void KyNativeFileDialog::editUri(const QString &uri)
{
containerView()->editUri(uri);
if(containerView())
containerView()->editUri(uri);
}
void KyNativeFileDialog::editUris(const QStringList &uris)
{
containerView()->editUris(uris);
if(containerView())
containerView()->editUris(uris);
}
bool KyNativeFileDialog::getFilterWorking()
@ -578,10 +601,15 @@ QUrl KyNativeFileDialog::directoryUrl() const
void KyNativeFileDialog::goToUri(const QString &uri, bool addToHistory, bool forceUpdate)
{
pDebug << "goToUri....,,,,:" << uri << getCurrentUri();
pDebug << "isShow......:" << (m_fileDialogHelper == nullptr);
if(uri.isEmpty() || uri == getCurrentUri())
return;
pDebug << "getCurrentUri....,,,,:" << getCurrentUri();
pDebug << "isShow......:" << (m_fileDialogHelper == nullptr) << m_fileDialogHelper->isShow();
if(isInitialGoToUriNum || (m_fileDialogHelper != nullptr && m_fileDialogHelper->isShow()))
{
isInitialGoToUriNum = false;
getCurrentPage()->stopLoading();
if(uri.startsWith("search:///search_uris="))
getCurrentPage()->goToUri(uri, addToHistory, forceUpdate);
else
@ -778,7 +806,7 @@ void KyNativeFileDialog::selectNameFilterByIndex(int index)
pDebug << "selectNameFilterByIndex00000000000";
if (/*d->acceptMode == QFileDialog::AcceptSave &&*/ !newNameFilters.isEmpty() && (d->fileMode != QFileDialog::DirectoryOnly && d->fileMode != QFileDialog::Directory)) {
QMimeDatabase db;
QString text = mKyFileDialogUi->m_fileNameEdit->text();
QString text = copyEditText();//mKyFileDialogUi->m_fileNameEdit->text();
pDebug << "selectNameFilterByIndex text...." << text;
pDebug << "selectNameFilterByIndex newNameFilters...." << newNameFilters;
QStringList list = text.split(".");
@ -868,6 +896,7 @@ void KyNativeFileDialog::setAcceptMode(QFileDialog::AcceptMode mode)
mKyFileDialogUi->m_newFolderButton->show();
mKyFileDialogUi->m_acceptButton->setText(tr("Save"));
mKyFileDialogUi->m_rejectButton->setText(tr("Cancel"));
mKyFileDialogUi->m_acceptButton->setDefault(true);
connect(mKyFileDialogUi->m_fileNameEdit, &QLineEdit::textChanged, this, &KyNativeFileDialog::onCurrentInputNameChanged);
connect(mKyFileDialogUi->m_newFolderButton, &QPushButton::clicked, this, &KyNativeFileDialog::onNewFolder);
}
@ -918,21 +947,23 @@ QFileDialog::FileMode KyNativeFileDialog::fileMode()
void KyNativeFileDialog::setViewMode(ViewMode mode)
{
pDebug << "setViewMode...." << mode << containerView()->viewId();
if(mode == ViewMode::List && containerView()->viewId() != "List View")
{
this->getCurrentPage()->switchViewType("List View");
if(containerView()){
pDebug << "setViewMode...." << mode << containerView()->viewId();
if(mode == ViewMode::List && containerView()->viewId() != "List View")
{
this->getCurrentPage()->switchViewType("List View");
}
else if(mode == ViewMode::Icon && containerView()->viewId() != "Icon View")
this->getCurrentPage()->switchViewType("Icon View");
onSwitchView();
}
else if(mode == ViewMode::Icon && containerView()->viewId() != "Icon View")
this->getCurrentPage()->switchViewType("Icon View");
onSwitchView();
}
KyNativeFileDialog::ViewMode KyNativeFileDialog::viewMode() const
{
// this->getCurrentPage()->switchViewType("List View");
if(containerView()->viewId() == "List View")
if(containerView() && containerView()->viewId() == "List View")
return ViewMode::List;
return ViewMode::Icon;
}
@ -1000,7 +1031,8 @@ QFileDialog::Options KyNativeFileDialog::options() const
void KyNativeFileDialog::setCurrentInputName(const QString &name)
{
pDebug << "setCurrentInputName.........:" << name;
mKyFileDialogUi->m_fileNameEdit->setText(name);
m_copyEditText = name;
// mKyFileDialogUi->m_fileNameEdit->setText(name);
QMimeDatabase db;
const QString &suffix = db.suffixForFileName(name);
if (suffix.isEmpty()) {
@ -1017,13 +1049,29 @@ void KyNativeFileDialog::onAcceptButtonClicked()
return;
}
pDebug << "onAcceptButtonClicked:" << d->acceptMode << d->fileMode;
if(mKyFileDialogUi->m_fileNameEdit->text() != "")
pDebug << "onAcceptButtonClicked000 sfiles..........:" << getCurrentSelectionsList();
pDebug << "onAcceptButtonClicked111 sfiles..........:" << selectedFiles();
if(d->fileMode == QFileDialog::ExistingFile || d->fileMode == QFileDialog::ExistingFiles || d->fileMode == QFileDialog::AnyFile)
{
lineEditTextChange(mKyFileDialogUi->m_fileNameEdit->text());
QList<QString> sFiles = selectedFiles();
for (int i = 0; i < sFiles.length(); ++i) {
if(isDir(sFiles[i]))
{
pDebug << "gotouri666666" << "file://" + sFiles[i];
goToUri(sFiles[i], true);
return;
}
}
}
pDebug << "directoryUrl:" << directoryUrl() << directory();
if(copyEditText() != "")
{
lineEditTextChange(copyEditText());
}
pDebug << "onAcceptButtonClicked directoryUrl:" << directoryUrl() << directory();
QList<QString> sFiles = selectedFiles();
pDebug << "sfiles..........:" << sFiles;
pDebug << "onAcceptButtonClicked sfiles..........:" << sFiles;
// pDebug << "getSelections........:" << containerView()->getSelections();
// pDebug << "uri:" << Peony::FileUtils::getTargetUri(getCurrentUri());
// pDebug << "uri1111111111:" << Peony::FileUtils::getParentUri(getCurrentUri());
@ -1046,18 +1094,6 @@ void KyNativeFileDialog::onAcceptButtonClicked()
}
}
if(d->fileMode == QFileDialog::ExistingFile || d->fileMode == QFileDialog::ExistingFiles || (d->acceptMode == QFileDialog::AcceptOpen && d->fileMode == QFileDialog::AnyFile))
{
for (int i = 0; i < sFiles.length(); ++i) {
if(isDir(sFiles[i]))
{
pDebug << "gotouri666666" << "file://" + sFiles[i];
goToUri(sFiles[i], true);
return;
}
}
}
if (d->acceptMode == QFileDialog::AcceptSave)
{
if(!doSave(sFiles))
@ -1084,35 +1120,34 @@ void KyNativeFileDialog::onAcceptButtonClicked()
bool KyNativeFileDialog::saveMessageBox(QString name)
{
QMessageBox *msg = new QMessageBox(QMessageBox::Warning, tr("Warning"), name + tr("exist, are you sure replace?"), QMessageBox::Ok | QMessageBox::No);
foreach (QAbstractButton* item, msg->buttons()) {
if(msg->standardButton(item) == QMessageBox::Ok){
item->setText(tr("ok"));
msg->addButton(item, QMessageBox::YesRole);
connect(item, &QAbstractButton::clicked, [](bool b)
{
pDebug << "YesRole clicked......";
return true;
});
}
if(msg->standardButton(item) == QMessageBox::No){
item->setText(tr("no"));
msg->addButton(item, QMessageBox::NoRole);
connect(item, &QAbstractButton::clicked, [](bool b)
{
pDebug << "NoRole clicked......";
return false;
});
}
if(QMessageBox::warning(this, tr("Warning"), name + " " + tr("exist, are you sure replace?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
{
return true;
}
msg->exec();
return false;
}
bool KyNativeFileDialog::checkSaveFileExsits(QString path)
{
bool exists = false;
if(fileMode() == QFileDialog::Directory || fileMode() == QFileDialog::DirectoryOnly)
{
QDir dir(path);
exists = dir.exists();
}
else{
QFile file(path);
exists = file.exists();
}
pDebug << "checkSaveFileExsits path...." << path << exists;
return exists;
}
bool KyNativeFileDialog::doSave(QStringList sFiles)
{
Q_D(KyNativeFileDialog);
QString file_name = mKyFileDialogUi->m_fileNameEdit->text();
QString file_name = copyEditText();
bool suffixCheck = false;
QStringList nameFilters = d->nameFilters;
for (QString nameFilterList : nameFilters) {
@ -1164,13 +1199,20 @@ bool KyNativeFileDialog::doSave(QStringList sFiles)
oldName.append('.' + suffix);
setCurrentInputName(oldName);
pDebug << "path///:" << directory().path() + "/" + oldName;
QFile file(directory().path() + "/" + oldName);
if(file.exists())
if(checkSaveFileExsits(directory().path() + "/" + oldName)){
if(!saveMessageBox(oldName))
return false;
break;
}
if(filter == newNameFilters[newNameFilters.length() - 1])
{
QString oldName = file_name;
oldName.append('.' + mdb.suffixForFileName(newNameFilters[0]));
if(checkSaveFileExsits(directory().path() + "/" + oldName)){
if(!saveMessageBox(oldName))
return false;
break;
}
setCurrentInputName(oldName);
return true;
}
@ -1179,11 +1221,23 @@ bool KyNativeFileDialog::doSave(QStringList sFiles)
}
else{
file_name.append('.' + m_fileDialogHelper->options()->defaultSuffix());
if(checkSaveFileExsits(directory().path() + "/" + file_name)){
if(!saveMessageBox(file_name))
return false;
}
setCurrentInputName(file_name);
pDebug << "path///:" << directory().path() + "/" + file_name;
}
}
}
else if(suffixCheck)
{
pDebug << "suffixCheck.....:" << suffixCheck << "path///:" << directory().path() + "/" + file_name;
if(checkSaveFileExsits(directory().path() + "/" + file_name)){
if(!saveMessageBox(file_name))
return false;
}
}
return true;
}
@ -1223,11 +1277,11 @@ bool KyNativeFileDialog::doOpen(QStringList sFiles)
{
Q_EMIT filesSelected(selectedUrls());
}
else if(mKyFileDialogUi->m_fileNameEdit->text() != "")
else if(copyEditText() != "")
{
QList<QUrl> urlList;
pDebug << "directory path:" << directory().path() << directoryUrl().path();
urlList.append(QUrl(directory().path() + "/" + mKyFileDialogUi->m_fileNameEdit->text()));
urlList.append(QUrl(directory().path() + "/" + copyEditText()));
Q_EMIT filesSelected(urlList);
}
else
@ -1235,7 +1289,7 @@ bool KyNativeFileDialog::doOpen(QStringList sFiles)
}
else if(d->fileMode == QFileDialog::DirectoryOnly || d->fileMode == QFileDialog::Directory)
{
if(mKyFileDialogUi->m_fileNameEdit->text() != "")
if(copyEditText() != "")
{
if(sFiles.isEmpty() || (!sFiles.isEmpty() && !isDir(sFiles[0])))
{
@ -1263,7 +1317,8 @@ bool KyNativeFileDialog::doOpen(QStringList sFiles)
{
urls << QUrl::fromLocalFile(Peony::FileUtils::urlDecode(uri));
}
pDebug << "select uri....:" << containerView()->getSelections();
if(containerView())
pDebug << "select uri....:" << containerView()->getSelections();
Q_EMIT filesSelected(urls);
}
@ -1280,8 +1335,14 @@ void KyNativeFileDialog::onRejectButtonClicked()
}
bool KyNativeFileDialog::isDir(QString path)
{
path = Peony::FileUtils::urlEncode(path);
{
auto fileSymLinkInfo = Peony::FileInfo::fromUri(path);
if(fileSymLinkInfo->isSymbolLink()) {
path = fileSymLinkInfo->symlinkTarget();
}
else
path = Peony::FileUtils::urlEncode(path);
QFile file(path);
QFileInfo fileInfo(file);
pDebug << "isDir path1111:" << path << fileInfo.isDir() << Peony::FileUtils::isFileDirectory(path) << Peony::FileUtils::getFileIsFolder(path);;
@ -1339,7 +1400,7 @@ void KyNativeFileDialog::onSwitchView()
void KyNativeFileDialog::updateWindowState()
{
Q_D(KyNativeFileDialog);
pDebug << "updateWindowState.............." << getCurrentUri() << directory() << directoryUrl() << mKyFileDialogUi->m_fileNameEdit->text();
pDebug << "updateWindowState.............." << getCurrentUri() << directory() << directoryUrl() << mKyFileDialogUi->m_fileNameEdit->text() << copyEditText();
//mKyFileDialogUi->m_fileNameEdit->setText("");
pDebug << "updateWindowState m_searchMode.............." <<m_searchMode << getCurrentUri() << m_isClearSearchKey;
@ -1374,7 +1435,7 @@ void KyNativeFileDialog::updateWindowState()
mKyFileDialogUi->m_toParentButton->setEnabled(getCurrentPage()->canCdUp());
updateStatusBar();
pDebug << "updateWindowState 44444";
lineEditTextChange(mKyFileDialogUi->m_fileNameEdit->text());
lineEditTextChange(copyEditText());
pDebug << "updateWindowState 55555555555555555555" << uri;
}
@ -1385,7 +1446,14 @@ QString KyNativeFileDialog::selectName()
QString nameStr = "";
for(int i = 0; i < selectList.length(); i++)
{
pDebug << "selectName ....i:" << i << Peony::FileUtils::getFileDisplayName(selectList[i]);
pDebug << "selectName ....i:" << i << Peony::FileUtils::getFileDisplayName(selectList[i]) << isDir(selectList[i]);
if(acceptMode() == QFileDialog::AcceptSave && isDir(selectList[i])){
continue;
}
if(acceptMode() == QFileDialog::AcceptOpen && (fileMode() == QFileDialog::ExistingFile ||
fileMode() == QFileDialog::ExistingFiles || fileMode() == QFileDialog::AnyFile) && isDir(selectList[i])){
continue;
}
QString str = Peony::FileUtils::getFileDisplayName(selectList[i]);//Peony::FileUtils::urlDecode(selectList[i]);
QString name = "";
if(selectList.length() == 1)
@ -1396,6 +1464,16 @@ QString KyNativeFileDialog::selectName()
name += "\"" + str.split("/").last() + "\"";
nameStr += name;
}
if(acceptMode() == QFileDialog::AcceptSave){
for(int i = 0; i < selectList.length(); i++) {
if(isDir(selectList[i])) {
mKyFileDialogUi->m_acceptButton->setText(tr("Open"));
return nameStr;
}
}
mKyFileDialogUi->m_acceptButton->setText(tr("Save"));
}
return nameStr;
}
@ -1433,12 +1511,15 @@ void KyNativeFileDialog::containerMenuRequest(const QPoint &pos)
void KyNativeFileDialog::delayShow()
{
Q_D(const KyNativeFileDialog);
//QTBUG48248 借鉴kde plasma-integration里用的QTimer
pDebug << "delayShow start...........";
d->m_timer->start();
}
void KyNativeFileDialog::discardDelayedShow()
{
Q_D(const KyNativeFileDialog);
pDebug << "discardDelayedShow stop...........";
d->m_timer->stop();
}
@ -1576,13 +1657,15 @@ void KyNativeFileDialog::updateAcceptButtonState()
{
if(d->fileMode != QFileDialog::Directory && d->fileMode != QFileDialog::DirectoryOnly)
{
mKyFileDialogUi->m_acceptButton->setEnabled(!(getCurrentSelectionsList().length() == 0));
return;
bool isSelectFile = false;
if(mKyFileDialogUi->m_fileNameEdit->text() == "")
mKyFileDialogUi->m_acceptButton->setEnabled(false);
if(copyEditText() == "")
mKyFileDialogUi->m_acceptButton->setEnabled(!(getCurrentSelectionsList().length() == 0));
if(mKyFileDialogUi->m_fileNameEdit->text() != "")
if(copyEditText() != "")
{
QString text = mKyFileDialogUi->m_fileNameEdit->text();
QString text = copyEditText();
QStringList list = text.split("\"");
pDebug << "list234565432............" << list;
for (int i = list.length() - 1; i >= 0; i--) {
@ -1638,9 +1721,9 @@ void KyNativeFileDialog::updateAcceptButtonState()
else
{
bool isSelectFile = true;
if(mKyFileDialogUi->m_fileNameEdit->text() != "")
if(copyEditText() != "")
{
QString text = mKyFileDialogUi->m_fileNameEdit->text();
QString text = copyEditText();
QStringList list = text.split("\"");
pDebug << "list0000............" << list;
for (int i = list.length() - 1; i >= 0; i--) {
@ -1680,7 +1763,11 @@ void KyNativeFileDialog::updateAcceptButtonState()
}
else
{
if(mKyFileDialogUi->m_fileNameEdit->text() == "")
if(getCurrentSelectionsList().length() != 0){
mKyFileDialogUi->m_acceptButton->setEnabled(true);
return;
}
if(copyEditText() == "")
mKyFileDialogUi->m_acceptButton->setEnabled(false);
else
mKyFileDialogUi->m_acceptButton->setEnabled(true);
@ -1692,7 +1779,7 @@ void KyNativeFileDialog::updateAcceptButtonState()
void KyNativeFileDialog::onCurrentInputNameChanged()
{
Q_D(KyNativeFileDialog);
d->currentInputName = mKyFileDialogUi->m_fileNameEdit->text();
d->currentInputName = copyEditText();
updateAcceptButtonState();
}
@ -1798,6 +1885,7 @@ void KyNativeFileDialog::setSearchMode(bool mode)
void KyNativeFileDialog::lineEditTextChange(QString text)
{
m_copyEditText = text;
if(m_searchMode)
return;
QString url;
@ -1813,13 +1901,24 @@ void KyNativeFileDialog::lineEditTextChange(QString text)
url.remove(url.length() - 1, 1);
pDebug << "parentPath:" << parentPath;
pDebug << "getCurrentSelections......:" << getCurrentSelectionsList() << text;
if(!text.contains("\""))
{
if(!text.contains("\""))//输入框中只有1个文件
{
if ((parentPath.startsWith("trash://") || parentPath.startsWith("recent://")
|| parentPath.startsWith("computer://") || parentPath.startsWith("favorite://")
|| parentPath.startsWith("filesafe://")) && getCurrentSelections().length() > 0)
{
for(int i = 0; i < getCurrentSelections().length(); i++)
{
QString targetUri = Peony::FileUtils::getTargetUri(getCurrentSelections()[i]);
Peony::FileInfo fileInfo(targetUri);
pDebug << "text:" << text << "displayName:" << fileInfo.displayName();
if(fileInfo.displayName() == text){
updateAcceptButtonState();
return;
}
}
QString targetUri = Peony::FileUtils::getTargetUri(getCurrentSelections()[0]);
QString targetPath = Peony::FileUtils::urlDecode(targetUri);
pDebug << "getTargetUri uri....." << targetUri;
@ -1836,8 +1935,16 @@ void KyNativeFileDialog::lineEditTextChange(QString text)
}
else
{
pDebug << "Peony::FileUtils::isFileExsit:" << (parentPath + "/" + text) << Peony::FileUtils::isFileExsit(parentPath + "/" + text);
pDebug << "Peony::FileUtils::isFileExsit123:" << (parentPath + "/" + text) << Peony::FileUtils::isFileExsit(parentPath + "/" + text);
// pDebug << "Peony::FileUtils::isFileExsit:" << (parentPath + "/" + text) << Peony::FileUtils::isFileExsit(parentPath + "/" + text);
for(int i = 0; i < getCurrentSelections().length(); i++)
{
if(Peony::FileUtils::getFileDisplayName(getCurrentSelections()[i]) == text){
updateAcceptButtonState();
return;
}
}
if(Peony::FileUtils::isFileExsit(parentPath + "/" + text)){
pDebug << "file exists....";
//m_container选择指定文件
@ -1845,7 +1952,8 @@ void KyNativeFileDialog::lineEditTextChange(QString text)
selectList.append(parentPath + "/" + text);
pDebug << "selectList...1111111" << selectList;
setCurrentSelections(selectList);
pDebug << "selectList...22222222222" << containerView()->getSelections();
if(containerView())
pDebug << "selectList...22222222222" << containerView()->getSelections();
updateAcceptButtonState();
return;
}
@ -1865,6 +1973,31 @@ void KyNativeFileDialog::lineEditTextChange(QString text)
|| parentPath.startsWith("computer://") || parentPath.startsWith("favorite://")
|| parentPath.startsWith("filesafe://")))
{
QStringList list = text.split("\"");
pDebug << "listttt1111............" << list;
for (int i = list.length() - 1; i >= 0; i--) {
if(list[i] == "" || list[i] == " ")
list.removeAt(i);
}
QStringList displayNameList;
for(int i = 0; i < getCurrentSelections().length(); i++)
{
QString targetUri = Peony::FileUtils::getTargetUri(getCurrentSelections()[i]);
Peony::FileInfo fileInfo(targetUri);
pDebug << "text:" << text << "displayName:" << fileInfo.displayName();
displayNameList.append(fileInfo.displayName());
}
pDebug << "list:" << list;
pDebug << "displayNameList:" << displayNameList;
for(int i = 0; i < list.length(); i++){
if(!displayNameList.contains(list[i]))
break;
else if(i == list.length() - 1){
updateAcceptButtonState();
return;
}
}
QStringList selectList;
foreach (QString str, getCurrentSelections())
{
@ -1892,6 +2025,24 @@ void KyNativeFileDialog::lineEditTextChange(QString text)
}
pDebug << "listtttt22222222..............:" << list;
QStringList displayNameList;
for(int i = 0; i < getCurrentSelections().length(); i++)
{
QString displayName = Peony::FileUtils::getFileDisplayName(getCurrentSelections()[i]);
displayNameList.append(displayName);
}
pDebug << "list:" << list;
pDebug << "displayNameList:" << displayNameList;
for(int i = 0; i < list.length(); i++){
if(!displayNameList.contains(list[i]))
break;
else if(i == list.length() - 1){
updateAcceptButtonState();
return;
}
}
pDebug << "listtttttt3333333.........................";
foreach (QString str, list) {
if(str.length() > 0 && str[0] == "\"")
str = str.remove(0, 1);
@ -2026,14 +2177,16 @@ void KyNativeFileDialog::setShortCuts()
auto maxAction = new QAction(this);
maxAction->setShortcut(QKeySequence(Qt::Key_F11));
connect(maxAction, &QAction::triggered, this, [=]() {
//showFullScreen has some issue, change to showMaximized, fix #20043
mKyFileDialogUi->m_pathbar->cancelEdit();
if (!this->isMaximized()) {
this->showMaximized();
} else {
this->showNormal();
if(!m_istableModel){
//showFullScreen has some issue, change to showMaximized, fix #20043
mKyFileDialogUi->m_pathbar->cancelEdit();
if (!this->isMaximized()) {
this->showMaximized();
} else {
this->showNormal();
}
updateMaximizeState();
}
updateMaximizeState();
});
addAction(maxAction);
@ -2192,6 +2345,8 @@ void KyNativeFileDialog::setShortCuts()
void KyNativeFileDialog::initialViewId()
{
if(!containerView())
return;
int zoomLevel = containerView()->currentZoomLevel();
auto viewId = Peony::DirectoryViewFactoryManager2::getInstance()->getDefaultViewId(zoomLevel, getCurrentUri());
@ -2199,6 +2354,37 @@ void KyNativeFileDialog::initialViewId()
beginSwitchView(viewId);
}
QString KyNativeFileDialog::copyEditText()
{
return m_copyEditText;
}
void KyNativeFileDialog::isTableModel()
{
QDBusInterface *interFace = new QDBusInterface(SERVICE, PATH, INTERFACE, QDBusConnection::sessionBus());
if(interFace->isValid()){
connect(interFace, SIGNAL(mode_change_signal(bool)), this, SLOT(updateTableModel(bool)));
}
QDBusMessage message = QDBusMessage::createMethodCall(SERVICE, PATH, INTERFACE, "get_current_tabletmode");
QDBusMessage ret = QDBusConnection::sessionBus().call(message);
if (ret.type() != QDBusMessage::ReplyMessage)
{
//从返回参数获取返回值
pDebug << "complex type failed!";
updateTableModel(false);
}
else
{
updateTableModel(ret.arguments()[0].value<bool>());
}
}
void KyNativeFileDialog::updateTableModel(bool tableModel)
{
m_istableModel = tableModel;
mKyFileDialogUi->m_maximizeAndRestore->setVisible(!tableModel);
}
KyFileDialogHelper::KyFileDialogHelper() : QPlatformFileDialogHelper(), mKyFileDialog(new KyNativeFileDialog)
{
mKyFileDialog->setHelper(this);
@ -2206,8 +2392,10 @@ KyFileDialogHelper::KyFileDialogHelper() : QPlatformFileDialogHelper(), mKyFileD
pDebug << "KyFileDialogHelper........." << (options() == nullptr);
connect(mKyFileDialog, &KyNativeFileDialog::currentChanged, this, &KyFileDialogHelper::currentChanged);
connect(mKyFileDialog, &KyNativeFileDialog::directoryEntered, this, &KyFileDialogHelper::directoryEntered);
connect(mKyFileDialog, &KyNativeFileDialog::fileSelected, this, &KyFileDialogHelper::fileSelected);
connect(mKyFileDialog, &KyNativeFileDialog::filesSelected, this, &KyFileDialogHelper::filesSelected);
//QFileDialog::accept()里_q_emitUrlSelected会发送fileSelected信号 这里会导致发两次fileSelected的信号
// connect(mKyFileDialog, &KyNativeFileDialog::fileSelected, this, &KyFileDialogHelper::fileSelected);
//QFileDialog::accept()里_q_emitUrlsSelected会发送filesSelected信号 这里会导致发两次filesSelected的信号
// connect(mKyFileDialog, &KyNativeFileDialog::filesSelected, this, &KyFileDialogHelper::filesSelected);
connect(mKyFileDialog, &KyNativeFileDialog::filterSelected, this, &KyFileDialogHelper::filterSelected);
connect(mKyFileDialog, &QDialog::accepted, this, &KyFileDialogHelper::accept);
connect(mKyFileDialog, &QDialog::rejected, this, &KyFileDialogHelper::reject);
@ -2216,11 +2404,18 @@ KyFileDialogHelper::KyFileDialogHelper() : QPlatformFileDialogHelper(), mKyFileD
KyFileDialogHelper::~KyFileDialogHelper()
{
pDebug << "~~~~~~~~KyFileDialogHelper";
///不可以析构 普通函数里QFileDialog::show不显示和QFiledialog->show()会显示 析构的话BT下载工具打开不显示界面
// if(mKyFileDialog){
// mKyFileDialog->deleteLater();
// mKyFileDialog = nullptr;
// }
}
void KyFileDialogHelper::exec()
{
pDebug << "KyFileDialogHelper::exec..............";
mKyFileDialog->discardDelayedShow();
mKyFileDialog->exec();
}
@ -2249,7 +2444,19 @@ bool KyFileDialogHelper::show(Qt::WindowFlags windowFlags, Qt::WindowModality wi
for(QFileDialog *fd : p->findChildren<QFileDialog *>()){
if(options()->windowTitle() == fd->windowTitle()){
pDebug << "filedoalog set parent...." << fd->geometry();
mKyFileDialog->setParent(fd, windowFlags);
if(mKyFileDialog->parentWidget() != fd){
///设置parent是QFiledialog 之前设置的是p 会有问题 showevent里有时候会找不到对应name的
mKyFileDialog->setParent(fd, windowFlags);
}
pDebug << "filediaog directory000...." << fd->directory();
pDebug << "filedialog select000....." << fd->selectedFiles();
pDebug << "filedialog selectUrls000....." << fd->selectedUrls();
pDebug << "filedialog directoryUrl000....." << fd->directoryUrl();
if(fd->directory().exists())
mKyFileDialog->setDirectory(fd->directory());
// if(fd->directoryUrl().)
// for(QPushButton *btn : mKyFileDialog->findChildren<QPushButton*>())
// {
// if(btn->objectName() == "acceptButton")
@ -2336,6 +2543,10 @@ void KyFileDialogHelper::viewInitialFinished()
if(m_viewInitialFinished)
return;
pDebug << "viewInitialFinished....";
QTimer::singleShot(100, this, [this](){
pDebug << "viewport update1111111.......";
mKyFileDialog->mKyFileDialogUi->m_sider->viewport()->update();
});
QTimer::singleShot(500, this, [this](){
@ -2396,15 +2607,26 @@ void KyFileDialogHelper::viewInitialFinished()
}
pDebug << "initially selectirectory:" << selectirectory.toString() << selectirectory.path() << QFile::exists(selectirectory.path()) << Peony::FileUtils::isFileExsit(selectirectory.toString());
pDebug << "current path....." << mKyFileDialog->getCurrentUri();
if(strList.length() <= 0 && Peony::FileUtils::isFileExsit(selectirectory.toString()))//QFile::exists(selectirectory.path()))
{
mKyFileDialog->setDirectoryUrl(selectirectory);
QString cStr = mKyFileDialog->getCurrentUri();
QString sStr = selectirectory.toString();
if(cStr.endsWith("/"))
cStr = cStr.remove(cStr.length() - 1, 1);
if(sStr.endsWith("/"))
sStr = sStr.remove(sStr.length() - 1, 1);
pDebug << "cStr...." << cStr << "sStr...." << sStr;
if(cStr != sStr)
mKyFileDialog->setDirectoryUrl(selectirectory);
}
mKyFileDialog->intiContainerSort();
mKyFileDialog->initialViewId();
pDebug << "viewport update222222.......";
mKyFileDialog->mKyFileDialogUi->m_sider->viewport()->update();
// mKyFileDialog->refresh();
m_viewInitialFinished = true;
});
}
@ -2454,7 +2676,7 @@ QList<QUrl> KyFileDialogHelper::selectedFiles() const
{
QList<QUrl> urlList = mKyFileDialog->selectedUrls();
if((options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly) &&
mKyFileDialog->mKyFileDialogUi->m_fileNameEdit->text() == "" && m_viewInitialFinished)
mKyFileDialog->copyEditText() == "" && m_viewInitialFinished)
{
if (!mKyFileDialog->getCurrentPage()) {
return QList<QUrl>();
@ -2486,8 +2708,8 @@ QList<QUrl> KyFileDialogHelper::selectedFiles() const
QString path = mKyFileDialog->getCurrentUri();
if(!path.endsWith("/"))
path += "/";
pDebug << "selected filesss...:" << path + mKyFileDialog->mKyFileDialogUi->m_fileNameEdit->text();
urlList.append(QUrl(path + mKyFileDialog->mKyFileDialogUi->m_fileNameEdit->text()));
pDebug << "selected filesss...:" << path + mKyFileDialog->copyEditText();
urlList.append(QUrl(path + mKyFileDialog->copyEditText()));
return urlList;
}
}
@ -2497,7 +2719,7 @@ QList<QUrl> KyFileDialogHelper::selectedFiles() const
QString path = mKyFileDialog->getCurrentUri();
if(!path.endsWith("/"))
path += "/";
path += mKyFileDialog->mKyFileDialogUi->m_fileNameEdit->text();
path += mKyFileDialog->copyEditText();
if(path.startsWith("file:///"))
path = path.remove(0,7);
pDebug << "save selectedFiles00000..........:" << path;
@ -2545,5 +2767,3 @@ bool KyFileDialogHelper::isSupportedUrl(const QUrl &url) const
return url.isLocalFile();
}
#endif

View File

@ -1,5 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#ifndef KYNATIVEFILEDIALOG_H
#define KYNATIVEFILEDIALOG_H
#include <QDialog>
@ -150,6 +149,11 @@ public:
void initialViewId();
void delayShow();
void discardDelayedShow();
QString copyEditText();
Q_SIGNALS:
void switchViewRequest(const QString &viewId);
@ -171,14 +175,13 @@ public Q_SLOTS:
void updateWindowState();
QString selectName();
void updateStatusBar();
void delayShow();
void discardDelayedShow();
void onNewFolder();
void setSortType();
void searchButtonClicked();
void setSearchMode(bool mode);
void lineEditTextChange(QString text);
void containerMenuRequest(const QPoint &pos);
void updateTableModel(bool tableMode);
protected:
void resizeEvent(QResizeEvent *e);
@ -195,6 +198,8 @@ private:
void onCurrentInputNameChanged();
void handleEnterPressed();
void updateAcceptButtonState();
bool checkSaveFileExsits(QString path);
void isTableModel();
private:
bool m_searchMode = false;
@ -208,6 +213,8 @@ private:
QString m_lastSearchPath;
bool m_isClearSearchKey = false;
QStringListModel *m_model = nullptr;
QString m_copyEditText;
bool m_istableModel = false;
};
@ -264,4 +271,3 @@ private:
#endif // KYNATIVEFILEDIALOG_H
#endif

View File

@ -1,5 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#include "kyfiledialogprivate.h"
#include <QFileDialog>
@ -57,4 +56,3 @@ QStringList KyNativeFileDialogPrivate::typedFiles()
*/
return QStringList();
}
#endif

View File

@ -1,5 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#ifndef KYNATIVEFILEDIALOGPRIVATE_H
#define KYNATIVEFILEDIALOGPRIVATE_H
@ -29,7 +28,6 @@ private:
};
#endif // KYNATIVEFILEDIALOGPRIVATE_H
#endif
/*
KyNativeFileDialogPrivate::KyNativeFileDialogPrivate()
{

View File

@ -1,6 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#include "menutoolbutoon.h"
#include <QApplication>
#include <QDBusInterface>
@ -75,4 +73,3 @@ void ToolButtonStyle::drawPrimitive(QStyle::PrimitiveElement element, const QSty
}
return qApp->style()->drawPrimitive(element, option, painter, widget);
}
#endif

View File

@ -1,5 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#ifndef MENUTOOLBUTTON_H
#define MENUTOOLBUTTON_H
@ -36,4 +35,3 @@ class ToolButtonStyle : public QProxyStyle
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override;
};
#endif // MENUTOOLBUTTON_H
#endif

View File

@ -1,5 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#include "pathbar.h"
#include <PeonyPathCompleter>
@ -74,4 +73,3 @@ void FileDialogPathBar::updateTableModel(bool isTable)
}
pDebug << "m_pathBar height1111:" << m_pathBar->height() << this->height();
}
#endif

View File

@ -1,5 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#ifndef PATHBAR_H
#define PATHBAR_H
@ -28,4 +27,3 @@ private:
Peony::AdvancedLocationBar *m_pathBar = nullptr;
};
#endif // PATHBAR_H
#endif

View File

@ -1,6 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#include "sidebar.h"
#include <QTimer>
#include <PeonySideBarModel>
@ -77,7 +75,7 @@ FileDialogSideBar::FileDialogSideBar(QWidget *parent) : QTreeView(parent)
header()->setStretchLastSection(false);
header()->hide();
this->verticalScrollBar()->setProperty("drawScrollBarGroove", true);
this->verticalScrollBar()->setProperty("drawScrollBarGroove", false);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
this->setFrameStyle(QFrame::NoFrame);
setSortingEnabled(true);
@ -453,4 +451,3 @@ void SideBarStyle::drawControl(QStyle::ControlElement element, const QStyleOptio
return qApp->style()->drawControl(element, &opt, painter, widget);
}
}
#endif

View File

@ -1,6 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#ifndef SIDEBAR_H
#define SIDEBAR_H
#include <QTreeView>
@ -72,4 +70,3 @@ public:
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override;
};
#endif // SIDEBAR_H
#endif

View File

@ -1,6 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#include "ui_kyfiledialog.h"
#include <QFileDialog>
#include "kyfiledialog.h"
@ -61,7 +59,7 @@ void Ui_KyFileDialog::initSortMenu(QDialog *mKyFileDialog)
m_sortButton->setMenu(m_sortMenu);
m_sortButton->setPopupMode(QToolButton::InstantPopup);
m_sortButton->setAutoRaise(true);
m_sortButton->setFixedWidth(57);
m_sortButton->setFixedSize(QSize(57, 40));
m_sortButton->setIconSize(QSize(16, 16));
}
@ -71,7 +69,7 @@ void Ui_KyFileDialog::initModeMenu(QDialog *mKyFileDialog)
m_modeButton = new MenuToolButton();
m_modeButton->setPopupMode(QToolButton::InstantPopup);
m_modeButton->setAutoRaise(true);
m_modeButton->setFixedWidth(57);
m_modeButton->setFixedSize(QSize(57, 40));
m_modeButton->setIconSize(QSize(16, 16));
m_modeMenu = new QMenu(m_modeButton);
@ -95,18 +93,14 @@ void Ui_KyFileDialog::initSiderBar(QDialog *mKyFileDialog)
void Ui_KyFileDialog::initHeaderBar(QDialog *mKyFileDialog)
{
m_hHeaderLayout = new QHBoxLayout();
m_hHeaderLayout->setContentsMargins(4,5,4,5);
initModeMenu(mKyFileDialog);
initSortMenu(mKyFileDialog);
m_hHeaderLayout->setContentsMargins(0,0,0,0);
m_hHeaderLayout->setContentsMargins(0,0,8,0);
m_hHeaderLayout->setObjectName(QString::fromUtf8("hboxLayout"));
m_backButton = new QToolButton();
m_forwardButton = new QToolButton();
m_toParentButton = new QToolButton();
m_backButton->setObjectName("m_backButton");
m_forwardButton->setObjectName("m_forwardButton");
m_toParentButton->setObjectName("m_toParentButton");
m_pathbarWidget = new FileDialogPathBar();//new Peony::AdvancedLocationBar(mKyFileDialog);//
m_pathbar = m_pathbarWidget->getPathBar();
@ -208,8 +202,7 @@ void Ui_KyFileDialog::setupUi(QDialog *mKyFileDialog)
m_gridLayout = new QGridLayout(mKyFileDialog);
m_gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
m_container = new Peony::DirectoryViewContainer(mKyFileDialog);
m_container->setObjectName("container");
m_container = new Peony::DirectoryViewContainer();
m_frame = new QFrame();
vboxLayout = new QVBoxLayout();
@ -221,12 +214,13 @@ void Ui_KyFileDialog::setupUi(QDialog *mKyFileDialog)
vboxLayout->addSpacing(8);
vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
vboxLayout->setContentsMargins(0, 0, 8, 0);
vboxLayout->setContentsMargins(0, 0, 0, 0);
vboxLayout->addLayout(m_hHeaderLayout);
vboxLayout->addSpacing(12);
m_upSeperate = new QFrame();
vboxLayout->addSpacing(6);
m_upSeperate = new QFrame(mKyFileDialog);
m_upSeperate->setFrameShape(QFrame::HLine);
m_upSeperate->setFrameShadow(QFrame::Plain);
vboxLayout->addWidget(m_upSeperate);
vboxLayout->addSpacing(6);
vboxLayout->addWidget(m_container);
@ -235,8 +229,9 @@ void Ui_KyFileDialog::setupUi(QDialog *mKyFileDialog)
vboxLayout->addLayout(m_hLineEditLayout);
vboxLayout->addSpacing(16);
m_downSeperate = new QFrame();
m_downSeperate = new QFrame(mKyFileDialog);
m_downSeperate->setFrameShape(QFrame::HLine);
m_downSeperate->setFrameShadow(QFrame::Plain);
vboxLayout->addWidget(m_downSeperate);
vboxLayout->addSpacing(16);
@ -269,4 +264,3 @@ void Ui_KyFileDialog::setupUi(QDialog *mKyFileDialog)
m_gridLayout->addWidget(m_splitter);
m_gridLayout->setContentsMargins(0,0,0,0);
}
#endif

View File

@ -1,6 +1,4 @@
#include "debug.h"
#ifdef UseNativeFileDialog
#ifndef UI_KYFILEDIALOG_H
#define UI_KYFILEDIALOG_H
#include <QApplication>
@ -100,4 +98,3 @@ private:
void intiBtnLayout(QDialog *mKyFileDialog);
};
#endif // UI_KYFILEDIALOG_H
#endif

View File

@ -32,8 +32,6 @@
#include <QStyleOption>
#include <qpa/qplatformdialoghelper.h>
#include <QtWidgets/qdialogbuttonbox.h>
#include "ukuistylehelper/ukuistylehelper.h"
#include "windowmanager/windowmanager.h"
#include "private/qlabel_p.h"
#include "private/qdialog_p.h"
@ -208,8 +206,10 @@ QPixmap MessageBox::iconPixmap() const
void MessageBox::setIconPixmap(const QPixmap &pixmap)
{
Q_D(MessageBox);
if (!pixmap.isNull())
d->mIconLabel->setPixmap(pixmap.scaled(d->mIconSize, d->mIconSize));
if (!pixmap.isNull()){
d->mIconLabel->setAlignment(Qt::AlignVCenter);
d->mIconLabel->setPixmap(pixmap);
}
d->mIcon = QMessageBox::NoIcon;
}
@ -491,11 +491,11 @@ void MessageBox::setWindowModality(Qt::WindowModality windowModality)
{
QDialog::setWindowModality(windowModality);
if (parentWidget() && windowModality == Qt::WindowModal) {
setParent(parentWidget(), Qt::Sheet);
} else {
setParent(parentWidget(), Qt::Dialog);
}
// if (parentWidget() && windowModality == Qt::WindowModal) {
// setParent(parentWidget(), Qt::Sheet);
// } else {
// setParent(parentWidget(), Qt::Dialog);
// }
setDefaultButton(d_func()->mDefaultButton);
}
@ -707,6 +707,7 @@ MessageBoxPrivate::MessageBoxPrivate() : mCheckbox(nullptr), mEscapeButton(nullp
MessageBoxPrivate::~MessageBoxPrivate()
{
/*
if (nullptr != mLabel) {
delete mLabel;
}
@ -726,6 +727,7 @@ MessageBoxPrivate::~MessageBoxPrivate()
if (nullptr != mDetailButton) {
delete mDetailButton;
}
*/
}
void MessageBoxPrivate::init(const QString &title, const QString &text)
@ -741,7 +743,6 @@ void MessageBoxPrivate::init(const QString &title, const QString &text)
mIconLabel = new QLabel;
mIconLabel->setObjectName(QLatin1String("ukui_msgbox_icon_label"));
mIconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
mIconLabel->setFixedSize(mIconSize, mIconSize);
mIconLabel->setContentsMargins(0, 0, 0, 0);
mButtonBox = new QDialogButtonBox;
@ -848,7 +849,7 @@ void MessageBoxPrivate::setupLayout()
}
QHBoxLayout *titleLayout = new QHBoxLayout;
titleLayout->setContentsMargins(6,0,4,0);
titleLayout->setContentsMargins(6,0,0,0);
if(!mTitleIcon->pixmap()->isNull()){
titleLayout->addWidget(mTitleIcon, Qt::AlignLeft | Qt::AlignVCenter);
titleLayout->addSpacing(5);
@ -1406,43 +1407,95 @@ bool MessageBoxHelper::show(Qt::WindowFlags windowFlags, Qt::WindowModality wind
}
}
}
if (windowModality == Qt::WindowModal && mMessageBox->parentWidget() != p) {
///QDialog center in parent
mMessageBox->setParent(p, Qt::Sheet);
}
else if(mMessageBox->parentWidget() != p){
///QDialog center in parent
mMessageBox->setParent(p, Qt::Dialog);
}
}
}
else{
if(windowModality == Qt::WindowModal && mMessageBox->windowFlags() != Qt::Sheet)
mMessageBox->setWindowFlag(Qt::Sheet);
else if(mMessageBox->windowFlags() != Qt::Dialog)
mMessageBox->setWindowFlag(Qt::Dialog);
}
mMessageBox->setuplayout();
if (parent && !mMessageBox->isVisible()) {
mMessageBox->move(QPoint((parent->width() - mMessageBox->width()) / 2, (parent->height() - mMessageBox->height()) / 2)
+ QPoint(parent->x(), parent->y()));
}
/*
if (!mMessageBox->isVisible()) {
if(parent){
QString platform = QGuiApplication::platformName();
if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
{
kdk::UkuiStyleHelper::self()->removeHeader(mMessageBox);
} else {
MotifWmHints hints;
hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
hints.functions = MWM_FUNC_ALL;
hints.decorations = MWM_DECOR_BORDER;
XAtomHelper::getInstance()->setWindowMotifHint(mMessageBox->winId(), hints);
QWidget *p = mMessageBox->find(parent->winId());
int x = (p->width() - mMessageBox->width()) > 0 ? (p->width() - mMessageBox->width()) / 2 : 0;
int y = (p->height() - mMessageBox->height()) > 0 ? (p->height() - mMessageBox->height()) / 2 : 0;
QPoint gloabP = QPoint(x, y) + p->mapToGlobal(p->pos());
qDebug() << "gloabP...." << gloabP;
QPoint point = p->mapFromGlobal(gloabP);
qDebug() << "point....." << point;
if (windowModality == Qt::WindowModal) {
qDebug() << "WindowModal............";
mMessageBox->setParent(p, Qt::Sheet);
}
else{
qDebug() << "Dialog............";
mMessageBox->setParent(p, Qt::Dialog);
}
// mMessageBox->move(point);
qDebug() << "mMessageBox parent......" << p << p->geometry() << p->mapToGlobal(p->pos());
qDebug() << "mMessageBox ....." << mMessageBox << mMessageBox->geometry();
}
else{
int number = QApplication::desktop()->screenNumber(QCursor::pos());
if(number<0){
number=0;
}
QSize size = QApplication::screens().at(number)->availableGeometry().size();
// qDebug() << "availableGeometry......" << size << QApplication::screens().at(number)->availableSize();
mMessageBox->move(QPoint((size.width() - mMessageBox->width()) / 2, (size.height() - mMessageBox->height()) / 2));
}
// if (QWidget *p = mMessageBox->find(parent->winId())) {
// qDebug() << "isvisible....." << mMessageBox->isVisible();
// qDebug() << "p geometry1231233333......" << p << p->geometry() << p->mapToGlobal(QPoint(0,0));
// qDebug() << "parent geometry1231233333......" << parent << parent->geometry() << parent->mapToGlobal(QPoint(0,0));
// mMessageBox->move(QPoint((p->width() - mMessageBox->width()) / 2, (p->height() - mMessageBox->height()) / 2)
// + p->mapToGlobal(QPoint(0,0)));
// mMessageBox->move(QPoint((parent->width() - mMessageBox->width()) / 2, (parent->height() - mMessageBox->height()) / 2)
// + QPoint(parent->x(), parent->y()));
// qDebug() << "parent11111111............" << mMessageBox->geometry() << parent->geometry() << p->geometry();
// }
}
*/
MotifWmHints hints;
hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
hints.functions = MWM_FUNC_ALL;
hints.decorations = MWM_DECOR_BORDER;
XAtomHelper::getInstance()->setWindowMotifHint(mMessageBox->winId(), hints);
foreach (QAbstractButton *ab, mMessageBox->buttons()) {
if (QPushButton *pb = qobject_cast<QPushButton *>(ab)) {
if (pb->isDefault()) {
pb->setProperty("isImportant", true);
mMessageBox->setDefaultButton(pb);
} else {
pb->setProperty("isImportant", false);
}
}
}
mMessageBox->show();
Q_UNUSED(parent);
Q_UNUSED(windowFlags);
Q_UNUSED(windowModality);
return true;
}

View File

@ -31,9 +31,11 @@ KyIcon::KyIcon(QQuickPaintedItem *parent)
emit sunkenChanged();
emit onChanged();
emit icontypeChanged();
emit iconNameChanged();
update();
});
}
connect(this, &KyIcon::iconNameChanged, this, &KyIcon::updateItem);
connect(this, &KyIcon::hoverChanged, this, &KyIcon::updateItem);
connect(this, &KyIcon::selectedChanged, this, &KyIcon::updateItem);
connect(this, &KyIcon::hasFocusChanged, this, &KyIcon::updateItem);
@ -42,6 +44,7 @@ KyIcon::KyIcon(QQuickPaintedItem *parent)
connect(this, &KyIcon::onChanged, this, &KyIcon::updateItem);
connect(this, &KyIcon::icontypeChanged, this, &KyIcon::updateItem);
}
@ -52,13 +55,15 @@ void KyIcon::setIcon(const QIcon &icon)
void KyIcon::setIconName(const QString &iconName)
{
if(!QIcon::hasThemeIcon(iconName))
m_iconName = iconName;
if(!QIcon::hasThemeIcon(m_iconName))
{
m_icon = QIcon();
qWarning() << "未找到名为 " << iconName << " 的图标!";
qWarning() << "未找到名为 " << m_iconName << " 的图标!";
return;
}
m_icon = QIcon::fromTheme(iconName);
m_icon = QIcon::fromTheme(m_iconName);
emit iconNameChanged();
}
void KyIcon::paint(QPainter *painter)

View File

@ -9,7 +9,7 @@ class QStyle;
class KyIcon : public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(QString iconName WRITE setIconName)
Q_PROPERTY(QString iconName READ iconName WRITE setIconName NOTIFY iconNameChanged)
Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
Q_PROPERTY( bool hover READ hover WRITE setHover NOTIFY hoverChanged)
Q_PROPERTY( bool selected READ selected WRITE setSelected NOTIFY selectedChanged)
@ -25,7 +25,7 @@ public:
QIcon icon() { return m_icon; }
void setIcon(const QIcon &icon);
QString iconName(){ return m_iconName; }
void setIconName(const QString &iconName);
bool hover() const { return m_hover; }
@ -72,6 +72,7 @@ Q_SIGNALS:
void sunkenChanged();
void onChanged();
void icontypeChanged();
void iconNameChanged();
protected:
bool m_hover;
@ -84,6 +85,7 @@ protected:
private:
QIcon m_icon;
QString m_iconName;
};

View File

@ -1475,16 +1475,18 @@ void KyQuickStyleItem::paint(QPainter *painter)
switch (m_itemType) {
case Button:{
QWidget wid;
if(m_buttonType=="MaxButton" || m_buttonType=="MinButton" ){
if(m_buttonType == "MaxButton" || m_buttonType == "MinButton") {
wid.setProperty("isWindowButton", QVariant(0x01));
}
if(m_buttonType=="CloseButton"){
if(m_buttonType == "CloseButton") {
wid.setProperty("isWindowButton", QVariant(0x02));
}
if(m_buttonType=="blueButton"){
wid.setProperty("isImportant",true);
if(m_buttonType == "blueButton") {
wid.setProperty("isImportant", true);
}
if(m_roundButton == "RoundButton") {
wid.setProperty("isRoundButton", true);
}
KyQuickStyleItem::style()->drawControl(QStyle::CE_PushButton, m_styleoption, painter,&wid);
}
break;

View File

@ -66,6 +66,7 @@ class KyQuickStyleItem: public QQuickItem
Q_PROPERTY( int bottomPadding READ bottomPadding NOTIFY bottomPaddingChanged)
Q_PROPERTY( QString buttonType READ buttonType WRITE setbuttonType NOTIFY buttonTypeChanged)
Q_PROPERTY( QString roundButton READ roundButton WRITE setroundButton NOTIFY roundButtonChanged)
Q_PROPERTY( QQuickItem *control READ control WRITE setControl NOTIFY controlChanged)
@ -199,6 +200,12 @@ public:
emit buttonTypeChanged();
}
QString roundButton() const { return m_roundButton;}
void setroundButton(QString roundButton) {
m_roundButton = roundButton ;
emit roundButtonChanged();
}
public Q_SLOTS:
int pixelMetric(const QString&);
QVariant styleHint(const QString&);
@ -248,6 +255,7 @@ Q_SIGNALS:
void bottomPaddingChanged();
void buttonTypeChanged();
void roundButtonChanged();
protected:
bool event(QEvent *) override;
@ -305,6 +313,7 @@ protected:
static QStyle *s_style;
QString m_buttonType;
QString m_roundButton;
};
#endif // KYQUICKSTYLEITEM_H

View File

@ -11,7 +11,7 @@ KyStyleHelper::KyStyleHelper(QQuickItem *parent)
if (QGSettings::isSchemaInstalled("org.ukui.style")) {
QGSettings* styleSettings = new QGSettings("org.ukui.style", QByteArray(), this);
connect(styleSettings, &QGSettings::changed, this, [&](const QString &key){
if (key == "styleName") {
if (key == "styleName" || key == "themeColor") {
emit paletteChanged();
emit qcolorChanged();
}

View File

@ -0,0 +1,43 @@
import QtQuick 2.6
import QtQuick.Templates 2.5 as T
import org.ukui.qqc2style.private 1.0 as StylePrivate
T.RoundButton {
id: controlRoot
palette: StylePrivate.StyleHelper.palette
/* The value type of buttonType are "CloseButton","MaxButton","MinButton","blueButton","Default". */
StylePrivate.StyleHelper.buttonType: "Default"
implicitWidth: background.implicitWidth
implicitHeight: background.implicitHeight
hoverEnabled: true //Qt.styleHints.useHoverEffects TODO: how to make this work in 5.7?
contentItem: Item {}
background: StylePrivate.StyleItem {
id: styleitem
anchors.fill: parent
buttonType: controlRoot.StylePrivate.StyleHelper.buttonType
control: controlRoot
elementType: "button"
roundButton:"RoundButton"
sunken: controlRoot.pressed || (controlRoot.checkable && controlRoot.checked)
raised: !(controlRoot.pressed || (controlRoot.checkable && controlRoot.checked))
hover: controlRoot.hovered
text: controlRoot.text
hasFocus: controlRoot.activeFocus
activeControl: controlRoot.isDefault ? "default" : "f"
properties: {
"icon": controlRoot.icon && controlRoot.display !== T.AbstractButton.TextOnly ? (controlRoot.icon.name || controlRoot.icon.source) : "",
"iconWidth": controlRoot.icon && controlRoot.icon.width ? controlRoot.icon.width : 0,
"iconHeight": controlRoot.icon && controlRoot.icon.height ? controlRoot.icon.height : 0,
"flat": controlRoot.flat
}
}
}

View File

@ -47,8 +47,9 @@ ProxyStylePlugin::ProxyStylePlugin()
if (UKUIStyleSettings::isSchemaInstalled("org.ukui.style")) {
auto settings = UKUIStyleSettings::globalInstance();
connect(settings, &UKUIStyleSettings::changed, this, [=](const QString &key) {
if (key == "styleName" || key == "widgetThemeName" || key == "themeColor") {
if (blackList().contains(qAppName()))
if (key == "styleName" || key == "widgetThemeName" || key == "themeColor" ||
key == "style-name" || key == "widget-theme-name" || key == "theme-color") {
if (blackList().contains(qAppName()) || qAppName() == "kylin-software-center.py")
return;
//We should not swich a application theme which use internal style.

View File

@ -216,7 +216,7 @@ KDefaultStyleParameters::KDefaultStyleParameters(QObject *parent, bool isDark) :
{
radius = 6;
ColoseButtonColor = QColor(243, 34, 45);
ColoseButtonColor = QColor(204, 18, 34);
initPalette(isDark);
@ -251,7 +251,7 @@ void KDefaultStyleParameters::initPalette(bool isDark)
brightText_dis(0, 0, 0),
buttonText_at(38, 38, 38),
buttonText_iat(38, 38, 38),
buttonText_dis(179, 179, 179),
buttonText_dis(0, 0, 0, 255 * 0.3),
base_at(255, 255, 255),
base_iat(245, 245, 245),
base_dis(237, 237, 237),
@ -320,7 +320,7 @@ void KDefaultStyleParameters::initPalette(bool isDark)
brightText_dis.setRgb(255, 255, 255);
buttonText_at.setRgb(217, 217, 217);
buttonText_iat.setRgb(217, 217, 217);
buttonText_dis.setRgb(76, 76, 79);
buttonText_dis.setRgb(255, 255, 255, 255 * 0.3);
base_at.setRgb(29, 29, 29);
base_iat.setRgb(28, 28, 28);
base_dis.setRgb(36, 36, 36);
@ -520,13 +520,9 @@ void KDefaultStyleParameters::initPushButtonParameters(bool isDark, const QStyle
if (isWindowColoseButton) {
QColor ColoseButton = ColoseButtonColor;
if (isDark) {
hoverBrush = QBrush(mixColor(ColoseButton, mix, 0.2));
clickBrush = QBrush(mixColor(ColoseButton, mix, 0.05));
} else {
hoverBrush = QBrush(mixColor(ColoseButton, mix, 0.05));
clickBrush = QBrush(mixColor(ColoseButton, mix, 0.2));
}
hoverBrush = QBrush(QColor(243, 34, 45));
clickBrush = QBrush(ColoseButton);
focusPen = QPen(QBrush(mixColor(ColoseButton, mix, 0.2)), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
} else if (isWindowButton && useTransparentButtonList().contains(qAppName())) {
@ -654,13 +650,9 @@ void KDefaultStyleParameters::initToolButtonParameters(bool isDark, const QStyle
if (isWindowColoseButton) {
QColor ColoseButton = ColoseButtonColor;
if (isDark) {
hoverBrush = QBrush(mixColor(ColoseButton, mix, 0.2));
clickBrush = QBrush(mixColor(ColoseButton, mix, 0.05));
} else {
hoverBrush = QBrush(mixColor(ColoseButton, mix, 0.05));
clickBrush = QBrush(mixColor(ColoseButton, mix, 0.2));
}
hoverBrush = QBrush(QColor(243, 34, 45));
clickBrush = QBrush(ColoseButton);
focusPen = QPen(QBrush(mixColor(ColoseButton, mix, 0.2)), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
} else if (isWindowButton && useTransparentButtonList().contains(qAppName())) {
@ -1710,7 +1702,7 @@ void KDefaultStyleParameters::initMenuParameters(bool isDark, const QStyleOption
if (qobject_cast<const QFrame*>(widget)) {
QPainter pixmapPainter(&framePixmap);
pixmapPainter.setPen(Qt::NoPen);
pixmapPainter.setBrush(option->palette.color(QPalette::Active, QPalette::Base).lighter(300));
pixmapPainter.setBrush(option->palette.color(QPalette::Active, QPalette::Base).lighter(180));
pixmapPainter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
pixmapPainter.drawRoundedRect(option->rect, frameradius, frameradius);
} else {
@ -2061,7 +2053,7 @@ KFashionStyleParameters::KFashionStyleParameters(QObject *parent, bool isDark) :
{
radius = 6;
ColoseButtonColor = QColor("#F86458");
ColoseButtonColor = QColor(198, 42, 63);
initPalette(isDark);
}
@ -2095,7 +2087,7 @@ void KFashionStyleParameters::initPalette(bool isDark)
brightText_dis(0, 0, 0),
buttonText_at(38, 38, 38),
buttonText_iat(38, 38, 38),
buttonText_dis(179, 179, 179),
buttonText_dis(0, 0, 0, 255 * 0.3),
base_at(255, 255, 255),
base_iat(245, 245, 245),
base_dis(237, 237, 237),
@ -2164,7 +2156,7 @@ void KFashionStyleParameters::initPalette(bool isDark)
brightText_dis.setRgb(255, 255, 255);
buttonText_at.setRgb(217, 217, 217);
buttonText_iat.setRgb(217, 217, 217);
buttonText_dis.setRgb(76, 76, 79);
buttonText_dis.setRgb(255, 255, 255, 255 * 0.3);
base_at.setRgb(29, 29, 29);
base_iat.setRgb(28, 28, 28);
base_dis.setRgb(36, 36, 36);
@ -2372,23 +2364,22 @@ void KFashionStyleParameters::initPushButtonParameters(bool isDark, const QStyle
if (isWindowColoseButton) {
QColor ColoseButton = ColoseButtonColor;
//hover
if (isDark) {
startColor = mixColor(ColoseButton, QColor(Qt::white), 0.2);
endColor = mixColor(ColoseButton, QColor(Qt::black), 0.05);
startColor = QColor(242, 116, 133);
endColor = QColor(221, 44, 68);
} else {
startColor = mixColor(ColoseButton, QColor(Qt::white), 0.05);
endColor = mixColor(ColoseButton, QColor(Qt::black), 0.2);
startColor = QColor(242, 82, 117);
endColor = QColor(221, 44, 68);
}
linearGradient.setColorAt(0, startColor);
linearGradient.setColorAt(1, endColor);
hoverBrush = QBrush(linearGradient);
//click
clickBrush = QBrush(mixColor(ColoseButton, mix, 0.1));
clickBrush = QBrush(ColoseButton);
//focus
focusPen = QPen(QBrush(mixColor(ColoseButton, mix, 0.2)), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
focusPen = QPen(QBrush(ColoseButton), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
} else if (isWindowButton && useTransparentButtonList().contains(qAppName())) {
if (isDark) {
@ -2553,24 +2544,22 @@ void KFashionStyleParameters::initToolButtonParameters(bool isDark, const QStyle
if (isWindowColoseButton) {
QColor ColoseButton = ColoseButtonColor;
//hover
if (isDark) {
startColor = mixColor(ColoseButton, QColor(Qt::white), 0.2);
endColor = mixColor(ColoseButton, QColor(Qt::black), 0.05);
if (isDark) {
startColor = QColor(242, 116, 133);
endColor = QColor(221, 44, 68);
} else {
startColor = mixColor(ColoseButton, QColor(Qt::white), 0.05);
endColor = mixColor(ColoseButton, QColor(Qt::black), 0.2);
startColor = QColor(242, 82, 117);
endColor = QColor(221, 44, 68);
}
linearGradient.setColorAt(0, startColor);
linearGradient.setColorAt(1, endColor);
hoverBrush = QBrush(linearGradient);
//click
clickBrush = QBrush(mixColor(ColoseButton, mix, 0.1));
clickBrush = QBrush(ColoseButton);
//focus
focusPen = QPen(QBrush(mixColor(ColoseButton, mix, 0.2)), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
focusPen = QPen(QBrush(ColoseButton), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
} else if (isWindowButton && useTransparentButtonList().contains(qAppName())) {
if (isDark) {
@ -2766,10 +2755,31 @@ void KFashionStyleParameters::initSpinBoxParameters(bool isDark, const QStyleOpt
defaultPen.setWidth(0);
//hover state
hoverBrush = defaultBrush;
hoverPen = defaultPen;
if(isHorizonLayout)
hoverPen.setWidth(2);
{//hoverBrush
QColor startColor;
QColor endColor;
QColor mix = option->palette.color(QPalette::Active, QPalette::BrightText);
QLinearGradient linearGradient;
linearGradient.setStart(option->rect.topLeft());
linearGradient.setFinalStop(option->rect.bottomLeft());
if (isDark) {
startColor = option->palette.color(QPalette::Active, QPalette::Midlight);
endColor = option->palette.color(QPalette::Disabled, QPalette::NoRole);
startColor.setAlphaF(0.5);
endColor.setAlphaF(0.5);
} else {
startColor = option->palette.color(QPalette::Active, QPalette::Midlight);
endColor = mixColor(startColor, mix, 0.1);
startColor.setAlphaF(0.5);
endColor.setAlphaF(0.5);
}
linearGradient.setColorAt(0, startColor);
linearGradient.setColorAt(1, endColor);
hoverBrush = QBrush(linearGradient);
}
//focus state
focusBrush = option->palette.brush(QPalette::Active, QPalette::Base);
@ -3782,7 +3792,7 @@ void KFashionStyleParameters::initMenuParameters(bool isDark, const QStyleOption
QPainter pixmapPainter(&framePixmap);
pixmapPainter.setPen(Qt::NoPen);
pixmapPainter.setBrush(option->palette.color(QPalette::Active, QPalette::Base).lighter(300));
pixmapPainter.setBrush(option->palette.color(QPalette::Active, QPalette::Base).lighter(180));
pixmapPainter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
pixmapPainter.drawPath(drawRectPath);
pixmapPainter.end();

View File

@ -80,7 +80,7 @@ public:
int ToolButton_DefaultWidth = 60;
int IconButton_DefaultWidth = 36;
int IconButton_DefaultWidth_origin = 36;
QColor ColoseButtonColor = QColor(243, 34, 45);
QColor ColoseButtonColor;
// menu
int Menu_MarginHeight = 4 + 8;
@ -114,6 +114,7 @@ public:
int Slider_Length_origin = 20;
int Slider_GrooveLength = 4;
int Slider_GrooveLength_origin = 4;
int Slider_Margin = 2;
// radiobutton
int ExclusiveIndicator_Width = 16;
@ -142,6 +143,7 @@ public:
int ComboBox_DefaultMenuItemHeight = 36;
int ComboBox_DefaultMenuItemHeight_original = 36;
int ComboBox_FrameWidth = 2;
int ComboBox_VMargin = 1;
// spinbox
int SpinBox_DefaultWidth = 160;

View File

@ -268,9 +268,6 @@ int Qt5UKUIStyle::styleHint(QStyle::StyleHint hint, const QStyleOption *option,
}
return m_is_tablet_mode;
case SH_Button_FocusPolicy:
return Qt::TabFocus;
default:
break;
}
@ -465,7 +462,8 @@ void Qt5UKUIStyle::polish(QWidget *widget)
if (qobject_cast<QTabWidget*>(widget)) {
//FIXME: unpolish, extensiable.
m_tab_animation_helper->registerWidget(widget);
if (qAppName() != "ukui-sidebar")
m_tab_animation_helper->registerWidget(widget);
}
if (qobject_cast<QScrollBar*>(widget)) {
@ -478,7 +476,8 @@ void Qt5UKUIStyle::polish(QWidget *widget)
if (auto v = qobject_cast<QAbstractItemView *>(widget)) {
v->viewport()->setAttribute(Qt::WA_Hover);
v->setAttribute(Qt::WA_InputMethodEnabled);
//QCompleter BUG113969
// v->setAttribute(Qt::WA_InputMethodEnabled);
}
if(qobject_cast<QToolButton*>(widget))
@ -750,7 +749,7 @@ QPixmap Qt5UKUIStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &p
// return QPixmap::fromImage(im);
//set same color to text when set icon mode disable
//Fix me:set same color to text when set icon mode disable.But it has error in color icons.
QColor bg = option->palette.color(QPalette::Disabled, QPalette::WindowText);
bg.setAlphaF(0.5);
QPainter p(&target);
@ -1930,6 +1929,14 @@ void Qt5UKUIStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleO
painter->setBrush(button_Hover(option));
painter->drawRoundedRect(option->rect, iconMode_Radius, iconMode_Radius);
}
else if (vi->backgroundBrush.style() != Qt::NoBrush) {
QPointF oldBO = painter->brushOrigin();
painter->setBrushOrigin(vi->rect.topLeft());
painter->setBrush(vi->backgroundBrush);
painter->drawRoundedRect(vi->rect, iconMode_Radius, iconMode_Radius);
painter->setBrushOrigin(oldBO);
}
painter->restore();
}
} else {
@ -1941,6 +1948,7 @@ void Qt5UKUIStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleO
}
painter->save();
painter->setRenderHint(QPainter::Antialiasing, true);
painter->setPen(Qt::NoPen);
if (!enable) {
painter->setBrush(disableBrush);
@ -2096,28 +2104,55 @@ void Qt5UKUIStyle::drawComplexControl(QStyle::ComplexControl control, const QSty
if (slider->subControls & SC_SliderGroove) {
if (horizontal) {
groove.setHeight(sp->Slider_GrooveLength);
groove.setWidth(groove.width() - 2 * sp->Slider_Margin);
} else {
groove.setWidth(sp->Slider_GrooveLength);
groove.setHeight(groove.height() - 2 * sp->Slider_Margin);
}
groove.moveCenter(option->rect.center());
groove.moveTo((option->rect.width() - groove.width()) / 2, (option->rect.height() - groove.height()) /2);
// groove.moveCenter(option->rect.center());
QBrush sBrush, gBrush;
QRect sRect, gRect;
if (horizontal) {
if (slider->upsideDown) {
sRect.setRect(handle.center().x(), groove.y(), groove.width() - handle.center().x(), groove.height());
gRect.setRect(groove.x(), groove.y(), handle.center().x(), groove.height());
sRect.setLeft(handle.center().x());
sRect.setTop(groove.top());
sRect.setRight(groove.right() - 1);
sRect.setBottom(groove.bottom());
gRect.setLeft(groove.left() + 1);
gRect.setTop(groove.top());
gRect.setRight(handle.center().x());
gRect.setBottom(groove.bottom());
} else {
sRect.setRect(groove.x(), groove.y(), handle.center().x(), groove.height());
gRect.setRect(handle.center().x(), groove.y(), groove.width() - handle.center().x(), groove.height());
gRect.setLeft(handle.center().x());
gRect.setTop(groove.top());
gRect.setRight(groove.right() - 1);
gRect.setBottom(groove.bottom());
sRect.setLeft(groove.left() + 1);
sRect.setTop(groove.top());
sRect.setRight(handle.center().x());
sRect.setBottom(groove.bottom());
}
} else {
if (slider->upsideDown) {
sRect.setRect(groove.x(), handle.center().y(), groove.width(), groove.height() - handle.center().y());
gRect.setRect(groove.x(), groove.y(), groove.width(), handle.center().y());
gRect.setLeft(groove.left());
gRect.setTop(groove.top() + 1);
gRect.setRight(groove.right());
gRect.setBottom(handle.center().y());
sRect.setLeft(groove.left());
sRect.setTop(handle.center().y());
sRect.setRight(groove.right());
sRect.setBottom(groove.bottom() - 1);
} else {
sRect.setRect(groove.x(), groove.y(), groove.width(), groove.center().y());
gRect.setRect(groove.x(), handle.center().y(), groove.width(), groove.height() - handle.center().y());
sRect.setLeft(groove.left());
sRect.setTop(groove.top() + 1);
sRect.setRight(groove.right());
sRect.setBottom(handle.center().y());
gRect.setLeft(groove.left());
gRect.setTop(handle.center().y());
gRect.setRight(groove.right());
gRect.setBottom(groove.bottom() - 1);
}
}
@ -2157,6 +2192,7 @@ void Qt5UKUIStyle::drawComplexControl(QStyle::ComplexControl control, const QSty
while (v <= slider->maximum) {
int pos = sliderPositionFromValue(slider->minimum, slider->maximum, v, proxy()->pixelMetric(PM_SliderSpaceAvailable, option, widget),
slider->upsideDown) + len / 2;
pos = pos + sp->Slider_Margin;
if (horizontal) {
if (slider->tickPosition & QSlider::TicksAbove)
painter->drawLine(pos, handle.top() - thickSpace, pos, handle.top() - thickSpace + tick);
@ -2178,6 +2214,11 @@ void Qt5UKUIStyle::drawComplexControl(QStyle::ComplexControl control, const QSty
//we need to reinit our brush because it has QGradient without use option rect
QStyleOptionSlider handleOption = *slider;
handleOption.rect = handle;
if(horizontal)
handle.setY((option->rect.height() - handle.height()) / 2);
else
handle.setX((option->rect.width() - handle.width()) / 2);
sp->initSliderParameters(isUseDarkPalette(), &handleOption, widget);
QBrush hBrush;
@ -3392,7 +3433,6 @@ void Qt5UKUIStyle::drawControl(QStyle::ControlElement element, const QStyleOptio
}
painter->save();
painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
if (verticalTabs) {
int newX, newY, newRot;
if (tab->shape == QTabBar::RoundedEast || tab->shape == QTabBar::TriangularEast) {
@ -3411,15 +3451,18 @@ void Qt5UKUIStyle::drawControl(QStyle::ControlElement element, const QStyleOptio
}
if (!tab->icon.isNull()) {
painter->save();
painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
QIcon::Mode mode = (tab->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled;
QPixmap pixmap = tab->icon.pixmap(widget ? widget->window()->windowHandle() : 0, tab->iconSize,
mode, (tab->state & State_Selected) ? QIcon::On : QIcon::Off);
pixmap = proxy()->generatedIconPixmap(mode, pixmap, option);
QPixmap drawPixmap = HighLightEffect::ordinaryGeneratePixmap(pixmap, option, widget);
painter->drawPixmap(iconRect.x(), iconRect.y(), drawPixmap);
painter->restore();
}
proxy()->drawItemText(painter, textRect, alignment, tab->palette, tab->state & State_Enabled, tab->text, QPalette::WindowText);
proxy()->drawItemText(painter, textRect, alignment, tab->palette, tab->state & State_Enabled, tab->text, QPalette::ButtonText);
painter->restore();
//draw separate line
@ -3643,7 +3686,7 @@ void Qt5UKUIStyle::drawControl(QStyle::ControlElement element, const QStyleOptio
//if it's comobobox popup, set combobox popup size rect
if (isComboBox) {
int MenuItem_HMargin = proxy()->pixelMetric(PM_MenuVMargin, option, widget);
drawRect.adjust(MenuItem_HMargin, 0, -MenuItem_HMargin, 0);
drawRect.adjust(MenuItem_HMargin, sp->ComboBox_VMargin, -MenuItem_HMargin, -1 * sp->ComboBox_VMargin);
}
if (enable && (selected | sunken)) {
@ -4211,6 +4254,7 @@ void Qt5UKUIStyle::drawControl(QStyle::ControlElement element, const QStyleOptio
case CE_ShapedFrame:
if (const QStyleOptionFrame *f = qstyleoption_cast<const QStyleOptionFrame *>(option)) {
painter->save();
int frameShape = f->frameShape;
int frameShadow = QFrame::Plain;
if (f->state & QStyle::State_Sunken) {
@ -4235,12 +4279,14 @@ void Qt5UKUIStyle::drawControl(QStyle::ControlElement element, const QStyleOptio
}
if (frameShadow == QFrame::Plain) {
QPen oldPen = painter->pen();
painter->setPen(QPen(QBrush(f->palette.color(QPalette::Active, QPalette::Window)), lw));
painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
painter->setPen(QPen(QBrush(f->palette.color(QPalette::Active, QPalette::NoRole)), lw));
painter->drawLine(p1, p2);
painter->setPen(oldPen);
} else {
qDrawShadeLine(painter, p1, p2, f->palette, frameShadow == QFrame::Sunken, lw, mlw);
}
painter->restore();
break;
}
case QFrame::WinPanel:
@ -4250,6 +4296,7 @@ void Qt5UKUIStyle::drawControl(QStyle::ControlElement element, const QStyleOptio
Style::drawControl(element, option, painter, widget);
}
}
painter->restore();
break;
default:
return Style::drawControl(element, option, painter, widget);
@ -4290,9 +4337,9 @@ int Qt5UKUIStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *op
{
if (const QStyleOptionSlider *sl = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
if (sl->orientation == Qt::Horizontal)
return sl->rect.width() - proxy()->pixelMetric(PM_SliderLength, option, widget);
return sl->rect.width() - proxy()->pixelMetric(PM_SliderLength, option, widget) - 2 * sp->Slider_Margin;
else
return sl->rect.height() - proxy()->pixelMetric(PM_SliderLength, option, widget);
return sl->rect.height() - proxy()->pixelMetric(PM_SliderLength, option, widget)- 2 * sp->Slider_Margin;
} else {
return 0;
}
@ -4512,9 +4559,9 @@ QRect Qt5UKUIStyle::subControlRect(QStyle::ComplexControl control, const QStyleO
int sliderPos = sliderPositionFromValue(slider->minimum, slider->maximum, slider->sliderPosition,
proxy()->pixelMetric(PM_SliderSpaceAvailable, option, widget), slider->upsideDown);
if (horizontal) {
handleRect.moveLeft(sliderPos);
handleRect.moveLeft(sliderPos + sp->Slider_Margin);
} else {
handleRect.moveTop((sliderPos));
handleRect.moveTop((sliderPos + sp->Slider_Margin));
}
return visualRect(slider->direction, slider->rect, handleRect);
}
@ -5260,7 +5307,8 @@ QSize Qt5UKUIStyle::sizeFromContents(ContentsType ct, const QStyleOption *option
newSize.setWidth(qMax(w + sp->MenuItem_MarginWidth, sp->MenuItem_DefaultWidght));
newSize.setHeight(qMax(newSize.height() + sp->MenuItem_MarginHeight * 2, sp->MenuItem_DefaultHeight));
newSize.setHeight(qMax(newSize.height() + sp->MenuItem_MarginHeight * 2,
sp->MenuItem_DefaultHeight + (isComboBox ? (2 * sp->ComboBox_VMargin) : 0)));
if (widget) {
@ -5507,18 +5555,10 @@ QSize Qt5UKUIStyle::sizeFromContents(ContentsType ct, const QStyleOption *option
if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
const bool horizontal(slider->orientation == Qt::Horizontal);
if (horizontal) {
newSize.setWidth(newSize.height() * sp->m_scaleRatio2_1);
if (slider->tickPosition & QSlider::TicksAbove)
newSize.setHeight(newSize.height() - 3);
if (slider->tickPosition & QSlider::TicksBelow)
newSize.setHeight(newSize.height() - 3);
newSize.setHeight(newSize.height() + 2 * sp->Slider_Margin);
newSize.setWidth(qMax(newSize.width(), sp->Slider_DefaultLength));
} else {
newSize.setWidth(newSize.width() * sp->m_scaleRatio2_1);
if (slider->tickPosition & QSlider::TicksAbove)
newSize.setWidth(newSize.width() - 3);
if (slider->tickPosition & QSlider::TicksBelow)
newSize.setWidth(newSize.width() - 3);
newSize.setWidth(newSize.width() + 2 * sp->Slider_Margin);
newSize.setHeight(qMax(newSize.height(), sp->Slider_DefaultLength));
}
return newSize;

View File

@ -1,5 +1,6 @@
#include "qt5-ukui-style.h"
#include <QListView>
#include <QTreeView>
static QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth, int maxHeight = -1, int *lastVisibleLine = nullptr)
@ -340,6 +341,18 @@ QSize Qt5UKUIStyle::viewItemSize(const QStyleOptionViewItem *option, int role) c
case Qt::DecorationRole:
{
if (option->features & QStyleOptionViewItem::HasDecoration) {
if(widget){
if(qobject_cast<const QListView *>(widget)){
QSize size = qobject_cast<const QListView *>(widget)->iconSize();
return QSize(qMax(option->decorationSize.width(), size.width()),
qMax(option->decorationSize.height(), size.height()));
}
if(qobject_cast<const QTreeView *>(widget)){
QSize size = qobject_cast<const QTreeView *>(widget)->iconSize();
return QSize(qMax(option->decorationSize.width(), size.width()),
qMax(option->decorationSize.height(), size.height()));
}
}
return option->decorationSize;
}
break;