📄 dlgimporttable.cpp
字号:
if (s == SHAPEFILE_POINTS && m_nShape == SHPPoint)
{
m_lbColumn.SetCurSel(j);
m_lbAttr.SetCurSel(i);
break;
}
else if (s == SHAPEFILE_POLYLINES && (m_nShape == SHPPolyLine || m_nShape == SHPPolygon))
{
m_lbAttr.SetCurSel(i);
m_lbColumn.SetCurSel(j);
break;
}
}
} else
{
// If no attributes associated then display warning message
if (m_nShape == SHPPoint)
{
AfxMessageBox(BDString(IDS_NOCOORDATTR) + " " + BDString(IDS_ADDMAPATTR));
}
else if (m_nShape == SHPPolyLine || m_nShape == SHPPolygon)
{
AfxMessageBox(BDString(IDS_NOPOLYLINEATTR) + " " + BDString(IDS_ADDMAPATTR));
}
}
// Associate attributes
OnSelchangeAttribute();
}
///////////////////////////////////////////////////////////////////////////////
void CDlgImportTable::OnSelchangeFtype()
{
InitAttr();
}
///////////////////////////////////////////////////////////////////////////////
//
// Associate the attribute with the column
//
void CDlgImportTable::OnSelchangeAttribute()
{
}
///////////////////////////////////////////////////////////////////////////////
void CDlgImportTable::OnSelchangeColumn()
{
}
///////////////////////////////////////////////////////////////////////////////
//
// Given the column name, determines which (if any) attribute the column is
// associated with
//
long CDlgImportTable::GetColumnData(LPCSTR sCol)
{
CString sAttr;
// Search for column name already used
for (int i = 0; i < m_importTable.m_aColumn.GetSize(); i++)
{
if (m_importTable.m_aColumn[i].m_sNameImport == sCol)
break;
}
// If found search for the corresponding attribute name
if (i < m_importTable.m_aColumn.GetSize())
{
for (int j = 0; j < m_lbAttr.GetCount(); j++)
{
m_lbAttr.GetText(j, sAttr);
if (m_importTable.m_aColumn[i].m_sNameAttr == sAttr)
{
return m_lbAttr.GetItemData(j);
}
}
}
return CImportTable::DoNotImport;
}
///////////////////////////////////////////////////////////////////////////////
//
// Freeze the selection of feature type and feature
//
void CDlgImportTable::OnSelect()
{
int i = m_cbFType.GetCurSel();
if (i != CB_ERR)
{
if (m_cbFType.GetItemData(i) == -1)
{
OnCreate();
return;
}
BeginWaitCursor();
m_cbFType.GetLBText(i, m_importTable.m_sFType);
GetDlgItem(IDC_SELECT)->EnableWindow(FALSE);
GetDlgItem(IDC_DICTIONARY)->EnableWindow(FALSE);
GetDlgItem(IDC_FTYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_ATTRIBUTE)->EnableWindow(TRUE);
GetDlgItem(IDC_COLUMN)->EnableWindow(TRUE);
GetDlgItem(IDOK)->EnableWindow(TRUE);
ResizeWindow(IDC_EXTENT);
CenterWindow();
DetermineShapefile();
InitAttr();
InitColumns();
// Clear the list
m_importTable.m_aColumn.RemoveAll();
if (m_nShape)
{
MatchShape();
};
EndWaitCursor();
};
}
///////////////////////////////////////////////////////////////////////////////
//
// Associate the column and the attribute for importing
//
void CDlgImportTable::OnAdd()
{
CImportColumn column;
// Get the currently selected attributes
int index1 = m_lbColumn.GetCurSel();
int index2 = m_lbAttr.GetCurSel();
if (index1 != LB_ERR && index2 != LB_ERR)
{
m_lbColumn.GetText(index1, column.m_sNameImport);
m_lbAttr.GetText(index2, column.m_sNameAttr);
column.m_lItemData = m_lbColumn.GetItemData(index1);
// Remove the items from the lists
m_lbColumn.DeleteString(index1);
m_lbAttr.DeleteString(index2);
// Update table
m_importTable.m_aColumn.Add(column);
// Now update lists
InitImport();
}
}
///////////////////////////////////////////////////////////////////////////////
void CDlgImportTable::OnDelete()
{
// Remove columns
int index = m_lbColumnAttr.GetCurSel();
if (index != LB_ERR)
{
CImportColumn &column = m_importTable.m_aColumn[index];
int i = m_lbColumn.AddString(column.m_sNameImport);
m_lbColumn.SetItemData(i, column.m_lItemData);
m_lbAttr.AddString(column.m_sNameAttr);
m_importTable.m_aColumn.RemoveAt(index);
InitImport();
}
}
///////////////////////////////////////////////////////////////////////////////
//
// Automatically match columns to column names
//
void CDlgImportTable::OnAutomatch()
{
CString sCol, sAttr;
BeginWaitCursor();
for (int i = 0; i < m_lbColumn.GetCount(); i++)
{
BOOL bFound = FALSE;
m_lbColumn.GetText(i, sCol);
sCol.TrimRight();
sCol.MakeUpper();
// Search for an exact match (excluding postfix)
for (int j = 0; j < m_lbAttr.GetCount(); j++)
{
m_lbAttr.GetText(j, sAttr);
sAttr = CQuery::StripBrackets(sAttr);
sAttr.TrimRight();
if (sAttr.CompareNoCase(sCol) == 0)
{
m_lbColumn.SetCurSel(i);
m_lbAttr.SetCurSel(j);
OnAdd();
i--;
break;
bFound = TRUE;
}
}
// If no exact match then search on subtext
if (!bFound)
{
for (int j = 0; j < m_lbAttr.GetCount(); j++)
{
m_lbAttr.GetText(j, sAttr);
sAttr.MakeUpper();
TRACE("sCol="+sCol+" sAttr="+sAttr+"\r\n");
if (sAttr.Find(sCol) != -1 || sCol.Find(sAttr) != -1)
{
m_lbColumn.SetCurSel(i);
m_lbAttr.SetCurSel(j);
OnAdd();
i--;
break;
bFound = TRUE;
}
}
}
}
EndWaitCursor();
}
///////////////////////////////////////////////////////////////////////////////
void CDlgImportTable::ResizeWindow(int nControl)
{
CRect rectW, rectC;
GetWindowRect(rectW);
GetDlgItem(nControl)->GetWindowRect(rectC);
SetWindowPos(NULL,rectW.left,rectW.left,rectW.right - rectW.left, rectC.bottom-rectW.top +5,
SWP_NOZORDER);
};
///////////////////////////////////////////////////////////////////////////////
//
// void CDlgImportTable::OnOK()
//
// Save the selections
//
void CDlgImportTable::OnOK()
{
if (Validate()) CDialog::OnOK();
}
///////////////////////////////////////////////////////////////////////////////
//
// Same as OnOK except return IDC_NEXT indicating to return to previous
// dialog
//
void CDlgImportTable::OnNext()
{
// If no fields selection then don't store results
if (m_importTable.m_aColumn.GetSize() == 0) EndDialog(IDC_NEXT);
// Otherwise validate and store selections
if (Validate()) EndDialog(IDC_NEXT);
}
///////////////////////////////////////////////////////////////////////////////
BOOL CDlgImportTable::Validate()
{
if (m_importTable.m_aColumn.GetSize() > 0)
{
for (int i = 0; i < m_importTable.m_aColumn.GetSize(); i++)
{
CImportColumn &column = m_importTable.m_aColumn[i];
long lAttr = column.m_lItemData;
// Check that points are matched with points
if (column.m_sNameImport == SHAPEFILE_POINTS)
{
// Check that shapefile columns are linked with appropriate types
if (HIWORD(lAttr) != IMP_COORD &&
lAttr != CImportTable::DoNotImport)
{
AfxMessageBox(BDString(IDS_SHAPEFILECOL));
m_lbColumn.SetCurSel(i);
OnSelchangeColumn();
return FALSE;
} else
{
column.m_bShapeFile = TRUE;
}
}
// Check that polylines are matched with polylines
if (column.m_sNameImport == SHAPEFILE_POLYLINES)
{
// Check that shapefile columns are linked with appropriate types
if (HIWORD(lAttr) != IMP_MAPLINE && lAttr != CImportTable::DoNotImport)
{
AfxMessageBox(BDString(IDS_SHAPEFILECOL));
m_lbColumn.SetCurSel(i);
OnSelchangeColumn();
return FALSE;
} else
{
column.m_bShapeFile = TRUE;
}
}
};
return TRUE;
};
return FALSE;
}
///////////////////////////////////////////////////////////////////////////////
void CDlgImportTable::OnDictionary()
{
m_cbFType.OnClickDictionary();
}
///////////////////////////////////////////////////////////////////////////////
//
// To automatically create feature display dialog where user can select matching
// parent features
//
void CDlgImportTable::OnCreate()
{
DetermineShapefile();
// Don't display this window underneath
ShowWindow(SW_HIDE);
CDlgImportCreate2 dlg(m_pDatabase, &m_importTable, m_nShape, m_nFileType);
if (dlg.DoModal() == IDOK)
{
CDialog::OnOK();
} else
{
EndDialog(IDCANCEL);
}
}
///////////////////////////////////////////////////////////////////////////////
//
// Determine the file being imported
//
CString CDlgImportTable::GetFilePath(LPCSTR sExt)
{
CString sPath;
int i = m_pDatabase->GetConnect().Find("DefaultDir=");
sPath = m_pDatabase->GetConnect().Mid(i+11);
sPath = sPath.Left(sPath.Find(";"));
if (sPath[sPath.GetLength()-1] != '\\') sPath += '\\';
sPath += m_importTable.m_sTableImport + sExt;
return sPath;
}
///////////////////////////////////////////////////////////////////////////////
void CDlgImportTable::PostNcDestroy()
{
BDHwndDialog() = NULL;
BDToolTip() = NULL;
CDialog::PostNcDestroy();
}
///////////////////////////////////////////////////////////////////////////////
void CDlgImportTable::OnMouseMove(UINT nFlags, CPoint point)
{
CDialog::OnMouseMove(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -