! 
! Motif
!
! Copyright (c) 1987-2012, The Open Group. All rights reserved.
!
! These libraries and programs are free software; you can
! redistribute them and/or modify them under the terms of the GNU
! Lesser General Public License as published by the Free Software
! Foundation; either version 2 of the License, or (at your option)
! any later version.
!
! These libraries and programs are distributed in the hope that
! they will be useful, but WITHOUT ANY WARRANTY; without even the
! implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
! PURPOSE. See the GNU Lesser General Public License for more
! details.
!
! You should have received a copy of the GNU Lesser General Public
! License along with these librararies and programs; if not, write
! to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
! Floor, Boston, MA 02110-1301 USA
! 
! 
! HISTORY
! 
!   $XConsortium: ColorM1.uil /main/6 1995/07/13 18:35:18 drk $
!******************************************************************************
module color
    version = 'v1.0'
    names = case_sensitive


! the major procedures used within this module.
! note that other procedures can be (and are) defined near the widget(s)
! which use them.
procedure
    load_rgb_text();
    setcolor_button_pressed();
    toggle_button_pressed(string);
    scale_value_changed(string);
    exit_color();

! icons for use in main window buttons, and associated color info
value black  : color('black',foreground);
value white  : color('white',background);
value green  : color('green',background);
value blue   : color('blue',background);
value yellow : color('yellow',background);
value orange : color('orange',background);
value violet : color('violet',background);
value red    : color('red',background);

value color_h_offset: 15;
value color_v_offset: 10;
value scales_left_offset: 60;

value variable: font('variable');

procedure destroy_colorform();
procedure color_selection_made();

object color_main : XmMainWindow {
        controls {
        };
	arguments {
		XmNwidth = 10;
		XmNheight = 10;
	};
};

object
    color_form : XmFormDialog {
	arguments {
	    XmNx = 0;
	    XmNy = 0;
	    XmNdialogTitle = 'Color View';
	    XmNdialogStyle = XmDIALOG_MODELESS;
	    XmNwidth = 450;
	    XmNheight = 775;
	    XmNautoUnmanage = false;
	    XmNresizable = true;
	    XmNrubberPositioning = true;
	    XmNresizePolicy = XmRESIZE_ANY;
	    XmNdefaultPosition = false;
	};
	controls {
	    XmBulletinBoard	color_change_BB;
	    XmPushButton	color_patch;
	    XmPushButton	do_it;
	    XmRadioBox		color_choices;
	    XmSelectionBox 	color_sb;
	    XmForm		slider_box;
	};
	callbacks {
	    XmNdestroyCallback = procedure destroy_colorform();
	};
};

object color_change_BB: XmBulletinBoard {
	arguments {
		XmNborderWidth = 1;
		XmNrightAttachment = XmATTACH_FORM;
		XmNrightOffset = color_h_offset;
		XmNtopAttachment = XmATTACH_FORM;
		XmNtopOffset = color_h_offset*2;
		XmNbottomAttachment = XmATTACH_POSITION;
		XmNbottomPosition = 30;
		XmNbottomOffset = color_h_offset;
	};
	controls{
		XmPushButton 	color_change;
	};
};

object color_change: XmPushButton {
	arguments {
		XmNfontList = variable;
		XmNshadowThickness = 5;
		XmNtraversalOn = false;
		XmNwidth = 190;
		XmNheight = 165;
		XmNlabelString = compound_string('Change PushButton');
	};
};

! the bottom of the color patch button is attached to a position
! 30% into the form; the top is attached to a fixed offset from
! the top of the form.
object color_patch: XmPushButton {
	arguments {
		XmNfontList = variable;
		XmNtraversalOn = false;
		XmNleftAttachment = XmATTACH_FORM;
		XmNleftOffset = color_h_offset;
		XmNrightAttachment = XmATTACH_WIDGET;
		XmNrightWidget = XmBulletinBoard color_change_BB;
		XmNrightOffset = color_h_offset;
		XmNtopAttachment = XmATTACH_FORM;
		XmNtopOffset = color_h_offset*2;
		XmNbottomAttachment = XmATTACH_POSITION;
		XmNbottomPosition = 30;
		XmNbottomOffset = color_h_offset;
		XmNlabelString = compound_string('Current Color Value');
	};
};

