Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "rosout_text_filter_control.h"
00031 #include "rosout_text_filter.h"
00032
00033 #include <boost/bind.hpp>
00034
00035 namespace rxtools
00036 {
00037
00038 RosoutTextFilterControl::RosoutTextFilterControl(wxWindow* parent, const RosoutTextFilterPtr& filter)
00039 : RosoutTextFilterControlBase(parent, wxID_ANY)
00040 , filter_(filter)
00041 {
00042 filter_changed_connection_ = filter_->getChangedSignal().connect(boost::bind(&RosoutTextFilterControl::read, this));
00043
00044 read();
00045 }
00046
00047 void RosoutTextFilterControl::read()
00048 {
00049 regex_->SetValue(filter_->getUseRegex());
00050
00051 uint32_t field_mask = filter_->getFieldMask();
00052 message_->SetValue(field_mask & RosoutTextFilter::Message);
00053 node_->SetValue(field_mask & RosoutTextFilter::Node);
00054 location_->SetValue(field_mask & RosoutTextFilter::Location);
00055 topics_->SetValue(field_mask & RosoutTextFilter::Topics);
00056
00057 include_exclude_->SetSelection(filter_->getFilterType());
00058
00059 text_->ChangeValue(wxString::FromAscii(filter_->getText().c_str()));
00060
00061 setIncludeExcludeColor();
00062 }
00063
00064 void RosoutTextFilterControl::setIncludeExcludeColor()
00065 {
00066 if (include_exclude_->GetSelection() == 0)
00067 {
00068 include_exclude_->SetBackgroundColour(wxColour(255, 238, 176));
00069 }
00070 else
00071 {
00072 include_exclude_->SetBackgroundColour(wxColour(198, 203, 255));
00073 }
00074 }
00075
00076 void RosoutTextFilterControl::checkValid()
00077 {
00078 text_->SetBackgroundColour(wxNullColour);
00079 if (!filter_->isValid())
00080 {
00081 text_->SetBackgroundColour(wxColour(255, 99, 78));
00082 }
00083 }
00084
00085 void RosoutTextFilterControl::onIncludeExclude( wxCommandEvent& event )
00086 {
00087 filter_changed_connection_.block();
00088 filter_->setFilterType((RosoutTextFilter::FilterType)include_exclude_->GetSelection());
00089 filter_changed_connection_.unblock();
00090
00091 checkValid();
00092 setIncludeExcludeColor();
00093 }
00094
00095 void RosoutTextFilterControl::onRegex( wxCommandEvent& event )
00096 {
00097 filter_changed_connection_.block();
00098 filter_->setUseRegex(event.IsChecked());
00099 filter_changed_connection_.unblock();
00100
00101 checkValid();
00102 }
00103
00104 void RosoutTextFilterControl::onText( wxCommandEvent& event )
00105 {
00106 filter_changed_connection_.block();
00107 filter_->setText((const char*)text_->GetValue().char_str());
00108 filter_changed_connection_.unblock();
00109
00110 checkValid();
00111 }
00112
00113 void RosoutTextFilterControl::onMessage( wxCommandEvent& event )
00114 {
00115 filter_changed_connection_.block();
00116 if (event.IsChecked())
00117 {
00118 filter_->addField(RosoutTextFilter::Message);
00119 }
00120 else
00121 {
00122 filter_->removeField(RosoutTextFilter::Message);
00123 }
00124 filter_changed_connection_.unblock();
00125
00126 checkValid();
00127 }
00128
00129 void RosoutTextFilterControl::onNode( wxCommandEvent& event )
00130 {
00131 filter_changed_connection_.block();
00132 if (event.IsChecked())
00133 {
00134 filter_->addField(RosoutTextFilter::Node);
00135 }
00136 else
00137 {
00138 filter_->removeField(RosoutTextFilter::Node);
00139 }
00140 filter_changed_connection_.unblock();
00141
00142 checkValid();
00143 }
00144
00145 void RosoutTextFilterControl::onLocation( wxCommandEvent& event )
00146 {
00147 filter_changed_connection_.block();
00148 if (event.IsChecked())
00149 {
00150 filter_->addField(RosoutTextFilter::Location);
00151 }
00152 else
00153 {
00154 filter_->removeField(RosoutTextFilter::Location);
00155 }
00156 filter_changed_connection_.unblock();
00157
00158 checkValid();
00159 }
00160
00161 void RosoutTextFilterControl::onTopics( wxCommandEvent& event )
00162 {
00163 filter_changed_connection_.block();
00164 if (event.IsChecked())
00165 {
00166 filter_->addField(RosoutTextFilter::Topics);
00167 }
00168 else
00169 {
00170 filter_->removeField(RosoutTextFilter::Topics);
00171 }
00172 filter_changed_connection_.unblock();
00173
00174 checkValid();
00175 }
00176
00177 }