datasetcopydlg.cpp

来自「用VC+SuperMap开发的校园GIS系统」· C++ 代码 · 共 336 行

CPP
336
字号
// DatasetCopyDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CampusGis.h"
#include "DatasetCopyDlg.h"
#include "sodatasources.h"
#include "sodatasource.h"
#include "sodatasets.h"
#include "sodataset.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDatasetCopyDlg dialog


CDatasetCopyDlg::CDatasetCopyDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDatasetCopyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDatasetCopyDlg)
	//}}AFX_DATA_INIT
}


void CDatasetCopyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDatasetCopyDlg)
	DDX_Control(pDX, IDC_EDIT, m_EditName);
	DDX_Control(pDX, IDOK, m_Ok);
	DDX_Control(pDX, IDC_REMOVEALL, m_RemoveAll);
	DDX_Control(pDX, IDC_REMOVE, m_Remove);
	DDX_Control(pDX, IDC_ADDALL, m_AddAll);
	DDX_Control(pDX, IDC_ADD, m_Add);
	DDX_Control(pDX, IDC_CHECKNAME, m_chkRenameCopy);
	DDX_Control(pDX, IDC_LISTSOURCEDT, m_ListSourceDt);
	DDX_Control(pDX, IDC_LISTDESTDT, m_ListDestDt);
	DDX_Control(pDX, IDC_CMBSOURCEDS, m_cmbSourceDs);
	DDX_Control(pDX, IDC_CMBDESTDS, m_cmbDestDs);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDatasetCopyDlg, CDialog)
	//{{AFX_MSG_MAP(CDatasetCopyDlg)
	ON_CBN_SELCHANGE(IDC_CMBSOURCEDS, OnSelchangeCmbsourceds)
	ON_CBN_SELCHANGE(IDC_CMBDESTDS, OnSelchangeCmbdestds)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_ADDALL, OnAddAll)
	ON_BN_CLICKED(IDC_REMOVE, OnRemove)
	ON_BN_CLICKED(IDC_REMOVEALL, OnRemoveAll)
	ON_LBN_DBLCLK(IDC_LISTSOURCEDT, OnDblclkListsourcedt)
	ON_LBN_DBLCLK(IDC_LISTDESTDT, OnDblclkListdestdt)
	ON_BN_CLICKED(IDC_CHECKNAME, OnCheckName)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDatasetCopyDlg message handlers

BOOL CDatasetCopyDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//初始化和添加源数据源,目标数据源列表
	CsoDataSource objDs;
	m_pSuperWorkspace=&GetMainFramePointer()->m_SuperWorkspace;
	m_cmbSourceDs.ResetContent();
	m_cmbDestDs.ResetContent();
	for(long i=1;i<=m_pSuperWorkspace->GetDatasources().GetCount();i++)
	{
		objDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(i));
		if(objDs)
		{
			m_cmbSourceDs.AddString((LPCTSTR )objDs.GetAlias());
			m_cmbDestDs.AddString((LPCTSTR )objDs.GetAlias());
		}

	}
	objDs.ReleaseDispatch();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDatasetCopyDlg::OnSelchangeCmbsourceds() 
{
	//选择需复制源数据源
	CsoDatasets	objDts;
	CString strSourceDs;
	int index;

	index=m_cmbSourceDs.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDs.GetLBText(index,strSourceDs);
	objDts=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(strSourceDs)).GetDatasets();
	if(!objDts)
	{
		AfxMessageBox("数据源"+strSourceDs+"错误!");
		return;
	}
	m_ListSourceDt.ResetContent();
	CsoDataset objSourceDt;
	for(long i=1;i<objDts.GetCount();i++)
	{
		objSourceDt=objDts.GetItem(COleVariant(i));
		if(objSourceDt)
			m_ListSourceDt.AddString((LPCTSTR )objSourceDt.GetName());
	}
	if(m_ListSourceDt.GetCount() > 0)
		m_ListSourceDt.SetCurSel(0);

	objDts.ReleaseDispatch();
	objSourceDt.ReleaseDispatch();
}

void CDatasetCopyDlg::OnSelchangeCmbdestds() 
{
	//选择追加的目标数据源
	CString strDestDs,strSourceDs;
	int index;

	index=m_cmbDestDs.GetCurSel();
	if(index < 0)
		return;
	m_cmbDestDs.GetLBText(index,strDestDs);
	index=m_cmbSourceDs.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDs.GetLBText(index,strSourceDs);
	if(strDestDs==strSourceDs)
		m_chkRenameCopy.SetCheck(1);
	else
		m_chkRenameCopy.SetCheck(0);
	if(m_chkRenameCopy.GetCheck()==1)
		m_EditName.ShowWindow(SW_SHOW);
}

void CDatasetCopyDlg::OnAdd() 
{
	//把选中的数据集对象作为复制对象
	CString strSourceDt;
	int index;

	index=m_ListSourceDt.GetCurSel();
	m_ListSourceDt.GetText(index,strSourceDt);
	m_ListDestDt.AddString(strSourceDt);
	m_ListSourceDt.DeleteString(index);
	m_ListDestDt.SetCurSel(0);
	if(m_ListSourceDt.GetCount() > 0)
		m_ListSourceDt.SetCurSel(0);
	else
	{
		m_Add.EnableWindow(FALSE);
		m_AddAll.EnableWindow(FALSE);
	}
	m_Ok.EnableWindow(TRUE);
	m_Remove.EnableWindow(TRUE);
	m_RemoveAll.EnableWindow(TRUE);
}

