9#include "MeasureCountFilter.h"
13#include <QButtonGroup>
20#include <QRadioButton>
24#include "ControlMeasure.h"
25#include "ControlNet.h"
26#include "ControlPoint.h"
30 MeasureCountFilter::MeasureCountFilter(
31 AbstractFilter::FilterEffectivenessFlag flag,
32 int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
38 MeasureCountFilter::MeasureCountFilter(
const MeasureCountFilter &other) : AbstractFilter(other) {
42 m_count = other.m_count;
43 m_minimum = other.m_minimum;
44 m_countSpinBox->setValue(other.m_countSpinBox->value());
45 m_minMaxGroup->button(other.m_minMaxGroup->checkedId())->click();
50 MeasureCountFilter::~MeasureCountFilter() {
54 void MeasureCountFilter::init() {
56 m_countSpinBox = NULL;
62 void MeasureCountFilter::createWidget() {
63 QFont minMaxFont(
"SansSerif", 9);
64 QRadioButton *minButton =
new QRadioButton(
"Minimum");
65 minButton->setFont(minMaxFont);
66 QRadioButton *maxButton =
new QRadioButton(
"Maximum");
67 maxButton->setFont(minMaxFont);
69 m_minMaxGroup =
new QButtonGroup;
70 connect(m_minMaxGroup, SIGNAL(buttonClicked(
int)),
71 this, SLOT(updateMinMax(
int)));
72 m_minMaxGroup->addButton(minButton, 0);
73 m_minMaxGroup->addButton(maxButton, 1);
78 m_countSpinBox->setRange(0, std::numeric_limits< int >::max());
79 m_countSpinBox->setValue(m_count);
80 connect(m_countSpinBox, SIGNAL(valueChanged(
int)),
81 this, SLOT(updateMeasureCount(
int)));
85 getInclusiveExclusiveLayout()->itemAt(0)->widget()->setVisible(
false);
86 getInclusiveExclusiveLayout()->itemAt(1)->widget()->setVisible(
false);
87 getInclusiveExclusiveLayout()->addWidget(minButton);
88 getInclusiveExclusiveLayout()->addWidget(maxButton);
89 getInclusiveExclusiveLayout()->addSpacing(8);
90 getInclusiveExclusiveLayout()->addWidget(m_countSpinBox);
94 bool MeasureCountFilter::evaluate(
const QPair<QString, ControlNet *> *imageAndNet)
const {
95 return AbstractFilter::evaluateImageFromPointFilter(imageAndNet);
99 bool MeasureCountFilter::evaluate(
const ControlPoint *point)
const {
100 return (point->getMeasures().size() >= m_count && m_minimum) ||
101 (point->getMeasures().size() <= m_count && !m_minimum);
105 bool MeasureCountFilter::evaluate(
const ControlMeasure *measure)
const {
110 AbstractFilter *MeasureCountFilter::clone()
const {
111 return new MeasureCountFilter(*
this);
115 QString MeasureCountFilter::getImageDescription()
const {
116 QString description = AbstractFilter::getImageDescription();
118 if (getMinForSuccess() == 1) {
119 description +=
"point that ";
122 description +=
"doesn't have";
124 description +=
"has ";
127 description +=
"points that ";
130 description +=
"don't ";
132 description +=
"have ";
135 description +=
"at ";
138 description +=
"least ";
140 description +=
"most ";
142 description += QString::number(m_count) +
" measures";
148 QString MeasureCountFilter::getPointDescription()
const {
152 description =
"don't ";
154 description =
"have at ";
157 description +=
"least ";
159 description +=
"most ";
161 description += QString::number(m_count) +
" measures";
167 void MeasureCountFilter::updateMinMax(
int buttonId) {
168 m_minimum = (buttonId == 0);
169 emit filterChanged();
173 void MeasureCountFilter::updateMeasureCount(
int newCount) {
175 emit filterChanged();
This is free and unencumbered software released into the public domain.