root/src/tests/kits/interface/bshelf/Container/ContainerWindow.cpp
// ContainerWindow.cpp
// Generated by Interface Elements (Window v2.3) on Feb 14 2004
// This is a user written class and will not be overwritten.

#include "ContainerWindow.h"
#include <TranslationKit.h>
#include <iostream.h>

extern const char *PREFS_BACKSTORE_PATH;

ContainerWindow :: ContainerWindow(BPositionIO *stream)
                                                                 : IEWindow("ContainerWindow")
{
        Lock();
                CreateViewBitmap();
                
                fArchiveStream = stream;                
                fShelf = new BShelf(fArchiveStream, fContainerView);            // Attach fShelf to fContainerView
                fShelf -> SetDisplaysZombies(true);
                fArchiveStream -> Seek(0, SEEK_SET);
        
                fRemoveButton = (BButton *)FindView("RemoveButton" );
                fTestButton   = (BButton *)FindView("TestButton" );
                
                GetPrefs();
        Unlock();
        Show();
}


ContainerWindow :: ~ContainerWindow(void)
{
        SetPrefs();
  if (fPrefs != NULL) delete fPrefs;                                                                                    // now prefs are saved
}


bool ContainerWindow :: QuitRequested()
{
//      long c = be_app->CountWindows();
//      if (c == 1) be_app->PostMessage(B_QUIT_REQUESTED);
        be_app->PostMessage(B_QUIT_REQUESTED);
        delete  fShelf;                                                                                                                                 // by deleting the Shelf we'll save the state
        fShelf  = NULL;
        return true;
}


// Handling of user interface and other events
void ContainerWindow::MessageReceived(BMessage *message)
{
        switch(message->what)
        {
                case IE_CONTAINERWINDOW_MAINMENU_FILE_NEW:    // "New" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_FILE_OPEN___:    // "Open…" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_FILE_SAVE:    // "Save" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_FILE_SAVE_AS___:    // "Save As…" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_FILE_ABOUT___:    // "About…" is selected from menu…
                                PostMessage(B_ABOUT_REQUESTED);
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_FILE_QUIT:    // "Quit" is selected from menu…
                                PostMessage(B_QUIT_REQUESTED);
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_EDIT_UNDO:    // "Undo" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_EDIT_CUT:    // "Cut" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_EDIT_COPY:    // "Copy" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_MAINMENU_EDIT_PASTE:    // "Paste" is selected from menu…
                        break;

                case IE_CONTAINERWINDOW_TESTBUTTON:                                     // 'TestButton' is pressed...
                        {
                                BMessage msg = BMessage(TEST_REPLICANT);
                                msg.AddBool("Test",true);
                                be_app ->PostMessage(&msg,be_app);                              // Send Info to App
                                
                                QuitRequested();
                        }
                        break;

                case IE_CONTAINERWINDOW_REMOVEBUTTON:                                   // 'RemoveButton' is pressed...
                        {
                                BMessage msg = BMessage(CLEAR_FILE);
                                msg.AddBool("Remove",true);
                                be_app ->PostMessage(&msg,be_app);                              // Send Info to App
                                
                                QuitRequested();
                        }
                        break;


                case B_ABOUT_REQUESTED: 
                        {
                                BAlert  *alert = new BAlert("", "XContainer (H.Reh, dr.hartmut.reh@gmx.de) " "\n" "\n"
                                                                                                                                                "Based upon Container Demo from Be Inc." "\n"
                                                                                                                                                "The GUI was created with InterfaceElements (Attila Mezei)" "\n"
                                                                                                                                                "Please read the ***Be Sample Code License*** " "\n"                                                                                                                    
                                                                                                                                         ,"OK");
                                alert -> Go(NULL);
                        }
                        break;




                default:
                        BWindow::MessageReceived(message);
                        break;
        }

}


// Update the menu items before they appear on screen
void ContainerWindow::MenusBeginning()
{
        // Complete the SetEnabled argument or do anything with the source below...
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_FILE_NEW)                            ->SetEnabled(false);    // "New"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_FILE_OPEN___)                ->SetEnabled(false);    // "Open…"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_FILE_SAVE)                           ->SetEnabled(false);    // "Save"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_FILE_SAVE_AS___)     ->SetEnabled(false);    // "Save As…"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_FILE_ABOUT___)               ->SetEnabled(true);             // "About…"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_FILE_QUIT)                           ->SetEnabled(true);             // "Quit"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_EDIT_UNDO)                           ->SetEnabled(false);    // "Undo"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_EDIT_CUT)                            ->SetEnabled(false);    // "Cut"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_EDIT_COPY)                           ->SetEnabled(false);    // "Copy"
        KeyMenuBar()->FindItem(IE_CONTAINERWINDOW_MAINMENU_EDIT_PASTE)                  ->SetEnabled(false);    // "Paste"
}


void ContainerWindow :: CreateViewBitmap()
{
        // create background bitmap
        BBitmap *bitmap = NULL;
        fContainerView  = NULL;
        bitmap = BTranslationUtils :: GetBitmap('JPEG',"DropZone.jpeg");                // load bitmap from resource
        fContainerView = (BView *)FindView("ContainerView");
        if ( (bitmap != NULL) && (fContainerView != NULL) ) fContainerView -> SetViewBitmap(bitmap);
        delete bitmap;
}


void ContainerWindow :: GetPrefs()
{
        status_t        err;
        BRect           windFrame;

        
        fPrefs = new TPreferences ("XContainer/preferences");                   // name of prefs-file
        if (fPrefs -> InitCheck() != B_OK)                                                                                              // if no prefs-> create new 
        {
                windFrame = Frame();                                                                                                                                            // get window frame
                fPrefs -> SetRect ("WindowFrame", windFrame );                                          
        }

        err = (fPrefs -> FindRect ("WindowFrame", &windFrame) );
        if (err == B_OK)
        {
                ResizeTo(windFrame.Width(), windFrame.Height() );                               // window position and size
                MoveTo(windFrame.left, windFrame.top);                                                                           
        } 
                
}


void ContainerWindow :: SetPrefs()
{
        fPrefs -> SetRect ("WindowFrame", Frame() );    
}



void ContainerWindow :: EnableRemoveButton(bool enable)
{
        fRemoveButton -> SetEnabled(enable);
}


void ContainerWindow :: EnableTestButton(bool enable)
{
        fTestButton -> SetEnabled(enable);
}