| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: window.h
- // Purpose: interface of wxWindow
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- Valid values for wxWindow::ShowWithEffect() and wxWindow::HideWithEffect().
- */
- enum wxShowEffect
- {
- /**
- No effect, equivalent to normal wxWindow::Show() or Hide() call.
- @since 2.9.1
- */
- wxSHOW_EFFECT_NONE,
- /// Roll window to the left
- wxSHOW_EFFECT_ROLL_TO_LEFT,
- /// Roll window to the right
- wxSHOW_EFFECT_ROLL_TO_RIGHT,
- /// Roll window to the top
- wxSHOW_EFFECT_ROLL_TO_TOP,
- /// Roll window to the bottom
- wxSHOW_EFFECT_ROLL_TO_BOTTOM,
- /// Slide window to the left
- wxSHOW_EFFECT_SLIDE_TO_LEFT,
- /// Slide window to the right
- wxSHOW_EFFECT_SLIDE_TO_RIGHT,
- /// Slide window to the top
- wxSHOW_EFFECT_SLIDE_TO_TOP,
- /// Slide window to the bottom
- wxSHOW_EFFECT_SLIDE_TO_BOTTOM,
- /// Fade in or out effect
- wxSHOW_EFFECT_BLEND,
- /// Expanding or collapsing effect
- wxSHOW_EFFECT_EXPAND,
- wxSHOW_EFFECT_MAX
- };
- /**
- flags for SendSizeEvent()
- */
- enum
- {
- wxSEND_EVENT_POST = 1
- };
- /**
- Struct containing all the visual attributes of a control.
- */
- struct wxVisualAttributes
- {
- /// The font used for control label/text inside it.
- wxFont font;
- /// The foreground colour.
- wxColour colFg;
- /**
- The background colour.
- May be wxNullColour if the controls background colour is not solid.
- */
- wxColour colBg;
- };
- /**
- Different window variants, on platforms like eg mac uses different
- rendering sizes.
- */
- enum wxWindowVariant
- {
- wxWINDOW_VARIANT_NORMAL, //!< Normal size
- wxWINDOW_VARIANT_SMALL, //!< Smaller size (about 25 % smaller than normal)
- wxWINDOW_VARIANT_MINI, //!< Mini size (about 33 % smaller than normal)
- wxWINDOW_VARIANT_LARGE, //!< Large size (about 25 % larger than normal)
- wxWINDOW_VARIANT_MAX
- };
- /**
- @class wxWindow
- wxWindow is the base class for all windows and represents any visible object
- on screen. All controls, top level windows and so on are windows. Sizers and
- device contexts are not, however, as they don't appear on screen themselves.
- Please note that all children of the window will be deleted automatically by
- the destructor before the window itself is deleted which means that you don't
- have to worry about deleting them manually. Please see the @ref
- overview_windowdeletion "window deletion overview" for more information.
- Also note that in this, and many others, wxWidgets classes some
- @c GetXXX() methods may be overloaded (as, for example,
- wxWindow::GetSize or wxWindow::GetClientSize). In this case, the overloads
- are non-virtual because having multiple virtual functions with the same name
- results in a virtual function name hiding at the derived class level (in
- English, this means that the derived class has to override all overloaded
- variants if it overrides any of them). To allow overriding them in the derived
- class, wxWidgets uses a unique protected virtual @c DoGetXXX() method
- and all @c GetXXX() ones are forwarded to it, so overriding the former
- changes the behaviour of the latter.
- @beginStyleTable
- @style{wxBORDER_DEFAULT}
- The window class will decide the kind of border to show, if any.
- @style{wxBORDER_SIMPLE}
- Displays a thin border around the window. wxSIMPLE_BORDER is the
- old name for this style.
- @style{wxBORDER_SUNKEN}
- Displays a sunken border. wxSUNKEN_BORDER is the old name for this
- style.
- @style{wxBORDER_RAISED}
- Displays a raised border. wxRAISED_BORDER is the old name for this
- style.
- @style{wxBORDER_STATIC}
- Displays a border suitable for a static control. wxSTATIC_BORDER
- is the old name for this style. Windows only.
- @style{wxBORDER_THEME}
- Displays a native border suitable for a control, on the current
- platform. On Windows XP or Vista, this will be a themed border; on
- most other platforms a sunken border will be used. For more
- information for themed borders on Windows, please see Themed
- borders on Windows.
- @style{wxBORDER_NONE}
- Displays no border, overriding the default border style for the
- window. wxNO_BORDER is the old name for this style.
- @style{wxBORDER_DOUBLE}
- This style is obsolete and should not be used.
- @style{wxTRANSPARENT_WINDOW}
- The window is transparent, that is, it will not receive paint
- events. Windows only.
- @style{wxTAB_TRAVERSAL}
- Use this to enable tab traversal for non-dialog windows.
- @style{wxWANTS_CHARS}
- Use this to indicate that the window wants to get all char/key
- events for all keys - even for keys like TAB or ENTER which are
- usually used for dialog navigation and which wouldn't be generated
- without this style. If you need to use this style in order to get
- the arrows or etc., but would still like to have normal keyboard
- navigation take place, you should call Navigate in response to the
- key events for Tab and Shift-Tab.
- @style{wxNO_FULL_REPAINT_ON_RESIZE}
- On Windows, this style used to disable repainting the window
- completely when its size is changed. Since this behaviour is now
- the default, the style is now obsolete and no longer has an effect.
- @style{wxVSCROLL}
- Use this style to enable a vertical scrollbar. Notice that this
- style cannot be used with native controls which don't support
- scrollbars nor with top-level windows in most ports.
- @style{wxHSCROLL}
- Use this style to enable a horizontal scrollbar. The same
- limitations as for wxVSCROLL apply to this style.
- @style{wxALWAYS_SHOW_SB}
- If a window has scrollbars, disable them instead of hiding them
- when they are not needed (i.e. when the size of the window is big
- enough to not require the scrollbars to navigate it). This style is
- currently implemented for wxMSW, wxGTK and wxUniversal and does
- nothing on the other platforms.
- @style{wxCLIP_CHILDREN}
- Use this style to eliminate flicker caused by the background being
- repainted, then children being painted over them. Windows only.
- @style{wxFULL_REPAINT_ON_RESIZE}
- Use this style to force a complete redraw of the window whenever it
- is resized instead of redrawing just the part of the window
- affected by resizing. Note that this was the behaviour by default
- before 2.5.1 release and that if you experience redraw problems
- with code which previously used to work you may want to try this.
- Currently this style applies on GTK+ 2 and Windows only, and full
- repainting is always done on other platforms.
- @endStyleTable
- @beginExtraStyleTable
- @style{wxWS_EX_VALIDATE_RECURSIVELY}
- By default, wxWindow::Validate(), wxWindow::TransferDataTo() and
- wxWindow::TransferDataFromWindow() only work on
- direct children of the window (compatible behaviour).
- Set this flag to make them recursively descend into all subwindows.
- @style{wxWS_EX_BLOCK_EVENTS}
- wxCommandEvents and the objects of the derived classes are
- forwarded to the parent window and so on recursively by default.
- Using this flag for the given window allows to block this
- propagation at this window, i.e. prevent the events from being
- propagated further upwards. Dialogs have this flag on by default
- for the reasons explained in the @ref overview_events.
- @style{wxWS_EX_TRANSIENT}
- Don't use this window as an implicit parent for the other windows:
- this must be used with transient windows as otherwise there is the
- risk of creating a dialog/frame with this window as a parent, which
- would lead to a crash if the parent were destroyed before the child.
- @style{wxWS_EX_CONTEXTHELP}
- Under Windows, puts a query button on the caption. When pressed,
- Windows will go into a context-sensitive help mode and wxWidgets
- will send a @c wxEVT_HELP event if the user clicked on an application window.
- This style cannot be used (because of the underlying native behaviour)
- together with @c wxMAXIMIZE_BOX or @c wxMINIMIZE_BOX, so these two styles
- are automatically turned off if this one is used.
- @style{wxWS_EX_PROCESS_IDLE}
- This window should always process idle events, even if the mode set
- by wxIdleEvent::SetMode is @c wxIDLE_PROCESS_SPECIFIED.
- @style{wxWS_EX_PROCESS_UI_UPDATES}
- This window should always process UI update events, even if the
- mode set by wxUpdateUIEvent::SetMode is @c wxUPDATE_UI_PROCESS_SPECIFIED.
- @endExtraStyleTable
- @beginEventEmissionTable
- @event{EVT_ACTIVATE(id, func)}
- Process a @c wxEVT_ACTIVATE event. See wxActivateEvent.
- @event{EVT_CHILD_FOCUS(func)}
- Process a @c wxEVT_CHILD_FOCUS event. See wxChildFocusEvent.
- @event{EVT_CONTEXT_MENU(func)}
- A right click (or other context menu command depending on platform) has been detected.
- See wxContextMenuEvent.
- @event{EVT_HELP(id, func)}
- Process a @c wxEVT_HELP event. See wxHelpEvent.
- @event{EVT_HELP_RANGE(id1, id2, func)}
- Process a @c wxEVT_HELP event for a range of ids. See wxHelpEvent.
- @event{EVT_DROP_FILES(func)}
- Process a @c wxEVT_DROP_FILES event. See wxDropFilesEvent.
- @event{EVT_ERASE_BACKGROUND(func)}
- Process a @c wxEVT_ERASE_BACKGROUND event. See wxEraseEvent.
- @event{EVT_SET_FOCUS(func)}
- Process a @c wxEVT_SET_FOCUS event. See wxFocusEvent.
- @event{EVT_KILL_FOCUS(func)}
- Process a @c wxEVT_KILL_FOCUS event. See wxFocusEvent.
- @event{EVT_IDLE(func)}
- Process a @c wxEVT_IDLE event. See wxIdleEvent.
- @event{EVT_JOY_*(func)}
- Processes joystick events. See wxJoystickEvent.
- @event{EVT_KEY_DOWN(func)}
- Process a @c wxEVT_KEY_DOWN event (any key has been pressed).
- See wxKeyEvent.
- @event{EVT_KEY_UP(func)}
- Process a @c wxEVT_KEY_UP event (any key has been released).
- See wxKeyEvent.
- @event{EVT_CHAR(func)}
- Process a @c wxEVT_CHAR event.
- See wxKeyEvent.
- @event{EVT_CHAR_HOOK(func)}
- Process a @c wxEVT_CHAR_HOOK event.
- See wxKeyEvent.
- @event{EVT_MOUSE_CAPTURE_LOST(func)}
- Process a @c wxEVT_MOUSE_CAPTURE_LOST event. See wxMouseCaptureLostEvent.
- @event{EVT_MOUSE_CAPTURE_CHANGED(func)}
- Process a @c wxEVT_MOUSE_CAPTURE_CHANGED event. See wxMouseCaptureChangedEvent.
- @event{EVT_MOUSE_*(func)}
- See wxMouseEvent.
- @event{EVT_PAINT(func)}
- Process a @c wxEVT_PAINT event. See wxPaintEvent.
- @event{EVT_POWER_*(func)}
- The system power state changed. See wxPowerEvent.
- @event{EVT_SCROLLWIN_*(func)}
- Process scroll events. See wxScrollWinEvent.
- @event{EVT_SET_CURSOR(func)}
- Process a @c wxEVT_SET_CURSOR event. See wxSetCursorEvent.
- @event{EVT_SIZE(func)}
- Process a @c wxEVT_SIZE event. See wxSizeEvent.
- @event{EVT_SYS_COLOUR_CHANGED(func)}
- Process a @c wxEVT_SYS_COLOUR_CHANGED event. See wxSysColourChangedEvent.
- @endEventTable
- @library{wxcore}
- @category{miscwnd}
- @see @ref overview_events, @ref overview_windowsizing
- */
- class wxWindow : public wxEvtHandler
- {
- public:
- /**
- Default constructor
- */
- wxWindow();
- /**
- Constructs a window, which can be a child of a frame, dialog or any other
- non-control window.
- @param parent
- Pointer to a parent window.
- @param id
- Window identifier. If wxID_ANY, will automatically create an identifier.
- @param pos
- Window position. wxDefaultPosition indicates that wxWidgets
- should generate a default position for the window.
- If using the wxWindow class directly, supply an actual position.
- @param size
- Window size. wxDefaultSize indicates that wxWidgets should generate
- a default size for the window. If no suitable size can be found, the
- window will be sized to 20x20 pixels so that the window is visible but
- obviously not correctly sized.
- @param style
- Window style. For generic window styles, please see wxWindow.
- @param name
- Window name.
- */
- wxWindow(wxWindow* parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxString& name = wxPanelNameStr);
- /**
- Destructor.
- Deletes all sub-windows, then deletes itself. Instead of using
- the @b delete operator explicitly, you should normally use Destroy()
- so that wxWidgets can delete a window only when it is safe to do so, in idle time.
- @see @ref overview_windowdeletion "Window Deletion Overview",
- Destroy(), wxCloseEvent
- */
- virtual ~wxWindow();
- bool Create(wxWindow *parent,
- wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxString& name = wxPanelNameStr);
- /**
- @name Focus functions
- See also the static function FindFocus().
- */
- //@{
- /**
- This method may be overridden in the derived classes to return @false to
- indicate that this control doesn't accept input at all (i.e.\ behaves like
- e.g.\ wxStaticText) and so doesn't need focus.
- @see AcceptsFocusFromKeyboard()
- */
- virtual bool AcceptsFocus() const;
- /**
- This method may be overridden in the derived classes to return @false to
- indicate that while this control can, in principle, have focus if the user
- clicks it with the mouse, it shouldn't be included in the TAB traversal chain
- when using the keyboard.
- */
- virtual bool AcceptsFocusFromKeyboard() const;
- /**
- Overridden to indicate whether this window or one of its children accepts
- focus. Usually it's the same as AcceptsFocus() but is overridden for
- container windows.
- */
- virtual bool AcceptsFocusRecursively() const;
-
- /**
- Can this window itself have focus?
- */
- bool IsFocusable() const;
- /**
- Can this window have focus right now?
-
- If this method returns true, it means that calling SetFocus() will
- put focus either to this window or one of its children, if you need
- to know whether this window accepts focus itself, use IsFocusable()
- */
- bool CanAcceptFocus() const;
- /**
- Can this window be assigned focus from keyboard right now?
- */
- bool CanAcceptFocusFromKeyboard() const;
- /**
- Returns @true if the window (or in case of composite controls, its main
- child window) has focus.
- @since 2.9.0
- @see FindFocus()
- */
- virtual bool HasFocus() const;
- /**
- This method is only implemented by ports which have support for
- native TAB traversal (such as GTK+ 2.0).
- It is called by wxWidgets' container control code to give the native
- system a hint when doing TAB traversal. A call to this does not disable
- or change the effect of programmatically calling SetFocus().
- @see wxFocusEvent, wxPanel::SetFocus, wxPanel::SetFocusIgnoringChildren
- */
- virtual void SetCanFocus(bool canFocus);
- /**
- This sets the window to receive keyboard input.
- @see HasFocus(), wxFocusEvent, wxPanel::SetFocus,
- wxPanel::SetFocusIgnoringChildren
- */
- virtual void SetFocus();
- /**
- This function is called by wxWidgets keyboard navigation code when the user
- gives the focus to this window from keyboard (e.g. using @c TAB key).
- By default this method simply calls SetFocus() but
- can be overridden to do something in addition to this in the derived classes.
- */
- virtual void SetFocusFromKbd();
- //@}
- /**
- @name Child management functions
- */
- //@{
- /**
- Adds a child window. This is called automatically by window creation
- functions so should not be required by the application programmer.
- Notice that this function is mostly internal to wxWidgets and shouldn't be
- called by the user code.
- @param child
- Child window to add.
- */
- virtual void AddChild(wxWindow* child);
- /**
- Destroys all children of a window. Called automatically by the destructor.
- */
- bool DestroyChildren();
- /**
- Find a child of this window, by @a id.
- May return @a this if it matches itself.
- Notice that only real children, not top level windows using this window
- as parent, are searched by this function.
- */
- wxWindow* FindWindow(long id) const;
- /**
- Find a child of this window, by name.
- May return @a this if it matches itself.
- Notice that only real children, not top level windows using this window
- as parent, are searched by this function.
- */
- wxWindow* FindWindow(const wxString& name) const;
- /**
- Returns a reference to the list of the window's children. @c wxWindowList
- is a type-safe wxList-like class whose elements are of type @c wxWindow*.
- */
- wxWindowList& GetChildren();
- /**
- @overload
- */
- const wxWindowList& GetChildren() const;
- /**
- Removes a child window.
- This is called automatically by window deletion functions so should not
- be required by the application programmer.
- Notice that this function is mostly internal to wxWidgets and shouldn't be
- called by the user code.
- @param child
- Child window to remove.
- */
- virtual void RemoveChild(wxWindow* child);
- //@}
- /**
- @name Sibling and parent management functions
- */
- //@{
- /**
- Returns the grandparent of a window, or @NULL if there isn't one.
- */
- wxWindow* GetGrandParent() const;
- /**
- Returns the next window after this one among the parent's children or @NULL
- if this window is the last child.
- @since 2.8.8
- @see GetPrevSibling()
- */
- wxWindow* GetNextSibling() const;
- /**
- Returns the parent of the window, or @NULL if there is no parent.
- */
- wxWindow* GetParent() const;
- /**
- Returns the previous window before this one among the parent's children or @c
- @NULL if this window is the first child.
- @since 2.8.8
- @see GetNextSibling()
- */
- wxWindow* GetPrevSibling() const;
- /**
- Check if the specified window is a descendant of this one.
- Returns @true if the window is a descendant (i.e. a child or
- grand-child or grand-grand-child or ...) of this one.
- Notice that a window can never be a descendant of another one if they
- are in different top level windows, i.e. a child of a wxDialog is not
- considered to be a descendant of dialogs parent wxFrame.
- @param win Any window, possible @NULL (@false is always returned then).
- @since 2.9.4
- */
- bool IsDescendant(wxWindowBase* win) const;
- /**
- Reparents the window, i.e.\ the window will be removed from its
- current parent window (e.g. a non-standard toolbar in a wxFrame)
- and then re-inserted into another.
- Notice that currently you need to explicitly call
- wxNotebook::RemovePage() before reparenting a notebook page.
- @param newParent
- New parent.
- */
- virtual bool Reparent(wxWindow* newParent);
- //@}
- /**
- @name Scrolling and scrollbars functions
- Note that these methods don't work with native controls which don't use
- wxWidgets scrolling framework (i.e. don't derive from wxScrolledWindow).
- */
- //@{
- /**
- Call this function to force one or both scrollbars to be always shown, even if
- the window is big enough to show its entire contents without scrolling.
- @since 2.9.0
- @param hflag
- Whether the horizontal scroll bar should always be visible.
- @param vflag
- Whether the vertical scroll bar should always be visible.
- @remarks This function is currently only implemented under Mac/Carbon.
- */
- virtual void AlwaysShowScrollbars(bool hflag = true, bool vflag = true);
- /**
- Returns the built-in scrollbar position.
- @see SetScrollbar()
- */
- virtual int GetScrollPos(int orientation) const;
- /**
- Returns the built-in scrollbar range.
- @see SetScrollbar()
- */
- virtual int GetScrollRange(int orientation) const;
- /**
- Returns the built-in scrollbar thumb size.
- @see SetScrollbar()
- */
- virtual int GetScrollThumb(int orientation) const;
- /**
- Returns @true if this window can have a scroll bar in this orientation.
- @param orient
- Orientation to check, either wxHORIZONTAL or wxVERTICAL.
- @since 2.9.1
- */
- bool CanScroll(int orient) const;
- /**
- Returns @true if this window currently has a scroll bar for this
- orientation.
- This method may return @false even when CanScroll() for the same
- orientation returns @true, but if CanScroll() returns @false, i.e.
- scrolling in this direction is not enabled at all, HasScrollbar()
- always returns @false as well.
- @param orient
- Orientation to check, either wxHORIZONTAL or wxVERTICAL.
- */
- bool HasScrollbar(int orient) const;
- /**
- Return whether a scrollbar is always shown.
- @param orient
- Orientation to check, either wxHORIZONTAL or wxVERTICAL.
- @see AlwaysShowScrollbars()
- */
- virtual bool IsScrollbarAlwaysShown(int orient) const;
- /**
- Scrolls the window by the given number of lines down (if @a lines is
- positive) or up.
- @return Returns @true if the window was scrolled, @false if it was already
- on top/bottom and nothing was done.
- @remarks This function is currently only implemented under MSW and
- wxTextCtrl under wxGTK (it also works for wxScrolled classes
- under all platforms).
- @see ScrollPages()
- */
- virtual bool ScrollLines(int lines);
- /**
- Scrolls the window by the given number of pages down (if @a pages is
- positive) or up.
- @return Returns @true if the window was scrolled, @false if it was already
- on top/bottom and nothing was done.
- @remarks This function is currently only implemented under MSW and wxGTK.
- @see ScrollLines()
- */
- virtual bool ScrollPages(int pages);
- /**
- Physically scrolls the pixels in the window and move child windows accordingly.
- @param dx
- Amount to scroll horizontally.
- @param dy
- Amount to scroll vertically.
- @param rect
- Rectangle to scroll, if it is @NULL, the whole window is
- scrolled (this is always the case under wxGTK which doesn't support this
- parameter)
- @remarks Note that you can often use wxScrolled instead of using this
- function directly.
- */
- virtual void ScrollWindow(int dx, int dy,
- const wxRect* rect = NULL);
- /**
- Same as #ScrollLines (-1).
- */
- bool LineUp();
- /**
- Same as #ScrollLines (1).
- */
- bool LineDown();
- /**
- Same as #ScrollPages (-1).
- */
- bool PageUp();
- /**
- Same as #ScrollPages (1).
- */
- bool PageDown();
- /**
- Sets the position of one of the built-in scrollbars.
- @param orientation
- Determines the scrollbar whose position is to be set.
- May be wxHORIZONTAL or wxVERTICAL.
- @param pos
- Position in scroll units.
- @param refresh
- @true to redraw the scrollbar, @false otherwise.
- @remarks This function does not directly affect the contents of the
- window: it is up to the application to take note of
- scrollbar attributes and redraw contents accordingly.
- @see SetScrollbar(), GetScrollPos(), GetScrollThumb(), wxScrollBar,
- wxScrolled
- */
- virtual void SetScrollPos(int orientation, int pos,
- bool refresh = true);
- /**
- Sets the scrollbar properties of a built-in scrollbar.
- @param orientation
- Determines the scrollbar whose page size is to be set.
- May be wxHORIZONTAL or wxVERTICAL.
- @param position
- The position of the scrollbar in scroll units.
- @param thumbSize
- The size of the thumb, or visible portion of the scrollbar, in scroll units.
- @param range
- The maximum position of the scrollbar. Value of -1 can be used to
- ask for the scrollbar to be shown but in the disabled state: this
- can be used to avoid removing the scrollbar even when it is not
- needed (currently this is only implemented in wxMSW port).
- @param refresh
- @true to redraw the scrollbar, @false otherwise.
- @remarks
- Let's say you wish to display 50 lines of text, using the same font.
- The window is sized so that you can only see 16 lines at a time.
- You would use:
- @code
- SetScrollbar(wxVERTICAL, 0, 16, 50);
- @endcode
- Note that with the window at this size, the thumb position can never
- go above 50 minus 16, or 34. You can determine how many lines are
- currently visible by dividing the current view size by the character
- height in pixels.
- When defining your own scrollbar behaviour, you will always need
- to recalculate the scrollbar settings when the window size changes.
- You could therefore put your scrollbar calculations and SetScrollbar
- call into a function named AdjustScrollbars, which can be called
- initially and also from your wxSizeEvent handler function.
- @see @ref overview_scrolling, wxScrollBar, wxScrolled, wxScrollWinEvent
- */
- virtual void SetScrollbar(int orientation, int position,
- int thumbSize, int range,
- bool refresh = true);
- //@}
- /**
- @name Sizing functions
- See also the protected functions DoGetBestSize() and
- DoGetBestClientSize().
- */
- //@{
- /**
- Helper for ensuring EndRepositioningChildren() is called correctly.
- This class wraps the calls to BeginRepositioningChildren() and
- EndRepositioningChildren() by performing the former in its constructor
- and the latter in its destructor if, and only if, the first call
- returned @true. This is the simplest way to call these methods and if
- this class is created as a local variable, it also ensures that
- EndRepositioningChildren() is correctly called (or not) on scope exit,
- so its use instead of calling these methods manually is highly
- recommended.
- @since 2.9.5
- */
- class ChildrenRepositioningGuard
- {
- public:
- /**
- Constructor calls wxWindow::BeginRepositioningChildren().
- @param win The window to call BeginRepositioningChildren() on. If
- it is @NULL, nothing is done.
- */
- explicit ChildrenRepositioningGuard(wxWindow* win);
- /**
- Destructor calls wxWindow::EndRepositioningChildren() if necessary.
- EndRepositioningChildren() is called only if a valid window was
- passed to the constructor and if BeginRepositioningChildren()
- returned @true.
- */
- ~ChildrenRepositioningGuard();
- };
- /**
- Prepare for changing positions of multiple child windows.
- This method should be called before changing positions of multiple
- child windows to reduce flicker and, in MSW case, even avoid display
- corruption in some cases. It is used internally by wxWidgets and called
- automatically when the window size changes but it can also be useful to
- call it from outside of the library if a repositioning involving
- multiple children is done without changing the window size.
- If this method returns @true, then EndRepositioningChildren() must be
- called after setting all children positions. Use
- ChildrenRepositioningGuard class to ensure that this requirement is
- satisfied.
- @since 2.9.5
- */
- bool BeginRepositioningChildren();
- /**
- Fix child window positions after setting all of them at once.
- This method must be called if and only if the previous call to
- BeginRepositioningChildren() returned @true.
- @since 2.9.5
- */
- void EndRepositioningChildren();
- /**
- Sets the cached best size value.
- @see GetBestSize()
- */
- void CacheBestSize(const wxSize& size) const;
- /**
- Converts client area size @a size to corresponding window size.
- In other words, the returned value is what would GetSize() return if this
- window had client area of given size. Components with wxDefaultCoord
- value are left unchanged. Note that the conversion is not always
- exact, it assumes that non-client area doesn't change and so doesn't
- take into account things like menu bar (un)wrapping or (dis)appearance
- of the scrollbars.
- @since 2.8.8
- @see WindowToClientSize()
- */
- virtual wxSize ClientToWindowSize(const wxSize& size) const;
- /**
- Converts window size @a size to corresponding client area size
- In other words, the returned value is what would GetClientSize() return if
- this window had given window size. Components with wxDefaultCoord value
- are left unchanged.
- Note that the conversion is not always exact, it assumes that
- non-client area doesn't change and so doesn't take into account things
- like menu bar (un)wrapping or (dis)appearance of the scrollbars.
- @since 2.8.8
- @see ClientToWindowSize()
- */
- virtual wxSize WindowToClientSize(const wxSize& size) const;
- /**
- Sizes the window so that it fits around its subwindows.
- This function won't do anything if there are no subwindows and will only really
- work correctly if sizers are used for the subwindows layout.
- Also, if the window has exactly one subwindow it is better (faster and the result
- is more precise as Fit() adds some margin to account for fuzziness of its calculations)
- to call:
- @code
- window->SetClientSize(child->GetSize());
- @endcode
- instead of calling Fit().
- @see @ref overview_windowsizing
- */
- virtual void Fit();
- /**
- Similar to Fit(), but sizes the interior (virtual) size of a window.
- Mainly useful with scrolled windows to reset scrollbars after sizing
- changes that do not trigger a size event, and/or scrolled windows without
- an interior sizer. This function similarly won't do anything if there are
- no subwindows.
- */
- virtual void FitInside();
- /**
- This functions returns the best acceptable minimal size for the window.
- For example, for a static control, it will be the minimal size such that the
- control label is not truncated. For windows containing subwindows (typically
- wxPanel), the size returned by this function will be the same as the size
- the window would have had after calling Fit().
- Override virtual DoGetBestSize() or, better, because it's usually more
- convenient, DoGetBestClientSize() when writing your own custom window
- class to change the value returned by this public non-virtual method.
- Notice that the best size respects the minimal and maximal size
- explicitly set for the window, if any. So even if some window believes
- that it needs 200 pixels horizontally, calling SetMaxSize() with a
- width of 100 would ensure that GetBestSize() returns the width of at
- most 100 pixels.
- @see CacheBestSize(), @ref overview_windowsizing
- */
- wxSize GetBestSize() const;
- /**
- Returns the best height needed by this window if it had the given width.
- @see DoGetBestClientHeight()
- @since 2.9.4
- */
- int GetBestHeight(int width) const;
- /**
- Returns the best width needed by this window if it had the given height.
- @see DoGetBestClientWidth()
- @since 2.9.4
- */
- int GetBestWidth(int height) const;
- /**
- Returns the size of the window 'client area' in pixels.
- The client area is the area which may be drawn on by the programmer,
- excluding title bar, border, scrollbars, etc.
- Note that if this window is a top-level one and it is currently minimized, the
- return size is empty (both width and height are 0).
- @beginWxPerlOnly
- In wxPerl this method takes no parameters and returns
- a 2-element list (width, height).
- @endWxPerlOnly
- @see GetSize(), GetVirtualSize()
- */
- void GetClientSize(int* width, int* height) const;
- /**
- @overload
- */
- wxSize GetClientSize() const;
- /**
- Merges the window's best size into the min size and returns the result.
- This is the value used by sizers to determine the appropriate
- amount of space to allocate for the widget.
- This is the method called by a wxSizer when it queries the size
- of a window or control.
- @see GetBestSize(), SetInitialSize(), @ref overview_windowsizing
- */
- virtual wxSize GetEffectiveMinSize() const;
- /**
- Returns the maximum size of window's client area.
- This is an indication to the sizer layout mechanism that this is the maximum
- possible size as well as the upper bound on window's size settable using
- SetClientSize().
- @see GetMaxSize(), @ref overview_windowsizing
- */
- virtual wxSize GetMaxClientSize() const;
- /**
- Returns the maximum size of the window.
- This is an indication to the sizer layout mechanism that this is the maximum
- possible size as well as the upper bound on window's size settable using SetSize().
- @see GetMaxClientSize(), @ref overview_windowsizing
- */
- virtual wxSize GetMaxSize() const;
- /**
- Returns the minimum size of window's client area, an indication to the sizer
- layout mechanism that this is the minimum required size of its client area.
- It normally just returns the value set by SetMinClientSize(), but it can be
- overridden to do the calculation on demand.
- @see GetMinSize(), @ref overview_windowsizing
- */
- virtual wxSize GetMinClientSize() const;
- /**
- Returns the minimum size of the window, an indication to the sizer layout
- mechanism that this is the minimum required size.
- This method normally just returns the value set by SetMinSize(), but it
- can be overridden to do the calculation on demand.
- @see GetMinClientSize(), @ref overview_windowsizing
- */
- virtual wxSize GetMinSize() const;
- /**
- Returns the horizontal component of window minimal size.
- The returned value is wxDefaultCoord if the minimal width was not set.
- @see GetMinSize()
- */
- int GetMinWidth() const;
- /**
- Returns the vertical component of window minimal size.
- The returned value is wxDefaultCoord if the minimal height was not set.
- @see GetMinSize()
- */
- int GetMinHeight() const;
- /**
- Returns the horizontal component of window maximal size.
- The returned value is wxDefaultCoord if the maximal width was not set.
- @see GetMaxSize()
- */
- int GetMaxWidth() const;
- /**
- Returns the vertical component of window maximal size.
- The returned value is wxDefaultCoord if the maximal width was not set.
- @see GetMaxSize()
- */
- int GetMaxHeight() const;
- /**
- Returns the size of the entire window in pixels, including title bar, border,
- scrollbars, etc.
- Note that if this window is a top-level one and it is currently minimized, the
- returned size is the restored window size, not the size of the window icon.
- @param width
- Receives the window width.
- @param height
- Receives the window height.
- @beginWxPerlOnly
- In wxPerl this method is implemented as GetSizeWH() returning
- a 2-element list (width, height).
- @endWxPerlOnly
- @see GetClientSize(), GetVirtualSize(), @ref overview_windowsizing
- */
- void GetSize(int* width, int* height) const;
- /**
- See the GetSize(int*,int*) overload for more info.
- */
- wxSize GetSize() const;
- /**
- This gets the virtual size of the window in pixels.
- By default it returns the client size of the window, but after a call to
- SetVirtualSize() it will return the size set with that method.
- @see @ref overview_windowsizing
- */
- wxSize GetVirtualSize() const;
- /**
- Like the other GetVirtualSize() overload but uses pointers instead.
- @param width
- Receives the window virtual width.
- @param height
- Receives the window virtual height.
- */
- void GetVirtualSize(int* width, int* height) const;
- /**
- Return the largest of ClientSize and BestSize (as determined
- by a sizer, interior children, or other means)
- */
- virtual wxSize GetBestVirtualSize() const;
- /**
- Returns the magnification of the backing store of this window, eg 2.0
- for a window on a retina screen.
- @since 2.9.5
- */
- virtual double GetContentScaleFactor() const;
-
- /**
- Returns the size of the left/right and top/bottom borders of this window in x
- and y components of the result respectively.
- */
- virtual wxSize GetWindowBorderSize() const;
- /**
- wxSizer and friends use this to give a chance to a component to recalc
- its min size once one of the final size components is known. Override
- this function when that is useful (such as for wxStaticText which can
- stretch over several lines). Parameter availableOtherDir
- tells the item how much more space there is available in the opposite
- direction (-1 if unknown).
- */
- virtual bool
- InformFirstDirection(int direction,
- int size,
- int availableOtherDir);
-
- /**
- Resets the cached best size value so it will be recalculated the next time it
- is needed.
- @see CacheBestSize()
- */
- void InvalidateBestSize();
- /**
- Posts a size event to the window.
- This is the same as SendSizeEvent() with @c wxSEND_EVENT_POST argument.
- */
- void PostSizeEvent();
- /**
- Posts a size event to the parent of this window.
- This is the same as SendSizeEventToParent() with @c wxSEND_EVENT_POST
- argument.
- */
- void PostSizeEventToParent();
- /**
- This function sends a dummy @ref wxSizeEvent "size event" to
- the window allowing it to re-layout its children positions.
- It is sometimes useful to call this function after adding or deleting a
- children after the frame creation or if a child size changes. Note that
- if the frame is using either sizers or constraints for the children
- layout, it is enough to call wxWindow::Layout() directly and this
- function should not be used in this case.
- If @a flags includes @c wxSEND_EVENT_POST value, this function posts
- the event, i.e. schedules it for later processing, instead of
- dispatching it directly. You can also use PostSizeEvent() as a more
- readable equivalent of calling this function with this flag.
- @param flags
- May include @c wxSEND_EVENT_POST. Default value is 0.
- */
- virtual void SendSizeEvent(int flags = 0);
- /**
- Safe wrapper for GetParent()->SendSizeEvent().
- This function simply checks that the window has a valid parent which is
- not in process of being deleted and calls SendSizeEvent() on it. It is
- used internally by windows such as toolbars changes to whose state
- should result in parent re-layout (e.g. when a toolbar is added to the
- top of the window, all the other windows must be shifted down).
- @see PostSizeEventToParent()
- @param flags
- See description of this parameter in SendSizeEvent() documentation.
- */
- void SendSizeEventToParent(int flags = 0);
- /**
- This sets the size of the window client area in pixels.
- Using this function to size a window tends to be more device-independent
- than SetSize(), since the application need not worry about what dimensions
- the border or title bar have when trying to fit the window around panel
- items, for example.
- @see @ref overview_windowsizing
- */
- void SetClientSize(int width, int height);
- /**
- @overload
- */
- void SetClientSize(const wxSize& size);
- /**
- @overload
- */
- void SetClientSize(const wxRect& rect);
- /**
- This normally does not need to be called by user code.
- It is called when a window is added to a sizer, and is used so the window
- can remove itself from the sizer when it is destroyed.
- */
- void SetContainingSizer(wxSizer* sizer);
- /**
- A @e smart SetSize that will fill in default size components with the
- window's @e best size values.
- Also sets the window's minsize to the value passed in for use with sizers.
- This means that if a full or partial size is passed to this function then
- the sizers will use that size instead of the results of GetBestSize() to
- determine the minimum needs of the window for layout.
- Most controls will use this to set their initial size, and their min
- size to the passed in value (if any.)
- @see SetSize(), GetBestSize(), GetEffectiveMinSize(),
- @ref overview_windowsizing
- */
- void SetInitialSize(const wxSize& size = wxDefaultSize);
- /**
- Sets the maximum client size of the window, to indicate to the sizer
- layout mechanism that this is the maximum possible size of its client area.
- Note that this method is just a shortcut for:
- @code
- SetMaxSize(ClientToWindowSize(size));
- @endcode
- @see SetMaxSize(), @ref overview_windowsizing
- */
- virtual void SetMaxClientSize(const wxSize& size);
- /**
- Sets the maximum size of the window, to indicate to the sizer layout mechanism
- that this is the maximum possible size.
- @see SetMaxClientSize(), @ref overview_windowsizing
- */
- virtual void SetMaxSize(const wxSize& size);
- /**
- Sets the minimum client size of the window, to indicate to the sizer
- layout mechanism that this is the minimum required size of window's client
- area.
- You may need to call this if you change the window size after
- construction and before adding to its parent sizer.
- Note, that just as with SetMinSize(), calling this method doesn't
- prevent the program from explicitly making the window smaller than the
- specified size.
- Note that this method is just a shortcut for:
- @code
- SetMinSize(ClientToWindowSize(size));
- @endcode
- @see SetMinSize(), @ref overview_windowsizing
- */
- virtual void SetMinClientSize(const wxSize& size);
- /**
- Sets the minimum size of the window, to indicate to the sizer layout
- mechanism that this is the minimum required size.
- You may need to call this if you change the window size after
- construction and before adding to its parent sizer.
- Notice that calling this method doesn't prevent the program from making
- the window explicitly smaller than the specified size by calling
- SetSize(), it just ensures that it won't become smaller than this size
- during the automatic layout.
- @see SetMinClientSize(), @ref overview_windowsizing
- */
- virtual void SetMinSize(const wxSize& size);
- /**
- Sets the size of the window in pixels.
- @param x
- Required x position in pixels, or wxDefaultCoord to indicate that the
- existing value should be used.
- @param y
- Required y position in pixels, or wxDefaultCoord to indicate that the
- existing value should be used.
- @param width
- Required width in pixels, or wxDefaultCoord to indicate that the existing
- value should be used.
- @param height
- Required height position in pixels, or wxDefaultCoord to indicate that the
- existing value should be used.
- @param sizeFlags
- Indicates the interpretation of other parameters.
- It is a bit list of the following:
- - @c wxSIZE_AUTO_WIDTH: a wxDefaultCoord width value is taken to indicate
- a wxWidgets-supplied default width.
- - @c wxSIZE_AUTO_HEIGHT: a wxDefaultCoord height value is taken to indicate
- a wxWidgets-supplied default height.
- - @c wxSIZE_AUTO: wxDefaultCoord size values are taken to indicate
- a wxWidgets-supplied default size.
- - @c wxSIZE_USE_EXISTING: existing dimensions should be used
- if wxDefaultCoord values are supplied.
- - @c wxSIZE_ALLOW_MINUS_ONE: allow negative dimensions (i.e. value of
- wxDefaultCoord) to be interpreted as real
- dimensions, not default values.
- - @c wxSIZE_FORCE: normally, if the position and the size of the window are
- already the same as the parameters of this function,
- nothing is done. but with this flag a window resize may
- be forced even in this case (supported in wx 2.6.2 and
- later and only implemented for MSW and ignored elsewhere
- currently).
- @remarks This overload sets the position and optionally size, of the window.
- Parameters may be wxDefaultCoord to indicate either that a default
- should be supplied by wxWidgets, or that the current value of the
- dimension should be used.
- @see Move(), @ref overview_windowsizing
- */
- void SetSize(int x, int y, int width, int height,
- int sizeFlags = wxSIZE_AUTO);
- /**
- Sets the size of the window in pixels.
- The size is specified using a wxRect, wxSize or by a couple of @c int objects.
- @remarks This form must be used with non-default width and height values.
- @see Move(), @ref overview_windowsizing
- */
- void SetSize(const wxRect& rect);
- /**
- @overload
- */
- void SetSize(const wxSize& size);
- /**
- @overload
- */
- void SetSize(int width, int height);
- /**
- Use of this function for windows which are not toplevel windows
- (such as wxDialog or wxFrame) is discouraged.
- Please use SetMinSize() and SetMaxSize() instead.
- @see wxTopLevelWindow::SetSizeHints, @ref overview_windowsizing
- */
- virtual void SetSizeHints( const wxSize& minSize,
- const wxSize& maxSize=wxDefaultSize,
- const wxSize& incSize=wxDefaultSize);
- /**
- @overload
- */
- virtual void SetSizeHints( int minW, int minH,
- int maxW = -1, int maxH = -1,
- int incW = -1, int incH = -1 );
- /**
- Sets the virtual size of the window in pixels.
- @see @ref overview_windowsizing
- */
- void SetVirtualSize(int width, int height);
- /**
- @overload
- */
- void SetVirtualSize(const wxSize& size);
- //@}
- /**
- @name Positioning functions
- */
- //@{
- /**
- A synonym for Centre().
- */
- void Center(int dir = wxBOTH);
- /**
- A synonym for CentreOnParent().
- */
- void CenterOnParent(int dir = wxBOTH);
- /**
- Centres the window.
- @param direction
- Specifies the direction for the centring. May be wxHORIZONTAL, wxVERTICAL
- or wxBOTH. It may also include the wxCENTRE_ON_SCREEN flag
- if you want to centre the window on the entire screen and not on its
- parent window.
- @remarks If the window is a top level one (i.e. doesn't have a parent),
- it will be centred relative to the screen anyhow.
- @see Center()
- */
- void Centre(int direction = wxBOTH);
- /**
- Centres the window on its parent. This is a more readable synonym for Centre().
- @param direction
- Specifies the direction for the centring. May be wxHORIZONTAL, wxVERTICAL
- or wxBOTH.
- @remarks This methods provides for a way to centre top level windows over
- their parents instead of the entire screen. If there
- is no parent or if the window is not a top level
- window, then behaviour is the same as Centre().
- @see wxTopLevelWindow::CentreOnScreen
- */
- void CentreOnParent(int direction = wxBOTH);
- /**
- This gets the position of the window in pixels, relative to the parent window
- for the child windows or relative to the display origin for the top level windows.
- @param x
- Receives the x position of the window if non-@NULL.
- @param y
- Receives the y position of the window if non-@NULL.
- @beginWxPerlOnly
- In wxPerl this method is implemented as GetPositionXY() returning
- a 2-element list (x, y).
- @endWxPerlOnly
- @see GetScreenPosition()
- */
- void GetPosition(int* x, int* y) const;
- /**
- This gets the position of the window in pixels, relative to the parent window
- for the child windows or relative to the display origin for the top level windows.
- @see GetScreenPosition()
- */
- wxPoint GetPosition() const;
- /**
- Returns the position and size of the window as a wxRect object.
- @see GetScreenRect()
- */
- wxRect GetRect() const;
- /**
- Returns the window position in screen coordinates, whether the window is a
- child window or a top level one.
- @param x
- Receives the x position of the window on the screen if non-@NULL.
- @param y
- Receives the y position of the window on the screen if non-@NULL.
- @see GetPosition()
- */
- void GetScreenPosition(int* x, int* y) const;
- /**
- Returns the window position in screen coordinates, whether the window is a
- child window or a top level one.
- @see GetPosition()
- */
- wxPoint GetScreenPosition() const;
- /**
- Returns the position and size of the window on the screen as a wxRect object.
- @see GetRect()
- */
- wxRect GetScreenRect() const;
- /**
- Get the origin of the client area of the window relative to the
- window top left corner (the client area may be shifted because of
- the borders, scrollbars, other decorations...)
- */
- virtual wxPoint GetClientAreaOrigin() const;
- /**
- Get the client rectangle in window (i.e.\ client) coordinates
- */
- wxRect GetClientRect() const;
-
- /**
- Moves the window to the given position.
- @param x
- Required x position.
- @param y
- Required y position.
- @param flags
- See SetSize() for more info about this parameter.
- @remarks Implementations of SetSize can also implicitly implement the
- Move() function, which is defined in the base wxWindow class as the call:
- @code
- SetSize(x, y, wxDefaultCoord, wxDefaultCoord, wxSIZE_USE_EXISTING);
- @endcode
- @see SetSize()
- */
- void Move(int x, int y, int flags = wxSIZE_USE_EXISTING);
- /**
- Moves the window to the given position.
- @param pt
- wxPoint object representing the position.
- @param flags
- See SetSize() for more info about this parameter.
- @remarks Implementations of SetSize() can also implicitly implement the
- Move() function, which is defined in the base wxWindow class as the call:
- @code
- SetSize(x, y, wxDefaultCoord, wxDefaultCoord, wxSIZE_USE_EXISTING);
- @endcode
- @see SetSize()
- */
- void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING);
- void SetPosition(const wxPoint& pt);
- //@}
- /**
- @name Coordinate conversion functions
- */
- //@{
- /**
- Converts to screen coordinates from coordinates relative to this window.
- @param x
- A pointer to a integer value for the x coordinate. Pass the client
- coordinate in, and a screen coordinate will be passed out.
- @param y
- A pointer to a integer value for the y coordinate. Pass the client
- coordinate in, and a screen coordinate will be passed out.
- @beginWxPerlOnly
- In wxPerl this method returns a 2-element list instead of
- modifying its parameters.
- @endWxPerlOnly
- */
- void ClientToScreen(int* x, int* y) const;
- /**
- Converts to screen coordinates from coordinates relative to this window.
- @param pt
- The client position for the second form of the function.
- */
- wxPoint ClientToScreen(const wxPoint& pt) const;
- /**
- Converts a point or size from dialog units to pixels.
- For the x dimension, the dialog units are multiplied by the average character
- width and then divided by 4.
- For the y dimension, the dialog units are multiplied by the average character
- height and then divided by 8.
- @remarks Dialog units are used for maintaining a dialog's proportions
- even if the font changes.
- You can also use these functions programmatically.
- A convenience macro is defined:
- @code
- #define wxDLG_UNIT(parent, pt) parent->ConvertDialogToPixels(pt)
- @endcode
- @see ConvertPixelsToDialog()
- */
- wxPoint ConvertDialogToPixels(const wxPoint& pt) const;
- /**
- @overload
- */
- wxSize ConvertDialogToPixels(const wxSize& sz) const;
- /**
- Converts a point or size from pixels to dialog units.
- For the x dimension, the pixels are multiplied by 4 and then divided by the
- average character width.
- For the y dimension, the pixels are multiplied by 8 and then divided by the
- average character height.
- @remarks Dialog units are used for maintaining a dialog's proportions
- even if the font changes.
- @see ConvertDialogToPixels()
- */
- wxPoint ConvertPixelsToDialog(const wxPoint& pt) const;
- /**
- @overload
- */
- wxSize ConvertPixelsToDialog(const wxSize& sz) const;
- /**
- Converts from screen to client window coordinates.
- @param x
- Stores the screen x coordinate and receives the client x coordinate.
- @param y
- Stores the screen x coordinate and receives the client x coordinate.
- */
- void ScreenToClient(int* x, int* y) const;
- /**
- Converts from screen to client window coordinates.
- @param pt
- The screen position.
- */
- wxPoint ScreenToClient(const wxPoint& pt) const;
- //@}
- /**
- @name Drawing-related functions
- */
- //@{
- /**
- Clears the window by filling it with the current background colour.
- Does not cause an erase background event to be generated.
- Notice that this uses wxClientDC to draw on the window and the results
- of doing it while also drawing on wxPaintDC for this window are
- undefined. Hence this method shouldn't be used from EVT_PAINT handlers,
- just use wxDC::Clear() on the wxPaintDC you already use there instead.
- */
- virtual void ClearBackground();
- /**
- Freezes the window or, in other words, prevents any updates from taking
- place on screen, the window is not redrawn at all.
- Thaw() must be called to reenable window redrawing. Calls to these two
- functions may be nested but to ensure that the window is properly
- repainted again, you must thaw it exactly as many times as you froze it.
- If the window has any children, they are recursively frozen too.
- This method is useful for visual appearance optimization (for example,
- it is a good idea to use it before doing many large text insertions in
- a row into a wxTextCtrl under wxGTK) but is not implemented on all
- platforms nor for all controls so it is mostly just a hint to wxWidgets
- and not a mandatory directive.
- @see wxWindowUpdateLocker, Thaw(), IsFrozen()
- */
- void Freeze();
- /**
- Re-enables window updating after a previous call to Freeze().
- To really thaw the control, it must be called exactly the same number
- of times as Freeze().
- If the window has any children, they are recursively thawed too.
- @see wxWindowUpdateLocker, Freeze(), IsFrozen()
- */
- void Thaw();
- /**
- Returns @true if the window is currently frozen by a call to Freeze().
- @see Freeze(), Thaw()
- */
- bool IsFrozen() const;
- /**
- Returns the background colour of the window.
- @see SetBackgroundColour(), SetForegroundColour(), GetForegroundColour()
- */
- wxColour GetBackgroundColour() const;
- /**
- Returns the background style of the window.
- @see SetBackgroundColour(), GetForegroundColour(),
- SetBackgroundStyle(), SetTransparent()
- */
- virtual wxBackgroundStyle GetBackgroundStyle() const;
- /**
- Returns the character height for this window.
- */
- virtual int GetCharHeight() const;
- /**
- Returns the average character width for this window.
- */
- virtual int GetCharWidth() const;
- /**
- Currently this is the same as calling
- wxWindow::GetClassDefaultAttributes(wxWindow::GetWindowVariant()).
- One advantage of using this function compared to the static version is that
- the call is automatically dispatched to the correct class (as usual with
- virtual functions) and you don't have to specify the class name explicitly.
- The other one is that in the future this function could return different
- results, for example it might return a different font for an "Ok" button
- than for a generic button if the users GUI is configured to show such buttons
- in bold font. Of course, the down side is that it is impossible to call this
- function without actually having an object to apply it to whereas the static
- version can be used without having to create an object first.
- */
- virtual wxVisualAttributes GetDefaultAttributes() const;
- /**
- Returns the font for this window.
- @see SetFont()
- */
- wxFont GetFont() const;
- /**
- Returns the foreground colour of the window.
- @remarks The meaning of foreground colour varies according to the window class;
- it may be the text colour or other colour, or it may not be used at all.
- @see SetForegroundColour(), SetBackgroundColour(),
- GetBackgroundColour()
- */
- wxColour GetForegroundColour() const;
- /**
- Gets the dimensions of the string as it would be drawn on the
- window with the currently selected font.
- The text extent is returned in the @a w and @a h pointers.
- @param string
- String whose extent is to be measured.
- @param w
- Return value for width.
- @param h
- Return value for height.
- @param descent
- Return value for descent (optional).
- @param externalLeading
- Return value for external leading (optional).
- @param font
- Font to use instead of the current window font (optional).
- @beginWxPerlOnly
- In wxPerl this method takes only the @a string and optionally
- @a font parameters, and returns a 4-element list
- (x, y, descent, externalLeading).
- @endWxPerlOnly
- */
- void GetTextExtent(const wxString& string,
- int* w, int* h,
- int* descent = NULL,
- int* externalLeading = NULL,
- const wxFont* font = NULL) const;
- /**
- Gets the dimensions of the string as it would be drawn on the
- window with the currently selected font.
- */
- wxSize GetTextExtent(const wxString& string) const;
- /**
- Returns the region specifying which parts of the window have been damaged.
- Should only be called within an wxPaintEvent handler.
- @see wxRegion, wxRegionIterator
- */
- const wxRegion& GetUpdateRegion() const;
- /**
- Get the update rectangle bounding box in client coords
- */
- wxRect GetUpdateClientRect() const;
- /**
- Returns @true if this window background is transparent (as, for example,
- for wxStaticText) and should show the parent window background.
- This method is mostly used internally by the library itself and you normally
- shouldn't have to call it. You may, however, have to override it in your
- wxWindow-derived class to ensure that background is painted correctly.
- */
- virtual bool HasTransparentBackground();
- /**
- Causes this window, and all of its children recursively (except under wxGTK1
- where this is not implemented), to be repainted. Note that repainting doesn't
- happen immediately but only during the next event loop iteration, if you need
- to update the window immediately you should use Update() instead.
- @param eraseBackground
- If @true, the background will be erased.
- @param rect
- If non-@NULL, only the given rectangle will be treated as damaged.
- @see RefreshRect()
- */
- virtual void Refresh(bool eraseBackground = true,
- const wxRect* rect = NULL);
- /**
- Redraws the contents of the given rectangle: only the area inside it will be
- repainted.
- This is the same as Refresh() but has a nicer syntax as it can be called
- with a temporary wxRect object as argument like this @c RefreshRect(wxRect(x, y, w, h)).
- */
- void RefreshRect(const wxRect& rect, bool eraseBackground = true);
- /**
- Calling this method immediately repaints the invalidated area of the window and
- all of its children recursively (this normally only happens when the
- flow of control returns to the event loop).
- Notice that this function doesn't invalidate any area of the window so
- nothing happens if nothing has been invalidated (i.e. marked as requiring
- a redraw). Use Refresh() first if you want to immediately redraw the
- window unconditionally.
- */
- virtual void Update();
- /**
- Sets the background colour of the window.
- Notice that as with SetForegroundColour(), setting the background
- colour of a native control may not affect the entire control and could
- be not supported at all depending on the control and platform.
- Please see InheritAttributes() for explanation of the difference between
- this method and SetOwnBackgroundColour().
- @param colour
- The colour to be used as the background colour; pass
- wxNullColour to reset to the default colour.
- Note that you may want to use wxSystemSettings::GetColour() to retrieve
- a suitable colour to use rather than setting an hard-coded one.
- @remarks The background colour is usually painted by the default
- wxEraseEvent event handler function under Windows and
- automatically under GTK.
- Note that setting the background colour does not cause an
- immediate refresh, so you may wish to call wxWindow::ClearBackground
- or wxWindow::Refresh after calling this function.
- Using this function will disable attempts to use themes for
- this window, if the system supports them. Use with care since
- usually the themes represent the appearance chosen by the user
- to be used for all applications on the system.
- @return @true if the colour was really changed, @false if it was already set
- to this colour and nothing was done.
- @see GetBackgroundColour(), SetForegroundColour(),
- GetForegroundColour(), ClearBackground(),
- Refresh(), wxEraseEvent, wxSystemSettings
- */
- virtual bool SetBackgroundColour(const wxColour& colour);
- /**
- Sets the background style of the window.
- The default background style is @c wxBG_STYLE_ERASE which indicates that
- the window background may be erased in @c EVT_ERASE_BACKGROUND handler.
- This is a safe, compatibility default; however you may want to change it
- to @c wxBG_STYLE_SYSTEM if you don't define any erase background event
- handlers at all, to avoid unnecessary generation of erase background
- events and always let system erase the background. And you should
- change the background style to @c wxBG_STYLE_PAINT if you define an
- @c EVT_PAINT handler which completely overwrites the window background as
- in this case erasing it previously, either in @c EVT_ERASE_BACKGROUND
- handler or in the system default handler, would result in flicker as
- the background pixels will be repainted twice every time the window is
- redrawn. Do ensure that the background is entirely erased by your
- @c EVT_PAINT handler in this case however as otherwise garbage may be left
- on screen.
- Notice that in previous versions of wxWidgets a common way to work
- around the above mentioned flickering problem was to define an empty
- @c EVT_ERASE_BACKGROUND handler. Setting background style to
- @c wxBG_STYLE_PAINT is a simpler and more efficient solution to the same
- problem.
- Under wxGTK and wxOSX, you can use ::wxBG_STYLE_TRANSPARENT to obtain
- full transparency of the window background. Note that wxGTK supports
- this only since GTK 2.12 with a compositing manager enabled, call
- IsTransparentBackgroundSupported() to check whether this is the case.
- Also, on order for @c SetBackgroundStyle(wxBG_STYLE_TRANSPARENT) to
- work, it must be called before Create(). If you're using your own
- wxWindow-derived class you should write your code in the following way:
- @code
- class MyWidget : public wxWindow
- {
- public:
- MyWidget(wxWindow* parent, ...)
- : wxWindow() // Use default ctor here!
- {
- // Do this first:
- SetBackgroundStyle(wxBG_STYLE_TRANSPARENT);
- // And really create the window afterwards:
- Create(parent, ...);
- }
- };
- @endcode
- @see SetBackgroundColour(), GetForegroundColour(),
- SetTransparent(), IsTransparentBackgroundSupported()
- */
- virtual bool SetBackgroundStyle(wxBackgroundStyle style);
- /**
- Checks whether using transparent background might work.
- If this function returns @false, calling SetBackgroundStyle() with
- ::wxBG_STYLE_TRANSPARENT is not going to work. If it returns @true,
- setting transparent style should normally succeed.
- Notice that this function would typically be called on the parent of a
- window you want to set transparent background style for as the window
- for which this method is called must be fully created.
- @param reason
- If not @NULL, a reason message is provided if transparency is not
- supported.
- @return @true if background transparency is supported.
- @since 2.9.4
- */
- virtual bool IsTransparentBackgroundSupported(wxString *reason = NULL) const;
- /**
- Sets the font for this window. This function should not be called for the
- parent window if you don't want its font to be inherited by its children,
- use SetOwnFont() instead in this case and see InheritAttributes() for more
- explanations.
- Please notice that the given font is not automatically used for
- wxPaintDC objects associated with this window, you need to
- call wxDC::SetFont too. However this font is used by
- any standard controls for drawing their text as well as by
- GetTextExtent().
- @param font
- Font to associate with this window, pass
- wxNullFont to reset to the default font.
- @return @true if the font was really changed, @false if it was already set
- to this font and nothing was done.
- @see GetFont(), InheritAttributes()
- */
- virtual bool SetFont(const wxFont& font);
- /**
- Sets the foreground colour of the window.
- The meaning of foreground colour varies according to the window class;
- it may be the text colour or other colour, or it may not be used at
- all. Additionally, not all native controls support changing their
- foreground colour so this method may change their colour only partially
- or even not at all.
- Please see InheritAttributes() for explanation of the difference between
- this method and SetOwnForegroundColour().
- @param colour
- The colour to be used as the foreground colour; pass
- wxNullColour to reset to the default colour.
- @return @true if the colour was really changed, @false if it was already set
- to this colour and nothing was done.
- @see GetForegroundColour(), SetBackgroundColour(),
- GetBackgroundColour(), ShouldInheritColours()
- */
- virtual bool SetForegroundColour(const wxColour& colour);
- /**
- Sets the background colour of the window but prevents it from being inherited
- by the children of this window.
- @see SetBackgroundColour(), InheritAttributes()
- */
- void SetOwnBackgroundColour(const wxColour& colour);
- /**
- Return @true if this window inherits the background colour from its parent.
- @see SetOwnBackgroundColour(), InheritAttributes()
- */
- bool InheritsBackgroundColour() const;
- /**
- Return @true if a background colour has been set for this window.
- */
- bool UseBgCol() const;
- /**
- Sets the font of the window but prevents it from being inherited by the
- children of this window.
- @see SetFont(), InheritAttributes()
- */
- void SetOwnFont(const wxFont& font);
- /**
- Sets the foreground colour of the window but prevents it from being inherited
- by the children of this window.
- @see SetForegroundColour(), InheritAttributes()
- */
- void SetOwnForegroundColour(const wxColour& colour);
- /**
- @deprecated use wxDC::SetPalette instead.
- */
- void SetPalette(const wxPalette& pal);
- /**
- Return @true from here to allow the colours of this window to be changed by
- InheritAttributes(). Returning @false forbids inheriting them from the parent window.
- The base class version returns @false, but this method is overridden in
- wxControl where it returns @true.
- */
- virtual bool ShouldInheritColours() const;
- /**
- This function tells a window if it should use the system's "theme" code
- to draw the windows' background instead of its own background drawing
- code. This does not always have any effect since the underlying platform
- obviously needs to support the notion of themes in user defined windows.
- One such platform is GTK+ where windows can have (very colourful) backgrounds
- defined by a user's selected theme.
- Dialogs, notebook pages and the status bar have this flag set to @true
- by default so that the default look and feel is simulated best.
- */
- virtual void SetThemeEnabled(bool enable);
- /**
- */
- virtual bool GetThemeEnabled() const;
- /**
- Returns @true if the system supports transparent windows and calling
- SetTransparent() may succeed. If this function returns @false, transparent
- windows are definitely not supported by the current system.
- */
- virtual bool CanSetTransparent();
- /**
- Set the transparency of the window. If the system supports transparent windows,
- returns @true, otherwise returns @false and the window remains fully opaque.
- See also CanSetTransparent().
- The parameter @a alpha is in the range 0..255 where 0 corresponds to a
- fully transparent window and 255 to the fully opaque one. The constants
- @c wxIMAGE_ALPHA_TRANSPARENT and @c wxIMAGE_ALPHA_OPAQUE can be used.
- */
- virtual bool SetTransparent(wxByte alpha);
- //@}
- /**
- @name Event-handling functions
- wxWindow allows you to build a (sort of) stack of event handlers which
- can be used to override the window's own event handling.
- */
- //@{
- /**
- Returns the event handler for this window.
- By default, the window is its own event handler.
- @see SetEventHandler(), PushEventHandler(),
- PopEventHandler(), wxEvtHandler::ProcessEvent, wxEvtHandler
- */
- wxEvtHandler* GetEventHandler() const;
- /**
- This function will generate the appropriate call to Navigate() if the key
- event is one normally used for keyboard navigation and return @true in this case.
- @return Returns @true if the key pressed was for navigation and was
- handled, @false otherwise.
- @see Navigate()
- */
- bool HandleAsNavigationKey(const wxKeyEvent& event);
- /**
- Shorthand for:
- @code
- GetEventHandler()->SafelyProcessEvent(event);
- @endcode
- @see ProcessWindowEvent()
- */
- bool HandleWindowEvent(wxEvent& event) const;
- /**
- Convenient wrapper for ProcessEvent().
- This is the same as writing @code GetEventHandler()->ProcessEvent(event);
- @endcode but more convenient. Notice that ProcessEvent() itself can't
- be called for wxWindow objects as it ignores the event handlers
- associated with the window; use this function instead.
- */
- bool ProcessWindowEvent(wxEvent& event);
- /**
- Wrapper for wxEvtHandler::ProcessEventLocally().
- This method is similar to ProcessWindowEvent() but can be used to
- search for the event handler only in this window and any event handlers
- pushed on top of it. Unlike ProcessWindowEvent() it won't propagate the
- event upwards. But it will use the validator and event handlers
- associated with this window, if any.
- @since 2.9.1
- */
- bool ProcessWindowEventLocally(wxEvent& event);
- /**
- Removes and returns the top-most event handler on the event handler stack.
- E.g. in the case of:
- @image html overview_events_winstack.png
- when calling @c W->PopEventHandler(), the event handler @c A will be
- removed and @c B will be the first handler of the stack.
- Note that it's an error to call this function when no event handlers
- were pushed on this window (i.e. when the window itself is its only
- event handler).
- @param deleteHandler
- If this is @true, the handler will be deleted after it is removed
- (and the returned value will be @NULL).
- @see @ref overview_events_processing
- */
- wxEvtHandler* PopEventHandler(bool deleteHandler = false);
- /**
- Pushes this event handler onto the event stack for the window.
- An event handler is an object that is capable of processing the events sent
- to a window. By default, the window is its own event handler, but an application
- may wish to substitute another, for example to allow central implementation
- of event-handling for a variety of different window classes.
- wxWindow::PushEventHandler allows an application to set up a @e stack
- of event handlers, where an event not handled by one event handler is
- handed to the next one in the chain.
- E.g. if you have two event handlers @c A and @c B and a wxWindow instance
- @c W and you call:
- @code
- W->PushEventHandler(A);
- W->PushEventHandler(B);
- @endcode
- you will end up with the following situation:
- @image html overview_events_winstack.png
- Note that you can use wxWindow::PopEventHandler to remove the event handler.
- @param handler
- Specifies the handler to be pushed.
- It must not be part of a wxEvtHandler chain; an assert will fail
- if it's not unlinked (see wxEvtHandler::IsUnlinked).
- @see @ref overview_events_processing
- */
- void PushEventHandler(wxEvtHandler* handler);
- /**
- Find the given @a handler in the windows event handler stack and
- removes (but does not delete) it from the stack.
- See wxEvtHandler::Unlink() for more info.
- @param handler
- The event handler to remove, must be non-@NULL and
- must be present in this windows event handlers stack.
- @return Returns @true if it was found and @false otherwise (this also
- results in an assert failure so this function should
- only be called when the handler is supposed to be there).
- @see PushEventHandler(), PopEventHandler()
- */
- bool RemoveEventHandler(wxEvtHandler* handler);
- /**
- Sets the event handler for this window.
- Note that if you use this function you may want to use as the "next" handler
- of @a handler the window itself; in this way when @a handler doesn't process
- an event, the window itself will have a chance to do it.
- @param handler
- Specifies the handler to be set. Cannot be @NULL.
- @see @ref overview_events_processing
- */
- void SetEventHandler(wxEvtHandler* handler);
- /**
- wxWindows cannot be used to form event handler chains; this function
- thus will assert when called.
- Note that instead you can use PushEventHandler() or SetEventHandler() to
- implement a stack of event handlers to override wxWindow's own
- event handling mechanism.
- */
- virtual void SetNextHandler(wxEvtHandler* handler);
- /**
- wxWindows cannot be used to form event handler chains; this function
- thus will assert when called.
- Note that instead you can use PushEventHandler() or SetEventHandler() to
- implement a stack of event handlers to override wxWindow's own
- event handling mechanism.
- */
- virtual void SetPreviousHandler(wxEvtHandler* handler);
- //@}
- /**
- @name Window styles functions
- */
- //@{
- /**
- Returns the extra style bits for the window.
- */
- long GetExtraStyle() const;
- /**
- Gets the window style that was passed to the constructor or Create()
- method. GetWindowStyle() is another name for the same function.
- */
- virtual long GetWindowStyleFlag() const;
- /**
- See GetWindowStyleFlag() for more info.
- */
- long GetWindowStyle() const;
- /**
- Returns @true if the window has the given @a exFlag bit set in its
- extra styles.
- @see SetExtraStyle()
- */
- bool HasExtraStyle(int exFlag) const;
- /**
- Returns @true if the window has the given @a flag bit set.
- */
- bool HasFlag(int flag) const;
- /**
- Sets the extra style bits for the window.
- The currently defined extra style bits are reported in the class
- description.
- */
- virtual void SetExtraStyle(long exStyle);
- /**
- Sets the style of the window. Please note that some styles cannot be changed
- after the window creation and that Refresh() might need to be called
- after changing the others for the change to take place immediately.
- See @ref overview_windowstyles "Window styles" for more information about flags.
- @see GetWindowStyleFlag()
- */
- virtual void SetWindowStyleFlag(long style);
- /**
- See SetWindowStyleFlag() for more info.
- */
- void SetWindowStyle(long style);
- /**
- Turns the given @a flag on if it's currently turned off and vice versa.
- This function cannot be used if the value of the flag is 0 (which is often
- the case for default flags).
- Also, please notice that not all styles can be changed after the control
- creation.
- @return Returns @true if the style was turned on by this function, @false
- if it was switched off.
- @see SetWindowStyleFlag(), HasFlag()
- */
- bool ToggleWindowStyle(int flag);
- //@}
- /**
- @name Tab order functions
- */
- //@{
- /**
- Moves this window in the tab navigation order after the specified @e win.
- This means that when the user presses @c TAB key on that other window,
- the focus switches to this window.
- Default tab order is the same as creation order, this function and
- MoveBeforeInTabOrder() allow to change
- it after creating all the windows.
- @param win
- A sibling of this window which should precede it in tab order,
- must not be @NULL
- */
- void MoveAfterInTabOrder(wxWindow* win);
- /**
- Same as MoveAfterInTabOrder() except that it inserts this window just
- before @a win instead of putting it right after it.
- */
- void MoveBeforeInTabOrder(wxWindow* win);
- /**
- Performs a keyboard navigation action starting from this window.
- This method is equivalent to calling NavigateIn() method on the
- parent window.
- @param flags
- A combination of wxNavigationKeyEvent::IsForward and
- wxNavigationKeyEvent::WinChange.
- @return Returns @true if the focus was moved to another window or @false
- if nothing changed.
- @remarks You may wish to call this from a text control custom keypress
- handler to do the default navigation behaviour for the
- tab key, since the standard default behaviour for a
- multiline text control with the wxTE_PROCESS_TAB style
- is to insert a tab and not navigate to the next
- control. See also wxNavigationKeyEvent and
- HandleAsNavigationKey.
- */
- bool Navigate(int flags = wxNavigationKeyEvent::IsForward);
- /**
- Performs a keyboard navigation action inside this window.
- See Navigate() for more information.
- */
- bool NavigateIn(int flags = wxNavigationKeyEvent::IsForward);
- //@}
- /**
- @name Z order functions
- */
- //@{
- /**
- Lowers the window to the bottom of the window hierarchy (Z-order).
- @remarks
- This function only works for wxTopLevelWindow-derived classes.
- @see Raise()
- */
- virtual void Lower();
- /**
- Raises the window to the top of the window hierarchy (Z-order).
- Notice that this function only requests the window manager to raise
- this window to the top of Z-order. Depending on its configuration, the
- window manager may raise the window, not do it at all or indicate that
- a window requested to be raised in some other way, e.g. by flashing its
- icon if it is minimized.
- @remarks
- This function only works for wxTopLevelWindow-derived classes.
- @see Lower()
- */
- virtual void Raise();
- //@}
- /**
- @name Window status functions
- */
- //@{
- /**
- Equivalent to calling wxWindow::Show(@false).
- */
- bool Hide();
- /**
- This function hides a window, like Hide(), but using a special visual
- effect if possible.
- The parameters of this function are the same as for ShowWithEffect(),
- please see their description there.
- @since 2.9.0
- */
- virtual bool HideWithEffect(wxShowEffect effect,
- unsigned int timeout = 0);
- /**
- Returns @true if the window is enabled, i.e.\ if it accepts user input,
- @false otherwise.
- Notice that this method can return @false even if this window itself hadn't
- been explicitly disabled when one of its parent windows is disabled.
- To get the intrinsic status of this window, use IsThisEnabled()
- @see Enable()
- */
- bool IsEnabled() const;
- /**
- Returns @true if the given point or rectangle area has been exposed since the
- last repaint. Call this in an paint event handler to optimize redrawing by
- only redrawing those areas, which have been exposed.
- */
- bool IsExposed(int x, int y) const;
- /**
- @overload
- */
- bool IsExposed(wxPoint& pt) const;
- /**
- @overload
- */
- bool IsExposed(int x, int y, int w, int h) const;
- /**
- @overload
- */
- bool IsExposed(wxRect& rect) const;
- /**
- Returns @true if the window is shown, @false if it has been hidden.
- @see IsShownOnScreen()
- */
- virtual bool IsShown() const;
- /**
- Returns @true if the window is physically visible on the screen, i.e.\ it
- is shown and all its parents up to the toplevel window are shown as well.
- @see IsShown()
- */
- virtual bool IsShownOnScreen() const;
- /**
- Disables the window. Same as @ref Enable() Enable(@false).
- @return Returns @true if the window has been disabled, @false if it had
- been already disabled before the call to this function.
- */
- bool Disable();
- /**
- Enable or disable the window for user input. Note that when a parent window is
- disabled, all of its children are disabled as well and they are reenabled again
- when the parent is.
- @param enable
- If @true, enables the window for input. If @false, disables the window.
- @return Returns @true if the window has been enabled or disabled, @false
- if nothing was done, i.e. if the window had already
- been in the specified state.
- @see IsEnabled(), Disable(), wxRadioBox::Enable
- */
- virtual bool Enable(bool enable = true);
- /**
- Shows or hides the window. You may need to call Raise()
- for a top level window if you want to bring it to top, although this is not
- needed if Show() is called immediately after the frame creation.
- Notice that the default state of newly created top level windows is hidden
- (to allow you to create their contents without flicker) unlike for
- all the other, not derived from wxTopLevelWindow, windows that
- are by default created in the shown state.
- @param show
- If @true displays the window. Otherwise, hides it.
- @return @true if the window has been shown or hidden or @false if nothing
- was done because it already was in the requested state.
- @see IsShown(), Hide(), wxRadioBox::Show, wxShowEvent.
- */
- virtual bool Show(bool show = true);
- /**
- This function shows a window, like Show(), but using a special visual
- effect if possible.
- @param effect
- The effect to use.
- @param timeout
- The @a timeout parameter specifies the time of the animation, in
- milliseconds. If the default value of 0 is used, the default
- animation time for the current platform is used.
- @note Currently this function is only implemented in wxMSW and wxOSX
- (for wxTopLevelWindows only in Carbon version and for any kind of
- windows in Cocoa) and does the same thing as Show() in the other
- ports.
- @since 2.9.0
- @see HideWithEffect()
- */
- virtual bool ShowWithEffect(wxShowEffect effect,
- unsigned int timeout = 0);
- //@}
- /**
- @name Context-sensitive help functions
- */
- //@{
- /**
- Gets the help text to be used as context-sensitive help for this window.
- Note that the text is actually stored by the current wxHelpProvider
- implementation, and not in the window object itself.
- @see SetHelpText(), GetHelpTextAtPoint(), wxHelpProvider
- */
- wxString GetHelpText() const;
- /**
- Sets the help text to be used as context-sensitive help for this window.
- Note that the text is actually stored by the current wxHelpProvider
- implementation, and not in the window object itself.
- @see GetHelpText(), wxHelpProvider::AddHelp()
- */
- void SetHelpText(const wxString& helpText);
- /**
- Gets the help text to be used as context-sensitive help for this window.
- This method should be overridden if the help message depends on the position
- inside the window, otherwise GetHelpText() can be used.
- @param point
- Coordinates of the mouse at the moment of help event emission.
- @param origin
- Help event origin, see also wxHelpEvent::GetOrigin.
- */
- virtual wxString GetHelpTextAtPoint(const wxPoint& point,
- wxHelpEvent::Origin origin) const;
- /**
- Get the associated tooltip or @NULL if none.
- */
- wxToolTip* GetToolTip() const;
- /**
- Get the text of the associated tooltip or empty string if none.
- */
- wxString GetToolTipText() const;
- /**
- Attach a tooltip to the window.
- wxToolTip pointer can be @NULL in the overload taking the pointer,
- meaning to unset any existing tooltips; however UnsetToolTip() provides
- a more readable alternative to this operation.
- Notice that these methods are always available, even if wxWidgets was
- compiled with @c wxUSE_TOOLTIPS set to 0, but don't do anything in this
- case.
- @see GetToolTip(), wxToolTip
- */
- void SetToolTip(const wxString& tipString);
- /**
- @overload
- */
- void SetToolTip(wxToolTip* tip);
- /**
- Unset any existing tooltip.
- @since 2.9.0
- @see SetToolTip()
- */
- void UnsetToolTip();
- //@}
- /**
- @name Popup/context menu functions
- */
- //@{
- /**
- This function shows a popup menu at the given position in this window and
- returns the selected id.
- It can be more convenient than the general purpose PopupMenu() function
- for simple menus proposing a choice in a list of strings to the user.
- Notice that to avoid unexpected conflicts between the (usually
- consecutive range of) ids used by the menu passed to this function and
- the existing EVT_UPDATE_UI() handlers, this function temporarily
- disables UI updates for the window, so you need to manually disable
- (or toggle or ...) any items which should be disabled in the menu
- before showing it.
- The parameter @a menu is the menu to show.
- The parameter @a pos (or the parameters @a x and @a y) is the
- position at which to show the menu in client coordinates.
- It is recommended to not explicitly specify coordinates when
- calling this method in response to mouse click, because some of
- the ports (namely, wxGTK) can do a better job of positioning
- the menu in that case.
- @return
- The selected menu item id or @c wxID_NONE if none selected or an
- error occurred.
- @since 2.9.0
- */
- int GetPopupMenuSelectionFromUser(wxMenu& menu,
- const wxPoint& pos = wxDefaultPosition);
- /**
- @overload
- */
- int GetPopupMenuSelectionFromUser(wxMenu& menu, int x, int y);
- /**
- Pops up the given menu at the specified coordinates, relative to this
- window, and returns control when the user has dismissed the menu.
- If a menu item is selected, the corresponding menu event is generated and will be
- processed as usual. If coordinates are not specified, the current mouse
- cursor position is used.
- @a menu is the menu to pop up.
- The position where the menu will appear can be specified either as a
- wxPoint @a pos or by two integers (@a x and @a y).
- @remarks Just before the menu is popped up, wxMenu::UpdateUI is called to
- ensure that the menu items are in the correct state.
- The menu does not get deleted by the window.
- It is recommended to not explicitly specify coordinates when
- calling PopupMenu in response to mouse click, because some of
- the ports (namely, wxGTK) can do a better job of positioning
- the menu in that case.
- @see wxMenu
- */
- bool PopupMenu(wxMenu* menu,
- const wxPoint& pos = wxDefaultPosition);
- /**
- @overload
- */
- bool PopupMenu(wxMenu* menu, int x, int y);
- //@}
- /**
- Validator functions
- */
- //@{
- /**
- Returns a pointer to the current validator for the window, or @NULL if
- there is none.
- */
- virtual wxValidator* GetValidator();
- /**
- Deletes the current validator (if any) and sets the window validator, having
- called wxValidator::Clone to create a new validator of this type.
- */
- virtual void SetValidator(const wxValidator& validator);
- /**
- Transfers values from child controls to data areas specified by their
- validators. Returns @false if a transfer failed.
- If the window has @c wxWS_EX_VALIDATE_RECURSIVELY extra style flag set,
- the method will also call TransferDataFromWindow() of all child windows.
- @see TransferDataToWindow(), wxValidator, Validate()
- */
- virtual bool TransferDataFromWindow();
- /**
- Transfers values to child controls from data areas specified by their
- validators.
- If the window has @c wxWS_EX_VALIDATE_RECURSIVELY extra style flag set,
- the method will also call TransferDataToWindow() of all child windows.
- @return Returns @false if a transfer failed.
- @see TransferDataFromWindow(), wxValidator, Validate()
- */
- virtual bool TransferDataToWindow();
- /**
- Validates the current values of the child controls using their validators.
- If the window has @c wxWS_EX_VALIDATE_RECURSIVELY extra style flag set,
- the method will also call Validate() of all child windows.
- @return Returns @false if any of the validations failed.
- @see TransferDataFromWindow(), TransferDataToWindow(),
- wxValidator
- */
- virtual bool Validate();
- //@}
- /**
- @name wxWindow properties functions
- */
- //@{
- /**
- Returns the identifier of the window.
- @remarks Each window has an integer identifier. If the application
- has not provided one (or the default wxID_ANY) a unique
- identifier with a negative value will be generated.
- @see SetId(), @ref overview_windowids
- */
- wxWindowID GetId() const;
- /**
- Generic way of getting a label from any window, for
- identification purposes.
- @remarks The interpretation of this function differs from class to class.
- For frames and dialogs, the value returned is the
- title. For buttons or static text controls, it is the
- button text. This function can be useful for
- meta-programs (such as testing tools or special-needs
- access programs) which need to identify windows by name.
- */
- virtual wxString GetLabel() const;
- /**
- Returns the layout direction for this window,
- Note that @c wxLayout_Default is returned if layout direction is not supported.
- */
- virtual wxLayoutDirection GetLayoutDirection() const;
- /**
- Mirror coordinates for RTL layout if this window uses it and if the
- mirroring is not done automatically like Win32.
- */
- virtual wxCoord AdjustForLayoutDirection(wxCoord x,
- wxCoord width,
- wxCoord widthTotal) const;
- /**
- Returns the window's name.
- @remarks This name is not guaranteed to be unique; it is up to the
- programmer to supply an appropriate name in the window
- constructor or via SetName().
- @see SetName()
- */
- virtual wxString GetName() const;
- /**
- Returns the value previously passed to SetWindowVariant().
- */
- wxWindowVariant GetWindowVariant() const;
- /**
- Sets the identifier of the window.
- @remarks Each window has an integer identifier. If the application has
- not provided one, an identifier will be generated.
- Normally, the identifier should be provided on creation
- and should not be modified subsequently.
- @see GetId(), @ref overview_windowids
- */
- void SetId(wxWindowID winid);
- /**
- Sets the window's label.
- @param label
- The window label.
- @see GetLabel()
- */
- virtual void SetLabel(const wxString& label);
- /**
- Sets the layout direction for this window.
- */
- virtual void SetLayoutDirection(wxLayoutDirection dir);
- /**
- Sets the window's name.
- @param name
- A name to set for the window.
- @see GetName()
- */
- virtual void SetName(const wxString& name);
- /**
- Chooses a different variant of the window display to use.
- Window variants currently just differ in size, as can be seen from
- ::wxWindowVariant documentation. Under all platforms but OS X, this
- function does nothing more than change the font used by the window.
- However under OS X it is implemented natively and selects the
- appropriate variant of the native widget, which has better appearance
- than just scaled down or up version of the normal variant, so it should
- be preferred to directly tweaking the font size.
- By default the controls naturally use the normal variant.
- */
- void SetWindowVariant(wxWindowVariant variant);
- /**
- Gets the accelerator table for this window. See wxAcceleratorTable.
- */
- wxAcceleratorTable* GetAcceleratorTable();
- /**
- Returns the accessible object for this window, if any.
- See also wxAccessible.
- */
- wxAccessible* GetAccessible();
- /**
- Sets the accelerator table for this window. See wxAcceleratorTable.
- */
- virtual void SetAcceleratorTable(const wxAcceleratorTable& accel);
- /**
- Sets the accessible for this window. Any existing accessible for this window
- will be deleted first, if not identical to @e accessible.
- See also wxAccessible.
- */
- void SetAccessible(wxAccessible* accessible);
- //@}
- /**
- @name Window deletion functions
- */
- //@{
- /**
- This function simply generates a wxCloseEvent whose handler usually tries
- to close the window. It doesn't close the window itself, however.
- @param force
- @false if the window's close handler should be able to veto the destruction
- of this window, @true if it cannot.
- @return @true if the event was handled and not vetoed, @false otherwise.
- @remarks Close calls the close handler for the window, providing an
- opportunity for the window to choose whether to destroy
- the window. Usually it is only used with the top level
- windows (wxFrame and wxDialog classes) as the others
- are not supposed to have any special OnClose() logic.
- The close handler should check whether the window is being deleted
- forcibly, using wxCloseEvent::CanVeto, in which case it should
- destroy the window using wxWindow::Destroy.
- Note that calling Close does not guarantee that the window will
- be destroyed; but it provides a way to simulate a manual close
- of a window, which may or may not be implemented by destroying
- the window. The default implementation of wxDialog::OnCloseWindow
- does not necessarily delete the dialog, since it will simply
- simulate an wxID_CANCEL event which is handled by the appropriate
- button event handler and may do anything at all.
- To guarantee that the window will be destroyed, call
- wxWindow::Destroy instead
- @see @ref overview_windowdeletion "Window Deletion Overview",
- Destroy(), wxCloseEvent
- */
- bool Close(bool force = false);
- /**
- Destroys the window safely. Use this function instead of the delete operator,
- since different window classes can be destroyed differently. Frames and dialogs
- are not destroyed immediately when this function is called -- they are added
- to a list of windows to be deleted on idle time, when all the window's events
- have been processed. This prevents problems with events being sent to
- non-existent windows.
- @return @true if the window has either been successfully deleted, or it
- has been added to the list of windows pending real deletion.
- */
- virtual bool Destroy();
- /**
- Returns true if this window is in process of being destroyed.
- Top level windows are not deleted immediately but are rather
- scheduled for later destruction to give them time to process any
- pending messages; see Destroy() description.
- This function returns @true if this window, or one of its parent
- windows, is scheduled for destruction and can be useful to avoid
- manipulating it as it's usually useless to do something with a window
- which is on the point of disappearing anyhow.
- */
- bool IsBeingDeleted() const;
- //@}
- /**
- @name Drag and drop functions
- */
- //@{
- /**
- Returns the associated drop target, which may be @NULL.
- @see SetDropTarget(), @ref overview_dnd
- */
- virtual wxDropTarget* GetDropTarget() const;
- /**
- Associates a drop target with this window.
- If the window already has a drop target, it is deleted.
- @see GetDropTarget(), @ref overview_dnd
- */
- virtual void SetDropTarget(wxDropTarget* target);
- /**
- Enables or disables eligibility for drop file events (OnDropFiles).
- @param accept
- If @true, the window is eligible for drop file events.
- If @false, the window will not accept drop file events.
- @remarks Windows only until version 2.8.9, available on all platforms
- since 2.8.10. Cannot be used together with SetDropTarget() on
- non-Windows platforms.
- @see SetDropTarget()
- */
- virtual void DragAcceptFiles(bool accept);
- //@}
- /**
- @name Constraints, sizers and window layout functions
- */
- //@{
- /**
- Returns the sizer of which this window is a member, if any, otherwise @NULL.
- */
- wxSizer* GetContainingSizer() const;
- /**
- Returns the sizer associated with the window by a previous call to
- SetSizer(), or @NULL.
- */
- wxSizer* GetSizer() const;
- /**
- Sets the window to have the given layout sizer.
- The window will then own the object, and will take care of its deletion.
- If an existing layout constraints object is already owned by the
- window, it will be deleted if the @a deleteOld parameter is @true.
- Note that this function will also call SetAutoLayout() implicitly with @true
- parameter if the @a sizer is non-@NULL and @false otherwise so that the
- sizer will be effectively used to layout the window children whenever
- it is resized.
- @param sizer
- The sizer to set. Pass @NULL to disassociate and conditionally delete
- the window's sizer. See below.
- @param deleteOld
- If @true (the default), this will delete any pre-existing sizer.
- Pass @false if you wish to handle deleting the old sizer yourself
- but remember to do it yourself in this case to avoid memory leaks.
- @remarks SetSizer enables and disables Layout automatically.
- */
- void SetSizer(wxSizer* sizer, bool deleteOld = true);
- /**
- This method calls SetSizer() and then wxSizer::SetSizeHints which sets the initial
- window size to the size needed to accommodate all sizer elements and sets the
- size hints which, if this window is a top level one, prevent the user from
- resizing it to be less than this minimal size.
- */
- void SetSizerAndFit(wxSizer* sizer, bool deleteOld = true);
- /**
- Returns a pointer to the window's layout constraints, or @NULL if there are none.
- */
- wxLayoutConstraints* GetConstraints() const;
- /**
- Sets the window to have the given layout constraints. The window
- will then own the object, and will take care of its deletion.
- If an existing layout constraints object is already owned by the
- window, it will be deleted.
- @param constraints
- The constraints to set. Pass @NULL to disassociate and delete the window's
- constraints.
- @remarks You must call SetAutoLayout() to tell a window to use
- the constraints automatically in OnSize; otherwise, you
- must override OnSize and call Layout() explicitly. When
- setting both a wxLayoutConstraints and a wxSizer, only
- the sizer will have effect.
- */
- void SetConstraints(wxLayoutConstraints* constraints);
- /**
- Invokes the constraint-based layout algorithm or the sizer-based algorithm
- for this window.
- This function does not get called automatically when the window is resized
- because lots of windows deriving from wxWindow does not need this functionality.
- If you want to have Layout() called automatically, you should derive
- from wxPanel (see wxPanel::Layout).
- @see @ref overview_windowsizing
- */
- virtual bool Layout();
- /**
- Determines whether the Layout() function will be called automatically
- when the window is resized.
- This method is called implicitly by SetSizer() but if you use SetConstraints()
- you should call it manually or otherwise the window layout won't be correctly
- updated when its size changes.
- @param autoLayout
- Set this to @true if you wish the Layout() function to be called
- automatically when the window is resized.
- @see SetSizer(), SetConstraints()
- */
- void SetAutoLayout(bool autoLayout);
- bool GetAutoLayout() const;
- //@}
- /**
- @name Mouse functions
- */
- //@{
- /**
- Directs all mouse input to this window.
- Call ReleaseMouse() to release the capture.
- Note that wxWidgets maintains the stack of windows having captured the mouse
- and when the mouse is released the capture returns to the window which had had
- captured it previously and it is only really released if there were no previous
- window. In particular, this means that you must release the mouse as many times
- as you capture it, unless the window receives the wxMouseCaptureLostEvent event.
- Any application which captures the mouse in the beginning of some operation
- must handle wxMouseCaptureLostEvent and cancel this operation when it receives
- the event. The event handler must not recapture mouse.
- @see ReleaseMouse(), wxMouseCaptureLostEvent
- */
- void CaptureMouse();
- /**
- Returns the caret() associated with the window.
- */
- wxCaret* GetCaret() const;
- /**
- Return the cursor associated with this window.
- @see SetCursor()
- */
- const wxCursor& GetCursor() const;
- /**
- Returns @true if this window has the current mouse capture.
- @see CaptureMouse(), ReleaseMouse(), wxMouseCaptureLostEvent,
- wxMouseCaptureChangedEvent
- */
- virtual bool HasCapture() const;
- /**
- Releases mouse input captured with CaptureMouse().
- @see CaptureMouse(), HasCapture(), ReleaseMouse(),
- wxMouseCaptureLostEvent, wxMouseCaptureChangedEvent
- */
- void ReleaseMouse();
- /**
- Sets the caret() associated with the window.
- */
- void SetCaret(wxCaret* caret);
- /**
- Sets the window's cursor. Notice that the window cursor also sets it for the
- children of the window implicitly.
- The @a cursor may be @c wxNullCursor in which case the window cursor will
- be reset back to default.
- @param cursor
- Specifies the cursor that the window should normally display.
- @see ::wxSetCursor, wxCursor
- */
- virtual bool SetCursor(const wxCursor& cursor);
- /**
- Moves the pointer to the given position on the window.
- @note Apple Human Interface Guidelines forbid moving the mouse cursor
- programmatically so you should avoid using this function in Mac
- applications (and probably avoid using it under the other
- platforms without good reason as well).
- @param x
- The new x position for the cursor.
- @param y
- The new y position for the cursor.
- */
- virtual void WarpPointer(int x, int y);
- //@}
- /**
- @name Miscellaneous functions
- */
- //@{
- wxHitTest HitTest(wxCoord x, wxCoord y) const;
- wxHitTest HitTest(const wxPoint& pt) const;
- /**
- Get the window border style from the given flags: this is different from
- simply doing flags & wxBORDER_MASK because it uses GetDefaultBorder() to
- translate wxBORDER_DEFAULT to something reasonable
- */
- wxBorder GetBorder(long flags) const;
- /**
- Get border for the flags of this window
- */
- wxBorder GetBorder() const;
-
- /**
- Does the window-specific updating after processing the update event.
- This function is called by UpdateWindowUI() in order to check return
- values in the wxUpdateUIEvent and act appropriately.
- For example, to allow frame and dialog title updating, wxWidgets
- implements this function as follows:
- @code
- // do the window-specific processing after processing the update event
- void wxTopLevelWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
- {
- if ( event.GetSetEnabled() )
- Enable(event.GetEnabled());
- if ( event.GetSetText() )
- {
- if ( event.GetText() != GetTitle() )
- SetTitle(event.GetText());
- }
- }
- @endcode
- */
- virtual void DoUpdateWindowUI(wxUpdateUIEvent& event);
- /**
- Returns the platform-specific handle of the physical window.
- Cast it to an appropriate handle, such as @b HWND for Windows,
- @b Widget for Motif or @b GtkWidget for GTK.
- @beginWxPerlOnly
- This method will return an integer in wxPerl.
- @endWxPerlOnly
- */
- virtual WXWidget GetHandle() const;
- /**
- This method should be overridden to return @true if this window has
- multiple pages. All standard class with multiple pages such as
- wxNotebook, wxListbook and wxTreebook already override it to return @true
- and user-defined classes with similar behaviour should also do so, to
- allow the library to handle such windows appropriately.
- */
- virtual bool HasMultiplePages() const;
- /**
- This function is (or should be, in case of custom controls) called during
- window creation to intelligently set up the window visual attributes, that is
- the font and the foreground and background colours.
- By "intelligently" the following is meant: by default, all windows use their
- own @ref GetClassDefaultAttributes() default attributes.
- However if some of the parents attributes are explicitly (that is, using
- SetFont() and not wxWindow::SetOwnFont) changed and if the corresponding
- attribute hadn't been explicitly set for this window itself, then this
- window takes the same value as used by the parent.
- In addition, if the window overrides ShouldInheritColours() to return @false,
- the colours will not be changed no matter what and only the font might.
- This rather complicated logic is necessary in order to accommodate the
- different usage scenarios. The most common one is when all default attributes
- are used and in this case, nothing should be inherited as in modern GUIs
- different controls use different fonts (and colours) than their siblings so
- they can't inherit the same value from the parent. However it was also deemed
- desirable to allow to simply change the attributes of all children at once by
- just changing the font or colour of their common parent, hence in this case we
- do inherit the parents attributes.
- */
- virtual void InheritAttributes();
- /**
- Sends an @c wxEVT_INIT_DIALOG event, whose handler usually transfers data
- to the dialog via validators.
- */
- virtual void InitDialog();
- /**
- Returns @true if the window contents is double-buffered by the system, i.e.\ if
- any drawing done on the window is really done on a temporary backing surface
- and transferred to the screen all at once later.
- @see wxBufferedDC
- */
- virtual bool IsDoubleBuffered() const;
- /**
- Turn on or off double buffering of the window if the system supports it.
- */
- void SetDoubleBuffered(bool on);
- /**
- Returns @true if the window is retained, @false otherwise.
- @remarks Retained windows are only available on X platforms.
- */
- virtual bool IsRetained() const;
- /**
- Returns @true if this window is intrinsically enabled, @false otherwise,
- i.e.\ if @ref Enable() Enable(@false) had been called. This method is
- mostly used for wxWidgets itself, user code should normally use
- IsEnabled() instead.
- */
- bool IsThisEnabled() const;
- /**
- Returns @true if the given window is a top-level one. Currently all frames and
- dialogs are considered to be top-level windows (even if they have a parent
- window).
- */
- virtual bool IsTopLevel() const;
-
- /**
- This virtual function is normally only used internally, but
- sometimes an application may need it to implement functionality
- that should not be disabled by an application defining an OnIdle
- handler in a derived class.
- This function may be used to do delayed painting, for example,
- and most implementations call UpdateWindowUI()
- in order to send update events to the window in idle time.
- */
- virtual void OnInternalIdle();
- /**
- Send idle event to window and all subwindows. Returns true if more idle
- time is requested.
- */
- virtual bool SendIdleEvents(wxIdleEvent& event);
- /**
- Registers a system wide hotkey. Every time the user presses the hotkey
- registered here, this window will receive a hotkey event.
- It will receive the event even if the application is in the background
- and does not have the input focus because the user is working with some
- other application.
- @param hotkeyId
- Numeric identifier of the hotkey. For applications this must be between 0
- and 0xBFFF. If this function is called from a shared DLL, it must be a
- system wide unique identifier between 0xC000 and 0xFFFF.
- This is a MSW specific detail.
- @param modifiers
- A bitwise combination of wxMOD_SHIFT, wxMOD_CONTROL, wxMOD_ALT
- or wxMOD_WIN specifying the modifier keys that have to be pressed along
- with the key.
- @param virtualKeyCode
- The virtual key code of the hotkey.
- @return @true if the hotkey was registered successfully. @false if some
- other application already registered a hotkey with this
- modifier/virtualKeyCode combination.
- @remarks Use EVT_HOTKEY(hotkeyId, fnc) in the event table to capture the
- event. This function is currently only implemented
- under Windows. It is used in the Windows CE port for
- detecting hardware button presses.
- @see UnregisterHotKey()
- */
- virtual bool RegisterHotKey(int hotkeyId, int modifiers,
- int virtualKeyCode);
- /**
- Unregisters a system wide hotkey.
- @param hotkeyId
- Numeric identifier of the hotkey. Must be the same id that was passed to
- RegisterHotKey().
- @return @true if the hotkey was unregistered successfully, @false if the
- id was invalid.
- @remarks This function is currently only implemented under MSW.
- @see RegisterHotKey()
- */
- virtual bool UnregisterHotKey(int hotkeyId);
- /**
- This function sends one or more wxUpdateUIEvent to the window.
- The particular implementation depends on the window; for example a
- wxToolBar will send an update UI event for each toolbar button,
- and a wxFrame will send an update UI event for each menubar menu item.
- You can call this function from your application to ensure that your
- UI is up-to-date at this point (as far as your wxUpdateUIEvent handlers
- are concerned). This may be necessary if you have called
- wxUpdateUIEvent::SetMode() or wxUpdateUIEvent::SetUpdateInterval() to limit
- the overhead that wxWidgets incurs by sending update UI events in idle time.
- @a flags should be a bitlist of one or more of the ::wxUpdateUI enumeration.
- If you are calling this function from an OnInternalIdle or OnIdle
- function, make sure you pass the wxUPDATE_UI_FROMIDLE flag, since
- this tells the window to only update the UI elements that need
- to be updated in idle time. Some windows update their elements
- only when necessary, for example when a menu is about to be shown.
- The following is an example of how to call UpdateWindowUI from
- an idle function.
- @code
- void MyWindow::OnInternalIdle()
- {
- if (wxUpdateUIEvent::CanUpdate(this))
- UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
- }
- @endcode
- @see wxUpdateUIEvent, DoUpdateWindowUI(), OnInternalIdle()
- */
- virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE);
- //@}
- // NOTE: static functions must have their own group or Doxygen will screw
- // up the ordering of the member groups
- /**
- @name Miscellaneous static functions
- */
- //@{
- /**
- Returns the default font and colours which are used by the control.
- This is useful if you want to use the same font or colour in your own control
- as in a standard control -- which is a much better idea than hard coding specific
- colours or fonts which might look completely out of place on the users
- system, especially if it uses themes.
- The @a variant parameter is only relevant under Mac currently and is
- ignore under other platforms. Under Mac, it will change the size of the
- returned font. See SetWindowVariant() for more about this.
- This static method is "overridden" in many derived classes and so calling,
- for example, wxButton::GetClassDefaultAttributes() will typically
- return the values appropriate for a button which will be normally different
- from those returned by, say, wxListCtrl::GetClassDefaultAttributes().
- The @c wxVisualAttributes structure has at least the fields
- @c font, @c colFg and @c colBg. All of them may be invalid
- if it was not possible to determine the default control appearance or,
- especially for the background colour, if the field doesn't make sense as is
- the case for @c colBg for the controls with themed background.
- @see InheritAttributes()
- */
- static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
- /**
- Finds the window or control which currently has the keyboard focus.
- @remarks Note that this is a static function, so it can be called without
- needing a wxWindow pointer.
- @see SetFocus(), HasFocus()
- */
- static wxWindow* FindFocus();
- /**
- Find the first window with the given @e id.
- If @a parent is @NULL, the search will start from all top-level frames
- and dialog boxes; if non-@NULL, the search will be limited to the given
- window hierarchy.
- The search is recursive in both cases.
- @see FindWindow()
- @return Window with the given @a id or @NULL if not found.
- */
- static wxWindow* FindWindowById(long id, const wxWindow* parent = 0);
- /**
- Find a window by its label.
- Depending on the type of window, the label may be a window title
- or panel item label. If @a parent is @NULL, the search will start from all
- top-level frames and dialog boxes; if non-@NULL, the search will be
- limited to the given window hierarchy.
- The search is recursive in both cases.
- @see FindWindow()
- @return Window with the given @a label or @NULL if not found.
- */
- static wxWindow* FindWindowByLabel(const wxString& label,
- const wxWindow* parent = 0);
- /**
- Find a window by its name (as given in a window constructor or Create()
- function call).
- If @a parent is @NULL, the search will start from all top-level frames
- and dialog boxes; if non-@NULL, the search will be limited to the given
- window hierarchy.
- The search is recursive in both cases. If no window with such name is found,
- FindWindowByLabel() is called.
- @see FindWindow()
- @return Window with the given @a name or @NULL if not found.
- */
- static wxWindow* FindWindowByName(const wxString& name,
- const wxWindow* parent = 0);
- /**
- Returns the currently captured window.
- @see HasCapture(), CaptureMouse(), ReleaseMouse(),
- wxMouseCaptureLostEvent, wxMouseCaptureChangedEvent
- */
- static wxWindow* GetCapture();
- /**
- Create a new ID or range of IDs that are not currently in use.
- The IDs will be reserved until assigned to a wxWindow ID
- or unreserved with UnreserveControlId().
- See @ref overview_windowids for more information.
- @param count
- The number of sequential IDs to reserve.
- @return Returns the ID or the first ID of the range (i.e. the most negative),
- or wxID_NONE if the specified number of identifiers couldn't be allocated.
- @see UnreserveControlId(), wxIdManager,
- @ref overview_windowids
- */
- static wxWindowID NewControlId(int count = 1);
- /**
- Unreserve an ID or range of IDs that was reserved by NewControlId().
- See @ref overview_windowids for more information.
- @param id
- The starting ID of the range of IDs to unreserve.
- @param count
- The number of sequential IDs to unreserve.
- @see NewControlId(), wxIdManager, @ref overview_windowids
- */
- static void UnreserveControlId(wxWindowID id, int count = 1);
- //@}
- protected:
- /**
- Centres the window.
- @param direction
- Specifies the direction for the centring. May be wxHORIZONTAL,
- wxVERTICAL or wxBOTH. It may also include the wxCENTRE_ON_SCREEN
- flag.
- @remarks This function is not meant to be called directly by user code,
- but via Centre, Center, CentreOnParent, or CenterOnParent.
- This function can be overridden to fine-tune centring behaviour.
- */
- virtual void DoCentre(int direction);
- /**
- Implementation of GetBestSize() that can be overridden.
- Notice that it is usually more convenient to override
- DoGetBestClientSize() rather than this method itself as you need to
- explicitly account for the window borders size if you do the latter.
- The default implementation of this function is designed for use in container
- windows, such as wxPanel, and works something like this:
- -# If the window has a sizer then it is used to calculate the best size.
- -# Otherwise if the window has layout constraints then those are used to
- calculate the best size.
- -# Otherwise if the window has children then the best size is set to be large
- enough to show all the children.
- -# Otherwise if there are no children then the window's minimal size will be
- used as its best size.
- -# Otherwise if there is no minimal size set, then the current size is used
- for the best size.
- @see @ref overview_windowsizing
- */
- virtual wxSize DoGetBestSize() const;
- /**
- Override this method to return the best size for a custom control.
- A typical implementation of this method should compute the minimal size
- needed to fully display the control contents taking into account the
- current font size.
- The default implementation simply returns ::wxDefaultSize and
- GetBestSize() returns an arbitrary hardcoded size for the window, so
- you must override it when implementing a custom window class.
- Notice that the best size returned by this function is cached
- internally, so if anything that results in the best size changing (e.g.
- change to the control contents) happens, you need to call
- InvalidateBestSize() to notify wxWidgets about it.
- @see @ref overview_windowsizing
- @since 2.9.0
- */
- virtual wxSize DoGetBestClientSize() const;
- /**
- Override this method to implement height-for-width best size
- calculation.
- Return the height needed to fully display the control contents if its
- width is fixed to the given value. Custom classes implementing
- wrapping should override this method and return the height
- corresponding to the number of lines needed to lay out the control
- contents at this width.
- Currently this method is not used by wxWidgets yet, however it is
- planned that it will be used by the new sizer classes implementing
- height-for-width layout strategy in the future.
- Notice that implementing this method or even implementing both it and
- DoGetBestClientWidth() doesn't replace overriding DoGetBestClientSize(),
- i.e. you still need to implement the latter as well in order to provide
- the best size when neither width nor height are constrained.
- By default returns ::wxDefaultCoord meaning that the vertical component
- of DoGetBestClientSize() return value should be used.
- @since 2.9.4
- */
- virtual int DoGetBestClientHeight(int width) const;
- /**
- Override this method to implement width-for-height best size
- calculation.
- This method is exactly the same as DoGetBestClientHeight() except that
- it determines the width assuming the height is fixed instead of vice
- versa.
- @since 2.9.4
- */
- virtual int DoGetBestClientWidth(int height) const;
- /**
- Sets the initial window size if none is given (i.e.\ at least one of the
- components of the size passed to ctor/Create() is wxDefaultCoord).
- @deprecated Use SetInitialSize() instead.
- */
- virtual void SetInitialBestSize(const wxSize& size);
- /**
- Generate wxWindowDestroyEvent for this window.
- This is called by the window itself when it is being destroyed and
- usually there is no need to call it but see wxWindowDestroyEvent for
- explanations of when you might want to do it.
- */
- void SendDestroyEvent();
- /**
- This function is public in wxEvtHandler but protected in wxWindow
- because for wxWindows you should always call ProcessEvent() on the
- pointer returned by GetEventHandler() and not on the wxWindow object
- itself.
- For convenience, a ProcessWindowEvent() method is provided as a synonym
- for @code GetEventHandler()->ProcessEvent() @endcode
- Note that it's still possible to call these functions directly on the
- wxWindow object (e.g. casting it to wxEvtHandler) but doing that will
- create subtle bugs when windows with event handlers pushed on them are
- involved.
- This holds also for all other wxEvtHandler functions.
- */
- virtual bool ProcessEvent(wxEvent& event);
- //@{
- /**
- See ProcessEvent() for more info about why you shouldn't use this function
- and the reason for making this function protected in wxWindow.
- */
- bool SafelyProcessEvent(wxEvent& event);
- virtual void QueueEvent(wxEvent *event);
- virtual void AddPendingEvent(const wxEvent& event);
- void ProcessPendingEvents();
- bool ProcessThreadEvent(const wxEvent& event);
- //@}
- };
- // ============================================================================
- // Global functions/macros
- // ============================================================================
- /** @addtogroup group_funcmacro_misc */
- //@{
- /**
- Find the deepest window at the mouse pointer position, returning the window
- and current pointer position in screen coordinates.
- @header{wx/window.h}
- */
- wxWindow* wxFindWindowAtPointer(wxPoint& pt);
- /**
- Gets the currently active window (implemented for MSW and GTK only
- currently, always returns @NULL in the other ports).
- @header{wx/window.h}
- */
- wxWindow* wxGetActiveWindow();
- /**
- Returns the first top level parent of the given window, or in other words,
- the frame or dialog containing it, or @NULL.
- @header{wx/window.h}
- */
- wxWindow* wxGetTopLevelParent(wxWindow* window);
- //@}
|