object color_choices: XmRadioBox {
	arguments{
		XmNleftAttachment = XmATTACH_FORM;
		XmNrightAttachment = XmATTACH_FORM;
		XmNleftOffset = color_h_offset;
		XmNrightOffset = color_h_offset;
		XmNtopAttachment = XmATTACH_WIDGET;
		XmNtopWidget = XmPushButton do_it;
		XmNtopOffset = 10;
		XmNpacking = XmPACK_COLUMN;
		XmNnumColumns = 2;
		};
	controls{
		XmToggleButton	fore;
		XmToggleButton	back;
		XmToggleButton	top;
		XmToggleButton	bottom;
		XmToggleButton	arm;
		XmToggleButton	calc_colors;
		};
};

object do_it: XmPushButton {
	arguments{
		XmNleftAttachment = XmATTACH_FORM;
		XmNleftOffset = color_h_offset;
		XmNrightAttachment = XmATTACH_FORM;
		XmNrightOffset = color_h_offset;
		XmNtopAttachment = XmATTACH_WIDGET;
		XmNtopOffset = 10;
		XmNtopWidget = XmBulletinBoard color_change_BB;
		XmNbottomOffset = 10;
		XmNheight = 40;
		XmNlabelString = 'Push To Change Color of Change PushButton';
		XmNfontList = variable;
		XmNbackground = yellow;
		};
	callbacks{
		XmNactivateCallback = procedure setcolor_button_pressed();
		};
};


object fore: XmToggleButton { 
	arguments{
		XmNselectColor = violet;
		XmNlabelString = 'Change Foreground Color';
		};
	callbacks {
		XmNvalueChangedCallback = 
		procedure toggle_button_pressed('F');
		};
};

object back: XmToggleButton {
	arguments{
		XmNselectColor = violet;
		XmNlabelString = 'Change Background Color';
		};
	callbacks {
		XmNvalueChangedCallback = 
		procedure toggle_button_pressed('B');
		};
};

object top: XmToggleButton {
	arguments{
		XmNselectColor = violet;
		XmNlabelString = 'Change Top Shadow Color';
		};
	callbacks {
		XmNvalueChangedCallback = 
		procedure toggle_button_pressed('T');
		};
};

object bottom: XmToggleButton {
	arguments{
		XmNselectColor = violet;
		XmNlabelString = 'Change Bottom Shadow Color';
		};
	callbacks {
		XmNvalueChangedCallback = 
		procedure toggle_button_pressed('X');
		};
};

object arm: XmToggleButton {
	arguments{
		XmNselectColor = violet;
		XmNlabelString = 'Change Arm Color';
		};
	callbacks {
		XmNvalueChangedCallback = 
		procedure toggle_button_pressed('A');
		};
};
object calc_colors: XmToggleButton {
	arguments{
		XmNselectColor = violet;
		XmNlabelString = 'Calculate Default Color';
		};
	callbacks {
		XmNvalueChangedCallback = 
		procedure toggle_button_pressed('D');
		};
};

! the top of the slider group is attached to the bottom of the color patch;
! this is equivalent to attaching it to the form's 30% position
object slider_box : XmForm {
	arguments {
	    XmNleftAttachment = XmATTACH_FORM;
	    XmNrightAttachment = XmATTACH_FORM;
	    XmNtopAttachment = XmATTACH_WIDGET;
	    XmNtopWidget = XmRadioBox color_choices;
	    XmNtopOffset = color_v_offset;
	    XmNbottomAttachment = XmATTACH_WIDGET;
	    XmNbottomWidget = XmSelectionBox color_sb;
	    XmNbottomOffset = color_v_offset;
	};
	controls {
	    XmScale       scale1;
	    XmScale       scale2;
	    XmScale       scale3;
	    XmForm      labelbox;   
	};
};

object color_sb : XmSelectionBox {
	arguments {
	    XmNleftAttachment = XmATTACH_FORM;
	    XmNrightAttachment = XmATTACH_FORM;
	    XmNbottomAttachment = XmATTACH_FORM;
	    XmNlistVisibleItemCount = 5;
	    XmNdialogType = XmDIALOG_SELECTION;
	    XmNokLabelString = compound_string("Exit");
	};
	callbacks {
	    MrmNcreateCallback = procedure load_rgb_text();
	    XmNokCallback = procedure exit_color();
	};
};

