home *** CD-ROM | disk | FTP | other *** search
- // ******************************************************************
- //
- // persqry.cpp : implementation file
- //
- // Implemented classes:
- // CPersQueryDlg
- //
- // Author: Nils Behncke
- // POET Software, August 1993
- //
- // ******************************************************************
-
- #include <stdafx.h> // header to MFC
- #include <helloapp.h> // header to application class and window class
- #include <persqry.h> // header to this file
- #include <queryres.h> // header to resultdialog
-
-
- #ifdef _DEBUG // added by ClassWizard
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
-
- extern CHelloWinApp NEAR theApp; // declaration of application-instance
-
- /////////////////////////////////////////////////////////////////////////////
- // CPersQueryDlg dialog
-
- char *personmembers [] = // members of Person
- {
- "Name",
- "Firstnames",
- "Address.Street",
- "Address.Zip",
- "Address.City",
- ""
- };
-
-
- CPersQueryDlg::CPersQueryDlg(CWnd* pParent, UINT nIDTemp) // modified constructor generated by ClassWizard
- : CDialog(nIDTemp, pParent) // call baseclass constructor
- {
- //{{AFX_DATA_INIT(CPersQueryDlg)
- m_strValue = "";
- m_nOpButtons = 1; // set buttondefault to Equal
- //}}AFX_DATA_INIT
- }
-
-
- CPersQueryDlg::~CPersQueryDlg ()
- {
- if (pall)
- delete pall;
- if (args)
- delete args;
- if (adrargs)
- delete adrargs;
- }
-
-
- void CPersQueryDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CPersQueryDlg)
- DDX_Control(pDX, IDC_LIST_QUERY, m_CQueryList);
- DDX_Control(pDX, IDC_LIST_MEMBER, m_CMemberList);
- DDX_Text(pDX, IDC_EDIT_VALUE, m_strValue);
- DDX_Radio(pDX, IDC_OP_GREATER, m_nOpButtons);
- //}}AFX_DATA_MAP
- }
-
- BEGIN_MESSAGE_MAP(CPersQueryDlg, CDialog)
- //{{AFX_MSG_MAP(CPersQueryDlg)
- ON_BN_CLICKED(IDC_QUERY_DELETE, OnClickedQueryDelete)
- ON_BN_CLICKED(IDC_QUERY_ENTER, OnClickedQueryEnter)
- ON_BN_CLICKED(IDC_QUERY_START, OnClickedQueryStart)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- void CPersQueryDlg::Init ()
- {
- adrargs = NULL;
- pall = new PersonAllSet (theApp.GetOA ());
- args = new PersonQuery ();
- }
-
-
- void CPersQueryDlg::SetMemberList ()
- {
- SetMember (personmembers);
- }
-
-
- void CPersQueryDlg::SetMember (char **pp )
- {
- while ( *pp[0] != 0x00 )
- {
- m_CMemberList.AddString (*pp); // set names of member variables into Listbox control
- pp++;
- }
- }
-
- int CPersQueryDlg::GetMember ( char **pp )
- {
- int item;
-
- if ( (item = m_CMemberList.GetCurSel ()) >= 0 ) // if one selected
- {
- char buffer[100];
- char request[256];
- register int i, found;
-
- m_CMemberList.GetText ( item, buffer ); // get name of member variable
-
- for ( i = 0, found = FALSE; ! found && pp[i][0] != 0x00; i++ ) // search for it in member array
- found = strcmp ( buffer, pp[i] ) == 0;
-
- --i;
- if ( found )
- {
- // build the argument string
- strcpy ( request, pp[i] );
- strcat ( request, GetOpString (buffer, sizeof(buffer)) );
- strcat ( request, m_strValue.GetBuffer (sizeof (buffer)) );
- m_strValue.ReleaseBuffer ();
- // add to the listbox
- m_CQueryList.AddString ( request );
- return i;
- }
- }
- return -1;
- }
-
- PtCmpOp CPersQueryDlg::GetOp ( )
- {
- switch (m_nOpButtons)
- {
- case 0:
- return ( PtGT ); // greater
- break;
- case 1:
- return ( PtEQ ); // equal
- break;
- case 2:
- return ( PtLT ); // less
- break;
- case 3:
- return ( PtEQ | PtGT ); // equal or greater
- break;
- case 4:
- return ( PtEQ | PtLT ); // equal or less
- break;
- default:
- return ( PtEQ ); // default setting, never used
- }
- }
-
- char * CPersQueryDlg::GetOpString ( char *buffer, int maxlen )
- {
- switch (m_nOpButtons)
- {
- case 0:
- return strcpy ( buffer, " > ");
- break;
- case 1:
- return strcpy ( buffer, " == ");
- break;
- case 2:
- return strcpy ( buffer, " < ");
- break;
- case 3:
- return strcpy ( buffer, " >= ");
- break;
- case 4:
- return strcpy ( buffer, " <= ");
- break;
- default:
- return strcpy ( buffer, " == "); // default setting, never used
- }
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CPersQueryDlg message handlers
-
- BOOL CPersQueryDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
-
- Init ();
- SetMemberList (); // set names of Person's member variables
-
- return TRUE; // return TRUE unless you set the focus to a control
- }
-
- void CPersQueryDlg::OnClickedQueryDelete()
- {
- MessageBox ("Not yet implemented", "Delete Arguments", MB_OK);
- }
-
-
- void CPersQueryDlg::OnClickedQueryEnter()
- {
- int item;
-
- UpdateData ();
- if ( ( item = GetMember ( personmembers )) >= 0 )
- {
- char *buffer;
- buffer = m_strValue.GetBuffer ( m_strValue.GetLength () );
- m_strValue.ReleaseBuffer ();
- switch ( item ) // set arguments
- {
- case 0: // Name
- {
- PtString namevalue ( buffer );
- args->Setname ( namevalue, GetOp () );
- break;
- }
- case 1: // Firstnames
- {
- PtString fnamevalue ( buffer );
- args->Setfirstnames ( 1, PtGT | PtEQ, fnamevalue, GetOp () );
- break;
- }
- case 2: // Street
- {
- if ( ! adrargs )
- adrargs = new AddressQuery ();
-
- PtString streetvalue ( buffer );
- adrargs->Setstreet ( streetvalue, GetOp () );
- break;
- }
- case 3: // Zip
- {
- if ( ! adrargs )
- adrargs = new AddressQuery ();
-
- adrargs->Setzip ( atoi (buffer), GetOp () ); // statt 0 intValue
- break;
- }
- case 4: // City
- {
- if ( ! adrargs )
- adrargs = new AddressQuery ();
-
- PtString cityvalue ( buffer );
- adrargs->Setcity ( cityvalue, GetOp () );
- break;
- }
- }
- }
- }
-
-
- void CPersQueryDlg::OnClickedQueryStart()
- {
- if (m_CQueryList.GetCount () > 0)
- {
-
- PersonOnDemandLSet result;
- int erc;
-
- if ( adrargs != NULL )
- args->Setadrs ( 1, PtGT | PtEQ, adrargs ); // add address arguments to arguments
-
- if ((erc=pall->Query ( args, &result )) == 0) // start query
- {
- if ( result.GetNum () > 0 )
- {
- int nResult;
- CQueryResultDlg queryresult (this);
-
- queryresult.SetResult ( &result ); // set queryresult
-
- nResult = queryresult.DoModal (); // start dialog
- queryresult.EndDialog (nResult); // end dialog
- }
- else
- MessageBox ("No Entries", "Query", MB_OK); // nothing found
- }
- else // query error
- {
- char buffer[100];
- sprintf ( buffer, "POET Query error: %d", erc );
- MessageBox (buffer, "Query", MB_OK);
- }
- // initialize for next query
- if (args)
- delete args;
- args = new PersonQuery ();
- if ( adrargs )
- {
- delete adrargs;
- adrargs = NULL;
- }
- m_CQueryList.ResetContent (); // delete arguments in Lisbox control
- }
- }
-