Isis 3 Programmer Reference
AbstractMultipleChoiceFilter.cpp
1
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include "AbstractMultipleChoiceFilter.h"
10
11#include <iostream>
12
13#include <QComboBox>
14#include <QHBoxLayout>
15#include <QMargins>
16#include <QString>
17#include <QStringList>
18
19
20namespace Isis {
21 AbstractMultipleChoiceFilter::AbstractMultipleChoiceFilter(
22 AbstractFilter::FilterEffectivenessFlag flag,
23 int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
24 nullify();
25 m_curChoice = new QString;
26 }
27
28 AbstractMultipleChoiceFilter::AbstractMultipleChoiceFilter(
29 AbstractMultipleChoiceFilter const &other) : AbstractFilter(other) {
30 nullify();
31 m_curChoice = new QString;
32
33 QStringList options;
34 for (int i = 0; i < other.m_combo->count(); i++)
35 options.append(other.m_combo->itemText(i));
36
37 createWidget(options);
38
39 m_combo->setCurrentIndex(other.m_combo->currentIndex());
40 }
41
42
43
44 AbstractMultipleChoiceFilter::~AbstractMultipleChoiceFilter() {
45 if (m_curChoice) {
46 delete m_curChoice;
47 m_curChoice = NULL;
48 }
49 }
50
51
52 void AbstractMultipleChoiceFilter::nullify() {
53 m_combo = NULL;
54 m_curChoice = NULL;
55 }
56
57
58 void AbstractMultipleChoiceFilter::createWidget(QStringList options) {
59 m_combo = new QComboBox;
60 foreach (QString option, options)
61 m_combo->addItem(option);
62
63 m_combo->setCurrentIndex(0);
64
65 *m_curChoice = m_combo->currentText();
66
67 connect(m_combo, SIGNAL(currentIndexChanged(QString)),
68 this, SLOT(updateCurChoice(QString)));
69
70 QHBoxLayout *layout = new QHBoxLayout;
71 QMargins margins = layout->contentsMargins();
72 margins.setTop(0);
73 margins.setBottom(0);
74 layout->setContentsMargins(margins);
75 layout->addWidget(m_combo);
76 layout->addStretch();
77
78 getMainLayout()->addLayout(layout);
79 }
80
81
82 QString const &AbstractMultipleChoiceFilter::getCurrentChoice() const {
83 return *m_curChoice;
84 }
85
86
87 void AbstractMultipleChoiceFilter::updateCurChoice(QString newChoice) {
88
89 *m_curChoice = newChoice;
90
91 emit filterChanged();
92 }
93}
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16