Add MataAvistas project (BudgetPro) as regular files

This commit is contained in:
Javier
2026-06-04 15:59:46 +02:00
parent 7643acf109
commit dccaa63bcc
644 changed files with 104937 additions and 1 deletions
@@ -0,0 +1,49 @@
cmake_minimum_required(VERSION 3.5)
SET(VERSION_SHORT 0.1)
project(MdiAreaWindowExample VERSION ${VERSION_SHORT})
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# qt库加载,最低要求5.8
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} 5.8 COMPONENTS Core Gui Widgets REQUIRED)
file(GLOB HEADER_FILES "${CMAKE_CURRENT_LIST_DIR}/*.h")
file(GLOB SOURCE_FILES "${CMAKE_CURRENT_LIST_DIR}/*.cpp")
file(GLOB UI_FILES "${CMAKE_CURRENT_LIST_DIR}/*.ui")
file(GLOB RESOURCE_FILES "${CMAKE_CURRENT_LIST_DIR}/*.qrc")
add_executable(MdiAreaWindowExample WIN32
${HEADER_FILES}
${SOURCE_FILES}
${UI_FILES}
${RESOURCE_FILES}
)
if(NOT TARGET SARibbonBar)
# 说明这个例子是单独加载
message(STATUS "NOT TARGET SARibbonBar find_package(SARibbonBar REQUIRED)")
find_package(SARibbonBar REQUIRED)
endif()
target_link_libraries(MdiAreaWindowExample PUBLIC SARibbonBar::SARibbonBar)
target_link_libraries(MdiAreaWindowExample PUBLIC
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets)
set_target_properties(MdiAreaWindowExample PROPERTIES
AUTOMOC ON
AUTORCC ON
AUTOUIC ON
CXX_EXTENSIONS OFF
DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}
VERSION ${SARIBBON_VERSION}
EXPORT_NAME MdiAreaWindowExample
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
install(TARGETS MdiAreaWindowExample
RUNTIME DESTINATION bin
LIBRARY DESTINATION bin
ARCHIVE DESTINATION lib
)
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="documentMode">
<bool>false</bool>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QMdiArea" name="mdiArea"/>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<property name="allowedAreas">
<set>Qt::LeftToolBarArea|Qt::RightToolBarArea</set>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<attribute name="toolBarArea">
<enum>LeftToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionadd_window"/>
</widget>
<widget class="QDockWidget" name="dockWidget">
<attribute name="dockWidgetArea">
<number>2</number>
</attribute>
<widget class="QWidget" name="dockWidgetContents"/>
</widget>
<action name="actionadd_window">
<property name="icon">
<iconset resource="icon.qrc">
<normaloff>:/mdiWindowApp/icon/add.svg</normaloff>:/mdiWindowApp/icon/add.svg</iconset>
</property>
<property name="text">
<string>add window</string>
</property>
</action>
</widget>
<resources>
<include location="icon.qrc"/>
</resources>
<connections/>
</ui>
@@ -0,0 +1,37 @@
#-------------------------------------------------
#
# Project created by QtCreator 2017-09-21T14:04:12
#
#-------------------------------------------------
QT += core gui
# SARibbon 1.x 版本后引入frameless库,必须要cpp17及以上
CONFIG += c++17
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MdiAreaWindowExample
TEMPLATE = app
SOURCES += main.cpp\
mdimainwindow.cpp
HEADERS += \
mdimainwindow.h
FORMS += \
MainWindow.ui
RESOURCES += \
icon.qrc
# 下面演示了如何把SARibbon引入
# 只需要下面2句话,只要把common.pri引入工程,就可以实现SARibbon的引入
include($$PWD/../../common.pri)
include($${SARIBBONBAR_PRI_FILE_PATH})
DESTDIR = $${SARIBBON_BIN_DIR}/bin
msvc {
QMAKE_CFLAGS += /utf-8
QMAKE_CXXFLAGS += /utf-8
}
@@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/mdiWindowApp">
<file>icon/add.svg</file>
</qresource>
</RCC>
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1645972462678" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3334" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M854.42 938.77H177.51V85.28h529.76l147.15 147.16z" fill="#949BA6" p-id="3335"></path><path d="M854.42 232.44H707.27V85.28z" fill="#FFC600" p-id="3336"></path><path d="M721.98 261.87c0 8.09 6.62 14.72 14.72 14.72h117.72v-44.15H721.98v29.43z" fill="#717582" p-id="3337"></path><path d="M236.37 247.15c-8.09 0-14.72-6.62-14.72-14.72v-88.29c0-8.09 6.62-14.72 14.72-14.72 8.09 0 14.72 6.62 14.72 14.72v88.29c0 8.1-6.62 14.72-14.72 14.72zM236.37 894.63c-8.09 0-14.72-6.62-14.72-14.72V350.16c0-8.09 6.62-14.72 14.72-14.72 8.09 0 14.72 6.62 14.72 14.72v529.75c0 8.1-6.62 14.72-14.72 14.72z" fill="#DFE1E4" p-id="3338"></path><path d="M236.37 291.3m-14.72 0a14.72 14.72 0 1 0 29.44 0 14.72 14.72 0 1 0-29.44 0Z" fill="#DFE1E4" p-id="3339"></path><path d="M913.28 423.74c-8.09 0-14.72 6.62-14.72 14.72V673.9c0 8.09 6.62 14.72 14.72 14.72 8.09 0 14.72-6.62 14.72-14.72V438.45c0-8.09-6.63-14.71-14.72-14.71z" fill="#090418" p-id="3340"></path><path d="M913.28 791.62m-14.72 0a14.72 14.72 0 1 0 29.44 0 14.72 14.72 0 1 0-29.44 0Z" fill="#090418" p-id="3341"></path><path d="M913.28 732.76m-14.72 0a14.72 14.72 0 1 0 29.44 0 14.72 14.72 0 1 0-29.44 0Z" fill="#090418" p-id="3342"></path><path d="M118.65 232.44m-14.72 0a14.72 14.72 0 1 0 29.44 0 14.72 14.72 0 1 0-29.44 0Z" fill="#090418" p-id="3343"></path><path d="M118.65 291.3m-14.72 0a14.72 14.72 0 1 0 29.44 0 14.72 14.72 0 1 0-29.44 0Z" fill="#090418" p-id="3344"></path><path d="M118.65 173.58m-14.72 0a14.72 14.72 0 1 0 29.44 0 14.72 14.72 0 1 0-29.44 0Z" fill="#090418" p-id="3345"></path><path d="M295.24 453.17h264.88c8.09 0 14.72-6.62 14.72-14.72s-6.62-14.72-14.72-14.72H295.24c-8.09 0-14.72 6.62-14.72 14.72s6.62 14.72 14.72 14.72zM604.26 438.45c0 8.09 6.62 14.72 14.72 14.72H736.7c8.09 0 14.72-6.62 14.72-14.72s-6.62-14.72-14.72-14.72H618.97c-8.09 0.01-14.71 6.63-14.71 14.72zM736.7 482.6H295.24c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.72 14.72 14.72H736.7c8.09 0 14.72-6.62 14.72-14.72-0.01-8.1-6.63-14.72-14.72-14.72zM295.24 688.61h264.88c8.09 0 14.72-6.62 14.72-14.72s-6.62-14.72-14.72-14.72H295.24c-8.09 0-14.72 6.62-14.72 14.72s6.62 14.72 14.72 14.72zM574.83 776.9H295.24c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.72 14.72 14.72h279.59c8.09 0 14.72-6.62 14.72-14.72-0.01-8.09-6.63-14.72-14.72-14.72zM736.7 659.18h-58.86c-8.09 0-14.72 6.62-14.72 14.72s6.62 14.72 14.72 14.72h58.86c8.09 0 14.72-6.62 14.72-14.72s-6.63-14.72-14.72-14.72zM295.24 364.87h58.86c8.09 0 14.72-6.62 14.72-14.72 0-8.09-6.62-14.72-14.72-14.72h-9.2l9.93-29.43h57.39l9.93 29.43h-9.2c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.72 14.72 14.72h58.86c8.09 0 14.72-6.62 14.72-14.72 0-8.09-6.62-14.72-14.72-14.72h-18.76L397.5 168.78c0-0.37-0.37-0.37-0.37-0.74-0.37-0.74-0.37-1.1-0.74-1.47-0.37-1.1-1.1-1.84-1.84-2.94-0.37-0.37-0.74-0.74-1.47-1.1-0.74-0.74-1.84-1.47-2.94-1.84-0.37-0.37-1.1-0.74-1.47-0.74-1.47-0.74-3.31-1.1-5.15-1.1H354.1c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.72 14.72 14.72h9.2L314 335.44h-18.76c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.71 14.72 14.71z m88.29-144.94l18.76 56.65h-37.52l18.76-56.65zM471.82 276.58h22.07v22.07c0 8.09 6.62 14.72 14.72 14.72 8.09 0 14.72-6.62 14.72-14.72v-22.07h22.07c8.09 0 14.72-6.62 14.72-14.72s-6.62-14.72-14.72-14.72h-22.07v-22.07c0-8.09-6.62-14.72-14.72-14.72-8.09 0-14.72 6.62-14.72 14.72v22.07h-22.07c-8.09 0-14.72 6.62-14.72 14.72s6.63 14.72 14.72 14.72zM648.4 615.04c0-8.09-6.62-14.72-14.72-14.72H295.24c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.72 14.72 14.72h338.45c8.09-0.01 14.71-6.63 14.71-14.72zM736.7 541.46H295.24c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.72 14.72 14.72H736.7c8.09 0 14.72-6.62 14.72-14.72-0.01-8.1-6.63-14.72-14.72-14.72zM736.7 718.04H295.24c-8.09 0-14.72 6.62-14.72 14.72 0 8.09 6.62 14.72 14.72 14.72H736.7c8.09 0 14.72-6.62 14.72-14.72-0.01-8.1-6.63-14.72-14.72-14.72z" fill="#090418" p-id="3346"></path><path d="M864.72 222.14L717.57 74.98c-1.47-1.47-2.94-2.58-4.78-3.31s-3.68-1.1-5.52-1.1H177.51c-8.09 0-14.72 6.62-14.72 14.72v853.49c0 8.09 6.62 14.72 14.72 14.72h676.91c8.09 0 14.72-6.62 14.72-14.72V232.44c0-1.84-0.37-4.05-1.1-5.52-0.75-1.84-1.85-3.68-3.32-4.78zM721.98 120.97l96.75 96.75h-96.75v-96.75zM839.7 924.06H192.23V100h500.32v132.44c0 8.09 6.62 14.72 14.72 14.72H839.7v676.9z" fill="#090418" p-id="3347"></path><path d="M618.97 673.9m-14.72 0a14.72 14.72 0 1 0 29.44 0 14.72 14.72 0 1 0-29.44 0Z" fill="#090418" p-id="3348"></path></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

