Isis 3 Programmer Reference
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 "FileName.h"
16 #include "PointIdFilter.h"
17 
18 
19 using std::nothrow;
20 using std::swap;
21 
22 
23 namespace Isis {
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(bool (AbstractFilter::*meth)() const) const {
40  return m_filter && (m_filter->*meth)();
41  }
42 
43 
44  QString AbstractFilterSelector::getDescription(QString(AbstractFilter::*meth)() const) const {
45  QString description;
46  if (m_filter) {
47  description = (m_filter->*meth)();
48  }
49 
50  return description;
51  }
52 
53 
54  AbstractFilterSelector &AbstractFilterSelector::operator=(const AbstractFilterSelector &other) {
55  getSelector()->setCurrentIndex(other.getSelector()->currentIndex());
56  if (m_filter && other.m_filter) {
57  setFilter(other.m_filter->clone());
58  }
59 
60  return *this;
61  }
62 
63 
64  void AbstractFilterSelector::nullify() {
65  m_closeButton = NULL;
66  m_filter = NULL;
67  m_mainLayout = NULL;
68  m_selector = NULL;
69  }
70 
71 
72  void AbstractFilterSelector::createSelector() {
73  m_closeButton = new QPushButton;
74  m_closeButton->setIcon(QIcon(FileName("$base/icons/editdelete.png").expanded()));
75  connect(m_closeButton, SIGNAL(clicked()), this, SLOT(sendClose()));
76 
77  m_selector = new QComboBox;
78  m_selector->addItem("---- select ----");
79  m_selector->insertSeparator(m_selector->count());
80  connect(m_selector, SIGNAL(currentIndexChanged(int)),
81  this, SLOT(changeFilter(int)));
82 
83  m_mainLayout = new QHBoxLayout;
84  m_mainLayout->setContentsMargins(0, 0, 0, 0);
85  m_mainLayout->addWidget(m_closeButton);
86  m_mainLayout->addWidget(m_selector);
87  m_mainLayout->addStretch();
88  m_mainLayout->setAlignment(m_closeButton, Qt::AlignTop);
89  m_mainLayout->setAlignment(m_selector, Qt::AlignTop);
90 
91 
92  setLayout(m_mainLayout);
93  }
94 
95 
96  QComboBox *AbstractFilterSelector::getSelector() const {
97  return m_selector;
98  }
99 
100 
101  QHBoxLayout *AbstractFilterSelector::getMainLayout() const {
102  return m_mainLayout;
103  }
104 
105 
106  AbstractFilter *AbstractFilterSelector::getFilter() const {
107  return m_filter;
108  }
109 
110 
111  void AbstractFilterSelector::setFilter(AbstractFilter *someFilter) {
112  if (m_filter) {
113  delete m_filter;
114  m_filter = NULL;
115  }
116 
117  m_filter = someFilter;
118  connect(getFilter(), SIGNAL(filterChanged()),
119  this, SIGNAL(filterChanged()));
120  getMainLayout()->insertWidget(2, getFilter());
121  }
122 
123 
124  void AbstractFilterSelector::deleteFilter() {
125  if (m_filter) {
126  delete m_filter;
127  m_filter = NULL;
128  }
129  }
130 
131 
132  void AbstractFilterSelector::sendClose() {
133  emit close(this);
134  }
135 }
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31