vendor: OpenCV 5.0.0 snapshot at 755e50675d97db9b7d449d8bd6b09888646f6c6e

This commit is contained in:
Gitea Mirror Bot
2026-08-22 00:11:13 +08:00
commit 12022378a3
3872 changed files with 2513409 additions and 0 deletions
+214
View File
@@ -0,0 +1,214 @@
#include "overview_panel.hpp"
#include <functional>
#include <math.h>
#include <memory>
#include <iostream>
#include <QMap>
#include <QSet>
#include <QString>
#include <QVBoxLayout>
#include <QWidget>
#include <QScrollArea>
#include "../controller/view_controller.hpp"
#include "../qtutil/stfl_query_widget.hpp"
#include "../qtutil/util.hpp"
#include "../stfl/element_group.hpp"
namespace cvv
{
namespace gui
{
OverviewPanel::OverviewPanel(
util::Reference<controller::ViewController> controller)
: controller{ controller }
{
qtutil::setDefaultSetting("overview", "imgzoom", "20");
QVBoxLayout *layout = new QVBoxLayout{};
setLayout(layout);
layout->setContentsMargins(0, 0, 0, 0);
queryWidget = new qtutil::STFLQueryWidget();
layout->addWidget(queryWidget);
table = new OverviewTable(controller);
layout->addWidget(table);
auto bottomArea = new QWidget{ this };
auto bottomLayout = new QHBoxLayout;
imgSizeSliderLabel = new QLabel{ "Zoom", bottomArea };
imgSizeSliderLabel->setMaximumWidth(50);
imgSizeSliderLabel->setAlignment(Qt::AlignRight);
bottomLayout->addWidget(imgSizeSliderLabel);
imgSizeSlider = new QSlider{ Qt::Horizontal, bottomArea };
imgSizeSlider->setMinimumWidth(50);
imgSizeSlider->setMaximumWidth(200);
imgSizeSlider->setMinimum(0);
imgSizeSlider->setMaximum(100);
imgSizeSlider->setSliderPosition(
qtutil::getSetting("overview", "imgzoom").toInt());
connect(imgSizeSlider, SIGNAL(valueChanged(int)), this,
SLOT(imgSizeSliderAction()));
bottomLayout->addWidget(imgSizeSlider);
bottomArea->setLayout(bottomLayout);
layout->addWidget(bottomArea);
initEngine();
connect(queryWidget, SIGNAL(showHelp(QString)), this,
SLOT(showHelp(QString)));
// connect(queryWidget, SIGNAL(userInputUpdate(QString)), this,
// SLOT(updateQuery(QString)));
connect(queryWidget, SIGNAL(filterSignal(QString)), this,
SLOT(filterQuery(QString)));
connect(queryWidget, SIGNAL(requestSuggestions(QString)), this,
SLOT(requestSuggestions(QString)));
}
void OverviewPanel::initEngine()
{
// raw and description filter
auto rawFilter = [](const OverviewTableRow &elem)
{
return elem.description();
};
queryEngine.addStringCmdFunc("raw", rawFilter, false);
queryEngine.addStringCmdFunc("description", rawFilter, false);
// file filter
queryEngine.addStringCmdFunc("file", [](const OverviewTableRow &elem)
{
return elem.file();
});
// function filter
queryEngine.addStringCmdFunc("function",
[](const OverviewTableRow &elem)
{
return elem.function();
});
// line filter
queryEngine.addIntegerCmdFunc("line", [](const OverviewTableRow &elem)
{ return elem.line(); });
// id filter
queryEngine.addIntegerCmdFunc("id", [](const OverviewTableRow &elem)
{
return elem.id();
});
// type filter
queryEngine.addStringCmdFunc("type", [](const OverviewTableRow &elem)
{
return elem.type();
});
//"number of images" filter
queryEngine.addIntegerCmdFunc("image_count",
[](const OverviewTableRow &elem)
{
return elem.call()->matrixCount();
});
//additional commands
//open call command
queryEngine.addAdditionalCommand("open",
[&](QStringList args, std::vector<stfl::ElementGroup<OverviewTableRow>>& groups)
{
openCommand(args, groups);
}, {"first_of_group", "last_of_group", "shown"});
}
void OverviewPanel::openCommand(QStringList args,
std::vector<stfl::ElementGroup<OverviewTableRow>>& groups)
{
if (args.contains("shown"))
{
for (auto &group : groups)
{
for (auto &elem : group.getElements())
{
controller->openCallTab(elem.id());
}
}
return;
}
if (args.contains("first_of_group") || args.contains("last_of_group"))
{
bool first = args.contains("first_of_group") ;
for (auto &group : groups)
{
if (group.size() > 0)
{
size_t index = first ? 0 : group.size() - 1;
size_t id = group.get(index).id();
controller->openCallTab(id);
}
}
}
}
void OverviewPanel::addElement(const util::Reference<const impl::Call> newCall)
{
OverviewTableRow row(newCall);
queryEngine.addNewElement(row);
table->updateRowGroups(queryEngine.reexecuteLastQuery());
}
void OverviewPanel::addElementBuffered(const util::Reference<const impl::Call> newCall)
{
elementBuffer.push_back(newCall);
}
void OverviewPanel::flushElementBuffer()
{
std::vector<OverviewTableRow> rows;
for (const util::Reference<const impl::Call> call : elementBuffer)
{
rows.push_back(OverviewTableRow(call));
}
queryEngine.addElements(std::move(rows));
table->updateRowGroups(queryEngine.reexecuteLastQuery());
elementBuffer.clear();
}
void OverviewPanel::removeElement(size_t id)
{
queryEngine.removeElements([id](OverviewTableRow elem)
{
return elem.id() == id;
});
table->removeElement(id);
}
void OverviewPanel::filterQuery(QString query)
{
table->updateRowGroups(queryEngine.query(query));
}
void OverviewPanel::updateQuery(QString query)
{
filterQuery(query);
}
void OverviewPanel::requestSuggestions(QString query)
{
queryWidget->showSuggestions(queryEngine.getSuggestions(query));
}
void OverviewPanel::imgSizeSliderAction()
{
controller->setSetting("overview", "imgzoom",
QString::number(imgSizeSlider->value()));
table->updateUI();
}
void OverviewPanel::showHelp(QString topic)
{
controller->openHelpBrowser(topic);
}
}
}