// Scrollbar bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; wxSize newSize = ( style & wxHORIZONTAL ) ? wxSize( 140, 16 ) : wxSize( 16, 140 ); if( size.x != -1 ) newSize.x = size.x; if( size.y != -1 ) newSize.y = size.y; Widget parentWidget = (Widget) parent->GetClientWidget(); m_mainWidget = DoCreateScrollBar( (WXWidget)parentWidget, (wxOrientation)(style & (wxHORIZONTAL|wxVERTICAL)), (void (*)())wxScrollBarCallback ); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, newSize.x, newSize.y); ChangeBackgroundColour(); return true; }
bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; m_bmpNormal = m_bmpNormalOriginal = bitmap; m_bmpSelected = m_bmpSelectedOriginal = bitmap; Widget parentWidget = (Widget) parent->GetClientWidget(); /* * Patch Note (important) * There is no major reason to put a defaultButtonThickness here. * Not requesting it give the ability to put wxButton with a spacing * as small as requested. However, if some button become a DefaultButton, * other buttons are no more aligned -- This is why we set * defaultButtonThickness of ALL buttons belonging to the same wxPanel, * in the ::SetDefaultButton method. */ Widget buttonWidget = XtVaCreateManagedWidget ("button", // Gadget causes problems for default button operation. #if wxUSE_GADGETS xmPushButtonGadgetClass, parentWidget, #else xmPushButtonWidgetClass, parentWidget, #endif // See comment for wxButton::SetDefault // XmNdefaultButtonShadowThickness, 1, XmNrecomputeSize, False, NULL); m_mainWidget = (WXWidget) buttonWidget; ChangeFont(false); ChangeBackgroundColour (); DoSetBitmap(); XtAddCallback (buttonWidget, XmNactivateCallback, (XtCallbackProc) wxButtonCallback, (XtPointer) this); wxSize best = m_bmpNormal.Ok() ? GetBestSize() : wxSize(30, 30); if( size.x != -1 ) best.x = size.x; if( size.y != -1 ) best.y = size.y; AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, best.x, best.y); return true; }
bool wxGauge::Create(wxWindow *parent, wxWindowID id, int range, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; Widget parentWidget = (Widget) parent->GetClientWidget(); Arg args[7]; int count = 4; if (style & wxGA_HORIZONTAL) { XtSetArg (args[0], XmNorientation, XmHORIZONTAL); XtSetArg (args[1], XmNprocessingDirection, XmMAX_ON_RIGHT); } else { XtSetArg (args[0], XmNorientation, XmVERTICAL); XtSetArg (args[1], XmNprocessingDirection, XmMAX_ON_TOP); } XtSetArg(args[2], XmNminimum, 0); XtSetArg(args[3], XmNmaximum, range); #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; wxSize best = GetBestSize(); if( size.x != wxDefaultCoord ) best.x = size.x; if( size.y != wxDefaultCoord ) best.y = size.y; ChangeFont(false); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, x, y, best.x, best.y); ChangeBackgroundColour(); return true; }
bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, int n, const wxString choices[], long style, const wxValidator& validator, const wxString& name) { if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; m_noStrings = n; Widget parentWidget = (Widget) parent->GetClientWidget(); Widget buttonWidget = XtVaCreateManagedWidget(name.c_str(), xmComboBoxWidgetClass, parentWidget, XmNmarginHeight, 0, XmNmarginWidth, 0, XmNshowLabel, False, XmNeditable, ((style & wxCB_READONLY) != wxCB_READONLY), XmNsorted, ((style & wxCB_SORT) == wxCB_SORT), XmNstaticList, ((style & wxCB_SIMPLE) == wxCB_SIMPLE), NULL); int i; for (i = 0; i < n; i++) { wxXmString str( choices[i] ); XmComboBoxAddItem(buttonWidget, str(), 0); m_stringList.Add(choices[i]); } m_mainWidget = (Widget) buttonWidget; XtManageChild (buttonWidget); SetValue(value); ChangeFont(false); XtAddCallback (buttonWidget, XmNselectionCallback, (XtCallbackProc) wxComboBoxCallback, (XtPointer) this); XtAddCallback (buttonWidget, XmNvalueChangedCallback, (XtCallbackProc) wxComboBoxCallback, (XtPointer) this); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); ChangeBackgroundColour(); return true; }
bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { if( !wxControl::CreateControl( parent, id, pos, size, style, wxDefaultValidator, name ) ) return false; m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); Widget parentWidget = (Widget) parent->GetClientWidget(); Widget toolbar = XtVaCreateManagedWidget("toolbar", xmBulletinBoardWidgetClass, (Widget) parentWidget, XmNmarginWidth, 0, XmNmarginHeight, 0, XmNresizePolicy, XmRESIZE_NONE, NULL); /* Widget toolbar = XtVaCreateManagedWidget("toolbar", xmFormWidgetClass, (Widget) m_clientWidget, XmNtraversalOn, False, XmNhorizontalSpacing, 0, XmNverticalSpacing, 0, XmNleftOffset, 0, XmNrightOffset, 0, XmNmarginWidth, 0, XmNmarginHeight, 0, NULL); */ m_mainWidget = (WXWidget) toolbar; ChangeFont(false); wxPoint rPos = pos; wxSize rSize = size; if( rPos.x == -1 ) rPos.x = 0; if( rPos.y == -1 ) rPos.y = 0; if( rSize.x == -1 && GetParent() ) rSize.x = GetParent()->GetSize().x; AttachWidget (parent, m_mainWidget, (WXWidget) NULL, rPos.x, rPos.y, rSize.x, rSize.y); ChangeBackgroundColour(); return true; }
bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& lbl, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { wxString label(lbl); if (label.empty() && wxIsStockID(id)) label = wxGetStockLabel(id); if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; wxXmString text( GetLabelText(label) ); Widget parentWidget = (Widget) parent->GetClientWidget(); /* * Patch Note (important) * There is no major reason to put a defaultButtonThickness here. * Not requesting it give the ability to put wxButton with a spacing * as small as requested. However, if some button become a DefaultButton, * other buttons are no more aligned -- This is why we set * defaultButtonThickness of ALL buttons belonging to the same wxPanel, * in the ::SetDefaultButton method. */ m_mainWidget = (WXWidget) XtVaCreateManagedWidget ("button", xmPushButtonWidgetClass, parentWidget, wxFont::GetFontTag(), m_font.GetFontTypeC(XtDisplay(parentWidget)), XmNlabelString, text(), XmNrecomputeSize, False, // See comment for wxButton::SetDefault // XmNdefaultButtonShadowThickness, 1, NULL); XtAddCallback ((Widget) m_mainWidget, XmNactivateCallback, (XtCallbackProc) wxButtonCallback, (XtPointer) this); wxSize best = GetBestSize(); if( size.x != -1 ) best.x = size.x; if( size.y != -1 ) best.y = size.y; AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, best.x, best.y); ChangeBackgroundColour(); return true; }
bool wxSlider::Create(wxWindow *parent, wxWindowID id, int value, int minValue, int maxValue, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { if ( !((style & wxSL_HORIZONTAL) || (style & wxSL_VERTICAL)) ) style |= wxSL_HORIZONTAL; if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; m_lineSize = 1; m_windowStyle = style; m_rangeMax = maxValue; m_rangeMin = minValue; // Not used in Motif, I think m_pageSize = (int)((maxValue-minValue)/10); Widget parentWidget = (Widget) parent->GetClientWidget(); Widget sliderWidget = XtVaCreateManagedWidget ("sliderWidget", xmScaleWidgetClass, parentWidget, XmNorientation, (((m_windowStyle & wxSL_VERTICAL) == wxSL_VERTICAL) ? XmVERTICAL : XmHORIZONTAL), XmNprocessingDirection, (((m_windowStyle & wxSL_VERTICAL) == wxSL_VERTICAL) ? XmMAX_ON_TOP : XmMAX_ON_RIGHT), XmNmaximum, maxValue, XmNminimum, minValue, XmNvalue, value, XmNshowValue, True, NULL); m_mainWidget = (WXWidget) sliderWidget; XtAddCallback (sliderWidget, XmNvalueChangedCallback, (XtCallbackProc) wxSliderCallback, (XtPointer) this); XtAddCallback (sliderWidget, XmNdragCallback, (XtCallbackProc) wxSliderCallback, (XtPointer) this); ChangeFont(false); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); ChangeBackgroundColour(); return true; }
bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { if( !CreateControl( parent, id, pos, size, style, wxDefaultValidator, name ) ) return false; m_labelWidget = (WXWidget) 0; Widget parentWidget = (Widget) parent->GetClientWidget(); m_mainWidget = XtVaCreateManagedWidget ("staticboxframe", xmFrameWidgetClass, parentWidget, // MBN: why override default? // XmNshadowType, XmSHADOW_IN, NULL); if (!label.empty()) { wxString label1(GetLabelText(label)); wxXmString text(label1); Display* dpy = XtDisplay( parentWidget ); m_labelWidget = (WXWidget) XtVaCreateManagedWidget ("staticboxlabel", xmLabelWidgetClass, (Widget)m_mainWidget, wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), XmNlabelString, text(), #if wxCHECK_MOTIF_VERSION( 2, 0 ) XmNframeChildType, XmFRAME_TITLE_CHILD, #else XmNchildType, XmFRAME_TITLE_CHILD, #endif NULL); } AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y); ChangeBackgroundColour(); return true; }
bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { if( !CreateControl( parent, id, pos, size, style, wxDefaultValidator, name ) ) return false; m_messageBitmap = bitmap; m_messageBitmapOriginal = bitmap; Widget parentWidget = (Widget) parent->GetClientWidget(); m_mainWidget = (WXWidget) XtVaCreateManagedWidget ("staticBitmap", #if wxUSE_GADGETS xmLabelGadgetClass, parentWidget, #else xmLabelWidgetClass, parentWidget, #endif XmNalignment, XmALIGNMENT_BEGINNING, NULL); ChangeBackgroundColour (); DoSetBitmap(); ChangeFont(false); wxSize actualSize(size); // work around the cases where the bitmap is a wxNull(Icon/Bitmap) if (actualSize.x == -1) actualSize.x = bitmap.Ok() ? bitmap.GetWidth() : 1; if (actualSize.y == -1) actualSize.y = bitmap.Ok() ? bitmap.GetHeight() : 1; AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, actualSize.x, actualSize.y); return true; }
// Single check box item bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { if( !wxControl::CreateControl( parent, id, pos, size, style, validator, name ) ) return false; wxXmString text( GetLabelText(label) ); Widget parentWidget = (Widget) parent->GetClientWidget(); m_mainWidget = (WXWidget) XtVaCreateManagedWidget ("toggle", xmToggleButtonWidgetClass, parentWidget, wxFont::GetFontTag(), m_font.GetFontTypeC(XtDisplay(parentWidget)), XmNlabelString, text(), XmNrecomputeSize, False, // XmNindicatorOn, XmINDICATOR_CHECK_BOX, // XmNfillOnSelect, False, #if wxHAS_3STATE XmNtoggleMode, Is3State() ? XmTOGGLE_INDETERMINATE : XmTOGGLE_BOOLEAN, #endif NULL); XtAddCallback( (Widget)m_mainWidget, XmNvalueChangedCallback, (XtCallbackProc)wxCheckBoxCallback, (XtPointer)this ); XmToggleButtonSetState ((Widget) m_mainWidget, False, True); AttachWidget( parent, m_mainWidget, (WXWidget)NULL, pos.x, pos.y, size.x, size.y ); ChangeBackgroundColour(); return true; }
bool wxDialog::Create(wxWindow *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { SetExtraStyle(GetExtraStyle() | wxTOPLEVEL_EX_DIALOG); if( !wxTopLevelWindow::Create( parent, id, title, pos, size, style, name ) ) return false; m_modalShowing = false; m_eventLoop = NULL; m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); m_foregroundColour = *wxBLACK; Widget dialogShell = (Widget) m_mainWidget; Widget shell = XtParent(dialogShell) ; SetTitle( title ); m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); ChangeFont(false); // Can't remember what this was about... but I think it's necessary. if (wxUSE_INVISIBLE_RESIZE) { if (pos.x > -1) XtVaSetValues(dialogShell, XmNx, pos.x, NULL); if (pos.y > -1) XtVaSetValues(dialogShell, XmNy, pos.y, NULL); if (size.x > -1) XtVaSetValues(dialogShell, XmNwidth, size.x, NULL); if (size.y > -1) XtVaSetValues(dialogShell, XmNheight, size.y, NULL); } // Positioning of the dialog doesn't work properly unless the dialog // is managed, so we manage without mapping to the screen. // To show, we map the shell (actually it's parent). if (!wxUSE_INVISIBLE_RESIZE) XtVaSetValues(shell, XmNmappedWhenManaged, False, NULL); if (!wxUSE_INVISIBLE_RESIZE) { XtManageChild(dialogShell); SetSize(pos.x, pos.y, size.x, size.y); } XtAddEventHandler(dialogShell,ExposureMask,False, wxUniversalRepaintProc, (XtPointer) this); ChangeBackgroundColour(); return true; }
bool wxRadioButton::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; Widget parentWidget = (Widget) parent->GetClientWidget(); Display* dpy = XtDisplay(parentWidget); wxString label1(wxStripMenuCodes(label)); wxXmString text( label1 ); Widget radioButtonWidget = XtVaCreateManagedWidget ("toggle", #if wxUSE_GADGETS xmToggleButtonGadgetClass, parentWidget, #else xmToggleButtonWidgetClass, parentWidget, #endif wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), XmNlabelString, text(), XmNfillOnSelect, True, XmNindicatorType, XmONE_OF_MANY, // diamond-shape NULL); XtAddCallback (radioButtonWidget, XmNvalueChangedCallback, (XtCallbackProc)wxRadioButtonCallback, (XtPointer)this); m_mainWidget = (WXWidget) radioButtonWidget; XtManageChild (radioButtonWidget); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); ChangeBackgroundColour(); //copied from mac/radiobut.cpp (from here till "return true;") m_cycle = this ; if (HasFlag(wxRB_GROUP)) { AddInCycle( NULL ) ; } else { /* search backward for last group start */ wxRadioButton *chief = (wxRadioButton*) NULL; wxWindowList::compatibility_iterator node = parent->GetChildren().GetLast(); while (node) { wxWindow *child = node->GetData(); if (child->IsKindOf( CLASSINFO( wxRadioButton ) ) ) { chief = (wxRadioButton*) child; if (child->HasFlag(wxRB_GROUP)) break; } node = node->GetPrevious(); } AddInCycle( chief ) ; } return true; }
bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { SetName(name); SetWindowStyleFlag(style); m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); m_foregroundColour = *wxBLACK; m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); if ( id > -1 ) m_windowId = id; else m_windowId = (int)NewControlId(); wxMDIClientWindow* clientWindow = parent->GetClientWindow(); wxASSERT_MSG( (clientWindow != (wxWindow*) NULL), "Missing MDI client window."); if (clientWindow) clientWindow->AddChild(this); SetMDIParentFrame(parent); int width = size.x; int height = size.y; if (width == -1) width = 200; // TODO: give reasonable default if (height == -1) height = 200; // TODO: give reasonable default // We're deactivating the old child wxMDIChildFrame* oldActiveChild = parent->GetActiveChild(); if (oldActiveChild) { wxActivateEvent event(wxEVT_ACTIVATE, false, oldActiveChild->GetId()); event.SetEventObject( oldActiveChild ); oldActiveChild->GetEventHandler()->ProcessEvent(event); } // This is the currently active child parent->SetActiveChild((wxMDIChildFrame*) this); // This time we'll try a bog-standard bulletin board for // the 'frame'. A main window doesn't seem to work. m_mainWidget = (WXWidget) XtVaCreateWidget("client", xmBulletinBoardWidgetClass, (Widget) clientWindow->GetTopWidget(), XmNmarginWidth, 0, XmNmarginHeight, 0, /* XmNrightAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, */ XmNresizePolicy, XmRESIZE_NONE, NULL); XtAddEventHandler((Widget) m_mainWidget, ExposureMask,False, wxUniversalRepaintProc, (XtPointer) this); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); ChangeBackgroundColour(); XtManageChild((Widget) m_mainWidget); SetTitle(title); clientWindow->AddPage(this, title, true); clientWindow->Refresh(); // Positions the toolbar and status bar -- but we don't have any. // PreResize(); wxModelessWindows.Append(this); return true; }
bool wxChoice::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, int n, const wxString choices[], long style, const wxValidator& validator, const wxString& name) { if ( !CreateControl(parent, id, pos, size, style, validator, name) ) return false; Widget parentWidget = (Widget) parent->GetClientWidget(); m_formWidget = (WXWidget) XtVaCreateManagedWidget(name.c_str(), xmRowColumnWidgetClass, parentWidget, XmNmarginHeight, 0, XmNmarginWidth, 0, XmNpacking, XmPACK_TIGHT, XmNorientation, XmHORIZONTAL, XmNresizeWidth, False, XmNresizeHeight, False, NULL); XtVaSetValues ((Widget) m_formWidget, XmNspacing, 0, NULL); /* * Create the popup menu */ m_menuWidget = (WXWidget) XmCreatePulldownMenu ((Widget) m_formWidget, wxMOTIF_STR("choiceMenu"), NULL, 0); if (n > 0) { int i; for (i = 0; i < n; i++) Append (choices[i]); } /* * Create button */ Arg args[10]; Cardinal argcnt = 0; XtSetArg (args[argcnt], XmNsubMenuId, (Widget) m_menuWidget); ++argcnt; XtSetArg (args[argcnt], XmNmarginWidth, 0); ++argcnt; XtSetArg (args[argcnt], XmNmarginHeight, 0); ++argcnt; XtSetArg (args[argcnt], XmNpacking, XmPACK_TIGHT); ++argcnt; m_buttonWidget = (WXWidget) XmCreateOptionMenu ((Widget) m_formWidget, wxMOTIF_STR("choiceButton"), args, argcnt); m_mainWidget = m_buttonWidget; XtManageChild ((Widget) m_buttonWidget); // New code from Roland Haenel ([email protected]) // Some time ago, I reported a problem with wxChoice-items under // Linux and Motif 2.0 (they caused sporadic GPFs). Now it seems // that I have found the code responsible for this behaviour. #if XmVersion >= 1002 #if XmVersion < 2000 // JACS, 24/1/99: this seems to cause a malloc crash later on, e.g. // in controls sample. // // Widget optionLabel = XmOptionLabelGadget ((Widget) m_buttonWidget); // XtUnmanageChild (optionLabel); #endif #endif wxSize bestSize = GetBestSize(); if( size.x > 0 ) bestSize.x = size.x; if( size.y > 0 ) bestSize.y = size.y; XtVaSetValues((Widget) m_formWidget, XmNresizePolicy, XmRESIZE_NONE, NULL); ChangeFont(false); ChangeBackgroundColour(); AttachWidget (parent, m_buttonWidget, m_formWidget, pos.x, pos.y, bestSize.x, bestSize.y); return true; }
bool wxFrame::Create(wxWindow *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { if( !wxTopLevelWindow::Create( parent, id, title, pos, size, style, name ) ) return false; m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); m_foregroundColour = *wxBLACK; m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); int x = pos.x, y = pos.y; int width = size.x, height = size.y; // Set reasonable values for position and size if defaults have been // requested // // MB TODO: something better than these arbitrary values ? // VZ should use X resources for this... if ( width == -1 ) width = 400; if ( height == -1 ) height = 400; int displayW, displayH; wxDisplaySize( &displayW, &displayH ); if ( x == -1 ) { x = (displayW - width) / 2; if (x < 10) x = 10; } if ( y == -1 ) { y = (displayH - height) / 2; if (y < 10) y = 10; } SetTitle( title ); wxLogTrace(wxTRACE_Messages, "Created frame (0x%p) with work area 0x%p and client " "area 0x%p", m_mainWidget, m_workArea, m_clientArea); XtAddEventHandler((Widget) m_clientArea, ExposureMask,False, wxUniversalRepaintProc, (XtPointer) this); if (x > -1) XtVaSetValues((Widget) m_frameShell, XmNx, x, NULL); if (y > -1) XtVaSetValues((Widget) m_frameShell, XmNy, y, NULL); if (width > -1) XtVaSetValues((Widget) m_frameShell, XmNwidth, width, NULL); if (height > -1) XtVaSetValues((Widget) m_frameShell, XmNheight, height, NULL); ChangeFont(false); ChangeBackgroundColour(); PreResize(); wxSize newSize(width, height); wxSizeEvent sizeEvent(newSize, GetId()); sizeEvent.SetEventObject(this); GetEventHandler()->ProcessEvent(sizeEvent); return true; }
bool wxListBox::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, int n, const wxString choices[], long style, const wxValidator& validator, const wxString& name) { if( !wxControl::CreateControl( parent, id, pos, size, style, validator, name ) ) return false; m_noItems = (unsigned int)n; m_backgroundColour = * wxWHITE; Widget parentWidget = (Widget) parent->GetClientWidget(); Display* dpy = XtDisplay(parentWidget); Arg args[4]; int count = 0; XtSetArg( args[count], XmNlistSizePolicy, XmCONSTANT ); ++count; XtSetArg( args[count], XmNselectionPolicy, ( m_windowStyle & wxLB_MULTIPLE ) ? XmMULTIPLE_SELECT : ( m_windowStyle & wxLB_EXTENDED ) ? XmEXTENDED_SELECT : XmBROWSE_SELECT ); ++count; if( m_font.Ok() ) { XtSetArg( args[count], (String)wxFont::GetFontTag(), m_font.GetFontTypeC(dpy) ); ++count; } if( m_windowStyle & wxLB_ALWAYS_SB ) { XtSetArg( args[count], XmNscrollBarDisplayPolicy, XmSTATIC ); ++count; } Widget listWidget = XmCreateScrolledList(parentWidget, wxConstCast(name.c_str(), char), args, count); m_mainWidget = (WXWidget) listWidget; Set(n, choices); XtManageChild (listWidget); wxSize best = GetBestSize(); if( size.x != -1 ) best.x = size.x; if( size.y != -1 ) best.y = size.y; XtAddCallback (listWidget, XmNbrowseSelectionCallback, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); XtAddCallback (listWidget, XmNextendedSelectionCallback, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); XtAddCallback (listWidget, XmNmultipleSelectionCallback, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); XtAddCallback (listWidget, XmNdefaultActionCallback, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, best.x, best.y); ChangeBackgroundColour(); return true; }