home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / mslang / poetmf / src / persqry.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-23  |  6.8 KB  |  302 lines

  1. // ******************************************************************
  2. //
  3. //  persqry.cpp : implementation file
  4. //
  5. //    Implemented classes:
  6. //        CPersQueryDlg
  7. // 
  8. //  Author: Nils Behncke
  9. //            POET Software, August 1993
  10. //
  11. // ******************************************************************
  12.  
  13. #include <stdafx.h>            //    header to MFC
  14. #include <helloapp.h>        //    header to application class and window class
  15. #include <persqry.h>        //    header to this file
  16. #include <queryres.h>       //    header to resultdialog
  17.  
  18.  
  19. #ifdef _DEBUG               // added by ClassWizard
  20. #undef THIS_FILE                                
  21. static char BASED_CODE THIS_FILE[] = __FILE__;  
  22. #endif                                          
  23.  
  24.                          
  25. extern CHelloWinApp NEAR theApp;                // declaration of application-instance
  26.  
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CPersQueryDlg dialog
  29.  
  30. char    *personmembers [] =                     //    members of Person
  31.         {
  32.             "Name",
  33.             "Firstnames",
  34.             "Address.Street",
  35.             "Address.Zip",
  36.             "Address.City",
  37.             ""
  38.         };
  39.  
  40.  
  41. CPersQueryDlg::CPersQueryDlg(CWnd* pParent, UINT nIDTemp)    //    modified constructor generated by ClassWizard 
  42.     : CDialog(nIDTemp, pParent)                             //    call baseclass constructor
  43. {
  44.     //{{AFX_DATA_INIT(CPersQueryDlg)
  45.     m_strValue = "";
  46.     m_nOpButtons = 1;    //    set buttondefault to Equal
  47.     //}}AFX_DATA_INIT
  48. }
  49.  
  50.  
  51. CPersQueryDlg::~CPersQueryDlg ()
  52. {
  53.     if (pall)
  54.         delete pall;
  55.     if (args)
  56.         delete args;
  57.     if (adrargs)
  58.         delete adrargs;
  59. }
  60.  
  61.  
  62. void CPersQueryDlg::DoDataExchange(CDataExchange* pDX)
  63. {
  64.     CDialog::DoDataExchange(pDX);
  65.     //{{AFX_DATA_MAP(CPersQueryDlg)
  66.     DDX_Control(pDX, IDC_LIST_QUERY, m_CQueryList);
  67.     DDX_Control(pDX, IDC_LIST_MEMBER, m_CMemberList);
  68.     DDX_Text(pDX, IDC_EDIT_VALUE, m_strValue);
  69.     DDX_Radio(pDX, IDC_OP_GREATER, m_nOpButtons);
  70.     //}}AFX_DATA_MAP
  71. }
  72.  
  73. BEGIN_MESSAGE_MAP(CPersQueryDlg, CDialog)
  74.     //{{AFX_MSG_MAP(CPersQueryDlg)
  75.     ON_BN_CLICKED(IDC_QUERY_DELETE, OnClickedQueryDelete)
  76.     ON_BN_CLICKED(IDC_QUERY_ENTER, OnClickedQueryEnter)
  77.     ON_BN_CLICKED(IDC_QUERY_START, OnClickedQueryStart)
  78.     //}}AFX_MSG_MAP
  79. END_MESSAGE_MAP()
  80.  
  81. void CPersQueryDlg::Init ()
  82. {
  83.     adrargs = NULL;
  84.     pall = new PersonAllSet (theApp.GetOA ());
  85.     args = new PersonQuery ();
  86. }
  87.  
  88.  
  89. void CPersQueryDlg::SetMemberList ()
  90. {
  91.     SetMember (personmembers);
  92. }
  93.  
  94.  
  95. void CPersQueryDlg::SetMember (char **pp )
  96. {
  97.     while ( *pp[0] != 0x00 )
  98.     {
  99.         m_CMemberList.AddString (*pp);        //    set names of member variables into Listbox control
  100.         pp++;
  101.     }
  102. }
  103.  
  104. int CPersQueryDlg::GetMember ( char **pp )
  105. {
  106.     int    item;
  107.  
  108.     if ( (item = m_CMemberList.GetCurSel ()) >= 0 )    //    if one selected    
  109.     {
  110.         char    buffer[100];
  111.         char    request[256];
  112.         register int     i, found;
  113.  
  114.         m_CMemberList.GetText ( item, buffer );        //    get name of member variable
  115.  
  116.         for ( i = 0, found = FALSE; ! found && pp[i][0] != 0x00; i++ )    //    search for it in member array
  117.             found = strcmp ( buffer, pp[i] ) == 0;
  118.  
  119.         --i;
  120.         if ( found )
  121.         {
  122.         // build the argument string
  123.             strcpy ( request, pp[i] );
  124.             strcat ( request, GetOpString (buffer, sizeof(buffer)) );
  125.             strcat ( request, m_strValue.GetBuffer (sizeof (buffer)) );
  126.             m_strValue.ReleaseBuffer ();
  127.         // add to the listbox
  128.             m_CQueryList.AddString ( request );
  129.             return i;
  130.         }
  131.     }
  132.     return -1;
  133. }
  134.  
  135. PtCmpOp CPersQueryDlg::GetOp ( )
  136. {
  137.     switch (m_nOpButtons)
  138.        {
  139.         case 0:
  140.             return ( PtGT );    //    greater
  141.             break;
  142.         case 1:
  143.             return ( PtEQ );    //    equal
  144.             break;
  145.         case 2:
  146.             return ( PtLT );    //    less
  147.             break;
  148.         case 3:
  149.             return ( PtEQ | PtGT );        //    equal or greater
  150.             break;
  151.         case 4:
  152.             return ( PtEQ | PtLT );        //    equal or less
  153.             break;
  154.         default:
  155.             return ( PtEQ );    //    default setting, never used
  156.        }
  157. }
  158.  
  159. char * CPersQueryDlg::GetOpString ( char *buffer, int maxlen )
  160. {
  161.     switch (m_nOpButtons)
  162.        {
  163.         case 0:
  164.             return strcpy ( buffer, " > ");
  165.             break;
  166.         case 1:
  167.             return strcpy ( buffer, " == ");
  168.             break;
  169.         case 2:
  170.             return strcpy ( buffer, " < ");
  171.             break;
  172.         case 3:
  173.             return strcpy ( buffer, " >= ");
  174.             break;
  175.         case 4:
  176.             return strcpy ( buffer, " <= ");
  177.             break;
  178.         default:
  179.             return strcpy ( buffer, " == ");    //    default setting, never used
  180.        }
  181. }
  182.  
  183.  
  184. /////////////////////////////////////////////////////////////////////////////
  185. // CPersQueryDlg message handlers
  186.  
  187. BOOL CPersQueryDlg::OnInitDialog()
  188. {
  189.     CDialog::OnInitDialog();
  190.  
  191.     Init ();        
  192.     SetMemberList ();    //    set names of Person's member variables
  193.     
  194.     return TRUE;  // return TRUE  unless you set the focus to a control
  195. }
  196.  
  197. void CPersQueryDlg::OnClickedQueryDelete()
  198. {
  199.     MessageBox ("Not yet implemented", "Delete Arguments", MB_OK);
  200. }
  201.  
  202.  
  203. void CPersQueryDlg::OnClickedQueryEnter()
  204. {
  205.     int        item;
  206.  
  207.     UpdateData ();
  208.     if ( ( item = GetMember ( personmembers )) >= 0 )
  209.     {
  210.         char    *buffer;
  211.         buffer = m_strValue.GetBuffer ( m_strValue.GetLength () );
  212.         m_strValue.ReleaseBuffer ();
  213.         switch ( item )        //    set arguments
  214.         {
  215.             case    0:    // Name
  216.                 {
  217.                     PtString    namevalue ( buffer );
  218.                     args->Setname ( namevalue, GetOp () );
  219.                     break;
  220.                 }
  221.             case    1:    // Firstnames
  222.                 {
  223.                     PtString    fnamevalue ( buffer );
  224.                     args->Setfirstnames ( 1, PtGT | PtEQ, fnamevalue, GetOp () );
  225.                     break;
  226.                 }
  227.             case    2:    // Street
  228.                 {
  229.                     if ( ! adrargs )
  230.                         adrargs = new AddressQuery ();
  231.  
  232.                     PtString    streetvalue ( buffer );
  233.                     adrargs->Setstreet ( streetvalue, GetOp () );
  234.                     break;
  235.                 }
  236.             case    3:    // Zip
  237.                 {
  238.                     if ( ! adrargs )
  239.                         adrargs = new AddressQuery ();
  240.  
  241.                     adrargs->Setzip ( atoi (buffer), GetOp () );  // statt 0 intValue
  242.                     break;
  243.                 }
  244.             case    4:    // City
  245.                 {
  246.                     if ( ! adrargs )
  247.                         adrargs = new AddressQuery ();
  248.  
  249.                     PtString    cityvalue ( buffer );
  250.                     adrargs->Setcity ( cityvalue, GetOp () );
  251.                     break;
  252.                 }
  253.         }
  254.     }
  255. }
  256.  
  257.  
  258. void CPersQueryDlg::OnClickedQueryStart()
  259. {
  260.     if (m_CQueryList.GetCount () > 0)
  261.     {
  262.  
  263.     PersonOnDemandLSet    result;
  264.     int        erc;
  265.  
  266.     if ( adrargs != NULL )
  267.             args->Setadrs ( 1, PtGT | PtEQ, adrargs );    //    add address arguments to arguments
  268.  
  269.     if ((erc=pall->Query ( args, &result )) == 0)    //    start query
  270.     {
  271.         if ( result.GetNum () > 0 )
  272.         {
  273.             int    nResult;
  274.             CQueryResultDlg        queryresult (this);
  275.  
  276.             queryresult.SetResult ( &result );  //    set queryresult
  277.  
  278.             nResult = queryresult.DoModal ();    //    start dialog
  279.             queryresult.EndDialog (nResult);    //    end dialog
  280.         }
  281.         else
  282.             MessageBox ("No Entries", "Query", MB_OK);    //    nothing found
  283.     }
  284.     else    //    query error
  285.     {
  286.         char    buffer[100];
  287.         sprintf ( buffer, "POET Query error: %d", erc );
  288.         MessageBox (buffer, "Query", MB_OK);
  289.     }
  290.     //    initialize for next query
  291.     if (args)
  292.         delete args;
  293.     args = new PersonQuery ();
  294.     if ( adrargs )
  295.     {
  296.         delete adrargs;
  297.         adrargs = NULL;
  298.     }
  299.     m_CQueryList.ResetContent ();    //    delete arguments in Lisbox control
  300.     }
  301. }
  302.