#include "wx/menuitem.h"
#include "wx/log.h"
-#include "wx/listimpl.cpp"
-
#if wxUSE_DRAG_AND_DROP
#include "wx/dnd.h"
#endif
+#ifdef __VMS__
+#pragma message disable nosimpint
+#endif
#include <Xm/Xm.h>
#include <Xm/DrawingA.h>
#include <Xm/Frame.h>
#include <Xm/Label.h>
#include <Xm/RowColumn.h> // for XmMenuPosition
+#ifdef __VMS__
+#pragma message enable nosimpint
+#endif
#include "wx/motif/private.h"
// event tables
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowBase)
BEGIN_EVENT_TABLE(wxWindow, wxWindowBase)
EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged)
EVT_IDLE(wxWindow::OnIdle)
END_EVENT_TABLE()
-#endif // USE_SHARED_LIBRARY
// ============================================================================
// implementation
// ============================================================================
-// ----------------------------------------------------------------------------
-// list types
-// ----------------------------------------------------------------------------
-
-WX_DEFINE_LIST(wxRectList);
-
// ----------------------------------------------------------------------------
// helper functions
// ----------------------------------------------------------------------------
XtAppAddActions ((XtAppContext) wxTheApp->GetAppContext(), actions, 1);
Widget parentWidget = (Widget) parent->GetClientWidget();
- if (style & wxBORDER)
+
+ if (style & wxSIMPLE_BORDER)
{
m_borderWidget = (WXWidget)XtVaCreateManagedWidget
(
"canvasBorder",
xmFrameWidgetClass, parentWidget,
XmNshadowType, XmSHADOW_IN,
+ XmNshadowThickness, 1,
+ NULL
+ );
+ } else if (style & wxSUNKEN_BORDER)
+ {
+ m_borderWidget = (WXWidget)XtVaCreateManagedWidget
+ (
+ "canvasBorder",
+ xmFrameWidgetClass, parentWidget,
+ XmNshadowType, XmSHADOW_IN,
+ NULL
+ );
+ } else if (style & wxRAISED_BORDER)
+ {
+ m_borderWidget = (WXWidget)XtVaCreateManagedWidget
+ (
+ "canvasBorder",
+ xmFrameWidgetClass, parentWidget,
+ XmNshadowType, XmSHADOW_OUT,
NULL
);
}
if (w)
{
XtDestroyWidget(w);
+ m_drawingArea = (WXWidget) 0;
}
- m_mainWidget = (WXWidget) 0;
-
// Only if we're _really_ a canvas (not a dialog box/panel)
if (m_scrolledWindow)
{
if (m_hScrollBar)
{
wxDeleteWindowFromTable((Widget) m_hScrollBar);
+ XtUnmanageChild((Widget) m_hScrollBar);
}
if (m_vScrollBar)
{
wxDeleteWindowFromTable((Widget) m_vScrollBar);
+ XtUnmanageChild((Widget) m_vScrollBar);
}
- UnmanageAndDestroy(m_hScrollBar);
- UnmanageAndDestroy(m_vScrollBar);
+ if (m_hScrollBar)
+ XtDestroyWidget((Widget) m_hScrollBar);
+ if (m_vScrollBar)
+ XtDestroyWidget((Widget) m_vScrollBar);
+
UnmanageAndDestroy(m_scrolledWindow);
if (m_borderWidget)
// or dialog is destroyed, but before that you may get some memory
// leaks and potential layout problems if you delete and then add
// child windows.
+
+ // GRG, Feb/2000: commented this out when adding support for
+ // wxSCROLL[WIN]_THUMBRELEASE events. Also it was reported
+ // that this call crashed wxMotif under OS/2, so it seems
+ // that leaving it out is the right thing to do.
+ // SN, Feb/2000: newgrid/griddemo shows why it is needed :-(
XtDestroyWidget((Widget) GetMainWidget());
SetMainWidget((WXWidget) NULL);
}
xmScrollBarWidgetClass, (Widget) m_scrolledWindow,
XmNorientation, XmHORIZONTAL,
NULL);
- // XtAddCallback (hScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
+ XtAddCallback (hScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
XtAddCallback (hScrollBar, XmNdragCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
XtAddCallback (hScrollBar, XmNincrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
XtAddCallback (hScrollBar, XmNdecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
xmScrollBarWidgetClass, (Widget) m_scrolledWindow,
XmNorientation, XmVERTICAL,
NULL);
- // XtAddCallback (vScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
+ XtAddCallback (vScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
XtAddCallback (vScrollBar, XmNdragCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
XtAddCallback (vScrollBar, XmNincrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
XtAddCallback (vScrollBar, XmNdecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
XtDestroyWidget((Widget) m_vScrollBar);
}
m_vScrollBar = (WXWidget) 0;
- m_vScroll = TRUE;
+ m_vScroll = FALSE;
XtVaSetValues((Widget) m_scrolledWindow,
XmNverticalScrollBar, (Widget) 0,
GetClientSize(& w, & h);
}
+ wxNode *cnode = m_children.First();
+ while (cnode)
+ {
+ wxWindow *child = (wxWindow*) cnode->Data();
+ int sx = 0;
+ int sy = 0;
+ child->GetSize( &sx, &sy );
+ wxPoint pos( child->GetPosition() );
+ child->SetSize( pos.x + dx, pos.y + dy, sx, sy, wxSIZE_ALLOW_MINUS_ONE );
+ cnode = cnode->Next();
+ }
+
int x1 = (dx >= 0) ? x : x - dx;
int y1 = (dy >= 0) ? y : y - dy;
int w1 = w - abs(dx);
GetSize(& oldW, & oldH);
GetPosition(& oldX, & oldY);
- bool useOldPos = FALSE;
- bool useOldSize = FALSE;
+ if ( !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
+ {
+ if ( x == -1 )
+ x = oldX;
+ if ( y == -1 )
+ y = oldY;
+ }
- if ((x == -1) && (x == -1) && ((sizeFlags & wxSIZE_ALLOW_MINUS_ONE) == 0))
- useOldPos = TRUE;
- else if (x == oldX && y == oldY)
- useOldPos = TRUE;
+ if ( width == -1 )
+ width = oldW;
+ if ( height == -1 )
+ height = oldH;
- if ((width == -1) && (height == -1))
- useOldSize = TRUE;
- else if (width == oldW && height == oldH)
- useOldSize = TRUE;
+ bool nothingChanged = (x == oldX) && (y == oldY) &&
+ (width == oldW) && (height == oldH);
if (!wxNoOptimize::CanOptimize())
{
- useOldSize = FALSE; useOldPos = FALSE;
+ nothingChanged = FALSE;
}
- if (useOldPos && useOldSize)
- return;
-
- if (m_drawingArea)
+ if ( !nothingChanged )
{
- CanvasSetSize(x, y, width, height, sizeFlags);
- return;
- }
- Widget widget = (Widget) GetTopWidget();
- if (!widget)
- return;
+ if (m_drawingArea)
+ {
+ CanvasSetSize(x, y, width, height, sizeFlags);
+ return;
+ }
- bool managed = XtIsManaged( widget );
- if (managed)
- XtUnmanageChild(widget);
+ Widget widget = (Widget) GetTopWidget();
+ if (!widget)
+ return;
- int xx = x; int yy = y;
- AdjustForParentClientOrigin(xx, yy, sizeFlags);
+ bool managed = XtIsManaged( widget );
+ if (managed)
+ XtUnmanageChild(widget);
- if (!useOldPos)
- {
- if (x > -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- XtVaSetValues(widget, XmNx, xx, NULL);
- if (y > -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- XtVaSetValues(widget, XmNy, yy, NULL);
- }
- if (!useOldSize)
- {
- if (width > -1)
- XtVaSetValues(widget, XmNwidth, width, NULL);
- if (height > -1)
- XtVaSetValues(widget, XmNheight, height, NULL);
- }
+ int xx = x;
+ int yy = y;
+ AdjustForParentClientOrigin(xx, yy, sizeFlags);
- if (managed)
- XtManageChild(widget);
+ DoMoveWindow(xx, yy, width, height);
- // How about this bit. Maybe we don't need to generate size events
- // all the time -- they'll be generated when the window is sized anyway.
+ if (managed)
+ XtManageChild(widget);
+
+ // How about this bit. Maybe we don't need to generate size events
+ // all the time -- they'll be generated when the window is sized anyway.
#if 0
- wxSizeEvent sizeEvent(wxSize(width, height), GetId());
- sizeEvent.SetEventObject(this);
+ wxSizeEvent sizeEvent(wxSize(width, height), GetId());
+ sizeEvent.SetEventObject(this);
- GetEventHandler()->ProcessEvent(sizeEvent);
+ GetEventHandler()->ProcessEvent(sizeEvent);
#endif // 0
+ }
}
void wxWindow::DoSetClientSize(int width, int height)
XtVaSetValues(widget, XmNheightInc, incH, NULL);
}
+void wxWindow::DoMoveWindow(int x, int y, int width, int height)
+{
+ XtVaSetValues((Widget)GetTopWidget(),
+ XmNx, x,
+ XmNy, y,
+ XmNwidth, width,
+ XmNheight, height,
+ NULL);
+}
+
// ---------------------------------------------------------------------------
// text metrics
// ---------------------------------------------------------------------------
}
}
-void wxWindow::OnIdle(wxIdleEvent& event)
+void wxWindow::OnIdle(wxIdleEvent& WXUNUSED(event))
{
// This calls the UI-update mechanism (querying windows for
// menu/toolbar/control state information)
// Try for a menu command
if (frame->GetMenuBar())
{
- wxMenuItem* item = frame->GetMenuBar()->FindItemForId(entry->GetCommand());
+ wxMenuItem* item = frame->GetMenuBar()->FindItem(entry->GetCommand());
if (item)
{
wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, entry->GetCommand());
wxWidgetHashTable->Put((long) w, win);
- wxLogDebug("Widget 0x%08x <-> window %p (%s)",
+ wxLogTrace("widget", "Widget 0x%08x <-> window %p (%s)",
w, win, win->GetClassInfo()->GetClassName());
return TRUE;
// ----------------------------------------------------------------------------
// Add to hash table, add event handler
-bool wxWindow::AttachWidget (wxWindow* parent, WXWidget mainWidget,
+bool wxWindow::AttachWidget (wxWindow* WXUNUSED(parent), WXWidget mainWidget,
WXWidget formWidget, int x, int y, int width, int height)
{
wxAddWindowToTable((Widget) mainWidget, this);
// All widgets should have this as their resize proc.
// OnSize sent to wxWindow via client data.
-void wxWidgetResizeProc(Widget w, XConfigureEvent *event, String args[], int *num_args)
+void wxWidgetResizeProc(Widget w, XConfigureEvent *WXUNUSED(event), String WXUNUSED(args)[], int *WXUNUSED(num_args))
{
wxWindow *win = wxGetWindowFromTable(w);
if (!win)
// Unable to deal with Enter/Leave without a separate EventHandler (Motif 1.1.4)
static void wxCanvasEnterLeave(Widget drawingArea,
- XtPointer clientData,
+ XtPointer WXUNUSED(clientData),
XCrossingEvent * event)
{
XmDrawingAreaCallbackStruct cbs;
}
// Fix to make it work under Motif 1.0 (!)
-static void wxCanvasMotionEvent (Widget drawingArea, XButtonEvent * event)
+static void wxCanvasMotionEvent (Widget WXUNUSED(drawingArea), XButtonEvent * WXUNUSED(event))
{
#if XmVersion <= 1000
XmDrawingAreaCallbackStruct cbs;
}
static void wxCanvasInputEvent(Widget drawingArea,
- XtPointer data,
+ XtPointer WXUNUSED(data),
XmDrawingAreaCallbackStruct * cbs)
{
wxWindow *canvas = wxGetWindowFromTable(drawingArea);
else if (local_event.xany.type == MotionNotify)
{
eventType = wxEVT_MOTION;
- if (local_event.xmotion.is_hint == NotifyHint)
- {
- Window root, child;
- Display *dpy = XtDisplay (drawingArea);
-
- XQueryPointer (dpy, XtWindow (drawingArea),
- &root, &child,
- &local_event.xmotion.x_root,
- &local_event.xmotion.y_root,
- &local_event.xmotion.x,
- &local_event.xmotion.y,
- &local_event.xmotion.state);
- }
- else
- {
- }
}
else if (local_event.xany.type == ButtonPress)
wxevent.m_metaDown = local_event.xbutton.state & Mod1Mask;
wxevent.SetTimestamp(local_event.xbutton.time);
+ if ( eventType == wxEVT_MOTION )
+ {
+ if (local_event.xmotion.is_hint == NotifyHint)
+ {
+ Window root, child;
+ Display *dpy = XtDisplay (drawingArea);
+
+ XQueryPointer (dpy, XtWindow (drawingArea),
+ &root, &child,
+ &local_event.xmotion.x_root,
+ &local_event.xmotion.y_root,
+ &local_event.xmotion.x,
+ &local_event.xmotion.y,
+ &local_event.xmotion.state);
+ }
+ else
+ {
+ }
+ }
+
// Now check if we need to translate this event into a double click
if (TRUE) // canvas->doubleClickAllowed)
{
}
static void wxPanelItemEventHandler(Widget wid,
- XtPointer client_data,
+ XtPointer WXUNUSED(client_data),
XEvent* event,
Boolean *continueToDispatch)
{
}
case XmCR_VALUE_CHANGED:
{
- // TODO: Should this be intercepted too, or will it cause
- // duplicate events?
- eventType = wxEVT_SCROLLWIN_THUMBTRACK;
+ eventType = wxEVT_SCROLLWIN_THUMBRELEASE;
break;
}
case XmCR_PAGE_INCREMENT:
return FALSE;
}
-bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Widget widget, XEvent *xevent)
+bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Widget WXUNUSED(widget), XEvent *xevent)
{
switch (xevent->xany.type)
{