X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/89c7e9622933c3ee7906c39bc3927a7d5616b94b..2461cfa0d9b786a26a783237bca38c920efecb51:/src/motif/gauge.cpp diff --git a/src/motif/gauge.cpp b/src/motif/gauge.cpp index e80910d276..f7c6a70d2e 100644 --- a/src/motif/gauge.cpp +++ b/src/motif/gauge.cpp @@ -9,44 +9,65 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "gauge.h" #endif -#include "wx/gauge.h" +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" +#ifdef __VMS +#include +#undef XtDisplay +#undef XtScreen +#undef XtWindow +#undef XtIsRealized +#undef XtParent +#endif + +# include "wx/gauge.h" + +#ifdef __VMS__ +#pragma message disable nosimpint +#endif #include -#include +#ifdef __WXMOTIF20__ +#include +#endif // __WXMOTIF20__ +#ifdef __VMS__ +#pragma message enable nosimpint +#endif +#include "wx/motif/private.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxGauge, wxControl) -#endif + +#if !wxCHECK_MOTIF_VERSION( 2, 0 ) || wxCHECK_LESSTIF() // XmGauge copyright notice: /* - * Copyright 1994 GROUPE BULL - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of GROUPE BULL not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. GROUPE BULL makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * GROUPE BULL disclaims all warranties with regard to this software, - * including all implied warranties of merchantability and fitness, - * in no event shall GROUPE BULL be liable for any special, - * indirect or consequential damages or any damages - * whatsoever resulting from loss of use, data or profits, - * whether in an action of contract, negligence or other tortious - * action, arising out of or in connection with the use - * or performance of this software. - * - */ +* Copyright 1994 GROUPE BULL +* +* Permission to use, copy, modify, and distribute this software and its +* documentation for any purpose and without fee is hereby granted, provided +* that the above copyright notice appear in all copies and that both that +* copyright notice and this permission notice appear in supporting +* documentation, and that the name of GROUPE BULL not be used in advertising +* or publicity pertaining to distribution of the software without specific, +* written prior permission. GROUPE BULL makes no representations about the +* suitability of this software for any purpose. It is provided "as is" +* without express or implied warranty. +* +* GROUPE BULL disclaims all warranties with regard to this software, +* including all implied warranties of merchantability and fitness, +* in no event shall GROUPE BULL be liable for any special, +* indirect or consequential damages or any damages +* whatsoever resulting from loss of use, data or profits, +* whether in an action of contract, negligence or other tortious +* action, arising out of or in connection with the use +* or performance of this software. +* +*/ //// PUBLIC XMGAUGE DECLARATIONS typedef struct _XmGaugeClassRec* XmGaugeWidgetClass; @@ -71,33 +92,24 @@ XmGaugeSetValue(Widget w, int value); int XmGaugeGetValue(Widget w); - +#endif // !wxCHECK_MOTIF_VERSION( 2, 0 ) || wxCHECK_LESSTIF() bool wxGauge::Create(wxWindow *parent, wxWindowID id, - int range, - const wxPoint& pos, - const wxSize& size, - long style, - const wxValidator& validator, - const wxString& name) + int range, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name) { - SetName(name); - SetValidator(validator); - m_rangeMax = range; - m_windowStyle = style; - - if (parent) parent->AddChild(this); - - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; + if( !CreateControl( parent, id, pos, size, style, validator, name ) ) + return false; Widget parentWidget = (Widget) parent->GetClientWidget(); - Arg args[4]; + Arg args[7]; int count = 4; - if (style & wxHORIZONTAL) + if (style & wxGA_HORIZONTAL) { XtSetArg (args[0], XmNorientation, XmHORIZONTAL); XtSetArg (args[1], XmNprocessingDirection, XmMAX_ON_RIGHT); @@ -109,30 +121,43 @@ bool wxGauge::Create(wxWindow *parent, wxWindowID id, } XtSetArg(args[2], XmNminimum, 0); XtSetArg(args[3], XmNmaximum, range); - Widget gaugeWidget = XtCreateManagedWidget("gauge", xmGaugeWidgetClass, parentWidget, args, count); +#if wxCHECK_MOTIF_VERSION( 2, 0 ) && !wxCHECK_LESSTIF() + XtSetArg(args[4], XmNeditable, False); ++count; + XtSetArg(args[5], XmNslidingMode, XmTHERMOMETER); ++count; + // XtSetArg(args[6], XmNsliderVisual, XmFOREGROUND_COLOR ); ++count; + Widget gaugeWidget = + XtCreateManagedWidget("gauge", xmScaleWidgetClass, + parentWidget, args, count); +#else + Widget gaugeWidget = + XtCreateManagedWidget("gauge", xmGaugeWidgetClass, + parentWidget, args, count); +#endif m_mainWidget = (WXWidget) gaugeWidget ; XtManageChild (gaugeWidget); int x = pos.x; int y = pos.y; - int width = size.x; int height = size.y; - if (width == -1) - width = 150; - if (height == -1) - height = 80; + wxSize best = GetBestSize(); + if( size.x != -1 ) best.x = size.x; + if( size.y != -1 ) best.y = size.y; - SetCanAddEventHandler(TRUE); - AttachWidget (parent, m_mainWidget, (WXWidget) NULL, x, y, width, height); + ChangeFont(FALSE); - SetFont(* parent->GetFont()); - ChangeColour(m_mainWidget); + AttachWidget (parent, m_mainWidget, (WXWidget) NULL, x, y, + best.x, best.y); + + ChangeBackgroundColour(); return TRUE; } -void wxGauge::SetSize(int x, int y, int width, int height, int sizeFlags) +wxSize wxGauge::DoGetBestSize() const { - wxControl::SetSize(x, y, width, height, sizeFlags); + if( HasFlag(wxGA_HORIZONTAL) ) + return wxSize( 100, 18 ); + else + return wxSize( 18, 100 ); } void wxGauge::SetShadowWidth(int w) @@ -142,19 +167,13 @@ void wxGauge::SetShadowWidth(int w) XtVaSetValues((Widget) m_mainWidget, XmNshadowThickness, w, NULL); } -void wxGauge::SetBezelFace(int w) -{ -} - void wxGauge::SetRange(int r) { - m_rangeMax = r; XtVaSetValues((Widget) m_mainWidget, XmNmaximum, r, NULL); } void wxGauge::SetValue(int pos) { - m_gaugePos = pos; XtVaSetValues((Widget) m_mainWidget, XmNvalue, pos, NULL); } @@ -165,27 +184,32 @@ int wxGauge::GetShadowWidth() const return (int)w; } -int wxGauge::GetBezelFace() const -{ - return 0; -} - int wxGauge::GetRange() const { int r; XtVaGetValues((Widget) m_mainWidget, XmNmaximum, &r, NULL); return (int)r; -// return m_rangeMax; } int wxGauge::GetValue() const { - int pos; - XtVaGetValues((Widget) m_mainWidget, XmNvalue, &pos, NULL); - return pos; -// return m_gaugePos; + int pos; + XtVaGetValues((Widget) m_mainWidget, XmNvalue, &pos, NULL); + return pos; } +void wxGauge::DoMoveWindow(int x, int y, int width, int height) +{ + wxGaugeBase::DoMoveWindow( x, y, width, height ); +#ifdef __WXMOTIF20__ + XtVaSetValues( (Widget)m_mainWidget, + XmNscaleHeight, height, + NULL ); +#endif +} + +#if !wxCHECK_MOTIF_VERSION( 2, 0 ) || wxCHECK_LESSTIF() + //// PRIVATE DECLARATIONS FOR XMGAUGE #include @@ -195,7 +219,7 @@ typedef struct { int empty; } XmGaugeClassPart; -typedef struct _XmGaugeClassRec { +typedef struct _XmGaugeClassRec { CoreClassPart core_class; XmPrimitiveClassPart primitive_class; XmGaugeClassPart gauge_class; @@ -211,7 +235,7 @@ typedef struct _XmGaugePart{ XtCallbackList dragCallback; XtCallbackList valueChangedCallback; - + /* private fields */ Boolean dragging; /* drag in progress ? */ int oldx, oldy; @@ -233,18 +257,18 @@ extern XmGaugeClassRec xmGaugeClassRec; void GaugePick(Widget w, XEvent *e, String *args, Cardinal *num_args); -void +void GaugeDrag(Widget w, XEvent *e, String *args, Cardinal *num_args); -void +void GaugeDrop(Widget w, XEvent *e, String *args, Cardinal *num_args); static char translations[] = ": GaugePick()\n\ - : GaugeDrag()\n\ - : GaugeDrop()\n\ -"; + : GaugeDrag()\n\ + : GaugeDrop()\n\ + "; @@ -260,169 +284,169 @@ DrawSlider(XmGaugeWidget gw, Boolean clear) #define THIS gw->gauge int size, sht; float ratio; -/***chubraev + /***chubraev char string[20]; int len; unsigned long backgr,foregr; XRectangle rects[1]; -***/ - + ***/ + sht = gw->primitive.shadow_thickness; ratio = (float)THIS.value/ - (float)(THIS.maximum - THIS.minimum); -/***chubraev - sprintf(string,"%-d%%",(int)(ratio*100)); - len=strlen(string); - XtVaGetValues(gw,XmNbackground,&backgr,XmNforeground,&foregr,NULL); -***/ + (float)(THIS.maximum - THIS.minimum); + /***chubraev + sprintf(string,"%-d%%",(int)(ratio*100)); + len=strlen(string); + XtVaGetValues(gw,XmNbackground,&backgr,XmNforeground,&foregr,NULL); + ***/ if(clear) { - XClearArea(XtDisplay(gw), XtWindow(gw), sht, sht, - gw->core.width - 2 * sht, gw->core.height - 2 * sht, False); + XClearArea(XtDisplay(gw), XtWindow(gw), sht, sht, + gw->core.width - 2 * sht, gw->core.height - 2 * sht, False); } switch(THIS.orientation) { case XmHORIZONTAL: - size = (int) ((gw->core.width - 2 * sht)*ratio); - /***chubraev - XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht+gw->core.width/2, -gw->core.height - 2 * sht, string, len); - ***/ - switch(THIS.processingDirection) { - case XmMAX_ON_RIGHT: - case XmMAX_ON_BOTTOM: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - sht, sht, size, gw->core.height - 2 * sht); - - /***chubraev - rects[0].x = sht; rects[0].y = sht; - rects[0].width = size; rects[0].height = gw->core.height - 2 * sht; - ***/ - break; - case XmMAX_ON_LEFT: - case XmMAX_ON_TOP: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - gw->core.width - size - sht, sht, - size, gw->core.height - 2 * sht); - - /***chubraev - rects[0].x = gw->core.width - size - sht; rects[0].y = sht; - rects[0].width = size; rects[0].height = gw->core.height - 2 * sht; - ***/ - break; - } + size = (int) ((gw->core.width - 2 * sht)*ratio); + /***chubraev + XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht+gw->core.width/2, + gw->core.height - 2 * sht, string, len); + ***/ + switch(THIS.processingDirection) { + case XmMAX_ON_RIGHT: + case XmMAX_ON_BOTTOM: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + sht, sht, size, gw->core.height - 2 * sht); + + /***chubraev + rects[0].x = sht; rects[0].y = sht; + rects[0].width = size; rects[0].height = gw->core.height - 2 * sht; + ***/ + break; + case XmMAX_ON_LEFT: + case XmMAX_ON_TOP: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + gw->core.width - size - sht, sht, + size, gw->core.height - 2 * sht); + + /***chubraev + rects[0].x = gw->core.width - size - sht; rects[0].y = sht; + rects[0].width = size; rects[0].height = gw->core.height - 2 * sht; + ***/ + break; + } /***chubraev XSetClipRectangles(XtDisplay(gw), THIS.gc, 0, 0, rects, 1, Unsorted); - XSetForeground(XtDisplay(gw), THIS.gc, backgr); - XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht+gw->core.width/2, -gw->core.height - 2 * sht, string, len); - ***/ - - break; - case XmVERTICAL: - size = (int) ((gw->core.height - 2 * sht)*ratio); - /***chubraev - XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht, -sht+gw->core.height/2, string,len); - ***/ - switch(THIS.processingDirection) { - case XmMAX_ON_RIGHT: - case XmMAX_ON_BOTTOM: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - sht, sht, gw->core.width - 2 * sht, size); - + XSetForeground(XtDisplay(gw), THIS.gc, backgr); + XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht+gw->core.width/2, + gw->core.height - 2 * sht, string, len); + ***/ + + break; + case XmVERTICAL: + size = (int) ((gw->core.height - 2 * sht)*ratio); /***chubraev - rects[0].x = sht; rects[0].y = sht; - rects[0].width = gw->core.width - 2 * sht; rects[0].height = size; - ***/ - break; - case XmMAX_ON_LEFT: - case XmMAX_ON_TOP: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - sht, gw->core.height - size - sht, - gw->core.width - 2 * sht, size); - + XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht, + sht+gw->core.height/2, string,len); + ***/ + switch(THIS.processingDirection) { + case XmMAX_ON_RIGHT: + case XmMAX_ON_BOTTOM: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + sht, sht, gw->core.width - 2 * sht, size); + + /***chubraev + rects[0].x = sht; rects[0].y = sht; + rects[0].width = gw->core.width - 2 * sht; rects[0].height = size; + ***/ + break; + case XmMAX_ON_LEFT: + case XmMAX_ON_TOP: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + sht, gw->core.height - size - sht, + gw->core.width - 2 * sht, size); + + /***chubraev + rects[0].x = sht; rects[0].y = gw->core.height - size - sht; + rects[0].width = gw->core.width - 2 * sht; rects[0].height = size; + ***/ + } /***chubraev - rects[0].x = sht; rects[0].y = gw->core.height - size - sht; - rects[0].width = gw->core.width - 2 * sht; rects[0].height = size; - ***/ - } - /***chubraev - XSetClipRectangles(XtDisplay(gw), THIS.gc, 0, 0, rects, 1, Unsorted); - XSetForeground(XtDisplay(gw), THIS.gc, backgr); - XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht, -sht+gw->core.height/2, string,len); - ***/ - break; + XSetClipRectangles(XtDisplay(gw), THIS.gc, 0, 0, rects, 1, Unsorted); + XSetForeground(XtDisplay(gw), THIS.gc, backgr); + XDrawString(XtDisplay(gw), XtWindow(gw), THIS.gc, sht, + sht+gw->core.height/2, string,len); + ***/ + break; } /***chubraev XSetClipMask(XtDisplay(gw), THIS.gc, None); XSetForeground(XtDisplay(gw), THIS.gc, foregr); ***/ -#undef THIS +#undef THIS } /* Old code - */ +*/ #if 0 static void DrawSlider(XmGaugeWidget gw, Boolean clear) { #define THIS gw->gauge int size, sht; -/* float ratio; */ + /* float ratio; */ sht = gw->primitive.shadow_thickness; -/* See fix comment below: can cause divide by zero error. + /* See fix comment below: can cause divide by zero error. ratio = (float)((float)THIS.maximum - - (float)THIS.minimum) / (float)THIS.value; -*/ + (float)THIS.minimum) / (float)THIS.value; + */ if(clear) { - XClearArea(XtDisplay(gw), XtWindow(gw), sht, sht, - gw->core.width - 2 * sht, gw->core.height - 2 * sht, False); + XClearArea(XtDisplay(gw), XtWindow(gw), sht, sht, + gw->core.width - 2 * sht, gw->core.height - 2 * sht, False); } switch(THIS.orientation) { case XmHORIZONTAL: -/* size = (gw->core.width - 2 * sht) / ratio; */ -/* A fix suggested by Dmitri Chubraev */ + /* size = (gw->core.width - 2 * sht) / ratio; */ + /* A fix suggested by Dmitri Chubraev */ size = (gw->core.width - 2 * sht) /((float)THIS.maximum-(float)THIS.minimum)*(float)THIS.value; - switch(THIS.processingDirection) { - case XmMAX_ON_RIGHT: - case XmMAX_ON_BOTTOM: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - sht, sht, size, gw->core.height - 2 * sht); - break; - case XmMAX_ON_LEFT: - case XmMAX_ON_TOP: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - gw->core.width - size - sht, sht, - size, gw->core.height - 2 * sht); - break; - } - break; - case XmVERTICAL: - size = (gw->core.height - 2 * sht) /((float)THIS.maximum-(float)THIS.minimum)*(float)THIS.value; -/* size = (gw->core.height - 2 * sht)/ ratio; */ - switch(THIS.processingDirection) { - case XmMAX_ON_RIGHT: - case XmMAX_ON_BOTTOM: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - sht, sht, gw->core.width - 2 * sht, size); - break; - case XmMAX_ON_LEFT: - case XmMAX_ON_TOP: - XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, - sht, gw->core.height - size - sht, - gw->core.width - 2 * sht, size); - } - break; + switch(THIS.processingDirection) { + case XmMAX_ON_RIGHT: + case XmMAX_ON_BOTTOM: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + sht, sht, size, gw->core.height - 2 * sht); + break; + case XmMAX_ON_LEFT: + case XmMAX_ON_TOP: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + gw->core.width - size - sht, sht, + size, gw->core.height - 2 * sht); + break; + } + break; + case XmVERTICAL: + size = (gw->core.height - 2 * sht) /((float)THIS.maximum-(float)THIS.minimum)*(float)THIS.value; + /* size = (gw->core.height - 2 * sht)/ ratio; */ + switch(THIS.processingDirection) { + case XmMAX_ON_RIGHT: + case XmMAX_ON_BOTTOM: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + sht, sht, gw->core.width - 2 * sht, size); + break; + case XmMAX_ON_LEFT: + case XmMAX_ON_TOP: + XFillRectangle(XtDisplay(gw), XtWindow(gw), THIS.gc, + sht, gw->core.height - size - sht, + gw->core.width - 2 * sht, size); + } + break; } -#undef THIS +#undef THIS } #endif static void -Initialize(Widget req, Widget new_w, ArgList args, Cardinal *num_args ) +Initialize(Widget WXUNUSED(req), Widget new_w, ArgList WXUNUSED(args), Cardinal *WXUNUSED(num_args )) { XmGaugeWidget gw = (XmGaugeWidget)new_w; #define THIS gw->gauge @@ -430,9 +454,9 @@ Initialize(Widget req, Widget new_w, ArgList args, Cardinal *num_args ) values.foreground = gw->primitive.foreground; THIS.gc = XtGetGC(new_w, GCForeground, &values); - -#undef THIS - + +#undef THIS + } @@ -443,34 +467,34 @@ Destroy(Widget w) XmGaugeWidget gw = (XmGaugeWidget)w; #define THIS gw->gauge XtReleaseGC(w, THIS.gc); -#undef THIS +#undef THIS } - + static Boolean SetValues( - Widget cw, - Widget rw, - Widget nw, - ArgList args, - Cardinal *num_args ) + Widget cw, + Widget WXUNUSED(rw), + Widget nw, + ArgList WXUNUSED(args), + Cardinal *WXUNUSED(num_args) ) { XmGaugeWidget cgw = (XmGaugeWidget)cw; XmGaugeWidget ngw = (XmGaugeWidget)nw; Boolean redraw = False; if(cgw->primitive.foreground != ngw->primitive.foreground) { - XGCValues values; + XGCValues values; - redraw = True; - XtReleaseGC(nw, ngw->gauge.gc); - values.foreground = ngw->primitive.foreground; - ngw->gauge.gc = XtGetGC(nw, GCForeground, &values); + redraw = True; + XtReleaseGC(nw, ngw->gauge.gc); + values.foreground = ngw->primitive.foreground; + ngw->gauge.gc = XtGetGC(nw, GCForeground, &values); } if(cgw->gauge.value != ngw->gauge.value) { - redraw = True; + redraw = True; } return redraw; } @@ -479,7 +503,7 @@ SetValues( static void -ExposeProc(Widget w, XEvent *event, Region r) +ExposeProc(Widget w, XEvent *WXUNUSED(event), Region WXUNUSED(r)) { XmGaugeWidget gw = (XmGaugeWidget)w; #define THIS gw->gauge @@ -487,96 +511,96 @@ ExposeProc(Widget w, XEvent *event, Region r) sht = gw->primitive.shadow_thickness; _XmDrawShadows(XtDisplay(w), XtWindow(w), - gw->primitive.top_shadow_GC, - gw->primitive.bottom_shadow_GC, - 0, 0, w->core.width, w->core.height, - sht, XmSHADOW_IN); + gw->primitive.top_shadow_GC, + gw->primitive.bottom_shadow_GC, + 0, 0, w->core.width, w->core.height, + sht, XmSHADOW_IN); DrawSlider(gw, False); -#undef THIS +#undef THIS } -static XtResource +static XtResource resources[] = { #define offset(field) XtOffset(XmGaugeWidget, gauge.field) - {XmNvalue, XmCValue, XtRInt, sizeof(int), - offset(value), XtRImmediate, (caddr_t)10}, - - {XmNminimum, XmCValue, XtRInt, sizeof(int), - offset(minimum), XtRImmediate, (caddr_t)0}, - - {XmNmaximum, XmCValue, XtRInt, sizeof(int), - offset(maximum), XtRImmediate, (caddr_t)100}, - - {XmNorientation, XmCOrientation, XmROrientation, sizeof(unsigned char), - offset(orientation), XtRImmediate, (caddr_t)XmVERTICAL}, - - {XmNprocessingDirection, XmCProcessingDirection, - XmRProcessingDirection, sizeof(unsigned char), - offset(processingDirection), XtRImmediate, (caddr_t)XmMAX_ON_RIGHT}, - - {XmNdragCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList), - offset(dragCallback), XtRImmediate, (caddr_t)NULL}, - - {XmNvalueChangedCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList), - offset(valueChangedCallback), XtRImmediate, (caddr_t)NULL}, - - + {XmNvalue, XmCValue, XtRInt, sizeof(int), + offset(value), XtRImmediate, (caddr_t)10}, + + {XmNminimum, XmCValue, XtRInt, sizeof(int), + offset(minimum), XtRImmediate, (caddr_t)0}, + + {XmNmaximum, XmCValue, XtRInt, sizeof(int), + offset(maximum), XtRImmediate, (caddr_t)100}, + + {XmNorientation, XmCOrientation, XmROrientation, sizeof(unsigned char), + offset(orientation), XtRImmediate, (caddr_t)XmVERTICAL}, + + {XmNprocessingDirection, XmCProcessingDirection, + XmRProcessingDirection, sizeof(unsigned char), + offset(processingDirection), XtRImmediate, (caddr_t)XmMAX_ON_RIGHT}, + + {XmNdragCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList), + offset(dragCallback), XtRImmediate, (caddr_t)NULL}, + + {XmNvalueChangedCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList), + offset(valueChangedCallback), XtRImmediate, (caddr_t)NULL}, + + #undef offset }; XmGaugeClassRec xmGaugeClassRec = { { /* core fields */ - (WidgetClass) &xmPrimitiveClassRec, /* superclass */ - "XmGauge", /* class_name */ - sizeof(XmGaugeRec), /* widget_size */ - NULL, /* class_initialize */ - NULL, /* class_part_initialize */ - FALSE, /* class_inited */ - Initialize, /* initialize */ - NULL, /* initialize_hook */ - XtInheritRealize, /* realize */ - actions, /* actions */ - XtNumber(actions), /* num_actions */ - resources, /* resources */ - XtNumber(resources), /* num_resources */ - NULLQUARK, /* xrm_class */ - TRUE, /* compress_motion */ - TRUE, /* compress_exposure */ - TRUE, /* compress_enterleave */ - FALSE, /* visible_interest */ - Destroy, /* destroy */ - NULL, /* resize */ - ExposeProc, /* expose */ - SetValues, /* set_values */ - NULL, /* set_values_hook */ - XtInheritSetValuesAlmost, /* set_values_almost */ - NULL, /* get_values_hook */ - NULL, /* accept_focus */ - XtVersion, /* version */ - NULL, /* callback_private */ - translations, /* tm_table */ - NULL, /* query_geometry */ - NULL, /* display_accelerator */ - NULL /* extension */ + (WidgetClass) &xmPrimitiveClassRec, /* superclass */ + "XmGauge", /* class_name */ + sizeof(XmGaugeRec), /* widget_size */ + NULL, /* class_initialize */ + NULL, /* class_part_initialize */ + FALSE, /* class_inited */ + Initialize, /* initialize */ + NULL, /* initialize_hook */ + XtInheritRealize, /* realize */ + actions, /* actions */ + XtNumber(actions), /* num_actions */ + resources, /* resources */ + XtNumber(resources), /* num_resources */ + NULLQUARK, /* xrm_class */ + TRUE, /* compress_motion */ + TRUE, /* compress_exposure */ + TRUE, /* compress_enterleave */ + FALSE, /* visible_interest */ + Destroy, /* destroy */ + NULL, /* resize */ + ExposeProc, /* expose */ + SetValues, /* set_values */ + NULL, /* set_values_hook */ + XtInheritSetValuesAlmost, /* set_values_almost */ + NULL, /* get_values_hook */ + NULL, /* accept_focus */ + XtVersion, /* version */ + NULL, /* callback_private */ + translations, /* tm_table */ + NULL, /* query_geometry */ + NULL, /* display_accelerator */ + NULL /* extension */ }, /* primitive_class fields */ { - NULL, /* border_highlight */ - NULL, /* border_unhighlight */ - NULL, /* translations */ - NULL, /* arm_and_activate */ - NULL, /* syn_resources */ - 0, /* num_syn_resources */ - NULL /* extension */ - }, - { /* gauge fields */ - 0 /* empty */ - } + NULL, /* border_highlight */ + NULL, /* border_unhighlight */ + NULL, /* translations */ + NULL, /* arm_and_activate */ + NULL, /* syn_resources */ + 0, /* num_syn_resources */ + NULL /* extension */ + }, + { /* gauge fields */ + 0 /* empty */ + } }; WidgetClass xmGaugeWidgetClass = (WidgetClass)&xmGaugeClassRec; @@ -584,10 +608,10 @@ WidgetClass xmGaugeWidgetClass = (WidgetClass)&xmGaugeClassRec; -void -GaugePick(Widget w, XEvent *e, String *args, Cardinal *num_args) +void +GaugePick(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardinal *WXUNUSED(num_args)) { -/* Commented out for a read-only gauge in wxWindows */ + /* Commented out for a read-only gauge in wxWidgets */ #if 0 XmGaugeWidget gw = (XmGaugeWidget)w; #define THIS gw->gauge @@ -601,66 +625,66 @@ GaugePick(Widget w, XEvent *e, String *args, Cardinal *num_args) y = event->y; sht = gw->primitive.shadow_thickness; _XmDrawShadows(XtDisplay(w), XtWindow(w), - gw->primitive.top_shadow_GC, - gw->primitive.bottom_shadow_GC, - 0, 0, w->core.width, w->core.height, - sht, XmSHADOW_IN); + gw->primitive.top_shadow_GC, + gw->primitive.bottom_shadow_GC, + 0, 0, w->core.width, w->core.height, + sht, XmSHADOW_IN); ratio = (float)((float)THIS.maximum - - (float)THIS.minimum) / (float)THIS.value; + (float)THIS.minimum) / (float)THIS.value; switch(THIS.orientation) { case XmHORIZONTAL: - size = (w->core.width - 2 * sht) / ratio; - switch(THIS.processingDirection) { - case XmMAX_ON_RIGHT: - case XmMAX_ON_BOTTOM: - dragging = (x > sht) && (y > sht) && - (x < sht + size) && (y < w->core.height - sht); - break; - case XmMAX_ON_LEFT: - case XmMAX_ON_TOP: - dragging = (x > w->core.width - size - sht) && (y > sht) && - (x < w->core.width - sht) && (y < w->core.height + sht); - break; - } - break; - case XmVERTICAL: - size = (w->core.height - 2 * sht) / ratio; - switch(THIS.processingDirection) { - case XmMAX_ON_RIGHT: - case XmMAX_ON_BOTTOM: - dragging = (x > sht) && (y > sht) && - (x < w->core.width - sht) && - (y < w->core.width - 2 * sht + size); - break; - case XmMAX_ON_LEFT: - case XmMAX_ON_TOP: - dragging = (x > sht) && (y > w->core.height - size - sht) && - (x < w->core.width - sht) && (y < w->core.height - sht); - } - break; + size = (w->core.width - 2 * sht) / ratio; + switch(THIS.processingDirection) { + case XmMAX_ON_RIGHT: + case XmMAX_ON_BOTTOM: + dragging = (x > sht) && (y > sht) && + (x < sht + size) && (y < w->core.height - sht); + break; + case XmMAX_ON_LEFT: + case XmMAX_ON_TOP: + dragging = (x > w->core.width - size - sht) && (y > sht) && + (x < w->core.width - sht) && (y < w->core.height + sht); + break; + } + break; + case XmVERTICAL: + size = (w->core.height - 2 * sht) / ratio; + switch(THIS.processingDirection) { + case XmMAX_ON_RIGHT: + case XmMAX_ON_BOTTOM: + dragging = (x > sht) && (y > sht) && + (x < w->core.width - sht) && + (y < w->core.width - 2 * sht + size); + break; + case XmMAX_ON_LEFT: + case XmMAX_ON_TOP: + dragging = (x > sht) && (y > w->core.height - size - sht) && + (x < w->core.width - sht) && (y < w->core.height - sht); + } + break; } THIS.dragging = dragging; THIS.oldx = x; THIS.oldy = y; -#undef THIS +#undef THIS #endif } #define round(x) ( (x) > 0 ? ((x) + 0.5) : -(-(x) + 0.5) ) -void -GaugeDrag(Widget w, XEvent *e, String *args, Cardinal *num_args) +void +GaugeDrag(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardinal *WXUNUSED(num_args)) { -/* Commented out for a read-only gauge in wxWindows */ + /* Commented out for a read-only gauge in wxWidgets */ #if 0 XmGaugeWidget gw = (XmGaugeWidget)w; #define THIS gw->gauge int sht, x, y, max, value; float ratio, nratio, size, nsize, fvalue, delta; XMotionEvent *event = (XMotionEvent *)e; - + if( ! THIS.dragging) return; x = event->x; @@ -668,33 +692,33 @@ GaugeDrag(Widget w, XEvent *e, String *args, Cardinal *num_args) sht = gw->primitive.shadow_thickness; ratio = (float)THIS.value / (float)((float)THIS.maximum - - (float)THIS.minimum); + (float)THIS.minimum); switch(THIS.orientation) { case XmHORIZONTAL: - max = (w->core.width - 2 * sht); - size = (float)max * ratio; - delta = (float)x - (float)THIS.oldx; - break; + max = (w->core.width - 2 * sht); + size = (float)max * ratio; + delta = (float)x - (float)THIS.oldx; + break; case XmVERTICAL: - max = (w->core.height - 2 * sht); - size = (float) max * ratio; - delta = (float)y - (float)THIS.oldy; - break; + max = (w->core.height - 2 * sht); + size = (float) max * ratio; + delta = (float)y - (float)THIS.oldy; + break; } switch(THIS.processingDirection) { case XmMAX_ON_RIGHT: case XmMAX_ON_BOTTOM: - nsize = size + delta; - break; + nsize = size + delta; + break; default: - nsize = size - delta; + nsize = size - delta; } if(nsize > (float)max) nsize = (float)max; if(nsize < (float)0 ) nsize = (float)0; nratio = nsize / (float)max; - + fvalue = (int)((float)THIS.maximum - - (float)THIS.minimum) * (float)nsize / (float)max; + (float)THIS.minimum) * (float)nsize / (float)max; value = round(fvalue); THIS.value = value; @@ -703,40 +727,40 @@ GaugeDrag(Widget w, XEvent *e, String *args, Cardinal *num_args) /* clear old slider only if it was larger */ DrawSlider(gw, (nsize < size)); - + { - XmGaugeCallbackStruct call; - - if(NULL != THIS.dragCallback) { - call.reason = XmCR_DRAG; - call.event = e; - call.value = THIS.value; - XtCallCallbacks(w, XmNdragCallback, &call); - } + XmGaugeCallbackStruct call; + + if(NULL != THIS.dragCallback) { + call.reason = XmCR_DRAG; + call.event = e; + call.value = THIS.value; + XtCallCallbacks(w, XmNdragCallback, &call); + } } -#undef THIS +#undef THIS #endif } -void -GaugeDrop(Widget w, XEvent *e, String *args, Cardinal *num_args) +void +GaugeDrop(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardinal *WXUNUSED(num_args)) { -/* Commented out for a read-only gauge in wxWindows */ + /* Commented out for a read-only gauge in wxWidgets */ #if 0 XmGaugeWidget gw = (XmGaugeWidget)w; #define THIS gw->gauge if( ! THIS.dragging) return; if(NULL != THIS.valueChangedCallback) { - XmGaugeCallbackStruct call; - call.reason = XmCR_VALUE_CHANGED; - call.event = e; - call.value = THIS.value; - XtCallCallbacks(w, XmNvalueChangedCallback, &call); + XmGaugeCallbackStruct call; + call.reason = XmCR_VALUE_CHANGED; + call.event = e; + call.value = THIS.value; + XtCallCallbacks(w, XmNvalueChangedCallback, &call); } THIS.dragging = False; -#undef THIS +#undef THIS #endif } @@ -752,8 +776,10 @@ XmGaugeSetValue(Widget w, int value) int XmGaugeGetValue(Widget w) -{ +{ XmGaugeWidget gw = (XmGaugeWidget)w; return gw->gauge.value; } + +#endif // !wxCHECK_MOTIF_VERSION( 2, 0 ) || wxCHECK_LESSTIF()