@@ -0,0 +1,64 @@
#include "mdimainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QElapsedTimer>
#include "SARibbonBar.h"
// 重定向qdebug的打印
void log_out_put(QtMsgType type, const QMessageLogContext& context, const QString& msg);
/**
* @brief 重定向qdebug的打印
* @param type
* @param context
* @param msg
*/
void log_out_put(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
QByteArray localMsg = msg.toLocal8Bit();
switch (type) {
case QtDebugMsg:
fprintf(stdout, "%s |[Debug] (%s[%u],%s)\n", localMsg.constData(), context.function, context.line, context.file);
break;
case QtWarningMsg:
fprintf(stdout, "%s |[Warning] (%s[%u],%s)\n", localMsg.constData(), context.function, context.line, context.file);
break;
case QtCriticalMsg:
fprintf(stdout, "%s |[Critical] (%s[%u],%s)\n", localMsg.constData(), context.function, context.line, context.file);
break;
case QtFatalMsg:
fprintf(stdout, "%s |[Fatal] (%s[%u],%s)\n", localMsg.constData(), context.function, context.line, context.file);
abort();
break;
default:
fprintf(stdout, "%s |[Debug](%s[%u],%s)\n", localMsg.constData(), context.function, context.line, context.file);
break;
}
#ifndef QT_NO_DEBUG_OUTPUT
fflush(stdout);
#endif
}
int main(int argc, char* argv[])
{
// 以下是针对高分屏的设置,有高分屏需求都需要按照下面进行设置
SARibbonBar::initHighDpi();
QApplication a(argc, argv);
qInstallMessageHandler(log_out_put);
QFont f = a.font();
f.setFamily(u8"微软雅黑");
a.setFont(f);
QElapsedTimer cost;
cost.start();
MainWindow w;
qDebug() << "window build cost:" << cost.elapsed() << " ms";
w.show();
return (a.exec());
}
@@ -0,0 +1,81 @@
#include "mdimainwindow.h"
#include "ui_MainWindow.h"
#include <QTextEdit>
#include <QMdiSubWindow>
#include "SARibbonBar.h"
#include "SARibbonCategory.h"
#include "SARibbonPannel.h"
MainWindow::MainWindow(QWidget* parent) : SARibbonMainWindow(parent), ui(new Ui::MainWindow)
{
// 注意,你必须在ui文件中删除菜单栏,否则会拿到空的ribbon指针
ui->setupUi(this);
SARibbonBar* ribbon = ribbonBar();
SARibbonCategory* mainPage = new SARibbonCategory("Main");
ribbon->addCategoryPage(mainPage);
buildMainPage(mainPage);
// 如果你用qwk,你需要安装mdi窗口的最大最小化按钮到frameless框架中,你需要绑定此槽函数
connect(ui->mdiArea, &QMdiArea::subWindowActivated, this, &MainWindow::onMdiAreaSubWindowActivated);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::buildMainPage(SARibbonCategory* mainPage)
{
SARibbonPannel* mainPannel = new SARibbonPannel("operate");
mainPannel->addAction(ui->actionadd_window);
mainPage->addPannel(mainPannel);
}
void MainWindow::on_actionadd_window_triggered()
{
QMdiSubWindow* sub = ui->mdiArea->addSubWindow(new QTextEdit());
sub->setAttribute(Qt::WA_DeleteOnClose);
sub->show();
// 如果你用qwk,你需要安装mdi窗口的最大最小化按钮到frameless框架中,你需要绑定此槽函数
connect(sub, &QMdiSubWindow::windowStateChanged, this, &MainWindow::onSubWindowStateChanged);
}
/**
* @brief 窗口激活后对cornerwidget的绑定
*
* @note mdi窗口的状态变化会导致原来的cornerwidget删除,因此,subWindowActivated和windowStateChanged这两个都要绑定,
* 防止任意一种状态变化没有监测到,例如最大化状态关闭所有窗口,再新建一个窗口,这时候它不会触发windowStateChanged,但会触发subWindowActivated
* @param window
*/
void MainWindow::onMdiAreaSubWindowActivated(QMdiSubWindow* window)
{
#if SARIBBON_USE_3RDPARTY_FRAMELESSHELPER
if (window) {
SARibbonBar* ribbon = ribbonBar();
QWidget* cw = ribbon->cornerWidget(Qt::TopRightCorner);
if (cw && cw != m_mdiCornerWidget) {
qDebug() << "set mdi corner widget in frameless|onMdiAreaSubWindowActivated";
setFramelessHitTestVisible(cw);
m_mdiCornerWidget = cw;
}
}
#endif
}
/**
* @brief 子窗口变化对cornerwidget的绑定
* @param oldState
* @param newState
*/
void MainWindow::onSubWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)
{
#if SARIBBON_USE_3RDPARTY_FRAMELESSHELPER
if (newState.testFlag(Qt::WindowMaximized)) {
SARibbonBar* ribbon = ribbonBar();
QWidget* cw = ribbon->cornerWidget(Qt::TopRightCorner);
if (cw && cw != m_mdiCornerWidget) {
qDebug() << "set mdi corner widget in frameless|onSubWindowStateChanged";
setFramelessHitTestVisible(cw);
m_mdiCornerWidget = cw;
}
}
#endif
}
@@ -0,0 +1,33 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "SARibbonMainWindow.h"
namespace Ui
{
class MainWindow;
}
class QMdiSubWindow;
class SARibbonCategory;
class MainWindow : public SARibbonMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow();
private slots:
void on_actionadd_window_triggered();
void onMdiAreaSubWindowActivated(QMdiSubWindow* window);
void onSubWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState);
private:
void buildMainPage(SARibbonCategory* mainPage);
private:
Ui::MainWindow* ui;
QWidget* m_mdiCornerWidget { nullptr };
};
#endif // MAINWINDOW_H
@@ -0,0 +1,464 @@
#define __DBL_MIN_EXP__ (-1021)
#define __cpp_nontype_template_parameter_auto 201606L
#define __UINT_LEAST16_MAX__ 0xffff
#define __FLT16_HAS_QUIET_NAN__ 1
#define __ATOMIC_ACQUIRE 2
#define __FLT128_MAX_10_EXP__ 4932
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
#define __GCC_IEC_559_COMPLEX 2
#define __cpp_aggregate_nsdmi 201304L
#define __UINT_LEAST8_TYPE__ unsigned char
#define __SIZEOF_FLOAT80__ 16
#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16
#define __INTMAX_C(c) c ## L
#define __CHAR_BIT__ 8
#define __UINT8_MAX__ 0xff
#define __SCHAR_WIDTH__ 8
#define __WINT_MAX__ 0xffffffffU
#define __FLT32_MIN_EXP__ (-125)
#define __cpp_static_assert 201411L
#define __BFLT16_MIN_10_EXP__ (-37)
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __WCHAR_MAX__ 0x7fffffff
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
#define __GCC_IEC_559 2
#define __FLT32X_DECIMAL_DIG__ 17
#define __FLT_EVAL_METHOD__ 0
#define __cpp_binary_literals 201304L
#define __FLT64_DECIMAL_DIG__ 17
#define __CET__ 3
#define __cpp_noexcept_function_type 201510L
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
#define __cpp_variadic_templates 200704L
#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
#define __SIG_ATOMIC_TYPE__ int
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __cpp_variable_templates 201304L
#define __FLT32X_MAX_EXP__ 1024
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __FLT32_HAS_DENORM__ 1
#define __UINT_FAST8_MAX__ 0xff
#define __cpp_rvalue_reference 200610L
#define __cpp_nested_namespace_definitions 201411L
#define __DEC64_MAX_EXP__ 385
#define __INT8_C(c) c
#define __LDBL_HAS_INFINITY__ 1
#define __INT_LEAST8_WIDTH__ 8
#define __cpp_variadic_using 201611L
#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
#define __INT_LEAST8_MAX__ 0x7f
#define __cpp_attributes 200809L
#define __cpp_capture_star_this 201603L
#define __SHRT_MAX__ 0x7fff
#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L
#define __FLT64X_MAX_10_EXP__ 4932
#define __cpp_if_constexpr 201606L
#define __BFLT16_MAX_10_EXP__ 38
#define __BFLT16_MAX_EXP__ 128
#define __LDBL_IS_IEC_60559__ 1
#define __FLT64X_HAS_QUIET_NAN__ 1
#define __UINT_LEAST8_MAX__ 0xff
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
#define __UINTMAX_TYPE__ long unsigned int
#define __cpp_nsdmi 200809L
#define __BFLT16_DECIMAL_DIG__ 4
#define __linux 1
#define __DEC32_EPSILON__ 1E-6DF
#define __FLT_EVAL_METHOD_TS_18661_3__ 0
#define __OPTIMIZE__ 1
#define __UINT32_MAX__ 0xffffffffU
#define __GXX_EXPERIMENTAL_CXX0X__ 1
#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
#define __FLT128_MIN_EXP__ (-16381)
#define __WINT_MIN__ 0U
#define __FLT128_MIN_10_EXP__ (-4931)
#define __FLT32X_IS_IEC_60559__ 1
#define __INT_LEAST16_WIDTH__ 16
#define __SCHAR_MAX__ 0x7f
#define __FLT128_MANT_DIG__ 113
#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
#define __INT64_C(c) c ## L
#define __SSP_STRONG__ 3
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
#define __ATOMIC_SEQ_CST 5
#define _FORTIFY_SOURCE 3
#define __unix 1
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
#define __FLT32X_MANT_DIG__ 53
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
#define __cpp_aligned_new 201606L
#define __FLT32_MAX_10_EXP__ 38
#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x
#define __STDC_HOSTED__ 1
#define __DEC64_MIN_EXP__ (-382)
#define __cpp_decltype_auto 201304L
#define __DBL_DIG__ 15
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
#define __GXX_WEAK__ 1
#define __SHRT_WIDTH__ 16
#define __FLT32_IS_IEC_60559__ 1
#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
#define __DBL_IS_IEC_60559__ 1
#define __DEC32_MAX__ 9.999999E96DF
#define __cpp_threadsafe_static_init 200806L
#define __cpp_enumerator_attributes 201411L
#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x
#define __FLT32X_HAS_INFINITY__ 1
#define __unix__ 1
#define __INT_WIDTH__ 32
#define __STDC_IEC_559__ 1
#define __STDC_ISO_10646__ 201706L
#define __DECIMAL_DIG__ 21
#define __STDC_IEC_559_COMPLEX__ 1
#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
#define __gnu_linux__ 1
#define __INT16_MAX__ 0x7fff
#define __FLT64_MIN_EXP__ (-1021)
#define __FLT64X_MIN_10_EXP__ (-4931)
#define __LDBL_HAS_QUIET_NAN__ 1
#define __cpp_return_type_deduction 201304L
#define __FLT16_MIN_EXP__ (-13)
#define __FLT64_MANT_DIG__ 53
#define __FLT64X_MANT_DIG__ 64
#define __BFLT16_DIG__ 2
#define __GNUC__ 13
#define __GXX_RTTI 1
#define __pie__ 2
#define __MMX__ 1
#define __FLT_HAS_DENORM__ 1
#define __SIZEOF_LONG_DOUBLE__ 16
#define __BIGGEST_ALIGNMENT__ 16
#define __STDC_UTF_16__ 1
#define __FLT64_MAX_10_EXP__ 308
#define __BFLT16_IS_IEC_60559__ 0
#define __FLT16_MAX_10_EXP__ 4
#define __cpp_delegating_constructors 200604L
#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
#define __cpp_raw_strings 200710L
#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
#define __DBL_HAS_INFINITY__ 1
#define __INT64_MAX__ 0x7fffffffffffffffL
#define __SIZEOF_FLOAT__ 4
#define __HAVE_SPECULATION_SAFE_VALUE 1
#define __cpp_fold_expressions 201603L
#define __DEC32_MIN_EXP__ (-94)
#define __INTPTR_WIDTH__ 64
#define __UINT_LEAST32_MAX__ 0xffffffffU
#define __FLT32X_HAS_DENORM__ 1
#define __INT_FAST16_TYPE__ long int
#define __MMX_WITH_SSE__ 1
#define __LDBL_HAS_DENORM__ 1
#define __SEG_GS 1
#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16
#define __cplusplus 201703L
#define __cpp_ref_qualifiers 200710L
#define __DEC32_MIN__ 1E-95DF
#define __DEPRECATED 1
#define __cpp_rvalue_references 200610L
#define __DBL_MAX_EXP__ 1024
#define __WCHAR_WIDTH__ 32
#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
#define __DEC128_EPSILON__ 1E-33DL
#define __FLT16_DECIMAL_DIG__ 5
#define __SSE2_MATH__ 1
#define __ATOMIC_HLE_RELEASE 131072
#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
#define __amd64 1
#define __ATOMIC_HLE_ACQUIRE 65536
#define __GNUG__ 13
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
#define __SIZEOF_SIZE_T__ 8
#define __BFLT16_HAS_INFINITY__ 1
#define __FLT64X_MIN_EXP__ (-16381)
#define __SIZEOF_WINT_T__ 4
#define __FLT32X_DIG__ 15
#define __LONG_LONG_WIDTH__ 64
#define __cpp_initializer_lists 200806L
#define __FLT32_MAX_EXP__ 128
#define __cpp_hex_float 201603L
#define __GXX_ABI_VERSION 1018
#define __FLT_MIN_EXP__ (-125)
#define __GCC_HAVE_DWARF2_CFI_ASM 1
#define __x86_64 1
#define __cpp_lambdas 200907L
#define __INT_FAST64_TYPE__ long int
#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16
#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
#define __cpp_template_auto 201606L
#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16
#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x
#define __SIZEOF_POINTER__ 8
#define __SIZE_TYPE__ long unsigned int
#define __LP64__ 1
#define __DBL_HAS_QUIET_NAN__ 1
#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
#define __LDBL_MAX_EXP__ 16384
#define __DECIMAL_BID_FORMAT__ 1
#define __FLT64_MIN_10_EXP__ (-307)
#define __FLT16_MIN_10_EXP__ (-4)
#define __FLT64X_DECIMAL_DIG__ 21
#define __DEC128_MIN__ 1E-6143DL
#define __REGISTER_PREFIX__
#define __UINT16_MAX__ 0xffff
#define __FLT128_HAS_INFINITY__ 1
#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
#define __UINT8_TYPE__ unsigned char
#define __FLT_DIG__ 6
#define __DEC_EVAL_METHOD__ 2
#define __FLT_MANT_DIG__ 24
#define __LDBL_DECIMAL_DIG__ 21
#define __VERSION__ "13.3.0"
#define __UINT64_C(c) c ## UL
#define __cpp_unicode_characters 201411L
#define _STDC_PREDEF_H 1
#define __INT_LEAST32_MAX__ 0x7fffffff
#define __GCC_ATOMIC_INT_LOCK_FREE 2
#define __FLT128_MAX_EXP__ 16384
#define __FLT32_MANT_DIG__ 24
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
#define __FLT32X_MIN_EXP__ (-1021)
#define __STDC_IEC_60559_COMPLEX__ 201404L
#define __cpp_aggregate_bases 201603L
#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16
#define __FLT128_HAS_DENORM__ 1
#define __FLT32_DECIMAL_DIG__ 9
#define __FLT128_DIG__ 33
#define __INT32_C(c) c
#define __DEC64_EPSILON__ 1E-15DD
#define __ORDER_PDP_ENDIAN__ 3412
#define __DEC128_MIN_EXP__ (-6142)
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
#define __INT_FAST32_TYPE__ long int
#define __UINT_LEAST16_TYPE__ short unsigned int
#define __DEC128_MAX_EXP__ 6145
#define unix 1
#define __DBL_HAS_DENORM__ 1
#define __cpp_rtti 199711L
#define __UINT64_MAX__ 0xffffffffffffffffUL
#define __FLT_IS_IEC_60559__ 1
#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE"
#define __FLT64X_DIG__ 18
#define __INT8_TYPE__ signed char
#define __cpp_digit_separators 201309L
#define __ELF__ 1
#define __GCC_ASM_FLAG_OUTPUTS__ 1
#define __UINT32_TYPE__ unsigned int
#define __BFLT16_HAS_QUIET_NAN__ 1
#define __FLT_RADIX__ 2
#define __INT_LEAST16_TYPE__ short int
#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L
#define __UINTMAX_C(c) c ## UL
#define __FLT16_DIG__ 3
#define __k8 1
#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
#define __SIG_ATOMIC_MAX__ 0x7fffffff
#define __cpp_constexpr 201603L
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define __USER_LABEL_PREFIX__
#define __STDC_IEC_60559_BFP__ 201404L
#define __SIZEOF_PTRDIFF_T__ 8
#define __FLT64X_HAS_INFINITY__ 1
#define __SIZEOF_LONG__ 8
#define __LDBL_DIG__ 18
#define __FLT64_IS_IEC_60559__ 1
#define __x86_64__ 1
#define __FLT16_IS_IEC_60559__ 1
#define __FLT16_MAX_EXP__ 16
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
#define __GCC_CONSTRUCTIVE_SIZE 64
#define __FLT64_DIG__ 15
#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
#define __UINT_LEAST64_TYPE__ long unsigned int
#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16
#define __FLT_HAS_QUIET_NAN__ 1
#define __FLT_MAX_10_EXP__ 38
#define __LONG_MAX__ 0x7fffffffffffffffL
#define __FLT64X_HAS_DENORM__ 1
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
#define __FLT_HAS_INFINITY__ 1
#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8"
#define __cpp_unicode_literals 200710L
#define __UINT_FAST16_TYPE__ long unsigned int
#define __DEC64_MAX__ 9.999999999999999E384DD
#define __INT_FAST32_WIDTH__ 64
#define __CHAR16_TYPE__ short unsigned int
#define __PRAGMA_REDEFINE_EXTNAME 1
#define __SIZE_WIDTH__ 64
#define __SEG_FS 1
#define __INT_LEAST16_MAX__ 0x7fff
#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16
#define __DEC64_MANT_DIG__ 16
#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
#define __SIG_ATOMIC_WIDTH__ 32
#define __INT_LEAST64_TYPE__ long int
#define __INT16_TYPE__ short int
#define __INT_LEAST8_TYPE__ signed char
#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16
#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
#define __cpp_structured_bindings 201606L
#define __SIZEOF_INT__ 4
#define __DEC32_MAX_EXP__ 97
#define __INT_FAST8_MAX__ 0x7f
#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
#define __INTPTR_MAX__ 0x7fffffffffffffffL
#define __cpp_sized_deallocation 201309L
#define __cpp_guaranteed_copy_elision 201606L
#define linux 1
#define __FLT64_HAS_QUIET_NAN__ 1
#define __FLT32_MIN_10_EXP__ (-37)
#define __EXCEPTIONS 1
#define __UINT16_C(c) c
#define __PTRDIFF_WIDTH__ 64
#define __LDBL_MANT_DIG__ 64
#define __cpp_range_based_for 201603L
#define __INT_FAST16_WIDTH__ 64
#define __FLT64_HAS_INFINITY__ 1
#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x
#define __FLT16_HAS_INFINITY__ 1
#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
#define __code_model_small__ 1
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
#define __cpp_nontype_template_args 201411L
#define __DEC32_MANT_DIG__ 7
#define __k8__ 1
#define __INTPTR_TYPE__ long int
#define __UINT16_TYPE__ short unsigned int
#define __WCHAR_TYPE__ int
#define __pic__ 2
#define __UINTPTR_MAX__ 0xffffffffffffffffUL
#define __INT_FAST64_WIDTH__ 64
#define __cpp_decltype 200707L
#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F
#define __FLT32_HAS_INFINITY__ 1
#define __FLT64X_MAX_EXP__ 16384
#define __UINT_FAST64_TYPE__ long unsigned int
#define __cpp_inline_variables 201606L
#define __BFLT16_MIN_EXP__ (-125)
#define __INT_MAX__ 0x7fffffff
#define __linux__ 1
#define __INT64_TYPE__ long int
#define __FLT_MAX_EXP__ 128
#define __ORDER_BIG_ENDIAN__ 4321
#define __DBL_MANT_DIG__ 53
#define __cpp_inheriting_constructors 201511L
#define __SIZEOF_FLOAT128__ 16
#define __BFLT16_MANT_DIG__ 8
#define __DEC64_MIN__ 1E-383DD
#define __WINT_TYPE__ unsigned int
#define __UINT_LEAST32_TYPE__ unsigned int
#define __SIZEOF_SHORT__ 2
#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32
#define __SSE__ 1
#define __LDBL_MIN_EXP__ (-16381)
#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
#define __amd64__ 1
#define __WINT_WIDTH__ 32
#define __INT_LEAST64_WIDTH__ 64
#define __FLT32X_MAX_10_EXP__ 308
#define __cpp_namespace_attributes 201411L
#define __SIZEOF_INT128__ 16
#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16
#define __FLT64X_IS_IEC_60559__ 1
#define __LDBL_MAX_10_EXP__ 4932
#define __ATOMIC_RELAXED 0
#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
#define __INT_LEAST32_TYPE__ int
#define _LP64 1
#define __UINT8_C(c) c
#define __FLT64_MAX_EXP__ 1024
#define __SIZEOF_WCHAR_T__ 4
#define __GNUC_PATCHLEVEL__ 0
#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128
#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64
#define __FLT128_HAS_QUIET_NAN__ 1
#define __INTMAX_MAX__ 0x7fffffffffffffffL
#define __INT_FAST8_TYPE__ signed char
#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
#define __STDCPP_THREADS__ 1
#define __BFLT16_HAS_DENORM__ 1
#define __GNUC_STDC_INLINE__ 1
#define __FLT64_HAS_DENORM__ 1
#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
#define __FLT16_HAS_DENORM__ 1
#define __DBL_DECIMAL_DIG__ 17
#define __STDC_UTF_32__ 1
#define __INT_FAST8_WIDTH__ 8
#define __FXSR__ 1
#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L)
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#define __GCC_DESTRUCTIVE_SIZE 64
#define __INTMAX_WIDTH__ 64
#define __cpp_runtime_arrays 198712L
#define __FLT32_DIG__ 6
#define __UINT64_TYPE__ long unsigned int
#define __UINT32_C(c) c ## U
#define __cpp_alias_templates 200704L
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
#define __FLT128_IS_IEC_60559__ 1
#define __INT8_MAX__ 0x7f
#define __LONG_WIDTH__ 64
#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
#define __PIC__ 2
#define __INT32_MAX__ 0x7fffffff
#define __UINT_FAST32_TYPE__ long unsigned int
#define __FLT16_MANT_DIG__ 11
#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x
#define __CHAR32_TYPE__ unsigned int
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
#define __SSE2__ 1
#define __cpp_deduction_guides 201703L
#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16
#define __INT32_TYPE__ int
#define __SIZEOF_DOUBLE__ 8
#define __cpp_exceptions 199711L
#define __FLT_MIN_10_EXP__ (-37)
#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
#define __INT_LEAST32_WIDTH__ 32
#define __INTMAX_TYPE__ long int
#define __GLIBCXX_BITSIZE_INT_N_0 128
#define __FLT32X_HAS_QUIET_NAN__ 1
#define __ATOMIC_CONSUME 1
#define __GNUC_MINOR__ 3
#define __GLIBCXX_TYPE_INT_N_0 __int128
#define __UINTMAX_MAX__ 0xffffffffffffffffUL
#define __PIE__ 2
#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
#define __cpp_template_template_args 201611L
#define __DBL_MAX_10_EXP__ 308
#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L
#define __INT16_C(c) c
#define __STDC__ 1
#define __PTRDIFF_TYPE__ long int
#define __FLT32X_MIN_10_EXP__ (-307)
#define __UINTPTR_TYPE__ long unsigned int
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
#define __DEC128_MANT_DIG__ 34
#define __LDBL_MIN_10_EXP__ (-4931)
#define __cpp_generic_lambdas 201304L
#define __SSE_MATH__ 1
#define __SIZEOF_LONG_LONG__ 8
#define __cpp_user_defined_literals 200809L
#define __FLT128_DECIMAL_DIG__ 36
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
#define __FLT32_HAS_QUIET_NAN__ 1
#define __FLT_DECIMAL_DIG__ 9
#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL
#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
#define __SIZE_MAX__ 0xffffffffffffffffUL
#define __UINT_FAST8_TYPE__ unsigned char
#define _GNU_SOURCE 1
#define __cpp_init_captures 201304L
#define __ATOMIC_ACQ_REL 4
#define __ATOMIC_RELEASE 3