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::OnChoiceDisplayedDecimals( wxCommandEvent& ev )
{
    wxLogMessage("DataViewerAddColDlg::OnChoiceDisplayedDecimals()");
    
	if (fixed_lengths && cur_type == GdaConst::double_type)
        UpdateMinMaxValues();
    
	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::SetDefaultsByType(GdaConst::FieldType type)
{
    wxLogMessage("In DataViewerAddColDlg::SetDefaultsByType()");
	// set some defaults first
	m_displayed_decimals->SetSelection(0);
	m_displayed_decimals->Disable();
	if (fixed_lengths) {
		m_length->Enable();
		m_decimals_lable->SetLabelText("Decimals");
		m_decimals->SetValue("7");
		m_decimals->Disable();
		m_max_label->SetLabelText("");
		m_max_val->SetLabelText("");
		m_min_label->SetLabelText("");
		m_min_val->SetLabelText("");
		m_length_valid = true;
		m_decimals_valid = true;
	}
	
	switch (type) {
		case GdaConst::double_type:
		{
			cur_type = GdaConst::double_type;
			m_displayed_decimals->Enable();
			m_displayed_decimals->SetSelection(0);
			if (fixed_lengths) {
				m_length_lable->SetLabelText(wxString::Format("Length (max %d)", GdaConst::max_dbf_double_len));
				m_length->SetValue(wxString::Format("%d", GdaConst::default_dbf_double_len));
				m_decimals_lable->SetLabelText(wxString::Format("Decimals (max %d)", GdaConst::max_dbf_double_decimals));
				m_decimals->Enable();
				m_decimals->SetValue(wxString::Format("%d", GdaConst::default_dbf_double_decimals));

				m_max_label->SetLabelText("maximum");
				m_max_val->SetLabelText(wxString::Format("%d", 9));
				m_min_label->SetLabelText("minimum");
				m_min_val->SetLabelText(wxString::Format("-%d", 9));
			}
		}
			break;
		case GdaConst::long64_type:
		{
			cur_type = GdaConst::long64_type;
			if (fixed_lengths) {
				m_length_lable->SetLabelText(wxString::Format("Length (max %d)", GdaConst::max_dbf_long_len));
				m_length->SetValue(wxString::Format("%d", GdaConst::default_dbf_long_len));
				m_max_label->SetLabelText("maximum");
				m_max_val->SetLabelText(wxString::Format("%d", 9));
				m_min_label->SetLabelText("minimum");
				m_min_val->SetLabelText(wxString::Format("-%d", 9));
			}
		}
			break;
		case GdaConst::string_type:
		{
			cur_type = GdaConst::string_type;
			if (fixed_lengths) {
				m_length_lable->SetLabelText(wxString::Format("Length (max %d)", GdaConst::max_dbf_string_len));
				m_length->SetValue(wxString::Format("%d", GdaConst::default_dbf_string_len));
			}
		}
			break;
		case GdaConst::date_type:
		default:
		{
			cur_type = GdaConst::date_type;
			if (fixed_lengths) {
				m_length_lable->SetLabelText("Length");
				m_length->SetValue(wxString::Format("%d", GdaConst::default_dbf_date_len));
				m_length->Disable();
			}
		}
	}
	if (fixed_lengths) UpdateMinMaxValues();
}
void DataViewerAddColDlg::SetDefaultsByType(GeoDaConst::FieldType type)
{
	// set some defaults first
	m_length->Enable();
	m_decimals_lable->SetLabelText("Decimals");
	m_decimals->SetValue("0");
	m_decimals->Disable();
	m_displayed_decimals->SetValue("0");
	m_displayed_decimals->Disable();
	m_max_label->SetLabelText("");
	m_max_val->SetLabelText("");
	m_min_label->SetLabelText("");
	m_min_val->SetLabelText("");
	m_length_valid = true;
	m_decimals_valid = true;
	m_displayed_decimals_valid = true;
	switch (type) {
		case GeoDaConst::double_type:
		{
			cur_type = GeoDaConst::double_type;
			m_length_lable->SetLabelText(wxString::Format("Length (max %d)",
								GeoDaConst::max_dbf_double_len));
			m_length->SetValue(wxString::Format("%d",
								GeoDaConst::default_dbf_double_len));
			m_decimals_lable->SetLabelText(wxString::Format("Decimals (max %d)",
								GeoDaConst::max_dbf_double_decimals));
			m_decimals->Enable();
			m_decimals->SetValue(wxString::Format("%d",
								GeoDaConst::default_dbf_double_decimals));			  
			m_displayed_decimals->Enable();
			m_displayed_decimals->SetValue(wxString::Format("%d",
								GeoDaConst::default_dbf_double_decimals));
			m_max_label->SetLabelText("maximum");
			m_max_val->SetLabelText(wxString::Format("%d", 9));
			m_min_label->SetLabelText("minimum");
			m_min_val->SetLabelText(wxString::Format("-%d", 9));
		}
			break;
		case GeoDaConst::long64_type:
		{
			cur_type = GeoDaConst::long64_type;
			m_length_lable->SetLabelText(wxString::Format("Length (max %d)",
								GeoDaConst::max_dbf_long_len));
			m_length->SetValue(wxString::Format("%d",
								GeoDaConst::default_dbf_long_len));
			m_max_label->SetLabelText("maximum");
			m_max_val->SetLabelText(wxString::Format("%d", 9));
			m_min_label->SetLabelText("minimum");
			m_min_val->SetLabelText(wxString::Format("-%d", 9));
		}
			break;
		case GeoDaConst::string_type:
		{
			cur_type = GeoDaConst::string_type;
			m_length_lable->SetLabelText(wxString::Format("Length (max %d)",
								GeoDaConst::max_dbf_string_len));
			m_length->SetValue(wxString::Format("%d",
								GeoDaConst::default_dbf_string_len));
		}
			break;
		case GeoDaConst::date_type:
		default:
		{
			cur_type = GeoDaConst::date_type;
			m_length_lable->SetLabelText("Length");
			m_length->SetValue(wxString::Format("%d",
								GeoDaConst::default_dbf_date_len));
			
			m_length->Disable();
		}
	}
	UpdateMinMaxValues();
}