Isis 3 Programmer Reference
MeasureCountFilter.cpp
1
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include "MeasureCountFilter.h"
10
11#include <iostream>
12
13#include <QButtonGroup>
14#include <QFont>
15#include <QHBoxLayout>
16#include <QLabel>
17#include <QLineEdit>
18#include <QMargins>
19#include <QPair>
20#include <QRadioButton>
21#include <QSpinBox>
22#include <QString>
23
24#include "ControlMeasure.h"
25#include "ControlNet.h"
26#include "ControlPoint.h"
27
28
29namespace Isis {
30 MeasureCountFilter::MeasureCountFilter(
31 AbstractFilter::FilterEffectivenessFlag flag,
32 int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
33 init();
34 createWidget();
35 }
36
37
38 MeasureCountFilter::MeasureCountFilter(const MeasureCountFilter &other) : AbstractFilter(other) {
39 init();
40 createWidget();
41
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();
46 }
47
48
49
50 MeasureCountFilter::~MeasureCountFilter() {
51 }
52
53
54 void MeasureCountFilter::init() {
55 m_minMaxGroup = NULL;
56 m_countSpinBox = NULL;
57 m_count = 0;
58 m_minimum = true;
59 }
60
61
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);
68
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);
74
75 minButton->click();
76
77 m_countSpinBox = new QSpinBox;
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)));
82
83 // hide inclusive and exclusive buttons,
84 // and add spinbox for min measure m_count
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);
91 }
92
93
94 bool MeasureCountFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
95 return AbstractFilter::evaluateImageFromPointFilter(imageAndNet);
96 }
97
98
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);
102 }
103
104
105 bool MeasureCountFilter::evaluate(const ControlMeasure *measure) const {
106 return true;
107 }
108
109
110 AbstractFilter *MeasureCountFilter::clone() const {
111 return new MeasureCountFilter(*this);
112 }
113
114
115 QString MeasureCountFilter::getImageDescription() const {
116 QString description = AbstractFilter::getImageDescription();
117
118 if (getMinForSuccess() == 1) {
119 description += "point that ";
120
121 if (!inclusive())
122 description += "doesn't have";
123
124 description += "has ";
125 }
126 else {
127 description += "points that ";
128
129 if (!inclusive())
130 description += "don't ";
131
132 description += "have ";
133 }
134
135 description += "at ";
136
137 if (m_minimum)
138 description += "least ";
139 else
140 description += "most ";
141
142 description += QString::number(m_count) + " measures";
143
144 return description;
145 }
146
147
148 QString MeasureCountFilter::getPointDescription() const {
149 QString description;
150
151 if (!inclusive())
152 description = "don't ";
153
154 description = "have at ";
155
156 if (m_minimum)
157 description += "least ";
158 else
159 description += "most ";
160
161 description += QString::number(m_count) + " measures";
162
163 return description;
164 }
165
166
167 void MeasureCountFilter::updateMinMax(int buttonId) {
168 m_minimum = (buttonId == 0);
169 emit filterChanged();
170 }
171
172
173 void MeasureCountFilter::updateMeasureCount(int newCount) {
174 m_count = newCount;
175 emit filterChanged();
176 }
177}
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16