void CDatasetCopyDlg::OnAddAll() 
{
	//把源数据源中的所有数据集都作为复制的对象
	CString strSourceDt;

	for(int i=0;i<m_ListSourceDt.GetCount();i++)
	{
		m_ListSourceDt.GetText(i,strSourceDt);
		m_ListDestDt.AddString(strSourceDt);
	}
	m_ListDestDt.SetCurSel(0);
	m_ListSourceDt.ResetContent();
	m_Remove.EnableWindow(TRUE);
	m_RemoveAll.EnableWindow(TRUE);
	m_Ok.EnableWindow(TRUE);
	m_Add.EnableWindow(FALSE);
	m_AddAll.EnableWindow(FALSE);
}

void CDatasetCopyDlg::OnRemove() 
{
	//移除以前添加的用来复制的数据集
	int index;
	CString strDestDt;

	index=m_ListDestDt.GetCurSel();
	if(index < 0)
		return;
	m_ListDestDt.GetText(index,strDestDt);
	m_ListSourceDt.AddString(strDestDt);
	m_ListDestDt.DeleteString(index);
	m_ListSourceDt.SetCurSel(0);
	
	if(m_ListDestDt.GetCount()==0)
	{
		m_Ok.EnableWindow(FALSE);
		m_RemoveAll.EnableWindow(FALSE);
		m_Remove.EnableWindow(FALSE);
	}
	else
		m_ListDestDt.SetCurSel(0);
	m_Add.EnableWindow(TRUE);
	m_AddAll.EnableWindow(TRUE);
}

void CDatasetCopyDlg::OnRemoveAll() 
{
	//移除全部的数据集
	CString strDestDt;

	for(int i=0;i<m_ListDestDt.GetCount();i++)
	{
		m_ListDestDt.GetText(i,strDestDt);
		m_ListSourceDt.AddString(strDestDt);
	}
	m_ListSourceDt.SetCurSel(0);
	m_ListDestDt.ResetContent();
	m_Ok.EnableWindow(FALSE);
	m_RemoveAll.EnableWindow(FALSE);
	m_Add.EnableWindow(TRUE);
	m_AddAll.EnableWindow(TRUE);
}

void CDatasetCopyDlg::OnDblclkListsourcedt() 
{
	//双击添加数据集
	OnAdd();	
}

void CDatasetCopyDlg::OnDblclkListdestdt() 
{
	//双击移除数据集
	OnRemove();	
}

void CDatasetCopyDlg::OnOK() 
{
	//确定复制源数据源中的部分或全部数据集到目标数据源中
	CsoDataSource objDestDs,objSourceDs;
	CsoDataset objDt;
	CString strName,strDestDs,strSourceDs;
	int index;

	index=m_cmbSourceDs.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDs.GetLBText(index,strSourceDs);
	objSourceDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(strSourceDs));
	if(!objSourceDs)
	{
		AfxMessageBox("数据源"+strSourceDs+"内部错误,无法继续!");
		return;
	}

	index=m_cmbDestDs.GetCurSel();
	if(index < 0)
		return;
	m_cmbDestDs.GetLBText(index,strDestDs);
	if(strDestDs==strSourceDs)//同数据源复制必须改名
	{
		m_chkRenameCopy.SetCheck(1);
		m_EditName.EnableWindow();
	}
	objDestDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(strDestDs));
	if(!objDestDs)
	{
		AfxMessageBox("数据源"+strDestDs+"内部错误,无法继续!");
		objSourceDs.ReleaseDispatch();
		return;
	}
	
	for(int i=0;i<m_ListDestDt.GetCount();i++)
	{
		m_ListDestDt.SetCurSel(i);
		m_ListDestDt.GetText(i,strName);
		strDestDs=strName;
		if(objDestDs.IsAvailableDatasetName(strName)==false)//数据集名合法判断
		{
			m_chkRenameCopy.SetCheck(1);
			m_EditName.EnableWindow();
		}
		if(m_chkRenameCopy.GetCheck()==1)//改名复制,进行改名同名判断
		{
			GetDlgItemText(IDC_EDIT,strName);
			if(strName.IsEmpty())
			{
				int nResponse=MessageBox("数据集名为空!\n是否取消复制?","消息框",MB_ICONQUESTION | MB_OKCANCEL);
				if(nResponse==IDYES)
				{
					objDestDs.ReleaseDispatch();
					objSourceDs.ReleaseDispatch();
					objDt.ReleaseDispatch();
					CDialog::OnOK();
				}
			}			
		}
		if(objDestDs.IsAvailableDatasetName(strName))
		{
			objDt=objDestDs.CopyDataset(objSourceDs.GetDatasets().GetItem(COleVariant(strDestDs)),
										strName,true);
			if(objDt)
				AfxMessageBox("复制成功!");
			else
				AfxMessageBox("复制失败!");
		}
	}
	GetMainFramePointer()->GetManager()->Refresh();
	objDestDs.ReleaseDispatch();
	objSourceDs.ReleaseDispatch();
	objDt.ReleaseDispatch();
	CDialog::OnOK();
}

void CDatasetCopyDlg::OnCheckName() 
{
	// TODO: Add your control notification handler code here
	if(m_chkRenameCopy.GetCheck()==1)
		m_EditName.ShowWindow(SW_SHOW);
	else
		m_EditName.ShowWindow(SW_HIDE);
}

CMainFrame* CDatasetCopyDlg::GetMainFramePointer()
{
	CMainFrame *pFrame=(CMainFrame *)::AfxGetMainWnd();
	return pFrame;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?