/*++

  Copyright (c) 1999 Intel Corporation

  Module Name:
    libStatus.c

  Abstract:
    Defines the StatusBar data type and the operations for it.

--*/

#ifndef _LIB_STATUS_BAR
#define _LIB_STATUS_BAR

#include "libMisc.h"

STATIC  EFI_STATUS  MainStatusBarInit (VOID);
STATIC  EFI_STATUS  MainStatusBarCleanup (VOID);
STATIC  EFI_STATUS  MainStatusBarRefresh (VOID);
STATIC  EFI_STATUS  MainStatusBarHide (VOID);
STATIC  EFI_STATUS  MainStatusBarSetStatusString (CHAR16*);
STATIC  EFI_STATUS  MainStatusBarSetOffset (UINTN);

EE_STATUS_BAR MainStatusBar = {
    NULL,
    0x00,
    MainStatusBarInit,
    MainStatusBarCleanup,
    MainStatusBarRefresh,
    MainStatusBarHide,
    MainStatusBarSetStatusString,
    MainStatusBarSetOffset
};

STATIC
EFI_STATUS
MainStatusBarInit ()
{
    /* Nothing to do.... */
    MainStatusBar.SetStatusString(L"");
    return EFI_SUCCESS;
}

STATIC
EFI_STATUS
MainStatusBarCleanup ()
{
    MainEditor.FileBuffer->ClearLine(STATUS_BAR_LOCATION);
    if ( MainStatusBar.StatusString != NULL ) {
        FreePool ((VOID*)MainStatusBar.StatusString);
    }
    return EFI_SUCCESS;
}

STATIC
EFI_STATUS
MainStatusBarRefresh ()
{
    EE_COLOR_UNION  Orig,New;
    Orig = MainEditor.ColorAttributes;
    New.Colors.Foreground = Orig.Colors.Background;
    New.Colors.Background = Orig.Colors.Foreground;

    Out->SetAttribute (Out,New.Data);

    MainEditor.FileBuffer->ClearLine(STATUS_BAR_LOCATION);
    PrintAt (0,STATUS_BAR_LOCATION,L"  Offset: %X       %s",
        MainStatusBar.Offset,MainStatusBar.StatusString);

    Out->SetAttribute (Out,Orig.Data);

    MainEditor.FileBuffer->RestorePosition();

    return EFI_SUCCESS;
}

STATIC
EFI_STATUS
MainStatusBarHide ()
{
    MainEditor.FileBuffer->ClearLine(STATUS_BAR_LOCATION);
    return EFI_SUCCESS;
}

STATIC
EFI_STATUS
MainStatusBarSetStatusString (
    IN CHAR16* Str
    )
{
    if ( MainStatusBar.StatusString != NULL ) {
        FreePool (MainStatusBar.StatusString);
    }
    MainStatusBar.StatusString = StrDuplicate (Str);
    MainStatusBarRefresh();
    return EFI_SUCCESS;
}


STATIC
EFI_STATUS
MainStatusBarSetOffset (
    IN  UINTN   Offset
    )
{
    MainStatusBar.Offset = Offset;

    MainStatusBar.Refresh();

    return EFI_SUCCESS;
}

#endif  /* _LIB_STATUS_BAR */