/*
 * Copyright 1993 by Cub'x Systemes
 * 
 * All Rights Reserved
 *
 * Permission to use, copy, and distribute this software and its
 * documentation for the  purpose of making new intuitiv'3d modules.
 * This copyright notice must appears in all copies that you distribute.
 * The name of Cub'x Systeme should not be used in advertising or publicity
 * without specific, written prior permission. 
 * CUB'X SYSTEMES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
 * CUB'X SYSTEMES BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 * SOFTWARE.
 */

/*****************************************************************************
 *
 *  CustomObject module
 *  -------------------
 *
 * File: DistortedCubeInsp.m
 *
 * Contents: A distorted cube inspector
 *     
 *
 *****************************************************************************/

#import <appkit/Slider.h>
#import "DistortedCube.h"
#import "DistortedCubeInsp.h"


@implementation DistortedCubeInsp

/*******************************************************************************
 *                                                                             *
 *                                Class methods                                *
 *                                                                             *
 *******************************************************************************/

/*
 *  This method should return the name of the nib file that you want to
 *  use with the inspector.
 */
+ (const char *)nibName
{
  return "DistortedCubeInsp";
}


/*******************************************************************************
 *                                                                             *
 *                               Instance methods                              *
 *                                                                             *
 *******************************************************************************/
/*
 *  Instance methods to be compatible with intuitiv'3d's inspector protocol.
 */

/*
 *   This method should return the name of the inspector
 */
- (const char *)title
{
  return "DistortedCube inspector";
}

/*
 *  This method should send all inspector values to the object
 *  This method is called when the user press the Ok button.
 */
- sendAllValueToObject:anObject
{
  [anObject setStartWidth:[startWidthTextField floatValue]];
  [anObject setStartHeight:[startHeightTextField floatValue]];
  [anObject setDestWidth:[destWidthTextField floatValue]];
  [anObject setDestHeight:[destHeightTextField floatValue]];
  [anObject setOffsetForX:[offsetForXTextField floatValue]];
  [anObject setOffsetForY:[offsetForYTextField floatValue]];
  [anObject setOffsetForZ:[offsetForZTextField floatValue]];
  return self;
}

/*
 *  This method should set the inspector's interface to the 
 *  value of anObject. This method is called when there is
 *  a new object selection or when the user presses the
 *  revert button.
 */
- receiveAllValueFromObject:anObject
{
  float startWidth = [anObject startWidth];
  float startHeight = [anObject startHeight];
  float destWidth = [anObject destWidth];
  float destHeight = [anObject destHeight];
  float offsetForX  = [anObject offsetForX];
  float offsetForY  = [anObject offsetForY];
  float offsetForZ  = [anObject offsetForZ];

	
  [startWidthSlider setFloatValue:startWidth];
  [startWidthTextField setFloatValue:startWidth];
  [startHeightSlider setFloatValue:startHeight];
  [startHeightTextField setFloatValue:startHeight];
  [destWidthSlider setFloatValue:destWidth];
  [destWidthTextField setFloatValue:destWidth];
  [destHeightSlider setFloatValue:destHeight];
  [destHeightTextField setFloatValue:destHeight];
  [offsetForXSlider setFloatValue:offsetForX];
  [offsetForXTextField setFloatValue:offsetForX];
  [offsetForYSlider setFloatValue:offsetForY];
  [offsetForYTextField setFloatValue:offsetForY];
  [offsetForZSlider setFloatValue:offsetForZ];
  [offsetForZTextField setFloatValue:offsetForZ];
  return self;
}


/*
 *  Target / action methods. Please see DistortedCubeInsp.nib
 * 
 * Please notice macro usage for real-time if needed.
 */
- takeStartWidthFrom:sender
{
  float value = [sender floatValue];
  if (value < 0.0)
    value = 0.0;
  [startWidthTextField setFloatValue:value];
  [startWidthSlider setFloatValue:value];

  if (INSPECTOR_IS_REAL_TIME)
    {
      [INSPECTED_OBJECT setStartWidth:value];
      UPDATE_SCENE;
    }
  return self;
}		

- takeStartHeightFrom:sender
{
  float value = [sender floatValue];
  if (value < 0.0)
    value = 0.0;

  [startHeightTextField setFloatValue:value];
  [startHeightSlider setFloatValue:value];

  if (INSPECTOR_IS_REAL_TIME)
    {
      [INSPECTED_OBJECT setStartHeight:value];
      UPDATE_SCENE;
  }
  return self;
}		

- takeDestWidthFrom:sender
{
  float value = [sender floatValue];
  if (value < 0.0)
    value = 0.0;

  [destWidthTextField setFloatValue:value];
  [destWidthSlider setFloatValue:value];

  if (INSPECTOR_IS_REAL_TIME)
    {
      [INSPECTED_OBJECT setDestWidth:value];
      UPDATE_SCENE;
    }
  return self;
}		



- takeDestHeightFrom:sender
{
  float value = [sender floatValue];
  if (value < 0.0)
    value = 0.0;

  [destHeightTextField setFloatValue:value];
  [destHeightSlider setFloatValue:value];

  if (INSPECTOR_IS_REAL_TIME)
    {
      [INSPECTED_OBJECT setDestHeight:value];
      UPDATE_SCENE;
    }
  return self;
}		

- takeOffsetForXFrom:sender
{
  float value = [sender floatValue];
  if (sender == offsetForXSlider)
    [offsetForXTextField setFloatValue:value];
  else
    [offsetForXSlider setFloatValue:value];

  if (INSPECTOR_IS_REAL_TIME)
    {
      [INSPECTED_OBJECT setOffsetForX:value];
      UPDATE_SCENE;
    }
  return self;
}		


- takeOffsetForYFrom:sender
{
  float value = [sender floatValue];
  if (sender == offsetForYSlider)
    [offsetForYTextField setFloatValue:value];
  else
    [offsetForYSlider setFloatValue:value];

  if (INSPECTOR_IS_REAL_TIME)
    {
      [INSPECTED_OBJECT setOffsetForY:value];
      UPDATE_SCENE;
    }
  return self;
}		


- takeOffsetForZFrom:sender
{
  float value = [sender floatValue];
  if (sender == offsetForZSlider)
    [offsetForZTextField setFloatValue:value];
  else
    [offsetForZSlider setFloatValue:value];

  if (INSPECTOR_IS_REAL_TIME)
    {
      [INSPECTED_OBJECT setOffsetForZ:value];
      UPDATE_SCENE;
    }
  return self;
}		
	

@end




