/*****************************************************************************
 * 
 * name					: partial.c
 * description			: close & reopen window on workbench close
 * version				: 2.0
 *
 * created				: ?
 * last change			: 13-3-98
 *
 *****************************************************************************
 */
#include "utils.h"
#include "partial.h"
#include "obp.h"
#include <proto/intuition.h>
#include <proto/exec.h>


BOOL partialClose(idWin * prj) {
  /* 
   * handle notify_intuition msg
   * close the window 
   * 
   */
  BOOL ret = FALSE ;
  struct Message * msg ;
  struct IntNotifyMessage * imsg ;
  
  msg = GetMsg(prj->notifyPort) ;
  imsg = (struct IntNotifyMessage*)msg ;

  if (imsg->inm_Code == 0x200) {
    /* close the window
     */
    if (prj->win) {  
      CloseWindow(prj->win) ;
      prj->win = NULL ;      // in case of error
      ret = TRUE ;
    }
  }
  if (msg) ReplyMsg(msg) ;
  
  return(ret) ;
}


void partialOpen(idWin * prj) {
  /* reopen the window
   */
  struct Screen * WBScreen = NULL ;
  struct Message * msg ;
  struct IntNotifyMessage * imsg ;
  UWORD code ;
  ULONG mask ;
  
  do{
    /* get msg from notifyintuition
     */
    mask = Wait(1<<(prj->notifyPort->mp_SigBit)) ;
    if ((msg = GetMsg(prj->notifyPort)) != NULL) {
      /* received a msg
       */
      imsg = (struct IntNotifyMessage *)msg ;
      code = imsg->inm_Code ;
      ReplyMsg(msg) ;
    }
  }while(code != 0x100) ;
   
  WBScreen = LockPubScreen("Workbench") ;
  prj->wb = WBScreen ;
  free_bitmap(prj) ;
  init_bitmap(prj) ;
  prj->win = OpenWindowTags(NULL, WA_Left,	prj->backWin.posX,
     										WA_Top,		prj->backWin.posY,
     										WA_Width,	prj->backWin.width,
     										WA_Height,	prj->backWin.height,
     										WA_IDCMP,	IDCMP,
                                 WA_MinWidth,	 50,
                                 WA_MinHeight,   50,
                                 WA_MaxHeight,   200,
                                 WA_MaxWidth,    200, 
     										WA_Flags,	WFLG_BORDERLESS,
     										WA_ScreenTitle, "BackClock", 
     										WA_NewLookMenus, TRUE,
     										WA_PubScreenName, "Workbench", TAG_DONE) ;
  WindowToBack(prj->win) ;   										
  UnlockPubScreen(NULL, WBScreen) ;
  setColors(prj) ;
}


void setWindow(idWin * prj) {
  CloseWindow(prj->win) ;
  prj->wb = LockPubScreen("Workbench") ;
  
  free_bitmap(prj) ;
  init_bitmap(prj) ;
  
  prj->win = OpenWindowTags(NULL, WA_Left,	prj->backWin.posX,
     										WA_Top,		prj->backWin.posY,
     										WA_Width,	prj->backWin.width,
     										WA_Height,	prj->backWin.height,
     										WA_IDCMP,	IDCMP,
                                 WA_MinWidth,	 50,
                                 WA_MinHeight,   50,
                                 WA_MaxHeight,   200,
                                 WA_MaxWidth,    200, 
     										WA_Flags,	WFLG_BORDERLESS,
     										WA_ScreenTitle, "BackClock", 
     										WA_NewLookMenus, TRUE,
     										WA_PubScreenName, "Workbench", TAG_DONE) ;
  WindowToBack(prj->win) ; 
  UnlockPubScreen(NULL, prj->wb) ; 
//  ChangeWindowBox(prj->win, prj->backWin.posX, prj->backWin.posY, prj->backWin.width, prj->backWin.height) ;
  reinit_win(prj) ;
}
