|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Motif
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
* These libraries and programs are free software; you can
|
|
Packit |
a21d5c |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
a21d5c |
* Lesser General Public License as published by the Free Software
|
|
Packit |
a21d5c |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
a21d5c |
* any later version.
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
* These libraries and programs are distributed in the hope that
|
|
Packit |
a21d5c |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
a21d5c |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
a21d5c |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
a21d5c |
* details.
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
a21d5c |
* License along with these librararies and programs; if not, write
|
|
Packit |
a21d5c |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
a21d5c |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* INCLUDE FILES
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
#ifdef HAVE_CONFIG_H
|
|
Packit |
a21d5c |
#include <config.h>
|
|
Packit |
a21d5c |
#endif
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
#include <stdio.h>
|
|
Packit |
a21d5c |
#include <stdlib.h>
|
|
Packit |
a21d5c |
#include <ctype.h>
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
#include "ColorSP.h"
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
#include <Xm/Xm.h>
|
|
Packit |
a21d5c |
#include <Xm/VaSimpleP.h>
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
#include <Xm/ButtonBox.h>
|
|
Packit |
a21d5c |
#include <Xm/Scale.h>
|
|
Packit |
a21d5c |
#include <Xm/ScrolledW.h>
|
|
Packit |
a21d5c |
#include <Xm/List.h>
|
|
Packit |
a21d5c |
#include <Xm/RowColumn.h>
|
|
Packit |
a21d5c |
#include <Xm/ToggleB.h>
|
|
Packit |
a21d5c |
#include <Xm/Frame.h>
|
|
Packit |
a21d5c |
#include <Xm/Label.h>
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
#include <Xm/ExtP.h>
|
|
Packit |
a21d5c |
#include "XmI.h"
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* TYPEDEFS AND DEFINES
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
#define SUPERCLASS ((WidgetClass) &xmManagerClassRec)
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* MACROS
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* GLOBAL DECLARATIONS
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
extern void XmeNavigChangeManaged(Widget);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* STATIC FUNCTION DECLARATIONS
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void ChangeManaged(Widget w);
|
|
Packit |
a21d5c |
static void ClassInitialize(void), Destroy(Widget), Resize(Widget);
|
|
Packit |
a21d5c |
static void ClassPartInitialize(WidgetClass w_class);
|
|
Packit |
a21d5c |
static void Initialize(Widget, Widget, ArgList, Cardinal *);
|
|
Packit |
a21d5c |
static Boolean SetValues(Widget, Widget, Widget, ArgList, Cardinal *);
|
|
Packit |
a21d5c |
static XtGeometryResult GeometryHandler(Widget, XtWidgetGeometry *,
|
|
Packit |
a21d5c |
XtWidgetGeometry *);
|
|
Packit |
a21d5c |
static XtGeometryResult QueryGeometry(Widget, XtWidgetGeometry *,
|
|
Packit |
a21d5c |
XtWidgetGeometry *);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static Boolean UpdateColorWindow(XmColorSelectorWidget, Boolean);
|
|
Packit |
a21d5c |
static Boolean color_name_changed(XmColorSelectorWidget, char *);
|
|
Packit |
a21d5c |
static Boolean FindColor(XmColorSelectorWidget, int *);
|
|
Packit |
a21d5c |
static Boolean CvtStringToColorMode(Display *, XrmValuePtr, Cardinal,
|
|
Packit |
a21d5c |
XrmValuePtr, XrmValuePtr, XtPointer *);
|
|
Packit |
a21d5c |
static Boolean DefaultVisualDisplay(XmColorSelectorWidget, Pixel, XColor, char *);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void CalcPreferredSize(XmColorSelectorWidget, Dimension *, Dimension *);
|
|
Packit |
a21d5c |
static void SelectColor(XmColorSelectorWidget);
|
|
Packit |
a21d5c |
static void slider_changed(Widget, XtPointer, XtPointer);
|
|
Packit |
a21d5c |
static void list_selected(Widget, XtPointer, XtPointer);
|
|
Packit |
a21d5c |
static void change_mode(Widget, XtPointer, XtPointer);
|
|
Packit |
a21d5c |
static void new_mode(XmColorSelectorWidget, XmColorMode);
|
|
Packit |
a21d5c |
static void compute_size(XmColorSelectorWidget);
|
|
Packit |
a21d5c |
static void read_rgb_file(XmColorSelectorWidget, ArgList, Cardinal, Boolean);
|
|
Packit |
a21d5c |
static void SetSliders(XmColorSelectorWidget);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void CreateColorSliders(XmColorSelectorWidget, ArgList, Cardinal);
|
|
Packit |
a21d5c |
static void CreateSelectorRadio(XmColorSelectorWidget, ArgList, Cardinal);
|
|
Packit |
a21d5c |
static void CreateColorWindow(XmColorSelectorWidget, ArgList, Cardinal);
|
|
Packit |
a21d5c |
static void NoPrivateColormaps(XmColorSelectorWidget, Pixel, XColor, char *);
|
|
Packit |
a21d5c |
static void PrivateColormaps(XmColorSelectorWidget, Pixel, XColor, char *);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
#ifdef notdef
|
|
Packit |
a21d5c |
static void CreateTypes(XmColorSelectorWidget, Widget, ArgList, Cardinal);
|
|
Packit |
a21d5c |
#endif
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static int CmpColors(const void *, const void *);
|
|
Packit |
a21d5c |
static char *find_name(char *);
|
|
Packit |
a21d5c |
static int GetVisual(XmColorSelectorWidget);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void GetValues_XmNredSliderLabel ( Widget w, int n, XtArgVal *value) ;
|
|
Packit |
a21d5c |
static void GetValues_XmNgreenSliderLabel( Widget w, int n, XtArgVal *value) ;
|
|
Packit |
a21d5c |
static void GetValues_XmNblueSliderLabel( Widget w, int n, XtArgVal *value) ;
|
|
Packit |
a21d5c |
static void GetValues_XmNcolorListTogLabel( Widget w, int n, XtArgVal *value) ;
|
|
Packit |
a21d5c |
static void GetValues_XmNsliderTogLabel( Widget w, int n, XtArgVal *value) ;
|
|
Packit |
a21d5c |
static void GetValues_XmNnoCellError( Widget w, int n, XtArgVal *value) ;
|
|
Packit |
a21d5c |
static void GetValues_XmNfileReadError( Widget w, int n, XtArgVal *value) ;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* STATIC DECLARATIONS
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static XtResource resources[] =
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNcolorMode, XmCColorMode, XmRXmColorMode,
|
|
Packit |
a21d5c |
sizeof(XmColorMode), XtOffsetOf(XmColorSelectorRec, cs.color_mode),
|
|
Packit |
a21d5c |
XmRImmediate, (XtPointer) XmScaleMode
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNcolorName, XmCString, XmRString,
|
|
Packit |
a21d5c |
sizeof(String), XtOffsetOf(XmColorSelectorRec, cs.color_name),
|
|
Packit |
a21d5c |
XmRString, "White"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
#ifdef VMS
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNrgbFile, XmCString, XmRString,
|
|
Packit |
a21d5c |
sizeof(String), XtOffsetOf(XmColorSelectorRec, cs.rgb_file),
|
|
Packit |
a21d5c |
XmRString, (XtPointer) "sys$manager:decw$rgb.dat"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
#else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNrgbFile, XmCString, XmRString,
|
|
Packit |
a21d5c |
sizeof(String), XtOffsetOf(XmColorSelectorRec, cs.rgb_file),
|
|
Packit |
a21d5c |
XmRString, (XtPointer) "/usr/lib/X11/rgb.txt"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
#endif
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNmarginWidth, XmCMargin, XmRHorizontalDimension,
|
|
Packit |
a21d5c |
sizeof(Dimension), XtOffsetOf(XmColorSelectorRec, cs.margin_width),
|
|
Packit |
a21d5c |
XmRImmediate, (XtPointer) 2
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNmarginHeight, XmCMargin, XmRVerticalDimension,
|
|
Packit |
a21d5c |
sizeof(Dimension), XtOffsetOf(XmColorSelectorRec, cs.margin_height),
|
|
Packit |
a21d5c |
XmRImmediate, (XtPointer) 2
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNredSliderLabel, XmCSliderLabel, XmRXmString,
|
|
Packit |
a21d5c |
sizeof(XmString), XtOffsetOf(XmColorSelectorRec, cs.strings.slider_labels[0]),
|
|
Packit |
a21d5c |
XmRString, (XtPointer) "Red"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNgreenSliderLabel, XmCSliderLabel, XmRXmString,
|
|
Packit |
a21d5c |
sizeof(XmString), XtOffsetOf(XmColorSelectorRec, cs.strings.slider_labels[1]),
|
|
Packit |
a21d5c |
XmRString, (XtPointer) "Green"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNblueSliderLabel, XmCSliderLabel, XmRXmString,
|
|
Packit |
a21d5c |
sizeof(XmString), XtOffsetOf(XmColorSelectorRec, cs.strings.slider_labels[2]),
|
|
Packit |
a21d5c |
XmRString, (XtPointer) "Blue"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNcolorListTogLabel, XmCTogLabel, XmRXmString,
|
|
Packit |
a21d5c |
sizeof(XmString), XtOffsetOf(XmColorSelectorRec, cs.strings.tog_labels[0]),
|
|
Packit |
a21d5c |
XmRString, (XtPointer) "Color List"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNsliderTogLabel, XmCTogLabel, XmRXmString,
|
|
Packit |
a21d5c |
sizeof(XmString), XtOffsetOf(XmColorSelectorRec, cs.strings.tog_labels[1]),
|
|
Packit |
a21d5c |
XmRString,(XtPointer)"Color Sliders"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNnoCellError, XmCNoCellError, XmRXmString,
|
|
Packit |
a21d5c |
sizeof(XmString), XtOffsetOf(XmColorSelectorRec, cs.strings.no_cell_error),
|
|
Packit |
a21d5c |
XmRString, (XtPointer)"\n\nNo Color Cell Available!"
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNfileReadError, XmCFileReadError, XmRXmString,
|
|
Packit |
a21d5c |
sizeof(XmString), XtOffsetOf(XmColorSelectorRec, cs.strings.file_read_error),
|
|
Packit |
a21d5c |
XmRString, (XtPointer)"Could not read rgb.txt file:"
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
};
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static XmSyntheticResource get_resources[] =
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNmarginWidth, sizeof(Dimension),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.margin_width),
|
|
Packit |
a21d5c |
XmeFromHorizontalPixels, (XmImportProc) XmeToHorizontalPixels
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNmarginHeight, sizeof(Dimension),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.margin_height),
|
|
Packit |
a21d5c |
XmeFromVerticalPixels, (XmImportProc) XmeToVerticalPixels
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNredSliderLabel, sizeof(XmString),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.strings.slider_labels[0]),
|
|
Packit |
a21d5c |
GetValues_XmNredSliderLabel, NULL
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNgreenSliderLabel, sizeof(XmString),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.strings.slider_labels[1]),
|
|
Packit |
a21d5c |
GetValues_XmNgreenSliderLabel, NULL
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNblueSliderLabel, sizeof(XmString),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.strings.slider_labels[2]),
|
|
Packit |
a21d5c |
GetValues_XmNblueSliderLabel, NULL
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNcolorListTogLabel, sizeof(XmString),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.strings.tog_labels[0]),
|
|
Packit |
a21d5c |
GetValues_XmNcolorListTogLabel, NULL
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNsliderTogLabel, sizeof(XmString),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.strings.tog_labels[1]),
|
|
Packit |
a21d5c |
GetValues_XmNsliderTogLabel, NULL
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNnoCellError, sizeof(XmString),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.strings.no_cell_error),
|
|
Packit |
a21d5c |
GetValues_XmNnoCellError, NULL
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmNfileReadError, sizeof(XmString),
|
|
Packit |
a21d5c |
XtOffsetOf(XmColorSelectorRec, cs.strings.file_read_error),
|
|
Packit |
a21d5c |
GetValues_XmNfileReadError, NULL
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
};
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorSelectorClassRec xmColorSelectorClassRec = {
|
|
Packit |
a21d5c |
{ /* core fields */
|
|
Packit |
a21d5c |
/* superclass */ SUPERCLASS,
|
|
Packit |
a21d5c |
/* class_name */ "XmColorSelector",
|
|
Packit |
a21d5c |
/* widget_size */ sizeof(XmColorSelectorRec),
|
|
Packit |
a21d5c |
/* class_initialize */ ClassInitialize,
|
|
Packit |
a21d5c |
/* class_part_initialize */ ClassPartInitialize,
|
|
Packit |
a21d5c |
/* class_inited */ False,
|
|
Packit |
a21d5c |
/* initialize */ Initialize,
|
|
Packit |
a21d5c |
/* initialize_hook */ NULL,
|
|
Packit |
a21d5c |
/* realize */ XtInheritRealize,
|
|
Packit |
a21d5c |
/* actions */ NULL,
|
|
Packit |
a21d5c |
/* num_actions */ (Cardinal)0,
|
|
Packit |
a21d5c |
/* resources */ (XtResource*)resources,
|
|
Packit |
a21d5c |
/* num_resources */ XtNumber(resources),
|
|
Packit |
a21d5c |
/* xrm_class */ NULLQUARK,
|
|
Packit |
a21d5c |
/* compress_motion */ True,
|
|
Packit |
a21d5c |
/* compress_exposure */ True,
|
|
Packit |
a21d5c |
/* compress_enterleave */ True,
|
|
Packit |
a21d5c |
/* visible_interest */ False,
|
|
Packit |
a21d5c |
/* destroy */ Destroy,
|
|
Packit |
a21d5c |
/* resize */ Resize,
|
|
Packit |
a21d5c |
/* expose */ NULL,
|
|
Packit |
a21d5c |
/* set_values */ SetValues,
|
|
Packit |
a21d5c |
/* set_values_hook */ NULL,
|
|
Packit |
a21d5c |
/* set_values_almost */ XtInheritSetValuesAlmost,
|
|
Packit |
a21d5c |
/* get_values_hook */ NULL,
|
|
Packit |
a21d5c |
/* accept_focus */ NULL,
|
|
Packit |
a21d5c |
/* version */ XtVersion,
|
|
Packit |
a21d5c |
/* callback_private */ NULL,
|
|
Packit |
a21d5c |
/* tm_table */ XtInheritTranslations,
|
|
Packit |
a21d5c |
/* query_geometry */ (XtGeometryHandler) QueryGeometry,
|
|
Packit |
a21d5c |
/* display_accelerator */ XtInheritDisplayAccelerator,
|
|
Packit |
a21d5c |
/* extension */ NULL,
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
{ /* composite_class fields */
|
|
Packit |
a21d5c |
/* geometry_manager */ GeometryHandler,
|
|
Packit |
a21d5c |
/* change_managed */ ChangeManaged,
|
|
Packit |
a21d5c |
/* insert_child */ XtInheritInsertChild,
|
|
Packit |
a21d5c |
/* delete_child */ XtInheritDeleteChild,
|
|
Packit |
a21d5c |
/* extension */ NULL,
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
{ /* constraint_class fields */
|
|
Packit |
a21d5c |
/* resource list */ NULL,
|
|
Packit |
a21d5c |
/* num resources */ 0,
|
|
Packit |
a21d5c |
/* constraint size */ sizeof(XmColorSelectorConstraintRec),
|
|
Packit |
a21d5c |
/* destroy proc */ NULL,
|
|
Packit |
a21d5c |
/* init proc */ NULL,
|
|
Packit |
a21d5c |
/* set values proc */ NULL,
|
|
Packit |
a21d5c |
/* extension */ NULL,
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
{ /* manager_class fields */
|
|
Packit |
a21d5c |
/* default translations */ XtInheritTranslations,
|
|
Packit |
a21d5c |
/* syn_resources */ get_resources,
|
|
Packit |
a21d5c |
/* num_syn_resources */ XtNumber(get_resources),
|
|
Packit |
a21d5c |
/* syn_cont_resources */ NULL,
|
|
Packit |
a21d5c |
/* num_syn_cont_resources */ 0,
|
|
Packit |
a21d5c |
/* parent_process */ NULL,
|
|
Packit |
a21d5c |
/* extension */ NULL,
|
|
Packit |
a21d5c |
},
|
|
Packit |
a21d5c |
{ /* color_selector_class fields */
|
|
Packit |
a21d5c |
/* mumble */ NULL,
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
};
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
WidgetClass xmColorSelectorWidgetClass = (WidgetClass)&xmColorSelectorClassRec;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* STATIC CODE
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: ClassInitialize
|
|
Packit |
a21d5c |
* Description: Called to initialize class specific information.
|
|
Packit |
a21d5c |
* Arguments: widget_class - the widget class.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
ClassInitialize(void)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorSelectorClassRec *wc = &xmColorSelectorClassRec;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtSetTypeConverter(XmRString, XmRXmColorMode,
|
|
Packit |
a21d5c |
(XtTypeConverter) CvtStringToColorMode,
|
|
Packit |
a21d5c |
NULL, (Cardinal) 0, XtCacheAll, NULL);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* ClassPartInitialize sets up the fast subclassing for the widget.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
#ifdef _NO_PROTO
|
|
Packit |
a21d5c |
ClassPartInitialize(w_class)
|
|
Packit |
a21d5c |
WidgetClass w_class ;
|
|
Packit |
a21d5c |
#else
|
|
Packit |
a21d5c |
ClassPartInitialize(WidgetClass w_class)
|
|
Packit |
a21d5c |
#endif /* _NO_PROTO */
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
_XmFastSubclassInit (w_class, XmCOLORSELECTOR_BIT);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: Initialize
|
|
Packit |
a21d5c |
* Description: Called to initialize information specific
|
|
Packit |
a21d5c |
* to this widget.
|
|
Packit |
a21d5c |
* Arguments: request - what was originally requested.
|
|
Packit |
a21d5c |
* set - what will be created (our superclasses have
|
|
Packit |
a21d5c |
* already mucked with this)
|
|
Packit |
a21d5c |
* args, num_args - The arguments passed to
|
|
Packit |
a21d5c |
* the creation call.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
Initialize(Widget request, Widget set, ArgList args, Cardinal *num_args)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorSelectorWidget csw = (XmColorSelectorWidget)set;
|
|
Packit |
a21d5c |
Dimension width, height;
|
|
Packit |
a21d5c |
String temp;
|
|
Packit |
a21d5c |
char message_buffer[BUFSIZ];
|
|
Packit |
a21d5c |
ArgList f_args;
|
|
Packit |
a21d5c |
Cardinal f_num_args;
|
|
Packit |
a21d5c |
Widget button;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
_XmFilterArgs(args, *num_args, xm_std_filter, &f_args, &f_num_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Initialize important values.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorS_good_cell(csw) = False;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
temp = XmColorS_color_name(csw);
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = NULL;
|
|
Packit |
a21d5c |
XmColorS_list(csw) = NULL;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
CreateColorSliders(csw, f_args, f_num_args);
|
|
Packit |
a21d5c |
CreateSelectorRadio(csw, f_args, f_num_args);
|
|
Packit |
a21d5c |
CreateColorWindow(csw, f_args, f_num_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorS_rgb_file(csw) = XtNewString(XmColorS_rgb_file(csw));
|
|
Packit |
a21d5c |
XmColorS_colors(csw) = NULL;
|
|
Packit |
a21d5c |
read_rgb_file(csw, f_args, f_num_args, True);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (!color_name_changed(csw, temp)) {
|
|
Packit |
a21d5c |
snprintf(message_buffer, BUFSIZ, XmNunparsableColorMsg, temp);
|
|
Packit |
a21d5c |
XmeWarning((Widget)set, message_buffer);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
(void) color_name_changed(csw, "White");
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
slider_changed(NULL, (XtPointer) csw, NULL);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
CalcPreferredSize(csw, &width, &height);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ( csw->core.width < 1 )
|
|
Packit |
a21d5c |
csw->core.width = width;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ( csw->core.height < 1 )
|
|
Packit |
a21d5c |
csw->core.height = height;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
new_mode(csw, XmColorS_color_mode(csw));
|
|
Packit |
a21d5c |
button = XmColorS_chose_mode(csw)[XmColorS_color_mode(csw)];
|
|
Packit |
a21d5c |
XmToggleButtonSetState(button, True, False);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree((XtPointer) f_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
int i;
|
|
Packit |
a21d5c |
for( i = 0; i < 3; i++ )
|
|
Packit |
a21d5c |
XmColorS_strings(csw).slider_labels[i] = XmStringCopy(XmColorS_strings(csw).slider_labels[i]);
|
|
Packit |
a21d5c |
for (i = 0; i< XmColorSelector_NUM_TOGGLES; i++)
|
|
Packit |
a21d5c |
XmColorS_strings(csw).tog_labels[i] = XmStringCopy(XmColorS_strings(csw).tog_labels[i]);
|
|
Packit |
a21d5c |
XmColorS_strings(csw).file_read_error = XmStringCopy(XmColorS_strings(csw).file_read_error);
|
|
Packit |
a21d5c |
XmColorS_strings(csw).no_cell_error = XmStringCopy(XmColorS_strings(csw).no_cell_error);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: Destroy
|
|
Packit |
a21d5c |
* Description: Called to destroy this widget.
|
|
Packit |
a21d5c |
* Arguments: w - Color Selector Widget to destroy.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
Destroy(Widget w)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorSelectorWidget csw = (XmColorSelectorWidget)w;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (XmColorS_good_cell(csw)) {
|
|
Packit |
a21d5c |
XFreeColors(XtDisplay(csw), csw->core.colormap,
|
|
Packit |
a21d5c |
&XmColorS_color_pixel(csw), 1, 0);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree((char*) XmColorS_colors(csw));
|
|
Packit |
a21d5c |
XtFree((char*) XmColorS_color_name(csw));
|
|
Packit |
a21d5c |
XtFree((char*) XmColorS_rgb_file(csw));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
int i;
|
|
Packit |
a21d5c |
for( i = 0; i < 3; i++ )
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(csw).slider_labels[i]);
|
|
Packit |
a21d5c |
for (i = 0; i< XmColorSelector_NUM_TOGGLES; i++)
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(csw).tog_labels[i]);
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(csw).file_read_error);
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(csw).no_cell_error);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: Resize
|
|
Packit |
a21d5c |
* Description: Called when this widget has been resized.
|
|
Packit |
a21d5c |
* Arguments: w - Color Selector Widget to realize.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
Resize(Widget w)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
compute_size((XmColorSelectorWidget)w);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static Boolean AreDiff(char *s1, char *s2)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
if (s1 && !s2) return True;
|
|
Packit |
a21d5c |
if (s2 && !s1) return True;
|
|
Packit |
a21d5c |
if (!s1 && !s2) return False;
|
|
Packit |
a21d5c |
/* they exist; now safe to do strcmp */
|
|
Packit |
a21d5c |
return strcmp(s1, s2);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: SetValues
|
|
Packit |
a21d5c |
* Description: Called when some widget data needs to be modified on-
|
|
Packit |
a21d5c |
* the-fly.
|
|
Packit |
a21d5c |
* Arguments: current - the current (old) widget values.
|
|
Packit |
a21d5c |
* request - before superclassed have changed things.
|
|
Packit |
a21d5c |
* set - what will acutally be the new values.
|
|
Packit |
a21d5c |
* args, num_args - the arguments in the list.
|
|
Packit |
a21d5c |
* Returns: none
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static Boolean
|
|
Packit |
a21d5c |
SetValues(Widget current, Widget request, Widget set,
|
|
Packit |
a21d5c |
ArgList args, Cardinal *num_args)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorSelectorWidget csw = (XmColorSelectorWidget)set;
|
|
Packit |
a21d5c |
XmColorSelectorWidget curr = (XmColorSelectorWidget)current;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Pass argument list through to all children.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
ArgList f_args;
|
|
Packit |
a21d5c |
Cardinal f_num_args;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
_XmFilterArgs(args, *num_args, xm_std_filter, &f_args, &f_num_args);
|
|
Packit |
a21d5c |
_XmSetValuesOnChildren(set, f_args, f_num_args);
|
|
Packit |
a21d5c |
XtFree((XtPointer) f_args);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (XmColorS_color_mode(curr) != XmColorS_color_mode(csw))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
new_mode(csw, XmColorS_color_mode(csw));
|
|
Packit |
a21d5c |
XmToggleButtonSetState(XmColorS_chose_mode(csw)[XmColorS_color_mode(csw)],
|
|
Packit |
a21d5c |
True, True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
** Don't compare pointers; they are allocated, so passing the same file
|
|
Packit |
a21d5c |
** in twice will trip this expensive function unless we compare the
|
|
Packit |
a21d5c |
** values of the strings (when they exist)
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if (AreDiff(XmColorS_rgb_file(curr), XmColorS_rgb_file(csw)))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
read_rgb_file(csw, NULL, 0, False);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
if (XmColorS_rgb_file(curr) != XmColorS_rgb_file(csw))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XtFree((char*) XmColorS_rgb_file(curr));
|
|
Packit |
a21d5c |
XmColorS_rgb_file(csw) = XtNewString(XmColorS_rgb_file(csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ((XmColorS_margin_height(curr) != XmColorS_margin_height(csw)) ||
|
|
Packit |
a21d5c |
(XmColorS_margin_width(curr) != XmColorS_margin_width(csw)))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
compute_size(csw);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (XmColorS_color_name(curr) != XmColorS_color_name(csw))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
String oldValue; /* old color name, will free. */
|
|
Packit |
a21d5c |
String newValue; /* new color name, allocate */
|
|
Packit |
a21d5c |
char string_buffer[BUFSIZ];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
oldValue = XmColorS_color_name(curr);
|
|
Packit |
a21d5c |
newValue = XmColorS_color_name(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (!streq(newValue, oldValue))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Color name changed will automatically free the old
|
|
Packit |
a21d5c |
* value on success...
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = oldValue; /* so it free's the right thing. */
|
|
Packit |
a21d5c |
if (!color_name_changed(csw, newValue)) {
|
|
Packit |
a21d5c |
snprintf(string_buffer, BUFSIZ, XmNunparsableColorMsg, newValue);
|
|
Packit |
a21d5c |
XmeWarning(set, string_buffer);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = oldValue;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else {
|
|
Packit |
a21d5c |
XtFree(oldValue);
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = XtNewString(newValue);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
int i;
|
|
Packit |
a21d5c |
for( i = 0; i < 3; i++ )
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
if (XmColorS_strings(curr).slider_labels[i] != XmColorS_strings(csw).slider_labels[i])
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(curr).slider_labels[i]);
|
|
Packit |
a21d5c |
XmColorS_strings(csw).slider_labels[i] = XmStringCopy(XmColorS_strings(csw).slider_labels[i]);
|
|
Packit |
a21d5c |
XtVaSetValues(XmColorS_sliders(csw)[i], XmNtitleString, XmColorS_strings(csw).slider_labels[i], NULL);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
for (i = 0; i< XmColorSelector_NUM_TOGGLES; i++)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
if (XmColorS_strings(curr).tog_labels[i] != XmColorS_strings(csw).tog_labels[i])
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(curr).tog_labels[i]);
|
|
Packit |
a21d5c |
XmColorS_strings(csw).tog_labels[i] = XmStringCopy(XmColorS_strings(csw).tog_labels[i]);
|
|
Packit |
a21d5c |
XtVaSetValues(XmColorS_chose_mode(csw)[i], XmNlabelString, XmColorS_strings(csw).tog_labels[i], NULL);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (XmColorS_strings(curr).file_read_error != XmColorS_strings(csw).file_read_error)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(curr).file_read_error);
|
|
Packit |
a21d5c |
XmColorS_strings(csw).file_read_error = XmStringCopy(XmColorS_strings(csw).file_read_error);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
if (XmColorS_strings(curr).no_cell_error != XmColorS_strings(csw).no_cell_error)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmStringFree(XmColorS_strings(curr).no_cell_error);
|
|
Packit |
a21d5c |
XmColorS_strings(csw).no_cell_error = XmStringCopy(XmColorS_strings(csw).no_cell_error);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return FALSE;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: GeometryHandler
|
|
Packit |
a21d5c |
* Description: handles request from children for size changes.
|
|
Packit |
a21d5c |
* Arguments: child - the child to change.
|
|
Packit |
a21d5c |
* request - desired geometry of child.
|
|
Packit |
a21d5c |
* result - what will be allowed if almost.
|
|
Packit |
a21d5c |
* Returns: status.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static XtGeometryResult
|
|
Packit |
a21d5c |
GeometryHandler(Widget w, XtWidgetGeometry *request, XtWidgetGeometry *result)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
return(XtGeometryNo);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: QueryGeometry
|
|
Packit |
a21d5c |
* Description: Called when my parent wants to know what size
|
|
Packit |
a21d5c |
* I would like to be.
|
|
Packit |
a21d5c |
* Arguments: w - the widget to check.
|
|
Packit |
a21d5c |
* indended - constriants imposed by the parent.
|
|
Packit |
a21d5c |
* preferred - what I would like.
|
|
Packit |
a21d5c |
* Returns: See Xt Manual.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static XtGeometryResult
|
|
Packit |
a21d5c |
QueryGeometry(Widget w,XtWidgetGeometry *intended, XtWidgetGeometry *preferred)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
CalcPreferredSize((XmColorSelectorWidget) w,
|
|
Packit |
a21d5c |
&(preferred->width), &(preferred->height));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return(_XmHWQuery(w, intended, preferred));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: ChangeManaged
|
|
Packit |
a21d5c |
* Description: Called when a management change happens.
|
|
Packit |
a21d5c |
* Arguments: w - the csw widget.
|
|
Packit |
a21d5c |
* Returns: none
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
ChangeManaged(Widget w)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
compute_size((XmColorSelectorWidget) w);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmeNavigChangeManaged(w);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* Type Converters.
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: CvtStringToColorMode
|
|
Packit |
a21d5c |
* Description: Converts a string to a ColorMode
|
|
Packit |
a21d5c |
* Arguments: dpy - the X Display.
|
|
Packit |
a21d5c |
* args, num_args - *** NOT USED ***
|
|
Packit |
a21d5c |
* from - contains the string to convert.
|
|
Packit |
a21d5c |
* to - contains the converted node state.
|
|
Packit |
a21d5c |
* junk - *** NOT USED *** .
|
|
Packit |
a21d5c |
* Returns:
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static Boolean
|
|
Packit |
a21d5c |
CvtStringToColorMode(Display *dpy, XrmValuePtr args, Cardinal num_args,
|
|
Packit |
a21d5c |
XrmValuePtr from, XrmValuePtr to, XtPointer * junk)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
static XmColorMode mode;
|
|
Packit |
a21d5c |
char lowerName[BUFSIZ];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmCopyISOLatin1Lowered(lowerName, (char *)from->addr);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (streq(lowerName, "listmode"))
|
|
Packit |
a21d5c |
mode = XmListMode;
|
|
Packit |
a21d5c |
else if (streq(lowerName, "scalemode"))
|
|
Packit |
a21d5c |
mode = XmScaleMode;
|
|
Packit |
a21d5c |
else {
|
|
Packit |
a21d5c |
XtDisplayStringConversionWarning(dpy, from->addr, XmRXmColorMode);
|
|
Packit |
a21d5c |
return(False); /* Conversion failed. */
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
to->size = sizeof(XmColorMode);
|
|
Packit |
a21d5c |
if ( to->addr == NULL ) {
|
|
Packit |
a21d5c |
to->addr = (XtPointer)&mode;
|
|
Packit |
a21d5c |
return(True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else if ( to->size >= sizeof(XmColorMode) ) {
|
|
Packit |
a21d5c |
XmColorMode *state = (XmColorMode *) to->addr;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
*state = mode;
|
|
Packit |
a21d5c |
return(True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return(False);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
* LOCAL CODE
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: CalcPreferredSize
|
|
Packit |
a21d5c |
* Description: Calculates the size this widget would prefer to be.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* RETURNED width, height - preferred size of the color selector.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
CalcPreferredSize(XmColorSelectorWidget csw,
|
|
Packit |
a21d5c |
Dimension *width, Dimension *height)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XtWidgetGeometry geo;
|
|
Packit |
a21d5c |
Widget *childP;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
*height = *width = 0;
|
|
Packit |
a21d5c |
ForAllChildren(csw, childP) {
|
|
Packit |
a21d5c |
if (*childP == XmColorS_bb(csw))
|
|
Packit |
a21d5c |
continue;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
(void)XtQueryGeometry(*childP, NULL, &geo;;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
ASSIGN_MAX(*width, (geo.width + (2 * geo.border_width)));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
geo.height += 2 * geo.border_width;
|
|
Packit |
a21d5c |
if ( *childP == XtParent(XmColorS_color_window(csw)) )
|
|
Packit |
a21d5c |
continue;
|
|
Packit |
a21d5c |
else if ( *childP == XmColorS_scrolled_list(csw) )
|
|
Packit |
a21d5c |
*height += (int)(4 * geo.height)/3;
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
*height += geo.height;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
*height += XmColorS_margin_height(csw);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
*width += 2 * XmColorS_margin_width(csw);
|
|
Packit |
a21d5c |
*height += 2 * XmColorS_margin_height(csw);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: color_name_changed
|
|
Packit |
a21d5c |
* Description: Change in the color name string.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* name - the color name.
|
|
Packit |
a21d5c |
* Returns: True if successful
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static Boolean
|
|
Packit |
a21d5c |
color_name_changed(XmColorSelectorWidget csw, char *name)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
String old_val = XmColorS_color_name(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ( name == NULL ) {
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = NULL;
|
|
Packit |
a21d5c |
XtFree((XtPointer) old_val);
|
|
Packit |
a21d5c |
return(True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = XtNewString(name);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (!UpdateColorWindow(csw, True)) {
|
|
Packit |
a21d5c |
XtFree((XtPointer) XmColorS_color_name(csw));
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = old_val;
|
|
Packit |
a21d5c |
return(False);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
SetSliders(csw);
|
|
Packit |
a21d5c |
SelectColor(csw);
|
|
Packit |
a21d5c |
XtFree((XtPointer) old_val);
|
|
Packit |
a21d5c |
return(True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: SetSliders
|
|
Packit |
a21d5c |
* Description: Sets the values in the color sliders.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* Returns: none
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
SetSliders(XmColorSelectorWidget csw)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
static Arg args[] = {
|
|
Packit |
a21d5c |
{ XmNvalue, (XtArgVal) NULL },
|
|
Packit |
a21d5c |
};
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
args[0].value = (XtArgVal) XmColorS_slider_red(csw);
|
|
Packit |
a21d5c |
XtSetValues(XmColorS_sliders(csw)[0], args, XtNumber(args));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
args[0].value = (XtArgVal) XmColorS_slider_green(csw);
|
|
Packit |
a21d5c |
XtSetValues(XmColorS_sliders(csw)[1], args, XtNumber(args));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
args[0].value = (XtArgVal) XmColorS_slider_blue(csw);
|
|
Packit |
a21d5c |
XtSetValues(XmColorS_sliders(csw)[2], args, XtNumber(args));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: SelectColor
|
|
Packit |
a21d5c |
* Description: Selects the color in the list that corrosponds
|
|
Packit |
a21d5c |
* to the current values of the RGB sliders.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
SelectColor(XmColorSelectorWidget csw)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
int color_num;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (FindColor(csw, &color_num)) {
|
|
Packit |
a21d5c |
XmListSelectPos(XmColorS_list(csw), color_num + 1, False);
|
|
Packit |
a21d5c |
XmListSetBottomPos(XmColorS_list(csw), color_num + 1);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
XmListDeselectAllItems(XmColorS_list(csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: EndsInDigits
|
|
Packit |
a21d5c |
* Description: Determines if a string ends in a digit
|
|
Packit |
a21d5c |
* Returns: True if it does
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static int
|
|
Packit |
a21d5c |
EndsInDigits(char *str)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
register char *c = str;
|
|
Packit |
a21d5c |
while(*c != '\0') c++; /* advance to end of string marker */
|
|
Packit |
a21d5c |
c--; /* back to the last character */
|
|
Packit |
a21d5c |
if(c >= str && isascii(*c) && isdigit(*c))
|
|
Packit |
a21d5c |
return True;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return False;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: FindColor
|
|
Packit |
a21d5c |
* Description: Finds the index into the colors array associated with
|
|
Packit |
a21d5c |
* the current slider values. Attempts to find the slot
|
|
Packit |
a21d5c |
* with a the best matching name.
|
|
Packit |
a21d5c |
* Arguments: csw - The color selector widget.
|
|
Packit |
a21d5c |
* RETURNED color_num - The color index that was found.
|
|
Packit |
a21d5c |
* Returns: True if color was found, false otherwise.
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
* NOTE: if False is returned then color_num has an undefined value.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static Boolean
|
|
Packit |
a21d5c |
FindColor(XmColorSelectorWidget csw, int *color_num)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
register ColorInfo *ptr;
|
|
Packit |
a21d5c |
register int i, red, green, blue;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Obtain the color settings from the ColorSelector
|
|
Packit |
a21d5c |
* data structure
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
red = XmColorS_slider_red(csw);
|
|
Packit |
a21d5c |
green = XmColorS_slider_green(csw);
|
|
Packit |
a21d5c |
blue = XmColorS_slider_blue(csw);
|
|
Packit |
a21d5c |
ptr = XmColorS_colors(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Flag for finding color value
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
*color_num = -1;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Find color within the exisiting colormap assigned to
|
|
Packit |
a21d5c |
* ColorSelector
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
for (i = 0; i < XmColorS_num_colors(csw); i++, ptr++)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
if ((ptr->red == red) && (ptr->green == green) && (ptr->blue == blue))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
if( *color_num < 0 )
|
|
Packit |
a21d5c |
*color_num = i;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Only change the selected color if it is better in some way */
|
|
Packit |
a21d5c |
if(XmColorS_color_name(csw)) {
|
|
Packit |
a21d5c |
if(XmColorS_color_name(csw)[0] == '#')
|
|
Packit |
a21d5c |
*color_num = i;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if(streq(XmColorS_color_name(csw), ptr->name) ||
|
|
Packit |
a21d5c |
streq(XmColorS_color_name(csw), ptr->no_space_lower_name))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
*color_num = i;
|
|
Packit |
a21d5c |
return(True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
if(! EndsInDigits(ptr->name)) {
|
|
Packit |
a21d5c |
*color_num = i;
|
|
Packit |
a21d5c |
return(True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return(*color_num >= 0);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: slider_changed
|
|
Packit |
a21d5c |
* Description: One of the sliders was pressed
|
|
Packit |
a21d5c |
* Arguments: w - the slider widget.
|
|
Packit |
a21d5c |
* csw - the color selector.
|
|
Packit |
a21d5c |
* scale - the scale widget callback struct.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
slider_changed(Widget w, XtPointer csw_ptr, XtPointer scale_ptr)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorSelectorWidget csw = (XmColorSelectorWidget) csw_ptr;
|
|
Packit |
a21d5c |
XmScaleCallbackStruct *scale = (XmScaleCallbackStruct *) scale_ptr;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (scale_ptr != NULL) { /* Set a new value. */
|
|
Packit |
a21d5c |
if (w == XmColorS_sliders(csw)[0])
|
|
Packit |
a21d5c |
XmColorS_slider_red(csw) = scale->value;
|
|
Packit |
a21d5c |
else if(w == XmColorS_sliders(csw)[1])
|
|
Packit |
a21d5c |
XmColorS_slider_green(csw) = scale->value;
|
|
Packit |
a21d5c |
else if(w == XmColorS_sliders(csw)[2])
|
|
Packit |
a21d5c |
XmColorS_slider_blue(csw) = scale->value;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
UpdateColorWindow(csw, False);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: UpdateColorWindow
|
|
Packit |
a21d5c |
* Description: Updates the color window display.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* use_name - if TRUE then use the color name to update.
|
|
Packit |
a21d5c |
* if FALSE then use the color sliders to update.
|
|
Packit |
a21d5c |
* Returns: True if successful
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static Boolean
|
|
Packit |
a21d5c |
UpdateColorWindow(XmColorSelectorWidget csw, Boolean use_name)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
int index;
|
|
Packit |
a21d5c |
XColor color;
|
|
Packit |
a21d5c |
Pixel foreground;
|
|
Packit |
a21d5c |
char buf[XmColorSelector_COLOR_NAME_SIZE], new_label[BUFSIZ];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (!use_name) /* Update color names */
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
char *freeMe;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
freeMe = XmColorS_color_name(csw);
|
|
Packit |
a21d5c |
sprintf(buf, "#%02x%02x%02x", XmColorS_slider_red(csw),
|
|
Packit |
a21d5c |
XmColorS_slider_green(csw), XmColorS_slider_blue(csw));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (FindColor(csw, &index))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = XtNewString(XmColorS_colors(csw)[index].name);
|
|
Packit |
a21d5c |
sprintf(new_label, "%s (%s)", XmColorS_color_name(csw), buf);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = XtNewString(buf);
|
|
Packit |
a21d5c |
sprintf(new_label, "%s", buf);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree((XtPointer)freeMe );
|
|
Packit |
a21d5c |
color.red = XmColorS_slider_red(csw) * 256;
|
|
Packit |
a21d5c |
color.green = XmColorS_slider_green(csw) * 256;
|
|
Packit |
a21d5c |
color.blue = XmColorS_slider_blue(csw) * 256;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else /* Update color slider */
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
if(XParseColor(XtDisplay(csw), csw->core.colormap,
|
|
Packit |
a21d5c |
XmColorS_color_name(csw), &color) == 0)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
return(False);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorS_slider_red(csw) = color.red / 256;
|
|
Packit |
a21d5c |
XmColorS_slider_green(csw) = color.green / 256;
|
|
Packit |
a21d5c |
XmColorS_slider_blue(csw) = color.blue / 256;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Attempt to replace a name that begins with a # with a real color
|
|
Packit |
a21d5c |
* name.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ((XmColorS_color_name(csw)[0] == '#') && FindColor(csw, &index))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XtFree(XmColorS_color_name(csw));
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) = XtNewString(XmColorS_colors(csw)[index].name);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
sprintf(buf, "#%02x%02x%02x", color.red/256, color.green/256, color.blue/256);
|
|
Packit |
a21d5c |
sprintf(new_label, "%s (%s)", XmColorS_color_name(csw), buf);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
long test = (long) color.red;
|
|
Packit |
a21d5c |
test += (long) color.green;
|
|
Packit |
a21d5c |
test += (long) color.blue;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (test/3 > 0x7000)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
foreground = BlackPixelOfScreen(XtScreen((Widget) csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
foreground = WhitePixelOfScreen(XtScreen((Widget) csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Check on the default visual
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if (DefaultVisualDisplay(csw, foreground, color, (char *)new_label))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
return True;
|
|
Packit |
a21d5c |
} else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
return False;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: list_selected
|
|
Packit |
a21d5c |
* Description: One of the list widgets was selected.
|
|
Packit |
a21d5c |
* Arguments: w - the slider widget.
|
|
Packit |
a21d5c |
* csw - the color selector.
|
|
Packit |
a21d5c |
* list - the list widget callback struct.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
list_selected(Widget w, XtPointer csw_ptr, XtPointer list_ptr)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorSelectorWidget csw = (XmColorSelectorWidget) csw_ptr;
|
|
Packit |
a21d5c |
XmListCallbackStruct *list = (XmListCallbackStruct *) list_ptr;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree(XmColorS_color_name(csw));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmColorS_color_name(csw) =
|
|
Packit |
a21d5c |
XmStringUnparse(list->item,
|
|
Packit |
a21d5c |
NULL, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* deprecated
|
|
Packit |
a21d5c |
XmStringGetLtoR(list->item, XmFONTLIST_DEFAULT_TAG,
|
|
Packit |
a21d5c |
&(XmColorS_color_name(csw)));
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
UpdateColorWindow(csw, True);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: change_mode
|
|
Packit |
a21d5c |
* Description: One of the change mode buttons was pressed.
|
|
Packit |
a21d5c |
* Arguments: w - the slider widget.
|
|
Packit |
a21d5c |
* csw_ptr - the color selector.
|
|
Packit |
a21d5c |
* tp - the toggle widget callback struct.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
change_mode(Widget w, XtPointer csw_ptr, XtPointer tp)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorSelectorWidget csw = (XmColorSelectorWidget) csw_ptr;
|
|
Packit |
a21d5c |
XmToggleButtonCallbackStruct *toggle = (XmToggleButtonCallbackStruct *) tp;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Ignore unsets.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (toggle->reason == XmCR_VALUE_CHANGED && toggle->set) {
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Change the mode if it is different.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ((w == XmColorS_chose_mode(csw)[XmListMode]) &&
|
|
Packit |
a21d5c |
(XmColorS_color_mode(csw) != XmListMode))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
new_mode(csw, XmListMode);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else if ((w == XmColorS_chose_mode(csw)[XmScaleMode]) &&
|
|
Packit |
a21d5c |
(XmColorS_color_mode(csw) != XmScaleMode))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
new_mode(csw, XmScaleMode);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: new_mode
|
|
Packit |
a21d5c |
* Description: mode has changed
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector.
|
|
Packit |
a21d5c |
* mode - the new mode.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
new_mode(XmColorSelectorWidget csw, XmColorMode mode)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorS_color_mode(csw) = mode;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (mode == XmScaleMode) {
|
|
Packit |
a21d5c |
SetSliders(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtUnmanageChild(XmColorS_scrolled_list(csw));
|
|
Packit |
a21d5c |
XtManageChild(XmColorS_bb(csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else {
|
|
Packit |
a21d5c |
SelectColor(csw); /* Select the current color in the list. */
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtUnmanageChild(XmColorS_bb(csw));
|
|
Packit |
a21d5c |
XtManageChild(XmColorS_scrolled_list(csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: compute_size
|
|
Packit |
a21d5c |
* Description: Do all the size and position computing.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
compute_size(XmColorSelectorWidget csw)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XtWidgetGeometry input, radio_geom, color_geom;
|
|
Packit |
a21d5c |
Dimension width, height;
|
|
Packit |
a21d5c |
Position x,y; /* positions */
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* First size and place the button box and scrolled list.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
y = XmColorS_margin_height(csw);
|
|
Packit |
a21d5c |
x = XmColorS_margin_width(csw);
|
|
Packit |
a21d5c |
width = csw->core.width - (2 * XmColorS_margin_width(csw));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
input.width = width;
|
|
Packit |
a21d5c |
input.request_mode = CWWidth;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
(void) XtQueryGeometry(XmColorS_chose_radio(csw), NULL, &radio_geom);
|
|
Packit |
a21d5c |
(void) XtQueryGeometry(XmColorS_color_window(csw), &input, &color_geom);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
height = (csw->core.height - 4 * XmColorS_margin_height(csw) -
|
|
Packit |
a21d5c |
(radio_geom.height + 2 * radio_geom.border_width));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Leave space for the margins and make the color area 1/3 the height
|
|
Packit |
a21d5c |
* of the scrolled list and button box.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
color_geom.height = height / 4;
|
|
Packit |
a21d5c |
height -= color_geom.height;
|
|
Packit |
a21d5c |
color_geom.height -= 2 * color_geom.border_width;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
_XmConfigureWidget(XmColorS_bb(csw), x, y, width, height, 0);
|
|
Packit |
a21d5c |
_XmConfigureWidget(XmColorS_scrolled_list(csw), x, y, width, height, 0);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
y += height + XmColorS_margin_height(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Place the radio box.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ( radio_geom.width < csw->core.width )
|
|
Packit |
a21d5c |
x = (int)(csw->core.width - radio_geom.width) / 2;
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
x = XmColorS_margin_width(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
_XmConfigureWidget(XmColorS_chose_radio(csw), x, y, radio_geom.width,
|
|
Packit |
a21d5c |
radio_geom.height, radio_geom.border_width);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
y += radio_geom.height + XmColorS_margin_height(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Lastly, place the color window
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
_XmConfigureWidget(XtParent(XmColorS_color_window(csw)), XmColorS_margin_width(csw), y,
|
|
Packit |
a21d5c |
width, color_geom.height, color_geom.border_width);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: read_rgb_file
|
|
Packit |
a21d5c |
* Description: Read in all the color names and add them to the list.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector.
|
|
Packit |
a21d5c |
* cargs, cnum_args - a filtered arg list that was
|
|
Packit |
a21d5c |
* passed to create the color selector.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
read_rgb_file(XmColorSelectorWidget csw, ArgList cargs, Cardinal cnum_args, Boolean initial)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
FILE *file;
|
|
Packit |
a21d5c |
char buf[BUFSIZ];
|
|
Packit |
a21d5c |
char string_buffer[BUFSIZ];
|
|
Packit |
a21d5c |
char *color_name;
|
|
Packit |
a21d5c |
ColorInfo * color_info = NULL;
|
|
Packit |
a21d5c |
register int i;
|
|
Packit |
a21d5c |
Arg *margs, args[20];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Create new list if needed, or delete any old list items.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if (XmColorS_list(csw) == NULL)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
i = 0;
|
|
Packit |
a21d5c |
XtSetArg(args[i], XmNlistSizePolicy, XmCONSTANT); i++;
|
|
Packit |
a21d5c |
XtSetArg(args[i], XmNvisibleItemCount, 15); i++;
|
|
Packit |
a21d5c |
margs = XtMergeArgLists(args, i, cargs, cnum_args);
|
|
Packit |
a21d5c |
XmColorS_list(csw) = XmCreateScrolledList((Widget) csw, "list",
|
|
Packit |
a21d5c |
margs, i + cnum_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtManageChild(XmColorS_list(csw));
|
|
Packit |
a21d5c |
XmColorS_scrolled_list(csw) = XtParent(XmColorS_list(csw));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (XmColorS_color_mode(csw) != XmListMode)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
/* Hide the scrolled list until it need be visible... */
|
|
Packit |
a21d5c |
XtUnmanageChild(XmColorS_scrolled_list(csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree((XtPointer) margs);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmListDeleteAllItems(XmColorS_list(csw));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
** Because of the internal functioning of the XmList, it is better to
|
|
Packit |
a21d5c |
** zero out the selected item list rather than to let the item currently
|
|
Packit |
a21d5c |
** selected be re-selected by the XmList when the new list of colors is
|
|
Packit |
a21d5c |
** assigned. As is, the XmList iteratively searches through the list of
|
|
Packit |
a21d5c |
** selected items for each item added. Resetting the selectedItem list to
|
|
Packit |
a21d5c |
** NULL/0 ensures that we don't have O(n*m) XmStringCompare operations
|
|
Packit |
a21d5c |
** done when setting the new list below.
|
|
Packit |
a21d5c |
** Also, resetting the list saves us in the case in which the rgb_file
|
|
Packit |
a21d5c |
** is invalid or doesn't contain this selected string.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
XtVaSetValues(XmColorS_list(csw),
|
|
Packit |
a21d5c |
XmNselectedItems, NULL, XmNselectedItemCount, 0, NULL);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Read in all the colornames.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if ((file = fopen(XmColorS_rgb_file(csw), "r")) != NULL) {
|
|
Packit |
a21d5c |
register int alloc, count, len;
|
|
Packit |
a21d5c |
register char *name;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
alloc = count = 0;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
while(fgets(buf, BUFSIZ, file)) {
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Skip any comment lines in the file
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if ( buf[0] == '!' ) continue;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (count >= alloc) {
|
|
Packit |
a21d5c |
if (0 == alloc)
|
|
Packit |
a21d5c |
alloc = 755; /* rather than stat the file and determine a good value to use, just use enough for X11R5, X11R6, and OpenWindows3 */
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
#define ALLOC_INC 20
|
|
Packit |
a21d5c |
alloc += ALLOC_INC;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
color_info = (ColorInfo *)XtRealloc((XtPointer) color_info,
|
|
Packit |
a21d5c |
sizeof(ColorInfo) * alloc);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
sscanf(buf, "%hu %hu %hu", &(color_info[count].red),
|
|
Packit |
a21d5c |
&(color_info[count].green), &(color_info[count].blue));
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if ((color_name = find_name(buf)) == NULL)
|
|
Packit |
a21d5c |
continue;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
len = strlen(color_name);
|
|
Packit |
a21d5c |
if (len > XmColorSelector_COLOR_NAME_SIZE) {
|
|
Packit |
a21d5c |
color_name[XmColorSelector_COLOR_NAME_SIZE - 1] = '\0';
|
|
Packit |
a21d5c |
snprintf(string_buffer, BUFSIZ,
|
|
Packit |
a21d5c |
XmNcolorNameTooLongMsg, buf, color_name);
|
|
Packit |
a21d5c |
XmeWarning((Widget)csw, string_buffer);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
name = color_info[count].no_space_lower_name;
|
|
Packit |
a21d5c |
for (i = 0; i < len; i++) {
|
|
Packit |
a21d5c |
register char c = color_name[i];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Copy in all characters that are ascii and non-spaces.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if (!isascii(c))
|
|
Packit |
a21d5c |
continue;
|
|
Packit |
a21d5c |
if (!isspace(c))
|
|
Packit |
a21d5c |
*name++ = tolower(c);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
*name = '\0';
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
name = color_info[count].name;
|
|
Packit |
a21d5c |
color_name[0] = toupper(color_name[0]);
|
|
Packit |
a21d5c |
for (i = 0; i < len; i++) {
|
|
Packit |
a21d5c |
register char c = color_name[i];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Capitalize all characters after a space.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (!isascii(c))
|
|
Packit |
a21d5c |
continue;
|
|
Packit |
a21d5c |
if (isspace(c) && ((i + 1) < len)) {
|
|
Packit |
a21d5c |
color_name[i + 1] = toupper(color_name[i + 1]);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
*name++ = c;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
*name = '\0';
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
count++;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
fclose(file);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
qsort(color_info, count, sizeof(ColorInfo), CmpColors);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Remove duplicates.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
i = 0;
|
|
Packit |
a21d5c |
while (i < (count - 1)) {
|
|
Packit |
a21d5c |
if (streq(color_info[i].no_space_lower_name,
|
|
Packit |
a21d5c |
color_info[i + 1].no_space_lower_name))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
register int j;
|
|
Packit |
a21d5c |
register ColorInfo *ptr;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
ptr = color_info + i;
|
|
Packit |
a21d5c |
j = i;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* This makes sure that the one with the space is
|
|
Packit |
a21d5c |
* left in place in favor of the one without.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if (strchr(ptr->name, ' ') != NULL) {
|
|
Packit |
a21d5c |
j++;
|
|
Packit |
a21d5c |
ptr++;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
while ( ++j < count) {
|
|
Packit |
a21d5c |
ptr[0] = ptr[1];
|
|
Packit |
a21d5c |
ptr++;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
count--; /*Something has been removed, decrement count*/
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
i++;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmString *strs = (XmString*)XtMalloc(sizeof(XmString)*count);
|
|
Packit |
a21d5c |
for (i = 0; i < count; i++)
|
|
Packit |
a21d5c |
strs[i] = XmStringCreateLocalized(color_info[i].name);
|
|
Packit |
a21d5c |
XtVaSetValues(XmColorS_list(csw),
|
|
Packit |
a21d5c |
XmNitems, strs,
|
|
Packit |
a21d5c |
XmNitemCount, count,
|
|
Packit |
a21d5c |
NULL);
|
|
Packit |
a21d5c |
for (i = 0; i < count; i++)
|
|
Packit |
a21d5c |
XmStringFree(strs[i]);
|
|
Packit |
a21d5c |
XtFree((char*)strs);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree((char*)XmColorS_colors(csw));
|
|
Packit |
a21d5c |
XmColorS_colors(csw) = color_info;
|
|
Packit |
a21d5c |
XmColorS_num_colors(csw) = count;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* It would be better if we had cached the current index number so
|
|
Packit |
a21d5c |
** we could just reset the list to the string corresponding to that
|
|
Packit |
a21d5c |
** value, but instead wind up going through FindColor to reestablish
|
|
Packit |
a21d5c |
** the selected string
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if (!initial)
|
|
Packit |
a21d5c |
SelectColor(csw);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else {
|
|
Packit |
a21d5c |
XmString str;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XmListAddItem(XmColorS_list(csw), XmColorS_strings(csw).file_read_error, 0);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
str = XmStringCreateLocalized(XmColorS_rgb_file(csw));
|
|
Packit |
a21d5c |
XmListAddItem(XmColorS_list(csw), str, 0);
|
|
Packit |
a21d5c |
XmStringFree(str);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree((char*)XmColorS_colors(csw));
|
|
Packit |
a21d5c |
XmColorS_colors(csw) = NULL;
|
|
Packit |
a21d5c |
XmColorS_num_colors(csw) = 0;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtAddCallback(XmColorS_list(csw), XmNsingleSelectionCallback,
|
|
Packit |
a21d5c |
list_selected, csw);
|
|
Packit |
a21d5c |
XtAddCallback(XmColorS_list(csw), XmNbrowseSelectionCallback,
|
|
Packit |
a21d5c |
list_selected, csw);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: CmpColors
|
|
Packit |
a21d5c |
* Description: Compares two colors.
|
|
Packit |
a21d5c |
* Arguments: ptr_1, ptr_2 - two colors too compare.
|
|
Packit |
a21d5c |
* Returns: none
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static int
|
|
Packit |
a21d5c |
CmpColors(const void * ptr_1, const void * ptr_2)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
ColorInfo *color1, *color2;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
color1 = (ColorInfo *) ptr_1;
|
|
Packit |
a21d5c |
color2 = (ColorInfo *) ptr_2;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return(strcmp(color1->no_space_lower_name, color2->no_space_lower_name));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: find_name
|
|
Packit |
a21d5c |
* Description: Go through the buffer for looking for the name
|
|
Packit |
a21d5c |
* of a color string.
|
|
Packit |
a21d5c |
* Arguments: buffer - list of color names.
|
|
Packit |
a21d5c |
* Returns: pointer in the buffer where the string begins.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
static char*
|
|
Packit |
a21d5c |
find_name(char *buffer)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
register char *curr, *temp; /* current pointer */
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
for (curr = buffer; curr != NULL && *curr != '\0'; curr++) {
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Look for first non number, non space or tab.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (isascii(*curr) && (isdigit(*curr) || isspace(*curr)))
|
|
Packit |
a21d5c |
continue;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
temp = (char *) strchr(curr, '\n');
|
|
Packit |
a21d5c |
*temp = '\0';
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return(curr);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
return(NULL);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: CreateColorSliders
|
|
Packit |
a21d5c |
* Description: creates a button with three sliders (Red, Green, Blue).
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* cargs, cnum_args - a filtered arg list that was
|
|
Packit |
a21d5c |
* passed to create the color selector.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
CreateColorSliders(XmColorSelectorWidget csw,
|
|
Packit |
a21d5c |
ArgList cargs, Cardinal cnum_args)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
register int i;
|
|
Packit |
a21d5c |
Cardinal num_args, title;
|
|
Packit |
a21d5c |
Arg *margs, args[10];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
num_args = 0;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNborderWidth, 0); num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNorientation, XmVERTICAL); num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNfillOption, XmFillMinor); num_args++;
|
|
Packit |
a21d5c |
margs = XtMergeArgLists(args, num_args, cargs, cnum_args);
|
|
Packit |
a21d5c |
XmColorS_bb(csw) = XtCreateManagedWidget("buttonBox", xmButtonBoxWidgetClass,
|
|
Packit |
a21d5c |
(Widget) csw,
|
|
Packit |
a21d5c |
margs, cnum_args + num_args);
|
|
Packit |
a21d5c |
XtFree((XtPointer) margs);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
num_args = 0;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNmaximum, 255); num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNorientation, XmHORIZONTAL); num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNshowValue, True); num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNprocessingDirection, XmMAX_ON_RIGHT);
|
|
Packit |
a21d5c |
num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNtitleString, NULL); title = num_args++;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
margs = XtMergeArgLists(args, num_args, cargs, cnum_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
for( i = 0; i < 3; i++ ) {
|
|
Packit |
a21d5c |
margs[title].value = (XtArgVal) XmColorS_strings(csw).slider_labels[i];
|
|
Packit |
a21d5c |
XmColorS_sliders(csw)[i] = XtCreateManagedWidget("scale",
|
|
Packit |
a21d5c |
xmScaleWidgetClass,
|
|
Packit |
a21d5c |
XmColorS_bb(csw), margs,
|
|
Packit |
a21d5c |
num_args + cnum_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtAddCallback(XmColorS_sliders(csw)[i], XmNdragCallback,
|
|
Packit |
a21d5c |
slider_changed, csw);
|
|
Packit |
a21d5c |
XtAddCallback(XmColorS_sliders(csw)[i], XmNvalueChangedCallback,
|
|
Packit |
a21d5c |
slider_changed, csw);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
XtFree((XtPointer) margs);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: CreateSelectorRadio
|
|
Packit |
a21d5c |
* Description: creates a radio box with two toggles for selector
|
|
Packit |
a21d5c |
* type.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* cargs, cnum_args - a filtered arg list that was
|
|
Packit |
a21d5c |
* passed to create the color selector.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
CreateSelectorRadio(XmColorSelectorWidget csw,
|
|
Packit |
a21d5c |
ArgList cargs, Cardinal cnum_args)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
Widget w;
|
|
Packit |
a21d5c |
Cardinal i, label;
|
|
Packit |
a21d5c |
Arg *margs, args[5];
|
|
Packit |
a21d5c |
int count;
|
|
Packit |
a21d5c |
static String names[] = { "colorListToggle", "colorSlidersToggle" };
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
i = 0;
|
|
Packit |
a21d5c |
XtSetArg(args[i], XmNradioBehavior, True); i++;
|
|
Packit |
a21d5c |
XtSetArg(args[i], XmNpacking, XmPACK_COLUMN); i++;
|
|
Packit |
a21d5c |
XtSetArg(args[i], XmNnumColumns, 2); i++;
|
|
Packit |
a21d5c |
margs = XtMergeArgLists(args, i, cargs, cnum_args);
|
|
Packit |
a21d5c |
w = XtCreateManagedWidget("radioBox", xmRowColumnWidgetClass,
|
|
Packit |
a21d5c |
(Widget) csw, margs, i + cnum_args);
|
|
Packit |
a21d5c |
XmColorS_chose_radio(csw) = w;
|
|
Packit |
a21d5c |
XtFree((XtPointer) margs);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
i = 0;
|
|
Packit |
a21d5c |
XtSetArg(args[i], XmNlabelString, NULL); label = i++;
|
|
Packit |
a21d5c |
margs = XtMergeArgLists(args, i, cargs, cnum_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
for (count = 0; count < XmColorSelector_NUM_TOGGLES; count++) {
|
|
Packit |
a21d5c |
margs[label].value = (XtArgVal) XmColorS_strings(csw).tog_labels[count];
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
w = XtCreateManagedWidget(names[count], xmToggleButtonWidgetClass,
|
|
Packit |
a21d5c |
XmColorS_chose_radio(csw), margs, i + cnum_args);
|
|
Packit |
a21d5c |
XmColorS_chose_mode(csw)[count] = w;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtAddCallback(w, XmNvalueChangedCallback, change_mode, csw);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtFree((XtPointer) margs);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: CreateColorWindow
|
|
Packit |
a21d5c |
* Description: creates a label in a frame to display the
|
|
Packit |
a21d5c |
* currently selected color.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* cargs, cnum_args - a filtered arg list that was
|
|
Packit |
a21d5c |
* passed to create the color selector.
|
|
Packit |
a21d5c |
* Returns: none.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
CreateColorWindow(XmColorSelectorWidget csw,ArgList cargs, Cardinal cnum_args)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
Widget fr;
|
|
Packit |
a21d5c |
Arg *margs, args[10];
|
|
Packit |
a21d5c |
Cardinal n;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
fr = XtCreateManagedWidget("colorFrame", xmFrameWidgetClass,
|
|
Packit |
a21d5c |
(Widget) csw, cargs, cnum_args);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
n = 0;
|
|
Packit |
a21d5c |
XtSetArg(args[n], XmNrecomputeSize, False); n++;
|
|
Packit |
a21d5c |
margs = XtMergeArgLists(args, n, cargs, cnum_args);
|
|
Packit |
a21d5c |
XmColorS_color_window(csw) = XtCreateManagedWidget("colorWindow",
|
|
Packit |
a21d5c |
xmLabelWidgetClass,
|
|
Packit |
a21d5c |
fr, margs, n + cnum_args);
|
|
Packit |
a21d5c |
XtFree((XtPointer) margs);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void GetValues_XmNredSliderLabel ( Widget w, int n, XtArgVal *value)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
(*value) = (XtArgVal) XmStringCopy(XmColorS_strings(w).slider_labels[0]);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void GetValues_XmNgreenSliderLabel( Widget w, int n, XtArgVal *value)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
(*value) = (XtArgVal) XmStringCopy(XmColorS_strings(w).slider_labels[1]);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void GetValues_XmNblueSliderLabel( Widget w, int n, XtArgVal *value)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
(*value) = (XtArgVal) XmStringCopy(XmColorS_strings(w).slider_labels[2]);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void GetValues_XmNcolorListTogLabel( Widget w, int n, XtArgVal *value)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
(*value) = (XtArgVal) XmStringCopy(XmColorS_strings(w).tog_labels[0]);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void GetValues_XmNsliderTogLabel( Widget w, int n, XtArgVal *value)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
(*value) = (XtArgVal) XmStringCopy(XmColorS_strings(w).tog_labels[1]);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void GetValues_XmNnoCellError( Widget w, int n, XtArgVal *value)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
(*value) = (XtArgVal) XmStringCopy(XmColorS_strings(w).no_cell_error);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void GetValues_XmNfileReadError( Widget w, int n, XtArgVal *value)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
(*value) = (XtArgVal) XmStringCopy(XmColorS_strings(w).file_read_error);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: GetVisual
|
|
Packit |
a21d5c |
* Description: Gets the defaults visual of the screen
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* Returns: Visual id.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static int
|
|
Packit |
a21d5c |
GetVisual(XmColorSelectorWidget csw)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
Visual * vis;
|
|
Packit |
a21d5c |
int visual;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
vis = DefaultVisual(XtDisplay(csw), XDefaultScreen(XtDisplay(csw)));
|
|
Packit |
a21d5c |
visual = vis->class;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
return visual;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: NoPrivateColormaps
|
|
Packit |
a21d5c |
* Description: Determines the color to be used.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* foreground - default color for the ColorSelector.
|
|
Packit |
a21d5c |
* color - Current color attributes.
|
|
Packit |
a21d5c |
* str - label for the ColorSelector.
|
|
Packit |
a21d5c |
* Returns: None.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
NoPrivateColormaps(XmColorSelectorWidget csw, Pixel foreground,
|
|
Packit |
a21d5c |
XColor color, char *str)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
Arg args[5];
|
|
Packit |
a21d5c |
XmString xm_str;
|
|
Packit |
a21d5c |
Cardinal num_args;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
xm_str = XmStringCreateLocalized(str);
|
|
Packit |
a21d5c |
num_args = 0;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (!XmColorS_good_cell(csw))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
if(XAllocColor(XtDisplay(csw), csw->core.colormap, &color) )
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorS_color_pixel(csw) = color.pixel;
|
|
Packit |
a21d5c |
XmColorS_good_cell(csw) = True;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
} else {
|
|
Packit |
a21d5c |
if (XAllocColor(XtDisplay(csw), csw->core.colormap, &color) )
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorS_color_pixel(csw) = color.pixel;
|
|
Packit |
a21d5c |
XmColorS_good_cell(csw) = True;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmString out;
|
|
Packit |
a21d5c |
out = XmStringConcatAndFree(xm_str, XmColorS_strings(csw).no_cell_error);
|
|
Packit |
a21d5c |
xm_str = out;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (XmColorS_good_cell(csw))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
color.flags = DoRed | DoGreen | DoBlue;
|
|
Packit |
a21d5c |
color.pixel = XmColorS_color_pixel(csw);
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNforeground, foreground); num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNbackground, XmColorS_color_pixel(csw));
|
|
Packit |
a21d5c |
num_args++;
|
|
Packit |
a21d5c |
XtSetValues(XmColorS_color_window(csw), args, num_args);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNlabelString, xm_str); num_args++;
|
|
Packit |
a21d5c |
XtSetValues(XmColorS_color_window(csw), args, num_args);
|
|
Packit |
a21d5c |
XmStringFree(xm_str);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: DoPrivateColormaps
|
|
Packit |
a21d5c |
* Description: Determines the color to be used.
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* foreground - default color for the ColorSelector.
|
|
Packit |
a21d5c |
* color - Current color attributes.
|
|
Packit |
a21d5c |
* str - label for the ColorSelector.
|
|
Packit |
a21d5c |
* Returns: None.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static void
|
|
Packit |
a21d5c |
PrivateColormaps(XmColorSelectorWidget csw, Pixel foreground, XColor color, char *str)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
Arg args[5];
|
|
Packit |
a21d5c |
XmString xm_str;
|
|
Packit |
a21d5c |
Cardinal num_args;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
xm_str = XmStringCreateLocalized(str);
|
|
Packit |
a21d5c |
num_args = 0;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (!XmColorS_good_cell(csw)) {
|
|
Packit |
a21d5c |
if(XAllocColorCells(XtDisplay(csw), csw->core.colormap,
|
|
Packit |
a21d5c |
0, 0, 0, &(XmColorS_color_pixel(csw)), 1))
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
XmColorS_good_cell(csw) = True;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
else {
|
|
Packit |
a21d5c |
XmString out;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
out = XmStringConcatAndFree(xm_str, XmColorS_strings(csw).no_cell_error);
|
|
Packit |
a21d5c |
xm_str = out;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
if (XmColorS_good_cell(csw)) {
|
|
Packit |
a21d5c |
color.flags = DoRed | DoGreen | DoBlue;
|
|
Packit |
a21d5c |
color.pixel = XmColorS_color_pixel(csw);
|
|
Packit |
a21d5c |
XStoreColor(XtDisplay((Widget) csw), csw->core.colormap, &color;;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNforeground, foreground); num_args++;
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNbackground, XmColorS_color_pixel(csw));
|
|
Packit |
a21d5c |
num_args++;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
XtSetArg(args[num_args], XmNlabelString, xm_str); num_args++;
|
|
Packit |
a21d5c |
XtSetValues(XmColorS_color_window(csw), args, num_args);
|
|
Packit |
a21d5c |
XmStringFree(xm_str);
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Function Name: DefaultVisualDisplay
|
|
Packit |
a21d5c |
* Description: Determines the default visual and allocates
|
|
Packit |
a21d5c |
* the color depending upon the visual classes
|
|
Packit |
a21d5c |
* Arguments: csw - the color selector widget.
|
|
Packit |
a21d5c |
* foreground - default color for the ColorSelector.
|
|
Packit |
a21d5c |
* color - Current color attributes.
|
|
Packit |
a21d5c |
* str - label for the ColorSelector.
|
|
Packit |
a21d5c |
* Returns: Returns true on a valid visual class.
|
|
Packit |
a21d5c |
* False otherwise.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* ARGSUSED */
|
|
Packit |
a21d5c |
static Boolean
|
|
Packit |
a21d5c |
DefaultVisualDisplay(XmColorSelectorWidget csw, Pixel foreground, XColor color, char *str)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
int visual = 0;
|
|
Packit |
a21d5c |
visual = GetVisual(csw);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/*
|
|
Packit |
a21d5c |
* Obtain a valid color cell. In case, if one not available
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
if ( visual == StaticColor || visual == TrueColor || \
|
|
Packit |
a21d5c |
visual == StaticGray )
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
NoPrivateColormaps(csw, foreground, color, str);
|
|
Packit |
a21d5c |
return True;
|
|
Packit |
a21d5c |
} else if ( visual == PseudoColor || visual == DirectColor || \
|
|
Packit |
a21d5c |
visual == GrayScale )
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
PrivateColormaps(csw, foreground, color, str);
|
|
Packit |
a21d5c |
return True;
|
|
Packit |
a21d5c |
} else
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
return False;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/************************************************************
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
* Public functions.
|
|
Packit |
a21d5c |
*
|
|
Packit |
a21d5c |
************************************************************/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
/* Function Name: XmCreateColorSelector
|
|
Packit |
a21d5c |
* Description: Creation Routine for UIL and ADA.
|
|
Packit |
a21d5c |
* Arguments: parent - the parent widget.
|
|
Packit |
a21d5c |
* name - the name of the widget.
|
|
Packit |
a21d5c |
* args, num_args - the number and list of args.
|
|
Packit |
a21d5c |
* Returns: The created widget.
|
|
Packit |
a21d5c |
*/
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
Widget
|
|
Packit |
a21d5c |
XmCreateColorSelector(Widget parent, String name,
|
|
Packit |
a21d5c |
ArgList args, Cardinal num_args)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
return(XtCreateWidget(name, xmColorSelectorWidgetClass,
|
|
Packit |
a21d5c |
parent, args, num_args));
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
Widget
|
|
Packit |
a21d5c |
XmVaCreateColorSelector(
|
|
Packit |
a21d5c |
Widget parent,
|
|
Packit |
a21d5c |
char *name,
|
|
Packit |
a21d5c |
...)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
register Widget w;
|
|
Packit |
a21d5c |
va_list var;
|
|
Packit |
a21d5c |
int count;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
Va_start(var,name);
|
|
Packit |
a21d5c |
count = XmeCountVaListSimple(var);
|
|
Packit |
a21d5c |
va_end(var);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
Va_start(var, name);
|
|
Packit |
a21d5c |
w = XmeVLCreateWidget(name,
|
|
Packit |
a21d5c |
xmColorSelectorWidgetClass,
|
|
Packit |
a21d5c |
parent, False,
|
|
Packit |
a21d5c |
var, count);
|
|
Packit |
a21d5c |
va_end(var);
|
|
Packit |
a21d5c |
return w;
|
|
Packit |
a21d5c |
}
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
Widget
|
|
Packit |
a21d5c |
XmVaCreateManagedColorSelector(
|
|
Packit |
a21d5c |
Widget parent,
|
|
Packit |
a21d5c |
char *name,
|
|
Packit |
a21d5c |
...)
|
|
Packit |
a21d5c |
{
|
|
Packit |
a21d5c |
Widget w = NULL;
|
|
Packit |
a21d5c |
va_list var;
|
|
Packit |
a21d5c |
int count;
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
Va_start(var, name);
|
|
Packit |
a21d5c |
count = XmeCountVaListSimple(var);
|
|
Packit |
a21d5c |
va_end(var);
|
|
Packit |
a21d5c |
|
|
Packit |
a21d5c |
Va_start(var, name);
|
|
Packit |
a21d5c |
w = XmeVLCreateWidget(name,
|
|
Packit |
a21d5c |
xmColorSelectorWidgetClass,
|
|
Packit |
a21d5c |
parent, True,
|
|
Packit |
a21d5c |
var, count);
|
|
Packit |
a21d5c |
va_end(var);
|
|
Packit |
a21d5c |
return w;
|
|
Packit |
a21d5c |
}
|