diff --git a/DemoGallery/main.cpp b/DemoGallery/main.cpp new file mode 100644 index 0000000..72b70ac --- /dev/null +++ b/DemoGallery/main.cpp @@ -0,0 +1,296 @@ +#include +#include + +#ifdef _WINDOWS +#include +#include +#endif +#include +#include +#include +#include "YSGraphic_Core/DemoGallery/AfterglowPlot.h" +#include "YSGraphic_Core/DemoGallery/DemoGallery.h" +#include "YSGraphic_Core/DemoGallery/PlanispherePlot.h" +#include "YSGraphic_Core/DemoGallery/SpectrumPlot.h" +#include "YSGraphic_Core/DemoGallery/WaterFallPlot.h" +#include "YSGraphic_Core/GenerateMockData.h" +#include "YSGraphic_Core/base/RingBuffer.hpp" +#include "YSGraphic_Core/base/Graphic.h" +#include "YSGraphic_Core/base/Plot.h" +#include "YSGraphic_Core/component/Table/Table_View.h" +#include "YSGraphic_Core/component/simple_widget.h" +#include "YSGraphic_Core/plottable/Afterglow.h" +#include "YSGraphic_Core/plottable/Planisphere.h" +#include "YSGraphic_Core/plottable/Planisphere_p.h" +#include "YSGraphic_Core/plottable/Spectrum.h" +#include "YSGraphic_Core/plottable/Spectrum_p.h" +#include "YSGraphic_Core/plottable/WaterFall.h" +#include "YSGraphic_Core/plottable/WaterFall_p.h" +#include "YSGraphic_Core/base/RingBuffer.hpp" +YSG::RingBuffer mRingBuffer{}; +int mBufferSize = 9; + +void print(const QString& prefix = "") { + int* list = mRingBuffer.list(); + QVector listData; + for(int i = 0; i < mRingBuffer.n; ++i){ + listData.push_back(list[i]); + } + int* buffer = reinterpret_cast(mRingBuffer.mData); + QVector bufferData; + for(int i = 0; i < mRingBuffer.m; ++i){ + bufferData.push_back(buffer[i]); + } + qDebug() << prefix << listData << " " << bufferData; + //qDebug() << "dataArray:" << dataArray; +} + +void f() { + mRingBuffer.isLeft = true; + mBufferSize = 7; + mRingBuffer.resize(sizeof(int), 4, mBufferSize); + QVector data(mBufferSize); + for(int i = 0; i < mBufferSize; ++i) { + //data[i] = i; + data[i] = -1; + } + std::memcpy(mRingBuffer.mData, data.data(), sizeof(int) * data.size()); + + for(int i = 1; i < 20; ++i) { + int data = i * 10; + mRingBuffer.pushData(reinterpret_cast(&data)); + print(QString("%1:").arg(i)); + } +} + +namespace Table_Space { + + struct Base_Table_Model { + virtual ~Base_Table_Model() = default; + using Len_Type = int; + using Index_Type = int; + enum Expand_Type { + None, + Left_UP, + Right_Down, + }; + enum Data_Type { + Parent, + Son, + Normal + }; + struct Base_Data { + virtual ~Base_Data() = default; + virtual void paint(QPainter* painter, QRect rect) = 0; + QWidget* widget{}; + }; + struct Base_Info { + virtual ~Base_Info() = default; + Len_Type len = 0; + virtual void paint(QPainter* painter, QRect rect) = 0; + }; + virtual void insert_row(Index_Type pos, std::vector> rows, Expand_Type expand) = 0; + virtual void insert_col(Index_Type pos, std::vector> cols, Expand_Type expand) = 0; + virtual void remove_row(Index_Type pos, Index_Type row) = 0; + virtual void remove_col(Index_Type pos, Index_Type col) = 0; + virtual void merge(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) = 0; + virtual void split(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) = 0; + virtual QPoint span(Index_Type col, Index_Type row) = 0; // 获取某一个元素 横跨行数,列数 + virtual std::shared_ptr data(Index_Type col, Index_Type row) = 0; + virtual std::shared_ptr parent(Index_Type col, Index_Type row) = 0; + virtual Data_Type type(Index_Type col, Index_Type row) = 0; + int col_space = 14; + int row_space = 14; + }; + + struct Table_Model : public Base_Table_Model { + struct Data : Base_Data { + std::shared_ptr parent = nullptr; + void paint(QPainter* painter, QRect rect) override { + painter->fillRect(rect, Qt::red); + painter->drawText(rect, Qt::AlignCenter, text); + } + QString text; + Data_Type type; + }; + using Dp = std::shared_ptr; + using Dpl = std::vector; + struct Info : Base_Info { + void paint(QPainter* painter, QRect rect) override { + painter->fillRect(rect, Qt::red); + painter->drawText(rect, Qt::AlignCenter, text); + } + QString text; + Dpl data; + }; + + ~Table_Model() override; + + void check_all() { + + } + + void insert_row(Index_Type pos, std::vector> rows, Expand_Type expand) override { + + } + + void insert_col(Index_Type pos, std::vector> insert_cols, Expand_Type expand) override { + + } + + void remove_row(Index_Type pos, Index_Type num) override { + auto start = rows.begin() + pos; + rows.erase(start, start + num); + const auto n = rows.size(); + for(int i = 0; i < n; ++i) { + auto& l = cols.at(i); + auto s = l->data.begin() + pos; + l->data.erase(s, s + num); + } + } + + void remove_col(Index_Type pos, Index_Type num) override { + auto start = cols.begin() + pos; + cols.erase(start, start + num); + const auto n = rows.size(); + for(int i = 0; i < n; ++i) { + auto& l = rows.at(i); + auto s = l->data.begin() + pos; + l->data.erase(s, s + num); + } + } + + void merge(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) override { + const auto par = cols.at(col)->data.at(row); + const auto cn = cols.size(); + const auto rn = rows.size(); + for (auto c = col; c < cn; ++c) { + for (auto r = row; r < rn; ++r) { + const auto d = cols.at(c)->data.at(r); + d->type = Son; + d->parent = par; + } + } + par->type = Parent; + } + + void split(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) override { + const auto cn = cols.size(); + const auto rn = rows.size(); + for (auto c = col; c < cn; ++c) { + for (auto r = row; r < rn; ++r) { + const auto d = cols.at(c)->data.at(r); + d->type = Normal; + d->parent = d; + } + } + } + + QPoint span(Index_Type col, Index_Type row) override { + const auto d = cols.at(col)->data.at(row); + if (d->type == Normal) return {1, 1}; + if (d->type == Son) return {0, 0}; + if (d->type == Parent) { + Index_Type cur_col = col + 1; + while (cur_col < cols.size()) { + auto c = cols.at(cur_col)->data.at(row); + if (c->parent != d) break; + cur_col++; + } + Index_Type cur_row = row + 1; + while (cur_row < rows.size()) { + auto c = rows.at(col)->data.at(cur_row); + if (c->parent != d) break; + cur_row++; + } + return {cur_col - col, cur_row - row}; + } + printf("span unknown type[%d]!", d->type); + ASSERT(false, "span unknown type!"); + } + + std::shared_ptr data(Index_Type col, Index_Type row) override { + return cols.at(col)->data.at(row); + } + std::shared_ptr parent(Index_Type col, Index_Type row) override { + auto d = cols.at(col)->data.at(row); + return d->parent; + } + Data_Type type(Index_Type col, Index_Type row) override { + auto d = cols.at(col)->data.at(row); + return d->type; + } + private: + std::vector> cols; + std::vector> rows; + }; +} + + + +class Base_Widget : public QWidget { +public: + Base_Widget() { + // 初始化按钮,放置在 widget 中 + QPushButton *btn = new QPushButton("你好", this); + btn->setGeometry(50, 50, 500, 30); // 设置按钮的位置和大小 + + QPushButton *btn2 = new QPushButton("按钮2", this); + btn2->setGeometry(150, 150, 100, 30); // 这个按钮部分会超出父控件区域 + } + +protected: + void paintEvent(QPaintEvent* event) override { + QPainter painter(this); + + // 设置父控件背景颜色 + painter.fillRect(rect(), Qt::black); + + // 定义裁剪区域(在父控件内的有效区域) + QRegion region(0, 0, 300, 300); // 设置裁剪区域为 300x300,超出部分隐藏 + setMask(region); // 设置掩膜,超出区域将不会显示 + + QWidget::paintEvent(event); // 默认绘制子控件 + } +}; + +int main(int argc, char *argv[]) { + QApplication app(argc, argv); + + + QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); +#ifdef _WINDOWS + SetConsoleOutputCP(CP_UTF8); + system("chcp 65001"); + //setbuf(stdout, 0); +#endif + QElapsedTimer timer; + timer.start(); + DemoGallery w; + + //Base_Widget w; + w.resize(1000, 600); + w.show(); + + + + // YSG::Graphic g; + // g.resize(1000, 600); + // g.show(); + +// auto it = new YSG::SelectColorDialog(); +// it->resize(1000, 600); +// it->show(); + + + + YSG::startAllRenderThread(); + qDebug() << "启动耗时 " << timer.elapsed(); + + + + //f(); + + + return QApplication::exec(); +} diff --git a/main.cmake b/main.cmake index 91f2518..18a6c17 100644 --- a/main.cmake +++ b/main.cmake @@ -23,3 +23,10 @@ set_property(TARGET YSGraphic_Core PROPERTY AUTORCC ON) target_link_libraries(YSGraphic_Core PUBLIC ${Core}) + +set(dir "${CMAKE_CURRENT_LIST_DIR}/DemoGallery") +file(GLOB_RECURSE srcs "${dir}/*.c" "${dir}/*.cpp" "${dir}/*.h" "${dir}/*.hpp") +add_executable(DemoGallery ${srcs}) +target_link_libraries(DemoGallery PUBLIC YSGraphic_Core) + +