mirror of
https://github.com/x-tools-author/x-tools.git
synced 2025-09-15 15:28:40 +08:00
feat: add icon assistant
This commit is contained in:
parent
700f16775a
commit
37bfd70e8a
14
.cmake/sak_font_fontawesome.cmake
Normal file
14
.cmake/sak_font_fontawesome.cmake
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
set(fontawesome_dir "fontawesome-free-6.5.1-desktop")
|
||||||
|
add_compile_definitions(SAK_FONTAWESOME_DIR="${fontawesome_dir}")
|
||||||
|
|
||||||
|
function(sak_import_fontawesome_for_target target)
|
||||||
|
add_custom_command(
|
||||||
|
TARGET ${target}
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E make_directory fonts
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_COMMAND} -E copy_directory_if_different
|
||||||
|
"${CMAKE_SOURCE_DIR}/resources/font/${fontawesome_dir}"
|
||||||
|
"${SAK_BINARY_DIR}/${target}/fonts/${fontawesome_dir}"
|
||||||
|
WORKING_DIRECTORY ${SAK_BINARY_DIR}/${target} VERBATIM)
|
||||||
|
endfunction(sak_import_fontawesome_for_target)
|
||||||
@ -37,6 +37,7 @@ set(BUILD_SHARED_LIBS OFF)
|
|||||||
include(.cmake/sak_common.cmake)
|
include(.cmake/sak_common.cmake)
|
||||||
include(.cmake/sak_environment.cmake)
|
include(.cmake/sak_environment.cmake)
|
||||||
include(.cmake/sak_deploy.cmake)
|
include(.cmake/sak_deploy.cmake)
|
||||||
|
include(.cmake/sak_font_fontawesome.cmake)
|
||||||
|
|
||||||
sak_get_last_commit(${CMAKE_CURRENT_SOURCE_DIR} "SAK")
|
sak_get_last_commit(${CMAKE_CURRENT_SOURCE_DIR} "SAK")
|
||||||
sak_get_last_commit_time(${CMAKE_CURRENT_SOURCE_DIR} "SAK")
|
sak_get_last_commit_time(${CMAKE_CURRENT_SOURCE_DIR} "SAK")
|
||||||
@ -86,6 +87,7 @@ sak_import_assistant("number")
|
|||||||
sak_import_assistant("string")
|
sak_import_assistant("string")
|
||||||
sak_import_assistant("broadcast")
|
sak_import_assistant("broadcast")
|
||||||
sak_import_assistant("filecheck")
|
sak_import_assistant("filecheck")
|
||||||
|
sak_import_assistant("fontawesome")
|
||||||
|
|
||||||
# QtSwissArmyKnife src files
|
# QtSwissArmyKnife src files
|
||||||
macro(sak_add_src src_dir_name)
|
macro(sak_add_src src_dir_name)
|
||||||
@ -136,6 +138,7 @@ endif()
|
|||||||
|
|
||||||
# QtSwissArmyKnife
|
# QtSwissArmyKnife
|
||||||
include_directories(src)
|
include_directories(src)
|
||||||
|
include_directories(3rd/qt/flowlayout)
|
||||||
file(GLOB APP_SOURCES "src/*.h" "src/*.cc" "src/*.ui" ".cmake/*.cmake")
|
file(GLOB APP_SOURCES "src/*.h" "src/*.cc" "src/*.ui" ".cmake/*.cmake")
|
||||||
|
|
||||||
option(SAK_BUILD_FOR_APP_SOTRE "Build for Microsoft/Apple app store." OFF)
|
option(SAK_BUILD_FOR_APP_SOTRE "Build for Microsoft/Apple app store." OFF)
|
||||||
@ -153,10 +156,15 @@ if(SAK_IMPORT_MODULE_BLUETOOTH)
|
|||||||
include_directories(src/optional/bluetooth)
|
include_directories(src/optional/bluetooth)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
file(GLOB_RECURSE SAK_QT_FLOWLAYOUT_SOURCES "${CMAKE_SOURCE_DIR}/3rd/qt/flowlayout/*.cpp"
|
||||||
|
"${CMAKE_SOURCE_DIR}/3rd/qt/flowlayout/*.h")
|
||||||
|
list(APPEND SAK_APP_SOURCES ${SAK_QT_FLOWLAYOUT_SOURCES})
|
||||||
|
|
||||||
sak_add_executable("QtSwissArmyKnife" ${SAK_APP_SOURCES})
|
sak_add_executable("QtSwissArmyKnife" ${SAK_APP_SOURCES})
|
||||||
sak_auto_execute_deployqt(QtSwissArmyKnife)
|
sak_auto_execute_deployqt(QtSwissArmyKnife)
|
||||||
sak_tar_target(QtSwissArmyKnife)
|
sak_tar_target(QtSwissArmyKnife)
|
||||||
sak_set_target_properties(QtSwissArmyKnife)
|
sak_set_target_properties(QtSwissArmyKnife)
|
||||||
|
sak_import_fontawesome_for_target(QtSwissArmyKnife)
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
QtSwissArmyKnife
|
QtSwissArmyKnife
|
||||||
PRIVATE glog::glog Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::WebSockets
|
PRIVATE glog::glog Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::WebSockets
|
||||||
|
|||||||
@ -40,3 +40,4 @@ add_subdirectory(number)
|
|||||||
add_subdirectory(string)
|
add_subdirectory(string)
|
||||||
add_subdirectory(broadcast)
|
add_subdirectory(broadcast)
|
||||||
add_subdirectory(filecheck)
|
add_subdirectory(filecheck)
|
||||||
|
add_subdirectory(fontawesome)
|
||||||
|
|||||||
6
src/assistants/fontawesome/CMakeLists.txt
Normal file
6
src/assistants/fontawesome/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
file(GLOB_RECURSE APP_ASSISITANT_OWN_SOURCE "${CMAKE_SOURCE_DIR}/3rd/qt/flowlayout/*.cpp"
|
||||||
|
"${CMAKE_SOURCE_DIR}/3rd/qt/flowlayout/*.h")
|
||||||
|
set(APP_ASSISITANT_OWN_LIBS Qt${QT_VERSION_MAJOR}::Widgets)
|
||||||
|
|
||||||
|
sak_add_assistant("fontawesome" "FontAwesomeAssistant")
|
||||||
|
sak_import_fontawesome_for_target(FontAwesomeAssistant)
|
||||||
22
src/assistants/fontawesome/main.cc
Normal file
22
src/assistants/fontawesome/main.cc
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
#include "sakcommonmainwindow.h"
|
||||||
|
#include "sakfontawesomeassistant.h"
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
QApplication* app = CreateCommonMainWindowApplication<SAKFontAwesomeAssistant>(
|
||||||
|
argc, argv, QObject::tr("Font Awesome Assistant"), "SAK.FontAwesomeAssistant");
|
||||||
|
int ret = app->exec();
|
||||||
|
app->deleteLater();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
124
src/assistants/fontawesome/src/sakfontawesome.cc
Normal file
124
src/assistants/fontawesome/src/sakfontawesome.cc
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#include "sakfontawesome.h"
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QFontDatabase>
|
||||||
|
#include <QJsonArray>
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonObject>
|
||||||
|
|
||||||
|
SAKFontAwesome::SAKFontAwesome(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
{
|
||||||
|
QFile file(fontAwesomePath() + "/metadata/icon-families.json");
|
||||||
|
if (file.open(QFile::ReadOnly)) {
|
||||||
|
QByteArray all = file.readAll();
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
QJsonDocument doc = QJsonDocument::fromJson(all);
|
||||||
|
QJsonObject obj = doc.object();
|
||||||
|
|
||||||
|
QStringList keys = obj.keys();
|
||||||
|
SAKFontAwesomeIconContext icon;
|
||||||
|
for (auto &key : keys) {
|
||||||
|
QJsonObject iconCtx = obj.value(key).toObject();
|
||||||
|
icon.terms.clear();
|
||||||
|
icon.unicode = iconCtx.value("unicode").toString().toInt(nullptr, 16);
|
||||||
|
icon.label = iconCtx.value("label").toString();
|
||||||
|
|
||||||
|
QJsonObject search = iconCtx.value("search").toObject();
|
||||||
|
QJsonArray terms = search.value("terms").toArray();
|
||||||
|
for (int i = 0; i < terms.count(); i++) {
|
||||||
|
icon.terms.append(terms.at(i).toString().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonObject svgs = iconCtx.value("svgs").toObject();
|
||||||
|
QJsonObject classic = svgs.value("classic").toObject();
|
||||||
|
QJsonObject family = classic.value("solid").toObject();
|
||||||
|
if (!family.isEmpty()) {
|
||||||
|
icon.family = familyToString(FreeSolid);
|
||||||
|
m_supportedIcons.append(icon);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
family = classic.value("brands").toObject();
|
||||||
|
if (!family.isEmpty()) {
|
||||||
|
icon.family = familyToString(BrandRegular);
|
||||||
|
m_supportedIcons.append(icon);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
family = classic.value("regular").toObject();
|
||||||
|
if (!family.isEmpty()) {
|
||||||
|
icon.family = familyToString(FreeRegular);
|
||||||
|
m_supportedIcons.append(icon);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
qWarning() << "open file failed:" << file.errorString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SAKFontAwesome *SAKFontAwesome::instance()
|
||||||
|
{
|
||||||
|
static SAKFontAwesome *instance = nullptr;
|
||||||
|
if (!instance) {
|
||||||
|
instance = new SAKFontAwesome(qApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<SAKFontAwesomeIconContext> SAKFontAwesome::supportedIcons() const
|
||||||
|
{
|
||||||
|
return m_supportedIcons;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SAKFontAwesome::addApplicationFonts()
|
||||||
|
{
|
||||||
|
QString path = fontAwesomePath() + "/otfs/";
|
||||||
|
QString name = path + QString("Font Awesome 6 Brands-Regular-400.otf");
|
||||||
|
int fontId = QFontDatabase::addApplicationFont(name);
|
||||||
|
qInfo() << "Install font:" << QFontDatabase::applicationFontFamilies(fontId);
|
||||||
|
|
||||||
|
name = path + QString("Font Awesome 6 Free-Regular-400.otf");
|
||||||
|
fontId = QFontDatabase::addApplicationFont(name);
|
||||||
|
qInfo() << "Install font:" << QFontDatabase::applicationFontFamilies(fontId);
|
||||||
|
|
||||||
|
name = path + QString("Font Awesome 6 Free-Solid-900.otf");
|
||||||
|
fontId = QFontDatabase::addApplicationFont(name);
|
||||||
|
qInfo() << QFontDatabase::applicationFontFamilies(fontId);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SAKFontAwesome::familyToString(int family)
|
||||||
|
{
|
||||||
|
switch (family) {
|
||||||
|
case BrandRegular:
|
||||||
|
return QString("Font Awesome 6 Brands Regular");
|
||||||
|
case FreeRegular:
|
||||||
|
return QString("Font Awesome 6 Free Regular");
|
||||||
|
case FreeSolid:
|
||||||
|
return QString("Font Awesome 6 Free Solid");
|
||||||
|
default:
|
||||||
|
qWarning() << "unknown font family:" << family;
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SAKFontAwesome::fontAwesomePath() const
|
||||||
|
{
|
||||||
|
QString path = QCoreApplication::applicationDirPath();
|
||||||
|
path += "/fonts/" + QString(SAK_FONTAWESOME_DIR);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
37
src/assistants/fontawesome/src/sakfontawesome.h
Normal file
37
src/assistants/fontawesome/src/sakfontawesome.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#ifndef SAKFONTAWESOME_H
|
||||||
|
#define SAKFONTAWESOME_H
|
||||||
|
|
||||||
|
#include <QList>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "sakfontawesomedatastruct.h"
|
||||||
|
|
||||||
|
class SAKFontAwesome : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
explicit SAKFontAwesome(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static SAKFontAwesome *instance();
|
||||||
|
|
||||||
|
void addApplicationFonts();
|
||||||
|
QList<SAKFontAwesomeIconContext> supportedIcons() const;
|
||||||
|
QString familyToString(int family);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QList<SAKFontAwesomeIconContext> m_supportedIcons;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString fontAwesomePath() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAKFONTAWESOME_H
|
||||||
34
src/assistants/fontawesome/src/sakfontawesomeassistant.cc
Normal file
34
src/assistants/fontawesome/src/sakfontawesomeassistant.cc
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#include "sakfontawesomeassistant.h"
|
||||||
|
#include "ui_sakfontawesomeassistant.h"
|
||||||
|
|
||||||
|
#include "flowlayout.h"
|
||||||
|
#include "sakfontawesome.h"
|
||||||
|
#include "sakfontawesomeicon.h"
|
||||||
|
|
||||||
|
SAKFontAwesomeAssistant::SAKFontAwesomeAssistant(QWidget *parent)
|
||||||
|
: QWidget{parent}
|
||||||
|
, ui(new Ui::SAKFontAwesomeAssistant)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
SAKFontAwesome::instance()->addApplicationFonts();
|
||||||
|
auto *l = new FlowLayout();
|
||||||
|
ui->widget->setLayout(l);
|
||||||
|
|
||||||
|
auto icons = SAKFontAwesome::instance()->supportedIcons();
|
||||||
|
for (auto &icon : icons) {
|
||||||
|
auto iconWidget = new SAKFontAwesomeIcon(icon);
|
||||||
|
l->addWidget(iconWidget);
|
||||||
|
connect(ui->lineEditFilter, &QLineEdit::editingFinished, this, [=]() {
|
||||||
|
iconWidget->setFilter(ui->lineEditFilter->text().trimmed().toUpper());
|
||||||
|
});
|
||||||
|
iconWidget->setFilter(ui->lineEditFilter->text().trimmed().toUpper());
|
||||||
|
}
|
||||||
|
}
|
||||||
28
src/assistants/fontawesome/src/sakfontawesomeassistant.h
Normal file
28
src/assistants/fontawesome/src/sakfontawesomeassistant.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#ifndef SAKFONTAWESOMEASSISTANT_H
|
||||||
|
#define SAKFONTAWESOMEASSISTANT_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class SAKFontAwesomeAssistant;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SAKFontAwesomeAssistant : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit SAKFontAwesomeAssistant(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::SAKFontAwesomeAssistant *ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAKFONTAWESOMEASSISTANT_H
|
||||||
53
src/assistants/fontawesome/src/sakfontawesomeassistant.ui
Normal file
53
src/assistants/fontawesome/src/sakfontawesomeassistant.ui
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>SAKFontAwesomeAssistant</class>
|
||||||
|
<widget class="QWidget" name="SAKFontAwesomeAssistant">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>711</width>
|
||||||
|
<height>356</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Font Awesome Assistant</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Filter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="lineEditFilter"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
|
<property name="widgetResizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>691</width>
|
||||||
|
<height>307</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="widget" native="true"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
30
src/assistants/fontawesome/src/sakfontawesomedatastruct.h
Normal file
30
src/assistants/fontawesome/src/sakfontawesomedatastruct.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#ifndef SAKFONTAWESOMEASSISTANTDATASTTRUCT_H
|
||||||
|
#define SAKFONTAWESOMEASSISTANTDATASTTRUCT_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
struct SAKFontAwesomeIconContext
|
||||||
|
{
|
||||||
|
QString label;
|
||||||
|
int unicode;
|
||||||
|
QString family;
|
||||||
|
QStringList terms;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum SAKFontAwesomeFamily
|
||||||
|
{
|
||||||
|
BrandRegular,
|
||||||
|
FreeRegular,
|
||||||
|
FreeSolid,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAKFONTAWESOMEASSISTANTDATASTTRUCT_H
|
||||||
55
src/assistants/fontawesome/src/sakfontawesomeicon.cc
Normal file
55
src/assistants/fontawesome/src/sakfontawesomeicon.cc
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#include "sakfontawesomeicon.h"
|
||||||
|
#include "ui_sakfontawesomeicon.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QClipboard>
|
||||||
|
#include <QFont>
|
||||||
|
|
||||||
|
SAKFontAwesomeIcon::SAKFontAwesomeIcon(const SAKFontAwesomeIconContext &ctx, QWidget *parent)
|
||||||
|
: QWidget{parent}
|
||||||
|
, ui(new Ui::SAKFontAwesomeIcon)
|
||||||
|
, m_ctx(ctx)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
ui->labelUnicode->setText(QString::number(m_ctx.unicode));
|
||||||
|
ui->labelIcon->setText(QString(QChar(m_ctx.unicode)));
|
||||||
|
QFont font = ui->labelIcon->font();
|
||||||
|
font.setPixelSize(48);
|
||||||
|
font.setFamily(m_ctx.family);
|
||||||
|
ui->labelIcon->setFont(font);
|
||||||
|
setFixedSize(96, 96);
|
||||||
|
|
||||||
|
QString toolTip = QString("unicode: %1\n").arg(ctx.unicode);
|
||||||
|
toolTip.append(QString("label: %1\n").arg(ctx.label));
|
||||||
|
toolTip.append(QString("terms: %1\n").arg(ctx.terms.join(",")).toLower());
|
||||||
|
toolTip.append(QString("family: %1").arg(ctx.family));
|
||||||
|
ui->pushButton->setToolTip(toolTip);
|
||||||
|
connect(ui->pushButton, &QPushButton::clicked, this, [=]() {
|
||||||
|
QApplication::clipboard()->setText(toolTip);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void SAKFontAwesomeIcon::setFilter(const QString &filter)
|
||||||
|
{
|
||||||
|
if (filter.isEmpty()) {
|
||||||
|
show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto &term : m_ctx.terms) {
|
||||||
|
if (term.contains(filter)) {
|
||||||
|
show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hide();
|
||||||
|
}
|
||||||
32
src/assistants/fontawesome/src/sakfontawesomeicon.h
Normal file
32
src/assistants/fontawesome/src/sakfontawesomeicon.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/***************************************************************************************************
|
||||||
|
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
|
||||||
|
*
|
||||||
|
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
|
||||||
|
*
|
||||||
|
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
|
||||||
|
* code directory.
|
||||||
|
**************************************************************************************************/
|
||||||
|
#ifndef SAKFONTAWESOMEICON_H
|
||||||
|
#define SAKFONTAWESOMEICON_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
#include "sakfontawesomedatastruct.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class SAKFontAwesomeIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SAKFontAwesomeIcon : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit SAKFontAwesomeIcon(const SAKFontAwesomeIconContext &ctx, QWidget *parent = nullptr);
|
||||||
|
void setFilter(const QString &filter);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::SAKFontAwesomeIcon *ui;
|
||||||
|
SAKFontAwesomeIconContext m_ctx;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAKFONTAWESOMEICON_H
|
||||||
60
src/assistants/fontawesome/src/sakfontawesomeicon.ui
Normal file
60
src/assistants/fontawesome/src/sakfontawesomeicon.ui
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>SAKFontAwesomeIcon</class>
|
||||||
|
<widget class="QWidget" name="SAKFontAwesomeIcon">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>159</width>
|
||||||
|
<height>136</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string notr="true">Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="labelUnicode">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Info</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="3">
|
||||||
|
<widget class="QLabel" name="labelIcon">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
Loading…
Reference in New Issue
Block a user