//////////////////////////////////////////////////////////////////////
//
//  MDIDEMO.PRG
//
//  Copyright:
//      Alaska Software, (c) 1997-2002. Alle Rechte vorbehalten.         
//  
//  Inhalt:
//      Main Routine und AppSys() fr eine MDI Beispielanwendung
//   
//////////////////////////////////////////////////////////////////////

#include "Gra.ch"
#include "Xbp.ch"
#include "AppEvent.ch"
#include "Mdidemo.ch"


/*
 * Main Prozedur und Event-Loop
 */
PROCEDURE Main
   LOCAL nEvent, mp1, mp2, oXbp
   FIELD CUSTNO, LASTNAME, FIRSTNAME, PARTNO, PARTNAME

   // Indexdateien prfen und ggf. erzeugen
//   SET DEFAULT TO ..\..\DATA\  //ak01.12.2006 18:12

   IF ! AllFilesExist( { "CUSTA.NTX", "CUSTB.NTX" } )
      USE Customer EXCLUSIVE
      INDEX ON CustNo                    TO CustA
      INDEX ON Upper(LastName+Firstname) TO CustB
      CLOSE DATABASE
   ENDIF

   IF ! AllFilesExist( { "PARTS.CDX" } )
      USE Parts EXCLUSIVE VIA FOXCDX
      INDEX ON Upper(PartNo)   TAG PartNo   TO Parts
      INDEX ON Upper(PartName) TAG PartName TO Parts
      CLOSE DATABASE
   ENDIF

   SET DELETED ON
SET CHARSET TO ansi  //ak01.12.2006 18:12
   // Das Programm wird in AppQuit() abgebrochen
   DO WHILE .T.
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO
RETURN



/*
 * Feststellen, ob alle Dateien im Array 'aFiles' vorhanden sind
 */
FUNCTION AllFilesExist( aFiles )
   LOCAL lExist := .T., i:=0, imax := Len(aFiles), cPath := Set( _SET_DEFAULT )

   DO WHILE ++i <= imax .AND. lExist
      lExist := File( cPath + aFiles[i] )
   ENDDO
RETURN lExist



/*
 * Routine zum Beenden eines Programms
 */
PROCEDURE AppQuit()
   LOCAL nButton

   nButton := ConfirmBox( , ;
                 "Wollen Sie das Programm abbrechen ?", ;
                 "Beenden", ;
                  XBPMB_YESNO , ;
                  XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE )

   IF nButton == XBPMB_RET_YES
      COMMIT
      CLOSE ALL
      QUIT
   ENDIF

RETURN



/*
 * Beispiel fr AppSys() in MDI Anwendung
 * Die Funktion wird vor der Main Prozedur ausgefhrt
 */
PROCEDURE AppSys
   LOCAL oDlg, oXbp, aPos[2], aSize

   // Gr”áe vom DeskTop feststellen
   // und Anwendungsfenster dimensionieren
   aSize    := SetAppWindow():currentSize()
   aPos[1]  := 0.1 * aSize[1]
   aPos[2]  := 0.1 * aSize[2]
   aSize[1] *= 0.8
   aSize[2] *= 0.8

   // Anwendungsfenster erzeugen (application window)
   oDlg       := XbpDialog():new( ,, aPos, aSize,, .F. )
   oDlg:title := "Toys & Fun Inc. [Xbase++ - MDI Demo]"
   oDlg:icon  := ICON_APPLICATION
   oDlg:close := {|| AppQuit() }
   oDlg:taskList := .T.
   oDlg:create()
   oDlg:drawingArea:SetColorBG( XBPSYSCLR_APPWORKSPACE )
   SetAppWindow( oDlg )

   // Hauptmen systemweit abrufbar machen (UDF)
   AppMenu( oDlg:menuBar() )

   // Mensystem erzeugen (UDF)
   MenuCreate( AppMenu() )

   // Online-Hilfe mit UDF bereitstellen
   oXbp := XbpHelpLabel():new():create()
   oXbp:helpObject := ;
        HelpObject( "MDIDEMOG.HLP", "Hilfe fr MDI Demo" )
   oDlg:helpLink := oXbp

   // Anwendungsfenster anzeigen und Fokus geben
   oDlg:show()
   SetAppFocus( oDlg )

   // Anwendungsfenster systemweit abrufbar machen
   RootWindow( oDlg )
RETURN



/*
 * Routine zur Abfrage des Anwendungsfensters
 */
FUNCTION RootWindow( oDlg )
   STATIC soDialog
   IF PCount() > 0
      soDialog := oDlg
   ENDIF
RETURN soDialog 



/*
 * Routine zur Abfrage des Anwendungsmens
 */
FUNCTION AppMenu( oMenu )
   STATIC soMenuBar
   IF PCount() > 0
      soMenuBar := oMenu
   ENDIF
RETURN soMenuBar



/*
 * Routine fr das Help-Object. Es verwaltet die Online-Hilfe
 */
FUNCTION HelpObject( cHelpFile, cTitle )
   STATIC soHelp

   IF soHelp == NIL
      soHelp := XbpHelp():new()
      soHelp:resGeneralHelp := ID_HELP_GENERAL
      soHelp:resKeysHelp    := ID_HELP_KEYS
      soHelp:create( SetAppWindow(), cHelpFile, cTitle )
   ENDIF
RETURN soHelp


