home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SOURCE / FUNCTION / MSGEXPR.PRG < prev    next >
Text File  |  1994-06-04  |  4KB  |  132 lines

  1. // Expression Builder Dialog
  2. // FiveWin - Dialog tools
  3.  
  4. #include "FiveWin.ch"
  5.  
  6. #define ID_EXPR      110
  7. #define ID_WORKAREAS 120
  8. #define ID_FIELDS    130
  9. #define ID_EQUAL     150
  10. #define ID_NOEQUAL   160
  11. #define ID_AND       170
  12. #define ID_PLUS      180
  13. #define ID_LESS      190
  14. #define ID_GREATER   200
  15. #define ID_OR        210
  16. #define ID_MINUS     220
  17.  
  18. #define ID_UNDO      345
  19. #define ID_CHECK     350
  20.  
  21. //----------------------------------------------------------------------------//
  22.  
  23. function cGetExpression( cExpression, cTitle )
  24.  
  25.    local oDlg, oExpr, oLbxAreas, oFields, cTemp
  26.    local aUnDo  := { "" }
  27.    local cAlias := "", cField := ""
  28.  
  29.    DEFAULT cExpression := Space( 100 ),;
  30.            cTitle := "Expression builder"
  31.  
  32.    cTemp = PadR( cExpression, 100 )
  33.  
  34.    DEFINE DIALOG oDlg RESOURCE "ExpBuilder" TITLE cTitle
  35.  
  36.    REDEFINE GET oExpr VAR cTemp ID ID_EXPR OF oDlg
  37.  
  38.    REDEFINE LISTBOX cAlias ITEMS aGetWorkAreas() ;
  39.       ID ID_WORKAREAS OF oDlg ;
  40.       ON CHANGE ShowFields( cAlias, oFields )
  41.  
  42.    REDEFINE LISTBOX oFields VAR cField ID ID_FIELDS OF oDlg ;
  43.       ON DBLCLICK ExprAdd( " " + cAlias + "->" + ;
  44.                   SubStr( cField, 1, At( Chr( 9 ), cField ) - 1 ),;
  45.                   @cTemp, oExpr, aUnDo )
  46.  
  47.    REDEFINE BUTTON ID ID_EQUAL OF oDlg ;
  48.       ACTION ExprAdd( " = ", @cTemp, oExpr, aUnDo )
  49.  
  50.    REDEFINE BUTTON ID ID_NOEQUAL OF oDlg ;
  51.       ACTION ExprAdd( " <> ", @cTemp, oExpr, aUnDo )
  52.  
  53.    REDEFINE BUTTON ID ID_AND OF oDlg ;
  54.       ACTION ExprAdd( " .and. ", @cTemp, oExpr, aUnDo )
  55.  
  56.    REDEFINE BUTTON ID ID_PLUS OF oDlg ;
  57.       ACTION ExprAdd( " + ", @cTemp, oExpr, aUnDo )
  58.  
  59.    REDEFINE BUTTON ID ID_LESS OF oDlg ;
  60.       ACTION ExprAdd( " < ", @cTemp, oExpr, aUnDo )
  61.  
  62.    REDEFINE BUTTON ID ID_GREATER OF oDlg ;
  63.       ACTION ExprAdd( " > ", @cTemp, oExpr, aUnDo )
  64.  
  65.    REDEFINE BUTTON ID ID_OR OF oDlg ;
  66.       ACTION ExprAdd( " .or. ", @cTemp, oExpr, aUnDo )
  67.  
  68.    REDEFINE BUTTON ID ID_MINUS OF oDlg ;
  69.       ACTION ExprAdd( " - ", @cTemp, oExpr, aUnDo )
  70.  
  71.    REDEFINE BUTTON ID ID_UNDO OF oDlg ACTION UnDo( @cTemp, oExpr, aUnDo )
  72.  
  73.    REDEFINE BUTTON ID ID_CHECK OF oDlg ;
  74.       ACTION If( At( Type( cTemp ), "UIUE" ) == 0,;
  75.                  MsgInfo( "Correct expression" ),;
  76.                  MsgAlert( "Invalid expression" ) )
  77.  
  78.    ACTIVATE DIALOG oDlg CENTERED
  79.  
  80.    if oDlg:nResult == IDOK
  81.       cExpression = AllTrim( cTemp )
  82.    endif
  83.  
  84. return cExpression
  85.  
  86. //----------------------------------------------------------------------------//
  87.  
  88. static function UnDo( cTemp, oExpr, aUnDo )
  89.  
  90.    if Len( aUnDo ) > 0
  91.       cTemp = PadR( ATail( aUnDo ), 100 )
  92.       oExpr:Refresh()
  93.       ASize( aUnDo, Len( aUnDo ) - 1 )
  94.    else
  95.       Tone( 900, 2 )
  96.    endif
  97.  
  98. return nil
  99.  
  100. //----------------------------------------------------------------------------//
  101.  
  102. static function ExprAdd( cNew, cExpr, oExpr, aUnDo )
  103.  
  104.    AAdd( aUnDo, RTrim( cExpr ) )
  105.    cExpr = PadR( RTrim( cExpr ) + cNew, 100 )
  106.    oExpr:Refresh()
  107.  
  108. return nil
  109.  
  110. //----------------------------------------------------------------------------//
  111.  
  112. static function ShowFields( cAlias, oLbx )
  113.  
  114.    local aFields
  115.    local n
  116.  
  117.    aFields = ( cAlias )->( DbStruct() )
  118.    oLbx:Reset()
  119.  
  120.    for n = 1 to Len( aFields )
  121.       oLbx:Add( aFields[ n ][ 1 ] + Chr( 9 ) + ;
  122.                 aFields[ n ][ 2 ] + ;
  123.                 xPadL( Str( aFields[ n ][ 3 ], 3 ), 20 ) + ;
  124.                 xPadL( Str( aFields[ n ][ 4 ], 1 ), 10 ) )
  125.    next
  126.  
  127.    oLbx:GoTop()
  128.  
  129. return nil
  130.  
  131. //----------------------------------------------------------------------------//
  132.