Пример #1
0
void DataViewerAddColDlg::OnEditDecimals( wxCommandEvent& ev )
{
    wxLogMessage("DataViewerAddColDlg::OnEditDecimals()");
    
	if (!fixed_lengths)
        return;
	if (cur_type != GdaConst::double_type) {
		m_decimals_valid = true;
		UpdateApplyButton();
		return;
	}
	wxString s = m_decimals->GetValue();
	long val = 0;
	bool is_num = s.ToLong(&val);
	m_decimals_val = val;
	long min_v = GdaConst::min_dbf_double_decimals;
	long max_v = GdaConst::max_dbf_double_decimals;
		
	if ((is_num && val >= min_v && val <= max_v) || s.length() == 0) {
		wxTextAttr style(m_name->GetDefaultStyle());
		style.SetTextColour(*wxBLACK);
		m_name->SetStyle(0, s.length(), style);
	} else {
		wxTextAttr style(m_name->GetDefaultStyle());
		style.SetTextColour(*wxRED);
		m_name->SetStyle(0, s.length(), style);
	}
	m_decimals_valid = is_num && val >= min_v && val <= max_v;
	UpdateMinMaxValues();
	UpdateApplyButton();
}
void DataViewerAddColDlg::CheckName()
{
	wxString s = m_name->GetValue();
	if (s.length() > 0) {
		wxString f = s.SubString(0, 0);
		if (f == "_" || f == "0" || f == "1" || f == "2" || f == "3" ||
			f == "4" || f == "5" || f == "6" || f == "7" || f == "8" ||
			f == "9") {
			s = s.SubString(1, s.length()-1);
			m_name->ChangeValue(s);
		}
	}
	if (DbfFileUtils::isValidFieldName(s) || s.length() == 0) {
		wxTextAttr style(m_name->GetDefaultStyle());
		style.SetTextColour(*wxBLACK);
		m_name->SetStyle(0, s.length(), style);
	} else {
		wxTextAttr style(m_name->GetDefaultStyle());
		style.SetTextColour(*wxRED);
		m_name->SetStyle(0, s.length(), style);
	}
	m_name_valid = (DbfFileUtils::isValidFieldName(s) &&
					!grid_base->IsSpaceTimeIdField(s));
	
	UpdateApplyButton();	
}
Пример #3
0
void DataViewerAddColDlg::OnChoiceDisplayedDecimals( wxCommandEvent& ev )
{
    wxLogMessage("DataViewerAddColDlg::OnChoiceDisplayedDecimals()");
    
	if (fixed_lengths && cur_type == GdaConst::double_type)
        UpdateMinMaxValues();
    
	UpdateApplyButton();
}
Пример #4
0
void DataViewerAddColDlg::CheckName()
{
    wxLogMessage("DataViewerAddColDlg::CheckName()");
	wxString s = m_name->GetValue();
    m_name_valid = table_int->IsValidDBColName(s);
    if ( m_name_valid ) {
        m_name->SetForegroundColour(*wxBLACK);
	} else {
        m_name->SetForegroundColour(*wxRED);
	}
	
	UpdateApplyButton();	
}
Пример #5
0
DataViewerAddColDlg::
DataViewerAddColDlg(Project* project_s,
                    wxWindow* parent,
                    bool time_variant_no_as_default_s,
                    bool can_change_time_variant_s,
                    wxString default_name_s,
                    GdaConst::FieldType default_field_type_s)
