www.pudn.com > MapDB.rar > QueryDlg.cpp
// QueryDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MapDB.h"
#include "QueryDlg.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CQueryDlg dialog
CQueryDlg::CQueryDlg(CMapDBDoc * pDoc,CWnd* pParent /*=NULL*/)
: CDialog(CQueryDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CQueryDlg)
m_prompt = _T("");
//}}AFX_DATA_INIT
m_query = 0;
m_pDoc = pDoc;
}
void CQueryDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CQueryDlg)
DDX_Control(pDX, IDC_FROMLIST, m_fromlist);
DDX_Control(pDX, IDC_TOLIST, m_tolist);
DDX_Text(pDX, IDC_PROMPT_STATIC, m_prompt);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CQueryDlg, CDialog)
//{{AFX_MSG_MAP(CQueryDlg)
ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
ON_BN_CLICKED(IDC_ADDALL_BUTTON, OnAddallButton)
ON_BN_CLICKED(IDC_REMOVE_BUTTON, OnRemoveButton)
ON_BN_CLICKED(IDC_REMOVEALL_BUTTON, OnRemoveallButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CQueryDlg message handlers
void CQueryDlg::OnAddButton()
{
if ( ! m_fromlist.GetSelCount() )
return;
int * buf = NULL;
buf = new int[m_fromlist.GetSelCount()];
long selNum = m_fromlist.GetSelItems(m_fromlist.GetSelCount(),buf);
for (int count = 0;count < selNum;count ++)
{
CString item;
m_fromlist.GetText(buf[count] - count,item);
m_tolist.AddString(item);
m_fromlist.DeleteString(buf[count] - count);
}
if ( buf ) delete [] buf;
}
void CQueryDlg::OnAddallButton()
{
for ( ; m_fromlist.GetCount() ; )
{
CString item;
m_fromlist.GetText(0,item);
m_fromlist.DeleteString(0);
m_tolist.AddString(item);
}
}
void CQueryDlg::OnRemoveButton()
{
if ( ! m_tolist.GetSelCount() )
return;
int * buf = NULL;
buf = new int[m_tolist.GetSelCount()];
long selNum = m_tolist.GetSelItems(m_tolist.GetSelCount(),buf);
for (int count = 0;count < selNum;count ++)
{
CString item;
m_tolist.GetText(buf[count] - count,item);
m_fromlist.AddString(item);
m_tolist.DeleteString(buf[count] - count);
}
if ( buf ) delete [] buf;
}
void CQueryDlg::OnRemoveallButton()
{
for ( ; m_tolist.GetCount() ; )
{
CString item;
m_tolist.GetText(0,item);
m_tolist.DeleteString(0);
m_fromlist.AddString(item);
}
}
void CQueryDlg::OnOK()
{
UpdateData(TRUE);
if ( m_pDoc && m_fromlist.GetCount() && ! m_tolist.GetCount() )
{
CString message;
message.LoadString(IDS_MUSTSELECTITEM);
AfxMessageBox(message);
return;
}
if ( m_pDoc && m_tolist.GetCount() )
{
if ( m_query == IDQUERY )
{
m_pDoc->m_objsel.RemoveAll();
m_pDoc->m_objsel.SetSize(m_pDoc->GetByte(m_pDoc->m_mapobjs.GetSize()));
for (int count = 0;count < m_tolist.GetCount();count ++)
{
DWORD id,index;
char item[256];
m_tolist.GetText(count,item);
id = atol(item);
if ( m_pDoc->m_mapobjids.Lookup(id,index) )
m_pDoc->m_objsel[index / 8].SetAt(index % 8);
}
}
else if ( m_query == TITLEQUERY )
{
m_pDoc->m_objsel.RemoveAll();
m_pDoc->m_objsel.SetSize(m_pDoc->GetByte(m_pDoc->m_mapobjs.GetSize()));
m_pDoc->m_titlesel.RemoveAll();
m_pDoc->m_titlesel.SetSize(m_pDoc->GetByte(m_pDoc->m_maptitles.GetCount()));
for (int count = 0;count < m_tolist.GetCount();count ++)
{
DWORD title,index;
char item[256];
m_tolist.GetText(count,item);
title = atol(item);
if ( m_pDoc->m_maptitles.Lookup(title,index) )
m_pDoc->m_titlesel[index / 8].SetAt(index % 8);
}
for (count = 0;count < m_pDoc->m_titlesel.GetSize();count ++)
{
for (int bitcount = 0;bitcount < 8;bitcount ++)
{
if ( m_pDoc->m_titlesel[count][bitcount] )
{
for (int objcount = 0;objcount < m_pDoc->m_mapobjs.GetSize();objcount ++)
{
long bytecount = ( count * 8 + bitcount ) *
m_pDoc->GetByte(m_pDoc->m_mapobjs.GetSize()) + objcount / 8;
int idx = objcount % 8;
if ( m_pDoc->m_titleidx[bytecount][idx] )
m_pDoc->m_objsel[objcount / 8].SetAt(objcount % 8);
}
}
}
}
}
m_pDoc->QueryPos();
}
CDialog::OnOK();
}
BOOL CQueryDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if ( m_query == IDQUERY )
{
CString text;
text.LoadString(IDS_IDQUERY);
SetWindowText(text);
m_prompt.LoadString(IDS_IDQUERYPROMPT);
if ( m_pDoc )
{
CString idformat;
idformat.Format("%c0%dld",'%',(int)log10(m_pDoc->m_mapobjs.GetSize()) + 1);
for (int count = 0;count < m_pDoc->m_mapobjs.GetSize();count ++ )
{
CMapObject * obj = m_pDoc->m_mapobjs[count];
CString objid;
objid.Format(idformat,obj->ID);
m_fromlist.AddString(objid);
}
}
}
else if ( m_query == TITLEQUERY )
{
CString text;
text.LoadString(IDS_TITLEQUERY);
SetWindowText(text);
m_prompt.LoadString(IDS_TITLEQUERYPROMPT);
if ( m_pDoc )
{
DWORD title,tvalue;
POSITION pos = m_pDoc->m_maptitles.GetStartPosition();
for ( ; pos != NULL; )
{
m_pDoc->m_maptitles.GetNextAssoc(pos,title,tvalue);
CString objtitle;
objtitle.Format("%ld",title);
m_fromlist.AddString(objtitle);
}
}
}
else
{
return FALSE;
}
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CQueryDlg::SetQuery(int query)
{
m_query = query;
}