! arguments common to all 3 color scales (horizontal)
list scale_args : arguments {
	    XmNshowValue = true;
	    XmNtopAttachment = XmATTACH_POSITION;
	    XmNbottomAttachment = XmATTACH_POSITION;
	    XmNbottomOffset = 5;
	    XmNleftAttachment = XmATTACH_WIDGET;
	    XmNleftWidget = labelbox;
	    XmNrightAttachment = XmATTACH_FORM;
	    XmNorientation = XmHORIZONTAL;
	    XmNprocessingDirection = XmMAX_ON_RIGHT;
!	    XmNleftOffset = scales_left_offset;
	    XmNrightOffset = color_h_offset;
	    XmNheight = 100;
};

! arguments common to all 3 color scales (vertical)
list vscale_args : arguments {
	    XmNtopAttachment = XmATTACH_FORM;
	    XmNbottomAttachment = XmATTACH_FORM;
	    XmNleftOffset = color_h_offset;
	    XmNleftAttachment = XmATTACH_POSITION;
	    XmNrightAttachment = XmATTACH_POSITION;
	    XmNorientation = XmVERTICAL;
	    XmNprocessingDirection = XmMAX_ON_RIGHT;
};

object
    scale1 : XmScale {
	arguments { 
	    XmNbackground = color('red');
	    XmNtopPosition = 0;
	    XmNbottomPosition = 30;
	    XmNmaximum = 255;
	    arguments scale_args;
!	arguments below are for vertical scale orientation
!	    left_position = 0;
!	    right_position = 33;
!	    arguments vscale_args;
	};
	callbacks {
		XmNvalueChangedCallback = procedure scale_value_changed('r');
		XmNdragCallback = procedure scale_value_changed('r');
	};
    };

object
    scale2 : XmScale {
	arguments { 
	    XmNbackground = color('green');
	    XmNtopPosition = 35;
	    XmNbottomPosition = 65;
	    XmNmaximum = 255;
	    arguments scale_args;
!	arguments below are for vertical scale orientation
!	    left_position = 36;
!	    right_position = 70;
!	    arguments vscale_args;
	};
	callbacks {
		XmNvalueChangedCallback = procedure scale_value_changed('g');
		XmNdragCallback = procedure scale_value_changed('g');
	};
    };

object
    scale3 : XmScale {
	arguments { 
	    XmNbackground = color('blue');
	    XmNtopPosition = 70;
	    XmNbottomPosition = 100;
	    XmNmaximum = 255;
	    arguments scale_args;
!	arguments below are for vertical scale orientation
!	    left_position = 73;
!	    right_position = 100;
!	    arguments vscale_args;
	};
	callbacks {
		XmNvalueChangedCallback = procedure scale_value_changed('b');
		XmNdragCallback = procedure scale_value_changed('b');
	};
    };

! the labelbox resizes with its parent form, so that its children,
! which are anchored to positions in the labelbox, track their scales
! after resize.
object labelbox: XmForm {
	arguments { 
		XmNtopAttachment = XmATTACH_FORM;
		XmNbottomAttachment = XmATTACH_FORM;
!		XmNrightAttachment = XmATTACH_WIDGET;
		XmNleftAttachment = XmATTACH_FORM;
!		XmNrightOffset = 15;
!		XmNtopWidget = XmScale scale1;
!		XmNrightWidget = XmScale scale1;
	};
	controls {
		XmLabel  label1;
		XmLabel  label2;
		XmLabel  label3;
	};
};

object label1: XmLabel {
	arguments {
		XmNtopAttachment = XmATTACH_NONE;
		XmNlabelString = compound_string('Red');
		XmNforeground = white;
	};
};

object label2: XmLabel {
	arguments {
		XmNtopAttachment = XmATTACH_POSITION;
		XmNtopPosition = 35;
		XmNlabelString = compound_string('Green');
		XmNforeground = white;
	};
};

object label3: XmLabel  {
	arguments {
		XmNtopAttachment = XmATTACH_POSITION;
		XmNtopPosition = 70;
		XmNlabelString = compound_string('Blue');
		XmNforeground = white;
	};
};

end module;