: project(project_s),
table_int(project_s->GetTableInt()),
time_variant_no_as_default(time_variant_no_as_default_s),
can_change_time_variant(can_change_time_variant_s),
default_name(default_name_s),
default_field_type(default_field_type_s),
m_decimals_val(0), m_length_valid(true),
time_variant(project_s->GetTableInt()->IsTimeVariant()),
fixed_lengths(project_s->GetTableInt()->HasFixedLengths())
{
    wxLogMessage("Open DataViewerAddColDlg.");
    
	SetParent(parent);
    CreateControls();
    Centre();
	
	// a mapping from displayed col order to actual col ids in table
	// Eg, in underlying table, we might have A, B, C, D, E, F,
	// but because of user wxGrid col reorder operaions might see these
	// as C, B, A, F, D, E.  In this case, the col_id_map would be
	// 0->2, 1->1, 2->0, 3->5, 4->3, 5->4
	std::vector<int> col_id_map;
	table_int->FillColIdMap(col_id_map);
    
	for (int i=0, iend=table_int->GetNumberCols(); i<iend; i++) {
        int actual_idx = col_id_map[i];
        wxString col_name = table_int->GetColName(actual_idx);
        m_insert_pos->Append(col_name);
	}
    
	m_insert_pos->Append("after last variable");
	m_insert_pos->SetSelection(0);
     
	UpdateApplyButton();
}
void DataViewerAddColDlg::OnEditLength( wxCommandEvent& ev )
{
	wxString s = m_length->GetValue();
	long val = 0;
	bool is_num = s.ToLong(&val);
	m_length_val = val;
	
	long min_v;
	long max_v;
	if (cur_type == GeoDaConst::date_type) {
		min_v = GeoDaConst::min_dbf_date_len;
		max_v = GeoDaConst::max_dbf_date_len;
	} else if (cur_type == GeoDaConst::long64_type) {
		min_v = GeoDaConst::min_dbf_long_len;
		max_v = GeoDaConst::max_dbf_long_len;
	} else if (cur_type == GeoDaConst::double_type) {
		min_v = GeoDaConst::min_dbf_double_len;
		max_v = GeoDaConst::max_dbf_double_len;
	} else  { // cur_type == GeoDaConst::string_type
		min_v = GeoDaConst::min_dbf_string_len;
		max_v = GeoDaConst::max_dbf_string_len;
	}
	
	if ((is_num && val >= min_v && val <= max_v) || s.length() == 0) {
		wxTextAttr style(m_name->GetDefaultStyle());
		style.SetTextColour(*wxBLACK);
		m_name->SetStyle(0, s.length(), style);
	} else {
		wxTextAttr style(m_name->GetDefaultStyle());
		style.SetTextColour(*wxRED);
		m_name->SetStyle(0, s.length(), style);
	}
	m_length_valid = is_num && val >= min_v && val <= max_v;
	UpdateMinMaxValues();
	UpdateApplyButton();
}
void DataViewerAddColDlg::CreateControls()
{
	if (grid_base->IsTimeVariant()) {
		wxXmlResource::Get()->LoadDialog(this, GetParent(),
										 "ID_DATA_VIEWER_ADD_COL_TIME_DLG");
	} else {
		wxXmlResource::Get()->LoadDialog(this, GetParent(),
										 "ID_DATA_VIEWER_ADD_COL_DLG");
	}
	m_apply_button = wxDynamicCast(FindWindow(XRCID("wxID_OK")), wxButton);
	
	m_name = wxDynamicCast(FindWindow(XRCID("ID_TEXT_NEW_NAME")), wxTextCtrl);
	m_name->SetValue(default_name);
	wxString name_chars="abcdefghijklmnopqrstuvwxyz"
		"ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789";
	wxTextValidator name_validator(wxFILTER_INCLUDE_CHAR_LIST);
	name_validator.SetCharIncludes(name_chars);
	m_name->SetValidator(name_validator);
	m_name_valid = false;
	
	m_time_inv_no = 0;
	m_time_inv_yes = 0;
	if (FindWindow(XRCID("ID_TIME_INV_NO"))) {
		m_time_inv_no = wxDynamicCast(FindWindow(XRCID("ID_TIME_INV_NO")),
									  wxRadioButton);
		m_time_inv_yes = wxDynamicCast(FindWindow(XRCID("ID_TIME_INV_YES")),
									  wxRadioButton);
		m_time_inv_no->SetValue(time_inv_no_as_default);
		m_time_inv_yes->SetValue(!time_inv_no_as_default);
		m_time_inv_no->Enable(can_change_time_inv);
		m_time_inv_yes->Enable(can_change_time_inv);
	}
	
	m_type = wxDynamicCast(FindWindow(XRCID("ID_CHOICE_TYPE")), wxChoice);
	// add options for Float, Integer, String, or Date
	m_type->Append("real (eg 1.03, 45.7)");
	m_type->Append("integer (eg -1, 0, 23)");
	m_type->Append("string (eg New York)");
	m_type->Append("date (eg 20110131)");
	
	m_insert_pos = wxDynamicCast(FindWindow(XRCID("ID_CHOICE_INSERT_POS")),
								 wxChoice);
	
	m_length_lable = wxDynamicCast(FindWindow(XRCID("ID_STATIC_LENGTH")),
								   wxStaticText);
	m_length = wxDynamicCast(FindWindow(XRCID("ID_TEXT_LENGTH")), wxTextCtrl);
	m_length->SetValidator(wxTextValidator(wxFILTER_DIGITS));
	m_length_valid = true;
	
	m_decimals_lable = wxDynamicCast(FindWindow(XRCID("ID_STATIC_DECIMALS")),
									 wxStaticText);
	m_decimals = wxDynamicCast(FindWindow(XRCID("ID_TEXT_DECIMALS")),
							   wxTextCtrl);
	m_decimals->SetValidator(wxTextValidator(wxFILTER_DIGITS));
	m_decimals_valid = true;
	
	m_displayed_decimals_lable = 
		wxDynamicCast(FindWindow(XRCID("ID_STATIC_DISPLAYED_DECIMALS")),
					  wxStaticText);
	m_displayed_decimals =
		wxDynamicCast(FindWindow(XRCID("ID_TEXT_DISPLAYED_DECIMALS")),
					  wxTextCtrl);
	m_displayed_decimals->SetValidator(wxTextValidator(wxFILTER_DIGITS));
	m_displayed_decimals_valid = true;
	
	m_max_label = wxDynamicCast(FindWindow(XRCID("ID_STATIC_MAX_LABEL")),
								wxStaticText);
	m_max_val = wxDynamicCast(FindWindow(XRCID("ID_STATIC_MAX_VAL")),
							  wxStaticText);

	m_min_label = wxDynamicCast(FindWindow(XRCID("ID_STATIC_MIN_LABEL")),
								wxStaticText);
	m_min_val = wxDynamicCast(FindWindow(XRCID("ID_STATIC_MIN_VAL")),
							  wxStaticText);
	
	m_type->SetSelection(0);
	UpdateApplyButton();
	CheckName();
	SetDefaultsByType(GeoDaConst::double_type);
}