USGS

Isis 3.0 Object Programmers' Reference

Home

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