/**Iconify.c*************************************************************
 *									*
 *   SeePix -- by Hank Schafer						*
 *									*
 *   SeePix is an IFF Picture Viewer.  It works with Lo-Res,		*
 *   Med-Res, Hi-Res, HAM, and EHB formats.  I'm working on support     *
 *   for X-Specs, and Anim5 formats.					*
 *									*
 *   SeePix is based on a program by Olaf Barthel, called		*
 *   'LoadImage'.  As released, LoadImage had a couple of bugs. 	*
 *   The Amiga-Key alternatives to menu use didn't all work.  That's	*
 *   been fixed.  There were two separate print functions in LoadImage	*
 *   which behaved exactly the same.  The redundancy was eliminated.	*
 *   LoadImage used the Topaz ROMFONT, and made no allowances for a	*
 *   different system default font (under 2.04).  I added a built-in	*
 *   font.  I've reworked the code considerably from the original       *
 *   release, to allow for optimizations based on time and space.	*
 *									*
 *   SeePix features a palette tool which allows "tweaking" of colors	*
 *   prior to printing, allowing you to modify the color printout to	*
 *   more closely resemble the original graphics (Blue is Blue, not	*
 *   Purple).  SeePix can be Iconified.  SeePix features an ARP 	*
 *   interface.  SeePix now uses the PathMaster File Selector.		*
 *									*
 ************************************************************************
 *                                                                      *
 *   SeePix Copyright © 1992 by Hank Schafer; all rights reserved.      *
 *                                                                      *
 *   This program is free software; you can redistribute it and/or      *
 *   modify it under the terms of the GNU General Public License as     *
 *   published by the Free Software Foundation, either version 1, or    *
 *   (at your option) any later version.                                *
 *                                                                      *
 *   This program is distributed in the hope that it will be useful,    *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of     *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *
 *   General Public License for more details.                           *
 *                                                                      *
 *   You should have received a copy of the GNU General Public License  *
 *   along with this program; if not, write to:                         *
 *                 Free Software Foundation, Inc.                       *
 *                 675 Massachusetts Ave.                               *
 *                 Cambridge  MA  02139, USA                            *
 *                                                                      *
 **************** Special Function Copyright Notices ********************
 *									*
 ****LoadImage Copyright Notice:					*
 *									*
 *   LoadImage is © Copyright 1988, 1989, 1990 by MXM, all rights	*
 *   reserved, written by Olaf Barthel.  No guarantees of any kind are	*
 *   made that this program is 100% reliable.  Use this program on	*
 *   your own risk!							*
 *									*
 ****Iconify Copyright Notice:						*
 *									*
 *   Copyright 1987 by Leo L. Schwab.					*
 *   Permission is hereby granted for use in any and all programs,	*
 *   both Public Domain and commercial in nature, provided this 	*
 *   Copyright notice is left intact.					*
 *									*
 ****ColorWindow (Palette) Copyright Notice:				*
 *									*
 * ColorWindow Routine	--  Color Window Routines			*
 *     from Book 1 of the Amiga Programmers' Suite by RJ Mical          *
 *									*
 * Copyright (C) 1986, 1987, Robert J. Mical				*
 * All Rights Reserved. 						*
 *									*
 ****PathMaster Copyright Notice:					*
 *									*
 * -------------------------------------------------------------------- *
 *   Copyright © 1989 Justin V. McCormick.  All Rights Reserved.	*
 * -------------------------------------------------------------------- *
 *									*
 *    The PathMaster name is a trademark of Justin V. McCormick.	*
 *									*
 *   PathMaster File Selector source and documentation written by:	*
 *									*
 *			 Justin V. McCormick.				*
 *	       Copyright © 1989 by Justin V. McCormick. 		*
 *			 All Rights Reserved.				*
 *									*
 * -------------------------------------------------------------------- *
 ************************************************************************
 *									*
 *   Hope this is something you can use and enjoy.			*
 *									*
 ************************************************************************/

/*
 * Iconify();
 *
 * The mahvalous little ditty from Leo Schwab...
 *
 */

#define	ICON	0x49434f4eL	/* 'ICON'  */

extern VOID    *OpenWindow(), *GetMsg(), *CheckIO();
extern LONG	OpenDevice(), DoubleClick();

static struct Gadget gadget =
{
    NULL,
    0, 0, 0, 0,
    NULL,			/* Set later  */
    GADGIMMEDIATE,
    WDRAGGING,			/* Observe the Magic!	*/
    NULL,			/* Set later  */
    NULL, NULL, NULL, NULL,
    0, 0
};

static struct NewWindow windef =
{
    0, 0,			/* LeftEdge, TopEdge */
    0, 0,			/* Width, Height */
    -1, -1,			/* FrontPen, BackPen */
    GADGETDOWN,			/* IDCMP Flags */
    BORDERLESS | SMART_REFRESH | NOCAREREFRESH,	/* Flags */
    &gadget,			/* First Gadget */
    NULL,			/* CheckMark */
    NULL,			/* Title */
    NULL,			/* Screen */
    NULL,			/* BitMap */
    0, 0,			/* Minimum Width & Height */
    0, 0,			/* Maximum Width & Height */
    WBENCHSCREEN		/* Type */
};

static struct Window *win;

Iconify(left, top, width, height, screen, ptr, type)
    UWORD	   *left, *top, width, height;
    struct Screen  *screen;
    CPTR	    ptr;
    int 	    type;
{
    register struct IntuiMessage *msg;
    LONG	    secs = 0, mics = 0, cs, cm, class, sigmask;

    windef.LeftEdge = *left;
    windef.TopEdge = *top;
    windef.Width = width;
    windef.Height = height;
    windef.Type = (windef.Screen = screen) ? CUSTOMSCREEN : WBENCHSCREEN;

    gadget.Flags = GADGHCOMP | GRELWIDTH | GRELHEIGHT;

    switch (type & 2) {
    case ICON_IMAGE:
	gadget.Flags |= GADGIMAGE;
    case ICON_BORDER:
	gadget.GadgetRender = ptr;
	break;

    default:
	return (0);
    }

    if (!OpenUp())
	return (0);
    sigmask = 1L << win->UserPort->mp_SigBit;


    while (1) {
	Wait(sigmask);


	if (msg = GetMsg(win->UserPort)) {
	    class = msg->Class;
	    cs = msg->Seconds;
	    cm = msg->Micros;
	    ReplyMsg(msg);

	    if (class == GADGETDOWN) {
		if (DoubleClick(secs, mics, cs, cm))
		    break;
		secs = cs;
		mics = cm;
	    }
	}
    }


    *left = win->LeftEdge;
    *top = win->TopEdge;
    CloseUp();
    return (1);
}

static
OpenUp()
{
    if (!(win = OpenWindow(&windef)))
	return (0);
    win->UserData = (BYTE *) ICON;


    return (1);
}

static
CloseUp()
{

    if (win)
	CloseWindow(win);
}
