Isis 3 Programmer Reference
AbstractFilterSelector.cpp
1
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include "AbstractFilterSelector.h"
10
11#include <algorithm>
12#include <iostream>
13
14#include <QComboBox>
15#include <QHBoxLayout>
16#include <QIcon>
17#include <QPushButton>
18#include <QWriteLocker>
19
20#include "AbstractFilter.h"
21#include "FileName.h"
22#include "PointIdFilter.h"
23
24
25using std::nothrow;
26using std::swap;
27
28
29namespace Isis {
30 AbstractFilterSelector::AbstractFilterSelector() {
31 nullify();
32 }
33
34
35 AbstractFilterSelector::~AbstractFilterSelector() {
36 deleteFilter();
37 }
38
39
40 bool AbstractFilterSelector::hasFilter() const {
41 return m_filter != NULL;
42 }
43
44
45 bool AbstractFilterSelector::hasFilter(bool (AbstractFilter::*meth)() const) const {
46 return m_filter && (m_filter->*meth)();
47 }
48
49
50 QString AbstractFilterSelector::getDescription(QString(AbstractFilter::*meth)() const) const {
51 QString description;
52 if (m_filter) {
53 description = (m_filter->*meth)();
54 }
55
56 return description;
57 }
58
59
60 AbstractFilterSelector &AbstractFilterSelector::operator=(const AbstractFilterSelector &other) {
61 getSelector()->setCurrentIndex(other.getSelector()->currentIndex());
62 if (m_filter && other.m_filter) {
63 setFilter(other.m_filter->clone());
64 }
65
66 return *this;
67 }
68
69
70 void AbstractFilterSelector::nullify() {
71 m_closeButton = NULL;
72 m_filter = NULL;
73 m_mainLayout = NULL;
74 m_selector = NULL;
75 }
76
77
78 void AbstractFilterSelector::createSelector() {
79 m_closeButton = new QPushButton;
80 m_closeButton->setIcon(QIcon(FileName("$ISISROOT/appdata/images/icons/editdelete.png").expanded()));
81 connect(m_closeButton, SIGNAL(clicked()), this, SLOT(sendClose()));
82
83 m_selector = new QComboBox;
84 m_selector->addItem("---- select ----");
85 m_selector->insertSeparator(m_selector->count());
86 connect(m_selector, SIGNAL(currentIndexChanged(int)),
87 this, SLOT(changeFilter(int)));
88
89 m_mainLayout = new QHBoxLayout;
90 m_mainLayout->setContentsMargins(0, 0, 0, 0);
91 m_mainLayout->addWidget(m_closeButton);
92 m_mainLayout->addWidget(m_selector);
93 m_mainLayout->addStretch();
94 m_mainLayout->setAlignment(m_closeButton, Qt::AlignTop);
95 m_mainLayout->setAlignment(m_selector, Qt::AlignTop);
96
97
98 setLayout(m_mainLayout);
99 }
100
101
102 QComboBox *AbstractFilterSelector::getSelector() const {
103 return m_selector;
104 }
105
106
107 QHBoxLayout *AbstractFilterSelector::getMainLayout() const {
108 return m_mainLayout;
109 }
110
111
112 AbstractFilter *AbstractFilterSelector::getFilter() const {
113 return m_filter;
114 }
115
116
117 void AbstractFilterSelector::setFilter(AbstractFilter *someFilter) {
118 if (m_filter) {
119 delete m_filter;
120 m_filter = NULL;
121 }
122
123 m_filter = someFilter;
124 connect(getFilter(), SIGNAL(filterChanged()),
125 this, SIGNAL(filterChanged()));
126 getMainLayout()->insertWidget(2, getFilter());
127 }
128
129
130 void AbstractFilterSelector::deleteFilter() {
131 if (m_filter) {
132 delete m_filter;
133 m_filter = NULL;
134 }
135 }
136
137
138 void AbstractFilterSelector::sendClose() {
139 emit close(this);
140 }
141}
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16