/* $Id: DragImageView.m,v 1.1 1996/10/12 14:30:34 vkyr Exp vkyr $ */

#import <appkit/appkit.h>
#import "Controller.h"
#import "DragImageView.h"


@implementation DragImageView

- initFrame:(const NXRect *)theFrame
{
    const char *const types[] = {NXFilenamePboardType};
    
    [super initFrame:theFrame];
    [self registerForDraggedTypes:(const char *const *)&types count:1];
    
    return self;
}

- (NXDragOperation)draggingEntered:sender
{
    if (([sender draggingSourceOperationMask] & NX_DragOperationGeneric) &&
       ([sender draggingSource] != self)) 
       {
       newImage = [[NXImage alloc] initFromSection:"manopen.tiff"];
       [self setImage:newImage];
       
       return NX_DragOperationGeneric;
       }
    return NX_DragOperationNone;
}

- (NXDragOperation)draggingUpdated:sender
{
    if (([sender draggingSourceOperationMask] & NX_DragOperationGeneric) &&
        ([sender draggingSource] != self)) 
       {
       return NX_DragOperationGeneric;
       }
    return NX_DragOperationNone;
}

- (BOOL)performDragOperation:sender
{
    if (![sender isDraggingSourceLocal] && ([sender draggingSource] != self)) 
       {
	     newImage = [[NXImage alloc] initFromSection:"manopen_dvi.tiff"];
	     [self setImage:newImage];
       }
    return YES;
}

- draggingExited:sender
{
    newImage = [[NXImage alloc] initFromSection:"man.tiff"];
    [self setImage:newImage];

    return self;
}

- concludeDragOperation:sender
{
    id          workspace;
    int         length;
    BOOL        fileFound;
    NXAtom      theFileType;
    Pasteboard *pboard;
    char       *data    = '\0';
    const char *appName = '\0';
    
    pboard    = [sender draggingPasteboard];
    [pboard readType:NXFilenamePboardType data:&data length:&length];
    
    workspace = [Application workspace];
    fileFound = [workspace getInfoForFile:data 
                           application:&appName 
			   type:&theFileType];
    if (fileFound)
    {
		if (strcmp(theFileType,"dvi") == 0)
		{
			[controlObj openDviFile:data];
			newImage = [[NXImage alloc] initFromSection:"man.tiff"];
		}
		else
		{
			newImage = [[NXImage alloc] initFromSection:"manopen_nodvi.tiff"];
			[[controlObj getPages] setIntValue: 0];
			[[controlObj getWidth] setDoubleValue: 0.0];
			[[controlObj getHeight] setDoubleValue: 0.0];
			[[[controlObj getFonts] docView] setText:""];
			[[controlObj getMyWindow] setTitle:"NO DVI FILE"];
			[[controlObj getMyUnits] setEnabled: NO];
			[[controlObj getOpenButton] setEnabled: NO];
		}
    }
    [self setImage:newImage];
           
    [pboard deallocatePasteboardData:data length:length];
    
    return self;
}


- drawSelf:(const NXRect *)rects :(int)count
{
    PSsetgray(NX_LTGRAY);
    NXRectFill(&bounds);

    if(newImage)
       [newImage composite:NX_SOVER toPoint:&bounds.origin];
       
    return self;
}


- setImage:aImage
{
    newImage = aImage;
    [newImage setSize:&bounds.size];
    [self display];
    
    return self;
}

- setScaleState:(BOOL)state
{
	sSwitch = state;
	return self;
}

@end
