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(); }
void DataViewerAddColDlg::OnChoiceDisplayedDecimals( wxCommandEvent& ev ) { wxLogMessage("DataViewerAddColDlg::OnChoiceDisplayedDecimals()"); if (fixed_lengths && cur_type == GdaConst::double_type) UpdateMinMaxValues(); UpdateApplyButton(); }
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(); }
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); }