home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / IDE / SOURCE / IDE.PRG < prev    next >
Text File  |  1994-06-11  |  36KB  |  1,182 lines

  1. #include "FiveWin.ch"
  2.  
  3. #define IT_UNDEFINED 0
  4. #define IT_BITMAP    1
  5. #define IT_DATABASE  2
  6. #define IT_DIALOG    3
  7. #define IT_DOC       4
  8. #define IT_ICON      5
  9. #define IT_INDEX     6
  10. #define IT_LIBRARY   7
  11. #define IT_MENU      8
  12. #define IT_PROGRAM   9
  13. #define IT_REPORT   10
  14. #define IT_SOUND    11
  15.  
  16. // If you are using Clipper 5.01 change the following:
  17. // #define IDE_DRIVERS DbfNtx
  18.  
  19. #define    IDE_DRIVERS  DbfNtx    // , DbfCdx, DbfMdx, DbfNdx, DbPx
  20. #translate DRIVERS( <Driver1> [,<Driver2>] ) ;
  21.         => { <(Driver1)> [,<(Driver2)>] }
  22.  
  23. static oWnd, oWndAreas, oItemAreas, oIcon
  24.  
  25. static cIncPath, cLibPath, cProject, lWorkAreas
  26.  
  27. static aPrjBmps := {}
  28. static aObjBmps := {}
  29. static aDbfBmps := {}
  30. static aRptBmps := {}
  31.  
  32. //----------------------------------------------------------------------------//
  33.  
  34. function Main()
  35.  
  36.    local oBrush, oBar, oDlg
  37.  
  38.    extern IDE_DRIVERS
  39.  
  40.    DEFINE BRUSH oBrush STYLE TILED
  41.  
  42.    DEFINE ICON oIcon RESOURCE "FwIde"
  43.  
  44.    DEFINE WINDOW oWnd FROM 0, 0 TO 23, 78 ;
  45.       TITLE FWVERSION + " - IDE" ;
  46.       BRUSH oBrush ;
  47.       ICON  oIcon ;
  48.       MDI ;
  49.       MENU BuildMenu() ;
  50.       MENUINFO 5                   // Where Windows will report of MdiChild
  51.       
  52.    DEFINE BUTTONBAR oBar 3D SIZE 33, 33 OF oWnd
  53.  
  54.    DEFINE BUTTON RESOURCE "Info" OF oBar ;
  55.       MESSAGE "About FiveWin" ;
  56.       ACTION ShellAbout( FWVERSION + " IDE", FWCOPYRIGHT, oIcon:hIcon )
  57.  
  58.    DEFINE BUTTON RESOURCE "SelFile" OF oBar ;
  59.       MESSAGE "Select a file" ACTION SelFile()
  60.  
  61.    DEFINE BUTTON RESOURCE "Exit" OF oBar ACTION oWnd:End() ;
  62.       MESSAGE "Exit from IDE"
  63.  
  64.    DEFINE BUTTON RESOURCE "Cut" OF oBar GROUP ;
  65.       MESSAGE "Cut to Clipboard" ACTION MsgInfo( "Cut" )
  66.  
  67.    DEFINE BUTTON RESOURCE "Copy" OF oBar ;
  68.       MESSAGE "Copy to Clipboard" ACTION MsgInfo( "Copy" )
  69.  
  70.    DEFINE BUTTON RESOURCE "Paste" OF oBar ;
  71.       MESSAGE "Paste from Clipboard" ACTION MsgInfo( "Paste" )
  72.  
  73.    DEFINE BUTTON RESOURCE "Project" GROUP OF oBar ;
  74.       MESSAGE "Open a project" ACTION PrjOpen()
  75.  
  76.    DEFINE BUTTON RESOURCE "Debug" OF oBar ;
  77.       MESSAGE "Inspects the application Stack" ACTION StackInspect()
  78.  
  79.    DEFINE BUTTON RESOURCE "Objects" OF oBar ;
  80.       MESSAGE "Inspects the IDE Object" ACTION ObjInspect( oWnd, "oWnd" )
  81.  
  82.    DEFINE BUTTON RESOURCE "DataBase" GROUP OF oBar ;
  83.       MESSAGE "Use a database" ACTION DbfOpen()
  84.  
  85.    DEFINE BUTTON RESOURCE "Edit" OF oBar ;
  86.       MESSAGE "Review a program" ACTION PrgOpen()
  87.  
  88.    DEFINE BUTTON RESOURCE "Menu" OF oBar ;
  89.       MESSAGE "Review a menu" ACTION MnuOpen()
  90.  
  91.    DEFINE BUTTON RESOURCE "Dialog" OF oBar ;
  92.       MESSAGE "Review a dialog Box" ACTION DlgOpen()
  93.  
  94.    DEFINE BUTTON RESOURCE "Report" OF oBar ;
  95.       MESSAGE "Review a report" ACTION ReportOpen()
  96.  
  97.    DEFINE BUTTON RESOURCE "Doc" OF oBar ;
  98.       MESSAGE "Review documentation files" ACTION DocOpen()
  99.  
  100.    DEFINE BUTTON RESOURCE "Trash" GROUP OF oBar ;
  101.       MESSAGE "Control of deleted objects"
  102.  
  103.    DEFINE BUTTON RESOURCE "MsDos" GROUP OF oBar ;
  104.       MESSAGE "Quick access to MsDos" ;
  105.       ACTION WinExec( "Command.com" )
  106.  
  107.    // @ 2, 2 BITMAP RESOURCE "Fw16" NOBORDER OF oWnd:oWndClient
  108.  
  109.    SET MESSAGE OF oWnd TO FWVERSION + " - " + FWCOPYRIGHT CENTERED
  110.  
  111.    ACTIVATE WINDOW oWnd MAXIMIZED ;
  112.       ON INIT ( If( lWorkAreas, WorkAreas(),),;
  113.                 If( ! Empty( cProject ), PrjOpen( cProject ),) ) ;
  114.       ON RIGHT CLICK IdePopup() ;
  115.       VALID MsgYesNo( "Exit FiveWin IDE ?" )
  116.  
  117.  
  118. return nil
  119.  
  120. //----------------------------------------------------------------------------//
  121.  
  122. function BuildMenu()
  123.  
  124.    local oMenu
  125.  
  126.    MENU oMenu
  127.       MENUITEM "&Program"
  128.       MENU
  129.         MENUITEM "&New..."   ACTION PrgNew()  MESSAGE "Creates a new program"
  130.         MENUITEM "&Open..."  ACTION PrgOpen() MESSAGE "Edit a previous program"
  131.         MENUITEM "&Save..."
  132.         MENUITEM "&Save as..."
  133.         SEPARATOR
  134.         MENUITEM "&Execute..."    MESSAGE "Execute a program"
  135.         MENUITEM "&Parameters..." MESSAGE "Select execution parameters"
  136.         SEPARATOR
  137.         MENUITEM "&Exit..." ACTION oWnd:End() ;
  138.           MESSAGE "Finishing with FiveWin IDE"
  139.       ENDMENU
  140.  
  141.       MENUITEM "&DataBases"
  142.       MENU
  143.          MENUITEM "&Use DBF..." ACTION DbfOpen() ;
  144.             MESSAGE "Open a DataBase"
  145.  
  146.          MENUITEM "&Create DBF..."  ACTION DbfNew() ;
  147.             MESSAGE "Create a new DataBase"
  148.  
  149.          MENUITEM oItemAreas PROMPT "&WorkAreas..." ;
  150.             ACTION WorkAreas() ;
  151.             MESSAGE "Inspects the DataBase WorkAreas"
  152.  
  153.          MENUITEM "&Dictionaries" ;
  154.             MESSAGE "Application Dictionaries management"
  155.  
  156.          SEPARATOR
  157.          MENUITEM "I&ndexes..."  ACTION Indexes() ;
  158.             MESSAGE "Inspects the database indexes"
  159.  
  160.          MENUITEM "&Relations..." ;
  161.             MESSAGE "Inspects the database relations" ;
  162.             ACTION Relations( Alias() )
  163.  
  164.          MENUITEM "&Filters..."   MESSAGE "Controls of existing filters"
  165.          SEPARATOR
  166.          MENUITEM "New r&eport..." ACTION ReportNew() ;
  167.             MESSAGE "Design a new report"
  168.       ENDMENU
  169.  
  170.       MENUITEM "&Resources"
  171.       MENU
  172.          MENUITEM "&Bitmaps" ACTION BmpOpen() MESSAGE "Review a bitmap"
  173.          MENUITEM "&Dialog Boxes..."  ACTION DlgNew() ;
  174.             MESSAGE "Create a new Dialog Box"
  175.  
  176.          MENUITEM "&Icons..." ACTION IconOpen() ;
  177.             MESSAGE "Review Icons"
  178.  
  179.          MENUITEM "&PullDown Menu..."
  180.          MENUITEM "&Sound..."         ACTION WinExec( "SoundRec" )
  181.  
  182.          MENUITEM "&Text..."  ACTION TxtOpen() ;
  183.             MESSAGE "Review a text file"
  184.  
  185.          MENUITEM "&Video..."
  186.          SEPARATOR
  187.          MENUITEM "&Compile RC... " ;
  188.             ACTION WinExec( "pifs\rc.pif" + ;
  189.                             cGetFile( "Windows Resources (*.rc) | *.rc",;
  190.                                       "Select a RC" ) )
  191.          MENUITEM "&Resource WorkShop" ;
  192.             ACTION WinExec( "c:\borlandc\bin\WorkShop" ) ;
  193.             MESSAGE "Use Borland's Resource WorkShop"
  194.       ENDMENU
  195.  
  196.       MENUITEM "Pr&oject"
  197.       MENU
  198.          MENUITEM "&New Project..." ACTION PrjNew() ;
  199.             MESSAGE "Creates a new project"
  200.  
  201.          MENUITEM "&Open Project..." ACTION PrjOpen() ;
  202.             MESSAGE "Use a previous defined project"
  203.  
  204.          SEPARATOR
  205.          MENUITEM "&Create documentation..." ;
  206.             MESSAGE "Build new documentation files" ACTION DocNew()
  207.  
  208.          MENUITEM "&Review Libraries..." ;
  209.             MESSAGE "Review Libraries LIB files"
  210.  
  211.          SEPARATOR
  212.          MENUITEM "&Configure..." ACTION PrjConfig() ;
  213.             MESSAGE "Set default Project parameters"
  214.  
  215.          MENUITEM "&Build"
  216.          SEPARATOR
  217.          MENUITEM "&FiveWin RegisterEXE()" ;
  218.             MESSAGE "Free a FiveWin application" ;
  219.             ACTION RegisterEXE()
  220.       ENDMENU
  221.  
  222.       MENUITEM "&Windows"
  223.       MENU
  224.          MENUITEM "&Arrange Icons"            ACTION oWnd:ArrangeIcons() ;
  225.             MESSAGE "Reorganize iconized windows positions on the desktop"
  226.  
  227.          MENUITEM "&Vertical Tile Windows"    ACTION oWnd:Tile() ;
  228.             MESSAGE "Adjust vertical position of windows over the desktop"
  229.  
  230.          MENUITEM "&Horizontal Tile Windows"  ACTION oWnd:Tile( .t. ) ;
  231.             MESSAGE "Adjust horizontal position of windows over the desktop"
  232.  
  233.          MENUITEM "&Cascade Windows"          ACTION oWnd:Cascade() ;
  234.             MESSAGE "Adjust order position of windows over the desktop"
  235.  
  236.          MENUITEM "&Iconize All Windows"      ACTION oWnd:IconizeAll() ;
  237.             MESSAGE "Iconize all child windows over the desktop"
  238.  
  239.          MENUITEM "C&lose All Windows"        ACTION oWnd:CloseAll() ;
  240.             MESSAGE "Close all child windows over the desktop"
  241.  
  242.          SEPARATOR
  243.          MENUITEM "I&nspect IDE Window " ;
  244.             MESSAGE "Inspect the Object IDE Window" ;
  245.             ACTION ObjInspect( oWnd, "oWnd" )
  246.       ENDMENU
  247.  
  248.       MENUITEM "&Help"
  249.       MENU
  250.          MENUITEM "&Contents..."   MESSAGE "FiveWin IDE Help contents" ;
  251.             ACTION WinHelp()
  252.          MENUITEM "&Search..."     MESSAGE "Search help for a specific topic"
  253.          MENUITEM "&Using help..." MESSAGE "How to use the IDE Help"
  254.          SEPARATOR
  255.          MENUITEM "&About" ;
  256.             ACTION ShellAbout( FWVERSION + " IDE", FWCOPYRIGHT, oIcon:hIcon )
  257.  
  258.       ENDMENU
  259.    ENDMENU
  260.  
  261. return oMenu
  262.  
  263. //----------------------------------------------------------------------------//
  264.  
  265. function PrgNew()
  266.  
  267.    PrgOpen( cGetNewFileName( "NONAM", "prg" ) )
  268.  
  269. return nil
  270.  
  271. //----------------------------------------------------------------------------//
  272.  
  273. function PrgOpen( cPrgName )
  274.  
  275.    local oWndEdit, oBar, oGet, oIco, oCrsPen, oFont
  276.    local cText
  277.  
  278.    DEFAULT cPrgName := cGetFile( "Clipper Program (*.prg) | *.prg",;
  279.                                  "Select a PRG" )
  280.    if Empty( cPrgName )
  281.       return nil
  282.    else
  283.       cText = MemoRead( cPrgName )
  284.    endif
  285.  
  286.    DEFINE ICON oIco RESOURCE "Write"
  287.  
  288.    DEFINE CURSOR oCrsPen RESOURCE "Pen"
  289.  
  290.    DEFINE WINDOW oWndEdit FROM 1, 1 TO 23, 33 ;
  291.       TITLE "Program: " + cNoPath( cNoExt( cPrgName ) ) MDICHILD OF oWnd ;
  292.       ICON oIco
  293.  
  294.    DEFINE BUTTONBAR oBar OF oWndEdit
  295.  
  296.    DEFINE BUTTON RESOURCE "ToDisk" OF oBar ;
  297.       MESSAGE "Save to disk" ;
  298.       ACTION ( oGet:Save(), MemoWrit( cPrgName, cText ), Tone( 900, 1 ) )
  299.  
  300.    DEFINE BUTTON RESOURCE "Compile" GROUP OF oBar ;
  301.       MESSAGE "Compile this program" ;
  302.       ACTION ( oGet:Save(),;
  303.                MemoWrit( cPrgName, cText ),;
  304.                WinExec( "pifs\compile.pif " + cNoExt( cPrgName ) ) )
  305.  
  306.    DEFINE BUTTON RESOURCE "Link" OF oBar ;
  307.       MESSAGE "Link this program" ;
  308.       ACTION WinExec( "pifs\link.pif " + cNoExt( cPrgName ) )
  309.  
  310.    DEFINE BUTTON RESOURCE "Exec"    OF oBar ;
  311.       MESSAGE "Execute this program" ;
  312.       ACTION WinExec( cNoExt( cPrgName ) )
  313.  
  314.    DEFINE BUTTON RESOURCE "Font" GROUP OF oBar ACTION oGet:SelFont() ;
  315.       MESSAGE "Selects a new font and text color"
  316.  
  317.    DEFINE BUTTON RESOURCE "Clr"  OF oBar ACTION oGet:SelColor() ;
  318.       MESSAGE "Selects a new background color"
  319.  
  320.    DEFINE FONT oFont NAME "Arial" SIZE 6, 15 BOLD
  321.  
  322.    @ 0, 0 GET oGet VAR cText MEMO OF oWndEdit ;
  323.       CURSOR oCrsPen COLOR "B+/BG" FONT oFont
  324.  
  325.    oWndEdit:SetControl( oGet )
  326.  
  327.    oGet:bRClicked = { || ThisInspect( oGet ) }
  328.  
  329.    ACTIVATE WINDOW oWndEdit
  330.  
  331. return nil
  332.  
  333. //----------------------------------------------------------------------------//
  334.  
  335. function DbfOpen( cDbfName, cDriver )
  336.  
  337.    local oWndBrw, oBar, oBrw, oIco, oWndRec, oFont
  338.    local nFilter
  339.    local cAlias
  340.  
  341.    DEFAULT cDriver  := "DbfNtx"
  342.  
  343.    if Empty( cDbfName )
  344.       cDbfName := cGetFile( "Standard dbf (*.dbf) | *.dbf |" + ;
  345.                             "FoxPro cdx (*.dbf) | *.dbf |" + ;
  346.                             "dBase IV mdx (*.dbf) | *.dbf |" + ;
  347.                             "dBase III+ ndx (*.dbf) | *.dbf |" + ;
  348.                             "Paradox db (*.db) | *.db", ;
  349.                             "Select a DataBase to use" )
  350.  
  351.       cDriver = DRIVERS( IDE_DRIVERS )[ nGetFileFilter() ]
  352.    endif
  353.  
  354.    if ! Empty( cDbfName )
  355.  
  356.       USE ( cDbfName ) NEW VIA ( cDriver ) SHARED ;
  357.          ALIAS ( cCheckArea( cNoExt( cNoPath( cDbfName ) ) ) )
  358.  
  359.       cAlias = Alias()
  360.  
  361.       DEFINE ICON oIco RESOURCE "DataBase"
  362.  
  363.       DEFINE WINDOW oWndBrw FROM 1, 1 TO 23, 33 ;
  364.          TITLE "DataBase: " + cNoExt( cNoPath( cDbfName ) ) ;
  365.          ICON oIco MDICHILD OF oWnd
  366.  
  367.       DEFINE BUTTONBAR oBar OF oWndBrw
  368.  
  369.       DEFINE BUTTON RESOURCE "New" OF oBar ;
  370.          ACTION ( oBrw:RecAdd(), oBrw:Refresh() ) ;
  371.          MESSAGE "Add a new record"
  372.  
  373.       DEFINE BUTTON RESOURCE "Edit" OF oBar ;
  374.          MESSAGE "Edit current record" ;
  375.          ACTION  oWndRec := RecEdit( "Record: " + cAlias, oBrw )
  376.  
  377.       DEFINE BUTTON RESOURCE "Del" OF oBar ;
  378.          MESSAGE "Delete current record" ;
  379.          ACTION ( ( cAlias )->( DelToggle() ), oBrw:DrawSelect() )
  380.  
  381.       DEFINE BUTTON RESOURCE "Prg" GROUP OF oBar ;
  382.          MESSAGE "Generate source code"
  383.  
  384.       DEFINE BUTTON RESOURCE "Top" GROUP OF oBar ;
  385.          ACTION oBrw:GoTop() ;
  386.          MESSAGE "Go to first record"
  387.  
  388.       DEFINE BUTTON RESOURCE "Rewind" OF oBar ;
  389.          ACTION oBrw:PageUp() ;
  390.          MESSAGE "Go to previous page"
  391.  
  392.       DEFINE BUTTON RESOURCE "Prev" OF oBar ;
  393.          ACTION oBrw:GoUp() ;
  394.          MESSAGE "Go previous record"
  395.  
  396.       DEFINE BUTTON RESOURCE "Next" OF oBar ;
  397.          ACTION oBrw:GoDown() ;
  398.          MESSAGE "Go to next record"
  399.  
  400.       DEFINE BUTTON RESOURCE "Forward" OF oBar ;
  401.          ACTION oBrw:PageDown() ;
  402.          MESSAGE "Go to next page"
  403.  
  404.       DEFINE BUTTON RESOURCE "Bottom" OF oBar ;
  405.          ACTION oBrw:GoBottom() ;
  406.          MESSAGE "Go to last record"
  407.  
  408.       DEFINE BUTTON RESOURCE "Font" GROUP OF oBar ;
  409.          ACTION oBrw:SelFont() ;
  410.          MESSAGE "Select a new font"
  411.  
  412.       DEFINE BUTTON RESOURCE "Clr" OF oBar ;
  413.          ACTION ( oBrw:SelColor(),;
  414.                   If( oWndRec != nil,;
  415.                   oWndRec:oControl:SetColor( oBrw:nClrText, oBrw:nClrPane ),) ) ;
  416.          MESSAGE "Select a new backcolor"
  417.  
  418.       DEFINE FONT oFont NAME "Arial" SIZE 6, 15 BOLD
  419.  
  420.       @ 0, 0 LISTBOX oBrw FIELDS OF oWndBrw ;
  421.          ON CHANGE ( If( oWndAreas != nil, oWndAreas:oControl:Refresh(),),;
  422.                      If( oWndRec != nil, oWndRec:oControl:Refresh(),) ) ;
  423.          ON DBLCLICK oWndRec := RecEdit( "Record: " + cAlias, oBrw ) ;
  424.          SIZE 400, 400 FONT oFont
  425.  
  426.       oBrw:bLine = { | aTemp | aTemp := _aFields( cAlias ),;
  427.                                AAdd( aTemp, nil ), AIns( aTemp, 1 ),;
  428.                                aTemp[ 1 ] := If( ( cAlias )->( Deleted() ),;
  429.                                aDbfBmps[ 2 ], aDbfBmps[ 1 ] ), aTemp }
  430.  
  431.       AAdd( oBrw:aColSizes, nil )
  432.       AIns( oBrw:aColSizes, 1 )
  433.       oBrw:aColSizes[ 1 ] = 16
  434.  
  435.       AAdd( oBrw:aHeaders, nil )
  436.       AIns( oBrw:aHeaders, 1 )
  437.       oBrw:aHeaders[ 1 ] = ""
  438.  
  439.       oWndBrw:SetControl( oBrw )
  440.  
  441.       ACTIVATE WINDOW oWndBrw ;
  442.          VALID ( If( oWndRec != nil, oWndRec:End(),),;
  443.                  oBrw:lCloseArea() )
  444.  
  445.       if oWndAreas != nil
  446.          oWndAreas:oControl:Refresh()  // We updates the info on the WorkAreas
  447.       endif                            // Inspector
  448.  
  449.    endif
  450.  
  451. return nil
  452.  
  453. //----------------------------------------------------------------------------//
  454.  
  455. static function DelToggle()
  456.  
  457.    if RLock()
  458.       if Deleted()
  459.          DbReCall()
  460.       else
  461.          DbDelete()
  462.       endif
  463.       UNLOCK
  464.    endif
  465.  
  466. return nil
  467.  
  468. //----------------------------------------------------------------------------//
  469.  
  470. // Checks for a possible area name conflict
  471.  
  472. static function cCheckArea( cDbfName )
  473.  
  474.    local n      := 2
  475.    local cAlias := cDbfName
  476.  
  477.    while Select( cAlias ) != 0
  478.       cAlias = cDbfName + AllTrim( Str( n++ ) )
  479.    end
  480.  
  481. return cAlias
  482.  
  483. //----------------------------------------------------------------------------//
  484.  
  485. init procedure IdeInit()
  486.  
  487.    local oIni
  488.  
  489.    SET RESOURCES TO "Ide.dll"
  490.    SET 3DLOOK ON
  491.  
  492.    RddSetDefault( "DbfNtx" )
  493.  
  494.    INI oIni FILENAME "\" + CurDir() + "\Ide.ini"
  495.  
  496.       GET cIncPath SECTION "Path" ENTRY "Include" ;
  497.          DEFAULT "c:\clipper5\include" OF oIni
  498.  
  499.       GET cLibPath SECTION "Path" ENTRY "Lib" ;
  500.          DEFAULT "c:\clipper5\lib" OF oIni
  501.  
  502.       GET cProject SECTION "Project" ENTRY "Name" ;
  503.          DEFAULT "" OF oIni
  504.  
  505.       GET lWorkAreas SECTION "Project" ENTRY "WorkAreas" ;
  506.          DEFAULT .f. OF oIni
  507.  
  508.    ENDINI
  509.  
  510.    aPrjBmps = { LoadBitmap( GetResources(), "QesSmal" ),;
  511.                 LoadBitmap( GetResources(), "BmpSmal" ),;
  512.                 LoadBitmap( GetResources(), "DbfSmal" ),;
  513.                 LoadBitmap( GetResources(), "DlgSmal" ),;
  514.                 LoadBitmap( GetResources(), "DocSmal" ),;
  515.                 LoadBitmap( GetResources(), "IcoSmal" ),;
  516.                 LoadBitmap( GetResources(), "IdxSmal" ),;
  517.                 LoadBitmap( GetResources(), "LibSmal" ),;
  518.                 LoadBitmap( GetResources(), "MnuSmal" ),;
  519.                 LoadBitmap( GetResources(), "PrgSmal" ),;
  520.                 LoadBitmap( GetResources(), "RptSmal" ),;
  521.                 LoadBitmap( GetResources(), "SndSmal" ) }
  522.  
  523.    aObjBmps = { LoadBitmap( GetResources(), "Array" ),;
  524.                 LoadBitmap( GetResources(), "Block" ),;
  525.                 LoadBitmap( GetResources(), "Chain" ),;
  526.                 LoadBitmap( GetResources(), "Date" ),;
  527.                 LoadBitmap( GetResources(), "Logic" ),;
  528.                 LoadBitmap( GetResources(), "Number" ),;
  529.                 LoadBitmap( GetResources(), "Memo" ),;
  530.                 LoadBitmap( GetResources(), "Object" ),;
  531.                 LoadBitmap( GetResources(), "Undefined" ),;
  532.                 LoadBitmap( GetResources(), "SmallBug" ),;
  533.                 LoadBitmap( GetResources(), "NoInfo" ) }
  534.  
  535.    aDbfBmps = { LoadBitmap( GetResources(), "NoDeleted" ),;
  536.                 LoadBitmap( GetResources(), "Deleted" ) }
  537.  
  538.    aRptBmps = { LoadBitmap( GetResources(), "Header" ),;
  539.                 LoadBitmap( GetResources(), "Body" ),;
  540.                 LoadBitmap( GetResources(), "Footer" ) }
  541.  
  542.    // MsgInfo( Str( AddFontResource( GetResources() ) ) )
  543.  
  544. return
  545.  
  546. //----------------------------------------------------------------------------//
  547.  
  548. exit procedure IdeExit()
  549.  
  550.    AEval( aPrjBmps, { | hBmp | DeleteObject( hBmp ) } )
  551.    AEval( aObjBmps, { | hBmp | DeleteObject( hBmp ) } )
  552.    AEval( aDbfBmps, { | hBmp | DeleteObject( hBmp ) } )
  553.    AEval( aRptBmps, { | hBmp | DeleteObject( hBmp ) } )
  554.  
  555. return
  556.  
  557. //----------------------------------------------------------------------------//
  558.  
  559. function DbfNew()
  560.  
  561.    local oDlg, oGet, oType, oLen, oDec, oLbx, oBtnAdd, oBtnEdit, oCbx
  562.    local cName    := Space( 10 )
  563.    local cType    := "C"
  564.    local nLen     := 10
  565.    local nDec     :=  0
  566.    local cField   := Space( 20 )
  567.    local cTypes   := "CNLDM"
  568.    local aLens    := { 10, 10, 1, 8, 8 }
  569.    local cDbfName := Space( 12 )
  570.    local lEditing := .f.
  571.    local cDriver  := "DbfNtx"
  572.  
  573.    DEFINE DIALOG oDlg RESOURCE "DbfBuild"
  574.  
  575.    REDEFINE GET oGet VAR cName ID 110 OF oDlg
  576.  
  577.    REDEFINE COMBOBOX oType VAR cType  ITEMS { "C", "N", "L", "D", "M" } ;
  578.       ON CHANGE ( nLen := aLens[ At( cType, cTypes ) ], oLen:Refresh() );
  579.       ID 120 OF oDlg
  580.  
  581.    REDEFINE GET oLen VAR nLen PICTURE "9999" ID 130 OF oDlg
  582.  
  583.    REDEFINE GET oDec VAR nDec PICTURE "9"    ID 140 OF oDlg
  584.  
  585.    REDEFINE BUTTON oBtnAdd ID 150 OF oDlg ;
  586.       ACTION AddField( oLbx, oGet, oBtnAdd, oBtnEdit,;
  587.                        @cName, cType, nLen, nDec, @lEditing )
  588.  
  589.    REDEFINE BUTTON ID 160 OF oDlg ACTION oDlg:End()
  590.  
  591.    REDEFINE LISTBOX oLbx VAR cField ID 170 OF oDlg
  592.  
  593.    REDEFINE BUTTON oBtnEdit ID 180 OF oDlg ;
  594.       ACTION EditField( oBtnAdd, oBtnEdit,;
  595.                         cField, @cName, @cType, @nLen, @nDec, @lEditing,;
  596.                         oGet, oType, oLen, oDec )
  597.  
  598.    REDEFINE BUTTON ID 190 OF oDlg ACTION oLbx:Del()
  599.  
  600.    REDEFINE GET cDbfName ID 210 OF oDlg
  601.  
  602.    REDEFINE COMBOBOX oCbx VAR cDriver ;
  603.       ITEMS { "DbfNtx", "DbfCdx", "DbfMdx", "DbfNdx", "DbPx" } ;
  604.       ID 230 OF oDlg
  605.  
  606.    REDEFINE BUTTON ID 220 OF oDlg ;
  607.       ACTION BuildDbf( RTrim( cDbfName ), oLbx, cDriver )
  608.  
  609.    ACTIVATE DIALOG oDlg CENTERED
  610.  
  611. return nil
  612.  
  613. //----------------------------------------------------------------------------//
  614.  
  615. static function AddField( oLbx, oGet, oBtnAdd, oBtnEdit,;
  616.                           cName, cType, nLen, nDec, lEditing )
  617.  
  618.    if Empty( cName )
  619.       MsgInfo( "I need a field name", "Sorry" )
  620.    else
  621.       if ! lEditing
  622.          oLbx:Add( xPadR( cName, 100 ) + Chr( 9 ) + cType + ;
  623.                    xPadL( Str( nLen, 3 ), 50 ) + xPadL( Str( nDec, 1 ), 20 ),;
  624.                    oLbx:GetPos() )
  625.             else
  626.          oLbx:Modify( xPadR( cName, 100 ) + Chr( 9 ) + cType + ;
  627.                       xPadL( Str( nLen, 3 ), 50 ) + xPadL( Str( nDec, 1 ), 20 ) )
  628.          oBtnAdd:SetText( "&Add" )
  629.          oBtnEdit:Enable()
  630.          lEditing = .f.
  631.       endif
  632.       cName = Space( 10 )
  633.       oGet:Refresh()
  634.       oGet:SetFocus()
  635.    endif
  636.  
  637. return nil
  638.  
  639. //----------------------------------------------------------------------------//
  640.  
  641. static function BuildDbf( cDbfName, oLbx, cDriver )
  642.  
  643.    local aFields := {}
  644.    local n
  645.  
  646.    if Empty( cDbfName )
  647.       MsgAlert( "I need a DBF name", "Sorry" )
  648.       return nil
  649.    endif
  650.  
  651.    if Len( oLbx:aItems ) == 0
  652.       MsgAlert( "No fields defined", "Sorry" )
  653.       return nil
  654.    endif
  655.  
  656.    if At( ".", cDbfName ) == 0
  657.       cDbfName += ".dbf"
  658.    endif
  659.  
  660.    if File( cDbfName )
  661.       if ! MsgYesNo( "Create it again?", "That DBF already exists" )
  662.          return nil
  663.       endif
  664.    endif
  665.  
  666.    for n = 1 to Len( oLbx:aItems )
  667.       AAdd( aFields, FieldInfo( AllTrim( oLbx:aItems[ n ] ) ) )
  668.    next
  669.  
  670.    RddSetDefault( cDriver )
  671.    DbCreate( cDbfName, aFields )
  672.    RddSetDefault( "DbfNtx" )
  673.  
  674.    MsgInfo( "DBF created!", "AllRight" )
  675.  
  676. return nil
  677.  
  678. //----------------------------------------------------------------------------//
  679.  
  680. static function FieldInfo( cItem )
  681.  
  682. return { StrToken( cItem, 1 ),;
  683.          StrToken( cItem, 2 ),;
  684.          Val( StrToken( cItem, 3 ) ),;
  685.          Val( StrToken( cItem, 4 ) ) }
  686.  
  687. //----------------------------------------------------------------------------//
  688.  
  689. static function EditField( oBtnAdd, oBtnEdit, cField,;
  690.                            cName, cType, nLen, nDec, lEditing,;
  691.                            oName, oType, oLen, oDec )
  692.  
  693.    if ! Empty( cField )
  694.       oBtnAdd:SetText( "&Replace" )
  695.       oBtnEdit:Disable()
  696.       lEditing = .t.
  697.  
  698.       cName = StrToken( cField, 1 )
  699.       cType = StrToken( cField, 2 )
  700.       nLen  = Val( StrToken( cField, 3 ) )
  701.       nDec  = Val( StrToken( cField, 4 ) )
  702.  
  703.       oName:Refresh()
  704.       oType:Refresh()
  705.       oLen:Refresh()
  706.       oDec:Refresh()
  707.    else
  708.       MsgInfo( "Select a field to edit", "Please" )
  709.    endif
  710.  
  711. return nil
  712.  
  713. //----------------------------------------------------------------------------//
  714.  
  715. function ItemOpen( oBrw )
  716.  
  717.    local nType     := ( oBrw:cAlias )->Type
  718.    local cFileName := ( oBrw:cAlias )->Name
  719.  
  720.    if nType != 0 .and. ! File( cFileName )
  721.       MsgAlert( "I can't find that file!" )
  722.       return nil
  723.    endif
  724.  
  725.    do case
  726.       case nType == IT_UNDEFINED
  727.            ItemNew( oBrw )
  728.  
  729.       case nType == IT_BITMAP
  730.            BmpOpen( cFileName )
  731.  
  732.       case nType == IT_DIALOG
  733.            DlgOpen( cFileName )
  734.  
  735.       case nType == IT_DOC
  736.            DocOpen( cFileName )
  737.  
  738.       case nType == IT_LIBRARY
  739.            LibOpen( cFileName )
  740.  
  741.       case nType == IT_MENU
  742.            MnuOpen( cFileName )
  743.  
  744.       case nType == IT_DATABASE
  745.            DbfOpen( cFileName )
  746.  
  747.       case nType == IT_PROGRAM
  748.            PrgOpen( cFileName )
  749.  
  750.       case nType == IT_SOUND
  751.            WinExec( "SoundRec " + cFileName )
  752.  
  753.       case nType == IT_REPORT
  754.            ReportOpen( cFileName )
  755.    endcase
  756.  
  757. return nil
  758.  
  759. //----------------------------------------------------------------------------//
  760.  
  761. function ItemNew( oBrw )
  762.  
  763.    local oDlg, oGet
  764.    local cFile := PadR( ( oBrw:cAlias )->Name, 50 )
  765.    local cDescript := PadR( ( oBrw:cAlias )->Descript, 50 )
  766.    local aItems := { "Bitmap", "DataBase", "Dialog", "Documentation",;
  767.                      "Icon", "Index", "Library", "Menu", "Program",;
  768.                      "Report", "Sound" }
  769.    local cType := aItems[ Min( Max( ( oBrw:cAlias )->Type, 1 ), Len( aItems ) ) ]
  770.  
  771.    DEFINE DIALOG oDlg RESOURCE "PrjItem"
  772.  
  773.    REDEFINE GET oGet VAR cFile ID 110 OF oDlg
  774.  
  775.    REDEFINE COMBOBOX cType ITEMS aItems ;
  776.      ID 120 OF oDlg
  777.  
  778.    REDEFINE GET cDescript ID 130 OF oDlg
  779.  
  780.    REDEFINE BUTTON ID 140 OF oDlg ;
  781.       ACTION ( cFile := cGetIdeFile( AScan( aItems, cType ) ),;
  782.                oGet:Refresh() )
  783.  
  784.    ACTIVATE DIALOG oDlg
  785.  
  786.    if oDlg:nResult == IDOK
  787.       if ( oBrw:cAlias )->( RLock() )
  788.          ( oBrw:cAlias )->Type     := If( ! Empty( cFile ),;
  789.                                           AScan( aItems, cType ), 0 )
  790.          ( oBrw:cAlias )->Name     := cFile
  791.          ( oBrw:cAlias )->Descript := cDescript
  792.          oBrw:UpStable()
  793.          oBrw:Refresh()
  794.          ( oBrw:cAlias )->( DbUnLock() )
  795.       else
  796.          MsgAlert( "DataBase in Net use! Unable to perform the operation" )
  797.       endif
  798.    endif
  799.  
  800. return nil
  801.  
  802. //----------------------------------------------------------------------------//
  803.  
  804. function ItemDel( oBrw )
  805.  
  806.    if MsgYesNo( "Do you want to delete the current item ?" )
  807.       if ( oBrw:cAlias )->( RLock() )
  808.          ( oBrw:cAlias )->( DbDelete() )
  809.          // ( oBrw:cAlias )->( DbPack() )
  810.          ( oBrw:cAlias )->( DbUnLock() )
  811.          oBrw:Refresh()
  812.       endif
  813.    endif
  814.  
  815. return nil
  816.  
  817. //----------------------------------------------------------------------------//
  818.  
  819. function cNoPath( cFileName )
  820.  
  821. return SubStr( cFileName, RAt( "\", cFileName ) + 1 )
  822.  
  823. //----------------------------------------------------------------------------//
  824.  
  825. function cNoExt( cFileName )
  826.  
  827. return SubStr( cFileName, 1, RAt( ".", cFileName ) - 1 )
  828.  
  829. //----------------------------------------------------------------------------//
  830.  
  831. function WorkAreas()
  832.  
  833.    local oBrw, oBar
  834.    local nAlias := 1
  835.    local nPos   := 1
  836.  
  837.      if oWndAreas == nil
  838.  
  839.      oItemAreas:SetCheck( .t. )          // Toggle the PullDown MenuItem
  840.  
  841.      DEFINE WINDOW oWndAreas MDICHILD FROM 13, 1 TO 23, 75 ;
  842.         TITLE "Work Areas Inspector" OF oWnd
  843.  
  844.             DEFINE BUTTONBAR oBar OF oWndAreas
  845.  
  846.             DEFINE BUTTON OF oBar ;
  847.                  ACTION oBrw:Refresh()
  848.  
  849.       DEFINE BUTTON GROUP OF oBar RESOURCE "Indexes" ;
  850.          ACTION Indexes( nAlias ) MESSAGE "Review Indexes information"
  851.  
  852.       DEFINE BUTTON OF oBar RESOURCE "Fields" ;
  853.          MESSAGE "Review fields information"
  854.  
  855.       @ 0, 0 LISTBOX oBrw FIELDS xPadL( AllTrim( Str( nAlias, 3 ) ), 28 ), ;
  856.                 Alias( nAlias ), ;
  857.                 If( ( nAlias )->( BoF() ), "Yes", "No" ), ;
  858.                 If( ( nAlias )->( EoF() ), "Yes", "No" ), ;
  859.                 GetIndexKey( nAlias ),;
  860.                 xPadL( AllTrim( Str( ( nAlias )->( RecNo() ) ) ), 42 ), ;
  861.                 xPadL( AllTrim( Str( ( nAlias )->( RecCount() ) ) ), 42 ), ;
  862.                 GetRddName( nAlias ), ;
  863.                 xPadL( AllTrim( Str( ( nAlias )->( FCount() ) ) ), 42 ), ;
  864.                 xPadL( AllTrim( Str( ( nAlias )->( RecSize() ) ) ), 42 ) ;
  865.             FIELDSIZES 34, 90, 32, 32, 40, 48, 48, 80, 48, 48 ;
  866.             HEAD "Area", "Alias", "BOF", "EOF", "Index", "RecNo", "Total", "RDD", "Fields", "RecSize" ;
  867.                         OF oWndAreas
  868.  
  869.          oBrw:bGoTop        = { || nAlias := GetFirstArea(), nPos := 1 }
  870.      oBrw:bGoBottom = { || nAlias := GetLastArea(),  nPos := CountAreas() }
  871.      oBrw:bSkip     = { | nWant, nDo | ;
  872.                           nDo := Min( Max( nWant, 1 - nPos ),;
  873.                           CountAreas() - nPos ), ;
  874.                           nPos += nDo, nAlias := GetArea( nPos ), nDo }
  875.      oBrw:bLogicLen = { || CountAreas() }
  876.  
  877.          oWndAreas:SetControl( oBrw )
  878.  
  879.      ACTIVATE WINDOW oWndAreas ;
  880.         VALID ( oWndAreas := nil, oItemAreas:SetCheck( .f. ), .t. )
  881.   endif
  882.  
  883. return nil
  884.  
  885. //----------------------------------------------------------------------------//
  886.  
  887. static function GetLastArea()
  888.  
  889.     local n := 1
  890.     while ! Empty( Alias( n++ ) )
  891.   end
  892.  
  893. return n
  894.  
  895. //----------------------------------------------------------------------------//
  896.  
  897. static function GetFirstArea()
  898.  
  899.     local n := 1
  900.     while Empty( alias( n++ ) )
  901.   end
  902.  
  903. return n
  904.  
  905. //----------------------------------------------------------------------------//
  906.  
  907. static function CountAreas()
  908.  
  909.     local n
  910.   local nAreas := 0
  911.  
  912.     for n = 1 to 255
  913.         if ! Empty( Alias( n ) )
  914.       nAreas++
  915.     endif
  916.   next
  917.  
  918. return nAreas
  919.  
  920. //----------------------------------------------------------------------------//
  921.  
  922. static function GetArea( nArea )
  923.  
  924.     local n
  925.   local nAreas := 0
  926.  
  927.     for n = 1 to 255
  928.         if ! Empty( Alias( n ) )
  929.       nAreas++
  930.             if n == nArea
  931.         return nAreas
  932.       endif
  933.     endif
  934.   next
  935.  
  936. return nAreas
  937.  
  938. //----------------------------------------------------------------------------//
  939.  
  940. function SelFile()
  941.  
  942.    local cExt
  943.    local cFile := cGetIdeFile()
  944.  
  945.    if ! Empty( cFile )
  946.  
  947.       cExt = SubStr( cFile, RAt( ".", cFile ) + 1 )
  948.  
  949.       do case
  950.          case cExt == "PRG"
  951.               PrgOpen( cFile )
  952.  
  953.          case cExt == "BMP"
  954.               BmpOpen( cFile )
  955.  
  956.          case cExt == "DBF"
  957.               DbfOpen( cFile )
  958.  
  959.          case cExt == "SCR"
  960.               DlgOpen( cFile )
  961.  
  962.          case cExt == "DOC"
  963.               DocOpen( cFile )
  964.  
  965.          case cExt == "ICO"
  966.  
  967.          case cExt == "IDX"
  968.  
  969.          case cExt == "LIB"
  970.               LibOpen( cFile )
  971.  
  972.          case cExt == "MNU"
  973.               MnuOpen( cFile )
  974.  
  975.          case cExt == "RPT"
  976.               ReportOpen( cFile )
  977.  
  978.          case cExt == "WAV"
  979.               WinExec( "SoundRec " + cFile )
  980.       endcase
  981.    endif
  982.  
  983. return nil
  984.  
  985. //----------------------------------------------------------------------------//
  986.  
  987. function cGetIdeFile( nFilter )
  988.  
  989. return cGetFile( "Windows Bitmap (*.bmp) | *.bmp |" + ;
  990.                  "DataBase (*.dbf) | *.dbf |" + ;
  991.                  "FiveWin Dialog (*.scr) | *.scr |" + ;
  992.                  "FiveWin Documentation (*.doc) | *.doc |" + ;
  993.                  "Windows Icon (*.ico) | *.ico |" + ;
  994.                  "FiveWin Index (*.idx) | *.idx |" + ;
  995.                  "Library file (*.lib) | *.lib |" + ;
  996.                  "FiveWin Menu (*.mnu) | *.mnu |" + ;
  997.                  "Clipper Program (*.prg) | *.prg |" + ;
  998.                  "FiveWin Report (*.rpt) | *.rpt |" + ;
  999.                  "Windows sound (*.wav) | *.wav",;
  1000.                  "Select a File", nFilter )
  1001.  
  1002. //----------------------------------------------------------------------------//
  1003.  
  1004. function PrjConfig()
  1005.  
  1006.    local oDlg, oPrj, oIni
  1007.    local cPrj := If( cProject == nil, Space( 40 ), PadR( cProject, 40 ) )
  1008.    local cPrg := Space( 20 )
  1009.  
  1010.    DEFINE DIALOG oDlg RESOURCE "PrjConfig"
  1011.  
  1012.    REDEFINE GET oPrj VAR cPrj ID 110 OF oDlg
  1013.  
  1014.    REDEFINE CHECKBOX lWorkAreas ID 120 OF oDlg
  1015.  
  1016.    REDEFINE GET cPrg ID 130 OF oDlg
  1017.  
  1018.    REDEFINE BUTTON ID 140 OF oDlg ;
  1019.       ACTION ( cPrj := cGetFile( "FiveWin Project (*.prj) | *.prj",;
  1020.                "Select a Project" ), oPrj:Refresh() )
  1021.  
  1022.    ACTIVATE DIALOG oDlg CENTERED ;
  1023.       ON RIGHT CLICK ThisInspect( oDlg )
  1024.  
  1025.    if oDlg:nResult == IDOK
  1026.       INI oIni FILENAME "\" + CurDir() + "\Ide.ini"
  1027.           SET SECTION "Project" ENTRY "WorkAreas" OF oIni TO lWorkAreas
  1028.           SET SECTION "Project" ENTRY "Name"      OF oIni TO cPrj
  1029.       ENDINI
  1030.       cProject = cPrj
  1031.    endif
  1032.  
  1033. return nil
  1034.  
  1035. //----------------------------------------------------------------------------//
  1036.  
  1037. function GetIndexKey( nArea )
  1038.  
  1039. return If( ! Empty( Alias( nArea ) ),;
  1040.        If( ( nArea )->( IndexOrd() ) != 0, "Yes", "No" ), Space( 30 ) )
  1041.  
  1042. //----------------------------------------------------------------------------//
  1043.  
  1044. function GetRddName( nArea )
  1045.  
  1046. return If( ! Empty( Alias( nArea ) ), ( nArea )->( RddName() ), Space( 30 ) )
  1047.  
  1048. //----------------------------------------------------------------------------//
  1049.  
  1050. function BtnInspect( oBtn )
  1051.  
  1052.    local oDlg
  1053.    local nRow     := oBtn:nTop
  1054.    local nCol     := oBtn:nLeft
  1055.    local cCaption := oBtn:cCaption
  1056.  
  1057.    DEFINE DIALOG oDlg RESOURCE "BtnInspect"
  1058.  
  1059.    REDEFINE GET nRow     ID 110 OF oDlg
  1060.    REDEFINE GET nCol     ID 120 OF oDlg
  1061.    REDEFINE GET cCaption ID 150 OF oDlg
  1062.  
  1063.    ACTIVATE DIALOG oDlg CENTERED
  1064.  
  1065. return nil
  1066.  
  1067. //----------------------------------------------------------------------------//
  1068.  
  1069. function DbPack() ; PACK ; return nil
  1070.  
  1071. //----------------------------------------------------------------------------//
  1072.  
  1073. function RecEdit( cTitle, oBrwParent )
  1074.  
  1075.    local oWndRec, oBrw, oIco, oFont
  1076.    local cAlias := Alias()
  1077.    local nField := 1
  1078.    local aInfo  := DbStruct()
  1079.  
  1080.    DEFINE ICON oIco RESOURCE "Record"
  1081.  
  1082.    DEFINE WINDOW oWndRec FROM 1, 43 TO 23, 79 ;
  1083.       TITLE cTitle MDICHILD ;
  1084.       ICON oIco
  1085.  
  1086.    DEFINE FONT oFont NAME "Arial" SIZE 6, 15 BOLD
  1087.  
  1088.    @ 2, 0 LISTBOX oBrw FIELDS "" ;
  1089.       HEADERS "", "Field", "Value" ;
  1090.       SIZES   16,      95,    400 ;
  1091.       SIZE 400, 400 ;
  1092.       COLOR oBrwParent:nClrText, oBrwParent:nClrPane ;
  1093.       FONT oFont
  1094.  
  1095.    oBrw:bLine     = { || ( cAlias )->( FldInfo( nField, aInfo[ nField ][ 2 ] ) ) }
  1096.    oBrw:bLogicLen = { || ( cAlias )->( FCount() ) }
  1097.    oBrw:bGoTop    = { || nField := 1 }
  1098.    oBrw:bGoBottom = { || nField := ( cAlias )->( FCount() ) }
  1099.    oBrw:bSkip     = { | nSkip, nOld | nOld := nField, nField += nSkip,;
  1100.                   nField := Min( Max( nField, 1 ), ( cAlias )->( FCount() ) ),;
  1101.                   nField - nOld }
  1102.  
  1103.    oWndRec:SetControl( oBrw )
  1104.  
  1105.    ACTIVATE WINDOW oWndRec ;
  1106.       VALID ( oWndRec := nil, .t. )            // Destroy the Object
  1107.  
  1108. return oWndRec
  1109.  
  1110. //----------------------------------------------------------------------------//
  1111.  
  1112. static function FldInfo( nField, cType )
  1113.  
  1114.    local uData := FieldGet( nField )
  1115.  
  1116. return { aObjBmps[ At( cType, "ABCDLNMOU" ) ], Field( nField ),;
  1117.          cValToChar( uData ) }
  1118.  
  1119. //----------------------------------------------------------------------------//
  1120.  
  1121. function GetWndMain()  ; return oWnd       // to export oWnd to other modules
  1122. function GetWndAreas() ; return oWndAreas  // to export oWndAreas "      "
  1123. function GetObjBmps()  ; return aObjBmps
  1124. function GetPrjBmps()  ; return aPrjBmps
  1125. function GetRptBmps()  ; return aRptBmps
  1126.  
  1127. //----------------------------------------------------------------------------//
  1128.  
  1129. function IdePopup()
  1130.  
  1131.    local oMenu
  1132.  
  1133.    MENU oMenu POPUP
  1134.       MENUITEM "&Configure"
  1135.       MENU
  1136.          MENUITEM "&Project..." ;
  1137.             MESSAGE "Set the default values of the IDE" ;
  1138.             ACTION PrjConfig()
  1139.  
  1140.          MENUITEM "&Control Panel..." ;
  1141.             MESSAGE "Set Windows default values" ;
  1142.             ACTION WinExec( "Control" )
  1143.       ENDMENU
  1144.  
  1145.       MENUITEM "&Inspect..."
  1146.       MENU
  1147.          MENUITEM "&Object IDE Window" ;
  1148.             MESSAGE "Inspect the Object IDE" ;
  1149.             ACTION ObjInspect( oWnd, "oWnd" )
  1150.  
  1151.          MENUITEM "&Application Stack" ;
  1152.             MESSAGE "Inspect the whole application stack" ;
  1153.             ACTION  StackInspect()
  1154.  
  1155.          MENUITEM "&Windows API activity" ;
  1156.             MESSAGE "Inspect the messages sent by Windows" ;
  1157.             ACTION  ApiInspect()
  1158.  
  1159.          MENUITEM "&Memory available" ;
  1160.             MESSAGE "Memory values availables"
  1161.       ENDMENU
  1162.    ENDMENU
  1163.  
  1164.    ACTIVATE POPUP oMenu AT 200, 200 OF oWnd
  1165.  
  1166. return nil
  1167.  
  1168. //----------------------------------------------------------------------------//
  1169.  
  1170. function cGetNewFileName( cName, cExt )
  1171.  
  1172.    local cTemp := cName + "01" + "." + cExt
  1173.    local nId   := 1
  1174.  
  1175.    while File( cTemp )
  1176.       cTemp = cName + StrZero( ++nId, 2 ) + "." + cExt
  1177.    end
  1178.  
  1179. return cTemp
  1180.  
  1181. //----------------------------------------------------------------------------//
  1182.