From a648aca65c8c0096410cfb70b8e8cfffb06016aa Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 17 Mar 2012 18:12:27 -0700 Subject: [PATCH 01/28] wxWidgets3: update to svn r70933 --- Externals/wxWidgets3/SConscript | 429 +-- Externals/wxWidgets3/build_wx.sh | 19 + Externals/wxWidgets3/include/wx/aboutdlg.h | 4 +- Externals/wxWidgets3/include/wx/accel.h | 7 +- .../wxWidgets3/include/wx/affinematrix2d.h | 51 + .../include/wx/affinematrix2dbase.h | 127 + Externals/wxWidgets3/include/wx/anybutton.h | 200 ++ Externals/wxWidgets3/include/wx/app.h | 25 +- Externals/wxWidgets3/include/wx/apptrait.h | 10 +- Externals/wxWidgets3/include/wx/arrstr.h | 8 +- Externals/wxWidgets3/include/wx/atomic.h | 4 +- Externals/wxWidgets3/include/wx/aui/auibar.h | 393 +-- Externals/wxWidgets3/include/wx/aui/auibook.h | 308 ++- Externals/wxWidgets3/include/wx/aui/dockart.h | 70 +- .../wxWidgets3/include/wx/aui/floatpane.h | 20 +- .../wxWidgets3/include/wx/aui/framemanager.h | 93 +- Externals/wxWidgets3/include/wx/aui/tabmdi.h | 18 +- .../wxWidgets3/include/wx/bannerwindow.h | 145 ++ Externals/wxWidgets3/include/wx/bitmap.h | 23 +- Externals/wxWidgets3/include/wx/bmpbuttn.h | 4 +- Externals/wxWidgets3/include/wx/bookctrl.h | 30 +- Externals/wxWidgets3/include/wx/brush.h | 8 +- Externals/wxWidgets3/include/wx/buffer.h | 12 +- Externals/wxWidgets3/include/wx/build.h | 4 +- Externals/wxWidgets3/include/wx/button.h | 163 +- Externals/wxWidgets3/include/wx/cairo.h | 128 +- Externals/wxWidgets3/include/wx/calctrl.h | 10 +- Externals/wxWidgets3/include/wx/chartype.h | 4 +- Externals/wxWidgets3/include/wx/checkbox.h | 16 +- Externals/wxWidgets3/include/wx/chkconf.h | 123 +- Externals/wxWidgets3/include/wx/choice.h | 4 +- Externals/wxWidgets3/include/wx/choicebk.h | 4 +- Externals/wxWidgets3/include/wx/clipbrd.h | 4 +- Externals/wxWidgets3/include/wx/cmdline.h | 15 +- Externals/wxWidgets3/include/wx/cmdproc.h | 7 +- Externals/wxWidgets3/include/wx/cmndata.h | 8 +- .../wxWidgets3/include/wx/cocoa/chkconf.h | 4 +- Externals/wxWidgets3/include/wx/cocoa/dc.h | 8 +- Externals/wxWidgets3/include/wx/cocoa/font.h | 15 +- .../wxWidgets3/include/wx/cocoa/notebook.h | 4 +- Externals/wxWidgets3/include/wx/cocoa/sound.h | 6 +- Externals/wxWidgets3/include/wx/colordlg.h | 4 +- Externals/wxWidgets3/include/wx/colour.h | 8 +- Externals/wxWidgets3/include/wx/combo.h | 14 +- Externals/wxWidgets3/include/wx/combobox.h | 14 +- .../wxWidgets3/include/wx/compositewin.h | 155 +- Externals/wxWidgets3/include/wx/config.h | 7 +- Externals/wxWidgets3/include/wx/containr.h | 226 +- Externals/wxWidgets3/include/wx/control.h | 4 +- Externals/wxWidgets3/include/wx/convauto.h | 48 +- Externals/wxWidgets3/include/wx/cppunit.h | 6 +- Externals/wxWidgets3/include/wx/ctrlsub.h | 69 +- Externals/wxWidgets3/include/wx/cursor.h | 12 +- Externals/wxWidgets3/include/wx/custombgwin.h | 53 + Externals/wxWidgets3/include/wx/dataview.h | 106 +- Externals/wxWidgets3/include/wx/datectrl.h | 30 +- Externals/wxWidgets3/include/wx/dateevt.h | 8 +- Externals/wxWidgets3/include/wx/datetime.h | 33 +- .../wxWidgets3/include/wx/datetimectrl.h | 48 + Externals/wxWidgets3/include/wx/dc.h | 82 +- Externals/wxWidgets3/include/wx/dcgraph.h | 18 +- Externals/wxWidgets3/include/wx/dde.h | 6 +- Externals/wxWidgets3/include/wx/debug.h | 15 +- Externals/wxWidgets3/include/wx/defs.h | 370 ++- Externals/wxWidgets3/include/wx/dialog.h | 11 +- Externals/wxWidgets3/include/wx/dialup.h | 4 +- Externals/wxWidgets3/include/wx/dirdlg.h | 4 +- Externals/wxWidgets3/include/wx/dlimpexp.h | 37 +- Externals/wxWidgets3/include/wx/dlist.h | 6 +- Externals/wxWidgets3/include/wx/docview.h | 31 +- Externals/wxWidgets3/include/wx/dvrenderers.h | 132 +- Externals/wxWidgets3/include/wx/dynarray.h | 24 +- Externals/wxWidgets3/include/wx/dynlib.h | 18 +- Externals/wxWidgets3/include/wx/encinfo.h | 6 +- Externals/wxWidgets3/include/wx/event.h | 399 +-- Externals/wxWidgets3/include/wx/eventfilter.h | 72 + Externals/wxWidgets3/include/wx/evtloop.h | 6 +- Externals/wxWidgets3/include/wx/evtloopsrc.h | 4 +- Externals/wxWidgets3/include/wx/features.h | 12 +- Externals/wxWidgets3/include/wx/filedlg.h | 5 +- Externals/wxWidgets3/include/wx/filefn.h | 59 +- Externals/wxWidgets3/include/wx/filehistory.h | 7 +- Externals/wxWidgets3/include/wx/filename.h | 14 +- Externals/wxWidgets3/include/wx/filepicker.h | 47 +- Externals/wxWidgets3/include/wx/font.h | 41 +- Externals/wxWidgets3/include/wx/fontutil.h | 7 +- Externals/wxWidgets3/include/wx/frame.h | 7 +- Externals/wxWidgets3/include/wx/fswatcher.h | 37 +- Externals/wxWidgets3/include/wx/gbsizer.h | 28 +- Externals/wxWidgets3/include/wx/gdicmn.h | 24 +- Externals/wxWidgets3/include/wx/gdiobj.h | 4 +- .../wxWidgets3/include/wx/generic/aboutdlgg.h | 18 +- .../wxWidgets3/include/wx/generic/choicdgg.h | 91 +- .../wxWidgets3/include/wx/generic/collpaneg.h | 6 +- .../include/wx/generic/custombgwin.h | 96 + .../wxWidgets3/include/wx/generic/dataview.h | 40 +- .../wxWidgets3/include/wx/generic/datectrl.h | 6 +- .../include/wx/generic/dvrenderer.h | 27 +- .../include/wx/generic/dvrenderers.h | 75 +- .../include/wx/generic/filepickerg.h | 34 +- .../wxWidgets3/include/wx/generic/grid.h | 12 +- .../wxWidgets3/include/wx/generic/gridctrl.h | 12 +- .../include/wx/generic/grideditors.h | 41 +- .../wxWidgets3/include/wx/generic/hyperlink.h | 8 +- .../wxWidgets3/include/wx/generic/listctrl.h | 21 +- .../wxWidgets3/include/wx/generic/logg.h | 4 +- .../wxWidgets3/include/wx/generic/msgdlgg.h | 3 +- .../wxWidgets3/include/wx/generic/notebook.h | 4 +- .../wxWidgets3/include/wx/generic/panelg.h | 15 +- .../include/wx/generic/private/grid.h | 108 +- .../include/wx/generic/private/listctrl.h | 16 +- .../include/wx/generic/private/richtooltip.h | 62 + .../wxWidgets3/include/wx/generic/prntdlgg.h | 4 +- .../wxWidgets3/include/wx/generic/progdlgg.h | 26 +- .../wxWidgets3/include/wx/generic/spinctlg.h | 12 +- .../wxWidgets3/include/wx/generic/splash.h | 18 +- .../wxWidgets3/include/wx/generic/splitter.h | 18 +- .../wxWidgets3/include/wx/generic/srchctlg.h | 6 +- .../wxWidgets3/include/wx/generic/statbmpg.h | 4 +- .../wxWidgets3/include/wx/generic/statusbr.h | 4 +- .../wxWidgets3/include/wx/generic/tabg.h | 4 +- .../wxWidgets3/include/wx/generic/timectrl.h | 70 + Externals/wxWidgets3/include/wx/geometry.h | 13 +- Externals/wxWidgets3/include/wx/glcanvas.h | 6 +- Externals/wxWidgets3/include/wx/graphics.h | 98 +- Externals/wxWidgets3/include/wx/gtk/animate.h | 2 +- .../wxWidgets3/include/wx/gtk/anybutton.h | 81 + Externals/wxWidgets3/include/wx/gtk/app.h | 4 +- .../wxWidgets3/include/wx/gtk/assertdlg_gtk.h | 20 +- Externals/wxWidgets3/include/wx/gtk/bitmap.h | 8 +- Externals/wxWidgets3/include/wx/gtk/button.h | 46 +- Externals/wxWidgets3/include/wx/gtk/calctrl.h | 20 +- .../wxWidgets3/include/wx/gtk/combobox.h | 9 +- Externals/wxWidgets3/include/wx/gtk/control.h | 12 +- .../wxWidgets3/include/wx/gtk/dataview.h | 29 +- Externals/wxWidgets3/include/wx/gtk/dc.h | 4 +- Externals/wxWidgets3/include/wx/gtk/dirdlg.h | 10 +- Externals/wxWidgets3/include/wx/gtk/dnd.h | 6 +- .../wxWidgets3/include/wx/gtk/dvrenderer.h | 9 +- .../wxWidgets3/include/wx/gtk/dvrenderers.h | 67 +- .../wxWidgets3/include/wx/gtk/filectrl.h | 4 +- Externals/wxWidgets3/include/wx/gtk/filedlg.h | 11 +- .../wxWidgets3/include/wx/gtk/filepicker.h | 4 +- Externals/wxWidgets3/include/wx/gtk/font.h | 17 +- .../wxWidgets3/include/wx/gtk/fontpicker.h | 4 +- Externals/wxWidgets3/include/wx/gtk/gauge.h | 6 +- .../wxWidgets3/include/wx/gtk/hyperlink.h | 14 +- Externals/wxWidgets3/include/wx/gtk/listbox.h | 8 +- Externals/wxWidgets3/include/wx/gtk/mdi.h | 4 +- Externals/wxWidgets3/include/wx/gtk/menu.h | 8 +- Externals/wxWidgets3/include/wx/gtk/msgdlg.h | 3 +- .../wxWidgets3/include/wx/gtk/nonownedwnd.h | 44 + .../wxWidgets3/include/wx/gtk/notebook.h | 8 +- Externals/wxWidgets3/include/wx/gtk/pen.h | 4 +- .../wxWidgets3/include/wx/gtk/popupwin.h | 5 +- Externals/wxWidgets3/include/wx/gtk/private.h | 8 +- .../wxWidgets3/include/wx/gtk/private/event.h | 80 + .../include/wx/gtk/private/gtk2-compat.h | 376 +++ .../wxWidgets3/include/wx/gtk/private/list.h | 33 + .../wxWidgets3/include/wx/gtk/private/timer.h | 4 +- .../wxWidgets3/include/wx/gtk/radiobox.h | 4 +- Externals/wxWidgets3/include/wx/gtk/region.h | 8 +- .../wxWidgets3/include/wx/gtk/scrolbar.h | 14 +- Externals/wxWidgets3/include/wx/gtk/statbox.h | 4 +- .../wxWidgets3/include/wx/gtk/textctrl.h | 5 +- .../wxWidgets3/include/wx/gtk/textentry.h | 6 +- Externals/wxWidgets3/include/wx/gtk/tglbtn.h | 114 +- Externals/wxWidgets3/include/wx/gtk/toolbar.h | 26 +- Externals/wxWidgets3/include/wx/gtk/tooltip.h | 21 +- .../wxWidgets3/include/wx/gtk/toplevel.h | 13 +- .../wxWidgets3/include/wx/gtk/treeentry_gtk.h | 10 +- .../include/wx/gtk/webview_webkit.h | 156 ++ .../wx/gtk/webviewhistoryitem_webkit.h | 34 + Externals/wxWidgets3/include/wx/gtk/window.h | 21 +- Externals/wxWidgets3/include/wx/hash.h | 6 +- Externals/wxWidgets3/include/wx/hashmap.h | 32 +- Externals/wxWidgets3/include/wx/hashset.h | 28 +- Externals/wxWidgets3/include/wx/headercol.h | 25 +- Externals/wxWidgets3/include/wx/headerctrl.h | 4 +- Externals/wxWidgets3/include/wx/help.h | 6 +- Externals/wxWidgets3/include/wx/htmllbox.h | 9 +- Externals/wxWidgets3/include/wx/icon.h | 10 +- Externals/wxWidgets3/include/wx/iconbndl.h | 29 +- Externals/wxWidgets3/include/wx/iconloc.h | 8 +- Externals/wxWidgets3/include/wx/image.h | 21 +- Externals/wxWidgets3/include/wx/imaglist.h | 6 +- Externals/wxWidgets3/include/wx/imagtiff.h | 17 +- Externals/wxWidgets3/include/wx/intl.h | 14 +- Externals/wxWidgets3/include/wx/iosfwrap.h | 4 +- Externals/wxWidgets3/include/wx/ioswrap.h | 4 +- Externals/wxWidgets3/include/wx/ipc.h | 4 +- Externals/wxWidgets3/include/wx/itemid.h | 62 + Externals/wxWidgets3/include/wx/joystick.h | 4 +- Externals/wxWidgets3/include/wx/kbdstate.h | 39 +- Externals/wxWidgets3/include/wx/list.h | 28 +- Externals/wxWidgets3/include/wx/listbase.h | 103 +- Externals/wxWidgets3/include/wx/listbook.h | 4 +- Externals/wxWidgets3/include/wx/listctrl.h | 4 +- Externals/wxWidgets3/include/wx/listimpl.cpp | 8 +- Externals/wxWidgets3/include/wx/log.h | 72 +- Externals/wxWidgets3/include/wx/longlong.h | 73 +- Externals/wxWidgets3/include/wx/math.h | 12 +- Externals/wxWidgets3/include/wx/mdi.h | 14 +- Externals/wxWidgets3/include/wx/memory.h | 6 +- Externals/wxWidgets3/include/wx/menu.h | 4 +- Externals/wxWidgets3/include/wx/menuitem.h | 4 +- .../wxWidgets3/include/wx/meta/movable.h | 4 +- Externals/wxWidgets3/include/wx/metafile.h | 14 +- Externals/wxWidgets3/include/wx/mimetype.h | 4 +- Externals/wxWidgets3/include/wx/minifram.h | 6 +- Externals/wxWidgets3/include/wx/mousestate.h | 17 +- Externals/wxWidgets3/include/wx/msgdlg.h | 19 +- .../wxWidgets3/include/wx/msw/anybutton.h | 81 + .../wxWidgets3/include/wx/msw/bmpbuttn.h | 25 +- Externals/wxWidgets3/include/wx/msw/button.h | 51 +- Externals/wxWidgets3/include/wx/msw/chkconf.h | 37 +- .../wxWidgets3/include/wx/msw/combobox.h | 6 +- .../wxWidgets3/include/wx/msw/custombgwin.h | 58 + .../wxWidgets3/include/wx/msw/datectrl.h | 23 +- .../wxWidgets3/include/wx/msw/datetimectrl.h | 87 + Externals/wxWidgets3/include/wx/msw/dc.h | 9 +- .../wxWidgets3/include/wx/msw/debughlp.h | 61 +- Externals/wxWidgets3/include/wx/msw/dialog.h | 10 +- .../wxWidgets3/include/wx/msw/dragimag.h | 51 +- Externals/wxWidgets3/include/wx/msw/enhmeta.h | 3 +- Externals/wxWidgets3/include/wx/msw/font.h | 10 +- Externals/wxWidgets3/include/wx/msw/frame.h | 17 +- .../wxWidgets3/include/wx/msw/fswatcher.h | 8 +- Externals/wxWidgets3/include/wx/msw/helpchm.h | 4 +- Externals/wxWidgets3/include/wx/msw/helpwin.h | 4 +- .../wxWidgets3/include/wx/msw/listctrl.h | 26 +- Externals/wxWidgets3/include/wx/msw/menu.h | 46 +- .../wxWidgets3/include/wx/msw/menuitem.h | 30 +- Externals/wxWidgets3/include/wx/msw/missing.h | 149 +- .../wxWidgets3/include/wx/msw/nonownedwnd.h | 39 + .../wxWidgets3/include/wx/msw/notebook.h | 7 +- .../wxWidgets3/include/wx/msw/ole/activex.h | 4 +- .../wxWidgets3/include/wx/msw/ole/oleutils.h | 13 +- Externals/wxWidgets3/include/wx/msw/palette.h | 6 +- Externals/wxWidgets3/include/wx/msw/panel.h | 19 +- .../wxWidgets3/include/wx/msw/printdlg.h | 6 +- Externals/wxWidgets3/include/wx/msw/private.h | 7 +- .../include/wx/msw/private/button.h | 5 +- .../include/wx/msw/private/fswatcher.h | 53 +- .../include/wx/msw/private/hiddenwin.h | 31 + .../include/wx/msw/private/msgdlg.h | 7 +- .../wxWidgets3/include/wx/msw/private/timer.h | 4 +- Externals/wxWidgets3/include/wx/msw/progdlg.h | 4 +- .../wxWidgets3/include/wx/msw/radiobox.h | 7 +- Externals/wxWidgets3/include/wx/msw/setup0.h | 226 +- .../wxWidgets3/include/wx/msw/setup_inc.h | 12 +- Externals/wxWidgets3/include/wx/msw/slider.h | 8 +- Externals/wxWidgets3/include/wx/msw/sound.h | 6 +- .../wxWidgets3/include/wx/msw/spinctrl.h | 9 +- .../wxWidgets3/include/wx/msw/statusbar.h | 4 +- .../wxWidgets3/include/wx/msw/textctrl.h | 4 +- .../wxWidgets3/include/wx/msw/textentry.h | 39 +- Externals/wxWidgets3/include/wx/msw/tglbtn.h | 115 +- .../wxWidgets3/include/wx/msw/timectrl.h | 61 + Externals/wxWidgets3/include/wx/msw/toolbar.h | 25 +- .../wxWidgets3/include/wx/msw/toplevel.h | 36 +- .../wxWidgets3/include/wx/msw/webview_ie.h | 518 ++++ .../include/wx/msw/webviewhistoryitem_ie.h | 31 + .../wxWidgets3/include/wx/msw/wince/setup.h | 216 +- Externals/wxWidgets3/include/wx/msw/window.h | 34 +- Externals/wxWidgets3/include/wx/msw/wrapwin.h | 3 +- Externals/wxWidgets3/include/wx/nonownedwnd.h | 98 +- Externals/wxWidgets3/include/wx/odcombo.h | 11 +- .../wxWidgets3/include/wx/osx/anybutton.h | 59 + Externals/wxWidgets3/include/wx/osx/app.h | 7 +- Externals/wxWidgets3/include/wx/osx/button.h | 35 +- .../include/wx/osx/carbon/dataview.h | 4 + .../include/wx/osx/carbon/evtloop.h | 4 +- .../wxWidgets3/include/wx/osx/carbon/region.h | 6 +- .../include/wx/osx/carbon/statbmp.h | 6 +- Externals/wxWidgets3/include/wx/osx/chkconf.h | 4 +- .../include/wx/osx/cocoa/dataview.h | 4 + .../wxWidgets3/include/wx/osx/cocoa/evtloop.h | 9 +- .../wxWidgets3/include/wx/osx/cocoa/private.h | 21 +- .../include/wx/osx/cocoa/private/date.h | 51 + .../include/wx/osx/cocoa/private/textimpl.h | 8 +- .../wxWidgets3/include/wx/osx/combobox.h | 32 +- .../wxWidgets3/include/wx/osx/config_xcode.h | 6 +- .../wxWidgets3/include/wx/osx/core/colour.h | 8 +- .../wxWidgets3/include/wx/osx/core/dataview.h | 4 + .../wxWidgets3/include/wx/osx/core/mimetype.h | 6 +- .../wxWidgets3/include/wx/osx/core/private.h | 22 +- .../wx/osx/core/private/datetimectrl.h | 71 + .../wxWidgets3/include/wx/osx/dataview.h | 16 +- .../wxWidgets3/include/wx/osx/datectrl.h | 55 + .../wxWidgets3/include/wx/osx/datetimectrl.h | 34 + Externals/wxWidgets3/include/wx/osx/dirdlg.h | 10 +- Externals/wxWidgets3/include/wx/osx/evtloop.h | 16 +- Externals/wxWidgets3/include/wx/osx/filedlg.h | 8 +- Externals/wxWidgets3/include/wx/osx/font.h | 15 +- Externals/wxWidgets3/include/wx/osx/fontdlg.h | 4 +- Externals/wxWidgets3/include/wx/osx/frame.h | 5 +- .../include/wx/osx/iphone/chkconf.h | 17 +- .../wxWidgets3/include/wx/osx/joystick.h | 4 +- .../wxWidgets3/include/wx/osx/listctrl.h | 28 +- Externals/wxWidgets3/include/wx/osx/menu.h | 7 +- .../wxWidgets3/include/wx/osx/metafile.h | 11 +- Externals/wxWidgets3/include/wx/osx/msgdlg.h | 11 +- .../wxWidgets3/include/wx/osx/nonownedwnd.h | 24 +- .../wxWidgets3/include/wx/osx/notebook.h | 4 +- Externals/wxWidgets3/include/wx/osx/pnghand.h | 4 +- Externals/wxWidgets3/include/wx/osx/pngread.h | 8 +- .../wxWidgets3/include/wx/osx/popupwin.h | 5 +- .../wxWidgets3/include/wx/osx/printdlg.h | 16 +- .../wxWidgets3/include/wx/osx/radiobox.h | 5 +- Externals/wxWidgets3/include/wx/osx/setup0.h | 236 +- Externals/wxWidgets3/include/wx/osx/sound.h | 6 +- .../wxWidgets3/include/wx/osx/spinctrl.h | 7 +- Externals/wxWidgets3/include/wx/osx/statbox.h | 6 +- .../wxWidgets3/include/wx/osx/textctrl.h | 6 +- .../wxWidgets3/include/wx/osx/textentry.h | 18 +- Externals/wxWidgets3/include/wx/osx/tglbtn.h | 80 +- .../wxWidgets3/include/wx/osx/timectrl.h | 51 + Externals/wxWidgets3/include/wx/osx/toolbar.h | 30 +- .../wxWidgets3/include/wx/osx/toplevel.h | 7 +- .../wxWidgets3/include/wx/osx/treectrl.h | 4 +- .../include/wx/osx/webview_webkit.h | 163 ++ .../wx/osx/webviewhistoryitem_webkit.h | 35 + Externals/wxWidgets3/include/wx/osx/window.h | 13 +- Externals/wxWidgets3/include/wx/palette.h | 8 +- Externals/wxWidgets3/include/wx/panel.h | 25 +- Externals/wxWidgets3/include/wx/pen.h | 8 +- Externals/wxWidgets3/include/wx/persist.h | 29 +- .../wxWidgets3/include/wx/persist/splitter.h | 69 + Externals/wxWidgets3/include/wx/pickerbase.h | 13 +- Externals/wxWidgets3/include/wx/platform.h | 111 +- Externals/wxWidgets3/include/wx/platinfo.h | 16 +- Externals/wxWidgets3/include/wx/popupwin.h | 12 +- Externals/wxWidgets3/include/wx/power.h | 4 +- .../wxWidgets3/include/wx/private/fontmgr.h | 6 +- .../wxWidgets3/include/wx/private/fswatcher.h | 4 +- .../include/wx/private/markupparserattr.h | 6 +- .../include/wx/private/richtooltip.h | 44 + .../wxWidgets3/include/wx/private/sckaddr.h | 4 +- .../wxWidgets3/include/wx/private/socket.h | 8 +- .../wxWidgets3/include/wx/private/wxprintf.h | 6 +- Externals/wxWidgets3/include/wx/prntbase.h | 43 +- Externals/wxWidgets3/include/wx/progdlg.h | 44 +- .../wxWidgets3/include/wx/protocol/ftp.h | 4 +- .../wxWidgets3/include/wx/protocol/http.h | 14 +- Externals/wxWidgets3/include/wx/radiobox.h | 4 +- Externals/wxWidgets3/include/wx/radiobut.h | 4 +- Externals/wxWidgets3/include/wx/rawbmp.h | 9 +- Externals/wxWidgets3/include/wx/region.h | 11 +- Externals/wxWidgets3/include/wx/richmsgdlg.h | 4 +- Externals/wxWidgets3/include/wx/richtooltip.h | 103 + Externals/wxWidgets3/include/wx/rtti.h | 4 +- Externals/wxWidgets3/include/wx/scopedarray.h | 4 +- Externals/wxWidgets3/include/wx/scopeguard.h | 18 +- Externals/wxWidgets3/include/wx/setup_inc.h | 216 +- Externals/wxWidgets3/include/wx/sizer.h | 26 +- Externals/wxWidgets3/include/wx/slider.h | 6 +- Externals/wxWidgets3/include/wx/sound.h | 4 +- Externals/wxWidgets3/include/wx/srchctrl.h | 10 +- Externals/wxWidgets3/include/wx/sstream.h | 10 +- Externals/wxWidgets3/include/wx/stack.h | 6 +- Externals/wxWidgets3/include/wx/stackwalk.h | 4 +- Externals/wxWidgets3/include/wx/stattext.h | 4 +- Externals/wxWidgets3/include/wx/statusbr.h | 7 +- Externals/wxWidgets3/include/wx/stdpaths.h | 7 +- Externals/wxWidgets3/include/wx/stdstream.h | 14 +- Externals/wxWidgets3/include/wx/stopwatch.h | 83 +- Externals/wxWidgets3/include/wx/strconv.h | 4 +- Externals/wxWidgets3/include/wx/stream.h | 4 +- Externals/wxWidgets3/include/wx/string.h | 52 +- Externals/wxWidgets3/include/wx/stringimpl.h | 12 +- Externals/wxWidgets3/include/wx/strvararg.h | 4 +- Externals/wxWidgets3/include/wx/taskbar.h | 8 +- Externals/wxWidgets3/include/wx/tbarbase.h | 54 +- .../wxWidgets3/include/wx/textcompleter.h | 87 + Externals/wxWidgets3/include/wx/textctrl.h | 39 +- Externals/wxWidgets3/include/wx/textentry.h | 34 +- Externals/wxWidgets3/include/wx/textwrapper.h | 5 +- Externals/wxWidgets3/include/wx/tglbtn.h | 8 +- Externals/wxWidgets3/include/wx/thread.h | 12 +- Externals/wxWidgets3/include/wx/thrimpl.cpp | 6 +- Externals/wxWidgets3/include/wx/time.h | 77 + Externals/wxWidgets3/include/wx/timectrl.h | 92 + Externals/wxWidgets3/include/wx/tls.h | 6 +- Externals/wxWidgets3/include/wx/toolbar.h | 4 +- Externals/wxWidgets3/include/wx/toolbook.h | 4 +- Externals/wxWidgets3/include/wx/toplevel.h | 32 +- Externals/wxWidgets3/include/wx/treebase.h | 61 +- Externals/wxWidgets3/include/wx/treebook.h | 16 +- Externals/wxWidgets3/include/wx/treectrl.h | 26 +- Externals/wxWidgets3/include/wx/treelist.h | 567 ++++ Externals/wxWidgets3/include/wx/uiaction.h | 6 +- .../include/wx/unix/private/timer.h | 8 +- Externals/wxWidgets3/include/wx/unix/sound.h | 8 +- Externals/wxWidgets3/include/wx/utils.h | 39 +- Externals/wxWidgets3/include/wx/valgen.h | 13 +- Externals/wxWidgets3/include/wx/vector.h | 8 +- Externals/wxWidgets3/include/wx/version.h | 6 +- Externals/wxWidgets3/include/wx/vscroll.h | 4 +- Externals/wxWidgets3/include/wx/webview.h | 242 ++ .../include/wx/webviewarchivehandler.h | 37 + Externals/wxWidgets3/include/wx/window.h | 49 +- Externals/wxWidgets3/include/wx/withimages.h | 97 + Externals/wxWidgets3/include/wx/wizard.h | 7 +- Externals/wxWidgets3/include/wx/wxcrt.h | 4 +- Externals/wxWidgets3/include/wx/wxcrtbase.h | 51 +- Externals/wxWidgets3/include/wx/wxprec.h | 12 +- Externals/wxWidgets3/include/wx/xti.h | 7 +- Externals/wxWidgets3/include/wx/xtiprop.h | 22 +- Externals/wxWidgets3/include/wx/xtistrm.h | 16 +- Externals/wxWidgets3/include/wx/xtitypes.h | 16 +- Externals/wxWidgets3/include/wx/xtixml.h | 4 +- Externals/wxWidgets3/src/aui/auibar.cpp | 1168 ++++----- Externals/wxWidgets3/src/aui/auibook.cpp | 968 ++++--- Externals/wxWidgets3/src/aui/dockart.cpp | 277 +- Externals/wxWidgets3/src/aui/floatpane.cpp | 129 +- Externals/wxWidgets3/src/aui/framemanager.cpp | 634 ++--- Externals/wxWidgets3/src/aui/tabmdi.cpp | 63 +- Externals/wxWidgets3/src/common/accelcmn.cpp | 12 +- .../wxWidgets3/src/common/affinematrix2d.cpp | 186 ++ Externals/wxWidgets3/src/common/anidecod.cpp | 12 +- Externals/wxWidgets3/src/common/appbase.cpp | 48 +- Externals/wxWidgets3/src/common/appcmn.cpp | 19 +- Externals/wxWidgets3/src/common/arrstr.cpp | 12 +- Externals/wxWidgets3/src/common/artprov.cpp | 19 +- Externals/wxWidgets3/src/common/artstd.cpp | 13 +- Externals/wxWidgets3/src/common/arttango.cpp | 4 +- Externals/wxWidgets3/src/common/bmpbase.cpp | 4 +- Externals/wxWidgets3/src/common/bookctrl.cpp | 46 +- Externals/wxWidgets3/src/common/btncmn.cpp | 4 +- Externals/wxWidgets3/src/common/cairo.cpp | 391 ++- .../wxWidgets3/src/common/calctrlcmn.cpp | 7 +- .../wxWidgets3/src/common/clrpickercmn.cpp | 6 +- Externals/wxWidgets3/src/common/cmdline.cpp | 56 +- Externals/wxWidgets3/src/common/cmdproc.cpp | 30 +- Externals/wxWidgets3/src/common/cmndata.cpp | 4 +- Externals/wxWidgets3/src/common/colourcmn.cpp | 58 +- Externals/wxWidgets3/src/common/combocmn.cpp | 98 +- Externals/wxWidgets3/src/common/config.cpp | 22 +- Externals/wxWidgets3/src/common/containr.cpp | 41 +- Externals/wxWidgets3/src/common/convauto.cpp | 101 +- Externals/wxWidgets3/src/common/cshelp.cpp | 4 +- Externals/wxWidgets3/src/common/ctrlcmn.cpp | 4 +- Externals/wxWidgets3/src/common/datavcmn.cpp | 281 +- Externals/wxWidgets3/src/common/datetime.cpp | 183 +- .../wxWidgets3/src/common/datetimefmt.cpp | 89 +- Externals/wxWidgets3/src/common/dcbase.cpp | 19 +- Externals/wxWidgets3/src/common/dcbufcmn.cpp | 4 +- Externals/wxWidgets3/src/common/dcgraph.cpp | 149 +- Externals/wxWidgets3/src/common/dcsvg.cpp | 230 +- Externals/wxWidgets3/src/common/descrip.mms | 23 +- Externals/wxWidgets3/src/common/dlgcmn.cpp | 10 +- Externals/wxWidgets3/src/common/dobjcmn.cpp | 9 +- Externals/wxWidgets3/src/common/docview.cpp | 106 +- Externals/wxWidgets3/src/common/dummy.cpp | 2 +- Externals/wxWidgets3/src/common/dynarray.cpp | 11 +- Externals/wxWidgets3/src/common/dynlib.cpp | 10 +- Externals/wxWidgets3/src/common/encconv.cpp | 2 +- Externals/wxWidgets3/src/common/event.cpp | 106 +- .../wxWidgets3/src/common/evtloopcmn.cpp | 6 +- Externals/wxWidgets3/src/common/file.cpp | 10 +- Externals/wxWidgets3/src/common/fileconf.cpp | 6 +- Externals/wxWidgets3/src/common/filefn.cpp | 90 +- .../wxWidgets3/src/common/filehistorycmn.cpp | 27 +- Externals/wxWidgets3/src/common/filename.cpp | 248 +- .../wxWidgets3/src/common/filepickercmn.cpp | 49 +- Externals/wxWidgets3/src/common/filesys.cpp | 8 +- Externals/wxWidgets3/src/common/fmapbase.cpp | 27 +- Externals/wxWidgets3/src/common/fontcmn.cpp | 109 +- .../wxWidgets3/src/common/fontmgrcmn.cpp | 6 +- .../wxWidgets3/src/common/fontpickercmn.cpp | 4 +- Externals/wxWidgets3/src/common/framecmn.cpp | 6 +- Externals/wxWidgets3/src/common/fs_mem.cpp | 14 +- .../wxWidgets3/src/common/fswatchercmn.cpp | 28 +- Externals/wxWidgets3/src/common/ftp.cpp | 6 +- Externals/wxWidgets3/src/common/gdicmn.cpp | 24 +- Externals/wxWidgets3/src/common/gifdecod.cpp | 4 +- Externals/wxWidgets3/src/common/glcmn.cpp | 4 +- Externals/wxWidgets3/src/common/graphcmn.cpp | 50 +- .../wxWidgets3/src/common/headerctrlcmn.cpp | 23 +- Externals/wxWidgets3/src/common/http.cpp | 80 +- Externals/wxWidgets3/src/common/iconbndl.cpp | 121 +- Externals/wxWidgets3/src/common/imagbmp.cpp | 68 +- Externals/wxWidgets3/src/common/image.cpp | 146 +- Externals/wxWidgets3/src/common/imagfill.cpp | 8 +- Externals/wxWidgets3/src/common/imaggif.cpp | 4 +- Externals/wxWidgets3/src/common/imagiff.cpp | 7 +- Externals/wxWidgets3/src/common/imagjpeg.cpp | 13 +- Externals/wxWidgets3/src/common/imagpcx.cpp | 6 +- Externals/wxWidgets3/src/common/imagpng.cpp | 18 +- Externals/wxWidgets3/src/common/imagtga.cpp | 6 +- Externals/wxWidgets3/src/common/imagtiff.cpp | 325 ++- Externals/wxWidgets3/src/common/imagxpm.cpp | 4 +- Externals/wxWidgets3/src/common/init.cpp | 14 +- Externals/wxWidgets3/src/common/intl.cpp | 70 +- .../wxWidgets3/src/common/languageinfo.cpp | 4 +- Externals/wxWidgets3/src/common/list.cpp | 18 +- .../wxWidgets3/src/common/listctrlcmn.cpp | 85 +- Externals/wxWidgets3/src/common/log.cpp | 185 +- Externals/wxWidgets3/src/common/longlong.cpp | 18 +- Externals/wxWidgets3/src/common/memory.cpp | 16 +- Externals/wxWidgets3/src/common/menucmn.cpp | 22 +- Externals/wxWidgets3/src/common/mimecmn.cpp | 24 +- Externals/wxWidgets3/src/common/msgout.cpp | 6 +- Externals/wxWidgets3/src/common/nbkbase.cpp | 8 +- .../wxWidgets3/src/common/numformatter.cpp | 19 + .../wxWidgets3/src/common/overlaycmn.cpp | 4 +- .../wxWidgets3/src/common/ownerdrwcmn.cpp | 6 +- Externals/wxWidgets3/src/common/panelcmn.cpp | 17 +- Externals/wxWidgets3/src/common/persist.cpp | 24 +- .../wxWidgets3/src/common/pickerbase.cpp | 31 +- Externals/wxWidgets3/src/common/platinfo.cpp | 9 +- Externals/wxWidgets3/src/common/popupcmn.cpp | 40 +- Externals/wxWidgets3/src/common/powercmn.cpp | 4 +- Externals/wxWidgets3/src/common/prntbase.cpp | 196 +- Externals/wxWidgets3/src/common/quantize.cpp | 4 +- .../wxWidgets3/src/common/richtooltipcmn.cpp | 82 + Externals/wxWidgets3/src/common/sckaddr.cpp | 19 +- Externals/wxWidgets3/src/common/sckfile.cpp | 4 +- Externals/wxWidgets3/src/common/sckipc.cpp | 6 +- Externals/wxWidgets3/src/common/sizer.cpp | 7 +- Externals/wxWidgets3/src/common/socket.cpp | 28 +- Externals/wxWidgets3/src/common/sstream.cpp | 11 +- Externals/wxWidgets3/src/common/stockitem.cpp | 205 +- Externals/wxWidgets3/src/common/stopwatch.cpp | 347 +-- Externals/wxWidgets3/src/common/strconv.cpp | 52 +- Externals/wxWidgets3/src/common/string.cpp | 6 +- .../wxWidgets3/src/common/stringimpl.cpp | 8 +- Externals/wxWidgets3/src/common/strvararg.cpp | 15 +- Externals/wxWidgets3/src/common/sysopt.cpp | 7 +- Externals/wxWidgets3/src/common/tbarbase.cpp | 10 +- Externals/wxWidgets3/src/common/textbuf.cpp | 4 +- Externals/wxWidgets3/src/common/textcmn.cpp | 97 +- .../wxWidgets3/src/common/textentrycmn.cpp | 38 +- Externals/wxWidgets3/src/common/time.cpp | 372 +++ Externals/wxWidgets3/src/common/toplvcmn.cpp | 9 +- .../wxWidgets3/src/common/translation.cpp | 8 +- Externals/wxWidgets3/src/common/treebase.cpp | 40 +- Externals/wxWidgets3/src/common/txtstrm.cpp | 6 +- .../wxWidgets3/src/common/uiactioncmn.cpp | 50 +- Externals/wxWidgets3/src/common/utilscmn.cpp | 45 +- Externals/wxWidgets3/src/common/valgen.cpp | 67 +- Externals/wxWidgets3/src/common/webview.cpp | 119 + .../src/common/webviewarchivehandler.cpp | 118 + Externals/wxWidgets3/src/common/wincmn.cpp | 96 +- Externals/wxWidgets3/src/common/windowid.cpp | 57 +- Externals/wxWidgets3/src/common/wxcrt.cpp | 4 +- Externals/wxWidgets3/src/common/xlocale.cpp | 99 +- Externals/wxWidgets3/src/common/xti.cpp | 50 +- Externals/wxWidgets3/src/common/xtistrm.cpp | 14 +- Externals/wxWidgets3/src/common/xtixml.cpp | 6 +- Externals/wxWidgets3/src/common/zipstrm.cpp | 4 +- Externals/wxWidgets3/src/common/zstream.cpp | 4 +- .../wxWidgets3/src/generic/aboutdlgg.cpp | 37 +- Externals/wxWidgets3/src/generic/accel.cpp | 4 +- Externals/wxWidgets3/src/generic/animateg.cpp | 4 +- .../wxWidgets3/src/generic/bannerwindow.cpp | 344 +++ .../wxWidgets3/src/generic/buttonbar.cpp | 7 +- Externals/wxWidgets3/src/generic/calctrlg.cpp | 34 +- Externals/wxWidgets3/src/generic/choicdgg.cpp | 33 +- .../wxWidgets3/src/generic/collpaneg.cpp | 8 +- Externals/wxWidgets3/src/generic/colrdlgg.cpp | 8 +- Externals/wxWidgets3/src/generic/combog.cpp | 15 +- Externals/wxWidgets3/src/generic/datavgen.cpp | 2299 ++++++++++------- Externals/wxWidgets3/src/generic/datectlg.cpp | 12 +- Externals/wxWidgets3/src/generic/dbgrptg.cpp | 4 +- Externals/wxWidgets3/src/generic/dcpsg.cpp | 27 +- Externals/wxWidgets3/src/generic/descrip.mms | 16 +- Externals/wxWidgets3/src/generic/dirctrlg.cpp | 22 +- Externals/wxWidgets3/src/generic/dirdlgg.cpp | 4 +- Externals/wxWidgets3/src/generic/dragimgg.cpp | 22 +- .../wxWidgets3/src/generic/filectrlg.cpp | 14 +- Externals/wxWidgets3/src/generic/filedlgg.cpp | 6 +- .../wxWidgets3/src/generic/filepickerg.cpp | 91 +- Externals/wxWidgets3/src/generic/fontdlgg.cpp | 10 +- .../wxWidgets3/src/generic/fontpickerg.cpp | 4 +- Externals/wxWidgets3/src/generic/graphicc.cpp | 826 +++++- Externals/wxWidgets3/src/generic/grid.cpp | 46 +- Externals/wxWidgets3/src/generic/gridctrl.cpp | 69 +- .../wxWidgets3/src/generic/grideditors.cpp | 166 +- Externals/wxWidgets3/src/generic/gridsel.cpp | 167 +- .../wxWidgets3/src/generic/headerctrlg.cpp | 4 +- Externals/wxWidgets3/src/generic/htmllbox.cpp | 4 +- .../wxWidgets3/src/generic/hyperlinkg.cpp | 32 +- Externals/wxWidgets3/src/generic/imaglist.cpp | 10 +- Externals/wxWidgets3/src/generic/listctrl.cpp | 299 ++- Externals/wxWidgets3/src/generic/logg.cpp | 20 +- Externals/wxWidgets3/src/generic/mask.cpp | 8 +- Externals/wxWidgets3/src/generic/msgdlgg.cpp | 17 +- Externals/wxWidgets3/src/generic/odcombo.cpp | 5 +- Externals/wxWidgets3/src/generic/panelg.cpp | 69 - Externals/wxWidgets3/src/generic/prntdlgg.cpp | 10 +- Externals/wxWidgets3/src/generic/progdlgg.cpp | 35 +- Externals/wxWidgets3/src/generic/regiong.cpp | 4 +- Externals/wxWidgets3/src/generic/renderg.cpp | 12 +- .../wxWidgets3/src/generic/richtooltipg.cpp | 673 +++++ Externals/wxWidgets3/src/generic/scrlwing.cpp | 13 +- Externals/wxWidgets3/src/generic/spinctlg.cpp | 46 +- Externals/wxWidgets3/src/generic/splash.cpp | 50 +- Externals/wxWidgets3/src/generic/splitter.cpp | 94 +- Externals/wxWidgets3/src/generic/srchctlg.cpp | 133 +- Externals/wxWidgets3/src/generic/statusbr.cpp | 8 +- .../wxWidgets3/src/generic/timectrlg.cpp | 668 +++++ Externals/wxWidgets3/src/generic/timer.cpp | 64 +- Externals/wxWidgets3/src/generic/tipwin.cpp | 4 +- Externals/wxWidgets3/src/generic/treectlg.cpp | 11 +- Externals/wxWidgets3/src/generic/treelist.cpp | 1677 ++++++++++++ Externals/wxWidgets3/src/generic/vlbox.cpp | 5 +- Externals/wxWidgets3/src/generic/vscroll.cpp | 13 +- Externals/wxWidgets3/src/generic/wizard.cpp | 24 +- Externals/wxWidgets3/src/gtk/aboutdlg.cpp | 6 +- Externals/wxWidgets3/src/gtk/animate.cpp | 3 +- Externals/wxWidgets3/src/gtk/anybutton.cpp | 422 +++ Externals/wxWidgets3/src/gtk/app.cpp | 4 +- Externals/wxWidgets3/src/gtk/artgtk.cpp | 8 +- .../{assertdlg_gtk.c => assertdlg_gtk.cpp} | 72 +- Externals/wxWidgets3/src/gtk/bitmap.cpp | 15 +- Externals/wxWidgets3/src/gtk/bmpcbox.cpp | 6 +- Externals/wxWidgets3/src/gtk/brush.cpp | 8 +- Externals/wxWidgets3/src/gtk/button.cpp | 422 +-- Externals/wxWidgets3/src/gtk/calctrl.cpp | 121 +- Externals/wxWidgets3/src/gtk/checkbox.cpp | 4 +- Externals/wxWidgets3/src/gtk/choice.cpp | 6 +- Externals/wxWidgets3/src/gtk/clipbrd.cpp | 55 +- Externals/wxWidgets3/src/gtk/clrpicker.cpp | 3 +- Externals/wxWidgets3/src/gtk/collpane.cpp | 11 +- Externals/wxWidgets3/src/gtk/colordlg.cpp | 23 +- Externals/wxWidgets3/src/gtk/colour.cpp | 16 +- Externals/wxWidgets3/src/gtk/combobox.cpp | 29 +- Externals/wxWidgets3/src/gtk/control.cpp | 8 +- Externals/wxWidgets3/src/gtk/cursor.cpp | 36 +- Externals/wxWidgets3/src/gtk/dataobj.cpp | 6 +- Externals/wxWidgets3/src/gtk/dataview.cpp | 860 +++--- Externals/wxWidgets3/src/gtk/dcclient.cpp | 98 +- Externals/wxWidgets3/src/gtk/dcmemory.cpp | 18 +- Externals/wxWidgets3/src/gtk/dcscreen.cpp | 11 +- Externals/wxWidgets3/src/gtk/descrip.mms | 19 +- Externals/wxWidgets3/src/gtk/dirdlg.cpp | 20 +- Externals/wxWidgets3/src/gtk/dnd.cpp | 23 +- Externals/wxWidgets3/src/gtk/filedlg.cpp | 34 +- Externals/wxWidgets3/src/gtk/filepicker.cpp | 28 +- Externals/wxWidgets3/src/gtk/font.cpp | 112 +- Externals/wxWidgets3/src/gtk/fontdlg.cpp | 8 +- Externals/wxWidgets3/src/gtk/fontpicker.cpp | 4 +- Externals/wxWidgets3/src/gtk/frame.cpp | 6 +- Externals/wxWidgets3/src/gtk/glcanvas.cpp | 7 +- Externals/wxWidgets3/src/gtk/gnome/gprint.cpp | 33 +- Externals/wxWidgets3/src/gtk/hyperlink.cpp | 10 +- Externals/wxWidgets3/src/gtk/listbox.cpp | 25 +- Externals/wxWidgets3/src/gtk/mdi.cpp | 32 +- Externals/wxWidgets3/src/gtk/menu.cpp | 144 +- Externals/wxWidgets3/src/gtk/minifram.cpp | 41 +- Externals/wxWidgets3/src/gtk/msgdlg.cpp | 82 +- Externals/wxWidgets3/src/gtk/nativewin.cpp | 7 +- Externals/wxWidgets3/src/gtk/nonownedwnd.cpp | 308 +++ Externals/wxWidgets3/src/gtk/notebook.cpp | 65 +- Externals/wxWidgets3/src/gtk/pen.cpp | 18 +- Externals/wxWidgets3/src/gtk/popupwin.cpp | 12 +- Externals/wxWidgets3/src/gtk/print.cpp | 59 +- Externals/wxWidgets3/src/gtk/radiobox.cpp | 28 +- Externals/wxWidgets3/src/gtk/radiobut.cpp | 12 +- Externals/wxWidgets3/src/gtk/region.cpp | 64 +- Externals/wxWidgets3/src/gtk/renderer.cpp | 47 +- Externals/wxWidgets3/src/gtk/scrolbar.cpp | 35 +- Externals/wxWidgets3/src/gtk/scrolwin.cpp | 17 +- Externals/wxWidgets3/src/gtk/settings.cpp | 21 +- Externals/wxWidgets3/src/gtk/slider.cpp | 34 +- Externals/wxWidgets3/src/gtk/sockgtk.cpp | 31 +- Externals/wxWidgets3/src/gtk/spinctrl.cpp | 16 +- Externals/wxWidgets3/src/gtk/statbmp.cpp | 6 +- Externals/wxWidgets3/src/gtk/statbox.cpp | 14 +- Externals/wxWidgets3/src/gtk/stattext.cpp | 53 +- Externals/wxWidgets3/src/gtk/taskbar.cpp | 29 +- Externals/wxWidgets3/src/gtk/textctrl.cpp | 119 +- Externals/wxWidgets3/src/gtk/textentry.cpp | 16 +- Externals/wxWidgets3/src/gtk/tglbtn.cpp | 220 +- Externals/wxWidgets3/src/gtk/toolbar.cpp | 52 +- Externals/wxWidgets3/src/gtk/tooltip.cpp | 65 +- Externals/wxWidgets3/src/gtk/toplevel.cpp | 314 ++- Externals/wxWidgets3/src/gtk/treeentry_gtk.c | 6 +- Externals/wxWidgets3/src/gtk/utilsgtk.cpp | 62 +- .../wxWidgets3/src/gtk/webview_webkit.cpp | 924 +++++++ Externals/wxWidgets3/src/gtk/win_gtk.cpp | 42 +- Externals/wxWidgets3/src/gtk/window.cpp | 1078 ++++---- Externals/wxWidgets3/src/msw/accel.cpp | 4 +- Externals/wxWidgets3/src/msw/anybutton.cpp | 1244 +++++++++ Externals/wxWidgets3/src/msw/artmsw.cpp | 8 +- Externals/wxWidgets3/src/msw/bitmap.cpp | 36 +- Externals/wxWidgets3/src/msw/bmpbuttn.cpp | 55 +- Externals/wxWidgets3/src/msw/bmpcbox.cpp | 12 +- Externals/wxWidgets3/src/msw/brush.cpp | 10 +- Externals/wxWidgets3/src/msw/button.cpp | 1158 +-------- Externals/wxWidgets3/src/msw/calctrl.cpp | 45 +- Externals/wxWidgets3/src/msw/checkbox.cpp | 17 +- Externals/wxWidgets3/src/msw/choice.cpp | 25 +- Externals/wxWidgets3/src/msw/clipbrd.cpp | 12 +- Externals/wxWidgets3/src/msw/combo.cpp | 24 +- Externals/wxWidgets3/src/msw/control.cpp | 6 +- Externals/wxWidgets3/src/msw/cursor.cpp | 13 +- Externals/wxWidgets3/src/msw/datectrl.cpp | 168 +- Externals/wxWidgets3/src/msw/datetimectrl.cpp | 156 ++ Externals/wxWidgets3/src/msw/dc.cpp | 227 +- Externals/wxWidgets3/src/msw/dcclient.cpp | 13 +- Externals/wxWidgets3/src/msw/dcmemory.cpp | 12 +- Externals/wxWidgets3/src/msw/dcprint.cpp | 4 +- Externals/wxWidgets3/src/msw/dde.cpp | 8 +- Externals/wxWidgets3/src/msw/debughlp.cpp | 31 +- Externals/wxWidgets3/src/msw/dialog.cpp | 11 +- Externals/wxWidgets3/src/msw/dialup.cpp | 8 +- Externals/wxWidgets3/src/msw/dib.cpp | 6 +- Externals/wxWidgets3/src/msw/display.cpp | 88 +- Externals/wxWidgets3/src/msw/dlmsw.cpp | 58 +- Externals/wxWidgets3/src/msw/dragimag.cpp | 46 +- Externals/wxWidgets3/src/msw/enhmeta.cpp | 10 +- Externals/wxWidgets3/src/msw/evtloop.cpp | 22 +- Externals/wxWidgets3/src/msw/filedlg.cpp | 83 +- Externals/wxWidgets3/src/msw/font.cpp | 64 +- Externals/wxWidgets3/src/msw/fontdlg.cpp | 6 +- Externals/wxWidgets3/src/msw/frame.cpp | 73 +- Externals/wxWidgets3/src/msw/fswatcher.cpp | 62 +- Externals/wxWidgets3/src/msw/gdiimage.cpp | 8 +- Externals/wxWidgets3/src/msw/gdiplus.cpp | 24 +- Externals/wxWidgets3/src/msw/glcanvas.cpp | 10 +- Externals/wxWidgets3/src/msw/graphics.cpp | 432 +++- Externals/wxWidgets3/src/msw/headerctrl.cpp | 4 +- Externals/wxWidgets3/src/msw/imaglist.cpp | 6 +- Externals/wxWidgets3/src/msw/joystick.cpp | 8 +- Externals/wxWidgets3/src/msw/listbox.cpp | 12 +- Externals/wxWidgets3/src/msw/listctrl.cpp | 134 +- Externals/wxWidgets3/src/msw/mediactrl_am.cpp | 12 +- Externals/wxWidgets3/src/msw/menu.cpp | 333 ++- Externals/wxWidgets3/src/msw/menuitem.cpp | 52 +- Externals/wxWidgets3/src/msw/mimetype.cpp | 4 +- Externals/wxWidgets3/src/msw/msgdlg.cpp | 88 +- Externals/wxWidgets3/src/msw/nonownedwnd.cpp | 184 ++ Externals/wxWidgets3/src/msw/notebook.cpp | 24 +- Externals/wxWidgets3/src/msw/notifmsg.cpp | 16 +- Externals/wxWidgets3/src/msw/ole/activex.cpp | 80 +- Externals/wxWidgets3/src/msw/ole/dataobj.cpp | 8 +- Externals/wxWidgets3/src/msw/ole/dropsrc.cpp | 4 +- Externals/wxWidgets3/src/msw/ole/oleutils.cpp | 14 +- Externals/wxWidgets3/src/msw/palette.cpp | 14 +- Externals/wxWidgets3/src/msw/panel.cpp | 17 +- Externals/wxWidgets3/src/msw/pen.cpp | 20 +- Externals/wxWidgets3/src/msw/printdlg.cpp | 99 +- Externals/wxWidgets3/src/msw/progdlg.cpp | 40 +- Externals/wxWidgets3/src/msw/radiobox.cpp | 12 +- Externals/wxWidgets3/src/msw/region.cpp | 7 +- Externals/wxWidgets3/src/msw/registry.cpp | 6 +- Externals/wxWidgets3/src/msw/renderer.cpp | 44 +- Externals/wxWidgets3/src/msw/richtooltip.cpp | 200 ++ Externals/wxWidgets3/src/msw/scrolbar.cpp | 6 +- Externals/wxWidgets3/src/msw/slider.cpp | 217 +- Externals/wxWidgets3/src/msw/sockmsw.cpp | 10 +- Externals/wxWidgets3/src/msw/sound.cpp | 10 +- Externals/wxWidgets3/src/msw/spinctrl.cpp | 40 +- Externals/wxWidgets3/src/msw/stackwalk.cpp | 15 +- Externals/wxWidgets3/src/msw/statbmp.cpp | 4 +- Externals/wxWidgets3/src/msw/stattext.cpp | 4 +- Externals/wxWidgets3/src/msw/statusbar.cpp | 83 +- Externals/wxWidgets3/src/msw/taskbar.cpp | 4 +- Externals/wxWidgets3/src/msw/textctrl.cpp | 153 +- Externals/wxWidgets3/src/msw/textentry.cpp | 639 ++++- Externals/wxWidgets3/src/msw/tglbtn.cpp | 231 +- Externals/wxWidgets3/src/msw/thread.cpp | 23 +- Externals/wxWidgets3/src/msw/timectrl.cpp | 61 + Externals/wxWidgets3/src/msw/timer.cpp | 8 +- Externals/wxWidgets3/src/msw/toolbar.cpp | 59 +- Externals/wxWidgets3/src/msw/toplevel.cpp | 311 ++- Externals/wxWidgets3/src/msw/treectrl.cpp | 77 +- Externals/wxWidgets3/src/msw/uiaction.cpp | 20 +- Externals/wxWidgets3/src/msw/utils.cpp | 48 +- Externals/wxWidgets3/src/msw/utilsexc.cpp | 32 +- Externals/wxWidgets3/src/msw/utilsgui.cpp | 4 +- Externals/wxWidgets3/src/msw/webview_ie.cpp | 1369 ++++++++++ .../wxWidgets3/src/msw/wince/tbarwce.cpp | 4 +- Externals/wxWidgets3/src/msw/window.cpp | 230 +- Externals/wxWidgets3/src/osx/accel.cpp | 8 +- .../wxWidgets3/src/osx/anybutton_osx.cpp | 95 + Externals/wxWidgets3/src/osx/artmac.cpp | 4 +- Externals/wxWidgets3/src/osx/brush.cpp | 8 +- Externals/wxWidgets3/src/osx/button_osx.cpp | 76 +- .../wxWidgets3/src/osx/carbon/anybutton.cpp | 113 + Externals/wxWidgets3/src/osx/carbon/app.cpp | 430 ++- .../wxWidgets3/src/osx/carbon/button.cpp | 92 +- .../wxWidgets3/src/osx/carbon/clipbrd.cpp | 8 +- .../wxWidgets3/src/osx/carbon/colordlgosx.mm | 4 +- .../wxWidgets3/src/osx/carbon/combobox.cpp | 14 +- .../wxWidgets3/src/osx/carbon/cursor.cpp | 4 +- .../wxWidgets3/src/osx/carbon/dataobj.cpp | 12 +- .../wxWidgets3/src/osx/carbon/dataview.cpp | 70 +- .../wxWidgets3/src/osx/carbon/dcclient.cpp | 6 +- .../wxWidgets3/src/osx/carbon/dcprint.cpp | 67 +- .../wxWidgets3/src/osx/carbon/evtloop.cpp | 12 +- Externals/wxWidgets3/src/osx/carbon/font.cpp | 16 +- .../wxWidgets3/src/osx/carbon/fontdlg.cpp | 28 +- .../wxWidgets3/src/osx/carbon/fontdlgosx.mm | 27 +- Externals/wxWidgets3/src/osx/carbon/frame.cpp | 11 +- .../wxWidgets3/src/osx/carbon/glcanvas.cpp | 37 +- .../wxWidgets3/src/osx/carbon/graphics.cpp | 329 ++- Externals/wxWidgets3/src/osx/carbon/icon.cpp | 12 +- .../wxWidgets3/src/osx/carbon/listbox.cpp | 6 +- .../src/osx/carbon/listctrl_mac.cpp | 58 +- Externals/wxWidgets3/src/osx/carbon/mdi.cpp | 8 +- Externals/wxWidgets3/src/osx/carbon/menu.cpp | 27 +- .../wxWidgets3/src/osx/carbon/metafile.cpp | 24 +- .../wxWidgets3/src/osx/carbon/nonownedwnd.cpp | 6 +- .../wxWidgets3/src/osx/carbon/notebmac.cpp | 4 +- .../wxWidgets3/src/osx/carbon/region.cpp | 162 +- .../wxWidgets3/src/osx/carbon/renderer.cpp | 27 +- .../wxWidgets3/src/osx/carbon/slider.cpp | 20 +- Externals/wxWidgets3/src/osx/carbon/sound.cpp | 8 +- .../wxWidgets3/src/osx/carbon/statbmp.cpp | 6 +- .../wxWidgets3/src/osx/carbon/taskbar.cpp | 4 +- .../wxWidgets3/src/osx/carbon/thread.cpp | 7 +- Externals/wxWidgets3/src/osx/carbon/uma.cpp | 8 +- Externals/wxWidgets3/src/osx/carbon/utils.cpp | 4 +- .../wxWidgets3/src/osx/carbon/utilscocoa.mm | 9 +- .../wxWidgets3/src/osx/carbon/window.cpp | 4 +- Externals/wxWidgets3/src/osx/checkbox_osx.cpp | 20 +- Externals/wxWidgets3/src/osx/choice_osx.cpp | 10 +- .../wxWidgets3/src/osx/cocoa/anybutton.mm | 49 + Externals/wxWidgets3/src/osx/cocoa/button.mm | 99 +- .../wxWidgets3/src/osx/cocoa/combobox.mm | 14 +- .../wxWidgets3/src/osx/cocoa/dataview.mm | 163 +- .../wxWidgets3/src/osx/cocoa/datetimectrl.mm | 179 ++ Externals/wxWidgets3/src/osx/cocoa/dirdlg.mm | 13 +- Externals/wxWidgets3/src/osx/cocoa/dnd.mm | 29 +- Externals/wxWidgets3/src/osx/cocoa/evtloop.mm | 69 +- Externals/wxWidgets3/src/osx/cocoa/filedlg.mm | 70 +- Externals/wxWidgets3/src/osx/cocoa/gauge.mm | 33 +- Externals/wxWidgets3/src/osx/cocoa/listbox.mm | 6 +- Externals/wxWidgets3/src/osx/cocoa/menu.mm | 43 +- .../wxWidgets3/src/osx/cocoa/menuitem.mm | 35 +- Externals/wxWidgets3/src/osx/cocoa/msgdlg.mm | 42 +- .../wxWidgets3/src/osx/cocoa/nonownedwnd.mm | 150 +- .../wxWidgets3/src/osx/cocoa/notebook.mm | 6 +- .../wxWidgets3/src/osx/cocoa/printdlg.mm | 6 +- Externals/wxWidgets3/src/osx/cocoa/slider.mm | 9 +- .../wxWidgets3/src/osx/cocoa/spinbutt.mm | 11 +- .../wxWidgets3/src/osx/cocoa/srchctrl.mm | 28 +- Externals/wxWidgets3/src/osx/cocoa/taskbar.mm | 4 +- .../wxWidgets3/src/osx/cocoa/textctrl.mm | 181 +- Externals/wxWidgets3/src/osx/cocoa/tglbtn.mm | 4 +- Externals/wxWidgets3/src/osx/cocoa/toolbar.mm | 91 +- Externals/wxWidgets3/src/osx/cocoa/utils.mm | 54 +- Externals/wxWidgets3/src/osx/cocoa/window.mm | 631 +++-- Externals/wxWidgets3/src/osx/combobox_osx.cpp | 16 +- Externals/wxWidgets3/src/osx/core/bitmap.cpp | 216 +- Externals/wxWidgets3/src/osx/core/colour.cpp | 5 +- .../wxWidgets3/src/osx/core/dcmemory.cpp | 10 +- .../wxWidgets3/src/osx/core/evtloop_cf.cpp | 50 +- .../wxWidgets3/src/osx/core/fontenum.cpp | 15 +- Externals/wxWidgets3/src/osx/core/hid.cpp | 18 +- .../wxWidgets3/src/osx/core/hidjoystick.cpp | 10 +- .../wxWidgets3/src/osx/core/mimetype.cpp | 52 +- .../wxWidgets3/src/osx/core/printmac.cpp | 87 +- Externals/wxWidgets3/src/osx/core/sound.cpp | 4 +- .../wxWidgets3/src/osx/core/utilsexc_base.cpp | 19 +- Externals/wxWidgets3/src/osx/dataview_osx.cpp | 33 +- Externals/wxWidgets3/src/osx/datectrl_osx.cpp | 90 + .../wxWidgets3/src/osx/datetimectrl_osx.cpp | 55 + Externals/wxWidgets3/src/osx/dialog_osx.cpp | 4 +- Externals/wxWidgets3/src/osx/dnd_osx.cpp | 8 +- Externals/wxWidgets3/src/osx/imaglist.cpp | 6 +- .../wxWidgets3/src/osx/iphone/anybutton.mm | 56 + Externals/wxWidgets3/src/osx/iphone/button.mm | 35 +- .../wxWidgets3/src/osx/iphone/evtloop.mm | 6 +- .../wxWidgets3/src/osx/iphone/nonownedwnd.mm | 14 +- .../wxWidgets3/src/osx/iphone/toolbar.mm | 4 +- Externals/wxWidgets3/src/osx/iphone/window.mm | 9 +- Externals/wxWidgets3/src/osx/listbox_osx.cpp | 5 +- Externals/wxWidgets3/src/osx/menu_osx.cpp | 59 +- Externals/wxWidgets3/src/osx/menuitem_osx.cpp | 4 +- .../wxWidgets3/src/osx/nonownedwnd_osx.cpp | 76 +- Externals/wxWidgets3/src/osx/notebook_osx.cpp | 13 +- Externals/wxWidgets3/src/osx/pen.cpp | 16 +- Externals/wxWidgets3/src/osx/printdlg_osx.cpp | 10 +- Externals/wxWidgets3/src/osx/sound_osx.cpp | 4 +- Externals/wxWidgets3/src/osx/spinctrl_osx.cpp | 12 +- Externals/wxWidgets3/src/osx/textctrl_osx.cpp | 35 +- .../wxWidgets3/src/osx/textentry_osx.cpp | 78 +- Externals/wxWidgets3/src/osx/tglbtn_osx.cpp | 74 +- Externals/wxWidgets3/src/osx/timectrl_osx.cpp | 80 + Externals/wxWidgets3/src/osx/toplevel_osx.cpp | 7 +- Externals/wxWidgets3/src/osx/uiaction_osx.cpp | 252 +- Externals/wxWidgets3/src/osx/utils_osx.cpp | 38 +- .../wxWidgets3/src/osx/webview_webkit.mm | 1318 ++++++++++ Externals/wxWidgets3/src/osx/window_osx.cpp | 199 +- Externals/wxWidgets3/src/unix/dialup.cpp | 7 +- Externals/wxWidgets3/src/unix/fontutil.cpp | 28 +- .../wxWidgets3/src/unix/fswatcher_kqueue.cpp | 29 +- Externals/wxWidgets3/src/unix/mediactrl.cpp | 29 +- Externals/wxWidgets3/src/unix/mimetype.cpp | 4 +- Externals/wxWidgets3/src/unix/sound.cpp | 10 +- Externals/wxWidgets3/src/unix/threadpsx.cpp | 6 +- Externals/wxWidgets3/src/unix/timerunx.cpp | 24 +- Externals/wxWidgets3/src/unix/uiactionx11.cpp | 3 +- Externals/wxWidgets3/src/unix/utilsunx.cpp | 4 +- Externals/wxWidgets3/src/unix/utilsx11.cpp | 4 +- Externals/wxWidgets3/wx/setup.h | 2 - Externals/wxWidgets3/wx/wxcocoa.h | 87 +- Externals/wxWidgets3/wx/wxgtk.h | 142 +- .../wxWidgets3/wx/{wxmsw.h => wxmsw_old.h} | 0 SConstruct | 10 +- Source/Core/DolphinWX/Src/WXInputBase.cpp | 2 +- 906 files changed, 39468 insertions(+), 17244 deletions(-) create mode 100755 Externals/wxWidgets3/build_wx.sh create mode 100644 Externals/wxWidgets3/include/wx/affinematrix2d.h create mode 100644 Externals/wxWidgets3/include/wx/affinematrix2dbase.h create mode 100644 Externals/wxWidgets3/include/wx/anybutton.h create mode 100644 Externals/wxWidgets3/include/wx/bannerwindow.h create mode 100644 Externals/wxWidgets3/include/wx/custombgwin.h create mode 100644 Externals/wxWidgets3/include/wx/datetimectrl.h create mode 100644 Externals/wxWidgets3/include/wx/eventfilter.h create mode 100644 Externals/wxWidgets3/include/wx/generic/custombgwin.h create mode 100644 Externals/wxWidgets3/include/wx/generic/private/richtooltip.h create mode 100644 Externals/wxWidgets3/include/wx/generic/timectrl.h create mode 100644 Externals/wxWidgets3/include/wx/gtk/anybutton.h create mode 100644 Externals/wxWidgets3/include/wx/gtk/nonownedwnd.h create mode 100644 Externals/wxWidgets3/include/wx/gtk/private/event.h create mode 100644 Externals/wxWidgets3/include/wx/gtk/private/gtk2-compat.h create mode 100644 Externals/wxWidgets3/include/wx/gtk/private/list.h create mode 100644 Externals/wxWidgets3/include/wx/gtk/webview_webkit.h create mode 100644 Externals/wxWidgets3/include/wx/gtk/webviewhistoryitem_webkit.h create mode 100644 Externals/wxWidgets3/include/wx/itemid.h create mode 100644 Externals/wxWidgets3/include/wx/msw/anybutton.h create mode 100644 Externals/wxWidgets3/include/wx/msw/custombgwin.h create mode 100644 Externals/wxWidgets3/include/wx/msw/datetimectrl.h create mode 100644 Externals/wxWidgets3/include/wx/msw/nonownedwnd.h create mode 100644 Externals/wxWidgets3/include/wx/msw/private/hiddenwin.h create mode 100644 Externals/wxWidgets3/include/wx/msw/timectrl.h create mode 100644 Externals/wxWidgets3/include/wx/msw/webview_ie.h create mode 100644 Externals/wxWidgets3/include/wx/msw/webviewhistoryitem_ie.h create mode 100644 Externals/wxWidgets3/include/wx/osx/anybutton.h create mode 100644 Externals/wxWidgets3/include/wx/osx/cocoa/private/date.h create mode 100644 Externals/wxWidgets3/include/wx/osx/core/private/datetimectrl.h create mode 100644 Externals/wxWidgets3/include/wx/osx/datectrl.h create mode 100644 Externals/wxWidgets3/include/wx/osx/datetimectrl.h create mode 100644 Externals/wxWidgets3/include/wx/osx/timectrl.h create mode 100644 Externals/wxWidgets3/include/wx/osx/webview_webkit.h create mode 100644 Externals/wxWidgets3/include/wx/osx/webviewhistoryitem_webkit.h create mode 100644 Externals/wxWidgets3/include/wx/persist/splitter.h create mode 100644 Externals/wxWidgets3/include/wx/private/richtooltip.h create mode 100644 Externals/wxWidgets3/include/wx/richtooltip.h create mode 100644 Externals/wxWidgets3/include/wx/textcompleter.h create mode 100644 Externals/wxWidgets3/include/wx/time.h create mode 100644 Externals/wxWidgets3/include/wx/timectrl.h create mode 100644 Externals/wxWidgets3/include/wx/treelist.h create mode 100644 Externals/wxWidgets3/include/wx/webview.h create mode 100644 Externals/wxWidgets3/include/wx/webviewarchivehandler.h create mode 100644 Externals/wxWidgets3/include/wx/withimages.h create mode 100644 Externals/wxWidgets3/src/common/affinematrix2d.cpp create mode 100644 Externals/wxWidgets3/src/common/richtooltipcmn.cpp create mode 100644 Externals/wxWidgets3/src/common/time.cpp create mode 100644 Externals/wxWidgets3/src/common/webview.cpp create mode 100644 Externals/wxWidgets3/src/common/webviewarchivehandler.cpp create mode 100644 Externals/wxWidgets3/src/generic/bannerwindow.cpp delete mode 100644 Externals/wxWidgets3/src/generic/panelg.cpp create mode 100644 Externals/wxWidgets3/src/generic/richtooltipg.cpp create mode 100644 Externals/wxWidgets3/src/generic/timectrlg.cpp create mode 100644 Externals/wxWidgets3/src/generic/treelist.cpp create mode 100644 Externals/wxWidgets3/src/gtk/anybutton.cpp rename Externals/wxWidgets3/src/gtk/{assertdlg_gtk.c => assertdlg_gtk.cpp} (90%) create mode 100644 Externals/wxWidgets3/src/gtk/nonownedwnd.cpp create mode 100644 Externals/wxWidgets3/src/gtk/webview_webkit.cpp create mode 100644 Externals/wxWidgets3/src/msw/anybutton.cpp create mode 100644 Externals/wxWidgets3/src/msw/datetimectrl.cpp create mode 100644 Externals/wxWidgets3/src/msw/nonownedwnd.cpp create mode 100644 Externals/wxWidgets3/src/msw/richtooltip.cpp create mode 100644 Externals/wxWidgets3/src/msw/timectrl.cpp create mode 100644 Externals/wxWidgets3/src/msw/webview_ie.cpp create mode 100644 Externals/wxWidgets3/src/osx/anybutton_osx.cpp create mode 100644 Externals/wxWidgets3/src/osx/carbon/anybutton.cpp create mode 100644 Externals/wxWidgets3/src/osx/cocoa/anybutton.mm create mode 100644 Externals/wxWidgets3/src/osx/cocoa/datetimectrl.mm create mode 100644 Externals/wxWidgets3/src/osx/datectrl_osx.cpp create mode 100644 Externals/wxWidgets3/src/osx/datetimectrl_osx.cpp create mode 100644 Externals/wxWidgets3/src/osx/iphone/anybutton.mm create mode 100644 Externals/wxWidgets3/src/osx/timectrl_osx.cpp create mode 100644 Externals/wxWidgets3/src/osx/webview_webkit.mm rename Externals/wxWidgets3/wx/{wxmsw.h => wxmsw_old.h} (100%) diff --git a/Externals/wxWidgets3/SConscript b/Externals/wxWidgets3/SConscript index 4385282e66..c894dcb2a0 100644 --- a/Externals/wxWidgets3/SConscript +++ b/Externals/wxWidgets3/SConscript @@ -13,7 +13,7 @@ wxenv = env.Clone() wxenv['CCFLAGS'] += ['-Wno-deprecated-declarations', '-Wno-shadow'] wxenv['CPPDEFINES'] += ['WXBUILDING'] -# gtk, msw, osx and shared files as of r67291 +# gtk, msw, osx and shared files as of r70933 aui = [ 'src/aui/auibar.cpp', @@ -27,6 +27,7 @@ aui = [ common = [ 'src/common/accelcmn.cpp', #'src/common/accesscmn.cpp', + 'src/common/affinematrix2d.cpp', 'src/common/anidecod.cpp', 'src/common/animatecmn.cpp', 'src/common/any.cpp', @@ -231,6 +232,7 @@ common = [ 'src/common/textcmn.cpp', 'src/common/textentrycmn.cpp', 'src/common/textfile.cpp', + 'src/common/time.cpp', 'src/common/timercmn.cpp', 'src/common/timerimpl.cpp', 'src/common/tokenzr.cpp', @@ -249,6 +251,7 @@ common = [ 'src/common/valnum.cpp', 'src/common/valtext.cpp', 'src/common/variant.cpp', + #'src/common/webview.cpp', 'src/common/wfstream.cpp', 'src/common/wincmn.cpp', 'src/common/windowid.cpp', @@ -264,25 +267,9 @@ common = [ 'src/common/zstream.cpp', ] -expat = [ - #'src/expat/lib/xmlparse.c', - #'src/expat/lib/xmlrole.c', - #'src/expat/lib/xmltok.c', - #'src/expat/lib/xmltok_impl.c', - #'src/expat/lib/xmltok_ns.c', - #'src/expat/xmlwf/codepage.c', - #'src/expat/xmlwf/ct.c', - #'src/expat/xmlwf/readfilemap.c', - #'src/expat/xmlwf/unixfilemap.c', - #'src/expat/xmlwf/win32filemap.c', - #'src/expat/xmlwf/xmlfile.c', - #'src/expat/xmlwf/xmlmime.c', - #'src/expat/xmlwf/xmlwf.c', - #'src/expat/xmlwf/xmlwin32url.cxx', - ] - generic = [ 'src/generic/aboutdlgg.cpp', + 'src/generic/bannerwindow.cpp', 'src/generic/bmpcboxg.cpp', 'src/generic/busyinfo.cpp', 'src/generic/buttonbar.cpp', @@ -327,7 +314,6 @@ generic = [ 'src/generic/notifmsgg.cpp', 'src/generic/numdlgg.cpp', 'src/generic/odcombo.cpp', - 'src/generic/panelg.cpp', 'src/generic/printps.cpp', 'src/generic/prntdlgg.cpp', 'src/generic/progdlgg.cpp', @@ -348,12 +334,14 @@ generic = [ 'src/generic/statusbr.cpp', 'src/generic/tabg.cpp', 'src/generic/textdlgg.cpp', + 'src/generic/timectrlg.cpp', #'src/generic/timer.cpp', 'src/generic/tipdlg.cpp', 'src/generic/tipwin.cpp', 'src/generic/toolbkg.cpp', 'src/generic/treebkg.cpp', 'src/generic/treectlg.cpp', + 'src/generic/treelist.cpp', 'src/generic/vlbox.cpp', 'src/generic/vscroll.cpp', 'src/generic/wizard.cpp', @@ -379,9 +367,10 @@ genericosx = [ gtk = [ 'src/gtk/aboutdlg.cpp', 'src/gtk/animate.cpp', + 'src/gtk/anybutton.cpp', 'src/gtk/app.cpp', 'src/gtk/artgtk.cpp', - 'src/gtk/assertdlg_gtk.c', + 'src/gtk/assertdlg_gtk.cpp', 'src/gtk/bitmap.cpp', 'src/gtk/bmpbuttn.cpp', 'src/gtk/bmpcbox.cpp', @@ -432,6 +421,7 @@ gtk = [ 'src/gtk/mnemonics.cpp', 'src/gtk/msgdlg.cpp', 'src/gtk/nativewin.cpp', + 'src/gtk/nonownedwnd.cpp', 'src/gtk/notebook.cpp', 'src/gtk/pen.cpp', 'src/gtk/popupwin.cpp', @@ -462,93 +452,15 @@ gtk = [ 'src/gtk/toplevel.cpp', 'src/gtk/treeentry_gtk.c', 'src/gtk/utilsgtk.cpp', + #'src/gtk/webview_webkit.cpp', 'src/gtk/win_gtk.cpp', 'src/gtk/window.cpp', ] -html = [ - 'src/html/chm.cpp', - 'src/html/helpctrl.cpp', - 'src/html/helpdata.cpp', - 'src/html/helpdlg.cpp', - 'src/html/helpfrm.cpp', - 'src/html/helpwnd.cpp', - 'src/html/htmlcell.cpp', - #'src/html/htmlctrl/webkit/webkit.mm', - 'src/html/htmlfilt.cpp', - 'src/html/htmlpars.cpp', - 'src/html/htmltag.cpp', - 'src/html/htmlwin.cpp', - 'src/html/htmprint.cpp', - 'src/html/m_dflist.cpp', - 'src/html/m_fonts.cpp', - 'src/html/m_hline.cpp', - 'src/html/m_image.cpp', - 'src/html/m_layout.cpp', - 'src/html/m_links.cpp', - 'src/html/m_list.cpp', - 'src/html/m_pre.cpp', - 'src/html/m_span.cpp', - 'src/html/m_style.cpp', - 'src/html/m_tables.cpp', - 'src/html/styleparams.cpp', - 'src/html/winpars.cpp', - ] - -jpeg = [ - 'src/jpeg/jcapimin.c', - 'src/jpeg/jcapistd.c', - 'src/jpeg/jccoefct.c', - 'src/jpeg/jccolor.c', - 'src/jpeg/jcdctmgr.c', - 'src/jpeg/jchuff.c', - 'src/jpeg/jcinit.c', - 'src/jpeg/jcmainct.c', - 'src/jpeg/jcmarker.c', - 'src/jpeg/jcmaster.c', - 'src/jpeg/jcomapi.c', - 'src/jpeg/jcparam.c', - 'src/jpeg/jcphuff.c', - 'src/jpeg/jcprepct.c', - 'src/jpeg/jcsample.c', - 'src/jpeg/jctrans.c', - 'src/jpeg/jdapimin.c', - 'src/jpeg/jdapistd.c', - 'src/jpeg/jdatadst.c', - 'src/jpeg/jdatasrc.c', - 'src/jpeg/jdcoefct.c', - 'src/jpeg/jdcolor.c', - 'src/jpeg/jddctmgr.c', - 'src/jpeg/jdhuff.c', - 'src/jpeg/jdinput.c', - 'src/jpeg/jdmainct.c', - 'src/jpeg/jdmarker.c', - 'src/jpeg/jdmaster.c', - 'src/jpeg/jdmerge.c', - 'src/jpeg/jdphuff.c', - 'src/jpeg/jdpostct.c', - 'src/jpeg/jdsample.c', - 'src/jpeg/jdtrans.c', - 'src/jpeg/jerror.c', - 'src/jpeg/jfdctflt.c', - 'src/jpeg/jfdctfst.c', - 'src/jpeg/jfdctint.c', - 'src/jpeg/jidctflt.c', - 'src/jpeg/jidctfst.c', - 'src/jpeg/jidctint.c', - 'src/jpeg/jidctred.c', - 'src/jpeg/jmemansi.c', - 'src/jpeg/jmemmgr.c', - 'src/jpeg/jmemname.c', - 'src/jpeg/jmemnobs.c', - 'src/jpeg/jquant1.c', - 'src/jpeg/jquant2.c', - 'src/jpeg/jutils.c', - ] - msw = [ 'src/msw/aboutdlg.cpp', 'src/msw/accel.cpp', + 'src/msw/anybutton.cpp', 'src/msw/app.cpp', 'src/msw/artmsw.cpp', 'src/msw/basemsw.cpp', @@ -574,6 +486,7 @@ msw = [ 'src/msw/data.cpp', 'src/msw/datecontrols.cpp', 'src/msw/datectrl.cpp', + 'src/msw/datetimectrl.cpp', 'src/msw/dc.cpp', 'src/msw/dcclient.cpp', 'src/msw/dcmemory.cpp', @@ -631,6 +544,7 @@ msw = [ 'src/msw/mslu.cpp', 'src/msw/nativdlg.cpp', 'src/msw/nativewin.cpp', + 'src/msw/nonownedwnd.cpp', 'src/msw/notebook.cpp', 'src/msw/notifmsg.cpp', 'src/msw/ole/access.cpp', @@ -678,6 +592,7 @@ msw = [ 'src/msw/textentry.cpp', 'src/msw/tglbtn.cpp', 'src/msw/thread.cpp', + 'src/msw/timectrl.cpp', 'src/msw/timer.cpp', 'src/msw/toolbar.cpp', 'src/msw/tooltip.cpp', @@ -691,6 +606,7 @@ msw = [ 'src/msw/uxtheme.cpp', 'src/msw/version.rc', 'src/msw/volume.cpp', + #'src/msw/webview_ie.cpp', 'src/msw/wince/checklst.cpp', 'src/msw/wince/choicece.cpp', 'src/msw/wince/crt.cpp', @@ -708,6 +624,7 @@ msw = [ osx = [ 'src/osx/accel.cpp', + 'src/osx/anybutton_osx.cpp', 'src/osx/artmac.cpp', 'src/osx/bmpbuttn_osx.cpp', 'src/osx/brush.cpp', @@ -717,6 +634,8 @@ osx = [ 'src/osx/choice_osx.cpp', 'src/osx/combobox_osx.cpp', 'src/osx/dataview_osx.cpp', + 'src/osx/datectrl_osx.cpp', + 'src/osx/datetimectrl_osx.cpp', 'src/osx/dialog_osx.cpp', 'src/osx/dnd_osx.cpp', 'src/osx/fontutil.cpp', @@ -746,12 +665,15 @@ osx = [ 'src/osx/textctrl_osx.cpp', 'src/osx/textentry_osx.cpp', 'src/osx/tglbtn_osx.cpp', + 'src/osx/timectrl_osx.cpp', 'src/osx/toolbar_osx.cpp', 'src/osx/toplevel_osx.cpp', 'src/osx/uiaction_osx.cpp', 'src/osx/utils_osx.cpp', + #'src/osx/webview_webkit.mm', 'src/osx/window_osx.cpp', #'src/osx/carbon/aboutdlg.cpp', + 'src/osx/carbon/anybutton.cpp', 'src/osx/carbon/app.cpp', #'src/osx/carbon/bmpbuttn.cpp', #'src/osx/carbon/button.cpp', @@ -829,12 +751,14 @@ osx = [ 'src/osx/carbon/utilscocoa.mm', #'src/osx/carbon/window.cpp', 'src/osx/cocoa/aboutdlg.mm', + 'src/osx/cocoa/anybutton.mm', 'src/osx/cocoa/button.mm', 'src/osx/cocoa/checkbox.mm', 'src/osx/cocoa/choice.mm', 'src/osx/cocoa/colour.mm', 'src/osx/cocoa/combobox.mm', 'src/osx/cocoa/dataview.mm', + 'src/osx/cocoa/datetimectrl.mm', 'src/osx/cocoa/dialog.mm', 'src/osx/cocoa/dirdlg.mm', 'src/osx/cocoa/dnd.mm', @@ -902,228 +826,6 @@ osx = [ #'src/osx/iphone/window.mm', ] -png = [ - 'src/png/png.c', - 'src/png/pngerror.c', - 'src/png/pngget.c', - 'src/png/pngmem.c', - 'src/png/pngpread.c', - 'src/png/pngread.c', - 'src/png/pngrio.c', - 'src/png/pngrtran.c', - 'src/png/pngrutil.c', - 'src/png/pngset.c', - 'src/png/pngtrans.c', - 'src/png/pngwio.c', - 'src/png/pngwrite.c', - 'src/png/pngwtran.c', - 'src/png/pngwutil.c', - ] - -propgrid = [ - 'src/propgrid/advprops.cpp', - 'src/propgrid/editors.cpp', - 'src/propgrid/manager.cpp', - 'src/propgrid/property.cpp', - 'src/propgrid/propgrid.cpp', - 'src/propgrid/propgridiface.cpp', - 'src/propgrid/propgridpagestate.cpp', - 'src/propgrid/props.cpp', - ] - -regex = [ - 'src/regex/regcomp.c', - 'src/regex/regerror.c', - 'src/regex/regexec.c', - 'src/regex/regfree.c', - ] - -ribbon = [ - 'src/ribbon/art_aui.cpp', - 'src/ribbon/art_internal.cpp', - 'src/ribbon/art_msw.cpp', - 'src/ribbon/bar.cpp', - 'src/ribbon/buttonbar.cpp', - 'src/ribbon/control.cpp', - 'src/ribbon/gallery.cpp', - 'src/ribbon/page.cpp', - 'src/ribbon/panel.cpp', - 'src/ribbon/toolbar.cpp', - ] - -richtext = [ - #'src/richtext/richtextbackgroundpage.cpp', - #'src/richtext/richtextborderspage.cpp', - 'src/richtext/richtextbuffer.cpp', - #'src/richtext/richtextbulletspage.cpp', - 'src/richtext/richtextctrl.cpp', - #'src/richtext/richtextfontpage.cpp', - 'src/richtext/richtextformatdlg.cpp', - 'src/richtext/richtexthtml.cpp', - 'src/richtext/richtextimagedlg.cpp', - #'src/richtext/richtextindentspage.cpp', - #'src/richtext/richtextliststylepage.cpp', - #'src/richtext/richtextmarginspage.cpp', - 'src/richtext/richtextprint.cpp', - #'src/richtext/richtextsizepage.cpp', - 'src/richtext/richtextstyledlg.cpp', - #'src/richtext/richtextstylepage.cpp', - 'src/richtext/richtextstyles.cpp', - 'src/richtext/richtextsymboldlg.cpp', - #'src/richtext/richtexttabspage.cpp', - 'src/richtext/richtextxml.cpp', - ] - -stc = [ - 'src/stc/PlatWX.cpp', - 'src/stc/ScintillaWX.cpp', - 'src/stc/scintilla/src/AutoComplete.cxx', - 'src/stc/scintilla/src/CallTip.cxx', - 'src/stc/scintilla/src/CellBuffer.cxx', - 'src/stc/scintilla/src/CharClassify.cxx', - 'src/stc/scintilla/src/ContractionState.cxx', - 'src/stc/scintilla/src/Decoration.cxx', - 'src/stc/scintilla/src/Document.cxx', - 'src/stc/scintilla/src/DocumentAccessor.cxx', - 'src/stc/scintilla/src/Editor.cxx', - 'src/stc/scintilla/src/ExternalLexer.cxx', - 'src/stc/scintilla/src/Indicator.cxx', - 'src/stc/scintilla/src/KeyMap.cxx', - 'src/stc/scintilla/src/KeyWords.cxx', - 'src/stc/scintilla/src/LexAPDL.cxx', - 'src/stc/scintilla/src/LexASY.cxx', - 'src/stc/scintilla/src/LexAU3.cxx', - 'src/stc/scintilla/src/LexAVE.cxx', - 'src/stc/scintilla/src/LexAbaqus.cxx', - 'src/stc/scintilla/src/LexAda.cxx', - 'src/stc/scintilla/src/LexAsm.cxx', - 'src/stc/scintilla/src/LexAsn1.cxx', - 'src/stc/scintilla/src/LexBaan.cxx', - 'src/stc/scintilla/src/LexBash.cxx', - 'src/stc/scintilla/src/LexBasic.cxx', - 'src/stc/scintilla/src/LexBullant.cxx', - 'src/stc/scintilla/src/LexCLW.cxx', - 'src/stc/scintilla/src/LexCOBOL.cxx', - 'src/stc/scintilla/src/LexCPP.cxx', - 'src/stc/scintilla/src/LexCSS.cxx', - 'src/stc/scintilla/src/LexCaml.cxx', - 'src/stc/scintilla/src/LexCmake.cxx', - 'src/stc/scintilla/src/LexConf.cxx', - 'src/stc/scintilla/src/LexCrontab.cxx', - 'src/stc/scintilla/src/LexCsound.cxx', - 'src/stc/scintilla/src/LexD.cxx', - 'src/stc/scintilla/src/LexEScript.cxx', - 'src/stc/scintilla/src/LexEiffel.cxx', - 'src/stc/scintilla/src/LexErlang.cxx', - 'src/stc/scintilla/src/LexFlagship.cxx', - 'src/stc/scintilla/src/LexForth.cxx', - 'src/stc/scintilla/src/LexFortran.cxx', - 'src/stc/scintilla/src/LexGAP.cxx', - 'src/stc/scintilla/src/LexGui4Cli.cxx', - 'src/stc/scintilla/src/LexHTML.cxx', - 'src/stc/scintilla/src/LexHaskell.cxx', - 'src/stc/scintilla/src/LexInno.cxx', - 'src/stc/scintilla/src/LexKix.cxx', - 'src/stc/scintilla/src/LexLisp.cxx', - 'src/stc/scintilla/src/LexLout.cxx', - 'src/stc/scintilla/src/LexLua.cxx', - 'src/stc/scintilla/src/LexMMIXAL.cxx', - 'src/stc/scintilla/src/LexMPT.cxx', - 'src/stc/scintilla/src/LexMSSQL.cxx', - 'src/stc/scintilla/src/LexMagik.cxx', - 'src/stc/scintilla/src/LexMarkdown.cxx', - 'src/stc/scintilla/src/LexMatlab.cxx', - 'src/stc/scintilla/src/LexMetapost.cxx', - 'src/stc/scintilla/src/LexMySQL.cxx', - 'src/stc/scintilla/src/LexNimrod.cxx', - 'src/stc/scintilla/src/LexNsis.cxx', - 'src/stc/scintilla/src/LexOpal.cxx', - 'src/stc/scintilla/src/LexOthers.cxx', - 'src/stc/scintilla/src/LexPB.cxx', - 'src/stc/scintilla/src/LexPLM.cxx', - 'src/stc/scintilla/src/LexPOV.cxx', - 'src/stc/scintilla/src/LexPS.cxx', - 'src/stc/scintilla/src/LexPascal.cxx', - 'src/stc/scintilla/src/LexPerl.cxx', - 'src/stc/scintilla/src/LexPowerPro.cxx', - 'src/stc/scintilla/src/LexPowerShell.cxx', - 'src/stc/scintilla/src/LexProgress.cxx', - 'src/stc/scintilla/src/LexPython.cxx', - 'src/stc/scintilla/src/LexR.cxx', - 'src/stc/scintilla/src/LexRebol.cxx', - 'src/stc/scintilla/src/LexRuby.cxx', - 'src/stc/scintilla/src/LexSML.cxx', - 'src/stc/scintilla/src/LexSQL.cxx', - 'src/stc/scintilla/src/LexScriptol.cxx', - 'src/stc/scintilla/src/LexSmalltalk.cxx', - 'src/stc/scintilla/src/LexSorcus.cxx', - 'src/stc/scintilla/src/LexSpecman.cxx', - 'src/stc/scintilla/src/LexSpice.cxx', - 'src/stc/scintilla/src/LexTACL.cxx', - 'src/stc/scintilla/src/LexTADS3.cxx', - 'src/stc/scintilla/src/LexTAL.cxx', - 'src/stc/scintilla/src/LexTCL.cxx', - 'src/stc/scintilla/src/LexTeX.cxx', - 'src/stc/scintilla/src/LexVB.cxx', - 'src/stc/scintilla/src/LexVHDL.cxx', - 'src/stc/scintilla/src/LexVerilog.cxx', - 'src/stc/scintilla/src/LexYAML.cxx', - 'src/stc/scintilla/src/LineMarker.cxx', - 'src/stc/scintilla/src/PerLine.cxx', - 'src/stc/scintilla/src/PositionCache.cxx', - 'src/stc/scintilla/src/PropSet.cxx', - 'src/stc/scintilla/src/RESearch.cxx', - 'src/stc/scintilla/src/RunStyles.cxx', - 'src/stc/scintilla/src/ScintillaBase.cxx', - 'src/stc/scintilla/src/Selection.cxx', - 'src/stc/scintilla/src/Style.cxx', - 'src/stc/scintilla/src/StyleContext.cxx', - 'src/stc/scintilla/src/UniConversion.cxx', - 'src/stc/scintilla/src/ViewStyle.cxx', - 'src/stc/scintilla/src/WindowAccessor.cxx', - 'src/stc/scintilla/src/XPM.cxx', - 'src/stc/stc.cpp', - ] - -tiff = [ - 'src/tiff/libtiff/tif_aux.c', - 'src/tiff/libtiff/tif_close.c', - 'src/tiff/libtiff/tif_codec.c', - 'src/tiff/libtiff/tif_color.c', - 'src/tiff/libtiff/tif_compress.c', - 'src/tiff/libtiff/tif_dir.c', - 'src/tiff/libtiff/tif_dirinfo.c', - 'src/tiff/libtiff/tif_dirread.c', - 'src/tiff/libtiff/tif_dirwrite.c', - 'src/tiff/libtiff/tif_dumpmode.c', - 'src/tiff/libtiff/tif_error.c', - 'src/tiff/libtiff/tif_extension.c', - 'src/tiff/libtiff/tif_fax3.c', - 'src/tiff/libtiff/tif_fax3sm.c', - 'src/tiff/libtiff/tif_flush.c', - 'src/tiff/libtiff/tif_getimage.c', - 'src/tiff/libtiff/tif_jpeg.c', - 'src/tiff/libtiff/tif_luv.c', - 'src/tiff/libtiff/tif_lzw.c', - 'src/tiff/libtiff/tif_next.c', - 'src/tiff/libtiff/tif_ojpeg.c', - 'src/tiff/libtiff/tif_open.c', - 'src/tiff/libtiff/tif_packbits.c', - 'src/tiff/libtiff/tif_pixarlog.c', - 'src/tiff/libtiff/tif_predict.c', - 'src/tiff/libtiff/tif_print.c', - 'src/tiff/libtiff/tif_read.c', - 'src/tiff/libtiff/tif_strip.c', - 'src/tiff/libtiff/tif_swab.c', - 'src/tiff/libtiff/tif_thunder.c', - 'src/tiff/libtiff/tif_tile.c', - 'src/tiff/libtiff/tif_unix.c', - 'src/tiff/libtiff/tif_version.c', - 'src/tiff/libtiff/tif_warning.c', - 'src/tiff/libtiff/tif_write.c', - 'src/tiff/libtiff/tif_zip.c', - ] - unix = [ 'src/unix/apptraits.cpp', 'src/unix/appunix.cpp', @@ -1160,89 +862,6 @@ unixgtk = [ 'src/unix/utilsx11.cpp', ] -xrc = [ - 'src/xml/xml.cpp', - 'src/xrc/xh_animatctrl.cpp', - 'src/xrc/xh_bmp.cpp', - 'src/xrc/xh_bmpbt.cpp', - 'src/xrc/xh_bmpcbox.cpp', - 'src/xrc/xh_bttn.cpp', - 'src/xrc/xh_cald.cpp', - 'src/xrc/xh_chckb.cpp', - 'src/xrc/xh_chckl.cpp', - 'src/xrc/xh_choic.cpp', - 'src/xrc/xh_choicbk.cpp', - 'src/xrc/xh_clrpicker.cpp', - 'src/xrc/xh_cmdlinkbn.cpp', - 'src/xrc/xh_collpane.cpp', - 'src/xrc/xh_combo.cpp', - 'src/xrc/xh_comboctrl.cpp', - 'src/xrc/xh_datectrl.cpp', - 'src/xrc/xh_dirpicker.cpp', - 'src/xrc/xh_dlg.cpp', - 'src/xrc/xh_editlbox.cpp', - 'src/xrc/xh_filectrl.cpp', - 'src/xrc/xh_filepicker.cpp', - 'src/xrc/xh_fontpicker.cpp', - 'src/xrc/xh_frame.cpp', - 'src/xrc/xh_gauge.cpp', - 'src/xrc/xh_gdctl.cpp', - 'src/xrc/xh_grid.cpp', - 'src/xrc/xh_html.cpp', - 'src/xrc/xh_htmllbox.cpp', - 'src/xrc/xh_hyperlink.cpp', - 'src/xrc/xh_listb.cpp', - 'src/xrc/xh_listbk.cpp', - 'src/xrc/xh_listc.cpp', - 'src/xrc/xh_mdi.cpp', - 'src/xrc/xh_menu.cpp', - 'src/xrc/xh_notbk.cpp', - 'src/xrc/xh_odcombo.cpp', - 'src/xrc/xh_panel.cpp', - 'src/xrc/xh_propdlg.cpp', - 'src/xrc/xh_radbt.cpp', - 'src/xrc/xh_radbx.cpp', - 'src/xrc/xh_richtext.cpp', - 'src/xrc/xh_scrol.cpp', - 'src/xrc/xh_scwin.cpp', - 'src/xrc/xh_sizer.cpp', - 'src/xrc/xh_slidr.cpp', - 'src/xrc/xh_spin.cpp', - 'src/xrc/xh_split.cpp', - 'src/xrc/xh_srchctrl.cpp', - 'src/xrc/xh_statbar.cpp', - 'src/xrc/xh_stbmp.cpp', - 'src/xrc/xh_stbox.cpp', - 'src/xrc/xh_stlin.cpp', - 'src/xrc/xh_sttxt.cpp', - 'src/xrc/xh_text.cpp', - 'src/xrc/xh_tglbtn.cpp', - 'src/xrc/xh_toolb.cpp', - 'src/xrc/xh_toolbk.cpp', - 'src/xrc/xh_tree.cpp', - 'src/xrc/xh_treebk.cpp', - 'src/xrc/xh_unkwn.cpp', - 'src/xrc/xh_wizrd.cpp', - 'src/xrc/xmladv.cpp', - 'src/xrc/xmlres.cpp', - 'src/xrc/xmlrsall.cpp', - ] - -zlib = [ - 'src/zlib/adler32.c', - 'src/zlib/compress.c', - 'src/zlib/crc32.c', - 'src/zlib/deflate.c', - 'src/zlib/gzio.c', - 'src/zlib/infback.c', - 'src/zlib/inffast.c', - 'src/zlib/inflate.c', - 'src/zlib/inftrees.c', - 'src/zlib/trees.c', - 'src/zlib/uncompr.c', - 'src/zlib/zutil.c', - ] - files = aui + common + generic if sys.platform == 'win32': diff --git a/Externals/wxWidgets3/build_wx.sh b/Externals/wxWidgets3/build_wx.sh new file mode 100755 index 0000000000..2173572bfa --- /dev/null +++ b/Externals/wxWidgets3/build_wx.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +svn co -r 70933 http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk wxWidgets +cd wxWidgets + +case $OSTYPE in +darwin*) +BACKEND="osx_cocoa" +;; +linux*) +BACKEND="gtk" +;; +esac + +mkdir build-local +cd build-local + +../configure --with-$BACKEND --disable-shared --enable-unicode --disable-compat28 --disable-exceptions --disable-fswatcher --without-regex --without-expat --disable-xml --disable-ribbon --disable-propgrid --disable-stc --disable-html --disable-richtext --without-libjpeg --without-libtiff --disable-webview --disable-markup +make diff --git a/Externals/wxWidgets3/include/wx/aboutdlg.h b/Externals/wxWidgets3/include/wx/aboutdlg.h index 0becacd2a0..0552f91fd1 100644 --- a/Externals/wxWidgets3/include/wx/aboutdlg.h +++ b/Externals/wxWidgets3/include/wx/aboutdlg.h @@ -3,7 +3,7 @@ // Purpose: declaration of wxAboutDialog class // Author: Vadim Zeitlin // Created: 2006-10-07 -// RCS-ID: $Id: aboutdlg.h 61534 2009-07-25 22:53:23Z VZ $ +// RCS-ID: $Id: aboutdlg.h 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -69,7 +69,7 @@ public: // icon to be shown in the dialog, defaults to the main frame icon void SetIcon(const wxIcon& icon) { m_icon = icon; } - bool HasIcon() const { return m_icon.Ok(); } + bool HasIcon() const { return m_icon.IsOk(); } wxIcon GetIcon() const; // web site for the program and its description (defaults to URL itself if diff --git a/Externals/wxWidgets3/include/wx/accel.h b/Externals/wxWidgets3/include/wx/accel.h index f4edd93047..200feffe4d 100644 --- a/Externals/wxWidgets3/include/wx/accel.h +++ b/Externals/wxWidgets3/include/wx/accel.h @@ -4,7 +4,7 @@ // Author: Julian Smart, Robert Roebling, Vadim Zeitlin // Modified by: // Created: 31.05.01 (extracted from other files) -// RCS-ID: $Id: accel.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: accel.h 68718 2011-08-16 11:55:39Z SC $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -34,10 +34,11 @@ enum wxAcceleratorEntryFlags wxACCEL_CTRL = 0x0002, // hold Ctrl key down wxACCEL_SHIFT = 0x0004, // hold Shift key down #if defined(__WXMAC__) || defined(__WXCOCOA__) - wxACCEL_CMD = 0x0008 // Command key on OS X + wxACCEL_RAW_CTRL= 0x0008, // #else - wxACCEL_CMD = wxACCEL_CTRL + wxACCEL_RAW_CTRL= wxACCEL_CTRL, #endif + wxACCEL_CMD = wxACCEL_CTRL }; // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/affinematrix2d.h b/Externals/wxWidgets3/include/wx/affinematrix2d.h new file mode 100644 index 0000000000..6516cd46f5 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/affinematrix2d.h @@ -0,0 +1,51 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/affinematrix2d.h +// Purpose: wxAffineMatrix2D class. +// Author: Based on wxTransformMatrix by Chris Breeze, Julian Smart +// Created: 2011-04-05 +// Copyright: (c) wxWidgets team +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_AFFINEMATRIX2D_H_ +#define _WX_AFFINEMATRIX2D_H_ + +#include "wx/defs.h" + +#if wxUSE_GEOMETRY + +#include "wx/affinematrix2dbase.h" + +// A simple implementation of wxAffineMatrix2DBase interface done entirely in +// wxWidgets. +class WXDLLIMPEXP_CORE wxAffineMatrix2D : public wxAffineMatrix2DBase +{ +public: + wxAffineMatrix2D() : m_11(1), m_12(0), + m_21(0), m_22(1), + m_tx(0), m_ty(0) + { + } + + // Implement base class pure virtual methods. + virtual void Set(const wxMatrix2D& mat2D, const wxPoint2DDouble& tr); + virtual void Get(wxMatrix2D* mat2D, wxPoint2DDouble* tr) const; + virtual void Concat(const wxAffineMatrix2DBase& t); + virtual bool Invert(); + virtual bool IsIdentity() const; + virtual bool IsEqual(const wxAffineMatrix2DBase& t) const; + virtual void Translate(wxDouble dx, wxDouble dy); + virtual void Scale(wxDouble xScale, wxDouble yScale); + virtual void Rotate(wxDouble ccRadians); + +protected: + virtual wxPoint2DDouble DoTransformPoint(const wxPoint2DDouble& p) const; + virtual wxPoint2DDouble DoTransformDistance(const wxPoint2DDouble& p) const; + +private: + wxDouble m_11, m_12, m_21, m_22, m_tx, m_ty; +}; + +#endif // wxUSE_GEOMETRY + +#endif // _WX_AFFINEMATRIX2D_H_ diff --git a/Externals/wxWidgets3/include/wx/affinematrix2dbase.h b/Externals/wxWidgets3/include/wx/affinematrix2dbase.h new file mode 100644 index 0000000000..94b1955aa3 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/affinematrix2dbase.h @@ -0,0 +1,127 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/affinematrix2dbase.h +// Purpose: Common interface for 2D transformation matrices. +// Author: Catalin Raceanu +// Created: 2011-04-06 +// Copyright: (c) wxWidgets team +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_AFFINEMATRIX2DBASE_H_ +#define _WX_AFFINEMATRIX2DBASE_H_ + +#include "wx/defs.h" + +#if wxUSE_GEOMETRY + +#include "wx/geometry.h" + +struct wxMatrix2D +{ + wxMatrix2D(wxDouble v11 = 1, + wxDouble v12 = 0, + wxDouble v21 = 0, + wxDouble v22 = 1) + { + m_11 = v11; m_12 = v12; + m_21 = v21; m_22 = v22; + } + + wxDouble m_11, m_12, m_21, m_22; +}; + +// A 2x3 matrix representing an affine 2D transformation. +// +// This is an abstract base class implemented by wxAffineMatrix2D only so far, +// but in the future we also plan to derive wxGraphicsMatrix from it (it should +// also be documented then as currently only wxAffineMatrix2D itself is). +class WXDLLIMPEXP_CORE wxAffineMatrix2DBase +{ +public: + wxAffineMatrix2DBase() {} + virtual ~wxAffineMatrix2DBase() {} + + // sets the matrix to the respective values + virtual void Set(const wxMatrix2D& mat2D, const wxPoint2DDouble& tr) = 0; + + // gets the component valuess of the matrix + virtual void Get(wxMatrix2D* mat2D, wxPoint2DDouble* tr) const = 0; + + // concatenates the matrix + virtual void Concat(const wxAffineMatrix2DBase& t) = 0; + + // makes this the inverse matrix + virtual bool Invert() = 0; + + // return true if this is the identity matrix + virtual bool IsIdentity() const = 0; + + // returns true if the elements of the transformation matrix are equal ? + virtual bool IsEqual(const wxAffineMatrix2DBase& t) const = 0; + bool operator==(const wxAffineMatrix2DBase& t) const { return IsEqual(t); } + bool operator!=(const wxAffineMatrix2DBase& t) const { return !IsEqual(t); } + + + // + // transformations + // + + // add the translation to this matrix + virtual void Translate(wxDouble dx, wxDouble dy) = 0; + + // add the scale to this matrix + virtual void Scale(wxDouble xScale, wxDouble yScale) = 0; + + // add the rotation to this matrix (counter clockwise, radians) + virtual void Rotate(wxDouble ccRadians) = 0; + + // add mirroring to this matrix + void Mirror(int direction = wxHORIZONTAL) + { + wxDouble x = (direction & wxHORIZONTAL) ? -1 : 1; + wxDouble y = (direction & wxVERTICAL) ? -1 : 1; + Scale(x, y); + } + + + // applies that matrix to the point + wxPoint2DDouble TransformPoint(const wxPoint2DDouble& src) const + { + return DoTransformPoint(src); + } + + void TransformPoint(wxDouble* x, wxDouble* y) const + { + wxCHECK_RET( x && y, "Can't be NULL" ); + + const wxPoint2DDouble dst = DoTransformPoint(wxPoint2DDouble(*x, *y)); + *x = dst.m_x; + *y = dst.m_y; + } + + // applies the matrix except for translations + wxPoint2DDouble TransformDistance(const wxPoint2DDouble& src) const + { + return DoTransformDistance(src); + } + + void TransformDistance(wxDouble* dx, wxDouble* dy) const + { + wxCHECK_RET( dx && dy, "Can't be NULL" ); + + const wxPoint2DDouble + dst = DoTransformDistance(wxPoint2DDouble(*dx, *dy)); + *dx = dst.m_x; + *dy = dst.m_y; + } + +protected: + virtual + wxPoint2DDouble DoTransformPoint(const wxPoint2DDouble& p) const = 0; + virtual + wxPoint2DDouble DoTransformDistance(const wxPoint2DDouble& p) const = 0; +}; + +#endif // wxUSE_GEOMETRY + +#endif // _WX_AFFINEMATRIX2DBASE_H_ diff --git a/Externals/wxWidgets3/include/wx/anybutton.h b/Externals/wxWidgets3/include/wx/anybutton.h new file mode 100644 index 0000000000..4275c6bfd8 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/anybutton.h @@ -0,0 +1,200 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/anybutton.h +// Purpose: wxAnyButtonBase class +// Author: Vadim Zetlin +// Created: 2000-08-15 (extracted from button.h) +// RCS-ID: $Id: anybutton.h 70345 2012-01-15 01:05:28Z VZ $ +// Copyright: (c) Vadim Zetlin +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_ANYBUTTON_H_BASE_ +#define _WX_ANYBUTTON_H_BASE_ + +#include "wx/defs.h" + +#ifdef wxHAS_ANY_BUTTON + +// ---------------------------------------------------------------------------- +// wxAnyButton specific flags +// ---------------------------------------------------------------------------- + +// These flags affect label alignment +#define wxBU_LEFT 0x0040 +#define wxBU_TOP 0x0080 +#define wxBU_RIGHT 0x0100 +#define wxBU_BOTTOM 0x0200 +#define wxBU_ALIGN_MASK ( wxBU_LEFT | wxBU_TOP | wxBU_RIGHT | wxBU_BOTTOM ) + +// These two flags are obsolete +#define wxBU_NOAUTODRAW 0x0000 +#define wxBU_AUTODRAW 0x0004 + +// by default, the buttons will be created with some (system dependent) +// minimal size to make them look nicer, giving this style will make them as +// small as possible +#define wxBU_EXACTFIT 0x0001 + +// this flag can be used to disable using the text label in the button: it is +// mostly useful when creating buttons showing bitmap and having stock id as +// without it both the standard label corresponding to the stock id and the +// bitmap would be shown +#define wxBU_NOTEXT 0x0002 + + +#include "wx/bitmap.h" +#include "wx/control.h" + +// ---------------------------------------------------------------------------- +// wxAnyButton: common button functionality +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxAnyButtonBase : public wxControl +{ +public: + wxAnyButtonBase() { } + + // show the image in the button in addition to the label: this method is + // supported on all (major) platforms + void SetBitmap(const wxBitmap& bitmap, wxDirection dir = wxLEFT) + { + SetBitmapLabel(bitmap); + SetBitmapPosition(dir); + } + + wxBitmap GetBitmap() const { return DoGetBitmap(State_Normal); } + + // Methods for setting individual images for different states: normal, + // selected (meaning pushed or pressed), focused (meaning normal state for + // a focused button), disabled or hover (a.k.a. hot or current). + // + // Remember that SetBitmap() itself must be called before any other + // SetBitmapXXX() methods (except for SetBitmapLabel() which is a synonym + // for it anyhow) and that all bitmaps passed to these functions should be + // of the same size. + void SetBitmapLabel(const wxBitmap& bitmap) + { DoSetBitmap(bitmap, State_Normal); } + void SetBitmapPressed(const wxBitmap& bitmap) + { DoSetBitmap(bitmap, State_Pressed); } + void SetBitmapDisabled(const wxBitmap& bitmap) + { DoSetBitmap(bitmap, State_Disabled); } + void SetBitmapCurrent(const wxBitmap& bitmap) + { DoSetBitmap(bitmap, State_Current); } + void SetBitmapFocus(const wxBitmap& bitmap) + { DoSetBitmap(bitmap, State_Focused); } + + wxBitmap GetBitmapLabel() const { return DoGetBitmap(State_Normal); } + wxBitmap GetBitmapPressed() const { return DoGetBitmap(State_Pressed); } + wxBitmap GetBitmapDisabled() const { return DoGetBitmap(State_Disabled); } + wxBitmap GetBitmapCurrent() const { return DoGetBitmap(State_Current); } + wxBitmap GetBitmapFocus() const { return DoGetBitmap(State_Focused); } + + + // set the margins around the image + void SetBitmapMargins(wxCoord x, wxCoord y) { DoSetBitmapMargins(x, y); } + void SetBitmapMargins(const wxSize& sz) { DoSetBitmapMargins(sz.x, sz.y); } + wxSize GetBitmapMargins() { return DoGetBitmapMargins(); } + + // set the image position relative to the text, i.e. wxLEFT means that the + // image is to the left of the text (this is the default) + void SetBitmapPosition(wxDirection dir); + + + // Buttons on MSW can look bad if they are not native colours, because + // then they become owner-drawn and not theme-drawn. Disable it here + // in wxAnyButtonBase to make it consistent. + virtual bool ShouldInheritColours() const { return false; } + + // wxUniv-compatible and deprecated equivalents to SetBitmapXXX() +#if WXWIN_COMPATIBILITY_2_8 + void SetImageLabel(const wxBitmap& bitmap) { SetBitmap(bitmap); } + void SetImageMargins(wxCoord x, wxCoord y) { SetBitmapMargins(x, y); } +#endif // WXWIN_COMPATIBILITY_2_8 + + // backwards compatible names for pressed/current bitmaps: they're not + // deprecated as there is nothing really wrong with using them and no real + // advantage to using the new names but the new names are still preferred + wxBitmap GetBitmapSelected() const { return GetBitmapPressed(); } + wxBitmap GetBitmapHover() const { return GetBitmapCurrent(); } + + void SetBitmapSelected(const wxBitmap& bitmap) { SetBitmapPressed(bitmap); } + void SetBitmapHover(const wxBitmap& bitmap) { SetBitmapCurrent(bitmap); } + + + // this enum is not part of wx public API, it is public because it is used + // in non wxAnyButton-derived classes internally + // + // also notice that MSW code relies on the values of the enum elements, do + // not change them without revising src/msw/button.cpp + enum State + { + State_Normal, + State_Current, // a.k.a. hot or "hovering" + State_Pressed, // a.k.a. "selected" in public API for some reason + State_Disabled, + State_Focused, + State_Max + }; + + // return true if this button shouldn't show the text label, either because + // it doesn't have it or because it was explicitly disabled with wxBU_NOTEXT + bool DontShowLabel() const + { + return HasFlag(wxBU_NOTEXT) || GetLabel().empty(); + } + + // return true if we do show the label + bool ShowsLabel() const + { + return !DontShowLabel(); + } + +protected: + // choose the default border for this window + virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } + + virtual wxBitmap DoGetBitmap(State WXUNUSED(which)) const + { return wxBitmap(); } + virtual void DoSetBitmap(const wxBitmap& WXUNUSED(bitmap), + State WXUNUSED(which)) + { } + + virtual wxSize DoGetBitmapMargins() const + { return wxSize(0, 0); } + + virtual void DoSetBitmapMargins(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) + { } + + virtual void DoSetBitmapPosition(wxDirection WXUNUSED(dir)) + { } + + virtual bool DoGetAuthNeeded() const { return false; } + virtual void DoSetAuthNeeded(bool WXUNUSED(show)) { } + + + wxDECLARE_NO_COPY_CLASS(wxAnyButtonBase); +}; + +#if defined(__WXUNIVERSAL__) + #include "wx/univ/anybutton.h" +#elif defined(__WXMSW__) + #include "wx/msw/anybutton.h" +//#elif defined(__WXMOTIF__) +// #include "wx/motif/anybutton.h" +#elif defined(__WXGTK20__) + #include "wx/gtk/anybutton.h" +//#elif defined(__WXGTK__) +// #include "wx/gtk1/anybutton.h" +#elif defined(__WXMAC__) + #include "wx/osx/anybutton.h" +//#elif defined(__WXCOCOA__) +// #include "wx/cocoa/anybutton.h" +//#elif defined(__WXPM__) +// #include "wx/os2/anybutton.h" +#else + typedef wxAnyButtonBase wxAnyButton; +#endif + +#endif // wxHAS_ANY_BUTTON + +#endif // _WX_ANYBUTTON_H_BASE_ diff --git a/Externals/wxWidgets3/include/wx/app.h b/Externals/wxWidgets3/include/wx/app.h index d4b1fae4f1..64f1220629 100644 --- a/Externals/wxWidgets3/include/wx/app.h +++ b/Externals/wxWidgets3/include/wx/app.h @@ -5,7 +5,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: app.h 66648 2011-01-08 06:42:41Z PC $ +// RCS-ID: $Id: app.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -18,6 +18,7 @@ // ---------------------------------------------------------------------------- #include "wx/event.h" // for the base class +#include "wx/eventfilter.h" // (and another one) #include "wx/build.h" #include "wx/cmdargs.h" // for wxCmdLineArgsArray used by wxApp::argv #include "wx/init.h" // we must declare wxEntry() @@ -70,7 +71,8 @@ extern WXDLLIMPEXP_DATA_BASE(wxList) wxPendingDelete; // wxAppConsoleBase: wxApp for non-GUI applications // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_BASE wxAppConsoleBase : public wxEvtHandler +class WXDLLIMPEXP_BASE wxAppConsoleBase : public wxEvtHandler, + public wxEventFilter { public: // ctor and dtor @@ -238,13 +240,8 @@ public: // event processing functions // -------------------------- - // this method allows to filter all the events processed by the program, so - // you should try to return quickly from it to avoid slowing down the - // program to the crawl - // - // return value should be -1 to continue with the normal event processing, - // or TRUE or FALSE to stop further processing and pretend that the event - // had been already processed or won't be processed at all, respectively + // Implement the inherited wxEventFilter method but just return -1 from it + // to indicate that default processing should take place. virtual int FilterEvent(wxEvent& event); // return true if we're running event loop, i.e. if the events can @@ -595,10 +592,10 @@ public: // ------------------------------------------------------------------------ // Get display mode that is used use. This is only used in framebuffer - // wxWin ports (such as wxMGL or wxDFB). + // wxWin ports such as wxDFB. virtual wxVideoMode GetDisplayMode() const; // Set display mode to use. This is only used in framebuffer wxWin - // ports (such as wxMGL or wxDFB). This method should be called from + // ports such as wxDFB. This method should be called from // wxApp::OnInitGui virtual bool SetDisplayMode(const wxVideoMode& WXUNUSED(info)) { return true; } @@ -684,14 +681,10 @@ protected: // now include the declaration of the real class // ---------------------------------------------------------------------------- -#if defined(__WXPALMOS__) - #include "wx/palmos/app.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/app.h" #elif defined(__WXMOTIF__) #include "wx/motif/app.h" -#elif defined(__WXMGL__) - #include "wx/mgl/app.h" #elif defined(__WXDFB__) #include "wx/dfb/app.h" #elif defined(__WXGTK20__) diff --git a/Externals/wxWidgets3/include/wx/apptrait.h b/Externals/wxWidgets3/include/wx/apptrait.h index 2e29c20e5b..4dbf8d218c 100644 --- a/Externals/wxWidgets3/include/wx/apptrait.h +++ b/Externals/wxWidgets3/include/wx/apptrait.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.06.2003 -// RCS-ID: $Id: apptrait.h 61488 2009-07-21 14:16:44Z VZ $ +// RCS-ID: $Id: apptrait.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -177,9 +177,7 @@ private: // NB: test for __UNIX__ before __WXMAC__ as under Darwin we want to use the // Unix code (and otherwise __UNIX__ wouldn't be defined) // ABX: check __WIN32__ instead of __WXMSW__ for the same MSWBase in any Win32 port -#if defined(__WXPALMOS__) - #include "wx/palmos/apptbase.h" -#elif defined(__WIN32__) +#if defined(__WIN32__) #include "wx/msw/apptbase.h" #elif defined(__UNIX__) && !defined(__EMX__) #include "wx/unix/apptbase.h" @@ -274,9 +272,7 @@ public: // ---------------------------------------------------------------------------- // ABX: check __WIN32__ instead of __WXMSW__ for the same MSWBase in any Win32 port -#if defined(__WXPALMOS__) - #include "wx/palmos/apptrait.h" -#elif defined(__WIN32__) +#if defined(__WIN32__) #include "wx/msw/apptrait.h" #elif defined(__OS2__) #include "wx/os2/apptrait.h" diff --git a/Externals/wxWidgets3/include/wx/arrstr.h b/Externals/wxWidgets3/include/wx/arrstr.h index ad8a52e62c..76343c71e5 100644 --- a/Externals/wxWidgets3/include/wx/arrstr.h +++ b/Externals/wxWidgets3/include/wx/arrstr.h @@ -4,7 +4,7 @@ // Author: Mattia Barbon and Vadim Zeitlin // Modified by: // Created: 07/07/03 -// RCS-ID: $Id: arrstr.h 66724 2011-01-20 08:38:36Z SC $ +// RCS-ID: $Id: arrstr.h 67343 2011-03-30 14:16:04Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -28,7 +28,7 @@ inline int wxCMPFUNC_CONV wxStringSortDescending(wxString* s1, wxString* s2) return wxStringSortAscending(s2, s1); } -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include "wx/dynarray.h" @@ -100,7 +100,7 @@ private: } }; -#else // if !wxUSE_STL +#else // if !wxUSE_STD_CONTAINERS // this shouldn't be defined for compilers not supporting template methods or // without std::distance() @@ -384,7 +384,7 @@ public: { Copy(array); } }; -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS // this class provides a temporary wxString* from a // wxArrayString diff --git a/Externals/wxWidgets3/include/wx/atomic.h b/Externals/wxWidgets3/include/wx/atomic.h index 38b0f8171f..0c53ebef93 100644 --- a/Externals/wxWidgets3/include/wx/atomic.h +++ b/Externals/wxWidgets3/include/wx/atomic.h @@ -3,7 +3,7 @@ // Purpose: functions to manipulate atomically integers and pointers // Author: Armel Asselin // Created: 12/13/2006 -// RCS-ID: $Id: atomic.h 53954 2008-06-02 20:42:23Z VZ $ +// RCS-ID: $Id: atomic.h 70808 2012-03-04 20:31:42Z VZ $ // Copyright: (c) Armel Asselin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -43,7 +43,7 @@ inline wxUint32 wxAtomicDec (wxUint32 &value) } -#elif defined(__WXMSW__) +#elif defined(__WINDOWS__) // include standard Windows headers #include "wx/msw/wrapwin.h" diff --git a/Externals/wxWidgets3/include/wx/aui/auibar.h b/Externals/wxWidgets3/include/wx/aui/auibar.h index d73b8caed1..3440840a3b 100644 --- a/Externals/wxWidgets3/include/wx/aui/auibar.h +++ b/Externals/wxWidgets3/include/wx/aui/auibar.h @@ -4,7 +4,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2008-08-04 -// RCS-ID: $Id: auibar.h 66546 2011-01-03 18:43:30Z VZ $ +// RCS-ID: $Id: auibar.h 69594 2011-10-30 16:51:10Z VZ $ // Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -65,44 +65,44 @@ enum wxAuiToolBarToolTextOrientation class WXDLLIMPEXP_AUI wxAuiToolBarEvent : public wxNotifyEvent { public: - wxAuiToolBarEvent(wxEventType command_type = wxEVT_NULL, - int win_id = 0) - : wxNotifyEvent(command_type, win_id) + wxAuiToolBarEvent(wxEventType commandType = wxEVT_NULL, + int winId = 0) + : wxNotifyEvent(commandType, winId) { - is_dropdown_clicked = false; - click_pt = wxPoint(-1, -1); - rect = wxRect(-1,-1, 0, 0); - tool_id = -1; + m_isDropdownClicked = false; + m_clickPt = wxPoint(-1, -1); + m_rect = wxRect(-1,-1, 0, 0); + m_toolId = -1; } #ifndef SWIG wxAuiToolBarEvent(const wxAuiToolBarEvent& c) : wxNotifyEvent(c) { - is_dropdown_clicked = c.is_dropdown_clicked; - click_pt = c.click_pt; - rect = c.rect; - tool_id = c.tool_id; + m_isDropdownClicked = c.m_isDropdownClicked; + m_clickPt = c.m_clickPt; + m_rect = c.m_rect; + m_toolId = c.m_toolId; } #endif wxEvent *Clone() const { return new wxAuiToolBarEvent(*this); } - bool IsDropDownClicked() const { return is_dropdown_clicked; } - void SetDropDownClicked(bool c) { is_dropdown_clicked = c; } + bool IsDropDownClicked() const { return m_isDropdownClicked; } + void SetDropDownClicked(bool c) { m_isDropdownClicked = c; } - wxPoint GetClickPoint() const { return click_pt; } - void SetClickPoint(const wxPoint& p) { click_pt = p; } + wxPoint GetClickPoint() const { return m_clickPt; } + void SetClickPoint(const wxPoint& p) { m_clickPt = p; } - wxRect GetItemRect() const { return rect; } - void SetItemRect(const wxRect& r) { rect = r; } + wxRect GetItemRect() const { return m_rect; } + void SetItemRect(const wxRect& r) { m_rect = r; } - int GetToolId() const { return tool_id; } - void SetToolId(int toolid) { tool_id = toolid; } + int GetToolId() const { return m_toolId; } + void SetToolId(int toolId) { m_toolId = toolId; } private: - bool is_dropdown_clicked; - wxPoint click_pt; - wxRect rect; - int tool_id; + bool m_isDropdownClicked; + wxPoint m_clickPt; + wxRect m_rect; + int m_toolId; private: DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxAuiToolBarEvent) @@ -117,18 +117,18 @@ public: wxAuiToolBarItem() { - window = NULL; - sizer_item = NULL; - spacer_pixels = 0; - toolid = 0; - kind = wxITEM_NORMAL; - state = 0; // normal, enabled - proportion = 0; - active = true; - dropdown = true; - sticky = true; - user_data = 0; - alignment = wxALIGN_CENTER; + m_window = NULL; + m_sizerItem = NULL; + m_spacerPixels = 0; + m_toolId = 0; + m_kind = wxITEM_NORMAL; + m_state = 0; // normal, enabled + m_proportion = 0; + m_active = true; + m_dropDown = true; + m_sticky = true; + m_userData = 0; + m_alignment = wxALIGN_CENTER; } wxAuiToolBarItem(const wxAuiToolBarItem& c) @@ -144,106 +144,106 @@ public: void Assign(const wxAuiToolBarItem& c) { - window = c.window; - label = c.label; - bitmap = c.bitmap; - disabled_bitmap = c.disabled_bitmap; - hover_bitmap = c.hover_bitmap; - short_help = c.short_help; - long_help = c.long_help; - sizer_item = c.sizer_item; - min_size = c.min_size; - spacer_pixels = c.spacer_pixels; - toolid = c.toolid; - kind = c.kind; - state = c.state; - proportion = c.proportion; - active = c.active; - dropdown = c.dropdown; - sticky = c.sticky; - user_data = c.user_data; - alignment = c.alignment; + m_window = c.m_window; + m_label = c.m_label; + m_bitmap = c.m_bitmap; + m_disabledBitmap = c.m_disabledBitmap; + m_hoverBitmap = c.m_hoverBitmap; + m_shortHelp = c.m_shortHelp; + m_longHelp = c.m_longHelp; + m_sizerItem = c.m_sizerItem; + m_minSize = c.m_minSize; + m_spacerPixels = c.m_spacerPixels; + m_toolId = c.m_toolId; + m_kind = c.m_kind; + m_state = c.m_state; + m_proportion = c.m_proportion; + m_active = c.m_active; + m_dropDown = c.m_dropDown; + m_sticky = c.m_sticky; + m_userData = c.m_userData; + m_alignment = c.m_alignment; } - void SetWindow(wxWindow* w) { window = w; } - wxWindow* GetWindow() { return window; } + void SetWindow(wxWindow* w) { m_window = w; } + wxWindow* GetWindow() { return m_window; } - void SetId(int new_id) { toolid = new_id; } - int GetId() const { return toolid; } + void SetId(int newId) { m_toolId = newId; } + int GetId() const { return m_toolId; } - void SetKind(int new_kind) { kind = new_kind; } - int GetKind() const { return kind; } + void SetKind(int newKind) { m_kind = newKind; } + int GetKind() const { return m_kind; } - void SetState(int new_state) { state = new_state; } - int GetState() const { return state; } + void SetState(int newState) { m_state = newState; } + int GetState() const { return m_state; } - void SetSizerItem(wxSizerItem* s) { sizer_item = s; } - wxSizerItem* GetSizerItem() const { return sizer_item; } + void SetSizerItem(wxSizerItem* s) { m_sizerItem = s; } + wxSizerItem* GetSizerItem() const { return m_sizerItem; } - void SetLabel(const wxString& s) { label = s; } - const wxString& GetLabel() const { return label; } + void SetLabel(const wxString& s) { m_label = s; } + const wxString& GetLabel() const { return m_label; } - void SetBitmap(const wxBitmap& bmp) { bitmap = bmp; } - const wxBitmap& GetBitmap() const { return bitmap; } + void SetBitmap(const wxBitmap& bmp) { m_bitmap = bmp; } + const wxBitmap& GetBitmap() const { return m_bitmap; } - void SetDisabledBitmap(const wxBitmap& bmp) { disabled_bitmap = bmp; } - const wxBitmap& GetDisabledBitmap() const { return disabled_bitmap; } + void SetDisabledBitmap(const wxBitmap& bmp) { m_disabledBitmap = bmp; } + const wxBitmap& GetDisabledBitmap() const { return m_disabledBitmap; } - void SetHoverBitmap(const wxBitmap& bmp) { hover_bitmap = bmp; } - const wxBitmap& GetHoverBitmap() const { return hover_bitmap; } + void SetHoverBitmap(const wxBitmap& bmp) { m_hoverBitmap = bmp; } + const wxBitmap& GetHoverBitmap() const { return m_hoverBitmap; } - void SetShortHelp(const wxString& s) { short_help = s; } - const wxString& GetShortHelp() const { return short_help; } + void SetShortHelp(const wxString& s) { m_shortHelp = s; } + const wxString& GetShortHelp() const { return m_shortHelp; } - void SetLongHelp(const wxString& s) { long_help = s; } - const wxString& GetLongHelp() const { return long_help; } + void SetLongHelp(const wxString& s) { m_longHelp = s; } + const wxString& GetLongHelp() const { return m_longHelp; } - void SetMinSize(const wxSize& s) { min_size = s; } - const wxSize& GetMinSize() const { return min_size; } + void SetMinSize(const wxSize& s) { m_minSize = s; } + const wxSize& GetMinSize() const { return m_minSize; } - void SetSpacerPixels(int s) { spacer_pixels = s; } - int GetSpacerPixels() const { return spacer_pixels; } + void SetSpacerPixels(int s) { m_spacerPixels = s; } + int GetSpacerPixels() const { return m_spacerPixels; } - void SetProportion(int p) { proportion = p; } - int GetProportion() const { return proportion; } + void SetProportion(int p) { m_proportion = p; } + int GetProportion() const { return m_proportion; } - void SetActive(bool b) { active = b; } - bool IsActive() const { return active; } + void SetActive(bool b) { m_active = b; } + bool IsActive() const { return m_active; } - void SetHasDropDown(bool b) { dropdown = b; } - bool HasDropDown() const { return dropdown; } + void SetHasDropDown(bool b) { m_dropDown = b; } + bool HasDropDown() const { return m_dropDown; } - void SetSticky(bool b) { sticky = b; } - bool IsSticky() const { return sticky; } + void SetSticky(bool b) { m_sticky = b; } + bool IsSticky() const { return m_sticky; } - void SetUserData(long l) { user_data = l; } - long GetUserData() const { return user_data; } + void SetUserData(long l) { m_userData = l; } + long GetUserData() const { return m_userData; } - void SetAlignment(int l) { alignment = l; } - int GetAlignment() const { return alignment; } + void SetAlignment(int l) { m_alignment = l; } + int GetAlignment() const { return m_alignment; } private: - wxWindow* window; // item's associated window - wxString label; // label displayed on the item - wxBitmap bitmap; // item's bitmap - wxBitmap disabled_bitmap; // item's disabled bitmap - wxBitmap hover_bitmap; // item's hover bitmap - wxString short_help; // short help (for tooltip) - wxString long_help; // long help (for status bar) - wxSizerItem* sizer_item; // sizer item - wxSize min_size; // item's minimum size - int spacer_pixels; // size of a spacer - int toolid; // item's id - int kind; // item's kind - int state; // state - int proportion; // proportion - bool active; // true if the item is currently active - bool dropdown; // true if the item has a dropdown button - bool sticky; // overrides button states if true (always active) - long user_data; // user-specified data - int alignment; // sizer alignment flag, defaults to wxCENTER, may be wxEXPAND or any other + wxWindow* m_window; // item's associated window + wxString m_label; // label displayed on the item + wxBitmap m_bitmap; // item's bitmap + wxBitmap m_disabledBitmap; // item's disabled bitmap + wxBitmap m_hoverBitmap; // item's hover bitmap + wxString m_shortHelp; // short help (for tooltip) + wxString m_longHelp; // long help (for status bar) + wxSizerItem* m_sizerItem; // sizer item + wxSize m_minSize; // item's minimum size + int m_spacerPixels; // size of a spacer + int m_toolId; // item's id + int m_kind; // item's kind + int m_state; // state + int m_proportion; // proportion + bool m_active; // true if the item is currently active + bool m_dropDown; // true if the item has a dropdown button + bool m_sticky; // overrides button states if true (always active) + long m_userData; // user-specified data + int m_alignment; // sizer alignment flag, defaults to wxCENTER, may be wxEXPAND or any other }; #ifndef SWIG @@ -325,8 +325,8 @@ public: wxWindow* wnd, const wxAuiToolBarItem& item) = 0; - virtual int GetElementSize(int element_id) = 0; - virtual void SetElementSize(int element_id, int size) = 0; + virtual int GetElementSize(int elementId) = 0; + virtual void SetElementSize(int elementId, int size) = 0; virtual int ShowDropDown( wxWindow* wnd, @@ -407,30 +407,30 @@ public: const wxAuiToolBarItem& item); virtual int GetElementSize(int element); - virtual void SetElementSize(int element_id, int size); + virtual void SetElementSize(int elementId, int size); virtual int ShowDropDown(wxWindow* wnd, const wxAuiToolBarItemArray& items); protected: - wxBitmap m_button_dropdown_bmp; - wxBitmap m_disabled_button_dropdown_bmp; - wxBitmap m_overflow_bmp; - wxBitmap m_disabled_overflow_bmp; - wxColour m_base_colour; - wxColour m_highlight_colour; + wxBitmap m_buttonDropDownBmp; + wxBitmap m_disabledButtonDropDownBmp; + wxBitmap m_overflowBmp; + wxBitmap m_disabledOverflowBmp; + wxColour m_baseColour; + wxColour m_highlightColour; wxFont m_font; unsigned int m_flags; - int m_text_orientation; + int m_textOrientation; - wxPen m_gripper_pen1; - wxPen m_gripper_pen2; - wxPen m_gripper_pen3; + wxPen m_gripperPen1; + wxPen m_gripperPen2; + wxPen m_gripperPen3; - int m_separator_size; - int m_gripper_size; - int m_overflow_size; + int m_separatorSize; + int m_gripperSize; + int m_overflowSize; }; @@ -456,40 +456,40 @@ public: bool SetFont(const wxFont& font); - wxAuiToolBarItem* AddTool(int tool_id, + wxAuiToolBarItem* AddTool(int toolId, const wxString& label, const wxBitmap& bitmap, - const wxString& short_help_string = wxEmptyString, + const wxString& shortHelpString = wxEmptyString, wxItemKind kind = wxITEM_NORMAL); - wxAuiToolBarItem* AddTool(int tool_id, + wxAuiToolBarItem* AddTool(int toolId, const wxString& label, const wxBitmap& bitmap, - const wxBitmap& disabled_bitmap, + const wxBitmap& disabledBitmap, wxItemKind kind, - const wxString& short_help_string, - const wxString& long_help_string, - wxObject* client_data); + const wxString& shortHelpString, + const wxString& longHelpString, + wxObject* clientData); - wxAuiToolBarItem* AddTool(int tool_id, + wxAuiToolBarItem* AddTool(int toolId, const wxBitmap& bitmap, - const wxBitmap& disabled_bitmap, + const wxBitmap& disabledBitmap, bool toggle = false, - wxObject* client_data = NULL, - const wxString& short_help_string = wxEmptyString, - const wxString& long_help_string = wxEmptyString) + wxObject* clientData = NULL, + const wxString& shortHelpString = wxEmptyString, + const wxString& longHelpString = wxEmptyString) { - return AddTool(tool_id, + return AddTool(toolId, wxEmptyString, bitmap, - disabled_bitmap, + disabledBitmap, toggle ? wxITEM_CHECK : wxITEM_NORMAL, - short_help_string, - long_help_string, - client_data); + shortHelpString, + longHelpString, + clientData); } - wxAuiToolBarItem* AddLabel(int tool_id, + wxAuiToolBarItem* AddLabel(int toolId, const wxString& label = wxEmptyString, const int width = -1); wxAuiToolBarItem* AddControl(wxControl* control, @@ -500,22 +500,22 @@ public: bool Realize(); - wxControl* FindControl(int window_id); + wxControl* FindControl(int windowId); wxAuiToolBarItem* FindToolByPosition(wxCoord x, wxCoord y) const; wxAuiToolBarItem* FindToolByIndex(int idx) const; - wxAuiToolBarItem* FindTool(int tool_id) const; + wxAuiToolBarItem* FindTool(int toolId) const; void ClearTools() { Clear() ; } void Clear(); - bool DeleteTool(int tool_id); - bool DeleteByIndex(int tool_id); + bool DeleteTool(int toolId); + bool DeleteByIndex(int toolId); size_t GetToolCount() const; - int GetToolPos(int tool_id) const { return GetToolIndex(tool_id); } - int GetToolIndex(int tool_id) const; - bool GetToolFits(int tool_id) const; - wxRect GetToolRect(int tool_id) const; - bool GetToolFitsByIndex(int tool_id) const; + int GetToolPos(int toolId) const { return GetToolIndex(toolId); } + int GetToolIndex(int toolId) const; + bool GetToolFits(int toolId) const; + wxRect GetToolRect(int toolId) const; + bool GetToolFitsByIndex(int toolId) const; bool GetToolBarFits() const; void SetMargins(const wxSize& size) { SetMargins(size.x, size.x, size.y, size.y); } @@ -531,14 +531,14 @@ public: bool GetGripperVisible() const; void SetGripperVisible(bool visible); - void ToggleTool(int tool_id, bool state); - bool GetToolToggled(int tool_id) const; + void ToggleTool(int toolId, bool state); + bool GetToolToggled(int toolId) const; - void EnableTool(int tool_id, bool state); - bool GetToolEnabled(int tool_id) const; + void EnableTool(int toolId, bool state); + bool GetToolEnabled(int toolId) const; - void SetToolDropDown(int tool_id, bool dropdown); - bool GetToolDropDown(int tool_id) const; + void SetToolDropDown(int toolId, bool dropdown); + bool GetToolDropDown(int toolId) const; void SetToolBorderPadding(int padding); int GetToolBorderPadding() const; @@ -549,34 +549,37 @@ public: void SetToolPacking(int packing); int GetToolPacking() const; - void SetToolProportion(int tool_id, int proportion); - int GetToolProportion(int tool_id) const; + void SetToolProportion(int toolId, int proportion); + int GetToolProportion(int toolId) const; void SetToolSeparation(int separation); int GetToolSeparation() const; - void SetToolSticky(int tool_id, bool sticky); - bool GetToolSticky(int tool_id) const; + void SetToolSticky(int toolId, bool sticky); + bool GetToolSticky(int toolId) const; - wxString GetToolLabel(int tool_id) const; - void SetToolLabel(int tool_id, const wxString& label); + wxString GetToolLabel(int toolId) const; + void SetToolLabel(int toolId, const wxString& label); - wxBitmap GetToolBitmap(int tool_id) const; - void SetToolBitmap(int tool_id, const wxBitmap& bitmap); + wxBitmap GetToolBitmap(int toolId) const; + void SetToolBitmap(int toolId, const wxBitmap& bitmap); - wxString GetToolShortHelp(int tool_id) const; - void SetToolShortHelp(int tool_id, const wxString& help_string); + wxString GetToolShortHelp(int toolId) const; + void SetToolShortHelp(int toolId, const wxString& helpString); - wxString GetToolLongHelp(int tool_id) const; - void SetToolLongHelp(int tool_id, const wxString& help_string); + wxString GetToolLongHelp(int toolId) const; + void SetToolLongHelp(int toolId, const wxString& helpString); void SetCustomOverflowItems(const wxAuiToolBarItemArray& prepend, const wxAuiToolBarItemArray& append); // get size of hint rectangle for a particular dock location - wxSize GetHintSize(int dock_direction) const; + wxSize GetHintSize(int dockDirection) const; bool IsPaneValid(const wxAuiPaneInfo& pane) const; + // Override to call DoIdleUpdate(). + virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE); + protected: virtual void OnCustomRender(wxDC& WXUNUSED(dc), @@ -624,30 +627,30 @@ protected: wxAuiToolBarItemArray m_items; // array of toolbar items wxAuiToolBarArt* m_art; // art provider wxBoxSizer* m_sizer; // main sizer for toolbar - wxAuiToolBarItem* m_action_item; // item that's being acted upon (pressed) - wxAuiToolBarItem* m_tip_item; // item that has its tooltip shown + wxAuiToolBarItem* m_actionItem; // item that's being acted upon (pressed) + wxAuiToolBarItem* m_tipItem; // item that has its tooltip shown wxBitmap m_bitmap; // double-buffer bitmap - wxSizerItem* m_gripper_sizer_item; - wxSizerItem* m_overflow_sizer_item; - wxSize m_absolute_min_size; - wxPoint m_action_pos; // position of left-mouse down - wxAuiToolBarItemArray m_custom_overflow_prepend; - wxAuiToolBarItemArray m_custom_overflow_append; + wxSizerItem* m_gripperSizerItem; + wxSizerItem* m_overflowSizerItem; + wxSize m_absoluteMinSize; + wxPoint m_actionPos; // position of left-mouse down + wxAuiToolBarItemArray m_customOverflowPrepend; + wxAuiToolBarItemArray m_customOverflowAppend; - int m_button_width; - int m_button_height; - int m_sizer_element_count; - int m_left_padding; - int m_right_padding; - int m_top_padding; - int m_bottom_padding; - int m_tool_packing; - int m_tool_border_padding; - int m_tool_text_orientation; - int m_overflow_state; + int m_buttonWidth; + int m_buttonHeight; + int m_sizerElementCount; + int m_leftPadding; + int m_rightPadding; + int m_topPadding; + int m_bottomPadding; + int m_toolPacking; + int m_toolBorderPadding; + int m_toolTextOrientation; + int m_overflowState; bool m_dragging; - bool m_gripper_visible; - bool m_overflow_visible; + bool m_gripperVisible; + bool m_overflowVisible; long m_style; bool RealizeHelper(wxClientDC& dc, bool horizontal); diff --git a/Externals/wxWidgets3/include/wx/aui/auibook.h b/Externals/wxWidgets3/include/wx/aui/auibook.h index 5fa37345d2..e8e4527ff6 100644 --- a/Externals/wxWidgets3/include/wx/aui/auibook.h +++ b/Externals/wxWidgets3/include/wx/aui/auibook.h @@ -24,7 +24,7 @@ #include "wx/aui/framemanager.h" #include "wx/aui/dockart.h" #include "wx/aui/floatpane.h" -#include "wx/control.h" +#include "wx/bookctrl.h" class wxAuiNotebook; @@ -60,40 +60,28 @@ enum wxAuiNotebookOption // aui notebook event class -class WXDLLIMPEXP_AUI wxAuiNotebookEvent : public wxNotifyEvent +class WXDLLIMPEXP_AUI wxAuiNotebookEvent : public wxBookCtrlEvent { public: - wxAuiNotebookEvent(wxEventType command_type = wxEVT_NULL, - int win_id = 0) - : wxNotifyEvent(command_type, win_id) + wxAuiNotebookEvent(wxEventType commandType = wxEVT_NULL, + int winId = 0) + : wxBookCtrlEvent(commandType, winId) { - old_selection = -1; - selection = -1; - drag_source = NULL; + m_dragSource = NULL; } #ifndef SWIG - wxAuiNotebookEvent(const wxAuiNotebookEvent& c) : wxNotifyEvent(c) + wxAuiNotebookEvent(const wxAuiNotebookEvent& c) : wxBookCtrlEvent(c) { - old_selection = c.old_selection; - selection = c.selection; - drag_source = c.drag_source; + m_dragSource = c.m_dragSource; } #endif wxEvent *Clone() const { return new wxAuiNotebookEvent(*this); } - void SetSelection(int s) { selection = s; m_commandInt = s; } - int GetSelection() const { return selection; } + void SetDragSource(wxAuiNotebook* s) { m_dragSource = s; } + wxAuiNotebook* GetDragSource() const { return m_dragSource; } - void SetOldSelection(int s) { old_selection = s; } - int GetOldSelection() const { return old_selection; } - - void SetDragSource(wxAuiNotebook* s) { drag_source = s; } - wxAuiNotebook* GetDragSource() const { return drag_source; } - -public: - int old_selection; - int selection; - wxAuiNotebook* drag_source; +private: + wxAuiNotebook* m_dragSource; #ifndef SWIG private: @@ -117,10 +105,10 @@ class WXDLLIMPEXP_AUI wxAuiTabContainerButton public: int id; // button's id - int cur_state; // current state (normal, hover, pressed, etc.) + int curState; // current state (normal, hover, pressed, etc.) int location; // buttons location (wxLEFT, wxRIGHT, or wxCENTER) wxBitmap bitmap; // button's hover bitmap - wxBitmap dis_bitmap; // button's disabled bitmap + wxBitmap disBitmap; // button's disabled bitmap wxRect rect; // button's hit rectangle }; @@ -143,12 +131,14 @@ public: virtual wxAuiTabArt* Clone() = 0; virtual void SetFlags(unsigned int flags) = 0; - virtual void SetSizingInfo(const wxSize& tab_ctrl_size, - size_t tab_count) = 0; + virtual void SetSizingInfo(const wxSize& tabCtrlSize, + size_t tabCount) = 0; virtual void SetNormalFont(const wxFont& font) = 0; virtual void SetSelectedFont(const wxFont& font) = 0; virtual void SetMeasuringFont(const wxFont& font) = 0; + virtual void SetColour(const wxColour& colour) = 0; + virtual void SetActiveColour(const wxColour& colour) = 0; virtual void DrawBackground( wxDC& dc, @@ -158,20 +148,20 @@ public: virtual void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane, - const wxRect& in_rect, - int close_button_state, - wxRect* out_tab_rect, - wxRect* out_button_rect, - int* x_extent) = 0; + const wxRect& inRect, + int closeButtonState, + wxRect* outTabRect, + wxRect* outButtonRect, + int* xExtent) = 0; virtual void DrawButton( wxDC& dc, wxWindow* wnd, - const wxRect& in_rect, - int bitmap_id, - int button_state, + const wxRect& inRect, + int bitmapId, + int buttonState, int orientation, - wxRect* out_rect) = 0; + wxRect* outRect) = 0; virtual wxSize GetTabSize( wxDC& dc, @@ -179,20 +169,20 @@ public: const wxString& caption, const wxBitmap& bitmap, bool active, - int close_button_state, - int* x_extent) = 0; + int closeButtonState, + int* xExtent) = 0; virtual int ShowDropDown( wxWindow* wnd, const wxAuiNotebookPageArray& items, - int active_idx) = 0; + int activeIdx) = 0; virtual int GetIndentSize() = 0; virtual int GetBestTabCtrlSize( wxWindow* wnd, const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size) = 0; + const wxSize& requiredBmpSize) = 0; }; @@ -206,12 +196,14 @@ public: wxAuiTabArt* Clone(); void SetFlags(unsigned int flags); - void SetSizingInfo(const wxSize& tab_ctrl_size, - size_t tab_count); + void SetSizingInfo(const wxSize& tabCtrlSize, + size_t tabCount); void SetNormalFont(const wxFont& font); void SetSelectedFont(const wxFont& font); void SetMeasuringFont(const wxFont& font); + void SetColour(const wxColour& colour); + void SetActiveColour(const wxColour& colour); void DrawBackground( wxDC& dc, @@ -221,20 +213,20 @@ public: void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane, - const wxRect& in_rect, - int close_button_state, - wxRect* out_tab_rect, - wxRect* out_button_rect, - int* x_extent); + const wxRect& inRect, + int closeButtonState, + wxRect* outTabRect, + wxRect* outButtonRect, + int* xExtent); void DrawButton( wxDC& dc, wxWindow* wnd, - const wxRect& in_rect, - int bitmap_id, - int button_state, + const wxRect& inRect, + int bitmapId, + int buttonState, int orientation, - wxRect* out_rect); + wxRect* outRect); int GetIndentSize(); @@ -244,38 +236,39 @@ public: const wxString& caption, const wxBitmap& bitmap, bool active, - int close_button_state, - int* x_extent); + int closeButtonState, + int* xExtent); int ShowDropDown( wxWindow* wnd, const wxAuiNotebookPageArray& items, - int active_idx); + int activeIdx); int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size); + const wxSize& requiredBmpSize); protected: - wxFont m_normal_font; - wxFont m_selected_font; - wxFont m_measuring_font; - wxColour m_base_colour; - wxPen m_base_colour_pen; - wxPen m_border_pen; - wxBrush m_base_colour_brush; - wxBitmap m_active_close_bmp; - wxBitmap m_disabled_close_bmp; - wxBitmap m_active_left_bmp; - wxBitmap m_disabled_left_bmp; - wxBitmap m_active_right_bmp; - wxBitmap m_disabled_right_bmp; - wxBitmap m_active_windowlist_bmp; - wxBitmap m_disabled_windowlist_bmp; + wxFont m_normalFont; + wxFont m_selectedFont; + wxFont m_measuringFont; + wxColour m_baseColour; + wxPen m_baseColourPen; + wxPen m_borderPen; + wxBrush m_baseColourBrush; + wxColour m_activeColour; + wxBitmap m_activeCloseBmp; + wxBitmap m_disabledCloseBmp; + wxBitmap m_activeLeftBmp; + wxBitmap m_disabledLeftBmp; + wxBitmap m_activeRightBmp; + wxBitmap m_disabledRightBmp; + wxBitmap m_activeWindowListBmp; + wxBitmap m_disabledWindowListBmp; - int m_fixed_tab_width; - int m_tab_ctrl_height; + int m_fixedTabWidth; + int m_tabCtrlHeight; unsigned int m_flags; }; @@ -291,12 +284,14 @@ public: wxAuiTabArt* Clone(); void SetFlags(unsigned int flags); - void SetSizingInfo(const wxSize& tab_ctrl_size, - size_t tab_count); + void SetSizingInfo(const wxSize& tabCtrlSize, + size_t tabCount); void SetNormalFont(const wxFont& font); void SetSelectedFont(const wxFont& font); void SetMeasuringFont(const wxFont& font); + void SetColour(const wxColour& colour); + void SetActiveColour(const wxColour& colour); void DrawBackground( wxDC& dc, @@ -306,20 +301,20 @@ public: void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane, - const wxRect& in_rect, - int close_button_state, - wxRect* out_tab_rect, - wxRect* out_button_rect, - int* x_extent); + const wxRect& inRect, + int closeButtonState, + wxRect* outTabRect, + wxRect* outButtonRect, + int* xExtent); void DrawButton( wxDC& dc, wxWindow* wnd, - const wxRect& in_rect, - int bitmap_id, - int button_state, + const wxRect& inRect, + int bitmapId, + int buttonState, int orientation, - wxRect* out_rect); + wxRect* outRect); int GetIndentSize(); @@ -329,38 +324,38 @@ public: const wxString& caption, const wxBitmap& bitmap, bool active, - int close_button_state, - int* x_extent); + int closeButtonState, + int* xExtent); int ShowDropDown( wxWindow* wnd, const wxAuiNotebookPageArray& items, - int active_idx); + int activeIdx); int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size); + const wxSize& requiredBmpSize); protected: - wxFont m_normal_font; - wxFont m_selected_font; - wxFont m_measuring_font; - wxPen m_normal_bkpen; - wxPen m_selected_bkpen; - wxBrush m_normal_bkbrush; - wxBrush m_selected_bkbrush; - wxBrush m_bkbrush; - wxBitmap m_active_close_bmp; - wxBitmap m_disabled_close_bmp; - wxBitmap m_active_left_bmp; - wxBitmap m_disabled_left_bmp; - wxBitmap m_active_right_bmp; - wxBitmap m_disabled_right_bmp; - wxBitmap m_active_windowlist_bmp; - wxBitmap m_disabled_windowlist_bmp; + wxFont m_normalFont; + wxFont m_selectedFont; + wxFont m_measuringFont; + wxPen m_normalBkPen; + wxPen m_selectedBkPen; + wxBrush m_normalBkBrush; + wxBrush m_selectedBkBrush; + wxBrush m_bkBrush; + wxBitmap m_activeCloseBmp; + wxBitmap m_disabledCloseBmp; + wxBitmap m_activeLeftBmp; + wxBitmap m_disabledLeftBmp; + wxBitmap m_activeRightBmp; + wxBitmap m_disabledRightBmp; + wxBitmap m_activeWindowListBmp; + wxBitmap m_disabledWindowListBmp; - int m_fixed_tab_width; + int m_fixedTabWidth; unsigned int m_flags; }; @@ -387,7 +382,7 @@ public: bool AddPage(wxWindow* page, const wxAuiNotebookPage& info); bool InsertPage(wxWindow* page, const wxAuiNotebookPage& info, size_t idx); - bool MovePage(wxWindow* page, size_t new_idx); + bool MovePage(wxWindow* page, size_t newIdx); bool RemovePage(wxWindow* page); bool SetActivePage(wxWindow* page); bool SetActivePage(size_t page); @@ -401,17 +396,19 @@ public: wxAuiNotebookPage& GetPage(size_t idx); const wxAuiNotebookPage& GetPage(size_t idx) const; wxAuiNotebookPageArray& GetPages(); - void SetNormalFont(const wxFont& normal_font); - void SetSelectedFont(const wxFont& selected_font); - void SetMeasuringFont(const wxFont& measuring_font); + void SetNormalFont(const wxFont& normalFont); + void SetSelectedFont(const wxFont& selectedFont); + void SetMeasuringFont(const wxFont& measuringFont); + void SetColour(const wxColour& colour); + void SetActiveColour(const wxColour& colour); void DoShowHide(); void SetRect(const wxRect& rect); void RemoveButton(int id); void AddButton(int id, int location, - const wxBitmap& normal_bitmap = wxNullBitmap, - const wxBitmap& disabled_bitmap = wxNullBitmap); + const wxBitmap& normalBitmap = wxNullBitmap, + const wxBitmap& disabledBitmap = wxNullBitmap); size_t GetTabOffset() const; void SetTabOffset(size_t offset); @@ -431,9 +428,9 @@ protected: wxAuiTabArt* m_art; wxAuiNotebookPageArray m_pages; wxAuiTabContainerButtonArray m_buttons; - wxAuiTabContainerButtonArray m_tab_close_buttons; + wxAuiTabContainerButtonArray m_tabCloseButtons; wxRect m_rect; - size_t m_tab_offset; + size_t m_tabOffset; unsigned int m_flags; }; @@ -452,7 +449,7 @@ public: ~wxAuiTabCtrl(); - bool IsDragging() const { return m_is_dragging; } + bool IsDragging() const { return m_isDragging; } protected: // choose the default border for this window @@ -478,11 +475,11 @@ protected: protected: - wxPoint m_click_pt; - wxWindow* m_click_tab; - bool m_is_dragging; - wxAuiTabContainerButton* m_hover_button; - wxAuiTabContainerButton* m_pressed_button; + wxPoint m_clickPt; + wxWindow* m_clickTab; + bool m_isDragging; + wxAuiTabContainerButton* m_hoverButton; + wxAuiTabContainerButton* m_pressedButton; #ifndef SWIG DECLARE_CLASS(wxAuiTabCtrl) @@ -493,18 +490,22 @@ protected: -class WXDLLIMPEXP_AUI wxAuiNotebook : public wxControl +class WXDLLIMPEXP_AUI wxAuiNotebook : public wxNavigationEnabled { public: - wxAuiNotebook(); + wxAuiNotebook() { Init(); } wxAuiNotebook(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxAUI_NB_DEFAULT_STYLE); + long style = wxAUI_NB_DEFAULT_STYLE) + { + Init(); + Create(parent, id, pos, size, style); + } virtual ~wxAuiNotebook(); @@ -526,7 +527,7 @@ public: bool select = false, const wxBitmap& bitmap = wxNullBitmap); - bool InsertPage(size_t page_idx, + bool InsertPage(size_t pageIdx, wxWindow* page, const wxString& caption, bool select = false, @@ -536,16 +537,16 @@ public: bool RemovePage(size_t page); size_t GetPageCount() const; - wxWindow* GetPage(size_t page_idx) const; - int GetPageIndex(wxWindow* page_wnd) const; + wxWindow* GetPage(size_t pageIdx) const; + int GetPageIndex(wxWindow* pageWnd) const; bool SetPageText(size_t page, const wxString& text); - wxString GetPageText(size_t page_idx) const; + wxString GetPageText(size_t pageIdx) const; bool SetPageBitmap(size_t page, const wxBitmap& bitmap); - wxBitmap GetPageBitmap(size_t page_idx) const; + wxBitmap GetPageBitmap(size_t pageIdx) const; - size_t SetSelection(size_t new_page); + int SetSelection(size_t newPage); int GetSelection() const; virtual void Split(size_t page, int direction); @@ -585,7 +586,28 @@ public: // Redo sizing after thawing virtual void Thaw(); + //wxBookCtrlBase functions + + virtual void SetPageSize (const wxSize &size); + virtual int HitTest (const wxPoint &pt, long *flags=NULL) const; + + virtual int GetPageImage(size_t n) const; + virtual bool SetPageImage(size_t n, int imageId); + + wxWindow* GetCurrentPage () const; + + virtual int ChangeSelection(size_t n); + + virtual bool AddPage(wxWindow *page, const wxString &text, bool select, + int imageId); + virtual bool DeleteAllPages(); + virtual bool InsertPage(size_t index, wxWindow *page, const wxString &text, + bool select, int imageId); + protected: + // Common part of all ctors. + void Init(); + // choose the default border for this window virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } @@ -598,12 +620,18 @@ protected: virtual int CalculateTabCtrlHeight(); virtual wxSize CalculateNewSplitSize(); + // remove the page and return a pointer to it + virtual wxWindow *DoRemovePage(size_t WXUNUSED(page)) { return NULL; } + + //A general selection function + virtual int DoModifySelection(size_t n, bool events); + protected: void DoSizing(); void InitNotebook(long style); wxAuiTabCtrl* GetTabCtrlFromPoint(const wxPoint& pt); - wxWindow* GetTabFrameFromTabCtrl(wxWindow* tab_ctrl); + wxWindow* GetTabFrameFromTabCtrl(wxWindow* tabCtrl); wxAuiTabCtrl* GetActiveTabCtrl(); bool FindTab(wxWindow* page, wxAuiTabCtrl** ctrl, int* idx); void RemoveEmptyTabFrames(); @@ -618,6 +646,7 @@ protected: void OnTabBeginDrag(wxAuiNotebookEvent& evt); void OnTabDragMotion(wxAuiNotebookEvent& evt); void OnTabEndDrag(wxAuiNotebookEvent& evt); + void OnTabCancelDrag(wxAuiNotebookEvent& evt); void OnTabButton(wxAuiNotebookEvent& evt); void OnTabMiddleDown(wxAuiNotebookEvent& evt); void OnTabMiddleUp(wxAuiNotebookEvent& evt); @@ -638,26 +667,23 @@ protected: wxAuiManager m_mgr; wxAuiTabContainer m_tabs; - int m_curpage; - int m_tab_id_counter; - wxWindow* m_dummy_wnd; + int m_curPage; + int m_tabIdCounter; + wxWindow* m_dummyWnd; - wxSize m_requested_bmp_size; - int m_requested_tabctrl_height; - wxFont m_selected_font; - wxFont m_normal_font; - int m_tab_ctrl_height; + wxSize m_requestedBmpSize; + int m_requestedTabCtrlHeight; + wxFont m_selectedFont; + wxFont m_normalFont; + int m_tabCtrlHeight; - int m_last_drag_x; + int m_lastDragX; unsigned int m_flags; #ifndef SWIG DECLARE_CLASS(wxAuiNotebook) DECLARE_EVENT_TABLE() #endif - - WX_DECLARE_CONTROL_CONTAINER(); - }; diff --git a/Externals/wxWidgets3/include/wx/aui/dockart.h b/Externals/wxWidgets3/include/wx/aui/dockart.h index beaa0dc9fa..fbc2ba7593 100644 --- a/Externals/wxWidgets3/include/wx/aui/dockart.h +++ b/Externals/wxWidgets3/include/wx/aui/dockart.h @@ -4,7 +4,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: $Id: dockart.h 66670 2011-01-12 13:39:36Z VZ $ +// RCS-ID: $Id: dockart.h 69590 2011-10-30 14:20:03Z VZ $ // Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -37,7 +37,7 @@ public: virtual ~wxAuiDockArt() { } virtual int GetMetric(int id) = 0; - virtual void SetMetric(int id, int new_val) = 0; + virtual void SetMetric(int id, int newVal) = 0; virtual void SetFont(int id, const wxFont& font) = 0; virtual wxFont GetFont(int id) = 0; virtual wxColour GetColour(int id) = 0; @@ -74,7 +74,7 @@ public: virtual void DrawPaneButton(wxDC& dc, wxWindow* window, int button, - int button_state, + int buttonState, const wxRect& rect, wxAuiPaneInfo& pane) = 0; }; @@ -90,8 +90,8 @@ public: wxAuiDefaultDockArt(); - int GetMetric(int metric_id); - void SetMetric(int metric_id, int new_val); + int GetMetric(int metricId); + void SetMetric(int metricId, int newVal); wxColour GetColour(int id); void SetColour(int id, const wxColor& colour); void SetFont(int id, const wxFont& font); @@ -126,7 +126,7 @@ public: void DrawPaneButton(wxDC& dc, wxWindow *window, int button, - int button_state, + int buttonState, const wxRect& rect, wxAuiPaneInfo& pane); @@ -142,35 +142,35 @@ protected: protected: - wxPen m_border_pen; - wxBrush m_sash_brush; - wxBrush m_background_brush; - wxBrush m_gripper_brush; - wxFont m_caption_font; - wxBitmap m_inactive_close_bitmap; - wxBitmap m_inactive_pin_bitmap; - wxBitmap m_inactive_maximize_bitmap; - wxBitmap m_inactive_restore_bitmap; - wxBitmap m_active_close_bitmap; - wxBitmap m_active_pin_bitmap; - wxBitmap m_active_maximize_bitmap; - wxBitmap m_active_restore_bitmap; - wxPen m_gripper_pen1; - wxPen m_gripper_pen2; - wxPen m_gripper_pen3; - wxColour m_base_colour; - wxColour m_active_caption_colour; - wxColour m_active_caption_gradient_colour; - wxColour m_active_caption_text_colour; - wxColour m_inactive_caption_colour; - wxColour m_inactive_caption_gradient_colour; - wxColour m_inactive_caption_text_colour; - int m_border_size; - int m_caption_size; - int m_sash_size; - int m_button_size; - int m_gripper_size; - int m_gradient_type; + wxPen m_borderPen; + wxBrush m_sashBrush; + wxBrush m_backgroundBrush; + wxBrush m_gripperBrush; + wxFont m_captionFont; + wxBitmap m_inactiveCloseBitmap; + wxBitmap m_inactivePinBitmap; + wxBitmap m_inactiveMaximizeBitmap; + wxBitmap m_inactiveRestoreBitmap; + wxBitmap m_activeCloseBitmap; + wxBitmap m_activePinBitmap; + wxBitmap m_activeMaximizeBitmap; + wxBitmap m_activeRestoreBitmap; + wxPen m_gripperPen1; + wxPen m_gripperPen2; + wxPen m_gripperPen3; + wxColour m_baseColour; + wxColour m_activeCaptionColour; + wxColour m_activeCaptionGradientColour; + wxColour m_activeCaptionTextColour; + wxColour m_inactiveCaptionColour; + wxColour m_inactiveCaptionGradientColour; + wxColour m_inactiveCaptionTextColour; + int m_borderSize; + int m_captionSize; + int m_sashSize; + int m_buttonSize; + int m_gripperSize; + int m_gradientType; }; diff --git a/Externals/wxWidgets3/include/wx/aui/floatpane.h b/Externals/wxWidgets3/include/wx/aui/floatpane.h index 76d1cb54b2..d88614555d 100644 --- a/Externals/wxWidgets3/include/wx/aui/floatpane.h +++ b/Externals/wxWidgets3/include/wx/aui/floatpane.h @@ -4,7 +4,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: $Id: floatpane.h 61724 2009-08-21 10:41:26Z VZ $ +// RCS-ID: $Id: floatpane.h 69590 2011-10-30 14:20:03Z VZ $ // Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -33,7 +33,7 @@ class WXDLLIMPEXP_AUI wxAuiFloatingFrame : public wxAuiFloatingFrameBaseClass { public: wxAuiFloatingFrame(wxWindow* parent, - wxAuiManager* owner_mgr, + wxAuiManager* ownerMgr, const wxAuiPaneInfo& pane, wxWindowID id = wxID_ANY, long style = wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | @@ -46,7 +46,7 @@ public: protected: virtual void OnMoveStart(); - virtual void OnMoving(const wxRect& window_rect, wxDirection dir); + virtual void OnMoving(const wxRect& windowRect, wxDirection dir); virtual void OnMoveFinished(); private: @@ -58,16 +58,16 @@ private: static bool isMouseDown(); private: - wxWindow* m_pane_window; // pane window being managed - bool m_solid_drag; // true if system uses solid window drag + wxWindow* m_paneWindow; // pane window being managed + bool m_solidDrag; // true if system uses solid window drag bool m_moving; - wxRect m_last_rect; - wxRect m_last2_rect; - wxRect m_last3_rect; - wxSize m_last_size; + wxRect m_lastRect; + wxRect m_last2Rect; + wxRect m_last3Rect; + wxSize m_lastSize; wxDirection m_lastDirection; - wxWeakRef m_owner_mgr; + wxWeakRef m_ownerMgr; wxAuiManager m_mgr; #ifndef SWIG diff --git a/Externals/wxWidgets3/include/wx/aui/framemanager.h b/Externals/wxWidgets3/include/wx/aui/framemanager.h index 211171ebb6..c11491617f 100644 --- a/Externals/wxWidgets3/include/wx/aui/framemanager.h +++ b/Externals/wxWidgets3/include/wx/aui/framemanager.h @@ -4,7 +4,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: $Id: framemanager.h 66673 2011-01-12 18:04:39Z PC $ +// RCS-ID: $Id: framemanager.h 70807 2012-03-04 20:31:34Z VZ $ // Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -458,7 +458,7 @@ class WXDLLIMPEXP_AUI wxAuiManager : public wxEvtHandler public: - wxAuiManager(wxWindow* managed_wnd = NULL, + wxAuiManager(wxWindow* managedWnd = NULL, unsigned int flags = wxAUI_MGR_DEFAULT); virtual ~wxAuiManager(); void UnInit(); @@ -466,12 +466,12 @@ public: void SetFlags(unsigned int flags); unsigned int GetFlags() const; - void SetManagedWindow(wxWindow* managed_wnd); + void SetManagedWindow(wxWindow* managedWnd); wxWindow* GetManagedWindow() const; static wxAuiManager* GetManager(wxWindow* window); - void SetArtProvider(wxAuiDockArt* art_provider); + void SetArtProvider(wxAuiDockArt* artProvider); wxAuiDockArt* GetArtProvider() const; wxAuiPaneInfo& GetPane(wxWindow* window); @@ -479,35 +479,35 @@ public: wxAuiPaneInfoArray& GetAllPanes(); bool AddPane(wxWindow* window, - const wxAuiPaneInfo& pane_info); + const wxAuiPaneInfo& paneInfo); bool AddPane(wxWindow* window, - const wxAuiPaneInfo& pane_info, - const wxPoint& drop_pos); + const wxAuiPaneInfo& paneInfo, + const wxPoint& dropPos); bool AddPane(wxWindow* window, int direction = wxLEFT, const wxString& caption = wxEmptyString); bool InsertPane(wxWindow* window, - const wxAuiPaneInfo& insert_location, - int insert_level = wxAUI_INSERT_PANE); + const wxAuiPaneInfo& insertLocation, + int insertLevel = wxAUI_INSERT_PANE); bool DetachPane(wxWindow* window); void Update(); wxString SavePaneInfo(wxAuiPaneInfo& pane); - void LoadPaneInfo(wxString pane_part, wxAuiPaneInfo &pane); + void LoadPaneInfo(wxString panePart, wxAuiPaneInfo &pane); wxString SavePerspective(); bool LoadPerspective(const wxString& perspective, bool update = true); - void SetDockSizeConstraint(double width_pct, double height_pct); - void GetDockSizeConstraint(double* width_pct, double* height_pct) const; + void SetDockSizeConstraint(double widthPct, double heightPct); + void GetDockSizeConstraint(double* widthPct, double* heightPct) const; - void ClosePane(wxAuiPaneInfo& pane_info); - void MaximizePane(wxAuiPaneInfo& pane_info); - void RestorePane(wxAuiPaneInfo& pane_info); + void ClosePane(wxAuiPaneInfo& paneInfo); + void MaximizePane(wxAuiPaneInfo& paneInfo); + void RestorePane(wxAuiPaneInfo& paneInfo); void RestoreMaximizedPane(); public: @@ -516,16 +516,16 @@ public: virtual bool CanDockPanel(const wxAuiPaneInfo & p); void StartPaneDrag( - wxWindow* pane_window, + wxWindow* paneWindow, const wxPoint& offset); wxRect CalculateHintRect( - wxWindow* pane_window, + wxWindow* paneWindow, const wxPoint& pt, const wxPoint& offset); void DrawHintRect( - wxWindow* pane_window, + wxWindow* paneWindow, const wxPoint& pt, const wxPoint& offset); @@ -552,26 +552,26 @@ protected: wxAuiDockInfo& dock, wxAuiPaneInfo& pane, wxAuiDockUIPartArray& uiparts, - bool spacer_only); + bool spacerOnly); void LayoutAddDock(wxSizer* container, wxAuiDockInfo& dock, - wxAuiDockUIPartArray& uiparts, - bool spacer_only); + wxAuiDockUIPartArray& uiParts, + bool spacerOnly); wxSizer* LayoutAll(wxAuiPaneInfoArray& panes, wxAuiDockInfoArray& docks, - wxAuiDockUIPartArray& uiparts, - bool spacer_only = false); + wxAuiDockUIPartArray & uiParts, + bool spacerOnly = false); virtual bool ProcessDockResult(wxAuiPaneInfo& target, - const wxAuiPaneInfo& new_pos); + const wxAuiPaneInfo& newPos); bool DoDrop(wxAuiDockInfoArray& docks, wxAuiPaneInfoArray& panes, wxAuiPaneInfo& drop, const wxPoint& pt, - const wxPoint& action_offset = wxPoint(0,0)); + const wxPoint& actionOffset = wxPoint(0,0)); wxAuiDockUIPart* HitTest(int x, int y); wxAuiDockUIPart* GetPanePart(wxWindow* pane); @@ -585,7 +585,7 @@ protected: void Render(wxDC* dc); void Repaint(wxDC* dc = NULL); void ProcessMgrEvent(wxAuiManagerEvent& event); - void UpdateButtonOnScreen(wxAuiDockUIPart* button_ui_part, + void UpdateButtonOnScreen(wxAuiDockUIPart* buttonUiPart, const wxMouseEvent& event); void GetPanePositionsAndSizes(wxAuiDockInfo& dock, wxArrayInt& positions, @@ -594,6 +594,8 @@ protected: /// Ends a resize action, or for live update, resizes the sash bool DoEndResizeAction(wxMouseEvent& event); + void SetActivePane(wxWindow* active_pane); + public: // public events (which can be invoked externally) @@ -636,29 +638,29 @@ protected: wxAuiPaneInfoArray m_panes; // array of panes structures wxAuiDockInfoArray m_docks; // array of docks structures - wxAuiDockUIPartArray m_uiparts; // array of UI parts (captions, buttons, etc) + wxAuiDockUIPartArray m_uiParts; // array of UI parts (captions, buttons, etc) int m_action; // current mouse action - wxPoint m_action_start; // position where the action click started - wxPoint m_action_offset; // offset from upper left of the item clicked - wxAuiDockUIPart* m_action_part; // ptr to the part the action happened to - wxWindow* m_action_window; // action frame or window (NULL if none) - wxRect m_action_hintrect; // hint rectangle for the action - wxRect m_last_rect; - wxAuiDockUIPart* m_hover_button;// button uipart being hovered over - wxRect m_last_hint; // last hint rectangle - wxPoint m_last_mouse_move; // last mouse move position (see OnMotion) + wxPoint m_actionStart; // position where the action click started + wxPoint m_actionOffset; // offset from upper left of the item clicked + wxAuiDockUIPart* m_actionPart; // ptr to the part the action happened to + wxWindow* m_actionWindow; // action frame or window (NULL if none) + wxRect m_actionHintRect; // hint rectangle for the action + wxRect m_lastRect; + wxAuiDockUIPart* m_hoverButton;// button uipart being hovered over + wxRect m_lastHint; // last hint rectangle + wxPoint m_lastMouseMove; // last mouse move position (see OnMotion) int m_currentDragItem; bool m_skipping; - bool m_has_maximized; + bool m_hasMaximized; - double m_dock_constraint_x; // 0.0 .. 1.0; max pct of window width a dock can consume - double m_dock_constraint_y; // 0.0 .. 1.0; max pct of window height a dock can consume + double m_dockConstraintX; // 0.0 .. 1.0; max pct of window width a dock can consume + double m_dockConstraintY; // 0.0 .. 1.0; max pct of window height a dock can consume - wxFrame* m_hint_wnd; // transparent hint window, if supported by platform - wxTimer m_hint_fadetimer; // transparent fade timer - wxByte m_hint_fadeamt; // transparent fade amount - wxByte m_hint_fademax; // maximum value of hint fade + wxFrame* m_hintWnd; // transparent hint window, if supported by platform + wxTimer m_hintFadeTimer; // transparent fade timer + wxByte m_hintFadeAmt; // transparent fade amount + wxByte m_hintFadeMax; // maximum value of hint fade void* m_reserved; @@ -839,6 +841,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_BUTTON, wxAuiManagerEv wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_CLOSE, wxAuiManagerEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_MAXIMIZE, wxAuiManagerEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_RESTORE, wxAuiManagerEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_ACTIVATED, wxAuiManagerEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_RENDER, wxAuiManagerEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI, wxEVT_AUI_FIND_MANAGER, wxAuiManagerEvent ); @@ -855,6 +858,8 @@ typedef void (wxEvtHandler::*wxAuiManagerEventFunction)(wxAuiManagerEvent&); wx__DECLARE_EVT0(wxEVT_AUI_PANE_MAXIMIZE, wxAuiManagerEventHandler(func)) #define EVT_AUI_PANE_RESTORE(func) \ wx__DECLARE_EVT0(wxEVT_AUI_PANE_RESTORE, wxAuiManagerEventHandler(func)) +#define EVT_AUI_PANE_ACTIVATED(func) \ + wx__DECLARE_EVT0(wxEVT_AUI_PANE_ACTIVATED, wxAuiManagerEventHandler(func)) #define EVT_AUI_RENDER(func) \ wx__DECLARE_EVT0(wxEVT_AUI_RENDER, wxAuiManagerEventHandler(func)) #define EVT_AUI_FIND_MANAGER(func) \ @@ -866,6 +871,7 @@ typedef void (wxEvtHandler::*wxAuiManagerEventFunction)(wxAuiManagerEvent&); %constant wxEventType wxEVT_AUI_PANE_CLOSE; %constant wxEventType wxEVT_AUI_PANE_MAXIMIZE; %constant wxEventType wxEVT_AUI_PANE_RESTORE; +%constant wxEventType wxEVT_AUI_PANE_ACTIVATED; %constant wxEventType wxEVT_AUI_RENDER; %constant wxEventType wxEVT_AUI_FIND_MANAGER; @@ -874,6 +880,7 @@ typedef void (wxEvtHandler::*wxAuiManagerEventFunction)(wxAuiManagerEvent&); EVT_AUI_PANE_CLOSE = wx.PyEventBinder( wxEVT_AUI_PANE_CLOSE ) EVT_AUI_PANE_MAXIMIZE = wx.PyEventBinder( wxEVT_AUI_PANE_MAXIMIZE ) EVT_AUI_PANE_RESTORE = wx.PyEventBinder( wxEVT_AUI_PANE_RESTORE ) + EVT_AUI_PANE_ACTIVATED = wx.PyEventBinder( wxEVT_AUI_PANE_ACTIVATED ) EVT_AUI_RENDER = wx.PyEventBinder( wxEVT_AUI_RENDER ) EVT_AUI_FIND_MANAGER = wx.PyEventBinder( wxEVT_AUI_FIND_MANAGER ) } diff --git a/Externals/wxWidgets3/include/wx/aui/tabmdi.h b/Externals/wxWidgets3/include/wx/aui/tabmdi.h index ce9d812348..6a680845b3 100644 --- a/Externals/wxWidgets3/include/wx/aui/tabmdi.h +++ b/Externals/wxWidgets3/include/wx/aui/tabmdi.h @@ -4,7 +4,7 @@ // Author: Hans Van Leemputten // Modified by: Benjamin I. Williams / Kirix Corporation // Created: 29/07/2002 -// RCS-ID: $Id: tabmdi.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: tabmdi.h 70909 2012-03-15 13:49:54Z VZ $ // Copyright: (c) Hans Van Leemputten // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -101,6 +101,7 @@ protected: void AddWindowMenu(wxMenuBar *pMenuBar); void DoHandleMenu(wxCommandEvent &event); + void DoHandleUpdateUI(wxUpdateUIEvent &event); #endif // wxUSE_MENUS virtual bool ProcessEvent(wxEvent& event); @@ -138,7 +139,7 @@ public: const wxString& name = wxFrameNameStr); #if wxUSE_MENUS - virtual void SetMenuBar(wxMenuBar *menu_bar); + virtual void SetMenuBar(wxMenuBar *menuBar); virtual wxMenuBar *GetMenuBar() const; #endif // wxUSE_MENUS @@ -199,7 +200,7 @@ public: protected: void Init(); - virtual void DoSetSize(int x, int y, int width, int height, int size_flags); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags); virtual void DoMoveWindow(int x, int y, int width, int height); // no size hints @@ -215,12 +216,12 @@ public: protected: wxAuiMDIParentFrame* m_pMDIParentFrame; - wxRect m_mdi_newrect; - wxRect m_mdi_currect; + wxRect m_mdiNewRect; + wxRect m_mdiCurRect; wxString m_title; wxIcon m_icon; - wxIconBundle m_icon_bundle; - bool m_activate_on_create; + wxIconBundle m_iconBundle; + bool m_activateOnCreate; #if wxUSE_MENUS wxMenuBar* m_pMenuBar; @@ -244,7 +245,6 @@ class WXDLLIMPEXP_AUI wxAuiMDIClientWindow : public wxAuiNotebook public: wxAuiMDIClientWindow(); wxAuiMDIClientWindow(wxAuiMDIParentFrame *parent, long style = 0); - ~wxAuiMDIClientWindow(); virtual bool CreateClient(wxAuiMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL); @@ -253,7 +253,7 @@ public: protected: - void PageChanged(int old_selection, int new_selection); + void PageChanged(int oldSelection, int newSelection); void OnPageClose(wxAuiNotebookEvent& evt); void OnPageChanged(wxAuiNotebookEvent& evt); void OnSize(wxSizeEvent& evt); diff --git a/Externals/wxWidgets3/include/wx/bannerwindow.h b/Externals/wxWidgets3/include/wx/bannerwindow.h new file mode 100644 index 0000000000..1ce3bc3170 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/bannerwindow.h @@ -0,0 +1,145 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/bannerwindow.h +// Purpose: wxBannerWindow class declaration +// Author: Vadim Zeitlin +// Created: 2011-08-16 +// RCS-ID: $Id: bannerwindow.h 69859 2011-11-28 18:58:52Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_BANNERWINDOW_H_ +#define _WX_BANNERWINDOW_H_ + +#include "wx/defs.h" + +#if wxUSE_BANNERWINDOW + +#include "wx/bitmap.h" +#include "wx/event.h" +#include "wx/window.h" + +class WXDLLIMPEXP_FWD_CORE wxBitmap; +class WXDLLIMPEXP_FWD_CORE wxColour; +class WXDLLIMPEXP_FWD_CORE wxDC; + +extern WXDLLIMPEXP_DATA_ADV(const char) wxBannerWindowNameStr[]; + +// ---------------------------------------------------------------------------- +// A simple banner window showing either a bitmap or text. +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxBannerWindow : public wxWindow +{ +public: + // Default constructor, use Create() later. + wxBannerWindow() { Init(); } + + // Convenient constructor that should be used in the majority of cases. + // + // The banner orientation changes how the text in it is displayed and also + // defines where is the bitmap truncated if it's too big to fit but doesn't + // do anything for the banner position, this is supposed to be taken care + // of in the usual way, e.g. using sizers. + wxBannerWindow(wxWindow* parent, wxDirection dir = wxLEFT) + { + Init(); + + Create(parent, wxID_ANY, dir); + } + + // Full constructor provided for consistency with the other classes only. + wxBannerWindow(wxWindow* parent, + wxWindowID winid, + wxDirection dir = wxLEFT, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxBannerWindowNameStr) + { + Init(); + + Create(parent, winid, dir, pos, size, style, name); + } + + // Can be only called on objects created with the default constructor. + bool Create(wxWindow* parent, + wxWindowID winid, + wxDirection dir = wxLEFT, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxBannerWindowNameStr); + + + // Provide an existing bitmap to show. For wxLEFT orientation the bitmap is + // truncated from the top, for wxTOP and wxBOTTOM -- from the right and for + // wxRIGHT -- from the bottom, so put the most important part of the bitmap + // information in the opposite direction. + void SetBitmap(const wxBitmap& bmp); + + // Set the text to display. This is mutually exclusive with SetBitmap(). + // Title is rendered in bold and should be single line, message can have + // multiple lines but is not wrapped automatically. + void SetText(const wxString& title, const wxString& message); + + // Set the colours between which the gradient runs. This can be combined + // with SetText() but not SetBitmap(). + void SetGradient(const wxColour& start, const wxColour& end); + +protected: + virtual wxSize DoGetBestClientSize() const; + +private: + // Common part of all constructors. + void Init(); + + // Fully invalidates the window. + void OnSize(wxSizeEvent& event); + + // Redraws the window using either m_bitmap or m_title/m_message. + void OnPaint(wxPaintEvent& event); + + // Helper of OnPaint(): draw the bitmap at the correct position depending + // on our orientation. + void DrawBitmapBackground(wxDC& dc); + + // Helper of OnPaint(): draw the text in the appropriate direction. + void DrawBannerTextLine(wxDC& dc, const wxString& str, const wxPoint& pos); + + // Return the font to use for the title. Currently this is hardcoded as a + // larger bold version of the standard window font but could be made + // configurable in the future. + wxFont GetTitleFont() const; + + // Return the colour to use for extending the bitmap. Non-const as it + // updates m_colBitmapBg if needed. + wxColour GetBitmapBg(); + + + // The window side along which the banner is laid out. + wxDirection m_direction; + + // If valid, this bitmap is drawn as is. + wxBitmap m_bitmap; + + // If bitmap is valid, this is the colour we use to extend it if the bitmap + // is smaller than this window. It is computed on demand by GetBitmapBg(). + wxColour m_colBitmapBg; + + // The title and main message to draw, used if m_bitmap is invalid. + wxString m_title, + m_message; + + // Start and stop gradient colours, only used when drawing text. + wxColour m_colStart, + m_colEnd; + + wxDECLARE_EVENT_TABLE(); + + wxDECLARE_NO_COPY_CLASS(wxBannerWindow); +}; + +#endif // wxUSE_BANNERWINDOW + +#endif // _WX_BANNERWINDOW_H_ diff --git a/Externals/wxWidgets3/include/wx/bitmap.h b/Externals/wxWidgets3/include/wx/bitmap.h index 73c7ba965e..ab9046803c 100644 --- a/Externals/wxWidgets3/include/wx/bitmap.h +++ b/Externals/wxWidgets3/include/wx/bitmap.h @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 22.04.01 -// RCS-ID: $Id: bitmap.h 66086 2010-11-10 13:51:51Z VZ $ +// RCS-ID: $Id: bitmap.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -68,8 +68,7 @@ protected: virtual bool InitFromMonoBitmap(const wxBitmap& bitmap) = 0; }; -#if defined(__WXMGL__) || \ - defined(__WXDFB__) || \ +#if defined(__WXDFB__) || \ defined(__WXMAC__) || \ defined(__WXGTK__) || \ defined(__WXCOCOA__) || \ @@ -84,9 +83,9 @@ protected: #define wxBITMAP_SCREEN_DEPTH (-1) -// All ports except wxMSW,wxOS2,wxPalmOS use wxBitmapHandler and wxBitmapBase as base class -// for wxBitmapHandler; wxMSW,wxOS2,wxPalmOS use wxGDIImageHandler as base class -// since it allows some code reuse there. +// All ports except wxMSW and wxOS2 use wxBitmapHandler and wxBitmapBase as +// base class for wxBitmapHandler; wxMSW and wxOS2 use wxGDIImageHandler as +// base class since it allows some code reuse there. #if wxUSE_BITMAP_BASE // ---------------------------------------------------------------------------- @@ -237,10 +236,7 @@ protected: // the wxBITMAP_DEFAULT_TYPE constant defines the default argument value // for wxBitmap's ctor and wxBitmap::LoadFile() functions. -#if defined(__WXPALMOS__) - #define wxBITMAP_DEFAULT_TYPE wxBITMAP_TYPE_BMP_RESOURCE - #include "wx/palmos/bitmap.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #define wxBITMAP_DEFAULT_TYPE wxBITMAP_TYPE_BMP_RESOURCE #include "wx/msw/bitmap.h" #elif defined(__WXMOTIF__) @@ -255,11 +251,8 @@ protected: #elif defined(__WXX11__) #define wxBITMAP_DEFAULT_TYPE wxBITMAP_TYPE_XPM #include "wx/x11/bitmap.h" -#elif defined(__WXMGL__) - #define wxBITMAP_DEFAULT_TYPE wxBITMAP_TYPE_RESOURCE - #include "wx/mgl/bitmap.h" #elif defined(__WXDFB__) - #define wxBITMAP_DEFAULT_TYPE wxBITMAP_TYPE_RESOURCE + #define wxBITMAP_DEFAULT_TYPE wxBITMAP_TYPE_BMP_RESOURCE #include "wx/dfb/bitmap.h" #elif defined(__WXMAC__) #define wxBITMAP_DEFAULT_TYPE wxBITMAP_TYPE_PICT_RESOURCE @@ -287,7 +280,7 @@ ConvertToDisabled(unsigned char brightness) const #endif // wxUSE_IMAGE // we must include generic mask.h after wxBitmap definition -#if defined(__WXMGL__) || defined(__WXDFB__) +#if defined(__WXDFB__) #define wxUSE_GENERIC_MASK 1 #else #define wxUSE_GENERIC_MASK 0 diff --git a/Externals/wxWidgets3/include/wx/bmpbuttn.h b/Externals/wxWidgets3/include/wx/bmpbuttn.h index 2b6c39fcd4..c2632b88f6 100644 --- a/Externals/wxWidgets3/include/wx/bmpbuttn.h +++ b/Externals/wxWidgets3/include/wx/bmpbuttn.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 25.08.00 -// RCS-ID: $Id: bmpbuttn.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: bmpbuttn.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 2000 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -130,8 +130,6 @@ protected: #include "wx/cocoa/bmpbuttn.h" #elif defined(__WXPM__) #include "wx/os2/bmpbuttn.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/bmpbuttn.h" #endif #endif // wxUSE_BMPBUTTON diff --git a/Externals/wxWidgets3/include/wx/bookctrl.h b/Externals/wxWidgets3/include/wx/bookctrl.h index 471c278ff6..b3a6809690 100644 --- a/Externals/wxWidgets3/include/wx/bookctrl.h +++ b/Externals/wxWidgets3/include/wx/bookctrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.08.03 -// RCS-ID: $Id: bookctrl.h 65967 2010-10-31 13:33:34Z VZ $ +// RCS-ID: $Id: bookctrl.h 69082 2011-09-14 08:24:06Z SJL $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -22,6 +22,7 @@ #include "wx/control.h" #include "wx/dynarray.h" +#include "wx/withimages.h" WX_DEFINE_EXPORTED_ARRAY_PTR(wxWindow *, wxArrayPages); @@ -54,7 +55,8 @@ enum // wxBookCtrlBase // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxBookCtrlBase : public wxControl +class WXDLLIMPEXP_CORE wxBookCtrlBase : public wxControl, + public wxWithImages { public: // construction @@ -85,9 +87,6 @@ public: long style = 0, const wxString& name = wxEmptyString); - // dtor - virtual ~wxBookCtrlBase(); - // accessors // --------- @@ -106,7 +105,7 @@ public: } // get the currently selected page or wxNOT_FOUND if none - int GetSelection() const { return m_selection; } + virtual int GetSelection() const { return m_selection; } // set/get the title of a page virtual bool SetPageText(size_t n, const wxString& strText) = 0; @@ -117,15 +116,6 @@ public: // images belong to the same image list) // --------------------------------------------------------------------- - // sets the image list to use, it is *not* deleted by the control - virtual void SetImageList(wxImageList *imageList); - - // as SetImageList() but we will delete the image list ourselves - void AssignImageList(wxImageList *imageList); - - // get pointer (may be NULL) to the associated image list - wxImageList* GetImageList() const { return m_imageList; } - // sets/returns item's image index in the current image list virtual int GetPageImage(size_t n) const = 0; virtual bool SetPageImage(size_t n, int imageId) = 0; @@ -191,7 +181,7 @@ public: virtual bool AddPage(wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = -1) + int imageId = NO_IMAGE) { DoInvalidateBestSize(); return InsertPage(GetPageCount(), page, text, bSelect, imageId); @@ -202,7 +192,7 @@ public: wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = -1) = 0; + int imageId = NO_IMAGE) = 0; // set the currently selected page, return the index of the previously // selected one (or wxNOT_FOUND on error) @@ -320,12 +310,6 @@ protected: // the array of all pages of this control wxArrayPages m_pages; - // the associated image list or NULL - wxImageList *m_imageList; - - // true if we must delete m_imageList - bool m_ownsImageList; - // get the page area virtual wxRect GetPageRect() const; diff --git a/Externals/wxWidgets3/include/wx/brush.h b/Externals/wxWidgets3/include/wx/brush.h index 0791d38002..7dbb89425d 100644 --- a/Externals/wxWidgets3/include/wx/brush.h +++ b/Externals/wxWidgets3/include/wx/brush.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: -// RCS-ID: $Id: brush.h 66054 2010-11-07 13:16:20Z VZ $ +// RCS-ID: $Id: brush.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: Julian Smart // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -70,9 +70,7 @@ public: } }; -#if defined(__WXPALMOS__) - #include "wx/palmos/brush.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/brush.h" #elif defined(__WXMOTIF__) || defined(__WXX11__) #include "wx/x11/brush.h" @@ -80,8 +78,6 @@ public: #include "wx/gtk/brush.h" #elif defined(__WXGTK__) #include "wx/gtk1/brush.h" -#elif defined(__WXMGL__) - #include "wx/mgl/brush.h" #elif defined(__WXDFB__) #include "wx/dfb/brush.h" #elif defined(__WXMAC__) diff --git a/Externals/wxWidgets3/include/wx/buffer.h b/Externals/wxWidgets3/include/wx/buffer.h index 161e935af6..8b57207f1d 100644 --- a/Externals/wxWidgets3/include/wx/buffer.h +++ b/Externals/wxWidgets3/include/wx/buffer.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 12.04.99 -// RCS-ID: $Id: buffer.h 66780 2011-01-27 11:00:26Z SC $ +// RCS-ID: $Id: buffer.h 70417 2012-01-20 22:11:51Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -15,9 +15,7 @@ #include "wx/chartype.h" #include "wx/wxcrtbase.h" -#ifndef __WXPALMOS5__ #include // malloc() and free() -#endif // ! __WXPALMOS5__ class WXDLLIMPEXP_FWD_BASE wxCStrData; @@ -314,6 +312,10 @@ public: if ( !str ) return false; + // For consistency with the ctor taking just the length, NUL-terminate + // the buffer. + str[len] = (CharType)0; + if ( this->m_data == this->GetNullData() ) { this->m_data = new Data(str, len); @@ -537,6 +539,8 @@ public: size_t GetBufSize() const { return m_bufdata->m_size; } size_t GetDataLen() const { return m_bufdata->m_len; } + bool IsEmpty() const { return GetDataLen() == 0; } + void SetBufSize(size_t size) { m_bufdata->ResizeIfNeeded(size); } void SetDataLen(size_t len) { @@ -544,6 +548,8 @@ public: m_bufdata->m_len = len; } + void Clear() { SetDataLen(0); } + // Ensure the buffer is big enough and return a pointer to it void *GetWriteBuf(size_t sizeNeeded) { diff --git a/Externals/wxWidgets3/include/wx/build.h b/Externals/wxWidgets3/include/wx/build.h index a82e56db81..ac0393fb99 100644 --- a/Externals/wxWidgets3/include/wx/build.h +++ b/Externals/wxWidgets3/include/wx/build.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin, Vaclav Slavik // Modified by: // Created: 07.05.02 -// RCS-ID: $Id: build.h 64531 2010-06-09 13:23:13Z FM $ +// RCS-ID: $Id: build.h 67343 2011-03-30 14:16:04Z VZ $ // Copyright: (c) 2002 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -85,7 +85,7 @@ #endif // deriving wxWin containers from STL ones changes them completely: -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #define __WX_BO_STL ",STL containers" #else #define __WX_BO_STL ",wx containers" diff --git a/Externals/wxWidgets3/include/wx/button.h b/Externals/wxWidgets3/include/wx/button.h index d69cbe4b58..d164eee800 100644 --- a/Externals/wxWidgets3/include/wx/button.h +++ b/Externals/wxWidgets3/include/wx/button.h @@ -4,7 +4,7 @@ // Author: Vadim Zetlin // Modified by: // Created: 15.08.00 -// RCS-ID: $Id: button.h 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: button.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Vadim Zetlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,44 +14,9 @@ #include "wx/defs.h" -// ---------------------------------------------------------------------------- -// wxButton flags shared with other classes -// ---------------------------------------------------------------------------- - -#if wxUSE_TOGGLEBTN || wxUSE_BUTTON - -// These flags affect label alignment -#define wxBU_LEFT 0x0040 -#define wxBU_TOP 0x0080 -#define wxBU_RIGHT 0x0100 -#define wxBU_BOTTOM 0x0200 -#define wxBU_ALIGN_MASK ( wxBU_LEFT | wxBU_TOP | wxBU_RIGHT | wxBU_BOTTOM ) -#endif - #if wxUSE_BUTTON -// ---------------------------------------------------------------------------- -// wxButton specific flags -// ---------------------------------------------------------------------------- - -// These two flags are obsolete -#define wxBU_NOAUTODRAW 0x0000 -#define wxBU_AUTODRAW 0x0004 - -// by default, the buttons will be created with some (system dependent) -// minimal size to make them look nicer, giving this style will make them as -// small as possible -#define wxBU_EXACTFIT 0x0001 - -// this flag can be used to disable using the text label in the button: it is -// mostly useful when creating buttons showing bitmap and having stock id as -// without it both the standard label corresponding to the stock id and the -// bitmap would be shown -#define wxBU_NOTEXT 0x0002 - - -#include "wx/bitmap.h" -#include "wx/control.h" +#include "wx/anybutton.h" extern WXDLLIMPEXP_DATA_CORE(const char) wxButtonNameStr[]; @@ -59,7 +24,7 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxButtonNameStr[]; // wxButton: a push button // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxButtonBase : public wxControl +class WXDLLIMPEXP_CORE wxButtonBase : public wxAnyButton { public: wxButtonBase() { } @@ -70,132 +35,15 @@ public: void SetAuthNeeded(bool show = true) { DoSetAuthNeeded(show); } bool GetAuthNeeded() const { return DoGetAuthNeeded(); } - // show the image in the button in addition to the label: this method is - // supported on all (major) platforms - void SetBitmap(const wxBitmap& bitmap, wxDirection dir = wxLEFT) - { - SetBitmapLabel(bitmap); - SetBitmapPosition(dir); - } - - wxBitmap GetBitmap() const { return DoGetBitmap(State_Normal); } - - // Methods for setting individual images for different states: normal, - // selected (meaning pushed or pressed), focused (meaning normal state for - // a focused button), disabled or hover (a.k.a. hot or current). - // - // Remember that SetBitmap() itself must be called before any other - // SetBitmapXXX() methods (except for SetBitmapLabel() which is a synonym - // for it anyhow) and that all bitmaps passed to these functions should be - // of the same size. - void SetBitmapLabel(const wxBitmap& bitmap) - { DoSetBitmap(bitmap, State_Normal); } - void SetBitmapPressed(const wxBitmap& bitmap) - { DoSetBitmap(bitmap, State_Pressed); } - void SetBitmapDisabled(const wxBitmap& bitmap) - { DoSetBitmap(bitmap, State_Disabled); } - void SetBitmapCurrent(const wxBitmap& bitmap) - { DoSetBitmap(bitmap, State_Current); } - void SetBitmapFocus(const wxBitmap& bitmap) - { DoSetBitmap(bitmap, State_Focused); } - - wxBitmap GetBitmapLabel() const { return DoGetBitmap(State_Normal); } - wxBitmap GetBitmapPressed() const { return DoGetBitmap(State_Pressed); } - wxBitmap GetBitmapDisabled() const { return DoGetBitmap(State_Disabled); } - wxBitmap GetBitmapCurrent() const { return DoGetBitmap(State_Current); } - wxBitmap GetBitmapFocus() const { return DoGetBitmap(State_Focused); } - - - // set the margins around the image - void SetBitmapMargins(wxCoord x, wxCoord y) { DoSetBitmapMargins(x, y); } - void SetBitmapMargins(const wxSize& sz) { DoSetBitmapMargins(sz.x, sz.y); } - wxSize GetBitmapMargins() { return DoGetBitmapMargins(); } - - // set the image position relative to the text, i.e. wxLEFT means that the - // image is to the left of the text (this is the default) - void SetBitmapPosition(wxDirection dir); - - // make this button the default button in its top level window // // returns the old default item (possibly NULL) virtual wxWindow *SetDefault(); - // Buttons on MSW can look bad if they are not native colours, because - // then they become owner-drawn and not theme-drawn. Disable it here - // in wxButtonBase to make it consistent. - virtual bool ShouldInheritColours() const { return false; } - // returns the default button size for this platform static wxSize GetDefaultSize(); - // wxUniv-compatible and deprecated equivalents to SetBitmapXXX() -#if WXWIN_COMPATIBILITY_2_8 - void SetImageLabel(const wxBitmap& bitmap) { SetBitmap(bitmap); } - void SetImageMargins(wxCoord x, wxCoord y) { SetBitmapMargins(x, y); } -#endif // WXWIN_COMPATIBILITY_2_8 - - // backwards compatible names for pressed/current bitmaps: they're not - // deprecated as there is nothing really wrong with using them and no real - // advantage to using the new names but the new names are still preferred - wxBitmap GetBitmapSelected() const { return GetBitmapPressed(); } - wxBitmap GetBitmapHover() const { return GetBitmapCurrent(); } - - void SetBitmapSelected(const wxBitmap& bitmap) { SetBitmapPressed(bitmap); } - void SetBitmapHover(const wxBitmap& bitmap) { SetBitmapCurrent(bitmap); } - - - // this enum is not part of wx public API, it is public because it is used - // in non wxButton-derived classes internally - // - // also notice that MSW code relies on the values of the enum elements, do - // not change them without revising src/msw/button.cpp - enum State - { - State_Normal, - State_Current, // a.k.a. hot or "hovering" - State_Pressed, // a.k.a. "selected" in public API for some reason - State_Disabled, - State_Focused, - State_Max - }; - - // return true if this button shouldn't show the text label, either because - // it doesn't have it or because it was explicitly disabled with wxBU_NOTEXT - bool DontShowLabel() const - { - return HasFlag(wxBU_NOTEXT) || GetLabel().empty(); - } - - // return true if we do show the label - bool ShowsLabel() const - { - return !DontShowLabel(); - } - protected: - // choose the default border for this window - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - - virtual bool DoGetAuthNeeded() const { return false; } - virtual void DoSetAuthNeeded(bool WXUNUSED(show)) { } - - virtual wxBitmap DoGetBitmap(State WXUNUSED(which)) const - { return wxBitmap(); } - virtual void DoSetBitmap(const wxBitmap& WXUNUSED(bitmap), - State WXUNUSED(which)) - { } - - virtual wxSize DoGetBitmapMargins() const - { return wxSize(0, 0); } - - virtual void DoSetBitmapMargins(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) - { } - - virtual void DoSetBitmapPosition(wxDirection WXUNUSED(dir)) - { } - - wxDECLARE_NO_COPY_CLASS(wxButtonBase); }; @@ -215,11 +63,8 @@ protected: #include "wx/cocoa/button.h" #elif defined(__WXPM__) #include "wx/os2/button.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/button.h" #endif #endif // wxUSE_BUTTON -#endif - // _WX_BUTTON_H_BASE_ +#endif // _WX_BUTTON_H_BASE_ diff --git a/Externals/wxWidgets3/include/wx/cairo.h b/Externals/wxWidgets3/include/wx/cairo.h index 2518a89a21..eb83424aa3 100644 --- a/Externals/wxWidgets3/include/wx/cairo.h +++ b/Externals/wxWidgets3/include/wx/cairo.h @@ -3,7 +3,7 @@ // Purpose: Cairo library // Author: Anthony Bretaudeau // Created: 2007-08-25 -// RCS-ID: $Id: cairo.h 67232 2011-03-18 15:10:15Z DS $ +// RCS-ID: $Id: cairo.h 68935 2011-08-27 23:26:53Z RD $ // Copyright: (c) Anthony Bretaudeau // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,129 +16,13 @@ #include "wx/dynlib.h" #include - -class wxCairoLibrary +extern "C" { -public: - // return the pointer to the global instance of this class or NULL if we - // failed to load/initialize it - static wxCairoLibrary *Get(); + +bool wxCairoInit(); +void wxCairoCleanUp(); - - // for internal use only - static void CleanUp(); - -private: - // the single wxCairoLibrary instance or NULL - static wxCairoLibrary *ms_lib; - - wxCairoLibrary(); - ~wxCairoLibrary(); - - bool IsOk(); - bool InitializeMethods(); - - wxDynamicLibrary m_libCairo; - wxDynamicLibrary m_libPangoCairo; - - // true if we successfully loaded the libraries and can use them - // - // note that this field must have this name as it's used by wxDL_XXX macros - bool m_ok; - -public: - wxDL_VOIDMETHOD_DEFINE( cairo_arc, - (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2), (cr, xc, yc, radius, angle1, angle2) ) - wxDL_VOIDMETHOD_DEFINE( cairo_arc_negative, - (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2), (cr, xc, yc, radius, angle1, angle2) ) - wxDL_VOIDMETHOD_DEFINE( cairo_clip, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_close_path, - (cairo_t *cr), (cr) ) - wxDL_METHOD_DEFINE( cairo_t*, cairo_create, - (cairo_surface_t *target), (target), NULL) - wxDL_VOIDMETHOD_DEFINE( cairo_curve_to, - (cairo_t *cr, double x1, double y1, double x2, double y2, double x3, double y3), (cr, x1, y1, x2, y2, x3, y3) ) - wxDL_VOIDMETHOD_DEFINE( cairo_destroy, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_fill, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_fill_preserve, - (cairo_t *cr), (cr) ) - wxDL_METHOD_DEFINE( cairo_surface_t*, cairo_get_target, - (cairo_t *cr), (cr), NULL) - wxDL_METHOD_DEFINE( cairo_surface_t*, cairo_image_surface_create_for_data, - (unsigned char *data, cairo_format_t format, int width, int height, int stride), (data, format, width, height, stride), NULL) - wxDL_VOIDMETHOD_DEFINE( cairo_line_to, - (cairo_t *cr, double x, double y), (cr, x, y) ) - wxDL_VOIDMETHOD_DEFINE( cairo_move_to, - (cairo_t *cr, double x, double y), (cr, x, y) ) - wxDL_VOIDMETHOD_DEFINE( cairo_new_path, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_paint, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_pattern_add_color_stop_rgba, - (cairo_pattern_t *pattern, double offset, double red, double green, double blue, double alpha), (pattern, offset, red, green, blue, alpha) ) - wxDL_METHOD_DEFINE( cairo_pattern_t*, cairo_pattern_create_for_surface, - (cairo_surface_t *surface), (surface), NULL) - wxDL_METHOD_DEFINE( cairo_pattern_t*, cairo_pattern_create_linear, - (double x0, double y0, double x1, double y1), (x0, y0, x1, y1), NULL) - wxDL_METHOD_DEFINE( cairo_pattern_t*, cairo_pattern_create_radial, - (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1), (cx0, cy0, radius0, cx1, cy1, radius1), NULL) - wxDL_VOIDMETHOD_DEFINE( cairo_pattern_destroy, - (cairo_pattern_t *pattern), (pattern) ) - wxDL_VOIDMETHOD_DEFINE( cairo_pattern_set_extend, - (cairo_pattern_t *pattern, cairo_extend_t extend), (pattern, extend) ) - wxDL_VOIDMETHOD_DEFINE( cairo_pattern_set_filter, - (cairo_pattern_t *pattern, cairo_filter_t filter), (pattern, filter) ) - wxDL_VOIDMETHOD_DEFINE( cairo_rectangle, - (cairo_t *cr, double x, double y, double width, double height), (cr, x, y, width, height) ) - wxDL_METHOD_DEFINE( cairo_t*, cairo_reference, - (cairo_t *cr), (cr), NULL ) - wxDL_VOIDMETHOD_DEFINE( cairo_reset_clip, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_restore, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_rotate, - (cairo_t *cr, double angle), (cr, angle) ) - wxDL_VOIDMETHOD_DEFINE( cairo_save, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_scale, - (cairo_t *cr, double sx, double sy), (cr, sx, sy) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_dash, - (cairo_t *cr, const double *dashes, int num_dashes, double offset), (cr, dashes, num_dashes, offset) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_fill_rule, - (cairo_t *cr, cairo_fill_rule_t fill_rule), (cr, fill_rule) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_line_cap, - (cairo_t *cr, cairo_line_cap_t line_cap), (cr, line_cap) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_line_join, - (cairo_t *cr, cairo_line_join_t line_join), (cr, line_join) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_line_width, - (cairo_t *cr, double width), (cr, width) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_operator, - (cairo_t *cr, cairo_operator_t op), (cr, op) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_source, - (cairo_t *cr, cairo_pattern_t *source), (cr, source) ) - wxDL_VOIDMETHOD_DEFINE( cairo_set_source_rgba, - (cairo_t *cr, double red, double green, double blue, double alpha), (cr, red, green, blue, alpha) ) - wxDL_VOIDMETHOD_DEFINE( cairo_stroke, - (cairo_t *cr), (cr) ) - wxDL_VOIDMETHOD_DEFINE( cairo_stroke_preserve, - (cairo_t *cr), (cr) ) - wxDL_METHOD_DEFINE( cairo_surface_t*, cairo_surface_create_similar, - (cairo_surface_t *other, cairo_content_t content, int width, int height), (other, content, width, height), NULL) - wxDL_VOIDMETHOD_DEFINE( cairo_surface_destroy, - (cairo_surface_t *surface), (surface) ) - wxDL_VOIDMETHOD_DEFINE( cairo_translate, - (cairo_t *cr, double tx, double ty), (cr, tx, ty) ) - - wxDL_VOIDMETHOD_DEFINE( pango_cairo_update_layout, - (cairo_t *cr, PangoLayout *layout), (cr, layout) ) - wxDL_VOIDMETHOD_DEFINE( pango_cairo_show_layout, - (cairo_t *cr, PangoLayout *layout), (cr, layout) ) - - wxDECLARE_NO_COPY_CLASS(wxCairoLibrary); -}; +} #endif // wxUSE_CAIRO diff --git a/Externals/wxWidgets3/include/wx/calctrl.h b/Externals/wxWidgets3/include/wx/calctrl.h index 801edf0959..7c2921d8e0 100644 --- a/Externals/wxWidgets3/include/wx/calctrl.h +++ b/Externals/wxWidgets3/include/wx/calctrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29.12.99 -// RCS-ID: $Id: calctrl.h 58718 2009-02-07 18:59:25Z VZ $ +// RCS-ID: $Id: calctrl.h 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1999 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -112,10 +112,10 @@ public: void SetHoliday(bool holiday) { m_holiday = holiday; } // accessors - bool HasTextColour() const { return m_colText.Ok(); } - bool HasBackgroundColour() const { return m_colBack.Ok(); } - bool HasBorderColour() const { return m_colBorder.Ok(); } - bool HasFont() const { return m_font.Ok(); } + bool HasTextColour() const { return m_colText.IsOk(); } + bool HasBackgroundColour() const { return m_colBack.IsOk(); } + bool HasBorderColour() const { return m_colBorder.IsOk(); } + bool HasFont() const { return m_font.IsOk(); } bool HasBorder() const { return m_border != wxCAL_BORDER_NONE; } bool IsHoliday() const { return m_holiday; } diff --git a/Externals/wxWidgets3/include/wx/chartype.h b/Externals/wxWidgets3/include/wx/chartype.h index 41eb59d9d6..d122b4c71c 100644 --- a/Externals/wxWidgets3/include/wx/chartype.h +++ b/Externals/wxWidgets3/include/wx/chartype.h @@ -4,7 +4,7 @@ * Author: Joel Farley, Ove Kåven * Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee * Created: 1998/06/12 - * RCS-ID: $Id: chartype.h 66968 2011-02-19 13:44:19Z VZ $ + * RCS-ID: $Id: chartype.h 70345 2012-01-15 01:05:28Z VZ $ * Copyright: (c) 1998-2006 wxWidgets dev team * Licence: wxWindows licence */ @@ -105,8 +105,6 @@ #define wxHAVE_TCHAR_SUPPORT #elif defined(__DMC__) #define wxHAVE_TCHAR_SUPPORT -#elif defined(__WXPALMOS__) - #include #elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 ) #define wxHAVE_TCHAR_SUPPORT #include diff --git a/Externals/wxWidgets3/include/wx/checkbox.h b/Externals/wxWidgets3/include/wx/checkbox.h index f3dc6ddc52..507bf31fea 100644 --- a/Externals/wxWidgets3/include/wx/checkbox.h +++ b/Externals/wxWidgets3/include/wx/checkbox.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 07.09.00 -// RCS-ID: $Id: checkbox.h 65942 2010-10-28 14:23:09Z VZ $ +// RCS-ID: $Id: checkbox.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -41,18 +41,6 @@ */ #define wxCHK_ALLOW_3RD_STATE_FOR_USER 0x2000 -/* - * The possible states of a 3-state checkbox (Compatible - * with the 2-state checkbox). - */ -enum wxCheckBoxState -{ - wxCHK_UNCHECKED, - wxCHK_CHECKED, - wxCHK_UNDETERMINED /* 3-state checkbox only */ -}; - - extern WXDLLIMPEXP_DATA_CORE(const char) wxCheckBoxNameStr[]; // ---------------------------------------------------------------------------- @@ -196,8 +184,6 @@ private: #elif defined(__WXPM__) #undef wxHAS_3STATE_CHECKBOX #include "wx/os2/checkbox.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/checkbox.h" #endif #endif // wxUSE_CHECKBOX diff --git a/Externals/wxWidgets3/include/wx/chkconf.h b/Externals/wxWidgets3/include/wx/chkconf.h index 723c71fb67..80f104911b 100644 --- a/Externals/wxWidgets3/include/wx/chkconf.h +++ b/Externals/wxWidgets3/include/wx/chkconf.h @@ -4,7 +4,7 @@ * Author: Vadim Zeitlin * Modified by: * Created: 09.08.00 - * RCS-ID: $Id: chkconf.h 67280 2011-03-22 14:17:38Z DS $ + * RCS-ID: $Id: chkconf.h 70703 2012-02-26 20:24:25Z VZ $ * Copyright: (c) 2000 Vadim Zeitlin * Licence: wxWindows licence */ @@ -57,11 +57,6 @@ global features */ -/* GUI build by default */ -#if !defined(wxUSE_GUI) -# define wxUSE_GUI 1 -#endif /* !defined(wxUSE_GUI) */ - /* If we're compiling without support for threads/exceptions we have to disable the corresponding features. @@ -299,6 +294,22 @@ # endif #endif /* !defined(wxUSE_SOCKETS) */ +#ifndef wxUSE_STD_CONTAINERS +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_STD_CONTAINERS must be defined, please read comment near the top of this file." +# else +# define wxUSE_STD_CONTAINERS 0 +# endif +#endif /* !defined(wxUSE_STD_CONTAINERS) */ + +#ifndef wxUSE_STD_STRING_CONV_IN_WXSTRING +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_STD_STRING_CONV_IN_WXSTRING must be defined, please read comment near the top of this file." +# else +# define wxUSE_STD_STRING_CONV_IN_WXSTRING 0 +# endif +#endif /* !defined(wxUSE_STD_STRING_CONV_IN_WXSTRING) */ + #ifndef wxUSE_STREAMS # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_STREAMS must be defined, please read comment near the top of this file." @@ -599,6 +610,14 @@ # endif #endif /* !defined(wxUSE_DATEPICKCTRL) */ +#ifndef wxUSE_DC_TRANSFORM_MATRIX +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_DC_TRANSFORM_MATRIX must be defined, please read comment near the top of this file." +# else +# define wxUSE_DC_TRANSFORM_MATRIX 1 +# endif +#endif /* wxUSE_DC_TRANSFORM_MATRIX */ + #ifndef wxUSE_DIRPICKERCTRL # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_DIRPICKERCTRL must be defined, please read comment near the top of this file." @@ -729,7 +748,7 @@ #endif /* !defined(wxUSE_HTML) */ #ifndef wxUSE_LIBMSPACK -# if !defined(__UNIX__) || defined(__WXPALMOS__) +# if !defined(__UNIX__) /* set to 0 on platforms that don't have libmspack */ # define wxUSE_LIBMSPACK 0 # else @@ -955,7 +974,15 @@ # else # define wxUSE_RICHMSGDLG 0 # endif -#endif /* !defined(wxUSE_RIBBON) */ +#endif /* !defined(wxUSE_RICHMSGDLG) */ + +#ifndef wxUSE_RICHTOOLTIP +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_RICHTOOLTIP must be defined, please read comment near the top of this file." +# else +# define wxUSE_RICHTOOLTIP 0 +# endif +#endif /* !defined(wxUSE_RICHTOOLTIP) */ #ifndef wxUSE_SASH # ifdef wxABORT_ON_CONFIG_ERROR @@ -1077,6 +1104,14 @@ # endif #endif /* !defined(wxUSE_TEXTCTRL) */ +#ifndef wxUSE_TIMEPICKCTRL +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_TIMEPICKCTRL must be defined, please read comment near the top of this file." +# else +# define wxUSE_TIMEPICKCTRL 0 +# endif +#endif /* !defined(wxUSE_TIMEPICKCTRL) */ + #ifndef wxUSE_TIPWINDOW # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_TIPWINDOW must be defined, please read comment near the top of this file." @@ -1109,6 +1144,14 @@ # endif #endif /* !defined(wxUSE_TREECTRL) */ +#ifndef wxUSE_TREELISTCTRL +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_TREELISTCTRL must be defined, please read comment near the top of this file." +# else +# define wxUSE_TREELISTCTRL 0 +# endif +#endif /* !defined(wxUSE_TREELISTCTRL) */ + #ifndef wxUSE_UIACTIONSIMULATOR # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_UIACTIONSIMULATOR must be defined, please read comment near the top of this file." @@ -1125,6 +1168,14 @@ # endif #endif /* !defined(wxUSE_VALIDATORS) */ +#ifndef wxUSE_WEBVIEW +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_WEBVIEW must be defined, please read comment near the top of this file." +# else +# define wxUSE_WEBVIEW 0 +# endif +#endif /* !defined(wxUSE_WEBVIEW) */ + #ifndef wxUSE_WXHTML_HELP # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_WXHTML_HELP must be defined, please read comment near the top of this file." @@ -1150,9 +1201,7 @@ checks use wxUSE_XXX symbols in #if tests. */ -#if defined(__WXPALMOS__) -# include "wx/palmos/chkconf.h" -#elif defined(__WXWINCE__) +#if defined(__WXWINCE__) # include "wx/msw/wince/chkconf.h" #elif defined(__WXMSW__) # include "wx/msw/chkconf.h" @@ -1164,14 +1213,14 @@ # include "wx/osx/chkconf.h" #elif defined(__OS2__) # include "wx/os2/chkconf.h" -#elif defined(__WXMGL__) -# include "wx/mgl/chkconf.h" #elif defined(__WXDFB__) # include "wx/dfb/chkconf.h" #elif defined(__WXMOTIF__) # include "wx/motif/chkconf.h" #elif defined(__WXX11__) # include "wx/x11/chkconf.h" +#elif defined(__WXANDROID__) +# include "wx/android/chkconf.h" #endif /* @@ -1439,7 +1488,8 @@ wxUSE_STATUSBAR || \ wxUSE_TEXTCTRL || \ wxUSE_TOOLBAR || \ - wxUSE_TREECTRL + wxUSE_TREECTRL || \ + wxUSE_TREELISTCTRL # if !wxUSE_CONTROLS # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_CONTROLS unset but some controls used" @@ -1582,9 +1632,7 @@ #ifndef wxUSE_NATIVE_STATUSBAR # define wxUSE_NATIVE_STATUSBAR 0 #elif wxUSE_NATIVE_STATUSBAR -# if defined(__WXUNIVERSAL__) || !( defined(__WXMSW__) || \ - defined(__WXMAC__) || \ - defined(__WXPALMOS__) ) +# if defined(__WXUNIVERSAL__) || !(defined(__WXMSW__) || defined(__WXMAC__)) # undef wxUSE_NATIVE_STATUSBAR # define wxUSE_NATIVE_STATUSBAR 0 # endif @@ -1672,16 +1720,16 @@ # endif #endif /* wxUSE_CALENDARCTRL */ -#if wxUSE_DATEPICKCTRL +#if wxUSE_DATEPICKCTRL || wxUSE_TIMEPICKCTRL # if !wxUSE_DATETIME # ifdef wxABORT_ON_CONFIG_ERROR -# error "wxDatePickerCtrl requires wxUSE_DATETIME" +# error "wxDatePickerCtrl and wxTimePickerCtrl requires wxUSE_DATETIME" # else # undef wxUSE_DATETIME # define wxUSE_DATETIME 1 # endif # endif -#endif /* wxUSE_DATEPICKCTRL */ +#endif /* wxUSE_DATEPICKCTRL || wxUSE_TIMEPICKCTRL */ #if wxUSE_CHECKLISTBOX # if !wxUSE_LISTBOX @@ -1705,6 +1753,17 @@ # endif #endif /* wxUSE_CHOICEDLG */ +#if wxUSE_FILECTRL +# if !wxUSE_DATETIME +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxFileCtrl requires wxDateTime" +# else +# undef wxUSE_DATETIME +# define wxUSE_DATETIME 1 +# endif +# endif +#endif /* wxUSE_FILECTRL */ + #if wxUSE_HELP # if !wxUSE_BMPBUTTON # ifdef wxABORT_ON_CONFIG_ERROR @@ -1935,7 +1994,7 @@ #endif /* wxUSE_FILEDLG */ #if !wxUSE_GAUGE || !wxUSE_BUTTON -# if wxUSE_PROGRESSDLG && !defined(__WXPALMOS__) +# if wxUSE_PROGRESSDLG # ifdef wxABORT_ON_CONFIG_ERROR # error "Generic progress dialog requires wxUSE_GAUGE and wxUSE_BUTTON" # else @@ -1977,7 +2036,7 @@ #endif #if !wxUSE_IMAGLIST -# if wxUSE_TREECTRL || wxUSE_NOTEBOOK || wxUSE_LISTCTRL +# if wxUSE_TREECTRL || wxUSE_NOTEBOOK || wxUSE_LISTCTRL || wxUSE_TREELISTCTRL # ifdef wxABORT_ON_CONFIG_ERROR # error "wxImageList must be compiled as well" # else @@ -1996,7 +2055,7 @@ # define wxUSE_RADIOBTN 1 # endif # endif -# if !wxUSE_STATBOX && !defined(__WXPALMOS__) +# if !wxUSE_STATBOX # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_RADIOBOX requires wxUSE_STATBOX" # else @@ -2104,6 +2163,24 @@ # endif #endif /* wxUSE_VARIANT */ +#if wxUSE_TREELISTCTRL && !wxUSE_DATAVIEWCTRL +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_TREELISTCTRL requires wxDataViewCtrl" +# else +# undef wxUSE_TREELISTCTRL +# define wxUSE_TREELISTCTRL 0 +# endif +#endif /* wxUSE_TREELISTCTRL */ + +#if wxUSE_WEBVIEW && !(wxUSE_WEBVIEW_WEBKIT || wxUSE_WEBVIEW_IE) +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_WEBVIEW requires at least one backend" +# else +# undef wxUSE_WEBVIEW +# define wxUSE_WEBVIEW 0 +# endif +#endif /* wxUSE_WEBVIEW && !any web view backend */ + #endif /* wxUSE_GUI */ #endif /* _WX_CHKCONF_H_ */ diff --git a/Externals/wxWidgets3/include/wx/choice.h b/Externals/wxWidgets3/include/wx/choice.h index e1f9c20456..e7854fb3cc 100644 --- a/Externals/wxWidgets3/include/wx/choice.h +++ b/Externals/wxWidgets3/include/wx/choice.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 26.07.99 -// RCS-ID: $Id: choice.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: choice.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -84,8 +84,6 @@ private: #include "wx/cocoa/choice.h" #elif defined(__WXPM__) #include "wx/os2/choice.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/choice.h" #endif #endif // wxUSE_CHOICE diff --git a/Externals/wxWidgets3/include/wx/choicebk.h b/Externals/wxWidgets3/include/wx/choicebk.h index 322d931d66..abd37cbb7d 100644 --- a/Externals/wxWidgets3/include/wx/choicebk.h +++ b/Externals/wxWidgets3/include/wx/choicebk.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: Wlodzimierz ABX Skiba from wx/listbook.h // Created: 15.09.04 -// RCS-ID: $Id: choicebk.h 66233 2010-11-22 01:23:21Z VZ $ +// RCS-ID: $Id: choicebk.h 68810 2011-08-21 14:08:49Z VZ $ // Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -68,7 +68,7 @@ public: wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = -1); + int imageId = NO_IMAGE); virtual int SetSelection(size_t n) { return DoSetSelection(n, SetSelection_SendEvent); } virtual int ChangeSelection(size_t n) { return DoSetSelection(n); } diff --git a/Externals/wxWidgets3/include/wx/clipbrd.h b/Externals/wxWidgets3/include/wx/clipbrd.h index 9ba7f3734b..f9ff4df6af 100644 --- a/Externals/wxWidgets3/include/wx/clipbrd.h +++ b/Externals/wxWidgets3/include/wx/clipbrd.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.10.99 -// RCS-ID: $Id: clipbrd.h 61485 2009-07-20 23:54:08Z VZ $ +// RCS-ID: $Id: clipbrd.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) wxWidgets Team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -160,8 +160,6 @@ typedef void (wxEvtHandler::*wxClipboardEventFunction)(wxClipboardEvent&); #include "wx/gtk1/clipbrd.h" #elif defined(__WXX11__) #include "wx/x11/clipbrd.h" -#elif defined(__WXMGL__) - #include "wx/mgl/clipbrd.h" #elif defined(__WXMAC__) #include "wx/osx/clipbrd.h" #elif defined(__WXCOCOA__) diff --git a/Externals/wxWidgets3/include/wx/cmdline.h b/Externals/wxWidgets3/include/wx/cmdline.h index af67c9c558..8d02fa3a68 100644 --- a/Externals/wxWidgets3/include/wx/cmdline.h +++ b/Externals/wxWidgets3/include/wx/cmdline.h @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 04.01.00 -// RCS-ID: $Id: cmdline.h 66253 2010-11-24 00:42:53Z VZ $ +// RCS-ID: $Id: cmdline.h 69797 2011-11-22 13:18:58Z VZ $ // Copyright: (c) 2000 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -183,12 +183,25 @@ public: void AddSwitch(const wxString& name, const wxString& lng = wxEmptyString, const wxString& desc = wxEmptyString, int flags = 0); + void AddLongSwitch(const wxString& lng, + const wxString& desc = wxEmptyString, + int flags = 0) + { + AddSwitch(wxString(), lng, desc, flags); + } // an option taking a value of the given type void AddOption(const wxString& name, const wxString& lng = wxEmptyString, const wxString& desc = wxEmptyString, wxCmdLineParamType type = wxCMD_LINE_VAL_STRING, int flags = 0); + void AddLongOption(const wxString& lng, + const wxString& desc = wxEmptyString, + wxCmdLineParamType type = wxCMD_LINE_VAL_STRING, + int flags = 0) + { + AddOption(wxString(), lng, desc, type, flags); + } // a parameter void AddParam(const wxString& desc = wxEmptyString, diff --git a/Externals/wxWidgets3/include/wx/cmdproc.h b/Externals/wxWidgets3/include/wx/cmdproc.h index dc738da629..e1692cbef5 100644 --- a/Externals/wxWidgets3/include/wx/cmdproc.h +++ b/Externals/wxWidgets3/include/wx/cmdproc.h @@ -4,7 +4,7 @@ // Author: Julian Smart (extracted from docview.h by VZ) // Modified by: // Created: 05.11.00 -// RCS-ID: $Id: cmdproc.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: cmdproc.h 70459 2012-01-25 00:05:09Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -97,10 +97,7 @@ public: virtual void ClearCommands(); // Has the current project been changed? - virtual bool IsDirty() const - { - return m_currentCommand && (m_lastSavedCommand != m_currentCommand); - } + virtual bool IsDirty() const; // Mark the current command as the one where the last save took place void MarkAsSaved() diff --git a/Externals/wxWidgets3/include/wx/cmndata.h b/Externals/wxWidgets3/include/wx/cmndata.h index e803f49711..ce330fde5e 100644 --- a/Externals/wxWidgets3/include/wx/cmndata.h +++ b/Externals/wxWidgets3/include/wx/cmndata.h @@ -4,7 +4,7 @@ // Author: Julian Smart and others // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: cmndata.h 66615 2011-01-07 05:26:57Z PC $ +// RCS-ID: $Id: cmndata.h 70636 2012-02-20 21:55:55Z VZ $ // Copyright: (c) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -189,7 +189,7 @@ public: // Is this data OK for showing the print dialog? bool Ok() const { return IsOk(); } - bool IsOk() const { return m_printData.Ok() ; } + bool IsOk() const { return m_printData.IsOk() ; } wxPrintData& GetPrintData() { return m_printData; } void SetPrintData(const wxPrintData& printData) { m_printData = printData; } @@ -249,7 +249,7 @@ public: // Is this data OK for showing the page setup dialog? bool Ok() const { return IsOk(); } - bool IsOk() const { return m_printData.Ok() ; } + bool IsOk() const { return m_printData.IsOk() ; } // If a corresponding paper type is found in the paper database, will set the m_printData // paper size id member as well. @@ -280,7 +280,7 @@ public: // Use paper id in wxPrintData to set this object's paper size void CalculatePaperSizeFromId(); - wxPageSetupDialogData& operator=(const wxPageSetupData& data); + wxPageSetupDialogData& operator=(const wxPageSetupDialogData& data); wxPageSetupDialogData& operator=(const wxPrintData& data); wxPrintData& GetPrintData() { return m_printData; } diff --git a/Externals/wxWidgets3/include/wx/cocoa/chkconf.h b/Externals/wxWidgets3/include/wx/cocoa/chkconf.h index 450df1692d..0b2516cc44 100644 --- a/Externals/wxWidgets3/include/wx/cocoa/chkconf.h +++ b/Externals/wxWidgets3/include/wx/cocoa/chkconf.h @@ -3,7 +3,7 @@ * Purpose: wxCocoa-specific config settings checks * Author: Vadim Zeitlin * Created: 2008-09-11 - * RCS-ID: $Id: chkconf.h 55546 2008-09-11 11:20:33Z VZ $ + * RCS-ID: $Id: chkconf.h 67497 2011-04-15 19:18:34Z DS $ * Copyright: (c) 2008 Vadim Zeitlin * Licence: wxWindows licence */ @@ -19,4 +19,4 @@ #undef wxUSE_LOG_DIALOG #define wxUSE_LOG_DIALOG 0 -#endif // _WX_COCOA_CHKCONF_H_ +#endif /* _WX_COCOA_CHKCONF_H_ */ diff --git a/Externals/wxWidgets3/include/wx/cocoa/dc.h b/Externals/wxWidgets3/include/wx/cocoa/dc.h index 4c043ce8e7..e388eccaec 100644 --- a/Externals/wxWidgets3/include/wx/cocoa/dc.h +++ b/Externals/wxWidgets3/include/wx/cocoa/dc.h @@ -4,7 +4,7 @@ // Author: David Elliott // Modified by: // Created: 2003/04/01 -// RCS-ID: $Id: dc.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: dc.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 2003 David Elliott // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -80,10 +80,10 @@ public: virtual void Clear(); virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return true; } - virtual void EndDoc(void) {}; + virtual void EndDoc(void) {} - virtual void StartPage(void) {}; - virtual void EndPage(void) {}; + virtual void StartPage(void) {} + virtual void EndPage(void) {} virtual void SetFont(const wxFont& font); virtual void SetPen(const wxPen& pen); diff --git a/Externals/wxWidgets3/include/wx/cocoa/font.h b/Externals/wxWidgets3/include/wx/cocoa/font.h index 3f61c4fd1b..4783532b44 100644 --- a/Externals/wxWidgets3/include/wx/cocoa/font.h +++ b/Externals/wxWidgets3/include/wx/cocoa/font.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: font.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: font.h 70445 2012-01-23 11:28:21Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -75,6 +75,19 @@ public: SetPixelSize(pixelSize); } + wxFont(int pointSize, + wxFontFamily family, + int flags = wxFONTFLAG_DEFAULT, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT) + { + Create(pointSize, family, + GetStyleFromFlags(flags), + GetWeightFromFlags(flags), + GetUnderlinedFromFlags(flags), + face, encoding); + } + /*! @abstract Construction with opaque wxNativeFontInfo */ wxFont(const wxNativeFontInfo& info) diff --git a/Externals/wxWidgets3/include/wx/cocoa/notebook.h b/Externals/wxWidgets3/include/wx/cocoa/notebook.h index 46be4d570c..fade3ac3a6 100644 --- a/Externals/wxWidgets3/include/wx/cocoa/notebook.h +++ b/Externals/wxWidgets3/include/wx/cocoa/notebook.h @@ -4,7 +4,7 @@ // Author: David Elliott // Modified by: // Created: 2004/04/08 -// RCS-ID: $Id: notebook.h 65930 2010-10-27 16:54:24Z VZ $ +// RCS-ID: $Id: notebook.h 68810 2011-08-21 14:08:49Z VZ $ // Copyright: (c) 2004 David Elliott // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -97,7 +97,7 @@ public: wxNotebookPage *win, const wxString& strText, bool bSelect = false, - int imageId = -1 ); + int imageId = NO_IMAGE ); protected: }; diff --git a/Externals/wxWidgets3/include/wx/cocoa/sound.h b/Externals/wxWidgets3/include/wx/cocoa/sound.h index 2d22dfdff3..09bc45523d 100644 --- a/Externals/wxWidgets3/include/wx/cocoa/sound.h +++ b/Externals/wxWidgets3/include/wx/cocoa/sound.h @@ -5,7 +5,7 @@ // Authors: David Elliott, Ryan Norton // Modified by: // Created: 2004-10-02 -// RCS-ID: $Id: sound.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: sound.h 69178 2011-09-21 15:08:02Z VZ $ // Copyright: (c) 2004 David Elliott, Ryan Norton // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -25,7 +25,7 @@ public: wxSound(const wxString& fileName, bool isResource = false) : m_cocoaNSSound(NULL) { Create(fileName, isResource); } - wxSound(int size, const wxByte* data) + wxSound(size_t size, const void* data) : m_cocoaNSSound(NULL) { LoadWAV(data,size,true); } wxSound(const wxSound& sound); // why not? @@ -43,7 +43,7 @@ public: { return m_cocoaNSSound; } protected: bool DoPlay(unsigned flags) const; - bool LoadWAV(const wxUint8 *data, size_t length, bool copyData); + bool LoadWAV(const void* data, size_t length, bool copyData); private: WX_NSSound m_cocoaNSSound; static const wxObjcAutoRefFromAlloc sm_cocoaDelegate; diff --git a/Externals/wxWidgets3/include/wx/colordlg.h b/Externals/wxWidgets3/include/wx/colordlg.h index 1b339788d2..4632e99698 100644 --- a/Externals/wxWidgets3/include/wx/colordlg.h +++ b/Externals/wxWidgets3/include/wx/colordlg.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitiln // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: colordlg.h 66615 2011-01-07 05:26:57Z PC $ +// RCS-ID: $Id: colordlg.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -24,8 +24,6 @@ #include "wx/osx/colordlg.h" #elif defined(__WXGTK20__) && !defined(__WXUNIVERSAL__) #include "wx/gtk/colordlg.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/colordlg.h" #else #include "wx/generic/colrdlgg.h" diff --git a/Externals/wxWidgets3/include/wx/colour.h b/Externals/wxWidgets3/include/wx/colour.h index 08dd20910c..0c9cf08565 100644 --- a/Externals/wxWidgets3/include/wx/colour.h +++ b/Externals/wxWidgets3/include/wx/colour.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: Francesco Montorsi // Created: -// RCS-ID: $Id: colour.h 66966 2011-02-19 12:32:59Z VZ $ +// RCS-ID: $Id: colour.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -213,9 +213,7 @@ WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxColourBase* col); -#if defined(__WXPALMOS__) - #include "wx/generic/colour.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/colour.h" #elif defined(__WXMOTIF__) #include "wx/motif/colour.h" @@ -223,8 +221,6 @@ WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxColourBase* col); #include "wx/gtk/colour.h" #elif defined(__WXGTK__) #include "wx/gtk1/colour.h" -#elif defined(__WXMGL__) - #include "wx/generic/colour.h" #elif defined(__WXDFB__) #include "wx/generic/colour.h" #elif defined(__WXX11__) diff --git a/Externals/wxWidgets3/include/wx/combo.h b/Externals/wxWidgets3/include/wx/combo.h index 98a6094ff7..f624f7cd59 100644 --- a/Externals/wxWidgets3/include/wx/combo.h +++ b/Externals/wxWidgets3/include/wx/combo.h @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: Apr-30-2006 -// RCS-ID: $Id: combo.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: combo.h 69942 2011-12-07 14:05:11Z VZ $ // Copyright: (c) Jaakko Salli // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -560,7 +560,8 @@ protected: // Standard textctrl positioning routine. Just give it platform-dependant // textctrl coordinate adjustment. - virtual void PositionTextCtrl( int textCtrlXAdjust, int textCtrlYAdjust ); + virtual void PositionTextCtrl( int textCtrlXAdjust = 0, + int textCtrlYAdjust = 0); // event handlers void OnSizeEvent( wxSizeEvent& event ); @@ -641,7 +642,7 @@ protected: // main (ie. topmost) window of a composite control (default = this) wxWindow* m_mainCtrlWnd; - // used to prevent immediate re-popupping incase closed popup + // used to prevent immediate re-popupping in case closed popup // by clicking on the combo control (needed because of inconsistent // transient implementation across platforms). wxLongLong m_timeCanAcceptClick; @@ -767,6 +768,13 @@ public: // Return true for success. virtual bool Create(wxWindow* parent) = 0; + // Calls Destroy() for the popup control (i.e. one returned by + // GetControl()) and makes sure that 'this' is deleted at the end. + // Default implementation works for both cases where popup control + // class is multiple inherited or created on heap as a separate + // object. + virtual void DestroyPopup(); + // We must have an associated control which is subclassed by the combobox. virtual wxWindow *GetControl() = 0; diff --git a/Externals/wxWidgets3/include/wx/combobox.h b/Externals/wxWidgets3/include/wx/combobox.h index 63ae722bea..a28dae2454 100644 --- a/Externals/wxWidgets3/include/wx/combobox.h +++ b/Externals/wxWidgets3/include/wx/combobox.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 24.12.00 -// RCS-ID: $Id: combobox.h 63242 2010-01-24 01:00:45Z VZ $ +// RCS-ID: $Id: combobox.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 1996-2000 wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -36,7 +36,13 @@ public: wxItemContainer::Clear(); } - bool IsEmpty() const { return wxItemContainer::IsEmpty(); } + // IsEmpty() is ambiguous because we inherit it from both wxItemContainer + // and wxTextEntry, and even if defined it here to help the compiler with + // choosing one of them, it would still be confusing for the human users of + // this class. So instead define the clearly named methods below and leave + // IsEmpty() ambiguous to trigger a compilation error if it's used. + bool IsListEmpty() const { return wxItemContainer::IsEmpty(); } + bool IsTextEmpty() const { return wxTextEntry::IsEmpty(); } // also bring in GetSelection() versions of both base classes in scope // @@ -47,8 +53,8 @@ public: virtual int GetSelection() const = 0; virtual void GetSelection(long *from, long *to) const = 0; - virtual void Popup() { wxFAIL_MSG( wxT("Not implemented") ); }; - virtual void Dismiss() { wxFAIL_MSG( wxT("Not implemented") ); }; + virtual void Popup() { wxFAIL_MSG( wxT("Not implemented") ); } + virtual void Dismiss() { wxFAIL_MSG( wxT("Not implemented") ); } // may return value different from GetSelection() when the combobox // dropdown is shown and the user selected, but not yet accepted, a value diff --git a/Externals/wxWidgets3/include/wx/compositewin.h b/Externals/wxWidgets3/include/wx/compositewin.h index 390607d71f..2c6503aaeb 100644 --- a/Externals/wxWidgets3/include/wx/compositewin.h +++ b/Externals/wxWidgets3/include/wx/compositewin.h @@ -3,7 +3,7 @@ // Purpose: wxCompositeWindow<> declaration // Author: Vadim Zeitlin // Created: 2011-01-02 -// RCS-ID: $Id: compositewin.h 66931 2011-02-16 23:45:04Z VZ $ +// RCS-ID: $Id: compositewin.h 69470 2011-10-19 16:20:01Z VS $ // Copyright: (c) 2011 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -12,22 +12,15 @@ #define _WX_COMPOSITEWIN_H_ #include "wx/window.h" +#include "wx/containr.h" + +class WXDLLIMPEXP_FWD_CORE wxToolTip; // NB: This is an experimental and, as for now, undocumented class used only by // wxWidgets itself internally. Don't use it in your code until its API is // officially stabilized unless you are ready to change it with the next // wxWidgets release. -// FIXME-VC6: This compiler can't compile DoSetForAllParts() template function, -// it can't determine whether the deduced type should be "T" or "const T&". And -// without this function wxCompositeWindow is pretty useless so simply disable -// this code for it, this does mean that setting colours/fonts/... for -// composite controls won't work in the library compiled with it but so far -// this only affects the generic wxDatePickerCtrl which is not used by default -// under MSW anyhow so it doesn't seem to be worth it to spend time and uglify -// the code to fix it. -#ifndef __VISUALC6__ - // ---------------------------------------------------------------------------- // wxCompositeWindow is a helper for implementing composite windows: to define // a class using subwindows, simply inherit from it specialized with the real @@ -42,7 +35,25 @@ public: typedef W BaseWindowClass; // Default ctor doesn't do anything. - wxCompositeWindow() { } + wxCompositeWindow() + { + this->Connect + ( + wxEVT_CREATE, + wxWindowCreateEventHandler(wxCompositeWindow::OnWindowCreate) + ); + + } + +#ifndef __VISUALC6__ + // FIXME-VC6: This compiler can't compile DoSetForAllParts() template function, + // it can't determine whether the deduced type should be "T" or "const T&". And + // without this function wxCompositeWindow is pretty useless so simply disable + // this code for it, this does mean that setting colours/fonts/... for + // composite controls won't work in the library compiled with it but so far + // this only affects the generic wxDatePickerCtrl which is not used by default + // under MSW anyhow so it doesn't seem to be worth it to spend time and uglify + // the code to fix it. // Override all wxWindow methods which must be forwarded to the composite // window parts. @@ -59,7 +70,7 @@ public: if ( !BaseWindowClass::SetForegroundColour(colour) ) return false; - DoSetForAllParts(&wxWindowBase::SetForegroundColour, colour); + SetForAllParts(&wxWindowBase::SetForegroundColour, colour); return true; } @@ -69,7 +80,7 @@ public: if ( !BaseWindowClass::SetBackgroundColour(colour) ) return false; - DoSetForAllParts(&wxWindowBase::SetBackgroundColour, colour); + SetForAllParts(&wxWindowBase::SetBackgroundColour, colour); return true; } @@ -79,7 +90,7 @@ public: if ( !BaseWindowClass::SetFont(font) ) return false; - DoSetForAllParts(&wxWindowBase::SetFont, font); + SetForAllParts(&wxWindowBase::SetFont, font); return true; } @@ -89,18 +100,112 @@ public: if ( !BaseWindowClass::SetCursor(cursor) ) return false; - DoSetForAllParts(&wxWindowBase::SetCursor, cursor); + SetForAllParts(&wxWindowBase::SetCursor, cursor); return true; } +#if wxUSE_TOOLTIPS + virtual void DoSetToolTip(wxToolTip *tip) + { + BaseWindowClass::DoSetToolTip(tip); + + SetForAllParts(&wxWindowBase::CopyToolTip, tip); + } +#endif // wxUSE_TOOLTIPS + +#endif // !__VISUALC6__ + + virtual void SetFocus() + { + wxSetFocusToChild(this, NULL); + } + private: // Must be implemented by the derived class to return all children to which // the public methods we override should forward to. virtual wxWindowList GetCompositeWindowParts() const = 0; + void OnWindowCreate(wxWindowCreateEvent& event) + { + event.Skip(); + + // Attach a few event handlers to all parts of the composite window. + // This makes the composite window behave more like a simple control + // and allows other code (such as wxDataViewCtrl's inline editing + // support) to hook into its event processing. + + wxWindow *child = event.GetWindow(); + if ( child == this ) + return; // not a child, we don't want to Connect() to ourselves + + // Always capture wxEVT_KILL_FOCUS: + child->Connect(wxEVT_KILL_FOCUS, + wxFocusEventHandler(wxCompositeWindow::OnKillFocus), + NULL, this); + + // Some events should be only handled for non-toplevel children. For + // example, we want to close the control in wxDataViewCtrl when Enter + // is pressed in the inline editor, but not when it's pressed in a + // popup dialog it opens. + wxWindow *win = child; + while ( win && win != this ) + { + if ( win->IsTopLevel() ) + return; + win = win->GetParent(); + } + + child->Connect(wxEVT_CHAR, + wxKeyEventHandler(wxCompositeWindow::OnChar), + NULL, this); + } + + void OnChar(wxKeyEvent& event) + { + if ( !this->ProcessWindowEvent(event) ) + event.Skip(); + } + + void OnKillFocus(wxFocusEvent& event) + { + // Ignore focus changes within the composite control: + wxWindow *win = event.GetWindow(); + while ( win ) + { + if ( win == this ) + { + event.Skip(); + return; + } + + // Note that we don't use IsTopLevel() check here, because we do + // want to ignore focus changes going to toplevel window that have + // the composite control as its parent; these would typically be + // some kind of control's popup window. + win = win->GetParent(); + } + + // The event shouldn't be ignored, forward it to the main control: + if ( !this->ProcessWindowEvent(event) ) + event.Skip(); + } + +#ifndef __VISUALC6__ template - void DoSetForAllParts(bool (wxWindowBase::*func)(const T&), const T& arg) + void SetForAllParts(bool (wxWindowBase::*func)(const T&), const T& arg) + { + DoSetForAllParts(func, arg); + } + + template + void SetForAllParts(bool (wxWindowBase::*func)(T*), T* arg) + { + DoSetForAllParts(func, arg); + } + + template + void DoSetForAllParts(bool (wxWindowBase::*func)(T), T arg) { // Simply call the setters for all parts of this composite window. const wxWindowList parts = GetCompositeWindowParts(); @@ -110,20 +215,16 @@ private: { wxWindow * const child = *i; - (child->*func)(arg); + // Allow NULL elements in the list, this makes the code of derived + // composite controls which may have optionally shown children + // simpler and it doesn't cost us much here. + if ( child ) + (child->*func)(arg); } } +#endif // !__VISUALC6__ wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxCompositeWindow, W); }; -#else // __VISUALC6__ - -template -class wxCompositeWindow : public W -{ -}; - -#endif // !__VISUALC6__/__VISUALC6__ - #endif // _WX_COMPOSITEWIN_H_ diff --git a/Externals/wxWidgets3/include/wx/config.h b/Externals/wxWidgets3/include/wx/config.h index 3c2dbad63a..672e0a5cf2 100644 --- a/Externals/wxWidgets3/include/wx/config.h +++ b/Externals/wxWidgets3/include/wx/config.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: config.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: config.h 70808 2012-03-04 20:31:42Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,15 +22,12 @@ // under Windows we prefer to use the native implementation but can be forced // to use the file-based one -#if defined(__WXMSW__) && wxUSE_CONFIG_NATIVE +#if defined(__WINDOWS__) && wxUSE_CONFIG_NATIVE #include "wx/msw/regconf.h" #define wxConfig wxRegConfig #elif defined(__WXOS2__) && wxUSE_CONFIG_NATIVE #include "wx/os2/iniconf.h" #define wxConfig wxIniConfig -#elif defined(__WXPALMOS__) && wxUSE_CONFIG_NATIVE - #include "wx/palmos/prefconf.h" - #define wxConfig wxPrefConfig #else // either we're under Unix or wish to always use config files #include "wx/fileconf.h" #define wxConfig wxFileConfig diff --git a/Externals/wxWidgets3/include/wx/containr.h b/Externals/wxWidgets3/include/wx/containr.h index c961a772da..a509df834c 100644 --- a/Externals/wxWidgets3/include/wx/containr.h +++ b/Externals/wxWidgets3/include/wx/containr.h @@ -1,12 +1,11 @@ /////////////////////////////////////////////////////////////////////////////// // Name: wx/containr.h -// Purpose: wxControlContainer class declration: a "mix-in" class which -// implements the TAB navigation between the controls +// Purpose: wxControlContainer and wxNavigationEnabled declarations // Author: Vadim Zeitlin // Modified by: // Created: 06.08.01 -// RCS-ID: $Id: containr.h 61508 2009-07-23 20:30:22Z VZ $ -// Copyright: (c) 2001 Vadim Zeitlin +// RCS-ID: $Id: containr.h 70805 2012-03-04 09:42:51Z SC $ +// Copyright: (c) 2001, 2011 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -15,16 +14,20 @@ #include "wx/defs.h" +#ifndef wxHAS_NATIVE_TAB_TRAVERSAL + // We need wxEVT_XXX declarations in this case. + #include "wx/event.h" +#endif + class WXDLLIMPEXP_FWD_CORE wxWindow; class WXDLLIMPEXP_FWD_CORE wxWindowBase; /* - Implementation note: wxControlContainer is not a real mix-in but rather - a class meant to be aggregated with (and not inherited from). Although - logically it should be a mix-in, doing it like this has no advantage from - the point of view of the existing code but does have some problems (we'd - need to play tricks with event handlers which may be difficult to do - safely). The price we pay for this simplicity is the ugly macros below. + This header declares wxControlContainer class however it's not a real + container of controls but rather just a helper used to implement TAB + navigation among the window children. You should rarely need to use it + directly, derive from the documented public wxNavigationEnabled<> class to + implement TAB navigation in a custom composite window. */ // ---------------------------------------------------------------------------- @@ -102,6 +105,161 @@ private: bool m_inSetFocus; }; +#ifdef wxHAS_NATIVE_TAB_TRAVERSAL + +// ---------------------------------------------------------------------------- +// wxControlContainer for native TAB navigation +// ---------------------------------------------------------------------------- + +// this must be a real class as we forward-declare it elsewhere +class WXDLLIMPEXP_CORE wxControlContainer : public wxControlContainerBase +{ +protected: + // set the focus to the child which had it the last time + virtual bool SetFocusToChild(); +}; + +#else // !wxHAS_NATIVE_TAB_TRAVERSAL + +// ---------------------------------------------------------------------------- +// wxControlContainer for TAB navigation implemented in wx itself +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxControlContainer : public wxControlContainerBase +{ +public: + // default ctor, SetContainerWindow() must be called later + wxControlContainer(); + + // the methods to be called from the window event handlers + void HandleOnNavigationKey(wxNavigationKeyEvent& event); + void HandleOnFocus(wxFocusEvent& event); + void HandleOnWindowDestroy(wxWindowBase *child); + + // called from OnChildFocus() handler, i.e. when one of our (grand) + // children gets the focus + void SetLastFocus(wxWindow *win); + +protected: + + wxDECLARE_NO_COPY_CLASS(wxControlContainer); +}; + +#endif // wxHAS_NATIVE_TAB_TRAVERSAL/!wxHAS_NATIVE_TAB_TRAVERSAL + +// this function is for wxWidgets internal use only +extern WXDLLIMPEXP_CORE bool wxSetFocusToChild(wxWindow *win, wxWindow **child); + +// ---------------------------------------------------------------------------- +// wxNavigationEnabled: Derive from this class to support keyboard navigation +// among window children in a wxWindow-derived class. The details of this class +// don't matter, you just need to derive from it to make navigation work. +// ---------------------------------------------------------------------------- + +// The template parameter W must be a wxWindow-derived class. +template +class wxNavigationEnabled : public W +{ +public: + typedef W BaseWindowClass; + + wxNavigationEnabled() + { + m_container.SetContainerWindow(this); + +#ifndef wxHAS_NATIVE_TAB_TRAVERSAL + BaseWindowClass::Connect(wxEVT_NAVIGATION_KEY, + wxNavigationKeyEventHandler(wxNavigationEnabled::OnNavigationKey)); + + BaseWindowClass::Connect(wxEVT_SET_FOCUS, + wxFocusEventHandler(wxNavigationEnabled::OnFocus)); + + BaseWindowClass::Connect(wxEVT_CHILD_FOCUS, + wxChildFocusEventHandler(wxNavigationEnabled::OnChildFocus)); +#endif // !wxHAS_NATIVE_TAB_TRAVERSAL + } + + WXDLLIMPEXP_INLINE_CORE virtual bool AcceptsFocus() const + { + return m_container.AcceptsFocus(); + } + + WXDLLIMPEXP_INLINE_CORE virtual bool AcceptsFocusRecursively() const + { + return m_container.AcceptsFocusRecursively(); + } + + WXDLLIMPEXP_INLINE_CORE virtual bool AcceptsFocusFromKeyboard() const + { + return m_container.AcceptsFocusFromKeyboard(); + } + + WXDLLIMPEXP_INLINE_CORE virtual void AddChild(wxWindowBase *child) + { + BaseWindowClass::AddChild(child); + + m_container.UpdateCanFocus(); + } + + WXDLLIMPEXP_INLINE_CORE virtual void RemoveChild(wxWindowBase *child) + { +#ifndef wxHAS_NATIVE_TAB_TRAVERSAL + m_container.HandleOnWindowDestroy(child); +#endif // !wxHAS_NATIVE_TAB_TRAVERSAL + + BaseWindowClass::RemoveChild(child); + + m_container.UpdateCanFocus(); + } + + WXDLLIMPEXP_INLINE_CORE virtual void SetFocus() + { + if ( !m_container.DoSetFocus() ) + BaseWindowClass::SetFocus(); + } + + void SetFocusIgnoringChildren() + { + BaseWindowClass::SetFocus(); + } + + void AcceptFocus(bool acceptFocus) + { + m_container.SetCanFocus(acceptFocus); + } + +protected: +#ifndef wxHAS_NATIVE_TAB_TRAVERSAL + void OnNavigationKey(wxNavigationKeyEvent& event) + { + m_container.HandleOnNavigationKey(event); + } + + void OnFocus(wxFocusEvent& event) + { + m_container.HandleOnFocus(event); + } + + void OnChildFocus(wxChildFocusEvent& event) + { + m_container.SetLastFocus(event.GetWindow()); + event.Skip(); + } +#endif // !wxHAS_NATIVE_TAB_TRAVERSAL + + wxControlContainer m_container; + + + wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxNavigationEnabled, W); +}; + +// ---------------------------------------------------------------------------- +// Compatibility macros from now on, do NOT use them and preferably do not even +// look at them. +// ---------------------------------------------------------------------------- + +#if WXWIN_COMPATIBILITY_2_8 + // common part of WX_DECLARE_CONTROL_CONTAINER in the native and generic cases, // it should be used in the wxWindow-derived class declaration #define WX_DECLARE_CONTROL_CONTAINER_BASE() \ @@ -156,20 +314,9 @@ protected: \ return m_container.AcceptsFocusFromKeyboard(); \ } + #ifdef wxHAS_NATIVE_TAB_TRAVERSAL -// ---------------------------------------------------------------------------- -// wxControlContainer for native TAB navigation -// ---------------------------------------------------------------------------- - -// this must be a real class as we forward-declare it elsewhere -class WXDLLIMPEXP_CORE wxControlContainer : public wxControlContainerBase -{ -protected: - // set the focus to the child which had it the last time - virtual bool SetFocusToChild(); -}; - #define WX_EVENT_TABLE_CONTROL_CONTAINER(classname) #define WX_DECLARE_CONTROL_CONTAINER WX_DECLARE_CONTROL_CONTAINER_BASE @@ -191,38 +338,6 @@ protected: #else // !wxHAS_NATIVE_TAB_TRAVERSAL -class WXDLLIMPEXP_FWD_CORE wxFocusEvent; -class WXDLLIMPEXP_FWD_CORE wxNavigationKeyEvent; - -// ---------------------------------------------------------------------------- -// wxControlContainer for TAB navigation implemented in wx itself -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxControlContainer : public wxControlContainerBase -{ -public: - // default ctor, SetContainerWindow() must be called later - wxControlContainer(); - - // the methods to be called from the window event handlers - void HandleOnNavigationKey(wxNavigationKeyEvent& event); - void HandleOnFocus(wxFocusEvent& event); - void HandleOnWindowDestroy(wxWindowBase *child); - - // called from OnChildFocus() handler, i.e. when one of our (grand) - // children gets the focus - void SetLastFocus(wxWindow *win); - -protected: - - wxDECLARE_NO_COPY_CLASS(wxControlContainer); -}; - -// ---------------------------------------------------------------------------- -// macros which may be used by the classes wishing to implement TAB navigation -// among their children -// ---------------------------------------------------------------------------- - // declare the methods to be forwarded #define WX_DECLARE_CONTROL_CONTAINER() \ WX_DECLARE_CONTROL_CONTAINER_BASE(); \ @@ -274,7 +389,6 @@ public: \ #endif // wxHAS_NATIVE_TAB_TRAVERSAL/!wxHAS_NATIVE_TAB_TRAVERSAL -// this function is for wxWidgets internal use only -extern bool wxSetFocusToChild(wxWindow *win, wxWindow **child); +#endif // WXWIN_COMPATIBILITY_2_8 #endif // _WX_CONTAINR_H_ diff --git a/Externals/wxWidgets3/include/wx/control.h b/Externals/wxWidgets3/include/wx/control.h index 6c859b6868..778ec1870e 100644 --- a/Externals/wxWidgets3/include/wx/control.h +++ b/Externals/wxWidgets3/include/wx/control.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 26.07.99 -// RCS-ID: $Id: control.h 67062 2011-02-27 12:48:07Z VZ $ +// RCS-ID: $Id: control.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -221,8 +221,6 @@ protected: #if defined(__WXUNIVERSAL__) #include "wx/univ/control.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/control.h" #elif defined(__WXMSW__) #include "wx/msw/control.h" #elif defined(__WXMOTIF__) diff --git a/Externals/wxWidgets3/include/wx/convauto.h b/Externals/wxWidgets3/include/wx/convauto.h index ac5f02d7f1..0d9303959d 100644 --- a/Externals/wxWidgets3/include/wx/convauto.h +++ b/Externals/wxWidgets3/include/wx/convauto.h @@ -3,7 +3,7 @@ // Purpose: wxConvAuto class declaration // Author: Vadim Zeitlin // Created: 2006-04-03 -// RCS-ID: $Id: convauto.h 63991 2010-04-16 10:43:18Z VS $ +// RCS-ID: $Id: convauto.h 69675 2011-11-05 11:23:41Z VZ $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -18,6 +18,18 @@ // wxConvAuto: uses BOM to automatically detect input encoding // ---------------------------------------------------------------------------- +// All currently recognized BOM values. +enum wxBOM +{ + wxBOM_Unknown = -1, + wxBOM_None, + wxBOM_UTF32BE, + wxBOM_UTF32LE, + wxBOM_UTF16BE, + wxBOM_UTF16LE, + wxBOM_UTF8 +}; + class WXDLLIMPEXP_BASE wxConvAuto : public wxMBConv { public: @@ -69,29 +81,27 @@ public: virtual wxMBConv *Clone() const { return new wxConvAuto(*this); } -private: - // all currently recognized BOM values - enum BOMType - { - BOM_Unknown = -1, - BOM_None, - BOM_UTF32BE, - BOM_UTF32LE, - BOM_UTF16BE, - BOM_UTF16LE, - BOM_UTF8 - }; - // return the BOM type of this buffer - static BOMType DetectBOM(const char *src, size_t srcLen); + static wxBOM DetectBOM(const char *src, size_t srcLen); + // return the characters composing the given BOM. + static const char* GetBOMChars(wxBOM bomType, size_t* count); + + wxBOM GetBOM() const + { + return m_bomType; + } + +private: // common part of all ctors void Init() { - // no need to initialize m_bomType and m_consumedBOM here, this will be - // done when m_conv is created + // We don't initialize m_encDefault here as different ctors do it + // differently. m_conv = NULL; + m_bomType = wxBOM_Unknown; m_ownsConv = false; + m_consumedBOM = false; } // initialize m_conv with the UTF-8 conversion @@ -102,7 +112,7 @@ private: } // create the correct conversion object for the given BOM type - void InitFromBOM(BOMType bomType); + void InitFromBOM(wxBOM bomType); // create the correct conversion object for the BOM present in the // beginning of the buffer @@ -128,7 +138,7 @@ private: wxFontEncoding m_encDefault; // our BOM type - BOMType m_bomType; + wxBOM m_bomType; // true if we allocated m_conv ourselves, false if we just use an existing // global conversion diff --git a/Externals/wxWidgets3/include/wx/cppunit.h b/Externals/wxWidgets3/include/wx/cppunit.h index 831b6891a0..7c5a114bf5 100644 --- a/Externals/wxWidgets3/include/wx/cppunit.h +++ b/Externals/wxWidgets3/include/wx/cppunit.h @@ -3,7 +3,7 @@ // Purpose: wrapper header for CppUnit headers // Author: Vadim Zeitlin // Created: 15.02.04 -// RCS-ID: $Id: cppunit.h 66711 2011-01-19 10:47:49Z VZ $ +// RCS-ID: $Id: cppunit.h 69241 2011-09-30 14:00:52Z JJ $ // Copyright: (c) 2004 Vadim Zeitlin // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -200,6 +200,10 @@ WX_CPPUNIT_ALLOW_EQUALS_TO_INT(short) WX_CPPUNIT_ALLOW_EQUALS_TO_INT(unsigned) WX_CPPUNIT_ALLOW_EQUALS_TO_INT(unsigned long) +#if defined( __VMS ) && defined( __ia64 ) +WX_CPPUNIT_ALLOW_EQUALS_TO_INT(std::basic_streambuf::pos_type); +#endif + #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG WX_CPPUNIT_ALLOW_EQUALS_TO_INT(wxLongLong_t) WX_CPPUNIT_ALLOW_EQUALS_TO_INT(unsigned wxLongLong_t) diff --git a/Externals/wxWidgets3/include/wx/ctrlsub.h b/Externals/wxWidgets3/include/wx/ctrlsub.h index 70a69d1103..198aae24c6 100644 --- a/Externals/wxWidgets3/include/wx/ctrlsub.h +++ b/Externals/wxWidgets3/include/wx/ctrlsub.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 22.10.99 -// RCS-ID: $Id: ctrlsub.h 65040 2010-07-22 12:09:15Z VZ $ +// RCS-ID: $Id: ctrlsub.h 68460 2011-07-30 11:30:08Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -395,41 +395,48 @@ private: wxClientDataType m_clientDataItemsType; }; -// this macro must (unfortunately) be used in any class deriving from both -// wxItemContainer and wxControl because otherwise there is ambiguity when -// calling GetClientXXX() functions -- the compiler can't choose between the -// two versions -#define wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST \ - void SetClientData(void *data) \ - { wxEvtHandler::SetClientData(data); } \ - void *GetClientData() const \ - { return wxEvtHandler::GetClientData(); } \ - void SetClientObject(wxClientData *data) \ - { wxEvtHandler::SetClientObject(data); } \ - wxClientData *GetClientObject() const \ - { return wxEvtHandler::GetClientObject(); } \ - void SetClientData(unsigned int n, void* clientData) \ - { wxItemContainer::SetClientData(n, clientData); } \ - void* GetClientData(unsigned int n) const \ - { return wxItemContainer::GetClientData(n); } \ - void SetClientObject(unsigned int n, wxClientData* clientData) \ - { wxItemContainer::SetClientObject(n, clientData); } \ - wxClientData* GetClientObject(unsigned int n) const \ - { return wxItemContainer::GetClientObject(n); } +// Inheriting directly from a wxWindow-derived class and wxItemContainer +// unfortunately introduces an ambiguity for all GetClientXXX() methods as they +// are inherited twice: the "global" versions from wxWindow and the per-item +// versions taking the index from wxItemContainer. +// +// So we need to explicitly resolve them and this helper template class is +// provided to do it. To use it, simply inherit from wxWindowWithItems instead of Window and Container interface directly. +template +class wxWindowWithItems : public W, public C +{ +public: + typedef W BaseWindowClass; + typedef C BaseContainerInterface; -class WXDLLIMPEXP_CORE wxControlWithItemsBase : public wxControl, - public wxItemContainer + wxWindowWithItems() { } + + void SetClientData(void *data) + { BaseWindowClass::SetClientData(data); } + void *GetClientData() const + { return BaseWindowClass::GetClientData(); } + void SetClientObject(wxClientData *data) + { BaseWindowClass::SetClientObject(data); } + wxClientData *GetClientObject() const + { return BaseWindowClass::GetClientObject(); } + + void SetClientData(unsigned int n, void* clientData) + { wxItemContainer::SetClientData(n, clientData); } + void* GetClientData(unsigned int n) const + { return wxItemContainer::GetClientData(n); } + void SetClientObject(unsigned int n, wxClientData* clientData) + { wxItemContainer::SetClientObject(n, clientData); } + wxClientData* GetClientObject(unsigned int n) const + { return wxItemContainer::GetClientObject(n); } +}; + +class WXDLLIMPEXP_CORE wxControlWithItemsBase : + public wxWindowWithItems { public: wxControlWithItemsBase() { } - // we have to redefine these functions here to avoid ambiguities in classes - // deriving from us which would arise otherwise because both base classses - // have the methods with the same names - hopefully, a smart compiler can - // optimize away these simple inline wrappers so we don't suffer much from - // this - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST - // usually the controls like list/combo boxes have their own background // colour virtual bool ShouldInheritColours() const { return false; } diff --git a/Externals/wxWidgets3/include/wx/cursor.h b/Externals/wxWidgets3/include/wx/cursor.h index 82bd282b45..a0ce868609 100644 --- a/Externals/wxWidgets3/include/wx/cursor.h +++ b/Externals/wxWidgets3/include/wx/cursor.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: cursor.h 60648 2009-05-16 10:42:48Z FM $ +// RCS-ID: $Id: cursor.h 70353 2012-01-15 14:46:41Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -34,10 +34,7 @@ public: */ -#if defined(__WXPALMOS__) - #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_CUR_RESOURCE - #include "wx/palmos/cursor.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_CUR_RESOURCE #include "wx/msw/cursor.h" #elif defined(__WXMOTIF__) @@ -52,9 +49,6 @@ public: #elif defined(__WXX11__) #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_XPM #include "wx/x11/cursor.h" -#elif defined(__WXMGL__) - #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_CUR_RESOURCE - #include "wx/mgl/cursor.h" #elif defined(__WXDFB__) #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_CUR_RESOURCE #include "wx/dfb/cursor.h" @@ -62,7 +56,7 @@ public: #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_MACCURSOR_RESOURCE #include "wx/osx/cursor.h" #elif defined(__WXCOCOA__) - #define wxCURSOR_DEFAULT_TYPE 0 + #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_MACCURSOR_RESOURCE #include "wx/cocoa/cursor.h" #elif defined(__WXPM__) #define wxCURSOR_DEFAULT_TYPE wxBITMAP_TYPE_CUR_RESOURCE diff --git a/Externals/wxWidgets3/include/wx/custombgwin.h b/Externals/wxWidgets3/include/wx/custombgwin.h new file mode 100644 index 0000000000..62ef32261f --- /dev/null +++ b/Externals/wxWidgets3/include/wx/custombgwin.h @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/custombgwin.h +// Purpose: Class adding support for custom window backgrounds. +// Author: Vadim Zeitlin +// Created: 2011-10-10 +// RCS-ID: $Id: custombgwin.h 69930 2011-12-04 23:57:36Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_CUSTOMBGWIN_H_ +#define _WX_CUSTOMBGWIN_H_ + +// ---------------------------------------------------------------------------- +// wxCustomBackgroundWindow: Adds support for custom backgrounds to any +// wxWindow-derived class. +// ---------------------------------------------------------------------------- + +class wxCustomBackgroundWindowBase +{ +public: + // Trivial default ctor. + wxCustomBackgroundWindowBase() { } + + // Also a trivial but virtual -- to suppress g++ warnings -- dtor. + virtual ~wxCustomBackgroundWindowBase() { } + + // Use the given bitmap to tile the background of this window. This bitmap + // will show through any transparent children. + // + // Notice that you must not prevent the base class EVT_ERASE_BACKGROUND + // handler from running (i.e. not to handle this event yourself) for this + // to work. + void SetBackgroundBitmap(const wxBitmap& bmp) + { + DoSetBackgroundBitmap(bmp); + } + +protected: + virtual void DoSetBackgroundBitmap(const wxBitmap& bmp) = 0; + + wxDECLARE_NO_COPY_CLASS(wxCustomBackgroundWindowBase); +}; + +#if defined(__WXUNIVERSAL__) + #include "wx/univ/custombgwin.h" +#elif defined(__WXMSW__) + #include "wx/msw/custombgwin.h" +#else + #include "wx/generic/custombgwin.h" +#endif + +#endif // _WX_CUSTOMBGWIN_H_ diff --git a/Externals/wxWidgets3/include/wx/dataview.h b/Externals/wxWidgets3/include/wx/dataview.h index cc9d85efa9..3e81791cd0 100644 --- a/Externals/wxWidgets3/include/wx/dataview.h +++ b/Externals/wxWidgets3/include/wx/dataview.h @@ -4,7 +4,7 @@ // Author: Robert Roebling // Modified by: Bo Yang // Created: 08.01.06 -// RCS-ID: $Id: dataview.h 66783 2011-01-27 11:53:51Z SC $ +// RCS-ID: $Id: dataview.h 70377 2012-01-17 14:05:17Z VS $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -21,9 +21,11 @@ #include "wx/variant.h" #include "wx/dynarray.h" #include "wx/icon.h" +#include "wx/itemid.h" #include "wx/weakref.h" #include "wx/vector.h" #include "wx/dataobj.h" +#include "wx/withimages.h" class WXDLLIMPEXP_FWD_CORE wxImageList; @@ -44,7 +46,6 @@ class WXDLLIMPEXP_FWD_CORE wxImageList; // wxDataViewCtrl globals // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_FWD_ADV wxDataViewItem; class WXDLLIMPEXP_FWD_ADV wxDataViewModel; class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl; class WXDLLIMPEXP_FWD_ADV wxDataViewColumn; @@ -78,33 +79,14 @@ extern WXDLLIMPEXP_DATA_ADV(const char) wxDataViewCtrlNameStr[]; // wxDataViewItem // --------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewItem +// Make it a class and not a typedef to allow forward declaring it. +class wxDataViewItem : public wxItemId { public: - wxDataViewItem( void* id = NULL ) - { m_id = id; } - wxDataViewItem( const wxDataViewItem &item ) - { m_id = item.m_id; } - bool IsOk() const { return m_id != NULL; } - void* GetID() const { return m_id; } - operator const void* () const { return m_id; } - -private: - void* m_id; + wxDataViewItem() : wxItemId() { } + wxEXPLICIT wxDataViewItem(void* pItem) : wxItemId(pItem) { } }; -inline -bool operator==(const wxDataViewItem& left, const wxDataViewItem& right) -{ - return left.GetID() == right.GetID(); -} - -inline -bool operator!=(const wxDataViewItem& left, const wxDataViewItem& right) -{ - return !(left == right); -} - WX_DEFINE_ARRAY(wxDataViewItem, wxDataViewItemArray); // --------------------------------------------------------- @@ -161,16 +143,20 @@ public: void SetColour(const wxColour& colour) { m_colour = colour; } void SetBold( bool set ) { m_bold = set; } void SetItalic( bool set ) { m_italic = set; } + void SetBackgroundColour(const wxColour& colour) { m_bgColour = colour; } // accessors - bool HasColour() const { return m_colour.Ok(); } + bool HasColour() const { return m_colour.IsOk(); } const wxColour& GetColour() const { return m_colour; } bool HasFont() const { return m_bold || m_italic; } bool GetBold() const { return m_bold; } bool GetItalic() const { return m_italic; } - bool IsDefault() const { return !(HasColour() || HasFont()); } + bool HasBackgroundColour() const { return m_bgColour.IsOk(); } + const wxColour& GetBackgroundColour() const { return m_bgColour; } + + bool IsDefault() const { return !(HasColour() || HasFont() || HasBackgroundColour()); } // Return the font based on the given one with this attribute applied to it. wxFont GetEffectiveFont(const wxFont& font) const; @@ -179,6 +165,7 @@ private: wxColour m_colour; bool m_bold; bool m_italic; + wxColour m_bgColour; }; @@ -681,7 +668,18 @@ public: wxDataViewItem GetCurrentItem() const; void SetCurrentItem(const wxDataViewItem& item); - virtual wxDataViewItem GetSelection() const = 0; + // Currently focused column of the current item or NULL if no column has focus + virtual wxDataViewColumn *GetCurrentColumn() const = 0; + + // Selection: both GetSelection() and GetSelections() can be used for the + // controls both with and without wxDV_MULTIPLE style. For single selection + // controls GetSelections() is not very useful however. And for multi + // selection controls GetSelection() returns an invalid item if more than + // one item is selected. Use GetSelectedItemsCount() or HasSelection() to + // check if any items are selected at all. + virtual int GetSelectedItemsCount() const = 0; + bool HasSelection() const { return GetSelectedItemsCount() != 0; } + wxDataViewItem GetSelection() const; virtual int GetSelections( wxDataViewItemArray & sel ) const = 0; virtual void SetSelections( const wxDataViewItemArray & sel ) = 0; virtual void Select( const wxDataViewItem & item ) = 0; @@ -701,6 +699,13 @@ public: virtual void HitTest( const wxPoint & point, wxDataViewItem &item, wxDataViewColumn* &column ) const = 0; virtual wxRect GetItemRect( const wxDataViewItem & item, const wxDataViewColumn *column = NULL ) const = 0; + virtual bool SetRowHeight( int WXUNUSED(rowHeight) ) { return false; } + + virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) = 0; + + // Use EditItem() instead + wxDEPRECATED( void StartEditor(const wxDataViewItem& item, unsigned int column) ); + #if wxUSE_DRAG_AND_DROP virtual bool EnableDragSource(const wxDataFormat& WXUNUSED(format)) { return false; } @@ -757,7 +762,8 @@ public: m_column(NULL), m_pos(-1,-1), m_cacheFrom(0), - m_cacheTo(0) + m_cacheTo(0), + m_editCancelled(false) #if wxUSE_DRAG_AND_DROP , m_dataObject(NULL), m_dataBuffer(NULL), @@ -774,7 +780,8 @@ public: m_column(event.m_column), m_pos(event.m_pos), m_cacheFrom(event.m_cacheFrom), - m_cacheTo(event.m_cacheTo) + m_cacheTo(event.m_cacheTo), + m_editCancelled(event.m_editCancelled) #if wxUSE_DRAG_AND_DROP , m_dataObject(event.m_dataObject), m_dataFormat(event.m_dataFormat), @@ -795,6 +802,10 @@ public: const wxVariant &GetValue() const { return m_value; } void SetValue( const wxVariant &value ) { m_value = value; } + // for wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE only + bool IsEditCancelled() const { return m_editCancelled; } + void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; } + // for wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only void SetDataViewColumn( wxDataViewColumn *col ) { m_column = col; } wxDataViewColumn *GetDataViewColumn() const { return m_column; } @@ -834,6 +845,7 @@ protected: wxPoint m_pos; int m_cacheFrom; int m_cacheTo; + bool m_editCancelled; #if wxUSE_DRAG_AND_DROP wxDataObject *m_dataObject; @@ -1202,7 +1214,7 @@ public: virtual bool HasDefaultCompare() const { return true; } virtual unsigned int GetColumnCount() const - { return 1; }; + { return 1; } virtual wxString GetColumnType( unsigned int WXUNUSED(col) ) const { return wxT("wxDataViewIconText"); } @@ -1216,10 +1228,11 @@ public: //----------------------------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewTreeCtrl: public wxDataViewCtrl +class WXDLLIMPEXP_ADV wxDataViewTreeCtrl: public wxDataViewCtrl, + public wxWithImages { public: - wxDataViewTreeCtrl() { Init(); } + wxDataViewTreeCtrl() { } wxDataViewTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, @@ -1227,13 +1240,9 @@ public: long style = wxDV_NO_HEADER | wxDV_ROW_LINES, const wxValidator& validator = wxDefaultValidator) { - Init(); - Create(parent, id, pos, size, style, validator); } - virtual ~wxDataViewTreeCtrl(); - bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, @@ -1249,24 +1258,21 @@ public: bool IsContainer( const wxDataViewItem& item ) const { return GetStore()->IsContainer(item); } - void SetImageList( wxImageList *imagelist ); - wxImageList* GetImageList() { return m_imageList; } - wxDataViewItem AppendItem( const wxDataViewItem& parent, - const wxString &text, int icon = -1, wxClientData *data = NULL ); + const wxString &text, int icon = NO_IMAGE, wxClientData *data = NULL ); wxDataViewItem PrependItem( const wxDataViewItem& parent, - const wxString &text, int icon = -1, wxClientData *data = NULL ); + const wxString &text, int icon = NO_IMAGE, wxClientData *data = NULL ); wxDataViewItem InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString &text, int icon = -1, wxClientData *data = NULL ); + const wxString &text, int icon = NO_IMAGE, wxClientData *data = NULL ); wxDataViewItem PrependContainer( const wxDataViewItem& parent, - const wxString &text, int icon = -1, int expanded = -1, + const wxString &text, int icon = NO_IMAGE, int expanded = NO_IMAGE, wxClientData *data = NULL ); wxDataViewItem AppendContainer( const wxDataViewItem& parent, - const wxString &text, int icon = -1, int expanded = -1, + const wxString &text, int icon = NO_IMAGE, int expanded = NO_IMAGE, wxClientData *data = NULL ); wxDataViewItem InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString &text, int icon = -1, int expanded = -1, + const wxString &text, int icon = NO_IMAGE, int expanded = NO_IMAGE, wxClientData *data = NULL ); wxDataViewItem GetNthChild( const wxDataViewItem& parent, unsigned int pos ) const @@ -1296,14 +1302,6 @@ public: void OnCollapsed( wxDataViewEvent &event ); void OnSize( wxSizeEvent &event ); -private: - void Init() - { - m_imageList = NULL; - } - - wxImageList *m_imageList; - private: DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewTreeCtrl) diff --git a/Externals/wxWidgets3/include/wx/datectrl.h b/Externals/wxWidgets3/include/wx/datectrl.h index 576db17f48..8b16f0a9f2 100644 --- a/Externals/wxWidgets3/include/wx/datectrl.h +++ b/Externals/wxWidgets3/include/wx/datectrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2005-01-09 -// RCS-ID: $Id: datectrl.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: datectrl.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 2005 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -16,8 +16,7 @@ #if wxUSE_DATEPICKCTRL -#include "wx/control.h" // the base class -#include "wx/datetime.h" +#include "wx/datetimectrl.h" // the base class #define wxDatePickerCtrlNameStr wxT("datectrl") @@ -46,7 +45,7 @@ enum // wxDatePickerCtrl: allow the user to enter the date // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDatePickerCtrlBase : public wxControl +class WXDLLIMPEXP_ADV wxDatePickerCtrlBase : public wxDateTimePickerCtrl { public: /* @@ -63,23 +62,26 @@ public: const wxString& name = wxDatePickerCtrlNameStr); */ - // set/get the date - virtual void SetValue(const wxDateTime& dt) = 0; - virtual wxDateTime GetValue() const = 0; + /* + We inherit the methods to set/get the date from the base class. - // set/get the allowed valid range for the dates, if either/both of them - // are invalid, there is no corresponding limit and if neither is set - // GetRange() returns false + virtual void SetValue(const wxDateTime& dt) = 0; + virtual wxDateTime GetValue() const = 0; + */ + + // And add methods to set/get the allowed valid range for the dates. If + // either/both of them are invalid, there is no corresponding limit and if + // neither is set, GetRange() returns false. virtual void SetRange(const wxDateTime& dt1, const wxDateTime& dt2) = 0; virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const = 0; }; -#if defined(__WXPALMOS__) - #include "wx/palmos/datectrl.h" +#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) + #include "wx/msw/datectrl.h" #define wxHAS_NATIVE_DATEPICKCTRL -#elif defined(__WXMSW__) && !defined(__WXUNIVERSAL__) - #include "wx/msw/datectrl.h" +#elif defined(__WXOSX_COCOA__) && !defined(__WXUNIVERSAL__) + #include "wx/osx/datectrl.h" #define wxHAS_NATIVE_DATEPICKCTRL #else diff --git a/Externals/wxWidgets3/include/wx/dateevt.h b/Externals/wxWidgets3/include/wx/dateevt.h index 8833bdd0de..7b10dd63b7 100644 --- a/Externals/wxWidgets3/include/wx/dateevt.h +++ b/Externals/wxWidgets3/include/wx/dateevt.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2005-01-10 -// RCS-ID: $Id: dateevt.h 58718 2009-02-07 18:59:25Z VZ $ +// RCS-ID: $Id: dateevt.h 69224 2011-09-29 13:43:15Z VZ $ // Copyright: (c) 2005 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -17,7 +17,7 @@ #include "wx/window.h" // ---------------------------------------------------------------------------- -// wxDateEvent: used by wxCalendarCtrl and wxDatePickerCtrl +// wxDateEvent: used by wxCalendarCtrl, wxDatePickerCtrl and wxTimePickerCtrl. // ---------------------------------------------------------------------------- class WXDLLIMPEXP_ADV wxDateEvent : public wxCommandEvent @@ -48,6 +48,7 @@ private: // ---------------------------------------------------------------------------- wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_ADV, wxEVT_DATE_CHANGED, wxDateEvent); +wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_ADV, wxEVT_TIME_CHANGED, wxDateEvent); typedef void (wxEvtHandler::*wxDateEventFunction)(wxDateEvent&); @@ -57,5 +58,8 @@ typedef void (wxEvtHandler::*wxDateEventFunction)(wxDateEvent&); #define EVT_DATE_CHANGED(id, fn) \ wx__DECLARE_EVT1(wxEVT_DATE_CHANGED, id, wxDateEventHandler(fn)) +#define EVT_TIME_CHANGED(id, fn) \ + wx__DECLARE_EVT1(wxEVT_TIME_CHANGED, id, wxDateEventHandler(fn)) + #endif // _WX_DATEEVT_H_ diff --git a/Externals/wxWidgets3/include/wx/datetime.h b/Externals/wxWidgets3/include/wx/datetime.h index 448f6575d1..79cf5f1b7a 100644 --- a/Externals/wxWidgets3/include/wx/datetime.h +++ b/Externals/wxWidgets3/include/wx/datetime.h @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 10.02.99 -// RCS-ID: $Id: datetime.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: datetime.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,7 +19,7 @@ #ifdef __WXWINCE__ #include "wx/msw/wince/time.h" -#elif !defined(__WXPALMOS5__) +#else #include #endif // OS @@ -31,7 +31,7 @@ class WXDLLIMPEXP_FWD_BASE wxDateTime; class WXDLLIMPEXP_FWD_BASE wxTimeSpan; class WXDLLIMPEXP_FWD_BASE wxDateSpan; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ struct _SYSTEMTIME; #endif @@ -53,27 +53,6 @@ struct _SYSTEMTIME; * 5. wxDateTimeHolidayAuthority for Easter and other christian feasts */ -/* Two wrapper functions for thread safety */ -#ifdef HAVE_LOCALTIME_R -#define wxLocaltime_r localtime_r -#else -WXDLLIMPEXP_BASE struct tm *wxLocaltime_r(const time_t*, struct tm*); -#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__) - // On Windows, localtime _is_ threadsafe! -#warning using pseudo thread-safe wrapper for localtime to emulate localtime_r -#endif -#endif - -#ifdef HAVE_GMTIME_R -#define wxGmtime_r gmtime_r -#else -WXDLLIMPEXP_BASE struct tm *wxGmtime_r(const time_t*, struct tm*); -#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__) - // On Windows, gmtime _is_ threadsafe! -#warning using pseudo thread-safe wrapper for gmtime to emulate gmtime_r -#endif -#endif - /* The three (main) classes declared in this header represent: @@ -627,7 +606,7 @@ public: wxDateTime_t minute = 0, wxDateTime_t second = 0, wxDateTime_t millisec = 0); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wxDateTime(const struct _SYSTEMTIME& st) { SetFromMSWSysTime(st); @@ -949,7 +928,7 @@ public: // SYSTEMTIME format // ------------------------------------------------------------------------ -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // convert SYSTEMTIME to wxDateTime wxDateTime& SetFromMSWSysTime(const struct _SYSTEMTIME& st); @@ -959,7 +938,7 @@ public: // same as above but only take date part into account, time is always zero wxDateTime& SetFromMSWSysDate(const struct _SYSTEMTIME& st); void GetAsMSWSysDate(struct _SYSTEMTIME* st) const; -#endif // __WXMSW__ +#endif // __WINDOWS__ // comparison (see also functions below for operator versions) // ------------------------------------------------------------------------ diff --git a/Externals/wxWidgets3/include/wx/datetimectrl.h b/Externals/wxWidgets3/include/wx/datetimectrl.h new file mode 100644 index 0000000000..8632d5f12e --- /dev/null +++ b/Externals/wxWidgets3/include/wx/datetimectrl.h @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/timectrl.h +// Purpose: Declaration of wxDateTimePickerCtrl class. +// Author: Vadim Zeitlin +// Created: 2011-09-22 +// RCS-ID: $Id: datetimectrl.h 70071 2011-12-20 21:27:14Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_DATETIME_CTRL_H_ +#define _WX_DATETIME_CTRL_H_ + +#include "wx/defs.h" + +#if wxUSE_DATEPICKCTRL || wxUSE_TIMEPICKCTRL + +#define wxNEEDS_DATETIMEPICKCTRL + +#include "wx/control.h" // the base class + +#include "wx/datetime.h" + +// ---------------------------------------------------------------------------- +// wxDateTimePickerCtrl: Private common base class of wx{Date,Time}PickerCtrl. +// ---------------------------------------------------------------------------- + +// This class is an implementation detail and should not be used directly, only +// use the documented API of wxDateTimePickerCtrl and wxTimePickerCtrl. +class WXDLLIMPEXP_ADV wxDateTimePickerCtrlBase : public wxControl +{ +public: + // Set/get the date or time (in the latter case, time part is ignored). + virtual void SetValue(const wxDateTime& dt) = 0; + virtual wxDateTime GetValue() const = 0; +}; + +#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) + #include "wx/msw/datetimectrl.h" +#elif defined(__WXOSX_COCOA__) && !defined(__WXUNIVERSAL__) + #include "wx/osx/datetimectrl.h" +#else + typedef wxDateTimePickerCtrlBase wxDateTimePickerCtrl; +#endif + +#endif // wxUSE_DATEPICKCTRL || wxUSE_TIMEPICKCTRL + +#endif // _WX_DATETIME_CTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/dc.h b/Externals/wxWidgets3/include/wx/dc.h index 974666f5d2..2e66988c37 100644 --- a/Externals/wxWidgets3/include/wx/dc.h +++ b/Externals/wxWidgets3/include/wx/dc.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 05/25/99 -// RCS-ID: $Id: dc.h 67063 2011-02-27 12:48:13Z VZ $ +// RCS-ID: $Id: dc.h 68935 2011-08-27 23:26:53Z RD $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -30,6 +30,7 @@ #include "wx/math.h" #include "wx/image.h" #include "wx/region.h" +#include "wx/affinematrix2d.h" #define wxUSE_NEW_DC 1 @@ -42,6 +43,10 @@ class WXDLLIMPEXP_FWD_CORE wxMemoryDC; class WXDLLIMPEXP_FWD_CORE wxPrinterDC; class WXDLLIMPEXP_FWD_CORE wxPrintData; +#if wxUSE_GRAPHICS_CONTEXT +class WXDLLIMPEXP_FWD_CORE wxGraphicsContext; +#endif + // Logical ops enum wxRasterOperationMode { @@ -470,7 +475,7 @@ public: } virtual void SetLogicalScale(double x, double y); - virtual void GetLogicalScale(double *x, double *y) + virtual void GetLogicalScale(double *x, double *y) const { if ( x ) *x = m_logicalScaleX; if ( y ) *y = m_logicalScaleY; @@ -490,6 +495,20 @@ public: if ( y ) *y = m_deviceOriginY; } +#if wxUSE_DC_TRANSFORM_MATRIX + // Transform matrix support is not available in most ports right now + // (currently only wxMSW provides it) so do nothing in these methods by + // default. + virtual bool CanUseTransformMatrix() const + { return false; } + virtual bool SetTransformMatrix(const wxAffineMatrix2D& WXUNUSED(matrix)) + { return false; } + virtual wxAffineMatrix2D GetTransformMatrix() const + { return wxAffineMatrix2D(); } + virtual void ResetTransformMatrix() + { } +#endif // wxUSE_DC_TRANSFORM_MATRIX + virtual void SetDeviceLocalOrigin( wxCoord x, wxCoord y ); virtual void ComputeScaleAndOrigin(); @@ -497,6 +516,19 @@ public: // this needs to overidden if the axis is inverted virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); +#ifdef __WXMSW__ + // Native Windows functions using the underlying HDC don't honour GDI+ + // transformations which may be applied to it. Using this function we can + // transform the coordinates manually before passing them to such functions + // (as in e.g. wxRendererMSW code). It doesn't do anything if this is not a + // wxGCDC. + virtual wxRect MSWApplyGDIPlusTransform(const wxRect& r) const + { + return r; + } +#endif // __WXMSW__ + + // --------------------------------------------------------- // the actual drawing API @@ -612,6 +644,13 @@ public: virtual int GetResolution() const { return -1; } +#if wxUSE_GRAPHICS_CONTEXT + virtual wxGraphicsContext* GetGraphicsContext() const + { return NULL; } + virtual void SetGraphicsContext( wxGraphicsContext* WXUNUSED(ctx) ) + {} +#endif + private: wxDC *m_owner; @@ -981,7 +1020,7 @@ public: void SetLogicalScale(double x, double y) { m_pimpl->SetLogicalScale( x, y ); } - void GetLogicalScale(double *x, double *y) + void GetLogicalScale(double *x, double *y) const { m_pimpl->GetLogicalScale( x, y ); } void SetLogicalOrigin(wxCoord x, wxCoord y) @@ -1001,6 +1040,20 @@ public: void SetAxisOrientation(bool xLeftRight, bool yBottomUp) { m_pimpl->SetAxisOrientation(xLeftRight, yBottomUp); } +#if wxUSE_DC_TRANSFORM_MATRIX + bool CanUseTransformMatrix() const + { return m_pimpl->CanUseTransformMatrix(); } + + bool SetTransformMatrix(const wxAffineMatrix2D &matrix) + { return m_pimpl->SetTransformMatrix(matrix); } + + wxAffineMatrix2D GetTransformMatrix() const + { return m_pimpl->GetTransformMatrix(); } + + void ResetTransformMatrix() + { m_pimpl->ResetTransformMatrix(); } +#endif // wxUSE_DC_TRANSFORM_MATRIX + // mostly internal void SetDeviceLocalOrigin( wxCoord x, wxCoord y ) { m_pimpl->SetDeviceLocalOrigin( x, y ); } @@ -1287,6 +1340,17 @@ public: TempHDC GetTempHDC() { return TempHDC(*this); } #endif // __WXMSW__ +#if wxUSE_GRAPHICS_CONTEXT + virtual wxGraphicsContext* GetGraphicsContext() const + { + return m_pimpl->GetGraphicsContext(); + } + virtual void SetGraphicsContext( wxGraphicsContext* ctx ) + { + m_pimpl->SetGraphicsContext(ctx); + } +#endif + protected: // ctor takes ownership of the pointer wxDC(wxDCImpl *pimpl) : m_pimpl(pimpl) { } @@ -1315,13 +1379,13 @@ public: ~wxDCTextColourChanger() { - if ( m_colFgOld.Ok() ) + if ( m_colFgOld.IsOk() ) m_dc.SetTextForeground(m_colFgOld); } void Set(const wxColour& col) { - if ( !m_colFgOld.Ok() ) + if ( !m_colFgOld.IsOk() ) m_colFgOld = m_dc.GetTextForeground(); m_dc.SetTextForeground(col); } @@ -1349,7 +1413,7 @@ public: ~wxDCPenChanger() { - if ( m_penOld.Ok() ) + if ( m_penOld.IsOk() ) m_dc.SetPen(m_penOld); } @@ -1376,7 +1440,7 @@ public: ~wxDCBrushChanger() { - if ( m_brushOld.Ok() ) + if ( m_brushOld.IsOk() ) m_dc.SetBrush(m_brushOld); } @@ -1432,14 +1496,14 @@ public: void Set(const wxFont& font) { - if ( !m_fontOld.Ok() ) + if ( !m_fontOld.IsOk() ) m_fontOld = m_dc.GetFont(); m_dc.SetFont(font); } ~wxDCFontChanger() { - if ( m_fontOld.Ok() ) + if ( m_fontOld.IsOk() ) m_dc.SetFont(m_fontOld); } diff --git a/Externals/wxWidgets3/include/wx/dcgraph.h b/Externals/wxWidgets3/include/wx/dcgraph.h index 071c1d68b3..b636f239de 100644 --- a/Externals/wxWidgets3/include/wx/dcgraph.h +++ b/Externals/wxWidgets3/include/wx/dcgraph.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Stefan Csomor -// RCS-ID: $Id: dcgraph.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: dcgraph.h 68935 2011-08-27 23:26:53Z RD $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -29,10 +29,15 @@ public: #if wxUSE_PRINTING_ARCHITECTURE wxGCDC( const wxPrinterDC& dc ); #endif +#if defined(__WXMSW__) && wxUSE_ENH_METAFILE + wxGCDC( const wxEnhMetaFileDC& dc ); +#endif + wxGCDC(wxGraphicsContext* context); + wxGCDC(); virtual ~wxGCDC(); - wxGraphicsContext* GetGraphicsContext(); + wxGraphicsContext* GetGraphicsContext() const; void SetGraphicsContext( wxGraphicsContext* ctx ); #ifdef __WXMSW__ @@ -55,6 +60,9 @@ public: wxGCDCImpl( wxDC *owner, const wxMemoryDC& dc ); #if wxUSE_PRINTING_ARCHITECTURE wxGCDCImpl( wxDC *owner, const wxPrinterDC& dc ); +#endif +#if defined(__WXMSW__) && wxUSE_ENH_METAFILE + wxGCDCImpl( wxDC *owner, const wxEnhMetaFileDC& dc ); #endif wxGCDCImpl( wxDC *owner ); @@ -103,7 +111,7 @@ public: virtual void ComputeScaleAndOrigin(); - wxGraphicsContext* GetGraphicsContext() { return m_graphicContext; } + wxGraphicsContext* GetGraphicsContext() const { return m_graphicContext; } virtual void SetGraphicsContext( wxGraphicsContext* ctx ); // the true implementations @@ -193,6 +201,10 @@ public: virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const; +#ifdef __WXMSW__ + virtual wxRect MSWApplyGDIPlusTransform(const wxRect& r) const; +#endif // __WXMSW__ + protected: // scaling variables bool m_logicalFunctionSupported; diff --git a/Externals/wxWidgets3/include/wx/dde.h b/Externals/wxWidgets3/include/wx/dde.h index a39678c697..1c15a1f3ce 100644 --- a/Externals/wxWidgets3/include/wx/dde.h +++ b/Externals/wxWidgets3/include/wx/dde.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: dde.h 47254 2007-07-09 10:09:52Z VS $ +// RCS-ID: $Id: dde.h 70808 2012-03-04 20:31:42Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -22,10 +22,10 @@ WX_DECLARE_USER_EXPORTED_LIST(wxDDEClient, wxDDEClientList, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_LIST(wxDDEServer, wxDDEServerList, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_LIST(wxDDEConnection, wxDDEConnectionList, WXDLLIMPEXP_BASE); -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/dde.h" #else - #error DDE is only supported on MSW + #error DDE is only supported under Windows #endif #endif diff --git a/Externals/wxWidgets3/include/wx/debug.h b/Externals/wxWidgets3/include/wx/debug.h index f66cf4681e..589ae85f67 100644 --- a/Externals/wxWidgets3/include/wx/debug.h +++ b/Externals/wxWidgets3/include/wx/debug.h @@ -3,7 +3,7 @@ // Purpose: Misc debug functions and macros // Author: Vadim Zeitlin // Created: 29/01/98 -// RCS-ID: $Id: debug.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: debug.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 1998-2009 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -11,7 +11,7 @@ #ifndef _WX_DEBUG_H_ #define _WX_DEBUG_H_ -#if !defined(__WXPALMOS5__) && !defined(__WXWINCE__) +#if !defined(__WXWINCE__) #include #endif // systems without assert.h @@ -162,7 +162,7 @@ inline void wxDisableAsserts() { wxSetAssertHandler(NULL); } /* wxOnAssert() is used by the debugging macros defined below. Different - overloads are needed because these macros can be used with or without _T(). + overloads are needed because these macros can be used with or without wxT(). All of them are implemented in src/common/appcmn.cpp and unconditionally call wxTheAssertHandler so the caller must check that it is non-NULL @@ -172,7 +172,7 @@ inline void wxDisableAsserts() { wxSetAssertHandler(NULL); } #if wxUSE_UNICODE // these overloads are the ones typically used by debugging macros: we have to -// provide wxChar* msg version because it's common to use _T() in the macros +// provide wxChar* msg version because it's common to use wxT() in the macros // and finally, we can't use const wx(char)* msg = NULL, because that would // be ambiguous // @@ -299,6 +299,13 @@ extern void WXDLLIMPEXP_BASE wxOnAssert(const char *file, #define wxASSERT_LEVEL_2(cond) #endif +// This is simply a wrapper for the standard abort() which is not available +// under all platforms. +// +// It isn't really debug-related but there doesn't seem to be any better place +// for it, so declare it here and define it in appbase.cpp, together with +// wxTrap(). +extern void WXDLLIMPEXP_BASE wxAbort(); /* wxCHECK macros always check their conditions, setting debug level to 0 only diff --git a/Externals/wxWidgets3/include/wx/defs.h b/Externals/wxWidgets3/include/wx/defs.h index 42fa627b78..bb6afaa107 100644 --- a/Externals/wxWidgets3/include/wx/defs.h +++ b/Externals/wxWidgets3/include/wx/defs.h @@ -4,7 +4,7 @@ * Author: Julian Smart and others * Modified by: Ryan Norton (Converted to C) * Created: 01/02/97 - * RCS-ID: $Id: defs.h 66711 2011-01-19 10:47:49Z VZ $ + * RCS-ID: $Id: defs.h 70353 2012-01-15 14:46:41Z VZ $ * Copyright: (c) Julian Smart * Licence: wxWindows licence */ @@ -14,8 +14,10 @@ #ifndef _WX_DEFS_H_ #define _WX_DEFS_H_ -// NOTE: this symbol will be replaced with "WXWIN_COMPATIBILITY_3_0" as soon -// as the development branch for 3.1 is created +/* + NOTE: this symbol will be replaced with "WXWIN_COMPATIBILITY_3_0" as soon + as the development branch for 3.1 is created + */ #define FUTURE_WXWIN_COMPATIBILITY_3_0 1 #define wxDEPRECATED_FUTURE( x ) x @@ -29,11 +31,8 @@ /* Make sure the environment is set correctly */ # if defined(__WXMSW__) && defined(__X__) # error "Target can't be both X and Windows" -# elif defined(__WXMSW__) && defined(__PALMOS__) -# error "Target can't be both PalmOS and Windows" # elif !defined(__WXMOTIF__) && \ !defined(__WXMSW__) && \ - !defined(__WXPALMOS__)&& \ !defined(__WXGTK__) && \ !defined(__WXPM__) && \ !defined(__WXOSX_CARBON__) && \ @@ -41,7 +40,6 @@ !defined(__WXOSX_IPHONE__) && \ !defined(__WXCOCOA__) && \ !defined(__X__) && \ - !defined(__WXMGL__) && \ !defined(__WXDFB__) && \ !defined(__WXX11__) && \ wxUSE_GUI @@ -79,8 +77,10 @@ # pragma warning(disable:4514) /* unreferenced inline func has been removed */ # pragma warning(disable:4710) /* function not inlined */ - // TODO: this warning should really be enabled as it can be genuinely - // useful, check where does it occur in wxWidgets + /* + TODO: this warning should really be enabled as it can be genuinely + useful, check where does it occur in wxWidgets + */ #pragma warning(disable: 4127) /* conditional expression is constant */ /* There are too many false positivies for this one, particularly when @@ -89,6 +89,16 @@ class 'bar'" */ # pragma warning(disable:4251) + /* + This is a similar warning which occurs when deriving from standard + containers. MSDN even mentions that it can be ignored in this case + (albeit only in debug build while the warning is the same in release + too and seems equally harmless). + */ +#if wxUSE_STD_CONTAINERS +# pragma warning(disable:4275) +#endif /* wxUSE_STD_CONTAINERS */ + # ifdef __VISUALC5__ /* For VC++ 5.0 for release mode, the warning 'C4702: unreachable code */ /* is buggy, and occurs for code that does actually get executed */ @@ -115,7 +125,7 @@ */ #ifdef __VISUALC6__ #pragma warning(disable: 4284) - #endif // VC6 + #endif /* VC6 */ /* When compiling with VC++ 7 /Wp64 option we get thousands of warnings for @@ -388,15 +398,15 @@ typedef short int WXTYPE; #ifndef HAVE_WOSTREAM - // Mingw <= 3.4 and all versions of Cygwin as well as any gcc version (so - // far) targeting PalmOS don't have std::wostream - #if defined(__PALMOS__) || \ - (defined(__MINGW32__) && !wxCHECK_GCC_VERSION(4, 0)) || \ + /* + Mingw <= 3.4 and all versions of Cygwin don't have std::wostream + */ + #if (defined(__MINGW32__) && !wxCHECK_GCC_VERSION(4, 0)) || \ defined(__CYGWIN__) #define wxNO_WOSTREAM #endif - // VC++ doesn't have it in the old iostream library + /* VC++ doesn't have it in the old iostream library */ #if defined(__VISUALC__) && wxUSE_IOSTREAMH #define wxNO_WOSTREAM #endif @@ -408,12 +418,12 @@ typedef short int WXTYPE; #undef wxNO_WOSTREAM #endif /* HAVE_WOSTREAM */ -// ---------------------------------------------------------------------------- -// other C++ features -// ---------------------------------------------------------------------------- +/* ---------------------------------------------------------------------------- */ +/* other C++ features */ +/* ---------------------------------------------------------------------------- */ #ifndef HAVE_PARTIAL_SPECIALIZATION - // be optimistic by default + /* be optimistic by default */ #define HAVE_PARTIAL_SPECIALIZATION #endif @@ -421,17 +431,17 @@ typedef short int WXTYPE; #if __VISUALC__ < 1310 #undef HAVE_PARTIAL_SPECIALIZATION #endif -#endif // __VISUALC__ +#endif /* __VISUALC__ */ #ifndef HAVE_TEMPLATE_OVERLOAD_RESOLUTION - // assume the compiler can use type or const expressions as template - // arguments if it supports partial specialization -- except if it's a - // Borland one which can't + /* assume the compiler can use type or const expressions as template + arguments if it supports partial specialization -- except if it's a + Borland one which can't */ #if defined(HAVE_PARTIAL_SPECIALIZATION) && !defined(__BORLANDC__) #define HAVE_TEMPLATE_OVERLOAD_RESOLUTION - #endif // __BORLANDC__ -#endif // !defined(HAVE_TEMPLATE_OVERLOAD_RESOLUTION) + #endif /* (HAVE_PARTIAL_SPECIALIZATION) && !defined(__BORLANDC__) */ +#endif /* !defined(HAVE_TEMPLATE_OVERLOAD_RESOLUTION) */ /* ---------------------------------------------------------------------------- */ /* portable calling conventions macros */ @@ -513,15 +523,14 @@ typedef short int WXTYPE; #define wxDEPRECATED(x) x #endif -/* - explicitly specifying inline allows gcc < 3.4 to - handle the deprecation attribute even in the constructor. - doesn't seem to work on Apple's gcc 4.0.1 unless using -O0 -*/ -#if wxCHECK_GCC_VERSION(3, 4) || defined( __DARWIN__ ) - #define wxDEPRECATED_CONSTRUCTOR(x) x -#else +#if defined(__GNUC__) && !wxCHECK_GCC_VERSION(3, 4) + /* + We need to add dummy "inline" to allow gcc < 3.4 to handle the + deprecation attribute on the constructors. + */ #define wxDEPRECATED_CONSTRUCTOR(x) wxDEPRECATED( inline x) +#else + #define wxDEPRECATED_CONSTRUCTOR(x) wxDEPRECATED(x) #endif /* @@ -564,7 +573,7 @@ typedef short int WXTYPE; /* NULL declaration: it must be defined as 0 for C++ programs (in particular, */ /* it must not be defined as "(void *)0" which is standard for C but completely */ /* breaks C++ code) */ -#if !defined(__HANDHELDPC__) && !defined(__PALMOS__) +#if !defined(__HANDHELDPC__) #include #endif @@ -767,7 +776,7 @@ enum { wxDefaultCoord = -1 }; /* define fixed length types */ /* ---------------------------------------------------------------------------- */ -#if defined(__WXPALMOS__) || defined(__MINGW32__) +#if defined(__MINGW32__) #if !defined(__MWERKS__) #include #endif @@ -819,19 +828,7 @@ typedef wxUint16 wxWord; */ /* 32bit */ -#ifdef __PALMOS__ - typedef int wxInt32; - typedef unsigned int wxUint32; - #define SIZEOF_INT 4 - #define SIZEOF_LONG 4 - #define SIZEOF_WCHAR_T 2 - #define SIZEOF_SIZE_T 4 - #ifdef __WXPALMOS6__ - #define wxSIZE_T_IS_UINT - #endif - #define SIZEOF_VOID_P 4 - #define SIZEOF_SIZE_T 4 -#elif defined(__WINDOWS__) +#if defined(__WINDOWS__) #if defined(__WIN32__) typedef int wxInt32; typedef unsigned int wxUint32; @@ -1018,14 +1015,6 @@ typedef wxUint32 wxDword; #error "The 64 bit integer support in CodeWarrior has been disabled." #error "See the documentation on the 'longlong' pragma." #endif -#elif defined(__WXPALMOS__) - #if defined(__WXPALMOS6__) - #define wxLongLong_t int64_t - #else - #define wxLongLong_t long long - #endif /* __WXPALMOS6__ */ - #define wxLongLongSuffix ll - #define wxLongLongFmtSpec "ll" #elif defined(__VISAGECPP__) && __IBMCPP__ >= 400 #define wxLongLong_t long long #elif (defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG >= 8) || \ @@ -1045,16 +1034,7 @@ typedef wxUint32 wxDword; #ifdef wxLongLong_t - - #ifdef __WXPALMOS__ - #if defined(__WXPALMOS6__) - #define wxULongLong_t uint64_t - #else - #define wxULongLong_t unsigned long long - #endif /* __WXPALMOS6__ */ - #else - #define wxULongLong_t unsigned wxLongLong_t - #endif + #define wxULongLong_t unsigned wxLongLong_t /* wxLL() and wxULL() macros allow to define 64 bit constants in a @@ -1064,8 +1044,10 @@ typedef wxUint32 wxDword; #define wxLL(x) wxCONCAT(x, wxLongLongSuffix) #define wxULL(x) wxCONCAT(x, wxCONCAT(u, wxLongLongSuffix)) #else - // Currently only Borland compiler has broken concatenation operator - // and this compiler is known to use [u]i64 suffix. + /* + Currently only Borland compiler has broken concatenation operator + and this compiler is known to use [u]i64 suffix. + */ #define wxLL(x) wxAPPEND_i64(x) #define wxULL(x) wxAPPEND_ui64(x) #endif @@ -1102,8 +1084,6 @@ typedef wxUint32 wxDword; #if defined(_SSIZE_T_) || defined(_SSIZE_T_DEFINED) #define HAVE_SSIZE_T #endif -#elif defined(__PALMOS__) - #define HAVE_SSIZE_T #elif wxCHECK_WATCOM_VERSION(1,4) #define HAVE_SSIZE_T #endif @@ -1114,7 +1094,7 @@ typedef wxUint32 wxDword; #ifdef __UNIX__ #include #endif -#else // !HAVE_SSIZE_T +#else /* !HAVE_SSIZE_T */ #if SIZEOF_SIZE_T == 4 typedef wxInt32 ssize_t; #elif SIZEOF_SIZE_T == 8 @@ -1127,11 +1107,13 @@ typedef wxUint32 wxDword; #define HAVE_SSIZE_T #endif -// we can't rely on Windows _W64 being defined as windows.h may not be included -// so define our own equivalent: this should be used with types like WXLPARAM -// or WXWPARAM which are 64 bit under Win64 to avoid warnings each time we cast -// it to a pointer or a handle (which results in hundreds of warnings as Win32 -// API often passes pointers in them) +/* + We can't rely on Windows _W64 being defined as windows.h may not be + included so define our own equivalent: this should be used with types + like WXLPARAM or WXWPARAM which are 64 bit under Win64 to avoid warnings + each time we cast it to a pointer or a handle (which results in hundreds + of warnings as Win32 API often passes pointers in them) + */ #if wxCHECK_VISUALC_VERSION(7) #define wxW64 __w64 #else @@ -1142,7 +1124,13 @@ typedef wxUint32 wxDword; Define signed and unsigned integral types big enough to contain all of long, size_t and void *. */ -#if SIZEOF_SIZE_T >= SIZEOF_VOID_P +#if SIZEOF_LONG >= SIZEOF_VOID_P + /* + Normal case when long is the largest integral type. + */ + typedef long wxIntPtr; + typedef unsigned long wxUIntPtr; +#elif SIZEOF_SIZE_T >= SIZEOF_VOID_P /* Win64 case: size_t is the only integral type big enough for "void *". @@ -1152,12 +1140,6 @@ typedef wxUint32 wxDword; */ typedef wxW64 ssize_t wxIntPtr; typedef size_t wxUIntPtr; -#elif SIZEOF_LONG >= SIZEOF_VOID_P - /* - Normal case when long is the largest integral type. - */ - typedef long wxIntPtr; - typedef unsigned long wxUIntPtr; #else /* This should never happen for the current architectures but if you're @@ -1447,12 +1429,12 @@ typedef double wxDouble; /* ---------------------------------------------------------------------------- */ #if defined(__GNUC__) && !wxCHECK_GCC_VERSION( 3, 4 ) - // GCC <= 3.4 has buggy template support + /* GCC <= 3.4 has buggy template support */ # define wxUSE_MEMBER_TEMPLATES 0 #endif #if defined(_MSC_VER) && _MSC_VER <= 1200 - // MSVC <= 6.0 has buggy template support + /* MSVC <= 6.0 has buggy template support */ # define wxUSE_MEMBER_TEMPLATES 0 # define wxUSE_FUNC_TEMPLATE_POINTER 0 #endif @@ -1532,9 +1514,11 @@ enum wxDirection enum wxAlignment { - // 0 is a valid wxAlignment value (both wxALIGN_LEFT and wxALIGN_TOP use - // it) so define a symbolic name for an invalid alignment value which can - // be assumed to be different from anything else + /* + 0 is a valid wxAlignment value (both wxALIGN_LEFT and wxALIGN_TOP + use it) so define a symbolic name for an invalid alignment value + which can be assumed to be different from anything else + */ wxALIGN_INVALID = -1, wxALIGN_NOT = 0x0000, @@ -1557,10 +1541,12 @@ enum wxAlignment /* misc. flags for wxSizer items */ enum wxSizerFlagBits { - // wxADJUST_MINSIZE doesn't do anything any more but we still define it for - // compatibility. Notice that it may be also predefined (as 0, hopefully) - // in the user code in order to use it even in !WXWIN_COMPATIBILITY_2_8 - // builds so don't redefine it in such case. + /* + wxADJUST_MINSIZE doesn't do anything any more but we still define + it for compatibility. Notice that it may be also predefined (as 0, + hopefully) in the user code in order to use it even in + !WXWIN_COMPATIBILITY_2_8 builds so don't redefine it in such case. + */ #if WXWIN_COMPATIBILITY_2_8 && !defined(wxADJUST_MINSIZE) wxADJUST_MINSIZE = 0, #endif @@ -1848,14 +1834,12 @@ enum wxBorder /* Old names for compatibility */ #define wxRA_HORIZONTAL wxHORIZONTAL #define wxRA_VERTICAL wxVERTICAL -#define wxRA_USE_CHECKBOX 0x0010 /* alternative native subcontrols (wxPalmOS) */ /* * wxRadioButton style flag */ #define wxRB_GROUP 0x0004 #define wxRB_SINGLE 0x0008 -#define wxRB_USE_CHECKBOX 0x0010 /* alternative native control (wxPalmOS) */ /* * wxScrollBar flags @@ -1929,12 +1913,12 @@ enum wxBorder #define wxICON_STOP wxICON_HAND #define wxICON_ASTERISK wxICON_INFORMATION -#define wxFORWARD 0x00001000 -#define wxBACKWARD 0x00002000 -#define wxRESET 0x00004000 -#define wxHELP 0x00008000 -#define wxMORE 0x00010000 -#define wxSETUP 0x00020000 +#define wxHELP 0x00001000 +#define wxFORWARD 0x00002000 +#define wxBACKWARD 0x00004000 +#define wxRESET 0x00008000 +#define wxMORE 0x00010000 +#define wxSETUP 0x00020000 #define wxICON_NONE 0x00040000 #define wxICON_MASK \ @@ -1945,29 +1929,37 @@ enum wxBorder */ enum wxBackgroundStyle { - // background is erased in the EVT_ERASE_BACKGROUND handler or using the - // system default background if no such handler is defined (this is the - // default style) + /* + background is erased in the EVT_ERASE_BACKGROUND handler or using + the system default background if no such handler is defined (this + is the default style) + */ wxBG_STYLE_ERASE, - // background is erased by the system, no EVT_ERASE_BACKGROUND event is - // generated at all + /* + background is erased by the system, no EVT_ERASE_BACKGROUND event + is generated at all + */ wxBG_STYLE_SYSTEM, - // background is erased in EVT_PAINT handler and not erased at all before - // it, this should be used if the paint handler paints over the entire - // window to avoid flicker + /* + background is erased in EVT_PAINT handler and not erased at all + before it, this should be used if the paint handler paints over + the entire window to avoid flicker + */ wxBG_STYLE_PAINT, - // this is a Mac-only style, don't use in portable code + /* this is a Mac-only style, don't use in portable code */ wxBG_STYLE_TRANSPARENT, - // this style is deprecated and doesn't do anything, don't use + /* this style is deprecated and doesn't do anything, don't use */ wxBG_STYLE_COLOUR, - // this style is deprecated and is synonymous with wxBG_STYLE_PAINT, use - // the new name + /* + this style is deprecated and is synonymous with + wxBG_STYLE_PAINT, use the new name + */ wxBG_STYLE_CUSTOM = wxBG_STYLE_PAINT }; @@ -2203,6 +2195,18 @@ enum wxItemKind wxITEM_MAX }; +/* + * The possible states of a 3-state checkbox (Compatible + * with the 2-state checkbox). + */ +enum wxCheckBoxState +{ + wxCHK_UNCHECKED, + wxCHK_CHECKED, + wxCHK_UNDETERMINED /* 3-state checkbox only */ +}; + + /* hit test results */ enum wxHitTest { @@ -2297,7 +2301,7 @@ enum wxDeprecatedGUIConstants wxTRANSPARENT, /* Brush & Pen Stippling. Note that a stippled pen cannot be dashed!! */ - /* Note also that stippling a Pen IS meaningfull, because a Line is */ + /* Note also that stippling a Pen IS meaningful, because a Line is */ wxSTIPPLE_MASK_OPAQUE, /* mask is used for blitting monochrome using text fore and back ground colors */ wxSTIPPLE_MASK, /* mask is used for masking areas in the stipple bitmap (TO DO) */ /* drawn with a Pen, and without any Brush -- and it can be stippled. */ @@ -2354,7 +2358,34 @@ enum wxKeyCode { WXK_NONE = 0, - WXK_BACK = 8, // backspace + WXK_CONTROL_A = 1, + WXK_CONTROL_B, + WXK_CONTROL_C, + WXK_CONTROL_D, + WXK_CONTROL_E, + WXK_CONTROL_F, + WXK_CONTROL_G, + WXK_CONTROL_H, + WXK_CONTROL_I, + WXK_CONTROL_J, + WXK_CONTROL_K, + WXK_CONTROL_L, + WXK_CONTROL_M, + WXK_CONTROL_N, + WXK_CONTROL_O, + WXK_CONTROL_P, + WXK_CONTROL_Q, + WXK_CONTROL_R, + WXK_CONTROL_S, + WXK_CONTROL_T, + WXK_CONTROL_U, + WXK_CONTROL_V, + WXK_CONTROL_W, + WXK_CONTROL_X, + WXK_CONTROL_Y, + WXK_CONTROL_Z, + + WXK_BACK = 8, /* backspace */ WXK_TAB = 9, WXK_RETURN = 13, WXK_ESCAPE = 27, @@ -2477,7 +2508,12 @@ enum wxKeyCode WXK_WINDOWS_LEFT, WXK_WINDOWS_RIGHT, WXK_WINDOWS_MENU , - WXK_COMMAND, +#ifdef __WXOSX__ + WXK_RAW_CONTROL, +#else + WXK_RAW_CONTROL = WXK_CONTROL, +#endif + WXK_COMMAND = WXK_CONTROL, /* Hardware-specific buttons */ WXK_SPECIAL1 = 193, @@ -2513,10 +2549,11 @@ enum wxKeyModifier wxMOD_META = 0x0008, wxMOD_WIN = wxMOD_META, #if defined(__WXMAC__) || defined(__WXCOCOA__) - wxMOD_CMD = wxMOD_META, + wxMOD_RAW_CONTROL = 0x0010, #else - wxMOD_CMD = wxMOD_CONTROL, + wxMOD_RAW_CONTROL = wxMOD_CONTROL, #endif + wxMOD_CMD = wxMOD_CONTROL, wxMOD_ALL = 0xffff }; @@ -2733,7 +2770,7 @@ typedef int (* LINKAGEMODE wxListIterateFunction)(void *current); #endif #if defined(__CYGWIN__) && defined(__WXMSW__) -# if wxUSE_STL || defined(wxUSE_STD_STRING) +# if wxUSE_STD_CONTAINERS || defined(wxUSE_STD_STRING) /* NASTY HACK because the gethostname in sys/unistd.h which the gnu stl includes and wx builds with by default clash with each other @@ -2786,7 +2823,7 @@ typedef void* WXDisplay; typedef const void * CFTypeRef; -// typedef const struct __CFString * CFStringRef; +/* typedef const struct __CFString * CFStringRef; */ #define DECLARE_WXOSX_OPAQUE_CFREF( name ) typedef struct __##name* name##Ref; #define DECLARE_WXOSX_OPAQUE_CONST_CFREF( name ) typedef const struct __##name* name##Ref; @@ -2964,42 +3001,7 @@ typedef WX_NSString* WXGLPixelFormat; #endif -#endif // __WXMAC__ - -#if defined(__WXPALMOS__) - -typedef void * WXHWND; -typedef void * WXHANDLE; -typedef void * WXHICON; -typedef void * WXHFONT; -typedef void * WXHMENU; -typedef void * WXHPEN; -typedef void * WXHBRUSH; -typedef void * WXHPALETTE; -typedef void * WXHCURSOR; -typedef void * WXHRGN; -typedef void * WXHACCEL; -typedef void * WXHINSTANCE; -typedef void * WXHBITMAP; -typedef void * WXHIMAGELIST; -typedef void * WXHGLOBAL; -typedef void * WXHDC; -typedef unsigned int WXUINT; -typedef unsigned long WXDWORD; -typedef unsigned short WXWORD; - -typedef unsigned long WXCOLORREF; -typedef struct tagMSG WXMSG; - -typedef WXHWND WXWINHANDLE; /* WinHandle of PalmOS */ -typedef WXWINHANDLE WXWidget; - -typedef void * WXFORMPTR; -typedef void * WXEVENTPTR; -typedef void * WXRECTANGLEPTR; - -#endif /* __WXPALMOS__ */ - +#endif /* __WXMAC__ */ /* ABX: check __WIN32__ instead of __WXMSW__ for the same MSWBase in any Win32 port */ #if defined(__WIN32__) @@ -3208,53 +3210,45 @@ typedef long WXPixel; /* safety catch in src/motif/colour.cpp */ #ifdef __WXGTK__ /* Stand-ins for GLIB types */ -typedef char gchar; -typedef signed char gint8; -typedef int gint; -typedef unsigned guint; -typedef unsigned long gulong; -typedef void* gpointer; typedef struct _GSList GSList; /* Stand-ins for GDK types */ typedef struct _GdkColor GdkColor; -typedef struct _GdkColormap GdkColormap; -typedef struct _GdkFont GdkFont; -typedef struct _GdkGC GdkGC; -typedef struct _GdkVisual GdkVisual; - -#ifdef __WXGTK20__ -typedef struct _GdkAtom *GdkAtom; -typedef struct _GdkDrawable GdkWindow; -typedef struct _GdkDrawable GdkBitmap; -typedef struct _GdkDrawable GdkPixmap; -#else /* GTK+ 1.2 */ -typedef gulong GdkAtom; -typedef struct _GdkWindow GdkWindow; -typedef struct _GdkWindow GdkBitmap; -typedef struct _GdkWindow GdkPixmap; -#endif /* GTK+ 1.2/2.0 */ - typedef struct _GdkCursor GdkCursor; -typedef struct _GdkRegion GdkRegion; typedef struct _GdkDragContext GdkDragContext; -#ifdef HAVE_XIM -typedef struct _GdkIC GdkIC; -typedef struct _GdkICAttr GdkICAttr; +#if defined(__WXGTK20__) + typedef struct _GdkAtom* GdkAtom; +#else + typedef unsigned long GdkAtom; +#endif + +#if !defined(__WXGTK30__) + typedef struct _GdkColormap GdkColormap; + typedef struct _GdkFont GdkFont; + typedef struct _GdkGC GdkGC; + typedef struct _GdkRegion GdkRegion; +#endif + +#if defined(__WXGTK30__) + typedef struct _GdkWindow GdkWindow; +#elif defined(__WXGTK20__) + typedef struct _GdkDrawable GdkWindow; + typedef struct _GdkDrawable GdkPixmap; +#else + typedef struct _GdkWindow GdkWindow; + typedef struct _GdkWindow GdkBitmap; + typedef struct _GdkWindow GdkPixmap; #endif /* Stand-ins for GTK types */ typedef struct _GtkWidget GtkWidget; typedef struct _GtkRcStyle GtkRcStyle; typedef struct _GtkAdjustment GtkAdjustment; -typedef struct _GtkList GtkList; typedef struct _GtkToolbar GtkToolbar; -typedef struct _GtkTooltips GtkTooltips; typedef struct _GtkNotebook GtkNotebook; typedef struct _GtkNotebookPage GtkNotebookPage; typedef struct _GtkAccelGroup GtkAccelGroup; -typedef struct _GtkItemFactory GtkItemFactory; typedef struct _GtkSelectionData GtkSelectionData; typedef struct _GtkTextBuffer GtkTextBuffer; typedef struct _GtkRange GtkRange; @@ -3282,10 +3276,6 @@ typedef struct _PangoLayout PangoLayout; typedef struct _PangoFontDescription PangoFontDescription; #endif -#ifdef __WXMGL__ -typedef struct window_t *WXWidget; -#endif /* MGL */ - #ifdef __WXDFB__ /* DirectFB doesn't have the concept of non-TLW window, so use something arbitrary */ @@ -3328,7 +3318,7 @@ typedef const void* WXWidget; private: \ classname& operator=(const classname&) -// deprecated variants _not_ requiring a semicolon after them +/* deprecated variants _not_ requiring a semicolon after them */ #define DECLARE_NO_COPY_CLASS(classname) \ wxDECLARE_NO_COPY_CLASS(classname); #define DECLARE_NO_COPY_TEMPLATE_CLASS(classname, arg) \ diff --git a/Externals/wxWidgets3/include/wx/dialog.h b/Externals/wxWidgets3/include/wx/dialog.h index 67191522a6..3ce0c53ccc 100644 --- a/Externals/wxWidgets3/include/wx/dialog.h +++ b/Externals/wxWidgets3/include/wx/dialog.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29.06.99 -// RCS-ID: $Id: dialog.h 66087 2010-11-10 13:51:57Z VZ $ +// RCS-ID: $Id: dialog.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -26,7 +26,7 @@ class wxTextSizerWrapper; // Also see the bit summary table in wx/toplevel.h. -#define wxDIALOG_NO_PARENT 0x0100 // Don't make owned by apps top window +#define wxDIALOG_NO_PARENT 0x00000020 // Don't make owned by apps top window #ifdef __WXWINCE__ #define wxDEFAULT_DIALOG_STYLE (wxCAPTION | wxMAXIMIZE | wxCLOSE_BOX | wxNO_BORDER) @@ -350,9 +350,7 @@ public: #if defined(__WXUNIVERSAL__) && !defined(__WXMICROWIN__) #include "wx/univ/dialog.h" #else - #if defined(__WXPALMOS__) - #include "wx/palmos/dialog.h" - #elif defined(__WXMSW__) + #if defined(__WXMSW__) #include "wx/msw/dialog.h" #elif defined(__WXMOTIF__) #include "wx/motif/dialog.h" @@ -394,5 +392,8 @@ typedef void (wxEvtHandler::*wxWindowModalDialogEventFunction)(wxWindowModalDial #define wxWindowModalDialogEventHandler(func) \ wxEVENT_HANDLER_CAST(wxWindowModalDialogEventFunction, func) +#define EVT_WINDOW_MODAL_DIALOG_CLOSED(winid, func) \ + wx__DECLARE_EVT1(wxEVT_WINDOW_MODAL_DIALOG_CLOSED, winid, wxWindowModalDialogEventHandler(func)) + #endif // _WX_DIALOG_H_BASE_ diff --git a/Externals/wxWidgets3/include/wx/dialup.h b/Externals/wxWidgets3/include/wx/dialup.h index f52303f2b0..ba591ebe71 100644 --- a/Externals/wxWidgets3/include/wx/dialup.h +++ b/Externals/wxWidgets3/include/wx/dialup.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 07.07.99 -// RCS-ID: $Id: dialup.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: dialup.h 67384 2011-04-03 20:31:32Z DS $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -171,7 +171,7 @@ public: bool IsConnectedEvent() const { return GetEventType() == wxEVT_DIALUP_CONNECTED; } - // does this event come from wxDialUpManager::Dial() or from some extrenal + // does this event come from wxDialUpManager::Dial() or from some external // process (i.e. does it result from our own attempt to establish the // connection)? bool IsOwnEvent() const { return m_id != 0; } diff --git a/Externals/wxWidgets3/include/wx/dirdlg.h b/Externals/wxWidgets3/include/wx/dirdlg.h index 49f6d9630e..16f7beef5d 100644 --- a/Externals/wxWidgets3/include/wx/dirdlg.h +++ b/Externals/wxWidgets3/include/wx/dirdlg.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Robert Roebling -// RCS-ID: $Id: dirdlg.h 54125 2008-06-11 19:17:41Z SC $ +// RCS-ID: $Id: dirdlg.h 70353 2012-01-15 14:46:41Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -116,9 +116,7 @@ protected: #include "wx/cocoa/dirdlg.h" // Native Cocoa #elif defined(__WXMOTIF__) || \ defined(__WXX11__) || \ - defined(__WXMGL__) || \ defined(__WXCOCOA__) || \ - defined(__WXPALMOS__) || \ defined(__WXPM__) #include "wx/generic/dirdlgg.h" // Other ports use generic implementation #define wxDirDialog wxGenericDirDialog diff --git a/Externals/wxWidgets3/include/wx/dlimpexp.h b/Externals/wxWidgets3/include/wx/dlimpexp.h index 9efcf5328a..1042938b40 100644 --- a/Externals/wxWidgets3/include/wx/dlimpexp.h +++ b/Externals/wxWidgets3/include/wx/dlimpexp.h @@ -4,7 +4,7 @@ * Author: Vadim Zeitlin * Modified by: * Created: 16.10.2003 (extracted from wx/defs.h) - * RCS-ID: $Id: dlimpexp.h 61944 2009-09-16 12:06:02Z PJC $ + * RCS-ID: $Id: dlimpexp.h 69049 2011-09-10 18:09:12Z SJL $ * Copyright: (c) 2003 Vadim Zeitlin * Licence: wxWindows licence */ @@ -22,14 +22,25 @@ #elif defined(__WINDOWS__) /* __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well - as VC++ and gcc + as VC++. */ -# if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) +# if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__WATCOMC__) # define WXEXPORT __declspec(dllexport) # define WXIMPORT __declspec(dllimport) -# else /* compiler doesn't support __declspec() */ -# define WXEXPORT -# define WXIMPORT + /* + While gcc also supports __declspec(dllexport), it creates unusably huge + DLL files since gcc 4.5 (while taking horribly long amounts of time), + see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43601. Because of this + we rely on binutils auto export/import support which seems to work + quite well for 4.5+. + */ +# elif defined(__GNUC__) && !wxCHECK_GCC_VERSION(4, 5) + /* + __declspec could be used here too but let's use the native + __attribute__ instead for clarity. + */ +# define WXEXPORT __attribute__((dllexport)) +# define WXIMPORT __attribute__((dllimport)) # endif #elif defined(__WXPM__) # if defined (__WATCOMC__) @@ -91,6 +102,7 @@ # define WXMAKINGDLL_RICHTEXT # define WXMAKINGDLL_MEDIA # define WXMAKINGDLL_STC +# define WXMAKINGDLL_WEBVIEW #endif /* WXMAKINGDLL */ /* @@ -263,6 +275,17 @@ # define WXDLLIMPEXP_DATA_STC(type) type #endif +#ifdef WXMAKINGDLL_WEBVIEW +# define WXDLLIMPEXP_WEBVIEW WXEXPORT +# define WXDLLIMPEXP_DATA_WEBVIEW(type) WXEXPORT type +#elif defined(WXUSINGDLL) +# define WXDLLIMPEXP_WEBVIEW WXIMPORT +# define WXDLLIMPEXP_DATA_WEBVIEW(type) WXIMPORT type +#else /* not making nor using DLL */ +# define WXDLLIMPEXP_WEBVIEW +# define WXDLLIMPEXP_DATA_WEBVIEW(type) type +#endif + /* GCC warns about using __attribute__ (and also __declspec in mingw32 case) on forward declarations while MSVC complains about forward declarations without @@ -284,6 +307,7 @@ #define WXDLLIMPEXP_FWD_RICHTEXT #define WXDLLIMPEXP_FWD_MEDIA #define WXDLLIMPEXP_FWD_STC + #define WXDLLIMPEXP_FWD_WEBVIEW #else #define WXDLLIMPEXP_FWD_BASE WXDLLIMPEXP_BASE #define WXDLLIMPEXP_FWD_NET WXDLLIMPEXP_NET @@ -299,6 +323,7 @@ #define WXDLLIMPEXP_FWD_RICHTEXT WXDLLIMPEXP_RICHTEXT #define WXDLLIMPEXP_FWD_MEDIA WXDLLIMPEXP_MEDIA #define WXDLLIMPEXP_FWD_STC WXDLLIMPEXP_STC + #define WXDLLIMPEXP_FWD_WEBVIEW WXDLLIMPEXP_WEBVIEW #endif /* for backwards compatibility, define suffix-less versions too */ diff --git a/Externals/wxWidgets3/include/wx/dlist.h b/Externals/wxWidgets3/include/wx/dlist.h index 164ed8680a..b69f617d9b 100644 --- a/Externals/wxWidgets3/include/wx/dlist.h +++ b/Externals/wxWidgets3/include/wx/dlist.h @@ -13,7 +13,7 @@ #include "wx/defs.h" #include "wx/utils.h" -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include "wx/beforestd.h" #include @@ -199,7 +199,7 @@ public: } }; -#else // STL +#else // !wxUSE_STD_CONTAINERS template class wxDList @@ -845,6 +845,6 @@ public: } */ }; -#endif // wxUSE_STL/!wxUSE_STL +#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS #endif // _WX_DLIST_H_ diff --git a/Externals/wxWidgets3/include/wx/docview.h b/Externals/wxWidgets3/include/wx/docview.h index 3f48964a03..e15414e65f 100644 --- a/Externals/wxWidgets3/include/wx/docview.h +++ b/Externals/wxWidgets3/include/wx/docview.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: docview.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: docview.h 70098 2011-12-23 05:59:59Z PC $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,6 +17,7 @@ #if wxUSE_DOC_VIEW_ARCHITECTURE #include "wx/list.h" +#include "wx/dlist.h" #include "wx/string.h" #include "wx/frame.h" #include "wx/filehistory.h" @@ -172,6 +173,10 @@ public: // dialogs. Override if necessary. virtual wxWindow *GetDocumentWindow() const; + // Returns true if this document is a child document corresponding to a + // part of the parent document and not a disk file as usual. + bool IsChildDocument() const { return m_documentParent != NULL; } + protected: wxList m_documentViews; wxString m_documentFile; @@ -179,7 +184,12 @@ protected: wxString m_documentTypeName; wxDocTemplate* m_documentTemplate; bool m_documentModified; + + // if the document parent is non-NULL, it's a pseudo-document corresponding + // to a part of the parent document which can't be saved or loaded + // independently of its parent and is always closed when its parent is wxDocument* m_documentParent; + wxCommandProcessor* m_commandProcessor; bool m_savedYet; @@ -193,6 +203,10 @@ protected: wxString DoGetUserReadableName() const; private: + // list of all documents whose m_documentParent is this one + typedef wxDList DocsList; + DocsList m_childDocuments; + DECLARE_ABSTRACT_CLASS(wxDocument) wxDECLARE_NO_COPY_CLASS(wxDocument); }; @@ -386,6 +400,7 @@ public: void OnUpdateFileRevert(wxUpdateUIEvent& event); void OnUpdateFileNew(wxUpdateUIEvent& event); void OnUpdateFileSave(wxUpdateUIEvent& event); + void OnUpdateFileSaveAs(wxUpdateUIEvent& event); void OnUpdateUndo(wxUpdateUIEvent& event); void OnUpdateRedo(wxUpdateUIEvent& event); @@ -474,6 +489,13 @@ public: // Get the current document manager static wxDocManager* GetDocumentManager() { return sm_docManager; } +#if wxUSE_PRINTING_ARCHITECTURE + wxPageSetupDialogData& GetPageSetupDialogData() + { return m_pageSetupDialogData; } + const wxPageSetupDialogData& GetPageSetupDialogData() const + { return m_pageSetupDialogData; } +#endif // wxUSE_PRINTING_ARCHITECTURE + #if WXWIN_COMPATIBILITY_2_8 // deprecated, override GetDefaultName() instead wxDEPRECATED_BUT_USED_INTERNALLY( @@ -488,6 +510,11 @@ public: protected: + // Called when a file selected from the MRU list doesn't exist any more. + // The default behaviour is to remove the file from the MRU and notify the + // user about it but this method can be overridden to customize it. + virtual void OnMRUFileNotExist(unsigned n, const wxString& filename); + // Open the MRU file with the given index in our associated file history. void DoOpenMRUFile(unsigned n); #if wxUSE_PRINTING_ARCHITECTURE @@ -959,7 +986,7 @@ wxTransferStreamToFile(wxInputStream& stream, const wxString& filename); // these flags are not used anywhere by wxWidgets and kept only for an unlikely // case of existing user code using them for its own purposes -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 enum { wxDOC_SDI = 1, diff --git a/Externals/wxWidgets3/include/wx/dvrenderers.h b/Externals/wxWidgets3/include/wx/dvrenderers.h index 64054732ef..7c372739b8 100644 --- a/Externals/wxWidgets3/include/wx/dvrenderers.h +++ b/Externals/wxWidgets3/include/wx/dvrenderers.h @@ -3,7 +3,7 @@ // Purpose: Declare all wxDataViewCtrl classes // Author: Robert Roebling, Vadim Zeitlin // Created: 2009-11-08 (extracted from wx/dataview.h) -// RCS-ID: $Id: dvrenderers.h 67099 2011-03-01 12:16:49Z VS $ +// RCS-ID: $Id: dvrenderers.h 70050 2011-12-19 12:54:38Z VZ $ // Copyright: (c) 2006 Robert Roebling // (c) 2009 Vadim Zeitlin // Licence: wxWindows licence @@ -54,6 +54,21 @@ public: void SetIcon( const wxIcon &icon ) { m_icon = icon; } const wxIcon &GetIcon() const { return m_icon; } + bool IsSameAs(const wxDataViewIconText& other) const + { + return m_text == other.m_text && m_icon.IsSameAs(other.m_icon); + } + + bool operator==(const wxDataViewIconText& other) const + { + return IsSameAs(other); + } + + bool operator!=(const wxDataViewIconText& other) const + { + return !IsSameAs(other); + } + private: wxString m_text; wxIcon m_icon; @@ -61,19 +76,6 @@ private: DECLARE_DYNAMIC_CLASS(wxDataViewIconText) }; -inline -bool operator==(const wxDataViewIconText& left, const wxDataViewIconText& right) -{ - return left.GetText() == right.GetText() && - left.GetIcon().IsSameAs(right.GetIcon()); -} - -inline -bool operator!=(const wxDataViewIconText& left, const wxDataViewIconText& right) -{ - return !(left == right); -} - DECLARE_VARIANT_OBJECT_EXPORTED(wxDataViewIconText, WXDLLIMPEXP_ADV) // ---------------------------------------------------------------------------- @@ -145,11 +147,11 @@ public: // in-place editing virtual bool HasEditorCtrl() const { return false; } - virtual wxControl* CreateEditorCtrl(wxWindow * WXUNUSED(parent), - wxRect WXUNUSED(labelRect), - const wxVariant& WXUNUSED(value)) + virtual wxWindow* CreateEditorCtrl(wxWindow * WXUNUSED(parent), + wxRect WXUNUSED(labelRect), + const wxVariant& WXUNUSED(value)) { return NULL; } - virtual bool GetValueFromEditorCtrl(wxControl * WXUNUSED(editor), + virtual bool GetValueFromEditorCtrl(wxWindow * WXUNUSED(editor), wxVariant& WXUNUSED(value)) { return false; } @@ -157,7 +159,7 @@ public: virtual void CancelEditing(); virtual bool FinishEditing(); - wxControl *GetEditorCtrl() { return m_editorCtrl; } + wxWindow *GetEditorCtrl() { return m_editorCtrl; } virtual bool IsCustomRenderer() const { return false; } @@ -168,11 +170,12 @@ protected: wxString m_variantType; wxDataViewColumn *m_owner; - wxWeakRef m_editorCtrl; + wxWeakRef m_editorCtrl; wxDataViewItem m_item; // for m_editorCtrl - // internal utility: - const wxDataViewCtrl* GetView() const; + // internal utility, may be used anywhere the window associated with the + // renderer is required + wxDataViewCtrl* GetView() const; protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRendererBase) @@ -225,23 +228,32 @@ public: // Return the size of the item appropriate to its current value. virtual wxSize GetSize() const = 0; - // Define virtual function which are called when the item is activated - // (double-clicked or Enter is pressed on it), clicked or the user starts - // to drag it: by default they all simply return false indicating that the - // events are not handled + // Define virtual function which are called when a key is pressed on the + // item, clicked or the user starts to drag it: by default they all simply + // return false indicating that the events are not handled - virtual bool Activate(const wxRect& WXUNUSED(cell), - wxDataViewModel *WXUNUSED(model), - const wxDataViewItem & WXUNUSED(item), - unsigned int WXUNUSED(col)) - { return false; } + virtual bool ActivateCell(const wxRect& cell, + wxDataViewModel *model, + const wxDataViewItem & item, + unsigned int col, + const wxMouseEvent* mouseEvent); - virtual bool LeftClick(const wxPoint& WXUNUSED(cursor), - const wxRect& WXUNUSED(cell), - wxDataViewModel *WXUNUSED(model), - const wxDataViewItem & WXUNUSED(item), - unsigned int WXUNUSED(col) ) - { return false; } + // Deprecated, use (and override) ActivateCell() instead + wxDEPRECATED_BUT_USED_INTERNALLY_INLINE( + virtual bool Activate(wxRect WXUNUSED(cell), + wxDataViewModel *WXUNUSED(model), + const wxDataViewItem & WXUNUSED(item), + unsigned int WXUNUSED(col)), + return false; ) + + // Deprecated, use (and override) ActivateCell() instead + wxDEPRECATED_BUT_USED_INTERNALLY_INLINE( + virtual bool LeftClick(wxPoint WXUNUSED(cursor), + wxRect WXUNUSED(cell), + wxDataViewModel *WXUNUSED(model), + const wxDataViewItem & WXUNUSED(item), + unsigned int WXUNUSED(col)), + return false; ) virtual bool StartDrag(const wxPoint& WXUNUSED(cursor), const wxRect& WXUNUSED(cell), @@ -278,6 +290,9 @@ public: // platform-specific classes. virtual wxDC *GetDC() = 0; + // To draw background use the background colour in wxDataViewItemAttr + virtual void RenderBackground(wxDC* dc, const wxRect& rect); + // Prepare DC to use attributes and call Render(). void WXCallRender(wxRect rect, wxDC *dc, int state); @@ -322,8 +337,8 @@ public: wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); virtual bool HasEditorCtrl() const { return true; } - virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); - virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); virtual bool Render( wxRect rect, wxDC *dc, int state ); virtual wxSize GetSize() const; virtual bool SetValue( const wxVariant &value ); @@ -347,8 +362,8 @@ public: wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); virtual bool HasEditorCtrl() const { return true; } - virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); - virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); virtual bool Render( wxRect rect, wxDC *dc, int state ); virtual wxSize GetSize() const; virtual bool SetValue( const wxVariant &value ); @@ -373,8 +388,8 @@ public: wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); - virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); - virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); virtual bool SetValue( const wxVariant &value ); virtual bool GetValue( wxVariant &value ) const; @@ -383,6 +398,37 @@ public: #endif // generic or Carbon versions +#if defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXGTK__) + +// ---------------------------------------------------------------------------- +// wxDataViewDateRenderer +// ---------------------------------------------------------------------------- + +#if wxUSE_DATEPICKCTRL +class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer +{ +public: + wxDataViewDateRenderer(const wxString &varianttype = wxT("datetime"), + wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, + int align = wxDVR_DEFAULT_ALIGNMENT); + + virtual bool HasEditorCtrl() const { return true; } + virtual wxWindow *CreateEditorCtrl(wxWindow *parent, wxRect labelRect, const wxVariant &value); + virtual bool GetValueFromEditorCtrl(wxWindow* editor, wxVariant &value); + virtual bool SetValue(const wxVariant &value); + virtual bool GetValue(wxVariant& value) const; + virtual bool Render( wxRect cell, wxDC *dc, int state ); + virtual wxSize GetSize() const; + +private: + wxDateTime m_date; +}; +#else // !wxUSE_DATEPICKCTRL +typedef wxDataViewTextRenderer wxDataViewDateRenderer; +#endif + +#endif // generic or GTK+ versions + // this class is obsolete, its functionality was merged in // wxDataViewTextRenderer itself now, don't use it any more #define wxDataViewTextRendererAttr wxDataViewTextRenderer diff --git a/Externals/wxWidgets3/include/wx/dynarray.h b/Externals/wxWidgets3/include/wx/dynarray.h index 5a1e932668..09237e0a77 100644 --- a/Externals/wxWidgets3/include/wx/dynarray.h +++ b/Externals/wxWidgets3/include/wx/dynarray.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 12.09.97 -// RCS-ID: $Id: dynarray.h 56600 2008-10-30 15:57:18Z VZ $ +// RCS-ID: $Id: dynarray.h 69688 2011-11-05 15:20:32Z VS $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -14,7 +14,7 @@ #include "wx/defs.h" -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include "wx/beforestd.h" #include #include @@ -81,7 +81,7 @@ typedef int (wxCMPFUNC_CONV *CMPFUNC)(const void* pItem1, const void* pItem2); // you cast "SomeArray *" as "BaseArray *" and then delete it) // ---------------------------------------------------------------------------- -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS template class wxArray_SortFunction @@ -151,7 +151,7 @@ public: \ e = rend(); \ for ( const_reverse_iterator i = b; i != e; ++i ) \ if ( *i == item ) \ - return (int)(i - b); \ + return (int)(e - i - 1); \ } \ else \ { \ @@ -203,12 +203,12 @@ public: \ } \ } -#else // if !wxUSE_STL +#else // if !wxUSE_STD_CONTAINERS #define _WX_DECLARE_BASEARRAY(T, name, classexp) \ classexp name \ { \ - typedef CMPFUNC SCMPFUNC; /* for compatibility wuth wxUSE_STL */ \ + typedef CMPFUNC SCMPFUNC; /* for compatibility wuth wxUSE_STD_CONTAINERS */ \ public: \ name(); \ name(const name& array); \ @@ -307,7 +307,7 @@ private: \ T *m_pItems; \ } -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS // ============================================================================ // The private helper macros containing the core of the array classes @@ -325,7 +325,7 @@ private: \ // _WX_DEFINE_TYPEARRAY: array for simple types // ---------------------------------------------------------------------------- -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS // in STL case we don't need the entire base arrays hack as standard container // don't suffer from alignment/storage problems as our home-grown do @@ -335,7 +335,7 @@ private: \ #define _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp) \ _WX_DEFINE_TYPEARRAY(T, name, base, classexp) -#else // if !wxUSE_STL +#else // if !wxUSE_STD_CONTAINERS // common declaration used by both _WX_DEFINE_TYPEARRAY and // _WX_DEFINE_TYPEARRAY_PTR @@ -505,7 +505,7 @@ public: \ #define _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp) \ _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, _WX_PTROP_NONE) -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS // ---------------------------------------------------------------------------- // _WX_DEFINE_SORTED_TYPEARRAY: sorted array for simple data types @@ -546,6 +546,8 @@ public: \ \ size_t Add(T lItem) \ { return base::Add(lItem, (CMPFUNC)m_fnCompare); } \ + void push_back(T lItem) \ + { Add(lItem); } \ \ void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ { base::erase(begin() + uiIndex, begin() + uiIndex + nRemove); } \ @@ -636,7 +638,7 @@ private: \ // that wants to export a wxArray daubed with your own import/export goo. // // Finally, you can define the macro below as something special to modify the -// arrays defined by a simple WX_FOO_ARRAY as well. By default is is empty. +// arrays defined by a simple WX_FOO_ARRAY as well. By default is empty. #define wxARRAY_DEFAULT_EXPORT // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/dynlib.h b/Externals/wxWidgets3/include/wx/dynlib.h index 687794221d..4e4e411dbc 100644 --- a/Externals/wxWidgets3/include/wx/dynlib.h +++ b/Externals/wxWidgets3/include/wx/dynlib.h @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux, Vadim Zeitlin, Vaclav Slavik // Modified by: // Created: 20/07/98 -// RCS-ID: $Id: dynlib.h 64139 2010-04-25 12:07:37Z VS $ +// RCS-ID: $Id: dynlib.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -123,14 +123,14 @@ enum wxPluginCategory #define wxDL_INIT_FUNC(pfx, name, dynlib) \ pfx ## name = (name ## _t)(dynlib).RawGetSymbol(#name) -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // same as wxDL_INIT_FUNC() but appends 'A' or 'W' to the function name, see // wxDynamicLibrary::GetSymbolAorW() #define wxDL_INIT_FUNC_AW(pfx, name, dynlib) \ pfx ## name = (name ## _t)(dynlib).GetSymbolAorW(#name) -#endif // __WXMSW__ +#endif // __WINDOWS__ // the following macros can be used to redirect a whole library to a class and // check at run-time if the library is present and contains all required @@ -304,7 +304,7 @@ public: #endif } -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // this function is useful for loading functions from the standard Windows // DLLs: such functions have an 'A' (in ANSI build) or 'W' (in Unicode, or // wide character build) suffix if they take string parameters @@ -326,7 +326,7 @@ public: { return RawGetSymbolAorW(m_handle, name); } -#endif // __WXMSW__ +#endif // __WINDOWS__ // return all modules/shared libraries in the address space of this process // @@ -349,7 +349,7 @@ public: static wxString GetPluginsDirectory(); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // return the handle (HMODULE/HINSTANCE) of the DLL with the given name // and/or containing the specified address: for XP and later systems only // the address is used and the name is ignored but for the previous systems @@ -360,7 +360,7 @@ public: // need to be freed using FreeLibrary() but it also means that it can // become invalid if the DLL is unloaded static WXHMODULE MSWGetModuleHandle(const char *name, void *addr); -#endif // __WXMSW__ +#endif // __WINDOWS__ protected: // common part of GetSymbol() and HasSymbol() @@ -383,7 +383,7 @@ protected: wxDECLARE_NO_COPY_CLASS(wxDynamicLibrary); }; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // ---------------------------------------------------------------------------- // wxLoadedDLL is a MSW-only internal helper class allowing to dynamically bind @@ -404,7 +404,7 @@ public: } }; -#endif // __WXMSW__ +#endif // __WINDOWS__ // ---------------------------------------------------------------------------- // Interesting defines diff --git a/Externals/wxWidgets3/include/wx/encinfo.h b/Externals/wxWidgets3/include/wx/encinfo.h index 2b9b1896ab..bbe7229723 100644 --- a/Externals/wxWidgets3/include/wx/encinfo.h +++ b/Externals/wxWidgets3/include/wx/encinfo.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.09.2003 (extracted from wx/fontenc.h) -// RCS-ID: $Id: encinfo.h 52834 2008-03-26 15:06:00Z FM $ +// RCS-ID: $Id: encinfo.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -35,7 +35,6 @@ struct WXDLLIMPEXP_CORE wxNativeEncodingInfo { wxString facename; // may be empty meaning "any" -#ifndef __WXPALMOS__ wxFontEncoding encoding; // so that we know what this struct represents #if defined(__WXMSW__) || \ @@ -55,12 +54,9 @@ struct WXDLLIMPEXP_CORE wxNativeEncodingInfo xencoding; #elif defined(wxHAS_UTF8_FONTS) // ports using UTF-8 for text don't need encoding information for fonts -#elif defined(__WXMGL__) - int mglEncoding; #else #error "Unsupported toolkit" #endif -#endif // !__WXPALMOS__ // this struct is saved in config by wxFontMapper, so it should know to // serialise itself (implemented in platform-specific code) bool FromString(const wxString& s); diff --git a/Externals/wxWidgets3/include/wx/event.h b/Externals/wxWidgets3/include/wx/event.h index b08e545365..19610b0f18 100644 --- a/Externals/wxWidgets3/include/wx/event.h +++ b/Externals/wxWidgets3/include/wx/event.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: event.h 66209 2010-11-19 07:51:15Z RD $ +// RCS-ID: $Id: event.h 70703 2012-02-26 20:24:25Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -39,6 +39,7 @@ class WXDLLIMPEXP_FWD_BASE wxList; class WXDLLIMPEXP_FWD_BASE wxEvent; +class WXDLLIMPEXP_FWD_BASE wxEventFilter; #if wxUSE_GUI class WXDLLIMPEXP_FWD_CORE wxDC; class WXDLLIMPEXP_FWD_CORE wxMenu; @@ -224,10 +225,13 @@ public: const wxObjectEventFunctor &other = static_cast< const wxObjectEventFunctor & >( functor ); - // FIXME-VC6: amazing but true: replacing "method == NULL" here - // with "!method" makes VC6 crash with an ICE in DLL build (only!) + // FIXME-VC6: amazing but true: replacing "m_method == 0" here + // with "!m_method" makes VC6 crash with an ICE in DLL build (only!) + // Also notice that using "NULL" instead of "0" results in warnings + // about "using NULL in arithmetics" from arm-linux-androideabi-g++ + // 4.4.3 used for wxAndroid build. - return ( m_method == other.m_method || other.m_method == NULL ) && + return ( m_method == other.m_method || other.m_method == 0 ) && ( m_handler == other.m_handler || other.m_handler == NULL ); } else @@ -615,8 +619,9 @@ extern WXDLLIMPEXP_BASE const wxEventType wxEVT_FIRST; extern WXDLLIMPEXP_BASE const wxEventType wxEVT_USER_FIRST; // Need events declared to do this +class WXDLLIMPEXP_FWD_BASE wxIdleEvent; +class WXDLLIMPEXP_FWD_BASE wxThreadEvent; class WXDLLIMPEXP_FWD_CORE wxCommandEvent; -class WXDLLIMPEXP_FWD_CORE wxThreadEvent; class WXDLLIMPEXP_FWD_CORE wxMouseEvent; class WXDLLIMPEXP_FWD_CORE wxFocusEvent; class WXDLLIMPEXP_FWD_CORE wxChildFocusEvent; @@ -649,7 +654,6 @@ class WXDLLIMPEXP_FWD_CORE wxPaletteChangedEvent; class WXDLLIMPEXP_FWD_CORE wxJoystickEvent; class WXDLLIMPEXP_FWD_CORE wxDropFilesEvent; class WXDLLIMPEXP_FWD_CORE wxInitDialogEvent; -class WXDLLIMPEXP_FWD_CORE wxIdleEvent; class WXDLLIMPEXP_FWD_CORE wxUpdateUIEvent; class WXDLLIMPEXP_FWD_CORE wxClipboardTextEvent; class WXDLLIMPEXP_FWD_CORE wxHelpEvent; @@ -678,7 +682,7 @@ wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_DROPDOWN, wxCo wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_CLOSEUP, wxCommandEvent); // Thread events -wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_THREAD, wxThreadEvent); +wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_BASE, wxEVT_THREAD, wxThreadEvent); // Mouse event types wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_LEFT_DOWN, wxMouseEvent); @@ -713,6 +717,10 @@ wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_KEY_UP, wxKeyEvent); #if wxUSE_HOTKEY wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_HOTKEY, wxKeyEvent); #endif +// This is a private event used by wxMSW code only and subject to change or +// disappear in the future. Don't use. +wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AFTER_CHAR, wxKeyEvent); + // Set cursor event wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_SET_CURSOR, wxSetCursorEvent); @@ -1112,6 +1120,148 @@ private: wxDECLARE_NO_COPY_CLASS(wxEventProcessInHandlerOnly); }; + +class WXDLLIMPEXP_BASE wxEventBasicPayloadMixin +{ +public: + wxEventBasicPayloadMixin() + : m_commandInt(0), + m_extraLong(0) + { + } + + void SetString(const wxString& s) { m_cmdString = s; } + const wxString& GetString() const { return m_cmdString; } + + void SetInt(int i) { m_commandInt = i; } + int GetInt() const { return m_commandInt; } + + void SetExtraLong(long extraLong) { m_extraLong = extraLong; } + long GetExtraLong() const { return m_extraLong; } + +protected: + // Note: these variables have "cmd" or "command" in their name for backward compatibility: + // they used to be part of wxCommandEvent, not this mixin. + wxString m_cmdString; // String event argument + int m_commandInt; + long m_extraLong; // Additional information (e.g. select/deselect) + + wxDECLARE_NO_ASSIGN_CLASS(wxEventBasicPayloadMixin); +}; + +class WXDLLIMPEXP_BASE wxEventAnyPayloadMixin : public wxEventBasicPayloadMixin +{ +public: + wxEventAnyPayloadMixin() : wxEventBasicPayloadMixin() {} + +#if wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7)) + template + void SetPayload(const T& payload) + { + m_payload = payload; + } + + template + T GetPayload() const + { + return m_payload.As(); + } + +protected: + wxAny m_payload; +#endif // wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7)) + + wxDECLARE_NO_ASSIGN_CLASS(wxEventBasicPayloadMixin); +}; + + +// Idle event +/* + wxEVT_IDLE + */ + +// Whether to always send idle events to windows, or +// to only send update events to those with the +// wxWS_EX_PROCESS_IDLE style. + +enum wxIdleMode +{ + // Send idle events to all windows + wxIDLE_PROCESS_ALL, + + // Send idle events to windows that have + // the wxWS_EX_PROCESS_IDLE flag specified + wxIDLE_PROCESS_SPECIFIED +}; + +class WXDLLIMPEXP_BASE wxIdleEvent : public wxEvent +{ +public: + wxIdleEvent() + : wxEvent(0, wxEVT_IDLE), + m_requestMore(false) + { } + wxIdleEvent(const wxIdleEvent& event) + : wxEvent(event), + m_requestMore(event.m_requestMore) + { } + + void RequestMore(bool needMore = true) { m_requestMore = needMore; } + bool MoreRequested() const { return m_requestMore; } + + virtual wxEvent *Clone() const { return new wxIdleEvent(*this); } + + // Specify how wxWidgets will send idle events: to + // all windows, or only to those which specify that they + // will process the events. + static void SetMode(wxIdleMode mode) { sm_idleMode = mode; } + + // Returns the idle event mode + static wxIdleMode GetMode() { return sm_idleMode; } + +protected: + bool m_requestMore; + static wxIdleMode sm_idleMode; + +private: + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent) +}; + + +// Thread event + +class WXDLLIMPEXP_BASE wxThreadEvent : public wxEvent, + public wxEventAnyPayloadMixin +{ +public: + wxThreadEvent(wxEventType eventType = wxEVT_THREAD, int id = wxID_ANY) + : wxEvent(id, eventType) + { } + + wxThreadEvent(const wxThreadEvent& event) + : wxEvent(event), + wxEventAnyPayloadMixin(event) + { + // make sure our string member (which uses COW, aka refcounting) is not + // shared by other wxString instances: + SetString(GetString().c_str()); + } + + virtual wxEvent *Clone() const + { + return new wxThreadEvent(*this); + } + + // this is important to avoid that calling wxEventLoopBase::YieldFor thread events + // gets processed when this is unwanted: + virtual wxEventCategory GetEventCategory() const + { return wxEVT_CATEGORY_THREAD; } + +private: + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxThreadEvent) +}; + + #if wxUSE_GUI @@ -1134,16 +1284,15 @@ private: wxEVT_COMMAND_TOGGLEBUTTON_CLICKED */ -class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent +class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent, + public wxEventBasicPayloadMixin { public: wxCommandEvent(wxEventType commandType = wxEVT_NULL, int winid = 0); wxCommandEvent(const wxCommandEvent& event) : wxEvent(event), - m_cmdString(event.m_cmdString), - m_commandInt(event.m_commandInt), - m_extraLong(event.m_extraLong), + wxEventBasicPayloadMixin(event), m_clientData(event.m_clientData), m_clientObject(event.m_clientObject) { } @@ -1156,32 +1305,23 @@ public: void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; } wxClientData *GetClientObject() const { return m_clientObject; } + // Note: this shadows wxEventBasicPayloadMixin::GetString(), because it does some + // GUI-specific hacks + wxString GetString() const; + // Get listbox selection if single-choice int GetSelection() const { return m_commandInt; } - // Set/Get listbox/choice selection string - void SetString(const wxString& s) { m_cmdString = s; } - wxString GetString() const; - // Get checkbox value bool IsChecked() const { return m_commandInt != 0; } // true if the listbox event was a selection. bool IsSelection() const { return (m_extraLong != 0); } - void SetExtraLong(long extraLong) { m_extraLong = extraLong; } - long GetExtraLong() const { return m_extraLong; } - - void SetInt(int i) { m_commandInt = i; } - int GetInt() const { return m_commandInt; } - virtual wxEvent *Clone() const { return new wxCommandEvent(*this); } virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_USER_INPUT; } protected: - wxString m_cmdString; // String event argument - int m_commandInt; - long m_extraLong; // Additional information (e.g. select/deselect) void* m_clientData; // Arbitrary client data wxClientData* m_clientObject; // Arbitrary client object @@ -1221,60 +1361,6 @@ private: }; -// Thread event - -class WXDLLIMPEXP_CORE wxThreadEvent : public wxCommandEvent -{ -public: - wxThreadEvent(wxEventType eventType = wxEVT_COMMAND_THREAD, int id = wxID_ANY) - : wxCommandEvent(eventType, id) - { } - - wxThreadEvent(const wxThreadEvent& event) - : wxCommandEvent(event) - { - // make sure our string member (which uses COW, aka refcounting) is not - // shared by other wxString instances: - SetString(GetString().c_str()); - -#if wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7)) - m_payload = event.m_payload; -#endif - } - - virtual wxEvent *Clone() const - { - return new wxThreadEvent(*this); - } - - // this is important to avoid that calling wxEventLoopBase::YieldFor thread events - // gets processed when this is unwanted: - virtual wxEventCategory GetEventCategory() const - { return wxEVT_CATEGORY_THREAD; } - -#if wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7)) - template - void SetPayload(const T& payload) - { - m_payload = payload; - } - - template - T GetPayload() const - { - return m_payload.As(); - } - -protected: - wxAny m_payload; -#endif // wxUSE_ANY && (!defined(__VISUALC__) || wxCHECK_VISUALC_VERSION(7)) - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxThreadEvent) -}; - - - // Scroll event class, derived form wxCommandEvent. wxScrollEvents are // sent by wxSlider and wxScrollBar. /* @@ -1360,18 +1446,6 @@ private: wxEVT_LEFT_DCLICK wxEVT_MIDDLE_DCLICK wxEVT_RIGHT_DCLICK - wxEVT_NC_LEFT_DOWN - wxEVT_NC_LEFT_UP, - wxEVT_NC_MIDDLE_DOWN, - wxEVT_NC_MIDDLE_UP, - wxEVT_NC_RIGHT_DOWN, - wxEVT_NC_RIGHT_UP, - wxEVT_NC_MOTION, - wxEVT_NC_ENTER_WINDOW, - wxEVT_NC_LEAVE_WINDOW, - wxEVT_NC_LEFT_DCLICK, - wxEVT_NC_MIDDLE_DCLICK, - wxEVT_NC_RIGHT_DCLICK, */ class WXDLLIMPEXP_CORE wxMouseEvent : public wxEvent, @@ -1420,8 +1494,8 @@ public: bool LeftDClick() const { return (m_eventType == wxEVT_LEFT_DCLICK); } bool MiddleDClick() const { return (m_eventType == wxEVT_MIDDLE_DCLICK); } bool RightDClick() const { return (m_eventType == wxEVT_RIGHT_DCLICK); } - bool Aux1DClick() const { return (m_eventType == wxEVT_AUX1_UP); } - bool Aux2DClick() const { return (m_eventType == wxEVT_AUX2_UP); } + bool Aux1DClick() const { return (m_eventType == wxEVT_AUX1_DCLICK); } + bool Aux2DClick() const { return (m_eventType == wxEVT_AUX2_DCLICK); } // True if a button is down and the mouse is moving bool Dragging() const @@ -1524,7 +1598,7 @@ public: void SetCursor(const wxCursor& cursor) { m_cursor = cursor; } const wxCursor& GetCursor() const { return m_cursor; } - bool HasCursor() const { return m_cursor.Ok(); } + bool HasCursor() const { return m_cursor.IsOk(); } virtual wxEvent *Clone() const { return new wxSetCursorEvent(*this); } @@ -1578,7 +1652,12 @@ class WXDLLIMPEXP_CORE wxKeyEvent : public wxEvent, { public: wxKeyEvent(wxEventType keyType = wxEVT_NULL); + + // Normal copy ctor and a ctor creating a new event for the same key as the + // given one but a different event type (this is used in implementation + // code only, do not use outside of the library). wxKeyEvent(const wxKeyEvent& evt); + wxKeyEvent(wxEventType eventType, const wxKeyEvent& evt); // get the key code: an ASCII7 char or an element of wxKeyCode enum int GetKeyCode() const { return (int)m_keyCode; } @@ -1619,6 +1698,15 @@ public: // Get Y position wxCoord GetY() const { return m_y; } + // Can be called from wxEVT_CHAR_HOOK handler to allow generation of normal + // key events even though the event had been handled (by default they would + // not be generated in this case). + void DoAllowNextEvent() { m_allowNext = true; } + + // Return the value of the "allow next" flag, for internal use only. + bool IsNextEventAllowed() const { return m_allowNext; } + + virtual wxEvent *Clone() const { return new wxKeyEvent(*this); } virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_USER_INPUT; } @@ -1634,16 +1722,7 @@ public: // implicitly defined operator=() so need to do it this way: *static_cast(this) = evt; - m_x = evt.m_x; - m_y = evt.m_y; - - m_keyCode = evt.m_keyCode; - - m_rawCode = evt.m_rawCode; - m_rawFlags = evt.m_rawFlags; -#if wxUSE_UNICODE - m_uniChar = evt.m_uniChar; -#endif + DoAssignMembers(evt); } return *this; } @@ -1665,6 +1744,37 @@ public: wxUint32 m_rawFlags; private: + // Set the event to propagate if necessary, i.e. if it's of wxEVT_CHAR_HOOK + // type. This is used by all ctors. + void InitPropagation() + { + if ( m_eventType == wxEVT_CHAR_HOOK ) + m_propagationLevel = wxEVENT_PROPAGATE_MAX; + + m_allowNext = false; + } + + // Copy only the event data present in this class, this is used by + // AssignKeyData() and copy ctor. + void DoAssignMembers(const wxKeyEvent& evt) + { + m_x = evt.m_x; + m_y = evt.m_y; + + m_keyCode = evt.m_keyCode; + + m_rawCode = evt.m_rawCode; + m_rawFlags = evt.m_rawFlags; +#if wxUSE_UNICODE + m_uniChar = evt.m_uniChar; +#endif + } + + // If this flag is true, the normal key events should still be generated + // even if wxEVT_CHAR_HOOK had been handled. By default it is false as + // handling wxEVT_CHAR_HOOK suppresses all the subsequent events. + bool m_allowNext; + DECLARE_DYNAMIC_CLASS(wxKeyEvent) }; @@ -1749,7 +1859,6 @@ private: /* wxEVT_PAINT wxEVT_NC_PAINT - wxEVT_PAINT_ICON */ #if wxDEBUG_LEVEL && (defined(__WXMSW__) || defined(__WXPM__)) @@ -2722,59 +2831,6 @@ private: DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxContextMenuEvent) }; -#endif // wxUSE_GUI - -// Idle event -/* - wxEVT_IDLE - */ - -// Whether to always send idle events to windows, or -// to only send update events to those with the -// wxWS_EX_PROCESS_IDLE style. - -enum wxIdleMode -{ - // Send idle events to all windows - wxIDLE_PROCESS_ALL, - - // Send idle events to windows that have - // the wxWS_EX_PROCESS_IDLE flag specified - wxIDLE_PROCESS_SPECIFIED -}; - -class WXDLLIMPEXP_BASE wxIdleEvent : public wxEvent -{ -public: - wxIdleEvent() - : wxEvent(0, wxEVT_IDLE), - m_requestMore(false) - { } - wxIdleEvent(const wxIdleEvent& event) - : wxEvent(event), - m_requestMore(event.m_requestMore) - { } - - void RequestMore(bool needMore = true) { m_requestMore = needMore; } - bool MoreRequested() const { return m_requestMore; } - - virtual wxEvent *Clone() const { return new wxIdleEvent(*this); } - - // Specify how wxWidgets will send idle events: to - // all windows, or only to those which specify that they - // will process the events. - static void SetMode(wxIdleMode mode) { sm_idleMode = mode; } - - // Returns the idle event mode - static wxIdleMode GetMode() { return sm_idleMode; } - -protected: - bool m_requestMore; - static wxIdleMode sm_idleMode; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent) -}; /* TODO wxEVT_MOUSE_CAPTURE_CHANGED, @@ -2786,6 +2842,7 @@ private: wxEVT_COMPARE_ITEM */ +#endif // wxUSE_GUI // ============================================================================ @@ -2983,6 +3040,19 @@ public: bool IsUnlinked() const; + // Global event filters + // -------------------- + + // Add an event filter whose FilterEvent() method will be called for each + // and every event processed by wxWidgets. The filters are called in LIFO + // order and wxApp is registered as an event filter by default. The pointer + // must remain valid until it's removed with RemoveFilter() and is not + // deleted by wxEvtHandler. + static void AddFilter(wxEventFilter* filter); + + // Remove a filter previously installed with AddFilter(). + static void RemoveFilter(wxEventFilter* filter); + // Event queuing and processing // ---------------------------- @@ -3269,7 +3339,7 @@ protected: // base class implementation passes the event to wxTheApp virtual bool TryAfter(wxEvent& event); -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 // deprecated method: override TryBefore() instead of this one wxDEPRECATED_BUT_USED_INTERNALLY_INLINE( virtual bool TryValidator(wxEvent& WXUNUSED(event)), return false; ) @@ -3330,6 +3400,9 @@ private: // try to process events in all handlers chained to this one bool DoTryChain(wxEvent& event); + // Head of the event filter linked list. + static wxEventFilter* ms_filterList; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxEvtHandler) }; @@ -3418,11 +3491,14 @@ inline void wxQueueEvent(wxEvtHandler *dest, wxEvent *event) typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&); typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&); +typedef void (wxEvtHandler::*wxThreadEventFunction)(wxThreadEvent&); #define wxEventHandler(func) \ wxEVENT_HANDLER_CAST(wxEventFunction, func) #define wxIdleEventHandler(func) \ wxEVENT_HANDLER_CAST(wxIdleEventFunction, func) +#define wxThreadEventHandler(func) \ + wxEVENT_HANDLER_CAST(wxThreadEventFunction, func) #if wxUSE_GUI @@ -3451,7 +3527,6 @@ protected: }; typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&); -typedef void (wxEvtHandler::*wxThreadEventFunction)(wxThreadEvent&); typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&); typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&); typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&); @@ -3491,8 +3566,6 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent& #define wxCommandEventHandler(func) \ wxEVENT_HANDLER_CAST(wxCommandEventFunction, func) -#define wxThreadEventHandler(func) \ - wxEVENT_HANDLER_CAST(wxThreadEventFunction, func) #define wxScrollEventHandler(func) \ wxEVENT_HANDLER_CAST(wxScrollEventFunction, func) #define wxScrollWinEventHandler(func) \ @@ -3976,7 +4049,9 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent& #define EVT_TEXT_PASTE(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_PASTE, winid, wxClipboardTextEventHandler(func)) // Thread events -#define EVT_THREAD(id, func) wx__DECLARE_EVT1(wxEVT_COMMAND_THREAD, id, wxThreadEventHandler(func)) +#define EVT_THREAD(id, func) wx__DECLARE_EVT1(wxEVT_THREAD, id, wxThreadEventHandler(func)) +// alias for backward compatibility with 2.9.0: +#define wxEVT_COMMAND_THREAD wxEVT_THREAD // ---------------------------------------------------------------------------- // Helper functions diff --git a/Externals/wxWidgets3/include/wx/eventfilter.h b/Externals/wxWidgets3/include/wx/eventfilter.h new file mode 100644 index 0000000000..5a110cb7c5 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/eventfilter.h @@ -0,0 +1,72 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/eventfilter.h +// Purpose: wxEventFilter class declaration. +// Author: Vadim Zeitlin +// Created: 2011-11-21 +// RCS-ID: $Id: eventfilter.h 70302 2012-01-09 14:04:25Z DS $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_EVENTFILTER_H_ +#define _WX_EVENTFILTER_H_ + +#include "wx/defs.h" + +class WXDLLIMPEXP_FWD_BASE wxEvent; +class WXDLLIMPEXP_FWD_BASE wxEvtHandler; + +// ---------------------------------------------------------------------------- +// wxEventFilter is used with wxEvtHandler::AddFilter() and ProcessEvent(). +// ---------------------------------------------------------------------------- + +class wxEventFilter +{ +public: + // Possible return values for FilterEvent(). + // + // Notice that the values of these enum elements are fixed due to backwards + // compatibility constraints. + enum + { + // Process event as usual. + Event_Skip = -1, + + // Don't process the event normally at all. + Event_Ignore = 0, + + // Event was already handled, don't process it normally. + Event_Processed = 1 + }; + + wxEventFilter() + { + m_next = NULL; + } + + virtual ~wxEventFilter() + { + wxASSERT_MSG( !m_next, "Forgot to call wxEvtHandler::RemoveFilter()?" ); + } + + // This method allows to filter all the events processed by the program, so + // you should try to return quickly from it to avoid slowing down the + // program to a crawl. + // + // Return value should be -1 to continue with the normal event processing, + // or true or false to stop further processing and pretend that the event + // had been already processed or won't be processed at all, respectively. + virtual int FilterEvent(wxEvent& event) = 0; + +private: + // Objects of this class are made to be stored in a linked list in + // wxEvtHandler so put the next node ponter directly in the class itself. + wxEventFilter* m_next; + + // And provide access to it for wxEvtHandler [only]. + friend class wxEvtHandler; + + wxDECLARE_NO_COPY_CLASS(wxEventFilter); +}; + +#endif // _WX_EVENTFILTER_H_ diff --git a/Externals/wxWidgets3/include/wx/evtloop.h b/Externals/wxWidgets3/include/wx/evtloop.h index ae45b8800a..97a3548d8e 100644 --- a/Externals/wxWidgets3/include/wx/evtloop.h +++ b/Externals/wxWidgets3/include/wx/evtloop.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 01.06.01 -// RCS-ID: $Id: evtloop.h 65057 2010-07-23 23:32:46Z VZ $ +// RCS-ID: $Id: evtloop.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -233,9 +233,7 @@ private: // integration with MFC) but currently this is not done for all ports yet (e.g. // wxX11) so fall back to the old wxGUIEventLoop definition below for them -#if defined(__WXPALMOS__) - #include "wx/palmos/evtloop.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) // this header defines both console and GUI loops for MSW #include "wx/msw/evtloop.h" #elif defined(__WXOSX__) diff --git a/Externals/wxWidgets3/include/wx/evtloopsrc.h b/Externals/wxWidgets3/include/wx/evtloopsrc.h index 1851e30dd6..20d8770b76 100644 --- a/Externals/wxWidgets3/include/wx/evtloopsrc.h +++ b/Externals/wxWidgets3/include/wx/evtloopsrc.h @@ -3,7 +3,7 @@ // Purpose: declaration of wxEventLoopSource class // Author: Vadim Zeitlin // Created: 2009-10-21 -// RCS-ID: $Id: evtloopsrc.h 64140 2010-04-25 21:33:16Z FM $ +// RCS-ID: $Id: evtloopsrc.h 69559 2011-10-27 21:10:30Z VZ $ // Copyright: (c) 2009 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -49,7 +49,7 @@ enum wxEVENT_SOURCE_EXCEPTION = 0x04, wxEVENT_SOURCE_ALL = wxEVENT_SOURCE_INPUT | wxEVENT_SOURCE_OUTPUT | - wxEVENT_SOURCE_EXCEPTION, + wxEVENT_SOURCE_EXCEPTION }; // wxEventLoopSource itself is an ABC and can't be created directly, currently diff --git a/Externals/wxWidgets3/include/wx/features.h b/Externals/wxWidgets3/include/wx/features.h index 66cabcba0d..0d8469917b 100644 --- a/Externals/wxWidgets3/include/wx/features.h +++ b/Externals/wxWidgets3/include/wx/features.h @@ -5,7 +5,7 @@ * Author: Vadim Zeitlin * Modified by: Ryan Norton (Converted to C) * Created: 18.03.02 -* RCS-ID: $Id: features.h 60526 2009-05-06 11:42:16Z VZ $ +* RCS-ID: $Id: features.h 69961 2011-12-08 15:58:45Z VZ $ * Copyright: (c) 2002 Vadim Zeitlin * Licence: wxWindows licence */ @@ -108,8 +108,16 @@ If this is defined, wxEvtHandler::Bind<>() is available (not all compilers have the required template support for this and in particular under Windows where only g++ and MSVC >= 7 currently support it. + + Recent Sun CC versions support this but perhaps older ones can compile this + code too, adjust the version check if this is the case (unfortunately we + can't easily test for the things used in wx/event.h in configure so we have + to maintain these checks manually). The same applies to xlC 7: perhaps + earlier versions can compile this code too but they were not tested. */ -#if wxCHECK_GCC_VERSION(3, 2) || wxCHECK_VISUALC_VERSION(7) +#if wxCHECK_GCC_VERSION(3, 2) || wxCHECK_VISUALC_VERSION(7) \ + || (defined(__SUNCC__) && __SUNCC__ >= 0x5100) \ + || (defined(__xlC__) && __xlC__ >= 0x700) #define wxHAS_EVENT_BIND #endif diff --git a/Externals/wxWidgets3/include/wx/filedlg.h b/Externals/wxWidgets3/include/wx/filedlg.h index e756cbcc6e..45178d2d43 100644 --- a/Externals/wxWidgets3/include/wx/filedlg.h +++ b/Externals/wxWidgets3/include/wx/filedlg.h @@ -5,7 +5,7 @@ // Modified by: // Created: 8/17/99 // Copyright: (c) Robert Roebling -// RCS-ID: $Id: filedlg.h 62722 2009-11-26 16:17:00Z VZ $ +// RCS-ID: $Id: filedlg.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -232,9 +232,6 @@ wxSaveFileSelector(const wxString& what, #include "wx/cocoa/filedlg.h" #elif defined(__WXPM__) #include "wx/os2/filedlg.h" -#elif defined(__WXPALMOS__) - #define wxHAS_GENERIC_FILEDIALOG - #include "wx/generic/filedlgg.h" #endif #endif // wxUSE_FILEDLG diff --git a/Externals/wxWidgets3/include/wx/filefn.h b/Externals/wxWidgets3/include/wx/filefn.h index 5172917416..ebd0c373c4 100644 --- a/Externals/wxWidgets3/include/wx/filefn.h +++ b/Externals/wxWidgets3/include/wx/filefn.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: filefn.h 65057 2010-07-23 23:32:46Z VZ $ +// RCS-ID: $Id: filefn.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,7 +15,6 @@ #include "wx/list.h" #include "wx/arrstr.h" -#ifndef __WXPALMOS5__ #ifdef __WXWINCE__ #include "wx/msw/wince/time.h" #include "wx/msw/private.h" @@ -40,7 +39,6 @@ #include #endif #endif -#endif // !__WXPALMOS5__ #ifdef __OS2__ // need to check for __OS2__ first since currently both @@ -85,11 +83,10 @@ #include #endif -#ifndef __WXPALMOS5__ #ifndef __WXWINCE__ #include // O_RDONLY &c #endif -#endif // !__WXPALMOS5__ + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -115,8 +112,6 @@ typedef long off_t; #elif defined(__MWERKS__) && !defined(__INTEL__) && !defined(__MACH__) typedef long off_t; -#elif defined(__WXPALMOS5__) - typedef long off_t; #endif enum wxSeekMode @@ -205,7 +200,7 @@ enum wxPosixPermissions #define wxCRT_RmDir _wrmdir #define wxCRT_Stat _wstat #define wxStructStat struct _stat -#elif (defined(__WXMSW__) || defined(__OS2__)) && !defined(__WXPALMOS__) && \ +#elif (defined(__WINDOWS__) || defined(__OS2__)) && \ ( \ defined(__VISUALC__) || \ defined(__MINGW64__) || \ @@ -368,7 +363,13 @@ enum wxPosixPermissions #define wxCRT_MkDirA wxPOSIX_IDENT(mkdir) #define wxCRT_RmDirA wxPOSIX_IDENT(rmdir) #ifdef wxHAS_HUGE_FILES - #define wxCRT_StatA wxPOSIX_IDENT(stati64) + // MinGW-64 provides underscore-less versions of all file functions + // except for this one. + #ifdef __MINGW64__ + #define wxCRT_StatA _stati64 + #else + #define wxCRT_StatA wxPOSIX_IDENT(stati64) + #endif #else // Unfortunately Watcom is not consistent #if defined(__OS2__) && defined(__WATCOMC__) @@ -468,43 +469,6 @@ enum wxPosixPermissions // private defines, undefine so that nobody gets tempted to use #undef wxHAS_HUGE_FILES #undef wxHAS_HUGE_STDIO_FILES -#elif defined (__WXPALMOS__) - typedef off_t wxFileOffset; -#ifdef _LARGE_FILES - #define wxFileOffsetFmtSpec wxLongLongFmtSpec - wxCOMPILE_TIME_ASSERT( sizeof(off_t) == sizeof(wxLongLong_t), BadFileSizeType ); - // wxFile is present and supports large files - #ifdef wxUSE_FILE - #define wxHAS_LARGE_FILES - #endif - // wxFFile is present and supports large files - #if SIZEOF_LONG == 8 || defined HAVE_FSEEKO - #define wxHAS_LARGE_FFILES - #endif -#else - #define wxFileOffsetFmtSpec wxT("") -#endif - #define wxClose close - #define wxRead ::read - #define wxWrite ::write - #define wxLseek lseek - #define wxSeek lseek - #define wxFsync fsync - #define wxEof eof - - #define wxCRT_MkDir mkdir - #define wxCRT_RmDir rmdir - - #define wxTell(fd) lseek(fd, 0, SEEK_CUR) - - #define wxStructStat struct stat - - #define wxCRT_Open open - #define wxCRT_Stat svfs_stat - #define wxCRT_Lstat lstat - #define wxCRT_Access access - - #define wxHAS_NATIVE_LSTAT #else // Unix or Windows using unknown compiler, assume POSIX supported typedef off_t wxFileOffset; #ifdef HAVE_LARGEFILE_SUPPORT @@ -764,9 +728,6 @@ WXDLLIMPEXP_BASE bool wxIsExecutable(const wxString &path); // CYGWIN also uses UNIX settings #define wxFILE_SEP_PATH wxFILE_SEP_PATH_UNIX #define wxPATH_SEP wxPATH_SEP_UNIX -#elif defined(__WXPALMOS__) - #define wxFILE_SEP_PATH wxFILE_SEP_PATH_UNIX - #define wxPATH_SEP wxPATH_SEP_UNIX #elif defined(__MAC__) #define wxFILE_SEP_PATH wxFILE_SEP_PATH_MAC #define wxPATH_SEP wxPATH_SEP_MAC diff --git a/Externals/wxWidgets3/include/wx/filehistory.h b/Externals/wxWidgets3/include/wx/filehistory.h index a98668d6bd..83afeaa3ec 100644 --- a/Externals/wxWidgets3/include/wx/filehistory.h +++ b/Externals/wxWidgets3/include/wx/filehistory.h @@ -3,7 +3,7 @@ // Purpose: wxFileHistory class // Author: Julian Smart, Vaclav Slavik // Created: 2010-05-03 -// RCS-ID: $Id: filehistory.h 64240 2010-05-07 06:45:48Z VS $ +// RCS-ID: $Id: filehistory.h 70503 2012-02-03 17:27:13Z VZ $ // Copyright: (c) Julian Smart, Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,6 +23,7 @@ class WXDLLIMPEXP_FWD_CORE wxMenu; class WXDLLIMPEXP_FWD_BASE wxConfigBase; +class WXDLLIMPEXP_FWD_BASE wxFileName; // ---------------------------------------------------------------------------- // File history management @@ -79,6 +80,10 @@ private: // The ID of the first history menu item (Doesn't have to be wxID_FILE1) wxWindowID m_idBase; + // Normalize a file name to canonical form. We have a special function for + // this to ensure the same normalization is used everywhere. + static wxString NormalizeFileName(const wxFileName& filename); + wxDECLARE_NO_COPY_CLASS(wxFileHistoryBase); }; diff --git a/Externals/wxWidgets3/include/wx/filename.h b/Externals/wxWidgets3/include/wx/filename.h index ca89cf8ff7..e1454406b7 100644 --- a/Externals/wxWidgets3/include/wx/filename.h +++ b/Externals/wxWidgets3/include/wx/filename.h @@ -4,7 +4,7 @@ // Author: Robert Roebling, Vadim Zeitlin // Modified by: // Created: 28.12.00 -// RCS-ID: $Id: filename.h 63886 2010-04-06 22:51:11Z FM $ +// RCS-ID: $Id: filename.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2000 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -40,7 +40,7 @@ class WXDLLIMPEXP_FWD_BASE wxFFile; // this symbol is defined for the platforms where file systems use volumes in // paths -#if defined(__WXMSW__) || defined(__DOS__) || defined(__OS2__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__) #define wxHAS_FILESYSTEM_VOLUMES #endif @@ -214,14 +214,20 @@ public: !m_ext.empty() || m_hasExt; } - // does the file with this name exists? + // does the file with this name exist? bool FileExists() const; static bool FileExists( const wxString &file ); - // does the directory with this name exists? + // does the directory with this name exist? bool DirExists() const; static bool DirExists( const wxString &dir ); + // does anything at all with this name (i.e. file, directory or some + // other file system object such as a device, socket, ...) exist? + bool Exists() const { return Exists(GetFullPath()); } + static bool Exists(const wxString& path); + + // checks on most common flags for files/directories; // more platform-specific features (like e.g. Unix permissions) are not // available in wxFileName diff --git a/Externals/wxWidgets3/include/wx/filepicker.h b/Externals/wxWidgets3/include/wx/filepicker.h index 949f6c650d..7796ac33b3 100644 --- a/Externals/wxWidgets3/include/wx/filepicker.h +++ b/Externals/wxWidgets3/include/wx/filepicker.h @@ -5,7 +5,7 @@ // Modified by: // Created: 14/4/2006 // Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: filepicker.h 58849 2009-02-12 21:09:20Z RR $ +// RCS-ID: $Id: filepicker.h 70043 2011-12-18 12:34:47Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -87,9 +87,13 @@ public: wxFileDirPickerWidgetBase() { } virtual ~wxFileDirPickerWidgetBase() { } + // Path here is the name of the selected file or directory. wxString GetPath() const { return m_path; } virtual void SetPath(const wxString &str) { m_path=str; } + // Set the directory to open the file browse dialog at initially. + virtual void SetInitialDirectory(const wxString& dir) = 0; + // returns the picker widget cast to wxControl virtual wxControl *AsControl() = 0; @@ -109,12 +113,14 @@ protected: #define wxFLP_OVERWRITE_PROMPT 0x1000 #define wxFLP_FILE_MUST_EXIST 0x2000 #define wxFLP_CHANGE_DIR 0x4000 +#define wxFLP_SMALL wxPB_SMALL // NOTE: wxMULTIPLE is not supported ! #define wxDIRP_DIR_MUST_EXIST 0x0008 #define wxDIRP_CHANGE_DIR 0x0010 +#define wxDIRP_SMALL wxPB_SMALL // map platform-dependent controls which implement the wxFileDirPickerWidgetBase @@ -163,6 +169,12 @@ public: // public API wxString GetPath() const; void SetPath(const wxString &str); + // Set the directory to open the file browse dialog at initially. + void SetInitialDirectory(const wxString& dir) + { + m_pickerIface->SetInitialDirectory(dir); + } + public: // internal functions void UpdatePickerFromTextCtrl(); @@ -253,13 +265,7 @@ public: const wxSize& size = wxDefaultSize, long style = wxFLP_DEFAULT_STYLE, const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFilePickerCtrlNameStr) - { - return wxFileDirPickerCtrlBase::CreateBase(parent, id, path, - message, wildcard, - pos, size, style, - validator, name); - } + const wxString& name = wxFilePickerCtrlNameStr); void SetFileName(const wxFileName &filename) { SetPath(filename.GetFullPath()); } @@ -306,8 +312,13 @@ protected: // extracts the style for our picker from wxFileDirPickerCtrlBase's style long GetPickerStyle(long style) const { - return (style & (wxFLP_OPEN|wxFLP_SAVE|wxFLP_OVERWRITE_PROMPT| - wxFLP_FILE_MUST_EXIST|wxFLP_CHANGE_DIR|wxFLP_USE_TEXTCTRL)); + return style & (wxFLP_OPEN | + wxFLP_SAVE | + wxFLP_OVERWRITE_PROMPT | + wxFLP_FILE_MUST_EXIST | + wxFLP_CHANGE_DIR | + wxFLP_USE_TEXTCTRL | + wxFLP_SMALL); } private: @@ -358,14 +369,7 @@ public: const wxSize& size = wxDefaultSize, long style = wxDIRP_DEFAULT_STYLE, const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDirPickerCtrlNameStr) - { - return wxFileDirPickerCtrlBase::CreateBase - ( - parent, id, path, message, wxEmptyString, - pos, size, style, validator, name - ); - } + const wxString& name = wxDirPickerCtrlNameStr); void SetDirName(const wxFileName &dirname) { SetPath(dirname.GetPath()); } @@ -409,7 +413,12 @@ protected: // extracts the style for our picker from wxFileDirPickerCtrlBase's style long GetPickerStyle(long style) const - { return (style & (wxDIRP_DIR_MUST_EXIST|wxDIRP_CHANGE_DIR|wxDIRP_USE_TEXTCTRL)); } + { + return style & (wxDIRP_DIR_MUST_EXIST | + wxDIRP_CHANGE_DIR | + wxDIRP_USE_TEXTCTRL | + wxDIRP_SMALL); + } private: DECLARE_DYNAMIC_CLASS(wxDirPickerCtrl) diff --git a/Externals/wxWidgets3/include/wx/font.h b/Externals/wxWidgets3/include/wx/font.h index 9952472d18..6e3c5237ab 100644 --- a/Externals/wxWidgets3/include/wx/font.h +++ b/Externals/wxWidgets3/include/wx/font.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.09.99 -// RCS-ID: $Id: font.h 67052 2011-02-27 12:47:05Z VZ $ +// RCS-ID: $Id: font.h 70446 2012-01-23 11:28:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -227,6 +227,7 @@ public: virtual wxFontStyle GetStyle() const = 0; virtual wxFontWeight GetWeight() const = 0; virtual bool GetUnderlined() const = 0; + virtual bool GetStrikethrough() const { return false; } virtual wxString GetFaceName() const = 0; virtual wxFontEncoding GetEncoding() const = 0; virtual const wxNativeFontInfo *GetNativeFontInfo() const = 0; @@ -244,6 +245,7 @@ public: virtual void SetWeight( wxFontWeight weight ) = 0; virtual void SetUnderlined( bool underlined ) = 0; + virtual void SetStrikethrough( bool WXUNUSED(strikethrough) ) {} virtual void SetEncoding(wxFontEncoding encoding) = 0; virtual bool SetFaceName( const wxString& faceName ); void SetNativeFontInfo(const wxNativeFontInfo& info) @@ -277,7 +279,7 @@ public: static void SetDefaultEncoding(wxFontEncoding encoding); // this doesn't do anything and is kept for compatibility only -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 wxDEPRECATED_INLINE(void SetNoAntiAliasing(bool no = true), wxUnusedVar(no);); wxDEPRECATED_INLINE(bool GetNoAntiAliasing() const, return false;) #endif // WXWIN_COMPATIBILITY_2_8 @@ -290,6 +292,33 @@ protected: // wxFONTFAMILY_UNKNOWN unlike the public method (see comment there). virtual wxFontFamily DoGetFamily() const = 0; + + // Helper functions to recover wxFONTSTYLE/wxFONTWEIGHT and underlined flg + // values from flags containing a combination of wxFONTFLAG_XXX. + static wxFontStyle GetStyleFromFlags(int flags) + { + return flags & wxFONTFLAG_ITALIC + ? wxFONTSTYLE_ITALIC + : flags & wxFONTFLAG_SLANT + ? wxFONTSTYLE_SLANT + : wxFONTSTYLE_NORMAL; + } + + static wxFontWeight GetWeightFromFlags(int flags) + { + return flags & wxFONTFLAG_LIGHT + ? wxFONTWEIGHT_LIGHT + : flags & wxFONTFLAG_BOLD + ? wxFONTWEIGHT_BOLD + : wxFONTWEIGHT_NORMAL; + } + + static bool GetUnderlinedFromFlags(int flags) + { + return (flags & wxFONTFLAG_UNDERLINED) != 0; + } + + private: // the currently default encoding: by default, it's the default system // encoding, but may be changed by the application using @@ -329,6 +358,7 @@ WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxFontBase* font); wxFont& MakeBold(); \ wxFont& MakeItalic(); \ wxFont& MakeUnderlined(); \ + wxFont& MakeStrikethrough(); \ wxFont& MakeLarger() { return Scale(1.2f); } \ wxFont& MakeSmaller() { return Scale(1/1.2f); } \ wxFont& Scale(float x); \ @@ -336,14 +366,13 @@ WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxFontBase* font); wxFont Bold() const; \ wxFont Italic() const; \ wxFont Underlined() const; \ + wxFont Strikethrough() const; \ wxFont Larger() const { return Scaled(1.2f); } \ wxFont Smaller() const { return Scaled(1/1.2f); } \ wxFont Scaled(float x) const // include the real class declaration -#if defined(__WXPALMOS__) - #include "wx/palmos/font.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/font.h" #elif defined(__WXMOTIF__) #include "wx/motif/font.h" @@ -353,8 +382,6 @@ WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxFontBase* font); #include "wx/gtk1/font.h" #elif defined(__WXX11__) #include "wx/x11/font.h" -#elif defined(__WXMGL__) - #include "wx/mgl/font.h" #elif defined(__WXDFB__) #include "wx/dfb/font.h" #elif defined(__WXMAC__) diff --git a/Externals/wxWidgets3/include/wx/fontutil.h b/Externals/wxWidgets3/include/wx/fontutil.h index a34bf5ef5e..232ef8a8e3 100644 --- a/Externals/wxWidgets3/include/wx/fontutil.h +++ b/Externals/wxWidgets3/include/wx/fontutil.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 05.11.99 -// RCS-ID: $Id: fontutil.h 63918 2010-04-08 21:39:14Z SC $ +// RCS-ID: $Id: fontutil.h 70446 2012-01-23 11:28:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -172,6 +172,7 @@ public: wxFontStyle m_style; wxFontWeight m_weight; bool m_underlined; + bool m_strikethrough; wxString m_faceName; wxFontEncoding m_encoding; public : @@ -187,6 +188,7 @@ public : wxFontStyle style; wxFontWeight weight; bool underlined; + bool strikethrough; wxString faceName; wxFontEncoding encoding; #endif // platforms @@ -224,6 +226,7 @@ public: SetStyle((wxFontStyle)font.GetStyle()); SetWeight((wxFontWeight)font.GetWeight()); SetUnderlined(font.GetUnderlined()); + SetStrikethrough(font.GetStrikethrough()); #if defined(__WXMSW__) if ( font.IsUsingSizeInPixels() ) SetPixelSize(font.GetPixelSize()); @@ -252,6 +255,7 @@ public: wxFontStyle GetStyle() const; wxFontWeight GetWeight() const; bool GetUnderlined() const; + bool GetStrikethrough() const; wxString GetFaceName() const; wxFontFamily GetFamily() const; wxFontEncoding GetEncoding() const; @@ -261,6 +265,7 @@ public: void SetStyle(wxFontStyle style); void SetWeight(wxFontWeight weight); void SetUnderlined(bool underlined); + void SetStrikethrough(bool strikethrough); bool SetFaceName(const wxString& facename); void SetFamily(wxFontFamily family); void SetEncoding(wxFontEncoding encoding); diff --git a/Externals/wxWidgets3/include/wx/frame.h b/Externals/wxWidgets3/include/wx/frame.h index e2f06c5c79..396dd98f5a 100644 --- a/Externals/wxWidgets3/include/wx/frame.h +++ b/Externals/wxWidgets3/include/wx/frame.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 15.11.99 -// RCS-ID: $Id: frame.h 64278 2010-05-10 21:09:50Z VZ $ +// RCS-ID: $Id: frame.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -39,7 +39,6 @@ class WXDLLIMPEXP_FWD_CORE wxToolBar; #define wxFRAME_NO_TASKBAR 0x0002 // No taskbar button (MSW only) #define wxFRAME_TOOL_WINDOW 0x0004 // No taskbar button, no system menu #define wxFRAME_FLOAT_ON_PARENT 0x0008 // Always above its parent -#define wxFRAME_SHAPED 0x0010 // Create a window that is able to be shaped // ---------------------------------------------------------------------------- // wxFrame is a top-level window with optional menubar, statusbar and toolbar @@ -252,9 +251,7 @@ protected: #if defined(__WXUNIVERSAL__) // && !defined(__WXMICROWIN__) #include "wx/univ/frame.h" #else // !__WXUNIVERSAL__ - #if defined(__WXPALMOS__) - #include "wx/palmos/frame.h" - #elif defined(__WXMSW__) + #if defined(__WXMSW__) #include "wx/msw/frame.h" #elif defined(__WXGTK20__) #include "wx/gtk/frame.h" diff --git a/Externals/wxWidgets3/include/wx/fswatcher.h b/Externals/wxWidgets3/include/wx/fswatcher.h index 446ac98245..239a5b4dad 100644 --- a/Externals/wxWidgets3/include/wx/fswatcher.h +++ b/Externals/wxWidgets3/include/wx/fswatcher.h @@ -3,7 +3,7 @@ // Purpose: wxFileSystemWatcherBase // Author: Bartosz Bekier // Created: 2009-05-23 -// RCS-ID: $Id: fswatcher.h 62474 2009-10-22 11:35:43Z VZ $ +// RCS-ID: $Id: fswatcher.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2009 Bartosz Bekier // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -55,6 +55,16 @@ enum wxFSW_EVENT_WARNING | wxFSW_EVENT_ERROR }; +// Type of the path watched, used only internally for now. +enum wxFSWPathType +{ + wxFSWPath_None, // Invalid value for an initialized watch. + wxFSWPath_File, // Plain file. + wxFSWPath_Dir, // Watch a directory and the files in it. + wxFSWPath_Tree // Watch a directory and all its children recursively. +}; + + /** * Event containing information about file system change. */ @@ -174,24 +184,24 @@ typedef void (wxEvtHandler::*wxFileSystemWatcherEventFunction) #define wxFileSystemWatcherEventHandler(func) \ wxEVENT_HANDLER_CAST(wxFileSystemWatcherEventFunction, func) +#define EVT_FSWATCHER(winid, func) \ + wx__DECLARE_EVT1(wxEVT_FSWATCHER, winid, wxFileSystemWatcherEventHandler(func)) // ---------------------------------------------------------------------------- // wxFileSystemWatcherBase: interface for wxFileSystemWatcher // ---------------------------------------------------------------------------- -/** - * Simple container to store information about one watched file - */ +// Simple container to store information about one watched path. class wxFSWatchInfo { public: wxFSWatchInfo() : - m_path(wxEmptyString), m_events(-1) + m_events(-1), m_type(wxFSWPath_None) { } - wxFSWatchInfo(const wxString& path, int events) : - m_path(path), m_events(events) + wxFSWatchInfo(const wxString& path, int events, wxFSWPathType type) : + m_path(path), m_events(events), m_type(type) { } @@ -205,9 +215,15 @@ public: return m_events; } + wxFSWPathType GetType() const + { + return m_type; + } + protected: wxString m_path; int m_events; + wxFSWPathType m_type; }; WX_DECLARE_STRING_HASH_MAP(wxFSWatchInfo, wxFSWatchInfoMap); @@ -304,6 +320,11 @@ protected: return path_copy.GetFullPath(); } + // Delegates the real work of adding the path to wxFSWatcherImpl::Add() and + // updates m_watches if the new path was successfully added. + bool DoAdd(const wxFileName& path, int events, wxFSWPathType type); + + wxFSWatchInfoMap m_watches; // path=>wxFSWatchInfo map wxFSWatcherImpl* m_service; // file system events service wxEvtHandler* m_owner; // handler for file system events @@ -320,7 +341,7 @@ protected: #elif defined(wxHAS_KQUEUE) #include "wx/unix/fswatcher_kqueue.h" #define wxFileSystemWatcher wxKqueueFileSystemWatcher -#elif defined(__WXMSW__) +#elif defined(__WINDOWS__) #include "wx/msw/fswatcher.h" #define wxFileSystemWatcher wxMSWFileSystemWatcher #else diff --git a/Externals/wxWidgets3/include/wx/gbsizer.h b/Externals/wxWidgets3/include/wx/gbsizer.h index 582f2881bb..51dc057d3d 100644 --- a/Externals/wxWidgets3/include/wx/gbsizer.h +++ b/Externals/wxWidgets3/include/wx/gbsizer.h @@ -6,7 +6,7 @@ // // Author: Robin Dunn // Created: 03-Nov-2003 -// RCS-ID: $Id: gbsizer.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: gbsizer.h 69970 2011-12-10 04:34:06Z RD $ // Copyright: (c) Robin Dunn // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -115,26 +115,26 @@ public: wxGBSizerItem( int width, int height, const wxGBPosition& pos, - const wxGBSpan& span, - int flag, - int border, - wxObject* userData); + const wxGBSpan& span=wxDefaultSpan, + int flag=0, + int border=0, + wxObject* userData=NULL); // window wxGBSizerItem( wxWindow *window, const wxGBPosition& pos, - const wxGBSpan& span, - int flag, - int border, - wxObject* userData ); + const wxGBSpan& span=wxDefaultSpan, + int flag=0, + int border=0, + wxObject* userData=NULL ); // subsizer wxGBSizerItem( wxSizer *sizer, const wxGBPosition& pos, - const wxGBSpan& span, - int flag, - int border, - wxObject* userData ); + const wxGBSpan& span=wxDefaultSpan, + int flag=0, + int border=0, + wxObject* userData=NULL ); // default ctor wxGBSizerItem(); @@ -160,7 +160,7 @@ public: // is successful and after the next Layout the item will be resized. bool SetSpan( const wxGBSpan& span ); - // Returns true if this item and the other item instersect + // Returns true if this item and the other item intersect bool Intersects(const wxGBSizerItem& other); // Returns true if the given pos/span would intersect with this item. diff --git a/Externals/wxWidgets3/include/wx/gdicmn.h b/Externals/wxWidgets3/include/wx/gdicmn.h index 101c9a3907..d69b5f89be 100644 --- a/Externals/wxWidgets3/include/wx/gdicmn.h +++ b/Externals/wxWidgets3/include/wx/gdicmn.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: gdicmn.h 66306 2010-12-03 12:39:43Z VZ $ +// RCS-ID: $Id: gdicmn.h 70789 2012-03-04 00:28:58Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -59,8 +59,10 @@ enum wxBitmapType wxBITMAP_TYPE_XBM_DATA, wxBITMAP_TYPE_XPM, wxBITMAP_TYPE_XPM_DATA, - wxBITMAP_TYPE_TIF, - wxBITMAP_TYPE_TIF_RESOURCE, + wxBITMAP_TYPE_TIFF, + wxBITMAP_TYPE_TIF = wxBITMAP_TYPE_TIFF, + wxBITMAP_TYPE_TIFF_RESOURCE, + wxBITMAP_TYPE_TIF_RESOURCE = wxBITMAP_TYPE_TIFF_RESOURCE, wxBITMAP_TYPE_GIF, wxBITMAP_TYPE_GIF_RESOURCE, wxBITMAP_TYPE_PNG, @@ -158,14 +160,18 @@ enum wxStockCursor // macros // --------------------------------------------------------------------------- +#if defined(__WINDOWS__) || defined(__WXPM__) + #define wxHAS_IMAGES_IN_RESOURCES +#endif + /* Useful macro for creating icons portably, for example: wxIcon *icon = new wxICON(sample); expands into: - wxIcon *icon = new wxIcon("sample"); // On wxMSW - wxIcon *icon = new wxIcon(sample_xpm); // On wxGTK + wxIcon *icon = new wxIcon("sample"); // On Windows + wxIcon *icon = new wxIcon(sample_xpm); // On wxGTK/Linux */ #ifdef __WXMSW__ @@ -174,9 +180,6 @@ enum wxStockCursor #elif defined(__WXPM__) // Load from a resource #define wxICON(X) wxIcon(wxT(#X)) -#elif defined(__WXMGL__) - // Initialize from an included XPM - #define wxICON(X) wxIcon( X##_xpm ) #elif defined(__WXDFB__) // Initialize from an included XPM #define wxICON(X) wxIcon( X##_xpm ) @@ -202,12 +205,11 @@ enum wxStockCursor */ #if defined(__WXMSW__) || defined(__WXPM__) - #define wxBITMAP(name) wxBitmap(wxT(#name), wxBITMAP_TYPE_RESOURCE) + #define wxBITMAP(name) wxBitmap(wxT(#name), wxBITMAP_TYPE_BMP_RESOURCE) #elif defined(__WXGTK__) || \ defined(__WXMOTIF__) || \ defined(__WXX11__) || \ defined(__WXMAC__) || \ - defined(__WXMGL__) || \ defined(__WXDFB__) || \ defined(__WXCOCOA__) // Initialize from an included XPM @@ -900,7 +902,7 @@ class WXDLLIMPEXP_CORE wxResourceCache: public wxList { public: wxResourceCache() { } -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS wxResourceCache(const unsigned int keyType) : wxList(keyType) { } #endif virtual ~wxResourceCache(); diff --git a/Externals/wxWidgets3/include/wx/gdiobj.h b/Externals/wxWidgets3/include/wx/gdiobj.h index fc018231ba..5e07df0d81 100644 --- a/Externals/wxWidgets3/include/wx/gdiobj.h +++ b/Externals/wxWidgets3/include/wx/gdiobj.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: gdiobj.h 66374 2010-12-14 18:43:49Z VZ $ +// RCS-ID: $Id: gdiobj.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -57,7 +57,7 @@ public: // because it's still widely used) bool Ok() const { return IsOk(); } -#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXPALMOS__) +#if defined(__WXMSW__) || defined(__WXPM__) // Creates the resource virtual bool RealizeResource() { return false; } diff --git a/Externals/wxWidgets3/include/wx/generic/aboutdlgg.h b/Externals/wxWidgets3/include/wx/generic/aboutdlgg.h index 9311de0abc..f5b1365953 100644 --- a/Externals/wxWidgets3/include/wx/generic/aboutdlgg.h +++ b/Externals/wxWidgets3/include/wx/generic/aboutdlgg.h @@ -3,7 +3,7 @@ // Purpose: generic wxAboutBox() implementation // Author: Vadim Zeitlin // Created: 2006-10-07 -// RCS-ID: $Id: aboutdlgg.h 60389 2009-04-26 13:41:21Z VZ $ +// RCS-ID: $Id: aboutdlgg.h 70413 2012-01-20 22:11:32Z VZ $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -21,6 +21,16 @@ class WXDLLIMPEXP_FWD_ADV wxAboutDialogInfo; class WXDLLIMPEXP_FWD_CORE wxSizer; class WXDLLIMPEXP_FWD_CORE wxSizerFlags; +// Under GTK and OS X "About" dialogs are not supposed to be modal, unlike MSW +// and, presumably, all the other platforms. +#ifndef wxUSE_MODAL_ABOUT_DIALOG + #if defined(__WXGTK__) || defined(__WXMAC__) + #define wxUSE_MODAL_ABOUT_DIALOG 0 + #else + #define wxUSE_MODAL_ABOUT_DIALOG 1 + #endif +#endif // wxUSE_MODAL_ABOUT_DIALOG not defined + // ---------------------------------------------------------------------------- // wxGenericAboutDialog: generic "About" dialog implementation // ---------------------------------------------------------------------------- @@ -73,6 +83,12 @@ private: // common part of all ctors void Init() { m_sizerText = NULL; } +#if !wxUSE_MODAL_ABOUT_DIALOG + // An explicit handler for deleting the dialog when it's closed is needed + // when we show it non-modally. + void OnCloseWindow(wxCloseEvent& event); + void OnOK(wxCommandEvent& event); +#endif // !wxUSE_MODAL_ABOUT_DIALOG wxSizer *m_sizerText; }; diff --git a/Externals/wxWidgets3/include/wx/generic/choicdgg.h b/Externals/wxWidgets3/include/wx/generic/choicdgg.h index 0cbf06d201..431c686b59 100644 --- a/Externals/wxWidgets3/include/wx/generic/choicdgg.h +++ b/Externals/wxWidgets3/include/wx/generic/choicdgg.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: 03.11.00: VZ to add wxArrayString and multiple sel functions // Created: 01/02/97 -// RCS-ID: $Id: choicdgg.h 63731 2010-03-21 11:06:31Z VZ $ +// RCS-ID: $Id: choicdgg.h 70642 2012-02-20 21:56:18Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -106,39 +106,112 @@ public: const wxString& caption, int n, const wxString *choices, - char **clientData = (char **)NULL, + void **clientData = NULL, long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition); + const wxPoint& pos = wxDefaultPosition) + { + Create(parent, message, caption, n, choices, clientData, style, pos); + } + wxSingleChoiceDialog(wxWindow *parent, const wxString& message, const wxString& caption, const wxArrayString& choices, - char **clientData = (char **)NULL, + void **clientData = NULL, long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition); + const wxPoint& pos = wxDefaultPosition) + { + Create(parent, message, caption, choices, clientData, style, pos); + } bool Create(wxWindow *parent, const wxString& message, const wxString& caption, int n, const wxString *choices, - char **clientData = (char **)NULL, + void **clientData = NULL, long style = wxCHOICEDLG_STYLE, const wxPoint& pos = wxDefaultPosition); bool Create(wxWindow *parent, const wxString& message, const wxString& caption, const wxArrayString& choices, - char **clientData = (char **)NULL, + void **clientData = NULL, long style = wxCHOICEDLG_STYLE, const wxPoint& pos = wxDefaultPosition); void SetSelection(int sel); int GetSelection() const { return m_selection; } wxString GetStringSelection() const { return m_stringSelection; } + void* GetSelectionData() const { return m_clientData; } - // obsolete function (NB: no need to make it return wxChar, it's untyped) - char *GetSelectionClientData() const { return (char *)m_clientData; } +#if WXWIN_COMPATIBILITY_2_8 + // Deprecated overloads taking "char**" client data. + wxDEPRECATED_CONSTRUCTOR + ( + wxSingleChoiceDialog(wxWindow *parent, + const wxString& message, + const wxString& caption, + int n, + const wxString *choices, + char **clientData, + long style = wxCHOICEDLG_STYLE, + const wxPoint& pos = wxDefaultPosition) + ) + { + Create(parent, message, caption, n, choices, + (void**)clientData, style, pos); + } + + wxDEPRECATED_CONSTRUCTOR + ( + wxSingleChoiceDialog(wxWindow *parent, + const wxString& message, + const wxString& caption, + const wxArrayString& choices, + char **clientData, + long style = wxCHOICEDLG_STYLE, + const wxPoint& pos = wxDefaultPosition) + ) + { + Create(parent, message, caption, choices, + (void**)clientData, style, pos); + } + + wxDEPRECATED_INLINE + ( + bool Create(wxWindow *parent, + const wxString& message, + const wxString& caption, + int n, + const wxString *choices, + char **clientData, + long style = wxCHOICEDLG_STYLE, + const wxPoint& pos = wxDefaultPosition), + return Create(parent, message, caption, n, choices, + (void**)clientData, style, pos); + ) + + wxDEPRECATED_INLINE + ( + bool Create(wxWindow *parent, + const wxString& message, + const wxString& caption, + const wxArrayString& choices, + char **clientData, + long style = wxCHOICEDLG_STYLE, + const wxPoint& pos = wxDefaultPosition), + return Create(parent, message, caption, choices, + (void**)clientData, style, pos); + ) + + // NB: no need to make it return wxChar, it's untyped + wxDEPRECATED_ACCESSOR + ( + char* GetSelectionClientData() const, + (char*)GetSelectionData() + ) +#endif // WXWIN_COMPATIBILITY_2_8 // implementation from now on void OnOK(wxCommandEvent& event); diff --git a/Externals/wxWidgets3/include/wx/generic/collpaneg.h b/Externals/wxWidgets3/include/wx/generic/collpaneg.h index 3a69a686d3..e06b361b18 100644 --- a/Externals/wxWidgets3/include/wx/generic/collpaneg.h +++ b/Externals/wxWidgets3/include/wx/generic/collpaneg.h @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 8/10/2006 -// RCS-ID: $Id: collpaneg.h 58606 2009-02-01 20:59:03Z FM $ +// RCS-ID: $Id: collpaneg.h 68366 2011-07-24 22:19:33Z VZ $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -25,7 +25,8 @@ class WXDLLIMPEXP_FWD_CORE wxDisclosureTriangle; // wxGenericCollapsiblePane // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxGenericCollapsiblePane : public wxCollapsiblePaneBase +class WXDLLIMPEXP_CORE wxGenericCollapsiblePane : + public wxNavigationEnabled { public: wxGenericCollapsiblePane() { Init(); } @@ -103,7 +104,6 @@ private: void OnButton(wxCommandEvent &ev); void OnSize(wxSizeEvent &ev); - WX_DECLARE_CONTROL_CONTAINER(); DECLARE_DYNAMIC_CLASS(wxGenericCollapsiblePane) DECLARE_EVENT_TABLE() }; diff --git a/Externals/wxWidgets3/include/wx/generic/custombgwin.h b/Externals/wxWidgets3/include/wx/generic/custombgwin.h new file mode 100644 index 0000000000..a7ed85d995 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/generic/custombgwin.h @@ -0,0 +1,96 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/generic/custombgwin.h +// Purpose: Generic implementation of wxCustomBackgroundWindow. +// Author: Vadim Zeitlin +// Created: 2011-10-10 +// RCS-ID: $Id: custombgwin.h 69378 2011-10-11 17:07:43Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GENERIC_CUSTOMBGWIN_H_ +#define _WX_GENERIC_CUSTOMBGWIN_H_ + +#include "wx/bitmap.h" + +// A helper to avoid template bloat: this class contains all type-independent +// code of wxCustomBackgroundWindow<> below. +class wxCustomBackgroundWindowGenericBase : public wxCustomBackgroundWindowBase +{ +public: + wxCustomBackgroundWindowGenericBase() { } + +protected: + void DoEraseBackground(wxEraseEvent& event, wxWindow* win) + { + wxDC& dc = *event.GetDC(); + + const wxSize clientSize = win->GetClientSize(); + const wxSize bitmapSize = m_bitmapBg.GetSize(); + + for ( int x = 0; x < clientSize.x; x += bitmapSize.x ) + { + for ( int y = 0; y < clientSize.y; y += bitmapSize.y ) + { + dc.DrawBitmap(m_bitmapBg, x, y); + } + } + } + + + // The bitmap used for painting the background if valid. + wxBitmap m_bitmapBg; + + + wxDECLARE_NO_COPY_CLASS(wxCustomBackgroundWindowGenericBase); +}; + +// ---------------------------------------------------------------------------- +// wxCustomBackgroundWindow +// ---------------------------------------------------------------------------- + +template +class wxCustomBackgroundWindow : public W, + public wxCustomBackgroundWindowGenericBase +{ +public: + typedef W BaseWindowClass; + + wxCustomBackgroundWindow() { } + +protected: + virtual void DoSetBackgroundBitmap(const wxBitmap& bmp) + { + m_bitmapBg = bmp; + + if ( m_bitmapBg.IsOk() ) + { + BaseWindowClass::Connect + ( + wxEVT_ERASE_BACKGROUND, + wxEraseEventHandler(wxCustomBackgroundWindow::OnEraseBackground) + ); + } + else + { + BaseWindowClass::Disconnect + ( + wxEVT_ERASE_BACKGROUND, + wxEraseEventHandler(wxCustomBackgroundWindow::OnEraseBackground) + ); + } + } + +private: + // Event handler for erasing the background which is only used when we have + // a valid background bitmap. + void OnEraseBackground(wxEraseEvent& event) + { + DoEraseBackground(event, this); + } + + + wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxCustomBackgroundWindow, W); +}; + +#endif // _WX_GENERIC_CUSTOMBGWIN_H_ diff --git a/Externals/wxWidgets3/include/wx/generic/dataview.h b/Externals/wxWidgets3/include/wx/generic/dataview.h index 30c9893749..af16d65218 100644 --- a/Externals/wxWidgets3/include/wx/generic/dataview.h +++ b/Externals/wxWidgets3/include/wx/generic/dataview.h @@ -3,7 +3,7 @@ // Purpose: wxDataViewCtrl generic implementation header // Author: Robert Roebling // Modified By: Bo Yang -// Id: $Id: dataview.h 65948 2010-10-30 15:57:41Z VS $ +// Id: $Id: dataview.h 70717 2012-02-27 18:54:02Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -68,10 +68,12 @@ public: virtual void SetFlags(int flags) { m_flags = flags; UpdateDisplay(); } virtual int GetFlags() const { return m_flags; } - virtual void SetAsSortKey(bool sort = true) { m_sort = sort; UpdateDisplay(); } virtual bool IsSortKey() const { return m_sort; } - virtual void SetSortOrder(bool ascending) { m_sortAscending = ascending; UpdateDisplay(); } + virtual void UnsetAsSortKey() { m_sort = false; UpdateDisplay(); } + + virtual void SetSortOrder(bool ascending); + virtual bool IsSortOrderAscending() const { return m_sortAscending; } virtual void SetBitmap( const wxBitmap& bitmap ) { wxDataViewColumnBase::SetBitmap(bitmap); UpdateDisplay(); } @@ -155,7 +157,7 @@ public: virtual wxDataViewColumn *GetSortingColumn() const; - virtual wxDataViewItem GetSelection() const; + virtual int GetSelectedItemsCount() const; virtual int GetSelections( wxDataViewItemArray & sel ) const; virtual void SetSelections( const wxDataViewItemArray & sel ); virtual void Select( const wxDataViewItem & item ); @@ -172,6 +174,8 @@ public: virtual wxRect GetItemRect( const wxDataViewItem & item, const wxDataViewColumn *column = NULL ) const; + virtual bool SetRowHeight( int rowHeight ); + virtual void Expand( const wxDataViewItem & item ); virtual void Collapse( const wxDataViewItem & item ); virtual bool IsExpanded( const wxDataViewItem & item ) const; @@ -185,19 +189,18 @@ public: virtual wxBorder GetDefaultBorder() const; - void StartEditor( const wxDataViewItem & item, unsigned int column ); + virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column); + + // These methods are specific to generic wxDataViewCtrl implementation and + // should not be used in portable code. + wxColour GetAlternateRowColour() const { return m_alternateRowColour; } + void SetAlternateRowColour(const wxColour& colour); protected: - virtual int GetSelections( wxArrayInt & sel ) const; - virtual void SetSelections( const wxArrayInt & sel ); - virtual void Select( int row ); - virtual void Unselect( int row ); - virtual bool IsSelected( int row ) const; - virtual void SelectRange( int from, int to ); - virtual void UnselectRange( int from, int to ); - virtual void EnsureVisible( int row, int column ); + // Notice that row here may be invalid (i.e. >= GetRowCount()), this is not + // an error and this function simply returns an invalid item in this case. virtual wxDataViewItem GetItemByRow( unsigned int row ) const; virtual int GetRowByItem( const wxDataViewItem & item ) const; @@ -226,21 +229,32 @@ public: // utility functions not part of the API // return the column displayed at the given position in the control wxDataViewColumn *GetColumnAt(unsigned int pos) const; + virtual wxDataViewColumn *GetCurrentColumn() const; + + virtual void OnInternalIdle(); + private: virtual wxDataViewItem DoGetCurrentItem() const; virtual void DoSetCurrentItem(const wxDataViewItem& item); void InvalidateColBestWidths(); void InvalidateColBestWidth(int idx); + void UpdateColWidths(); wxDataViewColumnList m_cols; // cached column best widths or 0 if not computed, values are for // respective columns from m_cols and the arrays have same size wxVector m_colsBestWidths; + // m_colsBestWidths partially invalid, needs recomputing + bool m_colsDirty; + wxDataViewModelNotifier *m_notifier; wxDataViewMainWindow *m_clientArea; wxDataViewHeaderWindow *m_headerArea; + // user defined color to draw row lines, may be invalid + wxColour m_alternateRowColour; + // the index of the column currently used for sorting or -1 int m_sortingColumnIdx; diff --git a/Externals/wxWidgets3/include/wx/generic/datectrl.h b/Externals/wxWidgets3/include/wx/generic/datectrl.h index b92e89990b..fe7dd57299 100644 --- a/Externals/wxWidgets3/include/wx/generic/datectrl.h +++ b/Externals/wxWidgets3/include/wx/generic/datectrl.h @@ -4,7 +4,7 @@ // Author: Andreas Pflug // Modified by: // Created: 2005-01-19 -// RCS-ID: $Id: datectrl.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: datectrl.h 70736 2012-02-28 14:41:30Z VZ $ // Copyright: (c) 2005 Andreas Pflug // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -82,6 +82,10 @@ private: void OnSize(wxSizeEvent& event); void OnFocus(wxFocusEvent& event); +#ifdef __WXOSX_COCOA__ + virtual void OSXGenerateEvent(const wxDateTime& WXUNUSED(dt)) { } +#endif + wxComboCtrl* m_combo; wxCalendarComboPopup* m_popup; diff --git a/Externals/wxWidgets3/include/wx/generic/dvrenderer.h b/Externals/wxWidgets3/include/wx/generic/dvrenderer.h index cfa70c9067..8e4eb7761c 100644 --- a/Externals/wxWidgets3/include/wx/generic/dvrenderer.h +++ b/Externals/wxWidgets3/include/wx/generic/dvrenderer.h @@ -3,7 +3,7 @@ // Purpose: wxDataViewRenderer for generic wxDataViewCtrl implementation // Author: Robert Roebling, Vadim Zeitlin // Created: 2009-11-07 (extracted from wx/generic/dataview.h) -// RCS-ID: $Id: dvrenderer.h 67099 2011-03-01 12:16:49Z VS $ +// RCS-ID: $Id: dvrenderer.h 69473 2011-10-19 16:20:17Z VS $ // Copyright: (c) 2006 Robert Roebling // (c) 2009 Vadim Zeitlin // Licence: wxWindows licence @@ -41,23 +41,16 @@ public: // implementation - // These callbacks are used by generic implementation of wxDVC itself. - // They're different from the corresponding Activate/LeftClick() methods - // which should only be overridable for the custom renderers while the - // generic implementation uses these ones for all of them, including the - // standard ones. + // This callback is used by generic implementation of wxDVC itself. It's + // different from the corresponding ActivateCell() method which should only + // be overridable for the custom renderers while the generic implementation + // uses this one for all of them, including the standard ones. - virtual bool WXOnActivate(const wxRect& WXUNUSED(cell), - wxDataViewModel *WXUNUSED(model), - const wxDataViewItem & WXUNUSED(item), - unsigned int WXUNUSED(col)) - { return false; } - - virtual bool WXOnLeftClick(const wxPoint& WXUNUSED(cursor), - const wxRect& WXUNUSED(cell), - wxDataViewModel *WXUNUSED(model), - const wxDataViewItem & WXUNUSED(item), - unsigned int WXUNUSED(col) ) + virtual bool WXActivateCell(const wxRect& WXUNUSED(cell), + wxDataViewModel *WXUNUSED(model), + const wxDataViewItem & WXUNUSED(item), + unsigned int WXUNUSED(col), + const wxMouseEvent* WXUNUSED(mouseEvent)) { return false; } private: diff --git a/Externals/wxWidgets3/include/wx/generic/dvrenderers.h b/Externals/wxWidgets3/include/wx/generic/dvrenderers.h index 14040bdaa5..e5ca2c71ec 100644 --- a/Externals/wxWidgets3/include/wx/generic/dvrenderers.h +++ b/Externals/wxWidgets3/include/wx/generic/dvrenderers.h @@ -3,7 +3,7 @@ // Purpose: All generic wxDataViewCtrl renderer classes // Author: Robert Roebling, Vadim Zeitlin // Created: 2009-11-07 (extracted from wx/generic/dataview.h) -// RCS-ID: $Id: dvrenderers.h 67099 2011-03-01 12:16:49Z VS $ +// RCS-ID: $Id: dvrenderers.h 69473 2011-10-19 16:20:17Z VS $ // Copyright: (c) 2006 Robert Roebling // (c) 2009 Vadim Zeitlin // Licence: wxWindows licence @@ -26,21 +26,13 @@ public: // see the explanation of the following WXOnXXX() methods in wx/generic/dvrenderer.h - virtual bool WXOnActivate(const wxRect& cell, - wxDataViewModel *model, - const wxDataViewItem& item, - unsigned int col) + virtual bool WXActivateCell(const wxRect& cell, + wxDataViewModel *model, + const wxDataViewItem& item, + unsigned int col, + const wxMouseEvent *mouseEvent) { - return Activate(cell, model, item, col); - } - - virtual bool WXOnLeftClick(const wxPoint& cursor, - const wxRect& cell, - wxDataViewModel *model, - const wxDataViewItem &item, - unsigned int col) - { - return LeftClick(cursor, cell, model, item, col); + return ActivateCell(cell, model, item, col, mouseEvent); } private: @@ -67,9 +59,9 @@ public: // in-place editing virtual bool HasEditorCtrl() const; - virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, - const wxVariant &value ); - virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, + const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); protected: wxString m_text; @@ -121,11 +113,11 @@ public: wxSize GetSize() const; // Implementation only, don't use nor override - virtual bool WXOnLeftClick(const wxPoint& cursor, - const wxRect& cell, - wxDataViewModel *model, - const wxDataViewItem& item, - unsigned int col); + virtual bool WXActivateCell(const wxRect& cell, + wxDataViewModel *model, + const wxDataViewItem& item, + unsigned int col, + const wxMouseEvent *mouseEvent); private: bool m_toggle; @@ -177,9 +169,9 @@ public: virtual wxSize GetSize() const; virtual bool HasEditorCtrl() const { return true; } - virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, - const wxVariant &value ); - virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, + const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); private: wxDataViewIconText m_value; @@ -188,36 +180,5 @@ protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer) }; -// --------------------------------------------------------- -// wxDataViewDateRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewRenderer -{ -public: - wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, - int align = wxDVR_DEFAULT_ALIGNMENT ); - - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant& value ) const; - - virtual bool Render( wxRect cell, wxDC *dc, int state ); - virtual wxSize GetSize() const; - - // Implementation only, don't use nor override - virtual bool WXOnActivate(const wxRect& cell, - wxDataViewModel *model, - const wxDataViewItem& item, - unsigned int col); - -private: - wxDateTime m_date; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer) -}; - - #endif // _WX_GENERIC_DVRENDERERS_H_ diff --git a/Externals/wxWidgets3/include/wx/generic/filepickerg.h b/Externals/wxWidgets3/include/wx/generic/filepickerg.h index 34749fb190..f1283915c1 100644 --- a/Externals/wxWidgets3/include/wx/generic/filepickerg.h +++ b/Externals/wxWidgets3/include/wx/generic/filepickerg.h @@ -5,7 +5,7 @@ // Modified by: // Created: 14/4/2006 // Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: filepickerg.h 63690 2010-03-16 00:23:57Z VZ $ +// RCS-ID: $Id: filepickerg.h 70043 2011-12-18 12:34:47Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -49,7 +49,7 @@ public: virtual wxControl *AsControl() { return this; } -public: // overrideable +public: // overridable virtual wxDialog *CreateDialog() = 0; @@ -58,6 +58,8 @@ public: // overrideable virtual wxEventType GetEventType() const = 0; + virtual void SetInitialDirectory(const wxString& dir); + public: bool Create(wxWindow *parent, wxWindowID id, @@ -82,6 +84,9 @@ protected: // just doesn't make sense to use picker styles for wxButton anyhow long m_pickerStyle; + // Initial directory set by SetInitialDirectory() call or empty. + wxString m_initialDir; + private: // common part of all ctors void Init() { m_pickerStyle = -1; } @@ -114,7 +119,7 @@ public: pos, size, style, validator, name); } -public: // overrideable +public: // overridable virtual long GetDialogStyle() const { @@ -140,16 +145,7 @@ public: // overrideable return filedlgstyle; } - virtual wxDialog *CreateDialog() - { - wxFileDialog *p = new wxFileDialog(GetDialogParent(), m_message, - wxEmptyString, wxEmptyString, - m_wildcard, GetDialogStyle()); - - // this sets both the default folder and the default file of the dialog - p->SetPath(m_path); - return p; - } + virtual wxDialog *CreateDialog(); wxEventType GetEventType() const { return wxEVT_COMMAND_FILEPICKER_CHANGED; } @@ -160,6 +156,10 @@ protected: void UpdatePathFromDialog(wxDialog *p) { m_path = wxStaticCast(p, wxFileDialog)->GetPath(); } + // Set the initial directory for the dialog but without overriding the + // directory of the currently selected file, if any. + void DoSetInitialDirectory(wxFileDialog* dialog, const wxString& dir); + private: DECLARE_DYNAMIC_CLASS(wxGenericFileButton) }; @@ -190,7 +190,7 @@ public: pos, size, style, validator, name); } -public: // overrideable +public: // overridable virtual long GetDialogStyle() const { @@ -204,11 +204,7 @@ public: // overrideable return dirdlgstyle; } - virtual wxDialog *CreateDialog() - { - return new wxDirDialog(GetDialogParent(), m_message, m_path, - GetDialogStyle()); - } + virtual wxDialog *CreateDialog(); wxEventType GetEventType() const { return wxEVT_COMMAND_DIRPICKER_CHANGED; } diff --git a/Externals/wxWidgets3/include/wx/generic/grid.h b/Externals/wxWidgets3/include/wx/generic/grid.h index 18e5a267af..21b380023e 100644 --- a/Externals/wxWidgets3/include/wx/generic/grid.h +++ b/Externals/wxWidgets3/include/wx/generic/grid.h @@ -4,7 +4,7 @@ // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) // Modified by: Santiago Palacios // Created: 1/08/1999 -// RCS-ID: $Id: grid.h 65451 2010-08-30 22:18:52Z VZ $ +// RCS-ID: $Id: grid.h 70825 2012-03-06 10:23:44Z SC $ // Copyright: (c) Michael Bedward // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -432,9 +432,9 @@ public: void SetKind(wxAttrKind kind) { m_attrkind = kind; } // accessors - bool HasTextColour() const { return m_colText.Ok(); } - bool HasBackgroundColour() const { return m_colBack.Ok(); } - bool HasFont() const { return m_font.Ok(); } + bool HasTextColour() const { return m_colText.IsOk(); } + bool HasBackgroundColour() const { return m_colBack.IsOk(); } + bool HasFont() const { return m_font.IsOk(); } bool HasAlignment() const { return m_hAlign != wxALIGN_INVALID || m_vAlign != wxALIGN_INVALID; @@ -1637,7 +1637,7 @@ public: // unset any existing sorting column void UnsetSortingColumn() { SetSortingColumn(wxNOT_FOUND); } -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 // ------ For compatibility with previous wxGrid only... // // ************************************************ @@ -2160,7 +2160,7 @@ private: // -------------------------------- // process mouse drag event in WXGRID_CURSOR_SELECT_CELL mode - void DoGridCellDrag(wxMouseEvent& event, + bool DoGridCellDrag(wxMouseEvent& event, const wxGridCellCoords& coords, bool isFirstDrag); diff --git a/Externals/wxWidgets3/include/wx/generic/gridctrl.h b/Externals/wxWidgets3/include/wx/generic/gridctrl.h index a14d98111c..2cc9859025 100644 --- a/Externals/wxWidgets3/include/wx/generic/gridctrl.h +++ b/Externals/wxWidgets3/include/wx/generic/gridctrl.h @@ -4,7 +4,7 @@ // Author: Paul Gammans, Roger Gammans // Modified by: // Created: 11/04/2001 -// RCS-ID: $Id: gridctrl.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: gridctrl.h 69856 2011-11-28 13:23:33Z VZ $ // Copyright: (c) The Computer Surgery (paul@compsurg.co.uk) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -81,13 +81,17 @@ protected: class WXDLLIMPEXP_ADV wxGridCellFloatRenderer : public wxGridCellStringRenderer { public: - wxGridCellFloatRenderer(int width = -1, int precision = -1); + wxGridCellFloatRenderer(int width = -1, + int precision = -1, + int format = wxGRID_FLOAT_FORMAT_DEFAULT); // get/change formatting parameters int GetWidth() const { return m_width; } void SetWidth(int width) { m_width = width; m_format.clear(); } int GetPrecision() const { return m_precision; } void SetPrecision(int precision) { m_precision = precision; m_format.clear(); } + int GetFormat() const { return m_style; } + void SetFormat(int format) { m_style = format; m_format.clear(); } // draw the string right aligned with given width/precision virtual void Draw(wxGrid& grid, @@ -102,7 +106,8 @@ public: wxDC& dc, int row, int col); - // parameters string format is "width[,precision]" + // parameters string format is "width[,precision[,format]]" + // with format being one of f|e|g|E|F|G virtual void SetParameters(const wxString& params); virtual wxGridCellRenderer *Clone() const; @@ -115,6 +120,7 @@ private: int m_width, m_precision; + int m_style; wxString m_format; }; diff --git a/Externals/wxWidgets3/include/wx/generic/grideditors.h b/Externals/wxWidgets3/include/wx/generic/grideditors.h index 006b66232d..c3309e0470 100644 --- a/Externals/wxWidgets3/include/wx/generic/grideditors.h +++ b/Externals/wxWidgets3/include/wx/generic/grideditors.h @@ -4,7 +4,7 @@ // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) // Modified by: Santiago Palacios // Created: 1/08/1999 -// RCS-ID: $Id: grideditors.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: grideditors.h 70693 2012-02-25 23:49:55Z VZ $ // Copyright: (c) Michael Bedward // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -154,11 +154,38 @@ private: wxDECLARE_NO_COPY_CLASS(wxGridCellNumberEditor); }; + +enum wxGridCellFloatFormat +{ + // Decimal floating point (%f) + wxGRID_FLOAT_FORMAT_FIXED = 0x0010, + + // Scientific notation (mantise/exponent) using e character (%e) + wxGRID_FLOAT_FORMAT_SCIENTIFIC = 0x0020, + + // Use the shorter of %e or %f (%g) + wxGRID_FLOAT_FORMAT_COMPACT = 0x0040, + + // To use in combination with one of the above formats (%F/%E/%G) + wxGRID_FLOAT_FORMAT_UPPER = 0x0080, + + // Format used by default. + wxGRID_FLOAT_FORMAT_DEFAULT = wxGRID_FLOAT_FORMAT_FIXED, + + // A mask to extract format from the combination of flags. + wxGRID_FLOAT_FORMAT_MASK = wxGRID_FLOAT_FORMAT_FIXED | + wxGRID_FLOAT_FORMAT_SCIENTIFIC | + wxGRID_FLOAT_FORMAT_COMPACT | + wxGRID_FLOAT_FORMAT_UPPER +}; + // the editor for floating point numbers (double) data class WXDLLIMPEXP_ADV wxGridCellFloatEditor : public wxGridCellTextEditor { public: - wxGridCellFloatEditor(int width = -1, int precision = -1); + wxGridCellFloatEditor(int width = -1, + int precision = -1, + int format = wxGRID_FLOAT_FORMAT_DEFAULT); virtual void Create(wxWindow* parent, wxWindowID id, @@ -176,18 +203,22 @@ public: virtual wxGridCellEditor *Clone() const { return new wxGridCellFloatEditor(m_width, m_precision); } - // parameters string format is "width,precision" + // parameters string format is "width[,precision[,format]]" + // format to choose beween f|e|g|E|G (f is used by default) virtual void SetParameters(const wxString& params); protected: // string representation of our value - wxString GetString() const; + wxString GetString(); private: int m_width, m_precision; double m_value; + int m_style; + wxString m_format; + wxDECLARE_NO_COPY_CLASS(wxGridCellFloatEditor); }; @@ -264,6 +295,8 @@ public: wxWindowID id, wxEvtHandler* evtHandler); + virtual void SetSize(const wxRect& rect); + virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr); virtual void BeginEdit(int row, int col, wxGrid* grid); diff --git a/Externals/wxWidgets3/include/wx/generic/hyperlink.h b/Externals/wxWidgets3/include/wx/generic/hyperlink.h index 7a495ef09f..c834a7fd3b 100644 --- a/Externals/wxWidgets3/include/wx/generic/hyperlink.h +++ b/Externals/wxWidgets3/include/wx/generic/hyperlink.h @@ -4,7 +4,7 @@ // Author: David Norris , Otto Wyss // Modified by: Ryan Norton, Francesco Montorsi // Created: 04/02/2005 -// RCS-ID: $Id: hyperlink.h 65334 2010-08-17 16:55:32Z VZ $ +// RCS-ID: $Id: hyperlink.h 67948 2011-06-15 21:56:23Z VZ $ // Copyright: (c) 2005 David Norris // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -75,6 +75,12 @@ protected: // Renders the hyperlink. void OnPaint(wxPaintEvent& event); + // Handle set/kill focus events (invalidate for painting focus rect) + void OnFocus(wxFocusEvent& event); + + // Fire a HyperlinkEvent on space + void OnChar(wxKeyEvent& event); + // Returns the wxRect of the label of this hyperlink. // This is different from the clientsize's rectangle when // clientsize != bestsize and this rectangle is influenced diff --git a/Externals/wxWidgets3/include/wx/generic/listctrl.h b/Externals/wxWidgets3/include/wx/generic/listctrl.h index 069be51688..19622cac39 100644 --- a/Externals/wxWidgets3/include/wx/generic/listctrl.h +++ b/Externals/wxWidgets3/include/wx/generic/listctrl.h @@ -3,7 +3,7 @@ // Purpose: Generic list control // Author: Robert Roebling // Created: 01/02/97 -// RCS-ID: $Id: listctrl.h 64884 2010-07-11 10:44:08Z VZ $ +// RCS-ID: $Id: listctrl.h 70282 2012-01-07 15:09:43Z VZ $ // Copyright: (c) 1998 Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,8 +14,6 @@ #include "wx/scrolwin.h" #include "wx/textctrl.h" -class WXDLLIMPEXP_FWD_CORE wxImageList; - #if wxUSE_DRAG_AND_DROP class WXDLLIMPEXP_FWD_CORE wxDropTarget; #endif @@ -31,7 +29,7 @@ class WXDLLIMPEXP_FWD_CORE wxListMainWindow; // wxListCtrl //----------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxGenericListCtrl: public wxControl, +class WXDLLIMPEXP_CORE wxGenericListCtrl: public wxListCtrlBase, public wxScrollHelper { public: @@ -66,7 +64,7 @@ public: const wxString &name = wxListCtrlNameStr); bool GetColumn( int col, wxListItem& item ) const; - bool SetColumn( int col, wxListItem& item ); + bool SetColumn( int col, const wxListItem& item ); int GetColumnWidth( int col ) const; bool SetColumnWidth( int col, int width); int GetCountPerPage() const; // not the same in wxGLC as in Windows, I think @@ -134,18 +132,9 @@ public: long InsertItem( long index, const wxString& label ); long InsertItem( long index, int imageIndex ); long InsertItem( long index, const wxString& label, int imageIndex ); - long InsertColumn( long col, wxListItem& info ); - long InsertColumn( long col, const wxString& heading, - int format = wxLIST_FORMAT_LEFT, int width = -1 ); bool ScrollList( int dx, int dy ); bool SortItems( wxListCtrlCompare fn, wxIntPtr data ); - // are we in report mode? - bool InReportView() const { return HasFlag(wxLC_REPORT); } - - // are we in virtual report mode? - bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); } - // do we have a header window? bool HasHeader() const { return InReportView() && !HasFlag(wxLC_NO_HEADER); } @@ -214,6 +203,10 @@ public: wxListMainWindow *m_mainWin; protected: + // Implement base class pure virtual methods. + long DoInsertColumn(long col, const wxListItem& info); + + virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); // take into account the coordinates difference between the container diff --git a/Externals/wxWidgets3/include/wx/generic/logg.h b/Externals/wxWidgets3/include/wx/generic/logg.h index 2881dba02a..3ef9eacdc3 100644 --- a/Externals/wxWidgets3/include/wx/generic/logg.h +++ b/Externals/wxWidgets3/include/wx/generic/logg.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: logg.h 61346 2009-07-08 13:47:33Z VZ $ +// RCS-ID: $Id: logg.h 67656 2011-04-30 10:57:04Z DS $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -104,7 +104,7 @@ private: // ---------------------------------------------------------------------------- // (background) log window: this class forwards all log messages to the log // target which was active when it was instantiated, but also collects them -// to the log window. This window has it's own menu which allows the user to +// to the log window. This window has its own menu which allows the user to // close it, clear the log contents or save it to the file. // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/generic/msgdlgg.h b/Externals/wxWidgets3/include/wx/generic/msgdlgg.h index aa9a95be13..73fe48b4a7 100644 --- a/Externals/wxWidgets3/include/wx/generic/msgdlgg.h +++ b/Externals/wxWidgets3/include/wx/generic/msgdlgg.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: msgdlgg.h 65449 2010-08-30 21:48:21Z VZ $ +// RCS-ID: $Id: msgdlgg.h 68537 2011-08-04 22:53:42Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -32,6 +32,7 @@ protected: void OnYes(wxCommandEvent& event); void OnNo(wxCommandEvent& event); + void OnHelp(wxCommandEvent& event); void OnCancel(wxCommandEvent& event); // can be overridden to provide more contents to the dialog diff --git a/Externals/wxWidgets3/include/wx/generic/notebook.h b/Externals/wxWidgets3/include/wx/generic/notebook.h index 0a2b3a4531..e2c405e7ab 100644 --- a/Externals/wxWidgets3/include/wx/generic/notebook.h +++ b/Externals/wxWidgets3/include/wx/generic/notebook.h @@ -3,7 +3,7 @@ // Purpose: wxNotebook class (a.k.a. property sheet, tabbed dialog) // Author: Julian Smart // Modified by: -// RCS-ID: $Id: notebook.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: notebook.h 68810 2011-08-21 14:08:49Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -107,7 +107,7 @@ public: wxNotebookPage *pPage, const wxString& strText, bool bSelect = false, - int imageId = -1); + int imageId = NO_IMAGE); // callbacks // --------- diff --git a/Externals/wxWidgets3/include/wx/generic/panelg.h b/Externals/wxWidgets3/include/wx/generic/panelg.h index bd05855a1f..79dfe85c5c 100644 --- a/Externals/wxWidgets3/include/wx/generic/panelg.h +++ b/Externals/wxWidgets3/include/wx/generic/panelg.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: panelg.h 67253 2011-03-20 00:00:49Z VZ $ +// RCS-ID: $Id: panelg.h 70098 2011-12-23 05:59:59Z PC $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -30,7 +30,7 @@ public: Create(parent, winid, pos, size, style, name); } -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 wxDEPRECATED_CONSTRUCTOR( wxPanel(wxWindow *parent, int x, int y, int width, int height, @@ -42,18 +42,7 @@ public: ) #endif // WXWIN_COMPATIBILITY_2_8 -protected: - virtual void DoSetBackgroundBitmap(const wxBitmap& bmp); - private: - // Event handler for erasing the background which is only used when we have - // a valid background bitmap. - void OnEraseBackground(wxEraseEvent& event); - - - // The bitmap used for painting the background if valid. - wxBitmap m_bitmapBg; - wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxPanel); }; diff --git a/Externals/wxWidgets3/include/wx/generic/private/grid.h b/Externals/wxWidgets3/include/wx/generic/private/grid.h index f217481c3f..ab763a9c22 100644 --- a/Externals/wxWidgets3/include/wx/generic/private/grid.h +++ b/Externals/wxWidgets3/include/wx/generic/private/grid.h @@ -4,7 +4,7 @@ // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) // Modified by: Santiago Palacios // Created: 1/08/1999 -// RCS-ID: $Id: grid.h 66792 2011-01-27 18:35:01Z SC $ +// RCS-ID: $Id: grid.h 69861 2011-11-28 19:15:59Z VZ $ // Copyright: (c) Michael Bedward // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -301,6 +301,8 @@ public: m_owner = owner; } + virtual wxWindow *GetMainWindowOfCompositeControl() { return m_owner; } + virtual bool AcceptsFocus() const { return false; } wxGrid *GetOwner() { return m_owner; } @@ -546,6 +548,11 @@ public: // implemented for the lines virtual int GetLineAt(const wxGrid *grid, int pos) const = 0; + // Return the display position of the line with the given index. + // + // NB: As GetLineAt(), currently this is always identity for rows. + virtual int GetLinePos(const wxGrid *grid, int line) const = 0; + // Return the index of the line just before the given one. virtual int GetLineBefore(const wxGrid* grid, int line) const = 0; @@ -613,7 +620,9 @@ public: virtual void SetDefaultLineSize(wxGrid *grid, int size, bool resizeExisting) const { grid->SetDefaultRowSize(size, resizeExisting); } - virtual int GetLineAt(const wxGrid * WXUNUSED(grid), int line) const + virtual int GetLineAt(const wxGrid * WXUNUSED(grid), int pos) const + { return pos; } // TODO: implement row reordering + virtual int GetLinePos(const wxGrid * WXUNUSED(grid), int line) const { return line; } // TODO: implement row reordering virtual int GetLineBefore(const wxGrid* WXUNUSED(grid), int line) const @@ -677,8 +686,10 @@ public: virtual void SetDefaultLineSize(wxGrid *grid, int size, bool resizeExisting) const { grid->SetDefaultColSize(size, resizeExisting); } - virtual int GetLineAt(const wxGrid *grid, int line) const - { return grid->GetColAt(line); } + virtual int GetLineAt(const wxGrid *grid, int pos) const + { return grid->GetColAt(pos); } + virtual int GetLinePos(const wxGrid *grid, int line) const + { return grid->GetColPos(line); } virtual int GetLineBefore(const wxGrid* grid, int line) const { return grid->GetColAt(wxMax(0, grid->GetColPos(line) - 1)); } @@ -691,7 +702,10 @@ public: // This class abstracts the difference between operations going forward // (down/right) and backward (up/left) and allows to use the same code for -// functions which differ only in the direction of grid traversal +// functions which differ only in the direction of grid traversal. +// +// Notice that all operations in this class work with display positions and not +// internal indices which can be different if the columns were reordered. // // Like wxGridOperations it's an ABC with two concrete subclasses below. Unlike // it, this is a normal object and not just a function dispatch table and has a @@ -720,6 +734,12 @@ public: // Find the line at the given distance, in pixels, away from this one // (this uses clipping, i.e. anything after the last line is counted as the // last one and anything before the first one as 0) + // + // TODO: Implementation of this method currently doesn't support column + // reordering as it mixes up indices and positions. But this doesn't + // really matter as it's only called for rows (Page Up/Down only work + // vertically) and row reordering is not currently supported. We'd + // need to fix it if this ever changes however. virtual int MoveByPixelDistance(int line, int distance) const = 0; // This class is never used polymorphically but give it a virtual dtor @@ -727,6 +747,28 @@ public: virtual ~wxGridDirectionOperations() { } protected: + // Get the position of the row or column from the given coordinates pair. + // + // This is just a shortcut to avoid repeating m_oper and m_grid multiple + // times in the derived classes code. + int GetLinePos(const wxGridCellCoords& coords) const + { + return m_oper.GetLinePos(m_grid, m_oper.Select(coords)); + } + + // Get the index of the row or column from the position. + int GetLineAt(int pos) const + { + return m_oper.GetLineAt(m_grid, pos); + } + + // Check if the given line is visible, i.e. has non 0 size. + bool IsLineVisible(int line) const + { + return m_oper.GetLineSize(m_grid, line) != 0; + } + + wxGrid * const m_grid; const wxGridOperations& m_oper; }; @@ -743,14 +785,38 @@ public: { wxASSERT_MSG( m_oper.Select(coords) >= 0, "invalid row/column" ); - return m_oper.Select(coords) == 0; + int pos = GetLinePos(coords); + while ( pos ) + { + // Check the previous line. + int line = GetLineAt(--pos); + if ( IsLineVisible(line) ) + { + // There is another visible line before this one, hence it's + // not at boundary. + return false; + } + } + + // We reached the boundary without finding any visible lines. + return true; } virtual void Advance(wxGridCellCoords& coords) const { - wxASSERT( !IsAtBoundary(coords) ); + int pos = GetLinePos(coords); + for ( ;; ) + { + // This is not supposed to happen if IsAtBoundary() returned false. + wxCHECK_RET( pos, "can't advance when already at boundary" ); - m_oper.Set(coords, m_oper.Select(coords) - 1); + int line = GetLineAt(--pos); + if ( IsLineVisible(line) ) + { + m_oper.Set(coords, line); + break; + } + } } virtual int MoveByPixelDistance(int line, int distance) const @@ -760,6 +826,8 @@ public: } }; +// Please refer to the comments above when reading this class code, it's +// absolutely symmetrical to wxGridBackwardOperations. class wxGridForwardOperations : public wxGridDirectionOperations { public: @@ -773,14 +841,32 @@ public: { wxASSERT_MSG( m_oper.Select(coords) < m_numLines, "invalid row/column" ); - return m_oper.Select(coords) == m_numLines - 1; + int pos = GetLinePos(coords); + while ( pos < m_numLines - 1 ) + { + int line = GetLineAt(++pos); + if ( IsLineVisible(line) ) + return false; + } + + return true; } virtual void Advance(wxGridCellCoords& coords) const { - wxASSERT( !IsAtBoundary(coords) ); + int pos = GetLinePos(coords); + for ( ;; ) + { + wxCHECK_RET( pos < m_numLines - 1, + "can't advance when already at boundary" ); - m_oper.Set(coords, m_oper.Select(coords) + 1); + int line = GetLineAt(++pos); + if ( IsLineVisible(line) ) + { + m_oper.Set(coords, line); + break; + } + } } virtual int MoveByPixelDistance(int line, int distance) const diff --git a/Externals/wxWidgets3/include/wx/generic/private/listctrl.h b/Externals/wxWidgets3/include/wx/generic/private/listctrl.h index e2a8de78cb..3d7838a883 100644 --- a/Externals/wxWidgets3/include/wx/generic/private/listctrl.h +++ b/Externals/wxWidgets3/include/wx/generic/private/listctrl.h @@ -3,7 +3,7 @@ // Purpose: private definitions of wxListCtrl helpers // Author: Robert Roebling // Vadim Zeitlin (virtual list control support) -// Id: $Id: listctrl.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: listctrl.h 70285 2012-01-07 15:09:54Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -402,6 +402,10 @@ public: wxTextCtrl *GetText() const { return m_text; } + // Check if the given key event should stop editing and return true if it + // does or false otherwise. + bool CheckForEndEditKey(const wxKeyEvent& event); + // Different reasons for calling EndEdit(): // // It was called because: @@ -557,6 +561,7 @@ public: // called to switch the selection from the current item to newCurrent, void OnArrowChar( size_t newCurrent, const wxKeyEvent& event ); + void OnCharHook( wxKeyEvent &event ); void OnChar( wxKeyEvent &event ); void OnKeyDown( wxKeyEvent &event ); void OnKeyUp( wxKeyEvent &event ); @@ -570,13 +575,12 @@ public: void DrawImage( int index, wxDC *dc, int x, int y ); void GetImageSize( int index, int &width, int &height ) const; - int GetTextLength( const wxString &s ) const; void SetImageList( wxImageList *imageList, int which ); void SetItemSpacing( int spacing, bool isSmall = false ); int GetItemSpacing( bool isSmall = false ); - void SetColumn( int col, wxListItem &item ); + void SetColumn( int col, const wxListItem &item ); void SetColumnWidth( int col, int width ); void GetColumn( int col, wxListItem &item ) const; int GetColumnWidth( int col ) const; @@ -640,7 +644,7 @@ public: long FindItem( const wxPoint& pt ); long HitTest( int x, int y, int &flags ) const; void InsertItem( wxListItem &item ); - void InsertColumn( long col, wxListItem &item ); + void InsertColumn( long col, const wxListItem &item ); int GetItemWidthWithImage(wxListItem * item); void SortItems( wxListCtrlCompare fn, wxIntPtr data ); @@ -788,6 +792,10 @@ private: // delete all items but don't refresh: called from dtor void DoDeleteAllItems(); + // Compute the minimal width needed to fully display the column header. + int ComputeMinHeaderWidth(const wxListHeaderData* header) const; + + // the height of one line using the current font wxCoord m_lineHeight; diff --git a/Externals/wxWidgets3/include/wx/generic/private/richtooltip.h b/Externals/wxWidgets3/include/wx/generic/private/richtooltip.h new file mode 100644 index 0000000000..0ca479dadb --- /dev/null +++ b/Externals/wxWidgets3/include/wx/generic/private/richtooltip.h @@ -0,0 +1,62 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/generic/private/richtooltip.h +// Purpose: wxRichToolTipGenericImpl declaration. +// Author: Vadim Zeitlin +// Created: 2011-10-18 +// RCS-ID: $Id: richtooltip.h 69488 2011-10-20 16:20:19Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GENERIC_PRIVATE_RICHTOOLTIP_H_ +#define _GENERIC_PRIVATE_RICHTOOLTIP_H_ + +#include "wx/icon.h" +#include "wx/colour.h" + +// ---------------------------------------------------------------------------- +// wxRichToolTipGenericImpl: defines generic wxRichToolTip implementation. +// ---------------------------------------------------------------------------- + +class wxRichToolTipGenericImpl : public wxRichToolTipImpl +{ +public: + wxRichToolTipGenericImpl(const wxString& title, const wxString& message) : + m_title(title), + m_message(message) + { + m_tipKind = wxTipKind_Auto; + + // This is pretty arbitrary, we could follow MSW and use some multiple + // of double-click time here. + m_timeout = 5000; + } + + virtual void SetBackgroundColour(const wxColour& col, + const wxColour& colEnd); + virtual void SetCustomIcon(const wxIcon& icon); + virtual void SetStandardIcon(int icon); + virtual void SetTimeout(unsigned milliseconds); + virtual void SetTipKind(wxTipKind tipKind); + virtual void SetTitleFont(const wxFont& font); + + virtual void ShowFor(wxWindow* win); + +protected: + wxString m_title, + m_message; + +private: + wxIcon m_icon; + + wxColour m_colStart, + m_colEnd; + + unsigned m_timeout; + + wxTipKind m_tipKind; + + wxFont m_titleFont; +}; + +#endif // _WX_GENERIC_PRIVATE_RICHTOOLTIP_H_ diff --git a/Externals/wxWidgets3/include/wx/generic/prntdlgg.h b/Externals/wxWidgets3/include/wx/generic/prntdlgg.h index 1cd69143b1..e3317e1cc6 100644 --- a/Externals/wxWidgets3/include/wx/generic/prntdlgg.h +++ b/Externals/wxWidgets3/include/wx/generic/prntdlgg.h @@ -5,7 +5,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: prntdlgg.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: prntdlgg.h 70636 2012-02-20 21:55:55Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -34,7 +34,7 @@ class WXDLLIMPEXP_FWD_CORE wxCheckBox; class WXDLLIMPEXP_FWD_CORE wxComboBox; class WXDLLIMPEXP_FWD_CORE wxStaticText; class WXDLLIMPEXP_FWD_CORE wxRadioBox; -class WXDLLIMPEXP_FWD_CORE wxPageSetupData; +class WXDLLIMPEXP_FWD_CORE wxPageSetupDialogData; // ---------------------------------------------------------------------------- // constants diff --git a/Externals/wxWidgets3/include/wx/generic/progdlgg.h b/Externals/wxWidgets3/include/wx/generic/progdlgg.h index 518f43212b..38b69241db 100644 --- a/Externals/wxWidgets3/include/wx/generic/progdlgg.h +++ b/Externals/wxWidgets3/include/wx/generic/progdlgg.h @@ -4,7 +4,7 @@ // Author: Karsten Ballueder // Modified by: Francesco Montorsi // Created: 09.05.1999 -// RCS-ID: $Id: progdlgg.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: progdlgg.h 70512 2012-02-05 14:18:25Z VZ $ // Copyright: (c) Karsten Ballueder // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -27,6 +27,7 @@ class WXDLLIMPEXP_FWD_CORE wxWindowDisabler; class WXDLLIMPEXP_CORE wxGenericProgressDialog : public wxDialog { public: + wxGenericProgressDialog(); wxGenericProgressDialog(const wxString& title, const wxString& message, int maximum = 100, wxWindow *parent = NULL, @@ -34,6 +35,12 @@ public: virtual ~wxGenericProgressDialog(); + bool Create(const wxString& title, + const wxString& message, + int maximum = 100, + wxWindow *parent = NULL, + int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE); + virtual bool Update(int value, const wxString& newmsg = wxEmptyString, bool *skip = NULL); virtual bool Pulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL); @@ -67,15 +74,6 @@ public: }; protected: - // This ctor is used by the native MSW implementation only. - wxGenericProgressDialog(wxWindow *parent, int style); - - void Create(const wxString& title, - const wxString& message, - int maximum, - wxWindow *parent, - int style); - // Update just the m_maximum field, this is used by public SetRange() but, // unlike it, doesn't update the controls state. This makes it useful for // both this class and its derived classes that don't use m_gauge to @@ -95,7 +93,7 @@ protected: // Return the progress dialog style. Prefer to use HasPDFlag() if possible. int GetPDStyle() const { return m_pdStyle; } - + void SetPDStyle(int pdStyle) { m_pdStyle = pdStyle; } // Updates estimated times from a given progress bar value and stores the // results in provided arguments. @@ -123,6 +121,10 @@ protected: // the dialog was shown void ReenableOtherWindows(); + // Set the top level parent we store from the parent window provided when + // creating the dialog. + void SetTopParent(wxWindow* parent); + // return the top level parent window of this dialog (may be NULL) wxWindow *GetTopParent() const { return m_parentTop; } @@ -151,7 +153,7 @@ private: static void SetTimeLabel(unsigned long val, wxStaticText *label); // common part of all ctors - void Init(wxWindow *parent, int style); + void Init(); // create the label with given text and another one to show the time nearby // as the next windows in the sizer, returns the created control diff --git a/Externals/wxWidgets3/include/wx/generic/spinctlg.h b/Externals/wxWidgets3/include/wx/generic/spinctlg.h index 6115fce04e..36c777940e 100644 --- a/Externals/wxWidgets3/include/wx/generic/spinctlg.h +++ b/Externals/wxWidgets3/include/wx/generic/spinctlg.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 28.10.99 -// RCS-ID: $Id: spinctlg.h 67199 2011-03-15 11:10:38Z VZ $ +// RCS-ID: $Id: spinctlg.h 70432 2012-01-21 17:03:52Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -81,7 +81,6 @@ public: // forward these functions to all subcontrols virtual bool Enable(bool enable = true); virtual bool Show(bool show = true); - virtual bool Reparent(wxWindowBase *newParent); #if wxUSE_TOOLTIPS virtual void DoSetToolTip(wxToolTip *tip); #endif // wxUSE_TOOLTIPS @@ -92,7 +91,7 @@ public: // forwarded events from children windows void OnSpinButton(wxSpinEvent& event); - void OnTextLostFocus(); + void OnTextLostFocus(wxFocusEvent& event); void OnTextChar(wxKeyEvent& event); // this window itself is used only as a container for its sub windows so it @@ -108,6 +107,11 @@ protected: virtual wxSize DoGetBestSize() const; virtual void DoMoveWindow(int x, int y, int width, int height); +#ifdef __WXMSW__ + // and, for MSW, enabling this window itself + virtual void DoEnable(bool enable); +#endif // __WXMSW__ + // generic double valued functions double DoGetValue() const { return m_value; } bool DoSetValue(double val); @@ -148,6 +152,8 @@ protected: private: // common part of all ctors void Init(); + + DECLARE_EVENT_TABLE() }; #else // !wxUSE_SPINBTN diff --git a/Externals/wxWidgets3/include/wx/generic/splash.h b/Externals/wxWidgets3/include/wx/generic/splash.h index a435975544..a98704a639 100644 --- a/Externals/wxWidgets3/include/wx/generic/splash.h +++ b/Externals/wxWidgets3/include/wx/generic/splash.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 28/6/2000 -// RCS-ID: $Id: splash.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: splash.h 69796 2011-11-22 13:18:55Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -13,8 +13,9 @@ #define _WX_SPLASH_H_ #include "wx/bitmap.h" -#include "wx/timer.h" +#include "wx/eventfilter.h" #include "wx/frame.h" +#include "wx/timer.h" /* @@ -33,11 +34,12 @@ class WXDLLIMPEXP_FWD_ADV wxSplashScreenWindow; * wxSplashScreen */ -class WXDLLIMPEXP_ADV wxSplashScreen: public wxFrame +class WXDLLIMPEXP_ADV wxSplashScreen: public wxFrame, + public wxEventFilter { public: // for RTTI macros only - wxSplashScreen() {} + wxSplashScreen() { Init(); } wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, @@ -52,7 +54,13 @@ public: wxSplashScreenWindow* GetSplashWindow() const { return m_window; } int GetTimeout() const { return m_milliseconds; } + // Override wxEventFilter method to hide splash screen on any user input. + virtual int FilterEvent(wxEvent& event); + protected: + // Common part of all ctors. + void Init(); + wxSplashScreenWindow* m_window; long m_splashStyle; int m_milliseconds; @@ -74,8 +82,6 @@ public: void OnPaint(wxPaintEvent& event); void OnEraseBackground(wxEraseEvent& event); - void OnMouseEvent(wxMouseEvent& event); - void OnChar(wxKeyEvent& event); void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; } wxBitmap& GetBitmap() { return m_bitmap; } diff --git a/Externals/wxWidgets3/include/wx/generic/splitter.h b/Externals/wxWidgets3/include/wx/generic/splitter.h index 00a6c88583..47bdebceed 100644 --- a/Externals/wxWidgets3/include/wx/generic/splitter.h +++ b/Externals/wxWidgets3/include/wx/generic/splitter.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: splitter.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: splitter.h 70840 2012-03-08 13:23:39Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -49,7 +49,7 @@ enum // to prevent flickering. (WS_CLIPCHILDREN doesn't work in all cases so can't be // standard). -class WXDLLIMPEXP_CORE wxSplitterWindow: public wxWindow +class WXDLLIMPEXP_CORE wxSplitterWindow: public wxNavigationEnabled { public: @@ -136,8 +136,14 @@ public: // Sets the border size void SetBorderSize(int WXUNUSED(width)) { } - // Gets the sash size + // Hide or show the sash and test whether it's currently hidden. + void SetSashInvisible(bool invisible = true); + bool IsSashInvisible() const { return HasFlag(wxSP_NOSASH); } + + // Gets the current sash size which may be 0 if it's hidden and the default + // sash size. int GetSashSize() const; + int GetDefaultSashSize() const; // Gets the border size int GetBorderSize() const; @@ -211,9 +217,6 @@ public: // Resizes subwindows virtual void SizeWindows(); - void SetNeedUpdating(bool needUpdating) { m_needUpdating = needUpdating; } - bool GetNeedUpdating() const { return m_needUpdating ; } - #ifdef __WXMAC__ virtual bool MacClipGrandChildren() const { return true ; } #endif @@ -297,11 +300,8 @@ protected: bool m_needUpdating:1; bool m_permitUnsplitAlways:1; bool m_isHot:1; - bool m_checkRequestedSashPosition:1; private: - WX_DECLARE_CONTROL_CONTAINER(); - DECLARE_DYNAMIC_CLASS(wxSplitterWindow) DECLARE_EVENT_TABLE() wxDECLARE_NO_COPY_CLASS(wxSplitterWindow); diff --git a/Externals/wxWidgets3/include/wx/generic/srchctlg.h b/Externals/wxWidgets3/include/wx/generic/srchctlg.h index 33af7b7631..864efcd142 100644 --- a/Externals/wxWidgets3/include/wx/generic/srchctlg.h +++ b/Externals/wxWidgets3/include/wx/generic/srchctlg.h @@ -3,7 +3,7 @@ // Purpose: generic wxSearchCtrl class // Author: Vince Harron // Created: 2006-02-19 -// RCS-ID: $Id: srchctlg.h 59269 2009-03-02 14:49:55Z VZ $ +// RCS-ID: $Id: srchctlg.h 68911 2011-08-27 12:13:23Z VZ $ // Copyright: Vince Harron // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -191,6 +191,7 @@ public: // wxWindow overrides virtual bool SetFont(const wxFont& font); + virtual bool SetBackgroundColour(const wxColour& colour); // search control generic only void SetSearchBitmap( const wxBitmap& bitmap ); @@ -235,6 +236,9 @@ protected: private: friend class wxSearchButton; + // Implement pure virtual function inherited from wxCompositeWindow. + virtual wxWindowList GetCompositeWindowParts() const; + #if wxUSE_MENUS void PopupSearchMenu(); #endif // wxUSE_MENUS diff --git a/Externals/wxWidgets3/include/wx/generic/statbmpg.h b/Externals/wxWidgets3/include/wx/generic/statbmpg.h index f62acc721c..930e3943b9 100644 --- a/Externals/wxWidgets3/include/wx/generic/statbmpg.h +++ b/Externals/wxWidgets3/include/wx/generic/statbmpg.h @@ -3,7 +3,7 @@ // Purpose: wxGenericStaticBitmap header // Author: Marcin Wojdyr, Stefan Csomor // Created: 2008-06-16 -// RCS-ID: $Id: statbmpg.h 61724 2009-08-21 10:41:26Z VZ $ +// RCS-ID: $Id: statbmpg.h 67681 2011-05-03 16:29:04Z DS $ // Copyright: wxWidgets developers // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -61,7 +61,7 @@ public: private: wxSize GetBitmapSize() { - return m_bitmap.Ok() ? wxSize(m_bitmap.GetWidth(), m_bitmap.GetHeight()) + return m_bitmap.IsOk() ? wxSize(m_bitmap.GetWidth(), m_bitmap.GetHeight()) : wxSize(16, 16); // this is completely arbitrary } diff --git a/Externals/wxWidgets3/include/wx/generic/statusbr.h b/Externals/wxWidgets3/include/wx/generic/statusbr.h index 0f5511235b..dc2a3f88a4 100644 --- a/Externals/wxWidgets3/include/wx/generic/statusbr.h +++ b/Externals/wxWidgets3/include/wx/generic/statusbr.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: VZ at 05.02.00 to derive from wxStatusBarBase // Created: 01/02/97 -// RCS-ID: $Id: statusbr.h 61624 2009-08-06 00:01:43Z VZ $ +// RCS-ID: $Id: statusbr.h 67384 2011-04-03 20:31:32Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -81,7 +81,7 @@ protected: virtual void InitColours(); // true if the status bar shows the size grip: for this it must have - // wxSTB_SIZEGRIP style and the window it is attached to must be resizeable + // wxSTB_SIZEGRIP style and the window it is attached to must be resizable // and not maximized bool ShowsSizeGrip() const; diff --git a/Externals/wxWidgets3/include/wx/generic/tabg.h b/Externals/wxWidgets3/include/wx/generic/tabg.h index e7f07fcbf5..ea21a32a6d 100644 --- a/Externals/wxWidgets3/include/wx/generic/tabg.h +++ b/Externals/wxWidgets3/include/wx/generic/tabg.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: tabg.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: tabg.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -130,7 +130,7 @@ public: // Called when a tab is activated virtual void OnTabActivate(int activateId, int deactivateId); // Allows vetoing - virtual bool OnTabPreActivate(int WXUNUSED(activateId), int WXUNUSED(deactivateId) ) { return true; }; + virtual bool OnTabPreActivate(int WXUNUSED(activateId), int WXUNUSED(deactivateId) ) { return true; } // Allows use of application-supplied wxTabControl classes. virtual wxTabControl *OnCreateTabControl(void) { return new wxTabControl(this); } diff --git a/Externals/wxWidgets3/include/wx/generic/timectrl.h b/Externals/wxWidgets3/include/wx/generic/timectrl.h new file mode 100644 index 0000000000..c04ab8f254 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/generic/timectrl.h @@ -0,0 +1,70 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/generic/timectrl.h +// Purpose: Generic implementation of wxTimePickerCtrl. +// Author: Paul Breen, Vadim Zeitlin +// Created: 2011-09-22 +// RCS-ID: $Id: timectrl.h 69489 2011-10-20 16:45:48Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GENERIC_TIMECTRL_H_ +#define _WX_GENERIC_TIMECTRL_H_ + +#include "wx/containr.h" +#include "wx/compositewin.h" + +class WXDLLIMPEXP_ADV wxTimePickerCtrlGeneric + : public wxCompositeWindow< wxNavigationEnabled > +{ +public: + typedef wxCompositeWindow< wxNavigationEnabled > Base; + + // Creating the control. + wxTimePickerCtrlGeneric() { Init(); } + virtual ~wxTimePickerCtrlGeneric(); + wxTimePickerCtrlGeneric(wxWindow *parent, + wxWindowID id, + const wxDateTime& date = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr) + { + Init(); + + (void)Create(parent, id, date, pos, size, style, validator, name); + } + + bool Create(wxWindow *parent, + wxWindowID id, + const wxDateTime& date = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr); + + // Implement pure virtual wxTimePickerCtrlBase methods. + virtual void SetValue(const wxDateTime& date); + virtual wxDateTime GetValue() const; + +protected: + virtual wxSize DoGetBestSize() const; + + virtual void DoMoveWindow(int x, int y, int width, int height); + +private: + void Init(); + + // Return the list of the windows composing this one. + virtual wxWindowList GetCompositeWindowParts() const; + + // Implementation data. + class wxTimePickerGenericImpl* m_impl; + + wxDECLARE_NO_COPY_CLASS(wxTimePickerCtrlGeneric); +}; + +#endif // _WX_GENERIC_TIMECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/geometry.h b/Externals/wxWidgets3/include/wx/geometry.h index 5ece43eb50..d8981c5756 100644 --- a/Externals/wxWidgets3/include/wx/geometry.h +++ b/Externals/wxWidgets3/include/wx/geometry.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 08/05/99 -// RCS-ID: $Id: geometry.h 59019 2009-02-19 07:36:27Z PC $ +// RCS-ID: $Id: geometry.h 70493 2012-01-31 19:39:43Z VZ $ // Copyright: (c) 1999 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -88,12 +88,9 @@ inline wxPoint2DInt operator+(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2) inline wxPoint2DInt operator-(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2); inline wxPoint2DInt operator*(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2); inline wxPoint2DInt operator*(wxInt32 n , const wxPoint2DInt& pt); -inline wxPoint2DInt operator*(wxInt32 n , const wxPoint2DInt& pt); -inline wxPoint2DInt operator*(const wxPoint2DInt& pt , wxInt32 n); inline wxPoint2DInt operator*(const wxPoint2DInt& pt , wxInt32 n); inline wxPoint2DInt operator/(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2); inline wxPoint2DInt operator/(const wxPoint2DInt& pt , wxInt32 n); -inline wxPoint2DInt operator/(const wxPoint2DInt& pt , wxInt32 n); inline wxPoint2DInt::wxPoint2DInt() { @@ -534,8 +531,8 @@ public: inline wxSize GetSize() { return wxSize((int) m_width, (int) m_height); } - // for the edge and corner accessors there are two setters conterparts, the Set.. functions keep the other corners at their - // position whenever sensible, the Move.. functions keep the size of the rect and move the other corners apropriately + // for the edge and corner accessors there are two setters counterparts, the Set.. functions keep the other corners at their + // position whenever sensible, the Move.. functions keep the size of the rect and move the other corners appropriately inline wxDouble GetLeft() const { return m_x; } inline void SetLeft( wxDouble n ) { m_width += m_x - n; m_x = n; } @@ -661,8 +658,8 @@ public: inline wxPoint2DInt GetPosition() { return wxPoint2DInt(m_x, m_y); } inline wxSize GetSize() { return wxSize(m_width, m_height); } - // for the edge and corner accessors there are two setters conterparts, the Set.. functions keep the other corners at their - // position whenever sensible, the Move.. functions keep the size of the rect and move the other corners apropriately + // for the edge and corner accessors there are two setters counterparts, the Set.. functions keep the other corners at their + // position whenever sensible, the Move.. functions keep the size of the rect and move the other corners appropriately inline wxInt32 GetLeft() const { return m_x; } inline void SetLeft( wxInt32 n ) { m_width += m_x - n; m_x = n; } diff --git a/Externals/wxWidgets3/include/wx/glcanvas.h b/Externals/wxWidgets3/include/wx/glcanvas.h index b45a96ffd6..c0ae3dbdf9 100644 --- a/Externals/wxWidgets3/include/wx/glcanvas.h +++ b/Externals/wxWidgets3/include/wx/glcanvas.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: glcanvas.h 66088 2010-11-10 13:52:04Z VZ $ +// RCS-ID: $Id: glcanvas.h 70165 2011-12-29 14:42:13Z SN $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -49,7 +49,7 @@ enum WX_GL_MIN_ACCUM_BLUE, // use blue buffer with most bits (> MIN_ACCUM_BLUE bits) WX_GL_MIN_ACCUM_ALPHA, // use alpha buffer with most bits (> MIN_ACCUM_ALPHA bits) WX_GL_SAMPLE_BUFFERS, // 1 for multisampling support (antialiasing) - WX_GL_SAMPLES // 4 for 2x2 antialising supersampling on most graphics cards + WX_GL_SAMPLES // 4 for 2x2 antialiasing supersampling on most graphics cards }; #define wxGLCanvasName wxT("GLCanvas") @@ -143,7 +143,7 @@ public: #ifdef __WXUNIVERSAL__ // resolve the conflict with wxWindowUniv::SetCurrent() - virtual bool SetCurrent(bool doit) { return wxWindow::SetCurrent(doit); }; + virtual bool SetCurrent(bool doit) { return wxWindow::SetCurrent(doit); } #endif protected: diff --git a/Externals/wxWidgets3/include/wx/graphics.h b/Externals/wxWidgets3/include/wx/graphics.h index 64b62bd7d7..0b2420faa8 100644 --- a/Externals/wxWidgets3/include/wx/graphics.h +++ b/Externals/wxWidgets3/include/wx/graphics.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Stefan Csomor -// RCS-ID: $Id: graphics.h 66514 2011-01-01 11:10:35Z SC $ +// RCS-ID: $Id: graphics.h 69485 2011-10-20 04:49:12Z RD $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,12 +19,27 @@ #include "wx/geometry.h" #include "wx/dynarray.h" #include "wx/dc.h" +#include "wx/image.h" #include "wx/vector.h" enum wxAntialiasMode { wxANTIALIAS_NONE, // should be 0 - wxANTIALIAS_DEFAULT, + wxANTIALIAS_DEFAULT +}; + +enum wxInterpolationQuality +{ + // default interpolation + wxINTERPOLATION_DEFAULT, + // no interpolation + wxINTERPOLATION_NONE, + // fast interpolation, suited for interactivity + wxINTERPOLATION_FAST, + // better quality + wxINTERPOLATION_GOOD, + // best quality, not suited for interactivity + wxINTERPOLATION_BEST }; enum wxCompositionMode @@ -35,6 +50,7 @@ enum wxCompositionMode // classic Porter-Duff compositions // http://keithp.com/~keithp/porterduff/p253-porter.pdf + wxCOMPOSITION_INVALID = -1, /* indicates invalid/unsupported mode */ wxCOMPOSITION_CLEAR, /* R = 0 */ wxCOMPOSITION_SOURCE, /* R = S */ wxCOMPOSITION_OVER, /* R = S + D*(1 - Sa) */ @@ -50,7 +66,7 @@ enum wxCompositionMode wxCOMPOSITION_XOR, /* R = S*(1 - Da) + D*(1 - Sa) */ // mathematical compositions - wxCOMPOSITION_ADD, /* R = S + D */ + wxCOMPOSITION_ADD /* R = S + D */ }; class WXDLLIMPEXP_FWD_CORE wxWindowDC; @@ -151,6 +167,14 @@ class WXDLLIMPEXP_CORE wxGraphicsBitmap : public wxGraphicsObject public: wxGraphicsBitmap() {} virtual ~wxGraphicsBitmap() {} + + // Convert bitmap to wxImage: this is more efficient than converting to + // wxBitmap first and then to wxImage and also works without X server + // connection under Unix that wxBitmap requires. +#if wxUSE_IMAGE + wxImage ConvertToImage() const; +#endif // wxUSE_IMAGE + private: DECLARE_DYNAMIC_CLASS(wxGraphicsBitmap) }; @@ -410,6 +434,13 @@ public: static wxGraphicsContext* Create( wxWindow* window ); +#if wxUSE_IMAGE + // Create a context for drawing onto a wxImage. The image life time must be + // greater than that of the context itself as when the context is destroyed + // it will copy its contents to the specified image. + static wxGraphicsContext* Create(wxImage& image); +#endif // wxUSE_IMAGE + // create a context that can be used for measuring texts only, no drawing allowed static wxGraphicsContext * Create(); @@ -459,11 +490,18 @@ public: wxDouble xc, wxDouble yc, wxDouble radius, const wxGraphicsGradientStops& stops) const; - // sets the font + // creates a font virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) const; + virtual wxGraphicsFont CreateFont(double sizeInPixels, + const wxString& facename, + int flags = wxFONTFLAG_DEFAULT, + const wxColour& col = *wxBLACK) const; // create a native bitmap representation virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) const; +#if wxUSE_IMAGE + wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image) const; +#endif // wxUSE_IMAGE // create a native bitmap representation virtual wxGraphicsBitmap CreateSubBitmap( const wxGraphicsBitmap &bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) const; @@ -496,6 +534,12 @@ public: // sets the antialiasing mode, returns true if it supported virtual bool SetAntialiasMode(wxAntialiasMode antialias) = 0; + // returns the current interpolation quality + virtual wxInterpolationQuality GetInterpolationQuality() const { return m_interpolation; } + + // sets the interpolation quality, returns true if it supported + virtual bool SetInterpolationQuality(wxInterpolationQuality interpolation) = 0; + // returns the current compositing operator virtual wxCompositionMode GetCompositionMode() const { return m_composition; } @@ -503,7 +547,13 @@ public: virtual bool SetCompositionMode(wxCompositionMode op) = 0; // returns the size of the graphics context in device coordinates - virtual void GetSize( wxDouble* width, wxDouble* height); + void GetSize(wxDouble* width, wxDouble* height) + { + if ( width ) + *width = m_width; + if ( height ) + *height = m_height; + } // returns the resolution of the graphics context in device points per inch virtual void GetDPI( wxDouble* dpiX, wxDouble* dpiY); @@ -636,14 +686,26 @@ public: // helper to determine if a 0.5 offset should be applied for the drawing operation virtual bool ShouldOffset() const { return false; } - + + // indicates whether the context should try to offset for pixel boundaries, this only makes sense on + // bitmap devices like screen, by default this is turned off + virtual void EnableOffset(bool enable = true); + + void DisableOffset() { EnableOffset(false); } + bool OffsetEnabled() { return m_enableOffset; } + protected: + // These fields must be initialized in the derived class ctors. + wxDouble m_width, + m_height; wxGraphicsPen m_pen; wxGraphicsBrush m_brush; wxGraphicsFont m_font; wxAntialiasMode m_antialias; wxCompositionMode m_composition; + wxInterpolationQuality m_interpolation; + bool m_enableOffset; protected: // implementations of overloaded public functions: we use different names @@ -733,6 +795,10 @@ public: virtual wxGraphicsContext * CreateContext( wxWindow* window ) = 0; +#if wxUSE_IMAGE + virtual wxGraphicsContext * CreateContextFromImage(wxImage& image) = 0; +#endif // wxUSE_IMAGE + // create a context that can be used for measuring texts only, no drawing allowed virtual wxGraphicsContext * CreateMeasuringContext() = 0; @@ -767,9 +833,17 @@ public: // sets the font virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) = 0; + virtual wxGraphicsFont CreateFont(double sizeInPixels, + const wxString& facename, + int flags = wxFONTFLAG_DEFAULT, + const wxColour& col = *wxBLACK) = 0; // create a native bitmap representation virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0; +#if wxUSE_IMAGE + virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image) = 0; + virtual wxImage CreateImageFromBitmap(const wxGraphicsBitmap& bmp) = 0; +#endif // wxUSE_IMAGE // create a graphics bitmap from a native bitmap virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ) = 0; @@ -782,6 +856,16 @@ private: DECLARE_ABSTRACT_CLASS(wxGraphicsRenderer) }; -#endif + +#if wxUSE_IMAGE +inline +wxImage wxGraphicsBitmap::ConvertToImage() const +{ + wxGraphicsRenderer* renderer = GetRenderer(); + return renderer ? renderer->CreateImageFromBitmap(*this) : wxNullImage; +} +#endif // wxUSE_IMAGE + +#endif // wxUSE_GRAPHICS_CONTEXT #endif // _WX_GRAPHICS_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/animate.h b/Externals/wxWidgets3/include/wx/gtk/animate.h index 7dc5e96b6c..b48fb3a543 100644 --- a/Externals/wxWidgets3/include/wx/gtk/animate.h +++ b/Externals/wxWidgets3/include/wx/gtk/animate.h @@ -4,7 +4,7 @@ // Author: Julian Smart and Guillermo Rodriguez Garcia // Modified by: Francesco Montorsi // Created: 13/8/99 -// RCS-ID: $Id: animate.h 53629 2008-05-17 22:51:52Z VZ $ +// RCS-ID: $Id: animate.h 70520 2012-02-05 22:53:39Z SN $ // Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/Externals/wxWidgets3/include/wx/gtk/anybutton.h b/Externals/wxWidgets3/include/wx/gtk/anybutton.h new file mode 100644 index 0000000000..7dee3e096d --- /dev/null +++ b/Externals/wxWidgets3/include/wx/gtk/anybutton.h @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/anybutton.h +// Purpose: wxGTK wxAnyButton class declaration +// Author: Robert Roebling +// Created: 1998-05-20 (extracted from button.h) +// Id: $Id: anybutton.h 67931 2011-06-14 13:00:42Z VZ $ +// Copyright: (c) 1998 Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTK_ANYBUTTON_H_ +#define _WX_GTK_ANYBUTTON_H_ + +//----------------------------------------------------------------------------- +// wxAnyButton +//----------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxAnyButton : public wxAnyButtonBase +{ +public: + wxAnyButton() + { + m_isCurrent = + m_isPressed = false; + } + + virtual bool Enable( bool enable = true ); + + // implementation + // -------------- + + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); + + // called from GTK callbacks: they update the button state and call + // GTKUpdateBitmap() + void GTKMouseEnters(); + void GTKMouseLeaves(); + void GTKPressed(); + void GTKReleased(); + +protected: + virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const; + + virtual wxBitmap DoGetBitmap(State which) const; + virtual void DoSetBitmap(const wxBitmap& bitmap, State which); + virtual void DoSetBitmapPosition(wxDirection dir); + +private: + typedef wxAnyButtonBase base_type; + + // focus event handler: calls GTKUpdateBitmap() + void GTKOnFocus(wxFocusEvent& event); + + // update the bitmap to correspond to the current button state + void GTKUpdateBitmap(); + + // return the current button state from m_isXXX flags (which means that it + // might not correspond to the real current state as e.g. m_isCurrent will + // never be true if we don't have a valid current bitmap) + State GTKGetCurrentState() const; + + // show the given bitmap (must be valid) + void GTKDoShowBitmap(const wxBitmap& bitmap); + + + // the bitmaps for the different state of the buttons, all of them may be + // invalid and the button only shows a bitmap at all if State_Normal bitmap + // is valid + wxBitmap m_bitmaps[State_Max]; + + // true iff mouse is currently over the button + bool m_isCurrent; + + // true iff the button is in pressed state + bool m_isPressed; + + wxDECLARE_NO_COPY_CLASS(wxAnyButton); +}; + +#endif // _WX_GTK_ANYBUTTON_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/app.h b/Externals/wxWidgets3/include/wx/gtk/app.h index c7ed113db6..00028aca9d 100644 --- a/Externals/wxWidgets3/include/wx/gtk/app.h +++ b/Externals/wxWidgets3/include/wx/gtk/app.h @@ -2,7 +2,7 @@ // Name: wx/gtk/app.h // Purpose: wxApp definition for wxGTK // Author: Robert Roebling -// Id: $Id: app.h 63091 2010-01-07 18:30:18Z PC $ +// Id: $Id: app.h 69020 2011-09-07 16:56:50Z PC $ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -75,7 +75,7 @@ private: #if wxUSE_THREADS wxMutex m_idleMutex; #endif - guint m_idleSourceId; + unsigned m_idleSourceId; #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2 HildonProgram *m_hildonProgram; diff --git a/Externals/wxWidgets3/include/wx/gtk/assertdlg_gtk.h b/Externals/wxWidgets3/include/wx/gtk/assertdlg_gtk.h index 35b2b82be3..91197215b6 100644 --- a/Externals/wxWidgets3/include/wx/gtk/assertdlg_gtk.h +++ b/Externals/wxWidgets3/include/wx/gtk/assertdlg_gtk.h @@ -2,19 +2,13 @@ // Name: wx/gtk/assertdlg_gtk.h // Purpose: GtkAssertDialog // Author: Francesco Montorsi -// Id: $Id: assertdlg_gtk.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: assertdlg_gtk.h 67338 2011-03-30 05:35:24Z PC $ // Copyright: (c) 2006 Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////// */ -#ifndef __GTK_ASSERTDLG_H__ -#define __GTK_ASSERTDLG_H__ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include +#ifndef _WX_GTK_ASSERTDLG_H_ +#define _WX_GTK_ASSERTDLG_H_ #define GTK_TYPE_ASSERT_DIALOG (gtk_assert_dialog_get_type ()) #define GTK_ASSERT_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_ASSERT_DIALOG, GtkAssertDialog)) @@ -82,10 +76,4 @@ void gtk_assert_dialog_append_stack_frame(GtkAssertDialog *dlg, const gchar *sourcefile, guint line_number); -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __GTK_ASSERTDLG_H__ */ - - +#endif /* _WX_GTK_ASSERTDLG_H_ */ diff --git a/Externals/wxWidgets3/include/wx/gtk/bitmap.h b/Externals/wxWidgets3/include/wx/gtk/bitmap.h index c82ef8a1cb..a6e6634320 100644 --- a/Externals/wxWidgets3/include/wx/gtk/bitmap.h +++ b/Externals/wxWidgets3/include/wx/gtk/bitmap.h @@ -2,7 +2,7 @@ // Name: wx/gtk/bitmap.h // Purpose: // Author: Robert Roebling -// RCS-ID: $Id: bitmap.h 63774 2010-03-28 23:20:49Z VZ $ +// RCS-ID: $Id: bitmap.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -30,8 +30,8 @@ public: virtual ~wxMask(); // implementation - GdkBitmap *m_bitmap; - GdkBitmap *GetBitmap() const; + GdkPixmap* m_bitmap; + GdkPixmap* GetBitmap() const; protected: virtual void FreeData(); @@ -94,7 +94,7 @@ public: #if wxUSE_PALETTE wxPalette *GetPalette() const; void SetPalette(const wxPalette& palette); - wxPalette *GetColourMap() const { return GetPalette(); }; + wxPalette *GetColourMap() const { return GetPalette(); } #endif // wxUSE_PALETTE static void InitStandardHandlers(); diff --git a/Externals/wxWidgets3/include/wx/gtk/button.h b/Externals/wxWidgets3/include/wx/gtk/button.h index 9be049b5ef..6b8988ed7e 100644 --- a/Externals/wxWidgets3/include/wx/gtk/button.h +++ b/Externals/wxWidgets3/include/wx/gtk/button.h @@ -2,7 +2,7 @@ // Name: wx/gtk/button.h // Purpose: wxGTK wxButton class declaration // Author: Robert Roebling -// Id: $Id: button.h 67066 2011-02-27 12:48:30Z VZ $ +// Id: $Id: button.h 67931 2011-06-14 13:00:42Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,7 +17,7 @@ class WXDLLIMPEXP_CORE wxButton : public wxButtonBase { public: - wxButton() { Init(); } + wxButton() {} wxButton(wxWindow *parent, wxWindowID id, const wxString& label = wxEmptyString, const wxPoint& pos = wxDefaultPosition, @@ -25,8 +25,6 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr) { - Init(); - Create(parent, id, label, pos, size, style, validator, name); } @@ -39,7 +37,6 @@ public: virtual wxWindow *SetDefault(); virtual void SetLabel( const wxString &label ); - virtual bool Enable( bool enable = true ); // implementation // -------------- @@ -61,12 +58,6 @@ protected: virtual wxSize DoGetBestSize() const; virtual void DoApplyWidgetStyle(GtkRcStyle *style); - virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const; - - virtual wxBitmap DoGetBitmap(State which) const; - virtual void DoSetBitmap(const wxBitmap& bitmap, State which); - virtual void DoSetBitmapPosition(wxDirection dir); - #if wxUSE_MARKUP virtual bool DoSetLabelMarkup(const wxString& markup); #endif // wxUSE_MARKUP @@ -74,42 +65,9 @@ protected: private: typedef wxButtonBase base_type; - // common part of all ctors - void Init() - { - m_isCurrent = - m_isPressed = false; - } - - // focus event handler: calls GTKUpdateBitmap() - void GTKOnFocus(wxFocusEvent& event); - - // update the bitmap to correspond to the current button state - void GTKUpdateBitmap(); - - // return the current button state from m_isXXX flags (which means that it - // might not correspond to the real current state as e.g. m_isCurrent will - // never be true if we don't have a valid current bitmap) - State GTKGetCurrentState() const; - - // show the given bitmap (must be valid) - void GTKDoShowBitmap(const wxBitmap& bitmap); - // Return the GtkLabel used by this button. GtkLabel *GTKGetLabel() const; - - // the bitmaps for the different state of the buttons, all of them may be - // invalid and the button only shows a bitmap at all if State_Normal bitmap - // is valid - wxBitmap m_bitmaps[State_Max]; - - // true iff mouse is currently over the button - bool m_isCurrent; - - // true iff the button is in pressed state - bool m_isPressed; - DECLARE_DYNAMIC_CLASS(wxButton) }; diff --git a/Externals/wxWidgets3/include/wx/gtk/calctrl.h b/Externals/wxWidgets3/include/wx/gtk/calctrl.h index 9b2a10d1df..a0cab6253f 100644 --- a/Externals/wxWidgets3/include/wx/gtk/calctrl.h +++ b/Externals/wxWidgets3/include/wx/gtk/calctrl.h @@ -2,7 +2,7 @@ // Name: wx/gtk/calctrl.h // Purpose: wxGtkCalendarCtrl control // Author: Marcin Wojdyr -// RCS-ID: $Id: calctrl.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: calctrl.h 67987 2011-06-19 22:46:36Z VZ $ // Copyright: (C) 2008 Marcin Wojdyr // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -38,15 +38,31 @@ public: virtual bool SetDate(const wxDateTime& date); virtual wxDateTime GetDate() const; + virtual bool SetDateRange(const wxDateTime& lowerdate = wxDefaultDateTime, + const wxDateTime& upperdate = wxDefaultDateTime); + virtual bool GetDateRange(wxDateTime *lowerdate, wxDateTime *upperdate) const; + virtual bool EnableMonthChange(bool enable = true); virtual void Mark(size_t day, bool mark); // implementation // -------------- - wxDateTime m_selectedDate; + + void GTKGenerateEvent(wxEventType type); private: + bool IsInValidRange(const wxDateTime& dt) const; + + // Range of the dates that can be selected by user, either or both may be + // invalid to indicate that no corresponding restriction is set. + wxDateTime m_validStart, + m_validEnd; + + // Last known selected date, may be different from the real selection in + // the control while a handler for day-selected is running. + wxDateTime m_selectedDate; + DECLARE_DYNAMIC_CLASS(wxGtkCalendarCtrl) wxDECLARE_NO_COPY_CLASS(wxGtkCalendarCtrl); }; diff --git a/Externals/wxWidgets3/include/wx/gtk/combobox.h b/Externals/wxWidgets3/include/wx/gtk/combobox.h index 4af492976f..87154df510 100644 --- a/Externals/wxWidgets3/include/wx/gtk/combobox.h +++ b/Externals/wxWidgets3/include/wx/gtk/combobox.h @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // Created: 01/02/97 -// Id: $Id: combobox.h 65324 2010-08-16 17:48:28Z RR $ +// Id: $Id: combobox.h 70880 2012-03-11 23:55:19Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -88,6 +88,9 @@ public: { return wxItemContainer::GetStringSelection(); } + + virtual void SetString(unsigned int n, const wxString& string); + virtual void Popup(); virtual void Dismiss(); @@ -97,7 +100,9 @@ public: wxItemContainer::Clear(); } - bool IsEmpty() const { return wxItemContainer::IsEmpty(); } + // See wxComboBoxBase discussion of IsEmpty(). + bool IsListEmpty() const { return wxItemContainer::IsEmpty(); } + bool IsTextEmpty() const { return wxTextEntry::IsEmpty(); } void OnChar( wxKeyEvent &event ); diff --git a/Externals/wxWidgets3/include/wx/gtk/control.h b/Externals/wxWidgets3/include/wx/gtk/control.h index ad55168658..3d00b42278 100644 --- a/Externals/wxWidgets3/include/wx/gtk/control.h +++ b/Externals/wxWidgets3/include/wx/gtk/control.h @@ -2,7 +2,7 @@ // Name: wx/gtk/control.h // Purpose: // Author: Robert Roebling -// Id: $Id: control.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: control.h 70714 2012-02-27 17:49:33Z PC $ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -20,7 +20,7 @@ typedef struct _GtkFrame GtkFrame; // C-linkage function pointer types for GetDefaultAttributesFromGTKWidget extern "C" { typedef GtkWidget* (*wxGtkWidgetNew_t)(void); - typedef GtkWidget* (*wxGtkWidgetNewFromStr_t)(const gchar*); + typedef GtkWidget* (*wxGtkWidgetNewFromStr_t)(const char*); typedef GtkWidget* (*wxGtkWidgetNewFromAdj_t)(GtkAdjustment*); } @@ -75,20 +75,20 @@ protected: static wxVisualAttributes GetDefaultAttributesFromGTKWidget(GtkWidget* widget, bool useBase = false, - int state = -1); + int state = 0); static wxVisualAttributes GetDefaultAttributesFromGTKWidget(wxGtkWidgetNew_t, bool useBase = false, - int state = -1); + int state = 0); static wxVisualAttributes GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromStr_t, bool useBase = false, - int state = -1); + int state = 0); static wxVisualAttributes GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromAdj_t, bool useBase = false, - int state = -1); + int state = 0); // Widgets that use the style->base colour for the BG colour should // override this and return true. diff --git a/Externals/wxWidgets3/include/wx/gtk/dataview.h b/Externals/wxWidgets3/include/wx/gtk/dataview.h index 5a82a93625..75463bd02d 100644 --- a/Externals/wxWidgets3/include/wx/gtk/dataview.h +++ b/Externals/wxWidgets3/include/wx/gtk/dataview.h @@ -2,7 +2,7 @@ // Name: wx/gtk/dataview.h // Purpose: wxDataViewCtrl GTK+2 implementation header // Author: Robert Roebling -// Id: $Id: dataview.h 65562 2010-09-17 19:07:02Z RR $ +// Id: $Id: dataview.h 70377 2012-01-17 14:05:17Z VS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -44,9 +44,8 @@ public: virtual void SetSortable( bool sortable ); virtual void SetSortOrder( bool ascending ); - virtual void SetAsSortKey(bool sort = true); - virtual void SetResizeable( bool resizeable ); + virtual void SetResizeable( bool resizable ); virtual void SetHidden( bool hidden ); virtual void SetMinWidth( int minWidth ); @@ -76,8 +75,7 @@ public: virtual int GetFlags() const { return GetFromIndividualFlags(); } // implementation - GtkWidget* GetGtkHandle() { return m_column; } - GtkWidget* GetConstGtkHandle() const { return m_column; } + GtkWidget* GetGtkHandle() const { return m_column; } private: // holds the GTK handle @@ -143,7 +141,7 @@ public: virtual wxDataViewColumn *GetSortingColumn() const; - virtual wxDataViewItem GetSelection() const; + virtual int GetSelectedItemsCount() const; virtual int GetSelections( wxDataViewItemArray & sel ) const; virtual void SetSelections( const wxDataViewItemArray & sel ); virtual void Select( const wxDataViewItem & item ); @@ -160,6 +158,10 @@ public: virtual wxRect GetItemRect( const wxDataViewItem &item, const wxDataViewColumn *column = NULL ) const; + virtual bool SetRowHeight( int rowHeight ); + + virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column); + virtual void Expand( const wxDataViewItem & item ); virtual void Collapse( const wxDataViewItem & item ); virtual bool IsExpanded( const wxDataViewItem & item ) const; @@ -167,6 +169,8 @@ public: virtual bool EnableDragSource( const wxDataFormat &format ); virtual bool EnableDropTarget( const wxDataFormat &format ); + virtual wxDataViewColumn *GetCurrentColumn() const; + static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); @@ -181,6 +185,8 @@ public: virtual void OnInternalIdle(); + int GTKGetUniformRowHeight() const { return m_uniformRowHeight; } + protected: virtual void DoSetExpanderColumn(); virtual void DoSetIndent(); @@ -193,6 +199,12 @@ private: virtual wxDataViewItem DoGetCurrentItem() const; virtual void DoSetCurrentItem(const wxDataViewItem& item); + // Return wxDataViewColumn matching the given GtkTreeViewColumn. + // + // If the input argument is NULL, return NULL too. Otherwise we must find + // the matching column and assert if we didn't. + wxDataViewColumn* FromGTKColumn(GtkTreeViewColumn *gtk_col) const; + friend class wxDataViewCtrlDCImpl; friend class wxDataViewColumn; friend class wxDataViewCtrlInternal; @@ -202,6 +214,11 @@ private: wxDataViewColumnList m_cols; wxDataViewItem m_ensureVisibleDefered; + // By default this is set to -1 and the height of the rows is determined by + // GetRect() methods of the renderers but this can be set to a positive + // value to force the height of all rows to the given value. + int m_uniformRowHeight; + virtual void AddChildGTK(wxWindowGTK* child); void GtkEnableSelectionEvents(); void GtkDisableSelectionEvents(); diff --git a/Externals/wxWidgets3/include/wx/gtk/dc.h b/Externals/wxWidgets3/include/wx/gtk/dc.h index 0d00acbd15..3a2cc8afdc 100644 --- a/Externals/wxWidgets3/include/wx/gtk/dc.h +++ b/Externals/wxWidgets3/include/wx/gtk/dc.h @@ -2,7 +2,7 @@ // Name: wx/gtk/dc.h // Purpose: // Author: Robert Roebling -// Id: $Id: dc.h 50547 2007-12-06 16:22:00Z PC $ +// Id: $Id: dc.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,7 +23,7 @@ public: virtual ~wxGTKDCImpl(); #if wxUSE_PALETTE - void SetColourMap( const wxPalette& palette ) { SetPalette(palette); }; + void SetColourMap( const wxPalette& palette ) { SetPalette(palette); } #endif // wxUSE_PALETTE // Resolution in pixels per logical inch diff --git a/Externals/wxWidgets3/include/wx/gtk/dirdlg.h b/Externals/wxWidgets3/include/wx/gtk/dirdlg.h index ad969b56e9..78e8c02a96 100644 --- a/Externals/wxWidgets3/include/wx/gtk/dirdlg.h +++ b/Externals/wxWidgets3/include/wx/gtk/dirdlg.h @@ -2,7 +2,7 @@ // Name: wx/gtk/dirdlg.h // Purpose: wxDirDialog // Author: Francesco Montorsi -// Id: $Id: dirdlg.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: dirdlg.h 70898 2012-03-14 12:32:27Z VZ $ // Copyright: (c) 2006 Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -26,7 +26,13 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxString& name = wxDirDialogNameStr); - + bool Create(wxWindow *parent, + const wxString& message = wxDirSelectorPromptStr, + const wxString& defaultPath = wxEmptyString, + long style = wxDD_DEFAULT_STYLE, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + const wxString& name = wxDirDialogNameStr); virtual ~wxDirDialog() { } diff --git a/Externals/wxWidgets3/include/wx/gtk/dnd.h b/Externals/wxWidgets3/include/wx/gtk/dnd.h index 74cdd71bc1..f7725017b5 100644 --- a/Externals/wxWidgets3/include/wx/gtk/dnd.h +++ b/Externals/wxWidgets3/include/wx/gtk/dnd.h @@ -2,7 +2,7 @@ // Name: wx/gtk/dnd.h // Purpose: declaration of the wxDropTarget class // Author: Robert Roebling -// RCS-ID: $Id: dnd.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: dnd.h 69020 2011-09-07 16:56:50Z PC $ // Copyright: (c) 1998 Vadim Zeitlin, Robert Roebling // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -50,13 +50,13 @@ public: GdkDragContext *m_dragContext; GtkWidget *m_dragWidget; GtkSelectionData *m_dragData; - guint m_dragTime; + unsigned m_dragTime; bool m_firstMotion; // gdk has no "gdk_drag_enter" event void GTKSetDragContext( GdkDragContext *dc ) { m_dragContext = dc; } void GTKSetDragWidget( GtkWidget *w ) { m_dragWidget = w; } void GTKSetDragData( GtkSelectionData *sd ) { m_dragData = sd; } - void GTKSetDragTime( guint time ) { m_dragTime = time; } + void GTKSetDragTime(unsigned time) { m_dragTime = time; } }; //------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/gtk/dvrenderer.h b/Externals/wxWidgets3/include/wx/gtk/dvrenderer.h index 195360fdf7..a8a75dc4fd 100644 --- a/Externals/wxWidgets3/include/wx/gtk/dvrenderer.h +++ b/Externals/wxWidgets3/include/wx/gtk/dvrenderer.h @@ -3,7 +3,7 @@ // Purpose: wxDataViewRenderer for GTK wxDataViewCtrl implementation // Author: Robert Roebling, Vadim Zeitlin // Created: 2009-11-07 (extracted from wx/gtk/dataview.h) -// RCS-ID: $Id: dvrenderer.h 66404 2010-12-19 19:43:46Z RR $ +// RCS-ID: $Id: dvrenderer.h 69020 2011-09-07 16:56:50Z PC $ // Copyright: (c) 2006 Robert Roebling // (c) 2009 Vadim Zeitlin // Licence: wxWindows licence @@ -48,11 +48,11 @@ public: // // it validates the new value and notifies the model about the change by // calling GtkOnCellChanged() if it was accepted - virtual void GtkOnTextEdited(const gchar *itempath, const wxString& value); + virtual void GtkOnTextEdited(const char *itempath, const wxString& value); GtkCellRenderer* GetGtkHandle() { return m_renderer; } void GtkInitHandlers(); - void GtkUpdateAlignment(); + void GtkUpdateAlignment() { GtkApplyAlignment(m_renderer); } // should be overridden to return true if the renderer supports properties // corresponding to wxDataViewItemAttr field, see wxGtkTreeCellDataFunc() @@ -85,6 +85,9 @@ protected: const wxDataViewItem& item, unsigned col); + // Apply our effective alignment (i.e. m_alignment if specified or the + // associated column alignment by default) to the given renderer. + void GtkApplyAlignment(GtkCellRenderer *renderer); GtkCellRenderer *m_renderer; int m_alignment; diff --git a/Externals/wxWidgets3/include/wx/gtk/dvrenderers.h b/Externals/wxWidgets3/include/wx/gtk/dvrenderers.h index 2199a7e851..95b84d416b 100644 --- a/Externals/wxWidgets3/include/wx/gtk/dvrenderers.h +++ b/Externals/wxWidgets3/include/wx/gtk/dvrenderers.h @@ -3,7 +3,7 @@ // Purpose: All GTK wxDataViewCtrl renderer classes // Author: Robert Roebling, Vadim Zeitlin // Created: 2009-11-07 (extracted from wx/gtk/dataview.h) -// RCS-ID: $Id: dvrenderers.h 67120 2011-03-03 17:51:52Z PC $ +// RCS-ID: $Id: dvrenderers.h 70300 2012-01-09 06:31:07Z PC $ // Copyright: (c) 2006 Robert Roebling // (c) 2009 Vadim Zeitlin // Licence: wxWindows licence @@ -117,18 +117,12 @@ public: wxDC *dc, int state); + struct GTKRenderParams; + // store GTK render call parameters for possible later use - void GTKStashRenderParams(GdkWindow *window, - GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *expose_area, - int flags) + void GTKSetRenderParams(GTKRenderParams* renderParams) { - m_renderParams.window = window; - m_renderParams.widget = widget; - m_renderParams.background_area = background_area; - m_renderParams.expose_area = expose_area; - m_renderParams.flags = flags; + m_renderParams = renderParams; } // we may or not support attributes, as we don't know it, return true to @@ -147,20 +141,17 @@ protected: bool Init(wxDataViewCellMode mode, int align); private: + // Called from GtkGetTextRenderer() to really create the renderer if + // necessary. + void GtkInitTextRenderer(); + wxDC *m_dc; GtkCellRendererText *m_text_renderer; // parameters of the original render() call stored so that we could pass // them forward to m_text_renderer if our RenderText() is called - struct GTKRenderParams - { - GdkWindow *window; - GtkWidget *widget; - GdkRectangle *background_area; - GdkRectangle *expose_area; - int flags; - } m_renderParams; + GTKRenderParams* m_renderParams; DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer) }; @@ -185,9 +176,17 @@ public: virtual wxSize GetSize() const; private: + void GTKSetLabel(); + wxString m_label; int m_value; +#if !wxUSE_UNICODE + // Flag used to indicate that we need to set the label because we were + // unable to do it in the ctor (see comments there). + bool m_needsToSetLabel; +#endif // !wxUSE_UNICODE + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer) }; @@ -223,34 +222,6 @@ private: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer) }; -// --------------------------------------------------------- -// wxDataViewDateRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewDateRenderer( const wxString &varianttype = "datetime", - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, - int align = wxDVR_DEFAULT_ALIGNMENT ); - - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ) const; - - virtual bool Render( wxRect cell, wxDC *dc, int state ); - virtual wxSize GetSize() const; - virtual bool Activate( const wxRect& cell, - wxDataViewModel *model, - const wxDataViewItem &item, - unsigned int col ); - -private: - wxDateTime m_date; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer) -}; - // ------------------------------------- // wxDataViewChoiceRenderer // ------------------------------------- @@ -291,7 +262,7 @@ public: virtual bool GetValue( wxVariant &value ) const; private: - virtual void GtkOnTextEdited(const gchar *itempath, const wxString& str); + virtual void GtkOnTextEdited(const char *itempath, const wxString& str); }; diff --git a/Externals/wxWidgets3/include/wx/gtk/filectrl.h b/Externals/wxWidgets3/include/wx/gtk/filectrl.h index 43c3a76b97..1551923ec3 100644 --- a/Externals/wxWidgets3/include/wx/gtk/filectrl.h +++ b/Externals/wxWidgets3/include/wx/gtk/filectrl.h @@ -4,7 +4,7 @@ // Author: Diaa M. Sami // Modified by: // Created: Aug-10-2007 -// RCS-ID: $Id: filectrl.h 64429 2010-05-29 10:35:47Z VZ $ +// RCS-ID: $Id: filectrl.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Diaa M. Sami // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -88,7 +88,7 @@ public: Create( parent, id, defaultDirectory, defaultFilename, wildCard, style, pos, size, name ); } - virtual ~wxGtkFileCtrl() {}; + virtual ~wxGtkFileCtrl() {} void Init(); bool Create( wxWindow *parent, diff --git a/Externals/wxWidgets3/include/wx/gtk/filedlg.h b/Externals/wxWidgets3/include/wx/gtk/filedlg.h index 7afb9b1745..667e94a359 100644 --- a/Externals/wxWidgets3/include/wx/gtk/filedlg.h +++ b/Externals/wxWidgets3/include/wx/gtk/filedlg.h @@ -2,7 +2,7 @@ // Name: wx/gtk/filedlg.h // Purpose: // Author: Robert Roebling -// Id: $Id: filedlg.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: filedlg.h 70898 2012-03-14 12:32:27Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -30,6 +30,15 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, const wxString& name = wxFileDialogNameStr); + bool Create(wxWindow *parent, + const wxString& message = wxFileSelectorPromptStr, + const wxString& defaultDir = wxEmptyString, + const wxString& defaultFile = wxEmptyString, + const wxString& wildCard = wxFileSelectorDefaultWildcardStr, + long style = wxFD_DEFAULT_STYLE, + const wxPoint& pos = wxDefaultPosition, + const wxSize& sz = wxDefaultSize, + const wxString& name = wxFileDialogNameStr); virtual ~wxFileDialog(); virtual wxString GetPath() const; diff --git a/Externals/wxWidgets3/include/wx/gtk/filepicker.h b/Externals/wxWidgets3/include/wx/gtk/filepicker.h index 782af3d680..ad6be66083 100644 --- a/Externals/wxWidgets3/include/wx/gtk/filepicker.h +++ b/Externals/wxWidgets3/include/wx/gtk/filepicker.h @@ -5,7 +5,7 @@ // Modified by: // Created: 14/4/2006 // Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: filepicker.h 63690 2010-03-16 00:23:57Z VZ $ +// RCS-ID: $Id: filepicker.h 70043 2011-12-18 12:34:47Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -101,6 +101,7 @@ public: // overrides void OnDialogOK(wxCommandEvent &); virtual void SetPath(const wxString &str); + virtual void SetInitialDirectory(const wxString& dir); // see macro defined above FILEDIRBTN_OVERRIDES @@ -171,6 +172,7 @@ public: // overrides } virtual void SetPath(const wxString &str); + virtual void SetInitialDirectory(const wxString& dir); // see macro defined above FILEDIRBTN_OVERRIDES diff --git a/Externals/wxWidgets3/include/wx/gtk/font.h b/Externals/wxWidgets3/include/wx/gtk/font.h index b14fb7e921..53bc2d6441 100644 --- a/Externals/wxWidgets3/include/wx/gtk/font.h +++ b/Externals/wxWidgets3/include/wx/gtk/font.h @@ -2,7 +2,7 @@ // Name: wx/gtk/font.h // Purpose: // Author: Robert Roebling -// Id: $Id: font.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: font.h 70476 2012-01-29 08:14:34Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -63,6 +63,12 @@ public: SetPixelSize(pixelSize); } + wxFont(int pointSize, + wxFontFamily family, + int flags = wxFONTFLAG_DEFAULT, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + bool Create(int size, wxFontFamily family, wxFontStyle style, @@ -82,6 +88,7 @@ public: virtual wxFontWeight GetWeight() const; virtual wxString GetFaceName() const; virtual bool GetUnderlined() const; + virtual bool GetStrikethrough() const; virtual wxFontEncoding GetEncoding() const; virtual const wxNativeFontInfo *GetNativeFontInfo() const; virtual bool IsFixedWidth() const; @@ -92,10 +99,18 @@ public: virtual void SetWeight(wxFontWeight weight); virtual bool SetFaceName( const wxString& faceName ); virtual void SetUnderlined( bool underlined ); + virtual void SetStrikethrough(bool strikethrough); virtual void SetEncoding(wxFontEncoding encoding); wxDECLARE_COMMON_FONT_METHODS(); + // Set Pango attributes in the specified layout. Currently only + // underlined and strike-through attributes are handled by this function. + // + // If neither of them is specified, returns false, otherwise sets up the + // attributes and returns true. + bool GTKSetPangoAttrs(PangoLayout* layout) const; + // implementation from now on void Unshare(); diff --git a/Externals/wxWidgets3/include/wx/gtk/fontpicker.h b/Externals/wxWidgets3/include/wx/gtk/fontpicker.h index 27be02dfbd..505090e762 100644 --- a/Externals/wxWidgets3/include/wx/gtk/fontpicker.h +++ b/Externals/wxWidgets3/include/wx/gtk/fontpicker.h @@ -5,7 +5,7 @@ // Modified by: // Created: 14/4/2006 // Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: fontpicker.h 49668 2007-11-06 00:32:34Z MR $ +// RCS-ID: $Id: fontpicker.h 69020 2011-09-07 16:56:50Z PC $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -52,7 +52,7 @@ protected: public: // used by the GTK callback only - void SetNativeFontInfo(const gchar *gtkdescription) + void SetNativeFontInfo(const char *gtkdescription) { m_selectedFont.SetNativeFontInfo(wxString::FromAscii(gtkdescription)); } private: diff --git a/Externals/wxWidgets3/include/wx/gtk/gauge.h b/Externals/wxWidgets3/include/wx/gtk/gauge.h index 1c91c40512..7f065f2657 100644 --- a/Externals/wxWidgets3/include/wx/gtk/gauge.h +++ b/Externals/wxWidgets3/include/wx/gtk/gauge.h @@ -2,7 +2,7 @@ // Name: wx/gtk/gauge.h // Purpose: // Author: Robert Roebling -// Id: $Id: gauge.h 42077 2006-10-17 14:44:52Z ABX $ +// Id: $Id: gauge.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -43,8 +43,8 @@ public: void SetShadowWidth( int WXUNUSED(w) ) { } void SetBezelFace( int WXUNUSED(w) ) { } - int GetShadowWidth() const { return 0; }; - int GetBezelFace() const { return 0; }; + int GetShadowWidth() const { return 0; } + int GetBezelFace() const { return 0; } // determinate mode API void SetRange( int r ); diff --git a/Externals/wxWidgets3/include/wx/gtk/hyperlink.h b/Externals/wxWidgets3/include/wx/gtk/hyperlink.h index a3419bf64c..7fdb40f020 100644 --- a/Externals/wxWidgets3/include/wx/gtk/hyperlink.h +++ b/Externals/wxWidgets3/include/wx/gtk/hyperlink.h @@ -4,13 +4,13 @@ // Author: Francesco Montorsi // Modified by: // Created: 14/2/2007 -// RCS-ID: $Id: hyperlink.h 44647 2007-03-07 22:12:47Z VZ $ +// RCS-ID: $Id: hyperlink.h 67378 2011-04-02 20:43:29Z PC $ // Copyright: (c) 2007 Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef __GTKHYPERLINKCTRLH__ -#define __GTKHYPERLINKCTRLH__ +#ifndef _WX_GTKHYPERLINKCTRL_H_ +#define _WX_GTKHYPERLINKCTRL_H_ #include "wx/generic/hyperlink.h" @@ -62,16 +62,12 @@ public: virtual void SetLabel(const wxString &label); protected: - // overridden base class virtuals - - // Returns the best size for the window, which is the size needed - // to display the text label. virtual wxSize DoGetBestSize() const; + virtual wxSize DoGetBestClientSize() const; virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const; -private: DECLARE_DYNAMIC_CLASS(wxHyperlinkCtrl) }; -#endif // __GTKHYPERLINKCTRLH__ +#endif // _WX_GTKHYPERLINKCTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/listbox.h b/Externals/wxWidgets3/include/wx/gtk/listbox.h index 6af95eb831..b2862a935f 100644 --- a/Externals/wxWidgets3/include/wx/gtk/listbox.h +++ b/Externals/wxWidgets3/include/wx/gtk/listbox.h @@ -2,7 +2,7 @@ // Name: wx/gtk/listbox.h // Purpose: wxListBox class declaration // Author: Robert Roebling -// Id: $Id: listbox.h 65936 2010-10-27 23:22:00Z VZ $ +// Id: $Id: listbox.h 67298 2011-03-23 17:36:10Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -82,11 +82,7 @@ public: // implementation from now on - GtkWidget *GetConnectWidget(); - -#if wxUSE_TOOLTIPS - void GTKApplyToolTip( GtkTooltips *tips, const gchar *tip ); -#endif // wxUSE_TOOLTIPS + virtual GtkWidget *GetConnectWidget(); struct _GtkTreeView *m_treeview; struct _GtkListStore *m_liststore; diff --git a/Externals/wxWidgets3/include/wx/gtk/mdi.h b/Externals/wxWidgets3/include/wx/gtk/mdi.h index 43a6a06b7f..6b7b50da20 100644 --- a/Externals/wxWidgets3/include/wx/gtk/mdi.h +++ b/Externals/wxWidgets3/include/wx/gtk/mdi.h @@ -3,7 +3,7 @@ // Purpose: TDI-based MDI implementation for wxGTK // Author: Robert Roebling // Modified by: 2008-10-31 Vadim Zeitlin: derive from the base classes -// Id: $Id: mdi.h 59523 2009-03-14 01:24:45Z FM $ +// Id: $Id: mdi.h 69528 2011-10-25 16:56:57Z PC $ // Copyright: (c) 1998 Robert Roebling // (c) 2008 Vadim Zeitlin // Licence: wxWindows licence @@ -118,9 +118,9 @@ public: void OnActivate( wxActivateEvent& event ); void OnMenuHighlight( wxMenuEvent& event ); + virtual void GTKHandleRealized(); wxMenuBar *m_menuBar; - GtkNotebookPage *m_page; bool m_justInserted; private: diff --git a/Externals/wxWidgets3/include/wx/gtk/menu.h b/Externals/wxWidgets3/include/wx/gtk/menu.h index 1c70606a61..25302e3ace 100644 --- a/Externals/wxWidgets3/include/wx/gtk/menu.h +++ b/Externals/wxWidgets3/include/wx/gtk/menu.h @@ -2,7 +2,7 @@ // Name: wx/gtk/menu.h // Purpose: // Author: Robert Roebling -// Id: $Id: menu.h 66180 2010-11-17 05:57:21Z PC $ +// Id: $Id: menu.h 70350 2012-01-15 13:41:17Z VZ $ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -33,6 +33,7 @@ public: virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const; virtual void EnableTop( size_t pos, bool flag ); + virtual bool IsEnabledTop(size_t pos) const; virtual void SetMenuLabel( size_t pos, const wxString& label ); virtual wxString GetMenuLabel( size_t pos ) const; @@ -51,7 +52,7 @@ public: private: // common part of Append and Insert - bool GtkAppend(wxMenu *menu, const wxString& title, int pos=-1); + void GtkAppend(wxMenu* menu, const wxString& title, int pos = -1); void Init(size_t n, wxMenu *menus[], const wxString titles[], long style); @@ -99,9 +100,8 @@ private: void Init(); // common part of Append (if pos == -1) and Insert - bool GtkAppend(wxMenuItem *item, int pos=-1); + void GtkAppend(wxMenuItem* item, int pos = -1); - GtkWidget *m_prevRadio; DECLARE_DYNAMIC_CLASS(wxMenu) }; diff --git a/Externals/wxWidgets3/include/wx/gtk/msgdlg.h b/Externals/wxWidgets3/include/wx/gtk/msgdlg.h index 86489d335b..90cc21da1f 100644 --- a/Externals/wxWidgets3/include/wx/gtk/msgdlg.h +++ b/Externals/wxWidgets3/include/wx/gtk/msgdlg.h @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2003/02/28 -// RCS-ID: $Id: msgdlg.h 65348 2010-08-18 22:48:28Z VZ $ +// RCS-ID: $Id: msgdlg.h 68537 2011-08-04 22:53:42Z VZ $ // Copyright: (c) Vaclav Slavik, 2003 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -40,6 +40,7 @@ private: virtual wxString GetDefaultNoLabel() const; virtual wxString GetDefaultOKLabel() const; virtual wxString GetDefaultCancelLabel() const; + virtual wxString GetDefaultHelpLabel() const; // create the real GTK+ dialog: this is done from ShowModal() to allow // changing the message between constructing the dialog and showing it diff --git a/Externals/wxWidgets3/include/wx/gtk/nonownedwnd.h b/Externals/wxWidgets3/include/wx/gtk/nonownedwnd.h new file mode 100644 index 0000000000..8dcb75a696 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/gtk/nonownedwnd.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/nonownedwnd.h +// Purpose: wxGTK-specific wxNonOwnedWindow declaration. +// Author: Vadim Zeitlin +// Created: 2011-10-12 +// RCS-ID: $Id: nonownedwnd.h 69462 2011-10-18 21:56:52Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTK_NONOWNEDWND_H_ +#define _WX_GTK_NONOWNEDWND_H_ + +class wxNonOwnedWindowShapeImpl; + +// ---------------------------------------------------------------------------- +// wxNonOwnedWindow contains code common to wx{Popup,TopLevel}Window in wxGTK. +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxNonOwnedWindow : public wxNonOwnedWindowBase +{ +public: + wxNonOwnedWindow() { m_shapeImpl = NULL; } + virtual ~wxNonOwnedWindow(); + + // Overridden to actually set the shape when the window becomes realized. + virtual void GTKHandleRealized(); + +protected: + virtual bool DoClearShape(); + virtual bool DoSetRegionShape(const wxRegion& region); +#if wxUSE_GRAPHICS_CONTEXT + virtual bool DoSetPathShape(const wxGraphicsPath& path); +#endif // wxUSE_GRAPHICS_CONTEXT + + +private: + // If non-NULL, contains information about custom window shape. + wxNonOwnedWindowShapeImpl* m_shapeImpl; + + wxDECLARE_NO_COPY_CLASS(wxNonOwnedWindow); +}; + +#endif // _WX_GTK_NONOWNEDWND_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/notebook.h b/Externals/wxWidgets3/include/wx/gtk/notebook.h index 266b1b4e1b..50cedf0171 100644 --- a/Externals/wxWidgets3/include/wx/gtk/notebook.h +++ b/Externals/wxWidgets3/include/wx/gtk/notebook.h @@ -3,7 +3,7 @@ // Purpose: wxNotebook class // Author: Robert Roebling // Modified by: -// RCS-ID: $Id: notebook.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: notebook.h 70112 2011-12-24 18:19:26Z VZ $ // Copyright: (c) Julian Smart and Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -68,13 +68,13 @@ public: bool SetPageImage(size_t nPage, int nImage); // control the appearance of the notebook pages - // set the size (the same for all pages) - void SetPageSize(const wxSize& size); // set the padding between tabs (in pixels) void SetPadding(const wxSize& padding); // sets the size of the tabs (assumes all tabs are the same size) void SetTabSize(const wxSize& sz); + // geometry + virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; virtual int HitTest(const wxPoint& pt, long *flags = NULL) const; // operations @@ -89,7 +89,7 @@ public: wxNotebookPage *win, const wxString& strText, bool bSelect = false, - int imageId = -1 ); + int imageId = NO_IMAGE ); // handler for tab navigation // -------------------------- diff --git a/Externals/wxWidgets3/include/wx/gtk/pen.h b/Externals/wxWidgets3/include/wx/gtk/pen.h index 0f32910275..137066611c 100644 --- a/Externals/wxWidgets3/include/wx/gtk/pen.h +++ b/Externals/wxWidgets3/include/wx/gtk/pen.h @@ -2,7 +2,7 @@ // Name: wx/gtk/pen.h // Purpose: // Author: Robert Roebling -// Id: $Id: pen.h 54273 2008-06-17 17:28:26Z VZ $ +// Id: $Id: pen.h 69020 2011-09-07 16:56:50Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -10,7 +10,7 @@ #ifndef _WX_GTK_PEN_H_ #define _WX_GTK_PEN_H_ -typedef gint8 wxGTKDash; +typedef signed char wxGTKDash; //----------------------------------------------------------------------------- // wxPen diff --git a/Externals/wxWidgets3/include/wx/gtk/popupwin.h b/Externals/wxWidgets3/include/wx/gtk/popupwin.h index d71c539128..616ae41618 100644 --- a/Externals/wxWidgets3/include/wx/gtk/popupwin.h +++ b/Externals/wxWidgets3/include/wx/gtk/popupwin.h @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // Created: -// Id: $Id: popupwin.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: popupwin.h 70739 2012-02-28 17:25:59Z PC $ // Copyright: (c) 2001 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -42,9 +42,6 @@ protected: virtual void DoMoveWindow(int x, int y, int width, int height); -private: - virtual void AddChildGTK(wxWindowGTK* child); - #ifdef __WXUNIVERSAL__ DECLARE_EVENT_TABLE() #endif diff --git a/Externals/wxWidgets3/include/wx/gtk/private.h b/Externals/wxWidgets3/include/wx/gtk/private.h index 86168ca47b..321ba28f3c 100644 --- a/Externals/wxWidgets3/include/wx/gtk/private.h +++ b/Externals/wxWidgets3/include/wx/gtk/private.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 12.03.02 -// RCS-ID: $Id: private.h 63805 2010-03-30 16:14:11Z PC $ +// RCS-ID: $Id: private.h 70475 2012-01-29 08:00:15Z PC $ // Copyright: (c) 2002 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -15,6 +15,7 @@ #include #include "wx/gtk/private/string.h" +#include "wx/gtk/private/gtk2-compat.h" // pango_version_check symbol is quite recent ATM (4/2007)... so we // use our own wrapper which implements a smart trick. @@ -51,13 +52,13 @@ extern const gchar *wx_pango_version_check(int major, int minor, int micro); // helper: use the encoding of the given font if it's valid inline wxCharBuffer wxConvertToGTK(const wxString& s, const wxFont& font) { - return wxConvertToGTK(s, font.Ok() ? font.GetEncoding() + return wxConvertToGTK(s, font.IsOk() ? font.GetEncoding() : wxFONTENCODING_SYSTEM); } inline wxCharBuffer wxConvertFromGTK(const wxString& s, const wxFont& font) { - return wxConvertFromGTK(s, font.Ok() ? font.GetEncoding() + return wxConvertFromGTK(s, font.IsOk() ? font.GetEncoding() : wxFONTENCODING_SYSTEM); } @@ -113,4 +114,3 @@ GtkWidget *GetTreeWidget(); } // wxGTKPrivate #endif // _WX_GTK_PRIVATE_H_ - diff --git a/Externals/wxWidgets3/include/wx/gtk/private/event.h b/Externals/wxWidgets3/include/wx/gtk/private/event.h new file mode 100644 index 0000000000..7c1254fea8 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/gtk/private/event.h @@ -0,0 +1,80 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/private/event.h +// Purpose: Helper functions for working with GDK and wx events +// Author: Vaclav Slavik +// Created: 2011-10-14 +// RCS-ID: $Id$ +// Copyright: (c) 2011 Vaclav Slavik +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _GTK_PRIVATE_EVENT_H_ +#define _GTK_PRIVATE_EVENT_H_ + +#if !GTK_CHECK_VERSION(2,10,0) + // GTK+ can reliably detect Meta key state only since 2.10 when + // GDK_META_MASK was introduced -- there wasn't any way to detect it + // in older versions. wxGTK used GDK_MOD2_MASK for this purpose, but + // GDK_MOD2_MASK is documented as: + // + // the fifth modifier key (it depends on the modifier mapping of the X + // server which key is interpreted as this modifier) + // + // In other words, it isn't guaranteed to map to Meta. This is a real + // problem: it is common to map NumLock to it (in fact, it's an exception + // if the X server _doesn't_ use it for NumLock). So the old code caused + // wxKeyEvent::MetaDown() to always return true as long as NumLock was on + // on many systems, which broke all applications using + // wxKeyEvent::GetModifiers() to check modifiers state (see e.g. here: + // http://tinyurl.com/56lsk2). + // + // Because of this, it's better to not detect Meta key state at all than + // to detect it incorrectly. Hence the following #define, which causes + // m_metaDown to be always set to false. + #define GDK_META_MASK 0 +#endif + +namespace wxGTKImpl +{ + +// init wxMouseEvent with the info from GdkEventXXX struct +template void InitMouseEvent(wxWindowGTK *win, + wxMouseEvent& event, + T *gdk_event) +{ + event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK) != 0; + event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK) != 0; + event.m_altDown = (gdk_event->state & GDK_MOD1_MASK) != 0; + event.m_metaDown = (gdk_event->state & GDK_META_MASK) != 0; + event.m_leftDown = (gdk_event->state & GDK_BUTTON1_MASK) != 0; + event.m_middleDown = (gdk_event->state & GDK_BUTTON2_MASK) != 0; + event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK) != 0; + + // In gdk/win32 VK_XBUTTON1 is translated to GDK_BUTTON4_MASK + // and VK_XBUTTON2 to GDK_BUTTON5_MASK. In x11/gdk buttons 4/5 + // are wheel rotation and buttons 8/9 don't change the state. + event.m_aux1Down = (gdk_event->state & GDK_BUTTON4_MASK) != 0; + event.m_aux2Down = (gdk_event->state & GDK_BUTTON5_MASK) != 0; + + wxPoint pt = win->GetClientAreaOrigin(); + event.m_x = (wxCoord)gdk_event->x - pt.x; + event.m_y = (wxCoord)gdk_event->y - pt.y; + + if ((win->m_wxwindow) && (win->GetLayoutDirection() == wxLayout_RightToLeft)) + { + // origin in the upper right corner + GtkAllocation a; + gtk_widget_get_allocation(win->m_wxwindow, &a); + int window_width = a.width; + event.m_x = window_width - event.m_x; + } + + event.SetEventObject( win ); + event.SetId( win->GetId() ); + event.SetTimestamp( gdk_event->time ); +} + +} // namespace wxGTKImpl + +#endif // _GTK_PRIVATE_EVENT_H_ + diff --git a/Externals/wxWidgets3/include/wx/gtk/private/gtk2-compat.h b/Externals/wxWidgets3/include/wx/gtk/private/gtk2-compat.h new file mode 100644 index 0000000000..fddeaafca9 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/gtk/private/gtk2-compat.h @@ -0,0 +1,376 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/private/compat.h +// Purpose: Compatibility code for older GTK+ versions +// Author: Vaclav Slavik +// Created: 2011-03-25 +// RCS-ID: $Id$ +// Copyright: (c) 2011 Vaclav Slavik +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTK_PRIVATE_COMPAT_H_ +#define _WX_GTK_PRIVATE_COMPAT_H_ + +// ---------------------------------------------------------------------------- +// Implementations of new accessors for older GTK+ versions +// ---------------------------------------------------------------------------- + +// GTK+ deprecated direct access to struct members and some other stuff, +// replacing them with simple accessor functions. These aren't available in +// older versions, though, so we have to provide them for compatibility. +// +// Note: wx_ prefix is used to avoid symbol conflicts at runtime +// +// Note 2: We support building against newer GTK+ version and using an older +// one at runtime, so we must provide our implementations of these +// functions even if GTK_CHECK_VERSION would indicate the function is +// already available in GTK+. + +#if !GTK_CHECK_VERSION(3,0,0) && !(defined(GTK_DISABLE_DEPRECATED) || defined(GSEAL_ENABLE)) + +// ---------------------------------------------------------------------------- +// the following were introduced in GTK+ 2.8 + +static inline GtkWidget* wx_gtk_scrolled_window_get_hscrollbar(GtkScrolledWindow* scrolled_window) +{ + return scrolled_window->hscrollbar; +} +#define gtk_scrolled_window_get_hscrollbar wx_gtk_scrolled_window_get_hscrollbar + +static inline GtkWidget* wx_gtk_scrolled_window_get_vscrollbar(GtkScrolledWindow* scrolled_window) +{ + return scrolled_window->vscrollbar; +} +#define gtk_scrolled_window_get_vscrollbar wx_gtk_scrolled_window_get_vscrollbar + +// ---------------------------------------------------------------------------- +// the following were introduced in GLib 2.10 + +static inline gpointer wx_g_object_ref_sink(gpointer object) +{ + g_object_ref(object); + gtk_object_sink(GTK_OBJECT(object)); + return object; +} +#define g_object_ref_sink wx_g_object_ref_sink + +// ---------------------------------------------------------------------------- +// the following were introduced in GTK+ 2.12 and GtkAboutDialog itself is not +// in 2.4 so skip this if we don't have it. +#if GTK_CHECK_VERSION(2,6,0) + +static inline void wx_gtk_about_dialog_set_program_name(GtkAboutDialog* about, const gchar* name) +{ + gtk_about_dialog_set_name(about, name); +} +#define gtk_about_dialog_set_program_name wx_gtk_about_dialog_set_program_name +#endif // 2.6.0 + +// ---------------------------------------------------------------------------- +// the following were introduced in GTK+ 2.14 + +static inline gdouble wx_gtk_adjustment_get_lower(GtkAdjustment* adjustment) +{ + return adjustment->lower; +} +#define gtk_adjustment_get_lower wx_gtk_adjustment_get_lower + +static inline gdouble wx_gtk_adjustment_get_page_increment(GtkAdjustment* adjustment) +{ + return adjustment->page_increment; +} +#define gtk_adjustment_get_page_increment wx_gtk_adjustment_get_page_increment + +static inline gdouble wx_gtk_adjustment_get_page_size(GtkAdjustment* adjustment) +{ + return adjustment->page_size; +} +#define gtk_adjustment_get_page_size wx_gtk_adjustment_get_page_size + +static inline gdouble wx_gtk_adjustment_get_step_increment(GtkAdjustment* adjustment) +{ + return adjustment->step_increment; +} +#define gtk_adjustment_get_step_increment wx_gtk_adjustment_get_step_increment + +static inline gdouble wx_gtk_adjustment_get_upper(GtkAdjustment* adjustment) +{ + return adjustment->upper; +} +#define gtk_adjustment_get_upper wx_gtk_adjustment_get_upper + +static inline void wx_gtk_adjustment_set_page_size(GtkAdjustment* adjustment, gdouble page_size) +{ + adjustment->page_size = page_size; +} +#define gtk_adjustment_set_page_size wx_gtk_adjustment_set_page_size + +static inline GtkWidget* wx_gtk_color_selection_dialog_get_color_selection(GtkColorSelectionDialog* csd) +{ + return csd->colorsel; +} +#define gtk_color_selection_dialog_get_color_selection wx_gtk_color_selection_dialog_get_color_selection + +static inline GtkWidget* wx_gtk_dialog_get_content_area(GtkDialog* dialog) +{ + return dialog->vbox; +} +#define gtk_dialog_get_content_area wx_gtk_dialog_get_content_area + +static inline GtkWidget* wx_gtk_dialog_get_action_area(GtkDialog* dialog) +{ + return dialog->action_area; +} +#define gtk_dialog_get_action_area wx_gtk_dialog_get_action_area + +static inline guint16 wx_gtk_entry_get_text_length(GtkEntry* entry) +{ + return entry->text_length; +} +#define gtk_entry_get_text_length wx_gtk_entry_get_text_length + +static inline GtkWidget* wx_gtk_font_selection_dialog_get_cancel_button(GtkFontSelectionDialog* fsd) +{ + return fsd->cancel_button; +} +#define gtk_font_selection_dialog_get_cancel_button wx_gtk_font_selection_dialog_get_cancel_button + +static inline GtkWidget* wx_gtk_font_selection_dialog_get_ok_button(GtkFontSelectionDialog* fsd) +{ + return fsd->ok_button; +} +#define gtk_font_selection_dialog_get_ok_button wx_gtk_font_selection_dialog_get_ok_button + +static inline const guchar* wx_gtk_selection_data_get_data(GtkSelectionData* selection_data) +{ + return selection_data->data; +} +#define gtk_selection_data_get_data wx_gtk_selection_data_get_data + +static inline GdkAtom wx_gtk_selection_data_get_data_type(GtkSelectionData* selection_data) +{ + return selection_data->type; +} +#define gtk_selection_data_get_data_type wx_gtk_selection_data_get_data_type + +static inline gint wx_gtk_selection_data_get_format(GtkSelectionData* selection_data) +{ + return selection_data->format; +} +#define gtk_selection_data_get_format wx_gtk_selection_data_get_format + +static inline gint wx_gtk_selection_data_get_length(GtkSelectionData* selection_data) +{ + return selection_data->length; +} +#define gtk_selection_data_get_length wx_gtk_selection_data_get_length + +static inline GdkAtom wx_gtk_selection_data_get_target(GtkSelectionData* selection_data) +{ + return selection_data->target; +} +#define gtk_selection_data_get_target wx_gtk_selection_data_get_target + +static inline GdkWindow* wx_gtk_widget_get_window(GtkWidget* widget) +{ + return widget->window; +} +#define gtk_widget_get_window wx_gtk_widget_get_window + +static inline GtkWidget* wx_gtk_window_get_default_widget(GtkWindow* window) +{ + return window->default_widget; +} +#define gtk_window_get_default_widget wx_gtk_window_get_default_widget + +// ---------------------------------------------------------------------------- +// the following were introduced in GTK+ 2.16 + +static inline GdkAtom wx_gtk_selection_data_get_selection(GtkSelectionData* selection_data) +{ + return selection_data->selection; +} +#define gtk_selection_data_get_selection wx_gtk_selection_data_get_selection + +// ---------------------------------------------------------------------------- +// the following were introduced in GTK+ 2.18 + +static inline void wx_gtk_cell_renderer_get_alignment(GtkCellRenderer* cell, gfloat* xalign, gfloat* yalign) +{ + *xalign = cell->xalign; + *yalign = cell->yalign; +} +#define gtk_cell_renderer_get_alignment wx_gtk_cell_renderer_get_alignment + +static inline void wx_gtk_cell_renderer_get_padding(GtkCellRenderer* cell, gint* xpad, gint* ypad) +{ + *xpad = cell->xpad; + *ypad = cell->ypad; +} +#define gtk_cell_renderer_get_padding wx_gtk_cell_renderer_get_padding + +static inline void wx_gtk_widget_get_allocation(GtkWidget* widget, GtkAllocation* allocation) +{ + *allocation = widget->allocation; +} +#define gtk_widget_get_allocation wx_gtk_widget_get_allocation + +inline gboolean wx_gtk_widget_get_has_window(GtkWidget *widget) +{ + return !GTK_WIDGET_NO_WINDOW(widget); +} +#define gtk_widget_get_has_window wx_gtk_widget_get_has_window + + +inline gboolean wx_gtk_widget_get_has_grab(GtkWidget *widget) +{ + return GTK_WIDGET_HAS_GRAB(widget); +} +#define gtk_widget_get_has_grab wx_gtk_widget_get_has_grab + + +inline gboolean wx_gtk_widget_get_visible(GtkWidget *widget) +{ + return GTK_WIDGET_VISIBLE(widget); +} +#define gtk_widget_get_visible wx_gtk_widget_get_visible + + +inline gboolean wx_gtk_widget_get_sensitive(GtkWidget *widget) +{ + return GTK_WIDGET_SENSITIVE(widget); +} +#define gtk_widget_get_sensitive wx_gtk_widget_get_sensitive + + +inline gboolean wx_gtk_widget_is_drawable(GtkWidget *widget) +{ + return GTK_WIDGET_DRAWABLE(widget); +} +#define gtk_widget_is_drawable wx_gtk_widget_is_drawable + + +inline gboolean wx_gtk_widget_get_can_focus(GtkWidget *widget) +{ + return GTK_WIDGET_CAN_FOCUS(widget); +} +#define gtk_widget_get_can_focus wx_gtk_widget_get_can_focus + +inline void wx_gtk_widget_set_can_focus(GtkWidget *widget, gboolean can) +{ + if ( can ) + GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS); + else + GTK_WIDGET_UNSET_FLAGS(widget, GTK_CAN_FOCUS); +} +#define gtk_widget_set_can_focus wx_gtk_widget_set_can_focus + + +inline gboolean wx_gtk_widget_get_can_default(GtkWidget *widget) +{ + return GTK_WIDGET_CAN_DEFAULT(widget); +} +#define gtk_widget_get_can_default wx_gtk_widget_get_can_default + +inline void wx_gtk_widget_set_can_default(GtkWidget *widget, gboolean can) +{ + if ( can ) + GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_DEFAULT); + else + GTK_WIDGET_UNSET_FLAGS(widget, GTK_CAN_DEFAULT); +} +#define gtk_widget_set_can_default wx_gtk_widget_set_can_default + + +inline gboolean wx_gtk_widget_has_default(GtkWidget *widget) +{ + return GTK_WIDGET_HAS_DEFAULT(widget); +} +#define gtk_widget_has_default wx_gtk_widget_has_default + + +inline GtkStateType wx_gtk_widget_get_state(GtkWidget *widget) +{ + return (GtkStateType)GTK_WIDGET_STATE(widget); +} +#define gtk_widget_get_state wx_gtk_widget_get_state + + +inline gboolean wx_gtk_widget_get_double_buffered(GtkWidget *widget) +{ + return GTK_WIDGET_DOUBLE_BUFFERED(widget); +} +#define gtk_widget_get_double_buffered wx_gtk_widget_get_double_buffered + +static inline gboolean wx_gtk_widget_has_grab(GtkWidget* widget) +{ + return GTK_WIDGET_HAS_GRAB(widget); +} +#define gtk_widget_has_grab wx_gtk_widget_has_grab + +static inline void wx_gtk_widget_set_allocation(GtkWidget* widget, const GtkAllocation* allocation) +{ + widget->allocation = *allocation; +} +#define gtk_widget_set_allocation wx_gtk_widget_set_allocation + +// ---------------------------------------------------------------------------- +// the following were introduced in GTK+ 2.20 + +inline gboolean wx_gtk_widget_get_realized(GtkWidget *widget) +{ + return GTK_WIDGET_REALIZED(widget); +} +#define gtk_widget_get_realized wx_gtk_widget_get_realized + + +inline gboolean wx_gtk_widget_get_mapped(GtkWidget *widget) +{ + return GTK_WIDGET_MAPPED(widget); +} +#define gtk_widget_get_mapped wx_gtk_widget_get_mapped + +static inline void wx_gtk_widget_get_requisition(GtkWidget* widget, GtkRequisition* requisition) +{ + *requisition = widget->requisition; +} +#define gtk_widget_get_requisition wx_gtk_widget_get_requisition + +static inline GdkWindow* wx_gtk_entry_get_text_window(GtkEntry* entry) +{ + return entry->text_area; +} +#define gtk_entry_get_text_window wx_gtk_entry_get_text_window + +// ---------------------------------------------------------------------------- +// the following were introduced in GTK+ 2.24 + +static inline gint wx_gdk_window_get_height(GdkWindow* window) +{ + int h; + gdk_drawable_get_size(window, NULL, &h); + return h; +} +#define gdk_window_get_height wx_gdk_window_get_height + +static inline gint wx_gdk_window_get_width(GdkWindow* window) +{ + int w; + gdk_drawable_get_size(window, &w, NULL); + return w; +} +#define gdk_window_get_width wx_gdk_window_get_width + +#if GTK_CHECK_VERSION(2,10,0) +static inline void wx_gdk_cairo_set_source_window(cairo_t* cr, GdkWindow* window, gdouble x, gdouble y) +{ + gdk_cairo_set_source_pixmap(cr, window, x, y); +} +#define gdk_cairo_set_source_window wx_gdk_cairo_set_source_window +#endif + +#endif // !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) + + +#endif // _WX_GTK_PRIVATE_COMPAT_H_ + diff --git a/Externals/wxWidgets3/include/wx/gtk/private/list.h b/Externals/wxWidgets3/include/wx/gtk/private/list.h new file mode 100644 index 0000000000..0ec669317d --- /dev/null +++ b/Externals/wxWidgets3/include/wx/gtk/private/list.h @@ -0,0 +1,33 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/private/list.h +// Purpose: wxGtkList class. +// Author: Vadim Zeitlin +// Created: 2011-08-21 +// RCS-ID: $Id: list.h 68842 2011-08-22 12:41:00Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTK_PRIVATE_LIST_H_ +#define _WX_GTK_PRIVATE_LIST_H_ + +// ---------------------------------------------------------------------------- +// Convenience class for calling g_list_free() automatically +// ---------------------------------------------------------------------------- + +class wxGtkList +{ +public: + explicit wxGtkList(GList* list) : m_list(list) { } + ~wxGtkList() { g_list_free(m_list); } + + operator GList *() const { return m_list; } + GList * operator->() const { return m_list; } + +protected: + GList* const m_list; + + wxDECLARE_NO_COPY_CLASS(wxGtkList); +}; + +#endif // _WX_GTK_PRIVATE_LIST_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/private/timer.h b/Externals/wxWidgets3/include/wx/gtk/private/timer.h index 1d845fd873..509303cda6 100644 --- a/Externals/wxWidgets3/include/wx/gtk/private/timer.h +++ b/Externals/wxWidgets3/include/wx/gtk/private/timer.h @@ -2,7 +2,7 @@ // Name: wx/gtk/private/timer.h // Purpose: wxTimerImpl for wxGTK // Author: Robert Roebling -// Id: $Id: timer.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: timer.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -21,7 +21,7 @@ class WXDLLIMPEXP_CORE wxGTKTimerImpl : public wxTimerImpl { public: - wxGTKTimerImpl(wxTimer* timer) : wxTimerImpl(timer) { m_sourceId = 0; }; + wxGTKTimerImpl(wxTimer* timer) : wxTimerImpl(timer) { m_sourceId = 0; } virtual bool Start( int millisecs = -1, bool oneShot = false ); virtual void Stop(); diff --git a/Externals/wxWidgets3/include/wx/gtk/radiobox.h b/Externals/wxWidgets3/include/wx/gtk/radiobox.h index cf875dd5ac..ced13bc390 100644 --- a/Externals/wxWidgets3/include/wx/gtk/radiobox.h +++ b/Externals/wxWidgets3/include/wx/gtk/radiobox.h @@ -2,7 +2,7 @@ // Name: wx/gtk/radiobox.h // Purpose: // Author: Robert Roebling -// Id: $Id: radiobox.h 60885 2009-06-03 22:33:32Z VZ $ +// Id: $Id: radiobox.h 67298 2011-03-23 17:36:10Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -131,7 +131,7 @@ public: void GtkDisableEvents(); void GtkEnableEvents(); #if wxUSE_TOOLTIPS - void GTKApplyToolTip( GtkTooltips *tips, const gchar *tip ); + virtual void GTKApplyToolTip(const char* tip); #endif // wxUSE_TOOLTIPS wxRadioBoxButtonsInfoList m_buttonsInfo; diff --git a/Externals/wxWidgets3/include/wx/gtk/region.h b/Externals/wxWidgets3/include/wx/gtk/region.h index cba99cf1cd..18b2f26169 100644 --- a/Externals/wxWidgets3/include/wx/gtk/region.h +++ b/Externals/wxWidgets3/include/wx/gtk/region.h @@ -2,7 +2,7 @@ // Name: wx/gtk/region.h // Purpose: // Author: Robert Roebling -// Id: $Id: region.h 61724 2009-08-21 10:41:26Z VZ $ +// Id: $Id: region.h 69815 2011-11-25 00:52:24Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -122,13 +122,11 @@ private: void Init(); void CreateRects( const wxRegion& r ); - size_t m_current; wxRegion m_region; - wxRect *m_rects; - size_t m_numRects; + int m_numRects; + int m_current; -private: DECLARE_DYNAMIC_CLASS(wxRegionIterator) }; diff --git a/Externals/wxWidgets3/include/wx/gtk/scrolbar.h b/Externals/wxWidgets3/include/wx/gtk/scrolbar.h index 980504935d..2ab5353ed8 100644 --- a/Externals/wxWidgets3/include/wx/gtk/scrolbar.h +++ b/Externals/wxWidgets3/include/wx/gtk/scrolbar.h @@ -2,7 +2,7 @@ // Name: wx/gtk/scrolbar.h // Purpose: // Author: Robert Roebling -// Id: $Id: scrolbar.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: scrolbar.h 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -10,14 +10,6 @@ #ifndef _WX_GTK_SCROLLBAR_H_ #define _WX_GTK_SCROLLBAR_H_ -#include "wx/defs.h" - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxScrollBar; - //----------------------------------------------------------------------------- // wxScrollBar //----------------------------------------------------------------------------- @@ -57,10 +49,6 @@ public: static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); -protected: - virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const; - -private: DECLARE_DYNAMIC_CLASS(wxScrollBar) }; diff --git a/Externals/wxWidgets3/include/wx/gtk/statbox.h b/Externals/wxWidgets3/include/wx/gtk/statbox.h index 7860451813..0d9ab6f624 100644 --- a/Externals/wxWidgets3/include/wx/gtk/statbox.h +++ b/Externals/wxWidgets3/include/wx/gtk/statbox.h @@ -2,7 +2,7 @@ // Name: wx/gtk/statbox.h // Purpose: // Author: Robert Roebling -// Id: $Id: statbox.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: statbox.h 70738 2012-02-28 17:06:56Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -40,7 +40,7 @@ public: // implementation - virtual bool IsTransparentForMouse() const { return true; } + virtual bool GTKIsTransparentForMouse() const { return true; } virtual void GetBordersForSizer(int *borderTop, int *borderOther) const; diff --git a/Externals/wxWidgets3/include/wx/gtk/textctrl.h b/Externals/wxWidgets3/include/wx/gtk/textctrl.h index 0582485fa1..fb214dc5f9 100644 --- a/Externals/wxWidgets3/include/wx/gtk/textctrl.h +++ b/Externals/wxWidgets3/include/wx/gtk/textctrl.h @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // Created: 01/02/97 -// Id: $Id: textctrl.h 64404 2010-05-26 17:37:55Z RR $ +// Id: $Id: textctrl.h 68450 2011-07-29 15:11:54Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -167,6 +167,8 @@ protected: virtual void DoSetValue(const wxString &value, int flags = 0); + virtual wxPoint DoPositionToCoords(long pos) const; + // wrappers hiding the differences between functions doing the same thing // for GtkTextView and GtkEntry (all of them use current window style to // set the given characteristic) @@ -214,6 +216,7 @@ private: GtkTextBuffer *m_buffer; GtkTextMark* m_showPositionOnThaw; + GSList* m_anonymousMarkList; // For wxTE_AUTO_URL void OnUrlMouseEvent(wxMouseEvent&); diff --git a/Externals/wxWidgets3/include/wx/gtk/textentry.h b/Externals/wxWidgets3/include/wx/gtk/textentry.h index e9fb99c444..c9084a53f4 100644 --- a/Externals/wxWidgets3/include/wx/gtk/textentry.h +++ b/Externals/wxWidgets3/include/wx/gtk/textentry.h @@ -3,7 +3,7 @@ // Purpose: wxGTK-specific wxTextEntry implementation // Author: Vadim Zeitlin // Created: 2007-09-24 -// RCS-ID: $Id: textentry.h 61834 2009-09-05 12:39:12Z JMS $ +// RCS-ID: $Id: textentry.h 67509 2011-04-16 17:27:04Z VZ $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -43,8 +43,6 @@ public: virtual void SetSelection(long from, long to); virtual void GetSelection(long *from, long *to) const; - virtual bool AutoComplete(const wxArrayString& choices); - virtual bool IsEditable() const; virtual void SetEditable(bool editable); @@ -60,6 +58,8 @@ protected: virtual bool DoSetMargins(const wxPoint& pt); virtual wxPoint DoGetMargins() const; + virtual bool DoAutoCompleteStrings(const wxArrayString& choices); + private: // implement this to return the associated GtkEntry or another widget // implementing GtkEditable diff --git a/Externals/wxWidgets3/include/wx/gtk/tglbtn.h b/Externals/wxWidgets3/include/wx/gtk/tglbtn.h index 1bdbeb3673..514f5e4e7e 100644 --- a/Externals/wxWidgets3/include/wx/gtk/tglbtn.h +++ b/Externals/wxWidgets3/include/wx/gtk/tglbtn.h @@ -5,7 +5,7 @@ // Author: John Norris, minor changes by Axel Schlueter // Modified by: // Created: 08.02.01 -// RCS-ID: $Id: tglbtn.h 66992 2011-02-22 13:25:30Z VZ $ +// RCS-ID: $Id: tglbtn.h 67931 2011-06-14 13:00:42Z VZ $ // Copyright: (c) 2000 Johnny C. Norris II // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,67 +22,6 @@ class WXDLLIMPEXP_FWD_CORE wxToggleButton; class WXDLLIMPEXP_FWD_CORE wxToggleBitmapButton; -//----------------------------------------------------------------------------- -// wxBitmapToggleButton -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxBitmapToggleButton: public wxToggleButtonBase -{ -public: - // construction/destruction - wxBitmapToggleButton() {} - wxBitmapToggleButton(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr) - { - Create(parent, id, label, pos, size, style, validator, name); - } - - // Create the control - bool Create(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr); - - // Get/set the value - void SetValue(bool state); - bool GetValue() const; - - // Set the label - virtual void SetLabel(const wxString& label) { wxControl::SetLabel(label); } - virtual void SetLabel(const wxBitmap& label); - bool Enable(bool enable = true); - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - // implementation - wxBitmap m_bitmap; - - void OnSetBitmap(); - -protected: - void GTKDisableEvents(); - void GTKEnableEvents(); - - virtual wxSize DoGetBestSize() const; - virtual void DoApplyWidgetStyle(GtkRcStyle *style); - virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const; - -private: - typedef wxToggleButtonBase base_type; - - DECLARE_DYNAMIC_CLASS(wxBitmapToggleButton) -}; - //----------------------------------------------------------------------------- // wxToggleButton //----------------------------------------------------------------------------- @@ -119,7 +58,6 @@ public: // Set the label void SetLabel(const wxString& label); - bool Enable(bool enable = true); static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); @@ -130,13 +68,61 @@ protected: virtual wxSize DoGetBestSize() const; virtual void DoApplyWidgetStyle(GtkRcStyle *style); - virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const; + +#if wxUSE_MARKUP + virtual bool DoSetLabelMarkup(const wxString& markup); +#endif // wxUSE_MARKUP private: typedef wxToggleButtonBase base_type; + // Return the GtkLabel used by this toggle button. + GtkLabel *GTKGetLabel() const; + DECLARE_DYNAMIC_CLASS(wxToggleButton) }; +//----------------------------------------------------------------------------- +// wxBitmapToggleButton +//----------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxBitmapToggleButton: public wxToggleButton +{ +public: + // construction/destruction + wxBitmapToggleButton() {} + wxBitmapToggleButton(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr) + { + Create(parent, id, label, pos, size, style, validator, name); + } + + // Create the control + bool Create(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr); + + // deprecated synonym for SetBitmapLabel() + wxDEPRECATED_INLINE( void SetLabel(const wxBitmap& bitmap), + SetBitmapLabel(bitmap); ) + // prevent virtual function hiding + virtual void SetLabel(const wxString& label) { wxToggleButton::SetLabel(label); } + +private: + typedef wxToggleButtonBase base_type; + + DECLARE_DYNAMIC_CLASS(wxBitmapToggleButton) +}; + #endif // _WX_GTK_TOGGLEBUTTON_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/toolbar.h b/Externals/wxWidgets3/include/wx/gtk/toolbar.h index f97fe264e8..ea71a5c91b 100644 --- a/Externals/wxWidgets3/include/wx/gtk/toolbar.h +++ b/Externals/wxWidgets3/include/wx/gtk/toolbar.h @@ -2,7 +2,7 @@ // Name: wx/gtk/toolbar.h // Purpose: GTK toolbar // Author: Robert Roebling -// RCS-ID: $Id: toolbar.h 66633 2011-01-07 18:15:21Z PC $ +// RCS-ID: $Id: toolbar.h 70854 2012-03-10 00:01:09Z RD $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -12,6 +12,8 @@ #if wxUSE_TOOLBAR +typedef struct _GtkTooltips GtkTooltips; + // ---------------------------------------------------------------------------- // wxToolBar // ---------------------------------------------------------------------------- @@ -56,6 +58,17 @@ public: static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); + virtual wxToolBarToolBase *CreateTool(int id, + const wxString& label, + const wxBitmap& bitmap1, + const wxBitmap& bitmap2 = wxNullBitmap, + wxItemKind kind = wxITEM_NORMAL, + wxObject *clientData = NULL, + const wxString& shortHelpString = wxEmptyString, + const wxString& longHelpString = wxEmptyString); + virtual wxToolBarToolBase *CreateTool(wxControl *control, + const wxString& label); + // implementation from now on // -------------------------- @@ -71,17 +84,6 @@ protected: virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle); virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle); - virtual wxToolBarToolBase *CreateTool(int id, - const wxString& label, - const wxBitmap& bitmap1, - const wxBitmap& bitmap2, - wxItemKind kind, - wxObject *clientData, - const wxString& shortHelpString, - const wxString& longHelpString); - virtual wxToolBarToolBase *CreateTool(wxControl *control, - const wxString& label); - private: void Init(); void GtkSetStyle(); diff --git a/Externals/wxWidgets3/include/wx/gtk/tooltip.h b/Externals/wxWidgets3/include/wx/gtk/tooltip.h index 3e4589140c..e82880d638 100644 --- a/Externals/wxWidgets3/include/wx/gtk/tooltip.h +++ b/Externals/wxWidgets3/include/wx/gtk/tooltip.h @@ -2,15 +2,14 @@ // Name: wx/gtk/tooltip.h // Purpose: wxToolTip class // Author: Robert Roebling -// Id: $Id: tooltip.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: tooltip.h 67298 2011-03-23 17:36:10Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef __GTKTOOLTIPH__ -#define __GTKTOOLTIPH__ +#ifndef _WX_GTKTOOLTIP_H_ +#define _WX_GTKTOOLTIP_H_ -#include "wx/defs.h" #include "wx/string.h" #include "wx/object.h" @@ -18,7 +17,6 @@ // forward declarations //----------------------------------------------------------------------------- -class WXDLLIMPEXP_FWD_CORE wxToolTip; class WXDLLIMPEXP_FWD_CORE wxWindow; //----------------------------------------------------------------------------- @@ -43,15 +41,10 @@ public: wxString GetTip() const { return m_text; } wxWindow *GetWindow() const { return m_window; } - bool IsOk() const { return m_window != NULL; } - - // this forwards back to wxWindow::GTKApplyToolTip() - void GTKApply( wxWindow *win ); - - // this just sets the given tooltip for the specified widget - // tip must be UTF-8 encoded - static void GTKApply(GtkWidget *w, const gchar *tip); + // Implementation + void GTKSetWindow(wxWindow* win); + static void GTKApply(GtkWidget* widget, const char* tip); private: wxString m_text; @@ -60,4 +53,4 @@ private: DECLARE_ABSTRACT_CLASS(wxToolTip) }; -#endif // __GTKTOOLTIPH__ +#endif // _WX_GTKTOOLTIP_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/toplevel.h b/Externals/wxWidgets3/include/wx/gtk/toplevel.h index cbfa47d34c..c17f62ed77 100644 --- a/Externals/wxWidgets3/include/wx/gtk/toplevel.h +++ b/Externals/wxWidgets3/include/wx/gtk/toplevel.h @@ -2,7 +2,7 @@ // Name: wx/gtk/toplevel.h // Purpose: // Author: Robert Roebling -// Id: $Id: toplevel.h 65373 2010-08-21 09:53:25Z RR $ +// Id: $Id: toplevel.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -55,9 +55,7 @@ public: virtual void ShowWithoutActivating(); virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); - virtual bool IsFullScreen() const { return m_fsIsShowing; }; - - virtual bool SetShape(const wxRegion& region); + virtual bool IsFullScreen() const { return m_fsIsShowing; } virtual void RequestUserAttention(int flags = wxUSER_ATTENTION_INFO); @@ -95,6 +93,8 @@ public: // GTK callbacks virtual void OnInternalIdle(); + virtual void GTKHandleRealized(); + // do *not* call this to iconize the frame, this is a private function! void SetIconizeState(bool iconic); @@ -111,12 +111,11 @@ public: // size of WM decorations wxSize m_decorSize; - // shape of the frame - wxRegion m_shape; - // private gtk_timeout_add result for mimicing wxUSER_ATTENTION_INFO and // wxUSER_ATTENTION_ERROR difference, -2 for no hint, -1 for ERROR hint, rest for GtkTimeout handle. int m_urgency_hint; + // timer for detecting WM with broken _NET_REQUEST_FRAME_EXTENTS handling + unsigned m_netFrameExtentsTimerId; // return the size of the window without WM decorations void GTKDoGetSize(int *width, int *height) const; diff --git a/Externals/wxWidgets3/include/wx/gtk/treeentry_gtk.h b/Externals/wxWidgets3/include/wx/gtk/treeentry_gtk.h index f5c5f84363..5a2c926151 100644 --- a/Externals/wxWidgets3/include/wx/gtk/treeentry_gtk.h +++ b/Externals/wxWidgets3/include/wx/gtk/treeentry_gtk.h @@ -2,7 +2,7 @@ // Name: wx/gtk/treeentry_gtk.h // Purpose: GtkTreeEntry - a string/userdata combo for use with treeview // Author: Ryan Norton -// Id: $Id: treeentry_gtk.h 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: treeentry_gtk.h 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 2006 Ryan Norton // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////// */ @@ -19,9 +19,9 @@ extern "C" { #include "wx/dlimpexp.h" #define GTK_TYPE_TREE_ENTRY (gtk_tree_entry_get_type()) -#define GTK_TREE_ENTRY(obj) (GTK_CHECK_CAST (obj, gtk_tree_entry_get_type (), GtkTreeEntry)) -#define GTK_TREE_ENTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST (klass, gtk_tree_entry_get_type (), GtkTreeEntryClass)) -#define GTK_IS_TREE_ENTRY(obj) (GTK_CHECK_TYPE (obj, gtk_tree_entry_get_type ())) +#define GTK_TREE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, gtk_tree_entry_get_type (), GtkTreeEntry)) +#define GTK_TREE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST (klass, gtk_tree_entry_get_type (), GtkTreeEntryClass)) +#define GTK_IS_TREE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, gtk_tree_entry_get_type ())) typedef struct _GtkTreeEntry GtkTreeEntry; typedef struct _GtkTreeEntryClass GtkTreeEntryClass; @@ -47,7 +47,7 @@ WXDLLIMPEXP_CORE GtkTreeEntry* gtk_tree_entry_new (void); WXDLLIMPEXP_CORE -GtkType gtk_tree_entry_get_type (void); +GType gtk_tree_entry_get_type (void); WXDLLIMPEXP_CORE gchar* gtk_tree_entry_get_collate_key (GtkTreeEntry* entry); diff --git a/Externals/wxWidgets3/include/wx/gtk/webview_webkit.h b/Externals/wxWidgets3/include/wx/gtk/webview_webkit.h new file mode 100644 index 0000000000..cfb7e08aaa --- /dev/null +++ b/Externals/wxWidgets3/include/wx/gtk/webview_webkit.h @@ -0,0 +1,156 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/gtk/wx/webview.h +// Purpose: GTK webkit backend for web view component +// Author: Robert Roebling, Marianne Gagnon +// Id: $Id: webview_webkit.h 70768 2012-03-01 16:44:31Z PC $ +// Copyright: (c) 2010 Marianne Gagnon, 1998 Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTK_WEBKITCTRL_H_ +#define _WX_GTK_WEBKITCTRL_H_ + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT && defined(__WXGTK__) + +#include "wx/sharedptr.h" +#include "wx/webview.h" + +typedef struct _WebKitWebView WebKitWebView; + +//----------------------------------------------------------------------------- +// wxWebViewWebKit +//----------------------------------------------------------------------------- + +class WXDLLIMPEXP_WEBVIEW wxWebViewWebKit : public wxWebView +{ +public: + wxWebViewWebKit() { Init(); } + + wxWebViewWebKit(wxWindow *parent, + wxWindowID id = wxID_ANY, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxString& name = wxWebViewNameStr) + { + Init(); + + Create(parent, id, url, pos, size, style, name); + } + + virtual bool Create(wxWindow *parent, + wxWindowID id = wxID_ANY, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxString& name = wxWebViewNameStr); + + virtual bool Enable( bool enable = true ); + + // implementation + // -------------- + + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); + + virtual void Stop(); + virtual void LoadURL(const wxString& url); + virtual void GoBack(); + virtual void GoForward(); + virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT); + virtual bool CanGoBack() const; + virtual bool CanGoForward() const; + virtual void ClearHistory(); + virtual void EnableHistory(bool enable = true); + virtual wxVector > GetBackwardHistory(); + virtual wxVector > GetForwardHistory(); + virtual void LoadHistoryItem(wxSharedPtr item); + virtual wxString GetCurrentURL() const; + virtual wxString GetCurrentTitle() const; + virtual wxString GetPageSource() const; + virtual wxString GetPageText() const; + //We do not want to hide the other overloads + using wxWebView::SetPage; + virtual void SetPage(const wxString& html, const wxString& baseUrl); + virtual void Print(); + virtual bool IsBusy() const; + + void SetZoomType(wxWebViewZoomType); + wxWebViewZoomType GetZoomType() const; + bool CanSetZoomType(wxWebViewZoomType) const; + virtual wxWebViewZoom GetZoom() const; + virtual void SetZoom(wxWebViewZoom); + + //Clipboard functions + virtual bool CanCut() const; + virtual bool CanCopy() const; + virtual bool CanPaste() const; + virtual void Cut(); + virtual void Copy(); + virtual void Paste(); + + //Undo / redo functionality + virtual bool CanUndo() const; + virtual bool CanRedo() const; + virtual void Undo(); + virtual void Redo(); + + //Editing functions + virtual void SetEditable(bool enable = true); + virtual bool IsEditable() const; + + //Selection + virtual void DeleteSelection(); + virtual bool HasSelection() const; + virtual void SelectAll(); + virtual wxString GetSelectedText() const; + virtual wxString GetSelectedSource() const; + virtual void ClearSelection(); + + virtual void RunScript(const wxString& javascript); + + //Virtual Filesystem Support + virtual void RegisterHandler(wxSharedPtr handler); + virtual wxVector > GetHandlers() { return m_handlerList; } + + /** TODO: check if this can be made private + * The native control has a getter to check for busy state, but except in + * very recent versions of webkit this getter doesn't say everything we need + * (namely it seems to stay indefinitely busy when loading is cancelled by + * user) + */ + bool m_busy; + + wxString m_vfsurl; + + //We use this flag to stop recursion when we load a page from the navigation + //callback, mainly when loading a VFS page + bool m_guard; + +protected: + + virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const; + +private: + + void ZoomIn(); + void ZoomOut(); + void SetWebkitZoom(float level); + float GetWebkitZoom() const; + + // focus event handler: calls GTKUpdateBitmap() + void GTKOnFocus(wxFocusEvent& event); + + WebKitWebView *m_web_view; + int m_historyLimit; + + wxVector > m_handlerList; + + wxDECLARE_DYNAMIC_CLASS(wxWebViewWebKit); +}; + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT && defined(__WXGTK__) + +#endif diff --git a/Externals/wxWidgets3/include/wx/gtk/webviewhistoryitem_webkit.h b/Externals/wxWidgets3/include/wx/gtk/webviewhistoryitem_webkit.h new file mode 100644 index 0000000000..cbadf4ef5f --- /dev/null +++ b/Externals/wxWidgets3/include/wx/gtk/webviewhistoryitem_webkit.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/gtk/webviewhistoryitem.h +// Purpose: wxWebViewHistoryItem header for GTK +// Author: Steven Lamerton +// Id: $Id: webviewhistoryitem_webkit.h 69770 2011-11-17 01:23:03Z RD $ +// Copyright: (c) 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTK_WEBVIEWHISTORYITEM_H_ +#define _WX_GTK_WEBVIEWHISTORYITEM_H_ + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT && defined(__WXGTK__) + +class WXDLLIMPEXP_WEBVIEW wxWebViewHistoryItem +{ +public: + wxWebViewHistoryItem(const wxString& url, const wxString& title) : + m_url(url), m_title(title) {} + wxString GetUrl() { return m_url; } + wxString GetTitle() { return m_title; } + + friend class wxWebViewWebKit; + +private: + wxString m_url, m_title; + void* m_histItem; +}; + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT && defined(__WXGTK__) + +#endif // _WX_GTK_WEBVIEWHISTORYITEM_H_ diff --git a/Externals/wxWidgets3/include/wx/gtk/window.h b/Externals/wxWidgets3/include/wx/gtk/window.h index 7d2e6ed4fb..7238d6149b 100644 --- a/Externals/wxWidgets3/include/wx/gtk/window.h +++ b/Externals/wxWidgets3/include/wx/gtk/window.h @@ -2,7 +2,7 @@ // Name: wx/gtk/window.h // Purpose: // Author: Robert Roebling -// Id: $Id: window.h 65680 2010-09-30 11:44:45Z VZ $ +// Id: $Id: window.h 70569 2012-02-11 16:26:52Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -18,6 +18,13 @@ struct wxGtkIMData; WX_DEFINE_EXPORTED_ARRAY_PTR(GdkWindow *, wxArrayGdkWindows); +extern "C" +{ + +typedef void (*wxGTKCallback)(); + +} + //----------------------------------------------------------------------------- // wxWindowGTK //----------------------------------------------------------------------------- @@ -52,8 +59,6 @@ public: virtual bool Show( bool show = true ); - virtual void SetWindowStyleFlag( long style ); - virtual bool IsRetained() const; virtual void SetFocus(); @@ -76,6 +81,7 @@ public: virtual bool SetFont( const wxFont &font ); virtual bool SetBackgroundStyle(wxBackgroundStyle style) ; + virtual bool IsTransparentBackgroundSupported(wxString* reason = NULL) const; virtual int GetCharHeight() const; virtual int GetCharWidth() const; @@ -187,6 +193,10 @@ public: void GTKHandleFocusOutNoDeferring(); static void GTKHandleDeferredFocusOut(); + // Called when m_widget becomes realized. Derived classes must call the + // base class method if they override it. + virtual void GTKHandleRealized(); + protected: // for controls composed of multiple GTK widgets, return true to eliminate // spurious focus events if the focus changes between GTK+ children within @@ -218,7 +228,7 @@ public: #if wxUSE_TOOLTIPS // applies tooltip to the widget (tip must be UTF-8 encoded) - virtual void GTKApplyToolTip( GtkTooltips *tips, const gchar *tip ); + virtual void GTKApplyToolTip(const char* tip); #endif // wxUSE_TOOLTIPS // Called when a window should delay showing itself @@ -370,7 +380,7 @@ protected: // // This is just a wrapper for g_signal_connect() and returns the handler id // just as it does. - gulong GTKConnectWidget(const char *signal, void (*callback)()); + unsigned long GTKConnectWidget(const char *signal, wxGTKCallback callback); // Return true from here if PostCreation() should connect to size_request // signal: this is done by default but doesn't work for some native @@ -390,7 +400,6 @@ private: bool DoScrollByUnits(ScrollDir dir, ScrollUnit unit, int units); virtual void AddChildGTK(wxWindowGTK* child); - DECLARE_DYNAMIC_CLASS(wxWindowGTK) wxDECLARE_NO_COPY_CLASS(wxWindowGTK); }; diff --git a/Externals/wxWidgets3/include/wx/hash.h b/Externals/wxWidgets3/include/wx/hash.h index d20c83c668..c30644fcfb 100644 --- a/Externals/wxWidgets3/include/wx/hash.h +++ b/Externals/wxWidgets3/include/wx/hash.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: VZ at 25.02.00: type safe hashes with WX_DECLARE_HASH() // Created: 01/02/97 -// RCS-ID: $Id: hash.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: hash.h 67343 2011-03-30 14:16:04Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,7 +15,7 @@ #include "wx/defs.h" #include "wx/string.h" -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS #include "wx/object.h" #else class WXDLLIMPEXP_FWD_BASE wxObject; @@ -80,7 +80,7 @@ protected: }; class WXDLLIMPEXP_BASE wxHashTableBase -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS : public wxObject #endif { diff --git a/Externals/wxWidgets3/include/wx/hashmap.h b/Externals/wxWidgets3/include/wx/hashmap.h index 058c5c9e38..f7288a6df0 100644 --- a/Externals/wxWidgets3/include/wx/hashmap.h +++ b/Externals/wxWidgets3/include/wx/hashmap.h @@ -4,7 +4,7 @@ // Author: Mattia Barbon // Modified by: // Created: 29/01/2002 -// RCS-ID: $Id: hashmap.h 66711 2011-01-19 10:47:49Z VZ $ +// RCS-ID: $Id: hashmap.h 69568 2011-10-27 22:26:10Z VZ $ // Copyright: (c) Mattia Barbon // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,9 +15,9 @@ #include "wx/string.h" #include "wx/wxcrt.h" -// In wxUSE_STL build we prefer to use the standard hash map class but it can -// be either in non-standard hash_map header (old g++ and some other STL -// implementations) or in C++0x standard unordered_map which can in turn be +// In wxUSE_STD_CONTAINERS build we prefer to use the standard hash map class +// but it can be either in non-standard hash_map header (old g++ and some other +// STL implementations) or in C++0x standard unordered_map which can in turn be // available either in std::tr1 or std namespace itself // // To summarize: if std::unordered_map is available use it, otherwise use tr1 @@ -28,7 +28,7 @@ #define HAVE_STL_HASH_MAP #endif -#if wxUSE_STL && \ +#if wxUSE_STD_CONTAINERS && \ (defined(HAVE_STD_UNORDERED_MAP) || defined(HAVE_TR1_UNORDERED_MAP)) #if defined(HAVE_STD_UNORDERED_MAP) @@ -42,7 +42,7 @@ #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ typedef WX_HASH_MAP_NAMESPACE::unordered_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME -#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP) +#elif wxUSE_STD_CONTAINERS && defined(HAVE_STL_HASH_MAP) #if defined(HAVE_EXT_HASH_MAP) #include @@ -59,7 +59,7 @@ #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ typedef WX_HASH_MAP_NAMESPACE::hash_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME -#else // !wxUSE_STL || no std::{hash,unordered}_map class available +#else // !wxUSE_STD_CONTAINERS || no std::{hash,unordered}_map class available #define wxNEEDS_WX_HASH_MAP @@ -127,7 +127,9 @@ protected: } }; -#define _WX_DECLARE_HASHTABLE( VALUE_T, KEY_T, HASH_T, KEY_EX_T, KEY_EQ_T, CLASSNAME, CLASSEXP, SHOULD_GROW, SHOULD_SHRINK ) \ +#define _WX_DECLARE_HASHTABLE( VALUE_T, KEY_T, HASH_T, KEY_EX_T, KEY_EQ_T,\ + PTROPERATOR, CLASSNAME, CLASSEXP, \ + SHOULD_GROW, SHOULD_SHRINK ) \ CLASSEXP CLASSNAME : protected _wxHashTableBase2 \ { \ public: \ @@ -217,7 +219,7 @@ public: \ iterator& operator++() { PlusPlus(); return *this; } \ iterator operator++(int) { iterator it=*this;PlusPlus();return it; } \ reference operator *() const { return m_node->m_value; } \ - pointer operator ->() const { return &(m_node->m_value); } \ + PTROPERATOR(pointer) \ }; \ \ CLASSEXP const_iterator : public Iterator \ @@ -230,7 +232,7 @@ public: \ const_iterator& operator++() { PlusPlus();return *this; } \ const_iterator operator++(int) { const_iterator it=*this;PlusPlus();return it; } \ const_reference operator *() const { return m_node->m_value; } \ - const_pointer operator ->() const { return &(m_node->m_value); } \ + PTROPERATOR(const_pointer) \ }; \ \ CLASSNAME( size_type sz = 10, const hasher& hfun = hasher(), \ @@ -632,10 +634,16 @@ public: #ifdef wxNEEDS_WX_HASH_MAP +#define wxPTROP_NORMAL(pointer) \ + pointer operator ->() const { return &(m_node->m_value); } +#define wxPTROP_NOP(pointer) + #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ _WX_DECLARE_PAIR( KEY_T, VALUE_T, CLASSNAME##_wxImplementation_Pair, CLASSEXP ) \ _WX_DECLARE_HASH_MAP_KEY_EX( KEY_T, CLASSNAME##_wxImplementation_Pair, CLASSNAME##_wxImplementation_KeyEx, CLASSEXP ) \ -_WX_DECLARE_HASHTABLE( CLASSNAME##_wxImplementation_Pair, KEY_T, HASH_T, CLASSNAME##_wxImplementation_KeyEx, KEY_EQ_T, CLASSNAME##_wxImplementation_HashTable, CLASSEXP, grow_lf70, never_shrink ) \ +_WX_DECLARE_HASHTABLE( CLASSNAME##_wxImplementation_Pair, KEY_T, HASH_T, \ + CLASSNAME##_wxImplementation_KeyEx, KEY_EQ_T, wxPTROP_NORMAL, \ + CLASSNAME##_wxImplementation_HashTable, CLASSEXP, grow_lf70, never_shrink ) \ CLASSEXP CLASSNAME:public CLASSNAME##_wxImplementation_HashTable \ { \ public: \ @@ -676,7 +684,7 @@ public: \ \ size_type erase( const key_type& k ) \ { return CLASSNAME##_wxImplementation_HashTable::erase( k ); } \ - void erase( const iterator& it ) { erase( it->first ); } \ + void erase( const iterator& it ) { erase( (*it).first ); } \ \ /* count() == 0 | 1 */ \ size_type count( const const_key_type& key ) \ diff --git a/Externals/wxWidgets3/include/wx/hashset.h b/Externals/wxWidgets3/include/wx/hashset.h index 54a7779c4a..e5f4d10eca 100644 --- a/Externals/wxWidgets3/include/wx/hashset.h +++ b/Externals/wxWidgets3/include/wx/hashset.h @@ -4,7 +4,7 @@ // Author: Mattia Barbon // Modified by: // Created: 11/08/2003 -// RCS-ID: $Id: hashset.h 60410 2009-04-27 13:26:19Z VZ $ +// RCS-ID: $Id: hashset.h 69568 2011-10-27 22:26:10Z VZ $ // Copyright: (c) Mattia Barbon // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,7 +17,7 @@ // see comment in wx/hashmap.h which also applies to different standard hash // set classes -#if wxUSE_STL && \ +#if wxUSE_STD_CONTAINERS && \ (defined(HAVE_STD_UNORDERED_SET) || defined(HAVE_TR1_UNORDERED_SET)) #if defined(HAVE_STD_UNORDERED_SET) @@ -30,7 +30,7 @@ #error Update this code: unordered_set is available, but I do not know where. #endif -#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP) +#elif wxUSE_STD_CONTAINERS && defined(HAVE_STL_HASH_MAP) #if defined(HAVE_EXT_HASH_MAP) #include @@ -46,7 +46,7 @@ // we need to define the class declared by _WX_DECLARE_HASH_SET as a class and // not a typedef to allow forward declaring it -#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ +#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, PTROP, CLASSNAME, CLASSEXP ) \ CLASSEXP CLASSNAME \ : public WX_HASH_SET_BASE_TEMPLATE< KEY_T, HASH_T, KEY_EQ_T > \ { \ @@ -89,9 +89,11 @@ public: \ CLASSNAME& operator=(const CLASSNAME&) { return *this; } \ }; -#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\ +#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, PTROP, CLASSNAME, CLASSEXP )\ _WX_DECLARE_HASH_SET_KEY_EX( KEY_T, CLASSNAME##_wxImplementation_KeyEx, CLASSEXP ) \ -_WX_DECLARE_HASHTABLE( KEY_T, KEY_T, HASH_T, CLASSNAME##_wxImplementation_KeyEx, KEY_EQ_T, CLASSNAME##_wxImplementation_HashTable, CLASSEXP, grow_lf70, never_shrink ) \ +_WX_DECLARE_HASHTABLE( KEY_T, KEY_T, HASH_T, \ + CLASSNAME##_wxImplementation_KeyEx, KEY_EQ_T, PTROP, \ + CLASSNAME##_wxImplementation_HashTable, CLASSEXP, grow_lf70, never_shrink ) \ CLASSEXP CLASSNAME:public CLASSNAME##_wxImplementation_HashTable \ { \ public: \ @@ -134,17 +136,27 @@ public: \ // these macros are to be used in the user code #define WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME) \ - _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, class ) + _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, wxPTROP_NORMAL, CLASSNAME, class ) // and these do exactly the same thing but should be used inside the // library #define WX_DECLARE_HASH_SET_WITH_DECL( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, DECL) \ - _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, DECL ) + _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, wxPTROP_NORMAL, CLASSNAME, DECL ) #define WX_DECLARE_EXPORTED_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME) \ WX_DECLARE_HASH_SET_WITH_DECL( KEY_T, HASH_T, KEY_EQ_T, \ CLASSNAME, class WXDLLIMPEXP_CORE ) +// Finally these versions allow to define hash sets of non-objects (including +// pointers, hence the confusing but wxArray-compatible name) without +// operator->() which can't be used for them. This is mostly used inside the +// library itself to avoid warnings when using such hash sets with some less +// common compilers (notably Sun CC). +#define WX_DECLARE_HASH_SET_PTR( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME) \ + _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, wxPTROP_NOP, CLASSNAME, class ) +#define WX_DECLARE_HASH_SET_WITH_DECL_PTR( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, DECL) \ + _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, wxPTROP_NOP, CLASSNAME, DECL ) + // delete all hash elements // // NB: the class declaration of the hash elements must be visible from the diff --git a/Externals/wxWidgets3/include/wx/headercol.h b/Externals/wxWidgets3/include/wx/headercol.h index d3a47d3054..34231fe83e 100644 --- a/Externals/wxWidgets3/include/wx/headercol.h +++ b/Externals/wxWidgets3/include/wx/headercol.h @@ -3,7 +3,7 @@ // Purpose: declaration of wxHeaderColumn class // Author: Vadim Zeitlin // Created: 2008-12-02 -// RCS-ID: $Id: headercol.h 65948 2010-10-30 15:57:41Z VS $ +// RCS-ID: $Id: headercol.h 69174 2011-09-21 15:07:46Z VZ $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -97,7 +97,7 @@ public: // unspecified/default virtual int GetWidth() const = 0; - // minimal width can be set for resizeable columns to forbid resizing them + // minimal width can be set for resizable columns to forbid resizing them // below the specified size (set to 0 to remove) virtual int GetMinWidth() const = 0; @@ -177,8 +177,8 @@ public: void ClearFlag(int flag); void ToggleFlag(int flag); - virtual void SetResizeable(bool resizeable) - { ChangeFlag(wxCOL_RESIZABLE, resizeable); } + virtual void SetResizeable(bool resizable) + { ChangeFlag(wxCOL_RESIZABLE, resizable); } virtual void SetSortable(bool sortable) { ChangeFlag(wxCOL_SORTABLE, sortable); } virtual void SetReorderable(bool reorderable) @@ -186,8 +186,12 @@ public: virtual void SetHidden(bool hidden) { ChangeFlag(wxCOL_HIDDEN, hidden); } - virtual void SetAsSortKey(bool sort = true) = 0; - void UnsetAsSortKey() { SetAsSortKey(false); } + // This function can be called to indicate that this column is not used for + // sorting any more. Under some platforms it's not necessary to do anything + // in this case as just setting another column as a sort key takes care of + // everything but under MSW we currently need to call this explicitly to + // reset the sort indicator displayed on the column. + virtual void UnsetAsSortKey() { } virtual void SetSortOrder(bool ascending) = 0; void ToggleSortOrder() { SetSortOrder(!IsSortOrderAscending()); } @@ -249,10 +253,15 @@ public: virtual void SetFlags(int flags) { m_flags = flags; } virtual int GetFlags() const { return m_flags; } - virtual void SetAsSortKey(bool sort = true) { m_sort = sort; } virtual bool IsSortKey() const { return m_sort; } + virtual void UnsetAsSortKey() { m_sort = false; } + + virtual void SetSortOrder(bool ascending) + { + m_sort = true; + m_sortAscending = ascending; + } - virtual void SetSortOrder(bool ascending) { m_sortAscending = ascending; } virtual bool IsSortOrderAscending() const { return m_sortAscending; } private: diff --git a/Externals/wxWidgets3/include/wx/headerctrl.h b/Externals/wxWidgets3/include/wx/headerctrl.h index 600778b5fc..5477ea568d 100644 --- a/Externals/wxWidgets3/include/wx/headerctrl.h +++ b/Externals/wxWidgets3/include/wx/headerctrl.h @@ -3,7 +3,7 @@ // Purpose: wxHeaderCtrlBase class: interface of wxHeaderCtrl // Author: Vadim Zeitlin // Created: 2008-12-01 -// RCS-ID: $Id: headerctrl.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: headerctrl.h 70338 2012-01-14 16:51:57Z VS $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -154,6 +154,8 @@ public: // specified) and if the control has wxHD_ALLOW_REORDER style as well bool ShowCustomizeDialog(); + // compute column title width + int GetColumnTitleWidth(const wxHeaderColumn& col); // implementation only from now on // ------------------------------- diff --git a/Externals/wxWidgets3/include/wx/help.h b/Externals/wxWidgets3/include/wx/help.h index 0dae79dfae..e76d713189 100644 --- a/Externals/wxWidgets3/include/wx/help.h +++ b/Externals/wxWidgets3/include/wx/help.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: help.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: help.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,10 +22,6 @@ #include "wx/msw/wince/helpwce.h" #define wxHelpController wxWinceHelpController -#elif defined(__WXPALMOS__) - #include "wx/palmos/help.h" - - #define wxHelpController wxPalmHelpController #elif defined(__WXMSW__) #include "wx/msw/helpchm.h" diff --git a/Externals/wxWidgets3/include/wx/htmllbox.h b/Externals/wxWidgets3/include/wx/htmllbox.h index 46a15de7bc..8e051b371f 100644 --- a/Externals/wxWidgets3/include/wx/htmllbox.h +++ b/Externals/wxWidgets3/include/wx/htmllbox.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 31.05.03 -// RCS-ID: $Id: htmllbox.h 66751 2011-01-25 05:03:17Z RD $ +// RCS-ID: $Id: htmllbox.h 68460 2011-07-30 11:30:08Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -196,8 +196,8 @@ private: #define wxHLB_DEFAULT_STYLE wxBORDER_SUNKEN #define wxHLB_MULTIPLE wxLB_MULTIPLE -class WXDLLIMPEXP_HTML wxSimpleHtmlListBox : public wxHtmlListBox, - public wxItemContainer +class WXDLLIMPEXP_HTML wxSimpleHtmlListBox : + public wxWindowWithItems { DECLARE_ABSTRACT_CLASS(wxSimpleHtmlListBox) public: @@ -254,9 +254,6 @@ public: int GetSelection() const { return wxVListBox::GetSelection(); } - // see ctrlsub.h for more info about this: - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST - // accessing strings // ----------------- diff --git a/Externals/wxWidgets3/include/wx/icon.h b/Externals/wxWidgets3/include/wx/icon.h index 7e5265389b..421f7c5ba6 100644 --- a/Externals/wxWidgets3/include/wx/icon.h +++ b/Externals/wxWidgets3/include/wx/icon.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: icon.h 66772 2011-01-26 15:53:31Z SC $ +// RCS-ID: $Id: icon.h 70353 2012-01-15 14:46:41Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,10 +23,7 @@ // constant defines the default argument value for wxIcon ctor and wxIcon::LoadFile() // functions. -#if defined(__WXPALMOS__) - #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM - #include "wx/generic/icon.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_ICO_RESOURCE #include "wx/msw/icon.h" #elif defined(__WXMOTIF__) @@ -41,9 +38,6 @@ #elif defined(__WXX11__) #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM #include "wx/generic/icon.h" -#elif defined(__WXMGL__) - #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_ICO_RESOURCE - #include "wx/generic/icon.h" #elif defined(__WXDFB__) #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM #include "wx/generic/icon.h" diff --git a/Externals/wxWidgets3/include/wx/iconbndl.h b/Externals/wxWidgets3/include/wx/iconbndl.h index 32c62fd475..f0bbb403d9 100644 --- a/Externals/wxWidgets3/include/wx/iconbndl.h +++ b/Externals/wxWidgets3/include/wx/iconbndl.h @@ -4,7 +4,7 @@ // Author: Mattia barbon // Modified by: // Created: 23.03.02 -// RCS-ID: $Id: iconbndl.h 63942 2010-04-12 00:36:31Z VZ $ +// RCS-ID: $Id: iconbndl.h 70455 2012-01-24 22:17:47Z VZ $ // Copyright: (c) Mattia Barbon // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -28,6 +28,23 @@ WX_DECLARE_EXPORTED_OBJARRAY(wxIcon, wxIconArray); class WXDLLIMPEXP_CORE wxIconBundle : public wxGDIObject { public: + // Flags that determine what happens if GetIcon() doesn't find the icon of + // exactly the requested size. + enum + { + // Return invalid icon if exact size is not found. + FALLBACK_NONE = 0, + + // Return the icon of the system icon size if exact size is not found. + // May be combined with other non-NONE enum elements to determine what + // happens if the system icon size is not found neither. + FALLBACK_SYSTEM = 1, + + // Return the icon of closest larger size or, if there is no icon of + // larger size in the bundle, the closest icon of smaller size. + FALLBACK_NEAREST_LARGER = 2 + }; + // default constructor wxIconBundle(); @@ -60,13 +77,13 @@ public: void AddIcon(const wxIcon& icon); // returns the icon with the given size; if no such icon exists, - // returns the icon with size wxSYS_ICON_[XY]; if no such icon exists, - // returns the first icon in the bundle - wxIcon GetIcon(const wxSize& size) const; + // behavior is specified by the flags. + wxIcon GetIcon(const wxSize& size, int flags = FALLBACK_SYSTEM) const; // equivalent to GetIcon(wxSize(size, size)) - wxIcon GetIcon(wxCoord size = wxDefaultCoord) const - { return GetIcon(wxSize(size, size)); } + wxIcon GetIcon(wxCoord size = wxDefaultCoord, + int flags = FALLBACK_SYSTEM) const + { return GetIcon(wxSize(size, size), flags); } // returns the icon exactly of the specified size or wxNullIcon if no icon // of exactly given size are available diff --git a/Externals/wxWidgets3/include/wx/iconloc.h b/Externals/wxWidgets3/include/wx/iconloc.h index 41abc8fa7a..c2c6ef5485 100644 --- a/Externals/wxWidgets3/include/wx/iconloc.h +++ b/Externals/wxWidgets3/include/wx/iconloc.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 21.06.2003 -// RCS-ID: $Id: iconloc.h 27408 2004-05-23 20:53:33Z JS $ +// RCS-ID: $Id: iconloc.h 70808 2012-03-04 20:31:42Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -39,9 +39,9 @@ private: wxString m_filename; }; -// under MSW the same file may contain several icons so we also store the +// under Windows the same file may contain several icons so we also store the // index of the icon -#if defined(__WXMSW__) +#if defined(__WINDOWS__) class WXDLLIMPEXP_BASE wxIconLocation : public wxIconLocationBase { @@ -65,7 +65,7 @@ wxIconLocation::wxIconLocation(const wxString& file, int num) SetIndex(num); } -#else // !MSW +#else // !__WINDOWS__ // must be a class because we forward declare it as class class WXDLLIMPEXP_BASE wxIconLocation : public wxIconLocationBase diff --git a/Externals/wxWidgets3/include/wx/image.h b/Externals/wxWidgets3/include/wx/image.h index 393c0a6f69..70167b104c 100644 --- a/Externals/wxWidgets3/include/wx/image.h +++ b/Externals/wxWidgets3/include/wx/image.h @@ -2,7 +2,7 @@ // Name: wx/image.h // Purpose: wxImage class // Author: Robert Roebling -// RCS-ID: $Id: image.h 67203 2011-03-15 16:42:34Z DS $ +// RCS-ID: $Id: image.h 69760 2011-11-14 13:35:52Z VZ $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -28,17 +28,20 @@ // which breaks the compilation below #undef index -#define wxIMAGE_OPTION_QUALITY wxString(wxT("quality")) -#define wxIMAGE_OPTION_FILENAME wxString(wxT("FileName")) +#define wxIMAGE_OPTION_QUALITY wxString(wxS("quality")) +#define wxIMAGE_OPTION_FILENAME wxString(wxS("FileName")) -#define wxIMAGE_OPTION_RESOLUTION wxString(wxT("Resolution")) -#define wxIMAGE_OPTION_RESOLUTIONX wxString(wxT("ResolutionX")) -#define wxIMAGE_OPTION_RESOLUTIONY wxString(wxT("ResolutionY")) +#define wxIMAGE_OPTION_RESOLUTION wxString(wxS("Resolution")) +#define wxIMAGE_OPTION_RESOLUTIONX wxString(wxS("ResolutionX")) +#define wxIMAGE_OPTION_RESOLUTIONY wxString(wxS("ResolutionY")) -#define wxIMAGE_OPTION_RESOLUTIONUNIT wxString(wxT("ResolutionUnit")) +#define wxIMAGE_OPTION_RESOLUTIONUNIT wxString(wxS("ResolutionUnit")) -#define wxIMAGE_OPTION_MAX_WIDTH wxString(wxT("MaxWidth")) -#define wxIMAGE_OPTION_MAX_HEIGHT wxString(wxT("MaxHeight")) +#define wxIMAGE_OPTION_MAX_WIDTH wxString(wxS("MaxWidth")) +#define wxIMAGE_OPTION_MAX_HEIGHT wxString(wxS("MaxHeight")) + +#define wxIMAGE_OPTION_ORIGINAL_WIDTH wxString(wxS("OriginalWidth")) +#define wxIMAGE_OPTION_ORIGINAL_HEIGHT wxString(wxS("OriginalHeight")) // constants used with wxIMAGE_OPTION_RESOLUTIONUNIT // diff --git a/Externals/wxWidgets3/include/wx/imaglist.h b/Externals/wxWidgets3/include/wx/imaglist.h index 2d501d93a4..9e5719a145 100644 --- a/Externals/wxWidgets3/include/wx/imaglist.h +++ b/Externals/wxWidgets3/include/wx/imaglist.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: imaglist.h 63553 2010-02-25 00:03:53Z VZ $ +// RCS-ID: $Id: imaglist.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -42,7 +42,7 @@ enum #define wxIMAGELIST_DRAW_SELECTED 0x0004 #define wxIMAGELIST_DRAW_FOCUSED 0x0008 -#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXPALMOS__) +#if defined(__WXMSW__) || defined(__WXMAC__) #define wxHAS_NATIVE_IMAGELIST #endif @@ -52,8 +52,6 @@ enum #include "wx/msw/imaglist.h" #elif defined(__WXMAC__) #include "wx/osx/imaglist.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/imaglist.h" #endif #endif // _WX_IMAGLIST_H_BASE_ diff --git a/Externals/wxWidgets3/include/wx/imagtiff.h b/Externals/wxWidgets3/include/wx/imagtiff.h index ad91d3d5d3..e9b00aa989 100644 --- a/Externals/wxWidgets3/include/wx/imagtiff.h +++ b/Externals/wxWidgets3/include/wx/imagtiff.h @@ -2,7 +2,7 @@ // Name: wx/imagtiff.h // Purpose: wxImage TIFF handler // Author: Robert Roebling -// RCS-ID: $Id: imagtiff.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: imagtiff.h 68785 2011-08-19 03:47:40Z DS $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,10 +22,17 @@ #include "wx/versioninfo.h" // defines for wxImage::SetOption -#define wxIMAGE_OPTION_BITSPERSAMPLE wxString(wxT("BitsPerSample")) -#define wxIMAGE_OPTION_SAMPLESPERPIXEL wxString(wxT("SamplesPerPixel")) -#define wxIMAGE_OPTION_COMPRESSION wxString(wxT("Compression")) -#define wxIMAGE_OPTION_IMAGEDESCRIPTOR wxString(wxT("ImageDescriptor")) +#define wxIMAGE_OPTION_TIFF_BITSPERSAMPLE wxString(wxT("BitsPerSample")) +#define wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL wxString(wxT("SamplesPerPixel")) +#define wxIMAGE_OPTION_TIFF_COMPRESSION wxString(wxT("Compression")) +#define wxIMAGE_OPTION_TIFF_PHOTOMETRIC wxString(wxT("Photometric")) +#define wxIMAGE_OPTION_TIFF_IMAGEDESCRIPTOR wxString(wxT("ImageDescriptor")) + +// for backwards compatibility +#define wxIMAGE_OPTION_BITSPERSAMPLE wxIMAGE_OPTION_TIFF_BITSPERSAMPLE +#define wxIMAGE_OPTION_SAMPLESPERPIXEL wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL +#define wxIMAGE_OPTION_COMPRESSION wxIMAGE_OPTION_TIFF_COMPRESSION +#define wxIMAGE_OPTION_IMAGEDESCRIPTOR wxIMAGE_OPTION_TIFF_IMAGEDESCRIPTOR class WXDLLIMPEXP_CORE wxTIFFHandler: public wxImageHandler { diff --git a/Externals/wxWidgets3/include/wx/intl.h b/Externals/wxWidgets3/include/wx/intl.h index be563dd495..a2785fd97f 100644 --- a/Externals/wxWidgets3/include/wx/intl.h +++ b/Externals/wxWidgets3/include/wx/intl.h @@ -5,7 +5,7 @@ // Modified by: Michael N. Filippov // (2003/09/30 - plural forms support) // Created: 29/01/98 -// RCS-ID: $Id: intl.h 64215 2010-05-05 12:27:07Z VS $ +// RCS-ID: $Id: intl.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -60,17 +60,17 @@ struct WXDLLIMPEXP_BASE wxLanguageInfo { int Language; // wxLanguage id wxString CanonicalName; // Canonical name, e.g. fr_FR -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wxUint32 WinLang, // Win32 language identifiers WinSublang; -#endif // __WXMSW__ +#endif // __WINDOWS__ wxString Description; // human-readable name of the language wxLayoutDirection LayoutDirection; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // return the LCID corresponding to this language wxUint32 GetLCID() const; -#endif // __WXMSW__ +#endif // __WINDOWS__ // return the locale name corresponding to this language usable with // setlocale() on the current system @@ -79,9 +79,9 @@ struct WXDLLIMPEXP_BASE wxLanguageInfo // for Unix systems GetLocaleName() is trivial so implement it inline here, for // MSW it's implemented in intl.cpp -#ifndef __WXMSW__ +#ifndef __WINDOWS__ inline wxString wxLanguageInfo::GetLocaleName() const { return CanonicalName; } -#endif // !__WXMSW__ +#endif // !__WINDOWS__ // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/iosfwrap.h b/Externals/wxWidgets3/include/wx/iosfwrap.h index a4df4bfb9b..020d45882d 100644 --- a/Externals/wxWidgets3/include/wx/iosfwrap.h +++ b/Externals/wxWidgets3/include/wx/iosfwrap.h @@ -4,7 +4,7 @@ // Author: Jan van Dijk // Modified by: // Created: 18.12.2002 -// RCS-ID: $Id: iosfwrap.h 33555 2005-04-12 21:06:03Z ABX $ +// RCS-ID: $Id: iosfwrap.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -18,7 +18,7 @@ # include #endif -#ifdef __WXMSW__ +#ifdef __WINDOWS__ # include "wx/msw/winundef.h" #endif diff --git a/Externals/wxWidgets3/include/wx/ioswrap.h b/Externals/wxWidgets3/include/wx/ioswrap.h index 25932450fd..50ba04a1dc 100644 --- a/Externals/wxWidgets3/include/wx/ioswrap.h +++ b/Externals/wxWidgets3/include/wx/ioswrap.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 03.02.99 -// RCS-ID: $Id: ioswrap.h 47644 2007-07-22 09:20:42Z VS $ +// RCS-ID: $Id: ioswrap.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -21,7 +21,7 @@ #include "wx/afterstd.h" -#ifdef __WXMSW__ +#ifdef __WINDOWS__ # include "wx/msw/winundef.h" #endif diff --git a/Externals/wxWidgets3/include/wx/ipc.h b/Externals/wxWidgets3/include/wx/ipc.h index 34d056dde4..14650aea1d 100644 --- a/Externals/wxWidgets3/include/wx/ipc.h +++ b/Externals/wxWidgets3/include/wx/ipc.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 15.04.02 -// RCS-ID: $Id: ipc.h 35698 2005-09-25 20:49:40Z MW $ +// RCS-ID: $Id: ipc.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2002 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -16,7 +16,7 @@ // 0, or if the platform is not Windows, use TCP/IP for IPC implementation #if !defined(wxUSE_DDE_FOR_IPC) - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #define wxUSE_DDE_FOR_IPC 1 #else #define wxUSE_DDE_FOR_IPC 0 diff --git a/Externals/wxWidgets3/include/wx/itemid.h b/Externals/wxWidgets3/include/wx/itemid.h new file mode 100644 index 0000000000..ff867ef3ec --- /dev/null +++ b/Externals/wxWidgets3/include/wx/itemid.h @@ -0,0 +1,62 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/itemid.h +// Purpose: wxItemId class declaration. +// Author: Vadim Zeitlin +// Created: 2011-08-17 +// RCS-ID: $Id: itemid.h 68916 2011-08-27 14:11:03Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_ITEMID_H_ +#define _WX_ITEMID_H_ + +// ---------------------------------------------------------------------------- +// wxItemId: an opaque item identifier used with wx{Tree,TreeList,DataView}Ctrl. +// ---------------------------------------------------------------------------- + +// The template argument T is typically a pointer to some opaque type. While +// wxTreeItemId and wxDataViewItem use a pointer to void, this is dangerous and +// not recommended for the new item id classes. +template +class wxItemId +{ +public: + typedef T Type; + + // This ctor is implicit which is fine for non-void* types, but if you use + // this class with void* you're strongly advised to make the derived class + // ctor explicit as implicitly converting from any pointer is simply too + // dangerous. + wxItemId(Type item = NULL) : m_pItem(item) { } + + // Default copy ctor, assignment operator and dtor are ok. + + bool IsOk() const { return m_pItem != NULL; } + Type GetID() const { return m_pItem; } + operator const Type() const { return m_pItem; } + + // This is used for implementation purposes only. + Type operator->() const { return m_pItem; } + + void Unset() { m_pItem = NULL; } + + // This field is public *only* for compatibility with the old wxTreeItemId + // implementation and must not be used in any new code. +//private: + Type m_pItem; +}; + +template +bool operator==(const wxItemId& left, const wxItemId& right) +{ + return left.GetID() == right.GetID(); +} + +template +bool operator!=(const wxItemId& left, const wxItemId& right) +{ + return !(left == right); +} + +#endif // _WX_ITEMID_H_ diff --git a/Externals/wxWidgets3/include/wx/joystick.h b/Externals/wxWidgets3/include/wx/joystick.h index 5a42af2a0f..ba36f5e956 100644 --- a/Externals/wxWidgets3/include/wx/joystick.h +++ b/Externals/wxWidgets3/include/wx/joystick.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) wxWidgets Team -// RCS-ID: $Id: joystick.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: joystick.h 70808 2012-03-04 20:31:42Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,7 +16,7 @@ #if wxUSE_JOYSTICK -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/joystick.h" #elif defined(__WXMOTIF__) #include "wx/unix/joystick.h" diff --git a/Externals/wxWidgets3/include/wx/kbdstate.h b/Externals/wxWidgets3/include/wx/kbdstate.h index 851ec3c013..d3f927f77a 100644 --- a/Externals/wxWidgets3/include/wx/kbdstate.h +++ b/Externals/wxWidgets3/include/wx/kbdstate.h @@ -3,7 +3,7 @@ // Purpose: Declaration of wxKeyboardState class // Author: Vadim Zeitlin // Created: 2008-09-19 -// RCS-ID: $Id: kbdstate.h 55747 2008-09-19 23:59:39Z VZ $ +// RCS-ID: $Id: kbdstate.h 70579 2012-02-13 15:23:33Z SC $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -28,6 +28,9 @@ public: m_shiftDown(shiftDown), m_altDown(altDown), m_metaDown(metaDown) +#ifdef __WXOSX__ + ,m_rawControlDown(false) +#endif { } @@ -45,6 +48,9 @@ public: return (m_controlDown ? wxMOD_CONTROL : 0) | (m_shiftDown ? wxMOD_SHIFT : 0) | (m_metaDown ? wxMOD_META : 0) | +#ifdef __WXOSX__ + (m_rawControlDown ? wxMOD_RAW_CONTROL : 0) | +#endif (m_altDown ? wxMOD_ALT : 0); } @@ -53,6 +59,14 @@ public: // accessors for individual modifier keys bool ControlDown() const { return m_controlDown; } + bool RawControlDown() const + { +#ifdef __WXOSX__ + return m_rawControlDown; +#else + return m_controlDown; +#endif + } bool ShiftDown() const { return m_shiftDown; } bool MetaDown() const { return m_metaDown; } bool AltDown() const { return m_altDown; } @@ -64,17 +78,21 @@ public: // purpose under Mac) bool CmdDown() const { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else return ControlDown(); -#endif } // these functions are mostly used by wxWidgets itself // --------------------------------------------------- void SetControlDown(bool down) { m_controlDown = down; } + void SetRawControlDown(bool down) + { +#ifdef __WXOSX__ + m_rawControlDown = down; +#else + m_controlDown = down; +#endif + } void SetShiftDown(bool down) { m_shiftDown = down; } void SetAltDown(bool down) { m_altDown = down; } void SetMetaDown(bool down) { m_metaDown = down; } @@ -84,10 +102,13 @@ public: // members of wxKeyEvent directly, these variables are public, however you // should not use them in any new code, please use the accessors instead public: - bool m_controlDown : 1; - bool m_shiftDown : 1; - bool m_altDown : 1; - bool m_metaDown : 1; + bool m_controlDown : 1; + bool m_shiftDown : 1; + bool m_altDown : 1; + bool m_metaDown : 1; +#ifdef __WXOSX__ + bool m_rawControlDown : 1; +#endif }; #endif // _WX_KBDSTATE_H_ diff --git a/Externals/wxWidgets3/include/wx/list.h b/Externals/wxWidgets3/include/wx/list.h index cceaa09d23..a74a8fc7b8 100644 --- a/Externals/wxWidgets3/include/wx/list.h +++ b/Externals/wxWidgets3/include/wx/list.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: VZ at 16/11/98: WX_DECLARE_LIST() and typesafe lists added // Created: 29/01/98 -// RCS-ID: $Id: list.h 66829 2011-02-02 13:49:44Z SC $ +// RCS-ID: $Id: list.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 1998 Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -33,7 +33,7 @@ #include "wx/object.h" #include "wx/string.h" -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include "wx/beforestd.h" #include #include @@ -48,7 +48,7 @@ class WXDLLIMPEXP_FWD_BASE wxObjectListNode; typedef wxObjectListNode wxNode; -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #define wxLIST_COMPATIBILITY @@ -346,7 +346,7 @@ inline const void *wxListCastElementToVoidPtr(const wxString& str) #define WX_DEFINE_EXPORTED_LIST(name) WX_DEFINE_LIST(name) #define WX_DEFINE_USER_EXPORTED_LIST(name) WX_DEFINE_LIST(name) -#else // if !wxUSE_STL +#else // if !wxUSE_STD_CONTAINERS // undef it to get rid of old, deprecated functions @@ -1148,7 +1148,7 @@ private: #define WX_DEFINE_EXPORTED_LIST(name) WX_DEFINE_LIST(name) #define WX_DEFINE_USER_EXPORTED_LIST(name) WX_DEFINE_LIST(name) -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS // ============================================================================ // now we can define classes 100% compatible with the old ones @@ -1162,7 +1162,7 @@ private: // inline compatibility functions -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS // ---------------------------------------------------------------------------- // wxNodeBase deprecated methods @@ -1197,26 +1197,26 @@ WX_DECLARE_LIST_2(wxObject, wxObjectList, wxObjectListNode, class WXDLLIMPEXP_BASE wxList : public wxObjectList { public: -#if defined(wxWARN_COMPAT_LIST_USE) && !wxUSE_STL - wxList() { }; +#if defined(wxWARN_COMPAT_LIST_USE) && !wxUSE_STD_CONTAINERS + wxList() { } wxDEPRECATED( wxList(int key_type) ); -#elif !wxUSE_STL +#elif !wxUSE_STD_CONTAINERS wxList(int key_type = wxKEY_NONE); #endif // this destructor is required for Darwin ~wxList() { } -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS wxList& operator=(const wxList& list) { if (&list != this) Assign(list); return *this; } // compatibility methods void Sort(wxSortCompareFunction compfunc) { wxListBase::Sort(compfunc); } -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS }; -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS // ----------------------------------------------------------------------------- // wxStringList class for compatibility with the old code @@ -1268,7 +1268,7 @@ private: void DoCopy(const wxStringList&); // common part of copy ctor and operator= }; -#else // if wxUSE_STL +#else // if wxUSE_STD_CONTAINERS WX_DECLARE_LIST_XO(wxString, wxStringListBase, class WXDLLIMPEXP_BASE); @@ -1291,7 +1291,7 @@ public: { push_front(s); return GetFirst(); } }; -#endif // wxUSE_STL +#endif // wxUSE_STD_CONTAINERS #endif // wxLIST_COMPATIBILITY diff --git a/Externals/wxWidgets3/include/wx/listbase.h b/Externals/wxWidgets3/include/wx/listbase.h index 618c5dea7e..b28b9f64a3 100644 --- a/Externals/wxWidgets3/include/wx/listbase.h +++ b/Externals/wxWidgets3/include/wx/listbase.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 04.12.99 -// RCS-ID: $Id: listbase.h 60732 2009-05-24 18:04:37Z VZ $ +// RCS-ID: $Id: listbase.h 70286 2012-01-07 16:11:10Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -16,6 +16,9 @@ #include "wx/font.h" #include "wx/gdicmn.h" #include "wx/event.h" +#include "wx/control.h" + +class WXDLLIMPEXP_FWD_CORE wxImageList; // ---------------------------------------------------------------------------- // types @@ -23,7 +26,7 @@ // type of compare function for wxListCtrl sort operation typedef -int (wxCALLBACK *wxListCtrlCompare)(long item1, long item2, wxIntPtr sortData); +int (wxCALLBACK *wxListCtrlCompare)(wxIntPtr item1, wxIntPtr item2, wxIntPtr sortData); // ---------------------------------------------------------------------------- // wxListCtrl constants @@ -183,9 +186,9 @@ public: void SetFont(const wxFont& font) { m_font = font; } // accessors - bool HasTextColour() const { return m_colText.Ok(); } - bool HasBackgroundColour() const { return m_colBack.Ok(); } - bool HasFont() const { return m_font.Ok(); } + bool HasTextColour() const { return m_colText.IsOk(); } + bool HasBackgroundColour() const { return m_colBack.IsOk(); } + bool HasFont() const { return m_font.IsOk(); } const wxColour& GetTextColour() const { return m_colText; } const wxColour& GetBackgroundColour() const { return m_colBack; } @@ -354,7 +357,7 @@ protected: void Init() { m_mask = 0; - m_itemId = 0; + m_itemId = -1; m_col = 0; m_state = 0; m_stateMask = 0; @@ -371,6 +374,94 @@ private: DECLARE_DYNAMIC_CLASS(wxListItem) }; +// ---------------------------------------------------------------------------- +// wxListCtrlBase: the base class for the main control itself. +// ---------------------------------------------------------------------------- + +// Unlike other base classes, this class doesn't currently define the API of +// the real control class but is just used for implementation convenience. We +// should define the public class functions as pure virtual here in the future +// however. +class WXDLLIMPEXP_CORE wxListCtrlBase : public wxControl +{ +public: + wxListCtrlBase() { } + + // Image list methods. + // ------------------- + + // Associate the given (possibly NULL to indicate that no images will be + // used) image list with the control. The ownership of the image list + // passes to the control, i.e. it will be deleted when the control itself + // is destroyed. + // + // The value of "which" must be one of wxIMAGE_LIST_{NORMAL,SMALL,STATE}. + virtual void AssignImageList(wxImageList* imageList, int which) = 0; + + // Same as AssignImageList() but the control does not delete the image list + // so it can be shared among several controls. + virtual void SetImageList(wxImageList* imageList, int which) = 0; + + // Return the currently used image list, may be NULL. + virtual wxImageList* GetImageList(int which) const = 0; + + + // Column-related methods. + // ----------------------- + + // All these methods can only be used in report view mode. + + // Appends a new column. + // + // Returns the index of the newly inserted column or -1 on error. + long AppendColumn(const wxString& heading, + int format = wxLIST_FORMAT_LEFT, + int width = -1); + + // Add a new column to the control at the position "col". + // + // Returns the index of the newly inserted column or -1 on error. + long InsertColumn(long col, const wxListItem& info); + long InsertColumn(long col, + const wxString& heading, + int format = wxLIST_FORMAT_LEFT, + int width = wxLIST_AUTOSIZE); + + // Delete the given or all columns. + virtual bool DeleteColumn(int col) = 0; + virtual bool DeleteAllColumns() = 0; + + // Return the current number of columns. + virtual int GetColumnCount() const = 0; + + // Get or update information about the given column. Set item mask to + // indicate the fields to retrieve or change. + // + // Returns false on error, e.g. if the column index is invalid. + virtual bool GetColumn(int col, wxListItem& item) const = 0; + virtual bool SetColumn(int col, const wxListItem& item) = 0; + + // Convenient wrappers for the above methods which get or update just the + // column width. + virtual int GetColumnWidth(int col) const = 0; + virtual bool SetColumnWidth(int col, int width) = 0; + + + // Other miscellaneous accessors. + // ------------------------------ + + // Convenient functions for testing the list control mode: + bool InReportView() const { return HasFlag(wxLC_REPORT); } + bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); } + +protected: + // Real implementations methods to which our public forwards. + virtual long DoInsertColumn(long col, const wxListItem& info) = 0; + + // Overridden methods of the base class. + virtual wxSize DoGetBestClientSize() const; +}; + // ---------------------------------------------------------------------------- // wxListEvent - the event class for the wxListCtrl notifications // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/listbook.h b/Externals/wxWidgets3/include/wx/listbook.h index 02f4cd4634..f7e4bfc389 100644 --- a/Externals/wxWidgets3/include/wx/listbook.h +++ b/Externals/wxWidgets3/include/wx/listbook.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.08.03 -// RCS-ID: $Id: listbook.h 65931 2010-10-27 16:54:36Z VZ $ +// RCS-ID: $Id: listbook.h 68810 2011-08-21 14:08:49Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -69,7 +69,7 @@ public: wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = -1); + int imageId = NO_IMAGE); virtual int SetSelection(size_t n) { return DoSetSelection(n, SetSelection_SendEvent); } virtual int ChangeSelection(size_t n) { return DoSetSelection(n); } virtual int HitTest(const wxPoint& pt, long *flags = NULL) const; diff --git a/Externals/wxWidgets3/include/wx/listctrl.h b/Externals/wxWidgets3/include/wx/listctrl.h index 704b4ef81f..5f17cfde7d 100644 --- a/Externals/wxWidgets3/include/wx/listctrl.h +++ b/Externals/wxWidgets3/include/wx/listctrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 04.12.99 -// RCS-ID: $Id: listctrl.h 58182 2009-01-17 13:38:04Z SC $ +// RCS-ID: $Id: listctrl.h 70808 2012-03-04 20:31:42Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -28,7 +28,7 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxListCtrlNameStr[]; // include the wxListCtrl class declaration // ---------------------------------------------------------------------------- -#if defined(__WIN32__) && !defined(__WXUNIVERSAL__) +#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) #include "wx/msw/listctrl.h" #elif defined(__WXMAC__) && !defined(__WXUNIVERSAL__) && wxOSX_USE_CARBON #include "wx/osx/listctrl.h" diff --git a/Externals/wxWidgets3/include/wx/listimpl.cpp b/Externals/wxWidgets3/include/wx/listimpl.cpp index e9ebeae038..771b41dcc2 100644 --- a/Externals/wxWidgets3/include/wx/listimpl.cpp +++ b/Externals/wxWidgets3/include/wx/listimpl.cpp @@ -4,12 +4,12 @@ // Author: Vadim Zeitlin // Modified by: // Created: 16/11/98 -// RCS-ID: $Id: listimpl.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: listimpl.cpp 67343 2011-03-30 14:16:04Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #undef WX_DEFINE_LIST #define WX_DEFINE_LIST(name) \ @@ -19,7 +19,7 @@ } \ name::BaseListType name::EmptyList; -#else // !wxUSE_STL +#else // !wxUSE_STD_CONTAINERS #undef WX_DEFINE_LIST_2 #define WX_DEFINE_LIST_2(T, name) \ void wx##name##Node::DeleteData() \ @@ -32,5 +32,5 @@ #undef WX_DEFINE_LIST #define WX_DEFINE_LIST(name) WX_DEFINE_LIST_2(_WX_LIST_ITEM_TYPE_##name, name) -#endif // wxUSE_STL/!wxUSE_STL +#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS diff --git a/Externals/wxWidgets3/include/wx/log.h b/Externals/wxWidgets3/include/wx/log.h index 1b1ac53c5e..8f0679b243 100644 --- a/Externals/wxWidgets3/include/wx/log.h +++ b/Externals/wxWidgets3/include/wx/log.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: log.h 66966 2011-02-19 12:32:59Z VZ $ +// RCS-ID: $Id: log.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -29,7 +29,7 @@ typedef unsigned long wxLogLevel; #define wxTraceResAlloc 0x0004 // trace GDI resource allocation #define wxTraceRefCount 0x0008 // trace various ref counting operations - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #define wxTraceOleCalls 0x0100 // OLE interface calls #endif @@ -57,11 +57,9 @@ class WXDLLIMPEXP_FWD_BASE wxObject; #include "wx/arrstr.h" -#ifndef __WXPALMOS5__ #ifndef __WXWINCE__ #include // for time_t #endif -#endif // ! __WXPALMOS5__ #include "wx/dynarray.h" #include "wx/hashmap.h" @@ -130,7 +128,7 @@ enum wxLogLevelValues #define wxTRACE_ResAlloc wxT("resalloc") // trace GDI resource allocation #define wxTRACE_RefCount wxT("refcount") // trace various ref counting operations -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #define wxTRACE_OleCalls wxT("ole") // OLE interface calls #endif @@ -309,6 +307,34 @@ struct wxLogRecord wxLogRecordInfo info; }; +// ---------------------------------------------------------------------------- +// Derive from this class to customize format of log messages. +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_BASE wxLogFormatter +{ +public: + // Default constructor. + wxLogFormatter() { } + + // Trivial but virtual destructor for the base class. + virtual ~wxLogFormatter() { } + + + // Override this method to implement custom formatting of the given log + // record. The default implementation simply prepends a level-dependent + // prefix to the message and optionally adds a time stamp. + virtual wxString Format(wxLogLevel level, + const wxString& msg, + const wxLogRecordInfo& info) const; + +protected: + // Override this method to change just the time stamp formatting. It is + // called by default Format() implementation. + virtual wxString FormatTime(time_t t) const; +}; + + // ---------------------------------------------------------------------------- // derive from this class to redirect (or suppress, or ...) log messages // normally, only a single instance of this class exists but it's not enforced @@ -318,7 +344,7 @@ class WXDLLIMPEXP_BASE wxLog { public: // ctor - wxLog() { } + wxLog() : m_formatter(new wxLogFormatter) { } // make dtor virtual for all derived classes virtual ~wxLog(); @@ -455,6 +481,26 @@ public: // call AddTraceMask() concurrently static const wxArrayString& GetTraceMasks(); + // is this trace mask in the list? + static bool IsAllowedTraceMask(const wxString& mask); + + + // log formatting + // ----------------- + + // Change wxLogFormatter object used by wxLog to format the log messages. + // + // wxLog takes ownership of the pointer passed in but the caller is + // responsible for deleting the returned pointer. + wxLogFormatter* SetFormatter(wxLogFormatter* formatter); + + + // All the time stamp related functions below only work when the default + // wxLogFormatter is being used. Defining a custom formatter overrides them + // as it could use its own time stamp format or format messages without + // using time stamp at all. + + // sets the time stamp string format: this is used as strftime() format // string for the log targets which add time stamps to the messages; set // it to empty string to disable time stamping completely. @@ -464,9 +510,6 @@ public: static void DisableTimestamp() { SetTimestamp(wxEmptyString); } - // is this trace mask in the list? - static bool IsAllowedTraceMask(const wxString& mask); - // get the current timestamp format string (maybe empty) static const wxString& GetTimestamp() { return ms_timestamp; } @@ -475,9 +518,10 @@ public: // helpers: all functions in this section are mostly for internal use only, // don't call them from your code even if they are not formally deprecated - // put the time stamp into the string if ms_timestamp != NULL (don't - // change it otherwise) + // put the time stamp into the string if ms_timestamp is not empty (don't + // change it otherwise); the first overload uses the current time. static void TimeStamp(wxString *str); + static void TimeStamp(wxString *str, time_t t); // these methods should only be called from derived classes DoLogRecord(), // DoLogTextAtLevel() and DoLogText() implementations respectively and @@ -621,6 +665,12 @@ private: const wxLogRecordInfo& info); + // variables + // ---------------- + + wxLogFormatter *m_formatter; // We own this pointer. + + // static variables // ---------------- diff --git a/Externals/wxWidgets3/include/wx/longlong.h b/Externals/wxWidgets3/include/wx/longlong.h index bcc4575f4e..e190ec804b 100644 --- a/Externals/wxWidgets3/include/wx/longlong.h +++ b/Externals/wxWidgets3/include/wx/longlong.h @@ -5,7 +5,7 @@ // Author: Jeffrey C. Ollie , Vadim Zeitlin // Modified by: // Created: 10.02.99 -// RCS-ID: $Id: longlong.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: longlong.h 68472 2011-07-31 13:25:33Z VS $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -404,15 +404,20 @@ public: // convert to ulong with range checking in debug mode (only!) unsigned long ToULong() const { - wxASSERT_MSG( m_ll <= LONG_MAX, + wxASSERT_MSG( m_ll <= ULONG_MAX, wxT("wxULongLong to long conversion loss of precision") ); return wx_truncate_cast(unsigned long, m_ll); } // convert to double -#ifdef _MSC_VER - double ToDouble() const { return wx_truncate_cast(double, (__int64) m_ll); } + // + // For some completely obscure reasons compiling the cast below with + // VC6 in DLL builds only (!) results in "error C2520: conversion from + // unsigned __int64 to double not implemented, use signed __int64" so + // we must use a different version for that compiler. +#ifdef __VISUALC6__ + double ToDouble() const; #else double ToDouble() const { return wx_truncate_cast(double, m_ll); } #endif @@ -1075,6 +1080,66 @@ WXDLLIMPEXP_BASE class wxTextInputStream &operator>>(class wxTextInputStream &st #endif +// ---------------------------------------------------------------------------- +// Specialize numeric_limits<> for our long long wrapper classes. +// ---------------------------------------------------------------------------- + +#if wxUSE_LONGLONG_NATIVE + +// VC6 is known to not have __int64 specializations of numeric_limits<> in its +// anyhow so don't bother including it, especially as it results in +// tons of warnings because the standard header itself uses obsolete template +// specialization syntax. +#ifndef __VISUALC6__ + +#include + +namespace std +{ + +#ifdef __clang__ + // libstdc++ (used by Clang) uses struct for numeric_limits; unlike gcc, clang + // warns about this + template<> struct numeric_limits : public numeric_limits {}; + template<> struct numeric_limits : public numeric_limits {}; +#else + template<> class numeric_limits : public numeric_limits {}; + template<> class numeric_limits : public numeric_limits {}; +#endif + +} // namespace std + +#endif // !VC6 + +#endif // wxUSE_LONGLONG_NATIVE + +// ---------------------------------------------------------------------------- +// Specialize wxArgNormalizer to allow using wxLongLong directly with wx pseudo +// vararg functions. +// ---------------------------------------------------------------------------- + +// Notice that this must be done here and not in wx/strvararg.h itself because +// we can't include wx/longlong.h from there as this header itself includes +// wx/string.h which includes wx/strvararg.h too, so to avoid the circular +// dependencies we can only do it here (or add another header just for this but +// it doesn't seem necessary). +#include "wx/strvararg.h" + +template<> +struct WXDLLIMPEXP_BASE wxArgNormalizer +{ + wxArgNormalizer(wxLongLong value, + const wxFormatString *fmt, unsigned index) + : m_value(value) + { + wxASSERT_ARG_TYPE( fmt, index, wxFormatString::Arg_LongLongInt ); + } + + wxLongLong_t get() const { return m_value.GetValue(); } + + wxLongLong m_value; +}; + #endif // wxUSE_LONGLONG #endif // _WX_LONGLONG_H diff --git a/Externals/wxWidgets3/include/wx/math.h b/Externals/wxWidgets3/include/wx/math.h index a71078a54f..0978a84dcc 100644 --- a/Externals/wxWidgets3/include/wx/math.h +++ b/Externals/wxWidgets3/include/wx/math.h @@ -4,7 +4,7 @@ * Author: John Labenski and others * Modified by: * Created: 02/02/03 -* RCS-ID: $Id: math.h 63194 2010-01-19 22:02:59Z VS $ +* RCS-ID: $Id: math.h 70796 2012-03-04 00:29:31Z VZ $ * Copyright: (c) John Labenski * Licence: wxWindows licence */ @@ -58,8 +58,10 @@ #include #define wxFinite(x) _finite(x) #elif defined(__MINGW64__) - // add more compilers with C99 support here: using C99 isfinite() is - // preferable to using BSD-ish finite() + /* + add more compilers with C99 support here: using C99 isfinite() is + preferable to using BSD-ish finite() + */ #define wxFinite(x) isfinite(x) #elif ( defined(__GNUG__)||defined(__GNUWIN32__)||defined(__DJGPP__)|| \ defined(__SGI_CC__)||defined(__SUNCC__)||defined(__XLC__)|| \ @@ -126,7 +128,7 @@ #endif /* __cplusplus */ -#if defined(__WXMSW__) && !defined(__WXWINCE__) +#if defined(__WINDOWS__) && !defined(__WXWINCE__) #define wxMulDivInt32( a , b , c ) ::MulDiv( a , b , c ) #else #define wxMulDivInt32( a , b , c ) (wxRound((a)*(((wxDouble)b)/((wxDouble)c)))) @@ -144,7 +146,7 @@ #if WXWIN_COMPATIBILITY_2_8 wxDEPRECATED( WXDLLIMPEXP_BASE wxFloat64 ConvertFromIeeeExtended(const wxInt8 *bytes) ); wxDEPRECATED( WXDLLIMPEXP_BASE void ConvertToIeeeExtended(wxFloat64 num, wxInt8 *bytes) ); -#endif // WXWIN_COMPATIBILITY_2_8 +#endif #ifdef __cplusplus } diff --git a/Externals/wxWidgets3/include/wx/mdi.h b/Externals/wxWidgets3/include/wx/mdi.h index 35820a90f9..df6283eb2a 100644 --- a/Externals/wxWidgets3/include/wx/mdi.h +++ b/Externals/wxWidgets3/include/wx/mdi.h @@ -5,7 +5,7 @@ // Vadim Zeitlin (base MDI classes refactoring) // Copyright: (c) 1998 Julian Smart // (c) 2008 Vadim Zeitlin -// RCS-ID: $Id: mdi.h 58457 2009-01-27 14:48:20Z VZ $ +// RCS-ID: $Id: mdi.h 70790 2012-03-04 00:29:03Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -81,7 +81,7 @@ public: #if wxUSE_MENUS // return the pointer to the current window menu or NULL if we don't have // because of wxFRAME_NO_WINDOW_MENU style - wxMenu* GetWindowMenu() const { return m_windowMenu; }; + wxMenu* GetWindowMenu() const { return m_windowMenu; } // use the given menu instead of the default window menu // @@ -176,6 +176,16 @@ public: // level windows too virtual bool IsTopLevel() const { return false; } + // In all ports keyboard navigation must stop at MDI child frame level and + // can't cross its boundary. Indicate this by overriding this function to + // return true. + virtual bool IsTopNavigationDomain() const { return true; } + + // Raising any frame is supposed to show it but wxFrame Raise() + // implementation doesn't work for MDI child frames in most forms so + // forward this to Activate() which serves the same purpose by default. + virtual void Raise() { Activate(); } + protected: wxMDIParentFrame *m_mdiParent; }; diff --git a/Externals/wxWidgets3/include/wx/memory.h b/Externals/wxWidgets3/include/wx/memory.h index 480411d38a..17f1149b7b 100644 --- a/Externals/wxWidgets3/include/wx/memory.h +++ b/Externals/wxWidgets3/include/wx/memory.h @@ -4,7 +4,7 @@ // Author: Arthur Seaton, Julian Smart // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: memory.h 59711 2009-03-21 23:36:37Z VZ $ +// RCS-ID: $Id: memory.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -60,7 +60,7 @@ WXDLLIMPEXP_BASE void wxDebugFree(void * buf, bool isVect = false); // devik 2000-8-29: All new/delete ops are now inline because they can't // be marked as dllexport/dllimport. It then leads to weird bugs when // used on MSW as DLL -#if defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE)) +#if defined(__WINDOWS__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE)) inline void * operator new (size_t size, wxChar * fileName, int lineNum) { return wxDebugAlloc(size, fileName, lineNum, false, false); @@ -108,7 +108,7 @@ void * operator new[] (size_t size, wxChar * fileName, int lineNum); void operator delete[] (void * buf); #endif // wxUSE_ARRAY_MEMORY_OPERATORS -#endif // defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE)) +#endif // defined(__WINDOWS__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE)) // VC++ 6.0 and MWERKS #if ( defined(__VISUALC__) && (__VISUALC__ >= 1200) ) || defined(__MWERKS__) diff --git a/Externals/wxWidgets3/include/wx/menu.h b/Externals/wxWidgets3/include/wx/menu.h index f3ee7c9060..552ca8b286 100644 --- a/Externals/wxWidgets3/include/wx/menu.h +++ b/Externals/wxWidgets3/include/wx/menu.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 26.10.99 -// RCS-ID: $Id: menu.h 66640 2011-01-07 21:51:19Z SC $ +// RCS-ID: $Id: menu.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -580,8 +580,6 @@ protected: #else // !wxUSE_BASE_CLASSES_ONLY #if defined(__WXUNIVERSAL__) #include "wx/univ/menu.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/menu.h" #elif defined(__WXMSW__) #include "wx/msw/menu.h" #elif defined(__WXMOTIF__) diff --git a/Externals/wxWidgets3/include/wx/menuitem.h b/Externals/wxWidgets3/include/wx/menuitem.h index 0e4a99efd9..3c0fdfc41b 100644 --- a/Externals/wxWidgets3/include/wx/menuitem.h +++ b/Externals/wxWidgets3/include/wx/menuitem.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 25.10.99 -// RCS-ID: $Id: menuitem.h 66966 2011-02-19 12:32:59Z VZ $ +// RCS-ID: $Id: menuitem.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 1999 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -189,8 +189,6 @@ inline void wxMenuItemBase::SetText(const wxString& text) { SetItemLabel(text); #else // !wxUSE_BASE_CLASSES_ONLY #if defined(__WXUNIVERSAL__) #include "wx/univ/menuitem.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/menuitem.h" #elif defined(__WXMSW__) #include "wx/msw/menuitem.h" #elif defined(__WXMOTIF__) diff --git a/Externals/wxWidgets3/include/wx/meta/movable.h b/Externals/wxWidgets3/include/wx/meta/movable.h index 55877b129d..0217a121c7 100644 --- a/Externals/wxWidgets3/include/wx/meta/movable.h +++ b/Externals/wxWidgets3/include/wx/meta/movable.h @@ -3,7 +3,7 @@ // Purpose: Test if a type is movable using memmove() etc. // Author: Vaclav Slavik // Created: 2008-01-21 -// RCS-ID: $Id: movable.h 64589 2010-06-14 15:12:37Z JMS $ +// RCS-ID: $Id: movable.h 67343 2011-03-30 14:16:04Z VZ $ // Copyright: (c) 2008 Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -38,7 +38,7 @@ struct wxIsMovable // (NB: we don't put this into string.h and choose to include wx/string.h from // here instead so that rarely-used wxIsMovable code isn't included by // everything) -#if !wxUSE_STL && !wxUSE_STRING_POS_CACHE +#if !wxUSE_STD_STRING && !wxUSE_STRING_POS_CACHE WX_DECLARE_TYPE_MOVABLE(wxString) #endif diff --git a/Externals/wxWidgets3/include/wx/metafile.h b/Externals/wxWidgets3/include/wx/metafile.h index 4a501965d2..feaac82e7f 100644 --- a/Externals/wxWidgets3/include/wx/metafile.h +++ b/Externals/wxWidgets3/include/wx/metafile.h @@ -4,7 +4,7 @@ // Author: wxWidgets team // Modified by: // Created: 13.01.00 -// RCS-ID: $Id: metafile.h 54125 2008-06-11 19:17:41Z SC $ +// RCS-ID: $Id: metafile.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -25,11 +25,7 @@ #if defined(__WXMSW__) #if wxUSE_ENH_METAFILE - #if defined(__WXPALMOS__) - #include "wx/palmos/enhmeta.h" - #else - #include "wx/msw/enhmeta.h" - #endif + #include "wx/msw/enhmeta.h" #if wxUSE_WIN_METAFILES_ALWAYS // use normal metafiles as well @@ -45,11 +41,7 @@ #define wxMETAFILE_IS_ENH #endif // wxUSE_WIN_METAFILES_ALWAYS #else // !wxUSE_ENH_METAFILE - #if defined(__WXPALMOS__) - #include "wx/palmos/metafile.h" - #else - #include "wx/msw/metafile.h" - #endif + #include "wx/msw/metafile.h" #endif #elif defined(__WXPM__) #include "wx/os2/metafile.h" diff --git a/Externals/wxWidgets3/include/wx/mimetype.h b/Externals/wxWidgets3/include/wx/mimetype.h index 45eb578d61..a7933cd989 100644 --- a/Externals/wxWidgets3/include/wx/mimetype.h +++ b/Externals/wxWidgets3/include/wx/mimetype.h @@ -5,7 +5,7 @@ // Modified by: // Chris Elliott (biol75@york.ac.uk) 5 Dec 00: write support for Win32 // Created: 23.09.98 -// RCS-ID: $Id: mimetype.h 65707 2010-10-01 13:05:42Z VZ $ +// RCS-ID: $Id: mimetype.h 67384 2011-04-03 20:31:32Z DS $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence (part of wxExtra library) ///////////////////////////////////////////////////////////////////////////// @@ -389,7 +389,7 @@ public: // operations // expand a string in the format of GetOpenCommand (which may contain - // '%s' and '%t' format specificators for the file name and mime type + // '%s' and '%t' format specifiers for the file name and mime type // and %{param} constructions). static wxString ExpandCommand(const wxString& command, const MessageParameters& params); diff --git a/Externals/wxWidgets3/include/wx/minifram.h b/Externals/wxWidgets3/include/wx/minifram.h index d7d66ce25f..8907b69ba4 100644 --- a/Externals/wxWidgets3/include/wx/minifram.h +++ b/Externals/wxWidgets3/include/wx/minifram.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: minifram.h 54125 2008-06-11 19:17:41Z SC $ +// RCS-ID: $Id: minifram.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -16,9 +16,7 @@ #if wxUSE_MINIFRAME -#if defined(__WXPALMOS__) -#include "wx/palmos/minifram.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/minifram.h" #elif defined(__WXMOTIF__) #include "wx/motif/minifram.h" diff --git a/Externals/wxWidgets3/include/wx/mousestate.h b/Externals/wxWidgets3/include/wx/mousestate.h index 719052951c..334b13fb15 100644 --- a/Externals/wxWidgets3/include/wx/mousestate.h +++ b/Externals/wxWidgets3/include/wx/mousestate.h @@ -3,7 +3,7 @@ // Purpose: Declaration of wxMouseState class // Author: Vadim Zeitlin // Created: 2008-09-19 (extracted from wx/utils.h) -// RCS-ID: $Id: mousestate.h 65379 2010-08-22 22:15:07Z VZ $ +// RCS-ID: $Id: mousestate.h 70098 2011-12-23 05:59:59Z PC $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -79,10 +79,6 @@ public: { switch ( but ) { - default: - wxFAIL_MSG(wxT("invalid parameter in wxMouseState::ButtonIsDown")); - // fall through - case wxMOUSE_BTN_ANY: return LeftIsDown() || MiddleIsDown() || RightIsDown() || Aux1IsDown() || Aux2IsDown(); @@ -101,6 +97,15 @@ public: case wxMOUSE_BTN_AUX2: return Aux2IsDown(); + + case wxMOUSE_BTN_NONE: + case wxMOUSE_BTN_MAX: + wxFAIL_MSG(wxS("invalid parameter")); + return false; + + default: + wxFAIL_MSG(wxS("unknown parameter")); + return false; } } @@ -123,7 +128,7 @@ public: // version of wxMouseState but their names are confusing as wxMouseEvent // has methods with the same names which do something quite different so // don't use them any more -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 wxDEPRECATED_INLINE(bool LeftDown() const, return LeftIsDown(); ) wxDEPRECATED_INLINE(bool MiddleDown() const, return MiddleIsDown(); ) wxDEPRECATED_INLINE(bool RightDown() const, return RightIsDown(); ) diff --git a/Externals/wxWidgets3/include/wx/msgdlg.h b/Externals/wxWidgets3/include/wx/msgdlg.h index be95fbc5e9..6da9e0cd7f 100644 --- a/Externals/wxWidgets3/include/wx/msgdlg.h +++ b/Externals/wxWidgets3/include/wx/msgdlg.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: -// RCS-ID: $Id: msgdlg.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: msgdlg.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -177,10 +177,16 @@ public: return true; } + virtual bool SetHelpLabel(const ButtonLabel& help) + { + DoSetCustomLabel(m_help, help); + return true; + } + // test if any custom labels were set bool HasCustomLabels() const { - return !(m_ok.empty() && m_cancel.empty() && + return !(m_ok.empty() && m_cancel.empty() && m_help.empty() && m_yes.empty() && m_no.empty()); } @@ -195,6 +201,8 @@ public: { return m_ok.empty() ? GetDefaultOKLabel() : m_ok; } wxString GetCancelLabel() const { return m_cancel.empty() ? GetDefaultCancelLabel() : m_cancel; } + wxString GetHelpLabel() const + { return m_help.empty() ? GetDefaultHelpLabel() : m_help; } // based on message dialog style, returns exactly one of: wxICON_NONE, // wxICON_ERROR, wxICON_WARNING, wxICON_QUESTION, wxICON_INFORMATION @@ -250,6 +258,7 @@ protected: const wxString& GetCustomYesLabel() const { return m_yes; } const wxString& GetCustomNoLabel() const { return m_no; } const wxString& GetCustomOKLabel() const { return m_ok; } + const wxString& GetCustomHelpLabel() const { return m_help; } const wxString& GetCustomCancelLabel() const { return m_cancel; } private: @@ -259,13 +268,15 @@ private: virtual wxString GetDefaultNoLabel() const { return wxGetTranslation("No"); } virtual wxString GetDefaultOKLabel() const { return wxGetTranslation("OK"); } virtual wxString GetDefaultCancelLabel() const { return wxGetTranslation("Cancel"); } + virtual wxString GetDefaultHelpLabel() const { return wxGetTranslation("Help"); } // labels for the buttons, initially empty meaning that the defaults should // be used, use GetYes/No/OK/CancelLabel() to access them wxString m_yes, m_no, m_ok, - m_cancel; + m_cancel, + m_help; wxDECLARE_NO_COPY_CLASS(wxMessageDialogBase); }; @@ -279,8 +290,6 @@ private: #define wxMessageDialog wxGenericMessageDialog #elif defined(__WXCOCOA__) #include "wx/cocoa/msgdlg.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/msgdlg.h" #elif defined(__WXMSW__) #include "wx/msw/msgdlg.h" #elif defined(__WXMOTIF__) diff --git a/Externals/wxWidgets3/include/wx/msw/anybutton.h b/Externals/wxWidgets3/include/wx/msw/anybutton.h new file mode 100644 index 0000000000..cda386e798 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/anybutton.h @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/msw/anybutton.h +// Purpose: wxAnyButton class +// Author: Julian Smart +// Created: 1997-02-01 (extracted from button.h) +// RCS-ID: $Id: anybutton.h 67931 2011-06-14 13:00:42Z VZ $ +// Copyright: (c) Julian Smart +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MSW_ANYBUTTON_H_ +#define _WX_MSW_ANYBUTTON_H_ + +// ---------------------------------------------------------------------------- +// Common button functionality +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxAnyButton : public wxAnyButtonBase +{ +public: + wxAnyButton() + { + m_imageData = NULL; +#if wxUSE_MARKUP + m_markupText = NULL; +#endif // wxUSE_MARKUP + } + + virtual ~wxAnyButton(); + + // overridden base class methods + virtual void SetLabel(const wxString& label); + virtual bool SetBackgroundColour(const wxColour &colour); + virtual bool SetForegroundColour(const wxColour &colour); + + // implementation from now on + virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); + + virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item); + virtual State GetNormalState() const { return State_Normal; } + + // returns true if the platform should explicitly apply a theme border + virtual bool CanApplyThemeBorder() const { return false; } + +protected: + // usually overridden base class virtuals + virtual wxSize DoGetBestSize() const; + + virtual wxBitmap DoGetBitmap(State which) const; + virtual void DoSetBitmap(const wxBitmap& bitmap, State which); + virtual wxSize DoGetBitmapMargins() const; + virtual void DoSetBitmapMargins(wxCoord x, wxCoord y); + virtual void DoSetBitmapPosition(wxDirection dir); + +#if wxUSE_MARKUP + virtual bool DoSetLabelMarkup(const wxString& markup); +#endif // wxUSE_MARKUP + + // Increases the passed in size to account for the button image. + // + // Should only be called if we do have a button, i.e. if m_imageData is + // non-NULL. + void AdjustForBitmapSize(wxSize& size) const; + + class wxButtonImageData *m_imageData; + +#if wxUSE_MARKUP + class wxMarkupText *m_markupText; +#endif // wxUSE_MARKUP + + // Switches button into owner-drawn mode: this is used if we need to draw + // something not supported by the native control, such as using non default + // colours or a bitmap on pre-XP systems. + void MakeOwnerDrawn(); + bool IsOwnerDrawn() const; + +private: + wxDECLARE_NO_COPY_CLASS(wxAnyButton); +}; + +#endif // _WX_MSW_ANYBUTTON_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/bmpbuttn.h b/Externals/wxWidgets3/include/wx/msw/bmpbuttn.h index d753a82701..894260f4a0 100644 --- a/Externals/wxWidgets3/include/wx/msw/bmpbuttn.h +++ b/Externals/wxWidgets3/include/wx/msw/bmpbuttn.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: bmpbuttn.h 61071 2009-06-15 23:10:16Z VZ $ +// RCS-ID: $Id: bmpbuttn.h 67931 2011-06-14 13:00:42Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,7 +19,7 @@ class WXDLLIMPEXP_CORE wxBitmapButton : public wxBitmapButtonBase { public: - wxBitmapButton() { Init(); } + wxBitmapButton() {} wxBitmapButton(wxWindow *parent, wxWindowID id, @@ -30,8 +30,6 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr) { - Init(); - Create(parent, id, bitmap, pos, size, style, validator, name); } @@ -45,25 +43,6 @@ public: const wxString& name = wxButtonNameStr); protected: - // common part of all ctors - void Init() - { - m_disabledSetByUser = - m_hoverSetByUser = false; - } - - // reimplement some base class virtuals - virtual void DoSetBitmap(const wxBitmap& bitmap, State which); - - // true if disabled bitmap was set by user, false if we created it - // ourselves from the normal one - bool m_disabledSetByUser; - - // true if hover bitmap was set by user, false if it was set from focused - // one - bool m_hoverSetByUser; - - DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS_NO_COPY(wxBitmapButton) }; diff --git a/Externals/wxWidgets3/include/wx/msw/button.h b/Externals/wxWidgets3/include/wx/msw/button.h index 898aeaac99..ac3545b6eb 100644 --- a/Externals/wxWidgets3/include/wx/msw/button.h +++ b/Externals/wxWidgets3/include/wx/msw/button.h @@ -4,13 +4,13 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: button.h 67065 2011-02-27 12:48:26Z VZ $ +// RCS-ID: $Id: button.h 69984 2011-12-11 17:03:56Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_BUTTON_H_ -#define _WX_BUTTON_H_ +#ifndef _WX_MSW_BUTTON_H_ +#define _WX_MSW_BUTTON_H_ // ---------------------------------------------------------------------------- // Pushbutton @@ -47,22 +47,13 @@ public: virtual wxWindow *SetDefault(); - // overridden base class methods - virtual void SetLabel(const wxString& label); - virtual bool SetBackgroundColour(const wxColour &colour); - virtual bool SetForegroundColour(const wxColour &colour); - // implementation from now on virtual void Command(wxCommandEvent& event); virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item); virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - // returns true if the platform should explicitly apply a theme border - virtual bool CanApplyThemeBorder() const { return false; } - protected: // send a notification event, return true if processed bool SendClickEvent(); @@ -74,32 +65,8 @@ protected: // set or unset BS_DEFPUSHBUTTON style static void SetDefaultStyle(wxButton *btn, bool on); - // usually overridden base class virtuals - virtual wxSize DoGetBestSize() const; - virtual bool DoGetAuthNeeded() const; virtual void DoSetAuthNeeded(bool show); - virtual wxBitmap DoGetBitmap(State which) const; - virtual void DoSetBitmap(const wxBitmap& bitmap, State which); - virtual wxSize DoGetBitmapMargins() const; - virtual void DoSetBitmapMargins(wxCoord x, wxCoord y); - virtual void DoSetBitmapPosition(wxDirection dir); - -#if wxUSE_MARKUP - virtual bool DoSetLabelMarkup(const wxString& markup); -#endif // wxUSE_MARKUP - - // Increases the passed in size to account for the button image. - // - // Should only be called if we do have a button, i.e. if m_imageData is - // non-NULL. - void AdjustForBitmapSize(wxSize& size) const; - - class wxButtonImageData *m_imageData; - -#if wxUSE_MARKUP - class wxMarkupText *m_markupText; -#endif // wxUSE_MARKUP // true if the UAC symbol is shown bool m_authNeeded; @@ -107,19 +74,13 @@ protected: private: void Init() { - m_imageData = NULL; -#if wxUSE_MARKUP - m_markupText = NULL; -#endif // wxUSE_MARKUP m_authNeeded = false; } - // Switches button into owner-drawn mode: this is used if we need to draw - // something not supported by the native control, such as using non default - // colours or a bitmap on pre-XP systems. - void MakeOwnerDrawn(); + void OnCharHook(wxKeyEvent& event); + wxDECLARE_EVENT_TABLE(); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxButton); }; -#endif // _WX_BUTTON_H_ +#endif // _WX_MSW_BUTTON_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/chkconf.h b/Externals/wxWidgets3/include/wx/msw/chkconf.h index 7e547f91b0..637155d5f8 100644 --- a/Externals/wxWidgets3/include/wx/msw/chkconf.h +++ b/Externals/wxWidgets3/include/wx/msw/chkconf.h @@ -4,7 +4,7 @@ * Author: Julian Smart * Modified by: * Created: 01/02/97 - * RCS-ID: $Id: chkconf.h 63832 2010-04-02 19:30:41Z VZ $ + * RCS-ID: $Id: chkconf.h 69845 2011-11-27 19:52:13Z VZ $ * Copyright: (c) Julian Smart * Licence: wxWindows licence */ @@ -224,11 +224,6 @@ */ #ifdef __WIN64__ # if wxUSE_STACKWALKER - /* this is not currently supported under Win64, volunteers needed to - make it work */ -# undef wxUSE_STACKWALKER -# define wxUSE_STACKWALKER 0 - # undef wxUSE_CRASHREPORT # define wxUSE_CRASHREPORT 0 # endif @@ -239,7 +234,7 @@ Compiler-specific checks. */ -// Borland +/* Borland */ #ifdef __BORLANDC__ #if __BORLANDC__ < 0x500 @@ -336,6 +331,14 @@ #endif /* !wxUSE_DYNAMIC_LOADER */ #if !wxUSE_DYNLIB_CLASS +# if wxUSE_DC_TRANSFORM_MATRIX +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_DC_TRANSFORM_MATRIX requires wxUSE_DYNLIB_CLASS" +# else +# undef wxUSE_DC_TRANSFORM_MATRIX +# define wxUSE_DC_TRANSFORM_MATRIX 0 +# endif +# endif # if wxUSE_UXTHEME # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_UXTHEME requires wxUSE_DYNLIB_CLASS" @@ -400,6 +403,14 @@ # define wxUSE_MEDIACTRL 0 # endif # endif +# if wxUSE_WEB +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxWebView requires wxActiveXContainer under MSW" +# else +# undef wxUSE_WEB +# define wxUSE_WEB 0 +# endif +# endif #endif /* !wxUSE_ACTIVEX */ #if !wxUSE_THREADS @@ -413,6 +424,18 @@ # endif #endif /* !wxUSE_THREADS */ + +#if !wxUSE_OLE_AUTOMATION +# if wxUSE_WEB +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxWebView requires wxUSE_OLE_AUTOMATION under MSW" +# else +# undef wxUSE_WEB +# define wxUSE_WEB 0 +# endif +# endif +#endif /* !wxUSE_OLE_AUTOMATION */ + #if defined(__WXUNIVERSAL__) && wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW && !wxUSE_POSTSCRIPT # undef wxUSE_POSTSCRIPT # define wxUSE_POSTSCRIPT 1 diff --git a/Externals/wxWidgets3/include/wx/msw/combobox.h b/Externals/wxWidgets3/include/wx/msw/combobox.h index d0b6ee8234..5b7c63d67a 100644 --- a/Externals/wxWidgets3/include/wx/msw/combobox.h +++ b/Externals/wxWidgets3/include/wx/msw/combobox.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: combobox.h 63242 2010-01-24 01:00:45Z VZ $ +// RCS-ID: $Id: combobox.h 68808 2011-08-21 12:06:16Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -75,6 +75,10 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr); + // See wxComboBoxBase discussion of IsEmpty(). + bool IsListEmpty() const { return wxItemContainer::IsEmpty(); } + bool IsTextEmpty() const { return wxTextEntry::IsEmpty(); } + // resolve ambiguities among virtual functions inherited from both base // classes virtual void Clear(); diff --git a/Externals/wxWidgets3/include/wx/msw/custombgwin.h b/Externals/wxWidgets3/include/wx/msw/custombgwin.h new file mode 100644 index 0000000000..fe5481f710 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/custombgwin.h @@ -0,0 +1,58 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/msw/custombgwin.h +// Purpose: wxMSW implementation of wxCustomBackgroundWindow +// Author: Vadim Zeitlin +// Created: 2011-10-10 +// RCS-ID: $Id: custombgwin.h 69378 2011-10-11 17:07:43Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MSW_CUSTOMBGWIN_H_ +#define _WX_MSW_CUSTOMBGWIN_H_ + +#include "wx/bitmap.h" +#include "wx/brush.h" + +// ---------------------------------------------------------------------------- +// wxCustomBackgroundWindow +// ---------------------------------------------------------------------------- + +template +class wxCustomBackgroundWindow : public W, + public wxCustomBackgroundWindowBase +{ +public: + typedef W BaseWindowClass; + + wxCustomBackgroundWindow() { m_backgroundBrush = NULL; } + + virtual ~wxCustomBackgroundWindow() { delete m_backgroundBrush; } + +protected: + virtual void DoSetBackgroundBitmap(const wxBitmap& bmp) + { + delete m_backgroundBrush; + m_backgroundBrush = bmp.IsOk() ? new wxBrush(bmp) : NULL; + + // Our transparent children should use our background if we have it, + // otherwise try to restore m_inheritBgCol to some reasonable value: true + // if we also have non-default background colour or false otherwise. + BaseWindowClass::m_inheritBgCol = bmp.IsOk() + || BaseWindowClass::UseBgCol(); + } + + virtual WXHBRUSH MSWGetCustomBgBrush() + { + if ( m_backgroundBrush ) + return (WXHBRUSH)m_backgroundBrush->GetResourceHandle(); + + return BaseWindowClass::MSWGetCustomBgBrush(); + } + + wxBrush *m_backgroundBrush; + + wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxCustomBackgroundWindow, W); +}; + +#endif // _WX_MSW_CUSTOMBGWIN_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/datectrl.h b/Externals/wxWidgets3/include/wx/msw/datectrl.h index 8a0cabdf9a..7015019f53 100644 --- a/Externals/wxWidgets3/include/wx/msw/datectrl.h +++ b/Externals/wxWidgets3/include/wx/msw/datectrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2005-01-09 -// RCS-ID: $Id: datectrl.h 49893 2007-11-13 12:10:34Z JS $ +// RCS-ID: $Id: datectrl.h 69222 2011-09-29 13:43:02Z VZ $ // Copyright: (c) 2005 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -43,30 +43,21 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxDatePickerCtrlNameStr); - // set/get the date + // Override this one to add date-specific (and time-ignoring) checks. virtual void SetValue(const wxDateTime& dt); virtual wxDateTime GetValue() const; - // set/get the allowed valid range for the dates, if either/both of them - // are invalid, there is no corresponding limit and if neither is set - // GetRange() returns false + // Implement the base class pure virtuals. virtual void SetRange(const wxDateTime& dt1, const wxDateTime& dt2); virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const; + // Override MSW-specific functions used during control creation. virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - // returns true if the platform should explicitly apply a theme border - virtual bool CanApplyThemeBorder() const { return false; } - protected: - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - virtual wxSize DoGetBestSize() const; - - // the date currently shown by the control, may be invalid - wxDateTime m_date; - + virtual wxLocaleInfo MSWGetFormat() const; + virtual bool MSWAllowsNone() const { return HasFlag(wxDP_ALLOWNONE); } + virtual bool MSWOnDateTimeChange(const tagNMDATETIMECHANGE& dtch); DECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl) }; diff --git a/Externals/wxWidgets3/include/wx/msw/datetimectrl.h b/Externals/wxWidgets3/include/wx/msw/datetimectrl.h new file mode 100644 index 0000000000..0c783511c2 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/datetimectrl.h @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/msw/datetimectrl.h +// Purpose: wxDateTimePickerCtrl for Windows. +// Author: Vadim Zeitlin +// Created: 2011-09-22 (extracted from wx/msw/datectrl.h). +// RCS-ID: $Id: datetimectrl.h 69489 2011-10-20 16:45:48Z VZ $ +// Copyright: (c) 2005-2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MSW_DATETIMECTRL_H_ +#define _WX_MSW_DATETIMECTRL_H_ + +#include "wx/intl.h" + +// Forward declare a struct from Platform SDK. +struct tagNMDATETIMECHANGE; + +// ---------------------------------------------------------------------------- +// wxDateTimePickerCtrl +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDateTimePickerCtrl : public wxDateTimePickerCtrlBase +{ +public: + // set/get the date + virtual void SetValue(const wxDateTime& dt); + virtual wxDateTime GetValue() const; + + // returns true if the platform should explicitly apply a theme border + virtual bool CanApplyThemeBorder() const { return false; } + + virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); + +protected: + virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } + virtual wxSize DoGetBestSize() const; + + // Helper for the derived classes Create(): creates a native control with + // the specified attributes. + bool MSWCreateDateTimePicker(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name); + + // Notice that the methods below must be overridden in all native MSW + // classes inheriting from this one but they can't be pure virtual because + // the generic implementations, not needing nor able to implement them, is + // also derived from this class currently. The real problem is, of course, + // this wrong class structure because the generic classes also inherit the + // wrong implementations of Set/GetValue() and DoGetBestSize() but as they + // override these methods anyhow, it does work -- but is definitely ugly + // and need to be changed (but how?) in the future. + + // Override to return the date/time format used by this control. + virtual wxLocaleInfo MSWGetFormat() const /* = 0 */ + { + wxFAIL_MSG( "Unreachable" ); + return wxLOCALE_TIME_FMT; + } + + // Override to indicate whether we can have no date at all. + virtual bool MSWAllowsNone() const /* = 0 */ + { + wxFAIL_MSG( "Unreachable" ); + return false; + } + + // Override to update m_date and send the event when the control contents + // changes, return true if the event was handled. + virtual bool MSWOnDateTimeChange(const tagNMDATETIMECHANGE& dtch) /* = 0 */ + { + wxUnusedVar(dtch); + wxFAIL_MSG( "Unreachable" ); + return false; + } + + + // the date currently shown by the control, may be invalid + wxDateTime m_date; +}; + +#endif // _WX_MSW_DATETIMECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/dc.h b/Externals/wxWidgets3/include/wx/msw/dc.h index e55eb54715..48fa925c24 100644 --- a/Externals/wxWidgets3/include/wx/msw/dc.h +++ b/Externals/wxWidgets3/include/wx/msw/dc.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: dc.h 67063 2011-02-27 12:48:13Z VZ $ +// RCS-ID: $Id: dc.h 67588 2011-04-23 16:03:10Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -87,6 +87,13 @@ public: virtual void SetDeviceOrigin(wxCoord x, wxCoord y); virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); +#if wxUSE_DC_TRANSFORM_MATRIX + virtual bool CanUseTransformMatrix() const; + virtual bool SetTransformMatrix(const wxAffineMatrix2D& matrix); + virtual wxAffineMatrix2D GetTransformMatrix() const; + virtual void ResetTransformMatrix(); +#endif // wxUSE_DC_TRANSFORM_MATRIX + virtual void SetLogicalFunction(wxRasterOperationMode function); // implementation from now on diff --git a/Externals/wxWidgets3/include/wx/msw/debughlp.h b/Externals/wxWidgets3/include/wx/msw/debughlp.h index e4337ce751..f5c34ec2b3 100644 --- a/Externals/wxWidgets3/include/wx/msw/debughlp.h +++ b/Externals/wxWidgets3/include/wx/msw/debughlp.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2005-01-08 (extracted from msw/crashrpt.cpp) -// RCS-ID: $Id: debughlp.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: debughlp.h 69845 2011-11-27 19:52:13Z VZ $ // Copyright: (c) 2003-2005 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -146,9 +146,9 @@ public: PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); typedef BOOL (WINAPI *SymFromAddr_t)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO); - typedef LPVOID (WINAPI *SymFunctionTableAccess_t)(HANDLE, DWORD); - typedef DWORD (WINAPI *SymGetModuleBase_t)(HANDLE, DWORD); - typedef BOOL (WINAPI *SymGetLineFromAddr_t)(HANDLE, DWORD, + typedef LPVOID (WINAPI *SymFunctionTableAccess_t)(HANDLE, DWORD_PTR); + typedef DWORD_PTR (WINAPI *SymGetModuleBase_t)(HANDLE, DWORD_PTR); + typedef BOOL (WINAPI *SymGetLineFromAddr_t)(HANDLE, DWORD_PTR, PDWORD, PIMAGEHLP_LINE); typedef BOOL (WINAPI *SymSetContext_t)(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT); @@ -164,23 +164,44 @@ public: CONST PMINIDUMP_USER_STREAM_INFORMATION, CONST PMINIDUMP_CALLBACK_INFORMATION); - #define wxDO_FOR_ALL_SYM_FUNCS(what) \ - what(SymGetOptions); \ - what(SymSetOptions); \ - what(SymInitialize); \ - what(StackWalk); \ - what(SymFromAddr); \ - what(SymFunctionTableAccess); \ - what(SymGetModuleBase); \ - what(SymGetLineFromAddr); \ - what(SymSetContext); \ - what(SymEnumSymbols); \ - what(SymGetTypeInfo); \ - what(SymCleanup); \ - what(EnumerateLoadedModules); \ - what(MiniDumpWriteDump) + // The macro called by wxDO_FOR_ALL_SYM_FUNCS() below takes 2 arguments: + // the name of the function in the program code, which never has "64" + // suffix, and the name of the function in the DLL which can have "64" + // suffix in some cases. These 2 helper macros call the macro with the + // correct arguments in both cases. + #define wxSYM_CALL(what, name) what(name, name) +#if defined(_M_AMD64) + #define wxSYM_CALL_64(what, name) what(name, name ## 64) - #define wxDECLARE_SYM_FUNCTION(func) static func ## _t func + // Also undo all the "helpful" definitions done by imagehlp.h that map 32 + // bit functions to 64 bit ones, we don't need this as we do it ourselves. + #undef StackWalk + #undef SymFunctionTableAccess + #undef SymGetModuleBase + #undef SymGetLineFromAddr + #undef EnumerateLoadedModules +#else + #define wxSYM_CALL_64(what, name) what(name, name) +#endif + + #define wxDO_FOR_ALL_SYM_FUNCS(what) \ + wxSYM_CALL_64(what, StackWalk); \ + wxSYM_CALL_64(what, SymFunctionTableAccess); \ + wxSYM_CALL_64(what, SymGetModuleBase); \ + wxSYM_CALL_64(what, SymGetLineFromAddr); \ + wxSYM_CALL_64(what, EnumerateLoadedModules); \ + \ + wxSYM_CALL(what, SymGetOptions); \ + wxSYM_CALL(what, SymSetOptions); \ + wxSYM_CALL(what, SymInitialize); \ + wxSYM_CALL(what, SymFromAddr); \ + wxSYM_CALL(what, SymSetContext); \ + wxSYM_CALL(what, SymEnumSymbols); \ + wxSYM_CALL(what, SymGetTypeInfo); \ + wxSYM_CALL(what, SymCleanup); \ + wxSYM_CALL(what, MiniDumpWriteDump) + + #define wxDECLARE_SYM_FUNCTION(func, name) static func ## _t func wxDO_FOR_ALL_SYM_FUNCS(wxDECLARE_SYM_FUNCTION); diff --git a/Externals/wxWidgets3/include/wx/msw/dialog.h b/Externals/wxWidgets3/include/wx/msw/dialog.h index 9ea9a3766b..ad192925e1 100644 --- a/Externals/wxWidgets3/include/wx/msw/dialog.h +++ b/Externals/wxWidgets3/include/wx/msw/dialog.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: dialog.h 60559 2009-05-09 12:26:15Z VZ $ +// RCS-ID: $Id: dialog.h 70511 2012-02-05 14:18:22Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,7 +16,7 @@ // this option is always enabled (there doesn't seem to be any good reason to // disable it) for desktop Windows versions but Windows CE dialogs are usually -// not resizeable and never show resize gripper anyhow so don't use it there +// not resizable and never show resize gripper anyhow so don't use it there #ifdef __WXWINCE__ #define wxUSE_DIALOG_SIZEGRIP 0 #else @@ -92,9 +92,9 @@ public: // override some base class virtuals virtual bool Show(bool show = true); - virtual void Raise(); - +#if wxUSE_DIALOG_SIZEGRIP virtual void SetWindowStyleFlag(long style); +#endif // wxUSE_DIALOG_SIZEGRIP #ifdef __POCKETPC__ // Responds to the OK button in a PocketPC titlebar. This @@ -114,7 +114,7 @@ protected: private: #if wxUSE_DIALOG_SIZEGRIP // these functions deal with the gripper window shown in the corner of - // resizeable dialogs + // resizable dialogs void CreateGripper(); void DestroyGripper(); void ShowGripper(bool show); diff --git a/Externals/wxWidgets3/include/wx/msw/dragimag.h b/Externals/wxWidgets3/include/wx/msw/dragimag.h index 44dafc0025..5118833235 100644 --- a/Externals/wxWidgets3/include/wx/msw/dragimag.h +++ b/Externals/wxWidgets3/include/wx/msw/dragimag.h @@ -5,7 +5,7 @@ // Author: Julian Smart // Modified by: // Created: 08/04/99 -// RCS-ID: $Id: dragimag.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: dragimag.h 70584 2012-02-15 00:35:25Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -114,14 +114,6 @@ public: Create(image, cursor); } - // Deprecated form of the above - wxDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot) - { - Init(); - - Create(image, cursor, cursorHotspot); - } - wxDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor) { Init(); @@ -129,14 +121,6 @@ public: Create(image, cursor); } - // Deprecated form of the above - wxDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot) - { - Init(); - - Create(image, cursor, cursorHotspot); - } - wxDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor) { Init(); @@ -144,14 +128,6 @@ public: Create(str, cursor); } - // Deprecated form of the above - wxDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot) - { - Init(); - - Create(str, cursor, cursorHotspot); - } - #if wxUSE_TREECTRL wxDragImage(const wxTreeCtrl& treeCtrl, wxTreeItemId& id) { @@ -180,27 +156,12 @@ public: // Create a drag image from a bitmap and optional cursor bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor); - bool Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) - { - wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument.")); - return Create(image, cursor); - } // Create a drag image from an icon and optional cursor bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor); - bool Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) - { - wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument.")); - return Create(image, cursor); - } // Create a drag image from a string and optional cursor bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor); - bool Create(const wxString& str, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) - { - wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument.")); - return Create(str, cursor); - } #if wxUSE_TREECTRL // Create a drag image for the given tree control item @@ -248,6 +209,16 @@ public: WXHIMAGELIST GetCursorHIMAGELIST() const { return m_hCursorImageList; } #endif + // don't use in new code, use versions without hot spot parameter +#if WXWIN_COMPATIBILITY_2_8 + wxDEPRECATED_CONSTRUCTOR( wxDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot) ); + wxDEPRECATED_CONSTRUCTOR( wxDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot) ); + wxDEPRECATED_CONSTRUCTOR( wxDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot) ); + wxDEPRECATED( bool Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot) ); + wxDEPRECATED( bool Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot) ); + wxDEPRECATED( bool Create(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot) ); +#endif // WXWIN_COMPATIBILITY_2_8 + protected: WXHIMAGELIST m_hImageList; diff --git a/Externals/wxWidgets3/include/wx/msw/enhmeta.h b/Externals/wxWidgets3/include/wx/msw/enhmeta.h index 89fa8cfa18..e1168ec707 100644 --- a/Externals/wxWidgets3/include/wx/msw/enhmeta.h +++ b/Externals/wxWidgets3/include/wx/msw/enhmeta.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 13.01.00 -// RCS-ID: $Id: enhmeta.h 60843 2009-05-31 19:11:15Z VS $ +// RCS-ID: $Id: enhmeta.h 68317 2011-07-21 13:49:59Z VZ $ // Copyright: (c) 2000 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -89,6 +89,7 @@ public: // as above, but takes reference DC as first argument to take resolution, // size, font metrics etc. from + wxEXPLICIT wxEnhMetaFileDC(const wxDC& referenceDC, const wxString& filename = wxEmptyString, int width = 0, int height = 0, diff --git a/Externals/wxWidgets3/include/wx/msw/font.h b/Externals/wxWidgets3/include/wx/msw/font.h index ef4d59f7c1..8c29e0e6dd 100644 --- a/Externals/wxWidgets3/include/wx/msw/font.h +++ b/Externals/wxWidgets3/include/wx/msw/font.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: font.h 65670 2010-09-29 13:46:09Z VZ $ +// RCS-ID: $Id: font.h 70446 2012-01-23 11:28:28Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -91,6 +91,12 @@ public: Create(info, hFont); } + wxFont(int pointSize, + wxFontFamily family, + int flags = wxFONTFLAG_DEFAULT, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + wxFont(const wxString& fontDesc); @@ -117,6 +123,7 @@ public: virtual wxFontStyle GetStyle() const; virtual wxFontWeight GetWeight() const; virtual bool GetUnderlined() const; + virtual bool GetStrikethrough() const; virtual wxString GetFaceName() const; virtual wxFontEncoding GetEncoding() const; virtual const wxNativeFontInfo *GetNativeFontInfo() const; @@ -128,6 +135,7 @@ public: virtual void SetWeight(wxFontWeight weight); virtual bool SetFaceName(const wxString& faceName); virtual void SetUnderlined(bool underlined); + virtual void SetStrikethrough(bool strikethrough); virtual void SetEncoding(wxFontEncoding encoding); wxDECLARE_COMMON_FONT_METHODS(); diff --git a/Externals/wxWidgets3/include/wx/msw/frame.h b/Externals/wxWidgets3/include/wx/msw/frame.h index fa66386469..7483e1c992 100644 --- a/Externals/wxWidgets3/include/wx/msw/frame.h +++ b/Externals/wxWidgets3/include/wx/msw/frame.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: frame.h 60337 2009-04-25 12:59:09Z FM $ +// RCS-ID: $Id: frame.h 70511 2012-02-05 14:18:22Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -42,7 +42,6 @@ public: // implement base class pure virtuals virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); - virtual void Raise(); // implementation only from now on // ------------------------------- @@ -79,7 +78,6 @@ public: bool HandleSize(int x, int y, WXUINT flag); bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control); bool HandleMenuSelect(WXWORD nItem, WXWORD nFlags, WXHMENU hMenu); - bool HandleMenuLoop(const wxEventType& evtType, WXWORD isPopup); // tooltip management #if wxUSE_TOOLTIPS @@ -133,8 +131,17 @@ protected: // wxMDIChildFrame bool MSWDoTranslateMessage(wxFrame *frame, WXMSG *msg); - // handle WM_INITMENUPOPUP message to generate wxEVT_MENU_OPEN - bool HandleInitMenuPopup(WXHMENU hMenu); +#if wxUSE_MENUS + // handle WM_EXITMENULOOP message for Win95 only + bool HandleExitMenuLoop(WXWORD isPopup); + + // handle WM_(UN)INITMENUPOPUP message to generate wxEVT_MENU_OPEN/CLOSE + bool HandleMenuPopup(wxEventType evtType, WXHMENU hMenu); + + // Command part of HandleMenuPopup() and HandleExitMenuLoop(). + bool DoSendMenuOpenCloseEvent(wxEventType evtType, wxMenu* menu, bool popup); +#endif // wxUSE_MENUS + virtual bool IsMDIChild() const { return false; } diff --git a/Externals/wxWidgets3/include/wx/msw/fswatcher.h b/Externals/wxWidgets3/include/wx/msw/fswatcher.h index a88d81a869..ea7ca41379 100644 --- a/Externals/wxWidgets3/include/wx/msw/fswatcher.h +++ b/Externals/wxWidgets3/include/wx/msw/fswatcher.h @@ -3,7 +3,7 @@ // Purpose: wxMSWFileSystemWatcher // Author: Bartosz Bekier // Created: 2009-05-26 -// RCS-ID: $Id: fswatcher.h 62474 2009-10-22 11:35:43Z VZ $ +// RCS-ID: $Id: fswatcher.h 67693 2011-05-03 23:31:39Z VZ $ // Copyright: (c) 2009 Bartosz Bekier // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,6 +23,12 @@ public: wxMSWFileSystemWatcher(const wxFileName& path, int events = wxFSW_EVENT_ALL); + // Override the base class function to provide a much more efficient + // implementation for it using the platform native support for watching the + // entire directory trees. + virtual bool AddTree(const wxFileName& path, int events = wxFSW_EVENT_ALL, + const wxString& filter = wxEmptyString); + protected: bool Init(); }; diff --git a/Externals/wxWidgets3/include/wx/msw/helpchm.h b/Externals/wxWidgets3/include/wx/msw/helpchm.h index 711d74dfb1..d3fdc9272b 100644 --- a/Externals/wxWidgets3/include/wx/msw/helpchm.h +++ b/Externals/wxWidgets3/include/wx/msw/helpchm.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 16/04/2000 -// RCS-ID: $Id: helpchm.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: helpchm.h 67880 2011-06-07 14:28:55Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -82,7 +82,7 @@ protected: wxString m_helpFile; - DECLARE_CLASS(wxCHMHelpController) + DECLARE_DYNAMIC_CLASS(wxCHMHelpController) }; #endif // wxUSE_MS_HTML_HELP diff --git a/Externals/wxWidgets3/include/wx/msw/helpwin.h b/Externals/wxWidgets3/include/wx/msw/helpwin.h index d209f93f83..828d2b6b4f 100644 --- a/Externals/wxWidgets3/include/wx/msw/helpwin.h +++ b/Externals/wxWidgets3/include/wx/msw/helpwin.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: helpwin.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: helpwin.h 67882 2011-06-07 16:48:36Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -20,7 +20,7 @@ class WXDLLIMPEXP_CORE wxWinHelpController: public wxHelpControllerBase { - DECLARE_CLASS(wxWinHelpController) + DECLARE_DYNAMIC_CLASS(wxWinHelpController) public: wxWinHelpController(wxWindow* parentWindow = NULL): wxHelpControllerBase(parentWindow) {} diff --git a/Externals/wxWidgets3/include/wx/msw/listctrl.h b/Externals/wxWidgets3/include/wx/msw/listctrl.h index 5b4eacae95..ff49f754bb 100644 --- a/Externals/wxWidgets3/include/wx/msw/listctrl.h +++ b/Externals/wxWidgets3/include/wx/msw/listctrl.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: Agron Selimaj // Created: 01/02/97 -// RCS-ID: $Id: listctrl.h 64532 2010-06-09 13:55:48Z FM $ +// RCS-ID: $Id: listctrl.h 70282 2012-01-07 15:09:43Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,7 +16,6 @@ #include "wx/dynarray.h" #include "wx/vector.h" -class WXDLLIMPEXP_FWD_CORE wxImageList; class wxMSWListItemData; // define this symbol to indicate the availability of SetColumnsOrder() and @@ -77,7 +76,7 @@ class wxMSWListItemData; */ -class WXDLLIMPEXP_CORE wxListCtrl: public wxControl +class WXDLLIMPEXP_CORE wxListCtrl: public wxListCtrlBase { public: /* @@ -256,12 +255,6 @@ public: void SetImageList(wxImageList *imageList, int which); void AssignImageList(wxImageList *imageList, int which); - // are we in report mode? - bool InReportView() const { return HasFlag(wxLC_REPORT); } - - // are we in virtual report mode? - bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); } - // refresh items selectively (only useful for virtual list controls) void RefreshItem(long item); void RefreshItems(long itemFrom, long itemTo); @@ -326,14 +319,6 @@ public: // Insert an image/string item long InsertItem(long index, const wxString& label, int imageIndex); - // For list view mode (only), inserts a column. - long InsertColumn(long col, const wxListItem& info); - - long InsertColumn(long col, - const wxString& heading, - int format = wxLIST_FORMAT_LEFT, - int width = -1); - // set the number of items in a virtual list control void SetItemCount(long count); @@ -399,6 +384,9 @@ protected: // common part of all ctors void Init(); + // Implement base class pure virtual methods. + long DoInsertColumn(long col, const wxListItem& info); + // free memory taken by all internal data void FreeAllInternalData(); @@ -466,6 +454,10 @@ private: // destroy m_textCtrl if it's currently valid and reset it to NULL void DeleteEditControl(); + // Intercept Escape and Enter keys to avoid them being stolen from our + // in-place editor control. + void OnCharHook(wxKeyEvent& event); + DECLARE_DYNAMIC_CLASS(wxListCtrl) DECLARE_EVENT_TABLE() diff --git a/Externals/wxWidgets3/include/wx/msw/menu.h b/Externals/wxWidgets3/include/wx/msw/menu.h index e5cc5d0142..53bea80f91 100644 --- a/Externals/wxWidgets3/include/wx/msw/menu.h +++ b/Externals/wxWidgets3/include/wx/msw/menu.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: Vadim Zeitlin (wxMenuItem is now in separate file) // Created: 01/02/97 -// RCS-ID: $Id: menu.h 66178 2010-11-17 01:20:50Z VZ $ +// RCS-ID: $Id: menu.h 70350 2012-01-15 13:41:17Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -25,6 +25,7 @@ class WXDLLIMPEXP_FWD_CORE wxFrame; class WXDLLIMPEXP_FWD_CORE wxToolBar; #endif +class wxMenuRadioItemsData; // Not using a combined wxToolBar/wxMenuBar? then use // a commandbar in WinCE .NET to implement the @@ -60,16 +61,27 @@ public: virtual void SetTitle(const wxString& title); + // MSW-only methods + // ---------------- + + // Create a new menu from the given native HMENU. Takes ownership of the + // menu handle and will delete it when this object is destroyed. + static wxMenu *MSWNewFromHMENU(WXHMENU hMenu) { return new wxMenu(hMenu); } + + // implementation only from now on // ------------------------------- - virtual void Attach(wxMenuBarBase *menubar); - bool MSWCommand(WXUINT param, WXWORD id); // get the native menu handle WXHMENU GetHMenu() const { return m_hMenu; } + // Return the start and end position of the radio group to which the item + // at the given position belongs. Returns false if there is no radio group + // containing this position. + bool MSWGetRadioGroupRange(int pos, int *start, int *end) const; + #if wxUSE_ACCEL // called by wxMenuBar to build its accel table from the accels of all menus bool HasAccels() const { return !m_accels.empty(); } @@ -102,6 +114,9 @@ public: m_maxAccelWidth = -1; } + // get the menu with given handle (recursively) + wxMenu* MSWGetMenu(WXHMENU hMenu); + private: void CalculateMaxAccelWidth(); @@ -113,21 +128,30 @@ protected: virtual wxMenuItem* DoRemove(wxMenuItem *item); private: - // common part of all ctors + // This constructor is private, use MSWNewFromHMENU() to use it. + wxMenu(WXHMENU hMenu); + + // Common part of all ctors, it doesn't create a new HMENU. + void InitNoCreate(); + + // Common part of all ctors except of the one above taking a native menu + // handler: calls InitNoCreate() and also creates a new menu. void Init(); // common part of Append/Insert (behaves as Append is pos == (size_t)-1) bool DoInsertOrAppend(wxMenuItem *item, size_t pos = (size_t)-1); - // terminate the current radio group, if any - void EndRadioGroup(); + + // This variable contains the description of the radio item groups and + // allows to find whether an item at the given position is part of the + // group and also where its group starts and ends. + // + // It is initially NULL and only allocated if we have any radio items. + wxMenuRadioItemsData *m_radioData; // if true, insert a breal before appending the next item bool m_doBreak; - // the position of the first item in the current radio group or -1 - int m_startRadioGroup; - // the menu handle of this menu WXHMENU m_hMenu; @@ -173,6 +197,7 @@ public: virtual wxMenu *Remove(size_t pos); virtual void EnableTop( size_t pos, bool flag ); + virtual bool IsEnabledTop(size_t pos) const; virtual void SetMenuLabel( size_t pos, const wxString& label ); virtual wxString GetMenuLabel( size_t pos ) const; @@ -208,6 +233,9 @@ public: void Refresh( bool eraseBackground, const wxRect *rect = (const wxRect *) NULL ) { wxWindow::Refresh(eraseBackground, rect); } + // get the menu with given handle (recursively) + wxMenu* MSWGetMenu(WXHMENU hMenu); + protected: // common part of all ctors void Init(); diff --git a/Externals/wxWidgets3/include/wx/msw/menuitem.h b/Externals/wxWidgets3/include/wx/msw/menuitem.h index 8cf0698c63..1ccc75bdea 100644 --- a/Externals/wxWidgets3/include/wx/msw/menuitem.h +++ b/Externals/wxWidgets3/include/wx/msw/menuitem.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 11.11.97 -// RCS-ID: $Id: menuitem.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: menuitem.h 70801 2012-03-04 00:29:55Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -61,11 +61,6 @@ public: // Win32 API WXWPARAM GetMSWId() const; - // mark item as belonging to the given radio group - void SetAsRadioGroupStart(); - void SetRadioGroupStart(int start); - void SetRadioGroupEnd(int end); - #if WXWIN_COMPATIBILITY_2_8 // compatibility only, don't use in new code wxDEPRECATED( @@ -124,24 +119,21 @@ private: // helper function for draw std menu check mark void DrawStdCheckMark(WXHDC hdc, const tagRECT* rc, wxODStatus stat); -#endif // wxUSE_OWNER_DRAWN +#else // !wxUSE_OWNER_DRAWN + // Provide stubs for the public functions above to ensure that the code + // still compiles without wxUSE_OWNER_DRAWN -- it makes sense to just drop + // the bitmaps then instead of failing compilation. + void SetBitmaps(const wxBitmap& WXUNUSED(bmpChecked), + const wxBitmap& WXUNUSED(bmpUnchecked) = wxNullBitmap) { } + void SetBitmap(const wxBitmap& WXUNUSED(bmp), + bool WXUNUSED(bChecked) = true) { } + const wxBitmap& GetBitmap() const { return wxNullBitmap; } +#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN private: // common part of all ctors void Init(); - // the positions of the first and last items of the radio group this item - // belongs to or -1: start is the radio group start and is valid for all - // but first radio group items (m_isRadioGroupStart == false), end is valid - // only for the first one - union - { - int start; - int end; - } m_radioGroup; - - // does this item start a radio group? - bool m_isRadioGroupStart; #if wxUSE_OWNER_DRAWN // item bitmaps diff --git a/Externals/wxWidgets3/include/wx/msw/missing.h b/Externals/wxWidgets3/include/wx/msw/missing.h index 0888d1322e..34184c596d 100644 --- a/Externals/wxWidgets3/include/wx/msw/missing.h +++ b/Externals/wxWidgets3/include/wx/msw/missing.h @@ -3,7 +3,7 @@ // Purpose: Declarations for parts of the Win32 SDK that are missing in // the versions that come with some compilers // Created: 2002/04/23 -// RCS-ID: $Id: missing.h 66996 2011-02-22 13:26:06Z VZ $ +// RCS-ID: $Id: missing.h 69844 2011-11-27 19:50:53Z VZ $ // Copyright: (c) 2002 Mattia Barbon // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -94,6 +94,7 @@ #define VK_OEM_5 0xDC #define VK_OEM_6 0xDD #define VK_OEM_7 0xDE + #define VK_OEM_102 0xE2 #endif #ifndef VK_OEM_COMMA @@ -514,6 +515,152 @@ typedef struct #endif +#endif + +//Various defines that will be needed by mingw and possibly VC++6 +//Used by the webview library + +#ifndef DISPID_COMMANDSTATECHANGE +#define DISPID_COMMANDSTATECHANGE 105 +#endif + +#ifndef DISPID_NAVIGATECOMPLETE2 +#define DISPID_NAVIGATECOMPLETE2 252 +#endif + +#ifndef DISPID_NAVIGATEERROR +#define DISPID_NAVIGATEERROR 271 +#endif + +#ifndef DISPID_NEWWINDOW3 +#define DISPID_NEWWINDOW3 273 +#endif + +#ifndef INET_E_ERROR_FIRST +#define INET_E_ERROR_FIRST 0x800C0002L +#endif + +#ifndef INET_E_INVALID_URL +#define INET_E_INVALID_URL 0x800C0002L +#endif + +#ifndef INET_E_NO_SESSION +#define INET_E_NO_SESSION 0x800C0003L +#endif + +#ifndef INET_E_CANNOT_CONNECT +#define INET_E_CANNOT_CONNECT 0x800C0004L +#endif + +#ifndef INET_E_RESOURCE_NOT_FOUND +#define INET_E_RESOURCE_NOT_FOUND 0x800C0005L +#endif + +#ifndef INET_E_OBJECT_NOT_FOUND +#define INET_E_OBJECT_NOT_FOUND 0x800C0006L +#endif + +#ifndef INET_E_DATA_NOT_AVAILABLE +#define INET_E_DATA_NOT_AVAILABLE 0x800C0007L +#endif + +#ifndef INET_E_DOWNLOAD_FAILURE +#define INET_E_DOWNLOAD_FAILURE 0x800C0008L +#endif + +#ifndef INET_E_AUTHENTICATION_REQUIRED +#define INET_E_AUTHENTICATION_REQUIRED 0x800C0009L +#endif + +#ifndef INET_E_NO_VALID_MEDIA +#define INET_E_NO_VALID_MEDIA 0x800C000AL +#endif + +#ifndef INET_E_CONNECTION_TIMEOUT +#define INET_E_CONNECTION_TIMEOUT 0x800C000BL +#endif + +#ifndef INET_E_INVALID_REQUEST +#define INET_E_INVALID_REQUEST 0x800C000CL +#endif + +#ifndef INET_E_UNKNOWN_PROTOCOL +#define INET_E_UNKNOWN_PROTOCOL 0x800C000DL +#endif + +#ifndef INET_E_SECURITY_PROBLEM +#define INET_E_SECURITY_PROBLEM 0x800C000EL +#endif + +#ifndef INET_E_CANNOT_LOAD_DATA +#define INET_E_CANNOT_LOAD_DATA 0x800C000FL +#endif + +#ifndef INET_E_CANNOT_INSTANTIATE_OBJECT +#define INET_E_CANNOT_INSTANTIATE_OBJECT 0x800C0010L +#endif + +#ifndef INET_E_QUERYOPTION_UNKNOWN +#define INET_E_QUERYOPTION_UNKNOWN 0x800C0013L +#endif + +#ifndef INET_E_REDIRECT_FAILED +#define INET_E_REDIRECT_FAILED 0x800C0014L +#endif + +#ifndef INET_E_REDIRECT_TO_DIR +#define INET_E_REDIRECT_TO_DIR 0x800C0015L +#endif + +#ifndef INET_E_CANNOT_LOCK_REQUEST +#define INET_E_CANNOT_LOCK_REQUEST 0x800C0016L +#endif + +#ifndef INET_E_USE_EXTEND_BINDING +#define INET_E_USE_EXTEND_BINDING 0x800C0017L +#endif + +#ifndef INET_E_TERMINATED_BIND +#define INET_E_TERMINATED_BIND 0x800C0018L +#endif + +#ifndef INET_E_INVALID_CERTIFICATE +#define INET_E_INVALID_CERTIFICATE 0x800C0019L +#endif + +#ifndef INET_E_CODE_DOWNLOAD_DECLINED +#define INET_E_CODE_DOWNLOAD_DECLINED 0x800C0100L +#endif + +#ifndef INET_E_RESULT_DISPATCHED +#define INET_E_RESULT_DISPATCHED 0x800C0200L +#endif + +#ifndef INET_E_CANNOT_REPLACE_SFP_FILE +#define INET_E_CANNOT_REPLACE_SFP_FILE 0x800C0300L +#endif + +#ifndef INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY +#define INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY 0x800C0500L +#endif + +#ifndef INET_E_CODE_INSTALL_SUPPRESSED +#define INET_E_CODE_INSTALL_SUPPRESSED 0x800C0400L +#endif + +//We need to check if we are using MinGW or mingw-w64 as their +//definitions are different + +#ifdef __MINGW32__ +#include <_mingw.h> +#endif + +#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) +typedef enum CommandStateChangeConstants { + CSC_UPDATECOMMANDS = (int) 0xFFFFFFFF, + CSC_NAVIGATEFORWARD = 0x1, + CSC_NAVIGATEBACK = 0x2 +} CommandStateChangeConstants; #endif /* diff --git a/Externals/wxWidgets3/include/wx/msw/nonownedwnd.h b/Externals/wxWidgets3/include/wx/msw/nonownedwnd.h new file mode 100644 index 0000000000..789a836aea --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/nonownedwnd.h @@ -0,0 +1,39 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/msw/nonownedwnd.h +// Purpose: wxNonOwnedWindow declaration for wxMSW. +// Author: Vadim Zeitlin +// Created: 2011-10-09 +// RCS-ID: $Id: nonownedwnd.h 69462 2011-10-18 21:56:52Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MSW_NONOWNEDWND_H_ +#define _WX_MSW_NONOWNEDWND_H_ + +class wxNonOwnedWindowShapeImpl; + +// ---------------------------------------------------------------------------- +// wxNonOwnedWindow +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxNonOwnedWindow : public wxNonOwnedWindowBase +{ +public: + wxNonOwnedWindow(); + virtual ~wxNonOwnedWindow(); + +protected: + virtual bool DoClearShape(); + virtual bool DoSetRegionShape(const wxRegion& region); +#if wxUSE_GRAPHICS_CONTEXT + virtual bool DoSetPathShape(const wxGraphicsPath& path); + +private: + wxNonOwnedWindowShapeImpl* m_shapeImpl; +#endif // wxUSE_GRAPHICS_CONTEXT + + wxDECLARE_NO_COPY_CLASS(wxNonOwnedWindow); +}; + +#endif // _WX_MSW_NONOWNEDWND_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/notebook.h b/Externals/wxWidgets3/include/wx/msw/notebook.h index 644231a4d6..bfed8f9794 100644 --- a/Externals/wxWidgets3/include/wx/msw/notebook.h +++ b/Externals/wxWidgets3/include/wx/msw/notebook.h @@ -3,7 +3,7 @@ // Purpose: MSW/GTK compatible notebook (a.k.a. property sheet) // Author: Robert Roebling // Modified by: Vadim Zeitlin for Windows version -// RCS-ID: $Id: notebook.h 67250 2011-03-20 00:00:29Z VZ $ +// RCS-ID: $Id: notebook.h 69793 2011-11-22 13:18:45Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -96,7 +96,7 @@ public: wxNotebookPage *pPage, const wxString& strText, bool bSelect = false, - int imageId = -1); + int imageId = NO_IMAGE); // Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH // style. @@ -194,6 +194,9 @@ protected: // true if we have already subclassed our updown control bool m_hasSubclassedUpdown; + + // true if we already refreshed the current page after showing the window + bool m_doneUpdateHack; #endif // __WXWINCE__ #if wxUSE_UXTHEME diff --git a/Externals/wxWidgets3/include/wx/msw/ole/activex.h b/Externals/wxWidgets3/include/wx/msw/ole/activex.h index a0047ae0cc..2acd893ace 100644 --- a/Externals/wxWidgets3/include/wx/msw/ole/activex.h +++ b/Externals/wxWidgets3/include/wx/msw/ole/activex.h @@ -4,7 +4,7 @@ // Author: Ryan Norton // Modified by: // Created: 8/18/05 -// RCS-ID: $Id: activex.h 64533 2010-06-09 14:28:08Z FM $ +// RCS-ID: $Id: activex.h 70361 2012-01-15 19:05:34Z SJL $ // Copyright: (c) Ryan Norton // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -168,6 +168,8 @@ public: void OnPaint(wxPaintEvent&); void OnSetFocus(wxFocusEvent&); void OnKillFocus(wxFocusEvent&); + virtual bool MSWTranslateMessage(WXMSG* pMsg); + virtual bool QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc); protected: friend class FrameSite; diff --git a/Externals/wxWidgets3/include/wx/msw/ole/oleutils.h b/Externals/wxWidgets3/include/wx/msw/ole/oleutils.h index f52e1a294d..dffb3b266e 100644 --- a/Externals/wxWidgets3/include/wx/msw/ole/oleutils.h +++ b/Externals/wxWidgets3/include/wx/msw/ole/oleutils.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.02.1998 -// RCS-ID: $Id: oleutils.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: oleutils.h 70162 2011-12-29 11:26:05Z SN $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -82,7 +82,7 @@ inline void ReleaseInterface(IUnknown *pIUnk) #define RELEASE_AND_NULL(p) if ( (p) != NULL ) { p->Release(); p = NULL; }; // return true if the iid is in the array -extern bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount); +extern WXDLLIMPEXP_CORE bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount); // ============================================================================ // IUnknown implementation helpers @@ -140,9 +140,10 @@ private: wxAutoULong m_cRef // macros for declaring supported interfaces -// NB: you should write ADD_INTERFACE(Foo) and not ADD_INTERFACE(IID_IFoo)! +// NB: ADD_IID prepends IID_I whereas ADD_RAW_IID does not #define BEGIN_IID_TABLE(cname) const IID *cname::ms_aIids[] = { #define ADD_IID(iid) &IID_I##iid, +#define ADD_RAW_IID(iid) &iid, #define END_IID_TABLE } // implementation is as straightforward as possible @@ -197,11 +198,11 @@ private: // ---------------------------------------------------------------------------- // tries to translate riid into a symbolic name, if possible -void wxLogQueryInterface(const wxChar *szInterface, REFIID riid); +WXDLLIMPEXP_CORE void wxLogQueryInterface(const wxChar *szInterface, REFIID riid); // these functions print out the new value of reference counter -void wxLogAddRef (const wxChar *szInterface, ULONG cRef); -void wxLogRelease(const wxChar *szInterface, ULONG cRef); +WXDLLIMPEXP_CORE void wxLogAddRef (const wxChar *szInterface, ULONG cRef); +WXDLLIMPEXP_CORE void wxLogRelease(const wxChar *szInterface, ULONG cRef); #else //!__WXDEBUG__ #define wxLogQueryInterface(szInterface, riid) diff --git a/Externals/wxWidgets3/include/wx/msw/palette.h b/Externals/wxWidgets3/include/wx/msw/palette.h index b6e737a8a8..35560e6012 100644 --- a/Externals/wxWidgets3/include/wx/msw/palette.h +++ b/Externals/wxWidgets3/include/wx/msw/palette.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: palette.h 52834 2008-03-26 15:06:00Z FM $ +// RCS-ID: $Id: palette.h 70040 2011-12-17 23:52:47Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,13 +19,13 @@ class WXDLLIMPEXP_CORE wxPalette : public wxPaletteBase public: wxPalette() { } wxPalette(int n, - unsigned char *red, unsigned char *green, unsigned char *blue) + const unsigned char *red, const unsigned char *green, const unsigned char *blue) { Create(n, red, green, blue); } bool Create(int n, - unsigned char *red, unsigned char *green, unsigned char *blue); + const unsigned char *red, const unsigned char *green, const unsigned char *blue); virtual int GetColoursCount() const; diff --git a/Externals/wxWidgets3/include/wx/msw/panel.h b/Externals/wxWidgets3/include/wx/msw/panel.h index 6007a6010b..9a2ab283c1 100644 --- a/Externals/wxWidgets3/include/wx/msw/panel.h +++ b/Externals/wxWidgets3/include/wx/msw/panel.h @@ -3,7 +3,7 @@ // Purpose: wxMSW-specific wxPanel class. // Author: Vadim Zeitlin // Created: 2011-03-18 -// RCS-ID: $Id: panel.h 67253 2011-03-20 00:00:49Z VZ $ +// RCS-ID: $Id: panel.h 70098 2011-12-23 05:59:59Z PC $ // Copyright: (c) 2011 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -20,7 +20,7 @@ class WXDLLIMPEXP_FWD_CORE wxBrush; class WXDLLIMPEXP_CORE wxPanel : public wxPanelBase { public: - wxPanel() { Init(); } + wxPanel() { } wxPanel(wxWindow *parent, wxWindowID winid = wxID_ANY, @@ -29,8 +29,6 @@ public: long style = wxTAB_TRAVERSAL | wxNO_BORDER, const wxString& name = wxPanelNameStr) { - Init(); - Create(parent, winid, pos, size, style, name); } @@ -40,7 +38,7 @@ public: virtual bool HasTransparentBackground(); -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 wxDEPRECATED_CONSTRUCTOR( wxPanel(wxWindow *parent, int x, int y, int width, int height, @@ -52,18 +50,7 @@ public: ) #endif // WXWIN_COMPATIBILITY_2_8 -protected: - void Init() - { - m_backgroundBrush = NULL; - } - - virtual void DoSetBackgroundBitmap(const wxBitmap& bmp); - virtual WXHBRUSH MSWGetCustomBgBrush(); - private: - wxBrush *m_backgroundBrush; - wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxPanel); }; diff --git a/Externals/wxWidgets3/include/wx/msw/printdlg.h b/Externals/wxWidgets3/include/wx/msw/printdlg.h index f656e75720..a8362bdd06 100644 --- a/Externals/wxWidgets3/include/wx/msw/printdlg.h +++ b/Externals/wxWidgets3/include/wx/msw/printdlg.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: printdlg.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: printdlg.h 70636 2012-02-20 21:55:55Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -20,6 +20,7 @@ #include "wx/printdlg.h" class WXDLLIMPEXP_FWD_CORE wxDC; +class WinPrinter; //---------------------------------------------------------------------------- // wxWindowsPrintNativeData @@ -37,6 +38,7 @@ public: virtual bool Ok() const { return IsOk(); } virtual bool IsOk() const; + void InitializeDevMode(const wxString &printerName = wxEmptyString, WinPrinter* printer = NULL); void* GetDevMode() const { return m_devMode; } void SetDevMode(void* data) { m_devMode = data; } void* GetDevNames() const { return m_devNames; } @@ -105,7 +107,7 @@ public: bool ConvertToNative( wxPageSetupDialogData &data ); bool ConvertFromNative( wxPageSetupDialogData &data ); - virtual wxPageSetupData& GetPageSetupDialogData() { return m_pageSetupData; } + virtual wxPageSetupDialogData& GetPageSetupDialogData() { return m_pageSetupData; } private: wxPageSetupDialogData m_pageSetupData; diff --git a/Externals/wxWidgets3/include/wx/msw/private.h b/Externals/wxWidgets3/include/wx/msw/private.h index 45217c0aae..75f5c65382 100644 --- a/Externals/wxWidgets3/include/wx/msw/private.h +++ b/Externals/wxWidgets3/include/wx/msw/private.h @@ -6,7 +6,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: private.h 65958 2010-10-30 23:50:45Z VZ $ +// RCS-ID: $Id: private.h 69758 2011-11-14 12:51:53Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -454,7 +454,7 @@ private: void DoInit(HGDIOBJ hgdiobj) { m_hgdiobj = ::SelectObject(m_hdc, hgdiobj); } public: - SelectInHDC() : m_hdc(NULL) { } + SelectInHDC() : m_hdc(NULL), m_hgdiobj(NULL) { } SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc) { DoInit(hgdiobj); } void Init(HDC hdc, HGDIOBJ hgdiobj) @@ -923,6 +923,9 @@ WXDLLIMPEXP_BASE wxWinVersion wxGetWinVersion(); extern HCURSOR wxGetCurrentBusyCursor(); // from msw/utils.cpp extern const wxCursor *wxGetGlobalCursor(); // from msw/cursor.cpp +// GetCursorPos can fail without populating the POINT. This falls back to GetMessagePos. +WXDLLIMPEXP_CORE void wxGetCursorPosMSW(POINT* pt); + WXDLLIMPEXP_CORE void wxGetCharSize(WXHWND wnd, int *x, int *y, const wxFont& the_font); WXDLLIMPEXP_CORE void wxFillLogFont(LOGFONT *logFont, const wxFont *font); WXDLLIMPEXP_CORE wxFont wxCreateFontFromLogFont(const LOGFONT *logFont); diff --git a/Externals/wxWidgets3/include/wx/msw/private/button.h b/Externals/wxWidgets3/include/wx/msw/private/button.h index 8f16b885c3..c45bcf167a 100644 --- a/Externals/wxWidgets3/include/wx/msw/private/button.h +++ b/Externals/wxWidgets3/include/wx/msw/private/button.h @@ -3,7 +3,7 @@ // Purpose: helper functions used with native BUTTON control // Author: Vadim Zeitlin // Created: 2008-06-07 -// RCS-ID: $Id: button.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: button.h 68922 2011-08-27 14:11:28Z VZ $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -44,7 +44,8 @@ void UpdateMultilineStyle(HWND hwnd, const wxString& label); // flags for ComputeBestSize() and GetFittingSize() enum { - Size_AuthNeeded = 1 + Size_AuthNeeded = 1, + Size_ExactFit = 2 }; // NB: All the functions below are implemented in src/msw/button.cpp diff --git a/Externals/wxWidgets3/include/wx/msw/private/fswatcher.h b/Externals/wxWidgets3/include/wx/msw/private/fswatcher.h index d03d4db8ca..f5ef3bbd38 100644 --- a/Externals/wxWidgets3/include/wx/msw/private/fswatcher.h +++ b/Externals/wxWidgets3/include/wx/msw/private/fswatcher.h @@ -3,7 +3,7 @@ // Purpose: File system watcher impl classes // Author: Bartosz Bekier // Created: 2009-05-26 -// RCS-ID: $Id: fswatcher.h 62678 2009-11-18 09:56:52Z VZ $ +// RCS-ID: $Id: fswatcher.h 67806 2011-05-28 19:35:13Z VZ $ // Copyright: (c) 2009 Bartosz Bekier // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -50,7 +50,7 @@ public: m_path); } } - delete m_overlapped; + free(m_overlapped); } bool IsOk() const @@ -104,7 +104,6 @@ private: wxDECLARE_NO_COPY_CLASS(wxFSWatchEntryMSW); }; - // ============================================================================ // wxFSWatcherImplMSW helper classes implementations // ============================================================================ @@ -156,6 +155,48 @@ public: return m_watches.insert(val).second; } + // Removes a watch we're currently using. Notice that this doesn't happen + // immediately, CompleteRemoval() must be called later when it's really + // safe to delete the watch, i.e. after completion of the IO operation + // using it. + bool ScheduleForRemoval(const wxSharedPtr& watch) + { + wxCHECK_MSG( m_iocp != INVALID_HANDLE_VALUE, false, "IOCP not init" ); + wxCHECK_MSG( watch->IsOk(), false, "Invalid watch" ); + + const wxString path = watch->GetPath(); + wxFSWatchEntries::iterator it = m_watches.find(path); + wxCHECK_MSG( it != m_watches.end(), false, + "Can't remove a watch we don't use" ); + + // We can't just delete the watch here as we can have pending events + // for it and if we destroyed it now, we could get a dangling (or, + // worse, reused to point to another object) pointer in ReadEvents() so + // just remember that this one should be removed when CompleteRemoval() + // is called later. + m_removedWatches.insert(wxFSWatchEntries::value_type(path, watch)); + m_watches.erase(it); + + return true; + } + + // Really remove the watch previously passed to ScheduleForRemoval(). + // + // It's ok to call this for a watch that hadn't been removed before, in + // this case we'll just return false and do nothing. + bool CompleteRemoval(wxFSWatchEntryMSW* watch) + { + wxFSWatchEntries::iterator it = m_removedWatches.find(watch->GetPath()); + if ( it == m_removedWatches.end() ) + return false; + + // Removing the object from the map will result in deleting the watch + // itself as it's not referenced from anywhere else now. + m_removedWatches.erase(it); + + return true; + } + // post completion packet bool PostEmptyStatus() { @@ -203,7 +244,13 @@ protected: } HANDLE m_iocp; + + // The hash containing all the wxFSWatchEntryMSW objects currently being + // watched keyed by their paths. wxFSWatchEntries m_watches; + + // Contains the watches which had been removed but are still pending. + wxFSWatchEntries m_removedWatches; }; diff --git a/Externals/wxWidgets3/include/wx/msw/private/hiddenwin.h b/Externals/wxWidgets3/include/wx/msw/private/hiddenwin.h new file mode 100644 index 0000000000..7f592e2e2e --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/private/hiddenwin.h @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/msw/private/hiddenwin.h +// Purpose: Helper for creating a hidden window used by wxMSW internally. +// Author: Vadim Zeitlin +// Created: 2011-09-16 +// RCS-ID: $Id: hiddenwin.h 69170 2011-09-21 15:07:32Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MSW_PRIVATE_HIDDENWIN_H_ +#define _WX_MSW_PRIVATE_HIDDENWIN_H_ + +#include "wx/msw/private.h" + +/* + Creates a hidden window with supplied window proc registering the class for + it if necessary (i.e. the first time only). Caller is responsible for + destroying the window and unregistering the class (note that this must be + done because wxWidgets may be used as a DLL and so may be loaded/unloaded + multiple times into/from the same process so we can't rely on automatic + Windows class unregistration). + + pclassname is a pointer to a caller stored classname, which must initially be + NULL. classname is the desired wndclass classname. If function successfully + registers the class, pclassname will be set to classname. + */ +extern "C" WXDLLIMPEXP_BASE HWND +wxCreateHiddenWindow(LPCTSTR *pclassname, LPCTSTR classname, WNDPROC wndproc); + +#endif // _WX_MSW_PRIVATE_HIDDENWIN_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h b/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h index 339b2f5528..82b5246855 100644 --- a/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h +++ b/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h @@ -3,7 +3,7 @@ // Purpose: helper functions used with native message dialog // Author: Rickard Westerlund // Created: 2010-07-12 -// RCS-ID: $Id: msgdlg.h 65348 2010-08-18 22:48:28Z VZ $ +// RCS-ID: $Id: msgdlg.h 68537 2011-08-04 22:53:42Z VZ $ // Copyright: (c) 2010 wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -30,8 +30,10 @@ namespace wxMSWMessageDialog class wxMSWTaskDialogConfig { public: + enum { MAX_BUTTONS = 4 }; + wxMSWTaskDialogConfig() - : buttons(new TASKDIALOG_BUTTON[3]), + : buttons(new TASKDIALOG_BUTTON[MAX_BUTTONS]), parent(NULL), iconId(0), style(0), @@ -53,6 +55,7 @@ namespace wxMSWMessageDialog wxString btnNoLabel; wxString btnOKLabel; wxString btnCancelLabel; + wxString btnHelpLabel; // Will create a task dialog with it's paremeters for it's creation // stored in the provided TASKDIALOGCONFIG parameter. diff --git a/Externals/wxWidgets3/include/wx/msw/private/timer.h b/Externals/wxWidgets3/include/wx/msw/private/timer.h index 145995f9dc..c45ba1df7e 100644 --- a/Externals/wxWidgets3/include/wx/msw/private/timer.h +++ b/Externals/wxWidgets3/include/wx/msw/private/timer.h @@ -3,7 +3,7 @@ // Purpose: wxTimer class // Author: Julian Smart // Created: 01/02/97 -// RCS-ID: $Id: timer.h 63486 2010-02-15 17:34:21Z RD $ +// RCS-ID: $Id: timer.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,7 +19,7 @@ class WXDLLIMPEXP_BASE wxMSWTimerImpl : public wxTimerImpl { public: - wxMSWTimerImpl(wxTimer *timer) : wxTimerImpl(timer) { m_id = 0; }; + wxMSWTimerImpl(wxTimer *timer) : wxTimerImpl(timer) { m_id = 0; } virtual bool Start(int milliseconds = -1, bool oneShot = false); virtual void Stop(); diff --git a/Externals/wxWidgets3/include/wx/msw/progdlg.h b/Externals/wxWidgets3/include/wx/msw/progdlg.h index 3c1f69407b..096c89a94d 100644 --- a/Externals/wxWidgets3/include/wx/msw/progdlg.h +++ b/Externals/wxWidgets3/include/wx/msw/progdlg.h @@ -3,7 +3,7 @@ // Purpose: wxProgressDialog // Author: Rickard Westerlund // Created: 2010-07-22 -// RCS-ID: $Id: progdlg.h 65574 2010-09-20 13:11:03Z VZ $ +// RCS-ID: $Id: progdlg.h 69041 2011-09-10 03:26:37Z RD $ // Copyright: (c) 2010 wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -47,6 +47,8 @@ public: // Must provide overload to avoid hiding it (and warnings about it) virtual void Update() { wxGenericProgressDialog::Update(); } + virtual WXWidget GetHandle() const; + private: // Performs common routines to Update() and Pulse(). Requires the // shared object to have been entered. diff --git a/Externals/wxWidgets3/include/wx/msw/radiobox.h b/Externals/wxWidgets3/include/wx/msw/radiobox.h index 589bcdc462..4caefafb8f 100644 --- a/Externals/wxWidgets3/include/wx/msw/radiobox.h +++ b/Externals/wxWidgets3/include/wx/msw/radiobox.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: radiobox.h 65957 2010-10-30 23:50:39Z VZ $ +// RCS-ID: $Id: radiobox.h 70498 2012-02-02 14:26:06Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -149,6 +149,9 @@ protected: // get the total size occupied by the radio box buttons wxSize GetTotalButtonSize(const wxSize& sizeBtn) const; + // Adjust all the buttons to the new window size. + void PositionAllButtons(int x, int y, int width, int height); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); @@ -163,6 +166,8 @@ protected: virtual WXHRGN MSWGetRegionWithoutChildren(); #endif // __WXWINCE__ + // resolve ambiguity in base classes + virtual wxBorder GetDefaultBorder() const { return wxRadioBoxBase::GetDefaultBorder(); } // the buttons we contain wxSubwindows *m_radioButtons; diff --git a/Externals/wxWidgets3/include/wx/msw/setup0.h b/Externals/wxWidgets3/include/wx/msw/setup0.h index f3c5cf733c..7b0bf0b25f 100644 --- a/Externals/wxWidgets3/include/wx/msw/setup0.h +++ b/Externals/wxWidgets3/include/wx/msw/setup0.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: setup0.h 67062 2011-02-27 12:48:07Z VZ $ +// RCS-ID: $Id: setup0.h 69463 2011-10-18 21:57:02Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -201,15 +201,6 @@ // Recommended setting: 0 (this is still work in progress...) #define wxUSE_EXTENDED_RTTI 0 -// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from -// std::list and std::vector, with a compatibility interface, -// and for wxHashMap to be implemented with templates. -// -// Default is 0 -// -// Recommended setting: YMMV -#define wxUSE_STL 0 - // Support for message/error logging. This includes wxLogXXX() functions and // wxLog and derived classes. Don't set this to 0 unless you really know what // you are doing. @@ -261,44 +252,6 @@ // Recommended setting: 1 as setting it to 0 disables many other things #define wxUSE_STREAMS 1 -// This is not a real option but is used as the default value for -// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING. -// -// Currently the Digital Mars and Watcom compilers come without standard C++ -// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have -// them (e.g. from STLPort). -// -// VC++ 5.0 does include standard C++ library headers, however they produce -// many warnings that can't be turned off when compiled at warning level 4. -#if defined(__DMC__) || defined(__WATCOMC__) \ - || (defined(_MSC_VER) && _MSC_VER < 1200) - #define wxUSE_STD_DEFAULT 0 -#else - #define wxUSE_STD_DEFAULT 1 -#endif - -// Use standard C++ streams if 1 instead of wx streams in some places. If -// disabled (default), wx streams are used everywhere and wxWidgets doesn't -// depend on the standard streams library. -// -// Notice that enabling this does not replace wx streams with std streams -// everywhere, in a lot of places wx streams are used no matter what. -// -// Default is 0 -// -// Recommended setting: 1 if you use the standard streams anyhow and so -// dependency on the standard streams library is not a -// problem -#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// Recommended setting: 1 unless you want to ensure your program doesn't use -// the standard C++ library at all. -#define wxUSE_STD_STRING wxUSE_STD_DEFAULT - // Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf. // Note that if the system's implementation does not support positional // parameters, setting this to 1 forces the use of the wxWidgets implementation @@ -314,6 +267,107 @@ // Recommended setting: 1 if you want to support multiple languages #define wxUSE_PRINTF_POS_PARAMS 1 + +// ---------------------------------------------------------------------------- +// Interoperability with the standard library. +// ---------------------------------------------------------------------------- + +// Set wxUSE_STL to 1 to enable maximal interoperability with the standard +// library, even at the cost of backwards compatibility. +// +// Default is 0 +// +// Recommended setting: 0 as the options below already provide a relatively +// good level of interoperability and changing this option arguably isn't worth +// diverging from the official builds of the library. +#define wxUSE_STL 0 + +// This is not a real option but is used as the default value for +// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS. +// +// Currently the Digital Mars and Watcom compilers come without standard C++ +// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have +// them (e.g. from STLPort). +// +// VC++ 5.0 does include standard C++ library headers, however they produce +// many warnings that can't be turned off when compiled at warning level 4. +#if defined(__DMC__) || defined(__WATCOMC__) \ + || (defined(_MSC_VER) && _MSC_VER < 1200) + #define wxUSE_STD_DEFAULT 0 +#else + #define wxUSE_STD_DEFAULT 1 +#endif + +// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<> +// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but +// usually more limited) implementations are used which allows to avoid the +// dependency on the C++ run-time library. +// +// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't +// support using standard containers and that VC6 needs non-default options for +// such build to avoid getting "fatal error C1076: compiler limit : internal +// heap limit reached; use /Zm to specify a higher limit" in its own standard +// headers, so you need to ensure you do increase the heap size before enabling +// this option for this compiler. +// +// Default is 0 for compatibility reasons. +// +// Recommended setting: 1 unless compatibility with the official wxWidgets +// build and/or the existing code is a concern. +#define wxUSE_STD_CONTAINERS 0 + +// Use standard C++ streams if 1 instead of wx streams in some places. If +// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the +// standard streams library. +// +// Notice that enabling this does not replace wx streams with std streams +// everywhere, in a lot of places wx streams are used no matter what. +// +// Default is 1 if compiler supports it. +// +// Recommended setting: 1 if you use the standard streams anyhow and so +// dependency on the standard streams library is not a +// problem +#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT + +// Enable minimal interoperability with the standard C++ string class if 1. +// "Minimal" means that wxString can be constructed from std::string or +// std::wstring but can't be implicitly converted to them. You need to enable +// the option below for the latter. +// +// Default is 1 for most compilers. +// +// Recommended setting: 1 unless you want to ensure your program doesn't use +// the standard C++ library at all. +#define wxUSE_STD_STRING wxUSE_STD_DEFAULT + +// Make wxString as much interchangeable with std::[w]string as possible, in +// particular allow implicit conversion of wxString to either of these classes. +// This comes at a price (or a benefit, depending on your point of view) of not +// allowing implicit conversion to "const char *" and "const wchar_t *". +// +// Because a lot of existing code relies on these conversions, this option is +// disabled by default but can be enabled for your build if you don't care +// about compatibility. +// +// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled. +// +// Recommended setting: 0 to remain compatible with the official builds of +// wxWidgets. +#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL + +// VC++ 4.2 and above allows and but you can't mix +// them. Set this option to 1 to use , 0 to use . +// +// Note that newer compilers (including VC++ 7.1 and later) don't support +// wxUSE_IOSTREAMH == 1 and so will be used anyhow. +// +// Default is 0. +// +// Recommended setting: 0, only set to 1 if you use a really old compiler +#define wxUSE_IOSTREAMH 0 + + // ---------------------------------------------------------------------------- // non GUI features selection // ---------------------------------------------------------------------------- @@ -651,6 +705,34 @@ // Recommended setting: 1 #define wxUSE_STC 1 +// Use wxWidget's web viewing classes +// +// Default is 1 +// +// Recommended setting: 1 +#define wxUSE_WEBVIEW 1 + +// Use the IE wxWebView backend +// +// Default is 1 on MSW +// +// Recommended setting: 1 +#ifdef __WXMSW__ +#define wxUSE_WEBVIEW_IE 1 +#else +#define wxUSE_WEBVIEW_IE 0 +#endif + +// Use the WebKit wxWebView backend +// +// Default is 1 on GTK and OSX +// +// Recommended setting: 1 +#if defined(__WXGTK__) || defined(__WXOSX__) +#define wxUSE_WEBVIEW_WEBKIT 1 +#else +#define wxUSE_WEBVIEW_WEBKIT 0 +#endif // Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced // 2D drawing API. (Still somewhat experimental) @@ -749,6 +831,7 @@ // // Recommended setting: 1 #define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl +#define wxUSE_BANNERWINDOW 1 // wxBannerWindow #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl @@ -784,8 +867,10 @@ #define wxUSE_STATTEXT 1 // wxStaticText #define wxUSE_STATBMP 1 // wxStaticBitmap #define wxUSE_TEXTCTRL 1 // wxTextCtrl +#define wxUSE_TIMEPICKCTRL 1 // wxTimePickerCtrl #define wxUSE_TOGGLEBTN 1 // requires wxButton #define wxUSE_TREECTRL 1 // wxTreeCtrl +#define wxUSE_TREELISTCTRL 1 // wxTreeListCtrl // Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR // below either wxStatusBar95 or a generic wxStatusBar will be used. @@ -1002,6 +1087,14 @@ // Recommended setting: 1 #define wxUSE_NOTIFICATION_MESSAGE 1 +// wxRichToolTip is a customizable tooltip class which has more functionality +// than the stock (but native, unlike this class) wxToolTip. +// +// Default is 1. +// +// Recommended setting: 1 (but can be safely set to 0 if you don't need it) +#define wxUSE_RICHTOOLTIP 1 + // Use wxSashWindow class. // // Default is 1. @@ -1307,28 +1400,15 @@ // to create files in SVG (Scalable Vector Graphics) format. #define wxUSE_SVG 1 -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. +// Should wxDC provide SetTransformMatrix() and related methods? // -// Default is 1. +// Default is 1 but can be set to 0 if this functionality is not used. Notice +// that currently only wxMSW supports this so setting this to 0 doesn't change +// much for non-MSW platforms (although it will still save a few bytes +// probably). // -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows and but you can't mix -// them. Set this option to 1 to use , 0 to use . -// -// Note that newer compilers (including VC++ 7.1 and later) don't support -// wxUSE_IOSTREAMH == 1 and so will be used anyhow. -// -// Default is 0. -// -// Recommended setting: 0, only set to 1 if you use a really old compiler -#define wxUSE_IOSTREAMH 0 +// Recommended setting: 1. +#define wxUSE_DC_TRANSFORM_MATRIX 1 // ---------------------------------------------------------------------------- // image format support @@ -1452,7 +1532,7 @@ // Recommended setting: 1, required by wxMediaCtrl #define wxUSE_ACTIVEX 1 -// wxDC cacheing implementation +// wxDC caching implementation #define wxUSE_DC_CACHEING 1 // Set this to 1 to enable wxDIB class used internally for manipulating @@ -1533,6 +1613,14 @@ // Recommended setting: 0, this is mainly used for testing #define wxUSE_DATEPICKCTRL_GENERIC 0 +// Set this to 1 to be able to use wxTimePickerCtrlGeneric in addition to the +// native wxTimePickerCtrl for the platforms that have the latter (MSW). +// +// Default is 0. +// +// Recommended setting: 0, this is mainly used for testing +#define wxUSE_TIMEPICKCTRL_GENERIC 0 + // ---------------------------------------------------------------------------- // Crash debugging helpers // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/msw/setup_inc.h b/Externals/wxWidgets3/include/wx/msw/setup_inc.h index 5a24539c8b..176796629d 100644 --- a/Externals/wxWidgets3/include/wx/msw/setup_inc.h +++ b/Externals/wxWidgets3/include/wx/msw/setup_inc.h @@ -3,7 +3,7 @@ // Purpose: MSW-specific setup.h options // Author: Vadim Zeitlin // Created: 2007-07-21 (extracted from wx/msw/setup0.h) -// RCS-ID: $Id: setup_inc.h 50586 2007-12-08 20:51:21Z VZ $ +// RCS-ID: $Id: setup_inc.h 69224 2011-09-29 13:43:15Z VZ $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -63,7 +63,7 @@ // Recommended setting: 1, required by wxMediaCtrl #define wxUSE_ACTIVEX 1 -// wxDC cacheing implementation +// wxDC caching implementation #define wxUSE_DC_CACHEING 1 // Set this to 1 to enable wxDIB class used internally for manipulating @@ -144,6 +144,14 @@ // Recommended setting: 0, this is mainly used for testing #define wxUSE_DATEPICKCTRL_GENERIC 0 +// Set this to 1 to be able to use wxTimePickerCtrlGeneric in addition to the +// native wxTimePickerCtrl for the platforms that have the latter (MSW). +// +// Default is 0. +// +// Recommended setting: 0, this is mainly used for testing +#define wxUSE_TIMEPICKCTRL_GENERIC 0 + // ---------------------------------------------------------------------------- // Crash debugging helpers // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/msw/slider.h b/Externals/wxWidgets3/include/wx/msw/slider.h index 7ac25508c5..99267d7ca3 100644 --- a/Externals/wxWidgets3/include/wx/msw/slider.h +++ b/Externals/wxWidgets3/include/wx/msw/slider.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: slider.h 66844 2011-02-05 16:36:30Z VZ $ +// RCS-ID: $Id: slider.h 68230 2011-07-11 22:49:33Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -106,6 +106,10 @@ protected: wxRect GetBoundingBox() const; // Get the height and, if the pointers are non NULL, widths of both labels. + // + // Notice that the return value will be 0 if we don't have wxSL_LABELS + // style but we do fill widthMin and widthMax even if we don't have + // wxSL_MIN_MAX_LABELS style set so the caller should account for it. int GetLabelsSize(int *widthMin = NULL, int *widthMax = NULL) const; @@ -123,8 +127,6 @@ protected: int m_pageSize; int m_lineSize; int m_tickFreq; - int m_minLabelWidth; - int m_maxLabelWidth; // flag needed to detect whether we're getting THUMBRELEASE event because // of dragging the thumb or scrolling the mouse wheel diff --git a/Externals/wxWidgets3/include/wx/msw/sound.h b/Externals/wxWidgets3/include/wx/msw/sound.h index d6d3061f7b..f8b1134229 100644 --- a/Externals/wxWidgets3/include/wx/msw/sound.h +++ b/Externals/wxWidgets3/include/wx/msw/sound.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: sound.h 58757 2009-02-08 11:45:59Z VZ $ +// RCS-ID: $Id: sound.h 69178 2011-09-21 15:08:02Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,14 +19,14 @@ class WXDLLIMPEXP_ADV wxSound : public wxSoundBase public: wxSound(); wxSound(const wxString& fileName, bool isResource = false); - wxSound(int size, const wxByte* data); + wxSound(size_t size, const void* data); virtual ~wxSound(); // Create from resource or file bool Create(const wxString& fileName, bool isResource = false); // Create from data - bool Create(int size, const wxByte* data); + bool Create(size_t size, const void* data); bool IsOk() const { return m_data != NULL; } diff --git a/Externals/wxWidgets3/include/wx/msw/spinctrl.h b/Externals/wxWidgets3/include/wx/msw/spinctrl.h index 6e986bf94e..c1c0f7975d 100644 --- a/Externals/wxWidgets3/include/wx/msw/spinctrl.h +++ b/Externals/wxWidgets3/include/wx/msw/spinctrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 22.07.99 -// RCS-ID: $Id: spinctrl.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: spinctrl.h 70799 2012-03-04 00:29:48Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -30,7 +30,7 @@ WX_DEFINE_EXPORTED_ARRAY_PTR(wxSpinCtrl *, wxArraySpins); class WXDLLIMPEXP_CORE wxSpinCtrl : public wxSpinButton { public: - wxSpinCtrl() { } + wxSpinCtrl() { Init(); } wxSpinCtrl(wxWindow *parent, wxWindowID id = wxID_ANY, @@ -41,6 +41,8 @@ public: int min = 0, int max = 100, int initial = 0, const wxString& name = wxT("wxSpinCtrl")) { + Init(); + Create(parent, id, value, pos, size, style, min, max, initial, name); } @@ -143,6 +145,9 @@ protected: bool m_blockEvent; private: + // Common part of all ctors. + void Init(); + DECLARE_DYNAMIC_CLASS(wxSpinCtrl) DECLARE_EVENT_TABLE() wxDECLARE_NO_COPY_CLASS(wxSpinCtrl); diff --git a/Externals/wxWidgets3/include/wx/msw/statusbar.h b/Externals/wxWidgets3/include/wx/msw/statusbar.h index 290fda2c08..c69be90c93 100644 --- a/Externals/wxWidgets3/include/wx/msw/statusbar.h +++ b/Externals/wxWidgets3/include/wx/msw/statusbar.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 04.04.98 -// RCS-ID: $Id: statusbar.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: statusbar.h 70310 2012-01-10 17:01:09Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -76,8 +76,10 @@ protected: // used by DoUpdateStatusText() wxClientDC *m_pDC; +#if wxUSE_TOOLTIPS // the tooltips used when wxSTB_SHOW_TIPS is given wxVector m_tooltips; +#endif private: struct MSWBorders diff --git a/Externals/wxWidgets3/include/wx/msw/textctrl.h b/Externals/wxWidgets3/include/wx/msw/textctrl.h index 0c5dda1db6..cbcf8b772e 100644 --- a/Externals/wxWidgets3/include/wx/msw/textctrl.h +++ b/Externals/wxWidgets3/include/wx/msw/textctrl.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: textctrl.h 65564 2010-09-18 16:26:30Z VZ $ +// RCS-ID: $Id: textctrl.h 68450 2011-07-29 15:11:54Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -198,6 +198,8 @@ protected: virtual void DoSetValue(const wxString &value, int flags = 0); + virtual wxPoint DoPositionToCoords(long pos) const; + // return true if this control has a user-set limit on amount of text (i.e. // the limit is due to a previous call to SetMaxLength() and not built in) bool HasSpaceLimit(unsigned int *len) const; diff --git a/Externals/wxWidgets3/include/wx/msw/textentry.h b/Externals/wxWidgets3/include/wx/msw/textentry.h index 0f5b195092..3ba6dcb2ea 100644 --- a/Externals/wxWidgets3/include/wx/msw/textentry.h +++ b/Externals/wxWidgets3/include/wx/msw/textentry.h @@ -3,7 +3,7 @@ // Purpose: wxMSW-specific wxTextEntry implementation // Author: Vadim Zeitlin // Created: 2007-09-26 -// RCS-ID: $Id: textentry.h 61834 2009-09-05 12:39:12Z JMS $ +// RCS-ID: $Id: textentry.h 68918 2011-08-27 14:11:13Z VZ $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -11,6 +11,8 @@ #ifndef _WX_MSW_TEXTENTRY_H_ #define _WX_MSW_TEXTENTRY_H_ +class wxTextAutoCompleteData; // private class used only by wxTextEntry itself + // ---------------------------------------------------------------------------- // wxTextEntry: common part of wxComboBox and (single line) wxTextCtrl // ---------------------------------------------------------------------------- @@ -18,12 +20,8 @@ class WXDLLIMPEXP_CORE wxTextEntry : public wxTextEntryBase { public: - wxTextEntry() - { -#if wxUSE_OLE - m_enumStrings = NULL; -#endif // wxUSE_OLE - } + wxTextEntry(); + virtual ~wxTextEntry(); // implement wxTextEntryBase pure virtual methods virtual void WriteText(const wxString& text); @@ -46,13 +44,6 @@ public: { DoSetSelection(from, to); } virtual void GetSelection(long *from, long *to) const; - // auto-completion uses COM under Windows so they won't work without - // wxUSE_OLE as OleInitialize() is not called then -#if wxUSE_OLE - virtual bool AutoComplete(const wxArrayString& choices); - virtual bool AutoCompleteFileNames(); -#endif // wxUSE_OLE - virtual bool IsEditable() const; virtual void SetEditable(bool editable); @@ -80,13 +71,29 @@ protected: virtual bool DoSetMargins(const wxPoint& pt); virtual wxPoint DoGetMargins() const; + // auto-completion uses COM under Windows so they won't work without + // wxUSE_OLE as OleInitialize() is not called then +#if wxUSE_OLE + virtual bool DoAutoCompleteStrings(const wxArrayString& choices); + virtual bool DoAutoCompleteFileNames(int flags); + virtual bool DoAutoCompleteCustom(wxTextCompleter *completer); +#endif // wxUSE_OLE + private: // implement this to return the HWND of the EDIT control virtual WXHWND GetEditHWND() const = 0; #if wxUSE_OLE - // enumerator for strings currently used for auto-completion or NULL - class wxIEnumString *m_enumStrings; + // Get the auto-complete object creating it if necessary. Returns NULL if + // creating it failed. + wxTextAutoCompleteData *GetOrCreateCompleter(); + + // Various auto-completion-related stuff, only used if any of AutoComplete() + // methods are called. Use the function above to access it. + wxTextAutoCompleteData *m_autoCompleteData; + + // It needs to call our GetEditableWindow() and GetEditHWND() methods. + friend class wxTextAutoCompleteData; #endif // wxUSE_OLE }; diff --git a/Externals/wxWidgets3/include/wx/msw/tglbtn.h b/Externals/wxWidgets3/include/wx/msw/tglbtn.h index ec15dea83a..7711f70bb6 100644 --- a/Externals/wxWidgets3/include/wx/msw/tglbtn.h +++ b/Externals/wxWidgets3/include/wx/msw/tglbtn.h @@ -5,7 +5,7 @@ // Author: John Norris, minor changes by Axel Schlueter // Modified by: // Created: 08.02.01 -// RCS-ID: $Id: tglbtn.h 66992 2011-02-22 13:25:30Z VZ $ +// RCS-ID: $Id: tglbtn.h 67931 2011-06-14 13:00:42Z VZ $ // Copyright: (c) 2000 Johnny C. Norris II // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,71 +15,11 @@ #include "wx/bitmap.h" -//----------------------------------------------------------------------------- -// wxBitmapToggleButton -//----------------------------------------------------------------------------- - - -class WXDLLIMPEXP_CORE wxBitmapToggleButton: public wxToggleButtonBase -{ -public: - // construction/destruction - wxBitmapToggleButton() { Init(); } - wxBitmapToggleButton(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr) - { - Create(parent, id, label, pos, size, style, validator, name); - } - - // Create the control - bool Create(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr); - - // Get/set the value - void SetValue(bool state); - bool GetValue() const; - - // Set the label - virtual void SetLabel(const wxString& label) { wxControl::SetLabel(label); } - virtual void SetLabel(const wxBitmap& label); - bool Enable(bool enable = true); - -protected: - void Init(); - - wxBitmap m_bitmap; - wxBitmap m_disabledBitmap; - bool m_capturing; - bool m_depressed,m_oldValue; - - void OnPaint(wxPaintEvent &event); - void OnMouse(wxMouseEvent &event); - void OnChar(wxKeyEvent &event); - void OnSize(wxSizeEvent &event); - - virtual wxSize DoGetBestSize() const; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxBitmapToggleButton) -}; - // Checkbox item (single checkbox) class WXDLLIMPEXP_CORE wxToggleButton : public wxToggleButtonBase { public: - wxToggleButton() {} + wxToggleButton() { Init(); } wxToggleButton(wxWindow *parent, wxWindowID id, const wxString& label, @@ -104,23 +44,68 @@ public: virtual void SetValue(bool value); virtual bool GetValue() const ; - virtual void SetLabel(const wxString& label); - virtual bool MSWCommand(WXUINT param, WXWORD id); virtual void Command(wxCommandEvent& event); + virtual State GetNormalState() const; + // returns true if the platform should explicitly apply a theme border virtual bool CanApplyThemeBorder() const { return false; } protected: virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - virtual wxSize DoGetBestSize() const; virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const; + void Init(); + + // current state of the button (when owner-drawn) + bool m_state; + private: DECLARE_DYNAMIC_CLASS_NO_COPY(wxToggleButton) }; +//----------------------------------------------------------------------------- +// wxBitmapToggleButton +//----------------------------------------------------------------------------- + + +class WXDLLIMPEXP_CORE wxBitmapToggleButton: public wxToggleButton +{ +public: + // construction/destruction + wxBitmapToggleButton() {} + wxBitmapToggleButton(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr) + { + Create(parent, id, label, pos, size, style, validator, name); + } + + // Create the control + bool Create(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr); + + // deprecated synonym for SetBitmapLabel() + wxDEPRECATED_INLINE( void SetLabel(const wxBitmap& bitmap), + SetBitmapLabel(bitmap); ) + // prevent virtual function hiding + virtual void SetLabel(const wxString& label) { wxToggleButton::SetLabel(label); } + +private: + DECLARE_DYNAMIC_CLASS(wxBitmapToggleButton) +}; + #endif // _WX_TOGGLEBUTTON_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/timectrl.h b/Externals/wxWidgets3/include/wx/msw/timectrl.h new file mode 100644 index 0000000000..8fbb70196e --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/timectrl.h @@ -0,0 +1,61 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/msw/timectrl.h +// Purpose: wxTimePickerCtrl for Windows. +// Author: Vadim Zeitlin +// Created: 2011-09-22 +// RCS-ID: $Id: timectrl.h 69224 2011-09-29 13:43:15Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MSW_TIMECTRL_H_ +#define _WX_MSW_TIMECTRL_H_ + +// ---------------------------------------------------------------------------- +// wxTimePickerCtrl +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxTimePickerCtrl : public wxTimePickerCtrlBase +{ +public: + // ctors + wxTimePickerCtrl() { } + + wxTimePickerCtrl(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr) + { + Create(parent, id, dt, pos, size, style, validator, name); + } + + bool Create(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr) + { + return MSWCreateDateTimePicker(parent, id, dt, + pos, size, style, + validator, name); + } + + // Override MSW-specific functions used during control creation. + virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; + +protected: + virtual wxLocaleInfo MSWGetFormat() const; + virtual bool MSWAllowsNone() const { return false; } + virtual bool MSWOnDateTimeChange(const tagNMDATETIMECHANGE& dtch); + + wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxTimePickerCtrl); +}; + +#endif // _WX_MSW_TIMECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/toolbar.h b/Externals/wxWidgets3/include/wx/msw/toolbar.h index 9f1c702ee4..1fe458f2aa 100644 --- a/Externals/wxWidgets3/include/wx/msw/toolbar.h +++ b/Externals/wxWidgets3/include/wx/msw/toolbar.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: toolbar.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: toolbar.h 70854 2012-03-10 00:01:09Z RD $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -85,6 +85,17 @@ public: virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, wxWindowMSW *child); #endif // wxHAS_MSW_BACKGROUND_ERASE_HOOK + virtual wxToolBarToolBase *CreateTool(int id, + const wxString& label, + const wxBitmap& bmpNormal, + const wxBitmap& bmpDisabled = wxNullBitmap, + wxItemKind kind = wxITEM_NORMAL, + wxObject *clientData = NULL, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString); + + virtual wxToolBarToolBase *CreateTool(wxControl *control, + const wxString& label); protected: // common part of all ctors void Init(); @@ -103,18 +114,6 @@ protected: virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle); virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle); - virtual wxToolBarToolBase *CreateTool(int id, - const wxString& label, - const wxBitmap& bmpNormal, - const wxBitmap& bmpDisabled, - wxItemKind kind, - wxObject *clientData, - const wxString& shortHelp, - const wxString& longHelp); - - virtual wxToolBarToolBase *CreateTool(wxControl *control, - const wxString& label); - // return the appropriate size and flags for the toolbar control virtual wxSize DoGetBestSize() const; diff --git a/Externals/wxWidgets3/include/wx/msw/toplevel.h b/Externals/wxWidgets3/include/wx/msw/toplevel.h index 48ef335a42..55afcbdb17 100644 --- a/Externals/wxWidgets3/include/wx/msw/toplevel.h +++ b/Externals/wxWidgets3/include/wx/msw/toplevel.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.09.01 -// RCS-ID: $Id: toplevel.h 65556 2010-09-16 09:05:48Z VS $ +// RCS-ID: $Id: toplevel.h 70881 2012-03-12 11:42:49Z JS $ // Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -57,12 +57,10 @@ public: virtual void SetLayoutDirection(wxLayoutDirection dir); -#ifndef __WXWINCE__ - virtual bool SetShape(const wxRegion& region); -#endif // __WXWINCE__ virtual void RequestUserAttention(int flags = wxUSER_ATTENTION_INFO); virtual bool Show(bool show = true); + virtual void Raise(); virtual void ShowWithoutActivating(); virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); @@ -77,6 +75,19 @@ public: virtual bool CanSetTransparent(); + // MSW-specific methods + // -------------------- + + // Return the menu representing the "system" menu of the window. You can + // call wxMenu::AppendWhatever() methods on it but removing items from it + // is in general not a good idea. + // + // The pointer returned by this method belongs to the window and will be + // deleted when the window itself is, do not delete it yourself. May return + // NULL if getting the system menu failed. + wxMenu *MSWGetSystemMenu() const; + + // implementation from now on // -------------------------- @@ -141,8 +152,6 @@ protected: virtual void DoFreeze(); virtual void DoThaw(); - virtual void DoEnable(bool enable); - // helper of SetIcons(): calls gets the icon with the size specified by the // given system metrics (SM_C{X|Y}[SM]ICON) from the bundle and sets it // using WM_SETICON with the specified wParam (ICOM_SMALL or ICON_BIG); @@ -170,7 +179,16 @@ protected: bool m_fsIsMaximized; bool m_fsIsShowing; - // the last focused child: we restore focus to it on activation + // Save the current focus to m_winLastFocused if we're not iconized (the + // focus is always NULL when we're iconized). + void DoSaveLastFocus(); + + // Restore focus to m_winLastFocused if possible and needed. + void DoRestoreLastFocus(); + + // The last focused child: we remember it when we're deactivated and + // restore focus to it when we're activated (this is done here) or restored + // from iconic state (done by wxFrame). wxWindow *m_winLastFocused; #if defined(__SMARTPHONE__) && defined(__WXWINCE__) @@ -214,6 +232,10 @@ private: void* m_activateInfo; #endif + // The system menu: initially NULL but can be set (once) by + // MSWGetSystemMenu(). Owned by this window. + wxMenu *m_menuSystem; + DECLARE_EVENT_TABLE() wxDECLARE_NO_COPY_CLASS(wxTopLevelWindowMSW); }; diff --git a/Externals/wxWidgets3/include/wx/msw/webview_ie.h b/Externals/wxWidgets3/include/wx/msw/webview_ie.h new file mode 100644 index 0000000000..62b9a49a01 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/webview_ie.h @@ -0,0 +1,518 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/msw/webviewie.h +// Purpose: wxMSW IE wxWebView backend +// Author: Marianne Gagnon +// Id: $Id: webview_ie.h 70499 2012-02-02 20:32:08Z SJL $ +// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef wxWebViewIE_H +#define wxWebViewIE_H + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__) + +#include "wx/control.h" +#include "wx/webview.h" +#include "wx/msw/ole/automtn.h" +#include "wx/msw/ole/activex.h" +#include "wx/msw/ole/oleutils.h" +#include "wx/msw/wrapwin.h" +#include "wx/msw/missing.h" +#include "wx/sharedptr.h" +#include "wx/vector.h" + +/* Classes and definitions from urlmon.h vary in their + * completeness between compilers and versions of compilers. + * We implement our own versions here which should work + * for all compilers. The definitions are taken from the + * mingw-w64 headers which are public domain. + */ + +#ifndef REFRESH_NORMAL +#define REFRESH_NORMAL 0 +#endif + +#ifndef REFRESH_COMPLETELY +#define REFRESH_COMPLETELY 3 +#endif + +typedef enum __wxMIDL_IBindStatusCallback_0006 +{ + wxBSCF_FIRSTDATANOTIFICATION = 0x1, + wxBSCF_INTERMEDIATEDATANOTIFICATION = 0x2, + wxBSCF_LASTDATANOTIFICATION = 0x4, + wxBSCF_DATAFULLYAVAILABLE = 0x8, + wxBSCF_AVAILABLEDATASIZEUNKNOWN = 0x10 +} wxBSCF; + +EXTERN_C const IID CLSID_FileProtocol; + +typedef struct _tagwxBINDINFO +{ + ULONG cbSize; + LPWSTR szExtraInfo; + STGMEDIUM stgmedData; + DWORD grfBindInfoF; + DWORD dwBindVerb; + LPWSTR szCustomVerb; + DWORD cbstgmedData; + DWORD dwOptions; + DWORD dwOptionsFlags; + DWORD dwCodePage; + SECURITY_ATTRIBUTES securityAttributes; + IID iid; + IUnknown *pUnk; + DWORD dwReserved; +} wxBINDINFO; + +typedef struct _tagwxPROTOCOLDATA +{ + DWORD grfFlags; + DWORD dwState; + LPVOID pData; + ULONG cbData; +} wxPROTOCOLDATA; + +class wxIInternetBindInfo : public IUnknown +{ +public: + virtual HRESULT wxSTDCALL GetBindInfo(DWORD *grfBINDF,wxBINDINFO *pbindinfo) = 0; + virtual HRESULT wxSTDCALL GetBindString(ULONG ulStringType,LPOLESTR *ppwzStr, + ULONG cEl,ULONG *pcElFetched) = 0; +}; + +class wxIInternetProtocolSink : public IUnknown +{ +public: + virtual HRESULT wxSTDCALL Switch(wxPROTOCOLDATA *pProtocolData) = 0; + virtual HRESULT wxSTDCALL ReportProgress(ULONG ulStatusCode, + LPCWSTR szStatusText) = 0; + virtual HRESULT wxSTDCALL ReportData(DWORD grfBSCF,ULONG ulProgress, + ULONG ulProgressMax) = 0; + virtual HRESULT wxSTDCALL ReportResult(HRESULT hrResult,DWORD dwError, + LPCWSTR szResult) = 0; +}; + +class wxIInternetProtocolRoot : public IUnknown +{ +public: + virtual HRESULT wxSTDCALL Start(LPCWSTR szUrl,wxIInternetProtocolSink *pOIProtSink, + wxIInternetBindInfo *pOIBindInfo,DWORD grfPI, + HANDLE_PTR dwReserved) = 0; + virtual HRESULT wxSTDCALL Continue(wxPROTOCOLDATA *pProtocolData) = 0; + virtual HRESULT wxSTDCALL Abort(HRESULT hrReason,DWORD dwOptions) = 0; + virtual HRESULT wxSTDCALL Terminate(DWORD dwOptions) = 0; + virtual HRESULT wxSTDCALL Suspend(void) = 0; + virtual HRESULT wxSTDCALL Resume(void) = 0; +}; + + +class wxIInternetProtocol : public wxIInternetProtocolRoot +{ +public: + virtual HRESULT wxSTDCALL Read(void *pv,ULONG cb,ULONG *pcbRead) = 0; + virtual HRESULT wxSTDCALL Seek(LARGE_INTEGER dlibMove,DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition) = 0; + virtual HRESULT wxSTDCALL LockRequest(DWORD dwOptions) = 0; + virtual HRESULT wxSTDCALL UnlockRequest(void) = 0; +}; + + +class wxIInternetSession : public IUnknown +{ + public: + virtual HRESULT wxSTDCALL RegisterNameSpace(IClassFactory *pCF,REFCLSID rclsid, + LPCWSTR pwzProtocol, + ULONG cPatterns, + const LPCWSTR *ppwzPatterns, + DWORD dwReserved) = 0; + virtual HRESULT wxSTDCALL UnregisterNameSpace(IClassFactory *pCF, + LPCWSTR pszProtocol) = 0; + virtual HRESULT wxSTDCALL RegisterMimeFilter(IClassFactory *pCF, + REFCLSID rclsid, + LPCWSTR pwzType) = 0; + virtual HRESULT wxSTDCALL UnregisterMimeFilter(IClassFactory *pCF, + LPCWSTR pwzType) = 0; + virtual HRESULT wxSTDCALL CreateBinding(LPBC pBC,LPCWSTR szUrl, + IUnknown *pUnkOuter,IUnknown **ppUnk, + wxIInternetProtocol **ppOInetProt, + DWORD dwOption) = 0; + virtual HRESULT wxSTDCALL SetSessionOption(DWORD dwOption,LPVOID pBuffer, + DWORD dwBufferLength, + DWORD dwReserved) = 0; + virtual HRESULT wxSTDCALL GetSessionOption(DWORD dwOption,LPVOID pBuffer, + DWORD *pdwBufferLength, + DWORD dwReserved) = 0; +}; + +/* END OF URLMON.H implementation */ + +/* Same goes for the mshtmhst.h, these are also taken + * from mingw-w64 headers. + */ + +typedef enum _tagwxDOCHOSTUIFLAG +{ + DOCHOSTUIFLAG_DIALOG = 0x1, + DOCHOSTUIFLAG_DISABLE_HELP_MENU = 0x2, + DOCHOSTUIFLAG_NO3DBORDER = 0x4, + DOCHOSTUIFLAG_SCROLL_NO = 0x8, + DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = 0x10, + DOCHOSTUIFLAG_OPENNEWWIN = 0x20, + DOCHOSTUIFLAG_DISABLE_OFFSCREEN = 0x40, + DOCHOSTUIFLAG_FLAT_SCROLLBAR = 0x80, + DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = 0x100, + DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = 0x200, + DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY = 0x400, + DOCHOSTUIFLAG_CODEPAGELINKEDFONTS = 0x800, + DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 = 0x1000, + DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8 = 0x2000, + DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE = 0x4000, + DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION = 0x10000, + DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION = 0x20000, + DOCHOSTUIFLAG_THEME = 0x40000, + DOCHOSTUIFLAG_NOTHEME = 0x80000, + DOCHOSTUIFLAG_NOPICS = 0x100000, + DOCHOSTUIFLAG_NO3DOUTERBORDER = 0x200000, + DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP = 0x400000, + DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK = 0x800000, + DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL = 0x1000000 +} DOCHOSTUIFLAG; + +typedef struct _tagwxDOCHOSTUIINFO +{ + ULONG cbSize; + DWORD dwFlags; + DWORD dwDoubleClick; + OLECHAR *pchHostCss; + OLECHAR *pchHostNS; +} DOCHOSTUIINFO; + +class wxIDocHostUIHandler : public IUnknown +{ +public: + virtual HRESULT wxSTDCALL ShowContextMenu(DWORD dwID, POINT *ppt, + IUnknown *pcmdtReserved, + IDispatch *pdispReserved) = 0; + + virtual HRESULT wxSTDCALL GetHostInfo(DOCHOSTUIINFO *pInfo) = 0; + + virtual HRESULT wxSTDCALL ShowUI(DWORD dwID, + IOleInPlaceActiveObject *pActiveObject, + IOleCommandTarget *pCommandTarget, + IOleInPlaceFrame *pFrame, + IOleInPlaceUIWindow *pDoc) = 0; + + virtual HRESULT wxSTDCALL HideUI(void) = 0; + + virtual HRESULT wxSTDCALL UpdateUI(void) = 0; + + virtual HRESULT wxSTDCALL EnableModeless(BOOL fEnable) = 0; + + virtual HRESULT wxSTDCALL OnDocWindowActivate(BOOL fActivate) = 0; + + virtual HRESULT wxSTDCALL OnFrameWindowActivate(BOOL fActivate) = 0; + + virtual HRESULT wxSTDCALL ResizeBorder(LPCRECT prcBorder, + IOleInPlaceUIWindow *pUIWindow, + BOOL fRameWindow) = 0; + + virtual HRESULT wxSTDCALL TranslateAccelerator(LPMSG lpMsg, + const GUID *pguidCmdGroup, + DWORD nCmdID) = 0; + + virtual HRESULT wxSTDCALL GetOptionKeyPath(LPOLESTR *pchKey, + DWORD dw) = 0; + + virtual HRESULT wxSTDCALL GetDropTarget(IDropTarget *pDropTarget, + IDropTarget **ppDropTarget) = 0; + + virtual HRESULT wxSTDCALL GetExternal(IDispatch **ppDispatch) = 0; + + virtual HRESULT wxSTDCALL TranslateUrl(DWORD dwTranslate, + OLECHAR *pchURLIn, + OLECHAR **ppchURLOut) = 0; + + virtual HRESULT wxSTDCALL FilterDataObject(IDataObject *pDO, + IDataObject **ppDORet) = 0; +}; + +/* END OF MSHTMHST.H implementation */ + +struct IHTMLDocument2; +class wxFSFile; +class ClassFactory; +class wxIEContainer; +class DocHostUIHandler; + +class WXDLLIMPEXP_WEBVIEW wxWebViewIE : public wxWebView +{ +public: + + wxWebViewIE() {} + + wxWebViewIE(wxWindow* parent, + wxWindowID id, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxWebViewNameStr) + { + Create(parent, id, url, pos, size, style, name); + } + + ~wxWebViewIE(); + + bool Create(wxWindow* parent, + wxWindowID id, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxWebViewNameStr); + + virtual void LoadURL(const wxString& url); + virtual void LoadHistoryItem(wxSharedPtr item); + virtual wxVector > GetBackwardHistory(); + virtual wxVector > GetForwardHistory(); + + virtual bool CanGoForward() const; + virtual bool CanGoBack() const; + virtual void GoBack(); + virtual void GoForward(); + virtual void ClearHistory(); + virtual void EnableHistory(bool enable = true); + virtual void Stop(); + virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT); + + virtual wxString GetPageSource() const; + virtual wxString GetPageText() const; + + virtual bool IsBusy() const; + virtual wxString GetCurrentURL() const; + virtual wxString GetCurrentTitle() const; + + virtual void SetZoomType(wxWebViewZoomType); + virtual wxWebViewZoomType GetZoomType() const; + virtual bool CanSetZoomType(wxWebViewZoomType) const; + + virtual void Print(); + + virtual void SetPage(const wxString& html, const wxString& baseUrl); + + virtual wxWebViewZoom GetZoom() const; + virtual void SetZoom(wxWebViewZoom zoom); + + //Clipboard functions + virtual bool CanCut() const; + virtual bool CanCopy() const; + virtual bool CanPaste() const; + virtual void Cut(); + virtual void Copy(); + virtual void Paste(); + + //Undo / redo functionality + virtual bool CanUndo() const; + virtual bool CanRedo() const; + virtual void Undo(); + virtual void Redo(); + + //Editing functions + virtual void SetEditable(bool enable = true); + virtual bool IsEditable() const; + + //Selection + virtual void SelectAll(); + virtual bool HasSelection() const; + virtual void DeleteSelection(); + virtual wxString GetSelectedText() const; + virtual wxString GetSelectedSource() const; + virtual void ClearSelection(); + + virtual void RunScript(const wxString& javascript); + + //Virtual Filesystem Support + virtual void RegisterHandler(wxSharedPtr handler); + + // ---- IE-specific methods + + // FIXME: I seem to be able to access remote webpages even in offline mode... + bool IsOfflineMode(); + void SetOfflineMode(bool offline); + + wxWebViewZoom GetIETextZoom() const; + void SetIETextZoom(wxWebViewZoom level); + + wxWebViewZoom GetIEOpticalZoom() const; + void SetIEOpticalZoom(wxWebViewZoom level); + + void onActiveXEvent(wxActiveXEvent& evt); + void onEraseBg(wxEraseEvent&) {} + + DECLARE_EVENT_TABLE(); + +private: + wxIEContainer* m_container; + wxAutomationObject m_ie; + IWebBrowser2* m_webBrowser; + DWORD m_dwCookie; + DocHostUIHandler* m_uiHandler; + + //We store the current zoom type; + wxWebViewZoomType m_zoomType; + + /** The "Busy" property of IWebBrowser2 does not always return busy when + * we'd want it to; this variable may be set to true in cases where the + * Busy property is false but should be true. + */ + bool m_isBusy; + //We manage our own history, the history list contains the history items + //which are added as documentcomplete events arrive, unless we are loading + //an item from the history. The position is stored as an int, and reflects + //where we are in the history list. + wxVector > m_historyList; + wxVector m_factories; + int m_historyPosition; + bool m_historyLoadingFromList; + bool m_historyEnabled; + + //Generic helper functions for IHtmlDocument commands + bool CanExecCommand(wxString command) const; + void ExecCommand(wxString command); + IHTMLDocument2* GetDocument() const; + //Toggles control features see INTERNETFEATURELIST for values. + bool EnableControlFeature(long flag, bool enable = true); + + wxDECLARE_DYNAMIC_CLASS(wxWebViewIE); +}; + +class VirtualProtocol : public wxIInternetProtocol +{ +protected: + wxIInternetProtocolSink* m_protocolSink; + wxString m_html; + VOID * fileP; + + wxFSFile* m_file; + wxSharedPtr m_handler; + +public: + VirtualProtocol(wxSharedPtr handler); + ~VirtualProtocol() {} + + //IUnknown + DECLARE_IUNKNOWN_METHODS; + + //IInternetProtocolRoot + HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason), + DWORD WXUNUSED(dwOptions)) + { return E_NOTIMPL; } + HRESULT STDMETHODCALLTYPE Continue(wxPROTOCOLDATA *WXUNUSED(pProtocolData)) + { return S_OK; } + HRESULT STDMETHODCALLTYPE Resume() { return S_OK; } + HRESULT STDMETHODCALLTYPE Start(LPCWSTR szUrl, + wxIInternetProtocolSink *pOIProtSink, + wxIInternetBindInfo *pOIBindInfo, + DWORD grfPI, + HANDLE_PTR dwReserved); + HRESULT STDMETHODCALLTYPE Suspend() { return S_OK; } + HRESULT STDMETHODCALLTYPE Terminate(DWORD WXUNUSED(dwOptions)) { return S_OK; } + + //IInternetProtocol + HRESULT STDMETHODCALLTYPE LockRequest(DWORD WXUNUSED(dwOptions)) + { return S_OK; } + HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead); + HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER WXUNUSED(dlibMove), + DWORD WXUNUSED(dwOrigin), + ULARGE_INTEGER* WXUNUSED(plibNewPosition)) + { return E_FAIL; } + HRESULT STDMETHODCALLTYPE UnlockRequest() { return S_OK; } +}; + +class ClassFactory : public IClassFactory +{ +public: + ClassFactory(wxSharedPtr handler) : m_handler(handler) {} + + //IClassFactory + HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter, + REFIID riid, void** ppvObject); + HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock); + + //IUnknown + DECLARE_IUNKNOWN_METHODS; + +private: + wxSharedPtr m_handler; +}; + +class wxIEContainer : public wxActiveXContainer +{ +public: + wxIEContainer(wxWindow *parent, REFIID iid, IUnknown *pUnk, DocHostUIHandler* uiHandler = NULL); + virtual ~wxIEContainer(); + virtual bool QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc); +private: + DocHostUIHandler* m_uiHandler; +}; + +class DocHostUIHandler : public wxIDocHostUIHandler +{ +public: + DocHostUIHandler() {}; + ~DocHostUIHandler() {}; + virtual HRESULT wxSTDCALL ShowContextMenu(DWORD dwID, POINT *ppt, + IUnknown *pcmdtReserved, + IDispatch *pdispReserved); + + virtual HRESULT wxSTDCALL GetHostInfo(DOCHOSTUIINFO *pInfo); + + virtual HRESULT wxSTDCALL ShowUI(DWORD dwID, + IOleInPlaceActiveObject *pActiveObject, + IOleCommandTarget *pCommandTarget, + IOleInPlaceFrame *pFrame, + IOleInPlaceUIWindow *pDoc); + + virtual HRESULT wxSTDCALL HideUI(void); + + virtual HRESULT wxSTDCALL UpdateUI(void); + + virtual HRESULT wxSTDCALL EnableModeless(BOOL fEnable); + + virtual HRESULT wxSTDCALL OnDocWindowActivate(BOOL fActivate); + + virtual HRESULT wxSTDCALL OnFrameWindowActivate(BOOL fActivate); + + virtual HRESULT wxSTDCALL ResizeBorder(LPCRECT prcBorder, + IOleInPlaceUIWindow *pUIWindow, + BOOL fRameWindow); + + virtual HRESULT wxSTDCALL TranslateAccelerator(LPMSG lpMsg, + const GUID *pguidCmdGroup, + DWORD nCmdID); + + virtual HRESULT wxSTDCALL GetOptionKeyPath(LPOLESTR *pchKey, + DWORD dw); + + virtual HRESULT wxSTDCALL GetDropTarget(IDropTarget *pDropTarget, + IDropTarget **ppDropTarget); + + virtual HRESULT wxSTDCALL GetExternal(IDispatch **ppDispatch); + + virtual HRESULT wxSTDCALL TranslateUrl(DWORD dwTranslate, + OLECHAR *pchURLIn, + OLECHAR **ppchURLOut); + + virtual HRESULT wxSTDCALL FilterDataObject(IDataObject *pDO, + IDataObject **ppDORet); + //IUnknown + DECLARE_IUNKNOWN_METHODS; +}; + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__) + +#endif // wxWebViewIE_H diff --git a/Externals/wxWidgets3/include/wx/msw/webviewhistoryitem_ie.h b/Externals/wxWidgets3/include/wx/msw/webviewhistoryitem_ie.h new file mode 100644 index 0000000000..acfec70014 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/msw/webviewhistoryitem_ie.h @@ -0,0 +1,31 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/msw/webviewhistoryitem.h +// Purpose: wxWebViewHistoryItem header for MSW +// Author: Steven Lamerton +// Id: $Id: webviewhistoryitem_ie.h 69074 2011-09-12 18:35:39Z SJL $ +// Copyright: (c) 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MSW_WEBVIEWHISTORYITEM_H_ +#define _WX_MSW_WEBVIEWHISTORYITEM_H_ + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__) + +class WXDLLIMPEXP_WEBVIEW wxWebViewHistoryItem +{ +public: + wxWebViewHistoryItem(const wxString& url, const wxString& title) : + m_url(url), m_title(title) {} + wxString GetUrl() { return m_url; } + wxString GetTitle() { return m_title; } + +private: + wxString m_url, m_title; +}; + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__) + +#endif // _WX_MSW_WEBVIEWHISTORYITEM_H_ diff --git a/Externals/wxWidgets3/include/wx/msw/wince/setup.h b/Externals/wxWidgets3/include/wx/msw/wince/setup.h index 0f84386008..a22f9ec48f 100644 --- a/Externals/wxWidgets3/include/wx/msw/wince/setup.h +++ b/Externals/wxWidgets3/include/wx/msw/wince/setup.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: setup.h 67062 2011-02-27 12:48:07Z VZ $ +// RCS-ID: $Id: setup.h 69463 2011-10-18 21:57:02Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -201,15 +201,6 @@ // Recommended setting: 0 (this is still work in progress...) #define wxUSE_EXTENDED_RTTI 0 -// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from -// std::list and std::vector, with a compatibility interface, -// and for wxHashMap to be implemented with templates. -// -// Default is 0 -// -// Recommended setting: YMMV -#define wxUSE_STL 0 - // Support for message/error logging. This includes wxLogXXX() functions and // wxLog and derived classes. Don't set this to 0 unless you really know what // you are doing. @@ -261,44 +252,6 @@ // Recommended setting: 1 as setting it to 0 disables many other things #define wxUSE_STREAMS 1 -// This is not a real option but is used as the default value for -// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING. -// -// Currently the Digital Mars and Watcom compilers come without standard C++ -// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have -// them (e.g. from STLPort). -// -// VC++ 5.0 does include standard C++ library headers, however they produce -// many warnings that can't be turned off when compiled at warning level 4. -#if defined(__DMC__) || defined(__WATCOMC__) \ - || (defined(_MSC_VER) && _MSC_VER < 1200) - #define wxUSE_STD_DEFAULT 0 -#else - #define wxUSE_STD_DEFAULT 1 -#endif - -// Use standard C++ streams if 1 instead of wx streams in some places. If -// disabled (default), wx streams are used everywhere and wxWidgets doesn't -// depend on the standard streams library. -// -// Notice that enabling this does not replace wx streams with std streams -// everywhere, in a lot of places wx streams are used no matter what. -// -// Default is 0 -// -// Recommended setting: 1 if you use the standard streams anyhow and so -// dependency on the standard streams library is not a -// problem -#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// Recommended setting: 1 unless you want to ensure your program doesn't use -// the standard C++ library at all. -#define wxUSE_STD_STRING wxUSE_STD_DEFAULT - // Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf. // Note that if the system's implementation does not support positional // parameters, setting this to 1 forces the use of the wxWidgets implementation @@ -314,6 +267,107 @@ // Recommended setting: 1 if you want to support multiple languages #define wxUSE_PRINTF_POS_PARAMS 1 + +// ---------------------------------------------------------------------------- +// Interoperability with the standard library. +// ---------------------------------------------------------------------------- + +// Set wxUSE_STL to 1 to enable maximal interoperability with the standard +// library, even at the cost of backwards compatibility. +// +// Default is 0 +// +// Recommended setting: 0 as the options below already provide a relatively +// good level of interoperability and changing this option arguably isn't worth +// diverging from the official builds of the library. +#define wxUSE_STL 0 + +// This is not a real option but is used as the default value for +// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS. +// +// Currently the Digital Mars and Watcom compilers come without standard C++ +// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have +// them (e.g. from STLPort). +// +// VC++ 5.0 does include standard C++ library headers, however they produce +// many warnings that can't be turned off when compiled at warning level 4. +#if defined(__DMC__) || defined(__WATCOMC__) \ + || (defined(_MSC_VER) && _MSC_VER < 1200) + #define wxUSE_STD_DEFAULT 0 +#else + #define wxUSE_STD_DEFAULT 1 +#endif + +// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<> +// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but +// usually more limited) implementations are used which allows to avoid the +// dependency on the C++ run-time library. +// +// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't +// support using standard containers and that VC6 needs non-default options for +// such build to avoid getting "fatal error C1076: compiler limit : internal +// heap limit reached; use /Zm to specify a higher limit" in its own standard +// headers, so you need to ensure you do increase the heap size before enabling +// this option for this compiler. +// +// Default is 0 for compatibility reasons. +// +// Recommended setting: 1 unless compatibility with the official wxWidgets +// build and/or the existing code is a concern. +#define wxUSE_STD_CONTAINERS 0 + +// Use standard C++ streams if 1 instead of wx streams in some places. If +// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the +// standard streams library. +// +// Notice that enabling this does not replace wx streams with std streams +// everywhere, in a lot of places wx streams are used no matter what. +// +// Default is 1 if compiler supports it. +// +// Recommended setting: 1 if you use the standard streams anyhow and so +// dependency on the standard streams library is not a +// problem +#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT + +// Enable minimal interoperability with the standard C++ string class if 1. +// "Minimal" means that wxString can be constructed from std::string or +// std::wstring but can't be implicitly converted to them. You need to enable +// the option below for the latter. +// +// Default is 1 for most compilers. +// +// Recommended setting: 1 unless you want to ensure your program doesn't use +// the standard C++ library at all. +#define wxUSE_STD_STRING wxUSE_STD_DEFAULT + +// Make wxString as much interchangeable with std::[w]string as possible, in +// particular allow implicit conversion of wxString to either of these classes. +// This comes at a price (or a benefit, depending on your point of view) of not +// allowing implicit conversion to "const char *" and "const wchar_t *". +// +// Because a lot of existing code relies on these conversions, this option is +// disabled by default but can be enabled for your build if you don't care +// about compatibility. +// +// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled. +// +// Recommended setting: 0 to remain compatible with the official builds of +// wxWidgets. +#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL + +// VC++ 4.2 and above allows and but you can't mix +// them. Set this option to 1 to use , 0 to use . +// +// Note that newer compilers (including VC++ 7.1 and later) don't support +// wxUSE_IOSTREAMH == 1 and so will be used anyhow. +// +// Default is 0. +// +// Recommended setting: 0, only set to 1 if you use a really old compiler +#define wxUSE_IOSTREAMH 0 + + // ---------------------------------------------------------------------------- // non GUI features selection // ---------------------------------------------------------------------------- @@ -651,6 +705,34 @@ // Recommended setting: 1 #define wxUSE_STC 1 +// Use wxWidget's web viewing classes +// +// Default is 1 +// +// Recommended setting: 1 +#define wxUSE_WEBVIEW 1 + +// Use the IE wxWebView backend +// +// Default is 1 on MSW +// +// Recommended setting: 1 +#ifdef __WXMSW__ +#define wxUSE_WEBVIEW_IE 1 +#else +#define wxUSE_WEBVIEW_IE 0 +#endif + +// Use the WebKit wxWebView backend +// +// Default is 1 on GTK and OSX +// +// Recommended setting: 1 +#if defined(__WXGTK__) || defined(__WXOSX__) +#define wxUSE_WEBVIEW_WEBKIT 1 +#else +#define wxUSE_WEBVIEW_WEBKIT 0 +#endif // Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced // 2D drawing API. (Still somewhat experimental) @@ -749,6 +831,7 @@ // // Recommended setting: 1 #define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl +#define wxUSE_BANNERWINDOW 1 // wxBannerWindow #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl @@ -784,8 +867,10 @@ #define wxUSE_STATTEXT 1 // wxStaticText #define wxUSE_STATBMP 1 // wxStaticBitmap #define wxUSE_TEXTCTRL 1 // wxTextCtrl +#define wxUSE_TIMEPICKCTRL 1 // wxTimePickerCtrl #define wxUSE_TOGGLEBTN 1 // requires wxButton #define wxUSE_TREECTRL 1 // wxTreeCtrl +#define wxUSE_TREELISTCTRL 1 // wxTreeListCtrl // Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR // below either wxStatusBar95 or a generic wxStatusBar will be used. @@ -1002,6 +1087,14 @@ // Recommended setting: 1 #define wxUSE_NOTIFICATION_MESSAGE 1 +// wxRichToolTip is a customizable tooltip class which has more functionality +// than the stock (but native, unlike this class) wxToolTip. +// +// Default is 1. +// +// Recommended setting: 1 (but can be safely set to 0 if you don't need it) +#define wxUSE_RICHTOOLTIP 1 + // Use wxSashWindow class. // // Default is 1. @@ -1307,28 +1400,15 @@ // to create files in SVG (Scalable Vector Graphics) format. #define wxUSE_SVG 1 -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. +// Should wxDC provide SetTransformMatrix() and related methods? // -// Default is 1. +// Default is 1 but can be set to 0 if this functionality is not used. Notice +// that currently only wxMSW supports this so setting this to 0 doesn't change +// much for non-MSW platforms (although it will still save a few bytes +// probably). // -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows and but you can't mix -// them. Set this option to 1 to use , 0 to use . -// -// Note that newer compilers (including VC++ 7.1 and later) don't support -// wxUSE_IOSTREAMH == 1 and so will be used anyhow. -// -// Default is 0. -// -// Recommended setting: 0, only set to 1 if you use a really old compiler -#define wxUSE_IOSTREAMH 0 +// Recommended setting: 1. +#define wxUSE_DC_TRANSFORM_MATRIX 1 // ---------------------------------------------------------------------------- // image format support diff --git a/Externals/wxWidgets3/include/wx/msw/window.h b/Externals/wxWidgets3/include/wx/msw/window.h index 303aeee24b..afb6df7a60 100644 --- a/Externals/wxWidgets3/include/wx/msw/window.h +++ b/Externals/wxWidgets3/include/wx/msw/window.h @@ -5,7 +5,7 @@ // Modified by: Vadim Zeitlin on 13.05.99: complete refont of message handling, // elimination of Default(), ... // Created: 01/02/97 -// RCS-ID: $Id: window.h 67250 2011-03-20 00:00:29Z VZ $ +// RCS-ID: $Id: window.h 69348 2011-10-09 22:01:57Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -366,7 +366,21 @@ public: bool HandlePower(WXWPARAM wParam, WXLPARAM lParam, bool *vetoed); - // Window procedure + // The main body of common window proc for all wxWindow objects. It tries + // to handle the given message and returns true if it was handled (the + // appropriate return value is then put in result, which must be non-NULL) + // or false if it wasn't. + // + // This function should be overridden in any new code instead of + // MSWWindowProc() even if currently most of the code overrides + // MSWWindowProc() as it had been written before this function was added. + virtual bool MSWHandleMessage(WXLRESULT *result, + WXUINT message, + WXWPARAM wParam, + WXLPARAM lParam); + + // Common Window procedure for all wxWindow objects: forwards to + // MSWHandleMessage() and MSWDefWindowProc() if the message wasn't handled. virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); // Calls an appropriate default window procedure @@ -453,7 +467,13 @@ public: // This should be overridden to return true for the controls which have // themed background that should through their children. Currently only // wxNotebook uses this. - virtual bool MSWHasInheritableBackground() const { return false; } + // + // The base class version already returns true if we have a solid + // background colour that should be propagated to our children. + virtual bool MSWHasInheritableBackground() const + { + return InheritsBackgroundColour(); + } #if !defined(__WXWINCE__) && !defined(__WXUNIVERSAL__) #define wxHAS_MSW_BACKGROUND_ERASE_HOOK @@ -599,6 +619,14 @@ protected: WXWPARAM wParam, WXLPARAM lParam = 0) const; + // Another helper for creating wxKeyEvent for wxEVT_CHAR and related types. + // + // The wParam and lParam here must come from WM_CHAR event parameters, i.e. + // wParam must be a character and not a virtual code. + wxKeyEvent CreateCharEvent(wxEventType evType, + WXWPARAM wParam, + WXLPARAM lParam) const; + // default OnEraseBackground() implementation, return true if we did erase // the background, false otherwise (i.e. the system should erase it) diff --git a/Externals/wxWidgets3/include/wx/msw/wrapwin.h b/Externals/wxWidgets3/include/wx/msw/wrapwin.h index 85ee355f8a..8ddd5fe79e 100644 --- a/Externals/wxWidgets3/include/wx/msw/wrapwin.h +++ b/Externals/wxWidgets3/include/wx/msw/wrapwin.h @@ -3,7 +3,7 @@ // Purpose: Wrapper around , to be included instead of it // Author: Vaclav Slavik // Created: 2003/07/22 -// RCS-ID: $Id: wrapwin.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: wrapwin.h 69784 2011-11-17 16:43:34Z VZ $ // Copyright: (c) 2003 Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -80,6 +80,7 @@ #if (!defined(_MSC_VER) || (_MSC_VER < 1300)) && !defined(__WIN64__) #define UINT_PTR unsigned int #define INT_PTR int + #define HANDLE_PTR unsigned long #define LONG_PTR long #define ULONG_PTR unsigned long #define DWORD_PTR unsigned long diff --git a/Externals/wxWidgets3/include/wx/nonownedwnd.h b/Externals/wxWidgets3/include/wx/nonownedwnd.h index 25e21b670e..03888e4140 100644 --- a/Externals/wxWidgets3/include/wx/nonownedwnd.h +++ b/Externals/wxWidgets3/include/wx/nonownedwnd.h @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2006-12-24 -// RCS-ID: $Id: nonownedwnd.h 54125 2008-06-11 19:17:41Z SC $ +// RCS-ID: $Id: nonownedwnd.h 70813 2012-03-05 13:00:57Z VZ $ // Copyright: (c) 2006 TT-Solutions // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -12,15 +12,103 @@ #ifndef _WX_NONOWNEDWND_H_ #define _WX_NONOWNEDWND_H_ +#include "wx/window.h" + +// Styles that can be used with any wxNonOwnedWindow: +#define wxFRAME_SHAPED 0x0010 // Create a window that is able to be shaped + +class WXDLLIMPEXP_FWD_CORE wxGraphicsPath; + +// ---------------------------------------------------------------------------- +// wxNonOwnedWindow: a window that is not a child window of another one. +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxNonOwnedWindowBase : public wxWindow +{ +public: + // Set the shape of the window to the given region. + // Returns true if the platform supports this feature (and the + // operation is successful.) + bool SetShape(const wxRegion& region) + { + // This style is in fact only needed by wxOSX/Carbon so once we don't + // use this port any more, we could get rid of this requirement, but + // for now you must specify wxFRAME_SHAPED for SetShape() to work on + // all platforms. + wxCHECK_MSG + ( + HasFlag(wxFRAME_SHAPED), false, + wxS("Shaped windows must be created with the wxFRAME_SHAPED style.") + ); + + return region.IsEmpty() ? DoClearShape() : DoSetRegionShape(region); + } + +#if wxUSE_GRAPHICS_CONTEXT + // Set the shape using the specified path. + bool SetShape(const wxGraphicsPath& path) + { + wxCHECK_MSG + ( + HasFlag(wxFRAME_SHAPED), false, + wxS("Shaped windows must be created with the wxFRAME_SHAPED style.") + ); + + return DoSetPathShape(path); + } +#endif // wxUSE_GRAPHICS_CONTEXT + + + // Overridden base class methods. + // ------------------------------ + + virtual void AdjustForParentClientOrigin(int& WXUNUSED(x), int& WXUNUSED(y), + int WXUNUSED(sizeFlags) = 0) const + { + // Non owned windows positions don't need to be adjusted for parent + // client area origin so simply do nothing here. + } + + virtual void InheritAttributes() + { + // Non owned windows don't inherit attributes from their parent window + // (if the parent frame is red, it doesn't mean that all dialogs shown + // by it should be red as well), so don't do anything here neither. + } + +protected: + virtual bool DoClearShape() + { + return false; + } + + virtual bool DoSetRegionShape(const wxRegion& WXUNUSED(region)) + { + return false; + } + +#if wxUSE_GRAPHICS_CONTEXT + virtual bool DoSetPathShape(const wxGraphicsPath& WXUNUSED(path)) + { + return false; + } +#endif // wxUSE_GRAPHICS_CONTEXT +}; + #if defined(__WXDFB__) #include "wx/dfb/nonownedwnd.h" +#elif defined(__WXGTK20__) + #include "wx/gtk/nonownedwnd.h" #elif defined(__WXMAC__) #include "wx/osx/nonownedwnd.h" +#elif defined(__WXMSW__) && !defined(__WXWINCE__) + #include "wx/msw/nonownedwnd.h" #else - // other ports can derive both wxTLW and wxPopupWindow directly - // from wxWindow: - #include "wx/window.h" - typedef wxWindow wxNonOwnedWindow; + // No special class needed in other ports, they can derive both wxTLW and + // wxPopupWindow directly from wxWindow and don't implement SetShape(). + class wxNonOwnedWindow : public wxNonOwnedWindowBase + { + }; #endif #endif // _WX_NONOWNEDWND_H_ diff --git a/Externals/wxWidgets3/include/wx/odcombo.h b/Externals/wxWidgets3/include/wx/odcombo.h index 04dccc0731..6e2d9efb86 100644 --- a/Externals/wxWidgets3/include/wx/odcombo.h +++ b/Externals/wxWidgets3/include/wx/odcombo.h @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: Apr-30-2006 -// RCS-ID: $Id: odcombo.h 66412 2010-12-20 14:54:04Z JMS $ +// RCS-ID: $Id: odcombo.h 68460 2011-07-30 11:30:08Z VZ $ // Copyright: (c) Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -233,15 +233,15 @@ private: // the wxComboCtrl. // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_ADV wxOwnerDrawnComboBox : public wxComboCtrl, - public wxItemContainer +class WXDLLIMPEXP_ADV wxOwnerDrawnComboBox : + public wxWindowWithItems { //friend class wxComboPopupWindow; friend class wxVListBoxComboPopup; public: // ctors and such - wxOwnerDrawnComboBox() : wxComboCtrl() { Init(); } + wxOwnerDrawnComboBox() { Init(); } wxOwnerDrawnComboBox(wxWindow *parent, wxWindowID id, @@ -253,7 +253,6 @@ public: long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr) - : wxComboCtrl() { Init(); @@ -339,8 +338,6 @@ public: virtual bool IsSorted() const { return HasFlag(wxCB_SORT); } - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST - protected: virtual void DoClear(); virtual void DoDeleteOneItem(unsigned int n); diff --git a/Externals/wxWidgets3/include/wx/osx/anybutton.h b/Externals/wxWidgets3/include/wx/osx/anybutton.h new file mode 100644 index 0000000000..9e11031ae8 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/anybutton.h @@ -0,0 +1,59 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: anybutton.h +// Purpose: wxAnyButton class +// Author: Stefan Csomor +// Created: 1998-01-01 (extracted from button.h) +// RCS-ID: $Id: anybutton.h 67931 2011-06-14 13:00:42Z VZ $ +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_OSX_ANYBUTTON_H_ +#define _WX_OSX_ANYBUTTON_H_ + +// Any button +class WXDLLIMPEXP_CORE wxAnyButton : public wxAnyButtonBase +{ +public: + wxAnyButton() {} + + static wxSize GetDefaultSize(); + + virtual void SetLabel(const wxString& label); + +protected: + virtual wxSize DoGetBestSize() const ; + + void OnEnterWindow( wxMouseEvent& event); + void OnLeaveWindow( wxMouseEvent& event); + + virtual wxBitmap DoGetBitmap(State which) const; + virtual void DoSetBitmap(const wxBitmap& bitmap, State which); + virtual void DoSetBitmapPosition(wxDirection dir); + + virtual void DoSetBitmapMargins(int x, int y) + { + m_marginX = x; + m_marginY = y; + InvalidateBestSize(); + } + +#if wxUSE_MARKUP && wxOSX_USE_COCOA + virtual bool DoSetLabelMarkup(const wxString& markup); +#endif // wxUSE_MARKUP && wxOSX_USE_COCOA + + + // the margins around the bitmap + int m_marginX; + int m_marginY; + + // the bitmaps for the different state of the buttons, all of them may be + // invalid and the button only shows a bitmap at all if State_Normal bitmap + // is valid + wxBitmap m_bitmaps[State_Max]; + + wxDECLARE_NO_COPY_CLASS(wxAnyButton); + DECLARE_EVENT_TABLE() +}; + +#endif // _WX_OSX_ANYBUTTON_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/app.h b/Externals/wxWidgets3/include/wx/osx/app.h index 74ff369b34..3814c79462 100644 --- a/Externals/wxWidgets3/include/wx/osx/app.h +++ b/Externals/wxWidgets3/include/wx/osx/app.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: app.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: app.h 68617 2011-08-09 22:17:12Z DS $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -122,7 +122,10 @@ public: virtual short MacHandleAEQuit(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ; virtual short MacHandleAERApp(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ; #endif - // in response of an open-document apple event + // in response of an openFiles message with Cocoa and an + // open-document apple event with Carbon + virtual void MacOpenFiles(const wxArrayString &fileNames) ; + // called by MacOpenFiles for each file. virtual void MacOpenFile(const wxString &fileName) ; // in response of a get-url apple event virtual void MacOpenURL(const wxString &url) ; diff --git a/Externals/wxWidgets3/include/wx/osx/button.h b/Externals/wxWidgets3/include/wx/osx/button.h index dad3e4cc05..a9a7abbd99 100644 --- a/Externals/wxWidgets3/include/wx/osx/button.h +++ b/Externals/wxWidgets3/include/wx/osx/button.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: button.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: button.h 67931 2011-06-14 13:00:42Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -41,8 +41,6 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr); - static wxSize GetDefaultSize(); - virtual void SetLabel(const wxString& label); virtual wxWindow *SetDefault(); virtual void Command(wxCommandEvent& event); @@ -52,38 +50,7 @@ public: virtual bool OSXHandleClicked( double timestampsec ); protected: - virtual wxSize DoGetBestSize() const ; - - void OnEnterWindow( wxMouseEvent& event); - void OnLeaveWindow( wxMouseEvent& event); - - virtual wxBitmap DoGetBitmap(State which) const; - virtual void DoSetBitmap(const wxBitmap& bitmap, State which); - virtual void DoSetBitmapPosition(wxDirection dir); - - virtual void DoSetBitmapMargins(int x, int y) - { - m_marginX = x; - m_marginY = y; - InvalidateBestSize(); - } - -#if wxUSE_MARKUP && wxOSX_USE_COCOA - virtual bool DoSetLabelMarkup(const wxString& markup); -#endif // wxUSE_MARKUP && wxOSX_USE_COCOA - - - // the margins around the bitmap - int m_marginX; - int m_marginY; - - // the bitmaps for the different state of the buttons, all of them may be - // invalid and the button only shows a bitmap at all if State_Normal bitmap - // is valid - wxBitmap m_bitmaps[State_Max]; - DECLARE_DYNAMIC_CLASS(wxButton) - DECLARE_EVENT_TABLE() }; // OS X specific class, not part of public wx API diff --git a/Externals/wxWidgets3/include/wx/osx/carbon/dataview.h b/Externals/wxWidgets3/include/wx/osx/carbon/dataview.h index 056a2a895c..e4dfeb2940 100644 --- a/Externals/wxWidgets3/include/wx/osx/carbon/dataview.h +++ b/Externals/wxWidgets3/include/wx/osx/carbon/dataview.h @@ -406,6 +406,8 @@ public: // virtual wxDataViewItem GetCurrentItem() const; virtual void SetCurrentItem(const wxDataViewItem& item); + virtual wxDataViewColumn *GetCurrentColumn() const; + virtual int GetSelectedItemsCount() const; virtual int GetSelections(wxDataViewItemArray& sel) const; virtual bool IsSelected (wxDataViewItem const& item) const; virtual void Select (wxDataViewItem const& item); @@ -427,6 +429,8 @@ public: virtual void SetRowHeight(wxDataViewItem const& item, unsigned int height); virtual void OnSize (); + virtual void StartEditor( const wxDataViewItem & item, unsigned int column ); + // // other methods // diff --git a/Externals/wxWidgets3/include/wx/osx/carbon/evtloop.h b/Externals/wxWidgets3/include/wx/osx/carbon/evtloop.h index 2811e5c8c8..c327fff427 100644 --- a/Externals/wxWidgets3/include/wx/osx/carbon/evtloop.h +++ b/Externals/wxWidgets3/include/wx/osx/carbon/evtloop.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2006-01-12 -// RCS-ID: $Id: evtloop.h 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: evtloop.h 68302 2011-07-19 17:56:57Z SC $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -20,6 +20,8 @@ class WXDLLIMPEXP_CORE wxGUIEventLoop : public wxCFEventLoop public: wxGUIEventLoop(); + virtual void WakeUp(); + protected: virtual int DoDispatchTimeout(unsigned long timeout); diff --git a/Externals/wxWidgets3/include/wx/osx/carbon/region.h b/Externals/wxWidgets3/include/wx/osx/carbon/region.h index 22ae118508..e15ca339d8 100644 --- a/Externals/wxWidgets3/include/wx/osx/carbon/region.h +++ b/Externals/wxWidgets3/include/wx/osx/carbon/region.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: region.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: region.h 69459 2011-10-18 21:56:40Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,12 +17,13 @@ class WXDLLIMPEXP_CORE wxRegion : public wxRegionWithCombine { public: + wxRegion() { } wxRegion(long x, long y, long w, long h); wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight); wxRegion(const wxRect& rect); wxRegion( WXHRGN hRegion ); wxRegion(size_t n, const wxPoint *points, wxPolygonFillMode fillStyle = wxODDEVEN_RULE ); - wxRegion(); +#if wxUSE_IMAGE wxRegion(const wxBitmap& bmp) { Union(bmp); @@ -32,6 +33,7 @@ public: { Union(bmp, transColour, tolerance); } +#endif virtual ~wxRegion(); diff --git a/Externals/wxWidgets3/include/wx/osx/carbon/statbmp.h b/Externals/wxWidgets3/include/wx/osx/carbon/statbmp.h index 6d378e2d49..4ec79b1054 100644 --- a/Externals/wxWidgets3/include/wx/osx/carbon/statbmp.h +++ b/Externals/wxWidgets3/include/wx/osx/carbon/statbmp.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: statbmp.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: statbmp.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -39,8 +39,8 @@ class WXDLLIMPEXP_CORE wxStaticBitmap: public wxStaticBitmapBase virtual void SetBitmap(const wxBitmap& bitmap); - virtual void Command(wxCommandEvent& WXUNUSED(event)) {}; - virtual void ProcessCommand(wxCommandEvent& WXUNUSED(event)) {}; + virtual void Command(wxCommandEvent& WXUNUSED(event)) {} + virtual void ProcessCommand(wxCommandEvent& WXUNUSED(event)) {} void OnPaint( wxPaintEvent &event ) ; wxBitmap GetBitmap() const { return m_bitmap; } diff --git a/Externals/wxWidgets3/include/wx/osx/chkconf.h b/Externals/wxWidgets3/include/wx/osx/chkconf.h index 98446dc66f..211411c961 100644 --- a/Externals/wxWidgets3/include/wx/osx/chkconf.h +++ b/Externals/wxWidgets3/include/wx/osx/chkconf.h @@ -4,7 +4,7 @@ * Author: Vadim Zeitlin * Modified by: * Created: 2005-04-05 (extracted from wx/chkconf.h) - * RCS-ID: $Id: chkconf.h 66955 2011-02-18 18:44:43Z SC $ + * RCS-ID: $Id: chkconf.h 67497 2011-04-15 19:18:34Z DS $ * Copyright: (c) 2005 Vadim Zeitlin * Licence: wxWindows licence */ @@ -107,4 +107,4 @@ #include "wx/osx/cocoa/chkconf.h" #endif -#endif // _WX_OSX_CHKCONF_H_ +#endif /* _WX_OSX_CHKCONF_H_ */ diff --git a/Externals/wxWidgets3/include/wx/osx/cocoa/dataview.h b/Externals/wxWidgets3/include/wx/osx/cocoa/dataview.h index 335bce5ad7..0859b2dbae 100644 --- a/Externals/wxWidgets3/include/wx/osx/cocoa/dataview.h +++ b/Externals/wxWidgets3/include/wx/osx/cocoa/dataview.h @@ -474,6 +474,8 @@ public: // virtual wxDataViewItem GetCurrentItem() const; virtual void SetCurrentItem(const wxDataViewItem& item); + virtual wxDataViewColumn *GetCurrentColumn() const; + virtual int GetSelectedItemsCount() const; virtual int GetSelections(wxDataViewItemArray& sel) const; virtual bool IsSelected(const wxDataViewItem& item) const; virtual void Select(const wxDataViewItem& item); @@ -496,6 +498,8 @@ public: wxDataViewColumn*& columnPtr) const; virtual void SetRowHeight(const wxDataViewItem& item, unsigned int height); virtual void OnSize(); + + virtual void StartEditor( const wxDataViewItem & item, unsigned int column ); // drag & drop helper methods wxDataFormat GetDnDDataFormat(wxDataObjectComposite* dataObjects); diff --git a/Externals/wxWidgets3/include/wx/osx/cocoa/evtloop.h b/Externals/wxWidgets3/include/wx/osx/cocoa/evtloop.h index d3ae6c76d1..4dae4c2184 100644 --- a/Externals/wxWidgets3/include/wx/osx/cocoa/evtloop.h +++ b/Externals/wxWidgets3/include/wx/osx/cocoa/evtloop.h @@ -3,7 +3,7 @@ // Purpose: declaration of wxGUIEventLoop for wxOSX/Cocoa // Author: Vadim Zeitlin // Created: 2008-12-28 -// RCS-ID: $Id: evtloop.h 67129 2011-03-05 12:21:20Z SC $ +// RCS-ID: $Id: evtloop.h 68301 2011-07-19 16:17:44Z SC $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -21,6 +21,8 @@ public: void EndModalSession(); + virtual void WakeUp(); + protected: virtual int DoDispatchTimeout(unsigned long timeout); @@ -31,7 +33,12 @@ protected: virtual CFRunLoopRef CFGetCurrentRunLoop() const; void* m_modalSession; + + wxWindow* m_modalWindow; + WXWindow m_dummyWindow; + + int m_modalNestedLevel; }; #endif // _WX_OSX_COCOA_EVTLOOP_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/cocoa/private.h b/Externals/wxWidgets3/include/wx/osx/cocoa/private.h index 9449772324..0e4a19ac8c 100644 --- a/Externals/wxWidgets3/include/wx/osx/cocoa/private.h +++ b/Externals/wxWidgets3/include/wx/osx/cocoa/private.h @@ -6,7 +6,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: private.h 67233 2011-03-18 15:45:51Z SC $ +// RCS-ID: $Id: private.h 70863 2012-03-10 13:13:51Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -145,13 +145,13 @@ public : virtual unsigned int draggingUpdated(void* sender, WXWidget slf, void* _cmd); virtual bool performDragOperation(void* sender, WXWidget slf, void* _cmd); virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd); + virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd); virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd); virtual void insertText(NSString* text, WXWidget slf, void* _cmd); virtual bool performKeyEquivalent(WX_NSEvent event, WXWidget slf, void* _cmd); virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd); virtual bool becomeFirstResponder(WXWidget slf, void* _cmd); virtual bool resignFirstResponder(WXWidget slf, void* _cmd); - virtual void resetCursorRects(WXWidget slf, void* _cmd); virtual bool isFlipped(WXWidget slf, void* _cmd); virtual void drawRect(void* rect, WXWidget slf, void* _cmd); @@ -239,6 +239,8 @@ public : virtual void SetModified(bool modified); virtual bool IsModified() const; + virtual void SetRepresentedFilename(const wxString& filename); + wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; } CGWindowLevel GetWindowLevel() const { return m_macWindowLevel; } @@ -352,6 +354,21 @@ protected : - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo; @end + // This interface must be exported in shared 64 bit multilib build but + // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1) + // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit + // builds but seems to be unnecessary there so to avoid the expense of a + // configure check verifying if this does work or not with the current + // compiler we just only use it for 64 bit builds where this is always + // supported. + // + // NB: Currently this is the only place where we need to export an + // interface but if we need to do it elsewhere we should define a + // WXEXPORT_OBJC macro once and reuse it in all places it's needed + // instead of duplicating this preprocessor check. +#ifdef __LP64__ + WXEXPORT +#endif // 64 bit builds @interface wxNSAppController : NSObject wxOSX_10_6_AND_LATER() { } diff --git a/Externals/wxWidgets3/include/wx/osx/cocoa/private/date.h b/Externals/wxWidgets3/include/wx/osx/cocoa/private/date.h new file mode 100644 index 0000000000..09624ab3f9 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/cocoa/private/date.h @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/osx/cocoa/private/date.h +// Purpose: NSDate-related helpers +// Author: Vadim Zeitlin +// Created: 2011-12-19 +// RCS-ID: $Id: date.h 70070 2011-12-20 21:27:09Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_OSX_COCOA_PRIVATE_DATE_H_ +#define _WX_OSX_COCOA_PRIVATE_DATE_H_ + +#include "wx/datetime.h" + +namespace wxOSXImpl +{ + +// Functions to convert between NSDate and wxDateTime. + +// Returns an NSDate corresponding to the given wxDateTime which can be invalid +// (in which case nil is returned). +inline NSDate* NSDateFromWX(const wxDateTime& dt) +{ + if ( !dt.IsValid() ) + return nil; + + // Get the internal representation as a double used by NSDate. + double ticks = dt.GetValue().ToDouble(); + + // wxDateTime uses milliseconds while NSDate uses (fractional) seconds. + return [NSDate dateWithTimeIntervalSince1970:ticks/1000.]; +} + + +// Returns wxDateTime corresponding to the given NSDate (which may be nil). +inline wxDateTime NSDateToWX(const NSDate* d) +{ + if ( !d ) + return wxDefaultDateTime; + + // Reverse everything done above. + wxLongLong ll; + ll.Assign([d timeIntervalSince1970]*1000); + wxDateTime dt(ll); + return dt; +} + +} // namespace wxOSXImpl + +#endif // _WX_OSX_COCOA_PRIVATE_DATE_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/cocoa/private/textimpl.h b/Externals/wxWidgets3/include/wx/osx/cocoa/private/textimpl.h index a977555e35..841bf5bd08 100644 --- a/Externals/wxWidgets3/include/wx/osx/cocoa/private/textimpl.h +++ b/Externals/wxWidgets3/include/wx/osx/cocoa/private/textimpl.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 03/02/99 -// RCS-ID: $Id: textimpl.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: textimpl.h 70354 2012-01-15 15:53:56Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -28,6 +28,9 @@ public : wxNSTextFieldControl( wxWindow *wxPeer, wxTextEntry *entry, WXWidget w ); virtual ~wxNSTextFieldControl(); + virtual bool CanClipMaxLength() const { return true; } + virtual void SetMaxLength(unsigned long len); + virtual wxString GetStringValue() const ; virtual void SetStringValue( const wxString &str) ; virtual void Copy() ; @@ -105,6 +108,9 @@ public : virtual wxString GetStringAtIndex(int pos) const; virtual int FindString(const wxString& text) const; + virtual void Popup(); + virtual void Dismiss(); + private: NSComboBox* m_comboBox; }; diff --git a/Externals/wxWidgets3/include/wx/osx/combobox.h b/Externals/wxWidgets3/include/wx/osx/combobox.h index 0aad2f019d..ba55d4f160 100644 --- a/Externals/wxWidgets3/include/wx/osx/combobox.h +++ b/Externals/wxWidgets3/include/wx/osx/combobox.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: combobox.h 66993 2011-02-22 13:25:38Z VZ $ +// RCS-ID: $Id: combobox.h 69956 2011-12-08 14:47:37Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -25,7 +25,14 @@ class wxComboBoxChoice; class wxComboWidgetImpl; // Combobox item -class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase +class WXDLLIMPEXP_CORE wxComboBox : + public wxWindowWithItems< +#if wxOSX_USE_CARBON + wxNavigationEnabled, +#else + wxControl, +#endif + wxComboBoxBase> { DECLARE_DYNAMIC_CLASS(wxComboBox) @@ -42,7 +49,7 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase virtual void DelegateTextChanged( const wxString& value ); virtual void DelegateChoice( const wxString& value ); - wxComboBox() { Init(); } + wxComboBox() { } wxComboBox(wxWindow *parent, wxWindowID id, const wxString& value = wxEmptyString, @@ -53,7 +60,6 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr) { - Init(); Create(parent, id, value, pos, size, n, choices, style, validator, name); } @@ -66,7 +72,6 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr) { - Init(); Create(parent, id, value, pos, size, choices, style, validator, name); } @@ -134,25 +139,20 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase virtual wxTextWidgetImpl* GetTextPeer() const; #endif // wxOSX_USE_CARBON +#if wxOSX_USE_COCOA + virtual void Popup(); + virtual void Dismiss(); +#endif // wxOSX_USE_COCOA // osx specific event handling common for all osx-ports virtual bool OSXHandleClicked( double timestampsec ); -#if wxOSX_USE_CARBON - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST - - WX_DECLARE_CONTROL_CONTAINER(); -#endif - #if wxOSX_USE_COCOA wxComboWidgetImpl* GetComboPeer() const; #endif protected: - // common part of all ctors - void Init(); - // List functions virtual void DoDeleteOneItem(unsigned int n); virtual void DoClear(); @@ -187,10 +187,6 @@ protected: wxComboBoxChoice* m_choice; wxComboBoxDataArray m_datas; - -#if wxOSX_USE_CARBON - DECLARE_EVENT_TABLE() -#endif }; #endif // _WX_COMBOBOX_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/config_xcode.h b/Externals/wxWidgets3/include/wx/osx/config_xcode.h index 5321a98ee3..5c92ac2032 100644 --- a/Externals/wxWidgets3/include/wx/osx/config_xcode.h +++ b/Externals/wxWidgets3/include/wx/osx/config_xcode.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 29.04.04 -// RCS-ID: $Id: config_xcode.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: config_xcode.h 70021 2011-12-16 22:12:49Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -133,9 +133,9 @@ #define WXWIN_OS_DESCRIPTION "Darwin 7.9.0 Power Macintosh" #define PACKAGE_BUGREPORT "wx-dev@lists.wxwidgets.org" #define PACKAGE_NAME "wxWidgets" -#define PACKAGE_STRING "wxWidgets 2.9.2" +#define PACKAGE_STRING "wxWidgets 2.9.4" #define PACKAGE_TARNAME "wxwidgets" -#define PACKAGE_VERSION "2.9.2" +#define PACKAGE_VERSION "2.9.4" // for regex #define WX_NO_REGEX_ADVANCED 1 diff --git a/Externals/wxWidgets3/include/wx/osx/core/colour.h b/Externals/wxWidgets3/include/wx/osx/core/colour.h index 827c26db69..2765a4c20b 100644 --- a/Externals/wxWidgets3/include/wx/osx/core/colour.h +++ b/Externals/wxWidgets3/include/wx/osx/core/colour.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: colour.h 67068 2011-02-27 12:48:42Z VZ $ +// RCS-ID: $Id: colour.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -42,10 +42,10 @@ public: bool operator != (const wxColour& colour) const { return !(*this == colour); } - CGColorRef GetPixel() const { return m_cgColour; }; + CGColorRef GetPixel() const { return m_cgColour; } - CGColorRef GetCGColor() const { return m_cgColour; }; - CGColorRef CreateCGColor() const { return wxCFRetain( (CGColorRef)m_cgColour ); }; + CGColorRef GetCGColor() const { return m_cgColour; } + CGColorRef CreateCGColor() const { return wxCFRetain( (CGColorRef)m_cgColour ); } #if wxOSX_USE_COCOA_OR_CARBON void GetRGBColor( RGBColor *col ) const; diff --git a/Externals/wxWidgets3/include/wx/osx/core/dataview.h b/Externals/wxWidgets3/include/wx/osx/core/dataview.h index 8a24aaefd3..f02d328eea 100644 --- a/Externals/wxWidgets3/include/wx/osx/core/dataview.h +++ b/Externals/wxWidgets3/include/wx/osx/core/dataview.h @@ -89,6 +89,9 @@ public: virtual wxDataViewItem GetCurrentItem() const = 0; virtual void SetCurrentItem(const wxDataViewItem& item) = 0; + virtual wxDataViewColumn *GetCurrentColumn() const = 0; + + virtual int GetSelectedItemsCount() const = 0; virtual int GetSelections(wxDataViewItemArray& sel) const = 0; // returns all selected items in the native control virtual bool IsSelected (wxDataViewItem const& item) const = 0; // checks if the passed item is selected in the native control virtual void Select (wxDataViewItem const& item) = 0; // selects the passed item in the native control @@ -109,6 +112,7 @@ public: virtual void HitTest (wxPoint const& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const = 0; // return the item and column pointer that contains with the passed point virtual void SetRowHeight(wxDataViewItem const& item, unsigned int height) = 0; // sets the height of the row containg the passed item in the native control virtual void OnSize (void) = 0; // updates the layout of the native control after a size event + virtual void StartEditor( const wxDataViewItem & item, unsigned int column ) = 0; // starts editing the passed in item and column }; #endif // _WX_DATAVIEWCTRL_CORE_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/core/mimetype.h b/Externals/wxWidgets3/include/wx/osx/core/mimetype.h index b018d7a560..a6e5b1ead9 100644 --- a/Externals/wxWidgets3/include/wx/osx/core/mimetype.h +++ b/Externals/wxWidgets3/include/wx/osx/core/mimetype.h @@ -4,7 +4,7 @@ // Author: Neil Perkins // Modified by: // Created: 2010-05-15 -// RCS-ID: $Id: mimetype.h 67232 2011-03-18 15:10:15Z DS $ +// RCS-ID: $Id: mimetype.h 68563 2011-08-05 19:02:26Z VZ $ // Copyright: (C) 2010 Neil Perkins // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -56,6 +56,7 @@ private: bool GetMimeTypes(const wxString& uti, wxArrayString& mimeTypes); bool GetIcon(const wxString& uti, wxIconLocation *iconLoc); bool GetDescription(const wxString& uti, wxString *desc); + bool GetApplication(const wxString& uti, wxString *command); // Structure to represent file types typedef struct FileTypeData @@ -63,6 +64,7 @@ private: wxArrayString extensions; wxArrayString mimeTypes; wxIconLocation iconLoc; + wxString application; wxString description; } FileTypeInfo; @@ -95,9 +97,9 @@ public: bool GetMimeTypes(wxArrayString& mimeTypes) const ; bool GetIcon(wxIconLocation *iconLoc) const ; bool GetDescription(wxString *desc) const ; + bool GetOpenCommand(wxString *openCmd, const wxFileType::MessageParameters& params) const; // These functions are only stubs on Mac OS X - bool GetOpenCommand(wxString *openCmd, const wxFileType::MessageParameters& params) const; bool GetPrintCommand(wxString *printCmd, const wxFileType::MessageParameters& params) const; size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands, const wxFileType::MessageParameters& params) const; bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = TRUE); diff --git a/Externals/wxWidgets3/include/wx/osx/core/private.h b/Externals/wxWidgets3/include/wx/osx/core/private.h index 06f660ccc5..4b69c9bb90 100644 --- a/Externals/wxWidgets3/include/wx/osx/core/private.h +++ b/Externals/wxWidgets3/include/wx/osx/core/private.h @@ -6,7 +6,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: private.h 67233 2011-03-18 15:45:51Z SC $ +// RCS-ID: $Id: private.h 70354 2012-01-15 15:53:56Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -32,7 +32,7 @@ #define wxOSX_10_6_AND_LATER(x) #endif -#if !wxUSE_GUI || wxOSX_USE_COCOA_OR_CARBON +#if ( !wxUSE_GUI && !wxOSX_USE_IPHONE ) || wxOSX_USE_COCOA_OR_CARBON // Carbon functions are currently still used in wxOSX/Cocoa too (including // wxBase part of it). @@ -47,6 +47,11 @@ WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef add WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef ); WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ); +// keycode utils from app.cpp + +WXDLLIMPEXP_BASE CGKeyCode wxCharCodeWXToOSX(wxKeyCode code); +WXDLLIMPEXP_BASE long wxMacTranslateKey(unsigned char key, unsigned char code); + #endif #if wxUSE_GUI @@ -626,6 +631,9 @@ public : virtual void GetSelection( long* from, long* to ) const = 0 ; virtual void WriteText( const wxString& str ) = 0 ; + virtual bool CanClipMaxLength() const { return false; } + virtual void SetMaxLength(unsigned long WXUNUSED(len)) {} + virtual bool GetStyle( long position, wxTextAttr& style); virtual void SetStyle( long start, long end, const wxTextAttr& style ) ; virtual void Copy() ; @@ -675,16 +683,18 @@ public : virtual ~wxComboWidgetImpl() {} - virtual int GetSelectedItem() const { return -1; }; - virtual void SetSelectedItem(int WXUNUSED(item)) {}; + virtual int GetSelectedItem() const { return -1; } + virtual void SetSelectedItem(int WXUNUSED(item)) {} - virtual int GetNumberOfItems() const { return -1; }; + virtual int GetNumberOfItems() const { return -1; } virtual void InsertItem(int WXUNUSED(pos), const wxString& WXUNUSED(item)) {} virtual void RemoveItem(int WXUNUSED(pos)) {} virtual void Clear() {} + virtual void Popup() {} + virtual void Dismiss() {} virtual wxString GetStringAtIndex(int WXUNUSED(pos)) const { return wxEmptyString; } @@ -856,6 +866,8 @@ public : virtual void SetModified(bool WXUNUSED(modified)) { } virtual bool IsModified() const { return false; } + virtual void SetRepresentedFilename(const wxString& WXUNUSED(filename)) { } + #if wxOSX_USE_IPHONE virtual CGFloat GetWindowLevel() const { return 0.0; } #else diff --git a/Externals/wxWidgets3/include/wx/osx/core/private/datetimectrl.h b/Externals/wxWidgets3/include/wx/osx/core/private/datetimectrl.h new file mode 100644 index 0000000000..499ff1b94a --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/core/private/datetimectrl.h @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/osx/core/private/datetime.h +// Purpose: +// Author: Vadim Zeitlin +// Created: 2011-12-19 +// RCS-ID: $Id: datetimectrl.h 70071 2011-12-20 21:27:14Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_OSX_CORE_PRIVATE_DATETIMECTRL_H_ +#define _WX_OSX_CORE_PRIVATE_DATETIMECTRL_H_ + +#if wxUSE_DATEPICKCTRL + +#include "wx/osx/private.h" + +#include "wx/datetime.h" + +enum wxDateTimeWidgetKind +{ + wxDateTimeWidget_YearMonthDay, + wxDateTimeWidget_HourMinuteSecond +}; + +// ---------------------------------------------------------------------------- +// wxDateTimeWidgetImpl: peer class for wxDateTimePickerCtrl. +// ---------------------------------------------------------------------------- + +class wxDateTimeWidgetImpl +#if wxOSX_USE_COCOA + : public wxWidgetCocoaImpl +#elif wxOSX_USE_CARBON + : public wxMacControl +#else + #error "Unsupported platform" +#endif +{ +public: + static wxDateTimeWidgetImpl* + CreateDateTimePicker(wxDateTimePickerCtrl* wxpeer, + const wxDateTime& dt, + const wxPoint& pos, + const wxSize& size, + long style, + wxDateTimeWidgetKind kind); + + virtual void SetDateTime(const wxDateTime& dt) = 0; + virtual wxDateTime GetDateTime() const = 0; + + virtual void SetDateRange(const wxDateTime& dt1, const wxDateTime& dt2) = 0; + virtual bool GetDateRange(wxDateTime* dt1, wxDateTime* dt2) = 0; + + virtual ~wxDateTimeWidgetImpl() { } + +protected: +#if wxOSX_USE_COCOA + wxDateTimeWidgetImpl(wxDateTimePickerCtrl* wxpeer, WXWidget view) + : wxWidgetCocoaImpl(wxpeer, view) + { + } +#elif wxOSX_USE_CARBON + // There is no Carbon implementation of this control yet so we don't need + // any ctor for it yet but it should be added here if Carbon version is + // written later. +#endif +}; + +#endif // wxUSE_DATEPICKCTRL + +#endif // _WX_OSX_CORE_PRIVATE_DATETIMECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/dataview.h b/Externals/wxWidgets3/include/wx/osx/dataview.h index 5380d55a38..f54188e3df 100644 --- a/Externals/wxWidgets3/include/wx/osx/dataview.h +++ b/Externals/wxWidgets3/include/wx/osx/dataview.h @@ -2,7 +2,7 @@ // Name: wx/osx/dataview.h // Purpose: wxDataViewCtrl native implementation header for OSX // Author: -// Id: $Id: dataview.h 66634 2011-01-07 18:26:58Z VS $ +// Id: $Id: dataview.h 70496 2012-02-02 14:19:30Z VZ $ // Copyright: (c) 2009 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -60,12 +60,11 @@ public: virtual void SetMaxWidth (int maxWidth); virtual void SetMinWidth (int minWidth); virtual void SetReorderable(bool reorderable); - virtual void SetResizeable (bool resizeable); + virtual void SetResizeable (bool resizable); virtual void SetSortable (bool sortable); virtual void SetSortOrder (bool ascending); virtual void SetTitle (wxString const& title); virtual void SetWidth (int width); - virtual void SetAsSortKey (bool sort = true); // implementation only wxDataViewColumnNativeData* GetNativeData() const @@ -151,7 +150,7 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxDataViewCtrlNameStr); - virtual wxControl* GetMainWindow() // not used for the native implementation + virtual wxWindow* GetMainWindow() // not used for the native implementation { return this; } @@ -175,8 +174,9 @@ public: virtual bool IsExpanded(const wxDataViewItem & item) const; virtual unsigned int GetCount() const; - virtual wxRect GetItemRect(const wxDataViewItem& item, const wxDataViewColumn* columnPtr) const; - virtual wxDataViewItem GetSelection() const; + virtual wxRect GetItemRect(const wxDataViewItem& item, + const wxDataViewColumn* columnPtr = NULL) const; + virtual int GetSelectedItemsCount() const; virtual int GetSelections(wxDataViewItemArray& sel) const; virtual void HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const; @@ -201,6 +201,8 @@ public: // finishes editing of custom items; if no custom item is currently edited the method does nothing void FinishCustomItemEditing(); + + virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column); // returns the n-th pointer to a column; // this method is different from GetColumn(unsigned int pos) because here 'n' is not a position in the control but the n-th @@ -255,6 +257,8 @@ public: m_Deleting = deleting; } + virtual wxDataViewColumn *GetCurrentColumn() const; + virtual wxVisualAttributes GetDefaultAttributes() const { return GetClassDefaultAttributes(GetWindowVariant()); diff --git a/Externals/wxWidgets3/include/wx/osx/datectrl.h b/Externals/wxWidgets3/include/wx/osx/datectrl.h new file mode 100644 index 0000000000..026361aa2f --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/datectrl.h @@ -0,0 +1,55 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/osx/datectrl.h +// Purpose: Declaration of wxOSX-specific wxDatePickerCtrl class. +// Author: Vadim Zeitlin +// Created: 2011-12-18 +// RCS-ID: $Id: datectrl.h 70071 2011-12-20 21:27:14Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_OSX_DATECTRL_H_ +#define _WX_OSX_DATECTRL_H_ + +// ---------------------------------------------------------------------------- +// wxDatePickerCtrl +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDatePickerCtrl : public wxDatePickerCtrlBase +{ +public: + // Constructors. + wxDatePickerCtrl() { } + + wxDatePickerCtrl(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDP_DEFAULT | wxDP_SHOWCENTURY, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxDatePickerCtrlNameStr) + { + Create(parent, id, dt, pos, size, style, validator, name); + } + + bool Create(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDP_DEFAULT | wxDP_SHOWCENTURY, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxDatePickerCtrlNameStr); + + // Implement the base class pure virtuals. + virtual void SetRange(const wxDateTime& dt1, const wxDateTime& dt2); + virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const; + + virtual void OSXGenerateEvent(const wxDateTime& dt); + +private: + wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl); +}; + +#endif // _WX_OSX_DATECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/datetimectrl.h b/Externals/wxWidgets3/include/wx/osx/datetimectrl.h new file mode 100644 index 0000000000..2184229b12 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/datetimectrl.h @@ -0,0 +1,34 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/osx/datetimectrl.h +// Purpose: Declaration of wxOSX-specific wxDateTimePickerCtrl class. +// Author: Vadim Zeitlin +// Created: 2011-12-18 +// RCS-ID: $Id: datetimectrl.h 70071 2011-12-20 21:27:14Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_OSX_DATETIMECTRL_H_ +#define _WX_OSX_DATETIMECTRL_H_ + +class wxDateTimeWidgetImpl; + +// ---------------------------------------------------------------------------- +// wxDateTimePickerCtrl +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDateTimePickerCtrl : public wxDateTimePickerCtrlBase +{ +public: + // Implement the base class pure virtuals. + virtual void SetValue(const wxDateTime& dt); + virtual wxDateTime GetValue() const; + + // Implementation only. + virtual void OSXGenerateEvent(const wxDateTime& dt) = 0; + +protected: + wxDateTimeWidgetImpl* GetDateTimePeer() const; +}; + +#endif // _WX_OSX_DATETIMECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/dirdlg.h b/Externals/wxWidgets3/include/wx/osx/dirdlg.h index 9ff101b44e..1ea6fd2739 100644 --- a/Externals/wxWidgets3/include/wx/osx/dirdlg.h +++ b/Externals/wxWidgets3/include/wx/osx/dirdlg.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: dirdlg.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: dirdlg.h 67896 2011-06-09 00:28:28Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,6 +23,10 @@ public: const wxSize& size = wxDefaultSize, const wxString& name = wxDirDialogNameStr); +#if wxOSX_USE_COCOA + ~wxDirDialog(); +#endif + virtual int ShowModal(); #if wxOSX_USE_COCOA @@ -33,6 +37,10 @@ public: protected: DECLARE_DYNAMIC_CLASS(wxDirDialog) + +#if wxOSX_USE_COCOA + WX_NSObject m_sheetDelegate; +#endif }; #endif diff --git a/Externals/wxWidgets3/include/wx/osx/evtloop.h b/Externals/wxWidgets3/include/wx/osx/evtloop.h index f427594d59..26c75a7ac5 100644 --- a/Externals/wxWidgets3/include/wx/osx/evtloop.h +++ b/Externals/wxWidgets3/include/wx/osx/evtloop.h @@ -6,7 +6,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2006-01-12 -// RCS-ID: $Id: evtloop.h 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: evtloop.h 67724 2011-05-11 06:46:07Z SC $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -53,9 +53,14 @@ public: AddSourceForFD(int fd, wxEventLoopSourceHandler *handler, int flags); #endif // wxUSE_EVENTLOOP_SOURCE - void ObserverCallBack(CFRunLoopObserverRef observer, int activity); protected: + void CommonModeObserverCallBack(CFRunLoopObserverRef observer, int activity); + void DefaultModeObserverCallBack(CFRunLoopObserverRef observer, int activity); + + static void OSXCommonModeObserverCallBack(CFRunLoopObserverRef observer, int activity, void *info); + static void OSXDefaultModeObserverCallBack(CFRunLoopObserverRef observer, int activity, void *info); + // get the currently executing CFRunLoop virtual CFRunLoopRef CFGetCurrentRunLoop() const; @@ -74,8 +79,11 @@ protected: // cfrunloop CFRunLoopRef m_runLoop; - // runloop observer - CFRunLoopObserverRef m_runLoopObserver; + // common modes runloop observer + CFRunLoopObserverRef m_commonModeRunLoopObserver; + + // default mode runloop observer + CFRunLoopObserverRef m_defaultModeRunLoopObserver; private: // process all already pending events and dispatch a new one (blocking diff --git a/Externals/wxWidgets3/include/wx/osx/filedlg.h b/Externals/wxWidgets3/include/wx/osx/filedlg.h index 4ac1d59404..6dbc0cb50c 100644 --- a/Externals/wxWidgets3/include/wx/osx/filedlg.h +++ b/Externals/wxWidgets3/include/wx/osx/filedlg.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: filedlg.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: filedlg.h 67896 2011-06-09 00:28:28Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -41,6 +41,10 @@ public: const wxSize& sz = wxDefaultSize, const wxString& name = wxFileDialogNameStr); +#if wxOSX_USE_COCOA + ~wxFileDialog(); +#endif + virtual void GetPaths(wxArrayString& paths) const { paths = m_paths; } virtual void GetFilenames(wxArrayString& files) const { files = m_fileNames ; } @@ -70,6 +74,7 @@ protected: #if wxOSX_USE_COCOA virtual wxWindow* CreateFilterPanel(wxWindow *extracontrol); + void DoOnFilterSelected(int index); virtual void OnFilterSelected(wxCommandEvent &event); wxArrayString m_filterExtensions; @@ -80,6 +85,7 @@ protected: int m_firstFileTypeFilter; wxArrayString m_currentExtensions; WX_NSObject m_delegate; + WX_NSObject m_sheetDelegate; #endif }; diff --git a/Externals/wxWidgets3/include/wx/osx/font.h b/Externals/wxWidgets3/include/wx/osx/font.h index fc53a77bc8..e1fe572e58 100644 --- a/Externals/wxWidgets3/include/wx/osx/font.h +++ b/Externals/wxWidgets3/include/wx/osx/font.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: font.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: font.h 70445 2012-01-23 11:28:21Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -79,6 +79,19 @@ public: SetPixelSize(pixelSize); } + wxFont(int pointSize, + wxFontFamily family, + int flags = wxFONTFLAG_DEFAULT, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT) + { + Create(pointSize, family, + GetStyleFromFlags(flags), + GetWeightFromFlags(flags), + GetUnderlinedFromFlags(flags), + face, encoding); + } + bool Create(int size, wxFontFamily family, wxFontStyle style, diff --git a/Externals/wxWidgets3/include/wx/osx/fontdlg.h b/Externals/wxWidgets3/include/wx/osx/fontdlg.h index 81ecf877a7..966a8fa937 100644 --- a/Externals/wxWidgets3/include/wx/osx/fontdlg.h +++ b/Externals/wxWidgets3/include/wx/osx/fontdlg.h @@ -4,7 +4,7 @@ // Author: Ryan Norton // Modified by: // Created: 2004-09-25 -// RCS-ID: $Id: fontdlg.h 66615 2011-01-07 05:26:57Z PC $ +// RCS-ID: $Id: fontdlg.h 70497 2012-02-02 14:19:34Z VZ $ // Copyright: (c) Ryan Norton // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -35,9 +35,11 @@ class WXDLLIMPEXP_CORE wxFontDialog : public wxDialog { public: wxFontDialog(); + wxFontDialog(wxWindow *parent); wxFontDialog(wxWindow *parent, const wxFontData& data); virtual ~wxFontDialog(); + bool Create(wxWindow *parent); bool Create(wxWindow *parent, const wxFontData& data); int ShowModal(); diff --git a/Externals/wxWidgets3/include/wx/osx/frame.h b/Externals/wxWidgets3/include/wx/osx/frame.h index 08d91de60e..ca6ffb51da 100644 --- a/Externals/wxWidgets3/include/wx/osx/frame.h +++ b/Externals/wxWidgets3/include/wx/osx/frame.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: frame.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: frame.h 70765 2012-03-01 15:04:42Z JS $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -59,7 +59,6 @@ public: // event handlers void OnActivate(wxActivateEvent& event); void OnSysColourChanged(wxSysColourChangedEvent& event); - void OnSize(wxSizeEvent& event); // Toolbar #if wxUSE_TOOLBAR @@ -84,6 +83,8 @@ public: void PositionBars(); + // internal response to size events + virtual void MacOnInternalSize() { PositionBars(); } protected: // common part of all ctors diff --git a/Externals/wxWidgets3/include/wx/osx/iphone/chkconf.h b/Externals/wxWidgets3/include/wx/osx/iphone/chkconf.h index ccbe8206f6..c402458f67 100644 --- a/Externals/wxWidgets3/include/wx/osx/iphone/chkconf.h +++ b/Externals/wxWidgets3/include/wx/osx/iphone/chkconf.h @@ -4,7 +4,7 @@ * Author: Stefan Csomor * Modified by: * Created: 2008-07-30 - * RCS-ID: $Id: chkconf.h 67232 2011-03-18 15:10:15Z DS $ + * RCS-ID: $Id: chkconf.h 69818 2011-11-25 14:37:03Z SC $ * Copyright: (c) Stefan Csomor * Licence: wxWindows licence */ @@ -66,6 +66,11 @@ #define wxUSE_DATAVIEWCTRL 0 #endif +#if wxUSE_TREELISTCTRL +#undef wxUSE_TREELISTCTRL +#define wxUSE_TREELISTCTRL 0 +#endif + #if wxUSE_DRAG_AND_DROP #undef wxUSE_DRAG_AND_DROP #define wxUSE_DRAG_AND_DROP 0 @@ -348,6 +353,16 @@ #define wxUSE_RICHTEXT 0 #endif +#if wxUSE_TIMEPICKCTRL +#undef wxUSE_TIMEPICKCTRL +#define wxUSE_TIMEPICKCTRL 0 +#endif + +#if wxUSE_RICHTOOLTIP +#undef wxUSE_RICHTOOLTIP +#define wxUSE_RICHTOOLTIP 0 +#endif + #endif /* _WX_OSX_IPHONE_CHKCONF_H_ */ diff --git a/Externals/wxWidgets3/include/wx/osx/joystick.h b/Externals/wxWidgets3/include/wx/osx/joystick.h index 3608bc1cea..d9d2f06481 100644 --- a/Externals/wxWidgets3/include/wx/osx/joystick.h +++ b/Externals/wxWidgets3/include/wx/osx/joystick.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: joystick.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: joystick.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,7 +22,7 @@ class WXDLLIMPEXP_ADV wxJoystick: public wxObject * Public interface */ - wxJoystick(int joystick = wxJOYSTICK1) { m_joystick = joystick; }; + wxJoystick(int joystick = wxJOYSTICK1) { m_joystick = joystick; } // Attributes //////////////////////////////////////////////////////////////////////////// diff --git a/Externals/wxWidgets3/include/wx/osx/listctrl.h b/Externals/wxWidgets3/include/wx/osx/listctrl.h index 7b55e8ff6c..b0412f25f7 100644 --- a/Externals/wxWidgets3/include/wx/osx/listctrl.h +++ b/Externals/wxWidgets3/include/wx/osx/listctrl.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: listctrl.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: listctrl.h 70290 2012-01-08 00:55:22Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,7 +23,7 @@ class wxListCtrlRenameTimer; WX_DECLARE_EXPORTED_LIST(wxListItem, wxColumnList); -class WXDLLIMPEXP_CORE wxListCtrl: public wxControl +class WXDLLIMPEXP_CORE wxListCtrl: public wxListCtrlBase { DECLARE_DYNAMIC_CLASS(wxListCtrl) public: @@ -63,8 +63,7 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxControl bool GetColumn(int col, wxListItem& item) const; // Sets information about this column - // TODO: NOT const to be compatible with wxGenericListCtrl API - bool SetColumn(int col, wxListItem& item) ; + bool SetColumn(int col, const wxListItem& item) ; // Gets the column width int GetColumnWidth(int col) const; @@ -160,11 +159,6 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxControl // list or report view long GetTopItem() const ; - // are we in report mode? - bool InReportView() const { return HasFlag(wxLC_REPORT); } - - bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); } - // Add or remove a single window style void SetSingleStyle(long style, bool add = true) ; @@ -257,12 +251,6 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxControl // Insert an image/string item long InsertItem(long index, const wxString& label, int imageIndex); - // For list view mode (only), inserts a column. - long InsertColumn(long col, wxListItem& info); - - long InsertColumn(long col, const wxString& heading, int format = wxLIST_FORMAT_LEFT, - int width = -1); - // Scrolls the list control. If in icon, small icon or report view mode, // x specifies the number of pixels to scroll. If in list view mode, x // specifies the number of columns to scroll. @@ -314,10 +302,10 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxControl bool Update(long item); */ - void Command(wxCommandEvent& event) { ProcessCommand(event); }; + void Command(wxCommandEvent& event) { ProcessCommand(event); } - wxListCtrlCompare GetCompareFunc() { return m_compareFunc; }; - wxIntPtr GetCompareFuncData() { return m_compareFuncData; }; + wxListCtrlCompare GetCompareFunc() { return m_compareFunc; } + wxIntPtr GetCompareFuncData() { return m_compareFuncData; } // public overrides needed for pimpl approach @@ -376,14 +364,14 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxControl GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); protected: + // Implement base class pure virtual methods. + long DoInsertColumn(long col, const wxListItem& info); // protected overrides needed for pimpl approach virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); - virtual wxSize DoGetBestSize() const; - long m_current; wxListCtrlTextCtrlWrapper *m_textctrlWrapper; wxListCtrlRenameTimer *m_renameTimer; diff --git a/Externals/wxWidgets3/include/wx/osx/menu.h b/Externals/wxWidgets3/include/wx/osx/menu.h index fa62ad500a..6429ca657d 100644 --- a/Externals/wxWidgets3/include/wx/osx/menu.h +++ b/Externals/wxWidgets3/include/wx/osx/menu.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: menu.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: menu.h 70350 2012-01-15 13:41:17Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -83,6 +83,10 @@ private: // terminate the current radio group, if any void EndRadioGroup(); + // Common part of HandleMenu{Opened,Closed}(). + void DoHandleMenuOpenedOrClosed(wxEventType evtType); + + // if TRUE, insert a breal before appending the next item bool m_doBreak; @@ -127,6 +131,7 @@ public: virtual wxMenu *Remove(size_t pos); virtual void EnableTop( size_t pos, bool flag ); + virtual bool IsEnabledTop(size_t pos) const; virtual void SetMenuLabel( size_t pos, const wxString& label ); virtual wxString GetMenuLabel( size_t pos ) const; virtual bool Enable( bool enable = true ); diff --git a/Externals/wxWidgets3/include/wx/osx/metafile.h b/Externals/wxWidgets3/include/wx/osx/metafile.h index 646f60462f..2a7e13e252 100644 --- a/Externals/wxWidgets3/include/wx/osx/metafile.h +++ b/Externals/wxWidgets3/include/wx/osx/metafile.h @@ -6,7 +6,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: metafile.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: metafile.h 70710 2012-02-27 15:37:24Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -56,13 +56,6 @@ public: // Implementation WXHMETAFILE GetHMETAFILE() const ; void SetHMETAFILE(WXHMETAFILE mf) ; -#if wxOSX_USE_COCOA_OR_CARBON && !defined( __LP64__ ) - // Since the native metafile format is PDF for Quartz - // we need a call that allows setting PICT content for - // backwards compatibility - void SetPICT(void* pictHandle) ; -#endif - protected: virtual wxGDIRefData *CreateGDIRefData() const; virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const; @@ -145,7 +138,7 @@ class WXDLLIMPEXP_CORE wxMetafileDataObject : public wxDataObjectSimple public: // ctors wxMetafileDataObject() - : wxDataObjectSimple(wxDF_METAFILE) { }; + : wxDataObjectSimple(wxDF_METAFILE) { } wxMetafileDataObject(const wxMetafile& metafile) : wxDataObjectSimple(wxDF_METAFILE), m_metafile(metafile) { } diff --git a/Externals/wxWidgets3/include/wx/osx/msgdlg.h b/Externals/wxWidgets3/include/wx/osx/msgdlg.h index 00b096e920..173cab4994 100644 --- a/Externals/wxWidgets3/include/wx/osx/msgdlg.h +++ b/Externals/wxWidgets3/include/wx/osx/msgdlg.h @@ -5,7 +5,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: msgdlg.h 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: msgdlg.h 68537 2011-08-04 22:53:42Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,6 +22,10 @@ public: long style = wxOK|wxCENTRE, const wxPoint& pos = wxDefaultPosition); +#if wxOSX_USE_COCOA + ~wxMessageDialog(); +#endif + virtual int ShowModal(); #if wxOSX_USE_COCOA @@ -39,9 +43,12 @@ protected: void* ConstructNSAlert(); #endif - int m_buttonId[3]; + int m_buttonId[4]; int m_buttonCount; +#if wxOSX_USE_COCOA + WX_NSObject m_sheetDelegate; +#endif DECLARE_DYNAMIC_CLASS(wxMessageDialog) }; diff --git a/Externals/wxWidgets3/include/wx/osx/nonownedwnd.h b/Externals/wxWidgets3/include/wx/osx/nonownedwnd.h index 8c674bfce2..b6b014f30b 100644 --- a/Externals/wxWidgets3/include/wx/osx/nonownedwnd.h +++ b/Externals/wxWidgets3/include/wx/osx/nonownedwnd.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 2008-03-24 -// RCS-ID: $Id: nonownedwnd.h 67232 2011-03-18 15:10:15Z DS $ +// RCS-ID: $Id: nonownedwnd.h 70488 2012-01-31 17:39:39Z SC $ // Copyright: (c) 2008 Stefan Csomor // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -14,6 +14,8 @@ #include "wx/window.h" +#include "wx/graphics.h" + #if wxUSE_SYSTEM_OPTIONS #define wxMAC_WINDOW_PLAIN_TRANSITION wxT("mac.window-plain-transition") #endif @@ -30,7 +32,7 @@ class wxNonOwnedWindowImpl; -class WXDLLIMPEXP_CORE wxNonOwnedWindow : public wxWindow +class WXDLLIMPEXP_CORE wxNonOwnedWindow : public wxNonOwnedWindowBase { public: // constructors and such @@ -79,8 +81,11 @@ public: // implementation from now on // -------------------------- - virtual bool DoSetShape(const wxRegion& region); + // These accessors are Mac-specific and don't exist in other ports. const wxRegion& GetShape() const { return m_shape; } +#if wxUSE_GRAPHICS_CONTEXT + const wxGraphicsPath& GetShapePath() { return m_shapePath; } +#endif // wxUSE_GRAPHICS_CONTEXT // activation hooks only necessary for MDI Implementation static void MacDelayedDeactivation(long timestamp); @@ -109,6 +114,8 @@ public: virtual void HandleResized( double timestampsec ); virtual void HandleMoved( double timestampsec ); virtual void HandleResizing( double timestampsec, wxRect* rect ); + + void WindowWasPainted(); virtual bool Destroy(); @@ -125,6 +132,12 @@ protected: wxShowEffect effect, unsigned timeout); + virtual bool DoClearShape(); + virtual bool DoSetRegionShape(const wxRegion& region); +#if wxUSE_GRAPHICS_CONTEXT + virtual bool DoSetPathShape(const wxGraphicsPath& path); +#endif // wxUSE_GRAPHICS_CONTEXT + virtual void WillBeDestroyed(); wxNonOwnedWindowImpl* m_nowpeer ; @@ -134,7 +147,12 @@ protected: static wxNonOwnedWindow *s_macDeactivateWindow; private : + static clock_t s_lastFlush; + wxRegion m_shape; +#if wxUSE_GRAPHICS_CONTEXT + wxGraphicsPath m_shapePath; +#endif // wxUSE_GRAPHICS_CONTEXT }; // list of all frames and modeless dialogs diff --git a/Externals/wxWidgets3/include/wx/osx/notebook.h b/Externals/wxWidgets3/include/wx/osx/notebook.h index 8dd48fd9ca..62a1accc33 100644 --- a/Externals/wxWidgets3/include/wx/osx/notebook.h +++ b/Externals/wxWidgets3/include/wx/osx/notebook.h @@ -3,7 +3,7 @@ // Purpose: MSW/GTK compatible notebook (a.k.a. property sheet) // Author: Stefan Csomor // Modified by: -// RCS-ID: $Id: notebook.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: notebook.h 68810 2011-08-21 14:08:49Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -95,7 +95,7 @@ public: wxNotebookPage *pPage, const wxString& strText, bool bSelect = false, - int imageId = -1); + int imageId = NO_IMAGE); // callbacks // --------- diff --git a/Externals/wxWidgets3/include/wx/osx/pnghand.h b/Externals/wxWidgets3/include/wx/osx/pnghand.h index ce2a8d6daf..135725528b 100644 --- a/Externals/wxWidgets3/include/wx/osx/pnghand.h +++ b/Externals/wxWidgets3/include/wx/osx/pnghand.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: pnghand.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: pnghand.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -25,7 +25,7 @@ public: SetName(wxT("PNG bitmap file")); SetExtension(wxT("bmp")); SetType(wxBITMAP_TYPE_PNG); - }; + } virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, int desiredWidth, int desiredHeight); diff --git a/Externals/wxWidgets3/include/wx/osx/pngread.h b/Externals/wxWidgets3/include/wx/osx/pngread.h index 222a2c5589..bdf466b8a3 100644 --- a/Externals/wxWidgets3/include/wx/osx/pngread.h +++ b/Externals/wxWidgets3/include/wx/osx/pngread.h @@ -61,10 +61,10 @@ public: bool ReadFile( char* ImageFileName=0 ); bool SaveFile( char* ImageFileName=0 ); bool SaveXPM(char *filename, char *name = 0); - int GetWidth( void ) const { return Width; }; - int GetHeight( void ) const { return Height; }; - int GetDepth( void ) const { return Depth; }; - int GetColorType( void ) const { return ColorType; }; + int GetWidth( void ) const { return Width; } + int GetHeight( void ) const { return Height; } + int GetDepth( void ) const { return Depth; } + int GetColorType( void ) const { return ColorType; } int GetIndex(int x, int y); bool GetRGB(int x, int y, byte* r, byte* g, byte* b); diff --git a/Externals/wxWidgets3/include/wx/osx/popupwin.h b/Externals/wxWidgets3/include/wx/osx/popupwin.h index caeaa004f5..3027d5f26c 100644 --- a/Externals/wxWidgets3/include/wx/osx/popupwin.h +++ b/Externals/wxWidgets3/include/wx/osx/popupwin.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: -// RCS-ID: $Id: popupwin.h 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: popupwin.h 70848 2012-03-09 05:50:58Z PC $ // Copyright: (c) 2006 Stefan Csomor // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -27,9 +27,8 @@ public: bool Create(wxWindow *parent, int flags = wxBORDER_NONE); - virtual bool Show(bool show); + virtual bool Show(bool show = true); -protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxPopupWindow) }; diff --git a/Externals/wxWidgets3/include/wx/osx/printdlg.h b/Externals/wxWidgets3/include/wx/osx/printdlg.h index 459a1d4e23..ab87b870e0 100644 --- a/Externals/wxWidgets3/include/wx/osx/printdlg.h +++ b/Externals/wxWidgets3/include/wx/osx/printdlg.h @@ -6,7 +6,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: printdlg.h 64943 2010-07-13 13:29:58Z VZ $ +// RCS-ID: $Id: printdlg.h 70636 2012-02-20 21:55:55Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -58,16 +58,16 @@ private: class WXDLLIMPEXP_CORE wxMacPageSetupDialog: public wxPageSetupDialogBase { public: - wxMacPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL); + wxMacPageSetupDialog(wxWindow *parent, wxPageSetupDialogData *data = NULL); virtual ~wxMacPageSetupDialog(); - virtual wxPageSetupData& GetPageSetupDialogData(); + virtual wxPageSetupDialogData& GetPageSetupDialogData(); - bool Create(wxWindow *parent, wxPageSetupData *data = NULL); + bool Create(wxWindow *parent, wxPageSetupDialogData *data = NULL); virtual int ShowModal(); private: - wxPageSetupData m_pageSetupData; + wxPageSetupDialogData m_pageSetupData; wxWindow* m_dialogParent; private: @@ -85,14 +85,14 @@ class WXDLLIMPEXP_FWD_CORE wxTextCtrl; class WXDLLIMPEXP_CORE wxMacPageMarginsDialog : public wxDialog { public: - wxMacPageMarginsDialog(wxFrame* parent, wxPageSetupData* data); + wxMacPageMarginsDialog(wxFrame* parent, wxPageSetupDialogData* data); bool TransferToWindow(); bool TransferDataFromWindow(); - virtual wxPageSetupData& GetPageSetupDialogData() { return *m_pageSetupDialogData; } + virtual wxPageSetupDialogData& GetPageSetupDialogData() { return *m_pageSetupDialogData; } private: - wxPageSetupData* m_pageSetupDialogData; + wxPageSetupDialogData* m_pageSetupDialogData; wxPoint m_MinMarginTopLeft; wxPoint m_MinMarginBottomRight; diff --git a/Externals/wxWidgets3/include/wx/osx/radiobox.h b/Externals/wxWidgets3/include/wx/osx/radiobox.h index 8738e2514e..5ca8856e20 100644 --- a/Externals/wxWidgets3/include/wx/osx/radiobox.h +++ b/Externals/wxWidgets3/include/wx/osx/radiobox.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: radiobox.h 64943 2010-07-13 13:29:58Z VZ $ +// RCS-ID: $Id: radiobox.h 69544 2011-10-26 05:39:18Z RD $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -89,6 +89,9 @@ public: void OnRadioButton( wxCommandEvent& event ) ; protected: + // resolve ambiguity in base classes + virtual wxBorder GetDefaultBorder() const { return wxRadioBoxBase::GetDefaultBorder(); } + wxRadioButton *m_radioButtonCycle; unsigned int m_noItems; diff --git a/Externals/wxWidgets3/include/wx/osx/setup0.h b/Externals/wxWidgets3/include/wx/osx/setup0.h index 15da2d8110..46bad79d19 100644 --- a/Externals/wxWidgets3/include/wx/osx/setup0.h +++ b/Externals/wxWidgets3/include/wx/osx/setup0.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: Stefan Csomor // Created: 1998-01-01 -// RCS-ID: $Id: setup0.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: setup0.h 70395 2012-01-19 08:55:41Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -202,15 +202,6 @@ // Recommended setting: 0 (this is still work in progress...) #define wxUSE_EXTENDED_RTTI 0 -// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from -// std::list and std::vector, with a compatibility interface, -// and for wxHashMap to be implemented with templates. -// -// Default is 0 -// -// Recommended setting: YMMV -#define wxUSE_STL 0 - // Support for message/error logging. This includes wxLogXXX() functions and // wxLog and derived classes. Don't set this to 0 unless you really know what // you are doing. @@ -262,44 +253,6 @@ // Recommended setting: 1 as setting it to 0 disables many other things #define wxUSE_STREAMS 1 -// This is not a real option but is used as the default value for -// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING. -// -// Currently the Digital Mars and Watcom compilers come without standard C++ -// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have -// them (e.g. from STLPort). -// -// VC++ 5.0 does include standard C++ library headers, however they produce -// many warnings that can't be turned off when compiled at warning level 4. -#if defined(__DMC__) || defined(__WATCOMC__) \ - || (defined(_MSC_VER) && _MSC_VER < 1200) - #define wxUSE_STD_DEFAULT 0 -#else - #define wxUSE_STD_DEFAULT 1 -#endif - -// Use standard C++ streams if 1 instead of wx streams in some places. If -// disabled (default), wx streams are used everywhere and wxWidgets doesn't -// depend on the standard streams library. -// -// Notice that enabling this does not replace wx streams with std streams -// everywhere, in a lot of places wx streams are used no matter what. -// -// Default is 0 -// -// Recommended setting: 1 if you use the standard streams anyhow and so -// dependency on the standard streams library is not a -// problem -#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// Recommended setting: 1 unless you want to ensure your program doesn't use -// the standard C++ library at all. -#define wxUSE_STD_STRING wxUSE_STD_DEFAULT - // Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf. // Note that if the system's implementation does not support positional // parameters, setting this to 1 forces the use of the wxWidgets implementation @@ -315,6 +268,107 @@ // Recommended setting: 1 if you want to support multiple languages #define wxUSE_PRINTF_POS_PARAMS 1 + +// ---------------------------------------------------------------------------- +// Interoperability with the standard library. +// ---------------------------------------------------------------------------- + +// Set wxUSE_STL to 1 to enable maximal interoperability with the standard +// library, even at the cost of backwards compatibility. +// +// Default is 0 +// +// Recommended setting: 0 as the options below already provide a relatively +// good level of interoperability and changing this option arguably isn't worth +// diverging from the official builds of the library. +#define wxUSE_STL 0 + +// This is not a real option but is used as the default value for +// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS. +// +// Currently the Digital Mars and Watcom compilers come without standard C++ +// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have +// them (e.g. from STLPort). +// +// VC++ 5.0 does include standard C++ library headers, however they produce +// many warnings that can't be turned off when compiled at warning level 4. +#if defined(__DMC__) || defined(__WATCOMC__) \ + || (defined(_MSC_VER) && _MSC_VER < 1200) + #define wxUSE_STD_DEFAULT 0 +#else + #define wxUSE_STD_DEFAULT 1 +#endif + +// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<> +// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but +// usually more limited) implementations are used which allows to avoid the +// dependency on the C++ run-time library. +// +// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't +// support using standard containers and that VC6 needs non-default options for +// such build to avoid getting "fatal error C1076: compiler limit : internal +// heap limit reached; use /Zm to specify a higher limit" in its own standard +// headers, so you need to ensure you do increase the heap size before enabling +// this option for this compiler. +// +// Default is 0 for compatibility reasons. +// +// Recommended setting: 1 unless compatibility with the official wxWidgets +// build and/or the existing code is a concern. +#define wxUSE_STD_CONTAINERS 0 + +// Use standard C++ streams if 1 instead of wx streams in some places. If +// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the +// standard streams library. +// +// Notice that enabling this does not replace wx streams with std streams +// everywhere, in a lot of places wx streams are used no matter what. +// +// Default is 1 if compiler supports it. +// +// Recommended setting: 1 if you use the standard streams anyhow and so +// dependency on the standard streams library is not a +// problem +#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT + +// Enable minimal interoperability with the standard C++ string class if 1. +// "Minimal" means that wxString can be constructed from std::string or +// std::wstring but can't be implicitly converted to them. You need to enable +// the option below for the latter. +// +// Default is 1 for most compilers. +// +// Recommended setting: 1 unless you want to ensure your program doesn't use +// the standard C++ library at all. +#define wxUSE_STD_STRING wxUSE_STD_DEFAULT + +// Make wxString as much interchangeable with std::[w]string as possible, in +// particular allow implicit conversion of wxString to either of these classes. +// This comes at a price (or a benefit, depending on your point of view) of not +// allowing implicit conversion to "const char *" and "const wchar_t *". +// +// Because a lot of existing code relies on these conversions, this option is +// disabled by default but can be enabled for your build if you don't care +// about compatibility. +// +// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled. +// +// Recommended setting: 0 to remain compatible with the official builds of +// wxWidgets. +#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL + +// VC++ 4.2 and above allows and but you can't mix +// them. Set this option to 1 to use , 0 to use . +// +// Note that newer compilers (including VC++ 7.1 and later) don't support +// wxUSE_IOSTREAMH == 1 and so will be used anyhow. +// +// Default is 0. +// +// Recommended setting: 0, only set to 1 if you use a really old compiler +#define wxUSE_IOSTREAMH 0 + + // ---------------------------------------------------------------------------- // non GUI features selection // ---------------------------------------------------------------------------- @@ -652,6 +706,34 @@ // Recommended setting: 1 #define wxUSE_STC 1 +// Use wxWidget's web viewing classes +// +// Default is 1 +// +// Recommended setting: 1 +#define wxUSE_WEBVIEW 1 + +// Use the IE wxWebView backend +// +// Default is 1 on MSW +// +// Recommended setting: 1 +#ifdef __WXMSW__ +#define wxUSE_WEBVIEW_IE 1 +#else +#define wxUSE_WEBVIEW_IE 0 +#endif + +// Use the WebKit wxWebView backend +// +// Default is 1 on GTK and OSX +// +// Recommended setting: 1 +#if defined(__WXGTK__) || defined(__WXOSX__) +#define wxUSE_WEBVIEW_WEBKIT 1 +#else +#define wxUSE_WEBVIEW_WEBKIT 0 +#endif // Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced // 2D drawing API. (Still somewhat experimental) @@ -750,6 +832,7 @@ // // Recommended setting: 1 #define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl +#define wxUSE_BANNERWINDOW 1 // wxBannerWindow #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl @@ -785,8 +868,10 @@ #define wxUSE_STATTEXT 1 // wxStaticText #define wxUSE_STATBMP 1 // wxStaticBitmap #define wxUSE_TEXTCTRL 1 // wxTextCtrl +#define wxUSE_TIMEPICKCTRL 1 // wxTimePickerCtrl #define wxUSE_TOGGLEBTN 1 // requires wxButton #define wxUSE_TREECTRL 1 // wxTreeCtrl +#define wxUSE_TREELISTCTRL 1 // wxTreeListCtrl // Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR // below either wxStatusBar95 or a generic wxStatusBar will be used. @@ -1003,6 +1088,14 @@ // Recommended setting: 1 #define wxUSE_NOTIFICATION_MESSAGE 1 +// wxRichToolTip is a customizable tooltip class which has more functionality +// than the stock (but native, unlike this class) wxToolTip. +// +// Default is 1. +// +// Recommended setting: 1 (but can be safely set to 0 if you don't need it) +#define wxUSE_RICHTOOLTIP 1 + // Use wxSashWindow class. // // Default is 1. @@ -1308,28 +1401,15 @@ // to create files in SVG (Scalable Vector Graphics) format. #define wxUSE_SVG 1 -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. +// Should wxDC provide SetTransformMatrix() and related methods? // -// Default is 1. +// Default is 1 but can be set to 0 if this functionality is not used. Notice +// that currently only wxMSW supports this so setting this to 0 doesn't change +// much for non-MSW platforms (although it will still save a few bytes +// probably). // -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows and but you can't mix -// them. Set this option to 1 to use , 0 to use . -// -// Note that newer compilers (including VC++ 7.1 and later) don't support -// wxUSE_IOSTREAMH == 1 and so will be used anyhow. -// -// Default is 0. -// -// Recommended setting: 0, only set to 1 if you use a really old compiler -#define wxUSE_IOSTREAMH 0 +// Recommended setting: 1. +#define wxUSE_DC_TRANSFORM_MATRIX 1 // ---------------------------------------------------------------------------- // image format support @@ -1397,6 +1477,26 @@ /* --- end common options --- */ +// ---------------------------------------------------------------------------- +// Unix-specific options settings +// ---------------------------------------------------------------------------- + +// use wxSelectDispatcher class +#define wxUSE_SELECT_DISPATCHER 1 + +// use wxEpollDispatcher class (Linux only) +#define wxUSE_EPOLL_DISPATCHER 0 + +/* + Use GStreamer for Unix. + + Default is 0 as this requires a lot of dependencies which might not be + available. + + Recommended setting: 1 (wxMediaCtrl won't work by default without it). + */ +#define wxUSE_GSTREAMER 0 + // ---------------------------------------------------------------------------- // Mac-specific settings // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/osx/sound.h b/Externals/wxWidgets3/include/wx/osx/sound.h index 1318e76315..45538773d0 100644 --- a/Externals/wxWidgets3/include/wx/osx/sound.h +++ b/Externals/wxWidgets3/include/wx/osx/sound.h @@ -5,7 +5,7 @@ // Author: Ryan Norton, Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: sound.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: sound.h 69178 2011-09-21 15:08:02Z VZ $ // Copyright: (c) Ryan Norton, Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -49,13 +49,13 @@ class WXDLLIMPEXP_ADV wxSound : public wxSoundBase public: wxSound(); wxSound(const wxString& fileName, bool isResource = false); - wxSound(int size, const wxByte* data); + wxSound(size_t size, const void* data); virtual ~wxSound(); // Create from resource or file bool Create(const wxString& fileName, bool isResource = false); // Create from data - bool Create(int size, const wxByte* data); + bool Create(size_t size, const void* data); bool IsOk() const { return m_data != NULL; } diff --git a/Externals/wxWidgets3/include/wx/osx/spinctrl.h b/Externals/wxWidgets3/include/wx/osx/spinctrl.h index c274fb33f2..3803f9d526 100644 --- a/Externals/wxWidgets3/include/wx/osx/spinctrl.h +++ b/Externals/wxWidgets3/include/wx/osx/spinctrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 28.10.99 -// RCS-ID: $Id: spinctrl.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: spinctrl.h 68366 2011-07-24 22:19:33Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -33,7 +33,7 @@ class WXDLLIMPEXP_FWD_CORE wxSpinCtrlButton; // wxSpinCtrl is a combination of wxTextCtrl and wxSpinButton // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxSpinCtrl : public wxControl +class WXDLLIMPEXP_CORE wxSpinCtrl : public wxNavigationEnabled { public: wxSpinCtrl() { Init(); } @@ -93,8 +93,6 @@ public: // number is out of range bool GetTextValue(int *val) const; - WX_DECLARE_CONTROL_CONTAINER(); - protected: // override the base class virtuals involved into geometry calculations virtual wxSize DoGetBestSize() const; @@ -113,7 +111,6 @@ private: int m_oldValue; private: - DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS(wxSpinCtrl) }; diff --git a/Externals/wxWidgets3/include/wx/osx/statbox.h b/Externals/wxWidgets3/include/wx/osx/statbox.h index df046443fe..cdbdead32e 100644 --- a/Externals/wxWidgets3/include/wx/osx/statbox.h +++ b/Externals/wxWidgets3/include/wx/osx/statbox.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: statbox.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: statbox.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -38,8 +38,8 @@ class WXDLLIMPEXP_CORE wxStaticBox: public wxControl long style = 0, const wxString& name = wxStaticBoxNameStr); - virtual void Command(wxCommandEvent& WXUNUSED(event)) {}; - virtual void ProcessCommand(wxCommandEvent& WXUNUSED(event)) {}; + virtual void Command(wxCommandEvent& WXUNUSED(event)) {} + virtual void ProcessCommand(wxCommandEvent& WXUNUSED(event)) {} virtual void GetBordersForSizer(int *borderTop, int *borderOther) const; diff --git a/Externals/wxWidgets3/include/wx/osx/textctrl.h b/Externals/wxWidgets3/include/wx/osx/textctrl.h index 411bfbf30e..70e0863c35 100644 --- a/Externals/wxWidgets3/include/wx/osx/textctrl.h +++ b/Externals/wxWidgets3/include/wx/osx/textctrl.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: textctrl.h 66770 2011-01-26 15:51:39Z SC $ +// RCS-ID: $Id: textctrl.h 70355 2012-01-15 15:54:53Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -75,10 +75,6 @@ public: virtual void MarkDirty(); virtual void DiscardEdits(); - // set the max number of characters which may be entered - // in a single line text control - virtual void SetMaxLength(unsigned long len); - // set the grayed out hint text virtual bool SetHint(const wxString& hint); virtual wxString GetHint() const; diff --git a/Externals/wxWidgets3/include/wx/osx/textentry.h b/Externals/wxWidgets3/include/wx/osx/textentry.h index 07ae94e81c..7a6a66f58b 100644 --- a/Externals/wxWidgets3/include/wx/osx/textentry.h +++ b/Externals/wxWidgets3/include/wx/osx/textentry.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: Kevin Ollivier // Created: 1998-01-01 -// RCS-ID: $Id: textentry.h 67232 2011-03-18 15:10:15Z DS $ +// RCS-ID: $Id: textentry.h 67526 2011-04-17 23:14:15Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -32,12 +32,8 @@ class WXDLLIMPEXP_CORE wxTextEntry: public wxTextEntryBase { public: - wxTextEntry() - : m_editable(true), - m_maxLength(0) - { } - - virtual ~wxTextEntry() {}; + wxTextEntry(); + virtual ~wxTextEntry(); virtual bool IsEditable() const; @@ -88,10 +84,18 @@ public: // -------------- virtual wxTextWidgetImpl * GetTextPeer() const; + wxTextCompleter *OSXGetCompleter() const { return m_completer; } + protected: virtual wxString DoGetValue() const; + virtual bool DoAutoCompleteStrings(const wxArrayString& choices); + virtual bool DoAutoCompleteCustom(wxTextCompleter *completer); + + // The object providing auto-completions or NULL if none. + wxTextCompleter *m_completer; + bool m_editable; // need to make this public because of the current implementation via callbacks diff --git a/Externals/wxWidgets3/include/wx/osx/tglbtn.h b/Externals/wxWidgets3/include/wx/osx/tglbtn.h index 9ea7406baa..e68a2ba60c 100644 --- a/Externals/wxWidgets3/include/wx/osx/tglbtn.h +++ b/Externals/wxWidgets3/include/wx/osx/tglbtn.h @@ -5,7 +5,7 @@ // Author: Stefan Csomor // Modified by: // Created: 08.02.01 -// RCS-ID: $Id: tglbtn.h 66992 2011-02-22 13:25:30Z VZ $ +// RCS-ID: $Id: tglbtn.h 67949 2011-06-16 00:43:22Z RD $ // Copyright: (c) 2004 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -13,53 +13,6 @@ #ifndef _WX_TOGGLEBUTTON_H_ #define _WX_TOGGLEBUTTON_H_ -class WXDLLIMPEXP_CORE wxBitmapToggleButton : public wxToggleButtonBase -{ -public: - wxBitmapToggleButton() {} - wxBitmapToggleButton(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr) - { - Create(parent, id, label, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr); - - virtual void SetValue(bool value); - virtual bool GetValue() const ; - - virtual bool OSXHandleClicked( double timestampsec ); - - virtual void Command(wxCommandEvent& event); - -private: - wxBitmap m_bitmap; - - int m_marginX, - m_marginY; - -protected: - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - virtual wxSize DoGetBestSize() const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxBitmapToggleButton) -}; - - class WXDLLIMPEXP_CORE wxToggleButton : public wxToggleButtonBase { public: @@ -94,11 +47,40 @@ public: protected: virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - virtual wxSize DoGetBestSize() const; private: DECLARE_DYNAMIC_CLASS_NO_COPY(wxToggleButton) }; + +class WXDLLIMPEXP_CORE wxBitmapToggleButton : public wxToggleButton +{ +public: + wxBitmapToggleButton() {} + wxBitmapToggleButton(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr) + { + Create(parent, id, label, pos, size, style, validator, name); + } + + bool Create(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr); + +private: + DECLARE_DYNAMIC_CLASS_NO_COPY(wxBitmapToggleButton) +}; + #endif // _WX_TOGGLEBUTTON_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/timectrl.h b/Externals/wxWidgets3/include/wx/osx/timectrl.h new file mode 100644 index 0000000000..2d093acd54 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/timectrl.h @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/osx/timectrl.h +// Purpose: Declaration of wxOSX-specific wxTimePickerCtrl class. +// Author: Vadim Zeitlin +// Created: 2011-12-18 +// RCS-ID: $Id: timectrl.h 70071 2011-12-20 21:27:14Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_OSX_TIMECTRL_H_ +#define _WX_OSX_TIMECTRL_H_ + +// ---------------------------------------------------------------------------- +// wxTimePickerCtrl +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxTimePickerCtrl : public wxTimePickerCtrlBase +{ +public: + // Constructors. + wxTimePickerCtrl() { } + + wxTimePickerCtrl(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr) + { + Create(parent, id, dt, pos, size, style, validator, name); + } + + bool Create(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr); + + virtual void OSXGenerateEvent(const wxDateTime& dt); + +private: + wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxTimePickerCtrl); +}; + +#endif // _WX_OSX_TIMECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/toolbar.h b/Externals/wxWidgets3/include/wx/osx/toolbar.h index 7ebb40e028..f4a21982a6 100644 --- a/Externals/wxWidgets3/include/wx/osx/toolbar.h +++ b/Externals/wxWidgets3/include/wx/osx/toolbar.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: toolbar.h 66993 2011-02-22 13:25:38Z VZ $ +// RCS-ID: $Id: toolbar.h 70854 2012-03-10 00:01:09Z RD $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -77,6 +77,18 @@ class WXDLLIMPEXP_CORE wxToolBar: public wxToolBarBase bool MacWantsNativeToolbar(); bool MacTopLevelHasNativeToolbar(bool *ownToolbarInstalled) const; #endif + + virtual wxToolBarToolBase *CreateTool(int id, + const wxString& label, + const wxBitmap& bmpNormal, + const wxBitmap& bmpDisabled = wxNullBitmap, + wxItemKind kind = wxITEM_NORMAL, + wxObject *clientData = NULL, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString); + virtual wxToolBarToolBase *CreateTool(wxControl *control, + const wxString& label); + protected: // common part of all ctors void Init(); @@ -86,8 +98,11 @@ protected: void DoSetSize(int x, int y, int width, int height, int sizeFlags); #ifndef __WXOSX_IPHONE__ - virtual void DoGetSize(int *width, int *height) const; + virtual void DoGetSize(int *width, int *height) const; virtual wxSize DoGetBestSize() const; +#endif +#ifdef __WXOSX_COCOA__ + virtual void DoGetPosition(int*x, int *y) const; #endif virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); @@ -96,17 +111,6 @@ protected: virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle); virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle); - virtual wxToolBarToolBase *CreateTool(int id, - const wxString& label, - const wxBitmap& bmpNormal, - const wxBitmap& bmpDisabled, - wxItemKind kind, - wxObject *clientData, - const wxString& shortHelp, - const wxString& longHelp); - virtual wxToolBarToolBase *CreateTool(wxControl *control, - const wxString& label); - DECLARE_EVENT_TABLE() #if wxOSX_USE_NATIVE_TOOLBAR bool m_macUsesNativeToolbar ; diff --git a/Externals/wxWidgets3/include/wx/osx/toplevel.h b/Externals/wxWidgets3/include/wx/osx/toplevel.h index c0c6373e08..afe1f1d80f 100644 --- a/Externals/wxWidgets3/include/wx/osx/toplevel.h +++ b/Externals/wxWidgets3/include/wx/osx/toplevel.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 20.09.01 -// RCS-ID: $Id: toplevel.h 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: toplevel.h 70295 2012-01-08 14:52:47Z VZ $ // Copyright: (c) 2001 Stefan Csomor // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -51,9 +51,6 @@ public: virtual wxPoint GetClientAreaOrigin() const; - virtual bool SetShape(const wxRegion& region) - { return DoSetShape(region); } - // Attracts the users attention to this window if the application is // inactive (should be called when a background event occurs) virtual void RequestUserAttention(int flags = wxUSER_ATTENTION_INFO); @@ -80,6 +77,8 @@ public: virtual void OSXSetModified(bool modified); virtual bool OSXIsModified() const; + virtual void SetRepresentedFilename(const wxString& filename); + protected: // common part of all ctors void Init(); diff --git a/Externals/wxWidgets3/include/wx/osx/treectrl.h b/Externals/wxWidgets3/include/wx/osx/treectrl.h index 1f5e9bcc00..090111624f 100644 --- a/Externals/wxWidgets3/include/wx/osx/treectrl.h +++ b/Externals/wxWidgets3/include/wx/osx/treectrl.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: treectrl.h 64943 2010-07-13 13:29:58Z VZ $ +// RCS-ID: $Id: treectrl.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -225,7 +225,7 @@ public: bool SortChildren(long item); bool EnsureVisible(long item); - void Command(wxCommandEvent& event) { ProcessCommand(event); }; + void Command(wxCommandEvent& event) { ProcessCommand(event); } protected: wxTextCtrl* m_textCtrl; diff --git a/Externals/wxWidgets3/include/wx/osx/webview_webkit.h b/Externals/wxWidgets3/include/wx/osx/webview_webkit.h new file mode 100644 index 0000000000..d0a93e653e --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/webview_webkit.h @@ -0,0 +1,163 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/osx/webkit.h +// Purpose: wxWebViewWebKit - embeddable web kit control, +// OS X implementation of web view component +// Author: Jethro Grassie / Kevin Ollivier / Marianne Gagnon +// Modified by: +// Created: 2004-4-16 +// RCS-ID: $Id: webview_webkit.h 69074 2011-09-12 18:35:39Z SJL $ +// Copyright: (c) Jethro Grassie / Kevin Ollivier / Marianne Gagnon +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_WEBKIT_H +#define _WX_WEBKIT_H + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT && (defined(__WXOSX_COCOA__) \ + || defined(__WXOSX_CARBON__)) + +#include "wx/control.h" +#include "wx/webview.h" + +// ---------------------------------------------------------------------------- +// Web Kit Control +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_WEBVIEW wxWebViewWebKit : public wxWebView +{ +public: + wxDECLARE_DYNAMIC_CLASS(wxWebViewWebKit); + + wxWebViewWebKit() {} + wxWebViewWebKit(wxWindow *parent, + wxWindowID winID = wxID_ANY, + const wxString& strURL = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxString& name = wxWebViewNameStr) + { + Create(parent, winID, strURL, pos, size, style, name); + } + bool Create(wxWindow *parent, + wxWindowID winID = wxID_ANY, + const wxString& strURL = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxString& name = wxWebViewNameStr); + virtual ~wxWebViewWebKit(); + + virtual bool CanGoBack() const; + virtual bool CanGoForward() const; + virtual void GoBack(); + virtual void GoForward(); + virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT); + virtual void Stop(); + virtual wxString GetPageSource() const; + virtual wxString GetPageText() const; + + //We do not want to hide the other overloads + using wxWebView::SetPage; + virtual void SetPage(const wxString& html, const wxString& baseUrl); + + virtual void Print(); + + virtual void LoadURL(const wxString& url); + virtual wxString GetCurrentURL() const; + virtual wxString GetCurrentTitle() const; + virtual wxWebViewZoom GetZoom() const; + virtual void SetZoom(wxWebViewZoom zoom); + + virtual void SetZoomType(wxWebViewZoomType zoomType); + virtual wxWebViewZoomType GetZoomType() const; + virtual bool CanSetZoomType(wxWebViewZoomType type) const; + + virtual bool IsBusy() const { return m_busy; } + + //History functions + virtual void ClearHistory(); + virtual void EnableHistory(bool enable = true); + virtual wxVector > GetBackwardHistory(); + virtual wxVector > GetForwardHistory(); + virtual void LoadHistoryItem(wxSharedPtr item); + + //Undo / redo functionality + virtual bool CanUndo() const; + virtual bool CanRedo() const; + virtual void Undo(); + virtual void Redo(); + + //Clipboard functions + virtual bool CanCut() const { return true; } + virtual bool CanCopy() const { return true; } + virtual bool CanPaste() const { return true; } + virtual void Cut(); + virtual void Copy(); + virtual void Paste(); + + //Editing functions + virtual void SetEditable(bool enable = true); + virtual bool IsEditable() const; + + //Selection + virtual void DeleteSelection(); + virtual bool HasSelection() const; + virtual void SelectAll(); + virtual wxString GetSelectedText() const; + virtual wxString GetSelectedSource() const; + virtual void ClearSelection(); + + void RunScript(const wxString& javascript); + + //Virtual Filesystem Support + virtual void RegisterHandler(wxSharedPtr handler); + + // ---- methods not from the parent (common) interface + bool CanGetPageSource() const; + + void SetScrollPos(int pos); + int GetScrollPos(); + + bool CanIncreaseTextSize() const; + void IncreaseTextSize(); + bool CanDecreaseTextSize() const; + void DecreaseTextSize(); + + float GetWebkitZoom() const; + void SetWebkitZoom(float zoom); + + // don't hide base class virtuals + virtual void SetScrollPos( int orient, int pos, bool refresh = true ) + { return wxControl::SetScrollPos(orient, pos, refresh); } + virtual int GetScrollPos( int orient ) const + { return wxControl::GetScrollPos(orient); } + + //we need to resize the webview when the control size changes + void OnSize(wxSizeEvent &event); + void OnMove(wxMoveEvent &event); + void OnMouseEvents(wxMouseEvent &event); + + bool m_busy; + +protected: + DECLARE_EVENT_TABLE() + void MacVisibilityChanged(); + +private: + wxWindow *m_parent; + wxWindowID m_windowID; + wxString m_pageTitle; + + struct objc_object *m_webView; + + // we may use this later to setup our own mouse events, + // so leave it in for now. + void* m_webKitCtrlEventHandler; + //It should be WebView*, but WebView is an Objective-C class + //TODO: look into using DECLARE_WXCOCOA_OBJC_CLASS rather than this. +}; + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT + +#endif // _WX_WEBKIT_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/webviewhistoryitem_webkit.h b/Externals/wxWidgets3/include/wx/osx/webviewhistoryitem_webkit.h new file mode 100644 index 0000000000..05976803f5 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/osx/webviewhistoryitem_webkit.h @@ -0,0 +1,35 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/osx/webviewhistoryitem.h +// Purpose: wxWebViewHistoryItem header for OSX +// Author: Steven Lamerton +// Id: $Id: webviewhistoryitem_webkit.h 69074 2011-09-12 18:35:39Z SJL $ +// Copyright: (c) 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_OSX_WEBVIEWHISTORYITEM_H_ +#define _WX_OSX_WEBVIEWHISTORYITEM_H_ + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT && (defined(__WXOSX_COCOA__) \ + || defined(__WXOSX_CARBON__)) + +class WXDLLIMPEXP_WEBVIEW wxWebViewHistoryItem +{ +public: + wxWebViewHistoryItem(const wxString& url, const wxString& title) : + m_url(url), m_title(title) {} + wxString GetUrl() { return m_url; } + wxString GetTitle() { return m_title; } + + friend class wxWebViewWebKit; + +private: + wxString m_url, m_title; + struct objc_object *m_histItem; +}; + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT + +#endif // _WX_OSX_WEBVIEWHISTORYITEM_H_ diff --git a/Externals/wxWidgets3/include/wx/osx/window.h b/Externals/wxWidgets3/include/wx/osx/window.h index 49aa250906..1ac3916a8c 100644 --- a/Externals/wxWidgets3/include/wx/osx/window.h +++ b/Externals/wxWidgets3/include/wx/osx/window.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: window.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: window.h 70765 2012-03-01 15:04:42Z JS $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -114,6 +114,14 @@ public: virtual bool Reparent( wxWindowBase *newParent ); +#if wxUSE_HOTKEY && wxOSX_USE_COCOA_OR_CARBON + // hot keys (system wide accelerators) + // ----------------------------------- + + virtual bool RegisterHotKey(int hotkeyId, int modifiers, int keycode); + virtual bool UnregisterHotKey(int hotkeyId); +#endif // wxUSE_HOTKEY + #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget( wxDropTarget *dropTarget ); #endif @@ -280,6 +288,9 @@ public: float GetContentScaleFactor() const ; + // internal response to size events + virtual void MacOnInternalSize() {} + protected: // For controls like radio buttons which are genuinely composite wxList m_subControls; diff --git a/Externals/wxWidgets3/include/wx/palette.h b/Externals/wxWidgets3/include/wx/palette.h index dab7040c58..4c29f23b98 100644 --- a/Externals/wxWidgets3/include/wx/palette.h +++ b/Externals/wxWidgets3/include/wx/palette.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: -// RCS-ID: $Id: palette.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: palette.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -28,16 +28,12 @@ public: virtual int GetColoursCount() const { wxFAIL_MSG( wxT("not implemented") ); return 0; } }; -#if defined(__WXPALMOS__) - #include "wx/palmos/palette.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/palette.h" #elif defined(__WXX11__) || defined(__WXMOTIF__) #include "wx/x11/palette.h" #elif defined(__WXGTK__) || defined(__WXCOCOA__) #include "wx/generic/paletteg.h" -#elif defined(__WXMGL__) - #include "wx/mgl/palette.h" #elif defined(__WXMAC__) #include "wx/osx/palette.h" #elif defined(__WXPM__) diff --git a/Externals/wxWidgets3/include/wx/panel.h b/Externals/wxWidgets3/include/wx/panel.h index 8241cc51d0..18c7aacd47 100644 --- a/Externals/wxWidgets3/include/wx/panel.h +++ b/Externals/wxWidgets3/include/wx/panel.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: -// RCS-ID: $Id: panel.h 67253 2011-03-20 00:00:49Z VZ $ +// RCS-ID: $Id: panel.h 69378 2011-10-11 17:07:43Z VZ $ // Copyright: (c) Julian Smart // (c) 2011 Vadim Zeitlin // Licence: wxWindows Licence @@ -28,10 +28,10 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxPanelNameStr[]; // wxPanel contains other controls and implements TAB traversal between them // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxPanelBase : public wxWindow +class WXDLLIMPEXP_CORE wxPanelBase : public wxNavigationEnabled { public: - wxPanelBase(); + wxPanelBase() { } // Derived classes should also provide this constructor: /* @@ -52,31 +52,12 @@ public: const wxString& name = wxPanelNameStr); - // Use the given bitmap to tile the background of this panel. This bitmap - // will show through any transparent children. - // - // Notice that you must not prevent the base class EVT_ERASE_BACKGROUND - // handler from running (i.e. not to handle this event yourself) for this - // to work. - void SetBackgroundBitmap(const wxBitmap& bmp) - { - DoSetBackgroundBitmap(bmp); - } - - // implementation from now on // -------------------------- virtual void InitDialog(); - WX_DECLARE_CONTROL_CONTAINER(); - -protected: - virtual void DoSetBackgroundBitmap(const wxBitmap& bmp) = 0; - private: - wxDECLARE_EVENT_TABLE(); - wxDECLARE_NO_COPY_CLASS(wxPanelBase); }; diff --git a/Externals/wxWidgets3/include/wx/pen.h b/Externals/wxWidgets3/include/wx/pen.h index 01895e35f4..75147dcf37 100644 --- a/Externals/wxWidgets3/include/wx/pen.h +++ b/Externals/wxWidgets3/include/wx/pen.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: -// RCS-ID: $Id: pen.h 66054 2010-11-07 13:16:20Z VZ $ +// RCS-ID: $Id: pen.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -99,9 +99,7 @@ public: } }; -#if defined(__WXPALMOS__) - #include "wx/palmos/pen.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/pen.h" #elif defined(__WXMOTIF__) || defined(__WXX11__) #include "wx/x11/pen.h" @@ -109,8 +107,6 @@ public: #include "wx/gtk/pen.h" #elif defined(__WXGTK__) #include "wx/gtk1/pen.h" -#elif defined(__WXMGL__) - #include "wx/mgl/pen.h" #elif defined(__WXDFB__) #include "wx/dfb/pen.h" #elif defined(__WXMAC__) diff --git a/Externals/wxWidgets3/include/wx/persist.h b/Externals/wxWidgets3/include/wx/persist.h index e238da9a26..2ac6a4423e 100644 --- a/Externals/wxWidgets3/include/wx/persist.h +++ b/Externals/wxWidgets3/include/wx/persist.h @@ -3,7 +3,7 @@ // Purpose: common classes for persistence support // Author: Vadim Zeitlin // Created: 2009-01-18 -// RCS-ID: $Id: persist.h 64887 2010-07-11 10:44:23Z VZ $ +// RCS-ID: $Id: persist.h 69583 2011-10-30 10:08:18Z VZ $ // Copyright: (c) 2009 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -44,6 +44,14 @@ wxPersistentObject *wxCreatePersistentObject(T *obj); class WXDLLIMPEXP_CORE wxPersistenceManager { public: + // Call this method to specify a non-default persistence manager to use. + // This function should usually be called very early to affect creation of + // all persistent controls and the object passed to it must have a lifetime + // long enough to be still alive when the persistent controls are destroyed + // and need it to save their state so typically this would be a global or a + // wxApp member. + static void Set(wxPersistenceManager& manager); + // accessor to the unique persistence manager object static wxPersistenceManager& Get(); @@ -133,7 +141,7 @@ public: #undef wxPERSIST_DECLARE_SAVE_RESTORE_FOR -private: +protected: // ctor is private, use Get() wxPersistenceManager() { @@ -142,15 +150,18 @@ private: } - // helpers of Save/Restore() - // - // TODO: make this customizable by allowing - // (a) specifying custom wxConfig object to use - // (b) allowing to use something else entirely - wxConfigBase *GetConfig() const { return wxConfigBase::Get(); } - wxString GetKey(const wxPersistentObject& who, const wxString& name) const; + // Return the config object to use, by default just the global one but a + // different one could be used by the derived class if needed. + virtual wxConfigBase *GetConfig() const { return wxConfigBase::Get(); } + + // Return the path to use for saving the setting with the given name for + // the specified object (notice that the name is the name of the setting, + // not the name of the object itself which can be retrieved with GetName()). + virtual wxString GetKey(const wxPersistentObject& who, + const wxString& name) const; +private: // map with the registered objects as keys and associated // wxPersistentObjects as values wxPersistentObjectsMap m_persistentObjects; diff --git a/Externals/wxWidgets3/include/wx/persist/splitter.h b/Externals/wxWidgets3/include/wx/persist/splitter.h new file mode 100644 index 0000000000..5f8fe34158 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/persist/splitter.h @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/persist/splitter.h +// Purpose: Persistence support for wxSplitterWindow. +// Author: Vadim Zeitlin +// Created: 2011-08-31 +// RCS-ID: $Id: splitter.h 69582 2011-10-30 10:08:14Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_PERSIST_SPLITTER_H_ +#define _WX_PERSIST_SPLITTER_H_ + +#include "wx/persist/window.h" + +#include "wx/splitter.h" + +// ---------------------------------------------------------------------------- +// string constants used by wxPersistentSplitter +// ---------------------------------------------------------------------------- + +#define wxPERSIST_SPLITTER_KIND "Splitter" + +// Special position value of -1 means the splitter is not split at all. +#define wxPERSIST_SPLITTER_POSITION "Position" + +// ---------------------------------------------------------------------------- +// wxPersistentSplitter: supports saving/restoring splitter position +// ---------------------------------------------------------------------------- + +class wxPersistentSplitter : public wxPersistentWindow +{ +public: + wxPersistentSplitter(wxSplitterWindow* splitter) + : wxPersistentWindow(splitter) + { + } + + virtual void Save() const + { + wxSplitterWindow* const splitter = Get(); + + int pos = splitter->IsSplit() ? splitter->GetSashPosition() : -1; + SaveValue(wxPERSIST_SPLITTER_POSITION, pos); + } + + virtual bool Restore() + { + int pos; + if ( !RestoreValue(wxPERSIST_SPLITTER_POSITION, &pos) ) + return false; + + if ( pos == -1 ) + Get()->Unsplit(); + else + Get()->SetSashPosition(pos); + + return true; + } + + virtual wxString GetKind() const { return wxPERSIST_SPLITTER_KIND; } +}; + +inline wxPersistentObject *wxCreatePersistentObject(wxSplitterWindow* splitter) +{ + return new wxPersistentSplitter(splitter); +} + +#endif // _WX_PERSIST_SPLITTER_H_ diff --git a/Externals/wxWidgets3/include/wx/pickerbase.h b/Externals/wxWidgets3/include/wx/pickerbase.h index c578a157a0..ff5c86f0de 100644 --- a/Externals/wxWidgets3/include/wx/pickerbase.h +++ b/Externals/wxWidgets3/include/wx/pickerbase.h @@ -5,7 +5,7 @@ // Modified by: // Created: 14/4/2006 // Copyright: (c) Vadim Zeitlin, Francesco Montorsi -// RCS-ID: $Id: pickerbase.h 52834 2008-03-26 15:06:00Z FM $ +// RCS-ID: $Id: pickerbase.h 68921 2011-08-27 14:11:25Z VZ $ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -31,13 +31,14 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxButtonNameStr[]; // ---------------------------------------------------------------------------- #define wxPB_USE_TEXTCTRL 0x0002 +#define wxPB_SMALL 0x8000 -class WXDLLIMPEXP_CORE wxPickerBase : public wxControl +class WXDLLIMPEXP_CORE wxPickerBase : public wxNavigationEnabled { public: // ctor: text is the associated text control wxPickerBase() : m_text(NULL), m_picker(NULL), m_sizer(NULL) - { WX_INIT_CONTROL_CONTAINER(); } + { } virtual ~wxPickerBase() {} @@ -121,8 +122,6 @@ protected: void OnTextCtrlUpdate(wxCommandEvent &); void OnTextCtrlKillFocus(wxFocusEvent &); - void OnSize(wxSizeEvent &); - // returns the set of styles for the attached wxTextCtrl // from given wxPickerBase's styles virtual long GetTextCtrlStyle(long style) const @@ -178,10 +177,6 @@ protected: private: DECLARE_ABSTRACT_CLASS(wxPickerBase) - DECLARE_EVENT_TABLE() - - // This class must be something just like a panel... - WX_DECLARE_CONTROL_CONTAINER(); }; diff --git a/Externals/wxWidgets3/include/wx/platform.h b/Externals/wxWidgets3/include/wx/platform.h index c6861ca5c2..74ad218a3a 100644 --- a/Externals/wxWidgets3/include/wx/platform.h +++ b/Externals/wxWidgets3/include/wx/platform.h @@ -4,7 +4,7 @@ * Author: Vadim Zeitlin * Modified by: * Created: 29.10.01 (extracted from wx/defs.h) -* RCS-ID: $Id: platform.h 66077 2010-11-09 23:53:42Z VZ $ +* RCS-ID: $Id: platform.h 70757 2012-02-29 22:40:24Z VZ $ * Copyright: (c) 1997-2001 Vadim Zeitlin * Licence: wxWindows licence */ @@ -15,23 +15,35 @@ #define _WX_PLATFORM_H_ + /* Codewarrior doesn't define any Windows symbols until some headers are included */ #ifdef __MWERKS__ # include - -# if !defined(__WXMAC__) && !defined(__WINDOWS__) && !defined(WIN32) && !defined(_WIN32_WCE) -# define __PALMOS__ 0x05000000 -# endif #endif #ifdef __WXMAC_XCODE__ # include # include # include +# ifndef MAC_OS_X_VERSION_10_4 +# define MAC_OS_X_VERSION_10_4 1040 +# endif +# ifndef MAC_OS_X_VERSION_10_5 +# define MAC_OS_X_VERSION_10_5 1050 +# endif +# ifndef MAC_OS_X_VERSION_10_6 +# define MAC_OS_X_VERSION_10_6 1060 +# endif # include "wx/osx/config_xcode.h" +# ifndef __WXOSX__ +# define __WXOSX__ 1 +# endif +# ifndef __WXMAC__ +# define __WXMAC__ 1 +# endif #endif /* @@ -44,33 +56,6 @@ # endif #endif -#if defined(__PALMOS__) -# if __PALMOS__ == 0x06000000 -# define __WXPALMOS6__ 1 -# endif -# if __PALMOS__ == 0x05000000 -# define __WXPALMOS5__ 1 -# endif -# ifndef __WXPALMOS__ -# define __WXPALMOS__ 1 -# endif -# ifdef __WXMSW__ -# undef __WXMSW__ -# endif -# ifdef __WINDOWS__ -# undef __WINDOWS__ -# endif -# ifdef __WIN32__ -# undef __WIN32__ -# endif -# ifdef WIN32 -# undef WIN32 -# endif -# ifdef _WIN32 -# undef _WIN32 -# endif -#endif - #if defined(_WIN64) # ifndef _WIN32 /* @@ -164,6 +149,11 @@ # define __WXHANDHELD__ #endif +#ifdef __ANDROID__ +# define __WXANDROID__ +# include "wx/android/config_android.h" +#endif + /* Include wx/setup.h for the Unix platform defines generated by configure and the library compilation options @@ -182,6 +172,13 @@ #include "wx/setup_gccxml.h" #endif +/* + Convenience for any optional classes that use the wxAnyButton base class. + */ +#if wxUSE_TOGGLEBTN || wxUSE_BUTTON + #define wxHAS_ANY_BUTTON +#endif + /* Hardware platform detection. @@ -273,7 +270,7 @@ /* Preprocessor in older Borland compilers have major problems concatenating with ##. Specifically, if the string operands being - concatenated have special meaning (e.g L"str", 123i64 etc) + concatenated have special meaning (e.g. L"str", 123i64 etc) then ## will not concatenate the operands correctly. As a workaround, define wxPREPEND* and wxAPPEND* without using @@ -434,20 +431,6 @@ # endif # define wxSIZE_T_IS_UINT -/* - OS: Palm OS - */ -#elif defined(__PALMOS__) -# ifdef __WIN32__ -# error "__WIN32__ should not be defined for PalmOS" -# endif -# ifdef __WINDOWS__ -# error "__WINDOWS__ should not be defined for PalmOS" -# endif -# ifdef __WXMSW__ -# error "__WXMSW__ should not be defined for PalmOS" -# endif - /* OS: Otherwise it must be Windows */ @@ -486,6 +469,8 @@ # define __VISUALC9__ # elif __VISUALC__ < 1700 # define __VISUALC10__ +# elif __VISUALC__ < 1800 +# define __VISUALC11__ # else # pragma message("Please update wx/platform.h to recognize this VC++ version") # endif @@ -586,8 +571,7 @@ !defined(__WXPM__) && \ !defined(__WXMOTIF__) && \ !defined(__WXGTK__) && \ - !defined(__WXX11__) && \ - !defined(__WXPALMOS__) + !defined(__WXX11__) # include "wx/msw/gccpriv.h" #else # undef wxCHECK_W32API_VERSION @@ -789,7 +773,7 @@ * Presently, only Windows and GTK+ support wxEVT_MENU_OPEN. */ #ifndef wxUSE_IDLEMENUUPDATES -# if (defined(__WXMSW__) || defined(__WXGTK__)) && !defined(__WXUNIVERSAL__) +# if (defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXOSX__)) && !defined(__WXUNIVERSAL__) # define wxUSE_IDLEMENUUPDATES 0 # else # define wxUSE_IDLEMENUUPDATES 1 @@ -818,31 +802,6 @@ # define wxUSE_WXDIB 1 #endif -#if defined (__WXPALMOS__) -#include "wx/palmos/missing.h" -#endif // __WXPALMOS__ - -#if !defined (__WXPALMOS5__) -#define POSSEC_APPBASE -#define POSSEC_ARCHIVE -#define POSSEC_CLNTDATA -#define POSSEC_CMDLINE -#define POSSEC_CONFIG -#define POSSEC_DATETIME -#define POSSEC_DATETIME2 -#define POSSEC_DATSTRM -#define POSSEC_DIRCMN -#define POSSEC_DYNARRAY -#define POSSEC_DYNLIB -#define POSSEC_DYNLOAD -#define POSSEC_ENCCONV -#define POSSEC_EXTENDED -#define POSSEC_FFILE -#define POSSEC_FILE -#define POSSEC_FILECONF -#define POSSEC_FILEFN -#endif // __WXPALMOS5__ - /* Optionally supported C++ features. */ @@ -866,6 +825,6 @@ # define wxNO_RTTI # endif # endif -#endif // wxNO_RTTI +#endif /* wxNO_RTTI */ #endif /* _WX_PLATFORM_H_ */ diff --git a/Externals/wxWidgets3/include/wx/platinfo.h b/Externals/wxWidgets3/include/wx/platinfo.h index 59a99db827..8adabba16b 100644 --- a/Externals/wxWidgets3/include/wx/platinfo.h +++ b/Externals/wxWidgets3/include/wx/platinfo.h @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 07.07.2006 (based on wxToolkitInfo) -// RCS-ID: $Id: platinfo.h 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: platinfo.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) 2006 Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -58,11 +58,7 @@ enum wxOperatingSystemId // 1<<13 and 1<<14 available for other Unix flavours wxOS_DOS = 1 << 15, // Microsoft DOS - wxOS_OS2 = 1 << 16, // OS/2 - - wxOS_PALM_OS = 1 << 17, // Pure Palm OS - wxOS_PALM_LINUX = 1 << 18, // Palm over linux - wxOS_PALM = wxOS_PALM_OS | wxOS_PALM_LINUX + wxOS_OS2 = 1 << 16 // OS/2 }; // list of wxWidgets ports - some of them can be used with more than @@ -76,16 +72,14 @@ enum wxPortId wxPORT_MSW = 1 << 1, // wxMSW, native toolkit is Windows API wxPORT_MOTIF = 1 << 2, // wxMotif, using [Open]Motif or Lesstif wxPORT_GTK = 1 << 3, // wxGTK, using GTK+ 1.x, 2.x, GPE or Maemo - wxPORT_MGL = 1 << 4, // wxMGL, using wxUniversal + wxPORT_DFB = 1 << 4, // wxDFB, using wxUniversal wxPORT_X11 = 1 << 5, // wxX11, using wxUniversal wxPORT_PM = 1 << 6, // wxOS2, using OS/2 Presentation Manager wxPORT_OS2 = wxPORT_PM, // wxOS2, using OS/2 Presentation Manager wxPORT_MAC = 1 << 7, // wxOSX (former wxMac), using Cocoa, Carbon or iPhone API wxPORT_OSX = wxPORT_MAC, // wxOSX, using Cocoa, Carbon or iPhone API wxPORT_COCOA = 1 << 8, // wxCocoa, using Cocoa NextStep/Mac API - wxPORT_WINCE = 1 << 9, // wxWinCE, toolkit is WinCE SDK API - wxPORT_PALMOS = 1 << 10, // wxPalmOS, toolkit is PalmOS API - wxPORT_DFB = 1 << 11 // wxDFB, using wxUniversal + wxPORT_WINCE = 1 << 9 // wxWinCE, toolkit is WinCE SDK API }; // architecture of the operating system @@ -366,9 +360,7 @@ protected: #define wxWinCE wxOS_WINDOWS_CE #define wxWIN32S wxOS_WINDOWS_9X - #define wxPalmOS wxPORT_PALMOS #define wxOS2 wxPORT_OS2 - #define wxMGL wxPORT_MGL #define wxCocoa wxPORT_MAC #define wxMac wxPORT_MAC #define wxMotif wxPORT_MOTIF diff --git a/Externals/wxWidgets3/include/wx/popupwin.h b/Externals/wxWidgets3/include/wx/popupwin.h index 901fee0613..e6ed10c4e3 100644 --- a/Externals/wxWidgets3/include/wx/popupwin.h +++ b/Externals/wxWidgets3/include/wx/popupwin.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 06.01.01 -// RCS-ID: $Id: popupwin.h 67244 2011-03-19 11:57:06Z VZ $ +// RCS-ID: $Id: popupwin.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -66,8 +66,6 @@ public: #include "wx/motif/popupwin.h" #elif defined(__WXDFB__) #include "wx/dfb/popupwin.h" -#elif defined(__WXMGL__) - #include "wx/mgl/popupwin.h" #elif defined(__WXMAC__) #include "wx/osx/popupwin.h" #else @@ -112,6 +110,9 @@ public: // Overridden to grab the input on some plaforms virtual bool Show( bool show = true ); + // Override to implement delayed destruction of this window. + virtual bool Destroy(); + protected: // common part of all ctors void Init(); @@ -129,8 +130,9 @@ protected: // get alerted when child gets deleted from under us void OnDestroy(wxWindowDestroyEvent& event); -#if defined( __WXMSW__ ) || defined( __WXMAC__) - // check if the mouse needs captured or released +#if defined(__WXMSW__) ||(defined(__WXMAC__) && wxOSX_USE_CARBON) + // Check if the mouse needs to be captured or released: we must release + // when it's inside our window if we want the embedded controls to work. void OnIdle(wxIdleEvent& event); #endif diff --git a/Externals/wxWidgets3/include/wx/power.h b/Externals/wxWidgets3/include/wx/power.h index 71a2a8bffe..ea3a11c9fc 100644 --- a/Externals/wxWidgets3/include/wx/power.h +++ b/Externals/wxWidgets3/include/wx/power.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2006-05-27 -// RCS-ID: $Id: power.h 58718 2009-02-07 18:59:25Z VZ $ +// RCS-ID: $Id: power.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -42,7 +42,7 @@ enum wxBatteryState // compiling in the code for handling them which is never going to be invoked // under the other platforms, we define wxHAS_POWER_EVENTS symbol if this event // is available, it should be used to guard all code using wxPowerEvent -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #define wxHAS_POWER_EVENTS diff --git a/Externals/wxWidgets3/include/wx/private/fontmgr.h b/Externals/wxWidgets3/include/wx/private/fontmgr.h index 68d7fc7ab3..e29ac1eece 100644 --- a/Externals/wxWidgets3/include/wx/private/fontmgr.h +++ b/Externals/wxWidgets3/include/wx/private/fontmgr.h @@ -3,7 +3,7 @@ // Purpose: font management for ports that don't have their own // Author: Vaclav Slavik // Created: 2006-11-18 -// RCS-ID: $Id: fontmgr.h 62349 2009-10-09 13:04:59Z VZ $ +// RCS-ID: $Id: fontmgr.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) // (c) 2006 REA Elektronik GmbH // Licence: wxWindows licence @@ -192,9 +192,7 @@ protected: -#if defined(__WXMGL__) - #include "wx/mgl/private/fontmgr.h" -#elif defined(__WXDFB__) +#if defined(__WXDFB__) #include "wx/dfb/private/fontmgr.h" #endif diff --git a/Externals/wxWidgets3/include/wx/private/fswatcher.h b/Externals/wxWidgets3/include/wx/private/fswatcher.h index c0438243a9..8f6f72ed47 100644 --- a/Externals/wxWidgets3/include/wx/private/fswatcher.h +++ b/Externals/wxWidgets3/include/wx/private/fswatcher.h @@ -3,7 +3,7 @@ // Purpose: File system watcher impl classes // Author: Bartosz Bekier // Created: 2009-05-26 -// RCS-ID: $Id: fswatcher.h 62475 2009-10-22 11:36:35Z VZ $ +// RCS-ID: $Id: fswatcher.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2009 Bartosz Bekier // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,7 +23,7 @@ #define wxFSWatchEntry wxFSWatchEntryKq WX_DECLARE_STRING_HASH_MAP(wxSharedPtr,wxFSWatchEntries); #include "wx/unix/private/fswatcher_kqueue.h" -#elif defined(__WXMSW__) +#elif defined(__WINDOWS__) class wxFSWatchEntryMSW; #define wxFSWatchEntry wxFSWatchEntryMSW WX_DECLARE_STRING_HASH_MAP(wxSharedPtr,wxFSWatchEntries); diff --git a/Externals/wxWidgets3/include/wx/private/markupparserattr.h b/Externals/wxWidgets3/include/wx/private/markupparserattr.h index 3bf3ddcba6..1cce2f8cce 100644 --- a/Externals/wxWidgets3/include/wx/private/markupparserattr.h +++ b/Externals/wxWidgets3/include/wx/private/markupparserattr.h @@ -3,7 +3,7 @@ // Purpose: Classes mapping markup attributes to wxFont/wxColour. // Author: Vadim Zeitlin // Created: 2011-02-18 -// RCS-ID: $Id: markupparserattr.h 67073 2011-02-27 14:01:36Z VZ $ +// RCS-ID: $Id: markupparserattr.h 70447 2012-01-23 11:28:32Z VZ $ // Copyright: (c) 2011 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -78,8 +78,8 @@ public: virtual void OnUnderlinedStart() { DoChangeFont(&wxFont::Underlined); } virtual void OnUnderlinedEnd() { DoEndAttr(); } - virtual void OnStrikethroughStart() { } // TODO: No support in wxFont yet. - virtual void OnStrikethroughEnd() { } + virtual void OnStrikethroughStart() { DoChangeFont(&wxFont::Strikethrough); } + virtual void OnStrikethroughEnd() { DoEndAttr(); } virtual void OnBigStart() { DoChangeFont(&wxFont::Larger); } virtual void OnBigEnd() { DoEndAttr(); } diff --git a/Externals/wxWidgets3/include/wx/private/richtooltip.h b/Externals/wxWidgets3/include/wx/private/richtooltip.h new file mode 100644 index 0000000000..1334778e56 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/private/richtooltip.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/private/richtooltip.h +// Purpose: wxRichToolTipImpl declaration. +// Author: Vadim Zeitlin +// Created: 2011-10-18 +// RCS-ID: $Id: richtooltip.h 69463 2011-10-18 21:57:02Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_PRIVATE_RICHTOOLTIP_H_ +#define _WX_PRIVATE_RICHTOOLTIP_H_ + +#include "wx/richtooltip.h" + +// ---------------------------------------------------------------------------- +// wxRichToolTipImpl: defines wxRichToolTip implementation. +// ---------------------------------------------------------------------------- + +class wxRichToolTipImpl +{ +public: + // This is implemented in a platform-specific way. + static wxRichToolTipImpl* Create(const wxString& title, + const wxString& message); + + // These methods simply mirror the public wxRichToolTip ones. + virtual void SetBackgroundColour(const wxColour& col, + const wxColour& colEnd) = 0; + virtual void SetCustomIcon(const wxIcon& icon) = 0; + virtual void SetStandardIcon(int icon) = 0; + virtual void SetTimeout(unsigned milliseconds) = 0; + virtual void SetTipKind(wxTipKind tipKind) = 0; + virtual void SetTitleFont(const wxFont& font) = 0; + + virtual void ShowFor(wxWindow* win) = 0; + + virtual ~wxRichToolTipImpl() { } + +protected: + wxRichToolTipImpl() { } +}; + +#endif // _WX_PRIVATE_RICHTOOLTIP_H_ diff --git a/Externals/wxWidgets3/include/wx/private/sckaddr.h b/Externals/wxWidgets3/include/wx/private/sckaddr.h index 07b061bd3d..cebd608d0e 100644 --- a/Externals/wxWidgets3/include/wx/private/sckaddr.h +++ b/Externals/wxWidgets3/include/wx/private/sckaddr.h @@ -3,7 +3,7 @@ // Purpose: wxSockAddressImpl // Author: Vadim Zeitlin // Created: 2008-12-28 -// RCS-ID: $Id: sckaddr.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: sckaddr.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -11,7 +11,7 @@ #ifndef _WX_PRIVATE_SOCKADDR_H_ #define _WX_PRIVATE_SOCKADDR_H_ -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #if wxUSE_IPV6 diff --git a/Externals/wxWidgets3/include/wx/private/socket.h b/Externals/wxWidgets3/include/wx/private/socket.h index dcdeca02df..1664066d65 100644 --- a/Externals/wxWidgets3/include/wx/private/socket.h +++ b/Externals/wxWidgets3/include/wx/private/socket.h @@ -3,7 +3,7 @@ // Purpose: wxSocketImpl and related declarations // Authors: Guilhem Lavaux, Vadim Zeitlin // Created: April 1997 -// RCS-ID: $Id: socket.h 61675 2009-08-16 23:13:45Z VZ $ +// RCS-ID: $Id: socket.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1997 Guilhem Lavaux // (c) 2008 Vadim Zeitlin // Licence: wxWindows licence @@ -61,7 +61,7 @@ // include the header defining timeval: under Windows this struct is used only // with sockets so we need to include winsock.h which we do via windows.h -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #else #include // for timeval @@ -79,7 +79,7 @@ // define some symbols which winsock.h defines but traditional BSD headers // don't -#ifndef __WXMSW__ +#ifndef __WINDOWS__ #define SOCKET int #endif @@ -367,7 +367,7 @@ private: wxDECLARE_NO_COPY_CLASS(wxSocketImpl); }; -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/private/sockmsw.h" #else #include "wx/unix/private/sockunix.h" diff --git a/Externals/wxWidgets3/include/wx/private/wxprintf.h b/Externals/wxWidgets3/include/wx/private/wxprintf.h index af20eab169..0bb0098cb5 100644 --- a/Externals/wxWidgets3/include/wx/private/wxprintf.h +++ b/Externals/wxWidgets3/include/wx/private/wxprintf.h @@ -4,7 +4,7 @@ // Author: Ove Kaven // Modified by: Ron Lee, Francesco Montorsi // Created: 09/04/99 -// RCS-ID: $Id: wxprintf.h 65690 2010-09-30 14:30:35Z VZ $ +// RCS-ID: $Id: wxprintf.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) wxWidgets copyright // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -289,7 +289,7 @@ bool wxPrintfConvSpec::Parse(const CharType *format) CHECK_PREC m_szFlags[flagofs++] = char(ch); break; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // under Windows we support the special '%I64' notation as longlong // integer conversion specifier for MSVC compatibility // (it behaves exactly as '%lli' or '%Li' or '%qi') @@ -308,7 +308,7 @@ bool wxPrintfConvSpec::Parse(const CharType *format) break; } // else: fall-through, 'I' is MSVC equivalent of C99 'z' -#endif // __WXMSW__ +#endif // __WINDOWS__ case wxT('z'): case wxT('Z'): diff --git a/Externals/wxWidgets3/include/wx/prntbase.h b/Externals/wxWidgets3/include/wx/prntbase.h index 24d941683c..8b71a0658f 100644 --- a/Externals/wxWidgets3/include/wx/prntbase.h +++ b/Externals/wxWidgets3/include/wx/prntbase.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: prntbase.h 66539 2011-01-03 15:57:21Z VZ $ +// RCS-ID: $Id: prntbase.h 68026 2011-06-22 22:58:07Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -40,6 +40,7 @@ class WXDLLIMPEXP_FWD_CORE wxPreviewFrame; class WXDLLIMPEXP_FWD_CORE wxPrintFactory; class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase; class WXDLLIMPEXP_FWD_CORE wxPrintPreview; +class wxPrintPageMaxCtrl; class wxPrintPageTextCtrl; //---------------------------------------------------------------------------- @@ -53,6 +54,19 @@ enum wxPrinterError wxPRINTER_ERROR }; +// Preview frame modality kind used with wxPreviewFrame::Initialize() +enum wxPreviewFrameModalityKind +{ + // Disable all the other top level windows while the preview is shown. + wxPreviewFrame_AppModal, + + // Disable only the parent window while the preview is shown. + wxPreviewFrame_WindowModal, + + // Don't disable any windows. + wxPreviewFrame_NonModal +}; + //---------------------------------------------------------------------------- // wxPrintFactory //---------------------------------------------------------------------------- @@ -384,8 +398,26 @@ public: const wxString& name = wxFrameNameStr); virtual ~wxPreviewFrame(); + // Either Initialize() or InitializeWithModality() must be called before + // showing the preview frame, the former being just a particular case of + // the latter initializing the frame for being showing app-modally. + + // Notice that we must keep Initialize() with its existing signature to + // avoid breaking the old code that overrides it and we can't reuse the + // same name for the other functions to avoid virtual function hiding + // problem and the associated warnings given by some compilers (e.g. from + // g++ with -Woverloaded-virtual). + virtual void Initialize() + { + InitializeWithModality(wxPreviewFrame_AppModal); + } + + // Also note that this method is not virtual as it doesn't need to be + // overridden: it's never called by wxWidgets (of course, the same is true + // for Initialize() but, again, it must remain virtual for compatibility). + void InitializeWithModality(wxPreviewFrameModalityKind kind); + void OnCloseWindow(wxCloseEvent& event); - virtual void Initialize(); virtual void CreateCanvas(); virtual void CreateControlBar(); @@ -397,6 +429,9 @@ protected: wxPrintPreviewBase* m_printPreview; wxWindowDisabler* m_windowDisabler; + wxPreviewFrameModalityKind m_modalityKind; + + private: void OnChar(wxKeyEvent& event); @@ -453,6 +488,7 @@ public: virtual ~wxPreviewControlBar(); virtual void CreateButtons(); + virtual void SetPageInfo(int minPage, int maxPage); virtual void SetZoomControl(int zoom); virtual int GetZoomControl(); virtual wxPrintPreviewBase *GetPrintPreview() const @@ -496,7 +532,8 @@ protected: wxPrintPreviewBase* m_printPreview; wxButton* m_closeButton; wxChoice* m_zoomControl; - wxPrintPageTextCtrl* m_currentPageText; + wxPrintPageTextCtrl* m_currentPageText; + wxPrintPageMaxCtrl* m_maxPageText; long m_buttonFlags; diff --git a/Externals/wxWidgets3/include/wx/progdlg.h b/Externals/wxWidgets3/include/wx/progdlg.h index 7507e07ba2..e6d4132765 100644 --- a/Externals/wxWidgets3/include/wx/progdlg.h +++ b/Externals/wxWidgets3/include/wx/progdlg.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: -// RCS-ID: $Id: progdlg.h 66930 2011-02-16 23:45:00Z VZ $ +// RCS-ID: $Id: progdlg.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -29,31 +29,27 @@ #define wxPD_CAN_SKIP 0x0080 -#ifdef __WXPALMOS__ - #include "wx/palmos/progdlg.h" +#include "wx/generic/progdlgg.h" + +#if defined(__WXMSW__) && wxUSE_THREADS && !defined(__WXUNIVERSAL__) + #include "wx/msw/progdlg.h" #else - #include "wx/generic/progdlgg.h" + class WXDLLIMPEXP_CORE wxProgressDialog + : public wxGenericProgressDialog + { + public: + wxProgressDialog( const wxString& title, const wxString& message, + int maximum = 100, + wxWindow *parent = NULL, + int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE ) + : wxGenericProgressDialog( title, message, maximum, + parent, style ) + { } - #if defined(__WXMSW__) && wxUSE_THREADS && !defined(__WXUNIVERSAL__) - #include "wx/msw/progdlg.h" - #else - class WXDLLIMPEXP_CORE wxProgressDialog - : public wxGenericProgressDialog - { - public: - wxProgressDialog( const wxString& title, const wxString& message, - int maximum = 100, - wxWindow *parent = NULL, - int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE ) - : wxGenericProgressDialog( title, message, maximum, - parent, style ) - { } - - private: - wxDECLARE_DYNAMIC_CLASS_NO_COPY( wxProgressDialog ); - }; - #endif // defined(__WXMSW__) && wxUSE_THREADS -#endif // __WXPALMOS__ + private: + wxDECLARE_DYNAMIC_CLASS_NO_COPY( wxProgressDialog ); + }; +#endif // defined(__WXMSW__) && wxUSE_THREADS #endif // wxUSE_PROGRESSDLG diff --git a/Externals/wxWidgets3/include/wx/protocol/ftp.h b/Externals/wxWidgets3/include/wx/protocol/ftp.h index cb03a70639..bae8c78fdc 100644 --- a/Externals/wxWidgets3/include/wx/protocol/ftp.h +++ b/Externals/wxWidgets3/include/wx/protocol/ftp.h @@ -5,7 +5,7 @@ // Modified by: Mark Johnson, wxWindows@mj10777.de // 20000917 : RmDir, GetLastResult, GetList // Created: 07/07/1997 -// RCS-ID: $Id: ftp.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: ftp.h 67384 2011-04-03 20:31:32Z DS $ // Copyright: (c) 1997, 1998 Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -139,7 +139,7 @@ protected: wxString GetPortCmdArgument(const wxIPV4address& Local, const wxIPV4address& New); // accept connection from server in active mode, returns the same socket as - // passed in in passive mode + // passed in passive mode wxSocketBase *AcceptIfActive(wxSocketBase *sock); diff --git a/Externals/wxWidgets3/include/wx/protocol/http.h b/Externals/wxWidgets3/include/wx/protocol/http.h index 8618b311a5..d3fff96500 100644 --- a/Externals/wxWidgets3/include/wx/protocol/http.h +++ b/Externals/wxWidgets3/include/wx/protocol/http.h @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux // Modified by: Simo Virokannas (authentication, Dec 2005) // Created: August 1997 -// RCS-ID: $Id: http.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: http.h 70408 2012-01-20 12:22:25Z VZ $ // Copyright: (c) 1997, 1998 Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,6 +17,7 @@ #include "wx/hashmap.h" #include "wx/protocol/protocol.h" +#include "wx/buffer.h" class WXDLLIMPEXP_NET wxHTTP : public wxProtocol { @@ -36,13 +37,19 @@ public: int GetResponse() const { return m_http_response; } void SetHeader(const wxString& header, const wxString& h_data); - void SetPostBuffer(const wxString& post_buf); + bool SetPostText(const wxString& contentType, + const wxString& data, + const wxMBConv& conv = wxConvUTF8); + bool SetPostBuffer(const wxString& contentType, const wxMemoryBuffer& data); void SetProxyMode(bool on); /* Cookies */ wxString GetCookie(const wxString& cookie) const; bool HasCookies() const { return m_cookies.size() > 0; } + // Use the other SetPostBuffer() overload or SetPostText() instead. + wxDEPRECATED(void SetPostBuffer(const wxString& post_buf)); + protected: enum wxHTTP_Req { @@ -80,7 +87,8 @@ protected: bool m_read, m_proxy_mode; wxSockAddress *m_addr; - wxString m_post_buf; + wxMemoryBuffer m_postBuffer; + wxString m_contentType; int m_http_response; DECLARE_DYNAMIC_CLASS(wxHTTP) diff --git a/Externals/wxWidgets3/include/wx/radiobox.h b/Externals/wxWidgets3/include/wx/radiobox.h index 768c63e787..7b7960c215 100644 --- a/Externals/wxWidgets3/include/wx/radiobox.h +++ b/Externals/wxWidgets3/include/wx/radiobox.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 10.09.00 -// RCS-ID: $Id: radiobox.h 65668 2010-09-29 13:45:51Z VZ $ +// RCS-ID: $Id: radiobox.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -168,8 +168,6 @@ private: #include "wx/cocoa/radiobox.h" #elif defined(__WXPM__) #include "wx/os2/radiobox.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/radiobox.h" #endif #endif // wxUSE_RADIOBOX diff --git a/Externals/wxWidgets3/include/wx/radiobut.h b/Externals/wxWidgets3/include/wx/radiobut.h index a0bf142b77..d69ec49579 100644 --- a/Externals/wxWidgets3/include/wx/radiobut.h +++ b/Externals/wxWidgets3/include/wx/radiobut.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 07.09.00 -// RCS-ID: $Id: radiobut.h 54125 2008-06-11 19:17:41Z SC $ +// RCS-ID: $Id: radiobut.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -51,8 +51,6 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxRadioButtonNameStr[]; #include "wx/cocoa/radiobut.h" #elif defined(__WXPM__) #include "wx/os2/radiobut.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/radiobut.h" #endif #endif // wxUSE_RADIOBTN diff --git a/Externals/wxWidgets3/include/wx/rawbmp.h b/Externals/wxWidgets3/include/wx/rawbmp.h index 69c6df19f9..2fca1857d4 100644 --- a/Externals/wxWidgets3/include/wx/rawbmp.h +++ b/Externals/wxWidgets3/include/wx/rawbmp.h @@ -4,7 +4,7 @@ // Author: Eric Kidd, Vadim Zeitlin // Modified by: // Created: 10.03.03 -// RCS-ID: $Id: rawbmp.h 66054 2010-11-07 13:16:20Z VZ $ +// RCS-ID: $Id: rawbmp.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 2002 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -172,6 +172,11 @@ typedef wxPixelFormat wxImagePixelFormat; // Under GTK+ 2.X we use GdkPixbuf, which is standard RGB or RGBA typedef wxPixelFormat wxNativePixelFormat; + #define wxPIXEL_FORMAT_ALPHA 3 +#elif defined(__WXPM__) + // Under PM, we can use standard RGB or RGBA + typedef wxPixelFormat wxNativePixelFormat; + #define wxPIXEL_FORMAT_ALPHA 3 #elif defined(__WXDFB__) // Under DirectFB, RGB components are reversed, they're in BGR order @@ -596,7 +601,7 @@ struct wxPixelDataOut // data access // ----------- - // access to invidividual colour components + // access to individual colour components ChannelType& Red() { return m_ptr[PixelFormat::RED]; } ChannelType& Green() { return m_ptr[PixelFormat::GREEN]; } ChannelType& Blue() { return m_ptr[PixelFormat::BLUE]; } diff --git a/Externals/wxWidgets3/include/wx/region.h b/Externals/wxWidgets3/include/wx/region.h index 8ad565e04f..c032903f3d 100644 --- a/Externals/wxWidgets3/include/wx/region.h +++ b/Externals/wxWidgets3/include/wx/region.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: -// RCS-ID: $Id: region.h 58804 2009-02-09 09:01:19Z SC $ +// RCS-ID: $Id: region.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -181,8 +181,7 @@ protected: // some ports implement a generic Combine() function while others only // implement individual wxRegion operations, factor out the common code for the // ports with Combine() in this class -#if defined(__WXPALMOS__) || \ - defined(__WXMSW__) || \ +#if defined(__WXMSW__) || \ ( defined(__WXMAC__) && wxOSX_USE_COCOA_OR_CARBON ) || \ defined(__WXPM__) @@ -213,9 +212,7 @@ protected: #endif // ports with wxRegion::Combine() -#if defined(__WXPALMOS__) - #include "wx/palmos/region.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/region.h" #elif defined(__WXGTK20__) #include "wx/gtk/region.h" @@ -223,8 +220,6 @@ protected: #include "wx/gtk1/region.h" #elif defined(__WXMOTIF__) || defined(__WXX11__) #include "wx/x11/region.h" -#elif defined(__WXMGL__) - #include "wx/mgl/region.h" #elif defined(__WXDFB__) #include "wx/dfb/region.h" #elif defined(__WXMAC__) diff --git a/Externals/wxWidgets3/include/wx/richmsgdlg.h b/Externals/wxWidgets3/include/wx/richmsgdlg.h index 4204cffeba..6d1ac376fd 100644 --- a/Externals/wxWidgets3/include/wx/richmsgdlg.h +++ b/Externals/wxWidgets3/include/wx/richmsgdlg.h @@ -3,7 +3,7 @@ // Purpose: wxRichMessageDialogBase // Author: Rickard Westerlund // Created: 2010-07-03 -// RCS-ID: $Id: richmsgdlg.h 65349 2010-08-18 22:48:41Z VZ $ +// RCS-ID: $Id: richmsgdlg.h 70165 2011-12-29 14:42:13Z SN $ // Copyright: (c) 2010 wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -45,7 +45,7 @@ public: wxString GetDetailedText() const { return m_detailedText; } - virtual bool IsCheckBoxChecked() const { return m_checkBoxValue; }; + virtual bool IsCheckBoxChecked() const { return m_checkBoxValue; } protected: const wxString m_detailsExpanderCollapsedLabel; diff --git a/Externals/wxWidgets3/include/wx/richtooltip.h b/Externals/wxWidgets3/include/wx/richtooltip.h new file mode 100644 index 0000000000..0005edb8b1 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/richtooltip.h @@ -0,0 +1,103 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/richtooltip.h +// Purpose: Declaration of wxRichToolTip class. +// Author: Vadim Zeitlin +// Created: 2011-10-07 +// RCS-ID: $Id: richtooltip.h 69480 2011-10-19 21:53:10Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_RICHTOOLTIP_H_ +#define _WX_RICHTOOLTIP_H_ + +#include "wx/defs.h" + +#if wxUSE_RICHTOOLTIP + +#include "wx/colour.h" + +class WXDLLIMPEXP_FWD_CORE wxFont; +class WXDLLIMPEXP_FWD_CORE wxIcon; +class WXDLLIMPEXP_FWD_CORE wxWindow; + +class wxRichToolTipImpl; + +// This enum describes the kind of the tip shown which combines both the tip +// position and appearance because the two are related (when the tip is +// positioned asymmetrically, a right handed triangle is used but an +// equilateral one when it's in the middle of a side). +// +// Automatic selects the tip appearance best suited for the current platform +// and the position best suited for the window the tooltip is shown for, i.e. +// chosen in such a way that the tooltip is always fully on screen. +// +// Other values describe the position of the tooltip itself, not the window it +// relates to. E.g. wxTipKind_Top places the tip on the top of the tooltip and +// so the tooltip itself is located beneath its associated window. +enum wxTipKind +{ + wxTipKind_None, + wxTipKind_TopLeft, + wxTipKind_Top, + wxTipKind_TopRight, + wxTipKind_BottomLeft, + wxTipKind_Bottom, + wxTipKind_BottomRight, + wxTipKind_Auto +}; + +// ---------------------------------------------------------------------------- +// wxRichToolTip: a customizable but not necessarily native tooltip. +// ---------------------------------------------------------------------------- + +// Notice that this class does not inherit from wxWindow. +class WXDLLIMPEXP_ADV wxRichToolTip +{ +public: + // Ctor must specify the tooltip title and main message, additional + // attributes can be set later. + wxRichToolTip(const wxString& title, const wxString& message); + + // Set the background colour: if two colours are specified, the background + // is drawn using a gradient from top to bottom, otherwise a single solid + // colour is used. + void SetBackgroundColour(const wxColour& col, + const wxColour& colEnd = wxColour()); + + // Set the small icon to show: either one of the standard information/ + // warning/error ones (the question icon doesn't make sense for a tooltip) + // or a custom icon. + void SetIcon(int icon = wxICON_INFORMATION); + void SetIcon(const wxIcon& icon); + + // Set timeout after which the tooltip should disappear, in milliseconds. + // By default the tooltip is hidden after system-dependent interval of time + // elapses but this method can be used to change this or also disable + // hiding the tooltip automatically entirely by passing 0 in this parameter + // (but doing this can result in native version not being used). + void SetTimeout(unsigned milliseconds); + + // Choose the tip kind, possibly none. By default the tip is positioned + // automatically, as if wxTipKind_Auto was used. + void SetTipKind(wxTipKind tipKind); + + // Set the title text font. By default it's emphasized using the font style + // or colour appropriate for the current platform. + void SetTitleFont(const wxFont& font); + + // Show the tooltip for the given window. + void ShowFor(wxWindow* win); + + // Non-virtual dtor as this class is not supposed to be derived from. + ~wxRichToolTip(); + +private: + wxRichToolTipImpl* const m_impl; + + wxDECLARE_NO_COPY_CLASS(wxRichToolTip); +}; + +#endif // wxUSE_RICHTOOLTIP + +#endif // _WX_RICHTOOLTIP_H_ diff --git a/Externals/wxWidgets3/include/wx/rtti.h b/Externals/wxWidgets3/include/wx/rtti.h index ddc3a35b7e..43e3939c41 100644 --- a/Externals/wxWidgets3/include/wx/rtti.h +++ b/Externals/wxWidgets3/include/wx/rtti.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: Ron Lee // Created: 01/02/97 -// RCS-ID: $Id: rtti.h 66636 2011-01-07 20:55:00Z SC $ +// RCS-ID: $Id: rtti.h 67879 2011-06-07 13:06:17Z VZ $ // Copyright: (c) 1997 Julian Smart // (c) 2001 Ron Lee // Licence: wxWindows licence @@ -144,7 +144,7 @@ WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxString& name); static wxObject* wxCreateObject() #define wxDECLARE_CLASS(name) \ - wxDECLARE_DYNAMIC_CLASS(name) + wxDECLARE_ABSTRACT_CLASS(name) // common part of the macros below diff --git a/Externals/wxWidgets3/include/wx/scopedarray.h b/Externals/wxWidgets3/include/wx/scopedarray.h index 35257a224b..11cc04130a 100644 --- a/Externals/wxWidgets3/include/wx/scopedarray.h +++ b/Externals/wxWidgets3/include/wx/scopedarray.h @@ -3,7 +3,7 @@ // Purpose: scoped smart pointer class // Author: Vadim Zeitlin // Created: 2009-02-03 -// RCS-ID: $Id: scopedarray.h 58634 2009-02-03 12:01:46Z VZ $ +// RCS-ID: $Id: scopedarray.h 70109 2011-12-24 15:43:14Z VZ $ // Copyright: (c) Jesse Lovelace and original Boost authors (see below) // (c) 2009 Vadim Zeitlin // Licence: wxWindows licence @@ -41,7 +41,7 @@ public: { if ( array != m_array ) { - delete m_array; + delete [] m_array; m_array = array; } } diff --git a/Externals/wxWidgets3/include/wx/scopeguard.h b/Externals/wxWidgets3/include/wx/scopeguard.h index 85ca52385b..c0c354536a 100644 --- a/Externals/wxWidgets3/include/wx/scopeguard.h +++ b/Externals/wxWidgets3/include/wx/scopeguard.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 03.07.2003 -// RCS-ID: $Id: scopeguard.h 63473 2010-02-12 22:47:21Z VZ $ +// RCS-ID: $Id: scopeguard.h 67592 2011-04-24 13:14:47Z VS $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -390,7 +390,7 @@ namespace wxPrivate { // empty class just to be able to define a reference to it -class VariableSetterBase { }; +class VariableSetterBase : public wxScopeGuardImplBase { }; typedef const VariableSetterBase& VariableSetter; @@ -404,10 +404,9 @@ public: { } - ~VariableSetterImpl() - { - m_var = m_value; - } + ~VariableSetterImpl() { wxPrivateOnScopeExit(*this); } + + void Execute() { m_var = m_value; } private: T& m_var; @@ -426,10 +425,9 @@ public: { } - ~VariableNullerImpl() - { - m_var = NULL; - } + ~VariableNullerImpl() { wxPrivateOnScopeExit(*this); } + + void Execute() { m_var = NULL; } private: T& m_var; diff --git a/Externals/wxWidgets3/include/wx/setup_inc.h b/Externals/wxWidgets3/include/wx/setup_inc.h index ec25baa50d..32b19dfbb8 100644 --- a/Externals/wxWidgets3/include/wx/setup_inc.h +++ b/Externals/wxWidgets3/include/wx/setup_inc.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: -// RCS-ID: $Id: setup_inc.h 67062 2011-02-27 12:48:07Z VZ $ +// RCS-ID: $Id: setup_inc.h 69463 2011-10-18 21:57:02Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -197,15 +197,6 @@ // Recommended setting: 0 (this is still work in progress...) #define wxUSE_EXTENDED_RTTI 0 -// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from -// std::list and std::vector, with a compatibility interface, -// and for wxHashMap to be implemented with templates. -// -// Default is 0 -// -// Recommended setting: YMMV -#define wxUSE_STL 0 - // Support for message/error logging. This includes wxLogXXX() functions and // wxLog and derived classes. Don't set this to 0 unless you really know what // you are doing. @@ -257,44 +248,6 @@ // Recommended setting: 1 as setting it to 0 disables many other things #define wxUSE_STREAMS 1 -// This is not a real option but is used as the default value for -// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING. -// -// Currently the Digital Mars and Watcom compilers come without standard C++ -// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have -// them (e.g. from STLPort). -// -// VC++ 5.0 does include standard C++ library headers, however they produce -// many warnings that can't be turned off when compiled at warning level 4. -#if defined(__DMC__) || defined(__WATCOMC__) \ - || (defined(_MSC_VER) && _MSC_VER < 1200) - #define wxUSE_STD_DEFAULT 0 -#else - #define wxUSE_STD_DEFAULT 1 -#endif - -// Use standard C++ streams if 1 instead of wx streams in some places. If -// disabled (default), wx streams are used everywhere and wxWidgets doesn't -// depend on the standard streams library. -// -// Notice that enabling this does not replace wx streams with std streams -// everywhere, in a lot of places wx streams are used no matter what. -// -// Default is 0 -// -// Recommended setting: 1 if you use the standard streams anyhow and so -// dependency on the standard streams library is not a -// problem -#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// Recommended setting: 1 unless you want to ensure your program doesn't use -// the standard C++ library at all. -#define wxUSE_STD_STRING wxUSE_STD_DEFAULT - // Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf. // Note that if the system's implementation does not support positional // parameters, setting this to 1 forces the use of the wxWidgets implementation @@ -310,6 +263,107 @@ // Recommended setting: 1 if you want to support multiple languages #define wxUSE_PRINTF_POS_PARAMS 1 + +// ---------------------------------------------------------------------------- +// Interoperability with the standard library. +// ---------------------------------------------------------------------------- + +// Set wxUSE_STL to 1 to enable maximal interoperability with the standard +// library, even at the cost of backwards compatibility. +// +// Default is 0 +// +// Recommended setting: 0 as the options below already provide a relatively +// good level of interoperability and changing this option arguably isn't worth +// diverging from the official builds of the library. +#define wxUSE_STL 0 + +// This is not a real option but is used as the default value for +// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS. +// +// Currently the Digital Mars and Watcom compilers come without standard C++ +// library headers by default, wxUSE_STD_STRING can be set to 1 if you do have +// them (e.g. from STLPort). +// +// VC++ 5.0 does include standard C++ library headers, however they produce +// many warnings that can't be turned off when compiled at warning level 4. +#if defined(__DMC__) || defined(__WATCOMC__) \ + || (defined(_MSC_VER) && _MSC_VER < 1200) + #define wxUSE_STD_DEFAULT 0 +#else + #define wxUSE_STD_DEFAULT 1 +#endif + +// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<> +// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but +// usually more limited) implementations are used which allows to avoid the +// dependency on the C++ run-time library. +// +// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't +// support using standard containers and that VC6 needs non-default options for +// such build to avoid getting "fatal error C1076: compiler limit : internal +// heap limit reached; use /Zm to specify a higher limit" in its own standard +// headers, so you need to ensure you do increase the heap size before enabling +// this option for this compiler. +// +// Default is 0 for compatibility reasons. +// +// Recommended setting: 1 unless compatibility with the official wxWidgets +// build and/or the existing code is a concern. +#define wxUSE_STD_CONTAINERS 0 + +// Use standard C++ streams if 1 instead of wx streams in some places. If +// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the +// standard streams library. +// +// Notice that enabling this does not replace wx streams with std streams +// everywhere, in a lot of places wx streams are used no matter what. +// +// Default is 1 if compiler supports it. +// +// Recommended setting: 1 if you use the standard streams anyhow and so +// dependency on the standard streams library is not a +// problem +#define wxUSE_STD_IOSTREAM wxUSE_STD_DEFAULT + +// Enable minimal interoperability with the standard C++ string class if 1. +// "Minimal" means that wxString can be constructed from std::string or +// std::wstring but can't be implicitly converted to them. You need to enable +// the option below for the latter. +// +// Default is 1 for most compilers. +// +// Recommended setting: 1 unless you want to ensure your program doesn't use +// the standard C++ library at all. +#define wxUSE_STD_STRING wxUSE_STD_DEFAULT + +// Make wxString as much interchangeable with std::[w]string as possible, in +// particular allow implicit conversion of wxString to either of these classes. +// This comes at a price (or a benefit, depending on your point of view) of not +// allowing implicit conversion to "const char *" and "const wchar_t *". +// +// Because a lot of existing code relies on these conversions, this option is +// disabled by default but can be enabled for your build if you don't care +// about compatibility. +// +// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled. +// +// Recommended setting: 0 to remain compatible with the official builds of +// wxWidgets. +#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL + +// VC++ 4.2 and above allows and but you can't mix +// them. Set this option to 1 to use , 0 to use . +// +// Note that newer compilers (including VC++ 7.1 and later) don't support +// wxUSE_IOSTREAMH == 1 and so will be used anyhow. +// +// Default is 0. +// +// Recommended setting: 0, only set to 1 if you use a really old compiler +#define wxUSE_IOSTREAMH 0 + + // ---------------------------------------------------------------------------- // non GUI features selection // ---------------------------------------------------------------------------- @@ -647,6 +701,34 @@ // Recommended setting: 1 #define wxUSE_STC 1 +// Use wxWidget's web viewing classes +// +// Default is 1 +// +// Recommended setting: 1 +#define wxUSE_WEBVIEW 1 + +// Use the IE wxWebView backend +// +// Default is 1 on MSW +// +// Recommended setting: 1 +#ifdef __WXMSW__ +#define wxUSE_WEBVIEW_IE 1 +#else +#define wxUSE_WEBVIEW_IE 0 +#endif + +// Use the WebKit wxWebView backend +// +// Default is 1 on GTK and OSX +// +// Recommended setting: 1 +#if defined(__WXGTK__) || defined(__WXOSX__) +#define wxUSE_WEBVIEW_WEBKIT 1 +#else +#define wxUSE_WEBVIEW_WEBKIT 0 +#endif // Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced // 2D drawing API. (Still somewhat experimental) @@ -745,6 +827,7 @@ // // Recommended setting: 1 #define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl +#define wxUSE_BANNERWINDOW 1 // wxBannerWindow #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl @@ -780,8 +863,10 @@ #define wxUSE_STATTEXT 1 // wxStaticText #define wxUSE_STATBMP 1 // wxStaticBitmap #define wxUSE_TEXTCTRL 1 // wxTextCtrl +#define wxUSE_TIMEPICKCTRL 1 // wxTimePickerCtrl #define wxUSE_TOGGLEBTN 1 // requires wxButton #define wxUSE_TREECTRL 1 // wxTreeCtrl +#define wxUSE_TREELISTCTRL 1 // wxTreeListCtrl // Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR // below either wxStatusBar95 or a generic wxStatusBar will be used. @@ -998,6 +1083,14 @@ // Recommended setting: 1 #define wxUSE_NOTIFICATION_MESSAGE 1 +// wxRichToolTip is a customizable tooltip class which has more functionality +// than the stock (but native, unlike this class) wxToolTip. +// +// Default is 1. +// +// Recommended setting: 1 (but can be safely set to 0 if you don't need it) +#define wxUSE_RICHTOOLTIP 1 + // Use wxSashWindow class. // // Default is 1. @@ -1303,28 +1396,15 @@ // to create files in SVG (Scalable Vector Graphics) format. #define wxUSE_SVG 1 -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. +// Should wxDC provide SetTransformMatrix() and related methods? // -// Default is 1. +// Default is 1 but can be set to 0 if this functionality is not used. Notice +// that currently only wxMSW supports this so setting this to 0 doesn't change +// much for non-MSW platforms (although it will still save a few bytes +// probably). // -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows and but you can't mix -// them. Set this option to 1 to use , 0 to use . -// -// Note that newer compilers (including VC++ 7.1 and later) don't support -// wxUSE_IOSTREAMH == 1 and so will be used anyhow. -// -// Default is 0. -// -// Recommended setting: 0, only set to 1 if you use a really old compiler -#define wxUSE_IOSTREAMH 0 +// Recommended setting: 1. +#define wxUSE_DC_TRANSFORM_MATRIX 1 // ---------------------------------------------------------------------------- // image format support diff --git a/Externals/wxWidgets3/include/wx/sizer.h b/Externals/wxWidgets3/include/wx/sizer.h index ddd8ef06a0..249f2d8389 100644 --- a/Externals/wxWidgets3/include/wx/sizer.h +++ b/Externals/wxWidgets3/include/wx/sizer.h @@ -4,7 +4,7 @@ // Author: Robert Roebling and Robin Dunn // Modified by: Ron Lee, Vadim Zeitlin (wxSizerFlags) // Created: -// RCS-ID: $Id: sizer.h 66862 2011-02-08 13:36:13Z VZ $ +// RCS-ID: $Id: sizer.h 69970 2011-12-10 04:34:06Z RD $ // Copyright: (c) Robin Dunn, Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -251,10 +251,10 @@ class WXDLLIMPEXP_CORE wxSizerItem : public wxObject public: // window wxSizerItem( wxWindow *window, - int proportion, - int flag, - int border, - wxObject* userData ); + int proportion=0, + int flag=0, + int border=0, + wxObject* userData=NULL ); // window with flags wxSizerItem(wxWindow *window, const wxSizerFlags& flags) @@ -266,10 +266,10 @@ public: // subsizer wxSizerItem( wxSizer *sizer, - int proportion, - int flag, - int border, - wxObject* userData ); + int proportion=0, + int flag=0, + int border=0, + wxObject* userData=NULL ); // sizer with flags wxSizerItem(wxSizer *sizer, const wxSizerFlags& flags) @@ -282,10 +282,10 @@ public: // spacer wxSizerItem( int width, int height, - int proportion, - int flag, - int border, - wxObject* userData); + int proportion=0, + int flag=0, + int border=0, + wxObject* userData=NULL); // spacer with flags wxSizerItem(int width, int height, const wxSizerFlags& flags) diff --git a/Externals/wxWidgets3/include/wx/slider.h b/Externals/wxWidgets3/include/wx/slider.h index 344d442b2a..e6d9f5e6ea 100644 --- a/Externals/wxWidgets3/include/wx/slider.h +++ b/Externals/wxWidgets3/include/wx/slider.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 09.02.01 -// RCS-ID: $Id: slider.h 66844 2011-02-05 16:36:30Z VZ $ +// RCS-ID: $Id: slider.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 1996-2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -105,7 +105,7 @@ public: virtual int GetSelStart() const { return GetMax(); } virtual void SetSelection(int WXUNUSED(min), int WXUNUSED(max)) { } -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 wxDEPRECATED_INLINE( void SetTickFreq(int freq, int), DoSetTickFreq(freq); ) #endif @@ -149,8 +149,6 @@ private: #include "wx/cocoa/slider.h" #elif defined(__WXPM__) #include "wx/os2/slider.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/slider.h" #endif #endif // wxUSE_SLIDER diff --git a/Externals/wxWidgets3/include/wx/sound.h b/Externals/wxWidgets3/include/wx/sound.h index d19a2d10b5..863b1d3298 100644 --- a/Externals/wxWidgets3/include/wx/sound.h +++ b/Externals/wxWidgets3/include/wx/sound.h @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2004/02/01 -// RCS-ID: $Id: sound.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: sound.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2004, Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -55,7 +55,7 @@ protected: // wxSound class implementation // ---------------------------------------------------------------------------- -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/sound.h" #elif defined(__WXCOCOA__) #include "wx/cocoa/sound.h" diff --git a/Externals/wxWidgets3/include/wx/srchctrl.h b/Externals/wxWidgets3/include/wx/srchctrl.h index 6dc5ee4435..bae24ec5d1 100644 --- a/Externals/wxWidgets3/include/wx/srchctrl.h +++ b/Externals/wxWidgets3/include/wx/srchctrl.h @@ -3,7 +3,7 @@ // Purpose: wxSearchCtrlBase class // Author: Vince Harron // Created: 2006-02-18 -// RCS-ID: $Id: srchctrl.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: srchctrl.h 68911 2011-08-27 12:13:23Z VZ $ // Copyright: (c) Vince Harron // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -26,8 +26,12 @@ // no native version, use the generic one #define wxUSE_NATIVE_SEARCH_CONTROL 0 - class WXDLLIMPEXP_CORE wxSearchCtrlBaseBaseClass : public wxControl, - public wxTextCtrlIface + #include "wx/compositewin.h" + #include "wx/containr.h" + + class WXDLLIMPEXP_CORE wxSearchCtrlBaseBaseClass + : public wxCompositeWindow< wxNavigationEnabled >, + public wxTextCtrlIface { }; #endif diff --git a/Externals/wxWidgets3/include/wx/sstream.h b/Externals/wxWidgets3/include/wx/sstream.h index a891306dfa..405af50f4e 100644 --- a/Externals/wxWidgets3/include/wx/sstream.h +++ b/Externals/wxWidgets3/include/wx/sstream.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2004-09-19 -// RCS-ID: $Id: sstream.h 63248 2010-01-24 11:33:17Z VZ $ +// RCS-ID: $Id: sstream.h 67968 2011-06-16 16:22:15Z VZ $ // Copyright: (c) 2004 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -66,9 +66,9 @@ public: wxStringOutputStream(wxString *pString = NULL, wxMBConv& conv = wxConvUTF8) : m_conv(conv) -#if wxUSE_UNICODE_WCHAR +#if wxUSE_UNICODE , m_unconv(0) -#endif // wxUSE_UNICODE_WCHAR +#endif // wxUSE_UNICODE { m_str = pString ? pString : &m_strInternal; m_pos = m_str->length() / sizeof(wxChar); @@ -98,10 +98,10 @@ private: // arbitrary 8 bit data wxMBConv& m_conv; -#if wxUSE_UNICODE_WCHAR +#if wxUSE_UNICODE // unconverted data from the last call to OnSysWrite() wxMemoryBuffer m_unconv; -#endif // wxUSE_UNICODE_WCHAR +#endif // wxUSE_UNICODE wxDECLARE_NO_COPY_CLASS(wxStringOutputStream); }; diff --git a/Externals/wxWidgets3/include/wx/stack.h b/Externals/wxWidgets3/include/wx/stack.h index 1ca3cd657a..b4e8ed2f8a 100644 --- a/Externals/wxWidgets3/include/wx/stack.h +++ b/Externals/wxWidgets3/include/wx/stack.h @@ -13,12 +13,12 @@ #include "wx/vector.h" -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include #define wxStack std::stack -#else // !wxUSE_STL +#else // !wxUSE_STD_CONTAINERS // Notice that unlike std::stack, wxStack currently always uses wxVector and // can't be used with any other underlying container type. @@ -53,7 +53,7 @@ private: container_type m_cont; }; -#endif // wxUSE_STL/!wxUSE_STL +#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS // Deprecated macro-based class for compatibility only, don't use any more. diff --git a/Externals/wxWidgets3/include/wx/stackwalk.h b/Externals/wxWidgets3/include/wx/stackwalk.h index 2032d830fe..22cf370868 100644 --- a/Externals/wxWidgets3/include/wx/stackwalk.h +++ b/Externals/wxWidgets3/include/wx/stackwalk.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2005-01-07 -// RCS-ID: $Id: stackwalk.h 64754 2010-06-26 11:43:13Z FM $ +// RCS-ID: $Id: stackwalk.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2004 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -146,7 +146,7 @@ protected: virtual void OnStackFrame(const wxStackFrame& frame) = 0; }; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/stackwalk.h" #elif defined(__UNIX__) #include "wx/unix/stackwalk.h" diff --git a/Externals/wxWidgets3/include/wx/stattext.h b/Externals/wxWidgets3/include/wx/stattext.h index f9ca7a0e82..a3165cc877 100644 --- a/Externals/wxWidgets3/include/wx/stattext.h +++ b/Externals/wxWidgets3/include/wx/stattext.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: stattext.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: stattext.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -102,8 +102,6 @@ private: #include "wx/cocoa/stattext.h" #elif defined(__WXPM__) #include "wx/os2/stattext.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/stattext.h" #endif #endif // !wxNO_PORT_STATTEXT_INCLUDE diff --git a/Externals/wxWidgets3/include/wx/statusbr.h b/Externals/wxWidgets3/include/wx/statusbr.h index 255ec251ed..f76eb72864 100644 --- a/Externals/wxWidgets3/include/wx/statusbr.h +++ b/Externals/wxWidgets3/include/wx/statusbr.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 05.02.00 -// RCS-ID: $Id: statusbr.h 66226 2010-11-22 01:22:36Z VZ $ +// RCS-ID: $Id: statusbr.h 70808 2012-03-04 20:31:42Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -234,10 +234,7 @@ protected: #if defined(__WXUNIVERSAL__) #define wxStatusBarUniv wxStatusBar #include "wx/univ/statusbr.h" -#elif defined(__WXPALMOS__) - #define wxStatusBarPalm wxStatusBar - #include "wx/palmos/statusbr.h" -#elif defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR +#elif defined(__WXMSW__) && wxUSE_NATIVE_STATUSBAR #include "wx/msw/statusbar.h" #elif defined(__WXMAC__) #define wxStatusBarMac wxStatusBar diff --git a/Externals/wxWidgets3/include/wx/stdpaths.h b/Externals/wxWidgets3/include/wx/stdpaths.h index 92b49f740c..5288ae626a 100644 --- a/Externals/wxWidgets3/include/wx/stdpaths.h +++ b/Externals/wxWidgets3/include/wx/stdpaths.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2004-10-17 -// RCS-ID: $Id: stdpaths.h 65652 2010-09-27 11:51:50Z VZ $ +// RCS-ID: $Id: stdpaths.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2004 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -171,7 +171,7 @@ protected: }; #if wxUSE_STDPATHS - #if defined(__WXMSW__) + #if defined(__WINDOWS__) #include "wx/msw/stdpaths.h" #define wxHAS_NATIVE_STDPATHS // We want CoreFoundation paths on both CarbonLib and Darwin (for all ports) @@ -184,9 +184,6 @@ protected: #elif defined(__UNIX__) #include "wx/unix/stdpaths.h" #define wxHAS_NATIVE_STDPATHS - #elif defined(__PALMOS__) - #include "wx/palmos/stdpaths.h" - #define wxHAS_NATIVE_STDPATHS #endif #endif diff --git a/Externals/wxWidgets3/include/wx/stdstream.h b/Externals/wxWidgets3/include/wx/stdstream.h index 33cfa34747..4e3ab6dc65 100644 --- a/Externals/wxWidgets3/include/wx/stdstream.h +++ b/Externals/wxWidgets3/include/wx/stdstream.h @@ -4,7 +4,7 @@ // wxInputStream and wxOutputStream // Author: Jonathan Liu // Created: 2009-05-02 -// RCS-ID: $Id: stdstream.h 64924 2010-07-12 22:50:51Z VZ $ +// RCS-ID: $Id: stdstream.h 70515 2012-02-05 14:18:37Z VZ $ // Copyright: (c) 2009 Jonathan Liu // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -47,6 +47,18 @@ protected: virtual int uflow(); virtual int pbackfail(int c = EOF); + // Special work around for VC8/9 (this bug was fixed in VC10 and later): + // these versions have non-standard _Xsgetn_s() that it being called from + // the stream code instead of xsgetn() and so our overridden implementation + // never actually gets used. To work around this, forward to it explicitly. +#if defined(__VISUALC8__) || defined(__VISUALC9__) + virtual std::streamsize + _Xsgetn_s(char *s, size_t WXUNUSED(size), std::streamsize n) + { + return xsgetn(s, n); + } +#endif // VC8 or VC9 + wxInputStream& m_stream; int m_lastChar; }; diff --git a/Externals/wxWidgets3/include/wx/stopwatch.h b/Externals/wxWidgets3/include/wx/stopwatch.h index 6e124f1547..da5069e975 100644 --- a/Externals/wxWidgets3/include/wx/stopwatch.h +++ b/Externals/wxWidgets3/include/wx/stopwatch.h @@ -1,10 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// // Name: wx/stopwatch.h // Purpose: wxStopWatch and global time-related functions -// Author: Julian Smart (wxTimer), Sylvain Bougnoux (wxStopWatch) +// Author: Julian Smart (wxTimer), Sylvain Bougnoux (wxStopWatch), +// Vadim Zeitlin (time functions, current wxStopWatch) // Created: 26.06.03 (extracted from wx/timer.h) -// RCS-ID: $Id: stopwatch.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: stopwatch.h 69838 2011-11-27 19:50:27Z VZ $ // Copyright: (c) 1998-2003 Julian Smart, Sylvain Bougnoux +// (c) 2011 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,6 +16,11 @@ #include "wx/defs.h" #include "wx/longlong.h" +// Time-related functions are also available via this header for compatibility +// but you should include wx/time.h directly if you need only them and not +// wxStopWatch itself. +#include "wx/time.h" + // ---------------------------------------------------------------------------- // wxStopWatch: measure time intervals with up to 1ms resolution // ---------------------------------------------------------------------------- @@ -26,14 +33,16 @@ public: // ctor starts the stop watch wxStopWatch() { m_pauseCount = 0; Start(); } - // start the stop watch at the moment t0 + // Start the stop watch at the moment t0 expressed in milliseconds (i.e. + // calling Time() immediately afterwards returns t0). This can be used to + // restart an existing stopwatch. void Start(long t0 = 0); // pause the stop watch void Pause() { if ( m_pauseCount++ == 0 ) - m_pause = GetElapsedTime(); + m_elapsedBeforePause = GetCurrentClockValue() - m_t0; } // resume it @@ -43,22 +52,37 @@ public: wxT("Resuming stop watch which is not paused") ); if ( --m_pauseCount == 0 ) - Start(m_pause); + { + DoStart(); + m_t0 -= m_elapsedBeforePause; + } } - // get elapsed time since the last Start() in milliseconds - long Time() const; + // Get elapsed time since the last Start() in microseconds. + wxLongLong TimeInMicro() const; -protected: - // returns the elapsed time since t0 - long GetElapsedTime() const; + // get elapsed time since the last Start() in milliseconds + long Time() const { return (TimeInMicro()/1000).ToLong(); } private: - // the time of the last Start() + // Really starts the stop watch. The initial time is set to current clock + // value. + void DoStart(); + + // Returns the current clock value in its native units. + wxLongLong GetCurrentClockValue() const; + + // Return the frequency of the clock used in its ticks per second. + wxLongLong GetClockFreq() const; + + + // The clock value when the stop watch was last started. Its units vary + // depending on the platform. wxLongLong m_t0; - // the time of the last Pause() (only valid if m_pauseCount > 0) - long m_pause; + // The elapsed time as of last Pause() call (only valid if m_pauseCount > + // 0) in the same units as m_t0. + wxLongLong m_elapsedBeforePause; // if > 0, the stop watch is paused, otherwise it is running int m_pauseCount; @@ -78,37 +102,4 @@ private: #endif // wxUSE_LONGLONG && WXWIN_COMPATIBILITY_2_6 -// ---------------------------------------------------------------------------- -// global time functions -// ---------------------------------------------------------------------------- - -// Get number of seconds since local time 00:00:00 Jan 1st 1970. -extern long WXDLLIMPEXP_BASE wxGetLocalTime(); - -// Get number of seconds since GMT 00:00:00, Jan 1st 1970. -extern long WXDLLIMPEXP_BASE wxGetUTCTime(); - -#if wxUSE_LONGLONG - typedef wxLongLong wxMilliClock_t; - inline long wxMilliClockToLong(wxLongLong ll) { return ll.ToLong(); } -#else - typedef double wxMilliClock_t; - inline long wxMilliClockToLong(double d) { return wx_truncate_cast(long, d); } -#endif // wxUSE_LONGLONG - -// Get number of milliseconds since local time 00:00:00 Jan 1st 1970 -extern wxMilliClock_t WXDLLIMPEXP_BASE wxGetLocalTimeMillis(); - -#define wxGetCurrentTime() wxGetLocalTime() - -// on some really old systems gettimeofday() doesn't have the second argument, -// define wxGetTimeOfDay() to hide this difference -#ifdef HAVE_GETTIMEOFDAY - #ifdef WX_GETTIMEOFDAY_NO_TZ - #define wxGetTimeOfDay(tv) gettimeofday(tv) - #else - #define wxGetTimeOfDay(tv) gettimeofday((tv), NULL) - #endif -#endif // HAVE_GETTIMEOFDAY - #endif // _WX_STOPWATCH_H_ diff --git a/Externals/wxWidgets3/include/wx/strconv.h b/Externals/wxWidgets3/include/wx/strconv.h index 49fd028da3..26b5314ca5 100644 --- a/Externals/wxWidgets3/include/wx/strconv.h +++ b/Externals/wxWidgets3/include/wx/strconv.h @@ -4,7 +4,7 @@ // Author: Ove Kaaven, Robert Roebling, Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: strconv.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: strconv.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 1998 Ove Kaaven, Robert Roebling // (c) 1998-2006 Vadim Zeitlin // Licence: wxWindows licence @@ -25,9 +25,7 @@ # undef __BSEXCPT__ #endif -#ifndef __WXPALMOS5__ #include -#endif // ! __WXPALMOS5__ class WXDLLIMPEXP_FWD_BASE wxString; diff --git a/Externals/wxWidgets3/include/wx/stream.h b/Externals/wxWidgets3/include/wx/stream.h index b29089b073..7103c8d970 100644 --- a/Externals/wxWidgets3/include/wx/stream.h +++ b/Externals/wxWidgets3/include/wx/stream.h @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux, Guillermo Rodriguez Garcia, Vadim Zeitlin // Modified by: // Created: 11/07/98 -// RCS-ID: $Id: stream.h 59761 2009-03-23 10:59:40Z VZ $ +// RCS-ID: $Id: stream.h 68331 2011-07-22 16:16:00Z VZ $ // Copyright: (c) Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -64,7 +64,7 @@ public: bool operator!() const { return !IsOk(); } // reset the stream state - void Reset() { m_lasterror = wxSTREAM_NO_ERROR; } + void Reset(wxStreamError error = wxSTREAM_NO_ERROR) { m_lasterror = error; } // this doesn't make sense for all streams, always test its return value virtual size_t GetSize() const; diff --git a/Externals/wxWidgets3/include/wx/string.h b/Externals/wxWidgets3/include/wx/string.h index ae0c706ed5..930e822d25 100644 --- a/Externals/wxWidgets3/include/wx/string.h +++ b/Externals/wxWidgets3/include/wx/string.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: string.h 67181 2011-03-13 13:53:54Z VZ $ +// RCS-ID: $Id: string.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -24,7 +24,6 @@ #include "wx/defs.h" // everybody should include this -#ifndef __WXPALMOS5__ #if defined(__WXMAC__) || defined(__VISAGECPP__) #include #endif @@ -47,7 +46,6 @@ #ifdef HAVE_STRCASECMP_IN_STRINGS_H #include // for strcasecmp() #endif // HAVE_STRCASECMP_IN_STRINGS_H -#endif // ! __WXPALMOS5__ #include "wx/wxcrtbase.h" // for wxChar, wxStrlen() etc. #include "wx/strvararg.h" @@ -71,7 +69,7 @@ // it would have to be re-tested and probably corrected // CS: under OSX release builds the string destructor/cache cleanup sometimes // crashes, disable until we find the true reason or a better workaround -#if wxUSE_UNICODE_UTF8 && !defined(__WXMSW__) && !defined(__WXOSX__) +#if wxUSE_UNICODE_UTF8 && !defined(__WINDOWS__) && !defined(__WXOSX__) #define wxUSE_STRING_POS_CACHE 1 #else #define wxUSE_STRING_POS_CACHE 0 @@ -170,8 +168,7 @@ inline int Stricmp(const char *psz1, const char *psz2) return stricmp(psz1, psz2); #elif defined(__WXPM__) return stricmp(psz1, psz2); -#elif defined(__WXPALMOS__) || \ - defined(HAVE_STRCASECMP_IN_STRING_H) || \ +#elif defined(HAVE_STRCASECMP_IN_STRING_H) || \ defined(HAVE_STRCASECMP_IN_STRINGS_H) || \ defined(__GNUWIN32__) return strcasecmp(psz1, psz2); @@ -1345,12 +1342,13 @@ public: } #endif // wxUSE_STRING_POS_CACHE - // even if we're not built with wxUSE_STL == 1 it is very convenient to allow - // implicit conversions from std::string to wxString and vice verse as this - // allows to use the same strings in non-GUI and GUI code, however we don't - // want to unconditionally add this ctor as it would make wx lib dependent on - // libstdc++ on some Linux versions which is bad, so instead we ask the - // client code to define this wxUSE_STD_STRING symbol if they need it + // even if we're not built with wxUSE_STD_STRING_CONV_IN_WXSTRING == 1 it is + // very convenient to allow implicit conversions from std::string to wxString + // and vice verse as this allows to use the same strings in non-GUI and GUI + // code, however we don't want to unconditionally add this ctor as it would + // make wx lib dependent on libstdc++ on some Linux versions which is bad, so + // instead we ask the client code to define this wxUSE_STD_STRING symbol if + // they need it #if wxUSE_STD_STRING #if wxUSE_UNICODE_WCHAR wxString(const wxStdWideString& str) : m_impl(str) {} @@ -1368,10 +1366,8 @@ public: #endif #endif // wxUSE_STD_STRING - // Unlike ctor from std::string, we provide conversion to std::string only - // if wxUSE_STL and not merely wxUSE_STD_STRING (which is on by default), - // because it conflicts with operator const char/wchar_t* but we still - // provide explicit conversions to std::[w]string for convenience in any case + // Also always provide explicit conversions to std::[w]string in any case, + // see below for the implicit ones. #if wxUSE_STD_STRING // We can avoid a copy if we already use this string type internally, // otherwise we create a copy on the fly: @@ -1408,13 +1404,14 @@ public: } #endif -#if wxUSE_STL - // In wxUSE_STL case we also provide implicit conversions as there is no - // ambiguity with the const char/wchar_t* ones as they are disabled in this - // build (for consistency with std::basic_string<>) +#if wxUSE_STD_STRING_CONV_IN_WXSTRING + // Implicit conversions to std::[w]string are not provided by default as + // they conflict with the implicit conversions to "const char/wchar_t *" + // which we use for backwards compatibility but do provide them if + // explicitly requested. operator wxStringToStdStringRetType() const { return ToStdString(); } operator wxStringToStdWstringRetType() const { return ToStdWstring(); } -#endif // wxUSE_STL +#endif // wxUSE_STD_STRING_CONV_IN_WXSTRING #undef wxStringToStdStringRetType #undef wxStringToStdWstringRetType @@ -1654,11 +1651,12 @@ public: operator wxCStrData() const { return c_str(); } // the first two operators conflict with operators for conversion to - // std::string and they must be disabled in STL build; the next one only - // makes sense if conversions to char* are also defined and not defining it - // in STL build also helps us to get more clear error messages for the code - // which relies on implicit conversion to char* in STL build -#if !wxUSE_STL + // std::string and they must be disabled if those conversions are enabled; + // the next one only makes sense if conversions to char* are also defined + // and not defining it in STL build also helps us to get more clear error + // messages for the code which relies on implicit conversion to char* in + // STL build +#if !wxUSE_STD_STRING_CONV_IN_WXSTRING operator const char*() const { return c_str(); } operator const wchar_t*() const { return c_str(); } @@ -1666,7 +1664,7 @@ public: // wxWidgets versions: this is the same as conversion to const char * so it // may fail! operator const void*() const { return c_str(); } -#endif // wxUSE_STL +#endif // !wxUSE_STD_STRING_CONV_IN_WXSTRING // identical to c_str(), for MFC compatibility const wxCStrData GetData() const { return c_str(); } diff --git a/Externals/wxWidgets3/include/wx/stringimpl.h b/Externals/wxWidgets3/include/wx/stringimpl.h index f2229c4ece..fd611454ca 100644 --- a/Externals/wxWidgets3/include/wx/stringimpl.h +++ b/Externals/wxWidgets3/include/wx/stringimpl.h @@ -4,14 +4,14 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: stringimpl.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: stringimpl.h 67343 2011-03-30 14:16:04Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// /* This header implements std::string-like string class, wxStringImpl, that is - used by wxString to store the data. Alternatively, if wxUSE_STL=1, + used by wxString to store the data. Alternatively, if wxUSE_STD_STRING=1, wxStringImpl is just a typedef to std:: string class. */ @@ -50,15 +50,9 @@ extern WXDLLIMPEXP_DATA_BASE(const wxStringCharType*) wxEmptyStringImpl; // ---------------------------------------------------------------------------- -// deal with STL/non-STL/non-STL-but-wxUSE_STD_STRING +// deal with various build options // ---------------------------------------------------------------------------- -// using STL implies using std::string -#if wxUSE_STL - #undef wxUSE_STD_STRING - #define wxUSE_STD_STRING 1 -#endif - // we use STL-based string internally if we use std::string at all now, there // should be no reason to prefer our internal implement but if you really need // it you can predefine wxUSE_STL_BASED_WXSTRING as 0 when building the library diff --git a/Externals/wxWidgets3/include/wx/strvararg.h b/Externals/wxWidgets3/include/wx/strvararg.h index 13409da707..78f44579db 100644 --- a/Externals/wxWidgets3/include/wx/strvararg.h +++ b/Externals/wxWidgets3/include/wx/strvararg.h @@ -3,7 +3,7 @@ // Purpose: macros for implementing type-safe vararg passing of strings // Author: Vaclav Slavik // Created: 2007-02-19 -// RCS-ID: $Id: strvararg.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: strvararg.h 67760 2011-05-17 22:12:39Z VZ $ // Copyright: (c) 2007 REA Elektronik GmbH // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -825,7 +825,7 @@ WX_ARG_NORMALIZER_FORWARD(const signed char&, signed char); #undef WX_ARG_NORMALIZER_FORWARD #undef _WX_ARG_NORMALIZER_FORWARD_IMPL -#undef wxASSERT_ARG_TYPE +// NB: Don't #undef wxASSERT_ARG_TYPE here as it's also used in wx/longlong.h. // ---------------------------------------------------------------------------- // WX_VA_ARG_STRING diff --git a/Externals/wxWidgets3/include/wx/taskbar.h b/Externals/wxWidgets3/include/wx/taskbar.h index 7df9b4f190..0e7de72668 100644 --- a/Externals/wxWidgets3/include/wx/taskbar.h +++ b/Externals/wxWidgets3/include/wx/taskbar.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Julian Smart -// RCS-ID: $Id: taskbar.h 58822 2009-02-10 03:43:30Z PC $ +// RCS-ID: $Id: taskbar.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -32,7 +32,7 @@ public: #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) static bool IsAvailable(); #else - static bool IsAvailable() { return true; }; + static bool IsAvailable() { return true; } #endif // Operations: @@ -61,9 +61,7 @@ private: // now include the actual class declaration // ---------------------------------------------------------------------------- -#if defined(__WXPALMOS__) - #include "wx/palmos/taskbar.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/taskbar.h" #elif defined(__WXGTK20__) #include "wx/gtk/taskbar.h" diff --git a/Externals/wxWidgets3/include/wx/tbarbase.h b/Externals/wxWidgets3/include/wx/tbarbase.h index 3e2b4c4f9e..fb4e7fde74 100644 --- a/Externals/wxWidgets3/include/wx/tbarbase.h +++ b/Externals/wxWidgets3/include/wx/tbarbase.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: tbarbase.h 64854 2010-07-08 17:35:04Z JS $ +// RCS-ID: $Id: tbarbase.h 70854 2012-03-10 00:01:09Z RD $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -473,7 +473,7 @@ public: { return GetToolBitmapSize(); } // returns a (non separator) tool containing the point (x, y) or NULL if - // there is no tool at this point (corrdinates are client) + // there is no tool at this point (coordinates are client) virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const = 0; @@ -567,6 +567,33 @@ public: // use GetToolMargins() instead wxSize GetMargins() const { return GetToolMargins(); } + // Tool factories, + // helper functions to create toolbar tools + // ------------------------- + virtual wxToolBarToolBase *CreateTool(int toolid, + const wxString& label, + const wxBitmap& bmpNormal, + const wxBitmap& bmpDisabled = wxNullBitmap, + wxItemKind kind = wxITEM_NORMAL, + wxObject *clientData = NULL, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString) = 0; + + virtual wxToolBarToolBase *CreateTool(wxControl *control, + const wxString& label) = 0; + + // this one is not virtual but just a simple helper/wrapper around + // CreateTool() for separators + wxToolBarToolBase *CreateSeparator() + { + return CreateTool(wxID_SEPARATOR, + wxEmptyString, + wxNullBitmap, wxNullBitmap, + wxITEM_SEPARATOR, NULL, + wxEmptyString, wxEmptyString); + } + + // implementation only from now on // ------------------------------- @@ -618,29 +645,6 @@ protected: // called when the tools "can be toggled" flag changes virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle) = 0; - // the functions to create toolbar tools - virtual wxToolBarToolBase *CreateTool(int toolid, - const wxString& label, - const wxBitmap& bmpNormal, - const wxBitmap& bmpDisabled, - wxItemKind kind, - wxObject *clientData, - const wxString& shortHelp, - const wxString& longHelp) = 0; - - virtual wxToolBarToolBase *CreateTool(wxControl *control, - const wxString& label) = 0; - - // this one is not virtual but just a simple helper/wrapper around - // CreateTool() for separators - wxToolBarToolBase *CreateSeparator() - { - return CreateTool(wxID_SEPARATOR, - wxEmptyString, - wxNullBitmap, wxNullBitmap, - wxITEM_SEPARATOR, NULL, - wxEmptyString, wxEmptyString); - } // helper functions // ---------------- diff --git a/Externals/wxWidgets3/include/wx/textcompleter.h b/Externals/wxWidgets3/include/wx/textcompleter.h new file mode 100644 index 0000000000..fa422d309d --- /dev/null +++ b/Externals/wxWidgets3/include/wx/textcompleter.h @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/textcompleter.h +// Purpose: Declaration of wxTextCompleter class. +// Author: Vadim Zeitlin +// Created: 2011-04-13 +// RCS-ID: $Id: textcompleter.h 67525 2011-04-17 23:14:11Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_TEXTCOMPLETER_H_ +#define _WX_TEXTCOMPLETER_H_ + +// ---------------------------------------------------------------------------- +// wxTextCompleter: used by wxTextEnter::AutoComplete() +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxTextCompleter +{ +public: + wxTextCompleter() { } + + // The virtual functions to be implemented by the derived classes: the + // first one is called to start preparing for completions for the given + // prefix and, if it returns true, GetNext() is called until it returns an + // empty string indicating that there are no more completions. + virtual bool Start(const wxString& prefix) = 0; + virtual wxString GetNext() = 0; + + virtual ~wxTextCompleter(); + +private: + wxDECLARE_NO_COPY_CLASS(wxTextCompleter); +}; + +// ---------------------------------------------------------------------------- +// wxTextCompleterSimple: returns the entire set of completions at once +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxTextCompleterSimple : public wxTextCompleter +{ +public: + wxTextCompleterSimple() { } + + // Must be implemented to return all the completions for the given prefix. + virtual void GetCompletions(const wxString& prefix, wxArrayString& res) = 0; + + virtual bool Start(const wxString& prefix); + virtual wxString GetNext(); + +private: + wxArrayString m_completions; + unsigned m_index; + + wxDECLARE_NO_COPY_CLASS(wxTextCompleterSimple); +}; + +// ---------------------------------------------------------------------------- +// wxTextCompleterFixed: Trivial wxTextCompleter implementation which always +// returns the same fixed array of completions. +// ---------------------------------------------------------------------------- + +// NB: This class is private and intentionally not documented as it is +// currently used only for implementation of completion with the fixed list +// of strings only by wxWidgets itself, do not use it outside of wxWidgets. + +class wxTextCompleterFixed : public wxTextCompleterSimple +{ +public: + void SetCompletions(const wxArrayString& strings) + { + m_strings = strings; + } + + virtual void GetCompletions(const wxString& WXUNUSED(prefix), + wxArrayString& res) + { + res = m_strings; + } + +private: + wxArrayString m_strings; +}; + + +#endif // _WX_TEXTCOMPLETER_H_ + diff --git a/Externals/wxWidgets3/include/wx/textctrl.h b/Externals/wxWidgets3/include/wx/textctrl.h index 57fa252843..eb7a03c96e 100644 --- a/Externals/wxWidgets3/include/wx/textctrl.h +++ b/Externals/wxWidgets3/include/wx/textctrl.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 13.07.99 -// RCS-ID: $Id: textctrl.h 65756 2010-10-04 08:37:31Z JS $ +// RCS-ID: $Id: textctrl.h 70446 2012-01-23 11:28:28Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -171,11 +171,12 @@ enum wxTextAttrFlags wxTEXT_ATTR_FONT_WEIGHT = 0x00000010, wxTEXT_ATTR_FONT_ITALIC = 0x00000020, wxTEXT_ATTR_FONT_UNDERLINE = 0x00000040, + wxTEXT_ATTR_FONT_STRIKETHROUGH = 0x08000000, wxTEXT_ATTR_FONT_ENCODING = 0x02000000, wxTEXT_ATTR_FONT_FAMILY = 0x04000000, wxTEXT_ATTR_FONT = \ ( wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT | \ - wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE | wxTEXT_ATTR_FONT_ENCODING | wxTEXT_ATTR_FONT_FAMILY ), + wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE | wxTEXT_ATTR_FONT_STRIKETHROUGH | wxTEXT_ATTR_FONT_ENCODING | wxTEXT_ATTR_FONT_FAMILY ), wxTEXT_ATTR_ALIGNMENT = 0x00000080, wxTEXT_ATTR_LEFT_INDENT = 0x00000100, @@ -317,6 +318,7 @@ public: void SetFontWeight(wxFontWeight fontWeight) { m_fontWeight = fontWeight; m_flags |= wxTEXT_ATTR_FONT_WEIGHT; } void SetFontFaceName(const wxString& faceName) { m_fontFaceName = faceName; m_flags |= wxTEXT_ATTR_FONT_FACE; } void SetFontUnderlined(bool underlined) { m_fontUnderlined = underlined; m_flags |= wxTEXT_ATTR_FONT_UNDERLINE; } + void SetFontStrikethrough(bool strikethrough) { m_fontStrikethrough = strikethrough; m_flags |= wxTEXT_ATTR_FONT_STRIKETHROUGH; } void SetFontEncoding(wxFontEncoding encoding) { m_fontEncoding = encoding; m_flags |= wxTEXT_ATTR_FONT_ENCODING; } void SetFontFamily(wxFontFamily family) { m_fontFamily = family; m_flags |= wxTEXT_ATTR_FONT_FAMILY; } @@ -355,6 +357,7 @@ public: wxFontStyle GetFontStyle() const { return m_fontStyle; } wxFontWeight GetFontWeight() const { return m_fontWeight; } bool GetFontUnderlined() const { return m_fontUnderlined; } + bool GetFontStrikethrough() const { return m_fontStrikethrough; } const wxString& GetFontFaceName() const { return m_fontFaceName; } wxFontEncoding GetFontEncoding() const { return m_fontEncoding; } wxFontFamily GetFontFamily() const { return m_fontFamily; } @@ -379,8 +382,8 @@ public: int GetOutlineLevel() const { return m_outlineLevel; } // accessors - bool HasTextColour() const { return m_colText.Ok() && HasFlag(wxTEXT_ATTR_TEXT_COLOUR) ; } - bool HasBackgroundColour() const { return m_colBack.Ok() && HasFlag(wxTEXT_ATTR_BACKGROUND_COLOUR) ; } + bool HasTextColour() const { return m_colText.IsOk() && HasFlag(wxTEXT_ATTR_TEXT_COLOUR) ; } + bool HasBackgroundColour() const { return m_colBack.IsOk() && HasFlag(wxTEXT_ATTR_BACKGROUND_COLOUR) ; } bool HasAlignment() const { return (m_textAlignment != wxTEXT_ALIGNMENT_DEFAULT) && HasFlag(wxTEXT_ATTR_ALIGNMENT) ; } bool HasTabs() const { return HasFlag(wxTEXT_ATTR_TABS) ; } bool HasLeftIndent() const { return HasFlag(wxTEXT_ATTR_LEFT_INDENT); } @@ -389,6 +392,7 @@ public: bool HasFontSize() const { return HasFlag(wxTEXT_ATTR_FONT_SIZE); } bool HasFontItalic() const { return HasFlag(wxTEXT_ATTR_FONT_ITALIC); } bool HasFontUnderlined() const { return HasFlag(wxTEXT_ATTR_FONT_UNDERLINE); } + bool HasFontStrikethrough() const { return HasFlag(wxTEXT_ATTR_FONT_STRIKETHROUGH); } bool HasFontFaceName() const { return HasFlag(wxTEXT_ATTR_FONT_FACE); } bool HasFontEncoding() const { return HasFlag(wxTEXT_ATTR_FONT_ENCODING); } bool HasFontFamily() const { return HasFlag(wxTEXT_ATTR_FONT_FAMILY); } @@ -500,6 +504,7 @@ private: wxFontWeight m_fontWeight; wxFontFamily m_fontFamily; bool m_fontUnderlined; + bool m_fontStrikethrough; wxString m_fontFaceName; // Character style @@ -574,6 +579,11 @@ public: virtual long XYToPosition(long x, long y) const = 0; virtual bool PositionToXY(long pos, long *x, long *y) const = 0; + // translate the given position (which is just an index in the text control) + // to client coordinates + wxPoint PositionToCoords(long pos) const; + + virtual void ShowPosition(long pos) = 0; // find the character at position given in pixels @@ -592,6 +602,13 @@ protected: virtual bool DoLoadFile(const wxString& file, int fileType); virtual bool DoSaveFile(const wxString& file, int fileType); + // Return true if the given position is valid, i.e. positive and less than + // the last position. + virtual bool IsValidPosition(long pos) const = 0; + + // Default stub implementation of PositionToCoords() always returns + // wxDefaultPosition. + virtual wxPoint DoPositionToCoords(long pos) const; // the name of the last file loaded with LoadFile() which will be used by // SaveFile() by default @@ -625,6 +642,12 @@ public: wxTextEntryBase::SetValue(value); } +protected: + virtual bool IsValidPosition(long pos) const + { + return pos >= 0 && pos <= GetLastPosition(); + } + private: wxDECLARE_NO_COPY_CLASS(wxTextCtrlIface); }; @@ -723,6 +746,12 @@ protected: virtual bool DoLoadFile(const wxString& file, int fileType); virtual bool DoSaveFile(const wxString& file, int fileType); + // Another wxTextAreaBase override. + virtual bool IsValidPosition(long pos) const + { + return pos >= 0 && pos <= GetLastPosition(); + } + // implement the wxTextEntry pure virtual method virtual wxWindow *GetEditableWindow() { return this; } @@ -754,8 +783,6 @@ protected: #include "wx/cocoa/textctrl.h" #elif defined(__WXPM__) #include "wx/os2/textctrl.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/textctrl.h" #endif // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/include/wx/textentry.h b/Externals/wxWidgets3/include/wx/textentry.h index a2bfc97e67..aeeffa652b 100644 --- a/Externals/wxWidgets3/include/wx/textentry.h +++ b/Externals/wxWidgets3/include/wx/textentry.h @@ -3,7 +3,7 @@ // Purpose: declares wxTextEntry interface defining a simple text entry // Author: Vadim Zeitlin // Created: 2007-09-24 -// RCS-ID: $Id: textentry.h 65552 2010-09-15 22:10:20Z VZ $ +// RCS-ID: $Id: textentry.h 68918 2011-08-27 14:11:13Z VZ $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -16,9 +16,11 @@ typedef long wxTextPos; class WXDLLIMPEXP_FWD_BASE wxArrayString; +class WXDLLIMPEXP_FWD_CORE wxTextCompleter; class WXDLLIMPEXP_FWD_CORE wxTextEntryHintData; class WXDLLIMPEXP_FWD_CORE wxWindow; +#include "wx/filefn.h" // for wxFILE and wxDIR only #include "wx/gdicmn.h" // for wxPoint // ---------------------------------------------------------------------------- @@ -106,18 +108,26 @@ public: // these functions allow to auto-complete the text already entered into the // control using either the given fixed list of strings, the paths from the - // file system or, in the future, an arbitrary user-defined completer + // file system or an arbitrary user-defined completer // // they all return true if completion was enabled or false on error (most // commonly meaning that this functionality is not available under the // current platform) - virtual bool AutoComplete(const wxArrayString& WXUNUSED(choices)) - { - return false; - } + bool AutoComplete(const wxArrayString& choices) + { return DoAutoCompleteStrings(choices); } - virtual bool AutoCompleteFileNames() { return false; } + bool AutoCompleteFileNames() + { return DoAutoCompleteFileNames(wxFILE); } + + bool AutoCompleteDirectories() + { return DoAutoCompleteFileNames(wxDIR); } + + // notice that we take ownership of the pointer and will delete it + // + // if the pointer is NULL auto-completion is disabled + bool AutoComplete(wxTextCompleter *completer) + { return DoAutoCompleteCustom(completer); } // status @@ -218,6 +228,16 @@ protected: virtual bool DoSetMargins(const wxPoint& pt); virtual wxPoint DoGetMargins() const; + // the derived classes should override these virtual methods to implement + // auto-completion, they do the same thing as their public counterparts but + // have different names to allow overriding just one of them without hiding + // the other one(s) + virtual bool DoAutoCompleteStrings(const wxArrayString& WXUNUSED(choices)) + { return false; } + virtual bool DoAutoCompleteFileNames(int WXUNUSED(flags)) // wxFILE | wxDIR + { return false; } + virtual bool DoAutoCompleteCustom(wxTextCompleter *completer); + // class which should be used to temporarily disable text change events // diff --git a/Externals/wxWidgets3/include/wx/textwrapper.h b/Externals/wxWidgets3/include/wx/textwrapper.h index 69b13fe2ab..f776b9939e 100644 --- a/Externals/wxWidgets3/include/wx/textwrapper.h +++ b/Externals/wxWidgets3/include/wx/textwrapper.h @@ -3,7 +3,7 @@ // Purpose: declaration of wxTextWrapper class // Author: Vadim Zeitlin // Created: 2009-05-31 (extracted from dlgcmn.cpp via wx/private/stattext.h) -// RCS-ID: $Id: textwrapper.h 65363 2010-08-19 15:41:18Z VZ $ +// RCS-ID: $Id: textwrapper.h 70433 2012-01-22 00:58:05Z VZ $ // Copyright: (c) 1999, 2009 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -98,7 +98,8 @@ public: protected: virtual wxWindow *OnCreateLine(const wxString& line) { - return new wxStaticText(m_win, wxID_ANY, line); + return new wxStaticText(m_win, wxID_ANY, + wxControl::EscapeMnemonics(line)); } virtual void OnOutputLine(const wxString& line) diff --git a/Externals/wxWidgets3/include/wx/tglbtn.h b/Externals/wxWidgets3/include/wx/tglbtn.h index 010dfb1622..72966cc759 100644 --- a/Externals/wxWidgets3/include/wx/tglbtn.h +++ b/Externals/wxWidgets3/include/wx/tglbtn.h @@ -5,7 +5,7 @@ // Author: John Norris, minor changes by Axel Schlueter // Modified by: // Created: 08.02.01 -// RCS-ID: $Id: tglbtn.h 66992 2011-02-22 13:25:30Z VZ $ +// RCS-ID: $Id: tglbtn.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 2000 Johnny C. Norris II // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -18,7 +18,7 @@ #if wxUSE_TOGGLEBTN #include "wx/event.h" -#include "wx/control.h" // base class +#include "wx/anybutton.h" // base class extern WXDLLIMPEXP_DATA_CORE(const char) wxCheckBoxNameStr[]; @@ -28,7 +28,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, // wxToggleButtonBase // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxToggleButtonBase : public wxControl +class WXDLLIMPEXP_CORE wxToggleButtonBase : public wxAnyButton { public: wxToggleButtonBase() { } @@ -89,8 +89,6 @@ protected: #elif defined(__WXMAC__) #include "wx/osx/tglbtn.h" #define wxHAS_BITMAPTOGGLEBUTTON -#elif defined(__WXPALMOS__) - #include "wx/palmos/tglbtn.h" #elif defined(__WXPM__) #include "wx/os2/tglbtn.h" #endif diff --git a/Externals/wxWidgets3/include/wx/thread.h b/Externals/wxWidgets3/include/wx/thread.h index 49c131a216..59ccfc952a 100644 --- a/Externals/wxWidgets3/include/wx/thread.h +++ b/Externals/wxWidgets3/include/wx/thread.h @@ -5,7 +5,7 @@ // Modified by: Vadim Zeitlin (modifications partly inspired by omnithreads // package from Olivetti & Oracle Research Laboratory) // Created: 04/13/98 -// RCS-ID: $Id: thread.h 67185 2011-03-14 11:54:32Z VZ $ +// RCS-ID: $Id: thread.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -219,7 +219,7 @@ private: // in order to avoid any overhead under platforms where critical sections are // just mutexes make all wxCriticalSection class functions inline -#if !defined(__WXMSW__) +#if !defined(__WINDOWS__) #define wxCRITSECT_IS_MUTEX 1 #define wxCRITSECT_INLINE WXEXPORT inline @@ -249,13 +249,16 @@ public: // enter the section (the same as locking a mutex) wxCRITSECT_INLINE void Enter(); + // try to enter the section (the same as trying to lock a mutex) + wxCRITSECT_INLINE bool TryEnter(); + // leave the critical section (same as unlocking a mutex) wxCRITSECT_INLINE void Leave(); private: #if wxCRITSECT_IS_MUTEX wxMutex m_mutex; -#elif defined(__WXMSW__) +#elif defined(__WINDOWS__) // we can't allocate any memory in the ctor, so use placement new - // unfortunately, we have to hardcode the sizeof() here because we can't // include windows.h from this public header and we also have to use the @@ -291,6 +294,7 @@ private: inline wxCriticalSection::~wxCriticalSection() { } inline void wxCriticalSection::Enter() { (void)m_mutex.Lock(); } + inline bool wxCriticalSection::TryEnter() { return m_mutex.TryLock() == wxMUTEX_NO_ERROR; } inline void wxCriticalSection::Leave() { (void)m_mutex.Unlock(); } #endif // wxCRITSECT_IS_MUTEX @@ -840,7 +844,7 @@ public: #if wxUSE_THREADS -#if defined(__WXMSW__) || defined(__OS2__) || defined(__EMX__) || defined(__WXOSX__) +#if defined(__WINDOWS__) || defined(__OS2__) || defined(__EMX__) || defined(__WXOSX__) // unlock GUI if there are threads waiting for and lock it back when // there are no more of them - should be called periodically by the main // thread diff --git a/Externals/wxWidgets3/include/wx/thrimpl.cpp b/Externals/wxWidgets3/include/wx/thrimpl.cpp index ca3234b4a9..39a75a770b 100644 --- a/Externals/wxWidgets3/include/wx/thrimpl.cpp +++ b/Externals/wxWidgets3/include/wx/thrimpl.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 04.06.02 (extracted from src/*/thread.cpp files) -// RCS-ID: $Id: thrimpl.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: thrimpl.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) Vadim Zeitlin (2002) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -76,7 +76,7 @@ wxMutexError wxMutex::Unlock() // variables and their events/event semaphores have quite different semantics, // so we reimplement the conditions from scratch using the mutexes and // semaphores -#if defined(__WXMSW__) || defined(__OS2__) || defined(__EMX__) +#if defined(__WINDOWS__) || defined(__OS2__) || defined(__EMX__) class wxConditionInternal { @@ -223,7 +223,7 @@ wxCondError wxConditionInternal::Broadcast() return wxCOND_NO_ERROR; } -#endif // MSW or OS2 +#endif // __WINDOWS__ || __OS2__ || __EMX__ // ---------------------------------------------------------------------------- // wxCondition diff --git a/Externals/wxWidgets3/include/wx/time.h b/Externals/wxWidgets3/include/wx/time.h new file mode 100644 index 0000000000..4dc6bf8d19 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/time.h @@ -0,0 +1,77 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/time.h +// Purpose: Miscellaneous time-related functions. +// Author: Vadim Zeitlin +// Created: 2011-11-26 +// RCS-ID: $Id: time.h 69846 2011-11-27 20:28:43Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_TIME_H_ +#define _WX_TIME_H_ + +#include "wx/longlong.h" + +// Returns the difference between UTC and local time in seconds. +WXDLLIMPEXP_BASE int wxGetTimeZone(); + +// Get number of seconds since local time 00:00:00 Jan 1st 1970. +extern long WXDLLIMPEXP_BASE wxGetLocalTime(); + +// Get number of seconds since GMT 00:00:00, Jan 1st 1970. +extern long WXDLLIMPEXP_BASE wxGetUTCTime(); + +#if wxUSE_LONGLONG + typedef wxLongLong wxMilliClock_t; + inline long wxMilliClockToLong(wxLongLong ll) { return ll.ToLong(); } +#else + typedef double wxMilliClock_t; + inline long wxMilliClockToLong(double d) { return wx_truncate_cast(long, d); } +#endif // wxUSE_LONGLONG + +// Get number of milliseconds since local time 00:00:00 Jan 1st 1970 +extern wxMilliClock_t WXDLLIMPEXP_BASE wxGetLocalTimeMillis(); + +#if wxUSE_LONGLONG + +// Get the number of milliseconds or microseconds since the Epoch. +wxLongLong WXDLLIMPEXP_BASE wxGetUTCTimeMillis(); +wxLongLong WXDLLIMPEXP_BASE wxGetUTCTimeUSec(); + +#endif // wxUSE_LONGLONG + +#define wxGetCurrentTime() wxGetLocalTime() + +// on some really old systems gettimeofday() doesn't have the second argument, +// define wxGetTimeOfDay() to hide this difference +#ifdef HAVE_GETTIMEOFDAY + #ifdef WX_GETTIMEOFDAY_NO_TZ + #define wxGetTimeOfDay(tv) gettimeofday(tv) + #else + #define wxGetTimeOfDay(tv) gettimeofday((tv), NULL) + #endif +#endif // HAVE_GETTIMEOFDAY + +/* Two wrapper functions for thread safety */ +#ifdef HAVE_LOCALTIME_R +#define wxLocaltime_r localtime_r +#else +WXDLLIMPEXP_BASE struct tm *wxLocaltime_r(const time_t*, struct tm*); +#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__) + // On Windows, localtime _is_ threadsafe! +#warning using pseudo thread-safe wrapper for localtime to emulate localtime_r +#endif +#endif + +#ifdef HAVE_GMTIME_R +#define wxGmtime_r gmtime_r +#else +WXDLLIMPEXP_BASE struct tm *wxGmtime_r(const time_t*, struct tm*); +#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__) + // On Windows, gmtime _is_ threadsafe! +#warning using pseudo thread-safe wrapper for gmtime to emulate gmtime_r +#endif +#endif + +#endif // _WX_TIME_H_ diff --git a/Externals/wxWidgets3/include/wx/timectrl.h b/Externals/wxWidgets3/include/wx/timectrl.h new file mode 100644 index 0000000000..832cc67708 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/timectrl.h @@ -0,0 +1,92 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/timectrl.h +// Purpose: Declaration of wxTimePickerCtrl class. +// Author: Vadim Zeitlin +// Created: 2011-09-22 +// RCS-ID: $Id: timectrl.h 70071 2011-12-20 21:27:14Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_TIMECTRL_H_ +#define _WX_TIMECTRL_H_ + +#include "wx/defs.h" + +#if wxUSE_TIMEPICKCTRL + +#include "wx/datetimectrl.h" + +#define wxTimePickerCtrlNameStr wxS("timectrl") + +// No special styles are currently defined for this control but still define a +// symbolic constant for the default style for consistency. +enum +{ + wxTP_DEFAULT = 0 +}; + +// ---------------------------------------------------------------------------- +// wxTimePickerCtrl: Allow the user to enter the time. +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxTimePickerCtrlBase : public wxDateTimePickerCtrl +{ +public: + /* + The derived classes should implement ctor and Create() method with the + following signature: + + bool Create(wxWindow *parent, + wxWindowID id, + const wxDateTime& dt = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr); + */ + + /* + We also inherit Set/GetValue() methods from the base class which define + our public API. Notice that the date portion of the date passed as + input is ignored and for the result date it's always today, but only + the time part of wxDateTime objects is really significant here. + */ +}; + +#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) + #include "wx/msw/timectrl.h" + + #define wxHAS_NATIVE_TIMEPICKERCTRL +#elif defined(__WXOSX_COCOA__) && !defined(__WXUNIVERSAL__) + #include "wx/osx/timectrl.h" + + #define wxHAS_NATIVE_TIMEPICKERCTRL +#else + #include "wx/generic/timectrl.h" + + class WXDLLIMPEXP_ADV wxTimePickerCtrl : public wxTimePickerCtrlGeneric + { + public: + wxTimePickerCtrl() { } + wxTimePickerCtrl(wxWindow *parent, + wxWindowID id, + const wxDateTime& date = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTP_DEFAULT, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTimePickerCtrlNameStr) + : wxTimePickerCtrlGeneric(parent, id, date, pos, size, style, validator, name) + { + } + + private: + wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxTimePickerCtrl); + }; +#endif + +#endif // wxUSE_TIMEPICKCTRL + +#endif // _WX_TIMECTRL_H_ diff --git a/Externals/wxWidgets3/include/wx/tls.h b/Externals/wxWidgets3/include/wx/tls.h index 40f91fce9e..0dfa87d2c5 100644 --- a/Externals/wxWidgets3/include/wx/tls.h +++ b/Externals/wxWidgets3/include/wx/tls.h @@ -3,7 +3,7 @@ // Purpose: Implementation of thread local storage // Author: Vadim Zeitlin // Created: 2008-08-08 -// RCS-ID: $Id: tls.h 65747 2010-10-03 17:16:15Z VZ $ +// RCS-ID: $Id: tls.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -50,7 +50,7 @@ typedef void (*wxTlsDestructorFunction)(void*); } - #if defined(__WXMSW__) + #if defined(__WINDOWS__) #include "wx/msw/tls.h" #elif defined(__OS2__) #include "wx/os2/tls.h" @@ -132,7 +132,7 @@ }; #define wxTLS_TYPE(T) wxTlsValue - #define wxTLS_PTR(var) (var) + #define wxTLS_PTR(var) ((var).Get()) #define wxTLS_VALUE(var) (*(var)) #endif // wxHAS_COMPILER_TLS/!wxHAS_COMPILER_TLS diff --git a/Externals/wxWidgets3/include/wx/toolbar.h b/Externals/wxWidgets3/include/wx/toolbar.h index d90e4ed516..5e6298320e 100644 --- a/Externals/wxWidgets3/include/wx/toolbar.h +++ b/Externals/wxWidgets3/include/wx/toolbar.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.11.99 -// RCS-ID: $Id: toolbar.h 62849 2009-12-10 03:04:07Z VZ $ +// RCS-ID: $Id: toolbar.h 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -68,8 +68,6 @@ enum #if defined(__WXUNIVERSAL__) #include "wx/univ/toolbar.h" - #elif defined(__WXPALMOS__) - #include "wx/palmos/toolbar.h" #elif defined(__WXMSW__) && (!defined(_WIN32_WCE) || (_WIN32_WCE >= 400 && !defined(__POCKETPC__) && !defined(__SMARTPHONE__))) #include "wx/msw/toolbar.h" #elif defined(__WXWINCE__) diff --git a/Externals/wxWidgets3/include/wx/toolbook.h b/Externals/wxWidgets3/include/wx/toolbook.h index 5ddffc7a5c..2efd27434e 100644 --- a/Externals/wxWidgets3/include/wx/toolbook.h +++ b/Externals/wxWidgets3/include/wx/toolbook.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 2006-01-29 -// RCS-ID: $Id: toolbook.h 65931 2010-10-27 16:54:36Z VZ $ +// RCS-ID: $Id: toolbook.h 68810 2011-08-21 14:08:49Z VZ $ // Copyright: (c) 2006 Julian Smart // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -78,7 +78,7 @@ public: wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = -1); + int imageId = NO_IMAGE); virtual int SetSelection(size_t n) { return DoSetSelection(n, SetSelection_SendEvent); } virtual int ChangeSelection(size_t n) { return DoSetSelection(n); } virtual void SetImageList(wxImageList *imageList); diff --git a/Externals/wxWidgets3/include/wx/toplevel.h b/Externals/wxWidgets3/include/wx/toplevel.h index be0c70b824..bf1049350c 100644 --- a/Externals/wxWidgets3/include/wx/toplevel.h +++ b/Externals/wxWidgets3/include/wx/toplevel.h @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin, Vaclav Slavik // Modified by: // Created: 06.08.01 -// RCS-ID: $Id: toplevel.h 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: toplevel.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) 2001 Vadim Zeitlin // Vaclav Slavik // Licence: wxWindows licence @@ -33,7 +33,7 @@ class WXDLLIMPEXP_FWD_CORE wxTopLevelWindowBase; // ---------------------------------------------------------------------------- /* - Summary of the bits used (some of them are defined in wx/frame.g and + Summary of the bits used (some of them are defined in wx/frame.h and wx/dialog.h and not here): +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ @@ -45,10 +45,10 @@ class WXDLLIMPEXP_FWD_CORE wxTopLevelWindowBase; | | | | | | | | | | | | | \_______ wxFRAME_TOOL_WINDOW | | | | | | | | | | | | \__________ wxFRAME_FLOAT_ON_PARENT | | | | | | | | | | | \_____________ wxFRAME_SHAPED - | | | | | | | | | | \________________ + | | | | | | | | | | \________________ wxDIALOG_NO_PARENT | | | | | | | | | \___________________ wxRESIZE_BORDER | | | | | | | | \______________________ wxTINY_CAPTION_VERT - | | | | | | | \_________________________ wxDIALOG_NO_PARENT + | | | | | | | \_________________________ | | | | | | \____________________________ wxMAXIMIZE_BOX | | | | | \_______________________________ wxMINIMIZE_BOX | | | | \__________________________________ wxSYSTEM_MENU @@ -70,14 +70,14 @@ class WXDLLIMPEXP_FWD_CORE wxTopLevelWindowBase; #define wxICONIZE 0x4000 #define wxMINIMIZE wxICONIZE #define wxMAXIMIZE 0x2000 -#define wxCLOSE_BOX 0x1000 +#define wxCLOSE_BOX 0x1000 // == wxHELP so can't be used with it #define wxSYSTEM_MENU 0x0800 #define wxMINIMIZE_BOX 0x0400 #define wxMAXIMIZE_BOX 0x0200 #define wxTINY_CAPTION 0x0080 // clashes with wxNO_DEFAULT -#define wxRESIZE_BORDER 0x0040 +#define wxRESIZE_BORDER 0x0040 // == wxCLOSE #if WXWIN_COMPATIBILITY_2_8 // HORIZ and VERT styles are equivalent anyhow so don't use different names @@ -157,7 +157,8 @@ enum // wxTopLevelWindow: a top level (as opposed to child) window // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxTopLevelWindowBase : public wxNonOwnedWindow +class WXDLLIMPEXP_CORE wxTopLevelWindowBase : + public wxNavigationEnabled { public: // construction @@ -218,11 +219,6 @@ public: // enable/disable close button [x] virtual bool EnableCloseButton(bool WXUNUSED(enable) ) { return false; } - // Set the shape of the window to the given region. - // Returns true if the platform supports this feature (and the - // operation is successful.) - virtual bool SetShape(const wxRegion& WXUNUSED(region)) { return false; } - // Attracts the users attention to this window if the application is // inactive (should be called when a background event occurs) virtual void RequestUserAttention(int flags = wxUSER_ATTENTION_INFO); @@ -281,6 +277,7 @@ public: // override some base class virtuals virtual bool Destroy(); virtual bool IsTopLevel() const { return true; } + virtual bool IsTopNavigationDomain() const { return true; } virtual bool IsVisible() const { return IsShown(); } // event handlers @@ -304,6 +301,8 @@ public: virtual void OSXSetModified(bool modified) { m_modified = modified; } virtual bool OSXIsModified() const { return m_modified; } + virtual void SetRepresentedFilename(const wxString& WXUNUSED(filename)) { } + protected: // the frame client to screen translation should take account of the // toolbar which may shift the origin of the client area @@ -352,15 +351,11 @@ protected: wxDECLARE_NO_COPY_CLASS(wxTopLevelWindowBase); DECLARE_EVENT_TABLE() - WX_DECLARE_CONTROL_CONTAINER(); }; // include the real class declaration -#if defined(__WXPALMOS__) - #include "wx/palmos/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowPalm -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #include "wx/msw/toplevel.h" #define wxTopLevelWindowNative wxTopLevelWindowMSW #elif defined(__WXGTK20__) @@ -372,9 +367,6 @@ protected: #elif defined(__WXX11__) #include "wx/x11/toplevel.h" #define wxTopLevelWindowNative wxTopLevelWindowX11 -#elif defined(__WXMGL__) - #include "wx/mgl/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowMGL #elif defined(__WXDFB__) #include "wx/dfb/toplevel.h" #define wxTopLevelWindowNative wxTopLevelWindowDFB diff --git a/Externals/wxWidgets3/include/wx/treebase.h b/Externals/wxWidgets3/include/wx/treebase.h index 99d74f8aab..dc03d28f88 100644 --- a/Externals/wxWidgets3/include/wx/treebase.h +++ b/Externals/wxWidgets3/include/wx/treebase.h @@ -4,7 +4,7 @@ // Author: Julian Smart et al // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: treebase.h 58718 2009-02-07 18:59:25Z VZ $ +// RCS-ID: $Id: treebase.h 68812 2011-08-21 14:08:56Z VZ $ // Copyright: (c) 1997,1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,6 +23,7 @@ #include "wx/window.h" // for wxClientData #include "wx/event.h" #include "wx/dynarray.h" +#include "wx/itemid.h" #if WXWIN_COMPATIBILITY_2_6 @@ -38,53 +39,19 @@ enum #endif // WXWIN_COMPATIBILITY_2_6 // ---------------------------------------------------------------------------- -// wxTreeItemId identifies an element of the tree. In this implementation, it's -// just a trivial wrapper around Win32 HTREEITEM or a pointer to some private -// data structure in the generic version. It's opaque for the application and -// the only method which can be used by user code is IsOk(). +// wxTreeItemId identifies an element of the tree. It's opaque for the +// application and the only method which can be used by user code is IsOk(). // ---------------------------------------------------------------------------- -// Using this typedef removes an ambiguity when calling Remove() -typedef void *wxTreeItemIdValue; - -class WXDLLIMPEXP_CORE wxTreeItemId +// This is a class and not a typedef because existing code may forward declare +// wxTreeItemId as a class and we don't want to break it without good reason. +class wxTreeItemId : public wxItemId { - friend bool operator==(const wxTreeItemId&, const wxTreeItemId&); public: - // ctors - // 0 is invalid value for HTREEITEM - wxTreeItemId() { m_pItem = 0; } - - // construct wxTreeItemId from the native item id - wxTreeItemId(void *pItem) { m_pItem = pItem; } - - // default copy ctor/assignment operator are ok for us - - // accessors - // is this a valid tree item? - bool IsOk() const { return m_pItem != 0; } - // return true if this item is not valid - bool operator!() const { return !IsOk(); } - - // operations - // invalidate the item - void Unset() { m_pItem = 0; } - - operator bool() const { return IsOk(); } - - wxTreeItemIdValue m_pItem; + wxTreeItemId() : wxItemId() { } + wxTreeItemId(void* pItem) : wxItemId(pItem) { } }; -inline bool operator==(const wxTreeItemId& i1, const wxTreeItemId& i2) -{ - return i1.m_pItem == i2.m_pItem; -} - -inline bool operator!=(const wxTreeItemId& i1, const wxTreeItemId& i2) -{ - return i1.m_pItem != i2.m_pItem; -} - // ---------------------------------------------------------------------------- // wxTreeItemData is some (arbitrary) user class associated with some item. The // main advantage of having this class (compared to old untyped interface) is @@ -119,10 +86,12 @@ protected: wxTreeItemId m_pItem; }; +typedef void *wxTreeItemIdValue; + WX_DEFINE_EXPORTED_ARRAY_PTR(wxTreeItemIdValue, wxArrayTreeItemIdsBase); // this is a wrapper around the array class defined above which allow to wok -// with vaue of natural wxTreeItemId type instead of using wxTreeItemIdValue +// with values of natural wxTreeItemId type instead of using wxTreeItemIdValue // and does it without any loss of efficiency class WXDLLIMPEXP_CORE wxArrayTreeItemIds : public wxArrayTreeItemIdsBase { @@ -252,9 +221,9 @@ public: void SetFont(const wxFont& font) { m_font = font; } // accessors - bool HasTextColour() const { return m_colText.Ok(); } - bool HasBackgroundColour() const { return m_colBack.Ok(); } - bool HasFont() const { return m_font.Ok(); } + bool HasTextColour() const { return m_colText.IsOk(); } + bool HasBackgroundColour() const { return m_colBack.IsOk(); } + bool HasFont() const { return m_font.IsOk(); } const wxColour& GetTextColour() const { return m_colText; } const wxColour& GetBackgroundColour() const { return m_colBack; } diff --git a/Externals/wxWidgets3/include/wx/treebook.h b/Externals/wxWidgets3/include/wx/treebook.h index bc39e8f698..86bdf0b0da 100644 --- a/Externals/wxWidgets3/include/wx/treebook.h +++ b/Externals/wxWidgets3/include/wx/treebook.h @@ -4,7 +4,7 @@ // Author: Evgeniy Tarassov, Vadim Zeitlin // Modified by: // Created: 2005-09-15 -// RCS-ID: $Id: treebook.h 65931 2010-10-27 16:54:36Z VZ $ +// RCS-ID: $Id: treebook.h 68810 2011-08-21 14:08:49Z VZ $ // Copyright: (c) 2005 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -74,27 +74,27 @@ public: wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = wxNOT_FOUND); + int imageId = NO_IMAGE); // Inserts a new sub-page to the end of children of the page at given pos. virtual bool InsertSubPage(size_t pos, wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = wxNOT_FOUND); + int imageId = NO_IMAGE); // Adds a new page at top level after all other pages. virtual bool AddPage(wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = wxNOT_FOUND); + int imageId = NO_IMAGE); // Adds a new child-page to the last top-level page inserted. // Useful when constructing 1 level tree structure. virtual bool AddSubPage(wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = wxNOT_FOUND); + int imageId = NO_IMAGE); // Deletes the page and ALL its children. Could trigger page selection // change in a case when selected page is removed. In that case its parent @@ -169,16 +169,16 @@ private: wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = wxNOT_FOUND); + int imageId = NO_IMAGE); bool DoInsertSubPage(size_t pos, wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = wxNOT_FOUND); + int imageId = NO_IMAGE); bool DoAddSubPage(wxWindow *page, const wxString& text, bool bSelect = false, - int imageId = wxNOT_FOUND); + int imageId = NO_IMAGE); // Sets selection in the tree control and updates the page being shown. int DoSetSelection(size_t pos, int flags = 0); diff --git a/Externals/wxWidgets3/include/wx/treectrl.h b/Externals/wxWidgets3/include/wx/treectrl.h index 1b46241a20..feefbd7638 100644 --- a/Externals/wxWidgets3/include/wx/treectrl.h +++ b/Externals/wxWidgets3/include/wx/treectrl.h @@ -5,7 +5,7 @@ // Modified by: // Created: // Copyright: (c) Karsten Ballueder -// RCS-ID: $Id: treectrl.h 64532 2010-06-09 13:55:48Z FM $ +// RCS-ID: $Id: treectrl.h 70345 2012-01-15 01:05:28Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -33,20 +33,7 @@ class WXDLLIMPEXP_FWD_CORE wxImageList; class WXDLLIMPEXP_CORE wxTreeCtrlBase : public wxControl { public: - wxTreeCtrlBase() - { - m_imageListNormal = - m_imageListState = NULL; - m_ownsImageListNormal = - m_ownsImageListState = false; - - // arbitrary default - m_spacing = 18; - - // quick DoGetBestSize calculation - m_quickBestSize = true; - } - + wxTreeCtrlBase(); virtual ~wxTreeCtrlBase(); // accessors @@ -452,6 +439,13 @@ protected: bool m_quickBestSize; +private: + // Intercept Escape and Return keys to ensure that our in-place edit + // control always gets them before they're used for dialog navigation or + // anything else. + void OnCharHook(wxKeyEvent& event); + + wxDECLARE_NO_COPY_CLASS(wxTreeCtrlBase); }; @@ -461,8 +455,6 @@ protected: #if defined(__WXUNIVERSAL__) #include "wx/generic/treectlg.h" -#elif defined(__WXPALMOS__) - #include "wx/generic/treectlg.h" #elif defined(__WXMSW__) #include "wx/msw/treectrl.h" #elif defined(__WXMOTIF__) diff --git a/Externals/wxWidgets3/include/wx/treelist.h b/Externals/wxWidgets3/include/wx/treelist.h new file mode 100644 index 0000000000..bb4f3b0f11 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/treelist.h @@ -0,0 +1,567 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/treelist.h +// Purpose: wxTreeListCtrl class declaration. +// Author: Vadim Zeitlin +// Created: 2011-08-17 +// RCS-ID: $Id: treelist.h 69619 2011-10-31 19:41:06Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_TREELIST_H_ +#define _WX_TREELIST_H_ + +#include "wx/defs.h" + +#if wxUSE_TREELISTCTRL + +#include "wx/compositewin.h" +#include "wx/containr.h" +#include "wx/headercol.h" +#include "wx/itemid.h" +#include "wx/vector.h" +#include "wx/window.h" +#include "wx/withimages.h" + +class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl; +class WXDLLIMPEXP_FWD_ADV wxDataViewEvent; + +extern WXDLLIMPEXP_DATA_ADV(const char) wxTreeListCtrlNameStr[]; + +class wxTreeListCtrl; +class wxTreeListModel; +class wxTreeListModelNode; + +// ---------------------------------------------------------------------------- +// Constants. +// ---------------------------------------------------------------------------- + +// wxTreeListCtrl styles. +// +// Notice that using wxTL_USER_3STATE implies wxTL_3STATE and wxTL_3STATE in +// turn implies wxTL_CHECKBOX. +enum +{ + wxTL_SINGLE = 0x0000, // This is the default anyhow. + wxTL_MULTIPLE = 0x0001, // Allow multiple selection. + wxTL_CHECKBOX = 0x0002, // Show checkboxes in the first column. + wxTL_3STATE = 0x0004, // Allow 3rd state in checkboxes. + wxTL_USER_3STATE = 0x0008, // Allow user to set 3rd state. + + wxTL_DEFAULT_STYLE = wxTL_SINGLE, + wxTL_STYLE_MASK = wxTL_SINGLE | + wxTL_MULTIPLE | + wxTL_CHECKBOX | + wxTL_3STATE | + wxTL_USER_3STATE +}; + +// ---------------------------------------------------------------------------- +// wxTreeListItem: unique identifier of an item in wxTreeListCtrl. +// ---------------------------------------------------------------------------- + +// Make wxTreeListItem a forward-declarable class even though it's simple +// enough to possibly be declared as a simple typedef. +class wxTreeListItem : public wxItemId +{ +public: + wxTreeListItem(wxTreeListModelNode* item = NULL) + : wxItemId(item) + { + } +}; + +// Container of multiple items. +typedef wxVector wxTreeListItems; + +// Some special "items" that can be used with InsertItem(): +extern WXDLLIMPEXP_DATA_ADV(const wxTreeListItem) wxTLI_FIRST; +extern WXDLLIMPEXP_DATA_ADV(const wxTreeListItem) wxTLI_LAST; + +// ---------------------------------------------------------------------------- +// wxTreeListItemComparator: defines order of wxTreeListCtrl items. +// ---------------------------------------------------------------------------- + +class wxTreeListItemComparator +{ +public: + wxTreeListItemComparator() { } + + // The comparison function should return negative, null or positive value + // depending on whether the first item is less than, equal to or greater + // than the second one. The items should be compared using their values for + // the given column. + virtual int + Compare(wxTreeListCtrl* treelist, + unsigned column, + wxTreeListItem first, + wxTreeListItem second) = 0; + + // Although this class is not used polymorphically by wxWidgets itself, + // provide virtual dtor in case it's used like this in the user code. + virtual ~wxTreeListItemComparator() { } + +private: + wxDECLARE_NO_COPY_CLASS(wxTreeListItemComparator); +}; + +// ---------------------------------------------------------------------------- +// wxTreeListCtrl: a control combining wxTree- and wxListCtrl features. +// ---------------------------------------------------------------------------- + +// This control also provides easy to use high level interface. Although the +// implementation uses wxDataViewCtrl internally, this class is intentionally +// simpler than wxDataViewCtrl and doesn't provide all of its functionality. +// +// If you need extra features you can always use GetDataView() accessor to work +// with wxDataViewCtrl directly but doing this makes your unportable to possible +// future non-wxDataViewCtrl-based implementations of this class. + +class WXDLLIMPEXP_ADV wxTreeListCtrl + : public wxCompositeWindow< wxNavigationEnabled >, + public wxWithImages +{ +public: + // Constructors and such + // --------------------- + + wxTreeListCtrl() { Init(); } + wxTreeListCtrl(wxWindow* parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTL_DEFAULT_STYLE, + const wxString& name = wxTreeListCtrlNameStr) + { + Init(); + + Create(parent, id, pos, size, style, name); + } + + bool Create(wxWindow* parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTL_DEFAULT_STYLE, + const wxString& name = wxTreeListCtrlNameStr); + + + virtual ~wxTreeListCtrl(); + + // Columns methods + // --------------- + + // Add a column with the given title and attributes, returns the index of + // the new column or -1 on failure. + int AppendColumn(const wxString& title, + int width = wxCOL_WIDTH_AUTOSIZE, + wxAlignment align = wxALIGN_LEFT, + int flags = wxCOL_RESIZABLE) + { + return DoInsertColumn(title, -1, width, align, flags); + } + + // Return the total number of columns. + unsigned GetColumnCount() const; + + // Delete the column with the given index, returns false if index is + // invalid or deleting the column failed for some other reason. + bool DeleteColumn(unsigned col); + + // Delete all columns. + void ClearColumns(); + + // Set column width to either the given value in pixels or to the value + // large enough to fit all of the items if width == wxCOL_WIDTH_AUTOSIZE. + void SetColumnWidth(unsigned col, int width); + + // Get the current width of the given column in pixels. + int GetColumnWidth(unsigned col) const; + + // Get the width appropriate for showing the given text. This is typically + // used as second argument for AppendColumn() or with SetColumnWidth(). + int WidthFor(const wxString& text) const; + + + // Item methods + // ------------ + + // Adding items. The parent and text of the first column of the new item + // must always be specified, the rest is optional. + // + // Each item can have two images: one used for closed state and another for + // opened one. Only the first one is ever used for the items that don't + // have children. And both are not set by default. + // + // It is also possible to associate arbitrary client data pointer with the + // new item. It will be deleted by the control when the item is deleted + // (either by an explicit DeleteItem() call or because the entire control + // is destroyed). + + wxTreeListItem AppendItem(wxTreeListItem parent, + const wxString& text, + int imageClosed = NO_IMAGE, + int imageOpened = NO_IMAGE, + wxClientData* data = NULL) + { + return DoInsertItem(parent, wxTLI_LAST, text, + imageClosed, imageOpened, data); + } + + wxTreeListItem InsertItem(wxTreeListItem parent, + wxTreeListItem previous, + const wxString& text, + int imageClosed = NO_IMAGE, + int imageOpened = NO_IMAGE, + wxClientData* data = NULL) + { + return DoInsertItem(parent, previous, text, + imageClosed, imageOpened, data); + } + + wxTreeListItem PrependItem(wxTreeListItem parent, + const wxString& text, + int imageClosed = NO_IMAGE, + int imageOpened = NO_IMAGE, + wxClientData* data = NULL) + { + return DoInsertItem(parent, wxTLI_FIRST, text, + imageClosed, imageOpened, data); + } + + // Deleting items. + void DeleteItem(wxTreeListItem item); + void DeleteAllItems(); + + + // Tree navigation + // --------------- + + // Return the (never shown) root item. + wxTreeListItem GetRootItem() const; + + // The parent item may be invalid for the root-level items. + wxTreeListItem GetItemParent(wxTreeListItem item) const; + + // Iterate over the given item children: start by calling GetFirstChild() + // and then call GetNextSibling() for as long as it returns valid item. + wxTreeListItem GetFirstChild(wxTreeListItem item) const; + wxTreeListItem GetNextSibling(wxTreeListItem item) const; + + // Return the first child of the root item, which is also the first item of + // the tree in depth-first traversal order. + wxTreeListItem GetFirstItem() const { return GetFirstChild(GetRootItem()); } + + // Get item after the given one in the depth-first tree-traversal order. + // Calling this function starting with the result of GetFirstItem() allows + // iterating over all items in the tree. + wxTreeListItem GetNextItem(wxTreeListItem item) const; + + + // Items attributes + // ---------------- + + const wxString& GetItemText(wxTreeListItem item, unsigned col = 0) const; + + // The convenience overload below sets the text for the first column. + void SetItemText(wxTreeListItem item, unsigned col, const wxString& text); + void SetItemText(wxTreeListItem item, const wxString& text) + { + SetItemText(item, 0, text); + } + + // By default the opened image is the same as the normal, closed one (if + // it's used at all). + void SetItemImage(wxTreeListItem item, int closed, int opened = NO_IMAGE); + + // Retrieve or set the data associated with the item. + wxClientData* GetItemData(wxTreeListItem item) const; + void SetItemData(wxTreeListItem item, wxClientData* data); + + + // Expanding and collapsing + // ------------------------ + + void Expand(wxTreeListItem item); + void Collapse(wxTreeListItem item); + bool IsExpanded(wxTreeListItem item) const; + + + // Selection handling + // ------------------ + + // This function can be used with single selection controls, use + // GetSelections() with the multi-selection ones. + wxTreeListItem GetSelection() const; + + // This one can be used with either single or multi-selection controls. + unsigned GetSelections(wxTreeListItems& selections) const; + + // In single selection mode Select() deselects any other selected items, in + // multi-selection case it adds to the selection. + void Select(wxTreeListItem item); + + // Can be used in multiple selection mode only, single selected item in the + // single selection mode can't be unselected. + void Unselect(wxTreeListItem item); + + // Return true if the item is selected, can be used in both single and + // multiple selection modes. + bool IsSelected(wxTreeListItem item) const; + + // Select or unselect all items, only valid in multiple selection mode. + void SelectAll(); + void UnselectAll(); + + + // Checkbox handling + // ----------------- + + // Methods in this section can only be used with the controls created with + // wxTL_CHECKBOX style. + + // Simple set, unset or query the checked state. + void CheckItem(wxTreeListItem item, wxCheckBoxState state = wxCHK_CHECKED); + void UncheckItem(wxTreeListItem item) { CheckItem(item, wxCHK_UNCHECKED); } + + // The same but do it recursively for this item itself and its children. + void CheckItemRecursively(wxTreeListItem item, + wxCheckBoxState state = wxCHK_CHECKED); + + // Update the parent of this item recursively: if this item and all its + // siblings are checked, the parent will become checked as well. If this + // item and all its siblings are unchecked, the parent will be unchecked. + // And if the siblings of this item are not all in the same state, the + // parent will be switched to indeterminate state. And then the same logic + // will be applied to the parents parent and so on recursively. + // + // This is typically called when the state of the given item has changed + // from EVT_TREELIST_ITEM_CHECKED() handler in the controls which have + // wxTL_3STATE flag. Notice that without this flag this function can't work + // as it would be unable to set the state of a parent with both checked and + // unchecked items so it's only allowed to call it when this flag is set. + void UpdateItemParentStateRecursively(wxTreeListItem item); + + // Return the current state. + wxCheckBoxState GetCheckedState(wxTreeListItem item) const; + + // Return true if all item children (if any) are in the given state. + bool AreAllChildrenInState(wxTreeListItem item, + wxCheckBoxState state) const; + + + + // Sorting. + // -------- + + // Sort by the given column, either in ascending (default) or descending + // sort order. + // + // By default, simple alphabetical sorting is done by this column contents + // but SetItemComparator() may be called to perform comparison in some + // other way. + void SetSortColumn(unsigned col, bool ascendingOrder = true); + + // If the control contents is sorted, return true and fill the output + // parameters with the column which is currently used for sorting and + // whether we sort using ascending or descending order. Otherwise, i.e. if + // the control contents is unsorted, simply return false. + bool GetSortColumn(unsigned* col, bool* ascendingOrder = NULL); + + // Set the object to use for comparing the items. It will be called when + // the control is being sorted because the user clicked on a sortable + // column. + // + // The provided pointer is stored by the control so the object it points to + // must have a life-time equal or greater to that of the control itself. In + // addition, the pointer can be NULL to stop using custom comparator and + // revert to the default alphabetical comparison. + void SetItemComparator(wxTreeListItemComparator* comparator); + + + // View window functions. + // ---------------------- + + // This control itself is entirely covered by the "view window" which is + // currently a wxDataViewCtrl but if you want to avoid relying on this to + // allow your code to work with later versions which might not be + // wxDataViewCtrl-based, use the first function only and only use the + // second one if you really need to call wxDataViewCtrl methods on it. + wxWindow* GetView() const; + wxDataViewCtrl* GetDataView() const { return m_view; } + +private: + // Common part of all ctors. + void Init(); + + // Pure virtual method inherited from wxCompositeWindow. + virtual wxWindowList GetCompositeWindowParts() const; + + // Implementation of AppendColumn(). + int DoInsertColumn(const wxString& title, + int pos, // May be -1 meaning "append". + int width, + wxAlignment align, + int flags); + + // Common part of {Append,Insert,Prepend}Item(). + wxTreeListItem DoInsertItem(wxTreeListItem parent, + wxTreeListItem previous, + const wxString& text, + int imageClosed, + int imageOpened, + wxClientData* data); + + // Send wxTreeListEvent corresponding to the given wxDataViewEvent for an + // item (as opposed for column-oriented events). + // + // Also updates the original event "skipped" and "vetoed" flags. + void SendItemEvent(wxEventType evt, wxDataViewEvent& event); + + // Send wxTreeListEvent corresponding to the given column wxDataViewEvent. + void SendColumnEvent(wxEventType evt, wxDataViewEvent& event); + + + // Called by wxTreeListModel when an item is toggled by the user. + void OnItemToggled(wxTreeListItem item, wxCheckBoxState stateOld); + + // Event handlers. + void OnSelectionChanged(wxDataViewEvent& event); + void OnItemExpanding(wxDataViewEvent& event); + void OnItemExpanded(wxDataViewEvent& event); + void OnItemActivated(wxDataViewEvent& event); + void OnItemContextMenu(wxDataViewEvent& event); + void OnColumnSorted(wxDataViewEvent& event); + void OnSize(wxSizeEvent& event); + + wxDECLARE_EVENT_TABLE(); + + + wxDataViewCtrl* m_view; + wxTreeListModel* m_model; + + wxTreeListItemComparator* m_comparator; + + + // It calls our inherited protected wxWithImages::GetImage() method. + friend class wxTreeListModel; + + wxDECLARE_NO_COPY_CLASS(wxTreeListCtrl); +}; + +// ---------------------------------------------------------------------------- +// wxTreeListEvent: event generated by wxTreeListCtrl. +// ---------------------------------------------------------------------------- + +class wxTreeListEvent : public wxNotifyEvent +{ +public: + // Default ctor is provided for wxRTTI needs only but should never be used. + wxTreeListEvent() { Init(); } + + // The item affected by the event. Valid for all events except + // column-specific ones such as COLUMN_SORTED. + wxTreeListItem GetItem() const { return m_item; } + + // The previous state of the item checkbox for ITEM_CHECKED events only. + wxCheckBoxState GetOldCheckedState() const { return m_oldCheckedState; } + + // The index of the column affected by the event. Currently only used by + // COLUMN_SORTED event. + unsigned GetColumn() const { return m_column; } + + virtual wxEvent* Clone() const { return new wxTreeListEvent(*this); } + +private: + // Common part of all ctors. + void Init() + { + m_column = static_cast(-1); + + m_oldCheckedState = wxCHK_UNDETERMINED; + } + + // Ctor is private, only wxTreeListCtrl can create events of this type. + wxTreeListEvent(wxEventType evtType, + wxTreeListCtrl* treelist, + wxTreeListItem item) + : wxNotifyEvent(evtType, treelist->GetId()), + m_item(item) + { + SetEventObject(treelist); + + Init(); + } + + // Set the checkbox state before this event for ITEM_CHECKED events. + void SetOldCheckedState(wxCheckBoxState state) + { + m_oldCheckedState = state; + } + + // Set the column affected by this event for COLUMN_SORTED events. + void SetColumn(unsigned column) + { + m_column = column; + } + + + const wxTreeListItem m_item; + + wxCheckBoxState m_oldCheckedState; + + unsigned m_column; + + friend class wxTreeListCtrl; + + wxDECLARE_DYNAMIC_CLASS(wxTreeListEvent); +}; + +// Event types and event table macros. + +typedef void (wxEvtHandler::*wxTreeListEventFunction)(wxTreeListEvent&); + +#define wxTreeListEventHandler(func) \ + wxEVENT_HANDLER_CAST(wxTreeListEventFunction, func) + +#define wxEVT_TREELIST_GENERIC(name, id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_TREELIST_##name, id, wxTreeListEventHandler(fn)) + +#define wxDECLARE_TREELIST_EVENT(name) \ + wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, \ + wxEVT_COMMAND_TREELIST_##name, \ + wxTreeListEvent) + +wxDECLARE_TREELIST_EVENT(SELECTION_CHANGED); +#define EVT_TREELIST_SELECTION_CHANGED(id, fn) \ + wxEVT_TREELIST_GENERIC(SELECTION_CHANGED, id, fn) + +wxDECLARE_TREELIST_EVENT(ITEM_EXPANDING); +#define EVT_TREELIST_ITEM_EXPANDING(id, fn) \ + wxEVT_TREELIST_GENERIC(ITEM_EXPANDING, id, fn) + +wxDECLARE_TREELIST_EVENT(ITEM_EXPANDED); +#define EVT_TREELIST_ITEM_EXPANDED(id, fn) \ + wxEVT_TREELIST_GENERIC(ITEM_EXPANDED, id, fn) + +wxDECLARE_TREELIST_EVENT(ITEM_CHECKED); +#define EVT_TREELIST_ITEM_CHECKED(id, fn) \ + wxEVT_TREELIST_GENERIC(ITEM_CHECKED, id, fn) + +wxDECLARE_TREELIST_EVENT(ITEM_ACTIVATED); +#define EVT_TREELIST_ITEM_ACTIVATED(id, fn) \ + wxEVT_TREELIST_GENERIC(ITEM_ACTIVATED, id, fn) + +wxDECLARE_TREELIST_EVENT(ITEM_CONTEXT_MENU); +#define EVT_TREELIST_ITEM_CONTEXT_MENU(id, fn) \ + wxEVT_TREELIST_GENERIC(ITEM_CONTEXT_MENU, id, fn) + +wxDECLARE_TREELIST_EVENT(COLUMN_SORTED); +#define EVT_TREELIST_COLUMN_SORTED(id, fn) \ + wxEVT_TREELIST_GENERIC(COLUMN_SORTED, id, fn) + +#undef wxDECLARE_TREELIST_EVENT + +#endif // wxUSE_TREELISTCTRL + +#endif // _WX_TREELIST_H_ diff --git a/Externals/wxWidgets3/include/wx/uiaction.h b/Externals/wxWidgets3/include/wx/uiaction.h index 738deca738..af2b162c49 100644 --- a/Externals/wxWidgets3/include/wx/uiaction.h +++ b/Externals/wxWidgets3/include/wx/uiaction.h @@ -4,7 +4,7 @@ // Author: Kevin Ollivier, Steven Lamerton, Vadim Zeitlin // Modified by: // Created: 2010-03-06 -// RCS-ID: $Id: uiaction.h 67232 2011-03-18 15:10:15Z DS $ +// RCS-ID: $Id: uiaction.h 69762 2011-11-15 15:56:55Z VZ $ // Copyright: (c) Kevin Ollivier // (c) 2010 Steven Lamerton // (c) 2010 Vadim Zeitlin @@ -58,8 +58,8 @@ public: { return Key(keycode, modifiers, false); } // Higher level methods for generating both the key press and release for a - // single key or for all characters in the ASCII string "text" which can - // currently contain letters only (no digits, no punctuation). + // single key or for all characters in the ASCII string "text" which can currently + // contain letters, digits and characters for the definition of numbers [+-., ]. bool Char(int keycode, int modifiers = wxMOD_NONE); bool Text(const char *text); diff --git a/Externals/wxWidgets3/include/wx/unix/private/timer.h b/Externals/wxWidgets3/include/wx/unix/private/timer.h index eeff719c9b..764f3a9954 100644 --- a/Externals/wxWidgets3/include/wx/unix/private/timer.h +++ b/Externals/wxWidgets3/include/wx/unix/private/timer.h @@ -3,7 +3,7 @@ // Purpose: wxTimer for wxBase (unix) // Author: Lukasz Michalski // Created: 15/01/2005 -// RCS-ID: $Id: timer.h 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: timer.h 69839 2011-11-27 19:50:33Z VZ $ // Copyright: (c) Lukasz Michalski // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -134,12 +134,6 @@ private: static wxTimerScheduler *ms_instance; }; -// this helper function currently only exists for Unix platforms but could be -// moved to wx/stopwatch.h if it turns out to be useful elsewhere -// -// returns the number of microseconds since the Epoch -extern wxUsecClock_t wxGetLocalTimeUsec(); - #endif // wxUSE_TIMER #endif // _WX_UNIX_PRIVATE_TIMER_H_ diff --git a/Externals/wxWidgets3/include/wx/unix/sound.h b/Externals/wxWidgets3/include/wx/unix/sound.h index 98916f699a..d2f2220b5b 100644 --- a/Externals/wxWidgets3/include/wx/unix/sound.h +++ b/Externals/wxWidgets3/include/wx/unix/sound.h @@ -4,7 +4,7 @@ // Author: Julian Smart, Vaclav Slavik // Modified by: // Created: 25/10/98 -// RCS-ID: $Id: sound.h 47254 2007-07-09 10:09:52Z VS $ +// RCS-ID: $Id: sound.h 69178 2011-09-21 15:08:02Z VZ $ // Copyright: (c) Julian Smart, Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -60,13 +60,13 @@ class WXDLLIMPEXP_ADV wxSound : public wxSoundBase public: wxSound(); wxSound(const wxString& fileName, bool isResource = false); - wxSound(int size, const wxByte* data); + wxSound(size_t size, const void* data); virtual ~wxSound(); // Create from resource or file bool Create(const wxString& fileName, bool isResource = false); // Create from data - bool Create(int size, const wxByte* data); + bool Create(size_t size, const void* data); bool IsOk() const { return m_data != NULL; } @@ -84,7 +84,7 @@ protected: static void EnsureBackend(); void Free(); - bool LoadWAV(const wxUint8 *data, size_t length, bool copyData); + bool LoadWAV(const void* data, size_t length, bool copyData); static wxSoundBackend *ms_backend; #if wxUSE_LIBSDL && wxUSE_PLUGINS diff --git a/Externals/wxWidgets3/include/wx/utils.h b/Externals/wxWidgets3/include/wx/utils.h index f085a7a59b..bccc7411a8 100644 --- a/Externals/wxWidgets3/include/wx/utils.h +++ b/Externals/wxWidgets3/include/wx/utils.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: utils.h 67129 2011-03-05 12:21:20Z SC $ +// RCS-ID: $Id: utils.h 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -113,7 +113,7 @@ wxClip(T1 a, T2 b, T3 c) // String functions (deprecated, use wxString) // ---------------------------------------------------------------------------- -#ifdef WXWIN_COMPATIBILITY_2_8 +#if WXWIN_COMPATIBILITY_2_8 // A shorter way of using strcmp wxDEPRECATED_INLINE(inline bool wxStringEq(const char *s1, const char *s2), return wxCRT_StrcmpA(s1, s2) == 0; ) @@ -334,10 +334,17 @@ enum // under Windows, don't hide the child even if it's IO is redirected (this // is done by default) - wxEXEC_NOHIDE = 2, + wxEXEC_SHOW_CONSOLE = 2, + + // deprecated synonym for wxEXEC_SHOW_CONSOLE, use the new name as it's + // more clear + wxEXEC_NOHIDE = wxEXEC_SHOW_CONSOLE, // under Unix, if the process is the group leader then passing wxKILL_CHILDREN to wxKill // kills all children as well as pid + // under Windows (NT family only), sets the CREATE_NEW_PROCESS_GROUP flag, + // which allows to target Ctrl-Break signal to the spawned process. + // applies to console processes only. wxEXEC_MAKE_GROUP_LEADER = 4, // by default synchronous execution disables all program windows to avoid @@ -350,6 +357,10 @@ enum // until the child process finishes wxEXEC_NOEVENTS = 16, + // under Windows, hide the console of the child process if it has one, even + // if its IO is not redirected + wxEXEC_HIDE_CONSOLE = 32, + // convenient synonym for flags given system()-like behaviour wxEXEC_BLOCK = wxEXEC_SYNC | wxEXEC_NOEVENTS }; @@ -399,12 +410,12 @@ WXDLLIMPEXP_BASE long wxExecute(const wxString& command, int flags = 0, const wxExecuteEnv *env = NULL); -#if defined(__WXMSW__) && wxUSE_IPC +#if defined(__WINDOWS__) && wxUSE_IPC // ask a DDE server to execute the DDE request with given parameters WXDLLIMPEXP_BASE bool wxExecuteDDE(const wxString& ddeServer, const wxString& ddeTopic, const wxString& ddeCommand); -#endif // __WXMSW__ && wxUSE_IPC +#endif // __WINDOWS__ && wxUSE_IPC enum wxSignal { @@ -588,14 +599,14 @@ WXDLLIMPEXP_BASE bool wxGetDiskSpace(const wxString& path, -extern "C" -{ -typedef int (wxCMPFUNC_CONV *CMPFUNCDATA)(const void* pItem1, const void* pItem2, const void* user_data); -} +typedef int (*wxSortCallback)(const void* pItem1, + const void* pItem2, + const void* user_data); -WXDLLIMPEXP_BASE void wxQsort(void *const pbase, size_t total_elems, - size_t size, CMPFUNCDATA cmp, const void* user_data); +WXDLLIMPEXP_BASE void wxQsort(void* pbase, size_t total_elems, + size_t size, wxSortCallback cmp, + const void* user_data); #if wxUSE_GUI // GUI only things from now on @@ -804,8 +815,8 @@ WXDLLIMPEXP_CORE bool wxYieldIfNeeded(); // Windows resources access // ---------------------------------------------------------------------------- -// MSW only: get user-defined resource from the .res file. -#ifdef __WXMSW__ +// Windows only: get user-defined resource from the .res file. +#ifdef __WINDOWS__ // default resource type for wxLoadUserResource() extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxUserResourceStr; @@ -832,7 +843,7 @@ WXDLLIMPEXP_CORE bool wxYieldIfNeeded(); const wxString& resourceType = wxUserResourceStr, int* pLen = NULL, WXHINSTANCE module = 0); -#endif // MSW +#endif // __WINDOWS__ #endif // _WX_UTILSH__ diff --git a/Externals/wxWidgets3/include/wx/valgen.h b/Externals/wxWidgets3/include/wx/valgen.h index a0c81bf88f..9e6f0c3479 100644 --- a/Externals/wxWidgets3/include/wx/valgen.h +++ b/Externals/wxWidgets3/include/wx/valgen.h @@ -3,7 +3,7 @@ // Purpose: wxGenericValidator class // Author: Kevin Smith // Created: Jan 22 1999 -// RCS-ID: $Id: valgen.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: valgen.h 68217 2011-07-09 23:37:28Z VZ $ // Copyright: (c) 1999 Julian Smart (assigned from Kevin) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,6 +16,7 @@ #if wxUSE_VALIDATORS class WXDLLIMPEXP_FWD_BASE wxDateTime; +class WXDLLIMPEXP_FWD_BASE wxFileName; // ---------------------------------------------------------------------------- // wxGenericValidator performs data transfer between many standard controls and @@ -42,6 +43,13 @@ public: // wxDatePickerCtrl wxGenericValidator(wxDateTime* val); #endif // wxUSE_DATETIME + // wxTextCtrl + wxGenericValidator(wxFileName* val); + // wxTextCtrl + wxGenericValidator(float* val); + // wxTextCtrl + wxGenericValidator(double* val); + wxGenericValidator(const wxGenericValidator& copyFrom); virtual ~wxGenericValidator(){} @@ -73,6 +81,9 @@ protected: #if wxUSE_DATETIME wxDateTime* m_pDateTime; #endif // wxUSE_DATETIME + wxFileName* m_pFileName; + float* m_pFloat; + double* m_pDouble; private: DECLARE_CLASS(wxGenericValidator) diff --git a/Externals/wxWidgets3/include/wx/vector.h b/Externals/wxWidgets3/include/wx/vector.h index 1d785e949d..e95d4103ef 100644 --- a/Externals/wxWidgets3/include/wx/vector.h +++ b/Externals/wxWidgets3/include/wx/vector.h @@ -14,7 +14,7 @@ #include "wx/defs.h" -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include #include @@ -26,7 +26,7 @@ inline void wxVectorSort(wxVector& v) std::sort(v.begin(), v.end()); } -#else // !wxUSE_STL +#else // !wxUSE_STD_CONTAINERS #include "wx/utils.h" #include "wx/scopeguard.h" @@ -457,7 +457,7 @@ namespace wxPrivate template struct wxVectorComparator { - static int wxCMPFUNC_CONV + static int Compare(const void* pitem1, const void* pitem2, const void* ) { const T& item1 = *reinterpret_cast(pitem1); @@ -485,7 +485,7 @@ void wxVectorSort(wxVector& v) -#endif // wxUSE_STL/!wxUSE_STL +#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS #if WXWIN_COMPATIBILITY_2_8 #define WX_DECLARE_VECTORBASE(obj, cls) typedef wxVector cls diff --git a/Externals/wxWidgets3/include/wx/version.h b/Externals/wxWidgets3/include/wx/version.h index 67888da9d6..fb634a97fb 100644 --- a/Externals/wxWidgets3/include/wx/version.h +++ b/Externals/wxWidgets3/include/wx/version.h @@ -4,7 +4,7 @@ * Author: Julian Smart * Modified by: Ryan Norton (Converted to C) * Created: 29/01/98 - * RCS-ID: $Id: version.h 65038 2010-07-22 12:09:04Z VZ $ + * RCS-ID: $Id: version.h 70021 2011-12-16 22:12:49Z VZ $ * Copyright: (c) 1998 Julian Smart * Licence: wxWindows licence */ @@ -28,9 +28,9 @@ /* NB: this file is parsed by automatic tools so don't change its format! */ #define wxMAJOR_VERSION 2 #define wxMINOR_VERSION 9 -#define wxRELEASE_NUMBER 2 +#define wxRELEASE_NUMBER 4 #define wxSUBRELEASE_NUMBER 0 -#define wxVERSION_STRING wxT("wxWidgets 2.9.2") +#define wxVERSION_STRING wxT("wxWidgets 2.9.4") /* nothing to update below this line when updating the version */ /* ---------------------------------------------------------------------------- */ diff --git a/Externals/wxWidgets3/include/wx/vscroll.h b/Externals/wxWidgets3/include/wx/vscroll.h index d13ecf26f7..6bf9623c36 100644 --- a/Externals/wxWidgets3/include/wx/vscroll.h +++ b/Externals/wxWidgets3/include/wx/vscroll.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: Brad Anderson, Bryan Petty // Created: 30.05.03 -// RCS-ID: $Id: vscroll.h 64943 2010-07-13 13:29:58Z VZ $ +// RCS-ID: $Id: vscroll.h 70085 2011-12-22 01:26:11Z RD $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -236,7 +236,7 @@ protected: #ifdef __WXMAC__ // queue mac window update after handling scroll event - virtual void UpdateMacScrollWindow() = 0; + virtual void UpdateMacScrollWindow() { } #endif // __WXMAC__ // change the target window diff --git a/Externals/wxWidgets3/include/wx/webview.h b/Externals/wxWidgets3/include/wx/webview.h new file mode 100644 index 0000000000..993d99cfa5 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/webview.h @@ -0,0 +1,242 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: webview.h +// Purpose: Common interface and events for web view component +// Author: Marianne Gagnon +// Id: $Id: webview.h 70038 2011-12-17 23:52:40Z VZ $ +// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_WEB_VIEW_H_ +#define _WX_WEB_VIEW_H_ + +#include "wx/defs.h" + +#if wxUSE_WEBVIEW + +#include "wx/control.h" +#include "wx/event.h" +#include "wx/sstream.h" +#include "wx/sharedptr.h" +#include "wx/vector.h" + +#if defined(__WXOSX__) + #include "wx/osx/webviewhistoryitem_webkit.h" +#elif defined(__WXGTK__) + #include "wx/gtk/webviewhistoryitem_webkit.h" +#elif defined(__WXMSW__) + #include "wx/msw/webviewhistoryitem_ie.h" +#else + #error "wxWebView not implemented on this platform." +#endif + +class wxFSFile; +class wxFileSystem; + +enum wxWebViewZoom +{ + wxWEB_VIEW_ZOOM_TINY, + wxWEB_VIEW_ZOOM_SMALL, + wxWEB_VIEW_ZOOM_MEDIUM, + wxWEB_VIEW_ZOOM_LARGE, + wxWEB_VIEW_ZOOM_LARGEST +}; + +enum wxWebViewZoomType +{ + //Scales entire page, including images + wxWEB_VIEW_ZOOM_TYPE_LAYOUT, + wxWEB_VIEW_ZOOM_TYPE_TEXT +}; + +enum wxWebViewNavigationError +{ + wxWEB_NAV_ERR_CONNECTION, + wxWEB_NAV_ERR_CERTIFICATE, + wxWEB_NAV_ERR_AUTH, + wxWEB_NAV_ERR_SECURITY, + wxWEB_NAV_ERR_NOT_FOUND, + wxWEB_NAV_ERR_REQUEST, + wxWEB_NAV_ERR_USER_CANCELLED, + wxWEB_NAV_ERR_OTHER +}; + +enum wxWebViewReloadFlags +{ + //Default, may access cache + wxWEB_VIEW_RELOAD_DEFAULT, + wxWEB_VIEW_RELOAD_NO_CACHE +}; + +enum wxWebViewBackend +{ + wxWEB_VIEW_BACKEND_DEFAULT, + wxWEB_VIEW_BACKEND_WEBKIT, + wxWEB_VIEW_BACKEND_IE +}; + +//Base class for custom scheme handlers +class WXDLLIMPEXP_WEBVIEW wxWebViewHandler +{ +public: + wxWebViewHandler(const wxString& scheme) : m_scheme(scheme) {} + virtual ~wxWebViewHandler() {} + virtual wxString GetName() const { return m_scheme; } + virtual wxFSFile* GetFile(const wxString &uri) = 0; +private: + wxString m_scheme; +}; + +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewNameStr[]; +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewDefaultURLStr[]; + +class WXDLLIMPEXP_WEBVIEW wxWebView : public wxControl +{ +public: + virtual ~wxWebView() {} + + virtual bool Create(wxWindow* parent, + wxWindowID id, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxWebViewNameStr) = 0; + + static wxWebView* New(wxWebViewBackend backend = wxWEB_VIEW_BACKEND_DEFAULT); + static wxWebView* New(wxWindow* parent, + wxWindowID id, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + wxWebViewBackend backend = wxWEB_VIEW_BACKEND_DEFAULT, + long style = 0, + const wxString& name = wxWebViewNameStr); + + //General methods + virtual wxString GetCurrentTitle() const = 0; + virtual wxString GetCurrentURL() const = 0; + // TODO: handle choosing a frame when calling GetPageSource()? + virtual wxString GetPageSource() const = 0; + virtual wxString GetPageText() const = 0; + virtual bool IsBusy() const = 0; + virtual bool IsEditable() const = 0; + virtual void LoadURL(const wxString& url) = 0; + virtual void Print() = 0; + virtual void RegisterHandler(wxSharedPtr handler) = 0; + virtual void Reload(wxWebViewReloadFlags flags = wxWEB_VIEW_RELOAD_DEFAULT) = 0; + virtual void RunScript(const wxString& javascript) = 0; + virtual void SetEditable(bool enable = true) = 0; + virtual void SetPage(const wxString& html, const wxString& baseUrl) = 0; + virtual void SetPage(wxInputStream& html, wxString baseUrl) + { + wxStringOutputStream stream; + stream.Write(html); + SetPage(stream.GetString(), baseUrl); + } + virtual void Stop() = 0; + + //History + virtual bool CanGoBack() const = 0; + virtual bool CanGoForward() const = 0; + virtual void GoBack() = 0; + virtual void GoForward() = 0; + virtual void ClearHistory() = 0; + virtual void EnableHistory(bool enable = true) = 0; + virtual wxVector > GetBackwardHistory() = 0; + virtual wxVector > GetForwardHistory() = 0; + virtual void LoadHistoryItem(wxSharedPtr item) = 0; + + //Zoom + virtual bool CanSetZoomType(wxWebViewZoomType type) const = 0; + virtual wxWebViewZoom GetZoom() const = 0; + virtual wxWebViewZoomType GetZoomType() const = 0; + virtual void SetZoom(wxWebViewZoom zoom) = 0; + virtual void SetZoomType(wxWebViewZoomType zoomType) = 0; + + //Selection + virtual void SelectAll() = 0; + virtual bool HasSelection() const = 0; + virtual void DeleteSelection() = 0; + virtual wxString GetSelectedText() const = 0; + virtual wxString GetSelectedSource() const = 0; + virtual void ClearSelection() = 0; + + //Clipboard functions + virtual bool CanCut() const = 0; + virtual bool CanCopy() const = 0; + virtual bool CanPaste() const = 0; + virtual void Cut() = 0; + virtual void Copy() = 0; + virtual void Paste() = 0; + + //Undo / redo functionality + virtual bool CanUndo() const = 0; + virtual bool CanRedo() const = 0; + virtual void Undo() = 0; + virtual void Redo() = 0; + + wxDECLARE_ABSTRACT_CLASS(wxWebView); +}; + +class WXDLLIMPEXP_WEBVIEW wxWebViewEvent : public wxNotifyEvent +{ +public: + wxWebViewEvent() {} + wxWebViewEvent(wxEventType type, int id, const wxString url, + const wxString target) + : wxNotifyEvent(type, id), m_url(url), m_target(target) + {} + + + const wxString& GetURL() const { return m_url; } + const wxString& GetTarget() const { return m_target; } + + virtual wxEvent* Clone() const { return new wxWebViewEvent(*this); } +private: + wxString m_url; + wxString m_target; + + wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWebViewEvent); +}; + +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebViewEvent ); + +typedef void (wxEvtHandler::*wxWebViewEventFunction) + (wxWebViewEvent&); + +#define wxWebViewEventHandler(func) \ + wxEVENT_HANDLER_CAST(wxWebViewEventFunction, func) + +#define EVT_WEB_VIEW_NAVIGATING(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, id, \ + wxWebViewEventHandler(fn)) + +#define EVT_WEB_VIEW_NAVIGATED(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, id, \ + wxWebViewEventHandler(fn)) + +#define EVT_WEB_VIEW_LOADED(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_LOADED, id, \ + wxWebViewEventHandler(fn)) + +#define EVT_WEB_VIEW_ERROR(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_ERROR, id, \ + wxWebViewEventHandler(fn)) + +#define EVT_WEB_VIEW_NEWWINDOW(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, id, \ + wxWebViewEventHandler(fn)) + +#define EVT_WEB_VIEW_TITLE_CHANGED(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, id, \ + wxWebViewEventHandler(fn)) + +#endif // wxUSE_WEBVIEW + +#endif // _WX_WEB_VIEW_H_ diff --git a/Externals/wxWidgets3/include/wx/webviewarchivehandler.h b/Externals/wxWidgets3/include/wx/webviewarchivehandler.h new file mode 100644 index 0000000000..4cd91dc4af --- /dev/null +++ b/Externals/wxWidgets3/include/wx/webviewarchivehandler.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: webviewarchivehandler.h +// Purpose: Custom webview handler to allow archive browsing +// Author: Steven Lamerton +// Id: $Id: webviewarchivehandler.h 69316 2011-10-05 21:21:51Z SJL $ +// Copyright: (c) 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_WEB_VIEW_FILE_HANDLER_H_ +#define _WX_WEB_VIEW_FILE_HANDLER_H_ + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW + +class wxFSFile; +class wxFileSystem; + +#include "wx/webview.h" + +//Loads from uris such as scheme:///C:/example/example.html or archives such as +//scheme:///C:/example/example.zip;protocol=zip/example.html + +class WXDLLIMPEXP_WEBVIEW wxWebViewArchiveHandler : public wxWebViewHandler +{ +public: + wxWebViewArchiveHandler(const wxString& scheme); + virtual ~wxWebViewArchiveHandler(); + virtual wxFSFile* GetFile(const wxString &uri); +private: + wxFileSystem* m_fileSystem; +}; + +#endif // wxUSE_WEBVIEW + +#endif // _WX_WEB_VIEW_FILE_HANDLER_H_ diff --git a/Externals/wxWidgets3/include/wx/window.h b/Externals/wxWidgets3/include/wx/window.h index e108fac563..3ec3b57692 100644 --- a/Externals/wxWidgets3/include/wx/window.h +++ b/Externals/wxWidgets3/include/wx/window.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: Ron Lee // Created: 01/02/97 -// RCS-ID: $Id: window.h 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: window.h 70838 2012-03-07 23:50:21Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -480,7 +480,7 @@ public: // windows this is just the client area of the window, but for // some like scrolled windows it is more or less independent of // the screen window size. You may override the DoXXXVirtual - // methods below for classes where that is is the case. + // methods below for classes where that is the case. void SetVirtualSize( const wxSize &size ) { DoSetVirtualSize( size.x, size.y ); } void SetVirtualSize( int x, int y ) { DoSetVirtualSize( x, y ); } @@ -623,9 +623,10 @@ public: bool HasExtraStyle(int exFlag) const { return (m_exStyle & exFlag) != 0; } +#if WXWIN_COMPATIBILITY_2_8 // make the window modal (all other windows unresponsive) - virtual void MakeModal(bool modal = true); - + wxDEPRECATED( virtual void MakeModal(bool modal = true) ); +#endif // (primitive) theming support // --------------------------- @@ -1029,8 +1030,7 @@ public: wxColour GetForegroundColour() const; // Set/get the background style. - virtual bool SetBackgroundStyle(wxBackgroundStyle style) - { m_backgroundStyle = style; return true; } + virtual bool SetBackgroundStyle(wxBackgroundStyle style); wxBackgroundStyle GetBackgroundStyle() const { return m_backgroundStyle; } @@ -1039,6 +1039,13 @@ public: // from a parent window virtual bool HasTransparentBackground() { return false; } + // Returns true if background transparency is supported for this + // window, i.e. if calling SetBackgroundStyle(wxBG_STYLE_TRANSPARENT) + // has a chance of succeeding. If reason argument is non-NULL, returns a + // user-readable explanation of why it isn't supported if the return + // value is false. + virtual bool IsTransparentBackgroundSupported(wxString* reason = NULL) const; + // set/retrieve the font for the window (SetFont() returns true if the // font really changed) virtual bool SetFont(const wxFont& font) = 0; @@ -1254,6 +1261,15 @@ public: // get the associated tooltip or NULL if none wxToolTip* GetToolTip() const { return m_tooltip; } wxString GetToolTipText() const; + + // Use the same tool tip as the given one (which can be NULL to indicate + // that no tooltip should be used) for this window. This is currently only + // used by wxCompositeWindow::DoSetToolTip() implementation and is not part + // of the public wx API. + // + // Returns true if tip was valid and we copied it or false if it was NULL + // and we reset our own tooltip too. + bool CopyToolTip(wxToolTip *tip); #else // !wxUSE_TOOLTIPS // make it much easier to compile apps in an environment // that doesn't support tooltips, such as PocketPC @@ -1422,6 +1438,15 @@ public: virtual wxWindow *GetMainWindowOfCompositeControl() { return (wxWindow*)this; } + // If this function returns true, keyboard navigation events shouldn't + // escape from it. A typical example of such "navigation domain" is a top + // level window because pressing TAB in one of them must not transfer focus + // to a different top level window. But it's not limited to them, e.g. MDI + // children frames are not top level windows (and their IsTopLevel() + // returns false) but still are self-contained navigation domains as well. + virtual bool IsTopNavigationDomain() const { return false; } + + protected: // helper for the derived class Create() methods: the first overload, with // validator parameter, should be used for child windows while the second @@ -1794,14 +1819,7 @@ inline void wxWindowBase::SetInitialBestSize(const wxSize& size) // ---------------------------------------------------------------------------- // include the declaration of the platform-specific class -#if defined(__WXPALMOS__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowPalm - #else // !wxUniv - #define wxWindowPalm wxWindow - #endif // wxUniv/!wxUniv - #include "wx/palmos/window.h" -#elif defined(__WXMSW__) +#if defined(__WXMSW__) #ifdef __WXUNIVERSAL__ #define wxWindowNative wxWindowMSW #else // !wxUniv @@ -1831,9 +1849,6 @@ inline void wxWindowBase::SetInitialBestSize(const wxSize& size) #define wxWindowX11 wxWindow #endif // wxUniv #include "wx/x11/window.h" -#elif defined(__WXMGL__) - #define wxWindowNative wxWindowMGL - #include "wx/mgl/window.h" #elif defined(__WXDFB__) #define wxWindowNative wxWindowDFB #include "wx/dfb/window.h" diff --git a/Externals/wxWidgets3/include/wx/withimages.h b/Externals/wxWidgets3/include/wx/withimages.h new file mode 100644 index 0000000000..f8ce1c85e4 --- /dev/null +++ b/Externals/wxWidgets3/include/wx/withimages.h @@ -0,0 +1,97 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/withimages.h +// Purpose: Declaration of a simple wxWithImages class. +// Author: Vadim Zeitlin +// Created: 2011-08-17 +// RCS-ID: $Id: withimages.h 68813 2011-08-21 14:52:16Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_WITHIMAGES_H_ +#define _WX_WITHIMAGES_H_ + +#include "wx/defs.h" +#include "wx/icon.h" +#include "wx/imaglist.h" + +// ---------------------------------------------------------------------------- +// wxWithImages: mix-in class providing access to wxImageList. +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxWithImages +{ +public: + enum + { + NO_IMAGE = -1 + }; + + wxWithImages() + { + m_imageList = NULL; + m_ownsImageList = false; + } + + virtual ~wxWithImages() + { + FreeIfNeeded(); + } + + // Sets the image list to use, it is *not* deleted by the control. + virtual void SetImageList(wxImageList* imageList) + { + FreeIfNeeded(); + m_imageList = imageList; + } + + // As SetImageList() but we will delete the image list ourselves. + void AssignImageList(wxImageList* imageList) + { + SetImageList(imageList); + m_ownsImageList = true; + } + + // Get pointer (may be NULL) to the associated image list. + wxImageList* GetImageList() const { return m_imageList; } + +protected: + // Return true if we have a valid image list. + bool HasImageList() const { return m_imageList != NULL; } + + // Return the image with the given index from the image list. + // + // If there is no image list or if index == NO_IMAGE, silently returns + // wxNullIcon. + wxIcon GetImage(int iconIndex) const + { + return m_imageList && iconIndex != NO_IMAGE + ? m_imageList->GetIcon(iconIndex) + : wxNullIcon; + } + +private: + // Free the image list if necessary, i.e. if we own it. + void FreeIfNeeded() + { + if ( m_ownsImageList ) + { + delete m_imageList; + m_imageList = NULL; + + // We don't own it any more. + m_ownsImageList = false; + } + } + + + // The associated image list or NULL. + wxImageList* m_imageList; + + // False by default, if true then we delete m_imageList. + bool m_ownsImageList; + + wxDECLARE_NO_COPY_CLASS(wxWithImages); +}; + +#endif // _WX_WITHIMAGES_H_ diff --git a/Externals/wxWidgets3/include/wx/wizard.h b/Externals/wxWidgets3/include/wx/wizard.h index 997631bfb4..bd23ce582a 100644 --- a/Externals/wxWidgets3/include/wx/wizard.h +++ b/Externals/wxWidgets3/include/wx/wizard.h @@ -9,7 +9,7 @@ // Added wxWIZARD_HELP event // Robert Vazan (sizers) // Created: 15.08.99 -// RCS-ID: $Id: wizard.h 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: wizard.h 70630 2012-02-20 11:38:52Z JS $ // Copyright: (c) 1999 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -291,6 +291,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_CANCEL, wxWizardEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_HELP, wxWizardEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_FINISHED, wxWizardEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_PAGE_SHOWN, wxWizardEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_WIZARD_BEFORE_PAGE_CHANGED, wxWizardEvent ); typedef void (wxEvtHandler::*wxWizardEventFunction)(wxWizardEvent&); @@ -307,6 +308,10 @@ typedef void (wxEvtHandler::*wxWizardEventFunction)(wxWizardEvent&); // changed - unless the event handler vetoes the event #define EVT_WIZARD_PAGE_CHANGING(id, fn) wx__DECLARE_WIZARDEVT(PAGE_CHANGING, id, fn) +// Called before GetNext/GetPrev is called, so that the handler can change state that will be +// used when GetNext/GetPrev is called. PAGE_CHANGING is called too late to influence GetNext/GetPrev. +#define EVT_WIZARD_BEFORE_PAGE_CHANGED(id, fn) wx__DECLARE_WIZARDEVT(BEFORE_PAGE_CHANGED, id, fn) + // the user pressed "Cancel" button and the wizard is going to be dismissed - // unless the event handler vetoes the event #define EVT_WIZARD_CANCEL(id, fn) wx__DECLARE_WIZARDEVT(CANCEL, id, fn) diff --git a/Externals/wxWidgets3/include/wx/wxcrt.h b/Externals/wxWidgets3/include/wx/wxcrt.h index 19cb0d6258..e464e36c80 100644 --- a/Externals/wxWidgets3/include/wx/wxcrt.h +++ b/Externals/wxWidgets3/include/wx/wxcrt.h @@ -5,7 +5,7 @@ // Author: Joel Farley, Ove Kaaven // Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee, Vaclav Slavik // Created: 1998/06/12 -// RCS-ID: $Id: wxcrt.h 66798 2011-01-28 06:18:33Z PC $ +// RCS-ID: $Id: wxcrt.h 68594 2011-08-08 08:33:19Z VZ $ // Copyright: (c) 1998-2006 wxWidgets dev team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -467,7 +467,7 @@ WX_STRCMP_FUNC(wxStricmp, wxCRT_StricmpA, wxCRT_StricmpW, wxStricmp_String) // forward-declare the template and implement it below WX_STRCMP_FUNC. OTOH, // this fails to compile with VC6, so don't do it for VC. It also causes // problems with GCC visibility in newer GCC versions. -#if !(defined(__VISUALC__) || wxCHECK_GCC_VERSION(3,5)) || defined(__clang__) +#if !(defined(__VISUALC__) || (wxCHECK_GCC_VERSION(3,5) && !wxCHECK_GCC_VERSION(4,7))) || defined(__clang__) #define wxNEEDS_DECL_BEFORE_TEMPLATE #endif diff --git a/Externals/wxWidgets3/include/wx/wxcrtbase.h b/Externals/wxWidgets3/include/wx/wxcrtbase.h index 845a443c45..4d3d9ebb22 100644 --- a/Externals/wxWidgets3/include/wx/wxcrtbase.h +++ b/Externals/wxWidgets3/include/wx/wxcrtbase.h @@ -5,7 +5,7 @@ * Author: Joel Farley, Ove Kaaven * Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee * Created: 1998/06/12 - * RCS-ID: $Id: wxcrtbase.h 66446 2010-12-25 14:18:58Z VZ $ + * RCS-ID: $Id: wxcrtbase.h 70345 2012-01-15 01:05:28Z VZ $ * Copyright: (c) 1998-2006 wxWidgets dev team * Licence: wxWindows licence */ @@ -32,17 +32,11 @@ */ -#if !defined(__WXPALMOS5__) #include #include #include -#if defined(__WXPALMOS__) - #include -#else - #include -#endif +#include #include -#endif #if defined(__WINDOWS__) && !defined(__WXWINCE__) #include @@ -179,7 +173,7 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size ); #define wxCRT_StrstrW wcsstr /* these functions are not defined under CE, at least in VC8 CRT */ -#if !defined(__WXWINCE__) && !defined(__WXPALMOS__) +#if !defined(__WXWINCE__) #define wxCRT_StrcollA strcoll #define wxCRT_StrxfrmA strxfrm @@ -188,9 +182,12 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size ); #endif /* __WXWINCE__ */ /* Almost all compiler have strdup(), but not quite all: CodeWarrior under - Mac and VC++ for Windows CE don't provide it; additionally, gcc under - Mac and OpenVMS do not have wcsdup: */ -#if defined(__VISUALC__) && __VISUALC__ >= 1400 + Mac and VC++ for Windows CE don't provide it. Another special case is gcc in + strict ANSI mode: normally it doesn't provide strdup() but MinGW does + provide it under MSVC-compatible name so test for it before checking + __WX_STRICT_ANSI_GCC__. */ +#if (defined(__VISUALC__) && __VISUALC__ >= 1400) || \ + defined(__MINGW32__) #define wxCRT_StrdupA _strdup #elif !((defined(__MWERKS__) && defined(__WXMAC__)) || \ defined(__WXWINCE__) || \ @@ -198,7 +195,7 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size ); #define wxCRT_StrdupA strdup #endif -// most Windows compilers provide _wcsdup() +/* most Windows compilers provide _wcsdup() */ #if defined(__WINDOWS__) && \ !(defined(__CYGWIN__) || defined(__WX_STRICT_ANSI_GCC__)) #define wxCRT_StrdupW _wcsdup @@ -271,12 +268,6 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size ); defined(__EMX__) || defined(__DJGPP__) #define wxCRT_StricmpA stricmp #define wxCRT_StrnicmpA strnicmp -#elif defined(__WXPALMOS__) - /* FIXME: There is no equivalent to strnicmp in the Palm OS API. This - * quick hack should do until one can be written. - */ - #define wxCRT_StricmpA StrCaselessCompare - #define wxCRT_StrnicmpA StrNCaselessCompare #elif defined(__SYMANTEC__) || defined(__VISUALC__) || \ (defined(__MWERKS__) && defined(__INTEL__)) #define wxCRT_StricmpA _stricmp @@ -449,14 +440,14 @@ WXDLLIMPEXP_BASE wchar_t *wxCRT_StrtokW(wchar_t *psz, const wchar_t *delim, wcha wchar_t** endptr, int base); #endif -#endif // wxLongLong_t +#endif /* wxLongLong_t */ /* ------------------------------------------------------------------------- stdio.h ------------------------------------------------------------------------- */ -#if defined(__UNIX__) || defined(__WXMAC__) || defined(__WXPALMOS__) +#if defined(__UNIX__) || defined(__WXMAC__) #define wxMBFILES 1 #else #define wxMBFILES 0 @@ -616,12 +607,9 @@ WXDLLIMPEXP_BASE wchar_t * wxCRT_GetenvW(const wchar_t *name); #if defined(__MWERKS__) && defined(__MSL__) #define wxNEED_WX_MBSTOWCS #endif -#if defined(__WXPALMOS__) - #define wxNEED_WX_MBSTOWCS -#endif #ifdef __DARWIN__ - #if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 + #if !defined(__WXOSX_IPHONE__) && MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 #define wxNEED_WX_MBSTOWCS #endif #endif @@ -664,13 +652,14 @@ WXDLLIMPEXP_BASE wchar_t * wxCRT_GetenvW(const wchar_t *name); _xpg5_wcsftime(wchar_t *, size_t, const wchar_t *, const struct tm * ); #define wxCRT_StrftimeW _xpg5_wcsftime #else - // Assume it's always available under non-Unix systems with the exception - // of Palm OS, this does seem to be the case for now. And under Unix we - // trust configure to detect it (except for SGI special case above). - #if defined(HAVE_WCSFTIME) || \ - !(defined(__UNIX__) || defined(__WXPALMOS__)) + /* + Assume it's always available under non-Unix systems as this does seem + to be the case for now. And under Unix we trust configure to detect it + (except for SGI special case above). + */ + #if defined(HAVE_WCSFTIME) || !defined(__UNIX__) #define wxCRT_StrftimeW wcsftime - #endif /* ! __WXPALMOS__ */ + #endif #endif #ifndef wxCRT_StrftimeW diff --git a/Externals/wxWidgets3/include/wx/wxprec.h b/Externals/wxWidgets3/include/wx/wxprec.h index 48f0034877..d1e3fe8a30 100644 --- a/Externals/wxWidgets3/include/wx/wxprec.h +++ b/Externals/wxWidgets3/include/wx/wxprec.h @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: wxprec.h 61724 2009-08-21 10:41:26Z VZ $ +// RCS-ID: $Id: wxprec.h 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -49,21 +49,11 @@ #include "wx/msw/missing.h" #endif -// include all PalmOS headers at once -#ifdef __WXPALMOS__ -# include -#endif - // include #ifdef __OS2__ # include "wx/os2/private.h" #endif -// include mgl headers -#ifdef __WXMGL__ -# include "wx/mgl/private.h" -#endif - // include the most common wx headers #include "wx/wx.h" diff --git a/Externals/wxWidgets3/include/wx/xti.h b/Externals/wxWidgets3/include/wx/xti.h index 34bcdeece5..abd8ae0934 100644 --- a/Externals/wxWidgets3/include/wx/xti.h +++ b/Externals/wxWidgets3/include/wx/xti.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: Francesco Montorsi // Created: 27/07/03 -// RCS-ID: $Id: xti.h 66646 2011-01-07 22:52:46Z SC $ +// RCS-ID: $Id: xti.h 70396 2012-01-19 09:00:29Z SC $ // Copyright: (c) 1997 Julian Smart // (c) 2003 Stefan Csomor // Licence: wxWindows licence @@ -96,7 +96,7 @@ typedef bool (*wxObjectStreamingCallback) ( const wxObject *, wxObjectWriter *, class WXDLLIMPEXP_BASE wxClassInfo { friend class WXDLLIMPEXP_BASE wxPropertyInfo; - friend class WXDLLIMPEXP_BASE wxHandlerInfo; + friend class /* WXDLLIMPEXP_BASE */ wxHandlerInfo; friend wxObject *wxCreateDynamicObject(const wxString& name); public: @@ -333,7 +333,6 @@ private: wxPropertyInfoFn m_firstPropertyFn; wxHandlerInfoFn m_firstHandlerFn; - mutable bool m_firstInited; protected: void EnsureInfosInited() const @@ -351,6 +350,8 @@ protected: mutable wxHandlerInfo* m_firstHandler; private: + mutable bool m_firstInited; + const wxClassInfo** m_parents; const wxChar* m_unitName; diff --git a/Externals/wxWidgets3/include/wx/xtiprop.h b/Externals/wxWidgets3/include/wx/xtiprop.h index 464047004e..75539f51e4 100644 --- a/Externals/wxWidgets3/include/wx/xtiprop.h +++ b/Externals/wxWidgets3/include/wx/xtiprop.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: Francesco Montorsi // Created: 27/07/03 -// RCS-ID: $Id: xtiprop.h 66651 2011-01-08 10:22:30Z SC $ +// RCS-ID: $Id: xtiprop.h 70398 2012-01-19 09:50:46Z SC $ // Copyright: (c) 1997 Julian Smart // (c) 2003 Stefan Csomor // Licence: wxWindows licence @@ -20,9 +20,11 @@ #include "wx/xti.h" #include "wx/any.h" +/* class WXDLLIMPEXP_BASE wxObject; class WXDLLIMPEXP_BASE wxClassInfo; class WXDLLIMPEXP_BASE wxDynamicClassInfo; +*/ class WXDLLIMPEXP_BASE wxHashTable; class WXDLLIMPEXP_BASE wxHashTable_Node; class WXDLLIMPEXP_BASE wxEvent; @@ -302,7 +304,7 @@ enum class WXDLLIMPEXP_BASE wxPropertyInfo { - friend class WXDLLIMPEXP_BASE wxDynamicClassInfo; + friend class /* WXDLLIMPEXP_BASE */ wxDynamicClassInfo; public: wxPropertyInfo(wxPropertyInfo* &iter, @@ -443,9 +445,20 @@ private: // when the component is dropped on the container. }; -WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxPropertyInfo*, wxPropertyInfoMap, +// stl is giving problems when forwarding declarations, therefore we define it as a subclass + +WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxPropertyInfo*, wxPropertyInfoMapBase, class WXDLLIMPEXP_BASE ); +class WXDLLIMPEXP_BASE wxPropertyInfoMap : public wxPropertyInfoMapBase { +}; + +WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxAny, wxStringToAnyHashMapBase, + class WXDLLIMPEXP_BASE ); + +class WXDLLIMPEXP_FWD_BASE wxStringToAnyHashMap : public wxStringToAnyHashMapBase { +}; + #define wxBEGIN_PROPERTIES_TABLE(theClass) \ wxPropertyInfo *theClass::GetPropertiesStatic() \ { \ @@ -544,8 +557,5 @@ public: \ void Set##name( type const & p) { m_##name = p; } \ type const & Get##name() const { return m_##name; } -WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxAny, wxStringToAnyHashMap, - class WXDLLIMPEXP_BASE ); - #endif // wxUSE_EXTENDED_RTTI #endif // _XTIPROP_H_ diff --git a/Externals/wxWidgets3/include/wx/xtistrm.h b/Externals/wxWidgets3/include/wx/xtistrm.h index 2a5369240a..e304803494 100644 --- a/Externals/wxWidgets3/include/wx/xtistrm.h +++ b/Externals/wxWidgets3/include/wx/xtistrm.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 27/07/03 -// RCS-ID: $Id: xtistrm.h 66621 2011-01-07 17:22:59Z SC $ +// RCS-ID: $Id: xtistrm.h 70396 2012-01-19 09:00:29Z SC $ // Copyright: (c) 2003 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -38,14 +38,16 @@ const int wxNullObjectID = -3; // or modify the value before it is streamed-out. // ---------------------------------------------------------------------------- +/* + class WXDLLIMPEXP_BASE wxClassInfo; + class WXDLLIMPEXP_BASE wxAnyList; + class WXDLLIMPEXP_BASE wxPropertyInfo; + class WXDLLIMPEXP_BASE wxAny; + class WXDLLIMPEXP_BASE wxHandlerInfo; + */ + class WXDLLIMPEXP_BASE wxObjectWriter; class WXDLLIMPEXP_BASE wxObjectReader; -class WXDLLIMPEXP_BASE wxClassInfo; -class WXDLLIMPEXP_BASE wxAnyList; -class WXDLLIMPEXP_BASE wxPropertyInfo; -class WXDLLIMPEXP_BASE wxAny; -class WXDLLIMPEXP_BASE wxObjectWriter; -class WXDLLIMPEXP_BASE wxHandlerInfo; class WXDLLIMPEXP_BASE wxObjectWriterCallback { diff --git a/Externals/wxWidgets3/include/wx/xtitypes.h b/Externals/wxWidgets3/include/wx/xtitypes.h index 2f689d3126..6724bf4c35 100644 --- a/Externals/wxWidgets3/include/wx/xtitypes.h +++ b/Externals/wxWidgets3/include/wx/xtitypes.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: Francesco Montorsi // Created: 27/07/03 -// RCS-ID: $Id: xtitypes.h 66651 2011-01-08 10:22:30Z SC $ +// RCS-ID: $Id: xtitypes.h 70384 2012-01-18 14:05:39Z SC $ // Copyright: (c) 1997 Julian Smart // (c) 2003 Stefan Csomor // Licence: wxWindows licence @@ -88,7 +88,7 @@ private: wxEnumData s_enumData##e( s_enumDataMembers##e ); \ wxEnumData *wxGetEnumData(e) { return &s_enumData##e; } \ template<> void wxStringReadValue(const wxString& s, e &data ) \ - { data = (e) s_enumData##e.GetEnumMemberValue(s); } \ + { data = (e) s_enumData##e.GetEnumMemberValue(s.c_str()); } \ template<> void wxStringWriteValue(wxString &s, const e &data ) \ { s = s_enumData##e.GetEnumMemberName((int)data); } \ void FromLong##e( long data, wxAny& result ) \ @@ -147,7 +147,7 @@ void wxSetFromString(const wxString &s, wxBitset &data ) { flag = array[i]; int ivalue; - if ( edata->HasEnumMemberValue( flag, &ivalue ) ) + if ( edata->HasEnumMemberValue( flag.c_str(), &ivalue ) ) { data.set( (e) ivalue ); } @@ -202,7 +202,7 @@ void wxFlagsFromString(const wxString &s, e &data ) { flag = array[i]; int ivalue; - if ( edata->HasEnumMemberValue( flag, &ivalue ) ) + if ( edata->HasEnumMemberValue( flag.c_str(), &ivalue ) ) { data.m_data |= ivalue; } @@ -355,7 +355,7 @@ public: if ( m_toString ) (*m_toString)( data, result ); else - wxLogError( wxGetTranslation(_T("String conversions not supported")) ); + wxLogError( wxGetTranslation(wxT("String conversions not supported")) ); } // convert a string into a wxAny holding the corresponding data in this type @@ -364,7 +364,7 @@ public: if( m_fromString ) (*m_fromString)( data, result ); else - wxLogError( wxGetTranslation(_T("String conversions not supported")) ); + wxLogError( wxGetTranslation(wxT("String conversions not supported")) ); } // statics: @@ -428,7 +428,7 @@ public: if( m_toLong ) (*m_toLong)( data, result ); else - wxLogError( wxGetTranslation(_T("Long Conversions not supported")) ); + wxLogError( wxGetTranslation(wxT("Long Conversions not supported")) ); } // convert a long into a wxAny holding the corresponding data in this type @@ -437,7 +437,7 @@ public: if( m_fromLong ) (*m_fromLong)( data, result ); else - wxLogError( wxGetTranslation(_T("Long Conversions not supported")) ); + wxLogError( wxGetTranslation(wxT("Long Conversions not supported")) ); } private: diff --git a/Externals/wxWidgets3/include/wx/xtixml.h b/Externals/wxWidgets3/include/wx/xtixml.h index b68f02438a..5eaf03fa51 100644 --- a/Externals/wxWidgets3/include/wx/xtixml.h +++ b/Externals/wxWidgets3/include/wx/xtixml.h @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 27/07/03 -// RCS-ID: $Id: xtixml.h 66621 2011-01-07 17:22:59Z SC $ +// RCS-ID: $Id: xtixml.h 70397 2012-01-19 09:45:49Z SC $ // Copyright: (c) 2003 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,6 +19,7 @@ #include "wx/string.h" #include "wx/xtistrm.h" +/* class WXDLLIMPEXP_XML wxXmlNode; class WXDLLIMPEXP_BASE wxPropertyInfo; class WXDLLIMPEXP_BASE wxObject; @@ -26,6 +27,7 @@ class WXDLLIMPEXP_BASE wxClassInfo; class WXDLLIMPEXP_BASE wxAnyList; class WXDLLIMPEXP_BASE wxHandlerInfo; class WXDLLIMPEXP_BASE wxObjectWriterCallback; +*/ class WXDLLIMPEXP_XML wxObjectXmlWriter: public wxObjectWriter { diff --git a/Externals/wxWidgets3/src/aui/auibar.cpp b/Externals/wxWidgets3/src/aui/auibar.cpp index 6e9eb92037..b6654e2fb4 100644 --- a/Externals/wxWidgets3/src/aui/auibar.cpp +++ b/Externals/wxWidgets3/src/aui/auibar.cpp @@ -5,7 +5,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: $Id: auibar.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: auibar.cpp 70748 2012-02-29 13:58:52Z VZ $ // Copyright: (C) Copyright 2005-2006, Kirix Corporation, All Rights Reserved // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -69,60 +69,25 @@ const int BUTTON_DROPDOWN_WIDTH = 10; wxBitmap wxAuiBitmapFromBits(const unsigned char bits[], int w, int h, const wxColour& color); -static wxBitmap MakeDisabledBitmap(wxBitmap& bmp) -{ - wxImage image = bmp.ConvertToImage(); - - int mr, mg, mb; - mr = image.GetMaskRed(); - mg = image.GetMaskGreen(); - mb = image.GetMaskBlue(); - - unsigned char* data = image.GetData(); - int width = image.GetWidth(); - int height = image.GetHeight(); - bool has_mask = image.HasMask(); - - for (int y = height-1; y >= 0; --y) - { - for (int x = width-1; x >= 0; --x) - { - data = image.GetData() + (y*(width*3))+(x*3); - unsigned char* r = data; - unsigned char* g = data+1; - unsigned char* b = data+2; - - if (has_mask && *r == mr && *g == mg && *b == mb) - continue; - - *r = wxColour::AlphaBlend(*r, 255, 0.4); - *g = wxColour::AlphaBlend(*g, 255, 0.4); - *b = wxColour::AlphaBlend(*b, 255, 0.4); - } - } - - return wxBitmap(image); -} - static wxColor GetBaseColor() { #if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON - wxColor base_colour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground)); + wxColor baseColour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground)); #else - wxColor base_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); + wxColor baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); #endif - // the base_colour is too pale to use as our base colour, + // the baseColour is too pale to use as our base colour, // so darken it a bit -- - if ((255-base_colour.Red()) + - (255-base_colour.Green()) + - (255-base_colour.Blue()) < 60) + if ((255-baseColour.Red()) + + (255-baseColour.Green()) + + (255-baseColour.Blue()) < 60) { - base_colour = base_colour.ChangeLightness(92); + baseColour = baseColour.ChangeLightness(92); } - return base_colour; + return baseColour; } @@ -131,14 +96,14 @@ class ToolbarCommandCapture : public wxEvtHandler { public: - ToolbarCommandCapture() { m_last_id = 0; } - int GetCommandId() const { return m_last_id; } + ToolbarCommandCapture() { m_lastId = 0; } + int GetCommandId() const { return m_lastId; } bool ProcessEvent(wxEvent& evt) { if (evt.GetEventType() == wxEVT_COMMAND_MENU_SELECTED) { - m_last_id = evt.GetId(); + m_lastId = evt.GetId(); return true; } @@ -149,7 +114,7 @@ public: } private: - int m_last_id; + int m_lastId; }; @@ -162,36 +127,36 @@ const wxColour DISABLED_TEXT_COLOR(DISABLED_TEXT_GREY_HUE, wxAuiDefaultToolBarArt::wxAuiDefaultToolBarArt() { - m_base_colour = GetBaseColor(); + m_baseColour = GetBaseColor(); m_flags = 0; - m_text_orientation = wxAUI_TBTOOL_TEXT_BOTTOM; - m_highlight_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); + m_textOrientation = wxAUI_TBTOOL_TEXT_BOTTOM; + m_highlightColour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); - m_separator_size = 7; - m_gripper_size = 7; - m_overflow_size = 16; + m_separatorSize = 7; + m_gripperSize = 7; + m_overflowSize = 16; - wxColor darker1_colour = m_base_colour.ChangeLightness(85); - wxColor darker2_colour = m_base_colour.ChangeLightness(75); - wxColor darker3_colour = m_base_colour.ChangeLightness(60); - wxColor darker4_colour = m_base_colour.ChangeLightness(50); - wxColor darker5_colour = m_base_colour.ChangeLightness(40); + wxColor darker1Colour = m_baseColour.ChangeLightness(85); + wxColor darker2Colour = m_baseColour.ChangeLightness(75); + wxColor darker3Colour = m_baseColour.ChangeLightness(60); + wxColor darker4Colour = m_baseColour.ChangeLightness(50); + wxColor darker5Colour = m_baseColour.ChangeLightness(40); - m_gripper_pen1 = wxPen(darker5_colour); - m_gripper_pen2 = wxPen(darker3_colour); - m_gripper_pen3 = *wxWHITE_PEN; + m_gripperPen1 = wxPen(darker5Colour); + m_gripperPen2 = wxPen(darker3Colour); + m_gripperPen3 = *wxWHITE_PEN; - static const unsigned char button_dropdown_bits[] = { 0xe0, 0xf1, 0xfb }; - static const unsigned char overflow_bits[] = { 0x80, 0xff, 0x80, 0xc1, 0xe3, 0xf7 }; + static const unsigned char buttonDropdownBits[] = { 0xe0, 0xf1, 0xfb }; + static const unsigned char overflowBits[] = { 0x80, 0xff, 0x80, 0xc1, 0xe3, 0xf7 }; - m_button_dropdown_bmp = wxAuiBitmapFromBits(button_dropdown_bits, 5, 3, + m_buttonDropDownBmp = wxAuiBitmapFromBits(buttonDropdownBits, 5, 3, *wxBLACK); - m_disabled_button_dropdown_bmp = wxAuiBitmapFromBits( - button_dropdown_bits, 5, 3, + m_disabledButtonDropDownBmp = wxAuiBitmapFromBits( + buttonDropdownBits, 5, 3, wxColor(128,128,128)); - m_overflow_bmp = wxAuiBitmapFromBits(overflow_bits, 7, 6, *wxBLACK); - m_disabled_overflow_bmp = wxAuiBitmapFromBits(overflow_bits, 7, 6, wxColor(128,128,128)); + m_overflowBmp = wxAuiBitmapFromBits(overflowBits, 7, 6, *wxBLACK); + m_disabledOverflowBmp = wxAuiBitmapFromBits(overflowBits, 7, 6, wxColor(128,128,128)); m_font = *wxNORMAL_FONT; } @@ -219,7 +184,7 @@ void wxAuiDefaultToolBarArt::SetFont(const wxFont& font) void wxAuiDefaultToolBarArt::SetTextOrientation(int orientation) { - m_text_orientation = orientation; + m_textOrientation = orientation; } unsigned int wxAuiDefaultToolBarArt::GetFlags() @@ -234,7 +199,7 @@ wxFont wxAuiDefaultToolBarArt::GetFont() int wxAuiDefaultToolBarArt::GetTextOrientation() { - return m_text_orientation; + return m_textOrientation; } void wxAuiDefaultToolBarArt::DrawBackground( @@ -244,9 +209,9 @@ void wxAuiDefaultToolBarArt::DrawBackground( { wxRect rect = _rect; rect.height++; - wxColour start_colour = m_base_colour.ChangeLightness(150); - wxColour end_colour = m_base_colour.ChangeLightness(90); - dc.GradientFillLinear(rect, start_colour, end_colour, wxSOUTH); + wxColour startColour = m_baseColour.ChangeLightness(150); + wxColour endColour = m_baseColour.ChangeLightness(90); + dc.GradientFillLinear(rect, startColour, endColour, wxSOUTH); } void wxAuiDefaultToolBarArt::DrawLabel( @@ -260,18 +225,18 @@ void wxAuiDefaultToolBarArt::DrawLabel( // we only care about the text height here since the text // will get cropped based on the width of the item - int text_width = 0, text_height = 0; - dc.GetTextExtent(wxT("ABCDHgj"), &text_width, &text_height); + int textWidth = 0, textHeight = 0; + dc.GetTextExtent(wxT("ABCDHgj"), &textWidth, &textHeight); // set the clipping region - wxRect clip_rect = rect; - clip_rect.width -= 1; - dc.SetClippingRegion(clip_rect); + wxRect clipRect = rect; + clipRect.width -= 1; + dc.SetClippingRegion(clipRect); - int text_x, text_y; - text_x = rect.x + 1; - text_y = rect.y + (rect.height-text_height)/2; - dc.DrawText(item.GetLabel(), text_x, text_y); + int textX, textY; + textX = rect.x + 1; + textY = rect.y + (rect.height-textHeight)/2; + dc.DrawText(item.GetLabel(), textX, textY); dc.DestroyClippingRegion(); } @@ -282,7 +247,7 @@ void wxAuiDefaultToolBarArt::DrawButton( const wxAuiToolBarItem& item, const wxRect& rect) { - int text_width = 0, text_height = 0; + int textWidth = 0, textHeight = 0; if (m_flags & wxAUI_TB_TEXT) { @@ -290,39 +255,39 @@ void wxAuiDefaultToolBarArt::DrawButton( int tx, ty; - dc.GetTextExtent(wxT("ABCDHgj"), &tx, &text_height); - text_width = 0; - dc.GetTextExtent(item.GetLabel(), &text_width, &ty); + dc.GetTextExtent(wxT("ABCDHgj"), &tx, &textHeight); + textWidth = 0; + dc.GetTextExtent(item.GetLabel(), &textWidth, &ty); } - int bmp_x = 0, bmp_y = 0; - int text_x = 0, text_y = 0; + int bmpX = 0, bmpY = 0; + int textX = 0, textY = 0; - if (m_text_orientation == wxAUI_TBTOOL_TEXT_BOTTOM) + if (m_textOrientation == wxAUI_TBTOOL_TEXT_BOTTOM) { - bmp_x = rect.x + + bmpX = rect.x + (rect.width/2) - (item.GetBitmap().GetWidth()/2); - bmp_y = rect.y + - ((rect.height-text_height)/2) - + bmpY = rect.y + + ((rect.height-textHeight)/2) - (item.GetBitmap().GetHeight()/2); - text_x = rect.x + (rect.width/2) - (text_width/2) + 1; - text_y = rect.y + rect.height - text_height - 1; + textX = rect.x + (rect.width/2) - (textWidth/2) + 1; + textY = rect.y + rect.height - textHeight - 1; } - else if (m_text_orientation == wxAUI_TBTOOL_TEXT_RIGHT) + else if (m_textOrientation == wxAUI_TBTOOL_TEXT_RIGHT) { - bmp_x = rect.x + 3; + bmpX = rect.x + 3; - bmp_y = rect.y + + bmpY = rect.y + (rect.height/2) - (item.GetBitmap().GetHeight()/2); - text_x = bmp_x + 3 + item.GetBitmap().GetWidth(); - text_y = rect.y + + textX = bmpX + 3 + item.GetBitmap().GetWidth(); + textY = rect.y + (rect.height/2) - - (text_height/2); + (textHeight/2); } @@ -330,19 +295,19 @@ void wxAuiDefaultToolBarArt::DrawButton( { if (item.GetState() & wxAUI_BUTTON_STATE_PRESSED) { - dc.SetPen(wxPen(m_highlight_colour)); - dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(150))); + dc.SetPen(wxPen(m_highlightColour)); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(150))); dc.DrawRectangle(rect); } else if ((item.GetState() & wxAUI_BUTTON_STATE_HOVER) || item.IsSticky()) { - dc.SetPen(wxPen(m_highlight_colour)); - dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170))); + dc.SetPen(wxPen(m_highlightColour)); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(170))); // draw an even lighter background for checked item hovers (since // the hover background is the same color as the check background) if (item.GetState() & wxAUI_BUTTON_STATE_CHECKED) - dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(180))); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(180))); dc.DrawRectangle(rect); } @@ -350,8 +315,8 @@ void wxAuiDefaultToolBarArt::DrawButton( { // it's important to put this code in an else statment after the // hover, otherwise hovers won't draw properly for checked items - dc.SetPen(wxPen(m_highlight_colour)); - dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170))); + dc.SetPen(wxPen(m_highlightColour)); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(170))); dc.DrawRectangle(rect); } } @@ -362,10 +327,8 @@ void wxAuiDefaultToolBarArt::DrawButton( else bmp = item.GetBitmap(); - if (!bmp.IsOk()) - return; - - dc.DrawBitmap(bmp, bmp_x, bmp_y, true); + if ( bmp.IsOk() ) + dc.DrawBitmap(bmp, bmpX, bmpY, true); // set the item's text color based on if it is disabled dc.SetTextForeground(*wxBLACK); @@ -374,7 +337,7 @@ void wxAuiDefaultToolBarArt::DrawButton( if ( (m_flags & wxAUI_TB_TEXT) && !item.GetLabel().empty() ) { - dc.DrawText(item.GetLabel(), text_x, text_y); + dc.DrawText(item.GetLabel(), textX, textY); } } @@ -385,14 +348,14 @@ void wxAuiDefaultToolBarArt::DrawDropDownButton( const wxAuiToolBarItem& item, const wxRect& rect) { - int text_width = 0, text_height = 0, text_x = 0, text_y = 0; - int bmp_x = 0, bmp_y = 0, dropbmp_x = 0, dropbmp_y = 0; + int textWidth = 0, textHeight = 0, textX = 0, textY = 0; + int bmpX = 0, bmpY = 0, dropBmpX = 0, dropBmpY = 0; - wxRect button_rect = wxRect(rect.x, + wxRect buttonRect = wxRect(rect.x, rect.y, rect.width-BUTTON_DROPDOWN_WIDTH, rect.height); - wxRect dropdown_rect = wxRect(rect.x+rect.width-BUTTON_DROPDOWN_WIDTH-1, + wxRect dropDownRect = wxRect(rect.x+rect.width-BUTTON_DROPDOWN_WIDTH-1, rect.y, BUTTON_DROPDOWN_WIDTH+1, rect.height); @@ -404,66 +367,75 @@ void wxAuiDefaultToolBarArt::DrawDropDownButton( int tx, ty; if (m_flags & wxAUI_TB_TEXT) { - dc.GetTextExtent(wxT("ABCDHgj"), &tx, &text_height); - text_width = 0; + dc.GetTextExtent(wxT("ABCDHgj"), &tx, &textHeight); + textWidth = 0; } - dc.GetTextExtent(item.GetLabel(), &text_width, &ty); + dc.GetTextExtent(item.GetLabel(), &textWidth, &ty); } - dropbmp_x = dropdown_rect.x + - (dropdown_rect.width/2) - - (m_button_dropdown_bmp.GetWidth()/2); - dropbmp_y = dropdown_rect.y + - (dropdown_rect.height/2) - - (m_button_dropdown_bmp.GetHeight()/2); + dropBmpX = dropDownRect.x + + (dropDownRect.width/2) - + (m_buttonDropDownBmp.GetWidth()/2); + dropBmpY = dropDownRect.y + + (dropDownRect.height/2) - + (m_buttonDropDownBmp.GetHeight()/2); - if (m_text_orientation == wxAUI_TBTOOL_TEXT_BOTTOM) + if (m_textOrientation == wxAUI_TBTOOL_TEXT_BOTTOM) { - bmp_x = button_rect.x + - (button_rect.width/2) - + bmpX = buttonRect.x + + (buttonRect.width/2) - (item.GetBitmap().GetWidth()/2); - bmp_y = button_rect.y + - ((button_rect.height-text_height)/2) - + bmpY = buttonRect.y + + ((buttonRect.height-textHeight)/2) - (item.GetBitmap().GetHeight()/2); - text_x = rect.x + (rect.width/2) - (text_width/2) + 1; - text_y = rect.y + rect.height - text_height - 1; + textX = rect.x + (rect.width/2) - (textWidth/2) + 1; + textY = rect.y + rect.height - textHeight - 1; } - else if (m_text_orientation == wxAUI_TBTOOL_TEXT_RIGHT) + else if (m_textOrientation == wxAUI_TBTOOL_TEXT_RIGHT) { - bmp_x = rect.x + 3; + bmpX = rect.x + 3; - bmp_y = rect.y + + bmpY = rect.y + (rect.height/2) - (item.GetBitmap().GetHeight()/2); - text_x = bmp_x + 3 + item.GetBitmap().GetWidth(); - text_y = rect.y + + textX = bmpX + 3 + item.GetBitmap().GetWidth(); + textY = rect.y + (rect.height/2) - - (text_height/2); + (textHeight/2); } if (item.GetState() & wxAUI_BUTTON_STATE_PRESSED) { - dc.SetPen(wxPen(m_highlight_colour)); - dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(140))); - dc.DrawRectangle(button_rect); + dc.SetPen(wxPen(m_highlightColour)); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(140))); + dc.DrawRectangle(buttonRect); - dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170))); - dc.DrawRectangle(dropdown_rect); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(170))); + dc.DrawRectangle(dropDownRect); } else if (item.GetState() & wxAUI_BUTTON_STATE_HOVER || item.IsSticky()) { - dc.SetPen(wxPen(m_highlight_colour)); - dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170))); - dc.DrawRectangle(button_rect); - dc.DrawRectangle(dropdown_rect); + dc.SetPen(wxPen(m_highlightColour)); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(170))); + dc.DrawRectangle(buttonRect); + dc.DrawRectangle(dropDownRect); + } + else if (item.GetState() & wxAUI_BUTTON_STATE_CHECKED) + { + // Notice that this branch must come after the hover one to ensure the + // correct appearance when the mouse hovers over a checked item.m_ + dc.SetPen(wxPen(m_highlightColour)); + dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(170))); + dc.DrawRectangle(buttonRect); + dc.DrawRectangle(dropDownRect); } wxBitmap bmp; @@ -471,19 +443,19 @@ void wxAuiDefaultToolBarArt::DrawDropDownButton( if (item.GetState() & wxAUI_BUTTON_STATE_DISABLED) { bmp = item.GetDisabledBitmap(); - dropbmp = m_disabled_button_dropdown_bmp; + dropbmp = m_disabledButtonDropDownBmp; } else { bmp = item.GetBitmap(); - dropbmp = m_button_dropdown_bmp; + dropbmp = m_buttonDropDownBmp; } if (!bmp.IsOk()) return; - dc.DrawBitmap(bmp, bmp_x, bmp_y, true); - dc.DrawBitmap(dropbmp, dropbmp_x, dropbmp_y, true); + dc.DrawBitmap(bmp, bmpX, bmpY, true); + dc.DrawBitmap(dropbmp, dropBmpX, dropBmpY, true); // set the item's text color based on if it is disabled dc.SetTextForeground(*wxBLACK); @@ -492,7 +464,7 @@ void wxAuiDefaultToolBarArt::DrawDropDownButton( if ( (m_flags & wxAUI_TB_TEXT) && !item.GetLabel().empty() ) { - dc.DrawText(item.GetLabel(), text_x, text_y); + dc.DrawText(item.GetLabel(), textX, textY); } } @@ -505,36 +477,36 @@ void wxAuiDefaultToolBarArt::DrawControlLabel( if (!(m_flags & wxAUI_TB_TEXT)) return; - if (m_text_orientation != wxAUI_TBTOOL_TEXT_BOTTOM) + if (m_textOrientation != wxAUI_TBTOOL_TEXT_BOTTOM) return; - int text_x = 0, text_y = 0; - int text_width = 0, text_height = 0; + int textX = 0, textY = 0; + int textWidth = 0, textHeight = 0; dc.SetFont(m_font); int tx, ty; if (m_flags & wxAUI_TB_TEXT) { - dc.GetTextExtent(wxT("ABCDHgj"), &tx, &text_height); - text_width = 0; + dc.GetTextExtent(wxT("ABCDHgj"), &tx, &textHeight); + textWidth = 0; } - dc.GetTextExtent(item.GetLabel(), &text_width, &ty); + dc.GetTextExtent(item.GetLabel(), &textWidth, &ty); // don't draw the label if it is wider than the item width - if (text_width > rect.width) + if (textWidth > rect.width) return; // set the label's text color dc.SetTextForeground(*wxBLACK); - text_x = rect.x + (rect.width/2) - (text_width/2) + 1; - text_y = rect.y + rect.height - text_height - 1; + textX = rect.x + (rect.width/2) - (textWidth/2) + 1; + textY = rect.y + rect.height - textHeight - 1; if ( (m_flags & wxAUI_TB_TEXT) && !item.GetLabel().empty() ) { - dc.DrawText(item.GetLabel(), text_x, text_y); + dc.DrawText(item.GetLabel(), textX, textY); } } @@ -577,7 +549,7 @@ wxSize wxAuiDefaultToolBarArt::GetToolSize( dc.SetFont(m_font); int tx, ty; - if (m_text_orientation == wxAUI_TBTOOL_TEXT_BOTTOM) + if (m_textOrientation == wxAUI_TBTOOL_TEXT_BOTTOM) { dc.GetTextExtent(wxT("ABCDHgj"), &tx, &ty); height += ty; @@ -588,7 +560,7 @@ wxSize wxAuiDefaultToolBarArt::GetToolSize( width = wxMax(width, tx+6); } } - else if ( m_text_orientation == wxAUI_TBTOOL_TEXT_RIGHT && + else if ( m_textOrientation == wxAUI_TBTOOL_TEXT_RIGHT && !item.GetLabel().empty() ) { width += 3; // space between left border and bitmap @@ -638,9 +610,9 @@ void wxAuiDefaultToolBarArt::DrawSeparator( rect.width = new_width; } - wxColour start_colour = m_base_colour.ChangeLightness(80); - wxColour end_colour = m_base_colour.ChangeLightness(80); - dc.GradientFillLinear(rect, start_colour, end_colour, horizontal ? wxSOUTH : wxEAST); + wxColour startColour = m_baseColour.ChangeLightness(80); + wxColour endColour = m_baseColour.ChangeLightness(80); + dc.GradientFillLinear(rect, startColour, endColour, horizontal ? wxSOUTH : wxEAST); } void wxAuiDefaultToolBarArt::DrawGripper(wxDC& dc, @@ -667,12 +639,12 @@ void wxAuiDefaultToolBarArt::DrawGripper(wxDC& dc, break; } - dc.SetPen(m_gripper_pen1); + dc.SetPen(m_gripperPen1); dc.DrawPoint(x, y); - dc.SetPen(m_gripper_pen2); + dc.SetPen(m_gripperPen2); dc.DrawPoint(x, y+1); dc.DrawPoint(x+1, y); - dc.SetPen(m_gripper_pen3); + dc.SetPen(m_gripperPen3); dc.DrawPoint(x+2, y+1); dc.DrawPoint(x+2, y+2); dc.DrawPoint(x+1, y+2); @@ -683,19 +655,18 @@ void wxAuiDefaultToolBarArt::DrawGripper(wxDC& dc, } void wxAuiDefaultToolBarArt::DrawOverflowButton(wxDC& dc, - wxWindow* wnd, + wxWindow* /*wnd*/, const wxRect& rect, int state) { if (state & wxAUI_BUTTON_STATE_HOVER || state & wxAUI_BUTTON_STATE_PRESSED) { - wxRect cli_rect = wnd->GetClientRect(); - wxColor light_gray_bg = m_highlight_colour.ChangeLightness(170); + wxColor light_gray_bg = m_highlightColour.ChangeLightness(170); if (m_flags & wxAUI_TB_VERTICAL) { - dc.SetPen(wxPen(m_highlight_colour)); + dc.SetPen(wxPen(m_highlightColour)); dc.DrawLine(rect.x, rect.y, rect.x+rect.width, rect.y); dc.SetPen(wxPen(light_gray_bg)); dc.SetBrush(wxBrush(light_gray_bg)); @@ -703,7 +674,7 @@ void wxAuiDefaultToolBarArt::DrawOverflowButton(wxDC& dc, } else { - dc.SetPen(wxPen(m_highlight_colour)); + dc.SetPen(wxPen(m_highlightColour)); dc.DrawLine(rect.x, rect.y, rect.x, rect.y+rect.height); dc.SetPen(wxPen(light_gray_bg)); dc.SetBrush(wxBrush(light_gray_bg)); @@ -711,18 +682,18 @@ void wxAuiDefaultToolBarArt::DrawOverflowButton(wxDC& dc, } } - int x = rect.x+1+(rect.width-m_overflow_bmp.GetWidth())/2; - int y = rect.y+1+(rect.height-m_overflow_bmp.GetHeight())/2; - dc.DrawBitmap(m_overflow_bmp, x, y, true); + int x = rect.x+1+(rect.width-m_overflowBmp.GetWidth())/2; + int y = rect.y+1+(rect.height-m_overflowBmp.GetHeight())/2; + dc.DrawBitmap(m_overflowBmp, x, y, true); } int wxAuiDefaultToolBarArt::GetElementSize(int element_id) { switch (element_id) { - case wxAUI_TBART_SEPARATOR_SIZE: return m_separator_size; - case wxAUI_TBART_GRIPPER_SIZE: return m_gripper_size; - case wxAUI_TBART_OVERFLOW_SIZE: return m_overflow_size; + case wxAUI_TBART_SEPARATOR_SIZE: return m_separatorSize; + case wxAUI_TBART_GRIPPER_SIZE: return m_gripperSize; + case wxAUI_TBART_OVERFLOW_SIZE: return m_overflowSize; default: return 0; } } @@ -731,9 +702,9 @@ void wxAuiDefaultToolBarArt::SetElementSize(int element_id, int size) { switch (element_id) { - case wxAUI_TBART_SEPARATOR_SIZE: m_separator_size = size; break; - case wxAUI_TBART_GRIPPER_SIZE: m_gripper_size = size; break; - case wxAUI_TBART_OVERFLOW_SIZE: m_overflow_size = size; break; + case wxAUI_TBART_SEPARATOR_SIZE: m_separatorSize = size; break; + case wxAUI_TBART_GRIPPER_SIZE: m_gripperSize = size; break; + case wxAUI_TBART_OVERFLOW_SIZE: m_overflowSize = size; break; } } @@ -840,18 +811,18 @@ wxAuiToolBar::wxAuiToolBar(wxWindow* parent, style | wxBORDER_NONE) { m_sizer = new wxBoxSizer(wxHORIZONTAL); - m_button_width = -1; - m_button_height = -1; - m_sizer_element_count = 0; - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; - m_tip_item = NULL; + m_buttonWidth = -1; + m_buttonHeight = -1; + m_sizerElementCount = 0; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; + m_tipItem = NULL; m_art = new wxAuiDefaultToolBarArt; - m_tool_packing = 2; - m_tool_border_padding = 3; - m_tool_text_orientation = wxAUI_TBTOOL_TEXT_BOTTOM; - m_gripper_sizer_item = NULL; - m_overflow_sizer_item = NULL; + m_toolPacking = 2; + m_toolBorderPadding = 3; + m_toolTextOrientation = wxAUI_TBTOOL_TEXT_BOTTOM; + m_gripperSizerItem = NULL; + m_overflowSizerItem = NULL; m_dragging = false; m_orientation = GetOrientation(style); if (m_orientation == wxBOTH) @@ -859,9 +830,9 @@ wxAuiToolBar::wxAuiToolBar(wxWindow* parent, m_orientation = wxHORIZONTAL; } m_style = style | wxBORDER_NONE; - m_gripper_visible = (m_style & wxAUI_TB_GRIPPER) ? true : false; - m_overflow_visible = (m_style & wxAUI_TB_OVERFLOW) ? true : false; - m_overflow_state = 0; + m_gripperVisible = (m_style & wxAUI_TB_GRIPPER) ? true : false; + m_overflowVisible = (m_style & wxAUI_TB_OVERFLOW) ? true : false; + m_overflowState = 0; SetMargins(5, 5, 2, 2); SetFont(*wxNORMAL_FONT); SetArtFlags(); @@ -894,15 +865,15 @@ void wxAuiToolBar::SetWindowStyleFlag(long style) } if (m_style & wxAUI_TB_GRIPPER) - m_gripper_visible = true; + m_gripperVisible = true; else - m_gripper_visible = false; + m_gripperVisible = false; if (m_style & wxAUI_TB_OVERFLOW) - m_overflow_visible = true; + m_overflowVisible = true; else - m_overflow_visible = false; + m_overflowVisible = false; if (style & wxAUI_TB_HORZ_LAYOUT) SetToolTextOrientation(wxAUI_TBTOOL_TEXT_RIGHT); @@ -924,7 +895,7 @@ void wxAuiToolBar::SetArtProvider(wxAuiToolBarArt* art) if (m_art) { SetArtFlags(); - m_art->SetTextOrientation(m_tool_text_orientation); + m_art->SetTextOrientation(m_toolTextOrientation); } } @@ -939,7 +910,7 @@ wxAuiToolBarArt* wxAuiToolBar::GetArtProvider() const wxAuiToolBarItem* wxAuiToolBar::AddTool(int tool_id, const wxString& label, const wxBitmap& bitmap, - const wxString& short_help_string, + const wxString& shortHelp_string, wxItemKind kind) { return AddTool(tool_id, @@ -947,7 +918,7 @@ wxAuiToolBarItem* wxAuiToolBar::AddTool(int tool_id, bitmap, wxNullBitmap, kind, - short_help_string, + shortHelp_string, wxEmptyString, NULL); } @@ -956,43 +927,40 @@ wxAuiToolBarItem* wxAuiToolBar::AddTool(int tool_id, wxAuiToolBarItem* wxAuiToolBar::AddTool(int tool_id, const wxString& label, const wxBitmap& bitmap, - const wxBitmap& disabled_bitmap, + const wxBitmap& disabledBitmap, wxItemKind kind, - const wxString& short_help_string, - const wxString& long_help_string, + const wxString& shortHelpString, + const wxString& longHelpString, wxObject* WXUNUSED(client_data)) { wxAuiToolBarItem item; - item.window = NULL; - item.label = label; - item.bitmap = bitmap; - item.disabled_bitmap = disabled_bitmap; - item.short_help = short_help_string; - item.long_help = long_help_string; - item.active = true; - item.dropdown = false; - item.spacer_pixels = 0; - item.toolid = tool_id; - item.state = 0; - item.proportion = 0; - item.kind = kind; - item.sizer_item = NULL; - item.min_size = wxDefaultSize; - item.user_data = 0; - item.sticky = false; + item.m_window = NULL; + item.m_label = label; + item.m_bitmap = bitmap; + item.m_disabledBitmap = disabledBitmap; + item.m_shortHelp = shortHelpString; + item.m_longHelp = longHelpString; + item.m_active = true; + item.m_dropDown = false; + item.m_spacerPixels = 0; + item.m_toolId = tool_id; + item.m_state = 0; + item.m_proportion = 0; + item.m_kind = kind; + item.m_sizerItem = NULL; + item.m_minSize = wxDefaultSize; + item.m_userData = 0; + item.m_sticky = false; - if (item.toolid == wxID_ANY) - item.toolid = wxNewId(); + if (item.m_toolId == wxID_ANY) + item.m_toolId = wxNewId(); - if (!item.disabled_bitmap.IsOk()) + if (!item.m_disabledBitmap.IsOk()) { // no disabled bitmap specified, we need to make one - if (item.bitmap.IsOk()) + if (item.m_bitmap.IsOk()) { - //wxImage img = item.bitmap.ConvertToImage(); - //wxImage grey_version = img.ConvertToGreyscale(); - //item.disabled_bitmap = wxBitmap(grey_version); - item.disabled_bitmap = MakeDisabledBitmap(item.bitmap); + item.m_disabledBitmap = item.m_bitmap.ConvertToDisabled(); } } m_items.Add(item); @@ -1003,21 +971,21 @@ wxAuiToolBarItem* wxAuiToolBar::AddControl(wxControl* control, const wxString& label) { wxAuiToolBarItem item; - item.window = (wxWindow*)control; - item.label = label; - item.bitmap = wxNullBitmap; - item.disabled_bitmap = wxNullBitmap; - item.active = true; - item.dropdown = false; - item.spacer_pixels = 0; - item.toolid = control->GetId(); - item.state = 0; - item.proportion = 0; - item.kind = wxITEM_CONTROL; - item.sizer_item = NULL; - item.min_size = control->GetEffectiveMinSize(); - item.user_data = 0; - item.sticky = false; + item.m_window = (wxWindow*)control; + item.m_label = label; + item.m_bitmap = wxNullBitmap; + item.m_disabledBitmap = wxNullBitmap; + item.m_active = true; + item.m_dropDown = false; + item.m_spacerPixels = 0; + item.m_toolId = control->GetId(); + item.m_state = 0; + item.m_proportion = 0; + item.m_kind = wxITEM_CONTROL; + item.m_sizerItem = NULL; + item.m_minSize = control->GetEffectiveMinSize(); + item.m_userData = 0; + item.m_sticky = false; m_items.Add(item); return &m_items.Last(); @@ -1032,24 +1000,24 @@ wxAuiToolBarItem* wxAuiToolBar::AddLabel(int tool_id, min_size.x = width; wxAuiToolBarItem item; - item.window = NULL; - item.label = label; - item.bitmap = wxNullBitmap; - item.disabled_bitmap = wxNullBitmap; - item.active = true; - item.dropdown = false; - item.spacer_pixels = 0; - item.toolid = tool_id; - item.state = 0; - item.proportion = 0; - item.kind = wxITEM_LABEL; - item.sizer_item = NULL; - item.min_size = min_size; - item.user_data = 0; - item.sticky = false; + item.m_window = NULL; + item.m_label = label; + item.m_bitmap = wxNullBitmap; + item.m_disabledBitmap = wxNullBitmap; + item.m_active = true; + item.m_dropDown = false; + item.m_spacerPixels = 0; + item.m_toolId = tool_id; + item.m_state = 0; + item.m_proportion = 0; + item.m_kind = wxITEM_LABEL; + item.m_sizerItem = NULL; + item.m_minSize = min_size; + item.m_userData = 0; + item.m_sticky = false; - if (item.toolid == wxID_ANY) - item.toolid = wxNewId(); + if (item.m_toolId == wxID_ANY) + item.m_toolId = wxNewId(); m_items.Add(item); return &m_items.Last(); @@ -1058,20 +1026,20 @@ wxAuiToolBarItem* wxAuiToolBar::AddLabel(int tool_id, wxAuiToolBarItem* wxAuiToolBar::AddSeparator() { wxAuiToolBarItem item; - item.window = NULL; - item.label = wxEmptyString; - item.bitmap = wxNullBitmap; - item.disabled_bitmap = wxNullBitmap; - item.active = true; - item.dropdown = false; - item.toolid = -1; - item.state = 0; - item.proportion = 0; - item.kind = wxITEM_SEPARATOR; - item.sizer_item = NULL; - item.min_size = wxDefaultSize; - item.user_data = 0; - item.sticky = false; + item.m_window = NULL; + item.m_label = wxEmptyString; + item.m_bitmap = wxNullBitmap; + item.m_disabledBitmap = wxNullBitmap; + item.m_active = true; + item.m_dropDown = false; + item.m_toolId = -1; + item.m_state = 0; + item.m_proportion = 0; + item.m_kind = wxITEM_SEPARATOR; + item.m_sizerItem = NULL; + item.m_minSize = wxDefaultSize; + item.m_userData = 0; + item.m_sticky = false; m_items.Add(item); return &m_items.Last(); @@ -1080,21 +1048,21 @@ wxAuiToolBarItem* wxAuiToolBar::AddSeparator() wxAuiToolBarItem* wxAuiToolBar::AddSpacer(int pixels) { wxAuiToolBarItem item; - item.window = NULL; - item.label = wxEmptyString; - item.bitmap = wxNullBitmap; - item.disabled_bitmap = wxNullBitmap; - item.active = true; - item.dropdown = false; - item.spacer_pixels = pixels; - item.toolid = -1; - item.state = 0; - item.proportion = 0; - item.kind = wxITEM_SPACER; - item.sizer_item = NULL; - item.min_size = wxDefaultSize; - item.user_data = 0; - item.sticky = false; + item.m_window = NULL; + item.m_label = wxEmptyString; + item.m_bitmap = wxNullBitmap; + item.m_disabledBitmap = wxNullBitmap; + item.m_active = true; + item.m_dropDown = false; + item.m_spacerPixels = pixels; + item.m_toolId = -1; + item.m_state = 0; + item.m_proportion = 0; + item.m_kind = wxITEM_SPACER; + item.m_sizerItem = NULL; + item.m_minSize = wxDefaultSize; + item.m_userData = 0; + item.m_sticky = false; m_items.Add(item); return &m_items.Last(); @@ -1103,21 +1071,21 @@ wxAuiToolBarItem* wxAuiToolBar::AddSpacer(int pixels) wxAuiToolBarItem* wxAuiToolBar::AddStretchSpacer(int proportion) { wxAuiToolBarItem item; - item.window = NULL; - item.label = wxEmptyString; - item.bitmap = wxNullBitmap; - item.disabled_bitmap = wxNullBitmap; - item.active = true; - item.dropdown = false; - item.spacer_pixels = 0; - item.toolid = -1; - item.state = 0; - item.proportion = proportion; - item.kind = wxITEM_SPACER; - item.sizer_item = NULL; - item.min_size = wxDefaultSize; - item.user_data = 0; - item.sticky = false; + item.m_window = NULL; + item.m_label = wxEmptyString; + item.m_bitmap = wxNullBitmap; + item.m_disabledBitmap = wxNullBitmap; + item.m_active = true; + item.m_dropDown = false; + item.m_spacerPixels = 0; + item.m_toolId = -1; + item.m_state = 0; + item.m_proportion = proportion; + item.m_kind = wxITEM_SPACER; + item.m_sizerItem = NULL; + item.m_minSize = wxDefaultSize; + item.m_userData = 0; + item.m_sticky = false; m_items.Add(item); return &m_items.Last(); @@ -1126,7 +1094,7 @@ wxAuiToolBarItem* wxAuiToolBar::AddStretchSpacer(int proportion) void wxAuiToolBar::Clear() { m_items.Clear(); - m_sizer_element_count = 0; + m_sizerElementCount = 0; } bool wxAuiToolBar::DeleteTool(int tool_id) @@ -1167,7 +1135,7 @@ wxAuiToolBarItem* wxAuiToolBar::FindTool(int tool_id) const for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.toolid == tool_id) + if (item.m_toolId == tool_id) return &item; } @@ -1181,10 +1149,10 @@ wxAuiToolBarItem* wxAuiToolBar::FindToolByPosition(wxCoord x, wxCoord y) const { wxAuiToolBarItem& item = m_items.Item(i); - if (!item.sizer_item) + if (!item.m_sizerItem) continue; - wxRect rect = item.sizer_item->GetRect(); + wxRect rect = item.m_sizerItem->GetRect(); if (rect.Contains(x,y)) { // if the item doesn't fit on the toolbar, return NULL @@ -1205,14 +1173,14 @@ wxAuiToolBarItem* wxAuiToolBar::FindToolByPositionWithPacking(wxCoord x, wxCoord { wxAuiToolBarItem& item = m_items.Item(i); - if (!item.sizer_item) + if (!item.m_sizerItem) continue; - wxRect rect = item.sizer_item->GetRect(); + wxRect rect = item.m_sizerItem->GetRect(); // apply tool packing if (i+1 < count) - rect.width += m_tool_packing; + rect.width += m_toolPacking; if (rect.Contains(x,y)) { @@ -1255,7 +1223,7 @@ void wxAuiToolBar::SetToolProportion(int tool_id, int proportion) if (!item) return; - item->proportion = proportion; + item->m_proportion = proportion; } int wxAuiToolBar::GetToolProportion(int tool_id) const @@ -1264,7 +1232,7 @@ int wxAuiToolBar::GetToolProportion(int tool_id) const if (!item) return 0; - return item->proportion; + return item->m_proportion; } void wxAuiToolBar::SetToolSeparation(int separation) @@ -1288,7 +1256,7 @@ void wxAuiToolBar::SetToolDropDown(int tool_id, bool dropdown) if (!item) return; - item->dropdown = dropdown; + item->m_dropDown = dropdown; } bool wxAuiToolBar::GetToolDropDown(int tool_id) const @@ -1297,7 +1265,7 @@ bool wxAuiToolBar::GetToolDropDown(int tool_id) const if (!item) return 0; - return item->dropdown; + return item->m_dropDown; } void wxAuiToolBar::SetToolSticky(int tool_id, bool sticky) @@ -1310,10 +1278,10 @@ void wxAuiToolBar::SetToolSticky(int tool_id, bool sticky) if (!item) return; - if (item->sticky == sticky) + if (item->m_sticky == sticky) return; - item->sticky = sticky; + item->m_sticky = sticky; Refresh(false); Update(); @@ -1325,7 +1293,7 @@ bool wxAuiToolBar::GetToolSticky(int tool_id) const if (!item) return 0; - return item->sticky; + return item->m_sticky; } @@ -1333,17 +1301,17 @@ bool wxAuiToolBar::GetToolSticky(int tool_id) const void wxAuiToolBar::SetToolBorderPadding(int padding) { - m_tool_border_padding = padding; + m_toolBorderPadding = padding; } int wxAuiToolBar::GetToolBorderPadding() const { - return m_tool_border_padding; + return m_toolBorderPadding; } void wxAuiToolBar::SetToolTextOrientation(int orientation) { - m_tool_text_orientation = orientation; + m_toolTextOrientation = orientation; if (m_art) { @@ -1353,17 +1321,17 @@ void wxAuiToolBar::SetToolTextOrientation(int orientation) int wxAuiToolBar::GetToolTextOrientation() const { - return m_tool_text_orientation; + return m_toolTextOrientation; } void wxAuiToolBar::SetToolPacking(int packing) { - m_tool_packing = packing; + m_toolPacking = packing; } int wxAuiToolBar::GetToolPacking() const { - return m_tool_packing; + return m_toolPacking; } @@ -1382,23 +1350,23 @@ void wxAuiToolBar::SetOrientation(int orientation) void wxAuiToolBar::SetMargins(int left, int right, int top, int bottom) { if (left != -1) - m_left_padding = left; + m_leftPadding = left; if (right != -1) - m_right_padding = right; + m_rightPadding = right; if (top != -1) - m_top_padding = top; + m_topPadding = top; if (bottom != -1) - m_bottom_padding = bottom; + m_bottomPadding = bottom; } bool wxAuiToolBar::GetGripperVisible() const { - return m_gripper_visible; + return m_gripperVisible; } void wxAuiToolBar::SetGripperVisible(bool visible) { - m_gripper_visible = visible; + m_gripperVisible = visible; if (visible) m_style |= wxAUI_TB_GRIPPER; else @@ -1410,12 +1378,12 @@ void wxAuiToolBar::SetGripperVisible(bool visible) bool wxAuiToolBar::GetOverflowVisible() const { - return m_overflow_visible; + return m_overflowVisible; } void wxAuiToolBar::SetOverflowVisible(bool visible) { - m_overflow_visible = visible; + m_overflowVisible = visible; if (visible) m_style |= wxAUI_TB_OVERFLOW; else @@ -1444,14 +1412,14 @@ void wxAuiToolBar::SetHoverItem(wxAuiToolBarItem* pitem) for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.state & wxAUI_BUTTON_STATE_HOVER) + if (item.m_state & wxAUI_BUTTON_STATE_HOVER) former_hover = &item; - item.state &= ~wxAUI_BUTTON_STATE_HOVER; + item.m_state &= ~wxAUI_BUTTON_STATE_HOVER; } if (pitem) { - pitem->state |= wxAUI_BUTTON_STATE_HOVER; + pitem->m_state |= wxAUI_BUTTON_STATE_HOVER; } if (former_hover != pitem) @@ -1469,15 +1437,15 @@ void wxAuiToolBar::SetPressedItem(wxAuiToolBarItem* pitem) for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.state & wxAUI_BUTTON_STATE_PRESSED) + if (item.m_state & wxAUI_BUTTON_STATE_PRESSED) former_item = &item; - item.state &= ~wxAUI_BUTTON_STATE_PRESSED; + item.m_state &= ~wxAUI_BUTTON_STATE_PRESSED; } if (pitem) { - pitem->state &= ~wxAUI_BUTTON_STATE_HOVER; - pitem->state |= wxAUI_BUTTON_STATE_PRESSED; + pitem->m_state &= ~wxAUI_BUTTON_STATE_HOVER; + pitem->m_state |= wxAUI_BUTTON_STATE_PRESSED; } if (former_item != pitem) @@ -1489,9 +1457,9 @@ void wxAuiToolBar::SetPressedItem(wxAuiToolBarItem* pitem) void wxAuiToolBar::RefreshOverflowState() { - if (!m_overflow_sizer_item) + if (!m_overflowSizerItem) { - m_overflow_state = 0; + m_overflowState = 0; return; } @@ -1513,23 +1481,23 @@ void wxAuiToolBar::RefreshOverflowState() overflow_state = wxAUI_BUTTON_STATE_HOVER; } - if (overflow_state != m_overflow_state) + if (overflow_state != m_overflowState) { - m_overflow_state = overflow_state; + m_overflowState = overflow_state; Refresh(false); Update(); } - m_overflow_state = overflow_state; + m_overflowState = overflow_state; } void wxAuiToolBar::ToggleTool(int tool_id, bool state) { wxAuiToolBarItem* tool = FindTool(tool_id); - if (tool && (tool->kind == wxITEM_CHECK || tool->kind == wxITEM_RADIO)) + if (tool && (tool->m_kind == wxITEM_CHECK || tool->m_kind == wxITEM_RADIO)) { - if (tool->kind == wxITEM_RADIO) + if (tool->m_kind == wxITEM_RADIO) { int i, idx, count; idx = GetToolIndex(tool_id); @@ -1537,28 +1505,28 @@ void wxAuiToolBar::ToggleTool(int tool_id, bool state) if (idx >= 0 && idx < count) { - for (i = idx; i < count; ++i) + for (i = idx + 1; i < count; ++i) { - if (m_items[i].kind != wxITEM_RADIO) + if (m_items[i].m_kind != wxITEM_RADIO) break; - m_items[i].state &= ~wxAUI_BUTTON_STATE_CHECKED; + m_items[i].m_state &= ~wxAUI_BUTTON_STATE_CHECKED; } - for (i = idx; i > 0; i--) + for (i = idx - 1; i >= 0; i--) { - if (m_items[i].kind != wxITEM_RADIO) + if (m_items[i].m_kind != wxITEM_RADIO) break; - m_items[i].state &= ~wxAUI_BUTTON_STATE_CHECKED; + m_items[i].m_state &= ~wxAUI_BUTTON_STATE_CHECKED; } } - tool->state |= wxAUI_BUTTON_STATE_CHECKED; + tool->m_state |= wxAUI_BUTTON_STATE_CHECKED; } - else if (tool->kind == wxITEM_CHECK) + else if (tool->m_kind == wxITEM_CHECK) { if (state == true) - tool->state |= wxAUI_BUTTON_STATE_CHECKED; + tool->m_state |= wxAUI_BUTTON_STATE_CHECKED; else - tool->state &= ~wxAUI_BUTTON_STATE_CHECKED; + tool->m_state &= ~wxAUI_BUTTON_STATE_CHECKED; } } } @@ -1569,10 +1537,10 @@ bool wxAuiToolBar::GetToolToggled(int tool_id) const if (tool) { - if ( (tool->kind != wxITEM_CHECK) && (tool->kind != wxITEM_RADIO) ) + if ( (tool->m_kind != wxITEM_CHECK) && (tool->m_kind != wxITEM_RADIO) ) return false; - return (tool->state & wxAUI_BUTTON_STATE_CHECKED) ? true : false; + return (tool->m_state & wxAUI_BUTTON_STATE_CHECKED) ? true : false; } return false; @@ -1585,9 +1553,9 @@ void wxAuiToolBar::EnableTool(int tool_id, bool state) if (tool) { if (state == true) - tool->state &= ~wxAUI_BUTTON_STATE_DISABLED; + tool->m_state &= ~wxAUI_BUTTON_STATE_DISABLED; else - tool->state |= wxAUI_BUTTON_STATE_DISABLED; + tool->m_state |= wxAUI_BUTTON_STATE_DISABLED; } } @@ -1596,7 +1564,7 @@ bool wxAuiToolBar::GetToolEnabled(int tool_id) const wxAuiToolBarItem* tool = FindTool(tool_id); if (tool) - return (tool->state & wxAUI_BUTTON_STATE_DISABLED) ? false : true; + return (tool->m_state & wxAUI_BUTTON_STATE_DISABLED) ? false : true; return false; } @@ -1608,7 +1576,7 @@ wxString wxAuiToolBar::GetToolLabel(int tool_id) const if (!tool) return wxEmptyString; - return tool->label; + return tool->m_label; } void wxAuiToolBar::SetToolLabel(int tool_id, const wxString& label) @@ -1616,7 +1584,7 @@ void wxAuiToolBar::SetToolLabel(int tool_id, const wxString& label) wxAuiToolBarItem* tool = FindTool(tool_id); if (tool) { - tool->label = label; + tool->m_label = label; } } @@ -1627,7 +1595,7 @@ wxBitmap wxAuiToolBar::GetToolBitmap(int tool_id) const if (!tool) return wxNullBitmap; - return tool->bitmap; + return tool->m_bitmap; } void wxAuiToolBar::SetToolBitmap(int tool_id, const wxBitmap& bitmap) @@ -1635,7 +1603,7 @@ void wxAuiToolBar::SetToolBitmap(int tool_id, const wxBitmap& bitmap) wxAuiToolBarItem* tool = FindTool(tool_id); if (tool) { - tool->bitmap = bitmap; + tool->m_bitmap = bitmap; } } @@ -1646,7 +1614,7 @@ wxString wxAuiToolBar::GetToolShortHelp(int tool_id) const if (!tool) return wxEmptyString; - return tool->short_help; + return tool->m_shortHelp; } void wxAuiToolBar::SetToolShortHelp(int tool_id, const wxString& help_string) @@ -1654,7 +1622,7 @@ void wxAuiToolBar::SetToolShortHelp(int tool_id, const wxString& help_string) wxAuiToolBarItem* tool = FindTool(tool_id); if (tool) { - tool->short_help = help_string; + tool->m_shortHelp = help_string; } } @@ -1665,7 +1633,7 @@ wxString wxAuiToolBar::GetToolLongHelp(int tool_id) const if (!tool) return wxEmptyString; - return tool->long_help; + return tool->m_longHelp; } void wxAuiToolBar::SetToolLongHelp(int tool_id, const wxString& help_string) @@ -1673,15 +1641,15 @@ void wxAuiToolBar::SetToolLongHelp(int tool_id, const wxString& help_string) wxAuiToolBarItem* tool = FindTool(tool_id); if (tool) { - tool->long_help = help_string; + tool->m_longHelp = help_string; } } void wxAuiToolBar::SetCustomOverflowItems(const wxAuiToolBarItemArray& prepend, const wxAuiToolBarItemArray& append) { - m_custom_overflow_prepend = prepend; - m_custom_overflow_append = append; + m_customOverflowPrepend = prepend; + m_customOverflowAppend = append; } // get size of hint rectangle for a particular dock location @@ -1696,8 +1664,9 @@ wxSize wxAuiToolBar::GetHintSize(int dock_direction) const case wxAUI_DOCK_LEFT: return m_vertHintSize; default: - wxCHECK_MSG(false, wxDefaultSize, "invalid dock location value"); + wxFAIL_MSG("invalid dock location value"); } + return wxDefaultSize; } bool wxAuiToolBar::IsPaneValid(const wxAuiPaneInfo& pane) const @@ -1760,7 +1729,7 @@ int wxAuiToolBar::GetToolIndex(int tool_id) const for (i = 0; i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.toolid == tool_id) + if (item.m_toolId == tool_id) return i; } @@ -1772,19 +1741,19 @@ bool wxAuiToolBar::GetToolFitsByIndex(int tool_idx) const if (tool_idx < 0 || tool_idx >= (int)m_items.GetCount()) return false; - if (!m_items[tool_idx].sizer_item) + if (!m_items[tool_idx].m_sizerItem) return false; int cli_w, cli_h; GetClientSize(&cli_w, &cli_h); - wxRect rect = m_items[tool_idx].sizer_item->GetRect(); + wxRect rect = m_items[tool_idx].m_sizerItem->GetRect(); if (m_orientation == wxVERTICAL) { // take the dropdown size into account - if (m_overflow_visible) - cli_h -= m_overflow_sizer_item->GetSize().y; + if (m_overflowVisible) + cli_h -= m_overflowSizerItem->GetSize().y; if (rect.y+rect.height < cli_h) return true; @@ -1792,8 +1761,8 @@ bool wxAuiToolBar::GetToolFitsByIndex(int tool_idx) const else { // take the dropdown size into account - if (m_overflow_visible) - cli_w -= m_overflow_sizer_item->GetSize().x; + if (m_overflowVisible) + cli_w -= m_overflowSizerItem->GetSize().x; if (rect.x+rect.width < cli_w) return true; @@ -1811,9 +1780,9 @@ bool wxAuiToolBar::GetToolFits(int tool_id) const wxRect wxAuiToolBar::GetToolRect(int tool_id) const { wxAuiToolBarItem* tool = FindTool(tool_id); - if (tool && tool->sizer_item) + if (tool && tool->m_sizerItem) { - return tool->sizer_item->GetRect(); + return tool->m_sizerItem->GetRect(); } return wxRect(); @@ -1875,47 +1844,47 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) wxBoxSizer* sizer = new wxBoxSizer(horizontal ? wxHORIZONTAL : wxVERTICAL); // add gripper area - int separator_size = m_art->GetElementSize(wxAUI_TBART_SEPARATOR_SIZE); - int gripper_size = m_art->GetElementSize(wxAUI_TBART_GRIPPER_SIZE); - if (gripper_size > 0 && m_gripper_visible) + int separatorSize = m_art->GetElementSize(wxAUI_TBART_SEPARATOR_SIZE); + int gripperSize = m_art->GetElementSize(wxAUI_TBART_GRIPPER_SIZE); + if (gripperSize > 0 && m_gripperVisible) { if (horizontal) - m_gripper_sizer_item = sizer->Add(gripper_size, 1, 0, wxEXPAND); + m_gripperSizerItem = sizer->Add(gripperSize, 1, 0, wxEXPAND); else - m_gripper_sizer_item = sizer->Add(1, gripper_size, 0, wxEXPAND); + m_gripperSizerItem = sizer->Add(1, gripperSize, 0, wxEXPAND); } else { - m_gripper_sizer_item = NULL; + m_gripperSizerItem = NULL; } // add "left" padding - if (m_left_padding > 0) + if (m_leftPadding > 0) { if (horizontal) - sizer->Add(m_left_padding, 1); + sizer->Add(m_leftPadding, 1); else - sizer->Add(1, m_left_padding); + sizer->Add(1, m_leftPadding); } size_t i, count; for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - wxSizerItem* sizer_item = NULL; + wxSizerItem* m_sizerItem = NULL; - switch (item.kind) + switch (item.m_kind) { case wxITEM_LABEL: { wxSize size = m_art->GetLabelSize(dc, this, item); - sizer_item = sizer->Add(size.x + (m_tool_border_padding*2), - size.y + (m_tool_border_padding*2), - item.proportion, - item.alignment); + m_sizerItem = sizer->Add(size.x + (m_toolBorderPadding*2), + size.y + (m_toolBorderPadding*2), + item.m_proportion, + item.m_alignment); if (i+1 < count) { - sizer->AddSpacer(m_tool_packing); + sizer->AddSpacer(m_toolPacking); } break; @@ -1926,14 +1895,14 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) case wxITEM_RADIO: { wxSize size = m_art->GetToolSize(dc, this, item); - sizer_item = sizer->Add(size.x + (m_tool_border_padding*2), - size.y + (m_tool_border_padding*2), + m_sizerItem = sizer->Add(size.x + (m_toolBorderPadding*2), + size.y + (m_toolBorderPadding*2), 0, - item.alignment); + item.m_alignment); // add tool packing if (i+1 < count) { - sizer->AddSpacer(m_tool_packing); + sizer->AddSpacer(m_toolPacking); } break; @@ -1942,37 +1911,37 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) case wxITEM_SEPARATOR: { if (horizontal) - sizer_item = sizer->Add(separator_size, 1, 0, wxEXPAND); + m_sizerItem = sizer->Add(separatorSize, 1, 0, wxEXPAND); else - sizer_item = sizer->Add(1, separator_size, 0, wxEXPAND); + m_sizerItem = sizer->Add(1, separatorSize, 0, wxEXPAND); // add tool packing if (i+1 < count) { - sizer->AddSpacer(m_tool_packing); + sizer->AddSpacer(m_toolPacking); } break; } case wxITEM_SPACER: - if (item.proportion > 0) - sizer_item = sizer->AddStretchSpacer(item.proportion); + if (item.m_proportion > 0) + m_sizerItem = sizer->AddStretchSpacer(item.m_proportion); else - sizer_item = sizer->Add(item.spacer_pixels, 1); + m_sizerItem = sizer->Add(item.m_spacerPixels, 1); break; case wxITEM_CONTROL: { - //sizer_item = sizer->Add(item.window, item.proportion, wxEXPAND); - wxSizerItem* ctrl_sizer_item; + //m_sizerItem = sizer->Add(item.m_window, item.m_proportion, wxEXPAND); + wxSizerItem* ctrl_m_sizerItem; wxBoxSizer* vert_sizer = new wxBoxSizer(wxVERTICAL); vert_sizer->AddStretchSpacer(1); - ctrl_sizer_item = vert_sizer->Add(item.window, 0, wxEXPAND); + ctrl_m_sizerItem = vert_sizer->Add(item.m_window, 0, wxEXPAND); vert_sizer->AddStretchSpacer(1); if ( (m_style & wxAUI_TB_TEXT) && - m_tool_text_orientation == wxAUI_TBTOOL_TEXT_BOTTOM && + m_toolTextOrientation == wxAUI_TBTOOL_TEXT_BOTTOM && !item.GetLabel().empty() ) { wxSize s = GetLabelSize(item.GetLabel()); @@ -1980,60 +1949,60 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) } - sizer_item = sizer->Add(vert_sizer, item.proportion, wxEXPAND); + m_sizerItem = sizer->Add(vert_sizer, item.m_proportion, wxEXPAND); - wxSize min_size = item.min_size; + wxSize min_size = item.m_minSize; // proportional items will disappear from the toolbar if // their min width is not set to something really small - if (item.proportion != 0) + if (item.m_proportion != 0) { min_size.x = 1; } if (min_size.IsFullySpecified()) { - sizer_item->SetMinSize(min_size); - ctrl_sizer_item->SetMinSize(min_size); + m_sizerItem->SetMinSize(min_size); + ctrl_m_sizerItem->SetMinSize(min_size); } // add tool packing if (i+1 < count) { - sizer->AddSpacer(m_tool_packing); + sizer->AddSpacer(m_toolPacking); } } } - item.sizer_item = sizer_item; + item.m_sizerItem = m_sizerItem; } // add "right" padding - if (m_right_padding > 0) + if (m_rightPadding > 0) { if (horizontal) - sizer->Add(m_right_padding, 1); + sizer->Add(m_rightPadding, 1); else - sizer->Add(1, m_right_padding); + sizer->Add(1, m_rightPadding); } // add drop down area - m_overflow_sizer_item = NULL; + m_overflowSizerItem = NULL; if (m_style & wxAUI_TB_OVERFLOW) { int overflow_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE); - if (overflow_size > 0 && m_overflow_visible) + if (overflow_size > 0 && m_overflowVisible) { if (horizontal) - m_overflow_sizer_item = sizer->Add(overflow_size, 1, 0, wxEXPAND); + m_overflowSizerItem = sizer->Add(overflow_size, 1, 0, wxEXPAND); else - m_overflow_sizer_item = sizer->Add(1, overflow_size, 0, wxEXPAND); + m_overflowSizerItem = sizer->Add(1, overflow_size, 0, wxEXPAND); } else { - m_overflow_sizer_item = NULL; + m_overflowSizerItem = NULL; } } @@ -2042,24 +2011,24 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) wxBoxSizer* outside_sizer = new wxBoxSizer(horizontal ? wxVERTICAL : wxHORIZONTAL); // add "top" padding - if (m_top_padding > 0) + if (m_topPadding > 0) { if (horizontal) - outside_sizer->Add(1, m_top_padding); + outside_sizer->Add(1, m_topPadding); else - outside_sizer->Add(m_top_padding, 1); + outside_sizer->Add(m_topPadding, 1); } // add the sizer that contains all of the toolbar elements outside_sizer->Add(sizer, 1, wxEXPAND); // add "bottom" padding - if (m_bottom_padding > 0) + if (m_bottomPadding > 0) { if (horizontal) - outside_sizer->Add(1, m_bottom_padding); + outside_sizer->Add(1, m_bottomPadding); else - outside_sizer->Add(m_bottom_padding, 1); + outside_sizer->Add(m_bottomPadding, 1); } delete m_sizer; // remove old sizer @@ -2069,18 +2038,18 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.sizer_item && item.proportion > 0 && item.min_size.IsFullySpecified()) - item.sizer_item->SetMinSize(0,0); + if (item.m_sizerItem && item.m_proportion > 0 && item.m_minSize.IsFullySpecified()) + item.m_sizerItem->SetMinSize(0,0); } - m_absolute_min_size = m_sizer->GetMinSize(); + m_absoluteMinSize = m_sizer->GetMinSize(); // reset the min sizes to what they were for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.sizer_item && item.proportion > 0 && item.min_size.IsFullySpecified()) - item.sizer_item->SetMinSize(item.min_size); + if (item.m_sizerItem && item.m_proportion > 0 && item.m_minSize.IsFullySpecified()) + item.m_sizerItem->SetMinSize(item.m_minSize); } // set control size @@ -2090,21 +2059,21 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) if ((m_style & wxAUI_TB_NO_AUTORESIZE) == 0) { - wxSize cur_size = GetClientSize(); + wxSize curSize = GetClientSize(); wxSize new_size = GetMinSize(); - if (new_size != cur_size) + if (new_size != curSize) { SetClientSize(new_size); } else { - m_sizer->SetDimension(0, 0, cur_size.x, cur_size.y); + m_sizer->SetDimension(0, 0, curSize.x, curSize.y); } } else { - wxSize cur_size = GetClientSize(); - m_sizer->SetDimension(0, 0, cur_size.x, cur_size.y); + wxSize curSize = GetClientSize(); + m_sizer->SetDimension(0, 0, curSize.x, curSize.y); } return true; @@ -2112,13 +2081,13 @@ bool wxAuiToolBar::RealizeHelper(wxClientDC& dc, bool horizontal) int wxAuiToolBar::GetOverflowState() const { - return m_overflow_state; + return m_overflowState; } wxRect wxAuiToolBar::GetOverflowRect() const { wxRect cli_rect(wxPoint(0,0), GetClientSize()); - wxRect overflow_rect = m_overflow_sizer_item->GetRect(); + wxRect overflow_rect = m_overflowSizerItem->GetRect(); int overflow_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE); if (m_orientation == wxVERTICAL) @@ -2144,17 +2113,17 @@ wxSize wxAuiToolBar::GetLabelSize(const wxString& label) wxClientDC dc(this); int tx, ty; - int text_width = 0, text_height = 0; + int textWidth = 0, textHeight = 0; dc.SetFont(m_font); // get the text height - dc.GetTextExtent(wxT("ABCDHgj"), &tx, &text_height); + dc.GetTextExtent(wxT("ABCDHgj"), &tx, &textHeight); // get the text width - dc.GetTextExtent(label, &text_width, &ty); + dc.GetTextExtent(label, &textWidth, &ty); - return wxSize(text_width, text_height); + return wxSize(textWidth, textHeight); } @@ -2169,10 +2138,10 @@ void wxAuiToolBar::DoIdleUpdate() { wxAuiToolBarItem& item = m_items.Item(i); - if (item.toolid == -1) + if (item.m_toolId == -1) continue; - wxUpdateUIEvent evt(item.toolid); + wxUpdateUIEvent evt(item.m_toolId); evt.SetEventObject(this); if (handler->ProcessEvent(evt)) @@ -2180,24 +2149,24 @@ void wxAuiToolBar::DoIdleUpdate() if (evt.GetSetEnabled()) { bool is_enabled; - if (item.window) - is_enabled = item.window->IsEnabled(); + if (item.m_window) + is_enabled = item.m_window->IsThisEnabled(); else - is_enabled = (item.state & wxAUI_BUTTON_STATE_DISABLED) ? false : true; + is_enabled = (item.m_state & wxAUI_BUTTON_STATE_DISABLED) ? false : true; bool new_enabled = evt.GetEnabled(); if (new_enabled != is_enabled) { - if (item.window) + if (item.m_window) { - item.window->Enable(new_enabled); + item.m_window->Enable(new_enabled); } else { if (new_enabled) - item.state &= ~wxAUI_BUTTON_STATE_DISABLED; + item.m_state &= ~wxAUI_BUTTON_STATE_DISABLED; else - item.state |= wxAUI_BUTTON_STATE_DISABLED; + item.m_state |= wxAUI_BUTTON_STATE_DISABLED; } need_refresh = true; } @@ -2206,18 +2175,18 @@ void wxAuiToolBar::DoIdleUpdate() if (evt.GetSetChecked()) { // make sure we aren't checking an item that can't be - if (item.kind != wxITEM_CHECK && item.kind != wxITEM_RADIO) + if (item.m_kind != wxITEM_CHECK && item.m_kind != wxITEM_RADIO) continue; - bool is_checked = (item.state & wxAUI_BUTTON_STATE_CHECKED) ? true : false; + bool is_checked = (item.m_state & wxAUI_BUTTON_STATE_CHECKED) ? true : false; bool new_checked = evt.GetChecked(); if (new_checked != is_checked) { if (new_checked) - item.state |= wxAUI_BUTTON_STATE_CHECKED; + item.m_state |= wxAUI_BUTTON_STATE_CHECKED; else - item.state &= ~wxAUI_BUTTON_STATE_CHECKED; + item.m_state &= ~wxAUI_BUTTON_STATE_CHECKED; need_refresh = true; } @@ -2239,18 +2208,18 @@ void wxAuiToolBar::OnSize(wxSizeEvent& WXUNUSED(evt)) int x, y; GetClientSize(&x, &y); - if (((x >= y) && m_absolute_min_size.x > x) || - ((y > x) && m_absolute_min_size.y > y)) + if (((x >= y) && m_absoluteMinSize.x > x) || + ((y > x) && m_absoluteMinSize.y > y)) { // hide all flexible items size_t i, count; for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.sizer_item && item.proportion > 0 && item.sizer_item->IsShown()) + if (item.m_sizerItem && item.m_proportion > 0 && item.m_sizerItem->IsShown()) { - item.sizer_item->Show(false); - item.sizer_item->SetProportion(0); + item.m_sizerItem->Show(false); + item.m_sizerItem->SetProportion(0); } } } @@ -2261,10 +2230,10 @@ void wxAuiToolBar::OnSize(wxSizeEvent& WXUNUSED(evt)) for (i = 0, count = m_items.GetCount(); i < count; ++i) { wxAuiToolBarItem& item = m_items.Item(i); - if (item.sizer_item && item.proportion > 0 && !item.sizer_item->IsShown()) + if (item.m_sizerItem && item.m_proportion > 0 && !item.m_sizerItem->IsShown()) { - item.sizer_item->Show(true); - item.sizer_item->SetProportion(item.proportion); + item.m_sizerItem->Show(true); + item.m_sizerItem->SetProportion(item.m_proportion); } } } @@ -2369,11 +2338,19 @@ void wxAuiToolBar::OnIdle(wxIdleEvent& evt) } } } - - DoIdleUpdate(); evt.Skip(); } +void wxAuiToolBar::UpdateWindowUI(long flags) +{ + if ( flags & wxUPDATE_UI_FROMIDLE ) + { + DoIdleUpdate(); + } + + wxControl::UpdateWindowUI(flags); +} + void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt)) { wxAutoBufferedPaintDC dc(this); @@ -2385,17 +2362,17 @@ void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt)) m_art->DrawBackground(dc, this, cli_rect); - int gripper_size = m_art->GetElementSize(wxAUI_TBART_GRIPPER_SIZE); + int gripperSize = m_art->GetElementSize(wxAUI_TBART_GRIPPER_SIZE); int dropdown_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE); // paint the gripper - if (gripper_size > 0 && m_gripper_sizer_item) + if (gripperSize > 0 && m_gripperSizerItem) { - wxRect gripper_rect = m_gripper_sizer_item->GetRect(); + wxRect gripper_rect = m_gripperSizerItem->GetRect(); if (horizontal) - gripper_rect.width = gripper_size; + gripper_rect.width = gripperSize; else - gripper_rect.height = gripper_size; + gripper_rect.height = gripperSize; m_art->DrawGripper(dc, this, gripper_rect); } @@ -2405,7 +2382,7 @@ void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt)) last_extent = cli_rect.width; else last_extent = cli_rect.height; - if (m_overflow_visible) + if (m_overflowVisible) last_extent -= dropdown_size; // paint each individual tool @@ -2414,10 +2391,10 @@ void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt)) { wxAuiToolBarItem& item = m_items.Item(i); - if (!item.sizer_item) + if (!item.m_sizerItem) continue; - wxRect item_rect = item.sizer_item->GetRect(); + wxRect item_rect = item.m_sizerItem->GetRect(); if ((horizontal && item_rect.x + item_rect.width >= last_extent) || @@ -2426,35 +2403,38 @@ void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt)) break; } - if (item.kind == wxITEM_SEPARATOR) + if (item.m_kind == wxITEM_SEPARATOR) { // draw a separator m_art->DrawSeparator(dc, this, item_rect); } - else if (item.kind == wxITEM_LABEL) + else if (item.m_kind == wxITEM_LABEL) { // draw a text label only m_art->DrawLabel(dc, this, item, item_rect); } - else if (item.kind == wxITEM_NORMAL) + else if (item.m_kind == wxITEM_NORMAL) { // draw a regular button or dropdown button - if (!item.dropdown) + if (!item.m_dropDown) m_art->DrawButton(dc, this, item, item_rect); else m_art->DrawDropDownButton(dc, this, item, item_rect); } - else if (item.kind == wxITEM_CHECK) + else if (item.m_kind == wxITEM_CHECK) + { + // draw either a regular or dropdown toggle button + if (!item.m_dropDown) + m_art->DrawButton(dc, this, item, item_rect); + else + m_art->DrawDropDownButton(dc, this, item, item_rect); + } + else if (item.m_kind == wxITEM_RADIO) { // draw a toggle button m_art->DrawButton(dc, this, item, item_rect); } - else if (item.kind == wxITEM_RADIO) - { - // draw a toggle button - m_art->DrawButton(dc, this, item, item_rect); - } - else if (item.kind == wxITEM_CONTROL) + else if (item.m_kind == wxITEM_CONTROL) { // draw the control's label m_art->DrawControlLabel(dc, this, item, item_rect); @@ -2465,10 +2445,10 @@ void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt)) } // paint the overflow button - if (dropdown_size > 0 && m_overflow_sizer_item) + if (dropdown_size > 0 && m_overflowSizerItem) { - wxRect dropdown_rect = GetOverflowRect(); - m_art->DrawOverflowButton(dc, this, dropdown_rect, m_overflow_state); + wxRect dropDownRect = GetOverflowRect(); + m_art->DrawOverflowButton(dc, this, dropDownRect, m_overflowState); } } @@ -2481,9 +2461,9 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt) { wxRect cli_rect(wxPoint(0,0), GetClientSize()); - if (m_gripper_sizer_item) + if (m_gripperSizerItem) { - wxRect gripper_rect = m_gripper_sizer_item->GetRect(); + wxRect gripper_rect = m_gripperSizerItem->GetRect(); if (gripper_rect.Contains(evt.GetX(), evt.GetY())) { // find aui manager @@ -2500,12 +2480,12 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt) } } - if (m_overflow_sizer_item) + if (m_overflowSizerItem) { wxRect overflow_rect = GetOverflowRect(); if (m_art && - m_overflow_visible && + m_overflowVisible && overflow_rect.Contains(evt.m_x, evt.m_y)) { wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, -1); @@ -2525,9 +2505,9 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt) // add custom overflow prepend items, if any - count = m_custom_overflow_prepend.GetCount(); + count = m_customOverflowPrepend.GetCount(); for (i = 0; i < count; ++i) - overflow_items.Add(m_custom_overflow_prepend[i]); + overflow_items.Add(m_customOverflowPrepend[i]); // only show items that don't fit in the dropdown count = m_items.GetCount(); @@ -2538,12 +2518,12 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt) } // add custom overflow append items, if any - count = m_custom_overflow_append.GetCount(); + count = m_customOverflowAppend.GetCount(); for (i = 0; i < count; ++i) - overflow_items.Add(m_custom_overflow_append[i]); + overflow_items.Add(m_customOverflowAppend[i]); int res = m_art->ShowDropDown(this, overflow_items); - m_overflow_state = 0; + m_overflowState = 0; Refresh(false); if (res != -1) { @@ -2558,28 +2538,28 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt) } m_dragging = false; - m_action_pos = wxPoint(evt.GetX(), evt.GetY()); - m_action_item = FindToolByPosition(evt.GetX(), evt.GetY()); + m_actionPos = wxPoint(evt.GetX(), evt.GetY()); + m_actionItem = FindToolByPosition(evt.GetX(), evt.GetY()); - if (m_action_item) + if (m_actionItem) { - if (m_action_item->state & wxAUI_BUTTON_STATE_DISABLED) + if (m_actionItem->m_state & wxAUI_BUTTON_STATE_DISABLED) { - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; return; } UnsetToolTip(); // fire the tool dropdown event - wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, m_action_item->toolid); + wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, m_actionItem->m_toolId); e.SetEventObject(this); - e.SetToolId(m_action_item->toolid); + e.SetToolId(m_actionItem->m_toolId); int mouse_x = evt.GetX(); - wxRect rect = m_action_item->sizer_item->GetRect(); - const bool dropDownHit = m_action_item->dropdown && + wxRect rect = m_actionItem->m_sizerItem->GetRect(); + const bool dropDownHit = m_actionItem->m_dropDown && mouse_x >= (rect.x+rect.width-BUTTON_DROPDOWN_WIDTH-1) && mouse_x < (rect.x+rect.width); e.SetDropDownClicked(dropDownHit); @@ -2589,12 +2569,12 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt) // we only set the 'pressed button' state if we hit the actual button // and not just the drop-down - SetPressedItem(dropDownHit ? 0 : m_action_item); + SetPressedItem(dropDownHit ? 0 : m_actionItem); if(dropDownHit) { - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; } if(!GetEventHandler()->ProcessEvent(e) || e.GetSkipped()) @@ -2611,10 +2591,10 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt) SetPressedItem(NULL); - wxAuiToolBarItem* hit_item = FindToolByPosition(evt.GetX(), evt.GetY()); - if (hit_item && !(hit_item->state & wxAUI_BUTTON_STATE_DISABLED)) + wxAuiToolBarItem* hitItem = FindToolByPosition(evt.GetX(), evt.GetY()); + if (hitItem && !(hitItem->m_state & wxAUI_BUTTON_STATE_DISABLED)) { - SetHoverItem(hit_item); + SetHoverItem(hitItem); } if (m_dragging) @@ -2629,21 +2609,18 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt) } else { - wxAuiToolBarItem* hit_item; - hit_item = FindToolByPosition(evt.GetX(), evt.GetY()); - - if (m_action_item && hit_item == m_action_item) + if (m_actionItem && hitItem == m_actionItem) { UnsetToolTip(); - wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, m_action_item->toolid); + wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, m_actionItem->m_toolId); e.SetEventObject(this); - if (hit_item->kind == wxITEM_CHECK || hit_item->kind == wxITEM_RADIO) + if (hitItem->m_kind == wxITEM_CHECK || hitItem->m_kind == wxITEM_RADIO) { - const bool toggle = !(m_action_item->state & wxAUI_BUTTON_STATE_CHECKED); + const bool toggle = !(m_actionItem->m_state & wxAUI_BUTTON_STATE_CHECKED); - ToggleTool(m_action_item->toolid, toggle); + ToggleTool(m_actionItem->m_toolId, toggle); // repaint immediately Refresh(false); @@ -2670,33 +2647,32 @@ void wxAuiToolBar::OnRightDown(wxMouseEvent& evt) { wxRect cli_rect(wxPoint(0,0), GetClientSize()); - if (m_gripper_sizer_item) + if (m_gripperSizerItem) { - wxRect gripper_rect = m_gripper_sizer_item->GetRect(); + wxRect gripper_rect = m_gripperSizerItem->GetRect(); if (gripper_rect.Contains(evt.GetX(), evt.GetY())) return; } - if (m_overflow_sizer_item) + if (m_overflowSizerItem && m_art) { int dropdown_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE); if (dropdown_size > 0 && evt.m_x > cli_rect.width - dropdown_size && evt.m_y >= 0 && - evt.m_y < cli_rect.height && - m_art) + evt.m_y < cli_rect.height) { return; } } - m_action_pos = wxPoint(evt.GetX(), evt.GetY()); - m_action_item = FindToolByPosition(evt.GetX(), evt.GetY()); + m_actionPos = wxPoint(evt.GetX(), evt.GetY()); + m_actionItem = FindToolByPosition(evt.GetX(), evt.GetY()); - if (m_action_item && m_action_item->state & wxAUI_BUTTON_STATE_DISABLED) + if (m_actionItem && m_actionItem->m_state & wxAUI_BUTTON_STATE_DISABLED) { - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; return; } @@ -2705,20 +2681,17 @@ void wxAuiToolBar::OnRightDown(wxMouseEvent& evt) void wxAuiToolBar::OnRightUp(wxMouseEvent& evt) { - wxAuiToolBarItem* hit_item; - hit_item = FindToolByPosition(evt.GetX(), evt.GetY()); + wxAuiToolBarItem* hitItem; + hitItem = FindToolByPosition(evt.GetX(), evt.GetY()); - if (m_action_item && hit_item == m_action_item) + if (m_actionItem && hitItem == m_actionItem) { - if (hit_item->kind == wxITEM_NORMAL) - { - wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, m_action_item->toolid); - e.SetEventObject(this); - e.SetToolId(m_action_item->toolid); - e.SetClickPoint(m_action_pos); - GetEventHandler()->ProcessEvent(e); - DoIdleUpdate(); - } + wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, m_actionItem->m_toolId); + e.SetEventObject(this); + e.SetToolId(m_actionItem->m_toolId); + e.SetClickPoint(m_actionPos); + GetEventHandler()->ProcessEvent(e); + DoIdleUpdate(); } else { @@ -2726,49 +2699,48 @@ void wxAuiToolBar::OnRightUp(wxMouseEvent& evt) wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, -1); e.SetEventObject(this); e.SetToolId(-1); - e.SetClickPoint(m_action_pos); + e.SetClickPoint(m_actionPos); GetEventHandler()->ProcessEvent(e); DoIdleUpdate(); } // reset member variables - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; } void wxAuiToolBar::OnMiddleDown(wxMouseEvent& evt) { wxRect cli_rect(wxPoint(0,0), GetClientSize()); - if (m_gripper_sizer_item) + if (m_gripperSizerItem) { - wxRect gripper_rect = m_gripper_sizer_item->GetRect(); + wxRect gripper_rect = m_gripperSizerItem->GetRect(); if (gripper_rect.Contains(evt.GetX(), evt.GetY())) return; } - if (m_overflow_sizer_item) + if (m_overflowSizerItem && m_art) { int dropdown_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE); if (dropdown_size > 0 && evt.m_x > cli_rect.width - dropdown_size && evt.m_y >= 0 && - evt.m_y < cli_rect.height && - m_art) + evt.m_y < cli_rect.height) { return; } } - m_action_pos = wxPoint(evt.GetX(), evt.GetY()); - m_action_item = FindToolByPosition(evt.GetX(), evt.GetY()); + m_actionPos = wxPoint(evt.GetX(), evt.GetY()); + m_actionItem = FindToolByPosition(evt.GetX(), evt.GetY()); - if (m_action_item) + if (m_actionItem) { - if (m_action_item->state & wxAUI_BUTTON_STATE_DISABLED) + if (m_actionItem->m_state & wxAUI_BUTTON_STATE_DISABLED) { - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; return; } } @@ -2778,25 +2750,25 @@ void wxAuiToolBar::OnMiddleDown(wxMouseEvent& evt) void wxAuiToolBar::OnMiddleUp(wxMouseEvent& evt) { - wxAuiToolBarItem* hit_item; - hit_item = FindToolByPosition(evt.GetX(), evt.GetY()); + wxAuiToolBarItem* hitItem; + hitItem = FindToolByPosition(evt.GetX(), evt.GetY()); - if (m_action_item && hit_item == m_action_item) + if (m_actionItem && hitItem == m_actionItem) { - if (hit_item->kind == wxITEM_NORMAL) + if (hitItem->m_kind == wxITEM_NORMAL) { - wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, m_action_item->toolid); + wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, m_actionItem->m_toolId); e.SetEventObject(this); - e.SetToolId(m_action_item->toolid); - e.SetClickPoint(m_action_pos); + e.SetToolId(m_actionItem->m_toolId); + e.SetClickPoint(m_actionPos); GetEventHandler()->ProcessEvent(e); DoIdleUpdate(); } } // reset member variables - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; } void wxAuiToolBar::OnMotion(wxMouseEvent& evt) @@ -2805,13 +2777,13 @@ void wxAuiToolBar::OnMotion(wxMouseEvent& evt) // start a drag event if (!m_dragging && button_pressed && - abs(evt.GetX() - m_action_pos.x) + abs(evt.GetY() - m_action_pos.y) > 5) + abs(evt.GetX() - m_actionPos.x) + abs(evt.GetY() - m_actionPos.y) > 5) { // TODO: sending this event only makes sense if there is an 'END_DRAG' // event sent sometime in the future (see OnLeftUp()) wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, GetId()); e.SetEventObject(this); - e.SetToolId(m_action_item->toolid); + e.SetToolId(m_actionItem->m_toolId); m_dragging = GetEventHandler()->ProcessEvent(e) && !e.GetSkipped(); DoIdleUpdate(); @@ -2820,38 +2792,38 @@ void wxAuiToolBar::OnMotion(wxMouseEvent& evt) if(m_dragging) return; - wxAuiToolBarItem* hit_item = FindToolByPosition(evt.GetX(), evt.GetY()); + wxAuiToolBarItem* hitItem = FindToolByPosition(evt.GetX(), evt.GetY()); if(button_pressed) { // if we have a button pressed we want it to be shown in 'depressed' // state unless we move the mouse outside the button, then we want it // to show as just 'highlighted' - if (hit_item == m_action_item) - SetPressedItem(m_action_item); + if (hitItem == m_actionItem) + SetPressedItem(m_actionItem); else { SetPressedItem(NULL); - SetHoverItem(m_action_item); + SetHoverItem(m_actionItem); } } else { - if (hit_item && (hit_item->state & wxAUI_BUTTON_STATE_DISABLED)) + if (hitItem && (hitItem->m_state & wxAUI_BUTTON_STATE_DISABLED)) SetHoverItem(NULL); else - SetHoverItem(hit_item); + SetHoverItem(hitItem); // tooltips handling - wxAuiToolBarItem* packing_hit_item; - packing_hit_item = FindToolByPositionWithPacking(evt.GetX(), evt.GetY()); - if (packing_hit_item) + wxAuiToolBarItem* packingHitItem; + packingHitItem = FindToolByPositionWithPacking(evt.GetX(), evt.GetY()); + if (packingHitItem) { - if (packing_hit_item != m_tip_item) + if (packingHitItem != m_tipItem) { - m_tip_item = packing_hit_item; + m_tipItem = packingHitItem; - if ( !packing_hit_item->short_help.empty() ) - SetToolTip(packing_hit_item->short_help); + if ( !packingHitItem->m_shortHelp.empty() ) + SetToolTip(packingHitItem->m_shortHelp); else UnsetToolTip(); } @@ -2859,7 +2831,7 @@ void wxAuiToolBar::OnMotion(wxMouseEvent& evt) else { UnsetToolTip(); - m_tip_item = NULL; + m_tipItem = NULL; } // figure out the dropdown button state (are we hovering or pressing it?) @@ -2873,13 +2845,13 @@ void wxAuiToolBar::DoResetMouseState() SetHoverItem(NULL); SetPressedItem(NULL); - m_tip_item = NULL; + m_tipItem = NULL; // we have to reset those here, because the mouse-up handlers which do // it usually won't be called if we let go of a mouse button while we // are outside of the window - m_action_pos = wxPoint(-1,-1); - m_action_item = NULL; + m_actionPos = wxPoint(-1,-1); + m_actionItem = NULL; } void wxAuiToolBar::OnLeaveWindow(wxMouseEvent& evt) @@ -2904,9 +2876,9 @@ void wxAuiToolBar::OnSetCursor(wxSetCursorEvent& evt) { wxCursor cursor = wxNullCursor; - if (m_gripper_sizer_item) + if (m_gripperSizerItem) { - wxRect gripper_rect = m_gripper_sizer_item->GetRect(); + wxRect gripper_rect = m_gripperSizerItem->GetRect(); if (gripper_rect.Contains(evt.GetX(), evt.GetY())) { cursor = wxCursor(wxCURSOR_SIZING); diff --git a/Externals/wxWidgets3/src/aui/auibook.cpp b/Externals/wxWidgets3/src/aui/auibook.cpp index 5e6ef680ed..f299944023 100644 --- a/Externals/wxWidgets3/src/aui/auibook.cpp +++ b/Externals/wxWidgets3/src/aui/auibook.cpp @@ -48,6 +48,7 @@ wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, wxAuiNotebookEvent); wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_BUTTON, wxAuiNotebookEvent); wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, wxAuiNotebookEvent); wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, wxAuiNotebookEvent); +wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_CANCEL_DRAG, wxAuiNotebookEvent); wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, wxAuiNotebookEvent); wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, wxAuiNotebookEvent); wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, wxAuiNotebookEvent); @@ -59,7 +60,7 @@ wxDEFINE_EVENT(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, wxAuiNotebookEvent); IMPLEMENT_CLASS(wxAuiNotebook, wxControl) IMPLEMENT_CLASS(wxAuiTabCtrl, wxControl) -IMPLEMENT_DYNAMIC_CLASS(wxAuiNotebookEvent, wxEvent) +IMPLEMENT_DYNAMIC_CLASS(wxAuiNotebookEvent, wxBookCtrlEvent) @@ -118,14 +119,14 @@ class wxAuiCommandCapture : public wxEvtHandler { public: - wxAuiCommandCapture() { m_last_id = 0; } - int GetCommandId() const { return m_last_id; } + wxAuiCommandCapture() { m_lastId = 0; } + int GetCommandId() const { return m_lastId; } bool ProcessEvent(wxEvent& evt) { if (evt.GetEventType() == wxEVT_COMMAND_MENU_SELECTED) { - m_last_id = evt.GetId(); + m_lastId = evt.GetId(); return true; } @@ -136,7 +137,7 @@ public: } private: - int m_last_id; + int m_lastId; }; @@ -183,47 +184,48 @@ static const unsigned char list_bits[] = { wxAuiDefaultTabArt::wxAuiDefaultTabArt() { - m_normal_font = *wxNORMAL_FONT; - m_selected_font = *wxNORMAL_FONT; - m_selected_font.SetWeight(wxBOLD); - m_measuring_font = m_selected_font; + m_normalFont = *wxNORMAL_FONT; + m_selectedFont = *wxNORMAL_FONT; + m_selectedFont.SetWeight(wxBOLD); + m_measuringFont = m_selectedFont; - m_fixed_tab_width = 100; - m_tab_ctrl_height = 0; + m_fixedTabWidth = 100; + m_tabCtrlHeight = 0; #if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON - wxColor base_colour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground)); + wxColor baseColour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground)); #else - wxColor base_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); + wxColor baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); #endif - // the base_colour is too pale to use as our base colour, + // the baseColour is too pale to use as our base colour, // so darken it a bit -- - if ((255-base_colour.Red()) + - (255-base_colour.Green()) + - (255-base_colour.Blue()) < 60) + if ((255-baseColour.Red()) + + (255-baseColour.Green()) + + (255-baseColour.Blue()) < 60) { - base_colour = base_colour.ChangeLightness(92); + baseColour = baseColour.ChangeLightness(92); } - m_base_colour = base_colour; - wxColor border_colour = base_colour.ChangeLightness(75); + m_activeColour = baseColour; + m_baseColour = baseColour; + wxColor borderColour = baseColour.ChangeLightness(75); - m_border_pen = wxPen(border_colour); - m_base_colour_pen = wxPen(m_base_colour); - m_base_colour_brush = wxBrush(m_base_colour); + m_borderPen = wxPen(borderColour); + m_baseColourPen = wxPen(m_baseColour); + m_baseColourBrush = wxBrush(m_baseColour); - m_active_close_bmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK); - m_disabled_close_bmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128)); + m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK); + m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128)); - m_active_left_bmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK); - m_disabled_left_bmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128)); + m_activeLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK); + m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128)); - m_active_right_bmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK); - m_disabled_right_bmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128)); + m_activeRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK); + m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128)); - m_active_windowlist_bmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK); - m_disabled_windowlist_bmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128)); + m_activeWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK); + m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128)); m_flags = 0; } @@ -245,31 +247,31 @@ void wxAuiDefaultTabArt::SetFlags(unsigned int flags) void wxAuiDefaultTabArt::SetSizingInfo(const wxSize& tab_ctrl_size, size_t tab_count) { - m_fixed_tab_width = 100; + m_fixedTabWidth = 100; int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4; if (m_flags & wxAUI_NB_CLOSE_BUTTON) - tot_width -= m_active_close_bmp.GetWidth(); + tot_width -= m_activeCloseBmp.GetWidth(); if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON) - tot_width -= m_active_windowlist_bmp.GetWidth(); + tot_width -= m_activeWindowListBmp.GetWidth(); if (tab_count > 0) { - m_fixed_tab_width = tot_width/(int)tab_count; + m_fixedTabWidth = tot_width/(int)tab_count; } - if (m_fixed_tab_width < 100) - m_fixed_tab_width = 100; + if (m_fixedTabWidth < 100) + m_fixedTabWidth = 100; - if (m_fixed_tab_width > tot_width/2) - m_fixed_tab_width = tot_width/2; + if (m_fixedTabWidth > tot_width/2) + m_fixedTabWidth = tot_width/2; - if (m_fixed_tab_width > 220) - m_fixed_tab_width = 220; + if (m_fixedTabWidth > 220) + m_fixedTabWidth = 220; - m_tab_ctrl_height = tab_ctrl_size.y; + m_tabCtrlHeight = tab_ctrl_size.y; } @@ -279,8 +281,8 @@ void wxAuiDefaultTabArt::DrawBackground(wxDC& dc, { // draw background - wxColor top_color = m_base_colour.ChangeLightness(90); - wxColor bottom_color = m_base_colour.ChangeLightness(170); + wxColor top_color = m_baseColour.ChangeLightness(90); + wxColor bottom_color = m_baseColour.ChangeLightness(170); wxRect r; if (m_flags &wxAUI_NB_BOTTOM) @@ -295,7 +297,7 @@ void wxAuiDefaultTabArt::DrawBackground(wxDC& dc, // draw base lines - dc.SetPen(m_border_pen); + dc.SetPen(m_borderPen); int y = rect.GetHeight(); int w = rect.GetWidth(); @@ -308,7 +310,7 @@ void wxAuiDefaultTabArt::DrawBackground(wxDC& dc, // TODO: else if (m_flags &wxAUI_NB_RIGHT) {} else //for wxAUI_NB_TOP { - dc.SetBrush(m_base_colour_brush); + dc.SetBrush(m_baseColourBrush); dc.DrawRectangle(-1, y-4, w+2, 4); } } @@ -341,10 +343,10 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, if (caption.empty()) caption = wxT("Xj"); - dc.SetFont(m_selected_font); + dc.SetFont(m_selectedFont); dc.GetTextExtent(caption, &selected_textx, &selected_texty); - dc.SetFont(m_normal_font); + dc.SetFont(m_normalFont); dc.GetTextExtent(caption, &normal_textx, &normal_texty); // figure out the size of the tab @@ -356,7 +358,7 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, close_button_state, x_extent); - wxCoord tab_height = m_tab_ctrl_height - 3; + wxCoord tab_height = m_tabCtrlHeight - 3; wxCoord tab_width = tab_size.x; wxCoord tab_x = in_rect.x; wxCoord tab_y = in_rect.y + in_rect.height - tab_height; @@ -369,12 +371,12 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, if (page.active) { - dc.SetFont(m_selected_font); + dc.SetFont(m_selectedFont); texty = selected_texty; } else { - dc.SetFont(m_normal_font); + dc.SetFont(m_normalFont); texty = normal_texty; } @@ -438,8 +440,8 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, // draw base background color wxRect r(tab_x, tab_y, tab_width, tab_height); - dc.SetPen(m_base_colour_pen); - dc.SetBrush(m_base_colour_brush); + dc.SetPen(wxPen(m_activeColour)); + dc.SetBrush(wxBrush(m_activeColour)); dc.DrawRectangle(r.x+1, r.y+1, r.width-1, r.height-4); // this white helps fill out the gradient at the top of the tab @@ -448,20 +450,20 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, dc.DrawRectangle(r.x+2, r.y+1, r.width-3, r.height-4); // these two points help the rounded corners appear more antialiased - dc.SetPen(m_base_colour_pen); + dc.SetPen(wxPen(m_activeColour)); dc.DrawPoint(r.x+2, r.y+1); dc.DrawPoint(r.x+r.width-2, r.y+1); // set rectangle down a bit for gradient drawing r.SetHeight(r.GetHeight()/2); r.x += 2; - r.width -= 2; + r.width -= 3; r.y += r.height; r.y -= 2; // draw gradient background wxColor top_color = *wxWHITE; - wxColor bottom_color = m_base_colour; + wxColor bottom_color = m_activeColour; dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH); } else @@ -480,7 +482,7 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, r.height--; // -- draw top gradient fill for glossy look - wxColor top_color = m_base_colour; + wxColor top_color = m_baseColour; wxColor bottom_color = top_color.ChangeLightness(160); dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH); @@ -488,13 +490,13 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, r.y--; // -- draw bottom fill for glossy look - top_color = m_base_colour; - bottom_color = m_base_colour; + top_color = m_baseColour; + bottom_color = m_baseColour; dc.GradientFillLinear(r, top_color, bottom_color, wxSOUTH); } // draw tab outline - dc.SetPen(m_border_pen); + dc.SetPen(m_borderPen); dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawPolygon(WXSIZEOF(border_points), border_points); @@ -503,11 +505,11 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, if (page.active) { if (m_flags &wxAUI_NB_BOTTOM) - dc.SetPen(wxPen(m_base_colour.ChangeLightness(170))); + dc.SetPen(wxPen(m_baseColour.ChangeLightness(170))); // TODO: else if (m_flags &wxAUI_NB_LEFT) {} // TODO: else if (m_flags &wxAUI_NB_RIGHT) {} else //for wxAUI_NB_TOP - dc.SetPen(m_base_colour_pen); + dc.SetPen(m_baseColourPen); dc.DrawLine(border_points[0].x+1, border_points[0].y, border_points[5].x, @@ -519,7 +521,7 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, int close_button_width = 0; if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) { - close_button_width = m_active_close_bmp.GetWidth(); + close_button_width = m_activeCloseBmp.GetWidth(); } int bitmap_offset = 0; @@ -580,12 +582,12 @@ void wxAuiDefaultTabArt::DrawTab(wxDC& dc, // draw close button if necessary if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) { - wxBitmap bmp = m_disabled_close_bmp; + wxBitmap bmp = m_disabledCloseBmp; if (close_button_state == wxAUI_BUTTON_STATE_HOVER || close_button_state == wxAUI_BUTTON_STATE_PRESSED) { - bmp = m_active_close_bmp; + bmp = m_activeCloseBmp; } int offsetY = tab_y-1; @@ -623,7 +625,7 @@ wxSize wxAuiDefaultTabArt::GetTabSize(wxDC& dc, { wxCoord measured_textx, measured_texty, tmp; - dc.SetFont(m_measuring_font); + dc.SetFont(m_measuringFont); dc.GetTextExtent(caption, &measured_textx, &measured_texty); dc.GetTextExtent(wxT("ABCDEFXj"), &tmp, &measured_texty); @@ -634,7 +636,7 @@ wxSize wxAuiDefaultTabArt::GetTabSize(wxDC& dc, // if the close button is showing, add space for it if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) - tab_width += m_active_close_bmp.GetWidth() + 3; + tab_width += m_activeCloseBmp.GetWidth() + 3; // if there's a bitmap, add space for it if (bitmap.IsOk()) @@ -650,7 +652,7 @@ wxSize wxAuiDefaultTabArt::GetTabSize(wxDC& dc, if (m_flags & wxAUI_NB_TAB_FIXED_WIDTH) { - tab_width = m_fixed_tab_width; + tab_width = m_fixedTabWidth; } *x_extent = tab_width; @@ -674,27 +676,27 @@ void wxAuiDefaultTabArt::DrawButton(wxDC& dc, { case wxAUI_BUTTON_CLOSE: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_close_bmp; + bmp = m_disabledCloseBmp; else - bmp = m_active_close_bmp; + bmp = m_activeCloseBmp; break; case wxAUI_BUTTON_LEFT: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_left_bmp; + bmp = m_disabledLeftBmp; else - bmp = m_active_left_bmp; + bmp = m_activeLeftBmp; break; case wxAUI_BUTTON_RIGHT: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_right_bmp; + bmp = m_disabledRightBmp; else - bmp = m_active_right_bmp; + bmp = m_activeRightBmp; break; case wxAUI_BUTTON_WINDOWLIST: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_windowlist_bmp; + bmp = m_disabledWindowListBmp; else - bmp = m_active_windowlist_bmp; + bmp = m_activeWindowListBmp; break; } @@ -769,19 +771,19 @@ int wxAuiDefaultTabArt::ShowDropDown(wxWindow* wnd, int wxAuiDefaultTabArt::GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size) + const wxSize& requiredBmp_size) { wxClientDC dc(wnd); - dc.SetFont(m_measuring_font); + dc.SetFont(m_measuringFont); // sometimes a standard bitmap size needs to be enforced, especially // if some tabs have bitmaps and others don't. This is important because // it prevents the tab control from resizing when tabs are added. - wxBitmap measure_bmp; - if (required_bmp_size.IsFullySpecified()) + wxBitmap measureBmp; + if (requiredBmp_size.IsFullySpecified()) { - measure_bmp.Create(required_bmp_size.x, - required_bmp_size.y); + measureBmp.Create(requiredBmp_size.x, + requiredBmp_size.y); } @@ -792,8 +794,8 @@ int wxAuiDefaultTabArt::GetBestTabCtrlSize(wxWindow* wnd, wxAuiNotebookPage& page = pages.Item(i); wxBitmap bmp; - if (measure_bmp.IsOk()) - bmp = measure_bmp; + if (measureBmp.IsOk()) + bmp = measureBmp; else bmp = page.bitmap; @@ -818,55 +820,67 @@ int wxAuiDefaultTabArt::GetBestTabCtrlSize(wxWindow* wnd, void wxAuiDefaultTabArt::SetNormalFont(const wxFont& font) { - m_normal_font = font; + m_normalFont = font; } void wxAuiDefaultTabArt::SetSelectedFont(const wxFont& font) { - m_selected_font = font; + m_selectedFont = font; } void wxAuiDefaultTabArt::SetMeasuringFont(const wxFont& font) { - m_measuring_font = font; + m_measuringFont = font; } +void wxAuiDefaultTabArt::SetColour(const wxColour& colour) +{ + m_baseColour = colour; + m_borderPen = wxPen(m_baseColour.ChangeLightness(75)); + m_baseColourPen = wxPen(m_baseColour); + m_baseColourBrush = wxBrush(m_baseColour); +} + +void wxAuiDefaultTabArt::SetActiveColour(const wxColour& colour) +{ + m_activeColour = colour; +} // -- wxAuiSimpleTabArt class implementation -- wxAuiSimpleTabArt::wxAuiSimpleTabArt() { - m_normal_font = *wxNORMAL_FONT; - m_selected_font = *wxNORMAL_FONT; - m_selected_font.SetWeight(wxBOLD); - m_measuring_font = m_selected_font; + m_normalFont = *wxNORMAL_FONT; + m_selectedFont = *wxNORMAL_FONT; + m_selectedFont.SetWeight(wxBOLD); + m_measuringFont = m_selectedFont; m_flags = 0; - m_fixed_tab_width = 100; + m_fixedTabWidth = 100; - wxColour base_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); + wxColour baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); - wxColour background_colour = base_colour; - wxColour normaltab_colour = base_colour; - wxColour selectedtab_colour = *wxWHITE; + wxColour backgroundColour = baseColour; + wxColour normaltabColour = baseColour; + wxColour selectedtabColour = *wxWHITE; - m_bkbrush = wxBrush(background_colour); - m_normal_bkbrush = wxBrush(normaltab_colour); - m_normal_bkpen = wxPen(normaltab_colour); - m_selected_bkbrush = wxBrush(selectedtab_colour); - m_selected_bkpen = wxPen(selectedtab_colour); + m_bkBrush = wxBrush(backgroundColour); + m_normalBkBrush = wxBrush(normaltabColour); + m_normalBkPen = wxPen(normaltabColour); + m_selectedBkBrush = wxBrush(selectedtabColour); + m_selectedBkPen = wxPen(selectedtabColour); - m_active_close_bmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK); - m_disabled_close_bmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128)); + m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK); + m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128)); - m_active_left_bmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK); - m_disabled_left_bmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128)); + m_activeLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK); + m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128)); - m_active_right_bmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK); - m_disabled_right_bmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128)); + m_activeRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK); + m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128)); - m_active_windowlist_bmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK); - m_disabled_windowlist_bmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128)); + m_activeWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK); + m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128)); } @@ -876,10 +890,9 @@ wxAuiSimpleTabArt::~wxAuiSimpleTabArt() wxAuiTabArt* wxAuiSimpleTabArt::Clone() { - return static_cast(new wxAuiSimpleTabArt); + return new wxAuiSimpleTabArt(*this); } - void wxAuiSimpleTabArt::SetFlags(unsigned int flags) { m_flags = flags; @@ -888,29 +901,42 @@ void wxAuiSimpleTabArt::SetFlags(unsigned int flags) void wxAuiSimpleTabArt::SetSizingInfo(const wxSize& tab_ctrl_size, size_t tab_count) { - m_fixed_tab_width = 100; + m_fixedTabWidth = 100; int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4; if (m_flags & wxAUI_NB_CLOSE_BUTTON) - tot_width -= m_active_close_bmp.GetWidth(); + tot_width -= m_activeCloseBmp.GetWidth(); if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON) - tot_width -= m_active_windowlist_bmp.GetWidth(); + tot_width -= m_activeWindowListBmp.GetWidth(); if (tab_count > 0) { - m_fixed_tab_width = tot_width/(int)tab_count; + m_fixedTabWidth = tot_width/(int)tab_count; } - if (m_fixed_tab_width < 100) - m_fixed_tab_width = 100; + if (m_fixedTabWidth < 100) + m_fixedTabWidth = 100; - if (m_fixed_tab_width > tot_width/2) - m_fixed_tab_width = tot_width/2; + if (m_fixedTabWidth > tot_width/2) + m_fixedTabWidth = tot_width/2; - if (m_fixed_tab_width > 220) - m_fixed_tab_width = 220; + if (m_fixedTabWidth > 220) + m_fixedTabWidth = 220; +} + +void wxAuiSimpleTabArt::SetColour(const wxColour& colour) +{ + m_bkBrush = wxBrush(colour); + m_normalBkBrush = wxBrush(colour); + m_normalBkPen = wxPen(colour); +} + +void wxAuiSimpleTabArt::SetActiveColour(const wxColour& colour) +{ + m_selectedBkBrush = wxBrush(colour); + m_selectedBkPen = wxPen(colour); } void wxAuiSimpleTabArt::DrawBackground(wxDC& dc, @@ -918,7 +944,7 @@ void wxAuiSimpleTabArt::DrawBackground(wxDC& dc, const wxRect& rect) { // draw background - dc.SetBrush(m_bkbrush); + dc.SetBrush(m_bkBrush); dc.SetPen(*wxTRANSPARENT_PEN); dc.DrawRectangle(-1, -1, rect.GetWidth()+2, rect.GetHeight()+2); @@ -955,10 +981,10 @@ void wxAuiSimpleTabArt::DrawTab(wxDC& dc, if (caption.empty()) caption = wxT("Xj"); - dc.SetFont(m_selected_font); + dc.SetFont(m_selectedFont); dc.GetTextExtent(caption, &selected_textx, &selected_texty); - dc.SetFont(m_normal_font); + dc.SetFont(m_normalFont); dc.GetTextExtent(caption, &normal_textx, &normal_texty); // figure out the size of the tab @@ -981,17 +1007,17 @@ void wxAuiSimpleTabArt::DrawTab(wxDC& dc, if (page.active) { - dc.SetPen(m_selected_bkpen); - dc.SetBrush(m_selected_bkbrush); - dc.SetFont(m_selected_font); + dc.SetPen(m_selectedBkPen); + dc.SetBrush(m_selectedBkBrush); + dc.SetFont(m_selectedFont); textx = selected_textx; texty = selected_texty; } else { - dc.SetPen(m_normal_bkpen); - dc.SetBrush(m_normal_bkbrush); - dc.SetFont(m_normal_font); + dc.SetPen(m_normalBkPen); + dc.SetBrush(m_normalBkBrush); + dc.SetFont(m_normalFont); textx = normal_textx; texty = normal_texty; } @@ -1029,7 +1055,7 @@ void wxAuiSimpleTabArt::DrawTab(wxDC& dc, int close_button_width = 0; if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) { - close_button_width = m_active_close_bmp.GetWidth(); + close_button_width = m_activeCloseBmp.GetWidth(); text_offset = tab_x + (tab_height/2) + ((tab_width-close_button_width)/2) - (textx/2); } else @@ -1068,9 +1094,9 @@ void wxAuiSimpleTabArt::DrawTab(wxDC& dc, { wxBitmap bmp; if (page.active) - bmp = m_active_close_bmp; + bmp = m_activeCloseBmp; else - bmp = m_disabled_close_bmp; + bmp = m_disabledCloseBmp; wxRect rect(tab_x + tab_width - close_button_width - 1, tab_y + (tab_height/2) - (bmp.GetHeight()/2) + 1, @@ -1102,18 +1128,18 @@ wxSize wxAuiSimpleTabArt::GetTabSize(wxDC& dc, { wxCoord measured_textx, measured_texty; - dc.SetFont(m_measuring_font); + dc.SetFont(m_measuringFont); dc.GetTextExtent(caption, &measured_textx, &measured_texty); wxCoord tab_height = measured_texty + 4; wxCoord tab_width = measured_textx + tab_height + 5; if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) - tab_width += m_active_close_bmp.GetWidth(); + tab_width += m_activeCloseBmp.GetWidth(); if (m_flags & wxAUI_NB_TAB_FIXED_WIDTH) { - tab_width = m_fixed_tab_width; + tab_width = m_fixedTabWidth; } *x_extent = tab_width - (tab_height/2) - 1; @@ -1137,27 +1163,27 @@ void wxAuiSimpleTabArt::DrawButton(wxDC& dc, { case wxAUI_BUTTON_CLOSE: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_close_bmp; + bmp = m_disabledCloseBmp; else - bmp = m_active_close_bmp; + bmp = m_activeCloseBmp; break; case wxAUI_BUTTON_LEFT: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_left_bmp; + bmp = m_disabledLeftBmp; else - bmp = m_active_left_bmp; + bmp = m_activeLeftBmp; break; case wxAUI_BUTTON_RIGHT: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_right_bmp; + bmp = m_disabledRightBmp; else - bmp = m_active_right_bmp; + bmp = m_activeRightBmp; break; case wxAUI_BUTTON_WINDOWLIST: if (button_state & wxAUI_BUTTON_STATE_DISABLED) - bmp = m_disabled_windowlist_bmp; + bmp = m_disabledWindowListBmp; else - bmp = m_active_windowlist_bmp; + bmp = m_activeWindowListBmp; break; } @@ -1232,10 +1258,10 @@ int wxAuiSimpleTabArt::ShowDropDown(wxWindow* wnd, int wxAuiSimpleTabArt::GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& WXUNUSED(pages), - const wxSize& WXUNUSED(required_bmp_size)) + const wxSize& WXUNUSED(requiredBmp_size)) { wxClientDC dc(wnd); - dc.SetFont(m_measuring_font); + dc.SetFont(m_measuringFont); int x_ext = 0; wxSize s = GetTabSize(dc, wnd, @@ -1249,17 +1275,17 @@ int wxAuiSimpleTabArt::GetBestTabCtrlSize(wxWindow* wnd, void wxAuiSimpleTabArt::SetNormalFont(const wxFont& font) { - m_normal_font = font; + m_normalFont = font; } void wxAuiSimpleTabArt::SetSelectedFont(const wxFont& font) { - m_selected_font = font; + m_selectedFont = font; } void wxAuiSimpleTabArt::SetMeasuringFont(const wxFont& font) { - m_measuring_font = font; + m_measuringFont = font; } @@ -1280,7 +1306,7 @@ void wxAuiSimpleTabArt::SetMeasuringFont(const wxFont& font) wxAuiTabContainer::wxAuiTabContainer() { - m_tab_offset = 0; + m_tabOffset = 0; m_flags = 0; m_art = new wxAuiDefaultTabArt; @@ -1365,6 +1391,16 @@ void wxAuiTabContainer::SetMeasuringFont(const wxFont& font) m_art->SetMeasuringFont(font); } +void wxAuiTabContainer::SetColour(const wxColour& colour) +{ + m_art->SetColour(colour); +} + +void wxAuiTabContainer::SetActiveColour(const wxColour& colour) +{ + m_art->SetActiveColour(colour); +} + void wxAuiTabContainer::SetRect(const wxRect& rect) { m_rect = rect; @@ -1556,15 +1592,15 @@ size_t wxAuiTabContainer::GetPageCount() const void wxAuiTabContainer::AddButton(int id, int location, - const wxBitmap& normal_bitmap, - const wxBitmap& disabled_bitmap) + const wxBitmap& normalBitmap, + const wxBitmap& disabledBitmap) { wxAuiTabContainerButton button; button.id = id; - button.bitmap = normal_bitmap; - button.dis_bitmap = disabled_bitmap; + button.bitmap = normalBitmap; + button.disBitmap = disabledBitmap; button.location = location; - button.cur_state = wxAUI_BUTTON_STATE_NORMAL; + button.curState = wxAUI_BUTTON_STATE_NORMAL; m_buttons.Add(button); } @@ -1587,12 +1623,12 @@ void wxAuiTabContainer::RemoveButton(int id) size_t wxAuiTabContainer::GetTabOffset() const { - return m_tab_offset; + return m_tabOffset; } void wxAuiTabContainer::SetTabOffset(size_t offset) { - m_tab_offset = offset; + m_tabOffset = offset; } @@ -1657,7 +1693,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) else total_width += size.x; - if (i >= m_tab_offset) + if (i >= m_tabOffset) { if (i+1 < page_count) visible_width += x_extent; @@ -1666,7 +1702,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) } } - if (total_width > m_rect.GetWidth() || m_tab_offset != 0) + if (total_width > m_rect.GetWidth() || m_tabOffset != 0) { // show left/right buttons for (i = 0; i < button_count; ++i) @@ -1675,7 +1711,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) if (button.id == wxAUI_BUTTON_LEFT || button.id == wxAUI_BUTTON_RIGHT) { - button.cur_state &= ~wxAUI_BUTTON_STATE_HIDDEN; + button.curState &= ~wxAUI_BUTTON_STATE_HIDDEN; } } } @@ -1688,7 +1724,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) if (button.id == wxAUI_BUTTON_LEFT || button.id == wxAUI_BUTTON_RIGHT) { - button.cur_state |= wxAUI_BUTTON_STATE_HIDDEN; + button.curState |= wxAUI_BUTTON_STATE_HIDDEN; } } } @@ -1699,17 +1735,17 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) wxAuiTabContainerButton& button = m_buttons.Item(i); if (button.id == wxAUI_BUTTON_LEFT) { - if (m_tab_offset == 0) - button.cur_state |= wxAUI_BUTTON_STATE_DISABLED; + if (m_tabOffset == 0) + button.curState |= wxAUI_BUTTON_STATE_DISABLED; else - button.cur_state &= ~wxAUI_BUTTON_STATE_DISABLED; + button.curState &= ~wxAUI_BUTTON_STATE_DISABLED; } if (button.id == wxAUI_BUTTON_RIGHT) { if (visible_width < m_rect.GetWidth() - ((int)button_count*16)) - button.cur_state |= wxAUI_BUTTON_STATE_DISABLED; + button.curState |= wxAUI_BUTTON_STATE_DISABLED; else - button.cur_state &= ~wxAUI_BUTTON_STATE_DISABLED; + button.curState &= ~wxAUI_BUTTON_STATE_DISABLED; } } @@ -1732,7 +1768,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) if (button.location != wxRIGHT) continue; - if (button.cur_state & wxAUI_BUTTON_STATE_HIDDEN) + if (button.curState & wxAUI_BUTTON_STATE_HIDDEN) continue; wxRect button_rect = m_rect; @@ -1743,7 +1779,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) wnd, button_rect, button.id, - button.cur_state, + button.curState, wxRIGHT, &button.rect); @@ -1763,7 +1799,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) if (button.location != wxLEFT) continue; - if (button.cur_state & wxAUI_BUTTON_STATE_HIDDEN) + if (button.curState & wxAUI_BUTTON_STATE_HIDDEN) continue; wxRect button_rect(offset, 1, 1000, m_rect.height); @@ -1772,7 +1808,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) wnd, button_rect, button.id, - button.cur_state, + button.curState, wxLEFT, &button.rect); @@ -1788,24 +1824,24 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) // prepare the tab-close-button array // make sure tab button entries which aren't used are marked as hidden - for (i = page_count; i < m_tab_close_buttons.GetCount(); ++i) - m_tab_close_buttons.Item(i).cur_state = wxAUI_BUTTON_STATE_HIDDEN; + for (i = page_count; i < m_tabCloseButtons.GetCount(); ++i) + m_tabCloseButtons.Item(i).curState = wxAUI_BUTTON_STATE_HIDDEN; // make sure there are enough tab button entries to accommodate all tabs - while (m_tab_close_buttons.GetCount() < page_count) + while (m_tabCloseButtons.GetCount() < page_count) { wxAuiTabContainerButton tempbtn; tempbtn.id = wxAUI_BUTTON_CLOSE; tempbtn.location = wxCENTER; - tempbtn.cur_state = wxAUI_BUTTON_STATE_HIDDEN; - m_tab_close_buttons.Add(tempbtn); + tempbtn.curState = wxAUI_BUTTON_STATE_HIDDEN; + m_tabCloseButtons.Add(tempbtn); } // buttons before the tab offset must be set to hidden - for (i = 0; i < m_tab_offset; ++i) + for (i = 0; i < m_tabOffset; ++i) { - m_tab_close_buttons.Item(i).cur_state = wxAUI_BUTTON_STATE_HIDDEN; + m_tabCloseButtons.Item(i).curState = wxAUI_BUTTON_STATE_HIDDEN; } @@ -1820,25 +1856,25 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) rect.y = 0; rect.height = m_rect.height; - for (i = m_tab_offset; i < page_count; ++i) + for (i = m_tabOffset; i < page_count; ++i) { wxAuiNotebookPage& page = m_pages.Item(i); - wxAuiTabContainerButton& tab_button = m_tab_close_buttons.Item(i); + wxAuiTabContainerButton& tab_button = m_tabCloseButtons.Item(i); // determine if a close button is on this tab if ((m_flags & wxAUI_NB_CLOSE_ON_ALL_TABS) != 0 || ((m_flags & wxAUI_NB_CLOSE_ON_ACTIVE_TAB) != 0 && page.active)) { - if (tab_button.cur_state == wxAUI_BUTTON_STATE_HIDDEN) + if (tab_button.curState == wxAUI_BUTTON_STATE_HIDDEN) { tab_button.id = wxAUI_BUTTON_CLOSE; - tab_button.cur_state = wxAUI_BUTTON_STATE_NORMAL; + tab_button.curState = wxAUI_BUTTON_STATE_NORMAL; tab_button.location = wxCENTER; } } else { - tab_button.cur_state = wxAUI_BUTTON_STATE_HIDDEN; + tab_button.curState = wxAUI_BUTTON_STATE_HIDDEN; } rect.x = offset; @@ -1851,7 +1887,7 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) wnd, page, rect, - tab_button.cur_state, + tab_button.curState, &page.rect, &tab_button.rect, &x_extent); @@ -1868,25 +1904,25 @@ void wxAuiTabContainer::Render(wxDC* raw_dc, wxWindow* wnd) // make sure to deactivate buttons which are off the screen to the right - for (++i; i < m_tab_close_buttons.GetCount(); ++i) + for (++i; i < m_tabCloseButtons.GetCount(); ++i) { - m_tab_close_buttons.Item(i).cur_state = wxAUI_BUTTON_STATE_HIDDEN; + m_tabCloseButtons.Item(i).curState = wxAUI_BUTTON_STATE_HIDDEN; } // draw the active tab again so it stands in the foreground - if (active >= m_tab_offset && active < m_pages.GetCount()) + if (active >= m_tabOffset && active < m_pages.GetCount()) { wxAuiNotebookPage& page = m_pages.Item(active); - wxAuiTabContainerButton& tab_button = m_tab_close_buttons.Item(active); + wxAuiTabContainerButton& tab_button = m_tabCloseButtons.Item(active); rect.x = active_offset; m_art->DrawTab(dc, wnd, page, active_rect, - tab_button.cur_state, + tab_button.curState, &page.rect, &tab_button.rect, &x_extent); @@ -1909,7 +1945,7 @@ bool wxAuiTabContainer::IsTabVisible(int tabPage, int tabOffset, wxDC* dc, wxWin size_t button_count = m_buttons.GetCount(); // Hasn't been rendered yet; assume it's visible - if (m_tab_close_buttons.GetCount() < page_count) + if (m_tabCloseButtons.GetCount() < page_count) return true; // First check if both buttons are disabled - if so, there's no need to @@ -1921,7 +1957,7 @@ bool wxAuiTabContainer::IsTabVisible(int tabPage, int tabOffset, wxDC* dc, wxWin if (button.id == wxAUI_BUTTON_LEFT || button.id == wxAUI_BUTTON_RIGHT) { - if ((button.cur_state & wxAUI_BUTTON_STATE_HIDDEN) == 0) + if ((button.curState & wxAUI_BUTTON_STATE_HIDDEN) == 0) arrowButtonVisibleCount ++; } } @@ -1948,7 +1984,7 @@ bool wxAuiTabContainer::IsTabVisible(int tabPage, int tabOffset, wxDC* dc, wxWin if (button.location != wxRIGHT) continue; - if (button.cur_state & wxAUI_BUTTON_STATE_HIDDEN) + if (button.curState & wxAUI_BUTTON_STATE_HIDDEN) continue; offset -= button.rect.GetWidth(); @@ -1964,7 +2000,7 @@ bool wxAuiTabContainer::IsTabVisible(int tabPage, int tabOffset, wxDC* dc, wxWin if (button.location != wxLEFT) continue; - if (button.cur_state & wxAUI_BUTTON_STATE_HIDDEN) + if (button.curState & wxAUI_BUTTON_STATE_HIDDEN) continue; offset += button.rect.GetWidth(); @@ -1986,7 +2022,7 @@ bool wxAuiTabContainer::IsTabVisible(int tabPage, int tabOffset, wxDC* dc, wxWin for (i = tabOffset; i < page_count; ++i) { wxAuiNotebookPage& page = m_pages.Item(i); - wxAuiTabContainerButton& tab_button = m_tab_close_buttons.Item(i); + wxAuiTabContainerButton& tab_button = m_tabCloseButtons.Item(i); rect.x = offset; rect.width = m_rect.width - right_buttons_width - offset - 2; @@ -1995,12 +2031,12 @@ bool wxAuiTabContainer::IsTabVisible(int tabPage, int tabOffset, wxDC* dc, wxWin return false; // haven't found the tab, and we've run out of space, so return false int x_extent = 0; - wxSize size = m_art->GetTabSize(*dc, + m_art->GetTabSize(*dc, wnd, page.caption, page.bitmap, page.active, - tab_button.cur_state, + tab_button.curState, &x_extent); offset += x_extent; @@ -2049,7 +2085,7 @@ bool wxAuiTabContainer::TabHitTest(int x, int y, wxWindow** hit) const return false; wxAuiTabContainerButton* btn = NULL; - if (ButtonHitTest(x, y, &btn) && !(btn->cur_state & wxAUI_BUTTON_STATE_DISABLED)) + if (ButtonHitTest(x, y, &btn) && !(btn->curState & wxAUI_BUTTON_STATE_DISABLED)) { if (m_buttons.Index(*btn) != wxNOT_FOUND) return false; @@ -2057,7 +2093,7 @@ bool wxAuiTabContainer::TabHitTest(int x, int y, wxWindow** hit) const size_t i, page_count = m_pages.GetCount(); - for (i = m_tab_offset; i < page_count; ++i) + for (i = m_tabOffset; i < page_count; ++i) { wxAuiNotebookPage& page = m_pages.Item(i); if (page.rect.Contains(x,y)) @@ -2087,7 +2123,7 @@ bool wxAuiTabContainer::ButtonHitTest(int x, int y, { wxAuiTabContainerButton& button = m_buttons.Item(i); if (button.rect.Contains(x,y) && - !(button.cur_state & wxAUI_BUTTON_STATE_HIDDEN )) + !(button.curState & wxAUI_BUTTON_STATE_HIDDEN )) { if (hit) *hit = &button; @@ -2095,12 +2131,12 @@ bool wxAuiTabContainer::ButtonHitTest(int x, int y, } } - button_count = m_tab_close_buttons.GetCount(); + button_count = m_tabCloseButtons.GetCount(); for (i = 0; i < button_count; ++i) { - wxAuiTabContainerButton& button = m_tab_close_buttons.Item(i); + wxAuiTabContainerButton& button = m_tabCloseButtons.Item(i); if (button.rect.Contains(x,y) && - !(button.cur_state & (wxAUI_BUTTON_STATE_HIDDEN | + !(button.curState & (wxAUI_BUTTON_STATE_HIDDEN | wxAUI_BUTTON_STATE_DISABLED))) { if (hit) @@ -2197,10 +2233,10 @@ wxAuiTabCtrl::wxAuiTabCtrl(wxWindow* parent, long style) : wxControl(parent, id, pos, size, style) { SetName(wxT("wxAuiTabCtrl")); - m_click_pt = wxDefaultPosition; - m_is_dragging = false; - m_hover_button = NULL; - m_pressed_button = NULL; + m_clickPt = wxDefaultPosition; + m_isDragging = false; + m_hoverButton = NULL; + m_pressedButton = NULL; } wxAuiTabCtrl::~wxAuiTabCtrl() @@ -2231,10 +2267,10 @@ void wxAuiTabCtrl::OnSize(wxSizeEvent& evt) void wxAuiTabCtrl::OnLeftDown(wxMouseEvent& evt) { CaptureMouse(); - m_click_pt = wxDefaultPosition; - m_is_dragging = false; - m_click_tab = NULL; - m_pressed_button = NULL; + m_clickPt = wxDefaultPosition; + m_isDragging = false; + m_clickTab = NULL; + m_pressedButton = NULL; wxWindow* wnd; @@ -2255,15 +2291,15 @@ void wxAuiTabCtrl::OnLeftDown(wxMouseEvent& evt) GetEventHandler()->ProcessEvent(e); } - m_click_pt.x = evt.m_x; - m_click_pt.y = evt.m_y; - m_click_tab = wnd; + m_clickPt.x = evt.m_x; + m_clickPt.y = evt.m_y; + m_clickTab = wnd; } - if (m_hover_button) + if (m_hoverButton) { - m_pressed_button = m_hover_button; - m_pressed_button->cur_state = wxAUI_BUTTON_STATE_PRESSED; + m_pressedButton = m_hoverButton; + m_pressedButton->curState = wxAUI_BUTTON_STATE_PRESSED; Refresh(); Update(); } @@ -2271,6 +2307,16 @@ void wxAuiTabCtrl::OnLeftDown(wxMouseEvent& evt) void wxAuiTabCtrl::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event)) { + if (m_isDragging) + { + m_isDragging = false; + + wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_CANCEL_DRAG, m_windowId); + evt.SetSelection(GetIdxFromWindow(m_clickTab)); + evt.SetOldSelection(evt.GetSelection()); + evt.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + } } void wxAuiTabCtrl::OnLeftUp(wxMouseEvent& evt) @@ -2278,12 +2324,12 @@ void wxAuiTabCtrl::OnLeftUp(wxMouseEvent& evt) if (GetCapture() == this) ReleaseMouse(); - if (m_is_dragging) + if (m_isDragging) { - m_is_dragging = false; + m_isDragging = false; wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, m_windowId); - evt.SetSelection(GetIdxFromWindow(m_click_tab)); + evt.SetSelection(GetIdxFromWindow(m_clickTab)); evt.SetOldSelection(evt.GetSelection()); evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); @@ -2291,38 +2337,38 @@ void wxAuiTabCtrl::OnLeftUp(wxMouseEvent& evt) return; } - if (m_pressed_button) + if (m_pressedButton) { // make sure we're still clicking the button wxAuiTabContainerButton* button = NULL; if (!ButtonHitTest(evt.m_x, evt.m_y, &button) || - button->cur_state & wxAUI_BUTTON_STATE_DISABLED) + button->curState & wxAUI_BUTTON_STATE_DISABLED) return; - if (button != m_pressed_button) + if (button != m_pressedButton) { - m_pressed_button = NULL; + m_pressedButton = NULL; return; } Refresh(); Update(); - if (!(m_pressed_button->cur_state & wxAUI_BUTTON_STATE_DISABLED)) + if (!(m_pressedButton->curState & wxAUI_BUTTON_STATE_DISABLED)) { wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_BUTTON, m_windowId); - evt.SetSelection(GetIdxFromWindow(m_click_tab)); - evt.SetInt(m_pressed_button->id); + evt.SetSelection(GetIdxFromWindow(m_clickTab)); + evt.SetInt(m_pressedButton->id); evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); } - m_pressed_button = NULL; + m_pressedButton = NULL; } - m_click_pt = wxDefaultPosition; - m_is_dragging = false; - m_click_tab = NULL; + m_clickPt = wxDefaultPosition; + m_isDragging = false; + m_clickTab = NULL; } void wxAuiTabCtrl::OnMiddleUp(wxMouseEvent& evt) @@ -2391,44 +2437,45 @@ void wxAuiTabCtrl::OnMotion(wxMouseEvent& evt) // check if the mouse is hovering above a button wxAuiTabContainerButton* button; - if (ButtonHitTest(pos.x, pos.y, &button) && !(button->cur_state & wxAUI_BUTTON_STATE_DISABLED)) + if (ButtonHitTest(pos.x, pos.y, &button) && !(button->curState & wxAUI_BUTTON_STATE_DISABLED)) { - if (m_hover_button && button != m_hover_button) + if (m_hoverButton && button != m_hoverButton) { - m_hover_button->cur_state = wxAUI_BUTTON_STATE_NORMAL; - m_hover_button = NULL; + m_hoverButton->curState = wxAUI_BUTTON_STATE_NORMAL; + m_hoverButton = NULL; Refresh(); Update(); } - if (button->cur_state != wxAUI_BUTTON_STATE_HOVER) + if (button->curState != wxAUI_BUTTON_STATE_HOVER) { - button->cur_state = wxAUI_BUTTON_STATE_HOVER; + button->curState = wxAUI_BUTTON_STATE_HOVER; Refresh(); Update(); - m_hover_button = button; + + m_hoverButton = button; return; } } else { - if (m_hover_button) + if (m_hoverButton) { - m_hover_button->cur_state = wxAUI_BUTTON_STATE_NORMAL; - m_hover_button = NULL; + m_hoverButton->curState = wxAUI_BUTTON_STATE_NORMAL; + m_hoverButton = NULL; Refresh(); Update(); } } - if (!evt.LeftIsDown() || m_click_pt == wxDefaultPosition) + if (!evt.LeftIsDown() || m_clickPt == wxDefaultPosition) return; - if (m_is_dragging) + if (m_isDragging) { wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, m_windowId); - evt.SetSelection(GetIdxFromWindow(m_click_tab)); + evt.SetSelection(GetIdxFromWindow(m_clickTab)); evt.SetOldSelection(evt.GetSelection()); evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); @@ -2439,25 +2486,25 @@ void wxAuiTabCtrl::OnMotion(wxMouseEvent& evt) int drag_x_threshold = wxSystemSettings::GetMetric(wxSYS_DRAG_X); int drag_y_threshold = wxSystemSettings::GetMetric(wxSYS_DRAG_Y); - if (abs(pos.x - m_click_pt.x) > drag_x_threshold || - abs(pos.y - m_click_pt.y) > drag_y_threshold) + if (abs(pos.x - m_clickPt.x) > drag_x_threshold || + abs(pos.y - m_clickPt.y) > drag_y_threshold) { wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, m_windowId); - evt.SetSelection(GetIdxFromWindow(m_click_tab)); + evt.SetSelection(GetIdxFromWindow(m_clickTab)); evt.SetOldSelection(evt.GetSelection()); evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); - m_is_dragging = true; + m_isDragging = true; } } void wxAuiTabCtrl::OnLeaveWindow(wxMouseEvent& WXUNUSED(event)) { - if (m_hover_button) + if (m_hoverButton) { - m_hover_button->cur_state = wxAUI_BUTTON_STATE_NORMAL; - m_hover_button = NULL; + m_hoverButton->curState = wxAUI_BUTTON_STATE_NORMAL; + m_hoverButton = NULL; Refresh(); Update(); } @@ -2653,7 +2700,7 @@ public: { m_tabs = NULL; m_rect = wxRect(0,0,200,200); - m_tab_ctrl_height = 20; + m_tabCtrlHeight = 20; } ~wxTabFrame() @@ -2663,7 +2710,7 @@ public: void SetTabCtrlHeight(int h) { - m_tab_ctrl_height = h; + m_tabCtrlHeight = h; } protected: @@ -2692,18 +2739,18 @@ public: if (m_tabs->IsFrozen() || m_tabs->GetParent()->IsFrozen()) return; - m_tab_rect = wxRect(m_rect.x, m_rect.y, m_rect.width, m_tab_ctrl_height); + m_tab_rect = wxRect(m_rect.x, m_rect.y, m_rect.width, m_tabCtrlHeight); if (m_tabs->GetFlags() & wxAUI_NB_BOTTOM) { - m_tab_rect = wxRect (m_rect.x, m_rect.y + m_rect.height - m_tab_ctrl_height, m_rect.width, m_tab_ctrl_height); - m_tabs->SetSize (m_rect.x, m_rect.y + m_rect.height - m_tab_ctrl_height, m_rect.width, m_tab_ctrl_height); - m_tabs->SetRect (wxRect(0, 0, m_rect.width, m_tab_ctrl_height)); + m_tab_rect = wxRect (m_rect.x, m_rect.y + m_rect.height - m_tabCtrlHeight, m_rect.width, m_tabCtrlHeight); + m_tabs->SetSize (m_rect.x, m_rect.y + m_rect.height - m_tabCtrlHeight, m_rect.width, m_tabCtrlHeight); + m_tabs->SetRect (wxRect(0, 0, m_rect.width, m_tabCtrlHeight)); } else //TODO: if (GetFlags() & wxAUI_NB_TOP) { - m_tab_rect = wxRect (m_rect.x, m_rect.y, m_rect.width, m_tab_ctrl_height); - m_tabs->SetSize (m_rect.x, m_rect.y, m_rect.width, m_tab_ctrl_height); - m_tabs->SetRect (wxRect(0, 0, m_rect.width, m_tab_ctrl_height)); + m_tab_rect = wxRect (m_rect.x, m_rect.y, m_rect.width, m_tabCtrlHeight); + m_tabs->SetSize (m_rect.x, m_rect.y, m_rect.width, m_tabCtrlHeight); + m_tabs->SetRect (wxRect(0, 0, m_rect.width, m_tabCtrlHeight)); } // TODO: else if (GetFlags() & wxAUI_NB_LEFT){} // TODO: else if (GetFlags() & wxAUI_NB_RIGHT){} @@ -2716,7 +2763,7 @@ public: for (i = 0; i < page_count; ++i) { - int height = m_rect.height - m_tab_ctrl_height; + int height = m_rect.height - m_tabCtrlHeight; if ( height < 0 ) { // avoid passing negative height to wxWindow::SetSize(), this @@ -2731,7 +2778,7 @@ public: } else //TODO: if (GetFlags() & wxAUI_NB_TOP) { - page.window->SetSize(m_rect.x, m_rect.y + m_tab_ctrl_height, + page.window->SetSize(m_rect.x, m_rect.y + m_tabCtrlHeight, m_rect.width, height); } // TODO: else if (GetFlags() & wxAUI_NB_LEFT){} @@ -2765,7 +2812,7 @@ public: wxRect m_rect; wxRect m_tab_rect; wxAuiTabCtrl* m_tabs; - int m_tab_ctrl_height; + int m_tabCtrlHeight; }; @@ -2789,6 +2836,9 @@ BEGIN_EVENT_TABLE(wxAuiNotebook, wxControl) EVT_AUI_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500, wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, wxAuiNotebook::OnTabEndDrag) + EVT_AUI_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500, + wxEVT_COMMAND_AUINOTEBOOK_CANCEL_DRAG, + wxAuiNotebook::OnTabCancelDrag) EVT_AUI_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500, wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, wxAuiNotebook::OnTabDragMotion) @@ -2811,37 +2861,16 @@ BEGIN_EVENT_TABLE(wxAuiNotebook, wxControl) wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, wxAuiNotebook::OnTabBgDClick) EVT_NAVIGATION_KEY(wxAuiNotebook::OnNavigationKeyNotebook) - -#ifdef wxHAS_NATIVE_TAB_TRAVERSAL - WX_EVENT_TABLE_CONTROL_CONTAINER(wxAuiNotebook) -#else - // Avoid clash with container event handler functions - EVT_SET_FOCUS(wxAuiNotebook::OnFocus) -#endif END_EVENT_TABLE() -WX_DELEGATE_TO_CONTROL_CONTAINER(wxAuiNotebook, wxControl) - -wxAuiNotebook::wxAuiNotebook() +void wxAuiNotebook::Init() { - m_curpage = -1; - m_tab_id_counter = wxAuiBaseTabCtrlId; - m_dummy_wnd = NULL; - m_tab_ctrl_height = 20; - m_requested_bmp_size = wxDefaultSize; - m_requested_tabctrl_height = -1; -} - -wxAuiNotebook::wxAuiNotebook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - long style) : wxControl(parent, id, pos, size, style) -{ - m_dummy_wnd = NULL; - m_requested_bmp_size = wxDefaultSize; - m_requested_tabctrl_height = -1; - InitNotebook(style); + m_curPage = -1; + m_tabIdCounter = wxAuiBaseTabCtrlId; + m_dummyWnd = NULL; + m_tabCtrlHeight = 20; + m_requestedBmpSize = wxDefaultSize; + m_requestedTabCtrlHeight = -1; } bool wxAuiNotebook::Create(wxWindow* parent, @@ -2862,31 +2891,28 @@ bool wxAuiNotebook::Create(wxWindow* parent, // code called by all constructors void wxAuiNotebook::InitNotebook(long style) { - WX_INIT_CONTROL_CONTAINER(); - // SetCanFocus(false); - SetName(wxT("wxAuiNotebook")); - m_curpage = -1; - m_tab_id_counter = wxAuiBaseTabCtrlId; - m_dummy_wnd = NULL; + m_curPage = -1; + m_tabIdCounter = wxAuiBaseTabCtrlId; + m_dummyWnd = NULL; m_flags = (unsigned int)style; - m_tab_ctrl_height = 20; + m_tabCtrlHeight = 20; - m_normal_font = *wxNORMAL_FONT; - m_selected_font = *wxNORMAL_FONT; - m_selected_font.SetWeight(wxBOLD); + m_normalFont = *wxNORMAL_FONT; + m_selectedFont = *wxNORMAL_FONT; + m_selectedFont.SetWeight(wxBOLD); SetArtProvider(new wxAuiDefaultTabArt); - m_dummy_wnd = new wxWindow(this, wxID_ANY, wxPoint(0,0), wxSize(0,0)); - m_dummy_wnd->SetSize(200, 200); - m_dummy_wnd->Show(false); + m_dummyWnd = new wxWindow(this, wxID_ANY, wxPoint(0,0), wxSize(0,0)); + m_dummyWnd->SetSize(200, 200); + m_dummyWnd->Show(false); m_mgr.SetManagedWindow(this); m_mgr.SetFlags(wxAUI_MGR_DEFAULT); m_mgr.SetDockSizeConstraint(1.0, 1.0); // no dock size constraint - m_mgr.AddPane(m_dummy_wnd, + m_mgr.AddPane(m_dummyWnd, wxAuiPaneInfo().Name(wxT("dummy")).Bottom().CaptionVisible(false).Show(false)); m_mgr.Update(); @@ -2935,10 +2961,10 @@ void wxAuiNotebook::SetArtProvider(wxAuiTabArt* art) void wxAuiNotebook::SetTabCtrlHeight(int height) { - m_requested_tabctrl_height = height; + m_requestedTabCtrlHeight = height; // if window is already initialized, recalculate the tab height - if (m_dummy_wnd) + if (m_dummyWnd) { UpdateTabCtrlHeight(); } @@ -2954,10 +2980,10 @@ void wxAuiNotebook::SetTabCtrlHeight(int height) void wxAuiNotebook::SetUniformBitmapSize(const wxSize& size) { - m_requested_bmp_size = size; + m_requestedBmpSize = size; // if window is already initialized, recalculate the tab height - if (m_dummy_wnd) + if (m_dummyWnd) { UpdateTabCtrlHeight(); } @@ -2972,12 +2998,12 @@ bool wxAuiNotebook::UpdateTabCtrlHeight() // if the tab control height needs to change, update // all of our tab controls with the new height - if (m_tab_ctrl_height == height) + if (m_tabCtrlHeight == height) return false; wxAuiTabArt* art = m_tabs.GetArtProvider(); - m_tab_ctrl_height = height; + m_tabCtrlHeight = height; wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes(); size_t i, pane_count = all_panes.GetCount(); @@ -2988,7 +3014,7 @@ bool wxAuiNotebook::UpdateTabCtrlHeight() continue; wxTabFrame* tab_frame = (wxTabFrame*)pane.window; wxAuiTabCtrl* tabctrl = tab_frame->m_tabs; - tab_frame->SetTabCtrlHeight(m_tab_ctrl_height); + tab_frame->SetTabCtrlHeight(m_tabCtrlHeight); tabctrl->SetArtProvider(art->Clone()); tab_frame->DoSizing(); } @@ -3006,7 +3032,7 @@ void wxAuiNotebook::UpdateHintWindowSize() { info.MinSize(size); info.BestSize(size); - m_dummy_wnd->SetSize(size); + m_dummyWnd->SetSize(size); } } @@ -3051,15 +3077,15 @@ int wxAuiNotebook::CalculateTabCtrlHeight() // if a fixed tab ctrl height is specified, // just return that instead of calculating a // tab height - if (m_requested_tabctrl_height != -1) - return m_requested_tabctrl_height; + if (m_requestedTabCtrlHeight != -1) + return m_requestedTabCtrlHeight; // find out new best tab height wxAuiTabArt* art = m_tabs.GetArtProvider(); return art->GetBestTabCtrlSize(this, m_tabs.GetPages(), - m_requested_bmp_size); + m_requestedBmpSize); } @@ -3135,7 +3161,7 @@ bool wxAuiNotebook::InsertPage(size_t page_idx, // (though no select events will be fired) if (!select && m_tabs.GetPageCount() == 1) select = true; - //m_curpage = GetPageIndex(page); + //m_curPage = GetPageIndex(page); wxAuiTabCtrl* active_tabctrl = GetActiveTabCtrl(); if (page_idx >= active_tabctrl->GetPageCount()) @@ -3148,8 +3174,8 @@ bool wxAuiNotebook::InsertPage(size_t page_idx, active_tabctrl->DoShowHide(); // adjust selected index - if(m_curpage >= (int) page_idx) - m_curpage++; + if(m_curPage >= (int) page_idx) + m_curPage++; if (select) { @@ -3202,8 +3228,8 @@ bool wxAuiNotebook::RemovePage(size_t page_idx) { // save active window pointer wxWindow* active_wnd = NULL; - if (m_curpage >= 0) - active_wnd = m_tabs.GetWindowFromIdx(m_curpage); + if (m_curPage >= 0) + active_wnd = m_tabs.GetWindowFromIdx(m_curPage); // save pointer of window being deleted wxWindow* wnd = m_tabs.GetWindowFromIdx(page_idx); @@ -3219,7 +3245,7 @@ bool wxAuiNotebook::RemovePage(size_t page_idx) if (!FindTab(wnd, &ctrl, &ctrl_idx)) return false; - bool is_curpage = (m_curpage == (int)page_idx); + bool is_curpage = (m_curPage == (int)page_idx); bool is_active_in_split = ctrl->GetPage(ctrl_idx).active; @@ -3278,7 +3304,7 @@ bool wxAuiNotebook::RemovePage(size_t page_idx) RemoveEmptyTabFrames(); - m_curpage = wxNOT_FOUND; + m_curPage = wxNOT_FOUND; // set new active pane unless we're being destroyed anyhow if (new_active && !m_isBeingDeleted) @@ -3371,82 +3397,13 @@ wxBitmap wxAuiNotebook::GetPageBitmap(size_t page_idx) const // GetSelection() returns the index of the currently active page int wxAuiNotebook::GetSelection() const { - return m_curpage; + return m_curPage; } // SetSelection() sets the currently active page -size_t wxAuiNotebook::SetSelection(size_t new_page) +int wxAuiNotebook::SetSelection(size_t new_page) { - wxWindow* wnd = m_tabs.GetWindowFromIdx(new_page); - if (!wnd) - return m_curpage; - - // don't change the page unless necessary; - // however, clicking again on a tab should give it the focus. - if ((int)new_page == m_curpage) - { - wxAuiTabCtrl* ctrl; - int ctrl_idx; - if (FindTab(wnd, &ctrl, &ctrl_idx)) - { - if (FindFocus() != ctrl) - ctrl->SetFocus(); - } - return m_curpage; - } - - wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, m_windowId); - evt.SetSelection(new_page); - evt.SetOldSelection(m_curpage); - evt.SetEventObject(this); - if (!GetEventHandler()->ProcessEvent(evt) || evt.IsAllowed()) - { - int old_curpage = m_curpage; - m_curpage = new_page; - - // program allows the page change - evt.SetEventType(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED); - (void)GetEventHandler()->ProcessEvent(evt); - - - wxAuiTabCtrl* ctrl; - int ctrl_idx; - if (FindTab(wnd, &ctrl, &ctrl_idx)) - { - m_tabs.SetActivePage(wnd); - - ctrl->SetActivePage(ctrl_idx); - DoSizing(); - ctrl->DoShowHide(); - - ctrl->MakeTabVisible(ctrl_idx, ctrl); - - // set fonts - wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes(); - size_t i, pane_count = all_panes.GetCount(); - for (i = 0; i < pane_count; ++i) - { - wxAuiPaneInfo& pane = all_panes.Item(i); - if (pane.name == wxT("dummy")) - continue; - wxAuiTabCtrl* tabctrl = ((wxTabFrame*)pane.window)->m_tabs; - if (tabctrl != ctrl) - tabctrl->SetSelectedFont(m_normal_font); - else - tabctrl->SetSelectedFont(m_selected_font); - tabctrl->Refresh(); - } - - // Set the focus to the page if we're not currently focused on the tab. - // This is Firefox-like behaviour. - if (wnd->IsShownOnScreen() && FindFocus() != ctrl) - wnd->SetFocus(); - - return old_curpage; - } - } - - return m_curpage; + return DoModifySelection(new_page, true); } void wxAuiNotebook::SetSelectionToWindow(wxWindow *win) @@ -3507,13 +3464,13 @@ void wxAuiNotebook::DoSizing() // called to determine which control gets new windows being added wxAuiTabCtrl* wxAuiNotebook::GetActiveTabCtrl() { - if (m_curpage >= 0 && m_curpage < (int)m_tabs.GetPageCount()) + if (m_curPage >= 0 && m_curPage < (int)m_tabs.GetPageCount()) { wxAuiTabCtrl* ctrl; int idx; // find the tab ctrl with the current page - if (FindTab(m_tabs.GetPage(m_curpage).window, + if (FindTab(m_tabs.GetPage(m_curPage).window, &ctrl, &idx)) { return ctrl; @@ -3534,9 +3491,9 @@ wxAuiTabCtrl* wxAuiNotebook::GetActiveTabCtrl() // If there is no tabframe at all, create one wxTabFrame* tabframe = new wxTabFrame; - tabframe->SetTabCtrlHeight(m_tab_ctrl_height); + tabframe->SetTabCtrlHeight(m_tabCtrlHeight); tabframe->m_tabs = new wxAuiTabCtrl(this, - m_tab_id_counter++, + m_tabIdCounter++, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxWANTS_CHARS); @@ -3617,9 +3574,9 @@ void wxAuiNotebook::Split(size_t page, int direction) // create a new tab frame wxTabFrame* new_tabs = new wxTabFrame; new_tabs->m_rect = wxRect(wxPoint(0,0), split_size); - new_tabs->SetTabCtrlHeight(m_tab_ctrl_height); + new_tabs->SetTabCtrlHeight(m_tabCtrlHeight); new_tabs->m_tabs = new wxAuiTabCtrl(this, - m_tab_id_counter++, + m_tabIdCounter++, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxWANTS_CHARS); @@ -3629,31 +3586,31 @@ void wxAuiNotebook::Split(size_t page, int direction) // create a pane info structure with the information // about where the pane should be added - wxAuiPaneInfo pane_info = wxAuiPaneInfo().Bottom().CaptionVisible(false); + wxAuiPaneInfo paneInfo = wxAuiPaneInfo().Bottom().CaptionVisible(false); wxPoint mouse_pt; if (direction == wxLEFT) { - pane_info.Left(); + paneInfo.Left(); mouse_pt = wxPoint(0, cli_size.y/2); } else if (direction == wxRIGHT) { - pane_info.Right(); + paneInfo.Right(); mouse_pt = wxPoint(cli_size.x, cli_size.y/2); } else if (direction == wxTOP) { - pane_info.Top(); + paneInfo.Top(); mouse_pt = wxPoint(cli_size.x/2, 0); } else if (direction == wxBOTTOM) { - pane_info.Bottom(); + paneInfo.Bottom(); mouse_pt = wxPoint(cli_size.x/2, cli_size.y); } - m_mgr.AddPane(new_tabs, pane_info, mouse_pt); + m_mgr.AddPane(new_tabs, paneInfo, mouse_pt); m_mgr.Update(); // remove the page from the source tabs @@ -3681,7 +3638,7 @@ void wxAuiNotebook::Split(size_t page, int direction) dest_tabs->Refresh(); // force the set selection function reset the selection - m_curpage = -1; + m_curPage = -1; // set the active page to the one we just split off SetSelectionToPage(page_info); @@ -3718,7 +3675,7 @@ void wxAuiNotebook::OnTabBgDClick(wxAuiNotebookEvent& WXUNUSED(evt)) void wxAuiNotebook::OnTabBeginDrag(wxAuiNotebookEvent&) { - m_last_drag_x = 0; + m_lastDragX = 0; } void wxAuiNotebook::OnTabDragMotion(wxAuiNotebookEvent& evt) @@ -3757,10 +3714,10 @@ void wxAuiNotebook::OnTabDragMotion(wxAuiNotebookEvent& evt) // prevent jumpy drag if ((src_idx == dest_idx) || dest_idx == -1 || - (src_idx > dest_idx && m_last_drag_x <= pt.x) || - (src_idx < dest_idx && m_last_drag_x >= pt.x)) + (src_idx > dest_idx && m_lastDragX <= pt.x) || + (src_idx < dest_idx && m_lastDragX >= pt.x)) { - m_last_drag_x = pt.x; + m_lastDragX = pt.x; return; } @@ -3770,7 +3727,7 @@ void wxAuiNotebook::OnTabDragMotion(wxAuiNotebookEvent& evt) dest_tabs->SetActivePage((size_t)dest_idx); dest_tabs->DoShowHide(); dest_tabs->Refresh(); - m_last_drag_x = pt.x; + m_lastDragX = pt.x; } @@ -3846,7 +3803,7 @@ void wxAuiNotebook::OnTabDragMotion(wxAuiNotebookEvent& evt) } else { - m_mgr.DrawHintRect(m_dummy_wnd, client_pt, zero); + m_mgr.DrawHintRect(m_dummyWnd, client_pt, zero); } } @@ -4003,7 +3960,7 @@ void wxAuiNotebook::OnTabEndDrag(wxAuiNotebookEvent& evt) else { wxPoint zero(0,0); - wxRect rect = m_mgr.CalculateHintRect(m_dummy_wnd, + wxRect rect = m_mgr.CalculateHintRect(m_dummyWnd, mouse_client_pt, zero); if (rect.IsEmpty()) @@ -4015,9 +3972,9 @@ void wxAuiNotebook::OnTabEndDrag(wxAuiNotebookEvent& evt) // If there is no tabframe at all, create one wxTabFrame* new_tabs = new wxTabFrame; new_tabs->m_rect = wxRect(wxPoint(0,0), CalculateNewSplitSize()); - new_tabs->SetTabCtrlHeight(m_tab_ctrl_height); + new_tabs->SetTabCtrlHeight(m_tabCtrlHeight); new_tabs->m_tabs = new wxAuiTabCtrl(this, - m_tab_id_counter++, + m_tabIdCounter++, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxWANTS_CHARS); @@ -4061,7 +4018,7 @@ void wxAuiNotebook::OnTabEndDrag(wxAuiNotebookEvent& evt) dest_tabs->Refresh(); // force the set selection function reset the selection - m_curpage = -1; + m_curPage = -1; // set the active page to the one we just split off SetSelectionToPage(page_info); @@ -4079,6 +4036,18 @@ void wxAuiNotebook::OnTabEndDrag(wxAuiNotebookEvent& evt) +void wxAuiNotebook::OnTabCancelDrag(wxAuiNotebookEvent& command_evt) +{ + wxAuiNotebookEvent& evt = (wxAuiNotebookEvent&)command_evt; + + m_mgr.HideHint(); + + wxAuiTabCtrl* src_tabs = (wxAuiTabCtrl*)evt.GetEventObject(); + wxCHECK_RET( src_tabs, wxT("no source object?") ); + + src_tabs->SetCursor(wxCursor(wxCURSOR_ARROW)); +} + wxAuiTabCtrl* wxAuiNotebook::GetTabCtrlFromPoint(const wxPoint& pt) { // if we've just removed the last tab from the source @@ -4198,7 +4167,7 @@ void wxAuiNotebook::OnChildFocusNotebook(wxChildFocusEvent& evt) // change the tab selection to the child // which was focused int idx = m_tabs.GetIdxFromWindow(evt.GetWindow()); - if (idx != -1 && idx != m_curpage) + if (idx != -1 && idx != m_curPage) { SetSelection(idx); } @@ -4402,14 +4371,14 @@ void wxAuiNotebook::OnTabRightUp(wxAuiNotebookEvent& evt) // Sets the normal font void wxAuiNotebook::SetNormalFont(const wxFont& font) { - m_normal_font = font; + m_normalFont = font; GetArtProvider()->SetNormalFont(font); } // Sets the selected tab font void wxAuiNotebook::SetSelectedFont(const wxFont& font) { - m_selected_font = font; + m_selectedFont = font; GetArtProvider()->SetSelectedFont(font); } @@ -4438,7 +4407,7 @@ bool wxAuiNotebook::SetFont(const wxFont& font) // Gets the tab control height int wxAuiNotebook::GetTabCtrlHeight() const { - return m_tab_ctrl_height; + return m_tabCtrlHeight; } // Gets the height of the notebook for a given page height @@ -4507,4 +4476,163 @@ void wxAuiNotebook::Thaw() wxControl::Thaw(); } +void wxAuiNotebook::SetPageSize (const wxSize& WXUNUSED(size)) +{ + wxFAIL_MSG("Not implemented for wxAuiNotebook"); +} + +int wxAuiNotebook::HitTest (const wxPoint& WXUNUSED(pt), long* WXUNUSED(flags)) const +{ + wxFAIL_MSG("Not implemented for wxAuiNotebook"); + return wxNOT_FOUND; +} + +int wxAuiNotebook::GetPageImage(size_t WXUNUSED(n)) const +{ + wxFAIL_MSG("Not implemented for wxAuiNotebook"); + return -1; +} + +bool wxAuiNotebook::SetPageImage(size_t n, int imageId) +{ + return SetPageBitmap(n, GetImageList()->GetBitmap(imageId)); +} + +wxWindow* wxAuiNotebook::GetCurrentPage () const +{ + const int sel = GetSelection(); + + return sel == wxNOT_FOUND ? NULL : GetPage(sel); +} + +int wxAuiNotebook::ChangeSelection(size_t n) +{ + return DoModifySelection(n, false); +} + +bool wxAuiNotebook::AddPage(wxWindow *page, const wxString &text, bool select, + int imageId) +{ + if(HasImageList()) + { + return AddPage(page, text, select, GetImageList()->GetBitmap(imageId)); + } + else + { + return AddPage(page, text, select, wxNullBitmap); + } +} + +bool wxAuiNotebook::DeleteAllPages() +{ + size_t count = GetPageCount(); + for(size_t i = 0; i < count; i++) + { + DeletePage(0); + } + return true; +} + +bool wxAuiNotebook::InsertPage(size_t index, wxWindow *page, + const wxString &text, bool select, + int imageId) +{ + if(HasImageList()) + { + return InsertPage(index, page, text, select, + GetImageList()->GetBitmap(imageId)); + } + else + { + return InsertPage(index, page, text, select, wxNullBitmap); + } +} + +int wxAuiNotebook::DoModifySelection(size_t n, bool events) +{ + wxWindow* wnd = m_tabs.GetWindowFromIdx(n); + if (!wnd) + return m_curPage; + + // don't change the page unless necessary; + // however, clicking again on a tab should give it the focus. + if ((int)n == m_curPage) + { + wxAuiTabCtrl* ctrl; + int ctrl_idx; + if (FindTab(wnd, &ctrl, &ctrl_idx)) + { + if (FindFocus() != ctrl) + ctrl->SetFocus(); + } + return m_curPage; + } + + bool vetoed = false; + + wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, m_windowId); + + if(events) + { + evt.SetSelection(n); + evt.SetOldSelection(m_curPage); + evt.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + vetoed = !evt.IsAllowed(); + } + + if (!vetoed) + { + int old_curpage = m_curPage; + m_curPage = n; + + // program allows the page change + if(events) + { + evt.SetEventType(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED); + (void)GetEventHandler()->ProcessEvent(evt); + } + + + wxAuiTabCtrl* ctrl; + int ctrl_idx; + if (FindTab(wnd, &ctrl, &ctrl_idx)) + { + m_tabs.SetActivePage(wnd); + + ctrl->SetActivePage(ctrl_idx); + DoSizing(); + ctrl->DoShowHide(); + + ctrl->MakeTabVisible(ctrl_idx, ctrl); + + // set fonts + wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes(); + size_t i, pane_count = all_panes.GetCount(); + for (i = 0; i < pane_count; ++i) + { + wxAuiPaneInfo& pane = all_panes.Item(i); + if (pane.name == wxT("dummy")) + continue; + wxAuiTabCtrl* tabctrl = ((wxTabFrame*)pane.window)->m_tabs; + if (tabctrl != ctrl) + tabctrl->SetSelectedFont(m_normalFont); + else + tabctrl->SetSelectedFont(m_selectedFont); + tabctrl->Refresh(); + } + + // Set the focus to the page if we're not currently focused on the tab. + // This is Firefox-like behaviour. + if (wnd->IsShownOnScreen() && FindFocus() != ctrl) + wnd->SetFocus(); + + return old_curpage; + } + } + + return m_curPage; +} + + #endif // wxUSE_AUI diff --git a/Externals/wxWidgets3/src/aui/dockart.cpp b/Externals/wxWidgets3/src/aui/dockart.cpp index b84d2bb325..74dac023ce 100644 --- a/Externals/wxWidgets3/src/aui/dockart.cpp +++ b/Externals/wxWidgets3/src/aui/dockart.cpp @@ -4,7 +4,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: $Id: dockart.cpp 66670 2011-01-12 13:39:36Z VZ $ +// RCS-ID: $Id: dockart.cpp 69590 2011-10-30 14:20:03Z VZ $ // Copyright: (C) Copyright 2005-2006, Kirix Corporation, All Rights Reserved // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -43,6 +43,11 @@ #ifdef __WXGTK__ #include #include "wx/renderer.h" +#if GTK_CHECK_VERSION(2,0,0) + #include "wx/gtk/private/gtk2-compat.h" +#else + #define gtk_widget_is_drawable GTK_WIDGET_DRAWABLE +#endif #endif @@ -147,64 +152,64 @@ wxString wxAuiChopText(wxDC& dc, const wxString& text, int max_size) wxAuiDefaultDockArt::wxAuiDefaultDockArt() { #if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON - wxColor base_colour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground)); + wxColor baseColour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground)); #else - wxColor base_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); + wxColor baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); #endif - // the base_colour is too pale to use as our base colour, + // the baseColour is too pale to use as our base colour, // so darken it a bit -- - if ((255-base_colour.Red()) + - (255-base_colour.Green()) + - (255-base_colour.Blue()) < 60) + if ((255-baseColour.Red()) + + (255-baseColour.Green()) + + (255-baseColour.Blue()) < 60) { - base_colour = base_colour.ChangeLightness(92); + baseColour = baseColour.ChangeLightness(92); } - m_base_colour = base_colour; - wxColor darker1_colour = base_colour.ChangeLightness(85); - wxColor darker2_colour = base_colour.ChangeLightness(75); - wxColor darker3_colour = base_colour.ChangeLightness(60); - //wxColor darker4_colour = base_colour.ChangeLightness(50); - wxColor darker5_colour = base_colour.ChangeLightness(40); + m_baseColour = baseColour; + wxColor darker1Colour = baseColour.ChangeLightness(85); + wxColor darker2Colour = baseColour.ChangeLightness(75); + wxColor darker3Colour = baseColour.ChangeLightness(60); + //wxColor darker4Colour = baseColour.ChangeLightness(50); + wxColor darker5Colour = baseColour.ChangeLightness(40); - m_active_caption_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); - m_active_caption_gradient_colour = wxAuiLightContrastColour(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT)); - m_active_caption_text_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); - m_inactive_caption_colour = darker1_colour; - m_inactive_caption_gradient_colour = base_colour.ChangeLightness(97); - m_inactive_caption_text_colour = *wxBLACK; + m_activeCaptionColour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); + m_activeCaptionGradientColour = wxAuiLightContrastColour(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT)); + m_activeCaptionTextColour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); + m_inactiveCaptionColour = darker1Colour; + m_inactiveCaptionGradientColour = baseColour.ChangeLightness(97); + m_inactiveCaptionTextColour = *wxBLACK; - m_sash_brush = wxBrush(base_colour); - m_background_brush = wxBrush(base_colour); - m_gripper_brush = wxBrush(base_colour); + m_sashBrush = wxBrush(baseColour); + m_backgroundBrush = wxBrush(baseColour); + m_gripperBrush = wxBrush(baseColour); - m_border_pen = wxPen(darker2_colour); - m_gripper_pen1 = wxPen(darker5_colour); - m_gripper_pen2 = wxPen(darker3_colour); - m_gripper_pen3 = *wxWHITE_PEN; + m_borderPen = wxPen(darker2Colour); + m_gripperPen1 = wxPen(darker5Colour); + m_gripperPen2 = wxPen(darker3Colour); + m_gripperPen3 = *wxWHITE_PEN; #ifdef __WXMAC__ - m_caption_font = *wxSMALL_FONT; + m_captionFont = *wxSMALL_FONT; #else - m_caption_font = wxFont(8, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE); + m_captionFont = wxFont(8, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE); #endif // default metric values #if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON SInt32 height; GetThemeMetric( kThemeMetricSmallPaneSplitterHeight , &height ); - m_sash_size = height; + m_sashSize = height; #elif defined(__WXGTK__) - m_sash_size = wxRendererNative::Get().GetSplitterParams(NULL).widthSash; + m_sashSize = wxRendererNative::Get().GetSplitterParams(NULL).widthSash; #else - m_sash_size = 4; + m_sashSize = 4; #endif - m_caption_size = 17; - m_border_size = 1; - m_button_size = 14; - m_gripper_size = 9; - m_gradient_type = wxAUI_GRADIENT_VERTICAL; + m_captionSize = 17; + m_borderSize = 1; + m_buttonSize = 14; + m_gripperSize = 9; + m_gradientType = wxAUI_GRADIENT_VERTICAL; InitBitmaps(); } @@ -253,43 +258,43 @@ wxAuiDefaultDockArt::InitBitmaps () 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; #ifdef __WXMAC__ - m_inactive_close_bitmap = wxAuiBitmapFromBits(close_bits, 16, 16, *wxWHITE); - m_active_close_bitmap = wxAuiBitmapFromBits(close_bits, 16, 16, *wxWHITE ); + m_inactiveCloseBitmap = wxAuiBitmapFromBits(close_bits, 16, 16, *wxWHITE); + m_activeCloseBitmap = wxAuiBitmapFromBits(close_bits, 16, 16, *wxWHITE ); #else - m_inactive_close_bitmap = wxAuiBitmapFromBits(close_bits, 16, 16, m_inactive_caption_text_colour); - m_active_close_bitmap = wxAuiBitmapFromBits(close_bits, 16, 16, m_active_caption_text_colour); + m_inactiveCloseBitmap = wxAuiBitmapFromBits(close_bits, 16, 16, m_inactiveCaptionTextColour); + m_activeCloseBitmap = wxAuiBitmapFromBits(close_bits, 16, 16, m_activeCaptionTextColour); #endif #ifdef __WXMAC__ - m_inactive_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE); - m_active_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE ); + m_inactiveMaximizeBitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE); + m_activeMaximizeBitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE ); #else - m_inactive_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, m_inactive_caption_text_colour); - m_active_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, m_active_caption_text_colour); + m_inactiveMaximizeBitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, m_inactiveCaptionTextColour); + m_activeMaximizeBitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, m_activeCaptionTextColour); #endif #ifdef __WXMAC__ - m_inactive_restore_bitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, *wxWHITE); - m_active_restore_bitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, *wxWHITE ); + m_inactiveRestoreBitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, *wxWHITE); + m_activeRestoreBitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, *wxWHITE ); #else - m_inactive_restore_bitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, m_inactive_caption_text_colour); - m_active_restore_bitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, m_active_caption_text_colour); + m_inactiveRestoreBitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, m_inactiveCaptionTextColour); + m_activeRestoreBitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, m_activeCaptionTextColour); #endif - m_inactive_pin_bitmap = wxAuiBitmapFromBits(pin_bits, 16, 16, m_inactive_caption_text_colour); - m_active_pin_bitmap = wxAuiBitmapFromBits(pin_bits, 16, 16, m_active_caption_text_colour); + m_inactivePinBitmap = wxAuiBitmapFromBits(pin_bits, 16, 16, m_inactiveCaptionTextColour); + m_activePinBitmap = wxAuiBitmapFromBits(pin_bits, 16, 16, m_activeCaptionTextColour); } int wxAuiDefaultDockArt::GetMetric(int id) { switch (id) { - case wxAUI_DOCKART_SASH_SIZE: return m_sash_size; - case wxAUI_DOCKART_CAPTION_SIZE: return m_caption_size; - case wxAUI_DOCKART_GRIPPER_SIZE: return m_gripper_size; - case wxAUI_DOCKART_PANE_BORDER_SIZE: return m_border_size; - case wxAUI_DOCKART_PANE_BUTTON_SIZE: return m_button_size; - case wxAUI_DOCKART_GRADIENT_TYPE: return m_gradient_type; + case wxAUI_DOCKART_SASH_SIZE: return m_sashSize; + case wxAUI_DOCKART_CAPTION_SIZE: return m_captionSize; + case wxAUI_DOCKART_GRIPPER_SIZE: return m_gripperSize; + case wxAUI_DOCKART_PANE_BORDER_SIZE: return m_borderSize; + case wxAUI_DOCKART_PANE_BUTTON_SIZE: return m_buttonSize; + case wxAUI_DOCKART_GRADIENT_TYPE: return m_gradientType; default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; } @@ -300,12 +305,12 @@ void wxAuiDefaultDockArt::SetMetric(int id, int new_val) { switch (id) { - case wxAUI_DOCKART_SASH_SIZE: m_sash_size = new_val; break; - case wxAUI_DOCKART_CAPTION_SIZE: m_caption_size = new_val; break; - case wxAUI_DOCKART_GRIPPER_SIZE: m_gripper_size = new_val; break; - case wxAUI_DOCKART_PANE_BORDER_SIZE: m_border_size = new_val; break; - case wxAUI_DOCKART_PANE_BUTTON_SIZE: m_button_size = new_val; break; - case wxAUI_DOCKART_GRADIENT_TYPE: m_gradient_type = new_val; break; + case wxAUI_DOCKART_SASH_SIZE: m_sashSize = new_val; break; + case wxAUI_DOCKART_CAPTION_SIZE: m_captionSize = new_val; break; + case wxAUI_DOCKART_GRIPPER_SIZE: m_gripperSize = new_val; break; + case wxAUI_DOCKART_PANE_BORDER_SIZE: m_borderSize = new_val; break; + case wxAUI_DOCKART_PANE_BUTTON_SIZE: m_buttonSize = new_val; break; + case wxAUI_DOCKART_GRADIENT_TYPE: m_gradientType = new_val; break; default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; } } @@ -314,16 +319,16 @@ wxColour wxAuiDefaultDockArt::GetColour(int id) { switch (id) { - case wxAUI_DOCKART_BACKGROUND_COLOUR: return m_background_brush.GetColour(); - case wxAUI_DOCKART_SASH_COLOUR: return m_sash_brush.GetColour(); - case wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR: return m_inactive_caption_colour; - case wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR: return m_inactive_caption_gradient_colour; - case wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR: return m_inactive_caption_text_colour; - case wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR: return m_active_caption_colour; - case wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR: return m_active_caption_gradient_colour; - case wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR: return m_active_caption_text_colour; - case wxAUI_DOCKART_BORDER_COLOUR: return m_border_pen.GetColour(); - case wxAUI_DOCKART_GRIPPER_COLOUR: return m_gripper_brush.GetColour(); + case wxAUI_DOCKART_BACKGROUND_COLOUR: return m_backgroundBrush.GetColour(); + case wxAUI_DOCKART_SASH_COLOUR: return m_sashBrush.GetColour(); + case wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR: return m_inactiveCaptionColour; + case wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR: return m_inactiveCaptionGradientColour; + case wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR: return m_inactiveCaptionTextColour; + case wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR: return m_activeCaptionColour; + case wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR: return m_activeCaptionGradientColour; + case wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR: return m_activeCaptionTextColour; + case wxAUI_DOCKART_BORDER_COLOUR: return m_borderPen.GetColour(); + case wxAUI_DOCKART_GRIPPER_COLOUR: return m_gripperBrush.GetColour(); default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; } @@ -334,19 +339,19 @@ void wxAuiDefaultDockArt::SetColour(int id, const wxColor& colour) { switch (id) { - case wxAUI_DOCKART_BACKGROUND_COLOUR: m_background_brush.SetColour(colour); break; - case wxAUI_DOCKART_SASH_COLOUR: m_sash_brush.SetColour(colour); break; - case wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR: m_inactive_caption_colour = colour; break; - case wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR: m_inactive_caption_gradient_colour = colour; break; - case wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR: m_inactive_caption_text_colour = colour; break; - case wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR: m_active_caption_colour = colour; break; - case wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR: m_active_caption_gradient_colour = colour; break; - case wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR: m_active_caption_text_colour = colour; break; - case wxAUI_DOCKART_BORDER_COLOUR: m_border_pen.SetColour(colour); break; + case wxAUI_DOCKART_BACKGROUND_COLOUR: m_backgroundBrush.SetColour(colour); break; + case wxAUI_DOCKART_SASH_COLOUR: m_sashBrush.SetColour(colour); break; + case wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR: m_inactiveCaptionColour = colour; break; + case wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR: m_inactiveCaptionGradientColour = colour; break; + case wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR: m_inactiveCaptionTextColour = colour; break; + case wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR: m_activeCaptionColour = colour; break; + case wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR: m_activeCaptionGradientColour = colour; break; + case wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR: m_activeCaptionTextColour = colour; break; + case wxAUI_DOCKART_BORDER_COLOUR: m_borderPen.SetColour(colour); break; case wxAUI_DOCKART_GRIPPER_COLOUR: - m_gripper_brush.SetColour(colour); - m_gripper_pen1.SetColour(colour.ChangeLightness(40)); - m_gripper_pen2.SetColour(colour.ChangeLightness(60)); + m_gripperBrush.SetColour(colour); + m_gripperPen1.SetColour(colour.ChangeLightness(40)); + m_gripperPen2.SetColour(colour.ChangeLightness(60)); break; default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; } @@ -357,13 +362,13 @@ void wxAuiDefaultDockArt::SetColour(int id, const wxColor& colour) void wxAuiDefaultDockArt::SetFont(int id, const wxFont& font) { if (id == wxAUI_DOCKART_CAPTION_FONT) - m_caption_font = font; + m_captionFont = font; } wxFont wxAuiDefaultDockArt::GetFont(int id) { if (id == wxAUI_DOCKART_CAPTION_FONT) - return m_caption_font; + return m_captionFont; return wxNullFont; } @@ -387,7 +392,7 @@ void wxAuiDefaultDockArt::DrawSash(wxDC& dc, wxWindow *window, int orientation, #elif defined(__WXGTK__) // clear out the rectangle first dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(m_sash_brush); + dc.SetBrush(m_sashBrush); dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); #if 0 @@ -396,7 +401,7 @@ void wxAuiDefaultDockArt::DrawSash(wxDC& dc, wxWindow *window, int orientation, { gdk_rect.x = rect.x; gdk_rect.y = rect.y; - gdk_rect.width = m_sash_size; + gdk_rect.width = m_sashSize; gdk_rect.height = rect.height; } else @@ -404,17 +409,17 @@ void wxAuiDefaultDockArt::DrawSash(wxDC& dc, wxWindow *window, int orientation, gdk_rect.x = rect.x; gdk_rect.y = rect.y; gdk_rect.width = rect.width; - gdk_rect.height = m_sash_size; + gdk_rect.height = m_sashSize; } #endif if (!window) return; if (!window->m_wxwindow) return; - if (!GTK_WIDGET_DRAWABLE(window->m_wxwindow)) return; + if (!gtk_widget_is_drawable(window->m_wxwindow)) return; gtk_paint_handle ( - window->m_wxwindow->style, + gtk_widget_get_style(window->m_wxwindow), window->GTKGetDrawingWindow(), // flags & wxCONTROL_CURRENT ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL, GTK_STATE_NORMAL, @@ -433,7 +438,7 @@ void wxAuiDefaultDockArt::DrawSash(wxDC& dc, wxWindow *window, int orientation, wxUnusedVar(window); wxUnusedVar(orientation); dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(m_sash_brush); + dc.SetBrush(m_sashBrush); dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); #endif } @@ -448,14 +453,14 @@ void wxAuiDefaultDockArt::DrawBackground(wxDC& dc, wxWindow *WXUNUSED(window), i dc.SetBrush(*wxWHITE_BRUSH) ; dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); #endif - dc.SetBrush(m_background_brush); + dc.SetBrush(m_backgroundBrush); dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); } void wxAuiDefaultDockArt::DrawBorder(wxDC& dc, wxWindow *WXUNUSED(window), const wxRect& _rect, wxAuiPaneInfo& pane) { - dc.SetPen(m_border_pen); + dc.SetPen(m_borderPen); dc.SetBrush(*wxTRANSPARENT_BRUSH); wxRect rect = _rect; @@ -468,7 +473,7 @@ void wxAuiDefaultDockArt::DrawBorder(wxDC& dc, wxWindow *WXUNUSED(window), const dc.SetPen(*wxWHITE_PEN); dc.DrawLine(rect.x, rect.y, rect.x+rect.width, rect.y); dc.DrawLine(rect.x, rect.y, rect.x, rect.y+rect.height); - dc.SetPen(m_border_pen); + dc.SetPen(m_borderPen); dc.DrawLine(rect.x, rect.y+rect.height-1, rect.x+rect.width, rect.y+rect.height-1); dc.DrawLine(rect.x+rect.width-1, rect.y, @@ -489,12 +494,12 @@ void wxAuiDefaultDockArt::DrawBorder(wxDC& dc, wxWindow *WXUNUSED(window), const void wxAuiDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active) { - if (m_gradient_type == wxAUI_GRADIENT_NONE) + if (m_gradientType == wxAUI_GRADIENT_NONE) { if (active) - dc.SetBrush(wxBrush(m_active_caption_colour)); + dc.SetBrush(wxBrush(m_activeCaptionColour)); else - dc.SetBrush(wxBrush(m_inactive_caption_colour)); + dc.SetBrush(wxBrush(m_inactiveCaptionColour)); dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); } @@ -505,15 +510,15 @@ void wxAuiDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bo // on mac the gradients are expected to become darker from the top #ifdef __WXMAC__ DrawGradientRectangle(dc, rect, - m_active_caption_colour, - m_active_caption_gradient_colour, - m_gradient_type); + m_activeCaptionColour, + m_activeCaptionGradientColour, + m_gradientType); #else // on other platforms, active gradients become lighter at the top DrawGradientRectangle(dc, rect, - m_active_caption_gradient_colour, - m_active_caption_colour, - m_gradient_type); + m_activeCaptionGradientColour, + m_activeCaptionColour, + m_gradientType); #endif } else @@ -521,15 +526,15 @@ void wxAuiDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bo #ifdef __WXMAC__ // on mac the gradients are expected to become darker from the top DrawGradientRectangle(dc, rect, - m_inactive_caption_gradient_colour, - m_inactive_caption_colour, - m_gradient_type); + m_inactiveCaptionGradientColour, + m_inactiveCaptionColour, + m_gradientType); #else // on other platforms, inactive gradients become lighter at the bottom DrawGradientRectangle(dc, rect, - m_inactive_caption_colour, - m_inactive_caption_gradient_colour, - m_gradient_type); + m_inactiveCaptionColour, + m_inactiveCaptionGradientColour, + m_gradientType); #endif } } @@ -542,7 +547,7 @@ void wxAuiDefaultDockArt::DrawCaption(wxDC& dc, wxWindow *WXUNUSED(window), wxAuiPaneInfo& pane) { dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetFont(m_caption_font); + dc.SetFont(m_captionFont); DrawCaptionBackground(dc, rect, (pane.state & wxAuiPaneInfo::optionActive)?true:false); @@ -556,9 +561,9 @@ void wxAuiDefaultDockArt::DrawCaption(wxDC& dc, wxWindow *WXUNUSED(window), } if (pane.state & wxAuiPaneInfo::optionActive) - dc.SetTextForeground(m_active_caption_text_colour); + dc.SetTextForeground(m_activeCaptionTextColour); else - dc.SetTextForeground(m_inactive_caption_text_colour); + dc.SetTextForeground(m_inactiveCaptionTextColour); wxCoord w,h; @@ -568,11 +573,11 @@ void wxAuiDefaultDockArt::DrawCaption(wxDC& dc, wxWindow *WXUNUSED(window), clip_rect.width -= 3; // text offset clip_rect.width -= 2; // button padding if (pane.HasCloseButton()) - clip_rect.width -= m_button_size; + clip_rect.width -= m_buttonSize; if (pane.HasPinButton()) - clip_rect.width -= m_button_size; + clip_rect.width -= m_buttonSize; if (pane.HasMaximizeButton()) - clip_rect.width -= m_button_size; + clip_rect.width -= m_buttonSize; wxString draw_text = wxAuiChopText(dc, text, clip_rect.width); @@ -595,7 +600,7 @@ void wxAuiDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *WXUNUSED(window), wxAuiPaneInfo& pane) { dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(m_gripper_brush); + dc.SetBrush(m_gripperBrush); dc.DrawRectangle(rect.x, rect.y, rect.width,rect.height); @@ -604,12 +609,12 @@ void wxAuiDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *WXUNUSED(window), int y = 5; while (1) { - dc.SetPen(m_gripper_pen1); + dc.SetPen(m_gripperPen1); dc.DrawPoint(rect.x+3, rect.y+y); - dc.SetPen(m_gripper_pen2); + dc.SetPen(m_gripperPen2); dc.DrawPoint(rect.x+3, rect.y+y+1); dc.DrawPoint(rect.x+4, rect.y+y); - dc.SetPen(m_gripper_pen3); + dc.SetPen(m_gripperPen3); dc.DrawPoint(rect.x+5, rect.y+y+1); dc.DrawPoint(rect.x+5, rect.y+y+2); dc.DrawPoint(rect.x+4, rect.y+y+2); @@ -624,12 +629,12 @@ void wxAuiDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *WXUNUSED(window), int x = 5; while (1) { - dc.SetPen(m_gripper_pen1); + dc.SetPen(m_gripperPen1); dc.DrawPoint(rect.x+x, rect.y+3); - dc.SetPen(m_gripper_pen2); + dc.SetPen(m_gripperPen2); dc.DrawPoint(rect.x+x+1, rect.y+3); dc.DrawPoint(rect.x+x, rect.y+4); - dc.SetPen(m_gripper_pen3); + dc.SetPen(m_gripperPen3); dc.DrawPoint(rect.x+x+1, rect.y+5); dc.DrawPoint(rect.x+x+2, rect.y+5); dc.DrawPoint(rect.x+x+2, rect.y+4); @@ -655,30 +660,30 @@ void wxAuiDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *WXUNUSED(window), default: case wxAUI_BUTTON_CLOSE: if (pane.state & wxAuiPaneInfo::optionActive) - bmp = m_active_close_bitmap; + bmp = m_activeCloseBitmap; else - bmp = m_inactive_close_bitmap; + bmp = m_inactiveCloseBitmap; break; case wxAUI_BUTTON_PIN: if (pane.state & wxAuiPaneInfo::optionActive) - bmp = m_active_pin_bitmap; + bmp = m_activePinBitmap; else - bmp = m_inactive_pin_bitmap; + bmp = m_inactivePinBitmap; break; case wxAUI_BUTTON_MAXIMIZE_RESTORE: if (pane.IsMaximized()) { if (pane.state & wxAuiPaneInfo::optionActive) - bmp = m_active_restore_bitmap; + bmp = m_activeRestoreBitmap; else - bmp = m_inactive_restore_bitmap; + bmp = m_inactiveRestoreBitmap; } else { if (pane.state & wxAuiPaneInfo::optionActive) - bmp = m_active_maximize_bitmap; + bmp = m_activeMaximizeBitmap; else - bmp = m_inactive_maximize_bitmap; + bmp = m_inactiveMaximizeBitmap; } break; } @@ -702,13 +707,13 @@ void wxAuiDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *WXUNUSED(window), { if (pane.state & wxAuiPaneInfo::optionActive) { - dc.SetBrush(wxBrush(m_active_caption_colour.ChangeLightness(120))); - dc.SetPen(wxPen(m_active_caption_colour.ChangeLightness(70))); + dc.SetBrush(wxBrush(m_activeCaptionColour.ChangeLightness(120))); + dc.SetPen(wxPen(m_activeCaptionColour.ChangeLightness(70))); } else { - dc.SetBrush(wxBrush(m_inactive_caption_colour.ChangeLightness(120))); - dc.SetPen(wxPen(m_inactive_caption_colour.ChangeLightness(70))); + dc.SetBrush(wxBrush(m_inactiveCaptionColour.ChangeLightness(120))); + dc.SetPen(wxPen(m_inactiveCaptionColour.ChangeLightness(70))); } // draw the background behind the button diff --git a/Externals/wxWidgets3/src/aui/floatpane.cpp b/Externals/wxWidgets3/src/aui/floatpane.cpp index f55082d56a..a4ce130fd8 100644 --- a/Externals/wxWidgets3/src/aui/floatpane.cpp +++ b/Externals/wxWidgets3/src/aui/floatpane.cpp @@ -4,7 +4,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: $Id: floatpane.cpp 64454 2010-05-31 14:59:18Z VZ $ +// RCS-ID: $Id: floatpane.cpp 69590 2011-10-30 14:20:03Z VZ $ // Copyright: (C) Copyright 2005-2006, Kirix Corporation, All Rights Reserved // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -54,17 +54,17 @@ wxAuiFloatingFrame::wxAuiFloatingFrame(wxWindow* parent, (pane.IsFixed()?0:wxRESIZE_BORDER) ) { - m_owner_mgr = owner_mgr; + m_ownerMgr = owner_mgr; m_moving = false; m_mgr.SetManagedWindow(this); - m_solid_drag = true; + m_solidDrag = true; // find out if the system supports solid window drag. // on non-msw systems, this is assumed to be the case #ifdef __WXMSW__ BOOL b = TRUE; SystemParametersInfo(38 /*SPI_GETDRAGFULLWINDOWS*/, 0, &b, 0); - m_solid_drag = b ? true : false; + m_solidDrag = b ? true : false; #endif SetExtraStyle(wxWS_EX_PROCESS_IDLE); @@ -73,9 +73,9 @@ wxAuiFloatingFrame::wxAuiFloatingFrame(wxWindow* parent, wxAuiFloatingFrame::~wxAuiFloatingFrame() { // if we do not do this, then we can crash... - if (m_owner_mgr && m_owner_mgr->m_action_window == this) + if (m_ownerMgr && m_ownerMgr->m_actionWindow == this) { - m_owner_mgr->m_action_window = NULL; + m_ownerMgr->m_actionWindow = NULL; } m_mgr.UnInit(); @@ -83,8 +83,8 @@ wxAuiFloatingFrame::~wxAuiFloatingFrame() void wxAuiFloatingFrame::SetPaneWindow(const wxAuiPaneInfo& pane) { - m_pane_window = pane.window; - m_pane_window->Reparent(this); + m_paneWindow = pane.window; + m_paneWindow->Reparent(this); wxAuiPaneInfo contained_pane = pane; contained_pane.Dock().Center().Show(). @@ -108,7 +108,7 @@ void wxAuiFloatingFrame::SetPaneWindow(const wxAuiPaneInfo& pane) SetMinSize(pane.window->GetMinSize()); - m_mgr.AddPane(m_pane_window, contained_pane); + m_mgr.AddPane(m_paneWindow, contained_pane); m_mgr.Update(); if (pane.min_size.IsFullySpecified()) @@ -123,7 +123,22 @@ void wxAuiFloatingFrame::SetPaneWindow(const wxAuiPaneInfo& pane) SetTitle(pane.caption); - if (pane.floating_size != wxDefaultSize) + // This code is slightly awkward because we need to reset wxRESIZE_BORDER + // before calling SetClientSize() below as doing it after setting the + // client size would actually change it, at least under MSW, where the + // total window size doesn't change and hence, as the borders size changes, + // the client size does change. + // + // So we must call it first but doing it generates a size event and updates + // pane.floating_size from inside it so we must also record its original + // value before doing it. + const bool hasFloatingSize = pane.floating_size != wxDefaultSize; + if (pane.IsFixed()) + { + SetWindowStyleFlag(GetWindowStyleFlag() & ~wxRESIZE_BORDER); + } + + if ( hasFloatingSize ) { SetSize(pane.floating_size); } @@ -133,54 +148,49 @@ void wxAuiFloatingFrame::SetPaneWindow(const wxAuiPaneInfo& pane) if (size == wxDefaultSize) size = pane.min_size; if (size == wxDefaultSize) - size = m_pane_window->GetSize(); - if (m_owner_mgr && pane.HasGripper()) + size = m_paneWindow->GetSize(); + if (m_ownerMgr && pane.HasGripper()) { if (pane.HasGripperTop()) - size.y += m_owner_mgr->m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); + size.y += m_ownerMgr->m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); else - size.x += m_owner_mgr->m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); + size.x += m_ownerMgr->m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); } SetClientSize(size); } - - if (pane.IsFixed()) - { - SetWindowStyleFlag(GetWindowStyleFlag() & ~wxRESIZE_BORDER); - } } wxAuiManager* wxAuiFloatingFrame::GetOwnerManager() const { - return m_owner_mgr; + return m_ownerMgr; } void wxAuiFloatingFrame::OnSize(wxSizeEvent& WXUNUSED(event)) { - if (m_owner_mgr) + if (m_ownerMgr) { - m_owner_mgr->OnFloatingPaneResized(m_pane_window, GetRect()); + m_ownerMgr->OnFloatingPaneResized(m_paneWindow, GetRect()); } } void wxAuiFloatingFrame::OnClose(wxCloseEvent& evt) { - if (m_owner_mgr) + if (m_ownerMgr) { - m_owner_mgr->OnFloatingPaneClosed(m_pane_window, evt); + m_ownerMgr->OnFloatingPaneClosed(m_paneWindow, evt); } if (!evt.GetVeto()) { - m_mgr.DetachPane(m_pane_window); + m_mgr.DetachPane(m_paneWindow); Destroy(); } } void wxAuiFloatingFrame::OnMoveEvent(wxMoveEvent& event) { - if (!m_solid_drag) + if (!m_solidDrag) { // systems without solid window dragging need to be // handled slightly differently, due to the lack of @@ -194,61 +204,70 @@ void wxAuiFloatingFrame::OnMoveEvent(wxMoveEvent& event) } - wxRect win_rect = GetRect(); + wxRect winRect = GetRect(); - if (win_rect == m_last_rect) + if (winRect == m_lastRect) return; // skip the first move event - if (m_last_rect.IsEmpty()) + if (m_lastRect.IsEmpty()) { - m_last_rect = win_rect; + m_lastRect = winRect; return; } // skip if moving too fast to avoid massive redraws and // jumping hint windows - if ((abs(win_rect.x - m_last_rect.x) > 3) || - (abs(win_rect.y - m_last_rect.y) > 3)) + if ((abs(winRect.x - m_lastRect.x) > 3) || + (abs(winRect.y - m_lastRect.y) > 3)) { - m_last3_rect = m_last2_rect; - m_last2_rect = m_last_rect; - m_last_rect = win_rect; + m_last3Rect = m_last2Rect; + m_last2Rect = m_lastRect; + m_lastRect = winRect; + + // However still update the internally stored position to avoid + // snapping back to the old one later. + if (m_ownerMgr) + { + m_ownerMgr->GetPane(m_paneWindow). + floating_pos = winRect.GetPosition(); + } + return; } // prevent frame redocking during resize - if (m_last_rect.GetSize() != win_rect.GetSize()) + if (m_lastRect.GetSize() != winRect.GetSize()) { - m_last3_rect = m_last2_rect; - m_last2_rect = m_last_rect; - m_last_rect = win_rect; + m_last3Rect = m_last2Rect; + m_last2Rect = m_lastRect; + m_lastRect = winRect; return; } wxDirection dir = wxALL; - int horiz_dist = abs(win_rect.x - m_last3_rect.x); - int vert_dist = abs(win_rect.y - m_last3_rect.y); + int horiz_dist = abs(winRect.x - m_last3Rect.x); + int vert_dist = abs(winRect.y - m_last3Rect.y); if (vert_dist >= horiz_dist) { - if (win_rect.y < m_last3_rect.y) + if (winRect.y < m_last3Rect.y) dir = wxNORTH; else dir = wxSOUTH; } else { - if (win_rect.x < m_last3_rect.x) + if (winRect.x < m_last3Rect.x) dir = wxWEST; else dir = wxEAST; } - m_last3_rect = m_last2_rect; - m_last2_rect = m_last_rect; - m_last_rect = win_rect; + m_last3Rect = m_last2Rect; + m_last2Rect = m_lastRect; + m_lastRect = winRect; if (!isMouseDown()) return; @@ -259,7 +278,7 @@ void wxAuiFloatingFrame::OnMoveEvent(wxMoveEvent& event) m_moving = true; } - if (m_last3_rect.IsEmpty()) + if (m_last3Rect.IsEmpty()) return; OnMoving(event.GetRect(), dir); @@ -284,18 +303,18 @@ void wxAuiFloatingFrame::OnIdle(wxIdleEvent& event) void wxAuiFloatingFrame::OnMoveStart() { // notify the owner manager that the pane has started to move - if (m_owner_mgr) + if (m_ownerMgr) { - m_owner_mgr->OnFloatingPaneMoveStart(m_pane_window); + m_ownerMgr->OnFloatingPaneMoveStart(m_paneWindow); } } void wxAuiFloatingFrame::OnMoving(const wxRect& WXUNUSED(window_rect), wxDirection dir) { // notify the owner manager that the pane is moving - if (m_owner_mgr) + if (m_ownerMgr) { - m_owner_mgr->OnFloatingPaneMoving(m_pane_window, dir); + m_ownerMgr->OnFloatingPaneMoving(m_paneWindow, dir); } m_lastDirection = dir; } @@ -303,17 +322,17 @@ void wxAuiFloatingFrame::OnMoving(const wxRect& WXUNUSED(window_rect), wxDirecti void wxAuiFloatingFrame::OnMoveFinished() { // notify the owner manager that the pane has finished moving - if (m_owner_mgr) + if (m_ownerMgr) { - m_owner_mgr->OnFloatingPaneMoved(m_pane_window, m_lastDirection); + m_ownerMgr->OnFloatingPaneMoved(m_paneWindow, m_lastDirection); } } void wxAuiFloatingFrame::OnActivate(wxActivateEvent& event) { - if (m_owner_mgr && event.GetActive()) + if (m_ownerMgr && event.GetActive()) { - m_owner_mgr->OnFloatingPaneActivated(m_pane_window); + m_ownerMgr->OnFloatingPaneActivated(m_paneWindow); } } diff --git a/Externals/wxWidgets3/src/aui/framemanager.cpp b/Externals/wxWidgets3/src/aui/framemanager.cpp index a44db9ccd0..1fee9e8ffa 100644 --- a/Externals/wxWidgets3/src/aui/framemanager.cpp +++ b/Externals/wxWidgets3/src/aui/framemanager.cpp @@ -4,7 +4,7 @@ // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: $Id: framemanager.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: framemanager.cpp 70807 2012-03-04 20:31:34Z VZ $ // Copyright: (C) Copyright 2005-2006, Kirix Corporation, All Rights Reserved // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -59,6 +59,7 @@ wxDEFINE_EVENT( wxEVT_AUI_PANE_BUTTON, wxAuiManagerEvent ); wxDEFINE_EVENT( wxEVT_AUI_PANE_CLOSE, wxAuiManagerEvent ); wxDEFINE_EVENT( wxEVT_AUI_PANE_MAXIMIZE, wxAuiManagerEvent ); wxDEFINE_EVENT( wxEVT_AUI_PANE_RESTORE, wxAuiManagerEvent ); +wxDEFINE_EVENT( wxEVT_AUI_PANE_ACTIVATED, wxAuiManagerEvent ); wxDEFINE_EVENT( wxEVT_AUI_RENDER, wxAuiManagerEvent ); wxDEFINE_EVENT( wxEVT_AUI_FIND_MANAGER, wxAuiManagerEvent ); @@ -98,44 +99,44 @@ public: : wxFrame(parent, id, title, pos, size, style | wxFRAME_SHAPED, name) { SetBackgroundStyle(wxBG_STYLE_CUSTOM); - m_Amount=0; - m_MaxWidth=0; - m_MaxHeight=0; + m_amount=0; + m_maxWidth=0; + m_maxHeight=0; m_lastWidth=0; m_lastHeight=0; #ifdef __WXGTK__ - m_CanSetShape = false; // have to wait for window create event on GTK + m_canSetShape = false; // have to wait for window create event on GTK #else - m_CanSetShape = true; + m_canSetShape = true; #endif - m_Region = wxRegion(0, 0, 0, 0); + m_region = wxRegion(0, 0, 0, 0); SetTransparent(0); } virtual bool SetTransparent(wxByte alpha) { - if (m_CanSetShape) + if (m_canSetShape) { int w=100; // some defaults int h=100; GetClientSize(&w, &h); - m_MaxWidth = w; - m_MaxHeight = h; - m_Amount = alpha; - m_Region.Clear(); -// m_Region.Union(0, 0, 1, m_MaxWidth); - if (m_Amount) + m_maxWidth = w; + m_maxHeight = h; + m_amount = alpha; + m_region.Clear(); +// m_region.Union(0, 0, 1, m_maxWidth); + if (m_amount) { - for (int y=0; y +#include "wx/gtk/private/gtk2-compat.h" static void gtk_pseudo_window_realized_callback( GtkWidget *m_widget, void *WXUNUSED(win) ) @@ -237,7 +239,7 @@ gtk_pseudo_window_realized_callback( GtkWidget *m_widget, void *WXUNUSED(win) ) if ((j*16+8)window, region.GetRegion(), 0, 0); + gdk_window_shape_combine_region(gtk_widget_get_window(m_widget), region.GetRegion(), 0, 0); } @@ -549,15 +551,28 @@ static void RenumberDockRows(wxAuiDockInfoPtrArray& docks) // SetActivePane() sets the active pane, as well as cycles through // every other pane and makes sure that all others' active flags // are turned off -static void SetActivePane(wxAuiPaneInfoArray& panes, wxWindow* active_pane) +void wxAuiManager::SetActivePane(wxWindow* active_pane) { int i, pane_count; - for (i = 0, pane_count = panes.GetCount(); i < pane_count; ++i) + wxAuiPaneInfo* active_paneinfo = NULL; + for (i = 0, pane_count = m_panes.GetCount(); i < pane_count; ++i) { - wxAuiPaneInfo& pane = panes.Item(i); + wxAuiPaneInfo& pane = m_panes.Item(i); pane.state &= ~wxAuiPaneInfo::optionActive; if (pane.window == active_pane) + { pane.state |= wxAuiPaneInfo::optionActive; + active_paneinfo = &pane; + } + } + + // send the 'activated' event after all panes have been updated + if ( active_paneinfo ) + { + wxAuiManagerEvent evt(wxEVT_AUI_PANE_ACTIVATED); + evt.SetManager(this); + evt.SetPane(active_paneinfo); + ProcessMgrEvent(evt); } } @@ -601,17 +616,17 @@ END_EVENT_TABLE() wxAuiManager::wxAuiManager(wxWindow* managed_wnd, unsigned int flags) { m_action = actionNone; - m_action_window = NULL; - m_last_mouse_move = wxPoint(); - m_hover_button = NULL; + m_actionWindow = NULL; + m_lastMouseMove = wxPoint(); + m_hoverButton = NULL; m_art = new wxAuiDefaultDockArt; - m_hint_wnd = NULL; + m_hintWnd = NULL; m_flags = flags; m_skipping = false; - m_has_maximized = false; + m_hasMaximized = false; m_frame = NULL; - m_dock_constraint_x = 0.3; - m_dock_constraint_y = 0.3; + m_dockConstraintX = 0.3; + m_dockConstraintY = 0.3; m_reserved = NULL; m_currentDragItem = -1; @@ -641,9 +656,9 @@ wxAuiManager::~wxAuiManager() // creates a floating frame for the windows wxAuiFloatingFrame* wxAuiManager::CreateFloatingFrame(wxWindow* parent, - const wxAuiPaneInfo& pane_info) + const wxAuiPaneInfo& paneInfo) { - return new wxAuiFloatingFrame(parent, this, pane_info); + return new wxAuiFloatingFrame(parent, this, paneInfo); } bool wxAuiManager::CanDockPanel(const wxAuiPaneInfo & WXUNUSED(p)) @@ -702,9 +717,9 @@ wxAuiDockUIPart* wxAuiManager::HitTest(int x, int y) wxAuiDockUIPart* result = NULL; int i, part_count; - for (i = 0, part_count = m_uiparts.GetCount(); i < part_count; ++i) + for (i = 0, part_count = m_uiParts.GetCount(); i < part_count; ++i) { - wxAuiDockUIPart* item = &m_uiparts.Item(i); + wxAuiDockUIPart* item = &m_uiParts.Item(i); // we are not interested in typeDock, because this space // isn't used to draw anything, just for measurements; @@ -819,39 +834,39 @@ void wxAuiManager::UpdateHintWindowConfig() } // if there is an existing hint window, delete it - if (m_hint_wnd) + if (m_hintWnd) { - m_hint_wnd->Destroy(); - m_hint_wnd = NULL; + m_hintWnd->Destroy(); + m_hintWnd = NULL; } - m_hint_fademax = 50; - m_hint_wnd = NULL; + m_hintFadeMax = 50; + m_hintWnd = NULL; if ((m_flags & wxAUI_MGR_TRANSPARENT_HINT) && can_do_transparent) { // Make a window to use for a transparent hint #if defined(__WXMSW__) || defined(__WXGTK__) - m_hint_wnd = new wxFrame(m_frame, wxID_ANY, wxEmptyString, + m_hintWnd = new wxFrame(m_frame, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(1,1), wxFRAME_TOOL_WINDOW | wxFRAME_FLOAT_ON_PARENT | wxFRAME_NO_TASKBAR | wxNO_BORDER); - m_hint_wnd->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_ACTIVECAPTION)); + m_hintWnd->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_ACTIVECAPTION)); #elif defined(__WXMAC__) // Using a miniframe with float and tool styles keeps the parent // frame activated and highlighted as such... - m_hint_wnd = new wxMiniFrame(m_frame, wxID_ANY, wxEmptyString, + m_hintWnd = new wxMiniFrame(m_frame, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(1,1), wxFRAME_FLOAT_ON_PARENT | wxFRAME_TOOL_WINDOW ); - m_hint_wnd->Connect(wxEVT_ACTIVATE, + m_hintWnd->Connect(wxEVT_ACTIVATE, wxActivateEventHandler(wxAuiManager::OnHintActivate), NULL, this); // Can't set the bg colour of a Frame in wxMac - wxPanel* p = new wxPanel(m_hint_wnd); + wxPanel* p = new wxPanel(m_hintWnd); // The default wxSYS_COLOUR_ACTIVECAPTION colour is a light silver // color that is really hard to see, especially transparent. @@ -868,7 +883,7 @@ void wxAuiManager::UpdateHintWindowConfig() { // system can't support transparent fade, or the venetian // blinds effect was explicitly requested - m_hint_wnd = new wxPseudoTransparentFrame(m_frame, + m_hintWnd = new wxPseudoTransparentFrame(m_frame, wxID_ANY, wxEmptyString, wxDefaultPosition, @@ -877,7 +892,7 @@ void wxAuiManager::UpdateHintWindowConfig() wxFRAME_FLOAT_ON_PARENT | wxFRAME_NO_TASKBAR | wxNO_BORDER); - m_hint_fademax = 128; + m_hintFadeMax = 128; } } } @@ -975,7 +990,7 @@ void wxAuiManager::SetArtProvider(wxAuiDockArt* art_provider) } -bool wxAuiManager::AddPane(wxWindow* window, const wxAuiPaneInfo& pane_info) +bool wxAuiManager::AddPane(wxWindow* window, const wxAuiPaneInfo& paneInfo) { wxASSERT_MSG(window, wxT("NULL window ptrs are not allowed")); @@ -984,24 +999,24 @@ bool wxAuiManager::AddPane(wxWindow* window, const wxAuiPaneInfo& pane_info) return false; // check if the window is already managed by us - if (GetPane(pane_info.window).IsOk()) + if (GetPane(paneInfo.window).IsOk()) return false; // check if the pane name already exists, this could reveal a // bug in the library user's application bool already_exists = false; - if (!pane_info.name.empty() && GetPane(pane_info.name).IsOk()) + if (!paneInfo.name.empty() && GetPane(paneInfo.name).IsOk()) { wxFAIL_MSG(wxT("A pane with that name already exists in the manager!")); already_exists = true; } // if the new pane is docked then we should undo maximize - if (pane_info.IsDocked()) + if (paneInfo.IsDocked()) RestoreMaximizedPane(); // special case: wxAuiToolBar style interacts with docking flags - wxAuiPaneInfo test(pane_info); + wxAuiPaneInfo test(paneInfo); wxAuiToolBar* toolbar = wxDynamicCast(window, wxAuiToolBar); if (toolbar) { @@ -1143,10 +1158,10 @@ bool wxAuiManager::AddPane(wxWindow* window, } bool wxAuiManager::AddPane(wxWindow* window, - const wxAuiPaneInfo& pane_info, + const wxAuiPaneInfo& paneInfo, const wxPoint& drop_pos) { - if (!AddPane(window, pane_info)) + if (!AddPane(window, paneInfo)) return false; wxAuiPaneInfo& pane = GetPane(window); @@ -1156,7 +1171,7 @@ bool wxAuiManager::AddPane(wxWindow* window, return true; } -bool wxAuiManager::InsertPane(wxWindow* window, const wxAuiPaneInfo& pane_info, +bool wxAuiManager::InsertPane(wxWindow* window, const wxAuiPaneInfo& paneInfo, int insert_level) { wxASSERT_MSG(window, wxT("NULL window ptrs are not allowed")); @@ -1166,21 +1181,21 @@ bool wxAuiManager::InsertPane(wxWindow* window, const wxAuiPaneInfo& pane_info, { case wxAUI_INSERT_PANE: DoInsertPane(m_panes, - pane_info.dock_direction, - pane_info.dock_layer, - pane_info.dock_row, - pane_info.dock_pos); + paneInfo.dock_direction, + paneInfo.dock_layer, + paneInfo.dock_row, + paneInfo.dock_pos); break; case wxAUI_INSERT_ROW: DoInsertDockRow(m_panes, - pane_info.dock_direction, - pane_info.dock_layer, - pane_info.dock_row); + paneInfo.dock_direction, + paneInfo.dock_layer, + paneInfo.dock_row); break; case wxAUI_INSERT_DOCK: DoInsertDockLayer(m_panes, - pane_info.dock_direction, - pane_info.dock_layer); + paneInfo.dock_direction, + paneInfo.dock_layer); break; } @@ -1189,27 +1204,27 @@ bool wxAuiManager::InsertPane(wxWindow* window, const wxAuiPaneInfo& pane_info, wxAuiPaneInfo& existing_pane = GetPane(window); if (!existing_pane.IsOk()) { - return AddPane(window, pane_info); + return AddPane(window, paneInfo); } else { - if (pane_info.IsFloating()) + if (paneInfo.IsFloating()) { existing_pane.Float(); - if (pane_info.floating_pos != wxDefaultPosition) - existing_pane.FloatingPosition(pane_info.floating_pos); - if (pane_info.floating_size != wxDefaultSize) - existing_pane.FloatingSize(pane_info.floating_size); + if (paneInfo.floating_pos != wxDefaultPosition) + existing_pane.FloatingPosition(paneInfo.floating_pos); + if (paneInfo.floating_size != wxDefaultSize) + existing_pane.FloatingSize(paneInfo.floating_size); } else { // if the new pane is docked then we should undo maximize RestoreMaximizedPane(); - existing_pane.Direction(pane_info.dock_direction); - existing_pane.Layer(pane_info.dock_layer); - existing_pane.Row(pane_info.dock_row); - existing_pane.Position(pane_info.dock_pos); + existing_pane.Direction(paneInfo.dock_direction); + existing_pane.Layer(paneInfo.dock_layer); + existing_pane.Row(paneInfo.dock_row); + existing_pane.Position(paneInfo.dock_pos); } } @@ -1241,9 +1256,9 @@ bool wxAuiManager::DetachPane(wxWindow* window) p.frame->Show(false); // reparent to m_frame and destroy the pane - if (m_action_window == p.frame) + if (m_actionWindow == p.frame) { - m_action_window = NULL; + m_actionWindow = NULL; } p.window->Reparent(m_frame); @@ -1257,12 +1272,12 @@ bool wxAuiManager::DetachPane(wxWindow* window) // the DetachPane() call. This prevets obscure crashes which would // happen at window repaint if the caller forgets to call Update() int pi, part_count; - for (pi = 0, part_count = (int)m_uiparts.GetCount(); pi < part_count; ++pi) + for (pi = 0, part_count = (int)m_uiParts.GetCount(); pi < part_count; ++pi) { - wxAuiDockUIPart& part = m_uiparts.Item(pi); + wxAuiDockUIPart& part = m_uiParts.Item(pi); if (part.pane == &p) { - m_uiparts.RemoveAt(pi); + m_uiParts.RemoveAt(pi); part_count--; pi--; continue; @@ -1277,37 +1292,37 @@ bool wxAuiManager::DetachPane(wxWindow* window) } // ClosePane() destroys or hides the pane depending on its flags -void wxAuiManager::ClosePane(wxAuiPaneInfo& pane_info) +void wxAuiManager::ClosePane(wxAuiPaneInfo& paneInfo) { // if we were maximized, restore - if (pane_info.IsMaximized()) + if (paneInfo.IsMaximized()) { - RestorePane(pane_info); + RestorePane(paneInfo); } // first, hide the window - if (pane_info.window && pane_info.window->IsShown()) + if (paneInfo.window && paneInfo.window->IsShown()) { - pane_info.window->Show(false); + paneInfo.window->Show(false); } // make sure that we are the parent of this window - if (pane_info.window && pane_info.window->GetParent() != m_frame) + if (paneInfo.window && paneInfo.window->GetParent() != m_frame) { - pane_info.window->Reparent(m_frame); + paneInfo.window->Reparent(m_frame); } // if we have a frame, destroy it - if (pane_info.frame) + if (paneInfo.frame) { - pane_info.frame->Destroy(); - pane_info.frame = NULL; + paneInfo.frame->Destroy(); + paneInfo.frame = NULL; } // now we need to either destroy or hide the pane - if (pane_info.IsDestroyOnClose()) + if (paneInfo.IsDestroyOnClose()) { - wxWindow * window = pane_info.window; + wxWindow * window = paneInfo.window; DetachPane(window); if (window) { @@ -1316,11 +1331,11 @@ void wxAuiManager::ClosePane(wxAuiPaneInfo& pane_info) } else { - pane_info.Hide(); + paneInfo.Hide(); } } -void wxAuiManager::MaximizePane(wxAuiPaneInfo& pane_info) +void wxAuiManager::MaximizePane(wxAuiPaneInfo& paneInfo) { int i, pane_count; @@ -1343,18 +1358,18 @@ void wxAuiManager::MaximizePane(wxAuiPaneInfo& pane_info) } // mark ourselves maximized - pane_info.Maximize(); - pane_info.Show(); - m_has_maximized = true; + paneInfo.Maximize(); + paneInfo.Show(); + m_hasMaximized = true; // last, show the window - if (pane_info.window && !pane_info.window->IsShown()) + if (paneInfo.window && !paneInfo.window->IsShown()) { - pane_info.window->Show(true); + paneInfo.window->Show(true); } } -void wxAuiManager::RestorePane(wxAuiPaneInfo& pane_info) +void wxAuiManager::RestorePane(wxAuiPaneInfo& paneInfo) { int i, pane_count; @@ -1370,13 +1385,13 @@ void wxAuiManager::RestorePane(wxAuiPaneInfo& pane_info) } // mark ourselves non-maximized - pane_info.Restore(); - m_has_maximized = false; + paneInfo.Restore(); + m_hasMaximized = false; // last, show the window - if (pane_info.window && !pane_info.window->IsShown()) + if (paneInfo.window && !paneInfo.window->IsShown()) { - pane_info.window->Show(true); + paneInfo.window->Show(true); } } @@ -1588,6 +1603,7 @@ bool wxAuiManager::LoadPerspective(const wxString& layout, bool update) input.Replace(wxT("\\|"), wxT("\a")); input.Replace(wxT("\\;"), wxT("\b")); + m_hasMaximized = false; while (1) { wxAuiPaneInfo pane; @@ -1630,6 +1646,9 @@ bool wxAuiManager::LoadPerspective(const wxString& layout, bool update) LoadPaneInfo(pane_part, pane); + if ( pane.IsMaximized() ) + m_hasMaximized = true; + wxAuiPaneInfo& p = GetPane(pane.name); if (!p.IsOk()) { @@ -1652,8 +1671,8 @@ void wxAuiManager::GetPanePositionsAndSizes(wxAuiDockInfo& dock, wxArrayInt& sizes) { int caption_size = m_art->GetMetric(wxAUI_DOCKART_CAPTION_SIZE); - int pane_border_size = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); - int gripper_size = m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); + int pane_borderSize = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); + int gripperSize = m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); positions.Empty(); sizes.Empty(); @@ -1683,18 +1702,18 @@ void wxAuiManager::GetPanePositionsAndSizes(wxAuiDockInfo& dock, int size = 0; if (pane.HasBorder()) - size += (pane_border_size*2); + size += (pane_borderSize*2); if (dock.IsHorizontal()) { if (pane.HasGripper() && !pane.HasGripperTop()) - size += gripper_size; + size += gripperSize; size += pane.best_size.x; } else { if (pane.HasGripper() && pane.HasGripperTop()) - size += gripper_size; + size += gripperSize; if (pane.HasCaption()) size += caption_size; @@ -1748,8 +1767,8 @@ void wxAuiManager::LayoutAddPane(wxSizer* cont, wxSizerItem* sizer_item; int caption_size = m_art->GetMetric(wxAUI_DOCKART_CAPTION_SIZE); - int gripper_size = m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); - int pane_border_size = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); + int gripperSize = m_art->GetMetric(wxAUI_DOCKART_GRIPPER_SIZE); + int pane_borderSize = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); int pane_button_size = m_art->GetMetric(wxAUI_DOCKART_PANE_BUTTON_SIZE); // find out the orientation of the item (orientation for panes @@ -1770,9 +1789,9 @@ void wxAuiManager::LayoutAddPane(wxSizer* cont, if (pane.HasGripper()) { if (pane.HasGripperTop()) - sizer_item = vert_pane_sizer ->Add(1, gripper_size, 0, wxEXPAND); + sizer_item = vert_pane_sizer ->Add(1, gripperSize, 0, wxEXPAND); else - sizer_item = horz_pane_sizer ->Add(gripper_size, 1, 0, wxEXPAND); + sizer_item = horz_pane_sizer ->Add(gripperSize, 1, 0, wxEXPAND); part.type = wxAuiDockUIPart::typeGripper; part.dock = &dock; @@ -1891,7 +1910,7 @@ void wxAuiManager::LayoutAddPane(wxSizer* cont, { // allowing space for the pane's border sizer_item = cont->Add(horz_pane_sizer, pane_proportion, - wxEXPAND | wxALL, pane_border_size); + wxEXPAND | wxALL, pane_borderSize); part.type = wxAuiDockUIPart::typePaneBorder; part.dock = &dock; @@ -1916,14 +1935,14 @@ void wxAuiManager::LayoutAddDock(wxSizer* cont, wxSizerItem* sizer_item; wxAuiDockUIPart part; - int sash_size = m_art->GetMetric(wxAUI_DOCKART_SASH_SIZE); + int sashSize = m_art->GetMetric(wxAUI_DOCKART_SASH_SIZE); int orientation = dock.IsHorizontal() ? wxHORIZONTAL : wxVERTICAL; // resizable bottom and right docks have a sash before them - if (!m_has_maximized && !dock.fixed && (dock.dock_direction == wxAUI_DOCK_BOTTOM || + if (!m_hasMaximized && !dock.fixed && (dock.dock_direction == wxAUI_DOCK_BOTTOM || dock.dock_direction == wxAUI_DOCK_RIGHT)) { - sizer_item = cont->Add(sash_size, sash_size, 0, wxEXPAND); + sizer_item = cont->Add(sashSize, sashSize, 0, wxEXPAND); part.type = wxAuiDockUIPart::typeDockSizer; part.orientation = orientation; @@ -2008,9 +2027,9 @@ void wxAuiManager::LayoutAddDock(wxSizer* cont, // if this is not the first pane being added, // we need to add a pane sizer - if (!m_has_maximized && pane_i > 0) + if (!m_hasMaximized && pane_i > 0) { - sizer_item = dock_sizer->Add(sash_size, sash_size, 0, wxEXPAND); + sizer_item = dock_sizer->Add(sashSize, sashSize, 0, wxEXPAND); part.type = wxAuiDockUIPart::typePaneSizer; part.dock = &dock; @@ -2046,12 +2065,12 @@ void wxAuiManager::LayoutAddDock(wxSizer* cont, cont->SetItemMinSize(dock_sizer, dock.size, 0); // top and left docks have a sash after them - if (!m_has_maximized && + if (!m_hasMaximized && !dock.fixed && (dock.dock_direction == wxAUI_DOCK_TOP || dock.dock_direction == wxAUI_DOCK_LEFT)) { - sizer_item = cont->Add(sash_size, sash_size, 0, wxEXPAND); + sizer_item = cont->Add(sashSize, sashSize, 0, wxEXPAND); part.type = wxAuiDockUIPart::typeDockSizer; part.dock = &dock; @@ -2071,7 +2090,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes, { wxBoxSizer* container = new wxBoxSizer(wxVERTICAL); - int pane_border_size = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); + int pane_borderSize = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); int caption_size = m_art->GetMetric(wxAUI_DOCKART_CAPTION_SIZE); wxSize cli_size = m_frame->GetClientSize(); int i, dock_count, pane_count; @@ -2185,7 +2204,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes, { if (dock.panes.Item(j)->HasBorder()) { - size += (pane_border_size*2); + size += (pane_borderSize*2); break; } } @@ -2208,8 +2227,8 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes, // new dock's size may not be more than the dock constraint // parameter specifies. See SetDockSizeConstraint() - int max_dock_x_size = (int)(m_dock_constraint_x * ((double)cli_size.x)); - int max_dock_y_size = (int)(m_dock_constraint_y * ((double)cli_size.y)); + int max_dock_x_size = (int)(m_dockConstraintX * ((double)cli_size.x)); + int max_dock_y_size = (int)(m_dockConstraintY * ((double)cli_size.y)); if (dock.IsHorizontal()) size = wxMin(size, max_dock_y_size); @@ -2251,7 +2270,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes, } if (plus_border) - dock_min_size += (pane_border_size*2); + dock_min_size += (pane_borderSize*2); if (plus_caption && dock.IsHorizontal()) dock_min_size += (caption_size); @@ -2388,7 +2407,7 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes, for (row = 0,row_count = arr.GetCount(); rowAdd(1,1, 1, wxEXPAND); @@ -2459,17 +2478,17 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes, void wxAuiManager::SetDockSizeConstraint(double width_pct, double height_pct) { - m_dock_constraint_x = wxMax(0.0, wxMin(1.0, width_pct)); - m_dock_constraint_y = wxMax(0.0, wxMin(1.0, height_pct)); + m_dockConstraintX = wxMax(0.0, wxMin(1.0, width_pct)); + m_dockConstraintY = wxMax(0.0, wxMin(1.0, height_pct)); } void wxAuiManager::GetDockSizeConstraint(double* width_pct, double* height_pct) const { if (width_pct) - *width_pct = m_dock_constraint_x; + *width_pct = m_dockConstraintX; if (height_pct) - *height_pct = m_dock_constraint_y; + *height_pct = m_dockConstraintY; } @@ -2480,8 +2499,8 @@ void wxAuiManager::GetDockSizeConstraint(double* width_pct, double* height_pct) void wxAuiManager::Update() { - m_hover_button = NULL; - m_action_part = NULL; + m_hoverButton = NULL; + m_actionPart = NULL; wxSizer* sizer; int i, pane_count = m_panes.GetCount(); @@ -2508,12 +2527,12 @@ void wxAuiManager::Update() // also gets fired. Because we may be dragging around // a pane, we need to cancel that action here to prevent // a spurious crash. - if (m_action_window == p.frame) + if (m_actionWindow == p.frame) { if (wxWindow::GetCapture() == m_frame) m_frame->ReleaseMouse(); m_action = actionNone; - m_action_window = NULL; + m_actionWindow = NULL; } // hide the frame @@ -2521,9 +2540,9 @@ void wxAuiManager::Update() p.frame->Show(false); // reparent to m_frame and destroy the pane - if (m_action_window == p.frame) + if (m_actionWindow == p.frame) { - m_action_window = NULL; + m_actionWindow = NULL; } p.window->Reparent(m_frame); @@ -2538,7 +2557,7 @@ void wxAuiManager::Update() m_frame->SetSizer(NULL); // create a layout for all of the panes - sizer = LayoutAll(m_panes, m_docks, m_uiparts, false); + sizer = LayoutAll(m_panes, m_docks, m_uiParts, false); // hide or show panes as necessary, // and float panes as necessary @@ -2691,9 +2710,9 @@ void wxAuiManager::DoFrameLayout() m_frame->Layout(); int i, part_count; - for (i = 0, part_count = m_uiparts.GetCount(); i < part_count; ++i) + for (i = 0, part_count = m_uiParts.GetCount(); i < part_count; ++i) { - wxAuiDockUIPart& part = m_uiparts.Item(i); + wxAuiDockUIPart& part = m_uiParts.Item(i); // get the rectangle of the UI part // originally, this code looked like this: @@ -2741,16 +2760,16 @@ void wxAuiManager::DoFrameLayout() wxAuiDockUIPart* wxAuiManager::GetPanePart(wxWindow* wnd) { int i, part_count; - for (i = 0, part_count = m_uiparts.GetCount(); i < part_count; ++i) + for (i = 0, part_count = m_uiParts.GetCount(); i < part_count; ++i) { - wxAuiDockUIPart& part = m_uiparts.Item(i); + wxAuiDockUIPart& part = m_uiParts.Item(i); if (part.type == wxAuiDockUIPart::typePaneBorder && part.pane && part.pane->window == wnd) return ∂ } - for (i = 0, part_count = m_uiparts.GetCount(); i < part_count; ++i) + for (i = 0, part_count = m_uiParts.GetCount(); i < part_count; ++i) { - wxAuiDockUIPart& part = m_uiparts.Item(i); + wxAuiDockUIPart& part = m_uiParts.Item(i); if (part.type == wxAuiDockUIPart::typePane && part.pane && part.pane->window == wnd) return ∂ @@ -2888,7 +2907,9 @@ bool wxAuiManager::DoDrop(wxAuiDockInfoArray& docks, if (pt.x < layer_insert_offset && - pt.x > layer_insert_offset-auiLayerInsertPixels) + pt.x > layer_insert_offset-auiLayerInsertPixels && + pt.y > 0 && + pt.y < cli_size.y) { int new_layer = wxMax(wxMax(GetMaxLayer(docks, wxAUI_DOCK_LEFT), GetMaxLayer(docks, wxAUI_DOCK_BOTTOM)), @@ -2904,7 +2925,9 @@ bool wxAuiManager::DoDrop(wxAuiDockInfoArray& docks, return ProcessDockResult(target, drop); } else if (pt.y < layer_insert_offset && - pt.y > layer_insert_offset-auiLayerInsertPixels) + pt.y > layer_insert_offset-auiLayerInsertPixels && + pt.x > 0 && + pt.x < cli_size.x) { int new_layer = wxMax(wxMax(GetMaxLayer(docks, wxAUI_DOCK_TOP), GetMaxLayer(docks, wxAUI_DOCK_LEFT)), @@ -2920,7 +2943,9 @@ bool wxAuiManager::DoDrop(wxAuiDockInfoArray& docks, return ProcessDockResult(target, drop); } else if (pt.x >= cli_size.x - layer_insert_offset && - pt.x < cli_size.x - layer_insert_offset + auiLayerInsertPixels) + pt.x < cli_size.x - layer_insert_offset + auiLayerInsertPixels && + pt.y > 0 && + pt.y < cli_size.y) { int new_layer = wxMax(wxMax(GetMaxLayer(docks, wxAUI_DOCK_RIGHT), GetMaxLayer(docks, wxAUI_DOCK_TOP)), @@ -2936,7 +2961,9 @@ bool wxAuiManager::DoDrop(wxAuiDockInfoArray& docks, return ProcessDockResult(target, drop); } else if (pt.y >= cli_size.y - layer_insert_offset && - pt.y < cli_size.y - layer_insert_offset + auiLayerInsertPixels) + pt.y < cli_size.y - layer_insert_offset + auiLayerInsertPixels && + pt.x > 0 && + pt.x < cli_size.x) { int new_layer = wxMax( wxMax( GetMaxLayer(docks, wxAUI_DOCK_BOTTOM), GetMaxLayer(docks, wxAUI_DOCK_LEFT)), @@ -2976,7 +3003,7 @@ bool wxAuiManager::DoDrop(wxAuiDockInfoArray& docks, if (!part->dock->fixed || part->dock->dock_direction == wxAUI_DOCK_CENTER || pt.x >= cli_size.x || pt.x <= 0 || pt.y >= cli_size.y || pt.y <= 0) { - if (m_last_rect.IsEmpty() || m_last_rect.Contains(pt.x, pt.y )) + if (m_lastRect.IsEmpty() || m_lastRect.Contains(pt.x, pt.y )) { m_skipping = true; } @@ -2999,8 +3026,8 @@ bool wxAuiManager::DoDrop(wxAuiDockInfoArray& docks, m_skipping = false; - m_last_rect = part->dock->rect; - m_last_rect.Inflate( 15, 15 ); + m_lastRect = part->dock->rect; + m_lastRect.Inflate( 15, 15 ); drop.Dock(). Direction(part->dock->dock_direction). @@ -3262,55 +3289,55 @@ bool wxAuiManager::DoDrop(wxAuiDockInfoArray& docks, void wxAuiManager::OnHintFadeTimer(wxTimerEvent& WXUNUSED(event)) { - if (!m_hint_wnd || m_hint_fadeamt >= m_hint_fademax) + if (!m_hintWnd || m_hintFadeAmt >= m_hintFadeMax) { - m_hint_fadetimer.Stop(); - Disconnect(m_hint_fadetimer.GetId(), wxEVT_TIMER, + m_hintFadeTimer.Stop(); + Disconnect(m_hintFadeTimer.GetId(), wxEVT_TIMER, wxTimerEventHandler(wxAuiManager::OnHintFadeTimer)); return; } - m_hint_fadeamt += 4; - m_hint_wnd->SetTransparent(m_hint_fadeamt); + m_hintFadeAmt += 4; + m_hintWnd->SetTransparent(m_hintFadeAmt); } void wxAuiManager::ShowHint(const wxRect& rect) { - if (m_hint_wnd) + if (m_hintWnd) { // if the hint rect is the same as last time, don't do anything - if (m_last_hint == rect) + if (m_lastHint == rect) return; - m_last_hint = rect; + m_lastHint = rect; - m_hint_fadeamt = m_hint_fademax; + m_hintFadeAmt = m_hintFadeMax; if ((m_flags & wxAUI_MGR_HINT_FADE) - && !((m_hint_wnd->IsKindOf(CLASSINFO(wxPseudoTransparentFrame))) && + && !((m_hintWnd->IsKindOf(CLASSINFO(wxPseudoTransparentFrame))) && (m_flags & wxAUI_MGR_NO_VENETIAN_BLINDS_FADE)) ) - m_hint_fadeamt = 0; + m_hintFadeAmt = 0; - m_hint_wnd->SetSize(rect); - m_hint_wnd->SetTransparent(m_hint_fadeamt); + m_hintWnd->SetSize(rect); + m_hintWnd->SetTransparent(m_hintFadeAmt); - if (!m_hint_wnd->IsShown()) - m_hint_wnd->Show(); + if (!m_hintWnd->IsShown()) + m_hintWnd->Show(); // if we are dragging a floating pane, set the focus // back to that floating pane (otherwise it becomes unfocused) - if (m_action == actionDragFloatingPane && m_action_window) - m_action_window->SetFocus(); + if (m_action == actionDragFloatingPane && m_actionWindow) + m_actionWindow->SetFocus(); - m_hint_wnd->Raise(); + m_hintWnd->Raise(); - if (m_hint_fadeamt != m_hint_fademax) // Only fade if we need to + if (m_hintFadeAmt != m_hintFadeMax) // Only fade if we need to { // start fade in timer - m_hint_fadetimer.SetOwner(this); - m_hint_fadetimer.Start(5); - Connect(m_hint_fadetimer.GetId(), wxEVT_TIMER, + m_hintFadeTimer.SetOwner(this); + m_hintFadeTimer.Start(5); + Connect(m_hintFadeTimer.GetId(), wxEVT_TIMER, wxTimerEventHandler(wxAuiManager::OnHintFadeTimer)); } } @@ -3319,10 +3346,10 @@ void wxAuiManager::ShowHint(const wxRect& rect) if (!(m_flags & wxAUI_MGR_RECTANGLE_HINT)) return; - if (m_last_hint != rect) + if (m_lastHint != rect) { // remove the last hint rectangle - m_last_hint = rect; + m_lastHint = rect; m_frame->Refresh(); m_frame->Update(); } @@ -3337,7 +3364,8 @@ void wxAuiManager::ShowHint(const wxRect& rect) wxAuiPaneInfo& pane = m_panes.Item(i); if (pane.IsFloating() && - pane.frame->IsShown()) + pane.frame && + pane.frame->IsShown()) { wxRect rect = pane.frame->GetRect(); #ifdef __WXGTK__ @@ -3373,26 +3401,26 @@ void wxAuiManager::ShowHint(const wxRect& rect) void wxAuiManager::HideHint() { // hides a transparent window hint, if there is one - if (m_hint_wnd) + if (m_hintWnd) { - if (m_hint_wnd->IsShown()) - m_hint_wnd->Show(false); - m_hint_wnd->SetTransparent(0); - m_hint_fadetimer.Stop(); + if (m_hintWnd->IsShown()) + m_hintWnd->Show(false); + m_hintWnd->SetTransparent(0); + m_hintFadeTimer.Stop(); // In case this is called while a hint fade is going, we need to // disconnect the event handler. - Disconnect(m_hint_fadetimer.GetId(), wxEVT_TIMER, + Disconnect(m_hintFadeTimer.GetId(), wxEVT_TIMER, wxTimerEventHandler(wxAuiManager::OnHintFadeTimer)); - m_last_hint = wxRect(); + m_lastHint = wxRect(); return; } // hides a painted hint by redrawing the frame window - if (!m_last_hint.IsEmpty()) + if (!m_lastHint.IsEmpty()) { m_frame->Refresh(); m_frame->Update(); - m_last_hint = wxRect(); + m_lastHint = wxRect(); } } @@ -3425,9 +3453,18 @@ void wxAuiManager::StartPaneDrag(wxWindow* pane_window, m_action = actionDragFloatingPane; } - m_action_window = pane_window; - m_action_offset = offset; + m_actionWindow = pane_window; + m_actionOffset = offset; m_frame->CaptureMouse(); + + if (pane.frame) + { + wxRect window_rect = pane.frame->GetRect(); + wxRect client_rect = pane.frame->GetClientRect(); + wxPoint client_pt = pane.frame->ClientToScreen(client_rect.GetTopLeft()); + wxPoint origin_pt = client_pt - window_rect.GetTopLeft(); + m_actionOffset += origin_pt; + } } @@ -3628,7 +3665,7 @@ void wxAuiManager::OnFloatingPaneMoving(wxWindow* wnd, wxDirection dir) pane = hint; m_action = actionDragToolbarPane; - m_action_window = pane.window; + m_actionWindow = pane.window; Update(); @@ -3730,7 +3767,7 @@ void wxAuiManager::OnFloatingPaneMoved(wxWindow* wnd, wxDirection dir) if (m_flags & wxAUI_MGR_TRANSPARENT_DRAG) pane.frame->SetTransparent(255); } - else if (m_has_maximized) + else if (m_hasMaximized) { RestoreMaximizedPane(); } @@ -3791,7 +3828,7 @@ void wxAuiManager::OnFloatingPaneActivated(wxWindow* wnd) { if ((GetFlags() & wxAUI_MGR_ALLOW_ACTIVE_PANE) && GetPane(wnd).IsOk()) { - SetActivePane(m_panes, wnd); + SetActivePane(wnd); Repaint(); } } @@ -3812,10 +3849,10 @@ void wxAuiManager::OnRender(wxAuiManagerEvent& evt) dc->Clear() ; #endif int i, part_count; - for (i = 0, part_count = m_uiparts.GetCount(); + for (i = 0, part_count = m_uiParts.GetCount(); i < part_count; ++i) { - wxAuiDockUIPart& part = m_uiparts.Item(i); + wxAuiDockUIPart& part = m_uiParts.Item(i); // don't draw hidden pane items or items that aren't windows if (part.sizer_item && ((!part.sizer_item->IsWindow() && !part.sizer_item->IsSpacer() && !part.sizer_item->IsSizer()) || !part.sizer_item->IsShown())) @@ -3864,7 +3901,7 @@ void wxAuiManager::Render(wxDC* dc) void wxAuiManager::Repaint(wxDC* dc) { -#ifdef __WXMAC__ +#ifdef __WXMAC__ if ( dc == NULL ) { m_frame->Refresh() ; @@ -4062,18 +4099,18 @@ void wxAuiManager::OnLeftDown(wxMouseEvent& event) return; m_action = actionResize; - m_action_part = part; - m_action_hintrect = wxRect(); - m_action_start = wxPoint(event.m_x, event.m_y); - m_action_offset = wxPoint(event.m_x - part->rect.x, + m_actionPart = part; + m_actionHintRect = wxRect(); + m_actionStart = wxPoint(event.m_x, event.m_y); + m_actionOffset = wxPoint(event.m_x - part->rect.x, event.m_y - part->rect.y); m_frame->CaptureMouse(); } else if (part->type == wxAuiDockUIPart::typePaneButton) { m_action = actionClickButton; - m_action_part = part; - m_action_start = wxPoint(event.m_x, event.m_y); + m_actionPart = part; + m_actionStart = wxPoint(event.m_x, event.m_y); m_frame->CaptureMouse(); UpdateButtonOnScreen(part, event); @@ -4104,7 +4141,7 @@ void wxAuiManager::OnLeftDown(wxMouseEvent& event) if (GetFlags() & wxAUI_MGR_ALLOW_ACTIVE_PANE) { // set the caption as active - SetActivePane(m_panes, part->pane->window); + SetActivePane(part->pane->window); Repaint(); } @@ -4112,9 +4149,9 @@ void wxAuiManager::OnLeftDown(wxMouseEvent& event) return; m_action = actionClickCaption; - m_action_part = part; - m_action_start = wxPoint(event.m_x, event.m_y); - m_action_offset = wxPoint(event.m_x - part->rect.x, + m_actionPart = part; + m_actionStart = wxPoint(event.m_x, event.m_y); + m_actionOffset = wxPoint(event.m_x - part->rect.x, event.m_y - part->rect.y); m_frame->CaptureMouse(); } @@ -4139,10 +4176,10 @@ void wxAuiManager::OnLeftDown(wxMouseEvent& event) bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) { // resize the dock or the pane - if (m_action_part && m_action_part->type==wxAuiDockUIPart::typeDockSizer) + if (m_actionPart && m_actionPart->type==wxAuiDockUIPart::typeDockSizer) { // first, we must calculate the maximum size the dock may be - int sash_size = m_art->GetMetric(wxAUI_DOCKART_SASH_SIZE); + int sashSize = m_art->GetMetric(wxAUI_DOCKART_SASH_SIZE); int used_width = 0, used_height = 0; @@ -4163,7 +4200,7 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) used_width += dock.size; } if (dock.resizable) - used_width += sash_size; + used_width += sashSize; } @@ -4186,61 +4223,61 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) } #endif - wxRect& rect = m_action_part->dock->rect; + wxRect& rect = m_actionPart->dock->rect; - wxPoint new_pos(event.m_x - m_action_offset.x, - event.m_y - m_action_offset.y); - int new_size, old_size = m_action_part->dock->size; + wxPoint new_pos(event.m_x - m_actionOffset.x, + event.m_y - m_actionOffset.y); + int new_size, old_size = m_actionPart->dock->size; - switch (m_action_part->dock->dock_direction) + switch (m_actionPart->dock->dock_direction) { case wxAUI_DOCK_LEFT: new_size = new_pos.x - rect.x; if (new_size-old_size > available_width) new_size = old_size+available_width; - m_action_part->dock->size = new_size; + m_actionPart->dock->size = new_size; break; case wxAUI_DOCK_TOP: new_size = new_pos.y - rect.y; if (new_size-old_size > available_height) new_size = old_size+available_height; - m_action_part->dock->size = new_size; + m_actionPart->dock->size = new_size; break; case wxAUI_DOCK_RIGHT: new_size = rect.x + rect.width - new_pos.x - - m_action_part->rect.GetWidth(); + m_actionPart->rect.GetWidth(); if (new_size-old_size > available_width) new_size = old_size+available_width; - m_action_part->dock->size = new_size; + m_actionPart->dock->size = new_size; break; case wxAUI_DOCK_BOTTOM: new_size = rect.y + rect.height - - new_pos.y - m_action_part->rect.GetHeight(); + new_pos.y - m_actionPart->rect.GetHeight(); if (new_size-old_size > available_height) new_size = old_size+available_height; - m_action_part->dock->size = new_size; + m_actionPart->dock->size = new_size; break; } Update(); Repaint(NULL); } - else if (m_action_part && - m_action_part->type == wxAuiDockUIPart::typePaneSizer) + else if (m_actionPart && + m_actionPart->type == wxAuiDockUIPart::typePaneSizer) { - wxAuiDockInfo& dock = *m_action_part->dock; - wxAuiPaneInfo& pane = *m_action_part->pane; + wxAuiDockInfo& dock = *m_actionPart->dock; + wxAuiPaneInfo& pane = *m_actionPart->pane; int total_proportion = 0; int dock_pixels = 0; int new_pixsize = 0; int caption_size = m_art->GetMetric(wxAUI_DOCKART_CAPTION_SIZE); - int pane_border_size = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); - int sash_size = m_art->GetMetric(wxAUI_DOCKART_SASH_SIZE); + int pane_borderSize = m_art->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE); + int sashSize = m_art->GetMetric(wxAUI_DOCKART_SASH_SIZE); - wxPoint new_pos(event.m_x - m_action_offset.x, - event.m_y - m_action_offset.y); + wxPoint new_pos(event.m_x - m_actionOffset.x, + event.m_y - m_actionOffset.y); // determine the pane rectangle by getting the pane part wxAuiDockUIPart* pane_part = GetPanePart(pane.window); @@ -4275,7 +4312,7 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) // width from the dock width, because this would // skew our proportion calculations if (i > 0) - dock_pixels -= sash_size; + dock_pixels -= sashSize; // also, the whole size (including decorations) of // all fixed panes must also be subtracted, because they @@ -4340,7 +4377,7 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) min_size = 0; if (pane.HasBorder()) - min_size += (pane_border_size*2); + min_size += (pane_borderSize*2); // calculate minimum size with decorations (border,caption) if (pane_part->orientation == wxVERTICAL) @@ -4410,10 +4447,10 @@ void wxAuiManager::OnLeftUp(wxMouseEvent& event) { // get rid of the hint rectangle wxScreenDC dc; - DrawResizeHint(dc, m_action_hintrect); + DrawResizeHint(dc, m_actionHintRect); } if (m_currentDragItem != -1 && wxAuiManager_HasLiveResize(*this)) - m_action_part = & (m_uiparts.Item(m_currentDragItem)); + m_actionPart = & (m_uiParts.Item(m_currentDragItem)); DoEndResizeAction(event); @@ -4422,21 +4459,21 @@ void wxAuiManager::OnLeftUp(wxMouseEvent& event) } else if (m_action == actionClickButton) { - m_hover_button = NULL; + m_hoverButton = NULL; m_frame->ReleaseMouse(); - if (m_action_part) + if (m_actionPart) { - UpdateButtonOnScreen(m_action_part, event); + UpdateButtonOnScreen(m_actionPart, event); // make sure we're still over the item that was originally clicked - if (m_action_part == HitTest(event.GetX(), event.GetY())) + if (m_actionPart == HitTest(event.GetX(), event.GetY())) { // fire button-click event wxAuiManagerEvent e(wxEVT_AUI_PANE_BUTTON); e.SetManager(this); - e.SetPane(m_action_part->pane); - e.SetButton(m_action_part->button->button_id); + e.SetPane(m_actionPart->pane); + e.SetButton(m_actionPart->button->button_id); ProcessMgrEvent(e); } } @@ -4453,7 +4490,7 @@ void wxAuiManager::OnLeftUp(wxMouseEvent& event) { m_frame->ReleaseMouse(); - wxAuiPaneInfo& pane = GetPane(m_action_window); + wxAuiPaneInfo& pane = GetPane(m_actionWindow); wxASSERT_MSG(pane.IsOk(), wxT("Pane window not found")); // save the new positions @@ -4481,7 +4518,7 @@ void wxAuiManager::OnLeftUp(wxMouseEvent& event) } m_action = actionNone; - m_last_mouse_move = wxPoint(); // see comment in OnMotion() + m_lastMouseMove = wxPoint(); // see comment in OnMotion() } @@ -4494,27 +4531,27 @@ void wxAuiManager::OnMotion(wxMouseEvent& event) // mouse move event is being generated. only verified on MSW wxPoint mouse_pos = event.GetPosition(); - if (m_last_mouse_move == mouse_pos) + if (m_lastMouseMove == mouse_pos) return; - m_last_mouse_move = mouse_pos; + m_lastMouseMove = mouse_pos; if (m_action == actionResize) { - // It's necessary to reset m_action_part since it destroyed + // It's necessary to reset m_actionPart since it destroyed // by the Update within DoEndResizeAction. if (m_currentDragItem != -1) - m_action_part = & (m_uiparts.Item(m_currentDragItem)); + m_actionPart = & (m_uiParts.Item(m_currentDragItem)); else - m_currentDragItem = m_uiparts.Index(* m_action_part); + m_currentDragItem = m_uiParts.Index(* m_actionPart); - if (m_action_part) + if (m_actionPart) { - wxPoint pos = m_action_part->rect.GetPosition(); - if (m_action_part->orientation == wxHORIZONTAL) - pos.y = wxMax(0, event.m_y - m_action_offset.y); + wxPoint pos = m_actionPart->rect.GetPosition(); + if (m_actionPart->orientation == wxHORIZONTAL) + pos.y = wxMax(0, event.m_y - m_actionOffset.y); else - pos.x = wxMax(0, event.m_x - m_action_offset.x); + pos.x = wxMax(0, event.m_x - m_actionOffset.x); if (wxAuiManager_HasLiveResize(*this)) { @@ -4525,22 +4562,22 @@ void wxAuiManager::OnMotion(wxMouseEvent& event) else { wxRect rect(m_frame->ClientToScreen(pos), - m_action_part->rect.GetSize()); + m_actionPart->rect.GetSize()); wxScreenDC dc; - if (!m_action_hintrect.IsEmpty()) + if (!m_actionHintRect.IsEmpty()) { // remove old resize hint - DrawResizeHint(dc, m_action_hintrect); - m_action_hintrect = wxRect(); + DrawResizeHint(dc, m_actionHintRect); + m_actionHintRect = wxRect(); } // draw new resize hint, if it's inside the managed frame - wxRect frame_screen_rect = m_frame->GetScreenRect(); - if (frame_screen_rect.Contains(rect)) + wxRect frameScreenRect = m_frame->GetScreenRect(); + if (frameScreenRect.Contains(rect)) { DrawResizeHint(dc, rect); - m_action_hintrect = rect; + m_actionHintRect = rect; } } } @@ -4553,75 +4590,84 @@ void wxAuiManager::OnMotion(wxMouseEvent& event) // caption has been clicked. we need to check if the mouse // is now being dragged. if it is, we need to change the // mouse action to 'drag' - if (m_action_part && - (abs(event.m_x - m_action_start.x) > drag_x_threshold || - abs(event.m_y - m_action_start.y) > drag_y_threshold)) + if (m_actionPart && + (abs(event.m_x - m_actionStart.x) > drag_x_threshold || + abs(event.m_y - m_actionStart.y) > drag_y_threshold)) { - wxAuiPaneInfo* pane_info = m_action_part->pane; + wxAuiPaneInfo* paneInfo = m_actionPart->pane; - if (!pane_info->IsToolbar()) + if (!paneInfo->IsToolbar()) { if ((m_flags & wxAUI_MGR_ALLOW_FLOATING) && - pane_info->IsFloatable()) + paneInfo->IsFloatable()) { m_action = actionDragFloatingPane; // set initial float position wxPoint pt = m_frame->ClientToScreen(event.GetPosition()); - pane_info->floating_pos = wxPoint(pt.x - m_action_offset.x, - pt.y - m_action_offset.y); + paneInfo->floating_pos = wxPoint(pt.x - m_actionOffset.x, + pt.y - m_actionOffset.y); // float the window - if (pane_info->IsMaximized()) - RestorePane(*pane_info); - pane_info->Float(); + if (paneInfo->IsMaximized()) + RestorePane(*paneInfo); + paneInfo->Float(); Update(); - m_action_window = pane_info->frame; + m_actionWindow = paneInfo->frame; // action offset is used here to make it feel "natural" to the user // to drag a docked pane and suddenly have it become a floating frame. // Sometimes, however, the offset where the user clicked on the docked // caption is bigger than the width of the floating frame itself, so // in that case we need to set the action offset to a sensible value - wxSize frame_size = m_action_window->GetSize(); - if (frame_size.x <= m_action_offset.x) - m_action_offset.x = 30; + wxSize frame_size = m_actionWindow->GetSize(); + if (frame_size.x <= m_actionOffset.x) + m_actionOffset.x = 30; } } else { m_action = actionDragToolbarPane; - m_action_window = pane_info->window; + m_actionWindow = paneInfo->window; } } } else if (m_action == actionDragFloatingPane) { - if (m_action_window) + if (m_actionWindow) { + // We can't move the child window so we need to get the frame that + // we want to be really moving. This is probably not the best place + // to do this but at least it fixes the bug (#13177) for now. + if (!m_actionWindow->IsKindOf(CLASSINFO(wxAuiFloatingFrame))) + { + wxAuiPaneInfo& pane = GetPane(m_actionWindow); + m_actionWindow = pane.frame; + } + wxPoint pt = m_frame->ClientToScreen(event.GetPosition()); - m_action_window->Move(pt.x - m_action_offset.x, - pt.y - m_action_offset.y); + m_actionWindow->Move(pt.x - m_actionOffset.x, + pt.y - m_actionOffset.y); } } else if (m_action == actionDragToolbarPane) { - wxAuiPaneInfo& pane = GetPane(m_action_window); + wxAuiPaneInfo& pane = GetPane(m_actionWindow); wxASSERT_MSG(pane.IsOk(), wxT("Pane window not found")); pane.SetFlag(wxAuiPaneInfo::actionPane, true); wxPoint pt = event.GetPosition(); - DoDrop(m_docks, m_panes, pane, pt, m_action_offset); + DoDrop(m_docks, m_panes, pane, pt, m_actionOffset); // if DoDrop() decided to float the pane, set up // the floating pane's initial position if (pane.IsFloating()) { wxPoint pt = m_frame->ClientToScreen(event.GetPosition()); - pane.floating_pos = wxPoint(pt.x - m_action_offset.x, - pt.y - m_action_offset.y); + pane.floating_pos = wxPoint(pt.x - m_actionOffset.x, + pt.y - m_actionOffset.y); } // this will do the actiual move operation; @@ -4637,7 +4683,7 @@ void wxAuiManager::OnMotion(wxMouseEvent& event) { pane.state &= ~wxAuiPaneInfo::actionPane; m_action = actionDragFloatingPane; - m_action_window = pane.frame; + m_actionWindow = pane.frame; } } else @@ -4645,27 +4691,27 @@ void wxAuiManager::OnMotion(wxMouseEvent& event) wxAuiDockUIPart* part = HitTest(event.GetX(), event.GetY()); if (part && part->type == wxAuiDockUIPart::typePaneButton) { - if (part != m_hover_button) + if (part != m_hoverButton) { // make the old button normal - if (m_hover_button) + if (m_hoverButton) { - UpdateButtonOnScreen(m_hover_button, event); + UpdateButtonOnScreen(m_hoverButton, event); Repaint(); } // mouse is over a button, so repaint the // button in hover mode UpdateButtonOnScreen(part, event); - m_hover_button = part; + m_hoverButton = part; } } else { - if (m_hover_button) + if (m_hoverButton) { - m_hover_button = NULL; + m_hoverButton = NULL; Repaint(); } else @@ -4678,9 +4724,9 @@ void wxAuiManager::OnMotion(wxMouseEvent& event) void wxAuiManager::OnLeaveWindow(wxMouseEvent& WXUNUSED(event)) { - if (m_hover_button) + if (m_hoverButton) { - m_hover_button = NULL; + m_hoverButton = NULL; Repaint(); } } @@ -4705,7 +4751,7 @@ void wxAuiManager::OnChildFocus(wxChildFocusEvent& event) wxAuiPaneInfo& pane = GetPane(event.GetWindow()); if (pane.IsOk() && (pane.state & wxAuiPaneInfo::optionActive) == 0) { - SetActivePane(m_panes, event.GetWindow()); + SetActivePane(event.GetWindow()); m_frame->Refresh(); } } diff --git a/Externals/wxWidgets3/src/aui/tabmdi.cpp b/Externals/wxWidgets3/src/aui/tabmdi.cpp index 152dba137a..413bfaf780 100644 --- a/Externals/wxWidgets3/src/aui/tabmdi.cpp +++ b/Externals/wxWidgets3/src/aui/tabmdi.cpp @@ -4,7 +4,7 @@ // Author: Hans Van Leemputten // Modified by: Benjamin I. Williams / Kirix Corporation // Created: 29/07/2002 -// RCS-ID: $Id: tabmdi.cpp 58227 2009-01-19 13:55:27Z VZ $ +// RCS-ID: $Id: tabmdi.cpp 70909 2012-03-15 13:49:54Z VZ $ // Copyright: (c) Hans Van Leemputten // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -56,6 +56,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxAuiMDIParentFrame, wxFrame) BEGIN_EVENT_TABLE(wxAuiMDIParentFrame, wxFrame) #if wxUSE_MENUS EVT_MENU (wxID_ANY, wxAuiMDIParentFrame::DoHandleMenu) + EVT_UPDATE_UI (wxID_ANY, wxAuiMDIParentFrame::DoHandleUpdateUI) #endif END_EVENT_TABLE() @@ -347,6 +348,35 @@ void wxAuiMDIParentFrame::DoHandleMenu(wxCommandEvent& event) event.Skip(); } } + +void wxAuiMDIParentFrame::DoHandleUpdateUI(wxUpdateUIEvent& event) +{ + switch (event.GetId()) + { + case wxWINDOWCLOSE: + case wxWINDOWCLOSEALL: + { + wxAuiMDIClientWindow* client_window = GetClientWindow(); + wxCHECK_RET(client_window, wxS("Missing MDI Client Window")); + size_t pages = client_window->GetPageCount(); + event.Enable(pages >= 1); + break; + } + + case wxWINDOWNEXT: + case wxWINDOWPREV: + { + wxAuiMDIClientWindow* client_window = GetClientWindow(); + wxCHECK_RET(client_window, wxS("Missing MDI Client Window")); + size_t pages = client_window->GetPageCount(); + event.Enable(pages >= 2); + break; + } + + default: + event.Skip(); + } +} #endif // wxUSE_MENUS void wxAuiMDIParentFrame::DoGetClientSize(int* width, int* height) const @@ -409,7 +439,7 @@ wxAuiMDIChildFrame::wxAuiMDIChildFrame(wxAuiMDIParentFrame *parent, // is, but those are the expected symantics. No style flag is passed // onto the panel underneath. if (style & wxMINIMIZE) - m_activate_on_create = false; + m_activateOnCreate = false; Create(parent, id, title, wxDefaultPosition, size, 0, name); } @@ -451,7 +481,7 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent, // see comment in constructor if (style & wxMINIMIZE) - m_activate_on_create = false; + m_activateOnCreate = false; wxSize cli_size = pClientWindow->GetClientSize(); @@ -471,7 +501,7 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent, m_title = title; - pClientWindow->AddPage(this, title, m_activate_on_create); + pClientWindow->AddPage(this, title, m_activateOnCreate); pClientWindow->Refresh(); return true; @@ -565,12 +595,12 @@ void wxAuiMDIChildFrame::SetIcons(const wxIconBundle& icons) { // get icon with the system icon size SetIcon(icons.GetIcon(-1)); - m_icon_bundle = icons; + m_iconBundle = icons; } const wxIconBundle& wxAuiMDIChildFrame::GetIcons() const { - return m_icon_bundle; + return m_iconBundle; } void wxAuiMDIChildFrame::SetIcon(const wxIcon& icon) @@ -658,7 +688,7 @@ wxAuiMDIParentFrame* wxAuiMDIChildFrame::GetMDIParentFrame() const void wxAuiMDIChildFrame::Init() { - m_activate_on_create = true; + m_activateOnCreate = true; m_pMDIParentFrame = NULL; #if wxUSE_MENUS m_pMenuBar = NULL; @@ -667,7 +697,7 @@ void wxAuiMDIChildFrame::Init() bool wxAuiMDIChildFrame::Show(bool show) { - m_activate_on_create = show; + m_activateOnCreate = show; // do nothing return true; @@ -680,7 +710,7 @@ void wxAuiMDIChildFrame::DoShow(bool show) void wxAuiMDIChildFrame::DoSetSize(int x, int y, int width, int height, int sizeFlags) { - m_mdi_newrect = wxRect(x, y, width, height); + m_mdiNewRect = wxRect(x, y, width, height); #ifdef __WXGTK__ wxPanel::DoSetSize(x,y,width, height, sizeFlags); #else @@ -690,16 +720,16 @@ void wxAuiMDIChildFrame::DoSetSize(int x, int y, int width, int height, int size void wxAuiMDIChildFrame::DoMoveWindow(int x, int y, int width, int height) { - m_mdi_newrect = wxRect(x, y, width, height); + m_mdiNewRect = wxRect(x, y, width, height); } void wxAuiMDIChildFrame::ApplyMDIChildFrameRect() { - if (m_mdi_currect != m_mdi_newrect) + if (m_mdiCurRect != m_mdiNewRect) { - wxPanel::DoMoveWindow(m_mdi_newrect.x, m_mdi_newrect.y, - m_mdi_newrect.width, m_mdi_newrect.height); - m_mdi_currect = m_mdi_newrect; + wxPanel::DoMoveWindow(m_mdiNewRect.x, m_mdiNewRect.y, + m_mdiNewRect.width, m_mdiNewRect.height); + m_mdiCurRect = m_mdiNewRect; } } @@ -725,11 +755,6 @@ wxAuiMDIClientWindow::wxAuiMDIClientWindow(wxAuiMDIParentFrame* parent, long sty CreateClient(parent, style); } -wxAuiMDIClientWindow::~wxAuiMDIClientWindow() -{ - DestroyChildren(); -} - bool wxAuiMDIClientWindow::CreateClient(wxAuiMDIParentFrame* parent, long style) { SetWindowStyleFlag(style); diff --git a/Externals/wxWidgets3/src/common/accelcmn.cpp b/Externals/wxWidgets3/src/common/accelcmn.cpp index b241d2e3a6..960c6ac7c3 100644 --- a/Externals/wxWidgets3/src/common/accelcmn.cpp +++ b/Externals/wxWidgets3/src/common/accelcmn.cpp @@ -3,7 +3,7 @@ // Purpose: implementation of platform-independent wxAcceleratorEntry parts // Author: Vadim Zeitlin // Created: 2007-05-05 -// RCS-ID: $Id: accelcmn.cpp 66592 2011-01-05 18:27:58Z PC $ +// RCS-ID: $Id: accelcmn.cpp 69853 2011-11-28 10:24:13Z SC $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -186,6 +186,8 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) accelFlags |= wxACCEL_ALT; else if ( CompareAccelString(current, wxTRANSLATE("shift")) ) accelFlags |= wxACCEL_SHIFT; + else if ( CompareAccelString(current, wxTRANSLATE("rawctrl")) ) + accelFlags |= wxACCEL_RAW_CTRL; else // not a recognized modifier name { // we may have "Ctrl-+", for example, but we still want to @@ -311,7 +313,11 @@ wxString wxAcceleratorEntry::ToString() const text += _("Ctrl+"); if ( flags & wxACCEL_SHIFT ) text += _("Shift+"); - +#if defined(__WXMAC__) || defined(__WXCOCOA__) + if ( flags & wxACCEL_RAW_CTRL ) + text += _("RawCtrl+"); +#endif + const int code = GetKeyCode(); if ( code >= WXK_F1 && code <= WXK_F12 ) @@ -342,7 +348,7 @@ wxString wxAcceleratorEntry::ToString() const // build as they're only defined for the ASCII range (or EOF) wxIsascii(code) && #endif // ANSI - wxIsalnum(code) ) + wxIsprint(code) ) { text << (wxChar)code; } diff --git a/Externals/wxWidgets3/src/common/affinematrix2d.cpp b/Externals/wxWidgets3/src/common/affinematrix2d.cpp new file mode 100644 index 0000000000..0b1b9207dc --- /dev/null +++ b/Externals/wxWidgets3/src/common/affinematrix2d.cpp @@ -0,0 +1,186 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: affinematrix2d.cpp +// Purpose: implementation of wxAffineMatrix2D +// Author: Based on wxTransformMatrix by Chris Breeze, Julian Smart +// Created: 2011-04-05 +// Copyright: (c) wxWidgets team +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_GEOMETRY + +#include "wx/affinematrix2d.h" +#include "wx/math.h" + +// sets the matrix to the respective values +void wxAffineMatrix2D::Set(const wxMatrix2D &mat2D, const wxPoint2DDouble &tr) +{ + m_11 = mat2D.m_11; + m_12 = mat2D.m_12; + m_21 = mat2D.m_21; + m_22 = mat2D.m_22; + m_tx = tr.m_x; + m_ty = tr.m_y; +} + +// gets the component valuess of the matrix +void wxAffineMatrix2D::Get(wxMatrix2D *mat2D, wxPoint2DDouble *tr) const +{ + mat2D->m_11 = m_11; + mat2D->m_12 = m_12; + mat2D->m_21 = m_21; + mat2D->m_22 = m_22; + + if ( tr ) + { + tr->m_x = m_tx; + tr->m_y = m_ty; + } +} + +// concatenates the matrix +// | t.m_11 t.m_12 0 | | m_11 m_12 0 | +// | t.m_21 t.m_22 0 | x | m_21 m_22 0 | +// | t.m_tx t.m_ty 1 | | m_tx m_ty 1 | +void wxAffineMatrix2D::Concat(const wxAffineMatrix2DBase &t) +{ + wxMatrix2D mat; + wxPoint2DDouble tr; + t.Get(&mat, &tr); + + m_tx += tr.m_x*m_11 + tr.m_y*m_21; + m_ty += tr.m_x*m_12 + tr.m_y*m_22; + wxDouble e11 = mat.m_11*m_11 + mat.m_12*m_21; + wxDouble e12 = mat.m_11*m_12 + mat.m_12*m_22; + wxDouble e21 = mat.m_21*m_11 + mat.m_22*m_21; + m_22 = mat.m_21*m_12 + mat.m_22*m_22; + m_11 = e11; + m_12 = e12; + m_21 = e21; +} + +// makes this its inverse matrix. +// Invert +// | m_11 m_12 0 | +// | m_21 m_22 0 | +// | m_tx m_ty 1 | +bool wxAffineMatrix2D::Invert() +{ + const wxDouble det = m_11*m_22 - m_12*m_21; + + if ( !det ) + return false; + + wxDouble ex = (m_21*m_ty - m_22*m_tx) / det; + m_ty = (-m_11*m_ty + m_12*m_tx) / det; + m_tx = ex; + wxDouble e11 = m_22 / det; + m_12 = -m_12 / det; + m_21 = -m_21 / det; + m_22 = m_11 / det; + m_11 = e11; + + return true; +} + +// returns true if the elements of the transformation matrix are equal +bool wxAffineMatrix2D::IsEqual(const wxAffineMatrix2DBase& t) const +{ + wxMatrix2D mat; + wxPoint2DDouble tr; + t.Get(&mat, &tr); + + return m_11 == mat.m_11 && m_12 == mat.m_12 && + m_21 == mat.m_21 && m_22 == mat.m_22 && + m_tx == tr.m_x && m_ty == tr.m_y; +} + +// +// transformations +// + +// add the translation to this matrix +// | 1 0 0 | | m_11 m_12 0 | +// | 0 1 0 | x | m_21 m_22 0 | +// | dx dy 1 | | m_tx m_ty 1 | +void wxAffineMatrix2D::Translate(wxDouble dx, wxDouble dy) +{ + m_tx += m_11 * dx + m_21 * dy; + m_ty += m_12 * dx + m_22 * dy; +} + +// add the scale to this matrix +// | xScale 0 0 | | m_11 m_12 0 | +// | 0 yScale 0 | x | m_21 m_22 0 | +// | 0 0 1 | | m_tx m_ty 1 | +void wxAffineMatrix2D::Scale(wxDouble xScale, wxDouble yScale) +{ + m_11 *= xScale; + m_12 *= xScale; + m_21 *= yScale; + m_22 *= yScale; +} + +// add the rotation to this matrix (counter clockwise, radians) +// | cos -sin 0 | | m_11 m_12 0 | +// | sin cos 0 | x | m_21 m_22 0 | +// | 0 0 1 | | m_tx m_ty 1 | +void wxAffineMatrix2D::Rotate(wxDouble ccRadians) +{ + wxDouble c = cos(ccRadians); + wxDouble s = sin(ccRadians); + + wxDouble e11 = c*m_11 - s*m_21; + wxDouble e12 = c*m_12 - s*m_22; + m_21 = s*m_11 + c*m_21; + m_22 = s*m_12 + c*m_22; + m_11 = e11; + m_12 = e12; +} + +// +// apply the transforms +// + +// applies that matrix to the point +// | m_11 m_12 0 | +// | src.m_x src._my 1 | x | m_21 m_22 0 | +// | m_tx m_ty 1 | +wxPoint2DDouble +wxAffineMatrix2D::DoTransformPoint(const wxPoint2DDouble& src) const +{ + if ( IsIdentity() ) + return src; + + return wxPoint2DDouble(src.m_x * m_11 + src.m_y * m_21 + m_tx, + src.m_y * m_12 + src.m_y * m_22 + m_ty); +} + +// applies the matrix except for translations +// | m_11 m_12 0 | +// | src.m_x src._my 0 | x | m_21 m_22 0 | +// | m_tx m_ty 1 | +wxPoint2DDouble +wxAffineMatrix2D::DoTransformDistance(const wxPoint2DDouble& src) const +{ + if ( IsIdentity() ) + return src; + + return wxPoint2DDouble(src.m_x * m_11 + src.m_y * m_21, + src.m_y * m_12 + src.m_y * m_22); +} + +bool wxAffineMatrix2D::IsIdentity() const +{ + return m_11 == 1 && m_12 == 0 && + m_21 == 0 && m_22 == 1 && + m_tx == 0 && m_ty == 0; +} + +#endif // wxUSE_GEOMETRY diff --git a/Externals/wxWidgets3/src/common/anidecod.cpp b/Externals/wxWidgets3/src/common/anidecod.cpp index 917a048b7d..841d4d7483 100644 --- a/Externals/wxWidgets3/src/common/anidecod.cpp +++ b/Externals/wxWidgets3/src/common/anidecod.cpp @@ -2,7 +2,7 @@ // Name: src/common/anidecod.cpp // Purpose: wxANIDecoder, ANI reader for wxImage and wxAnimation // Author: Francesco Montorsi -// RCS-ID: $Id: anidecod.cpp 60852 2009-06-01 11:43:36Z FM $ +// RCS-ID: $Id: anidecod.cpp 67708 2011-05-05 23:52:07Z DS $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -127,6 +127,11 @@ bool wxANIDecoder::DoCanRead(wxInputStream& stream) const wxInt32 anih32; memcpy( &anih32, "anih", 4 ); + if ( stream.IsSeekable() && stream.SeekI(0) == wxInvalidOffset ) + { + return false; + } + if ( !stream.Read(&FCC1, 4) ) return false; @@ -220,6 +225,11 @@ bool wxANIDecoder::Load( wxInputStream& stream ) wxInt32 seq32; memcpy( &seq32, "seq ", 4 ); + if ( stream.IsSeekable() && stream.SeekI(0) == wxInvalidOffset ) + { + return false; + } + if ( !stream.Read(&FCC1, 4) ) return false; if ( FCC1 != riff32 ) diff --git a/Externals/wxWidgets3/src/common/appbase.cpp b/Externals/wxWidgets3/src/common/appbase.cpp index a5c65bcd2f..8cdf4e26fe 100644 --- a/Externals/wxWidgets3/src/common/appbase.cpp +++ b/Externals/wxWidgets3/src/common/appbase.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.06.2003 (extracted from common/appcmn.cpp) -// RCS-ID: $Id: appbase.cpp 66229 2010-11-22 01:22:56Z VZ $ +// RCS-ID: $Id: appbase.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -25,7 +25,7 @@ #endif #ifndef WX_PRECOMP - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" // includes windows.h for MessageBox() #endif #include "wx/list.h" @@ -52,13 +52,11 @@ #include #endif -#ifndef __WXPALMOS5__ -#if !defined(__WXMSW__) || defined(__WXMICROWIN__) +#if !defined(__WINDOWS__) || defined(__WXMICROWIN__) #include // for SIGTRAP used by wxTrap() #endif //Win/Unix #include -#endif // ! __WXPALMOS5__ #if wxUSE_FONTMAP #include "wx/fontmap.h" @@ -67,7 +65,7 @@ #if wxDEBUG_LEVEL #if wxUSE_STACKWALKER #include "wx/stackwalk.h" - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #include "wx/msw/debughlp.h" #endif #endif // wxUSE_STACKWALKER @@ -150,10 +148,14 @@ wxAppConsoleBase::wxAppConsoleBase() wxDELETE(m_traits); #endif #endif + + wxEvtHandler::AddFilter(this); } wxAppConsoleBase::~wxAppConsoleBase() { + wxEvtHandler::RemoveFilter(this); + // we're being destroyed and using this object from now on may not work or // even crash so don't leave dangling pointers to it ms_appInstance = NULL; @@ -177,7 +179,6 @@ bool wxAppConsoleBase::Initialize(int& WXUNUSED(argc), wxChar **WXUNUSED(argv)) wxString wxAppConsoleBase::GetAppName() const { wxString name = m_appName; -#ifndef __WXPALMOS__ if ( name.empty() ) { if ( argv ) @@ -186,7 +187,6 @@ wxString wxAppConsoleBase::GetAppName() const wxFileName::SplitPath(argv[0], NULL, &name, NULL); } } -#endif // !__WXPALMOS__ return name; } @@ -345,8 +345,11 @@ bool wxAppConsoleBase::Dispatch() bool wxAppConsoleBase::Yield(bool onlyIfNeeded) { wxEventLoopBase * const loop = wxEventLoopBase::GetActive(); + if ( loop ) + return loop->Yield(onlyIfNeeded); - return loop && loop->Yield(onlyIfNeeded); + wxScopedPtr tmpLoop(CreateMainLoop()); + return tmpLoop->Yield(onlyIfNeeded); } void wxAppConsoleBase::WakeUpIdle() @@ -398,7 +401,7 @@ bool wxAppConsoleBase::IsMainLoopRunning() int wxAppConsoleBase::FilterEvent(wxEvent& WXUNUSED(event)) { // process the events normally by default - return -1; + return Event_Skip; } void wxAppConsoleBase::DelayPendingEventHandler(wxEvtHandler* toDelay) @@ -893,12 +896,12 @@ wxString wxAppTraitsBase::GetAssertStackTrace() { #if wxDEBUG_LEVEL -#if !defined(__WXMSW__) +#if !defined(__WINDOWS__) // on Unix stack frame generation may take some time, depending on the // size of the executable mainly... warn the user that we are working wxFprintf(stderr, "Collecting stack trace information, please wait..."); fflush(stderr); -#endif // !__WXMSW__ +#endif // !__WINDOWS__ wxString stackTrace; @@ -999,12 +1002,21 @@ bool wxAssertIsEqual(int x, int y) return x == y; } +void wxAbort() +{ +#ifdef __WXWINCE__ + ExitThread(3); +#else + abort(); +#endif +} + #if wxDEBUG_LEVEL // break into the debugger void wxTrap() { -#if defined(__WXMSW__) && !defined(__WXMICROWIN__) +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) DebugBreak(); #elif defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS Debugger(); @@ -1025,7 +1037,7 @@ wxDefaultAssertHandler(const wxString& file, { // If this option is set, we should abort immediately when assert happens. if ( wxSystemOptions::GetOptionInt("exit-on-assert") ) - abort(); + wxAbort(); // FIXME MT-unsafe static int s_bInAssert = 0; @@ -1167,8 +1179,8 @@ static void LINKAGEMODE SetTraceMasks() static bool DoShowAssertDialog(const wxString& msg) { - // under MSW we can show the dialog even in the console mode -#if defined(__WXMSW__) && !defined(__WXMICROWIN__) + // under Windows we can show the dialog even in the console mode +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) wxString msgDlg(msg); // this message is intentionally not translated -- it is for developers @@ -1191,9 +1203,9 @@ bool DoShowAssertDialog(const wxString& msg) //case IDNO: nothing to do } -#else // !__WXMSW__ +#else // !__WINDOWS__ wxUnusedVar(msg); -#endif // __WXMSW__/!__WXMSW__ +#endif // __WINDOWS__/!__WINDOWS__ // continue with the asserts by default return false; diff --git a/Externals/wxWidgets3/src/common/appcmn.cpp b/Externals/wxWidgets3/src/common/appcmn.cpp index bad98c12b0..6c7129139a 100644 --- a/Externals/wxWidgets3/src/common/appcmn.cpp +++ b/Externals/wxWidgets3/src/common/appcmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 18.10.99 -// RCS-ID: $Id: appcmn.cpp 66648 2011-01-08 06:42:41Z PC $ +// RCS-ID: $Id: appcmn.cpp 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -196,10 +196,10 @@ void wxAppBase::OnInitCmdLine(wxCmdLineParser& parser) }, #endif // __WXUNIVERSAL__ -#if defined(__WXMGL__) - // VS: this is not specific to wxMGL, all fullscreen (framebuffer) ports +#if defined(__WXDFB__) + // VS: this is not specific to wxDFB, all fullscreen (framebuffer) ports // should provide this option. That's why it is in common/appcmn.cpp - // and not mgl/app.cpp + // and not dfb/app.cpp { wxCMD_LINE_OPTION, NULL, @@ -208,7 +208,7 @@ void wxAppBase::OnInitCmdLine(wxCmdLineParser& parser) wxCMD_LINE_VAL_STRING, 0x0 }, -#endif // __WXMGL__ +#endif // __WXDFB__ // terminator wxCMD_LINE_DESC_END @@ -236,7 +236,7 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) } #endif // __WXUNIVERSAL__ -#if defined(__WXMGL__) +#if defined(__WXDFB__) wxString modeDesc; if ( parser.Found(OPTION_MODE, &modeDesc) ) { @@ -250,7 +250,7 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) if ( !SetDisplayMode(wxVideoMode(w, h, bpp)) ) return false; } -#endif // __WXMGL__ +#endif // __WXDFB__ return wxAppConsole::OnCmdLineParsed(parser); } @@ -349,7 +349,10 @@ bool wxAppBase::ProcessIdle() while (node) { wxWindow* win = node->GetData(); - if (win->SendIdleEvents(event)) + + // Don't send idle events to the windows that are about to be destroyed + // anyhow, this is wasteful and unexpected. + if ( !wxPendingDelete.Member(win) && win->SendIdleEvents(event) ) needMore = true; node = node->GetNext(); } diff --git a/Externals/wxWidgets3/src/common/arrstr.cpp b/Externals/wxWidgets3/src/common/arrstr.cpp index 9e9da5f35e..c186bb0da2 100644 --- a/Externals/wxWidgets3/src/common/arrstr.cpp +++ b/Externals/wxWidgets3/src/common/arrstr.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: arrstr.cpp 61947 2009-09-16 23:18:48Z VZ $ +// RCS-ID: $Id: arrstr.cpp 67343 2011-03-30 14:16:04Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -33,7 +33,7 @@ wxArrayString::wxArrayString(size_t sz, const char** a) { -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS Init(false); #endif for (size_t i=0; i < sz; i++) @@ -42,7 +42,7 @@ wxArrayString::wxArrayString(size_t sz, const char** a) wxArrayString::wxArrayString(size_t sz, const wchar_t** a) { -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS Init(false); #endif for (size_t i=0; i < sz; i++) @@ -51,14 +51,14 @@ wxArrayString::wxArrayString(size_t sz, const wchar_t** a) wxArrayString::wxArrayString(size_t sz, const wxString* a) { -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS Init(false); #endif for (size_t i=0; i < sz; i++) Add(a[i]); } -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS // size increment = min(50% of current size, ARRAY_MAXSIZE_INCREMENT) #define ARRAY_MAXSIZE_INCREMENT 4096 @@ -462,7 +462,7 @@ bool wxArrayString::operator==(const wxArrayString& a) const return true; } -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS // =========================================================================== // wxJoin and wxSplit diff --git a/Externals/wxWidgets3/src/common/artprov.cpp b/Externals/wxWidgets3/src/common/artprov.cpp index c56761f3bb..5377d3e560 100644 --- a/Externals/wxWidgets3/src/common/artprov.cpp +++ b/Externals/wxWidgets3/src/common/artprov.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 18/03/2002 -// RCS-ID: $Id: artprov.cpp 66506 2010-12-31 17:39:37Z VZ $ +// RCS-ID: $Id: artprov.cpp 70154 2011-12-28 13:51:29Z VZ $ // Copyright: (c) Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -231,12 +231,12 @@ wxArtProvider::~wxArtProvider() node; node = node->GetNext()) { bmp = node->GetData()->CreateBitmap(id, client, size); - if ( bmp.Ok() ) + if ( bmp.IsOk() ) break; } wxSize sizeNeeded = size; - if ( !bmp.Ok() ) + if ( !bmp.IsOk() ) { // no bitmap created -- as a fallback, try if we can find desired // icon in a bundle @@ -407,7 +407,7 @@ bool wxArtProvider::HasNativeProvider() /* static */ void wxArtProvider::InsertProvider(wxArtProvider *provider) { - Insert(provider); + PushBack(provider); } /* static */ bool wxArtProvider::PopProvider() @@ -440,13 +440,16 @@ class wxArtProviderModule: public wxModule public: bool OnInit() { -#if wxUSE_ARTPROVIDER_STD - wxArtProvider::InitStdProvider(); -#endif // wxUSE_ARTPROVIDER_STD + // The order here is such that the native provider will be used first + // and the standard one last as all these default providers add + // themselves to the bottom of the stack. + wxArtProvider::InitNativeProvider(); #if wxUSE_ARTPROVIDER_TANGO wxArtProvider::InitTangoProvider(); #endif // wxUSE_ARTPROVIDER_TANGO - wxArtProvider::InitNativeProvider(); +#if wxUSE_ARTPROVIDER_STD + wxArtProvider::InitStdProvider(); +#endif // wxUSE_ARTPROVIDER_STD return true; } void OnExit() diff --git a/Externals/wxWidgets3/src/common/artstd.cpp b/Externals/wxWidgets3/src/common/artstd.cpp index 5a86d0523f..fe65503986 100644 --- a/Externals/wxWidgets3/src/common/artstd.cpp +++ b/Externals/wxWidgets3/src/common/artstd.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 18/03/2002 -// RCS-ID: $Id: artstd.cpp 66506 2010-12-31 17:39:37Z VZ $ +// RCS-ID: $Id: artstd.cpp 70893 2012-03-13 17:23:58Z JS $ // Copyright: (c) Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -45,7 +45,7 @@ protected: /*static*/ void wxArtProvider::InitStdProvider() { - wxArtProvider::Push(new wxDefaultArtProvider); + wxArtProvider::PushBack(new wxDefaultArtProvider); } // ---------------------------------------------------------------------------- @@ -207,7 +207,7 @@ wxBitmap wxDefaultArtProvider::CreateBitmap(const wxArtID& id, wxBitmap bmp = wxDefaultArtProvider_CreateBitmap(id); #if wxUSE_IMAGE && (!defined(__WXMSW__) || wxUSE_WXDIB) - if (bmp.Ok()) + if (bmp.IsOk()) { // fit into transparent image with desired size hint from the client if (reqSize == wxDefaultSize) @@ -219,7 +219,12 @@ wxBitmap wxDefaultArtProvider::CreateBitmap(const wxArtID& id, int bmp_w = bmp.GetWidth(); int bmp_h = bmp.GetHeight(); - if ((bmp_h < bestSize.x) && (bmp_w < bestSize.y)) + if (bmp_w == 16 && bmp_h == 15 && bestSize == wxSize(16, 16)) + { + // Do nothing in this special but quite common case, because scaling + // with only a pixel difference will look horrible. + } + else if ((bmp_h < bestSize.x) && (bmp_w < bestSize.y)) { // the caller wants default size, which is larger than // the image we have; to avoid degrading it visually by diff --git a/Externals/wxWidgets3/src/common/arttango.cpp b/Externals/wxWidgets3/src/common/arttango.cpp index 1bf02bd9ff..ae01e9e85a 100644 --- a/Externals/wxWidgets3/src/common/arttango.cpp +++ b/Externals/wxWidgets3/src/common/arttango.cpp @@ -3,7 +3,7 @@ // Purpose: art provider using embedded PNG versions of Tango icons // Author: Vadim Zeitlin // Created: 2010-12-27 -// RCS-ID: $Id: arttango.cpp 66510 2010-12-31 19:38:49Z VZ $ +// RCS-ID: $Id: arttango.cpp 70154 2011-12-28 13:51:29Z VZ $ // Copyright: (c) 2010 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -322,7 +322,7 @@ wxTangoArtProvider::CreateBitmap(const wxArtID& id, /* static */ void wxArtProvider::InitTangoProvider() { - wxArtProvider::Push(new wxTangoArtProvider); + wxArtProvider::PushBack(new wxTangoArtProvider); } #endif // wxUSE_ARTPROVIDER_TANGO diff --git a/Externals/wxWidgets3/src/common/bmpbase.cpp b/Externals/wxWidgets3/src/common/bmpbase.cpp index 60e1ea50c8..403470fe29 100644 --- a/Externals/wxWidgets3/src/common/bmpbase.cpp +++ b/Externals/wxWidgets3/src/common/bmpbase.cpp @@ -3,7 +3,7 @@ // Purpose: wxBitmapBase // Author: VaclavSlavik // Created: 2001/04/11 -// RCS-ID: $Id: bmpbase.cpp 66630 2011-01-07 17:49:18Z SC $ +// RCS-ID: $Id: bmpbase.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2001, Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -156,7 +156,7 @@ wxBitmap::wxBitmap(const char* const* bits) #if wxUSE_IMAGE && wxUSE_XPM wxImage image(bits); - wxCHECK2_MSG(image.Ok(), return, wxT("invalid bitmap data")); + wxCHECK2_MSG(image.IsOk(), return, wxT("invalid bitmap data")); *this = wxBitmap(image); #else diff --git a/Externals/wxWidgets3/src/common/bookctrl.cpp b/Externals/wxWidgets3/src/common/bookctrl.cpp index 7cc2bceea5..c722822df5 100644 --- a/Externals/wxWidgets3/src/common/bookctrl.cpp +++ b/Externals/wxWidgets3/src/common/bookctrl.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 19.08.03 -// RCS-ID: $Id: bookctrl.cpp 65967 2010-10-31 13:33:34Z VZ $ +// RCS-ID: $Id: bookctrl.cpp 70153 2011-12-28 13:51:25Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -55,8 +55,6 @@ void wxBookCtrlBase::Init() { m_selection = wxNOT_FOUND; m_bookctrl = NULL; - m_imageList = NULL; - m_ownsImageList = false; m_fitToCurrentPage = false; #if defined(__WXWINCE__) @@ -89,39 +87,6 @@ wxBookCtrlBase::Create(wxWindow *parent, ); } -wxBookCtrlBase::~wxBookCtrlBase() -{ - if ( m_ownsImageList ) - { - // may be NULL, ok - delete m_imageList; - } -} - -// ---------------------------------------------------------------------------- -// image list -// ---------------------------------------------------------------------------- - -void wxBookCtrlBase::SetImageList(wxImageList *imageList) -{ - if ( m_ownsImageList ) - { - // may be NULL, ok - delete m_imageList; - - m_ownsImageList = false; - } - - m_imageList = imageList; -} - -void wxBookCtrlBase::AssignImageList(wxImageList* imageList) -{ - SetImageList(imageList); - - m_ownsImageList = true; -} - // ---------------------------------------------------------------------------- // geometry // ---------------------------------------------------------------------------- @@ -140,8 +105,13 @@ void wxBookCtrlBase::DoInvalidateBestSize() wxSize wxBookCtrlBase::CalcSizeFromPage(const wxSize& sizePage) const { - // we need to add the size of the choice control and the border between - const wxSize sizeController = GetControllerSize(); + // We need to add the size of the controller and the border between if it's + // shown. Notice that we don't use GetControllerSize() here as it returns + // the actual size while we want the best size here. + if ( !m_bookctrl || !m_bookctrl->IsShown() ) + return sizePage; + + const wxSize sizeController = m_bookctrl->GetBestSize(); wxSize size = sizePage; if ( IsVertical() ) diff --git a/Externals/wxWidgets3/src/common/btncmn.cpp b/Externals/wxWidgets3/src/common/btncmn.cpp index f8e14d750b..e59d7118ac 100644 --- a/Externals/wxWidgets3/src/common/btncmn.cpp +++ b/Externals/wxWidgets3/src/common/btncmn.cpp @@ -3,7 +3,7 @@ // Purpose: implementation of wxButtonBase // Author: Vadim Zeitlin // Created: 2007-04-08 -// RCS-ID: $Id: btncmn.cpp 66592 2011-01-05 18:27:58Z PC $ +// RCS-ID: $Id: btncmn.cpp 67931 2011-06-14 13:00:42Z VZ $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -107,7 +107,7 @@ wxWindow *wxButtonBase::SetDefault() return tlw->SetDefaultItem(this); } -void wxButtonBase::SetBitmapPosition(wxDirection dir) +void wxAnyButtonBase::SetBitmapPosition(wxDirection dir) { wxASSERT_MSG( !(dir & ~wxDIRECTION_MASK), "non-direction flag used" ); wxASSERT_MSG( !!(dir & wxLEFT) + diff --git a/Externals/wxWidgets3/src/common/cairo.cpp b/Externals/wxWidgets3/src/common/cairo.cpp index 724c816bce..7425bf2afa 100644 --- a/Externals/wxWidgets3/src/common/cairo.cpp +++ b/Externals/wxWidgets3/src/common/cairo.cpp @@ -3,7 +3,7 @@ // Purpose: Cairo library // Author: Anthony Betaudeau // Created: 2007-08-25 -// RCS-ID: $Id: cairo.cpp 65561 2010-09-17 11:17:55Z DS $ +// RCS-ID: $Id: cairo.cpp 69486 2011-10-20 04:58:00Z RD $ // Copyright: (c) Anthony Bretaudeau // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,31 +16,299 @@ #pragma hdrstop #endif +// keep cairo.h from defining dllimport as we're defining the symbols inside +// the wx dll in order to load them dynamically. +#define cairo_public + #include "wx/cairo.h" +#include "wx/dynlib.h" #if wxUSE_CAIRO +#ifdef __WXMAC__ +#include "wx/osx/private.h" +#include +#endif + #ifndef WX_PRECOMP #include "wx/module.h" #include "wx/log.h" #endif +#define wxCAIRO_METHOD_TYPE(name) \ + wxCairo##name##_t + +#define wxCAIRO_STATIC_METHOD_DEFINE(rettype, name, args, argnames, defret) \ + static wxCAIRO_METHOD_TYPE(name) name; -wxCairoLibrary *wxCairoLibrary::ms_lib = NULL; +#define wxCAIRO_STATIC_VOIDMETHOD_DEFINE(name, args, argnames) \ + wxCAIRO_STATIC_METHOD_DEFINE(void, name, args, argnames, NULL) + +#define wxFOR_ALL_CAIRO_VOIDMETHODS(m) \ + m( cairo_append_path, \ + (cairo_t *cr, const cairo_path_t *path), (cr, path) ) \ + m( cairo_arc, \ + (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2), (cr, xc, yc, radius, angle1, angle2) ) \ + m( cairo_arc_negative, \ + (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2), (cr, xc, yc, radius, angle1, angle2) ) \ + m( cairo_clip, \ + (cairo_t *cr), (cr) ) \ + m( cairo_close_path, \ + (cairo_t *cr), (cr) ) \ + m( cairo_curve_to, \ + (cairo_t *cr, double x1, double y1, double x2, double y2, double x3, double y3), (cr, x1, y1, x2, y2, x3, y3) ) \ + m( cairo_destroy, \ + (cairo_t *cr), (cr) ) \ + m( cairo_fill, \ + (cairo_t *cr), (cr) ) \ + m( cairo_fill_preserve, \ + (cairo_t *cr), (cr) ) \ + m( cairo_font_extents, \ + (cairo_t *cr, cairo_font_extents_t *extents), (cr, extents) ) \ + m( cairo_font_face_destroy, \ + (cairo_font_face_t *font_face), (font_face) ) \ + m( cairo_get_current_point, \ + (cairo_t *cr, double *x, double *y), (cr, x, y) ) \ + m( cairo_get_matrix, \ + (cairo_t *cr, cairo_matrix_t *matrix), (cr, matrix) ) \ + m( cairo_line_to, \ + (cairo_t *cr, double x, double y), (cr, x, y) ) \ + m( cairo_matrix_init, \ + (cairo_matrix_t *matrix, double xx, double yx, double xy, double yy, double x0, double y0), (matrix, xx, yx, xy, yy, x0, y0) ) \ + m( cairo_matrix_multiply, \ + (cairo_matrix_t *result, const cairo_matrix_t *a, const cairo_matrix_t *b), (result, a, b) ) \ + m( cairo_matrix_rotate, \ + (cairo_matrix_t *matrix, double radians), (matrix, radians) ) \ + m( cairo_matrix_scale, \ + (cairo_matrix_t *matrix, double sx, double sy), (matrix, sx, sy) ) \ + m( cairo_matrix_transform_distance, \ + (const cairo_matrix_t *matrix, double *dx, double *dy), (matrix, dx, dy) ) \ + m( cairo_matrix_transform_point, \ + (const cairo_matrix_t *matrix, double *x, double *y), (matrix, x, y) ) \ + m( cairo_matrix_translate, \ + (cairo_matrix_t *matrix, double tx, double ty), (matrix, tx, ty) ) \ + m( cairo_move_to, \ + (cairo_t *cr, double x, double y), (cr, x, y) ) \ + m( cairo_new_path, \ + (cairo_t *cr), (cr) ) \ + m( cairo_paint, \ + (cairo_t *cr), (cr) ) \ + m( cairo_paint_with_alpha, \ + (cairo_t *cr, double alpha), (cr, alpha) ) \ + m( cairo_path_destroy, \ + (cairo_path_t *path), (path) ) \ + m( cairo_pattern_add_color_stop_rgba, \ + (cairo_pattern_t *pattern, double offset, double red, double green, double blue, double alpha), (pattern, offset, red, green, blue, alpha) ) \ + m( cairo_pattern_destroy, \ + (cairo_pattern_t *pattern), (pattern) ) \ + m( cairo_pattern_set_extend, \ + (cairo_pattern_t *pattern, cairo_extend_t extend), (pattern, extend) ) \ + m( cairo_pattern_set_filter, \ + (cairo_pattern_t *pattern, cairo_filter_t filter), (pattern, filter) ) \ + m( cairo_pop_group_to_source, \ + (cairo_t *cr), (cr) ) \ + m( cairo_push_group, \ + (cairo_t *cr), (cr) ) \ + m( cairo_rectangle, \ + (cairo_t *cr, double x, double y, double width, double height), (cr, x, y, width, height) ) \ + m( cairo_reset_clip, \ + (cairo_t *cr), (cr) ) \ + m( cairo_restore, \ + (cairo_t *cr), (cr) ) \ + m( cairo_rotate, \ + (cairo_t *cr, double angle), (cr, angle) ) \ + m( cairo_save, \ + (cairo_t *cr), (cr) ) \ + m( cairo_scale, \ + (cairo_t *cr, double sx, double sy), (cr, sx, sy) ) \ + m( cairo_select_font_face, \ + (cairo_t *cr, const char *family, cairo_font_slant_t slant, cairo_font_weight_t weight), (cr, family, slant, weight) ) \ + m( cairo_set_antialias, \ + (cairo_t *cr, cairo_antialias_t antialias), (cr, antialias) ) \ + m( cairo_set_dash, \ + (cairo_t *cr, const double *dashes, int num_dashes, double offset), (cr, dashes, num_dashes, offset) ) \ + m( cairo_set_fill_rule, \ + (cairo_t *cr, cairo_fill_rule_t fill_rule), (cr, fill_rule) ) \ + m( cairo_set_font_face, \ + (cairo_t *cr, cairo_font_face_t *font_face), (cr, font_face) ) \ + m( cairo_set_font_size, \ + (cairo_t *cr, double size), (cr, size) ) \ + m( cairo_set_line_cap, \ + (cairo_t *cr, cairo_line_cap_t line_cap), (cr, line_cap) ) \ + m( cairo_set_line_join, \ + (cairo_t *cr, cairo_line_join_t line_join), (cr, line_join) ) \ + m( cairo_set_line_width, \ + (cairo_t *cr, double width), (cr, width) ) \ + m( cairo_set_matrix, \ + (cairo_t *cr, const cairo_matrix_t *matrix), (cr, matrix) ) \ + m( cairo_set_operator, \ + (cairo_t *cr, cairo_operator_t op), (cr, op) ) \ + m( cairo_set_source, \ + (cairo_t *cr, cairo_pattern_t *source), (cr, source) ) \ + m( cairo_set_source_rgba, \ + (cairo_t *cr, double red, double green, double blue, double alpha), (cr, red, green, blue, alpha) ) \ + m( cairo_show_text, \ + (cairo_t *cr, const char *utf8), (cr, utf8) ) \ + m( cairo_stroke, \ + (cairo_t *cr), (cr) ) \ + m( cairo_stroke_extents, \ + (cairo_t *cr, double *x1, double *y1, double *x2, double *y2), (cr, x1, y1, x2, y2) ) \ + m( cairo_stroke_preserve, \ + (cairo_t *cr), (cr) ) \ + m( cairo_surface_destroy, \ + (cairo_surface_t *surface), (surface) ) \ + m( cairo_text_extents, \ + (cairo_t *cr, const char *utf8, cairo_text_extents_t *extents), (cr, utf8, extents) ) \ + m( cairo_transform, \ + (cairo_t *cr, const cairo_matrix_t *matrix), (cr, matrix) ) \ + m( cairo_translate, \ + (cairo_t *cr, double tx, double ty), (cr, tx, ty) ) \ + +#ifdef __WXMAC__ +#define wxCAIRO_PLATFORM_METHODS(m) \ + m( cairo_font_face_t*, cairo_quartz_font_face_create_for_cgfont, \ + (CGFontRef font), (font), NULL ) \ + m( cairo_surface_t*, cairo_quartz_surface_create_for_cg_context, \ + (CGContextRef cgContext, unsigned int width, unsigned int height), (cgContext, width, height), NULL ) +#elif defined(__WXMSW__) +#define wxCAIRO_PLATFORM_METHODS(m) \ + m( cairo_surface_t*, cairo_win32_surface_create, \ + (HDC hdc), (hdc), NULL ) \ + m( cairo_surface_t*, cairo_win32_printing_surface_create, \ + (HDC hdc), (hdc), NULL ) +#else +#define wxCAIRO_PLATFORM_METHODS(m) +#endif + +#define wxFOR_ALL_CAIRO_METHODS(m) \ + m( cairo_path_t*, cairo_copy_path, \ + (cairo_t *cr), (cr), NULL ) \ + m( cairo_t*, cairo_create, \ + (cairo_surface_t *target), (target), NULL) \ + m( cairo_surface_t*, cairo_get_target, \ + (cairo_t *cr), (cr), NULL) \ + m( cairo_surface_t*, cairo_image_surface_create, \ + (cairo_format_t format, int width, int height), (format, width, height), NULL ) \ + m( cairo_surface_t*, cairo_image_surface_create_for_data, \ + (unsigned char *data, cairo_format_t format, int width, int height, int stride), (data, format, width, height, stride), NULL) \ + m( cairo_bool_t, cairo_in_fill, \ + (cairo_t *cr, double x, double y), (cr, x, y), false ) \ + m( cairo_status_t, cairo_matrix_invert, \ + (cairo_matrix_t *matrix), (matrix), NULL) \ + m( cairo_pattern_t*, cairo_pattern_create_for_surface, \ + (cairo_surface_t *surface), (surface), NULL) \ + m( cairo_pattern_t*, cairo_pattern_create_linear, \ + (double x0, double y0, double x1, double y1), (x0, y0, x1, y1), NULL) \ + m( cairo_pattern_t*, cairo_pattern_create_radial, \ + (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1), (cx0, cy0, radius0, cx1, cy1, radius1), NULL) \ + m( cairo_status_t, cairo_pattern_status, \ + (cairo_pattern_t *pattern), (pattern), 4) \ + m( cairo_t*, cairo_reference, \ + (cairo_t *cr), (cr), NULL ) \ + m( cairo_surface_t*, cairo_surface_create_similar, \ + (cairo_surface_t *other, cairo_content_t content, int width, int height), (other, content, width, height), NULL) \ + m( int, cairo_format_stride_for_width, \ + (cairo_format_t format, int width), (format, width), 0) \ + m( int, cairo_version, \ + (), (), 0) \ + m( int, cairo_image_surface_get_stride, \ + (cairo_surface_t *surface), (surface), 0) \ + m( unsigned char *, cairo_image_surface_get_data, \ + (cairo_surface_t *surface), (surface), NULL) \ + m( cairo_format_t, cairo_image_surface_get_format, \ + (cairo_surface_t *surface), (surface), CAIRO_FORMAT_INVALID) \ + m( cairo_surface_type_t, cairo_surface_get_type, \ + (cairo_surface_t *surface), (surface), -1) \ + wxCAIRO_PLATFORM_METHODS(m) + + +#if wxUSE_PANGO +#define wxFOR_ALL_PANGO_CAIRO_VOIDMETHODS(m) \ + m( pango_cairo_update_layout, \ + (cairo_t *cr, PangoLayout *layout), (cr, layout) ) \ + m( pango_cairo_show_layout, \ + (cairo_t *cr, PangoLayout *layout), (cr, layout) ) +#endif + +#define wxCAIRO_DECLARE_TYPE(rettype, name, args, argnames, defret) \ + typedef rettype (*wxCAIRO_METHOD_TYPE(name)) args ; \ + wxCAIRO_METHOD_TYPE(name) wxDL_METHOD_NAME(name); + +#define wxCAIRO_DECLARE_VOIDTYPE(name, args, argnames) \ + wxCAIRO_DECLARE_TYPE(void, name, args, argnames, NULL) + +wxFOR_ALL_CAIRO_VOIDMETHODS(wxCAIRO_DECLARE_VOIDTYPE) +wxFOR_ALL_CAIRO_METHODS(wxCAIRO_DECLARE_TYPE) + + +class wxCairo +{ +public: + static bool Initialize(); + + // for internal use only + static void CleanUp(); + +private: + // the single wxCairo instance or NULL + static wxCairo *ms_lib; + + wxCairo(); + ~wxCairo(); + + bool IsOk(); + + wxDynamicLibrary m_libCairo; + wxDynamicLibrary m_libPangoCairo; + + // true if we successfully loaded the libraries and can use them + // + // note that this field must have this name as it's used by wxDL_XXX macros + bool m_ok; + +public: + + wxFOR_ALL_CAIRO_VOIDMETHODS(wxCAIRO_STATIC_VOIDMETHOD_DEFINE) + wxFOR_ALL_CAIRO_METHODS(wxCAIRO_STATIC_METHOD_DEFINE) +#if wxUSE_PANGO // untested, uncomment to test compilation. + //wxFOR_ALL_PANGO_METHODS(wxDL_STATIC_METHOD_DEFINE) +#endif + + wxDECLARE_NO_COPY_CLASS(wxCairo); +}; + +#define wxINIT_CAIRO_VOIDFUNC(name, params, args) \ + wxCAIRO_METHOD_TYPE(name) wxCairo::name = NULL; + +#define wxINIT_CAIRO_FUNC(rettype, name, params, args, defret) \ + wxCAIRO_METHOD_TYPE(name) wxCairo::name = NULL; + +wxFOR_ALL_CAIRO_VOIDMETHODS(wxINIT_CAIRO_VOIDFUNC) +wxFOR_ALL_CAIRO_METHODS(wxINIT_CAIRO_FUNC) + +#undef wxINIT_CAIRO_FUNC + +wxCairo *wxCairo::ms_lib = NULL; //---------------------------------------------------------------------------- // wxCairoLibrary //---------------------------------------------------------------------------- -wxCairoLibrary::wxCairoLibrary() +wxCairo::wxCairo() { wxLogNull log; - m_libCairo.Load("libcairo.so.2"); +#ifdef __WXMSW__ + wxString cairoDllStr("libcairo-2.dll"); +#else + wxString cairoDllStr("libcairo.so.2"); +#endif + m_libCairo.Load(cairoDllStr); m_ok = m_libCairo.IsLoaded(); if ( !m_ok ) return; +#if wxUSE_PANGO m_libPangoCairo.Load("libpangocairo-1.0.so.0"); m_ok = m_libPangoCairo.IsLoaded(); if ( !m_ok ) @@ -48,19 +316,37 @@ wxCairoLibrary::wxCairoLibrary() m_libCairo.Unload(); return; } +#endif - m_ok = InitializeMethods(); + +#define wxDO_LOAD_FUNC(name, nameStr) \ + name = (wxCAIRO_METHOD_TYPE(name))m_libCairo.RawGetSymbol(nameStr); \ + if ( !name ) \ + return; + +#define wxLOAD_CAIRO_VOIDFUNC(name, params, args) \ + wxDO_LOAD_FUNC(name, wxSTRINGIZE_T(name)) + +#define wxLOAD_CAIRO_FUNC(rettype, name, params, args, defret) \ + wxDO_LOAD_FUNC(name, wxSTRINGIZE_T(name)) + +wxFOR_ALL_CAIRO_VOIDMETHODS(wxLOAD_CAIRO_VOIDFUNC) +wxFOR_ALL_CAIRO_METHODS(wxLOAD_CAIRO_FUNC) + +#undef wxLOAD_CAIRO_FUNC + + m_ok = true; } -wxCairoLibrary::~wxCairoLibrary() +wxCairo::~wxCairo() { } -/* static */ wxCairoLibrary* wxCairoLibrary::Get() +/* static */ bool wxCairo::Initialize() { if ( !ms_lib ) { - ms_lib = new wxCairoLibrary(); + ms_lib = new wxCairo(); if ( !ms_lib->IsOk() ) { delete ms_lib; @@ -68,10 +354,10 @@ wxCairoLibrary::~wxCairoLibrary() } } - return ms_lib; + return ms_lib != NULL; } -/* static */ void wxCairoLibrary::CleanUp() +/* static */ void wxCairo::CleanUp() { if (ms_lib) { @@ -80,61 +366,48 @@ wxCairoLibrary::~wxCairoLibrary() } } -bool wxCairoLibrary::IsOk() +bool wxCairo::IsOk() { return m_ok; } -bool wxCairoLibrary::InitializeMethods() +// ============================================================================ +// implementation of the functions themselves +// ============================================================================ + +extern "C" { - wxDL_METHOD_LOAD(m_libCairo, cairo_arc); - wxDL_METHOD_LOAD(m_libCairo, cairo_arc_negative); - wxDL_METHOD_LOAD(m_libCairo, cairo_clip); - wxDL_METHOD_LOAD(m_libCairo, cairo_close_path); - wxDL_METHOD_LOAD(m_libCairo, cairo_create); - wxDL_METHOD_LOAD(m_libCairo, cairo_curve_to); - wxDL_METHOD_LOAD(m_libCairo, cairo_destroy); - wxDL_METHOD_LOAD(m_libCairo, cairo_fill); - wxDL_METHOD_LOAD(m_libCairo, cairo_fill_preserve); - wxDL_METHOD_LOAD(m_libCairo, cairo_get_target); - wxDL_METHOD_LOAD(m_libCairo, cairo_image_surface_create_for_data); - wxDL_METHOD_LOAD(m_libCairo, cairo_line_to); - wxDL_METHOD_LOAD(m_libCairo, cairo_move_to); - wxDL_METHOD_LOAD(m_libCairo, cairo_new_path); - wxDL_METHOD_LOAD(m_libCairo, cairo_paint); - wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_add_color_stop_rgba); - wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_create_for_surface); - wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_create_linear); - wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_create_radial); - wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_destroy); - wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_set_extend); - wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_set_filter); - wxDL_METHOD_LOAD(m_libCairo, cairo_rectangle); - wxDL_METHOD_LOAD(m_libCairo, cairo_reset_clip); - wxDL_METHOD_LOAD(m_libCairo, cairo_restore); - wxDL_METHOD_LOAD(m_libCairo, cairo_rotate); - wxDL_METHOD_LOAD(m_libCairo, cairo_save); - wxDL_METHOD_LOAD(m_libCairo, cairo_scale); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_dash); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_fill_rule); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_line_cap); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_line_join); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_line_width); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_operator); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_source); - wxDL_METHOD_LOAD(m_libCairo, cairo_set_source_rgba); - wxDL_METHOD_LOAD(m_libCairo, cairo_stroke); - wxDL_METHOD_LOAD(m_libCairo, cairo_stroke_preserve); - wxDL_METHOD_LOAD(m_libCairo, cairo_surface_create_similar); - wxDL_METHOD_LOAD(m_libCairo, cairo_surface_destroy); - wxDL_METHOD_LOAD(m_libCairo, cairo_translate); - wxDL_METHOD_LOAD(m_libPangoCairo, pango_cairo_update_layout); - wxDL_METHOD_LOAD(m_libPangoCairo, pango_cairo_show_layout); - - return true; +bool wxCairoInit() +{ + return wxCairo::Initialize(); } +void wxCairoCleanUp() +{ + wxCairo::CleanUp(); +} + +#define wxIMPL_CAIRO_FUNC(rettype, name, params, args, defret) \ + rettype name params \ + { \ + wxASSERT_MSG(wxCairo::Initialize(), "Cairo not initialized"); \ + return wxCairo::name args; \ + } + +#define wxIMPL_CAIRO_VOIDFUNC(name, params, args) \ + wxIMPL_CAIRO_FUNC(void, name, params, args, NULL) + +// we currently link directly to Cairo on GTK since it is usually available there, +// so don't use our cairo_xyz wrapper functions until the decision is made to +// always load Cairo dynamically there. +#ifndef __WXGTK__ +wxFOR_ALL_CAIRO_VOIDMETHODS(wxIMPL_CAIRO_VOIDFUNC) +wxFOR_ALL_CAIRO_METHODS(wxIMPL_CAIRO_FUNC) +#endif + +} // extern "C" + //---------------------------------------------------------------------------- // wxCairoModule //---------------------------------------------------------------------------- @@ -147,7 +420,7 @@ public: virtual void OnExit(); private: - DECLARE_DYNAMIC_CLASS(wxCairotModule) + DECLARE_DYNAMIC_CLASS(wxCairoModule) }; bool wxCairoModule::OnInit() @@ -157,7 +430,7 @@ bool wxCairoModule::OnInit() void wxCairoModule::OnExit() { - wxCairoLibrary::CleanUp(); + wxCairo::CleanUp(); } IMPLEMENT_DYNAMIC_CLASS(wxCairoModule, wxModule) diff --git a/Externals/wxWidgets3/src/common/calctrlcmn.cpp b/Externals/wxWidgets3/src/common/calctrlcmn.cpp index 4dde0060e0..93ac0dbc9f 100644 --- a/Externals/wxWidgets3/src/common/calctrlcmn.cpp +++ b/Externals/wxWidgets3/src/common/calctrlcmn.cpp @@ -2,7 +2,7 @@ // Name: src/common/calctrlcmn.cpp // Author: Marcin Wojdyr // Created: 2008-03-26 -// RCS-ID: $Id: calctrlcmn.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: calctrlcmn.cpp 69224 2011-09-29 13:43:15Z VZ $ // Copyright: (C) Marcin Wojdyr // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -16,13 +16,14 @@ #ifndef WX_PRECOMP #endif //WX_PRECOMP -#if wxUSE_CALENDARCTRL || wxUSE_DATEPICKCTRL +#if wxUSE_CALENDARCTRL || wxUSE_DATEPICKCTRL || wxUSE_TIMEPICKCTRL #include "wx/dateevt.h" IMPLEMENT_DYNAMIC_CLASS(wxDateEvent, wxCommandEvent) wxDEFINE_EVENT(wxEVT_DATE_CHANGED, wxDateEvent); +wxDEFINE_EVENT(wxEVT_TIME_CHANGED, wxDateEvent); -#endif // wxUSE_CALENDARCTRL || wxUSE_DATEPICKCTRL +#endif // wxUSE_CALENDARCTRL || wxUSE_DATEPICKCTRL || wxUSE_TIMEPICKCTRL #if wxUSE_CALENDARCTRL diff --git a/Externals/wxWidgets3/src/common/clrpickercmn.cpp b/Externals/wxWidgets3/src/common/clrpickercmn.cpp index a8df9d4837..1dc183a0af 100644 --- a/Externals/wxWidgets3/src/common/clrpickercmn.cpp +++ b/Externals/wxWidgets3/src/common/clrpickercmn.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi (readapted code written by Vadim Zeitlin) // Modified by: // Created: 15/04/2006 -// RCS-ID: $Id: clrpickercmn.cpp 58718 2009-02-07 18:59:25Z VZ $ +// RCS-ID: $Id: clrpickercmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Vadim Zeitlin, Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -84,7 +84,7 @@ void wxColourPickerCtrl::SetColour(const wxColour &col) bool wxColourPickerCtrl::SetColour(const wxString &text) { wxColour col(text); // smart wxString->wxColour conversion - if ( !col.Ok() ) + if ( !col.IsOk() ) return false; M_PICKER->SetColour(col); UpdateTextCtrlFromPicker(); @@ -105,7 +105,7 @@ void wxColourPickerCtrl::UpdatePickerFromTextCtrl() // wxString -> wxColour conversion wxColour col(m_text->GetValue()); - if ( !col.Ok() ) + if ( !col.IsOk() ) return; // invalid user input if (M_PICKER->GetColour() != col) diff --git a/Externals/wxWidgets3/src/common/cmdline.cpp b/Externals/wxWidgets3/src/common/cmdline.cpp index c02721ab6b..e270ade86f 100644 --- a/Externals/wxWidgets3/src/common/cmdline.cpp +++ b/Externals/wxWidgets3/src/common/cmdline.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 05.01.00 -// RCS-ID: $Id: cmdline.cpp 66253 2010-11-24 00:42:53Z VZ $ +// RCS-ID: $Id: cmdline.cpp 68316 2011-07-21 13:49:55Z VZ $ // Copyright: (c) 2000 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -106,8 +106,7 @@ struct wxCmdLineOption type = typ; flags = fl; - m_hasVal = false; - m_isNegated = false; + Reset(); } // can't use union easily here, so just store all possible data fields, we @@ -142,12 +141,19 @@ struct wxCmdLineOption { Check(wxCMD_LINE_VAL_DATE); m_dateVal = val; m_hasVal = true; } #endif // wxUSE_DATETIME - void SetHasValue(bool hasValue = true) { m_hasVal = hasValue; } + void SetHasValue() { m_hasVal = true; } bool HasValue() const { return m_hasVal; } void SetNegated() { m_isNegated = true; } bool IsNegated() const { return m_isNegated; } + // Reset to the initial state, called before parsing another command line. + void Reset() + { + m_hasVal = + m_isNegated = false; + } + public: wxCmdLineEntryType kind; wxString shortName, @@ -637,8 +643,7 @@ void wxCmdLineParser::Reset() { for ( size_t i = 0; i < m_data->m_options.GetCount(); i++ ) { - wxCmdLineOption& opt = m_data->m_options[i]; - opt.SetHasValue(false); + m_data->m_options[i].Reset(); } } @@ -702,11 +707,45 @@ int wxCmdLineParser::Parse(bool showUsage) if (longOptionsEnabled) { + wxString errorOpt; + optInd = m_data->FindOptionByLongName(name); if ( optInd == wxNOT_FOUND ) { - errorMsg << wxString::Format(_("Unknown long option '%s'"), name.c_str()) - << wxT('\n'); + // Check if this could be a negatable long option. + if ( name.Last() == '-' ) + { + name.RemoveLast(); + + optInd = m_data->FindOptionByLongName(name); + if ( optInd != wxNOT_FOUND ) + { + if ( !(m_data->m_options[optInd].flags & + wxCMD_LINE_SWITCH_NEGATABLE) ) + { + errorOpt.Printf + ( + _("Option '%s' can't be negated"), + name + ); + optInd = wxNOT_FOUND; + } + } + } + + if ( optInd == wxNOT_FOUND ) + { + if ( errorOpt.empty() ) + { + errorOpt.Printf + ( + _("Unknown long option '%s'"), + name + ); + } + + errorMsg << errorOpt << wxT('\n'); + } } } else @@ -1171,7 +1210,6 @@ wxString wxCmdLineParser::GetUsageString() const option << (!opt.longName ? wxT(':') : wxT('=')) << val; } - usage << negator; if ( !(opt.flags & wxCMD_LINE_OPTION_MANDATORY) ) { usage << wxT(']'); diff --git a/Externals/wxWidgets3/src/common/cmdproc.cpp b/Externals/wxWidgets3/src/common/cmdproc.cpp index 772097b6c3..75ef4d3166 100644 --- a/Externals/wxWidgets3/src/common/cmdproc.cpp +++ b/Externals/wxWidgets3/src/common/cmdproc.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart (extracted from docview.h by VZ) // Modified by: // Created: 05.11.00 -// RCS-ID: $Id: cmdproc.cpp 66287 2010-11-28 15:14:49Z VZ $ +// RCS-ID: $Id: cmdproc.cpp 70460 2012-01-25 00:05:12Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -172,9 +172,9 @@ bool wxCommandProcessor::Redo() { wxCommand *redoCommand = NULL; wxList::compatibility_iterator redoNode -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS = NULL // just to avoid warnings -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS ; if ( m_currentCommand ) @@ -328,4 +328,28 @@ void wxCommandProcessor::ClearCommands() m_lastSavedCommand = wxList::compatibility_iterator(); } +bool wxCommandProcessor::IsDirty() const +{ + if ( m_commands.empty() ) + { + // If we have never been modified, we can't be dirty. + return false; + } + + if ( !m_lastSavedCommand ) + { + // If we have been modified but have never been saved, we're dirty. + return true; + } + + if ( !m_currentCommand ) + { + // This only happens if all commands were undone after saving the + // document: we're dirty then. + return true; + } + + // Finally if both iterators are valid, we may just compare them. + return m_currentCommand != m_lastSavedCommand; +} diff --git a/Externals/wxWidgets3/src/common/cmndata.cpp b/Externals/wxWidgets3/src/common/cmndata.cpp index d8b26aea46..95de654375 100644 --- a/Externals/wxWidgets3/src/common/cmndata.cpp +++ b/Externals/wxWidgets3/src/common/cmndata.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: cmndata.cpp 66615 2011-01-07 05:26:57Z PC $ +// RCS-ID: $Id: cmndata.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -170,7 +170,7 @@ bool wxPrintData::IsOk() const { m_nativeData->TransferFrom( *this ); - return m_nativeData->Ok(); + return m_nativeData->IsOk(); } // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/common/colourcmn.cpp b/Externals/wxWidgets3/src/common/colourcmn.cpp index ed9315ae5d..d596deec62 100644 --- a/Externals/wxWidgets3/src/common/colourcmn.cpp +++ b/Externals/wxWidgets3/src/common/colourcmn.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 20/4/2006 -// RCS-ID: $Id: colourcmn.cpp 66630 2011-01-07 17:49:18Z SC $ +// RCS-ID: $Id: colourcmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -101,10 +101,48 @@ bool wxColourBase::FromString(const wxString& str) alpha = wxALPHA_OPAQUE; if ( str.length() > 3 && (str[3] == wxT('a') || str[3] == wxT('A')) ) { - float a; - // TODO: use locale-independent function - if ( wxSscanf(str.wx_str() + 4, wxT("( %d , %d , %d , %f )"), - &red, &green, &blue, &a) != 4 ) + // We can't use sscanf() for the alpha value as sscanf() uses the + // current locale while the floating point numbers in CSS always + // use point as decimal separator, regardless of locale. So parse + // the tail of the string manually by putting it in a buffer and + // using wxString::ToCDouble() below. Notice that we can't use "%s" + // for this as it stops at white space and we need "%c" to avoid + // this and really get all the rest of the string into the buffer. + + const unsigned len = str.length(); // always big enough + wxCharBuffer alphaBuf(len); + char * const alphaPtr = alphaBuf.data(); + + for ( unsigned n = 0; n < len; n++ ) + alphaPtr[n] = '\0'; + + // Construct the format string which ensures that the last argument + // receives all the rest of the string. + wxString formatStr; + formatStr << wxS("( %d , %d , %d , %") << len << 'c'; + + // Notice that we use sscanf() here because if the string is not + // ASCII it can't represent a valid RGB colour specification anyhow + // and like this we can be sure that %c corresponds to "char *" + // while with wxSscanf() it depends on the type of the string + // passed as first argument: if it is a wide string, then %c + // expects "wchar_t *" matching parameter under MSW for example. + if ( sscanf(str.c_str() + 4, + formatStr.mb_str(), + &red, &green, &blue, alphaPtr) != 4 ) + return false; + + // Notice that we must explicitly specify the length to get rid of + // trailing NULs. + wxString alphaStr(alphaPtr, wxStrlen(alphaPtr)); + if ( alphaStr.empty() || alphaStr.Last() != ')' ) + return false; + + alphaStr.RemoveLast(); + alphaStr.Trim(); + + double a; + if ( !alphaStr.ToCDouble(&a) ) return false; alpha = wxRound(a * 255); @@ -139,13 +177,13 @@ bool wxColourBase::FromString(const wxString& str) // because this place can be called from constructor // and 'this' could not be available yet wxColour clr = wxTheColourDatabase->Find(str); - if (clr.Ok()) + if (clr.IsOk()) Set((unsigned char)clr.Red(), (unsigned char)clr.Green(), (unsigned char)clr.Blue()); } - if (Ok()) + if (IsOk()) return true; wxLogDebug(wxT("wxColour::Set - couldn't set to colour string '%s'"), str); @@ -181,9 +219,9 @@ wxString wxColourBase::GetAsString(long flags) const } else // use rgba() form { - // TODO: use locale-independent function - colName.Printf(wxT("rgba(%d, %d, %d, %.3f)"), - red, green, blue, Alpha() / 255.); + colName.Printf(wxT("rgba(%d, %d, %d, %s)"), + red, green, blue, + wxString::FromCDouble(Alpha() / 255., 3)); } } else if ( flags & wxC2S_HTML_SYNTAX ) diff --git a/Externals/wxWidgets3/src/common/combocmn.cpp b/Externals/wxWidgets3/src/common/combocmn.cpp index 70564bfbf3..de33d29646 100644 --- a/Externals/wxWidgets3/src/common/combocmn.cpp +++ b/Externals/wxWidgets3/src/common/combocmn.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: Apr-30-2006 -// RCS-ID: $Id: combocmn.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: combocmn.cpp 69005 2011-09-05 20:08:04Z RD $ // Copyright: (c) 2005 Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -674,6 +674,34 @@ void wxComboPopup::Dismiss() m_combo->HidePopup(true); } +void wxComboPopup::DestroyPopup() +{ + // Here we make sure that the popup control's Destroy() gets called. + // This is necessary for the wxPersistentWindow to work properly. + wxWindow* popupCtrl = GetControl(); + if ( popupCtrl ) + { + // While all wxComboCtrl examples have m_popupInterface and + // popupCtrl as the same class (that will be deleted via the + // Destroy() call below), it is technically still possible to + // have implementations where they are in fact not same + // multiple-inherited class. Here we use C++ RTTI to check for + // this rare case. + #ifndef wxNO_RTTI + // It is probably better to delete m_popupInterface first, so + // that it retains access to its popup control window. + if ( dynamic_cast(this) != + dynamic_cast(popupCtrl) ) + delete this; + #endif + popupCtrl->Destroy(); + } + else + { + delete this; + } +} + // ---------------------------------------------------------------------------- // input handling // ---------------------------------------------------------------------------- @@ -932,7 +960,6 @@ public: BEGIN_EVENT_TABLE(wxComboCtrlBase, wxControl) - EVT_TEXT(wxID_ANY,wxComboCtrlBase::OnTextCtrlEvent) EVT_SIZE(wxComboCtrlBase::OnSizeEvent) EVT_SET_FOCUS(wxComboCtrlBase::OnFocusEvent) EVT_KILL_FOCUS(wxComboCtrlBase::OnFocusEvent) @@ -940,7 +967,6 @@ BEGIN_EVENT_TABLE(wxComboCtrlBase, wxControl) //EVT_BUTTON(wxID_ANY,wxComboCtrlBase::OnButtonClickEvent) EVT_KEY_DOWN(wxComboCtrlBase::OnKeyEvent) EVT_CHAR(wxComboCtrlBase::OnCharEvent) - EVT_TEXT_ENTER(wxID_ANY,wxComboCtrlBase::OnTextCtrlEvent) EVT_SYS_COLOUR_CHANGED(wxComboCtrlBase::OnSysColourChanged) END_EVENT_TABLE() @@ -1018,10 +1044,11 @@ bool wxComboCtrlBase::Create(wxWindow *parent, m_iFlags |= wxCC_IFLAG_CREATED; // If x and y indicate valid size, wxSizeEvent won't be - // emitted automatically, so we need to add artifical one. + // emitted automatically, so we need to add artificial one. if ( size.x > 0 && size.y > 0 ) { wxSizeEvent evt(size,GetId()); + evt.SetEventObject(this); GetEventHandler()->AddPendingEvent(evt); } @@ -1066,6 +1093,16 @@ wxComboCtrlBase::CreateTextCtrl(int style) m_text->Create(this, wxID_ANY, m_valueString, wxDefaultPosition, wxSize(10,-1), style); + + // Connecting the events is currently the most reliable way + wxWindowID id = m_text->GetId(); + m_text->Connect(id, wxEVT_COMMAND_TEXT_UPDATED, + wxCommandEventHandler(wxComboCtrlBase::OnTextCtrlEvent), + NULL, this); + m_text->Connect(id, wxEVT_COMMAND_TEXT_ENTER, + wxCommandEventHandler(wxComboCtrlBase::OnTextCtrlEvent), + NULL, this); + m_text->SetHint(m_hintText); } } @@ -1135,7 +1172,7 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth ) // its platform default or bitmap+pushbutton background is used, but not if // there is vertical size adjustment or horizontal spacing. if ( ( (m_iFlags & wxCC_BUTTON_OUTSIDE_BORDER) || - (m_bmpNormal.Ok() && m_blankButtonBg) ) && + (m_bmpNormal.IsOk() && m_blankButtonBg) ) && m_btnSpacingX == 0 && m_btnHei <= 0 ) { @@ -1143,7 +1180,7 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth ) btnBorder = 0; } else if ( (m_iFlags & wxCC_BUTTON_COVERS_BORDER) && - m_btnSpacingX == 0 && !m_bmpNormal.Ok() ) + m_btnSpacingX == 0 && !m_bmpNormal.IsOk() ) { m_iFlags &= ~(wxCC_IFLAG_BUTTON_OUTSIDE); btnBorder = 0; @@ -1200,7 +1237,7 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth ) // It is larger // OR // button width is set to default and blank button bg is not drawn - if ( m_bmpNormal.Ok() ) + if ( m_bmpNormal.IsOk() ) { int bmpReqWidth = m_bmpNormal.GetWidth(); int bmpReqHeight = m_bmpNormal.GetHeight(); @@ -1222,7 +1259,7 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth ) { int newY = butHeight+(customBorder*2); SetClientSize(wxDefaultCoord,newY); - if ( m_bmpNormal.Ok() || m_btnArea.width != butWidth || m_btnArea.height != butHeight ) + if ( m_bmpNormal.IsOk() || m_btnArea.width != butWidth || m_btnArea.height != butHeight ) m_iFlags |= wxCC_IFLAG_HAS_NONSTANDARD_BUTTON; else m_iFlags &= ~wxCC_IFLAG_HAS_NONSTANDARD_BUTTON; @@ -1331,16 +1368,16 @@ wxSize wxComboCtrlBase::DoGetBestSize() const // TODO: Better method to calculate close-to-native control height. int fhei; - if ( m_font.Ok() ) + if ( m_font.IsOk() ) fhei = (m_font.GetPointSize()*2) + 5; - else if ( wxNORMAL_FONT->Ok() ) + else if ( wxNORMAL_FONT->IsOk() ) fhei = (wxNORMAL_FONT->GetPointSize()*2) + 5; else fhei = sizeText.y + 4; // Need to force height to accomodate bitmap? int btnSizeY = m_btnSize.y; - if ( m_bmpNormal.Ok() && fhei < btnSizeY ) + if ( m_bmpNormal.IsOk() && fhei < btnSizeY ) fhei = btnSizeY; // Control height doesn't depend on border @@ -1665,7 +1702,7 @@ void wxComboCtrlBase::DrawButton( wxDC& dc, const wxRect& rect, int flags ) dc.DrawRectangle(rect); } - if ( !m_bmpNormal.Ok() ) + if ( !m_bmpNormal.IsOk() ) { if ( flags & Button_BitmapOnly ) return; @@ -1715,6 +1752,7 @@ void wxComboCtrlBase::RecalcAndRefresh() if ( IsCreated() ) { wxSizeEvent evt(GetSize(),GetId()); + evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); Refresh(); } @@ -1726,6 +1764,13 @@ void wxComboCtrlBase::RecalcAndRefresh() void wxComboCtrlBase::OnTextCtrlEvent(wxCommandEvent& event) { + // Avoid infinite recursion + if ( event.GetEventObject() == this ) + { + event.Skip(); + return; + } + if ( event.GetEventType() == wxEVT_COMMAND_TEXT_UPDATED ) { if ( m_ignoreEvtText > 0 ) @@ -1735,12 +1780,13 @@ void wxComboCtrlBase::OnTextCtrlEvent(wxCommandEvent& event) } } - // Change event id, object and string before relaying it forward - event.SetId(GetId()); - wxString s = event.GetString(); - event.SetEventObject(this); - event.SetString(s); - event.Skip(); + // For safety, completely re-create a new wxCommandEvent + wxCommandEvent evt2(event); + evt2.SetId(GetId()); + evt2.SetEventObject(this); + HandleWindowEvent(evt2); + + event.StopPropagation(); } // call if cursor is on button area or mouse is captured for the button @@ -1988,6 +2034,8 @@ void wxComboCtrlBase::OnCharEvent(wxKeyEvent& event) void wxComboCtrlBase::OnFocusEvent( wxFocusEvent& event ) { +// On Mac, this leads to infinite recursion and eventually a crash +#ifndef __WXMAC__ if ( event.GetEventType() == wxEVT_SET_FOCUS ) { wxWindow* tc = GetTextCtrl(); @@ -1998,6 +2046,7 @@ void wxComboCtrlBase::OnFocusEvent( wxFocusEvent& event ) } Refresh(); +#endif } void wxComboCtrlBase::OnIdleEvent( wxIdleEvent& WXUNUSED(event) ) @@ -2089,7 +2138,12 @@ void wxComboCtrlBase::DestroyPopup() wxDELETE(m_popupEvtHandler); - wxDELETE(m_popupInterface); + if ( m_popupInterface ) + { + // NB: DestroyPopup() performs 'delete this'. + m_popupInterface->DestroyPopup(); + m_popupInterface = NULL; + } if ( m_winPopup ) { @@ -2513,17 +2567,17 @@ void wxComboCtrlBase::SetButtonBitmaps( const wxBitmap& bmpNormal, m_bmpNormal = bmpNormal; m_blankButtonBg = blankButtonBg; - if ( bmpPressed.Ok() ) + if ( bmpPressed.IsOk() ) m_bmpPressed = bmpPressed; else m_bmpPressed = bmpNormal; - if ( bmpHover.Ok() ) + if ( bmpHover.IsOk() ) m_bmpHover = bmpHover; else m_bmpHover = bmpNormal; - if ( bmpDisabled.Ok() ) + if ( bmpDisabled.IsOk() ) m_bmpDisabled = bmpDisabled; else m_bmpDisabled = bmpNormal; diff --git a/Externals/wxWidgets3/src/common/config.cpp b/Externals/wxWidgets3/src/common/config.cpp index b806464a0c..e6916ff8d9 100644 --- a/Externals/wxWidgets3/src/common/config.cpp +++ b/Externals/wxWidgets3/src/common/config.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 07.04.98 -// RCS-ID: $Id: config.cpp 66140 2010-11-13 15:03:10Z VZ $ +// RCS-ID: $Id: config.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1997 Karsten Ballueder Ballueder@usa.net // Vadim Zeitlin // Licence: wxWindows licence @@ -63,10 +63,8 @@ bool wxConfigBase::ms_bAutoCreate = true; wxConfigBase *wxAppTraitsBase::CreateConfig() { return new - #if defined(__WXMSW__) && wxUSE_CONFIG_NATIVE + #if defined(__WINDOWS__) && wxUSE_CONFIG_NATIVE wxRegConfig(wxTheApp->GetAppName(), wxTheApp->GetVendorName()); - #elif defined(__WXPALMOS__) && wxUSE_CONFIG_NATIVE - wxPrefConfig(wxTheApp->GetAppName()); #else // either we're under Unix or wish to use files even under Windows wxFileConfig(wxTheApp->GetAppName()); #endif @@ -387,7 +385,7 @@ enum Bracket Bracket_None, Bracket_Normal = ')', Bracket_Curly = '}', -#ifdef __WXMSW__ +#ifdef __WINDOWS__ Bracket_Windows = '%', // yeah, Windows people are a bit strange ;-) #endif Bracket_Max @@ -401,17 +399,17 @@ wxString wxExpandEnvVars(const wxString& str) size_t m; for ( size_t n = 0; n < str.length(); n++ ) { switch ( str[n].GetValue() ) { -#ifdef __WXMSW__ +#ifdef __WINDOWS__ case wxT('%'): -#endif //WINDOWS +#endif // __WINDOWS__ case wxT('$'): { Bracket bracket; - #ifdef __WXMSW__ + #ifdef __WINDOWS__ if ( str[n] == wxT('%') ) bracket = Bracket_Windows; else - #endif //WINDOWS + #endif // __WINDOWS__ if ( n == str.length() - 1 ) { bracket = Bracket_None; } @@ -455,7 +453,7 @@ wxString wxExpandEnvVars(const wxString& str) #endif { // variable doesn't exist => don't change anything - #ifdef __WXMSW__ + #ifdef __WINDOWS__ if ( bracket != Bracket_Windows ) #endif if ( bracket != Bracket_None ) @@ -472,10 +470,10 @@ wxString wxExpandEnvVars(const wxString& str) // // under Unix, OTOH, this warning could be useful for the user to // understand why isn't the variable expanded as intended - #ifndef __WXMSW__ + #ifndef __WINDOWS__ wxLogWarning(_("Environment variables expansion failed: missing '%c' at position %u in '%s'."), (char)bracket, (unsigned int) (m + 1), str.c_str()); - #endif // __WXMSW__ + #endif // __WINDOWS__ } else { // skip closing bracket unless the variables wasn't expanded diff --git a/Externals/wxWidgets3/src/common/containr.cpp b/Externals/wxWidgets3/src/common/containr.cpp index 8e595b273d..2b3e7d414e 100644 --- a/Externals/wxWidgets3/src/common/containr.cpp +++ b/Externals/wxWidgets3/src/common/containr.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 06.08.01 -// RCS-ID: $Id: containr.cpp 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: containr.cpp 68502 2011-08-03 00:45:42Z VZ $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -472,18 +472,21 @@ void wxControlContainer::HandleOnNavigationKey( wxNavigationKeyEvent& event ) // looping inside this panel (normally, the focus will go to // the next/previous item after this panel in the parent // panel). - wxWindow *focussed_child_of_parent = m_winParent; + wxWindow *focusedParent = m_winParent; while ( parent ) { - // we don't want to tab into a different dialog or frame - if ( focussed_child_of_parent->IsTopLevel() ) + // We don't want to tab into a different dialog or frame or + // even an MDI child frame, so test for this explicitly + // (and in particular don't just use IsTopLevel() which + // would return false in the latter case). + if ( focusedParent->IsTopNavigationDomain() ) break; - event.SetCurrentFocus( focussed_child_of_parent ); + event.SetCurrentFocus( focusedParent ); if ( parent->GetEventHandler()->ProcessEvent( event ) ) return; - focussed_child_of_parent = parent; + focusedParent = parent; parent = parent->GetParent(); } @@ -650,14 +653,26 @@ bool wxSetFocusToChild(wxWindow *win, wxWindow **childLastFocused) // It might happen that the window got reparented if ( (*childLastFocused)->GetParent() == win ) { - wxLogTrace(TRACE_FOCUS, - wxT("SetFocusToChild() => last child (0x%p)."), - (*childLastFocused)->GetHandle()); + // And it also could have become hidden in the meanwhile, in this + // case focus its parent instead. + while ( !(*childLastFocused)->IsShown() ) + { + *childLastFocused = (*childLastFocused)->GetParent(); + if ( !*childLastFocused ) + break; + } - // not SetFocusFromKbd(): we're restoring focus back to the old - // window and not setting it as the result of a kbd action - (*childLastFocused)->SetFocus(); - return true; + if ( *childLastFocused ) + { + wxLogTrace(TRACE_FOCUS, + wxT("SetFocusToChild() => last child (0x%p)."), + (*childLastFocused)->GetHandle()); + + // not SetFocusFromKbd(): we're restoring focus back to the old + // window and not setting it as the result of a kbd action + (*childLastFocused)->SetFocus(); + return true; + } } else { diff --git a/Externals/wxWidgets3/src/common/convauto.cpp b/Externals/wxWidgets3/src/common/convauto.cpp index 62a470aa7d..83c1ec3d0f 100644 --- a/Externals/wxWidgets3/src/common/convauto.cpp +++ b/Externals/wxWidgets3/src/common/convauto.cpp @@ -3,7 +3,7 @@ // Purpose: implementation of wxConvAuto // Author: Vadim Zeitlin // Created: 2006-04-04 -// RCS-ID: $Id: convauto.cpp 66657 2011-01-08 18:05:33Z PC $ +// RCS-ID: $Id: convauto.cpp 69675 2011-11-05 11:23:41Z VZ $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -31,6 +31,17 @@ // seem to be a good idea and there is no other reasonable alternative wxFontEncoding wxConvAuto::ms_defaultMBEncoding = wxFONTENCODING_ISO8859_1; +namespace +{ + +const char BOM_UTF32BE[] = { '\x00', '\x00', '\xFE', '\xFF' }; +const char BOM_UTF32LE[] = { '\xFF', '\xFE', '\x00', '\x00' }; +const char BOM_UTF16BE[] = { '\xFE', '\xFF' }; +const char BOM_UTF16LE[] = { '\xFF', '\xFE' }; +const char BOM_UTF8[] = { '\xEF', '\xBB', '\xBF' }; + +} // anonymous namespace + // ============================================================================ // implementation // ============================================================================ @@ -45,7 +56,29 @@ void wxConvAuto::SetFallbackEncoding(wxFontEncoding enc) } /* static */ -wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen) +const char* wxConvAuto::GetBOMChars(wxBOM bom, size_t* count) +{ + wxCHECK_MSG( count , NULL, wxS("count pointer must be provided") ); + + switch ( bom ) + { + case wxBOM_UTF32BE: *count = WXSIZEOF(BOM_UTF32BE); return BOM_UTF32BE; + case wxBOM_UTF32LE: *count = WXSIZEOF(BOM_UTF32LE); return BOM_UTF32LE; + case wxBOM_UTF16BE: *count = WXSIZEOF(BOM_UTF16BE); return BOM_UTF16BE; + case wxBOM_UTF16LE: *count = WXSIZEOF(BOM_UTF16LE); return BOM_UTF16LE; + case wxBOM_UTF8 : *count = WXSIZEOF(BOM_UTF8 ); return BOM_UTF8; + case wxBOM_Unknown: + case wxBOM_None: + wxFAIL_MSG( wxS("Invalid BOM type") ); + return NULL; + } + + wxFAIL_MSG( wxS("Unknown BOM type") ); + return NULL; +} + +/* static */ +wxBOM wxConvAuto::DetectBOM(const char *src, size_t srcLen) { // examine the buffer for BOM presence // @@ -65,14 +98,14 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen) switch ( srcLen ) { case 0: - return BOM_Unknown; + return wxBOM_Unknown; case 1: if ( src[0] == '\x00' || src[0] == '\xFF' || src[0] == '\xFE' || src[0] == '\xEF') { // this could be a BOM but we don't know yet - return BOM_Unknown; + return wxBOM_Unknown; } break; @@ -81,22 +114,22 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen) if ( src[0] == '\xEF' && src[1] == '\xBB' ) { if ( srcLen == 3 ) - return src[2] == '\xBF' ? BOM_UTF8 : BOM_None; + return src[2] == '\xBF' ? wxBOM_UTF8 : wxBOM_None; - return BOM_Unknown; + return wxBOM_Unknown; } if ( src[0] == '\xFE' && src[1] == '\xFF' ) - return BOM_UTF16BE; + return wxBOM_UTF16BE; if ( src[0] == '\xFF' && src[1] == '\xFE' ) { // if the next byte is 0, it could be an UTF-32LE BOM but if it // isn't we can be sure it's UTF-16LE if ( srcLen == 3 && src[2] != '\x00' ) - return BOM_UTF16LE; + return wxBOM_UTF16LE; - return BOM_Unknown; + return wxBOM_Unknown; } if ( src[0] == '\x00' && src[1] == '\x00' ) @@ -104,9 +137,9 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen) // this could only be UTF-32BE, check that the data we have so // far allows for it if ( srcLen == 3 && src[2] != '\xFE' ) - return BOM_None; + return wxBOM_None; - return BOM_Unknown; + return wxBOM_Unknown; } break; @@ -114,61 +147,61 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen) // we have at least 4 characters so we may finally decide whether // we have a BOM or not if ( src[0] == '\xEF' && src[1] == '\xBB' && src[2] == '\xBF' ) - return BOM_UTF8; + return wxBOM_UTF8; if ( src[0] == '\x00' && src[1] == '\x00' && src[2] == '\xFE' && src[3] == '\xFF' ) - return BOM_UTF32BE; + return wxBOM_UTF32BE; if ( src[0] == '\xFF' && src[1] == '\xFE' && src[2] == '\x00' && src[3] == '\x00' ) - return BOM_UTF32LE; + return wxBOM_UTF32LE; if ( src[0] == '\xFE' && src[1] == '\xFF' ) - return BOM_UTF16BE; + return wxBOM_UTF16BE; if ( src[0] == '\xFF' && src[1] == '\xFE' ) - return BOM_UTF16LE; + return wxBOM_UTF16LE; } - return BOM_None; + return wxBOM_None; } -void wxConvAuto::InitFromBOM(BOMType bomType) +void wxConvAuto::InitFromBOM(wxBOM bomType) { m_consumedBOM = false; switch ( bomType ) { - case BOM_Unknown: + case wxBOM_Unknown: wxFAIL_MSG( "shouldn't be called for this BOM type" ); break; - case BOM_None: + case wxBOM_None: // use the default break; - case BOM_UTF32BE: + case wxBOM_UTF32BE: m_conv = new wxMBConvUTF32BE; m_ownsConv = true; break; - case BOM_UTF32LE: + case wxBOM_UTF32LE: m_conv = new wxMBConvUTF32LE; m_ownsConv = true; break; - case BOM_UTF16BE: + case wxBOM_UTF16BE: m_conv = new wxMBConvUTF16BE; m_ownsConv = true; break; - case BOM_UTF16LE: + case wxBOM_UTF16LE: m_conv = new wxMBConvUTF16LE; m_ownsConv = true; break; - case BOM_UTF8: + case wxBOM_UTF8: InitWithUTF8(); break; @@ -191,25 +224,25 @@ void wxConvAuto::SkipBOM(const char **src, size_t *len) const int ofs; switch ( m_bomType ) { - case BOM_Unknown: + case wxBOM_Unknown: wxFAIL_MSG( "shouldn't be called for this BOM type" ); return; - case BOM_None: + case wxBOM_None: ofs = 0; break; - case BOM_UTF32BE: - case BOM_UTF32LE: + case wxBOM_UTF32BE: + case wxBOM_UTF32LE: ofs = 4; break; - case BOM_UTF16BE: - case BOM_UTF16LE: + case wxBOM_UTF16BE: + case wxBOM_UTF16LE: ofs = 2; break; - case BOM_UTF8: + case wxBOM_UTF8: ofs = 3; break; @@ -226,7 +259,7 @@ void wxConvAuto::SkipBOM(const char **src, size_t *len) const bool wxConvAuto::InitFromInput(const char *src, size_t len) { m_bomType = DetectBOM(src, len == wxNO_LEN ? strlen(src) : len); - if ( m_bomType == BOM_Unknown ) + if ( m_bomType == wxBOM_Unknown ) return false; InitFromBOM(m_bomType); @@ -275,7 +308,7 @@ wxConvAuto::ToWChar(wchar_t *dst, size_t dstLen, // try to convert using the auto-detected encoding size_t rc = m_conv->ToWChar(dst, dstLen, src, srcLen); - if ( rc == wxCONV_FAILED && m_bomType == BOM_None ) + if ( rc == wxCONV_FAILED && m_bomType == wxBOM_None ) { // if the conversion failed but we didn't really detect anything and // simply tried UTF-8 by default, retry it using the fall-back diff --git a/Externals/wxWidgets3/src/common/cshelp.cpp b/Externals/wxWidgets3/src/common/cshelp.cpp index 69c48d46fd..d05bb9265d 100644 --- a/Externals/wxWidgets3/src/common/cshelp.cpp +++ b/Externals/wxWidgets3/src/common/cshelp.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart, Vadim Zeitlin // Modified by: // Created: 08/09/2000 -// RCS-ID: $Id: cshelp.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: cshelp.cpp 68859 2011-08-23 04:55:46Z DS $ // Copyright: (c) 2000 Julian Smart, Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -284,7 +284,7 @@ wxContextHelpButton::wxContextHelpButton(wxWindow* parent, long style) #if defined(__WXPM__) : wxBitmapButton(parent, id, wxBitmap(wxCSQUERY_BITMAP - ,wxBITMAP_TYPE_RESOURCE + ,wxBITMAP_TYPE_BMP_RESOURCE ), pos, size, style) #else diff --git a/Externals/wxWidgets3/src/common/ctrlcmn.cpp b/Externals/wxWidgets3/src/common/ctrlcmn.cpp index 8798b1ad4a..3fc3cd64a3 100644 --- a/Externals/wxWidgets3/src/common/ctrlcmn.cpp +++ b/Externals/wxWidgets3/src/common/ctrlcmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 26.07.99 -// RCS-ID: $Id: ctrlcmn.cpp 67062 2011-02-27 12:48:07Z VZ $ +// RCS-ID: $Id: ctrlcmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -588,7 +588,7 @@ wxSize wxStaticBitmapBase::DoGetBestSize() const { wxSize best; wxBitmap bmp = GetBitmap(); - if ( bmp.Ok() ) + if ( bmp.IsOk() ) best = wxSize(bmp.GetWidth(), bmp.GetHeight()); else // this is completely arbitrary diff --git a/Externals/wxWidgets3/src/common/datavcmn.cpp b/Externals/wxWidgets3/src/common/datavcmn.cpp index 69894acbe5..2eb5731566 100644 --- a/Externals/wxWidgets3/src/common/datavcmn.cpp +++ b/Externals/wxWidgets3/src/common/datavcmn.cpp @@ -3,7 +3,7 @@ // Purpose: wxDataViewCtrl base classes and common parts // Author: Robert Roebling // Created: 2006/02/20 -// RCS-ID: $Id: datavcmn.cpp 66403 2010-12-19 15:02:56Z VZ $ +// RCS-ID: $Id: datavcmn.cpp 70377 2012-01-17 14:05:17Z VS $ // Copyright: (c) 2006, Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -26,6 +26,7 @@ #include "wx/crt.h" #endif +#include "wx/datectrl.h" #include "wx/spinctrl.h" #include "wx/choice.h" #include "wx/imaglist.h" @@ -40,7 +41,7 @@ namespace class wxDataViewEditorCtrlEvtHandler: public wxEvtHandler { public: - wxDataViewEditorCtrlEvtHandler(wxControl *editor, wxDataViewRenderer *owner) + wxDataViewEditorCtrlEvtHandler(wxWindow *editor, wxDataViewRenderer *owner) { m_editorCtrl = editor; m_owner = owner; @@ -59,7 +60,7 @@ protected: private: wxDataViewRenderer *m_owner; - wxControl *m_editorCtrl; + wxWindow *m_editorCtrl; bool m_finished; bool m_focusOnIdle; @@ -387,7 +388,7 @@ wxDataViewIndexListModel::wxDataViewIndexListModel( unsigned int initial_size ) // build initial index unsigned int i; for (i = 1; i < initial_size+1; i++) - m_hash.Add( wxUIntToPtr(i) ); + m_hash.Add( wxDataViewItem(wxUIntToPtr(i)) ); m_nextFreeID = initial_size + 1; } @@ -403,7 +404,7 @@ void wxDataViewIndexListModel::Reset( unsigned int new_size ) // build initial index unsigned int i; for (i = 1; i < new_size+1; i++) - m_hash.Add( wxUIntToPtr(i) ); + m_hash.Add( wxDataViewItem(wxUIntToPtr(i)) ); m_nextFreeID = new_size + 1; @@ -417,8 +418,8 @@ void wxDataViewIndexListModel::RowPrepended() unsigned int id = m_nextFreeID; m_nextFreeID++; - m_hash.Insert( wxUIntToPtr(id), 0 ); wxDataViewItem item( wxUIntToPtr(id) ); + m_hash.Insert( item, 0 ); ItemAdded( wxDataViewItem(0), item ); } @@ -430,8 +431,8 @@ void wxDataViewIndexListModel::RowInserted( unsigned int before ) unsigned int id = m_nextFreeID; m_nextFreeID++; - m_hash.Insert( wxUIntToPtr(id), before ); wxDataViewItem item( wxUIntToPtr(id) ); + m_hash.Insert( item, before ); ItemAdded( wxDataViewItem(0), item ); } @@ -440,8 +441,8 @@ void wxDataViewIndexListModel::RowAppended() unsigned int id = m_nextFreeID; m_nextFreeID++; - m_hash.Add( wxUIntToPtr(id) ); wxDataViewItem item( wxUIntToPtr(id) ); + m_hash.Add( item ); ItemAdded( wxDataViewItem(0), item ); } @@ -450,15 +451,12 @@ void wxDataViewIndexListModel::RowDeleted( unsigned int row ) m_ordered = false; wxDataViewItem item( m_hash[row] ); - /* wxDataViewModel:: */ ItemDeleted( wxDataViewItem(0), item ); m_hash.RemoveAt( row ); + /* wxDataViewModel:: */ ItemDeleted( wxDataViewItem(0), item ); } void wxDataViewIndexListModel::RowsDeleted( const wxArrayInt &rows ) { - wxArrayInt sorted = rows; - sorted.Sort( my_sort ); - m_ordered = false; wxDataViewItemArray array; @@ -468,10 +466,13 @@ void wxDataViewIndexListModel::RowsDeleted( const wxArrayInt &rows ) wxDataViewItem item( m_hash[rows[i]] ); array.Add( item ); } - /* wxDataViewModel:: */ ItemsDeleted( wxDataViewItem(0), array ); + wxArrayInt sorted = rows; + sorted.Sort( my_sort ); for (i = 0; i < sorted.GetCount(); i++) m_hash.RemoveAt( sorted[i] ); + + /* wxDataViewModel:: */ ItemsDeleted( wxDataViewItem(0), array ); } void wxDataViewIndexListModel::RowChanged( unsigned int row ) @@ -490,7 +491,7 @@ unsigned int wxDataViewIndexListModel::GetRow( const wxDataViewItem &item ) cons return wxPtrToUInt(item.GetID())-1; // assert for not found - return (unsigned int) m_hash.Index( item.GetID() ); + return (unsigned int) m_hash.Index( item ); } wxDataViewItem wxDataViewIndexListModel::GetItem( unsigned int row ) const @@ -671,9 +672,11 @@ wxDataViewRendererBase::wxDataViewRendererBase( const wxString &varianttype, wxDataViewRendererBase::~wxDataViewRendererBase() { + if ( m_editorCtrl ) + DestroyEditControl(); } -const wxDataViewCtrl* wxDataViewRendererBase::GetView() const +wxDataViewCtrl* wxDataViewRendererBase::GetView() const { return const_cast(this)->GetOwner()->GetOwner(); } @@ -728,12 +731,15 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la void wxDataViewRendererBase::DestroyEditControl() { + // Remove our event handler first to prevent it from (recursively) calling + // us again as it would do via a call to FinishEditing() when the editor + // loses focus when we hide it below. + wxEvtHandler * const handler = m_editorCtrl->PopEventHandler(); + // Hide the control immediately but don't delete it yet as there could be // some pending messages for it. m_editorCtrl->Hide(); - wxEvtHandler * const handler = m_editorCtrl->PopEventHandler(); - wxPendingDelete.Append(handler); wxPendingDelete.Append(m_editorCtrl); } @@ -743,8 +749,6 @@ void wxDataViewRendererBase::CancelEditing() if (!m_editorCtrl) return; - GetOwner()->GetOwner()->GetMainWindow()->SetFocus(); - DestroyEditControl(); } @@ -758,25 +762,31 @@ bool wxDataViewRendererBase::FinishEditing() wxDataViewCtrl* dv_ctrl = GetOwner()->GetOwner(); - dv_ctrl->GetMainWindow()->SetFocus(); - DestroyEditControl(); - if (!Validate(value)) - return false; + dv_ctrl->GetMainWindow()->SetFocus(); + bool isValid = Validate(value); unsigned int col = GetOwner()->GetModelColumn(); - dv_ctrl->GetModel()->ChangeValue(value, m_item, col); // Now we should send Editing Done event wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, dv_ctrl->GetId() ); event.SetDataViewColumn( GetOwner() ); event.SetModel( dv_ctrl->GetModel() ); event.SetItem( m_item ); + event.SetValue( value ); + event.SetColumn( col ); + event.SetEditCanceled( !isValid ); event.SetEventObject( dv_ctrl ); dv_ctrl->GetEventHandler()->ProcessEvent( event ); - return true; + if ( isValid && event.IsAllowed() ) + { + dv_ctrl->GetModel()->ChangeValue(value, m_item, col); + return true; + } + + return false; } void wxDataViewRendererBase::PrepareForItem(const wxDataViewModel *model, @@ -799,6 +809,31 @@ void wxDataViewRendererBase::PrepareForItem(const wxDataViewModel *model, // wxDataViewCustomRendererBase // ---------------------------------------------------------------------------- +bool wxDataViewCustomRendererBase::ActivateCell(const wxRect& cell, + wxDataViewModel *model, + const wxDataViewItem & item, + unsigned int col, + const wxMouseEvent* mouseEvent) +{ + // Compatibility code + if ( mouseEvent ) + return LeftClick(mouseEvent->GetPosition(), cell, model, item, col); + else + return Activate(cell, model, item, col); +} + +void wxDataViewCustomRendererBase::RenderBackground(wxDC* dc, const wxRect& rect) +{ + if ( !m_attr.HasBackgroundColour() ) + return; + + const wxColour& colour = m_attr.GetBackgroundColour(); + wxDCPenChanger changePen(*dc, colour); + wxDCBrushChanger changeBrush(*dc, colour); + + dc->DrawRectangle(rect); +} + void wxDataViewCustomRendererBase::WXCallRender(wxRect rectCell, wxDC *dc, int state) { @@ -1087,6 +1122,16 @@ void wxDataViewCtrlBase::SetCurrentItem(const wxDataViewItem& item) Select(item); } +wxDataViewItem wxDataViewCtrlBase::GetSelection() const +{ + if ( GetSelectedItemsCount() != 1 ) + return wxDataViewItem(); + + wxDataViewItemArray selections; + GetSelections(selections); + return selections[0]; +} + wxDataViewColumn * wxDataViewCtrlBase::AppendTextColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) @@ -1373,6 +1418,11 @@ wxDataViewCtrlBase::InsertColumn( unsigned int WXUNUSED(pos), wxDataViewColumn * return true; } +void wxDataViewCtrlBase::StartEditor(const wxDataViewItem& item, unsigned int column) +{ + EditItem(item, GetColumn(column)); +} + // --------------------------------------------------------- // wxDataViewEvent // --------------------------------------------------------- @@ -1417,7 +1467,7 @@ wxDataViewSpinRenderer::wxDataViewSpinRenderer( int min, int max, wxDataViewCell m_max = max; } -wxControl* wxDataViewSpinRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) +wxWindow* wxDataViewSpinRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) { long l = value; wxSize size = labelRect.GetSize(); @@ -1437,7 +1487,7 @@ wxControl* wxDataViewSpinRenderer::CreateEditorCtrl( wxWindow *parent, wxRect la return sc; } -bool wxDataViewSpinRenderer::GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ) +bool wxDataViewSpinRenderer::GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ) { wxSpinCtrl *sc = (wxSpinCtrl*) editor; long l = sc->GetValue(); @@ -1455,7 +1505,15 @@ bool wxDataViewSpinRenderer::Render( wxRect rect, wxDC *dc, int state ) wxSize wxDataViewSpinRenderer::GetSize() const { - return wxSize(80,16); + wxSize sz = GetTextExtent(wxString::Format("%d", (int)m_data)); + + // Allow some space for the spin buttons, which is approximately the size + // of a scrollbar (and getting pixel-exact value would be complicated). + // Also add some whitespace between the text and the button: + sz.x += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); + sz.x += GetTextExtent("M").x; + + return sz; } bool wxDataViewSpinRenderer::SetValue( const wxVariant &value ) @@ -1482,15 +1540,22 @@ wxDataViewChoiceRenderer::wxDataViewChoiceRenderer( const wxArrayString& choices m_choices = choices; } -wxControl* wxDataViewChoiceRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) +wxWindow* wxDataViewChoiceRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) { - wxChoice* c = new wxChoice(parent, wxID_ANY, labelRect.GetTopLeft(), wxDefaultSize, m_choices ); + wxChoice* c = new wxChoice + ( + parent, + wxID_ANY, + labelRect.GetTopLeft(), + wxSize(labelRect.GetWidth(), -1), + m_choices + ); c->Move(labelRect.GetRight() - c->GetRect().width, wxDefaultCoord); c->SetStringSelection( value.GetString() ); return c; } -bool wxDataViewChoiceRenderer::GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ) +bool wxDataViewChoiceRenderer::GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ) { wxChoice *c = (wxChoice*) editor; wxString s = c->GetStringSelection(); @@ -1506,7 +1571,18 @@ bool wxDataViewChoiceRenderer::Render( wxRect rect, wxDC *dc, int state ) wxSize wxDataViewChoiceRenderer::GetSize() const { - return wxSize(80,16); + wxSize sz; + + for ( wxArrayString::const_iterator i = m_choices.begin(); i != m_choices.end(); ++i ) + sz.IncTo(GetTextExtent(*i)); + + // Allow some space for the right-side button, which is approximately the + // size of a scrollbar (and getting pixel-exact value would be complicated). + // Also add some whitespace between the text and the button: + sz.x += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); + sz.x += GetTextExtent("M").x; + + return sz; } bool wxDataViewChoiceRenderer::SetValue( const wxVariant &value ) @@ -1531,14 +1607,14 @@ wxDataViewChoiceByIndexRenderer::wxDataViewChoiceByIndexRenderer( const wxArrayS { } -wxControl* wxDataViewChoiceByIndexRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) +wxWindow* wxDataViewChoiceByIndexRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) { wxVariant string_value = GetChoice( value.GetLong() ); return wxDataViewChoiceRenderer::CreateEditorCtrl( parent, labelRect, string_value ); } -bool wxDataViewChoiceByIndexRenderer::GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ) +bool wxDataViewChoiceByIndexRenderer::GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ) { wxVariant string_value; if (!wxDataViewChoiceRenderer::GetValueFromEditorCtrl( editor, string_value )) @@ -1566,6 +1642,64 @@ bool wxDataViewChoiceByIndexRenderer::GetValue( wxVariant &value ) const #endif +// --------------------------------------------------------- +// wxDataViewDateRenderer +// --------------------------------------------------------- + +#if (defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXGTK__)) && wxUSE_DATEPICKCTRL + +wxDataViewDateRenderer::wxDataViewDateRenderer(const wxString& varianttype, + wxDataViewCellMode mode, int align) + : wxDataViewCustomRenderer(varianttype, mode, align) +{ +} + +wxWindow * +wxDataViewDateRenderer::CreateEditorCtrl(wxWindow *parent, wxRect labelRect, const wxVariant& value) +{ + return new wxDatePickerCtrl + ( + parent, + wxID_ANY, + value.GetDateTime(), + labelRect.GetTopLeft(), + labelRect.GetSize() + ); +} + +bool wxDataViewDateRenderer::GetValueFromEditorCtrl(wxWindow *editor, wxVariant& value) +{ + wxDatePickerCtrl *ctrl = static_cast(editor); + value = ctrl->GetValue(); + return true; +} + +bool wxDataViewDateRenderer::SetValue(const wxVariant& value) +{ + m_date = value.GetDateTime(); + return true; +} + +bool wxDataViewDateRenderer::GetValue(wxVariant& value) const +{ + value = m_date; + return true; +} + +bool wxDataViewDateRenderer::Render(wxRect cell, wxDC* dc, int state) +{ + wxString tmp = m_date.FormatDate(); + RenderText( tmp, 0, cell, dc, state ); + return true; +} + +wxSize wxDataViewDateRenderer::GetSize() const +{ + return GetTextExtent(m_date.FormatDate()); +} + +#endif // (defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXGTK__)) && wxUSE_DATEPICKCTRL + //----------------------------------------------------------------------------- // wxDataViewListStore //----------------------------------------------------------------------------- @@ -1972,7 +2106,7 @@ wxDataViewItem wxDataViewTreeStore::GetNthChild( const wxDataViewItem& parent, u wxDataViewTreeStoreNodeList::compatibility_iterator node = parent_node->GetChildren().Item( pos ); if (node) - return node->GetData(); + return wxDataViewItem(node->GetData()); return wxDataViewItem(0); } @@ -2078,7 +2212,7 @@ void wxDataViewTreeStore::DeleteChildren( const wxDataViewItem& item ) void wxDataViewTreeStore::DeleteAllItems() { - DeleteChildren(m_root); + DeleteChildren(wxDataViewItem(m_root)); } void @@ -2215,11 +2349,6 @@ BEGIN_EVENT_TABLE(wxDataViewTreeCtrl,wxDataViewCtrl) EVT_SIZE( wxDataViewTreeCtrl::OnSize ) END_EVENT_TABLE() -wxDataViewTreeCtrl::~wxDataViewTreeCtrl() -{ - delete m_imageList; -} - bool wxDataViewTreeCtrl::Create( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator ) { @@ -2238,27 +2367,17 @@ bool wxDataViewTreeCtrl::Create( wxWindow *parent, wxWindowID id, wxDATAVIEW_CELL_EDITABLE, -1, // default width wxALIGN_NOT, // and alignment - 0 // not resizeable + 0 // not resizable ); return true; } -void wxDataViewTreeCtrl::SetImageList( wxImageList *imagelist ) -{ - delete m_imageList; - - m_imageList = imagelist; -} - wxDataViewItem wxDataViewTreeCtrl::AppendItem( const wxDataViewItem& parent, const wxString &text, int iconIndex, wxClientData *data ) { - wxIcon icon = wxNullIcon; - if (m_imageList && (iconIndex != -1)) - icon = m_imageList->GetIcon( iconIndex ); - - wxDataViewItem res = GetStore()->AppendItem( parent, text, icon, data ); + wxDataViewItem res = GetStore()-> + AppendItem( parent, text, GetImage(iconIndex), data ); GetStore()->ItemAdded( parent, res ); @@ -2268,11 +2387,8 @@ wxDataViewItem wxDataViewTreeCtrl::AppendItem( const wxDataViewItem& parent, wxDataViewItem wxDataViewTreeCtrl::PrependItem( const wxDataViewItem& parent, const wxString &text, int iconIndex, wxClientData *data ) { - wxIcon icon = wxNullIcon; - if (m_imageList && (iconIndex != -1)) - icon = m_imageList->GetIcon( iconIndex ); - - wxDataViewItem res = GetStore()->PrependItem( parent, text, icon, data ); + wxDataViewItem res = GetStore()-> + PrependItem( parent, text, GetImage(iconIndex), data ); GetStore()->ItemAdded( parent, res ); @@ -2282,11 +2398,8 @@ wxDataViewItem wxDataViewTreeCtrl::PrependItem( const wxDataViewItem& parent, wxDataViewItem wxDataViewTreeCtrl::InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous, const wxString &text, int iconIndex, wxClientData *data ) { - wxIcon icon = wxNullIcon; - if (m_imageList && (iconIndex != -1)) - icon = m_imageList->GetIcon( iconIndex ); - - wxDataViewItem res = GetStore()->InsertItem( parent, previous, text, icon, data ); + wxDataViewItem res = GetStore()-> + InsertItem( parent, previous, text, GetImage(iconIndex), data ); GetStore()->ItemAdded( parent, res ); @@ -2296,15 +2409,9 @@ wxDataViewItem wxDataViewTreeCtrl::InsertItem( const wxDataViewItem& parent, con wxDataViewItem wxDataViewTreeCtrl::PrependContainer( const wxDataViewItem& parent, const wxString &text, int iconIndex, int expandedIndex, wxClientData *data ) { - wxIcon icon = wxNullIcon; - if (m_imageList && (iconIndex != -1)) - icon = m_imageList->GetIcon( iconIndex ); - - wxIcon expanded = wxNullIcon; - if (m_imageList && (expandedIndex != -1)) - expanded = m_imageList->GetIcon( expandedIndex ); - - wxDataViewItem res = GetStore()->PrependContainer( parent, text, icon, expanded, data ); + wxDataViewItem res = GetStore()-> + PrependContainer( parent, text, + GetImage(iconIndex), GetImage(expandedIndex), data ); GetStore()->ItemAdded( parent, res ); @@ -2314,15 +2421,9 @@ wxDataViewItem wxDataViewTreeCtrl::PrependContainer( const wxDataViewItem& paren wxDataViewItem wxDataViewTreeCtrl::AppendContainer( const wxDataViewItem& parent, const wxString &text, int iconIndex, int expandedIndex, wxClientData *data ) { - wxIcon icon = wxNullIcon; - if (m_imageList && (iconIndex != -1)) - icon = m_imageList->GetIcon( iconIndex ); - - wxIcon expanded = wxNullIcon; - if (m_imageList && (expandedIndex != -1)) - expanded = m_imageList->GetIcon( expandedIndex ); - - wxDataViewItem res = GetStore()->AppendContainer( parent, text, icon, expanded, data ); + wxDataViewItem res = GetStore()-> + AppendContainer( parent, text, + GetImage(iconIndex), GetImage(expandedIndex), data ); GetStore()->ItemAdded( parent, res ); @@ -2332,15 +2433,9 @@ wxDataViewItem wxDataViewTreeCtrl::AppendContainer( const wxDataViewItem& parent wxDataViewItem wxDataViewTreeCtrl::InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous, const wxString &text, int iconIndex, int expandedIndex, wxClientData *data ) { - wxIcon icon = wxNullIcon; - if (m_imageList && (iconIndex != -1)) - icon = m_imageList->GetIcon( iconIndex ); - - wxIcon expanded = wxNullIcon; - if (m_imageList && (expandedIndex != -1)) - expanded = m_imageList->GetIcon( expandedIndex ); - - wxDataViewItem res = GetStore()->InsertContainer( parent, previous, text, icon, expanded, data ); + wxDataViewItem res = GetStore()-> + InsertContainer( parent, previous, text, + GetImage(iconIndex), GetImage(expandedIndex), data ); GetStore()->ItemAdded( parent, res ); @@ -2409,7 +2504,7 @@ void wxDataViewTreeCtrl::DeleteAllItems() void wxDataViewTreeCtrl::OnExpanded( wxDataViewEvent &event ) { - if (m_imageList) return; + if (HasImageList()) return; wxDataViewTreeStoreContainerNode* container = GetStore()->FindContainerNode( event.GetItem() ); if (!container) return; @@ -2421,7 +2516,7 @@ void wxDataViewTreeCtrl::OnExpanded( wxDataViewEvent &event ) void wxDataViewTreeCtrl::OnCollapsed( wxDataViewEvent &event ) { - if (m_imageList) return; + if (HasImageList()) return; wxDataViewTreeStoreContainerNode* container = GetStore()->FindContainerNode( event.GetItem() ); if (!container) return; diff --git a/Externals/wxWidgets3/src/common/datetime.cpp b/Externals/wxWidgets3/src/common/datetime.cpp index 19e3b3e291..e131abdbc8 100644 --- a/Externals/wxWidgets3/src/common/datetime.cpp +++ b/Externals/wxWidgets3/src/common/datetime.cpp @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 11.05.99 -// RCS-ID: $Id: datetime.cpp 66245 2010-11-23 13:11:10Z VZ $ +// RCS-ID: $Id: datetime.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1999 Vadim Zeitlin // parts of code taken from sndcal library by Scott E. Lee: // @@ -63,7 +63,7 @@ #if !defined(wxUSE_DATETIME) || wxUSE_DATETIME #ifndef WX_PRECOMP - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #endif #include "wx/string.h" @@ -75,6 +75,7 @@ #endif // WX_PRECOMP #include "wx/thread.h" +#include "wx/time.h" #include "wx/tokenzr.h" #include @@ -108,98 +109,6 @@ wxCUSTOM_TYPE_INFO(wxDateTime, wxToStringConverter , wxFromStringCon #endif // wxUSE_EXTENDED_RTTI - -// ---------------------------------------------------------------------------- -// conditional compilation -// ---------------------------------------------------------------------------- - -#if defined(__MWERKS__) && wxUSE_UNICODE - #include -#endif - -#if defined(__DJGPP__) || defined(__WINE__) - #include - #include -#endif - -#ifndef WX_GMTOFF_IN_TM - // Define it for some systems which don't (always) use configure but are - // known to have tm_gmtoff field. - #if defined(__WXPALMOS__) || defined(__DARWIN__) - #define WX_GMTOFF_IN_TM - #endif -#endif - -// NB: VC8 safe time functions could/should be used for wxMSW as well probably -#if defined(__WXWINCE__) && defined(__VISUALC8__) - -struct tm *wxLocaltime_r(const time_t *t, struct tm* tm) -{ - __time64_t t64 = *t; - return _localtime64_s(tm, &t64) == 0 ? tm : NULL; -} - -struct tm *wxGmtime_r(const time_t* t, struct tm* tm) -{ - __time64_t t64 = *t; - return _gmtime64_s(tm, &t64) == 0 ? tm : NULL; -} - -#else // !wxWinCE with VC8 - -#if (!defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R)) && wxUSE_THREADS && !defined(__WINDOWS__) -static wxMutex timeLock; -#endif - -#ifndef HAVE_LOCALTIME_R -struct tm *wxLocaltime_r(const time_t* ticks, struct tm* temp) -{ -#if wxUSE_THREADS && !defined(__WINDOWS__) - // No need to waste time with a mutex on windows since it's using - // thread local storage for localtime anyway. - wxMutexLocker locker(timeLock); -#endif - - // Borland CRT crashes when passed 0 ticks for some reason, see SF bug 1704438 -#ifdef __BORLANDC__ - if ( !*ticks ) - return NULL; -#endif - - const tm * const t = localtime(ticks); - if ( !t ) - return NULL; - - memcpy(temp, t, sizeof(struct tm)); - return temp; -} -#endif // !HAVE_LOCALTIME_R - -#ifndef HAVE_GMTIME_R -struct tm *wxGmtime_r(const time_t* ticks, struct tm* temp) -{ -#if wxUSE_THREADS && !defined(__WINDOWS__) - // No need to waste time with a mutex on windows since it's - // using thread local storage for gmtime anyway. - wxMutexLocker locker(timeLock); -#endif - -#ifdef __BORLANDC__ - if ( !*ticks ) - return NULL; -#endif - - const tm * const t = gmtime(ticks); - if ( !t ) - return NULL; - - memcpy(temp, gmtime(ticks), sizeof(struct tm)); - return temp; -} -#endif // !HAVE_GMTIME_R - -#endif // wxWinCE with VC8/other platforms - // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- @@ -327,63 +236,6 @@ wxDateTime::wxDateTime_t GetNumOfDaysInMonth(int year, wxDateTime::Month month) return daysInMonth[wxDateTime::IsLeapYear(year)][month]; } -// returns the time zone in the C sense, i.e. the difference UTC - local -// (in seconds) -// NOTE: not static because used by datetimefmt.cpp -int GetTimeZone() -{ -#ifdef WX_GMTOFF_IN_TM - // set to true when the timezone is set - static bool s_timezoneSet = false; - static long gmtoffset = LONG_MAX; // invalid timezone - - // ensure that the timezone variable is set by calling wxLocaltime_r - if ( !s_timezoneSet ) - { - // just call wxLocaltime_r() instead of figuring out whether this - // system supports tzset(), _tzset() or something else - time_t t = 0; - struct tm tm; - - wxLocaltime_r(&t, &tm); - s_timezoneSet = true; - - // note that GMT offset is the opposite of time zone and so to return - // consistent results in both WX_GMTOFF_IN_TM and !WX_GMTOFF_IN_TM - // cases we have to negate it - gmtoffset = -tm.tm_gmtoff; - } - return (int)gmtoffset; -#elif defined(__DJGPP__) || defined(__WINE__) - struct timeb tb; - ftime(&tb); - return tb.timezone*60; -#elif defined(__VISUALC__) - // We must initialize the time zone information before using it (this will - // be done only once internally). - _tzset(); - - // Starting with VC++ 8 timezone variable is deprecated and is not even - // available in some standard library version so use the new function for - // accessing it instead. - #if wxCHECK_VISUALC_VERSION(8) - long t; - _get_timezone(&t); - return t; - #else // VC++ < 8 - return timezone; - #endif -#elif defined(WX_TIMEZONE) // If WX_TIMEZONE was defined by configure, use it. - return WX_TIMEZONE; -#elif defined(__BORLANDC__) || defined(__MINGW32__) || defined(__VISAGECPP__) - return _timezone; -#elif defined(__MWERKS__) - return 28800; -#else // unknown platform -- assume it has timezone - return timezone; -#endif // WX_GMTOFF_IN_TM/!WX_GMTOFF_IN_TM -} - // return the integral part of the JDN for the midnight of the given date (to // get the real JDN you need to add 0.5, this is, in fact, JDN of the // noon of the previous day) @@ -437,8 +289,15 @@ wxString CallStrftime(const wxString& format, const tm* tm) if ( !wxStrftime(buf, WXSIZEOF(buf), format, tm) ) { - // if the format is valid, buffer must be too small? - wxFAIL_MSG(wxT("strftime() failed")); + // There is one special case in which strftime() can return 0 without + // indicating an error: "%p" may give empty string depending on the + // locale, so check for it explicitly. Apparently it's really the only + // exception. + if ( format != wxS("%p") ) + { + // if the format is valid, buffer must be too small? + wxFAIL_MSG(wxT("strftime() failed")); + } buf[0] = '\0'; } @@ -602,7 +461,7 @@ wxDateTime::TimeZone::TimeZone(wxDateTime::TZ tz) case wxDateTime::Local: // get the offset from C RTL: it returns the difference GMT-local // while we want to have the offset _from_ GMT, hence the '-' - m_offset = -GetTimeZone(); + m_offset = -wxGetTimeZone(); break; case wxDateTime::GMT_12: @@ -1243,7 +1102,7 @@ wxDateTime wxDateTime::GetEndDST(int year, Country country) // return the current time with ms precision /* static */ wxDateTime wxDateTime::UNow() { - return wxDateTime(wxGetLocalTimeMillis()); + return wxDateTime(wxGetUTCTimeMillis()); } // the values in the tm structure contain the local time @@ -1259,7 +1118,7 @@ wxDateTime& wxDateTime::Set(const struct tm& tm) if ( tm2.tm_year == 70 && tm2.tm_mon == 0 && tm2.tm_mday == 1 ) { return Set((time_t)( - GetTimeZone() + + wxGetTimeZone() + tm2.tm_hour * MIN_PER_HOUR * SEC_PER_MIN + tm2.tm_min * SEC_PER_MIN + tm2.tm_sec)); @@ -1373,7 +1232,7 @@ wxDateTime& wxDateTime::Set(wxDateTime_t day, m_time *= SECONDS_PER_DAY * TIME_T_FACTOR; // JDN corresponds to GMT, we take localtime - Add(wxTimeSpan(hour, minute, second + GetTimeZone(), millisec)); + Add(wxTimeSpan(hour, minute, second + wxGetTimeZone(), millisec)); } return *this; @@ -1512,7 +1371,7 @@ wxDateTime::Tm wxDateTime::GetTm(const TimeZone& tz) const // use C RTL functions struct tm tmstruct; tm *tm; - if ( tz.GetOffset() == -GetTimeZone() ) + if ( tz.GetOffset() == -wxGetTimeZone() ) { // we are working with local time tm = wxLocaltime_r(&time, &tmstruct); @@ -2146,7 +2005,7 @@ int wxDateTime::IsDST(wxDateTime::Country country) const wxDateTime& wxDateTime::MakeTimezone(const TimeZone& tz, bool noDST) { - long secDiff = GetTimeZone() + tz.GetOffset(); + long secDiff = wxGetTimeZone() + tz.GetOffset(); // we need to know whether DST is or not in effect for this date unless // the test disabled by the caller @@ -2161,7 +2020,7 @@ wxDateTime& wxDateTime::MakeTimezone(const TimeZone& tz, bool noDST) wxDateTime& wxDateTime::MakeFromTimezone(const TimeZone& tz, bool noDST) { - long secDiff = GetTimeZone() + tz.GetOffset(); + long secDiff = wxGetTimeZone() + tz.GetOffset(); // we need to know whether DST is or not in effect for this date unless // the test disabled by the caller @@ -2339,7 +2198,7 @@ WXDLLIMPEXP_BASE void wxPrevWDay(wxDateTime::WeekDay& wd) : (wxDateTime::WeekDay)(wd - 1); } -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wxDateTime& wxDateTime::SetFromMSWSysTime(const SYSTEMTIME& st) { @@ -2387,6 +2246,6 @@ void wxDateTime::GetAsMSWSysDate(SYSTEMTIME* st) const st->wMilliseconds = 0; } -#endif // __WXMSW__ +#endif // __WINDOWS__ #endif // wxUSE_DATETIME diff --git a/Externals/wxWidgets3/src/common/datetimefmt.cpp b/Externals/wxWidgets3/src/common/datetimefmt.cpp index 7b9e61a5a9..a96f09e2ce 100644 --- a/Externals/wxWidgets3/src/common/datetimefmt.cpp +++ b/Externals/wxWidgets3/src/common/datetimefmt.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 11.05.99 -// RCS-ID: $Id: datetimefmt.cpp 66166 2010-11-16 22:37:52Z VZ $ +// RCS-ID: $Id: datetimefmt.cpp 70847 2012-03-09 01:09:25Z VZ $ // Copyright: (c) 1999 Vadim Zeitlin // parts of code taken from sndcal library by Scott E. Lee: // @@ -34,7 +34,7 @@ #if !defined(wxUSE_DATETIME) || wxUSE_DATETIME #ifndef WX_PRECOMP - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #endif #include "wx/string.h" @@ -57,6 +57,7 @@ #endif #include "wx/datetime.h" +#include "wx/time.h" // ============================================================================ // implementation of wxDateTime @@ -68,8 +69,6 @@ extern void InitTm(struct tm& tm); -extern int GetTimeZone(); - extern wxString CallStrftime(const wxString& format, const tm* tm); // ---------------------------------------------------------------------------- @@ -320,16 +319,22 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const format.Replace("%X",wxLocale::GetInfo(wxLOCALE_TIME_FMT)); #endif // we have to use our own implementation if the date is out of range of - // strftime() or if we use non standard specificators + // strftime() or if we use non standard specifiers (notice that "%z" is + // special because it is de facto standard under Unix but is not supported + // under Windows) #ifdef wxHAS_STRFTIME time_t time = GetTicks(); - if ( (time != (time_t)-1) && !wxStrstr(format, wxT("%l")) ) + if ( (time != (time_t)-1) && !wxStrstr(format, wxT("%l")) +#ifdef __WINDOWS__ + && !wxStrstr(format, wxT("%z")) +#endif + ) { // use strftime() struct tm tmstruct; struct tm *tm; - if ( tz.GetOffset() == -GetTimeZone() ) + if ( tz.GetOffset() == -wxGetTimeZone() ) { // we are working with local time tm = wxLocaltime_r(&time, &tmstruct); @@ -398,6 +403,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const switch ( (*++p).GetValue() ) { case wxT('Y'): // year has 4 digits + case wxT('z'): // time zone as well fmt = wxT("%04d"); break; @@ -640,6 +646,25 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const res += wxString::Format(fmt, tm.year); break; + case wxT('z'): // time zone as [-+]HHMM + { + int ofs = tz.GetOffset(); + if ( ofs < 0 ) + { + res += '-'; + ofs = -ofs; + } + else + { + res += '+'; + } + + // Converts seconds to HHMM representation. + res += wxString::Format(fmt, + 100*(ofs/3600) + (ofs/60)%60); + } + break; + case wxT('Z'): // timezone name #ifdef wxHAS_STRFTIME res += CallStrftime(wxT("%Z"), &tmTimeOnly); @@ -668,7 +693,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const } // no, it wasn't the width - wxFAIL_MSG(wxT("unknown format specificator")); + wxFAIL_MSG(wxT("unknown format specifier")); // fall through and just copy it nevertheless @@ -930,6 +955,8 @@ wxDateTime::ParseFormat(const wxString& date, bool hourIsIn12hFormat = false, // or in 24h one? isPM = false; // AM by default + bool haveTimeZone = false; + // and the value of the items we have (init them to get rid of warnings) wxDateTime_t msec = 0, sec = 0, @@ -940,6 +967,7 @@ wxDateTime::ParseFormat(const wxString& date, mday = 0; wxDateTime::Month mon = Inv_Month; int year = 0; + long timeZone = 0; // time zone in seconds as expected in Tm structure wxString::const_iterator input = date.begin(); const wxString::const_iterator end = date.end(); @@ -1378,6 +1406,41 @@ wxDateTime::ParseFormat(const wxString& date, year = (wxDateTime_t)num; break; + case wxT('z'): + { + // check that we have something here at all + if ( input == end ) + return false; + + // and then check that it's either plus or minus sign + bool minusFound; + if ( *input == wxT('-') ) + minusFound = true; + else if ( *input == wxT('+') ) + minusFound = false; + else + return false; // no match + + // here should follow 4 digits HHMM + ++input; + unsigned long tzHourMin; + if ( !GetNumericToken(4, input, end, &tzHourMin) ) + return false; // no match + + const unsigned hours = tzHourMin / 100; + const unsigned minutes = tzHourMin % 100; + + if ( hours > 12 || minutes > 59 ) + return false; // bad format + + timeZone = 3600*hours + 60*minutes; + if ( minusFound ) + timeZone = -timeZone; + + haveTimeZone = true; + } + break; + case wxT('Z'): // timezone name // FIXME: currently we just ignore everything that looks like a // time zone here @@ -1385,7 +1448,7 @@ wxDateTime::ParseFormat(const wxString& date, break; case wxT('%'): // a percent sign - if ( *input++ != wxT('%') ) + if ( input == end || *input++ != wxT('%') ) { // no match return false; @@ -1483,6 +1546,14 @@ wxDateTime::ParseFormat(const wxString& date, Set(tm); + // If a time zone was specified and it is not the local time zone, we need + // to shift the time accordingly. + // + // Note that avoiding the call to MakeFromTimeZone is necessary to avoid + // DST problems. + if ( haveTimeZone && timeZone != -wxGetTimeZone() ) + MakeFromTimezone(timeZone); + // finally check that the week day is consistent -- if we had it if ( haveWDay && GetWeekDay() != wday ) return false; diff --git a/Externals/wxWidgets3/src/common/dcbase.cpp b/Externals/wxWidgets3/src/common/dcbase.cpp index e181a3581c..5394c8af17 100644 --- a/Externals/wxWidgets3/src/common/dcbase.cpp +++ b/Externals/wxWidgets3/src/common/dcbase.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 05/25/99 -// RCS-ID: $Id: dcbase.cpp 67063 2011-02-27 12:48:13Z VZ $ +// RCS-ID: $Id: dcbase.cpp 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -35,6 +35,7 @@ #ifndef WX_PRECOMP #include "wx/math.h" #include "wx/module.h" + #include "wx/window.h" #endif #ifdef __WXMSW__ @@ -89,12 +90,6 @@ #include "wx/dfb/dcscreen.h" #endif -#ifdef __WXPALMOS__ - #include "wx/palmos/dcclient.h" - #include "wx/palmos/dcmemory.h" - #include "wx/palmos/dcscreen.h" -#endif - //---------------------------------------------------------------------------- // wxDCFactory //---------------------------------------------------------------------------- @@ -927,9 +922,9 @@ void wxDCImpl::DoDrawSpline( const wxPointList *points ) wx_spline_add_point(x1, y1); while ((node = node->GetNext()) -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS != NULL -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS ) { p = node->GetData(); @@ -1182,7 +1177,7 @@ void wxDC::DrawLabel(const wxString& text, GetMultiLineTextExtent(text, &widthText, &heightText, &heightLine); wxCoord width, height; - if ( bitmap.Ok() ) + if ( bitmap.IsOk() ) { width = widthText + bitmap.GetWidth(); height = bitmap.GetHeight(); @@ -1224,7 +1219,7 @@ void wxDC::DrawLabel(const wxString& text, wxCoord x0 = x, y0 = y, width0 = width; - if ( bitmap.Ok() ) + if ( bitmap.IsOk() ) { DrawBitmap(bitmap, x, y, true /* use mask */); @@ -1602,7 +1597,7 @@ void wxDCImpl::CalculateEllipticPoints( wxPointList* points, y2 = y2-y-y+1; --y; } - // old y now to big: set point with old y, old x + // old y now too big: set point with old y, old x if( bNewPoint && x>1) { int x1 = x - 1; diff --git a/Externals/wxWidgets3/src/common/dcbufcmn.cpp b/Externals/wxWidgets3/src/common/dcbufcmn.cpp index 765a50b636..8b230ad299 100644 --- a/Externals/wxWidgets3/src/common/dcbufcmn.cpp +++ b/Externals/wxWidgets3/src/common/dcbufcmn.cpp @@ -4,7 +4,7 @@ // Author: Ron Lee, Jaakko Salli // Modified by: // Created: Sep-20-2006 -// RCS-ID: $Id: dcbufcmn.cpp 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: dcbufcmn.cpp 67659 2011-05-01 15:47:46Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -105,6 +105,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxSharedDCBufferManager, wxModule) void wxBufferedDC::UseBuffer(wxCoord w, wxCoord h) { + wxCHECK_RET( w >= -1 && h >= -1, "Invalid buffer size" ); + if ( !m_buffer || !m_buffer->IsOk() ) { if ( w == -1 || h == -1 ) diff --git a/Externals/wxWidgets3/src/common/dcgraph.cpp b/Externals/wxWidgets3/src/common/dcgraph.cpp index 6d65764510..633c482240 100644 --- a/Externals/wxWidgets3/src/common/dcgraph.cpp +++ b/Externals/wxWidgets3/src/common/dcgraph.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: -// RCS-ID: $Id: dcgraph.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: dcgraph.cpp 70844 2012-03-08 17:06:06Z PC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -53,27 +53,26 @@ static inline double DegToRad(double deg) return (deg * M_PI) / 180.0; } -static bool TranslateRasterOp(wxRasterOperationMode function, wxCompositionMode *op) +static wxCompositionMode TranslateRasterOp(wxRasterOperationMode function) { switch ( function ) { case wxCOPY: // src // since we are supporting alpha, _OVER is closer to the intention than _SOURCE - // since the latter would overwrite even when alpha is is not set to opaque - *op = wxCOMPOSITION_OVER; - break; + // since the latter would overwrite even when alpha is not set to opaque + return wxCOMPOSITION_OVER; + case wxOR: // src OR dst - *op = wxCOMPOSITION_ADD; - break; + return wxCOMPOSITION_ADD; + case wxNO_OP: // dst - *op = wxCOMPOSITION_DEST; // ignore the source - break; + return wxCOMPOSITION_DEST; // ignore the source + case wxCLEAR: // 0 - *op = wxCOMPOSITION_CLEAR;// clear dst - break; + return wxCOMPOSITION_CLEAR;// clear dst + case wxXOR: // src XOR dst - *op = wxCOMPOSITION_XOR; - break; + return wxCOMPOSITION_XOR; case wxAND: // src AND dst case wxAND_INVERT: // (NOT src) AND dst @@ -86,10 +85,10 @@ static bool TranslateRasterOp(wxRasterOperationMode function, wxCompositionMode case wxOR_REVERSE: // src OR (NOT dst) case wxSET: // 1 case wxSRC_INVERT: // NOT src - default: - return false; + break; } - return true; + + return wxCOMPOSITION_INVALID; } //----------------------------------------------------------------------------- @@ -115,6 +114,19 @@ wxGCDC::wxGCDC( const wxPrinterDC& dc) : } #endif +#if defined(__WXMSW__) && wxUSE_ENH_METAFILE +wxGCDC::wxGCDC(const wxEnhMetaFileDC& dc) + : wxDC(new wxGCDCImpl(this, dc)) +{ +} +#endif + +wxGCDC::wxGCDC(wxGraphicsContext* context) : + wxDC( new wxGCDCImpl( this ) ) +{ + SetGraphicsContext(context); +} + wxGCDC::wxGCDC() : wxDC( new wxGCDCImpl( this ) ) { @@ -124,7 +136,7 @@ wxGCDC::~wxGCDC() { } -wxGraphicsContext* wxGCDC::GetGraphicsContext() +wxGraphicsContext* wxGCDC::GetGraphicsContext() const { if (!m_pimpl) return NULL; wxGCDCImpl *gc_impl = (wxGCDCImpl*) m_pimpl; @@ -175,13 +187,7 @@ wxGCDCImpl::wxGCDCImpl( wxDC *owner, const wxMemoryDC& dc ) : { Init(); wxGraphicsContext* context; -#if wxUSE_CAIRO - wxGraphicsRenderer* renderer = wxGraphicsRenderer::GetCairoRenderer(); - context = renderer->CreateContext(dc); -#else context = wxGraphicsContext::Create(dc); -#endif - SetGraphicsContext( context ); } @@ -194,6 +200,15 @@ wxGCDCImpl::wxGCDCImpl( wxDC *owner, const wxPrinterDC& dc ) : } #endif +#if defined(__WXMSW__) && wxUSE_ENH_METAFILE +wxGCDCImpl::wxGCDCImpl(wxDC *owner, const wxEnhMetaFileDC& dc) + : wxDCImpl(owner) +{ + Init(); + SetGraphicsContext(wxGraphicsContext::Create(dc)); +} +#endif + void wxGCDCImpl::Init() { m_ok = false; @@ -367,7 +382,10 @@ void wxGCDCImpl::SetTextForeground( const wxColour &col ) { wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::SetTextForeground - invalid DC") ); - if ( col != m_textForegroundColour ) + // don't set m_textForegroundColour to an invalid colour as we'd crash + // later then (we use m_textForegroundColour.GetColor() without checking + // in a few places) + if ( col.IsOk() && col != m_textForegroundColour ) { m_textForegroundColour = col; m_graphicContext->SetFont( m_font, m_textForegroundColour ); @@ -502,8 +520,8 @@ void wxGCDCImpl::SetLogicalFunction( wxRasterOperationMode function ) m_logicalFunction = function; - wxCompositionMode mode; - m_logicalFunctionSupported = TranslateRasterOp( function, &mode); + wxCompositionMode mode = TranslateRasterOp( function ); + m_logicalFunctionSupported = mode != wxCOMPOSITION_INVALID; if (m_logicalFunctionSupported) m_logicalFunctionSupported = m_graphicContext->SetCompositionMode(mode); @@ -696,13 +714,13 @@ void wxGCDCImpl::DoDrawSpline(const wxPointList *points) path.MoveToPoint( x1 , y1 ); path.AddLineToPoint( cx1 , cy1 ); -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS while ((node = node->GetNext()) != NULL) #else while ((node = node->GetNext())) -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS { p = node->GetData(); @@ -874,13 +892,25 @@ bool wxGCDCImpl::DoStretchBlit( if ( logical_func == wxNO_OP ) return true; - wxCompositionMode mode; - if ( !TranslateRasterOp(logical_func, &mode) ) + wxCompositionMode mode = TranslateRasterOp(logical_func); + if ( mode == wxCOMPOSITION_INVALID ) { wxFAIL_MSG( wxT("Blitting is not supported with this logical operation.") ); return false; } + wxRect subrect(source->LogicalToDeviceX(xsrc), + source->LogicalToDeviceY(ysrc), + source->LogicalToDeviceXRel(srcWidth), + source->LogicalToDeviceYRel(srcHeight)); + const wxRect subrectOrig = subrect; + // clip the subrect down to the size of the source DC + wxRect clip; + source->GetSize(&clip.width, &clip.height); + subrect.Intersect(clip); + if (subrect.width == 0) + return true; + bool retval = true; wxCompositionMode formerMode = m_graphicContext->GetCompositionMode(); @@ -898,21 +928,6 @@ bool wxGCDCImpl::DoStretchBlit( ysrcMask = ysrc; } - wxRect subrect(source->LogicalToDeviceX(xsrc), - source->LogicalToDeviceY(ysrc), - source->LogicalToDeviceXRel(srcWidth), - source->LogicalToDeviceYRel(srcHeight)); - - // if needed clip the subrect down to the size of the source DC - wxCoord sw, sh; - source->GetSize(&sw, &sh); - sw = source->LogicalToDeviceXRel(sw); - sh = source->LogicalToDeviceYRel(sh); - if (subrect.x + subrect.width > sw) - subrect.width = sw - subrect.x; - if (subrect.y + subrect.height > sh) - subrect.height = sh - subrect.y; - wxBitmap blit = source->GetAsBitmap( &subrect ); if ( blit.IsOk() ) @@ -920,8 +935,19 @@ bool wxGCDCImpl::DoStretchBlit( if ( !useMask && blit.GetMask() ) blit.SetMask(NULL); - m_graphicContext->DrawBitmap( blit, xdest, ydest, - dstWidth, dstHeight); + double x = xdest; + double y = ydest; + double w = dstWidth; + double h = dstHeight; + // adjust dest rect if source rect is clipped + if (subrect.width != subrectOrig.width || subrect.height != subrectOrig.height) + { + x += (subrect.x - subrectOrig.x) / double(subrectOrig.width) * dstWidth; + y += (subrect.y - subrectOrig.y) / double(subrectOrig.height) * dstHeight; + w *= double(subrect.width) / subrectOrig.width; + h *= double(subrect.height) / subrectOrig.height; + } + m_graphicContext->DrawBitmap(blit, x, y, w, h); } else { @@ -958,6 +984,18 @@ void wxGCDCImpl::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, void wxGCDCImpl::DoDrawText(const wxString& str, wxCoord x, wxCoord y) { + // For compatibility with other ports (notably wxGTK) and because it's + // genuinely useful, we allow passing multiline strings to DrawText(). + // However there is no native OSX function to draw them directly so we + // instead reuse the generic DrawLabel() method to render them. Of course, + // DrawLabel() itself will call back to us but with single line strings + // only so there won't be any infinite recursion here. + if ( str.find('\n') != wxString::npos ) + { + GetOwner()->DrawLabel(str, wxRect(x, y, 0, 0)); + return; + } + wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoDrawText - invalid DC") ); if ( str.empty() ) @@ -1145,4 +1183,21 @@ void wxGCDCImpl::DoDrawCheckMark(wxCoord x, wxCoord y, wxDCImpl::DoDrawCheckMark(x,y,width,height); } +#ifdef __WXMSW__ +wxRect wxGCDCImpl::MSWApplyGDIPlusTransform(const wxRect& r) const +{ + wxGraphicsContext* const gc = GetGraphicsContext(); + wxCHECK_MSG( gc, r, wxT("Invalid wxGCDC") ); + + double x = 0, + y = 0; + gc->GetTransform().TransformPoint(&x, &y); + + wxRect rect(r); + rect.Offset(x, y); + + return rect; +} +#endif // __WXMSW__ + #endif // wxUSE_GRAPHICS_CONTEXT diff --git a/Externals/wxWidgets3/src/common/dcsvg.cpp b/Externals/wxWidgets3/src/common/dcsvg.cpp index c161b8964e..5f4514e9bb 100644 --- a/Externals/wxWidgets3/src/common/dcsvg.cpp +++ b/Externals/wxWidgets3/src/common/dcsvg.cpp @@ -3,7 +3,7 @@ // Purpose: SVG sample // Author: Chris Elliott // Modified by: -// RCS-ID: $Id: dcsvg.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: dcsvg.cpp 67883 2011-06-07 22:27:35Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -28,9 +28,6 @@ #include "wx/wfstream.h" #include "wx/filename.h" -#define wxSVG_DEBUG false -// or true to see the calls being executed - // ---------------------------------------------------------- // Global utilities // ---------------------------------------------------------- @@ -40,26 +37,6 @@ namespace inline double DegToRad(double deg) { return (deg * M_PI) / 180.0; } -wxString wxBrushString ( wxColour c, int style ) -{ - wxString s = wxT("fill:") + c.GetAsString(wxC2S_HTML_SYNTAX) + wxT("; "); - switch ( style ) - { - case wxBRUSHSTYLE_SOLID : - s = s + wxT("fill-opacity:1.0; "); - break; - case wxBRUSHSTYLE_TRANSPARENT: - s = s + wxT("fill-opacity:0.0; "); - break; - - default : - wxASSERT_MSG(false, wxT("wxSVGFileDC::Requested Brush Style not available")); - - } - s = s + wxT("\n"); - return s; -} - // This function returns a string representation of a floating point number in // C locale (i.e. always using "." for the decimal separator) and with the // fixed precision (which is 2 for some unknown reason but this is what it was @@ -69,6 +46,66 @@ inline wxString NumStr(double f) return wxString::FromCDouble(f, 2); } +// Return the colour representation as HTML-like "#rrggbb" string and also +// returns its alpha as opacity number in 0..1 range. +wxString Col2SVG(wxColour c, float *opacity) +{ + if ( c.Alpha() != wxALPHA_OPAQUE ) + { + *opacity = c.Alpha()/255.; + + // Remove the alpha before using GetAsString(wxC2S_HTML_SYNTAX) as it + // doesn't support colours with alpha channel. + c = wxColour(c.GetRGB()); + } + else // No alpha. + { + *opacity = 1.; + } + + return c.GetAsString(wxC2S_HTML_SYNTAX); +} + +wxString wxPenString(wxColour c, int style = wxPENSTYLE_SOLID) +{ + float opacity; + wxString s = wxT("stroke:") + Col2SVG(c, &opacity) + wxT("; "); + + switch ( style ) + { + case wxPENSTYLE_SOLID: + s += wxString::Format(wxT("stroke-opacity:%s; "), NumStr(opacity)); + break; + case wxPENSTYLE_TRANSPARENT: + s += wxT("stroke-opacity:0.0; "); + break; + default : + wxASSERT_MSG(false, wxT("wxSVGFileDC::Requested Pen Style not available")); + } + + return s; +} + +wxString wxBrushString(wxColour c, int style = wxBRUSHSTYLE_SOLID) +{ + float opacity; + wxString s = wxT("fill:") + Col2SVG(c, &opacity) + wxT("; "); + + switch ( style ) + { + case wxBRUSHSTYLE_SOLID: + s += wxString::Format(wxT("fill-opacity:%s; "), NumStr(opacity)); + break; + case wxBRUSHSTYLE_TRANSPARENT: + s += wxT("fill-opacity:0.0; "); + break; + default : + wxASSERT_MSG(false, wxT("wxSVGFileDC::Requested Brush Style not available")); + } + + return s; +} + } // anonymous namespace // ---------------------------------------------------------- @@ -110,7 +147,7 @@ void wxSVGFileDCImpl::Init (const wxString &filename, int Width, int Height, dou ////////////////////code here m_outfile = new wxFileOutputStream(filename); - m_OK = m_outfile->Ok (); + m_OK = m_outfile->IsOk(); if (m_OK) { m_filename = filename; @@ -158,17 +195,15 @@ wxSize wxSVGFileDCImpl::GetPPI() const void wxSVGFileDCImpl::DoDrawLine (wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) { - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); wxString s; s.Printf ( wxT(" \n"), x1,y1,x2,y2 ); if (m_OK) { write(s); } - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DrawLine Call executed")); CalcBoundingBox(x1, y1); CalcBoundingBox(x2, y2); - return; } void wxSVGFileDCImpl::DoDrawLines(int n, wxPoint points[], wxCoord xoffset , wxCoord yoffset ) @@ -183,7 +218,7 @@ void wxSVGFileDCImpl::DoDrawLines(int n, wxPoint points[], wxCoord xoffset , wxC void wxSVGFileDCImpl::DoDrawPoint (wxCoord x1, wxCoord y1) { wxString s; - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); s = wxT(" ") + wxString(wxT("\n")); write(s); DoDrawLine ( x1,y1,x1,y1 ); @@ -199,13 +234,12 @@ void wxSVGFileDCImpl::DoDrawCheckMark(wxCoord x1, wxCoord y1, wxCoord width, wxC void wxSVGFileDCImpl::DoDrawText(const wxString& text, wxCoord x1, wxCoord y1) { DoDrawRotatedText(text, x1,y1,0.0); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DrawText Call executed")); } void wxSVGFileDCImpl::DoDrawRotatedText(const wxString& sText, wxCoord x, wxCoord y, double angle) { //known bug; if the font is drawn in a scaled DC, it will not behave exactly as wxMSW - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); wxString s, sTmp; // calculate bounding box @@ -229,37 +263,36 @@ void wxSVGFileDCImpl::DoDrawRotatedText(const wxString& sText, wxCoord x, wxCoor // draw background first // just like DoDrawRectangle except we pass the text color to it and set the border to a 1 pixel wide text background - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::Draw Rotated Text Call plotting text background")); - sTmp.Printf ( wxT(" "), NumStr(-angle), x,y ); - s = s + sTmp + wxT("\n"); + sTmp.Printf ( wxT(" "), NumStr(-angle), x,y ); + s += sTmp + wxT("\n"); write(s); } //now do the text itself s.Printf (wxT(" 0) s = s + wxT("style=\"font-family:") + sTmp + wxT("; "); - else s = s + wxT("style=\" "); + sTmp = m_font.GetFaceName(); + if (sTmp.Len() > 0) s += wxT("style=\"font-family:") + sTmp + wxT("; "); + else s += wxT("style=\" "); wxString fontweights [3] = { wxT("normal"), wxT("lighter"), wxT("bold") }; - s = s + wxT("font-weight:") + fontweights[m_font.GetWeight() - wxNORMAL] + wxT("; "); + s += wxT("font-weight:") + fontweights[m_font.GetWeight() - wxNORMAL] + wxT("; "); wxString fontstyles [5] = { wxT("normal"), wxT("style error"), wxT("style error"), wxT("italic"), wxT("oblique") }; - s = s + wxT("font-style:") + fontstyles[m_font.GetStyle() - wxNORMAL] + wxT("; "); + s += wxT("font-style:") + fontstyles[m_font.GetStyle() - wxNORMAL] + wxT("; "); - sTmp.Printf (wxT("font-size:%dpt; fill:"), m_font.GetPointSize () ); - s = s + sTmp; - s = s + m_textForegroundColour.GetAsString(wxC2S_HTML_SYNTAX) + wxT("; stroke:") + m_textForegroundColour.GetAsString(wxC2S_HTML_SYNTAX) + wxT("; "); + sTmp.Printf (wxT("font-size:%dpt; "), m_font.GetPointSize() ); + s += sTmp; + //text will be solid, unless alpha value isn't opaque in the foreground colour + s += wxBrushString(m_textForegroundColour) + wxPenString(m_textForegroundColour); sTmp.Printf ( wxT("stroke-width:0;\" transform=\"rotate( %s %d %d ) \" >"), NumStr(-angle), x,y ); - s = s + sTmp + sText + wxT(" ") + wxT("\n"); + s += sTmp + sText + wxT(" ") + wxT("\n"); if (m_OK) { write(s); } - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DrawRotatedText Call executed")); } void wxSVGFileDCImpl::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) @@ -270,16 +303,15 @@ void wxSVGFileDCImpl::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoo void wxSVGFileDCImpl::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius ) { - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); wxString s; s.Printf ( wxT(" ") + wxT("\n"); + s += wxT(" /> \n"); write(s); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoDrawRoundedRectangle Call executed")); CalcBoundingBox(x, y); CalcBoundingBox(x + width, y + height); } @@ -288,44 +320,40 @@ void wxSVGFileDCImpl::DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, wxPolygonFillMode fillStyle) { - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); wxString s, sTmp; s = wxT(" "); - s = s + wxT("\n"); + s += wxT("\" /> \n"); write(s); - - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoDrawPolygon Call executed")); } void wxSVGFileDCImpl::DoDrawEllipse (wxCoord x, wxCoord y, wxCoord width, wxCoord height) { - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); int rh = height /2; int rw = width /2; wxString s; s.Printf ( wxT(" ") + wxT("\n"); + s += wxT(" /> \n"); write(s); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoDrawEllipse Call executed")); CalcBoundingBox(x, y); CalcBoundingBox(x + width, y + height); } @@ -341,7 +369,7 @@ void wxSVGFileDCImpl::DoDrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, Might be better described as Pie drawing */ - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); wxString s; // we need the radius of the circle which has two estimates @@ -370,15 +398,13 @@ void wxSVGFileDCImpl::DoDrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, x1,y1, NumStr(r1), NumStr(r2), fArc, fSweep, x2, y2, xc, yc ); // the z means close the path and fill - s = s + wxT(" \" /> ") + wxT("\n"); + s += wxT(" \" /> \n"); if (m_OK) { write(s); } - - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoDrawArc Call executed")); } void wxSVGFileDCImpl::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h,double sa,double ea) @@ -402,7 +428,7 @@ void wxSVGFileDCImpl::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h, //known bug: SVG draws with the current pen along the radii, but this does not happen in wxMSW - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); wxString s; //radius @@ -433,15 +459,12 @@ void wxSVGFileDCImpl::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h, int(xs), int(ys), int(rx), int(ry), fArc, fSweep, int(xe), int(ye), int(xc), int(yc) ); - - s = s + wxT(" \" /> ") + wxT("\n"); + s += wxT(" \" /> \n"); if (m_OK) { write(s); } - - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoDrawEllipticArc Call executed")); } void wxSVGFileDCImpl::DoGetTextExtent(const wxString& string, wxCoord *w, wxCoord *h, wxCoord *descent , wxCoord *externalLeading , const wxFont *font) const @@ -452,17 +475,14 @@ void wxSVGFileDCImpl::DoGetTextExtent(const wxString& string, wxCoord *w, wxCoor sDC.SetFont (m_font); if ( font != NULL ) sDC.SetFont ( *font ); sDC.GetTextExtent(string, w, h, descent, externalLeading ); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::GetTextExtent Call executed")); } wxCoord wxSVGFileDCImpl::GetCharHeight() const - { wxScreenDC sDC; sDC.SetFont (m_font); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::GetCharHeight Call executing")); - return ( sDC.GetCharHeight() ); + return sDC.GetCharHeight(); } @@ -471,9 +491,7 @@ wxCoord wxSVGFileDCImpl::GetCharWidth() const wxScreenDC sDC; sDC.SetFont (m_font); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::GetCharWidth Call executing")); - return ( sDC.GetCharWidth() ); - + return sDC.GetCharWidth(); } @@ -483,16 +501,13 @@ wxCoord wxSVGFileDCImpl::GetCharWidth() const void wxSVGFileDCImpl::SetBackground( const wxBrush &brush ) { - m_backgroundBrush = brush; - return; } void wxSVGFileDCImpl::SetBackgroundMode( int mode ) { m_backgroundMode = mode; - return; } @@ -502,7 +517,6 @@ void wxSVGFileDCImpl::SetBrush(const wxBrush& brush) m_brush = brush; m_graphics_changed = true; - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::SetBrush Call executed")); } @@ -513,21 +527,16 @@ void wxSVGFileDCImpl::SetPen(const wxPen& pen) m_pen = pen; m_graphics_changed = true; - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::SetPen Call executed")); } -void wxSVGFileDCImpl::NewGraphics () +void wxSVGFileDCImpl::NewGraphics() { - - int w = m_pen.GetWidth (); - wxColour c = m_pen.GetColour (); - wxString s, sBrush, sPenCap, sPenJoin, sPenStyle, sLast, sWarn; - sBrush = wxT("\n\n \n"); } sLast.Printf( wxT("stroke-width:%d\" \n transform=\"translate(%s %s) scale(%s %s)\">"), - w, NumStr(m_logicalOriginX), NumStr(m_logicalOriginY), NumStr(m_scaleX), NumStr(m_scaleY) ); + m_pen.GetWidth(), NumStr(m_logicalOriginX), NumStr(m_logicalOriginY), NumStr(m_scaleX), NumStr(m_scaleY) ); s = sBrush + sPenCap + sPenJoin + sPenStyle + sLast + wxT("\n") + sWarn; write(s); m_graphics_changed = false; - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::NewGraphics Call executed")); } @@ -579,8 +575,6 @@ void wxSVGFileDCImpl::SetFont(const wxFont& font) { m_font = font; - - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::SetFont Call executed")); } // export a bitmap as a raster image in png @@ -605,7 +599,6 @@ bool wxSVGFileDCImpl::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoor memDC.Blit(0, 0, width, height, source, xsrc, ysrc); memDC.SelectObject( wxNullBitmap ); DoDrawBitmap(myBitmap, xdest, ydest); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoBlit Call executed")); return false; } @@ -617,13 +610,11 @@ void wxSVGFileDCImpl::DoDrawIcon(const class wxIcon & myIcon, wxCoord x, wxCoord memDC.DrawIcon(myIcon,0,0); memDC.SelectObject( wxNullBitmap ); DoDrawBitmap(myBitmap, x, y); - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoDrawIcon Call executed")); - return; } void wxSVGFileDCImpl::DoDrawBitmap(const class wxBitmap & bmp, wxCoord x, wxCoord y , bool WXUNUSED(bTransparent) /*=0*/ ) { - if (m_graphics_changed) NewGraphics (); + if (m_graphics_changed) NewGraphics(); wxString sTmp, s, sPNG; if ( wxImage::FindHandler(wxBITMAP_TYPE_PNG) == NULL ) @@ -652,25 +643,22 @@ void wxSVGFileDCImpl::DoDrawBitmap(const class wxBitmap & bmp, wxCoord x, wxCoor int w = myBitmap.GetWidth(); int h = myBitmap.GetHeight(); sTmp.Printf ( wxT(" \n"), sPNG.c_str() ); - s = s + sTmp + wxT("Image from wxSVG ") + wxT("\n"); + s += sTmp + wxT("Image from wxSVG ") + wxT("\n"); if (m_OK && bPNG_OK) { write(s); } - m_OK = m_outfile->Ok () && bPNG_OK; - wxASSERT_MSG(!wxSVG_DEBUG, wxT("wxSVGFileDC::DoDrawBitmap Call executed")); - - return; + m_OK = m_outfile->IsOk() && bPNG_OK; } void wxSVGFileDCImpl::write(const wxString &s) { const wxCharBuffer buf = s.utf8_str(); m_outfile->Write(buf, strlen((const char *)buf)); - m_OK = m_outfile->Ok(); + m_OK = m_outfile->IsOk(); } diff --git a/Externals/wxWidgets3/src/common/descrip.mms b/Externals/wxWidgets3/src/common/descrip.mms index b1141822d7..8273a164af 100644 --- a/Externals/wxWidgets3/src/common/descrip.mms +++ b/Externals/wxWidgets3/src/common/descrip.mms @@ -2,7 +2,7 @@ # * # Make file for VMS * # Author : J.Jansen (joukj@hrem.nano.tudelft.nl) * -# Date : 21 March 2011 * +# Date : 6 December 2011 * # * #***************************************************************************** .first @@ -209,8 +209,9 @@ OBJECTS2=tbarbase.obj,srchcmn.obj,\ clrpickercmn.obj,\ filepickercmn.obj,\ fontpickercmn.obj,\ - pickerbase.obj,\ - listctrlcmn.obj,socketiohandler.obj,fdiodispatcher.obj,\ + pickerbase.obj + +OBJECTS3=listctrlcmn.obj,socketiohandler.obj,fdiodispatcher.obj,\ selectdispatcher.obj,overlaycmn.obj,windowid.obj,sstream.obj,\ wrapsizer.obj,headerctrlcmn.obj,headercolcmn.obj,\ rearrangectrl.obj,spinctrlcmn.obj,datetimefmt.obj,xlocale.obj,\ @@ -222,7 +223,8 @@ OBJECTS2=tbarbase.obj,srchcmn.obj,\ statlinecmn.obj,radiobtncmn.obj,bmpbtncmn.obj,checklstcmn.obj,\ statbmpcmn.obj,dirctrlcmn.obj,gridcmn.obj,odcombocmn.obj,\ spinbtncmn.obj,scrolbarcmn.obj,colourdata.obj,fontdata.obj,\ - valnum.obj,numformatter.obj,markupparser.obj + valnum.obj,numformatter.obj,markupparser.obj,\ + affinematrix2d.obj,richtooltipcmn.obj,persist.obj,time.obj OBJECTS_MOTIF=radiocmn.obj,combocmn.obj @@ -425,17 +427,20 @@ SOURCES = \ statboxcmn.cpp,slidercmn.cpp,statlinecmn.cpp,radiobtncmn.cpp,\ bmpbtncmn.cpp,checklstcmn.cpp,statbmpcmn.cpp,dirctrlcmn.cpp,\ gridcmn.cpp,odcombocmn.cpp,spinbtncmn.cpp,scrolbarcmn.cpp,\ - colourdata.cpp,fontdata.cpp + colourdata.cpp,fontdata.cpp affinematrix2d.cpp\ + richtooltipcmn.cpp persist.cpp time.cpp all : $(SOURCES) $(MMS)$(MMSQUALIFIERS) $(OBJECTS) $(MMS)$(MMSQUALIFIERS) $(OBJECTS1) $(MMS)$(MMSQUALIFIERS) $(OBJECTS2) + $(MMS)$(MMSQUALIFIERS) $(OBJECTS3) .ifdef __WXMOTIF__ $(MMS)$(MMSQUALIFIERS) $(OBJECTS_MOTIF) library [--.lib]libwx_motif.olb $(OBJECTS) library [--.lib]libwx_motif.olb $(OBJECTS1) library [--.lib]libwx_motif.olb $(OBJECTS2) + library [--.lib]libwx_motif.olb $(OBJECTS3) library [--.lib]libwx_motif.olb $(OBJECTS_MOTIF) .else .ifdef __WXGTK__ @@ -443,6 +448,7 @@ all : $(SOURCES) library [--.lib]libwx_gtk.olb $(OBJECTS) library [--.lib]libwx_gtk.olb $(OBJECTS1) library [--.lib]libwx_gtk.olb $(OBJECTS2) + library [--.lib]libwx_gtk.olb $(OBJECTS3) library [--.lib]libwx_gtk.olb $(OBJECTS_X11) .else .ifdef __WXGTK2__ @@ -451,6 +457,7 @@ all : $(SOURCES) library [--.lib]libwx_gtk2.olb $(OBJECTS) library [--.lib]libwx_gtk2.olb $(OBJECTS1) library [--.lib]libwx_gtk2.olb $(OBJECTS2) + library [--.lib]libwx_gtk2.olb $(OBJECTS3) library [--.lib]libwx_gtk2.olb $(OBJECTS_X11) library [--.lib]libwx_gtk2.olb $(OBJECTS_GTK2) .else @@ -459,6 +466,7 @@ all : $(SOURCES) library [--.lib]libwx_x11_univ.olb $(OBJECTS) library [--.lib]libwx_x11_univ.olb $(OBJECTS1) library [--.lib]libwx_x11_univ.olb $(OBJECTS2) + library [--.lib]libwx_x11_univ.olb $(OBJECTS3) library [--.lib]libwx_x11_univ.olb $(OBJECTS_X11) .endif .endif @@ -468,6 +476,7 @@ all : $(SOURCES) $(OBJECTS) : [--.include.wx]setup.h $(OBJECTS1) : [--.include.wx]setup.h $(OBJECTS2) : [--.include.wx]setup.h +$(OBJECTS3) : [--.include.wx]setup.h $(OBJECTS_X11) : [--.include.wx]setup.h $(OBJECTS_GTK2) : [--.include.wx]setup.h $(OBJECTS_MOTIF) : [--.include.wx]setup.h @@ -700,3 +709,7 @@ fontdata.obj : fontdata.cpp valnum.obj : valnum.cpp numformatter.obj : numformatter.cpp markupparser.obj : markupparser.cpp +affinematrix2d.obj : affinematrix2d.cpp +richtooltipcmn.obj : richtooltipcmn.cpp +persist.obj : persist.cpp +time.obj : time.cpp diff --git a/Externals/wxWidgets3/src/common/dlgcmn.cpp b/Externals/wxWidgets3/src/common/dlgcmn.cpp index d42c05e87f..1fb9b03f7d 100644 --- a/Externals/wxWidgets3/src/common/dlgcmn.cpp +++ b/Externals/wxWidgets3/src/common/dlgcmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 28.06.99 -// RCS-ID: $Id: dlgcmn.cpp 66592 2011-01-05 18:27:58Z PC $ +// RCS-ID: $Id: dlgcmn.cpp 69458 2011-10-18 21:56:36Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -224,13 +224,7 @@ wxSizer *wxDialogBase::CreateTextSizer(const wxString& message, widthMax = wxSystemSettings::GetMetric( wxSYS_SCREEN_X ) - 25; } - // '&' is used as accel mnemonic prefix in the wxWidgets controls but in - // the static messages created by CreateTextSizer() (used by wxMessageBox, - // for example), we don't want this special meaning, so we need to quote it - wxString text(message); - text.Replace(wxT("&"), wxT("&&")); - - return wrapper.CreateSizer(text, widthMax); + return wrapper.CreateSizer(message, widthMax); } #endif // wxUSE_STATTEXT diff --git a/Externals/wxWidgets3/src/common/dobjcmn.cpp b/Externals/wxWidgets3/src/common/dobjcmn.cpp index c160b7b79f..14f40b8ff1 100644 --- a/Externals/wxWidgets3/src/common/dobjcmn.cpp +++ b/Externals/wxWidgets3/src/common/dobjcmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin, Robert Roebling // Modified by: // Created: 19.10.99 -// RCS-ID: $Id: dobjcmn.cpp 65510 2010-09-10 19:28:52Z VZ $ +// RCS-ID: $Id: dobjcmn.cpp 70908 2012-03-15 13:49:49Z VZ $ // Copyright: (c) wxWidgets Team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -234,7 +234,12 @@ bool wxDataObjectComposite::SetData(const wxDataFormat& format, wxT("unsupported format in wxDataObjectComposite")); m_receivedFormat = format; - return dataObj->SetData( len, buf ); + + // Notice that we must pass "format" here as wxTextDataObject, that we can + // have as one of our "simple" sub-objects actually is not that simple and + // can support multiple formats (ASCII/UTF-8/UTF-16/...) and so needs to + // know which one it is given. + return dataObj->SetData( format, len, buf ); } // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/common/docview.cpp b/Externals/wxWidgets3/src/common/docview.cpp index 168cba6422..94f6d8650a 100644 --- a/Externals/wxWidgets3/src/common/docview.cpp +++ b/Externals/wxWidgets3/src/common/docview.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: Vadim Zeitlin // Created: 01/02/97 -// RCS-ID: $Id: docview.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: docview.cpp 70790 2012-03-04 00:29:03Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -122,8 +122,12 @@ wxString FindExtension(const wxString& path) wxDocument::wxDocument(wxDocument *parent) { m_documentModified = false; - m_documentParent = parent; m_documentTemplate = NULL; + + m_documentParent = parent; + if ( parent ) + parent->m_childDocuments.push_back(this); + m_commandProcessor = NULL; m_savedYet = false; } @@ -140,6 +144,9 @@ wxDocument::~wxDocument() if (GetDocumentManager()) GetDocumentManager()->RemoveDocument(this); + if ( m_documentParent ) + m_documentParent->m_childDocuments.remove(this); + // Not safe to do here, since it'll invoke virtual view functions // expecting to see valid derived objects: and by the time we get here, // we've called destructors higher up. @@ -151,6 +158,40 @@ bool wxDocument::Close() if ( !OnSaveModified() ) return false; + // When the parent document closes, its children must be closed as well as + // they can't exist without the parent. + + // As usual, first check if all children can be closed. + DocsList::const_iterator it = m_childDocuments.begin(); + for ( DocsList::const_iterator end = m_childDocuments.end(); it != end; ++it ) + { + if ( !(*it)->OnSaveModified() ) + { + // Leave the parent document opened if a child can't close. + return false; + } + } + + // Now that they all did, do close them: as m_childDocuments is modified as + // we iterate over it, don't use the usual for-style iteration here. + while ( !m_childDocuments.empty() ) + { + wxDocument * const childDoc = m_childDocuments.front(); + + // This will call OnSaveModified() once again but it shouldn't do + // anything as the document was just saved or marked as not needing to + // be saved by the call to OnSaveModified() that returned true above. + if ( !childDoc->Close() ) + { + wxFAIL_MSG( "Closing the child document unexpectedly failed " + "after its OnSaveModified() returned true" ); + } + + // Delete the child document by deleting all its views. + childDoc->DeleteAllViews(); + } + + return OnCloseDocument(); } @@ -231,6 +272,12 @@ void wxDocument::Modify(bool mod) wxDocManager *wxDocument::GetDocumentManager() const { + // For child documents we use the same document manager as the parent, even + // though we don't have our own template (as children are not opened/saved + // directly). + if ( m_documentParent ) + return m_documentParent->GetDocumentManager(); + return m_documentTemplate ? m_documentTemplate->GetDocumentManager() : NULL; } @@ -350,6 +397,9 @@ bool wxDocument::OnSaveDocument(const wxString& file) if ( !DoSaveDocument(file) ) return false; + if ( m_commandProcessor ) + m_commandProcessor->MarkAsSaved(); + Modify(false); SetFilename(file); SetDocumentSaved(true); @@ -895,7 +945,7 @@ BEGIN_EVENT_TABLE(wxDocManager, wxEvtHandler) EVT_UPDATE_UI(wxID_REVERT, wxDocManager::OnUpdateFileRevert) EVT_UPDATE_UI(wxID_NEW, wxDocManager::OnUpdateFileNew) EVT_UPDATE_UI(wxID_SAVE, wxDocManager::OnUpdateFileSave) - EVT_UPDATE_UI(wxID_SAVEAS, wxDocManager::OnUpdateDisableIfNoDoc) + EVT_UPDATE_UI(wxID_SAVEAS, wxDocManager::OnUpdateFileSaveAs) EVT_UPDATE_UI(wxID_UNDO, wxDocManager::OnUpdateUndo) EVT_UPDATE_UI(wxID_REDO, wxDocManager::OnUpdateRedo) @@ -1106,26 +1156,27 @@ void wxDocManager::DoOpenMRUFile(unsigned n) wxString errMsg; // must contain exactly one "%s" if non-empty if ( wxFile::Exists(filename) ) { - // try to open it - if ( CreateDocument(filename, wxDOC_SILENT) ) - return; - - errMsg = _("The file '%s' couldn't be opened."); + // Try to open it but don't give an error if it failed: this could be + // normal, e.g. because the user cancelled opening it, and we don't + // have any useful information to put in the error message anyhow, so + // we assume that in case of an error the appropriate message had been + // already logged. + (void)CreateDocument(filename, wxDOC_SILENT); } else // file doesn't exist { - errMsg = _("The file '%s' doesn't exist and couldn't be opened."); + OnMRUFileNotExist(n, filename); } +} - - wxASSERT_MSG( !errMsg.empty(), "should have an error message" ); - +void wxDocManager::OnMRUFileNotExist(unsigned n, const wxString& filename) +{ // remove the file which we can't open from the MRU list RemoveFileFromHistory(n); // and tell the user about it - wxLogError(errMsg + '\n' + - _("It has been removed from the most recently used files list."), + wxLogError(_("The file '%s' doesn't exist and couldn't be opened.\n" + "It has been removed from the most recently used files list."), filename); } @@ -1181,7 +1232,7 @@ void wxDocManager::OnPreview(wxCommandEvent& WXUNUSED(event)) preview = new wxPrintPreview(printout, view->OnCreatePrintout(), &printDialogData); - if ( !preview->Ok() ) + if ( !preview->IsOk() ) { delete preview; wxLogError(_("Print preview creation failed.")); @@ -1254,7 +1305,13 @@ void wxDocManager::OnUpdateFileNew(wxUpdateUIEvent& event) void wxDocManager::OnUpdateFileSave(wxUpdateUIEvent& event) { wxDocument * const doc = GetCurrentDocument(); - event.Enable( doc && !doc->AlreadySaved() ); + event.Enable( doc && !doc->IsChildDocument() && !doc->AlreadySaved() ); +} + +void wxDocManager::OnUpdateFileSaveAs(wxUpdateUIEvent& event) +{ + wxDocument * const doc = GetCurrentDocument(); + event.Enable( doc && !doc->IsChildDocument() ); } void wxDocManager::OnUpdateUndo(wxUpdateUIEvent& event) @@ -1262,10 +1319,14 @@ void wxDocManager::OnUpdateUndo(wxUpdateUIEvent& event) wxCommandProcessor * const cmdproc = GetCurrentCommandProcessor(); if ( !cmdproc ) { - event.Enable(false); + // If we don't have any document at all, the menu item should really be + // disabled. + if ( !GetCurrentDocument() ) + event.Enable(false); + else // But if we do have it, it might handle wxID_UNDO on its own + event.Skip(); return; } - event.Enable(cmdproc->CanUndo()); cmdproc->SetMenuStrings(); } @@ -1275,10 +1336,13 @@ void wxDocManager::OnUpdateRedo(wxUpdateUIEvent& event) wxCommandProcessor * const cmdproc = GetCurrentCommandProcessor(); if ( !cmdproc ) { - event.Enable(false); + // Use same logic as in OnUpdateUndo() above. + if ( !GetCurrentDocument() ) + event.Enable(false); + else + event.Skip(); return; } - event.Enable(cmdproc->CanRedo()); cmdproc->SetMenuStrings(); } @@ -1350,7 +1414,7 @@ void wxDocManager::ActivateDocument(wxDocument *doc) view->Activate(true); if ( wxWindow *win = view->GetFrame() ) - win->SetFocus(); + win->Raise(); } wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags) diff --git a/Externals/wxWidgets3/src/common/dummy.cpp b/Externals/wxWidgets3/src/common/dummy.cpp index db74ef7c68..98044d0f4d 100644 --- a/Externals/wxWidgets3/src/common/dummy.cpp +++ b/Externals/wxWidgets3/src/common/dummy.cpp @@ -23,7 +23,7 @@ #pragma hdrstop #endif -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/msvcrt.h" #endif diff --git a/Externals/wxWidgets3/src/common/dynarray.cpp b/Externals/wxWidgets3/src/common/dynarray.cpp index b9b3e5c934..7859e12ee2 100644 --- a/Externals/wxWidgets3/src/common/dynarray.cpp +++ b/Externals/wxWidgets3/src/common/dynarray.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 12.09.97 -// RCS-ID: $Id: dynarray.cpp 61279 2009-07-02 09:08:50Z VZ $ +// RCS-ID: $Id: dynarray.cpp 68470 2011-07-31 12:19:51Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -28,7 +28,7 @@ #include #include // for memmove -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS // we cast the value to long from which we cast it to void * in IndexForInsert: // this can't work if the pointers are not big enough @@ -358,6 +358,9 @@ void name::insert(iterator it, const_iterator first, const_iterator last) \ return; \ Grow(nInsert); \ \ + /* old iterator could have been invalidated by Grow(). */ \ + it = begin() + nIndex; \ + \ memmove(&m_pItems[nIndex + nInsert], &m_pItems[nIndex], \ (m_nCount - nIndex)*sizeof(T)); \ for (size_t i = 0; i < nInsert; ++i, ++it, ++first) \ @@ -383,7 +386,7 @@ _WX_DEFINE_BASEARRAY(double, wxBaseArrayDouble) #pragma warning(pop) #endif -#else // wxUSE_STL +#else // wxUSE_STD_CONTAINERS #include "wx/arrstr.h" @@ -491,4 +494,4 @@ int wxSortedArrayString::Index(const wxString& str, return it - begin(); } -#endif // !wxUSE_STL/wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS/wxUSE_STD_CONTAINERS diff --git a/Externals/wxWidgets3/src/common/dynlib.cpp b/Externals/wxWidgets3/src/common/dynlib.cpp index ac87179c56..61fda2dcd5 100644 --- a/Externals/wxWidgets3/src/common/dynlib.cpp +++ b/Externals/wxWidgets3/src/common/dynlib.cpp @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux // Modified by: // Created: 20/07/98 -// RCS-ID: $Id: dynlib.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: dynlib.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Guilhem Lavaux // 2000-2005 Vadim Zeitlin // Licence: wxWindows licence @@ -59,7 +59,7 @@ WX_DEFINE_USER_EXPORTED_OBJARRAY(wxDynamicLibraryDetailsArray) #endif // for MSW/Unix it is defined in platform-specific file -#if !(defined(__WXMSW__) || defined(__UNIX__)) || defined(__EMX__) +#if !(defined(__WINDOWS__) || defined(__UNIX__)) || defined(__EMX__) wxDllType wxDynamicLibrary::GetProgramHandle() { @@ -67,7 +67,7 @@ wxDllType wxDynamicLibrary::GetProgramHandle() return 0; } -#endif // __WXMSW__ || __UNIX__ +#endif // __WINDOWS__ || __UNIX__ bool wxDynamicLibrary::Load(const wxString& libnameOrig, int flags) @@ -112,7 +112,7 @@ bool wxDynamicLibrary::Load(const wxString& libnameOrig, int flags) // for MSW and Unix this is implemented in the platform-specific file // // TODO: move the rest to os2/dlpm.cpp and mac/dlmac.cpp! -#if (!defined(__WXMSW__) && !defined(__UNIX__)) || defined(__EMX__) +#if (!defined(__WINDOWS__) && !defined(__UNIX__)) || defined(__EMX__) /* static */ void wxDynamicLibrary::Unload(wxDllType handle) @@ -124,7 +124,7 @@ void wxDynamicLibrary::Unload(wxDllType handle) #endif } -#endif // !(__WXMSW__ || __UNIX__) +#endif // !(__WINDOWS__ || __UNIX__) void *wxDynamicLibrary::DoGetSymbol(const wxString &name, bool *success) const { diff --git a/Externals/wxWidgets3/src/common/encconv.cpp b/Externals/wxWidgets3/src/common/encconv.cpp index fdfa64eb6a..e666b9f245 100644 --- a/Externals/wxWidgets3/src/common/encconv.cpp +++ b/Externals/wxWidgets3/src/common/encconv.cpp @@ -444,7 +444,7 @@ wxFontEncodingArray wxEncodingConverter::GetPlatformEquivalents(wxFontEncoding e { if (platform == wxPLATFORM_CURRENT) { -#if defined(__WXMSW__) +#if defined(__WINDOWS__) platform = wxPLATFORM_WINDOWS; #elif defined(__WXGTK__) || defined(__WXMOTIF__) platform = wxPLATFORM_UNIX; diff --git a/Externals/wxWidgets3/src/common/event.cpp b/Externals/wxWidgets3/src/common/event.cpp index 496e2caa85..34c3c16dde 100644 --- a/Externals/wxWidgets3/src/common/event.cpp +++ b/Externals/wxWidgets3/src/common/event.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: event.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: event.cpp 69893 2011-12-02 00:50:25Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -25,6 +25,7 @@ #endif #include "wx/event.h" +#include "wx/eventfilter.h" #include "wx/evtloop.h" #ifndef WX_PRECOMP @@ -62,11 +63,11 @@ IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject) IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent) + IMPLEMENT_DYNAMIC_CLASS(wxThreadEvent, wxEvent) #endif // wxUSE_BASE #if wxUSE_GUI IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent) - IMPLEMENT_DYNAMIC_CLASS(wxThreadEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxNotifyEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxScrollWinEvent, wxEvent) @@ -155,6 +156,9 @@ const wxEventType wxEVT_NULL = wxNewEventType(); wxDEFINE_EVENT( wxEVT_IDLE, wxIdleEvent ); +// Thread event +wxDEFINE_EVENT( wxEVT_THREAD, wxThreadEvent ); + #endif // wxUSE_BASE #if wxUSE_GUI @@ -206,6 +210,7 @@ wxDEFINE_EVENT( wxEVT_AUX2_DCLICK, wxMouseEvent ); // Character input event type wxDEFINE_EVENT( wxEVT_CHAR, wxKeyEvent ); +wxDEFINE_EVENT( wxEVT_AFTER_CHAR, wxKeyEvent ); wxDEFINE_EVENT( wxEVT_CHAR_HOOK, wxKeyEvent ); wxDEFINE_EVENT( wxEVT_NAVIGATION_KEY, wxNavigationKeyEvent ); wxDEFINE_EVENT( wxEVT_KEY_DOWN, wxKeyEvent ); @@ -311,9 +316,6 @@ wxDEFINE_EVENT( wxEVT_COMMAND_ENTER, wxCommandEvent ); wxDEFINE_EVENT( wxEVT_HELP, wxHelpEvent ); wxDEFINE_EVENT( wxEVT_DETAILED_HELP, wxHelpEvent ); -// Thread event -wxDEFINE_EVENT( wxEVT_COMMAND_THREAD, wxThreadEvent ); - #endif // wxUSE_GUI #if wxUSE_BASE @@ -411,28 +413,17 @@ wxEvent& wxEvent::operator=(const wxEvent& src) // wxCommandEvent // ---------------------------------------------------------------------------- -#ifdef __VISUALC__ - // 'this' : used in base member initializer list (for m_commandString) - #pragma warning(disable:4355) -#endif - wxCommandEvent::wxCommandEvent(wxEventType commandType, int theId) : wxEvent(theId, commandType) { m_clientData = NULL; m_clientObject = NULL; - m_extraLong = 0; - m_commandInt = 0; m_isCommandEvent = true; // the command events are propagated upwards by default m_propagationLevel = wxEVENT_PROPAGATE_MAX; } -#ifdef __VISUALC__ - #pragma warning(default:4355) -#endif - wxString wxCommandEvent::GetString() const { if (m_eventType != wxEVT_COMMAND_TEXT_UPDATED || !m_eventObject) @@ -473,6 +464,13 @@ bool wxUpdateUIEvent::CanUpdate(wxWindowBase *win) ((win->GetExtraStyle() & wxWS_EX_PROCESS_UI_UPDATES) == 0))) return false; + // Don't update children of the hidden windows: this is useless as any + // change to their state won't be seen by the user anyhow. Notice that this + // argument doesn't apply to the hidden windows (with visible parent) + // themselves as they could be shown by their EVT_UPDATE_UI handler. + if ( win->GetParent() && !win->GetParent()->IsShownOnScreen() ) + return false; + if (sm_updateInterval == -1) return false; @@ -737,22 +735,28 @@ wxKeyEvent::wxKeyEvent(wxEventType type) #if wxUSE_UNICODE m_uniChar = WXK_NONE; #endif + + InitPropagation(); } wxKeyEvent::wxKeyEvent(const wxKeyEvent& evt) : wxEvent(evt), wxKeyboardState(evt) { - m_x = evt.m_x; - m_y = evt.m_y; + DoAssignMembers(evt); - m_keyCode = evt.m_keyCode; - m_rawCode = evt.m_rawCode; - m_rawFlags = evt.m_rawFlags; + InitPropagation(); +} -#if wxUSE_UNICODE - m_uniChar = evt.m_uniChar; -#endif +wxKeyEvent::wxKeyEvent(wxEventType eventType, const wxKeyEvent& evt) + : wxEvent(evt), + wxKeyboardState(evt) +{ + DoAssignMembers(evt); + + m_eventType = eventType; + + InitPropagation(); } bool wxKeyEvent::IsKeyInCategory(int category) const @@ -1126,6 +1130,43 @@ bool wxEvtHandler::IsUnlinked() const m_nextHandler == NULL; } +wxEventFilter* wxEvtHandler::ms_filterList = NULL; + +/* static */ void wxEvtHandler::AddFilter(wxEventFilter* filter) +{ + wxCHECK_RET( filter, "NULL filter" ); + + filter->m_next = ms_filterList; + ms_filterList = filter; +} + +/* static */ void wxEvtHandler::RemoveFilter(wxEventFilter* filter) +{ + wxEventFilter* prev = NULL; + for ( wxEventFilter* f = ms_filterList; f; f = f->m_next ) + { + if ( f == filter ) + { + // Set the previous list element or the list head to the next + // element. + if ( prev ) + prev->m_next = f->m_next; + else + ms_filterList = f->m_next; + + // Also reset the next pointer in the filter itself just to avoid + // having possibly dangling pointers, even though it's not strictly + // necessary. + f->m_next = NULL; + + // Skip the assert below. + return; + } + } + + wxFAIL_MSG( "Filter not found" ); +} + #if wxUSE_THREADS bool wxEvtHandler::ProcessThreadEvent(const wxEvent& event) @@ -1354,23 +1395,24 @@ bool wxEvtHandler::TryAfter(wxEvent& event) bool wxEvtHandler::ProcessEvent(wxEvent& event) { - // The very first thing we do is to allow the application to hook into - // event processing in order to globally pre-process all events. + // The very first thing we do is to allow any registered filters to hook + // into event processing in order to globally pre-process all events. // // Note that we should only do it if we're the first event handler called // to avoid calling FilterEvent() multiple times as the event goes through // the event handler chain and possibly upwards the window hierarchy. if ( !event.WasProcessed() ) { - if ( wxTheApp ) + for ( wxEventFilter* f = ms_filterList; f; f = f->m_next ) { - int rc = wxTheApp->FilterEvent(event); - if ( rc != -1 ) + int rc = f->FilterEvent(event); + if ( rc != wxEventFilter::Event_Skip ) { - wxASSERT_MSG( rc == 1 || rc == 0, - "unexpected wxApp::FilterEvent return value" ); + wxASSERT_MSG( rc == wxEventFilter::Event_Ignore || + rc == wxEventFilter::Event_Processed, + "unexpected FilterEvent() return value" ); - return rc != 0; + return rc != wxEventFilter::Event_Ignore; } //else: proceed normally } diff --git a/Externals/wxWidgets3/src/common/evtloopcmn.cpp b/Externals/wxWidgets3/src/common/evtloopcmn.cpp index f30b3e9998..a8abd2b297 100644 --- a/Externals/wxWidgets3/src/common/evtloopcmn.cpp +++ b/Externals/wxWidgets3/src/common/evtloopcmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2006-01-12 -// RCS-ID: $Id: evtloopcmn.cpp 66229 2010-11-22 01:22:56Z VZ $ +// RCS-ID: $Id: evtloopcmn.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -82,7 +82,7 @@ bool wxEventLoopBase::Yield(bool onlyIfNeeded) } // wxEventLoopManual is unused in the other ports -#if defined(__WXMSW__) || defined(__WXDFB__) || ( ( defined(__UNIX__) && !defined(__WXOSX__) ) && wxUSE_BASE) +#if defined(__WINDOWS__) || defined(__WXDFB__) || ( ( defined(__UNIX__) && !defined(__WXOSX__) ) && wxUSE_BASE) // ============================================================================ // wxEventLoopManual implementation @@ -213,5 +213,5 @@ void wxEventLoopManual::Exit(int rc) WakeUp(); } -#endif // __WXMSW__ || __WXMAC__ || __WXDFB__ +#endif // __WINDOWS__ || __WXMAC__ || __WXDFB__ diff --git a/Externals/wxWidgets3/src/common/file.cpp b/Externals/wxWidgets3/src/common/file.cpp index 3ddfcad6ac..77e14d443f 100644 --- a/Externals/wxWidgets3/src/common/file.cpp +++ b/Externals/wxWidgets3/src/common/file.cpp @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: file.cpp 66150 2010-11-14 12:09:59Z VZ $ +// RCS-ID: $Id: file.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -24,7 +24,7 @@ #if wxUSE_FILE // standard -#if defined(__WXMSW__) && !defined(__GNUWIN32__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__) +#if defined(__WINDOWS__) && !defined(__GNUWIN32__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__) #define WIN32_LEAN_AND_MEAN #define NOSERVICE @@ -47,7 +47,7 @@ #define NOCRYPT #define NOMCX -#elif defined(__WXMSW__) && defined(__WXWINCE__) +#elif defined(__WINDOWS__) && defined(__WXWINCE__) #include "wx/msw/missing.h" #elif (defined(__OS2__)) #include @@ -80,8 +80,6 @@ char* mktemp( char * path ) { return path ;} #include #include -#elif defined(__WXPALMOS__) - #include "wx/palmos/missing.h" #else #error "Please specify the header with file functions declarations." #endif //Win/UNIX @@ -121,7 +119,7 @@ #define O_BINARY (0) #endif //__UNIX__ -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/mslu.h" #endif diff --git a/Externals/wxWidgets3/src/common/fileconf.cpp b/Externals/wxWidgets3/src/common/fileconf.cpp index 1ad679ce70..3604443340 100644 --- a/Externals/wxWidgets3/src/common/fileconf.cpp +++ b/Externals/wxWidgets3/src/common/fileconf.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 07.04.98 (adapted from appconf.cpp) -// RCS-ID: $Id: fileconf.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: fileconf.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1997 Karsten Ballueder & Vadim Zeitlin // Ballueder@usa.net // Licence: wxWindows licence @@ -46,7 +46,7 @@ #include "wx/stdpaths.h" -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/private.h" #endif //windows.h #if defined(__WXPM__) @@ -2111,7 +2111,7 @@ static wxString FilterOutEntryName(const wxString& str) #if !wxUSE_UNICODE ((unsigned char)c < 127) && #endif // ANSI - !wxIsalnum(c) && !wxStrchr(wxT("@_/-!.*%"), c) ) + !wxIsalnum(c) && !wxStrchr(wxT("@_/-!.*%()"), c) ) { strResult += wxT('\\'); } diff --git a/Externals/wxWidgets3/src/common/filefn.cpp b/Externals/wxWidgets3/src/common/filefn.cpp index eb4b401eb8..e0663b3085 100644 --- a/Externals/wxWidgets3/src/common/filefn.cpp +++ b/Externals/wxWidgets3/src/common/filefn.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: filefn.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: filefn.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -367,7 +367,7 @@ template static CharType *wxDoRealPath (CharType *path) { static const CharType SEP = wxFILE_SEP_PATH; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wxUnix2DosFilename(path); #endif if (path[0] && path[1]) { @@ -398,7 +398,7 @@ static CharType *wxDoRealPath (CharType *path) path[0] = SEP; path[1] = wxT('\0'); } -#if defined(__WXMSW__) || defined(__OS2__) +#if defined(__WINDOWS__) || defined(__OS2__) /* Check that path[2] is NULL! */ else if (path[1] == wxT(':') && !path[2]) { @@ -447,7 +447,7 @@ wxChar *wxCopyAbsolutePath(const wxString& filename) { wxString buf = ::wxGetCwd(); wxChar ch = buf.Last(); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ if (ch != wxT('\\') && ch != wxT('/')) buf << wxT("\\"); #else @@ -501,7 +501,7 @@ static CharType *wxDoExpandPath(CharType *buf, const wxString& name) trimchars[3] = 0; static const CharType SEP = wxFILE_SEP_PATH; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ //wxUnix2DosFilename(path); #endif @@ -521,7 +521,7 @@ static CharType *wxDoExpandPath(CharType *buf, const wxString& name) s = nm; d = lnm; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ q = FALSE; #else q = nm[0] == wxT('\\') && nm[1] == wxT('~'); @@ -546,7 +546,7 @@ static CharType *wxDoExpandPath(CharType *buf, const wxString& name) else #else while ((*d++ = *s) != 0) { -# ifndef __WXMSW__ +# ifndef __WINDOWS__ if (*s == wxT('\\')) { if ((*(d - 1) = *++s)!=0) { s++; @@ -558,7 +558,7 @@ static CharType *wxDoExpandPath(CharType *buf, const wxString& name) #endif // No env variables on WinCE #ifndef __WXWINCE__ -#ifdef __WXMSW__ +#ifdef __WINDOWS__ if (*s++ == wxT('$') && (*s == wxT('{') || *s == wxT(')'))) #else if (*s++ == wxT('$')) @@ -677,7 +677,7 @@ wxContractPath (const wxString& filename, return NULL; wxStrcpy (dest, filename); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wxUnix2DosFilename(dest); #endif @@ -767,7 +767,7 @@ wxPathOnly (wxChar *path) i --; } -#if defined(__WXMSW__) || defined(__OS2__) +#if defined(__WINDOWS__) || defined(__OS2__) // Try Drive specifier if (wxIsalpha (buf[0]) && buf[1] == wxT(':')) { @@ -816,7 +816,7 @@ wxString wxPathOnly (const wxString& path) i --; } -#if defined(__WXMSW__) || defined(__OS2__) +#if defined(__WINDOWS__) || defined(__OS2__) // Try Drive specifier if (wxIsalpha (buf[0]) && buf[1] == wxT(':')) { @@ -923,7 +923,7 @@ static void wxDoDos2UnixFilename(T *s) { if (*s == wxT('\\')) *s = wxT('/'); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ else *s = wxTolower(*s); // Case INDEPENDENT #endif @@ -936,14 +936,14 @@ void wxDos2UnixFilename(wchar_t *s) { wxDoDos2UnixFilename(s); } template static void -#if defined(__WXMSW__) || defined(__OS2__) +#if defined(__WINDOWS__) || defined(__OS2__) wxDoUnix2DosFilename(T *s) #else wxDoUnix2DosFilename(T *WXUNUSED(s) ) #endif { // Yes, I really mean this to happen under DOS only! JACS -#if defined(__WXMSW__) || defined(__OS2__) +#if defined(__WINDOWS__) || defined(__OS2__) if (s) while (*s) { @@ -998,8 +998,7 @@ wxConcatFiles (const wxString& file1, const wxString& file2, const wxString& fil } // helper of generic implementation of wxCopyFile() -#if !(defined(__WIN32__) || defined(__OS2__) || defined(__PALMOS__)) && \ - wxUSE_FILE +#if !(defined(__WIN32__) || defined(__OS2__)) && wxUSE_FILE static bool wxDoCopyFile(wxFile& fileIn, @@ -1061,9 +1060,6 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite) #elif defined(__OS2__) if ( ::DosCopy(file1.c_str(), file2.c_str(), overwrite ? DCPY_EXISTING : 0) != 0 ) return false; -#elif defined(__PALMOS__) - // TODO with http://www.palmos.com/dev/support/docs/protein_books/Memory_Databases_Files/ - return false; #elif wxUSE_FILE // !Win32 wxStructStat fbuf; @@ -1154,7 +1150,7 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite) wxUnusedVar(overwrite); return false; -#endif // __WXMSW__ && __WIN32__ +#endif // __WINDOWS__ && __WIN32__ return true; } @@ -1173,7 +1169,7 @@ wxRenameFile(const wxString& file1, const wxString& file2, bool overwrite) return false; } -#if !defined(__WXWINCE__) && !defined(__WXPALMOS__) +#if !defined(__WXWINCE__) // Normal system call if ( wxRename (file1, file2) == 0 ) return true; @@ -1185,6 +1181,7 @@ wxRenameFile(const wxString& file1, const wxString& file2, bool overwrite) return true; } // Give up + wxLogSysError(_("File '%s' couldn't be renamed '%s'"), file1, file2); return false; } @@ -1199,27 +1196,24 @@ bool wxRemoveFile(const wxString& file) int res = wxRemove(file); #elif defined(__WXMAC__) int res = unlink(file.fn_str()); -#elif defined(__WXPALMOS__) - int res = 1; - // TODO with VFSFileDelete() #else int res = unlink(file.fn_str()); #endif - + if ( res ) + { + wxLogSysError(_("File '%s' couldn't be removed"), file); + } return res == 0; } bool wxMkdir(const wxString& dir, int perm) { -#if defined(__WXPALMOS__) - return false; -#else #if defined(__WXMAC__) && !defined(__UNIX__) if ( mkdir(dir.fn_str(), 0) != 0 ) // assume mkdir() has 2 args on non Windows-OS/2 platforms and on Windows too // for the GNU compiler -#elif (!(defined(__WXMSW__) || defined(__OS2__) || defined(__DOS__))) || \ +#elif (!(defined(__WINDOWS__) || defined(__OS2__) || defined(__DOS__))) || \ (defined(__GNUWIN32__) && !defined(__MINGW32__)) || \ defined(__WINE__) || defined(__WXMICROWIN__) const wxChar *dirname = dir.c_str(); @@ -1256,16 +1250,12 @@ bool wxMkdir(const wxString& dir, int perm) } return true; -#endif // PALMOS/!PALMOS } bool wxRmdir(const wxString& dir, int WXUNUSED(flags)) { #if defined(__VMS__) return false; //to be changed since rmdir exists in VMS7.x -#elif defined(__WXPALMOS__) - // TODO with VFSFileRename() - return false; #else #if defined(__OS2__) if ( ::DosDeleteDir(dir.c_str()) != 0 ) @@ -1280,7 +1270,7 @@ bool wxRmdir(const wxString& dir, int WXUNUSED(flags)) } return true; -#endif // PALMOS/!PALMOS +#endif } // does the path exists? (may have or not '/' or '\\' at the end) @@ -1299,12 +1289,7 @@ wxChar *wxGetTempFileName(const wxString& prefix, wxChar *buf) return NULL; if ( buf ) -#ifdef _PACC_VER - // work around the PalmOS pacc compiler bug - wxStrcpy(buf, filename.data()); -#else wxStrcpy(buf, filename); -#endif else buf = MYcopystring(filename); @@ -1394,11 +1379,7 @@ wxString wxFindNextFile() wxChar *wxDoGetCwd(wxChar *buf, int sz) { -#if defined(__WXPALMOS__) - // TODO - if(buf && sz>0) buf[0] = wxT('\0'); - return buf; -#elif defined(__WXWINCE__) +#if defined(__WXWINCE__) // TODO if(buf && sz>0) buf[0] = wxT('\0'); return buf; @@ -1537,6 +1518,7 @@ wxString wxGetCwd() bool wxSetWorkingDirectory(const wxString& d) { + bool success = false; #if defined(__OS2__) if (d[1] == ':') { @@ -1546,18 +1528,17 @@ bool wxSetWorkingDirectory(const wxString& d) if (d.length() == 2) return true; } - return (::DosSetCurrentDir(d.c_str()) == 0); + success = (::DosSetCurrentDir(d.c_str()) == 0); #elif defined(__UNIX__) || defined(__WXMAC__) || defined(__DOS__) - return (chdir(wxFNSTRINGCAST d.fn_str()) == 0); + success = (chdir(wxFNSTRINGCAST d.fn_str()) == 0); #elif defined(__WINDOWS__) #ifdef __WIN32__ #ifdef __WXWINCE__ // No equivalent in WinCE wxUnusedVar(d); - return false; #else - return (bool)(SetCurrentDirectory(d.fn_str()) != 0); + success = (SetCurrentDirectory(d.fn_str()) != 0); #endif #else // Must change drive, too. @@ -1578,12 +1559,15 @@ bool wxSetWorkingDirectory(const wxString& d) _dos_setdrive(driveNo, &noDrives); } } - bool success = (chdir(WXSTRINGCAST d) == 0); + success = (chdir(WXSTRINGCAST d) == 0); +#endif +#endif + if ( !success ) + { + wxLogSysError(_("Could not set current working directory")); + } return success; -#endif - -#endif } // Get the OS directory if appropriate (such as the Windows directory). @@ -1879,7 +1863,7 @@ bool wxIsExecutable(const wxString &path) // wxFileKind wxGetFileKind(int fd) { -#if defined __WXMSW__ && !defined __WXWINCE__ && defined wxGetOSFHandle +#if defined __WINDOWS__ && !defined __WXWINCE__ && defined wxGetOSFHandle switch (::GetFileType(wxGetOSFHandle(fd)) & ~FILE_TYPE_REMOTE) { case FILE_TYPE_CHAR: diff --git a/Externals/wxWidgets3/src/common/filehistorycmn.cpp b/Externals/wxWidgets3/src/common/filehistorycmn.cpp index 0cc23ac338..0ce3bd6a58 100644 --- a/Externals/wxWidgets3/src/common/filehistorycmn.cpp +++ b/Externals/wxWidgets3/src/common/filehistorycmn.cpp @@ -3,7 +3,7 @@ // Purpose: wxFileHistory class // Author: Julian Smart, Vaclav Slavik, Vadim Zeitlin // Created: 2010-05-03 -// RCS-ID: $Id: filehistorycmn.cpp 64240 2010-05-07 06:45:48Z VS $ +// RCS-ID: $Id: filehistorycmn.cpp 70503 2012-02-03 17:27:13Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -68,15 +68,36 @@ wxFileHistoryBase::wxFileHistoryBase(size_t maxFiles, wxWindowID idBase) m_idBase = idBase; } +/* static */ +wxString wxFileHistoryBase::NormalizeFileName(const wxFileName& fn) +{ + // We specifically exclude wxPATH_NORM_LONG here as it can take a long time + // (several seconds) for network file paths under MSW, resulting in huge + // delays when opening a program using wxFileHistory. We also exclude + // wxPATH_NORM_ENV_VARS as the file names here are supposed to be "real" + // file names and not have any environment variables in them. + wxFileName fnNorm(fn); + fnNorm.Normalize(wxPATH_NORM_DOTS | + wxPATH_NORM_TILDE | + wxPATH_NORM_CASE | + wxPATH_NORM_ABSOLUTE); + return fnNorm.GetFullPath(); +} + void wxFileHistoryBase::AddFileToHistory(const wxString& file) { - // check if we don't already have this file + // Check if we don't already have this file. Notice that we avoid + // wxFileName::operator==(wxString) here as it converts the string to + // wxFileName and then normalizes it using all normalizations which is too + // slow (see the comment above), so we use our own quick normalization + // functions and a string comparison. const wxFileName fnNew(file); + const wxString newFile = NormalizeFileName(fnNew); size_t i, numFiles = m_fileHistory.size(); for ( i = 0; i < numFiles; i++ ) { - if ( fnNew == m_fileHistory[i] ) + if ( newFile == NormalizeFileName(m_fileHistory[i]) ) { // we do have it, move it to the top of the history RemoveFileFromHistory(i); diff --git a/Externals/wxWidgets3/src/common/filename.cpp b/Externals/wxWidgets3/src/common/filename.cpp index 539a8f68d9..0614b8047c 100644 --- a/Externals/wxWidgets3/src/common/filename.cpp +++ b/Externals/wxWidgets3/src/common/filename.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling, Vadim Zeitlin // Modified by: // Created: 28.12.2000 -// RCS-ID: $Id: filename.cpp 66996 2011-02-22 13:26:06Z VZ $ +// RCS-ID: $Id: filename.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2000 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -77,7 +77,7 @@ #endif #ifndef WX_PRECOMP - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" // For GetShort/LongPathName #endif #include "wx/dynarray.h" @@ -98,7 +98,7 @@ #include "wx/msw/gccpriv.h" #endif -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/private.h" #endif @@ -148,6 +148,12 @@ #define MAX_PATH _MAX_PATH #endif +#ifndef S_ISREG + #define S_ISREG(mode) ((mode) & S_IFREG) +#endif +#ifndef S_ISDIR + #define S_ISDIR(mode) ((mode) & S_IFDIR) +#endif #if wxUSE_LONGLONG extern const wxULongLong wxInvalidSize = (unsigned)-1; @@ -593,6 +599,117 @@ wxFileName wxFileName::DirName(const wxString& dir, wxPathFormat format) // existence tests // ---------------------------------------------------------------------------- +namespace +{ + +// Flags for wxFileSystemObjectExists() asking it to check for: +enum +{ + wxFileSystemObject_File = 1, // file existence + wxFileSystemObject_Dir = 2, // directory existence + wxFileSystemObject_Other = 4, // existence of something else, e.g. + // device, socket, FIFO under Unix + wxFileSystemObject_Any = 7 // existence of anything at all +}; + +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) + +void RemoveTrailingSeparatorsFromPath(wxString& strPath) +{ + // Windows fails to find directory named "c:\dir\" even if "c:\dir" exists, + // so remove all trailing backslashes from the path - but don't do this for + // the paths "d:\" (which are different from "d:"), for just "\" or for + // windows unique volume names ("\\?\Volume{GUID}\") + while ( wxEndsWithPathSeparator( strPath ) ) + { + size_t len = strPath.length(); + if ( len == 1 || (len == 3 && strPath[len - 2] == wxT(':')) || + (len == wxMSWUniqueVolumePrefixLength && + wxFileName::IsMSWUniqueVolumeNamePath(strPath))) + { + break; + } + + strPath.Truncate(len - 1); + } +} + +#endif // __WINDOWS__ || __OS2__ + +bool wxFileSystemObjectExists(const wxString& path, int flags) +{ + // Should the existence of file/directory with this name be accepted, i.e. + // result in the true return value from this function? + const bool acceptFile = (flags & wxFileSystemObject_File) != 0; + const bool acceptDir = (flags & wxFileSystemObject_Dir) != 0; + + wxString strPath(path); + +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) + if ( acceptDir ) + { + // Ensure that the path doesn't have any trailing separators when + // checking for directories. + RemoveTrailingSeparatorsFromPath(strPath); + } + + // we must use GetFileAttributes() instead of the ANSI C functions because + // it can cope with network (UNC) paths unlike them + DWORD ret = ::GetFileAttributes(path.t_str()); + + if ( ret == INVALID_FILE_ATTRIBUTES ) + return false; + + if ( ret & FILE_ATTRIBUTE_DIRECTORY ) + return acceptDir; + + // Anything else must be a file (perhaps we should check for + // FILE_ATTRIBUTE_REPARSE_POINT?) + return acceptFile; +#elif defined(__OS2__) + if ( acceptDir ) + { + // OS/2 can't handle "d:", it wants either "d:\" or "d:." + if (strPath.length() == 2 && strPath[1u] == wxT(':')) + strPath << wxT('.'); + } + + FILESTATUS3 Info = {{0}}; + APIRET rc = ::DosQueryPathInfo((PSZ)(WXSTRINGCAST strPath), FIL_STANDARD, + (void*) &Info, sizeof(FILESTATUS3)); + + if ( rc == NO_ERROR ) + { + if ( Info.attrFile & FILE_DIRECTORY ) + return acceptDir; + else + return acceptFile; + } + + // We consider that the path must exist if we get a sharing violation for + // it but we don't know what is it in this case. + if ( rc == ERROR_SHARING_VIOLATION ) + return flags & wxFileSystemObject_Other; + + // Any other error (usually ERROR_PATH_NOT_FOUND), means there is nothing + // there. + return false; +#else // Non-MSW, non-OS/2 + wxStructStat st; + if ( wxStat(strPath, &st) != 0 ) + return false; + + if ( S_ISREG(st.st_mode) ) + return acceptFile; + if ( S_ISDIR(st.st_mode) ) + return acceptDir; + + return flags & wxFileSystemObject_Other; +#endif // Platforms +} + +} // anonymous namespace + bool wxFileName::FileExists() const { return wxFileName::FileExists( GetFullPath() ); @@ -601,27 +718,7 @@ bool wxFileName::FileExists() const /* static */ bool wxFileName::FileExists( const wxString &filePath ) { -#if defined(__WXPALMOS__) - return false; -#elif defined(__WIN32__) && !defined(__WXMICROWIN__) - // we must use GetFileAttributes() instead of the ANSI C functions because - // it can cope with network (UNC) paths unlike them - DWORD ret = ::GetFileAttributes(filePath.t_str()); - - return (ret != INVALID_FILE_ATTRIBUTES) && !(ret & FILE_ATTRIBUTE_DIRECTORY); -#else // !__WIN32__ - #ifndef S_ISREG - #define S_ISREG(mode) ((mode) & S_IFREG) - #endif - wxStructStat st; - - return (wxStat( filePath, &st) == 0 && S_ISREG(st.st_mode)) -#ifdef __OS2__ - || (errno == EACCES) // if access is denied something with that name - // exists and is opened in exclusive mode. -#endif - ; -#endif // __WIN32__/!__WIN32__ + return wxFileSystemObjectExists(filePath, wxFileSystemObject_File); } bool wxFileName::DirExists() const @@ -632,59 +729,13 @@ bool wxFileName::DirExists() const /* static */ bool wxFileName::DirExists( const wxString &dirPath ) { - wxString strPath(dirPath); + return wxFileSystemObjectExists(dirPath, wxFileSystemObject_Dir); +} -#if defined(__WINDOWS__) || defined(__OS2__) - // Windows fails to find directory named "c:\dir\" even if "c:\dir" exists, - // so remove all trailing backslashes from the path - but don't do this for - // the paths "d:\" (which are different from "d:"), for just "\" or for - // windows unique volume names ("\\?\Volume{GUID}\") - while ( wxEndsWithPathSeparator(strPath) ) - { - size_t len = strPath.length(); - if ( len == 1 || (len == 3 && strPath[len - 2] == wxT(':')) || - (len == wxMSWUniqueVolumePrefixLength && - wxFileName::IsMSWUniqueVolumeNamePath(strPath))) - { - break; - } - - strPath.Truncate(len - 1); - } -#endif // __WINDOWS__ - -#ifdef __OS2__ - // OS/2 can't handle "d:", it wants either "d:\" or "d:." - if (strPath.length() == 2 && strPath[1u] == wxT(':')) - strPath << wxT('.'); -#endif - -#if defined(__WXPALMOS__) - return false; -#elif defined(__WIN32__) && !defined(__WXMICROWIN__) - // stat() can't cope with network paths - DWORD ret = ::GetFileAttributes(strPath.t_str()); - - return (ret != INVALID_FILE_ATTRIBUTES) && (ret & FILE_ATTRIBUTE_DIRECTORY); -#elif defined(__OS2__) - FILESTATUS3 Info = {{0}}; - APIRET rc = ::DosQueryPathInfo((PSZ)(WXSTRINGCAST strPath), FIL_STANDARD, - (void*) &Info, sizeof(FILESTATUS3)); - - return ((rc == NO_ERROR) && (Info.attrFile & FILE_DIRECTORY)) || - (rc == ERROR_SHARING_VIOLATION); - // If we got a sharing violation, there must be something with this name. -#else // !__WIN32__ - - wxStructStat st; -#ifndef __VISAGECPP__ - return wxStat(strPath, &st) == 0 && ((st.st_mode & S_IFMT) == S_IFDIR); -#else - // S_IFMT not supported in VA compilers.. st_mode is a 2byte value only - return wxStat(strPath, &st) == 0 && (st.st_mode == S_IFDIR); -#endif - -#endif // __WIN32__/!__WIN32__ +/* static */ +bool wxFileName::Exists(const wxString& path) +{ + return wxFileSystemObjectExists(path, wxFileSystemObject_Any); } // ---------------------------------------------------------------------------- @@ -809,7 +860,7 @@ static bool wxTempOpen(wxFFile *file, const wxString& path, bool *deleteOnClose) int fd = wxTempOpen(path, deleteOnClose); if (fd == -1) return false; - file->Attach(wx_fdopen(fd, "w+b")); + file->Attach(wx_fdopen(fd, "w+b"), path); return file->IsOpened(); #endif // wx_fdopen } @@ -920,7 +971,7 @@ static wxString wxCreateTempImpl( if ( ffileTemp ) { #ifdef wx_fdopen - ffileTemp->Attach(wx_fdopen(fdTemp, "r+b")); + ffileTemp->Attach(wx_fdopen(fdTemp, "r+b"), path); #else ffileTemp->Open(path, wxT("r+b")); close(fdTemp); @@ -950,7 +1001,7 @@ static wxString wxCreateTempImpl( } #else // !HAVE_MKTEMP (includes __DOS__) // generate the unique file name ourselves - #if !defined(__DOS__) && !defined(__PALMOS__) && (!defined(__MWERKS__) || defined(__DARWIN__) ) + #if !defined(__DOS__) && (!defined(__MWERKS__) || defined(__DARWIN__) ) path << (unsigned int)getpid(); #endif @@ -1267,7 +1318,7 @@ bool wxFileName::Rmdir(int flags) const bool wxFileName::Rmdir(const wxString& dir, int flags) { -#ifdef __WXMSW__ +#ifdef __WINDOWS__ if ( flags & wxPATH_RMDIR_RECURSIVE ) { // SHFileOperation needs double null termination string @@ -1303,9 +1354,9 @@ bool wxFileName::Rmdir(const wxString& dir, int flags) return true; } else if ( flags & wxPATH_RMDIR_FULL ) -#else // !__WXMSW__ +#else // !__WINDOWS__ if ( flags != 0 ) // wxPATH_RMDIR_FULL or wxPATH_RMDIR_RECURSIVE -#endif // !__WXMSW__ +#endif // !__WINDOWS__ { wxString path(dir); if ( path.Last() != wxFILE_SEP_PATH ) @@ -1326,7 +1377,7 @@ bool wxFileName::Rmdir(const wxString& dir, int flags) cont = d.GetNext(&filename); } -#ifndef __WXMSW__ +#ifndef __WINDOWS__ if ( flags & wxPATH_RMDIR_RECURSIVE ) { // delete all files too @@ -1337,7 +1388,7 @@ bool wxFileName::Rmdir(const wxString& dir, int flags) cont = d.GetNext(&filename); } } -#endif // !__WXMSW__ +#endif // !__WINDOWS__ } return ::wxRmdir(dir); @@ -1743,8 +1794,16 @@ bool wxFileName::SameAs(const wxFileName& filepath, wxPathFormat format) const if ( fn1.GetFullPath() == fn2.GetFullPath() ) return true; - // TODO: compare inodes for Unix, this works even when filenames are - // different but files are the same (symlinks) (VZ) +#if defined(__UNIX__) + wxStructStat st1, st2; + if ( wxStat(fn1.GetFullPath(), &st1) == 0 && + wxStat(fn2.GetFullPath(), &st2) == 0 ) + { + if ( st1.st_ino == st2.st_ino && st1.st_dev == st2.st_dev ) + return true; + } + //else: It's not an error if one or both files don't exist. +#endif // defined __UNIX__ return false; } @@ -2063,7 +2122,7 @@ wxString wxFileName::GetShortPath() const { wxString path(GetFullPath()); -#if defined(__WXMSW__) && defined(__WIN32__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__) +#if defined(__WINDOWS__) && defined(__WIN32__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__) DWORD sz = ::GetShortPathName(path.t_str(), NULL, 0); if ( sz != 0 ) { @@ -2213,7 +2272,7 @@ wxPathFormat wxFileName::GetFormat( wxPathFormat format ) { if (format == wxPATH_NATIVE) { -#if defined(__WXMSW__) || defined(__OS2__) || defined(__DOS__) +#if defined(__WINDOWS__) || defined(__OS2__) || defined(__DOS__) format = wxPATH_DOS; #elif defined(__VMS) format = wxPATH_VMS; @@ -2607,12 +2666,14 @@ bool wxFileName::GetTimes(wxDateTime *dtAccess, wxStructStat stBuf; if ( wxStat( GetFullPath(), &stBuf) == 0 ) { + // Android defines st_*time fields as unsigned long, but time_t as long, + // hence the static_casts. if ( dtAccess ) - dtAccess->Set(stBuf.st_atime); + dtAccess->Set(static_cast(stBuf.st_atime)); if ( dtMod ) - dtMod->Set(stBuf.st_mtime); + dtMod->Set(static_cast(stBuf.st_mtime)); if ( dtCreate ) - dtCreate->Set(stBuf.st_ctime); + dtCreate->Set(static_cast(stBuf.st_ctime)); return true; } @@ -2643,10 +2704,7 @@ wxULongLong wxFileName::GetSize(const wxString &filename) if (!wxFileExists(filename)) return wxInvalidSize; -#if defined(__WXPALMOS__) - // TODO - return wxInvalidSize; -#elif defined(__WIN32__) +#if defined(__WIN32__) wxFileHandle f(filename, wxFileHandle::ReadAttr); if (!f.IsOk()) return wxInvalidSize; diff --git a/Externals/wxWidgets3/src/common/filepickercmn.cpp b/Externals/wxWidgets3/src/common/filepickercmn.cpp index b57466283b..6044dffa6d 100644 --- a/Externals/wxWidgets3/src/common/filepickercmn.cpp +++ b/Externals/wxWidgets3/src/common/filepickercmn.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi (readapted code written by Vadim Zeitlin) // Modified by: // Created: 15/04/2006 -// RCS-ID: $Id: filepickercmn.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: filepickercmn.cpp 68920 2011-08-27 14:11:20Z VZ $ // Copyright: (c) Vadim Zeitlin, Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -183,6 +183,30 @@ void wxFileDirPickerCtrlBase::OnFileDirChange(wxFileDirPickerEvent &ev) IMPLEMENT_DYNAMIC_CLASS(wxFilePickerCtrl, wxPickerBase) +bool wxFilePickerCtrl::Create(wxWindow *parent, + wxWindowID id, + const wxString& path, + const wxString& message, + const wxString& wildcard, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name) +{ + if ( !wxFileDirPickerCtrlBase::CreateBase + ( + parent, id, path, message, wildcard, + pos, size, style, validator, name + ) ) + return false; + + if ( HasTextCtrl() ) + GetTextCtrl()->AutoCompleteFileNames(); + + return true; +} + bool wxFilePickerCtrl::CheckPath(const wxString& path) const { // if wxFLP_SAVE was given or wxFLP_FILE_MUST_EXIST has NOT been given we @@ -207,6 +231,29 @@ wxString wxFilePickerCtrl::GetTextCtrlValue() const #if wxUSE_DIRPICKERCTRL IMPLEMENT_DYNAMIC_CLASS(wxDirPickerCtrl, wxPickerBase) +bool wxDirPickerCtrl::Create(wxWindow *parent, + wxWindowID id, + const wxString& path, + const wxString& message, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name) +{ + if ( !wxFileDirPickerCtrlBase::CreateBase + ( + parent, id, path, message, wxString(), + pos, size, style, validator, name + ) ) + return false; + + if ( HasTextCtrl() ) + GetTextCtrl()->AutoCompleteDirectories(); + + return true; +} + bool wxDirPickerCtrl::CheckPath(const wxString& path) const { // if wxDIRP_DIR_MUST_EXIST has NOT been given we must accept any path diff --git a/Externals/wxWidgets3/src/common/filesys.cpp b/Externals/wxWidgets3/src/common/filesys.cpp index 1460be8b87..82e1ada6c4 100644 --- a/Externals/wxWidgets3/src/common/filesys.cpp +++ b/Externals/wxWidgets3/src/common/filesys.cpp @@ -3,7 +3,7 @@ // Purpose: wxFileSystem class - interface for opening files // Author: Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik -// CVS-ID: $Id: filesys.cpp 66728 2011-01-22 14:38:36Z DS $ +// CVS-ID: $Id: filesys.cpp 70796 2012-03-04 00:29:31Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -255,7 +255,7 @@ wxFSFile* wxLocalFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& #else #error One of wxUSE_FILE or wxUSE_FFILE must be set to 1 for wxFSHandler to work #endif - if ( !is->Ok() ) + if ( !is->IsOk() ) { delete is; return NULL; @@ -635,11 +635,11 @@ wxFileName wxFileSystem::URLToFileName(const wxString& url) path = wxURI::Unescape(path); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // file urls either start with a forward slash (local harddisk), // otherwise they have a servername/sharename notation, // which only exists on msw and corresponds to a unc - if ( path[0u] == wxT('/') && path [1u] != wxT('/')) + if ( path.length() > 1 && (path[0u] == wxT('/') && path [1u] != wxT('/')) ) { path = path.Mid(1); } diff --git a/Externals/wxWidgets3/src/common/fmapbase.cpp b/Externals/wxWidgets3/src/common/fmapbase.cpp index d75e991a17..56ce5f73a6 100644 --- a/Externals/wxWidgets3/src/common/fmapbase.cpp +++ b/Externals/wxWidgets3/src/common/fmapbase.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 21.06.2003 (extracted from common/fontmap.cpp) -// RCS-ID: $Id: fmapbase.cpp 65062 2010-07-23 23:33:16Z VZ $ +// RCS-ID: $Id: fmapbase.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1999-2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -34,7 +34,7 @@ #include "wx/wxcrtvararg.h" #endif //WX_PRECOMP -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/private.h" // includes windows.h for LOGFONT #include "wx/msw/winundef.h" #endif @@ -97,9 +97,6 @@ static const wxFontEncoding gs_encodings[] = wxFONTENCODING_UTF32LE, wxFONTENCODING_EUC_JP, wxFONTENCODING_DEFAULT, - wxFONTENCODING_BIG5, - wxFONTENCODING_SHIFT_JIS, - wxFONTENCODING_GB2312, wxFONTENCODING_ISO2022_JP, wxFONTENCODING_MACROMAN, @@ -166,10 +163,10 @@ static const char* const gs_encodingDescs[] = wxTRANSLATE( "KOI8-U" ), wxTRANSLATE( "Windows/DOS OEM Cyrillic (CP 866)" ), wxTRANSLATE( "Windows Thai (CP 874)" ), - wxTRANSLATE( "Windows Japanese (CP 932)" ), - wxTRANSLATE( "Windows Chinese Simplified (CP 936)" ), + wxTRANSLATE( "Windows Japanese (CP 932) or Shift-JIS" ), + wxTRANSLATE( "Windows Chinese Simplified (CP 936) or GB-2312" ), wxTRANSLATE( "Windows Korean (CP 949)" ), - wxTRANSLATE( "Windows Chinese Traditional (CP 950)" ), + wxTRANSLATE( "Windows Chinese Traditional (CP 950) or Big-5" ), wxTRANSLATE( "Windows Central European (CP 1250)" ), wxTRANSLATE( "Windows Cyrillic (CP 1251)" ), wxTRANSLATE( "Windows Western European (CP 1252)" ), @@ -194,9 +191,6 @@ static const char* const gs_encodingDescs[] = #endif // WORDS_BIGENDIAN wxTRANSLATE( "Extended Unix Codepage for Japanese (EUC-JP)" ), wxTRANSLATE( "US-ASCII" ), - wxTRANSLATE( "BIG5" ), - wxTRANSLATE( "SHIFT-JIS" ), - wxTRANSLATE( "GB-2312" ), wxTRANSLATE( "ISO-2022-JP" ), wxTRANSLATE( "MacRoman" ), @@ -242,7 +236,7 @@ static const char* const gs_encodingDescs[] = }; // and the internal names (these are not translated on purpose!) -static const wxChar* const gs_encodingNames[WXSIZEOF(gs_encodingDescs)][9] = +static const wxChar* const gs_encodingNames[][9] = { // names from the columns correspond to these OS: // Linux Solaris and IRIX HP-UX AIX @@ -271,10 +265,10 @@ static const wxChar* const gs_encodingNames[WXSIZEOF(gs_encodingDescs)][9] = { wxT( "WINDOWS-866" ), wxT( "CP866" ), NULL }, { wxT( "WINDOWS-874" ), wxT( "CP874" ), wxT( "MS874" ), wxT( "IBM-874" ), NULL }, - { wxT( "WINDOWS-932" ), wxT( "CP932" ), wxT( "MS932" ), wxT( "IBM-932" ), NULL }, - { wxT( "WINDOWS-936" ), wxT( "CP936" ), wxT( "MS936" ), wxT( "IBM-936" ), NULL }, + { wxT( "WINDOWS-932" ), wxT( "CP932" ), wxT( "MS932" ), wxT( "IBM-932" ), wxT( "SJIS" ), wxT( "SHIFT-JIS" ), wxT( "SHIFT_JIS" ), NULL }, + { wxT( "WINDOWS-936" ), wxT( "CP936" ), wxT( "MS936" ), wxT( "IBM-936" ), wxT( "GB2312" ), NULL }, { wxT( "WINDOWS-949" ), wxT( "CP949" ), wxT( "MS949" ), wxT( "IBM-949" ), wxT( "EUC-KR" ), wxT( "eucKR" ), wxT( "euc_kr" ), NULL }, - { wxT( "WINDOWS-950" ), wxT( "CP950" ), wxT( "MS950" ), wxT( "IBM-950" ), NULL }, + { wxT( "WINDOWS-950" ), wxT( "CP950" ), wxT( "MS950" ), wxT( "IBM-950" ), wxT( "BIG5" ), wxT( "BIG-5" ), wxT( "BIG-FIVE" ), NULL }, { wxT( "WINDOWS-1250" ),wxT( "CP1250" ),wxT( "MS1250" ),wxT( "IBM-1250" ),NULL }, { wxT( "WINDOWS-1251" ),wxT( "CP1251" ),wxT( "MS1251" ),wxT( "IBM-1251" ),NULL }, { wxT( "WINDOWS-1252" ),wxT( "CP1252" ),wxT( "MS1252" ),wxT( "IBM-1252" ),NULL }, @@ -305,9 +299,6 @@ static const wxChar* const gs_encodingNames[WXSIZEOF(gs_encodingDescs)][9] = { wxT( "US-ASCII" ), wxT( "ASCII" ), wxT("C"), wxT("POSIX"), wxT("ANSI_X3.4-1968"), wxT("646"), wxT("roman8"), wxT( "" ), NULL }, - { wxT( "BIG5" ), wxT("big5"), NULL }, - { wxT( "SJIS" ), wxT( "SHIFT-JIS" ), wxT( "SHIFT_JIS" ), NULL }, - { wxT( "GB2312" ), NULL }, { wxT( "ISO-2022-JP" ), NULL }, diff --git a/Externals/wxWidgets3/src/common/fontcmn.cpp b/Externals/wxWidgets3/src/common/fontcmn.cpp index df3b3e8db0..0d27ca12f0 100644 --- a/Externals/wxWidgets3/src/common/fontcmn.cpp +++ b/Externals/wxWidgets3/src/common/fontcmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.09.99 -// RCS-ID: $Id: fontcmn.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: fontcmn.cpp 70564 2012-02-10 23:34:45Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -29,6 +29,7 @@ #ifndef WX_PRECOMP #include "wx/dc.h" #include "wx/intl.h" + #include "wx/math.h" #include "wx/dcscreen.h" #include "wx/log.h" #include "wx/gdicmn.h" @@ -112,6 +113,8 @@ wxPROPERTY( Weight, wxFontWeight, SetWeight, GetWeight, (wxFontWeight)wxNORMAL, wxT("Helpstring"), wxT("group")) // wxFontWeight wxPROPERTY( Underlined, bool, SetUnderlined, GetUnderlined, false, 0 /*flags*/, \ wxT("Helpstring"), wxT("group")) +wxPROPERTY( Strikethrough, bool, SetStrikethrough, GetStrikethrough, false, 0, \ + wxT("Helpstring"), wxT("group")) wxPROPERTY( Face, wxString, SetFaceName, GetFaceName, wxEMPTY_PARAMETER_VALUE, \ 0 /*flags*/, wxT("Helpstring"), wxT("group")) wxPROPERTY( Encoding, wxFontEncoding, SetEncoding, GetEncoding, \ @@ -127,33 +130,6 @@ wxEMPTY_HANDLERS_TABLE(wxFont) // implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// helper functions -// ---------------------------------------------------------------------------- - -static inline int flags2Style(int flags) -{ - return flags & wxFONTFLAG_ITALIC - ? wxFONTSTYLE_ITALIC - : flags & wxFONTFLAG_SLANT - ? wxFONTSTYLE_SLANT - : wxFONTSTYLE_NORMAL; -} - -static inline int flags2Weight(int flags) -{ - return flags & wxFONTFLAG_LIGHT - ? wxFONTWEIGHT_LIGHT - : flags & wxFONTFLAG_BOLD - ? wxFONTWEIGHT_BOLD - : wxFONTWEIGHT_NORMAL; -} - -static inline bool flags2Underlined(int flags) -{ - return (flags & wxFONTFLAG_UNDERLINED) != 0; -} - // ---------------------------------------------------------------------------- // wxFontBase // ---------------------------------------------------------------------------- @@ -208,8 +184,11 @@ wxFont *wxFontBase::New(int pointSize, const wxString& face, wxFontEncoding encoding) { - return New(pointSize, family, flags2Style(flags), flags2Weight(flags), - flags2Underlined(flags), face, encoding); + return New(pointSize, family, + GetStyleFromFlags(flags), + GetWeightFromFlags(flags), + GetUnderlinedFromFlags(flags), + face, encoding); } /* static */ @@ -219,8 +198,11 @@ wxFont *wxFontBase::New(const wxSize& pixelSize, const wxString& face, wxFontEncoding encoding) { - return New(pixelSize, family, flags2Style(flags), flags2Weight(flags), - flags2Underlined(flags), face, encoding); + return New(pixelSize, family, + GetStyleFromFlags(flags), + GetWeightFromFlags(flags), + GetUnderlinedFromFlags(flags), + face, encoding); } /* static */ @@ -327,6 +309,7 @@ void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info) SetStyle(info.style); SetWeight(info.weight); SetUnderlined(info.underlined); + SetStrikethrough(info.strikethrough); SetFaceName(info.faceName); SetEncoding(info.encoding); #else @@ -414,6 +397,7 @@ bool wxFontBase::operator==(const wxFont& font) const GetStyle() == font.GetStyle() && GetWeight() == font.GetWeight() && GetUnderlined() == font.GetUnderlined() && + GetStrikethrough() == font.GetStrikethrough() && GetFaceName().IsSameAs(font.GetFaceName(), false) && GetEncoding() == font.GetEncoding() ); @@ -511,7 +495,7 @@ int wxFontBase::AdjustToSymbolicSize(wxFontSymbolicSize size, int base) WrongFontSizeFactorsSize ); - return factors[size - wxFONTSIZE_XX_SMALL]*base; + return wxRound(factors[size - wxFONTSIZE_XX_SMALL]*base); } wxFont& wxFont::MakeBold() @@ -553,6 +537,19 @@ wxFont wxFont::Underlined() const return font; } +wxFont wxFont::Strikethrough() const +{ + wxFont font(*this); + font.MakeStrikethrough(); + return font; +} + +wxFont& wxFont::MakeStrikethrough() +{ + SetStrikethrough(true); + return *this; +} + wxFont& wxFont::Scale(float x) { SetPointSize(int(x*GetPointSize() + 0.5)); @@ -597,19 +594,22 @@ void wxNativeFontInfo::SetFaceName(const wxArrayString& facenames) // These are the generic forms of FromString()/ToString. // -// convert to/from the string representation: format is -// version;pointsize;family;style;weight;underlined;facename;encoding +// convert to/from the string representation: the general format is +// "version;the rest..." with currently defined versions being: +// +// 0;pointsize;family;style;weight;underlined;facename;encoding +// 1;pointsize;family;style;weight;underlined;strikethrough;facename;encoding bool wxNativeFontInfo::FromString(const wxString& s) { long l; + unsigned long version; wxStringTokenizer tokenizer(s, wxT(";")); wxString token = tokenizer.GetNextToken(); - // - // Ignore the version for now - // + if ( !token.ToULong(&version) || version > 1 ) + return false; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) @@ -636,6 +636,14 @@ bool wxNativeFontInfo::FromString(const wxString& s) return false; underlined = l != 0; + if ( version == 1 ) + { + token = tokenizer.GetNextToken(); + if ( !token.ToLong(&l) ) + return false; + strikethrough = l != 0; + } + faceName = tokenizer.GetNextToken(); #ifndef __WXMAC__ @@ -655,13 +663,14 @@ wxString wxNativeFontInfo::ToString() const { wxString s; - s.Printf(wxT("%d;%d;%d;%d;%d;%d;%s;%d"), - 0, // version + s.Printf(wxT("%d;%d;%d;%d;%d;%d;%d;%s;%d"), + 1, // version pointSize, family, (int)style, (int)weight, underlined, + strikethrough, faceName.GetData(), (int)encoding); @@ -675,6 +684,7 @@ void wxNativeFontInfo::Init() style = wxFONTSTYLE_NORMAL; weight = wxFONTWEIGHT_NORMAL; underlined = false; + strikethrough = false; faceName.clear(); encoding = wxFONTENCODING_DEFAULT; } @@ -699,6 +709,11 @@ bool wxNativeFontInfo::GetUnderlined() const return underlined; } +bool wxNativeFontInfo::GetStrikethrough() const +{ + return strikethrough; +} + wxString wxNativeFontInfo::GetFaceName() const { return faceName; @@ -734,6 +749,11 @@ void wxNativeFontInfo::SetUnderlined(bool underlined_) underlined = underlined_; } +void wxNativeFontInfo::SetStrikethrough(bool strikethrough_) +{ + strikethrough = strikethrough_; +} + bool wxNativeFontInfo::SetFaceName(const wxString& facename_) { faceName = facename_; @@ -770,6 +790,11 @@ wxString wxNativeFontInfo::ToUserString() const desc << _("underlined"); } + if ( GetStrikethrough() ) + { + desc << _("strikethrough"); + } + switch ( GetWeight() ) { default: @@ -942,6 +967,10 @@ bool wxNativeFontInfo::FromUserString(const wxString& s) { SetUnderlined(true); } + else if ( token == wxT("strikethrough") || token == _("strikethrough") ) + { + SetStrikethrough(true); + } else if ( token == wxT("light") || token == _("light") ) { SetWeight(wxFONTWEIGHT_LIGHT); diff --git a/Externals/wxWidgets3/src/common/fontmgrcmn.cpp b/Externals/wxWidgets3/src/common/fontmgrcmn.cpp index 1e89dde607..527352373c 100644 --- a/Externals/wxWidgets3/src/common/fontmgrcmn.cpp +++ b/Externals/wxWidgets3/src/common/fontmgrcmn.cpp @@ -3,7 +3,7 @@ // Purpose: font management for ports that don't have their own // Author: Vaclav Slavik // Created: 2006-11-18 -// RCS-ID: $Id: fontmgrcmn.cpp 62349 2009-10-09 13:04:59Z VZ $ +// RCS-ID: $Id: fontmgrcmn.cpp 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) // (c) 2006 REA Elektronik GmbH // Licence: wxWindows licence @@ -123,8 +123,8 @@ wxFontBundleBase::GetFaceForFont(const wxFontMgrFontRefData& font) const type |= FaceType_Bold; // FIXME -- this should read "if ( font->GetStyle() == wxITALIC )", - // but since MGL neither DFB supports slant, we try to display it with - // italic face (better than nothing...) + // but since DFB doesn't support slant, we try to display it with italic + // face (better than nothing...) if ( font.GetStyle() == wxITALIC || font.GetStyle() == wxSLANT ) { if ( HasFace((FaceType)(type | FaceType_Italic)) ) diff --git a/Externals/wxWidgets3/src/common/fontpickercmn.cpp b/Externals/wxWidgets3/src/common/fontpickercmn.cpp index 673a6e6417..5d2c33c8a9 100644 --- a/Externals/wxWidgets3/src/common/fontpickercmn.cpp +++ b/Externals/wxWidgets3/src/common/fontpickercmn.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 15/04/2006 -// RCS-ID: $Id: fontpickercmn.cpp 58718 2009-02-07 18:59:25Z VZ $ +// RCS-ID: $Id: fontpickercmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -137,7 +137,7 @@ void wxFontPickerCtrl::UpdatePickerFromTextCtrl() // string returned by wxFont::GetNativeFontInfoDesc() and not // the user-friendly one returned by wxFont::GetNativeFontInfoUserDesc() wxFont f = String2Font(m_text->GetValue()); - if (!f.Ok()) + if (!f.IsOk()) return; // invalid user input if (M_PICKER->GetSelectedFont() != f) diff --git a/Externals/wxWidgets3/src/common/framecmn.cpp b/Externals/wxWidgets3/src/common/framecmn.cpp index db2120b7fd..aab30e9c81 100644 --- a/Externals/wxWidgets3/src/common/framecmn.cpp +++ b/Externals/wxWidgets3/src/common/framecmn.cpp @@ -3,7 +3,7 @@ // Purpose: common (for all platforms) wxFrame functions // Author: Julian Smart, Vadim Zeitlin // Created: 01/02/97 -// Id: $Id: framecmn.cpp 66592 2011-01-05 18:27:58Z PC $ +// Id: $Id: framecmn.cpp 69101 2011-09-16 13:23:14Z VZ $ // Copyright: (c) 1998 Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -271,6 +271,10 @@ bool wxFrameBase::ProcessCommand(wxMenuItem *item) // use the new value commandEvent.SetInt(item->IsChecked()); } + else // Uncheckable item. + { + commandEvent.SetInt(-1); + } return HandleWindowEvent(commandEvent); } diff --git a/Externals/wxWidgets3/src/common/fs_mem.cpp b/Externals/wxWidgets3/src/common/fs_mem.cpp index e826765b79..b2d18134e3 100644 --- a/Externals/wxWidgets3/src/common/fs_mem.cpp +++ b/Externals/wxWidgets3/src/common/fs_mem.cpp @@ -2,7 +2,7 @@ // Name: src/common/fs_mem.cpp // Purpose: in-memory file system // Author: Vaclav Slavik -// RCS-ID: $Id: fs_mem.cpp 60774 2009-05-28 09:59:32Z SC $ +// RCS-ID: $Id: fs_mem.cpp 70392 2012-01-18 19:42:58Z VZ $ // Copyright: (c) 2000 Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -186,13 +186,9 @@ void wxMemoryFSHandlerBase::AddFileWithMimeType(const wxString& filename, const wxString& textdata, const wxString& mimetype) { - AddFileWithMimeType - ( - filename, - static_cast(textdata.To8BitData()), - wxStrlen(static_cast(textdata.To8BitData())), - mimetype - ); + const wxCharBuffer buf(textdata.To8BitData()); + + AddFileWithMimeType(filename, buf.data(), buf.length(), mimetype); } @@ -253,7 +249,7 @@ wxMemoryFSHandler::AddFile(const wxString& filename, return; wxMemoryOutputStream mems; - if ( image.Ok() && image.SaveFile(mems, type) ) + if ( image.IsOk() && image.SaveFile(mems, type) ) { m_Hash[filename] = new wxMemoryFSFile ( diff --git a/Externals/wxWidgets3/src/common/fswatchercmn.cpp b/Externals/wxWidgets3/src/common/fswatchercmn.cpp index 0a239790b0..eadf694d4d 100644 --- a/Externals/wxWidgets3/src/common/fswatchercmn.cpp +++ b/Externals/wxWidgets3/src/common/fswatchercmn.cpp @@ -3,7 +3,7 @@ // Purpose: wxMswFileSystemWatcher // Author: Bartosz Bekier // Created: 2009-05-26 -// RCS-ID: $Id: fswatchercmn.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: fswatchercmn.cpp 67693 2011-05-03 23:31:39Z VZ $ // Copyright: (c) 2009 Bartosz Bekier // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -79,10 +79,30 @@ wxFileSystemWatcherBase::~wxFileSystemWatcherBase() bool wxFileSystemWatcherBase::Add(const wxFileName& path, int events) { - // args validation & consistency checks - if (!path.FileExists() && !path.DirExists()) + wxFSWPathType type = wxFSWPath_None; + if ( path.FileExists() ) + { + type = wxFSWPath_File; + } + else if ( path.DirExists() ) + { + type = wxFSWPath_Dir; + } + else + { + wxLogError(_("Can't monitor non-existent path \"%s\" for changes."), + path.GetFullPath()); return false; + } + return DoAdd(path, events, type); +} + +bool +wxFileSystemWatcherBase::DoAdd(const wxFileName& path, + int events, + wxFSWPathType type) +{ wxString canonical = GetCanonicalPath(path); if (canonical.IsEmpty()) return false; @@ -91,7 +111,7 @@ bool wxFileSystemWatcherBase::Add(const wxFileName& path, int events) wxString::Format("Path '%s' is already watched", canonical)); // adding a path in a platform specific way - wxFSWatchInfo watch(canonical, events); + wxFSWatchInfo watch(canonical, events, type); if ( !m_service->Add(watch) ) return false; diff --git a/Externals/wxWidgets3/src/common/ftp.cpp b/Externals/wxWidgets3/src/common/ftp.cpp index 8bd4cb21eb..db7537a94a 100644 --- a/Externals/wxWidgets3/src/common/ftp.cpp +++ b/Externals/wxWidgets3/src/common/ftp.cpp @@ -9,7 +9,7 @@ // robust Abort(), support for arbitrary FTP commands, ...) // Randall Fox (support for active mode) // Created: 07/07/1997 -// RCS-ID: $Id: ftp.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: ftp.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1997, 1998 Guilhem Lavaux // (c) 1998-2004 wxWidgets team // Licence: wxWindows licence @@ -587,9 +587,9 @@ wxSocketBase *wxFTP::GetActivePort() addrNew.Service(0); // pick an open port number. wxSocketServer *sockSrv = new wxSocketServer(addrNew); - if (!sockSrv->Ok()) + if (!sockSrv->IsOk()) { - // We use Ok() here to see if everything is ok + // We use IsOk() here to see if everything is ok m_lastError = wxPROTO_PROTERR; delete sockSrv; return NULL; diff --git a/Externals/wxWidgets3/src/common/gdicmn.cpp b/Externals/wxWidgets3/src/common/gdicmn.cpp index cc022e57c4..2854a7e6ee 100644 --- a/Externals/wxWidgets3/src/common/gdicmn.cpp +++ b/Externals/wxWidgets3/src/common/gdicmn.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: gdicmn.cpp 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: gdicmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -499,7 +499,7 @@ wxColour *wxColourDatabase::FindColour(const wxString& name) static wxColour s_col; s_col = Find(name); - if ( !s_col.Ok() ) + if ( !s_col.IsOk() ) return NULL; return new wxColour(s_col); @@ -655,7 +655,19 @@ const wxFont* wxStockGDI::GetFont(Item item) font = new wxFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); break; case FONT_SMALL: - font = new wxFont(GetFont(FONT_NORMAL)->GetPointSize() - 2, wxSWISS, wxNORMAL, wxNORMAL); + font = new wxFont(GetFont(FONT_NORMAL)->GetPointSize() + // Using the font 2 points smaller than the normal one + // results in font so small as to be unreadable under MSW. + // We might want to actually use -1 under the other + // platforms too but for now be conservative and keep -2 + // there for compatibility with the old behaviour as the + // small font seems to be readable enough there as it is. +#ifdef __WXMSW__ + - 1, +#else + - 2, +#endif + wxSWISS, wxNORMAL, wxNORMAL); break; case FONT_SWISS: font = new wxFont(GetFont(FONT_NORMAL)->GetPointSize(), wxSWISS, wxNORMAL, wxNORMAL); @@ -768,7 +780,7 @@ wxPen *wxPenList::FindOrCreatePen (const wxColour& colour, int width, wxPenStyle wxPen* pen = NULL; wxPen penTmp(colour, width, style); - if (penTmp.Ok()) + if (penTmp.IsOk()) { pen = new wxPen(penTmp); list.Append(pen); @@ -790,7 +802,7 @@ wxBrush *wxBrushList::FindOrCreateBrush (const wxColour& colour, wxBrushStyle st wxBrush* brush = NULL; wxBrush brushTmp(colour, style); - if (brushTmp.Ok()) + if (brushTmp.IsOk()) { brush = new wxBrush(brushTmp); list.Append(brush); @@ -860,7 +872,7 @@ wxFont *wxFontList::FindOrCreateFont(int pointSize, // font not found, create the new one font = NULL; wxFont fontTmp(pointSize, family, style, weight, underline, facename, encoding); - if (fontTmp.Ok()) + if (fontTmp.IsOk()) { font = new wxFont(fontTmp); list.Append(font); diff --git a/Externals/wxWidgets3/src/common/gifdecod.cpp b/Externals/wxWidgets3/src/common/gifdecod.cpp index 343dba3d2b..c0a7b713da 100644 --- a/Externals/wxWidgets3/src/common/gifdecod.cpp +++ b/Externals/wxWidgets3/src/common/gifdecod.cpp @@ -3,7 +3,7 @@ // Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation // Author: Guillermo Rodriguez Garcia // Version: 3.04 -// RCS-ID: $Id: gifdecod.cpp 66828 2011-02-02 11:19:30Z DS $ +// RCS-ID: $Id: gifdecod.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Guillermo Rodriguez Garcia // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -138,7 +138,7 @@ bool wxGIFDecoder::ConvertToImage(unsigned int frame, wxImage *image) const image->Create(sz.GetWidth(), sz.GetHeight()); image->SetType(wxBITMAP_TYPE_GIF); - if (!image->Ok()) + if (!image->IsOk()) return false; pal = GetPalette(frame); diff --git a/Externals/wxWidgets3/src/common/glcmn.cpp b/Externals/wxWidgets3/src/common/glcmn.cpp index fa0457ad6f..35b022bd74 100644 --- a/Externals/wxWidgets3/src/common/glcmn.cpp +++ b/Externals/wxWidgets3/src/common/glcmn.cpp @@ -3,7 +3,7 @@ // Purpose: wxGLCanvasBase implementation // Author: Vadim Zeitlin // Created: 2007-04-09 -// RCS-ID: $Id: glcmn.cpp 65680 2010-09-30 11:44:45Z VZ $ +// RCS-ID: $Id: glcmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -66,7 +66,7 @@ bool wxGLCanvasBase::SetCurrent(const wxGLContext& context) const bool wxGLCanvasBase::SetColour(const wxString& colour) { wxColour col = wxTheColourDatabase->Find(colour); - if ( !col.Ok() ) + if ( !col.IsOk() ) return false; #ifdef wxHAS_OPENGL_ES diff --git a/Externals/wxWidgets3/src/common/graphcmn.cpp b/Externals/wxWidgets3/src/common/graphcmn.cpp index 1cb561e3c3..c4331e464c 100644 --- a/Externals/wxWidgets3/src/common/graphcmn.cpp +++ b/Externals/wxWidgets3/src/common/graphcmn.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: -// RCS-ID: $Id: graphcmn.cpp 66514 2011-01-01 11:10:35Z SC $ +// RCS-ID: $Id: graphcmn.cpp 69360 2011-10-09 22:07:29Z VZ $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -534,7 +534,8 @@ IMPLEMENT_ABSTRACT_CLASS(wxGraphicsContext, wxObject) wxGraphicsContext::wxGraphicsContext(wxGraphicsRenderer* renderer) : wxGraphicsObject(renderer), m_antialias(wxANTIALIAS_DEFAULT), - m_composition(wxCOMPOSITION_OVER) + m_composition(wxCOMPOSITION_OVER), + m_enableOffset(false) { } @@ -564,6 +565,11 @@ void wxGraphicsContext::Flush() { } +void wxGraphicsContext::EnableOffset(bool enable) +{ + m_enableOffset = enable; +} + #if 0 void wxGraphicsContext::SetAlpha( wxDouble WXUNUSED(alpha) ) { @@ -575,12 +581,6 @@ wxDouble wxGraphicsContext::GetAlpha() const } #endif -void wxGraphicsContext::GetSize( wxDouble* width, wxDouble* height) -{ - *width = 10000.0; - *height = 10000.0; -} - void wxGraphicsContext::GetDPI( wxDouble* dpiX, wxDouble* dpiY) { *dpiX = 72.0; @@ -595,7 +595,7 @@ void wxGraphicsContext::SetPen( const wxGraphicsPen& pen ) void wxGraphicsContext::SetPen( const wxPen& pen ) { - if ( !pen.Ok() || pen.GetStyle() == wxPENSTYLE_TRANSPARENT ) + if ( !pen.IsOk() || pen.GetStyle() == wxPENSTYLE_TRANSPARENT ) SetPen( wxNullGraphicsPen ); else SetPen( CreatePen( pen ) ); @@ -609,7 +609,7 @@ void wxGraphicsContext::SetBrush( const wxGraphicsBrush& brush ) void wxGraphicsContext::SetBrush( const wxBrush& brush ) { - if ( !brush.Ok() || brush.GetStyle() == wxBRUSHSTYLE_TRANSPARENT ) + if ( !brush.IsOk() || brush.GetStyle() == wxBRUSHSTYLE_TRANSPARENT ) SetBrush( wxNullGraphicsBrush ); else SetBrush( CreateBrush( brush ) ); @@ -623,7 +623,7 @@ void wxGraphicsContext::SetFont( const wxGraphicsFont& font ) void wxGraphicsContext::SetFont( const wxFont& font, const wxColour& colour ) { - if ( font.Ok() ) + if ( font.IsOk() ) SetFont( CreateFont( font, colour ) ); else SetFont( wxNullGraphicsFont ); @@ -665,9 +665,7 @@ wxGraphicsContext::DoDrawFilledText(const wxString &str, // to make sure our 'OffsetToPixelBoundaries' doesn't move the fill shape SetPen( wxNullGraphicsPen ); - wxGraphicsPath path = CreatePath(); - path.AddRectangle( x , y, width, height ); - FillPath( path ); + DrawRectangle(x , y, width, height); DrawText( str, x ,y); SetBrush( formerBrush ); @@ -839,17 +837,32 @@ wxGraphicsContext::CreateRadialGradientBrush( ); } -// sets the font wxGraphicsFont wxGraphicsContext::CreateFont( const wxFont &font , const wxColour &col ) const { return GetRenderer()->CreateFont(font,col); } +wxGraphicsFont +wxGraphicsContext::CreateFont(double size, + const wxString& facename, + int flags, + const wxColour& col) const +{ + return GetRenderer()->CreateFont(size, facename, flags, col); +} + wxGraphicsBitmap wxGraphicsContext::CreateBitmap( const wxBitmap& bmp ) const { return GetRenderer()->CreateBitmap(bmp); } +#if wxUSE_IMAGE +wxGraphicsBitmap wxGraphicsContext::CreateBitmapFromImage(const wxImage& image) const +{ + return GetRenderer()->CreateBitmapFromImage(image); +} +#endif // wxUSE_IMAGE + wxGraphicsBitmap wxGraphicsContext::CreateSubBitmap( const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) const { return GetRenderer()->CreateSubBitmap(bmp,x,y,w,h); @@ -896,6 +909,13 @@ wxGraphicsContext* wxGraphicsContext::Create( wxWindow* window ) return wxGraphicsRenderer::GetDefaultRenderer()->CreateContext(window); } +#if wxUSE_IMAGE +/* static */ wxGraphicsContext* wxGraphicsContext::Create(wxImage& image) +{ + return wxGraphicsRenderer::GetDefaultRenderer()->CreateContextFromImage(image); +} +#endif // wxUSE_IMAGE + wxGraphicsContext* wxGraphicsContext::Create() { return wxGraphicsRenderer::GetDefaultRenderer()->CreateMeasuringContext(); diff --git a/Externals/wxWidgets3/src/common/headerctrlcmn.cpp b/Externals/wxWidgets3/src/common/headerctrlcmn.cpp index 8fd4afa408..74c195eb57 100644 --- a/Externals/wxWidgets3/src/common/headerctrlcmn.cpp +++ b/Externals/wxWidgets3/src/common/headerctrlcmn.cpp @@ -3,7 +3,7 @@ // Purpose: implementation of wxHeaderCtrlBase // Author: Vadim Zeitlin // Created: 2008-12-02 -// RCS-ID: $Id: headerctrlcmn.cpp 66740 2011-01-24 14:35:33Z VS $ +// RCS-ID: $Id: headerctrlcmn.cpp 70338 2012-01-14 16:51:57Z VS $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -31,6 +31,7 @@ #include "wx/headerctrl.h" #include "wx/rearrangectrl.h" +#include "wx/renderer.h" namespace { @@ -107,6 +108,21 @@ void wxHeaderCtrlBase::SetColumnCount(unsigned int count) DoSetCount(count); } +int wxHeaderCtrlBase::GetColumnTitleWidth(const wxHeaderColumn& col) +{ + int w = wxWindowBase::GetTextExtent(col.GetTitle()).x; + + // add some margin: + w += wxRendererNative::Get().GetHeaderButtonMargin(this); + + // if a bitmap is used, add space for it and 2px border: + wxBitmap bmp = col.GetBitmap(); + if ( bmp.IsOk() ) + w += bmp.GetWidth() + 2; + + return w; +} + // ---------------------------------------------------------------------------- // wxHeaderCtrlBase event handling // ---------------------------------------------------------------------------- @@ -122,8 +138,7 @@ void wxHeaderCtrlBase::OnSeparatorDClick(wxHeaderCtrlEvent& event) return; } - int w = wxWindowBase::GetTextExtent(column.GetTitle()).x; - w += 4*GetCharWidth(); // add some arbitrary margins around text + int w = GetColumnTitleWidth(column); if ( !UpdateColumnWidthToFit(col, w) ) event.Skip(); @@ -443,7 +458,7 @@ void wxHeaderCtrlSimple::DoShowSortIndicator(unsigned int idx, bool ascending) { RemoveSortIndicator(); - m_cols[idx].SetAsSortKey(ascending); + m_cols[idx].SetSortOrder(ascending); m_sortKey = idx; UpdateColumn(idx); diff --git a/Externals/wxWidgets3/src/common/http.cpp b/Externals/wxWidgets3/src/common/http.cpp index fdb2cf67ea..6a2ef68647 100644 --- a/Externals/wxWidgets3/src/common/http.cpp +++ b/Externals/wxWidgets3/src/common/http.cpp @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux // Modified by: Simo Virokannas (authentication, Dec 2005) // Created: August 1997 -// RCS-ID: $Id: http.cpp 66728 2011-01-22 14:38:36Z DS $ +// RCS-ID: $Id: http.cpp 70485 2012-01-31 13:09:11Z VZ $ // Copyright: (c) 1997, 1998 Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -48,7 +48,6 @@ wxHTTP::wxHTTP() m_addr = NULL; m_read = false; m_proxy_mode = false; - m_post_buf = wxEmptyString; m_http_response = 0; SetNotify(wxSOCKET_LOST_FLAG); @@ -193,7 +192,49 @@ wxString wxHTTP::GenerateAuthString(const wxString& user, const wxString& pass) void wxHTTP::SetPostBuffer(const wxString& post_buf) { - m_post_buf = post_buf; + // Use To8BitData() for backwards compatibility in this deprecated method. + // The new code should use the other overload or SetPostText() and specify + // the encoding to use for the text explicitly. + wxScopedCharBuffer scb = post_buf.To8BitData(); + if ( scb.length() ) + { + m_postBuffer.Clear(); + m_postBuffer.AppendData(scb.data(), scb.length()); + } +} + +bool +wxHTTP::SetPostBuffer(const wxString& contentType, + const wxMemoryBuffer& data) +{ + m_postBuffer = data; + m_contentType = contentType; + + return !m_postBuffer.IsEmpty(); +} + +bool +wxHTTP::SetPostText(const wxString& contentType, + const wxString& data, + const wxMBConv& conv) +{ +#if wxUSE_UNICODE + wxScopedCharBuffer scb = data.mb_str(conv); + const size_t len = scb.length(); + const char* const buf = scb.data(); +#else // !wxUSE_UNICODE + const size_t len = data.length(); + const char* const buf = data.mb_str(conv); +#endif // wxUSE_UNICODE/!wxUSE_UNICODE + + if ( !len ) + return false; + + m_postBuffer.Clear(); + m_postBuffer.AppendData(buf, len); + m_contentType = contentType; + + return true; } void wxHTTP::SendHeaders() @@ -312,8 +353,21 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) case wxHTTP_POST: request = wxT("POST"); - if ( GetHeader( wxT("Content-Length") ).empty() ) - SetHeader( wxT("Content-Length"), wxString::Format( wxT("%lu"), (unsigned long)m_post_buf.Len() ) ); + // Content length must be correct, so always set, possibly + // overriding the value set explicitly by a previous call to + // SetHeader("Content-Length"). + if ( !m_postBuffer.IsEmpty() ) + { + wxString len; + len << m_postBuffer.GetDataLen(); + + SetHeader(wxS("Content-Length"), len); + } + + // However if the user had explicitly set the content type, don't + // override it with the content type passed to SetPostText(). + if ( !m_contentType.empty() && GetContentType().empty() ) + SetHeader(wxS("Content-Type"), m_contentType); break; default: @@ -346,18 +400,10 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) Write("\r\n", 2); if ( req == wxHTTP_POST ) { - // Post data can be arbitrary binary data when the "binary" content - // transfer encoding is used so don't assume it's ASCII only or - // NUL-terminated. - { - const wxScopedCharBuffer buf(m_post_buf.To8BitData()); - Write(buf, buf.length()); - } // delete the buffer before modifying the string it points to, it - // wouldn't really be a problem here even if we didn't do this - // because we won't use this buffer again but this will avoid any - // nasty surprises in the future if this code changes + if ( !m_postBuffer.IsEmpty() ) + Write(m_postBuffer.GetData(), m_postBuffer.GetDataLen()); - m_post_buf = wxEmptyString; + m_postBuffer.Clear(); } wxString tmp_str; @@ -483,7 +529,7 @@ wxInputStream *wxHTTP::GetInputStream(const wxString& path) return NULL; #endif - if (!BuildRequest(path, m_post_buf.empty() ? wxHTTP_GET : wxHTTP_POST)) + if (!BuildRequest(path, m_postBuffer.IsEmpty() ? wxHTTP_GET : wxHTTP_POST)) return NULL; inp_stream = new wxHTTPStream(this); diff --git a/Externals/wxWidgets3/src/common/iconbndl.cpp b/Externals/wxWidgets3/src/common/iconbndl.cpp index f3bf18a7af..d79aaf5479 100644 --- a/Externals/wxWidgets3/src/common/iconbndl.cpp +++ b/Externals/wxWidgets3/src/common/iconbndl.cpp @@ -3,7 +3,7 @@ // Purpose: wxIconBundle // Author: Mattia Barbon, Vadim Zeitlin // Created: 23.03.2002 -// RCS-ID: $Id: iconbndl.cpp 66374 2010-12-14 18:43:49Z VZ $ +// RCS-ID: $Id: iconbndl.cpp 70455 2012-01-24 22:17:47Z VZ $ // Copyright: (c) Mattia barbon // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -163,7 +163,7 @@ void wxIconBundle::AddIcon(const wxString& file, wxBitmapType type) if ( type == wxBITMAP_TYPE_ICON_RESOURCE ) { wxIcon tmp(file, type); - if (tmp.Ok()) + if (tmp.IsOk()) { AddIcon(tmp); return; @@ -193,49 +193,91 @@ void wxIconBundle::AddIcon(wxInputStream& stream, wxBitmapType type) #endif // wxUSE_STREAMS && wxUSE_IMAGE -wxIcon wxIconBundle::GetIcon(const wxSize& size) const +wxIcon wxIconBundle::GetIcon(const wxSize& size, int flags) const { + wxASSERT( size == wxDefaultSize || (size.x >= 0 && size.y > 0) ); + + // We need the standard system icon size when using FALLBACK_SYSTEM. + wxCoord sysX = 0, + sysY = 0; + if ( flags & FALLBACK_SYSTEM ) + { + sysX = wxSystemSettings::GetMetric(wxSYS_ICON_X); + sysY = wxSystemSettings::GetMetric(wxSYS_ICON_Y); + } + + // If size == wxDefaultSize, we use system default icon size by convention. + wxCoord sizeX = size.x; + wxCoord sizeY = size.y; + if ( size == wxDefaultSize ) + { + wxASSERT_MSG( flags == FALLBACK_SYSTEM, + wxS("Must have valid size if not using FALLBACK_SYSTEM") ); + + sizeX = sysX; + sizeY = sysY; + } + + // Iterate over all icons searching for the exact match or the closest icon + // for FALLBACK_NEAREST_LARGER. + wxIcon iconBest; + int bestDiff = 0; + bool bestIsLarger = false; + bool bestIsSystem = false; + const size_t count = GetIconCount(); - // optimize for the common case of icon bundles containing one icon only - wxIcon iconBest; - switch ( count ) + const wxIconArray& iconArray = M_ICONBUNDLEDATA->m_icons; + for ( size_t i = 0; i < count; i++ ) { - case 0: - // nothing to do, iconBest is already invalid + const wxIcon& icon = iconArray[i]; + if ( !icon.IsOk() ) + continue; + wxCoord sx = icon.GetWidth(), + sy = icon.GetHeight(); + + // Exact match ends search immediately in any case. + if ( sx == sizeX && sy == sizeY ) + { + iconBest = icon; break; + } - case 1: - iconBest = M_ICONBUNDLEDATA->m_icons[0]; - break; - - default: - // there is more than one icon, find the best match: - wxCoord sysX = wxSystemSettings::GetMetric( wxSYS_ICON_X ), - sysY = wxSystemSettings::GetMetric( wxSYS_ICON_Y ); - - const wxIconArray& iconArray = M_ICONBUNDLEDATA->m_icons; - for ( size_t i = 0; i < count; i++ ) + if ( flags & FALLBACK_SYSTEM ) + { + if ( sx == sysX && sy == sysY ) { - const wxIcon& icon = iconArray[i]; - wxCoord sx = icon.GetWidth(), - sy = icon.GetHeight(); - - // if we got an icon of exactly the requested size, we're done - if ( sx == size.x && sy == size.y ) - { - iconBest = icon; - break; - } - - // the best icon is by default (arbitrarily) the first one but - // if we find a system-sized icon, take it instead - if ((sx == sysX && sy == sysY) || !iconBest.IsOk()) - iconBest = icon; + iconBest = icon; + bestIsSystem = true; + continue; } + } + + if ( !bestIsSystem && (flags & FALLBACK_NEAREST_LARGER) ) + { + bool iconLarger = (sx >= sizeX) && (sy >= sizeY); + int iconDiff = abs(sx - sizeX) + abs(sy - sizeY); + + // Use current icon as candidate for the best icon, if either: + // - we have no candidate yet + // - we have no candidate larger than desired size and current icon is + // - current icon is closer to desired size than candidate + if ( !iconBest.IsOk() || + (!bestIsLarger && iconLarger) || + (iconLarger && (iconDiff < bestDiff)) ) + { + iconBest = icon; + bestIsLarger = iconLarger; + bestDiff = iconDiff; + continue; + } + } } #if defined( __WXMAC__ ) && wxOSX_USE_CARBON + if (!iconBest.IsOk()) + return wxNullIcon; + return wxIcon(iconBest.GetHICON(), size); #else return iconBest; @@ -244,14 +286,7 @@ wxIcon wxIconBundle::GetIcon(const wxSize& size) const wxIcon wxIconBundle::GetIconOfExactSize(const wxSize& size) const { - wxIcon icon = GetIcon(size); - if ( icon.Ok() && - (icon.GetWidth() != size.x || icon.GetHeight() != size.y) ) - { - icon = wxNullIcon; - } - - return icon; + return GetIcon(size, FALLBACK_NONE); } void wxIconBundle::AddIcon(const wxIcon& icon) @@ -267,7 +302,7 @@ void wxIconBundle::AddIcon(const wxIcon& icon) for ( size_t i = 0; i < count; ++i ) { wxIcon& tmp = iconArray[i]; - if ( tmp.Ok() && + if ( tmp.IsOk() && tmp.GetWidth() == icon.GetWidth() && tmp.GetHeight() == icon.GetHeight() ) { diff --git a/Externals/wxWidgets3/src/common/imagbmp.cpp b/Externals/wxWidgets3/src/common/imagbmp.cpp index 70ecc97fed..eb232c216b 100644 --- a/Externals/wxWidgets3/src/common/imagbmp.cpp +++ b/Externals/wxWidgets3/src/common/imagbmp.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagbmp.cpp // Purpose: wxImage BMP,ICO and CUR handlers // Author: Robert Roebling, Chris Elliott -// RCS-ID: $Id: imagbmp.cpp 66491 2010-12-29 12:31:37Z DS $ +// RCS-ID: $Id: imagbmp.cpp 68766 2011-08-17 21:01:09Z DS $ // Copyright: (c) Robert Roebling, Chris Elliott // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -91,7 +91,7 @@ bool wxBMPHandler::SaveDib(wxImage *image, { wxCHECK_MSG( image, false, wxT("invalid pointer in wxBMPHandler::SaveFile") ); - if ( !image->Ok() ) + if ( !image->IsOk() ) { if ( verbose ) { @@ -146,8 +146,8 @@ bool wxBMPHandler::SaveDib(wxImage *image, } unsigned width = image->GetWidth(); - unsigned row_padding = (4 - int(width*bpp/8.0) % 4) % 4; // # bytes to pad to dword - unsigned row_width = int(width * bpp/8.0) + row_padding; // # of bytes per row + unsigned row_padding = (4 - ((width * bpp + 7) / 8) % 4) % 4; // # bytes to pad to dword + unsigned row_width = (width * bpp + 7) / 8 + row_padding; // # of bytes per row struct { @@ -351,7 +351,7 @@ bool wxBMPHandler::SaveDib(wxImage *image, // pointer to the image data, use quantized if available wxUint8 *data = (wxUint8*) image->GetData(); - if (q_image) if (q_image->Ok()) data = (wxUint8*) q_image->GetData(); + if (q_image) if (q_image->IsOk()) data = (wxUint8*) q_image->GetData(); wxUint8 *buffer = new wxUint8[row_width]; memset(buffer, 0, row_width); @@ -533,6 +533,14 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, wxON_BLOCK_EXIT1(&BMPPalette::Free, cmap); + bool isUpsideDown = true; + + if (height < 0) + { + isUpsideDown = false; + height = -height; + } + // destroy existing here instead of: image->Destroy(); image->Create(width, height); @@ -702,9 +710,10 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, // this case (see #10915) bool hasValidAlpha = false; - /* BMPs are stored upside down */ - for ( int line = (height - 1); line >= 0; line-- ) + for ( int row = 0; row < height; row++ ) { + int line = isUpsideDown ? height - 1 - row : row; + int linepos = 0; for ( int column = 0; column < width ; ) { @@ -734,21 +743,24 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, { if ( aByte == 0 ) { - if ( column > 0 ) - column = width; + // end of scanline marker + column = width; + row--; } else if ( aByte == 1 ) { + // end of RLE data marker, stop decoding column = width; - line = -1; + row = height; } else if ( aByte == 2 ) { + // delta marker, move in image aByte = stream.GetC(); column += aByte; linepos = column * bpp / 4; aByte = stream.GetC(); - line -= aByte; // upside down + row += aByte; // upside down } else { @@ -817,20 +829,24 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, { if ( aByte == 0 ) { - /* column = width; */ + // end of scanline marker + column = width; + row--; } else if ( aByte == 1 ) { + // end of RLE data marker, stop decoding column = width; - line = -1; + row = height; } else if ( aByte == 2 ) { + // delta marker, move in image aByte = stream.GetC(); column += aByte; linepos = column * bpp / 8; aByte = stream.GetC(); - line += aByte; + row -= aByte; } else { @@ -1249,7 +1265,7 @@ bool wxICOHandler::SaveFile(wxImage *image, // wxCountingOutputStream::IsOk() always returns true for now and this // "if" provokes VC++ warnings in optimized build #if 0 - if ( !cStream.Ok() ) + if ( !cStream.IsOk() ) { if ( verbose ) { @@ -1335,6 +1351,11 @@ bool wxICOHandler::SaveFile(wxImage *image, bool wxICOHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index) { + if ( stream.IsSeekable() && stream.SeekI(0) == wxInvalidOffset ) + { + return false; + } + return DoLoadFile(image, stream, verbose, index); } @@ -1423,10 +1444,16 @@ bool wxICOHandler::DoLoadFile(wxImage *image, wxInputStream& stream, int wxICOHandler::DoGetImageCount(wxInputStream& stream) { + // It's ok to modify the stream position in this function. + + if ( stream.IsSeekable() && stream.SeekI(0) == wxInvalidOffset ) + { + return 0; + } + ICONDIR IconDir; if (stream.Read(&IconDir, sizeof(IconDir)).LastRead() != sizeof(IconDir)) - // it's ok to modify the stream position here return 0; return (int)wxUINT16_SWAP_ON_BE(IconDir.idCount); @@ -1492,8 +1519,15 @@ int wxANIHandler::DoGetImageCount(wxInputStream& stream) static bool CanReadICOOrCUR(wxInputStream *stream, wxUint16 resourceType) { + // It's ok to modify the stream position in this function. + + if ( stream->IsSeekable() && stream->SeekI(0) == wxInvalidOffset ) + { + return false; + } + ICONDIR iconDir; - if ( !stream->Read(&iconDir, sizeof(iconDir)) ) // it's ok to modify the stream position here + if ( !stream->Read(&iconDir, sizeof(iconDir)) ) { return false; } diff --git a/Externals/wxWidgets3/src/common/image.cpp b/Externals/wxWidgets3/src/common/image.cpp index 8eb6ac2c9b..637c93dcdb 100644 --- a/Externals/wxWidgets3/src/common/image.cpp +++ b/Externals/wxWidgets3/src/common/image.cpp @@ -2,7 +2,7 @@ // Name: src/common/image.cpp // Purpose: wxImage // Author: Robert Roebling -// RCS-ID: $Id: image.cpp 67203 2011-03-15 16:42:34Z DS $ +// RCS-ID: $Id: image.cpp 70656 2012-02-20 21:57:17Z VZ $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -140,8 +140,9 @@ bool wxImage::Create(const char* const* xpmData) wxXPMDecoder decoder; (*this) = decoder.ReadData(xpmData); - return Ok(); + return IsOk(); #else + wxUnusedVar(xpmData); return false; #endif } @@ -258,7 +259,7 @@ wxImage wxImage::MakeEmptyClone(int flags) const { wxImage image; - wxCHECK_MSG( Ok(), image, wxS("invalid image") ); + wxCHECK_MSG( IsOk(), image, wxS("invalid image") ); long height = M_IMGDATA->m_height; long width = M_IMGDATA->m_width; @@ -293,7 +294,7 @@ wxImage wxImage::Copy() const { wxImage image; - wxCHECK_MSG( Ok(), image, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), image, wxT("invalid image") ); image.m_refData = CloneRefData(m_refData); @@ -307,7 +308,7 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const wxImage image; - wxCHECK_MSG( Ok(), image, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), image, wxT("invalid image") ); // can't scale to/from 0 size wxCHECK_MSG( (xFactor > 0) && (yFactor > 0), image, @@ -426,7 +427,7 @@ wxImage::Scale( int width, int height, wxImageResizeQuality quality ) const { wxImage image; - wxCHECK_MSG( Ok(), image, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), image, wxT("invalid image") ); // can't scale to/from 0 size wxCHECK_MSG( (width > 0) && (height > 0), image, @@ -856,7 +857,7 @@ wxImage wxImage::BlurHorizontal(int blurRadius) const { wxImage ret_image(MakeEmptyClone()); - wxCHECK( ret_image.Ok(), ret_image ); + wxCHECK( ret_image.IsOk(), ret_image ); const unsigned char* src_data = M_IMGDATA->m_data; unsigned char* dst_data = ret_image.GetData(); @@ -959,7 +960,7 @@ wxImage wxImage::BlurVertical(int blurRadius) const { wxImage ret_image(MakeEmptyClone()); - wxCHECK( ret_image.Ok(), ret_image ); + wxCHECK( ret_image.IsOk(), ret_image ); const unsigned char* src_data = M_IMGDATA->m_data; unsigned char* dst_data = ret_image.GetData(); @@ -1074,7 +1075,7 @@ wxImage wxImage::Rotate90( bool clockwise ) const { wxImage image(MakeEmptyClone(Clone_SwapOrientation)); - wxCHECK( image.Ok(), image ); + wxCHECK( image.IsOk(), image ); long height = M_IMGDATA->m_height; long width = M_IMGDATA->m_width; @@ -1099,7 +1100,7 @@ wxImage wxImage::Rotate90( bool clockwise ) const // we rotate the image in 21-pixel (63-byte) wide strips // to make better use of cpu cache - memory transfers // (note: while much better than single-pixel "strips", - // our vertical strips will still generally straddle cachelines) + // our vertical strips will still generally straddle 64-byte cachelines) for (long ii = 0; ii < width; ) { long next_ii = wxMin(ii + 21, width); @@ -1113,11 +1114,11 @@ wxImage wxImage::Rotate90( bool clockwise ) const { if ( clockwise ) { - target_data = data + (((i+1)*height) - j - 1)*3; + target_data = data + ((i + 1)*height - j - 1)*3; } else { - target_data = data + ((height*(width - 1 - i)) + j)*3; + target_data = data + (height*(width - 1 - i) + j)*3; } memcpy( target_data, source_data, 3 ); source_data += 3; @@ -1134,21 +1135,30 @@ wxImage wxImage::Rotate90( bool clockwise ) const unsigned char *alpha_data = image.GetAlpha(); unsigned char *target_alpha = 0 ; - for (long j = 0; j < height; j++) + for (long ii = 0; ii < width; ) { - for (long i = 0; i < width; i++) - { - if ( clockwise ) - { - target_alpha = alpha_data + (((i+1)*height) - j - 1); - } - else - { - target_alpha = alpha_data + ((height*(width-1)) + j - (i*height)); - } + long next_ii = wxMin(ii + 64, width); - *target_alpha = *source_alpha++; + for (long j = 0; j < height; j++) + { + source_alpha = M_IMGDATA->m_alpha + j*width + ii; + + for (long i = ii; i < next_ii; i++) + { + if ( clockwise ) + { + target_alpha = alpha_data + (i+1)*height - j - 1; + } + else + { + target_alpha = alpha_data + height*(width - i - 1) + j; + } + + *target_alpha = *source_alpha++; + } } + + ii = next_ii; } } @@ -1159,7 +1169,7 @@ wxImage wxImage::Rotate180() const { wxImage image(MakeEmptyClone()); - wxCHECK( image.Ok(), image ); + wxCHECK( image.IsOk(), image ); long height = M_IMGDATA->m_height; long width = M_IMGDATA->m_width; @@ -1212,7 +1222,7 @@ wxImage wxImage::Mirror( bool horizontally ) const { wxImage image(MakeEmptyClone()); - wxCHECK( image.Ok(), image ); + wxCHECK( image.IsOk(), image ); long height = M_IMGDATA->m_height; long width = M_IMGDATA->m_width; @@ -1289,7 +1299,7 @@ wxImage wxImage::GetSubImage( const wxRect &rect ) const { wxImage image; - wxCHECK_MSG( Ok(), image, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), image, wxT("invalid image") ); wxCHECK_MSG( (rect.GetLeft()>=0) && (rect.GetTop()>=0) && (rect.GetRight()<=GetWidth()) && (rect.GetBottom()<=GetHeight()), @@ -1342,7 +1352,7 @@ wxImage wxImage::Size( const wxSize& size, const wxPoint& pos, { wxImage image; - wxCHECK_MSG( Ok(), image, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), image, wxT("invalid image") ); wxCHECK_MSG( (size.GetWidth() > 0) && (size.GetHeight() > 0), image, wxT("invalid size") ); int width = GetWidth(), height = GetHeight(); @@ -1390,8 +1400,8 @@ wxImage wxImage::Size( const wxSize& size, const wxPoint& pos, void wxImage::Paste( const wxImage &image, int x, int y ) { - wxCHECK_RET( Ok(), wxT("invalid image") ); - wxCHECK_RET( image.Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); + wxCHECK_RET( image.IsOk(), wxT("invalid image") ); AllocExclusive(); @@ -1419,12 +1429,15 @@ void wxImage::Paste( const wxImage &image, int x, int y ) if (width < 1) return; if (height < 1) return; - if ((!HasMask() && !image.HasMask()) || - (HasMask() && !image.HasMask()) || - ((HasMask() && image.HasMask() && + // If we can, copy the data using memcpy() as this is the fastest way. But + // for this the image being pasted must have "compatible" mask with this + // one meaning that either it must not have one at all or it must use the + // same masked colour. + if ( !image.HasMask() || + ((HasMask() && (GetMaskRed()==image.GetMaskRed()) && (GetMaskGreen()==image.GetMaskGreen()) && - (GetMaskBlue()==image.GetMaskBlue())))) + (GetMaskBlue()==image.GetMaskBlue()))) ) { const unsigned char* source_data = image.GetData() + 3*(xx + yy*image.GetWidth()); int source_step = image.GetWidth()*3; @@ -1491,7 +1504,7 @@ void wxImage::Paste( const wxImage &image, int x, int y ) void wxImage::Replace( unsigned char r1, unsigned char g1, unsigned char b1, unsigned char r2, unsigned char g2, unsigned char b2 ) { - wxCHECK_RET( Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); AllocExclusive(); @@ -1522,7 +1535,7 @@ wxImage wxImage::ConvertToGreyscale(double weight_r, double weight_g, double wei { wxImage image(MakeEmptyClone()); - wxCHECK( image.Ok(), image ); + wxCHECK( image.IsOk(), image ); const unsigned char *src = M_IMGDATA->m_data; unsigned char *dest = image.GetData(); @@ -1556,7 +1569,7 @@ wxImage wxImage::ConvertToMono( unsigned char r, unsigned char g, unsigned char { wxImage image; - wxCHECK_MSG( Ok(), image, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), image, wxT("invalid image") ); image.Create( M_IMGDATA->m_width, M_IMGDATA->m_height, false ); @@ -1619,14 +1632,14 @@ wxImage wxImage::ConvertToDisabled(unsigned char brightness) const int wxImage::GetWidth() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid image") ); return M_IMGDATA->m_width; } int wxImage::GetHeight() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid image") ); return M_IMGDATA->m_height; } @@ -1650,7 +1663,7 @@ void wxImage::SetType(wxBitmapType type) long wxImage::XYToIndex(int x, int y) const { - if ( Ok() && + if ( IsOk() && x >= 0 && y >= 0 && x < M_IMGDATA->m_width && y < M_IMGDATA->m_height ) { @@ -1676,7 +1689,7 @@ void wxImage::SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned c void wxImage::SetRGB( const wxRect& rect_, unsigned char r, unsigned char g, unsigned char b ) { - wxCHECK_RET( Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); AllocExclusive(); @@ -1752,14 +1765,14 @@ bool wxImage::IsOk() const unsigned char *wxImage::GetData() const { - wxCHECK_MSG( Ok(), (unsigned char *)NULL, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), (unsigned char *)NULL, wxT("invalid image") ); return M_IMGDATA->m_data; } void wxImage::SetData( unsigned char *data, bool static_data ) { - wxCHECK_RET( Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); wxImageRefData *newRefData = new wxImageRefData(); @@ -1860,7 +1873,7 @@ wxImage::ConvertColourToAlpha(unsigned char r, unsigned char g, unsigned char b) void wxImage::SetAlpha( unsigned char *alpha, bool static_data ) { - wxCHECK_RET( Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); AllocExclusive(); @@ -1878,7 +1891,7 @@ void wxImage::SetAlpha( unsigned char *alpha, bool static_data ) unsigned char *wxImage::GetAlpha() const { - wxCHECK_MSG( Ok(), (unsigned char *)NULL, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), (unsigned char *)NULL, wxT("invalid image") ); return M_IMGDATA->m_alpha; } @@ -1936,7 +1949,7 @@ void wxImage::ClearAlpha() void wxImage::SetMaskColour( unsigned char r, unsigned char g, unsigned char b ) { - wxCHECK_RET( Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); AllocExclusive(); @@ -1948,7 +1961,7 @@ void wxImage::SetMaskColour( unsigned char r, unsigned char g, unsigned char b ) bool wxImage::GetOrFindMaskColour( unsigned char *r, unsigned char *g, unsigned char *b ) const { - wxCHECK_MSG( Ok(), false, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), false, wxT("invalid image") ); if (M_IMGDATA->m_hasMask) { @@ -1966,28 +1979,28 @@ bool wxImage::GetOrFindMaskColour( unsigned char *r, unsigned char *g, unsigned unsigned char wxImage::GetMaskRed() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid image") ); return M_IMGDATA->m_maskRed; } unsigned char wxImage::GetMaskGreen() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid image") ); return M_IMGDATA->m_maskGreen; } unsigned char wxImage::GetMaskBlue() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid image") ); return M_IMGDATA->m_maskBlue; } void wxImage::SetMask( bool mask ) { - wxCHECK_RET( Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); AllocExclusive(); @@ -1996,7 +2009,7 @@ void wxImage::SetMask( bool mask ) bool wxImage::HasMask() const { - wxCHECK_MSG( Ok(), false, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), false, wxT("invalid image") ); return M_IMGDATA->m_hasMask; } @@ -2143,22 +2156,22 @@ bool wxImage::ConvertAlphaToMask(unsigned char mr, bool wxImage::HasPalette() const { - if (!Ok()) + if (!IsOk()) return false; - return M_IMGDATA->m_palette.Ok(); + return M_IMGDATA->m_palette.IsOk(); } const wxPalette& wxImage::GetPalette() const { - wxCHECK_MSG( Ok(), wxNullPalette, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), wxNullPalette, wxT("invalid image") ); return M_IMGDATA->m_palette; } void wxImage::SetPalette(const wxPalette& palette) { - wxCHECK_RET( Ok(), wxT("invalid image") ); + wxCHECK_RET( IsOk(), wxT("invalid image") ); AllocExclusive(); @@ -2280,7 +2293,7 @@ bool wxImage::SaveFile( const wxString& WXUNUSED_UNLESS_STREAMS(filename), wxBitmapType WXUNUSED_UNLESS_STREAMS(type) ) const { #if HAS_FILE_STREAMS - wxCHECK_MSG( Ok(), false, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), false, wxT("invalid image") ); ((wxImage*)this)->SetOption(wxIMAGE_OPTION_FILENAME, filename); @@ -2300,7 +2313,7 @@ bool wxImage::SaveFile( const wxString& WXUNUSED_UNLESS_STREAMS(filename), const wxString& WXUNUSED_UNLESS_STREAMS(mimetype) ) const { #if HAS_FILE_STREAMS - wxCHECK_MSG( Ok(), false, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), false, wxT("invalid image") ); ((wxImage*)this)->SetOption(wxIMAGE_OPTION_FILENAME, filename); @@ -2331,7 +2344,7 @@ int wxImage::GetImageCount( const wxString& WXUNUSED_UNLESS_STREAMS(name), { #if HAS_FILE_STREAMS wxImageFileInputStream stream(name); - if (stream.Ok()) + if (stream.IsOk()) return GetImageCount(stream, type); #endif @@ -2438,7 +2451,17 @@ bool wxImage::DoLoad(wxImageHandler& handler, wxInputStream& stream, int index) } if ( width != widthOrig || height != heightOrig ) + { + // get the original size if it was set by the image handler + // but also in order to restore it after Rescale + int widthOrigOption = GetOptionInt(wxIMAGE_OPTION_ORIGINAL_WIDTH), + heightOrigOption = GetOptionInt(wxIMAGE_OPTION_ORIGINAL_HEIGHT); + Rescale(width, height, wxIMAGE_QUALITY_HIGH); + + SetOption(wxIMAGE_OPTION_ORIGINAL_WIDTH, widthOrigOption ? widthOrigOption : widthOrig); + SetOption(wxIMAGE_OPTION_ORIGINAL_HEIGHT, heightOrigOption ? heightOrigOption : heightOrig); + } } // Set this after Rescale, which currently does not preserve it @@ -2533,7 +2556,7 @@ bool wxImage::DoSave(wxImageHandler& handler, wxOutputStream& stream) const bool wxImage::SaveFile( wxOutputStream& stream, wxBitmapType type ) const { - wxCHECK_MSG( Ok(), false, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), false, wxT("invalid image") ); wxImageHandler *handler = FindHandler(type); if ( !handler ) @@ -2547,12 +2570,13 @@ bool wxImage::SaveFile( wxOutputStream& stream, wxBitmapType type ) const bool wxImage::SaveFile( wxOutputStream& stream, const wxString& mimetype ) const { - wxCHECK_MSG( Ok(), false, wxT("invalid image") ); + wxCHECK_MSG( IsOk(), false, wxT("invalid image") ); wxImageHandler *handler = FindHandlerMime(mimetype); if ( !handler ) { wxLogWarning( _("No image handler for type %s defined."), mimetype.GetData() ); + return false; } return DoSave(*handler, stream); diff --git a/Externals/wxWidgets3/src/common/imagfill.cpp b/Externals/wxWidgets3/src/common/imagfill.cpp index c105bf2f26..c93229d14f 100644 --- a/Externals/wxWidgets3/src/common/imagfill.cpp +++ b/Externals/wxWidgets3/src/common/imagfill.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagfill.cpp // Purpose: FloodFill for wxImage // Author: Julian Smart -// RCS-ID: $Id: imagfill.cpp 65820 2010-10-15 23:46:46Z VZ $ +// RCS-ID: $Id: imagfill.cpp 70868 2012-03-10 16:58:05Z PC $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -58,8 +58,7 @@ static bool LINKAGEMODE MatchBoundaryPixel(wxImage *img, int x, int y, int w, in static void LINKAGEMODE wxImageFloodFill(wxImage *image, wxCoord x, wxCoord y, const wxBrush & fillBrush, - const wxColour& testColour, int style, - int WXUNUSED(LogicalFunction)) + const wxColour& testColour, int style) { /* A diamond flood-fill using a circular queue system. Each pixel surrounding the current pixel is added to @@ -313,8 +312,7 @@ bool wxDoFloodFill(wxDC *dc, wxCoord x, wxCoord y, memdc.SelectObject(wxNullBitmap); wxImage image = bitmap.ConvertToImage(); - wxImageFloodFill(&image, x_dev, y_dev, dc->GetBrush(), col, style, - dc->GetLogicalFunction()); + wxImageFloodFill(&image, x_dev, y_dev, dc->GetBrush(), col, style); bitmap = wxBitmap(image); memdc.SelectObject(bitmap); dc->Blit(x0_log, y0_log, w_log, h_log, &memdc, 0, 0); diff --git a/Externals/wxWidgets3/src/common/imaggif.cpp b/Externals/wxWidgets3/src/common/imaggif.cpp index d61fb53a5a..536aecf743 100644 --- a/Externals/wxWidgets3/src/common/imaggif.cpp +++ b/Externals/wxWidgets3/src/common/imaggif.cpp @@ -2,7 +2,7 @@ // Name: src/common/imaggif.cpp // Purpose: wxGIFHandler // Author: Vaclav Slavik, Guillermo Rodriguez Garcia, Gershon Elber, Troels K -// RCS-ID: $Id: imaggif.cpp 66803 2011-01-28 08:36:34Z DS $ +// RCS-ID: $Id: imaggif.cpp 67802 2011-05-27 12:25:25Z DS $ // Copyright: (c) 1999-2011 Vaclav Slavik, Guillermo Rodriguez Garcia, Gershon Elber, Troels K // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -643,7 +643,7 @@ bool wxGIFHandler_WriteWord(wxOutputStream *stream, wxUint16 word) buf[0] = word & 0xff; buf[1] = (word >> 8) & 0xff; - return wxGIFHandler_Write(stream, &word, sizeof(word)); + return wxGIFHandler_Write(stream, &buf, sizeof(buf)); } bool wxGIFHandler_WriteHeader(wxOutputStream *stream, int width, int height, diff --git a/Externals/wxWidgets3/src/common/imagiff.cpp b/Externals/wxWidgets3/src/common/imagiff.cpp index f7fe0360f5..2ac1595a93 100644 --- a/Externals/wxWidgets3/src/common/imagiff.cpp +++ b/Externals/wxWidgets3/src/common/imagiff.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagiff.cpp // Purpose: wxImage handler for Amiga IFF images // Author: Steffen Gutmann, Thomas Meyer -// RCS-ID: $Id: imagiff.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: imagiff.cpp 69562 2011-10-27 21:10:38Z VZ $ // Copyright: (c) Steffen Gutmann, 2002 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -81,7 +81,6 @@ private: IFFImage *m_image; // image data wxInputStream *m_f; // input stream unsigned char *databuf; - unsigned char *picptr; unsigned char *decomp_mem; void Destroy(); @@ -140,7 +139,7 @@ bool wxIFFDecoder::ConvertToImage(wxImage *image) const // create the image image->Create(GetWidth(), GetHeight()); - if (!image->Ok()) + if (!image->IsOk()) return false; unsigned char *pal = GetPalette(); @@ -546,7 +545,7 @@ int wxIFFDecoder::ReadIFF() } m_image->p = new byte[bmhd_width * bmhd_height * 3]; - byte *picptr = m_image->p; + byte *picptr = m_image->p; if (!picptr) { Destroy(); return wxIFF_MEMERR; diff --git a/Externals/wxWidgets3/src/common/imagjpeg.cpp b/Externals/wxWidgets3/src/common/imagjpeg.cpp index e048ac59f3..3c52b8e6f7 100644 --- a/Externals/wxWidgets3/src/common/imagjpeg.cpp +++ b/Externals/wxWidgets3/src/common/imagjpeg.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagjpeg.cpp // Purpose: wxImage JPEG handler // Author: Vaclav Slavik -// RCS-ID: $Id: imagjpeg.cpp 66259 2010-11-25 00:53:44Z VZ $ +// RCS-ID: $Id: imagjpeg.cpp 69759 2011-11-14 13:35:48Z VZ $ // Copyright: (c) Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -257,7 +257,7 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos } (cinfo.src->term_source)(&cinfo); jpeg_destroy_decompress(&cinfo); - if (image->Ok()) image->Destroy(); + if (image->IsOk()) image->Destroy(); return false; } @@ -291,7 +291,7 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos jpeg_start_decompress( &cinfo ); image->Create( cinfo.output_width, cinfo.output_height ); - if (!image->Ok()) { + if (!image->IsOk()) { jpeg_finish_decompress( &cinfo ); jpeg_destroy_decompress( &cinfo ); return false; @@ -334,6 +334,13 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos image->SetOption(wxIMAGE_OPTION_RESOLUTIONUNIT, cinfo.density_unit); } + if ( cinfo.image_width != cinfo.output_width || cinfo.image_height != cinfo.output_height ) + { + // save the original image size + image->SetOption(wxIMAGE_OPTION_ORIGINAL_WIDTH, cinfo.image_width); + image->SetOption(wxIMAGE_OPTION_ORIGINAL_HEIGHT, cinfo.image_height); + } + jpeg_finish_decompress( &cinfo ); jpeg_destroy_decompress( &cinfo ); return true; diff --git a/Externals/wxWidgets3/src/common/imagpcx.cpp b/Externals/wxWidgets3/src/common/imagpcx.cpp index d18c1b412a..fcd4a1e6a4 100644 --- a/Externals/wxWidgets3/src/common/imagpcx.cpp +++ b/Externals/wxWidgets3/src/common/imagpcx.cpp @@ -3,7 +3,7 @@ // Purpose: wxImage PCX handler // Author: Guillermo Rodriguez Garcia // Version: 1.1 -// CVS-ID: $Id: imagpcx.cpp 61363 2009-07-09 20:26:34Z VZ $ +// CVS-ID: $Id: imagpcx.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1999 Guillermo Rodriguez Garcia // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -214,7 +214,7 @@ int ReadPCX(wxImage *image, wxInputStream& stream) image->Create(width, height); - if (!image->Ok()) + if (!image->IsOk()) return wxPCX_MEMERR; if ((p = (unsigned char *) malloc(bytesperline * nplanes)) == NULL) @@ -331,7 +331,7 @@ int SavePCX(wxImage *image, wxOutputStream& stream) // according to PCX specs) and allocate space for one complete // scanline. - if (!image->Ok()) + if (!image->IsOk()) return wxPCX_INVFORMAT; width = image->GetWidth(); diff --git a/Externals/wxWidgets3/src/common/imagpng.cpp b/Externals/wxWidgets3/src/common/imagpng.cpp index 6a0c86b224..64bc0aa402 100644 --- a/Externals/wxWidgets3/src/common/imagpng.cpp +++ b/Externals/wxWidgets3/src/common/imagpng.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagpng.cpp // Purpose: wxImage PNG handler // Author: Robert Roebling -// RCS-ID: $Id: imagpng.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: imagpng.cpp 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -116,11 +116,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxPNGHandler,wxImageHandler) // First, let me describe what's the problem: libpng uses jmp_buf in // its png_struct structure. Unfortunately, this structure is // compiler-specific and may vary in size, so if you use libpng compiled -// as DLL with another compiler than the main executable, it may not work -// (this is for example the case with wxMGL port and SciTech MGL library -// that provides custom runtime-loadable libpng implementation with jmpbuf -// disabled altogether). Luckily, it is still possible to use setjmp() & -// longjmp() as long as the structure is not part of png_struct. +// as DLL with another compiler than the main executable, it may not work. +// Luckily, it is still possible to use setjmp() & longjmp() as long as the +// structure is not part of png_struct. // // Sadly, there's no clean way to attach user-defined data to png_struct. // There is only one customizable place, png_struct.io_ptr, which is meant @@ -558,7 +556,7 @@ wxPNGHandler::LoadFile(wxImage *image, image->Create((int)width, (int)height, (bool) false /* no need to init pixels */); - if (!image->Ok()) + if (!image->IsOk()) goto error; // initialize all line pointers to NULL to ensure that they can be safely @@ -660,7 +658,7 @@ error: wxLogError(_("Couldn't load a PNG image - file is corrupted or not enough memory.")); } - if ( image->Ok() ) + if ( image->IsOk() ) { image->Destroy(); } @@ -795,15 +793,13 @@ bool wxPNGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbos #endif ; - png_color_8 mask; + png_color_8 mask = { 0, 0, 0, 0, 0 }; if (bHasMask) { mask.red = image->GetMaskRed(); mask.green = image->GetMaskGreen(); mask.blue = image->GetMaskBlue(); - mask.alpha = 0; - mask.gray = 0; } PaletteMap palette; diff --git a/Externals/wxWidgets3/src/common/imagtga.cpp b/Externals/wxWidgets3/src/common/imagtga.cpp index 909eb5a4c8..2b0f27a2cd 100644 --- a/Externals/wxWidgets3/src/common/imagtga.cpp +++ b/Externals/wxWidgets3/src/common/imagtga.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagtga.cpp // Purpose: wxImage TGA handler // Author: Seth Jackson -// CVS-ID: $Id: imagtga.cpp 67254 2011-03-20 00:14:35Z DS $ +// CVS-ID: $Id: imagtga.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2005 Seth Jackson // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -227,7 +227,7 @@ int ReadTGA(wxImage* image, wxInputStream& stream) image->Create(width, height); - if (!image->Ok()) + if (!image->IsOk()) { return wxTGA_MEMERR; } @@ -846,7 +846,7 @@ bool wxTGAHandler::DoCanRead(wxInputStream& stream) unsigned char hdr[HDR_SIZE]; stream.Read(hdr, HDR_SIZE); // it's ok to modify the stream position here - // Check wether we can read the file or not. + // Check whether we can read the file or not. short colorType = hdr[HDR_COLORTYPE]; if ( colorType != wxTGA_UNMAPPED && colorType != wxTGA_MAPPED ) diff --git a/Externals/wxWidgets3/src/common/imagtiff.cpp b/Externals/wxWidgets3/src/common/imagtiff.cpp index 3f62a07948..bae7261404 100644 --- a/Externals/wxWidgets3/src/common/imagtiff.cpp +++ b/Externals/wxWidgets3/src/common/imagtiff.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagtiff.cpp // Purpose: wxImage TIFF handler // Author: Robert Roebling -// RCS-ID: $Id: imagtiff.cpp 67264 2011-03-20 19:48:03Z DS $ +// RCS-ID: $Id: imagtiff.cpp 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -48,11 +48,7 @@ extern "C" #include "wx/wfstream.h" #ifndef TIFFLINKAGEMODE - #if defined(__WATCOMC__) && defined(__WXMGL__) - #define TIFFLINKAGEMODE cdecl - #else - #define TIFFLINKAGEMODE LINKAGEMODE - #endif + #define TIFFLINKAGEMODE LINKAGEMODE #endif // ============================================================================ @@ -110,7 +106,7 @@ wxTIFFHandler::wxTIFFHandler() m_name = wxT("TIFF file"); m_extension = wxT("tif"); m_altExtensions.Add(wxT("tiff")); - m_type = wxBITMAP_TYPE_TIF; + m_type = wxBITMAP_TYPE_TIFF; m_mime = wxT("image/tiff"); TIFFSetWarningHandler((TIFFErrorHandler) TIFFwxWarningHandler); TIFFSetErrorHandler((TIFFErrorHandler) TIFFwxErrorHandler); @@ -192,8 +188,42 @@ wxTIFFSeekOProc(thandle_t handle, toff_t off, int whence) { wxOutputStream *stream = (wxOutputStream*) handle; - return wxFileOffsetToTIFF(stream->SeekO((wxFileOffset)off, - wxSeekModeFromTIFF(whence))); + toff_t offset = wxFileOffsetToTIFF( + stream->SeekO((wxFileOffset)off, wxSeekModeFromTIFF(whence)) ); + + if (offset != (toff_t) -1 || whence != SEEK_SET) + { + return offset; + } + + + /* + Try to workaround problems with libtiff seeking past the end of streams. + + This occurs when libtiff is writing tag entries past the end of a + stream but hasn't written the directory yet (which will be placed + before the tags and contain offsets to the just written tags). + The behaviour for seeking past the end of a stream is not consistent + and doesn't work with for example wxMemoryOutputStream. When this type + of seeking fails (with SEEK_SET), fill in the gap with zeroes and try + again. + */ + + wxFileOffset streamLength = stream->GetLength(); + if (streamLength != wxInvalidOffset && (wxFileOffset) off > streamLength) + { + if (stream->SeekO(streamLength, wxFromStart) == wxInvalidOffset) + { + return (toff_t) -1; + } + + for (wxFileOffset i = 0; i < (wxFileOffset) off - streamLength; ++i) + { + stream->PutC(0); + } + } + + return wxFileOffsetToTIFF( stream->TellO() ); } int TIFFLINKAGEMODE @@ -296,19 +326,24 @@ bool wxTIFFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &w ); TIFFGetField( tif, TIFFTAG_IMAGELENGTH, &h ); - uint16 photometric; - uint16 samplesPerPixel; + uint16 samplesPerPixel = 0; + (void) TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel); + + uint16 bitsPerSample = 0; + (void) TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bitsPerSample); + uint16 extraSamples; uint16* samplesInfo; - TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel); TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES, &extraSamples, &samplesInfo); + + uint16 photometric; if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric)) { photometric = PHOTOMETRIC_MINISWHITE; } const bool hasAlpha = (extraSamples >= 1 - && ((samplesInfo[0] == EXTRASAMPLE_UNSPECIFIED && samplesPerPixel > 3) + && ((samplesInfo[0] == EXTRASAMPLE_UNSPECIFIED) || samplesInfo[0] == EXTRASAMPLE_ASSOCALPHA || samplesInfo[0] == EXTRASAMPLE_UNASSALPHA)) || (extraSamples == 0 && samplesPerPixel == 4 @@ -344,7 +379,7 @@ bool wxTIFFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos } image->Create( (int)w, (int)h ); - if (!image->Ok()) + if (!image->IsOk()) { if (verbose) { @@ -360,7 +395,77 @@ bool wxTIFFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos if ( hasAlpha ) image->SetAlpha(); - if (!TIFFReadRGBAImage( tif, w, h, raster, 0 )) + uint16 planarConfig = PLANARCONFIG_CONTIG; + (void) TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &planarConfig); + + bool ok = true; + char msg[1024] = ""; + if + ( + (planarConfig == PLANARCONFIG_CONTIG && samplesPerPixel == 2 + && extraSamples == 1) + && + ( + ( !TIFFRGBAImageOK(tif, msg) ) + || (bitsPerSample == 8) + ) + ) + { + const bool isGreyScale = (bitsPerSample == 8); + unsigned char *buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(tif)); + uint32 pos = 0; + const bool minIsWhite = (photometric == PHOTOMETRIC_MINISWHITE); + const int minValue = minIsWhite ? 255 : 0; + const int maxValue = 255 - minValue; + + /* + Decode to ABGR format as that is what the code, that converts to + wxImage, later on expects (normally TIFFReadRGBAImageOriented is + used to decode which uses an ABGR layout). + */ + for (uint32 y = 0; y < h; ++y) + { + if (TIFFReadScanline(tif, buf, y, 0) != 1) + { + ok = false; + break; + } + + if (isGreyScale) + { + for (uint32 x = 0; x < w; ++x) + { + uint8 val = minIsWhite ? 255 - buf[x*2] : buf[x*2]; + uint8 alpha = minIsWhite ? 255 - buf[x*2+1] : buf[x*2+1]; + raster[pos] = val + (val << 8) + (val << 16) + + (alpha << 24); + pos++; + } + } + else + { + for (uint32 x = 0; x < w; ++x) + { + int mask = buf[x*2/8] << ((x*2)%8); + + uint8 val = mask & 128 ? maxValue : minValue; + raster[pos] = val + (val << 8) + (val << 16) + + ((mask & 64 ? maxValue : minValue) << 24); + pos++; + } + } + } + + _TIFFfree(buf); + } + else + { + ok = TIFFReadRGBAImageOriented( tif, w, h, raster, + ORIENTATION_TOPLEFT, 0 ) != 0; + } + + + if (!ok) { if (verbose) { @@ -375,11 +480,8 @@ bool wxTIFFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos } unsigned char *ptr = image->GetData(); - ptr += w*3*(h-1); - unsigned char *alpha = hasAlpha ? image->GetAlpha() : NULL; - if ( hasAlpha ) - alpha += w*(h-1); + unsigned char *alpha = image->GetAlpha(); uint32 pos = 0; @@ -395,32 +497,29 @@ bool wxTIFFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos pos++; } - - // subtract line we just added plus one line: - ptr -= 2*w*3; - if ( hasAlpha ) - alpha -= 2*w; } - uint16 spp, bpp, compression; + image->SetOption(wxIMAGE_OPTION_TIFF_PHOTOMETRIC, photometric); + + uint16 compression; /* - Read some baseline TIFF tags which helps when re-saving a TIFF + Copy some baseline TIFF tags which helps when re-saving a TIFF to be similar to the original image. */ - if ( TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp) ) + if (samplesPerPixel) { - image->SetOption(wxIMAGE_OPTION_SAMPLESPERPIXEL, spp); + image->SetOption(wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL, samplesPerPixel); } - if ( TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bpp) ) + if (bitsPerSample) { - image->SetOption(wxIMAGE_OPTION_BITSPERSAMPLE, bpp); + image->SetOption(wxIMAGE_OPTION_TIFF_BITSPERSAMPLE, bitsPerSample); } if ( TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &compression) ) { - image->SetOption(wxIMAGE_OPTION_COMPRESSION, compression); + image->SetOption(wxIMAGE_OPTION_TIFF_COMPRESSION, compression); } // Set the resolution unit. @@ -516,8 +615,8 @@ bool wxTIFFHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo return false; } - TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); - TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (uint32)image->GetWidth()); + const int imageWidth = image->GetWidth(); + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (uint32) imageWidth); TIFFSetField(tif, TIFFTAG_IMAGELENGTH, (uint32)image->GetHeight()); TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); @@ -553,39 +652,90 @@ bool wxTIFFHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo } - int spp = image->GetOptionInt(wxIMAGE_OPTION_SAMPLESPERPIXEL); + int spp = image->GetOptionInt(wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL); if ( !spp ) spp = 3; - int bpp = image->GetOptionInt(wxIMAGE_OPTION_BITSPERSAMPLE); - if ( !bpp ) - bpp = 8; - - int compression = image->GetOptionInt(wxIMAGE_OPTION_COMPRESSION); - if ( !compression ) + int bps = image->GetOptionInt(wxIMAGE_OPTION_TIFF_BITSPERSAMPLE); + if ( !bps ) { - // we can't use COMPRESSION_LZW because current version of libtiff + bps = 8; + } + else if (bps == 1) + { + // One bit per sample combined with 3 samples per pixel is + // not allowed and crashes libtiff. + spp = 1; + } + + int photometric = PHOTOMETRIC_RGB; + + if ( image->HasOption(wxIMAGE_OPTION_TIFF_PHOTOMETRIC) ) + { + photometric = image->GetOptionInt(wxIMAGE_OPTION_TIFF_PHOTOMETRIC); + if (photometric == PHOTOMETRIC_MINISWHITE + || photometric == PHOTOMETRIC_MINISBLACK) + { + // either b/w or greyscale + spp = 1; + } + } + else if (spp <= 2) + { + photometric = PHOTOMETRIC_MINISWHITE; + } + + const bool hasAlpha = image->HasAlpha(); + + int compression = image->GetOptionInt(wxIMAGE_OPTION_TIFF_COMPRESSION); + if ( !compression || (compression == COMPRESSION_JPEG && hasAlpha) ) + { + // We can't use COMPRESSION_LZW because current version of libtiff // doesn't implement it ("no longer implemented due to Unisys patent // enforcement") and other compression methods are lossy so we - // shouldn't use them by default -- and the only remaining one is none + // shouldn't use them by default -- and the only remaining one is none. + // Also JPEG compression for alpha images is not a good idea (viewers + // not opening the image properly). compression = COMPRESSION_NONE; } - TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, spp); - TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bpp); - TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, spp*bpp == 1 ? PHOTOMETRIC_MINISBLACK - : PHOTOMETRIC_RGB); + if + ( + (photometric == PHOTOMETRIC_RGB && spp == 4) + || (photometric <= PHOTOMETRIC_MINISBLACK && spp == 2) + ) + { + // Compensate for user passing a SamplesPerPixel that includes + // the alpha channel. + spp--; + } + + + int extraSamples = hasAlpha ? 1 : 0; + + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, spp + extraSamples); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric); TIFFSetField(tif, TIFFTAG_COMPRESSION, compression); - // scanlinesize if determined by spp and bpp - tsize_t linebytes = (tsize_t)image->GetWidth() * spp * bpp / 8; + if (extraSamples) + { + uint16 extra[] = { EXTRASAMPLE_UNSPECIFIED }; + TIFFSetField(tif, TIFFTAG_EXTRASAMPLES, (long) 1, &extra); + } - if ( (image->GetWidth() % 8 > 0) && (spp * bpp < 8) ) - linebytes+=1; + // scanlinesize is determined by spp+extraSamples and bps + const tsize_t linebytes = + (tsize_t)((imageWidth * (spp + extraSamples) * bps + 7) / 8); unsigned char *buf; - if (TIFFScanlineSize(tif) > linebytes || (spp * bpp < 24)) + const bool isColouredImage = (spp > 1) + && (photometric != PHOTOMETRIC_MINISWHITE) + && (photometric != PHOTOMETRIC_MINISBLACK); + + + if (TIFFScanlineSize(tif) > linebytes || !isColouredImage || hasAlpha) { buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(tif)); if (!buf) @@ -607,27 +757,84 @@ bool wxTIFFHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP,TIFFDefaultStripSize(tif, (uint32) -1)); + const int bitsPerPixel = (spp + extraSamples) * bps; + const int bytesPerPixel = (bitsPerPixel + 7) / 8; + const int pixelsPerByte = 8 / bitsPerPixel; + int remainingPixelCount = 0; + + if (pixelsPerByte) + { + // How many pixels to write in the last byte column? + remainingPixelCount = imageWidth % pixelsPerByte; + if (!remainingPixelCount) remainingPixelCount = pixelsPerByte; + } + + const bool minIsWhite = (photometric == PHOTOMETRIC_MINISWHITE); unsigned char *ptr = image->GetData(); for ( int row = 0; row < image->GetHeight(); row++ ) { if ( buf ) { - if ( spp * bpp > 1 ) + if (isColouredImage) { - // color image - memcpy(buf, ptr, image->GetWidth()); + // colour image + if (hasAlpha) + { + for ( int column = 0; column < imageWidth; column++ ) + { + buf[column*4 ] = ptr[column*3 ]; + buf[column*4 + 1] = ptr[column*3 + 1]; + buf[column*4 + 2] = ptr[column*3 + 2]; + buf[column*4 + 3] = image->GetAlpha(column, row); + } + } + else + { + memcpy(buf, ptr, imageWidth * 3); + } + } + else if (spp * bps == 8) // greyscale image + { + for ( int column = 0; column < imageWidth; column++ ) + { + uint8 value = ptr[column*3 + 1]; + if (minIsWhite) + { + value = 255 - value; + } + + buf[column * bytesPerPixel] = value; + + if (hasAlpha) + { + value = image->GetAlpha(column, row); + buf[column*bytesPerPixel+1] + = minIsWhite ? 255 - value : value; + } + } } else // black and white image { for ( int column = 0; column < linebytes; column++ ) { uint8 reverse = 0; - for ( int bp = 0; bp < 8; bp++ ) + int pixelsPerByteCount = (column + 1 != linebytes) + ? pixelsPerByte + : remainingPixelCount; + for ( int bp = 0; bp < pixelsPerByteCount; bp++ ) { - if ( ptr[column*24 + bp*3] > 0 ) + if ( (ptr[column * 3 * pixelsPerByte + bp*3 + 1] <=127) + == minIsWhite ) { - // check only red as this is sufficient - reverse = (uint8)(reverse | 128 >> bp); + // check only green as this is sufficient + reverse |= (uint8) (128 >> (bp * bitsPerPixel)); + } + + if (hasAlpha + && (image->GetAlpha(column * pixelsPerByte + bp, + row) <= 127) == minIsWhite) + { + reverse |= (uint8) (64 >> (bp * bitsPerPixel)); } } @@ -650,7 +857,7 @@ bool wxTIFFHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo return false; } - ptr += image->GetWidth()*3; + ptr += imageWidth * 3; } (void) TIFFClose(tif); diff --git a/Externals/wxWidgets3/src/common/imagxpm.cpp b/Externals/wxWidgets3/src/common/imagxpm.cpp index 1b1fea5924..917b0aa157 100644 --- a/Externals/wxWidgets3/src/common/imagxpm.cpp +++ b/Externals/wxWidgets3/src/common/imagxpm.cpp @@ -2,7 +2,7 @@ // Name: src/common/imagxpm.cpp // Purpose: wxXPMHandler // Author: Vaclav Slavik, Robert Roebling -// RCS-ID: $Id: imagxpm.cpp 60852 2009-06-01 11:43:36Z FM $ +// RCS-ID: $Id: imagxpm.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2001 Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -97,7 +97,7 @@ bool wxXPMHandler::LoadFile(wxImage *image, wxXPMDecoder decoder; wxImage img = decoder.ReadFile(stream); - if ( !img.Ok() ) + if ( !img.IsOk() ) return false; *image = img; return true; diff --git a/Externals/wxWidgets3/src/common/init.cpp b/Externals/wxWidgets3/src/common/init.cpp index 654cb99976..fa8e2bef32 100644 --- a/Externals/wxWidgets3/src/common/init.cpp +++ b/Externals/wxWidgets3/src/common/init.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 04.10.99 -// RCS-ID: $Id: init.cpp 64656 2010-06-20 18:18:23Z VZ $ +// RCS-ID: $Id: init.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -37,7 +37,7 @@ #include "wx/scopedptr.h" #include "wx/except.h" -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/private.h" #include "wx/msw/msvcrt.h" @@ -53,7 +53,7 @@ } } gs_enableLeakChecks; #endif // wxCrtSetDbgFlag -#endif // __WXMSW__ +#endif // __WINDOWS__ // ---------------------------------------------------------------------------- // private classes @@ -238,7 +238,7 @@ static bool DoCommonPreInit() wxLog::GetActiveTarget(); #endif // wxUSE_LOG -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // GUI applications obtain HINSTANCE in their WinMain() but we also need to // initialize the global wxhInstance variable for the console programs as // they may need it too, so set it here if it wasn't done yet @@ -246,7 +246,7 @@ static bool DoCommonPreInit() { wxSetInstance(::GetModuleHandle(NULL)); } -#endif // __WXMSW__ +#endif // __WINDOWS__ return true; } @@ -432,9 +432,9 @@ void wxEntryCleanup() // ---------------------------------------------------------------------------- // for MSW the real wxEntry is defined in msw/main.cpp -#ifndef __WXMSW__ +#ifndef __WINDOWS__ #define wxEntryReal wxEntry -#endif // !__WXMSW__ +#endif // !__WINDOWS__ int wxEntryReal(int& argc, wxChar **argv) { diff --git a/Externals/wxWidgets3/src/common/intl.cpp b/Externals/wxWidgets3/src/common/intl.cpp index dc3d1ca154..2f1874f363 100644 --- a/Externals/wxWidgets3/src/common/intl.cpp +++ b/Externals/wxWidgets3/src/common/intl.cpp @@ -5,7 +5,7 @@ // Modified by: Michael N. Filippov // (2003/09/30 - PluralForms support) // Created: 29/01/98 -// RCS-ID: $Id: intl.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: intl.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -121,7 +121,7 @@ inline wxString ExtractNotLang(const wxString& langFull) // wxLanguageInfo // ---------------------------------------------------------------------------- -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // helper used by wxLanguageInfo::GetLocaleName() and elsewhere to determine // whether the locale is Unicode-only (it is if this function returns empty @@ -177,7 +177,7 @@ wxString wxLanguageInfo::GetLocaleName() const return locale; } -#endif // __WXMSW__ +#endif // __WINDOWS__ // ---------------------------------------------------------------------------- // wxLocale @@ -1033,7 +1033,14 @@ wxLocale::~wxLocale() bool wxLocale::IsAvailable(int lang) { const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang); - wxCHECK_MSG( info, false, wxS("invalid language") ); + if ( !info ) + { + // The language is unknown (this normally only happens when we're + // passed wxLANGUAGE_DEFAULT), so we can't support it. + wxASSERT_MSG( lang == wxLANGUAGE_DEFAULT, + wxS("No info for a valid language?") ); + return false; + } #if defined(__WIN32__) if ( !info->WinLang ) @@ -1045,16 +1052,21 @@ bool wxLocale::IsAvailable(int lang) #elif defined(__UNIX__) // Test if setting the locale works, then set it back. - const char *oldLocale = wxSetlocaleTryUTF8(LC_ALL, info->CanonicalName); - if ( !oldLocale ) - { - // Some C libraries don't like xx_YY form and require xx only - oldLocale = wxSetlocaleTryUTF8(LC_ALL, ExtractLang(info->CanonicalName)); - if ( !oldLocale ) - return false; - } + char * const oldLocale = wxStrdupA(setlocale(LC_ALL, NULL)); + + // Some platforms don't like xx_YY form and require xx only so test for + // it too. + const bool + available = wxSetlocaleTryUTF8(LC_ALL, info->CanonicalName) || + wxSetlocaleTryUTF8(LC_ALL, ExtractLang(info->CanonicalName)); + // restore the original locale wxSetlocale(LC_ALL, oldLocale); + + free(oldLocale); + + if ( !available ) + return false; #endif return true; @@ -1114,7 +1126,7 @@ wxString wxLocale::GetHeaderValue(const wxString& header, // accessors for locale-dependent data // ---------------------------------------------------------------------------- -#if defined(__WXMSW__) || defined(__WXOSX__) +#if defined(__WINDOWS__) || defined(__WXOSX__) namespace { @@ -1136,7 +1148,7 @@ static wxString TranslateFromUnicodeFormat(const wxString& fmt) const char* formatchars = "dghHmMsSy" -#ifdef __WXMSW__ +#ifdef __WINDOWS__ "t" #else "EawD" @@ -1176,7 +1188,7 @@ static wxString TranslateFromUnicodeFormat(const wxString& fmt) // between 1 and 2 digits for days fmtWX += "%d"; break; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ case 3: // ddd fmtWX += "%a"; break; @@ -1189,7 +1201,7 @@ static wxString TranslateFromUnicodeFormat(const wxString& fmt) wxFAIL_MSG( "too many 'd's" ); } break; -#ifndef __WXMSW__ +#ifndef __WINDOWS__ case 'D': switch ( lastCount ) { @@ -1332,12 +1344,12 @@ static wxString TranslateFromUnicodeFormat(const wxString& fmt) wxASSERT_MSG( lastCount <= 2, "too many 'g's" ); break; -#ifndef __WXMSW__ +#ifndef __WINDOWS__ case 'a': fmtWX += "%p"; break; #endif -#ifdef __WXMSW__ +#ifdef __WINDOWS__ case 't': switch ( lastCount ) { @@ -1377,9 +1389,9 @@ static wxString TranslateFromUnicodeFormat(const wxString& fmt) } // anonymous namespace -#endif // __WXMSW__ || __WXOSX__ +#endif // __WINDOWS__ || __WXOSX__ -#if defined(__WXMSW__) +#if defined(__WINDOWS__) namespace { @@ -1437,7 +1449,23 @@ wxString wxLocale::GetInfo(wxLocaleInfo index, wxLocaleCategory cat) : LOCALE_SDECIMAL, buf, WXSIZEOF(buf)) ) + { str = buf; + + // As we get our decimal point separator from Win32 and not the + // CRT there is a possibility of mismatch between them and this + // can easily happen if the user code called setlocale() + // instead of using wxLocale to change the locale. And this can + // result in very strange bugs elsewhere in the code as the + // assumptions that formatted strings do use the decimal + // separator actually fail, so check for it here. + wxASSERT_MSG + ( + wxString::Format("%.3f", 1.23).find(str) != wxString::npos, + "Decimal separator mismatch -- did you use setlocale()?" + "If so, use wxLocale to change the locale instead." + ); + } break; case wxLOCALE_SHORT_DATE_FMT: @@ -1554,7 +1582,7 @@ wxString wxLocale::GetInfo(wxLocaleInfo index, wxLocaleCategory WXUNUSED(cat)) return str.AsString(); } -#else // !__WXMSW__ && !__WXOSX__, assume generic POSIX +#else // !__WINDOWS__ && !__WXOSX__, assume generic POSIX namespace { diff --git a/Externals/wxWidgets3/src/common/languageinfo.cpp b/Externals/wxWidgets3/src/common/languageinfo.cpp index c476d3147e..a04c16e078 100644 --- a/Externals/wxWidgets3/src/common/languageinfo.cpp +++ b/Externals/wxWidgets3/src/common/languageinfo.cpp @@ -3,7 +3,7 @@ // Purpose: wxLocale::InitLanguagesDB() // Author: Vadim Zeitlin, Vaclav Slavik // Created: 2010-04-23 -// RCS-ID: $Id: languageinfo.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: languageinfo.cpp 67426 2011-04-10 15:35:56Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -663,7 +663,7 @@ void wxLocale::InitLanguagesDB() LNG(wxLANGUAGE_ITALIAN, "it_IT", LANG_ITALIAN , SUBLANG_ITALIAN , wxLayout_LeftToRight, "Italian") LNG(wxLANGUAGE_ITALIAN_SWISS, "it_CH", LANG_ITALIAN , SUBLANG_ITALIAN_SWISS , wxLayout_LeftToRight, "Italian (Swiss)") LNG(wxLANGUAGE_JAPANESE, "ja_JP", LANG_JAPANESE , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Japanese") - LNG(wxLANGUAGE_JAVANESE, "jw" , 0 , 0 , wxLayout_LeftToRight, "Javanese") + LNG(wxLANGUAGE_JAVANESE, "jv" , 0 , 0 , wxLayout_LeftToRight, "Javanese") LNG(wxLANGUAGE_KANNADA, "kn" , LANG_KANNADA , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Kannada") LNG(wxLANGUAGE_KASHMIRI, "ks" , LANG_KASHMIRI , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Kashmiri") LNG(wxLANGUAGE_KASHMIRI_INDIA, "ks_IN", LANG_KASHMIRI , SUBLANG_KASHMIRI_INDIA , wxLayout_LeftToRight, "Kashmiri (India)") diff --git a/Externals/wxWidgets3/src/common/list.cpp b/Externals/wxWidgets3/src/common/list.cpp index 4a397d04a6..6ad2926ac9 100644 --- a/Externals/wxWidgets3/src/common/list.cpp +++ b/Externals/wxWidgets3/src/common/list.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: VZ at 16/11/98: WX_DECLARE_LIST() and typesafe lists added // Created: 04/01/98 -// RCS-ID: $Id: list.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: list.cpp 67769 2011-05-20 14:29:07Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence //////////////////////////////////////////////////////////////////////////////// @@ -33,7 +33,7 @@ #include "wx/crt.h" #endif -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS // ============================================================================= // implementation @@ -171,22 +171,18 @@ void wxListBase::DoCopy(const wxListBase& list) { case wxKEY_INTEGER: { - long key; for ( wxNodeBase *node = list.GetFirst(); node; node = node->GetNext() ) { - key = node->GetKeyInteger(); - Append(key, node->GetData()); + Append(node->GetKeyInteger(), node->GetData()); } break; } case wxKEY_STRING: { - const wxChar *key; for ( wxNodeBase *node = list.GetFirst(); node; node = node->GetNext() ) { - key = node->GetKeyString(); - Append(key, node->GetData()); + Append(node->GetKeyString(), node->GetData()); } break; } @@ -756,16 +752,16 @@ wxNode *wxStringList::Prepend(const wxChar *s) #endif // wxLIST_COMPATIBILITY -#else // wxUSE_STL = 1 +#else // wxUSE_STD_CONTAINERS = 1 #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxObjectList) -// with wxUSE_STL wxStringList contains wxString objects, not pointers +// with wxUSE_STD_CONTAINERS wxStringList contains wxString objects, not pointers void _WX_LIST_HELPER_wxStringListBase::DeleteFunction( wxString WXUNUSED(X) ) { } wxStringListBase::BaseListType wxStringListBase::EmptyList; -#endif // !wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS diff --git a/Externals/wxWidgets3/src/common/listctrlcmn.cpp b/Externals/wxWidgets3/src/common/listctrlcmn.cpp index 220eaa3f0e..dd7fc610b0 100644 --- a/Externals/wxWidgets3/src/common/listctrlcmn.cpp +++ b/Externals/wxWidgets3/src/common/listctrlcmn.cpp @@ -3,7 +3,7 @@ // Purpose: Common defines for wxListCtrl and wxListCtrl-based classes. // Author: Kevin Ollivier // Created: 09/15/06 -// RCS-ID: $Id: listctrlcmn.cpp 66555 2011-01-04 08:31:53Z SC $ +// RCS-ID: $Id: listctrlcmn.cpp 70284 2012-01-07 15:09:51Z VZ $ // Copyright: (c) Kevin Ollivier // Licence: wxWindows licence //////////////////////////////////////////////////////////////////////////////// @@ -27,6 +27,10 @@ #include "wx/listctrl.h" +#ifndef WX_PRECOMP + #include "wx/dcclient.h" +#endif + const char wxListCtrlNameStr[] = "listCtrl"; // ListCtrl events @@ -128,4 +132,83 @@ IMPLEMENT_DYNAMIC_CLASS(wxListView, wxListCtrl) IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxNotifyEvent) +// ---------------------------------------------------------------------------- +// wxListCtrlBase implementation +// ---------------------------------------------------------------------------- + +long +wxListCtrlBase::AppendColumn(const wxString& heading, + int format, + int width) +{ + return InsertColumn(GetColumnCount(), heading, format, width); +} + +long +wxListCtrlBase::InsertColumn(long col, + const wxString& heading, + int format, + int width) +{ + wxListItem item; + item.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_FORMAT; + item.m_text = heading; + if ( width >= 0 + || width == wxLIST_AUTOSIZE + || width == wxLIST_AUTOSIZE_USEHEADER ) + { + item.m_mask |= wxLIST_MASK_WIDTH; + item.m_width = width; + } + item.m_format = format; + + return InsertColumn(col, item); +} + +long wxListCtrlBase::InsertColumn(long col, const wxListItem& info) +{ + long rc = DoInsertColumn(col, info); + if ( rc != -1 ) + { + // As our best size calculation depends on the column headers, + // invalidate the previously cached best size when a column is added. + InvalidateBestSize(); + } + + return rc; +} + +wxSize wxListCtrlBase::DoGetBestClientSize() const +{ + // There is no obvious way to determine the best size in icon and list + // modes so just don't do it for now. + if ( !InReportView() ) + return wxControl::DoGetBestClientSize(); + + // In report mode, we use only the column headers, not items, to determine + // the best width. The reason for this is that it's easier (we can't just + // iterate over all items, especially not in a virtual control, so we'd + // have to do something relatively complicated such as checking the size of + // some items in the beginning and the end only) and also because the + // columns are usually static while the list contents is dynamic so it + // usually doesn't make much sense to adjust the control size to it anyhow. + // And finally, scrollbars can always be used with the items while the + // headers are just truncated if there is not enough place for them. + const int columns = GetColumnCount(); + if ( HasFlag(wxLC_NO_HEADER) || !columns ) + return wxControl::DoGetBestClientSize(); + + wxClientDC dc(const_cast(this)); + + // Total width of all headers determines the best control width. + int totalWidth = 0; + for ( int col = 0; col < columns; col++ ) + { + totalWidth += GetColumnWidth(col); + } + + // Use some arbitrary height, there is no good way to determine it. + return wxSize(totalWidth, 10*dc.GetCharHeight()); +} + #endif // wxUSE_LISTCTRL diff --git a/Externals/wxWidgets3/src/common/log.cpp b/Externals/wxWidgets3/src/common/log.cpp index 0a3ae3d03a..33a86d1763 100644 --- a/Externals/wxWidgets3/src/common/log.cpp +++ b/Externals/wxWidgets3/src/common/log.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: log.cpp 67268 2011-03-21 10:59:59Z VZ $ +// RCS-ID: $Id: log.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -53,13 +53,11 @@ #include -#ifndef __WXPALMOS5__ #ifndef __WXWINCE__ #include #else #include "wx/msw/wince/time.h" #endif -#endif /* ! __WXPALMOS5__ */ #if defined(__WINDOWS__) #include "wx/msw/private.h" // includes windows.h @@ -204,6 +202,62 @@ void wxSafeShowMessage(const wxString& title, const wxString& text) #endif } +// ---------------------------------------------------------------------------- +// wxLogFormatter class implementation +// ---------------------------------------------------------------------------- + +wxString +wxLogFormatter::Format(wxLogLevel level, + const wxString& msg, + const wxLogRecordInfo& info) const +{ + wxString prefix; + + // don't time stamp debug messages under MSW as debug viewers usually + // already have an option to do it +#ifdef __WINDOWS__ + if ( level != wxLOG_Debug && level != wxLOG_Trace ) +#endif // __WINDOWS__ + prefix = FormatTime(info.timestamp); + + switch ( level ) + { + case wxLOG_Error: + prefix += _("Error: "); + break; + + case wxLOG_Warning: + prefix += _("Warning: "); + break; + + // don't prepend "debug/trace" prefix under MSW as it goes to the debug + // window anyhow and so can't be confused with something else +#ifndef __WINDOWS__ + case wxLOG_Debug: + // this prefix (as well as the one below) is intentionally not + // translated as nobody translates debug messages anyhow + prefix += "Debug: "; + break; + + case wxLOG_Trace: + prefix += "Trace: "; + break; +#endif // !__WINDOWS__ + } + + return prefix + msg; +} + +wxString +wxLogFormatter::FormatTime(time_t t) const +{ + wxString str; + wxLog::TimeStamp(&str, t); + + return str; +} + + // ---------------------------------------------------------------------------- // wxLog class implementation // ---------------------------------------------------------------------------- @@ -216,12 +270,24 @@ unsigned wxLog::LogLastRepeatIfNeeded() { wxString msg; #if wxUSE_INTL - msg.Printf(wxPLURAL("The previous message repeated once.", - "The previous message repeated %lu times.", - gs_prevLog.numRepeated), - gs_prevLog.numRepeated); + if ( gs_prevLog.numRepeated == 1 ) + { + // We use a separate message for this case as "repeated 1 time" + // looks somewhat strange. + msg = _("The previous message repeated once."); + } + else + { + // Notice that we still use wxPLURAL() to ensure that multiple + // numbers of times are correctly formatted, even though we never + // actually use the singular string. + msg.Printf(wxPLURAL("The previous message repeated %lu time.", + "The previous message repeated %lu times.", + gs_prevLog.numRepeated), + gs_prevLog.numRepeated); + } #else - msg.Printf(wxS("The previous message was repeated %lu times."), + msg.Printf(wxS("The previous message was repeated %lu time(s)."), gs_prevLog.numRepeated); #endif gs_prevLog.numRepeated = 0; @@ -240,11 +306,22 @@ wxLog::~wxLog() { wxMessageOutputDebug().Printf ( - wxS("Last repeated message (\"%s\", %lu times) wasn't output"), +#if wxUSE_INTL + wxPLURAL + ( + "Last repeated message (\"%s\", %lu time) wasn't output", + "Last repeated message (\"%s\", %lu times) wasn't output", + gs_prevLog.numRepeated + ), +#else + wxS("Last repeated message (\"%s\", %lu time(s)) wasn't output"), +#endif gs_prevLog.msg, gs_prevLog.numRepeated ); } + + delete m_formatter; } // ---------------------------------------------------------------------------- @@ -276,11 +353,7 @@ wxLog::OnLog(wxLogLevel level, { wxSafeShowMessage(wxS("Fatal Error"), msg); -#ifdef __WXWINCE__ - ExitThread(3); -#else - abort(); -#endif + wxAbort(); } wxLog *logger; @@ -383,47 +456,8 @@ void wxLog::DoLogRecord(wxLogLevel level, wxUnusedVar(info); #endif // WXWIN_COMPATIBILITY_2_8/!WXWIN_COMPATIBILITY_2_8 - - // TODO: it would be better to extract message formatting in a separate - // wxLogFormatter class but for now we hard code formatting here - - wxString prefix; - - // don't time stamp debug messages under MSW as debug viewers usually - // already have an option to do it -#ifdef __WXMSW__ - if ( level != wxLOG_Debug && level != wxLOG_Trace ) -#endif // __WXMSW__ - TimeStamp(&prefix); - - // TODO: use the other wxLogRecordInfo fields - - switch ( level ) - { - case wxLOG_Error: - prefix += _("Error: "); - break; - - case wxLOG_Warning: - prefix += _("Warning: "); - break; - - // don't prepend "debug/trace" prefix under MSW as it goes to the debug - // window anyhow and so can't be confused with something else -#ifndef __WXMSW__ - case wxLOG_Debug: - // this prefix (as well as the one below) is intentionally not - // translated as nobody translates debug messages anyhow - prefix += "Debug: "; - break; - - case wxLOG_Trace: - prefix += "Trace: "; - break; -#endif // !__WXMSW__ - } - - DoLogTextAtLevel(level, prefix + msg); + // Use wxLogFormatter to format the message + DoLogTextAtLevel(level, m_formatter->Format (level, msg, info)); } void wxLog::DoLogTextAtLevel(wxLogLevel level, const wxString& msg) @@ -671,17 +705,38 @@ void wxLog::ClearTraceMasks() // wxLog miscellaneous other methods // ---------------------------------------------------------------------------- +#if wxUSE_DATETIME + void wxLog::TimeStamp(wxString *str) { -#if wxUSE_DATETIME if ( !ms_timestamp.empty() ) { *str = wxDateTime::UNow().Format(ms_timestamp); *str += wxS(": "); } -#endif // wxUSE_DATETIME } +void wxLog::TimeStamp(wxString *str, time_t t) +{ + if ( !ms_timestamp.empty() ) + { + *str = wxDateTime(t).Format(ms_timestamp); + *str += wxS(": "); + } +} + +#else // !wxUSE_DATETIME + +void wxLog::TimeStamp(wxString*) +{ +} + +void wxLog::TimeStamp(wxString*, time_t) +{ +} + +#endif // wxUSE_DATETIME/!wxUSE_DATETIME + #if wxUSE_THREADS void wxLog::FlushThreadMessages() @@ -724,6 +779,14 @@ bool wxLog::EnableThreadLogging(bool enable) #endif // wxUSE_THREADS +wxLogFormatter *wxLog::SetFormatter(wxLogFormatter* formatter) +{ + wxLogFormatter* formatterOld = m_formatter; + m_formatter = formatter ? formatter : new wxLogFormatter; + + return formatterOld; +} + void wxLog::Flush() { LogLastRepeatIfNeeded(); @@ -985,7 +1048,7 @@ static void wxLogWrap(FILE *f, const char *pszPrefix, const char *psz) // get error code from syste unsigned long wxSysErrorCode() { -#if defined(__WXMSW__) && !defined(__WXMICROWIN__) +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) return ::GetLastError(); #else //Unix return errno; @@ -998,7 +1061,7 @@ const wxChar *wxSysErrorMsg(unsigned long nErrCode) if ( nErrCode == 0 ) nErrCode = wxSysErrorCode(); -#if defined(__WXMSW__) && !defined(__WXMICROWIN__) +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) static wxChar s_szBuf[1024]; // get error message from system @@ -1046,7 +1109,7 @@ const wxChar *wxSysErrorMsg(unsigned long nErrCode) } return s_szBuf; -#else // !__WXMSW__ +#else // !__WINDOWS__ #if wxUSE_UNICODE static wchar_t s_wzBuf[1024]; wxConvCurrent->MB2WC(s_wzBuf, strerror((int)nErrCode), @@ -1055,7 +1118,7 @@ const wxChar *wxSysErrorMsg(unsigned long nErrCode) #else return strerror((int)nErrCode); #endif -#endif // __WXMSW__/!__WXMSW__ +#endif // __WINDOWS__/!__WINDOWS__ } #endif // wxUSE_LOG diff --git a/Externals/wxWidgets3/src/common/longlong.cpp b/Externals/wxWidgets3/src/common/longlong.cpp index 4358a51220..b34d53373c 100644 --- a/Externals/wxWidgets3/src/common/longlong.cpp +++ b/Externals/wxWidgets3/src/common/longlong.cpp @@ -6,7 +6,7 @@ // not documented and is for private use only. // Modified by: // Created: 10.02.99 -// RCS-ID: $Id: longlong.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: longlong.cpp 67643 2011-04-28 16:16:16Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -133,6 +133,22 @@ wxULongLongNative& wxULongLongNative::operator=(const class wxULongLongWx &ll) } #endif +#ifdef __VISUALC6__ +double wxULongLongNative::ToDouble() const +{ + // Work around the problem of casting unsigned __int64 to double in VC6 + // (which for unknown reasons only manifests itself in DLL builds, i.e. + // when using /MD). + static const __int64 int64_t_max = 9223372036854775807i64; + if ( m_ll <= int64_t_max ) + return wx_truncate_cast(double, (wxLongLong_t)m_ll); + + double d = wx_truncate_cast(double, int64_t_max); + d += (__int64)(m_ll - int64_t_max - 1); // The cast is safe because of -1 + return d + 1; +} +#endif // __VISUALC6__ + #endif // wxUSE_LONGLONG_NATIVE // ============================================================================ diff --git a/Externals/wxWidgets3/src/common/memory.cpp b/Externals/wxWidgets3/src/common/memory.cpp index b0001b1898..7eed146a4d 100644 --- a/Externals/wxWidgets3/src/common/memory.cpp +++ b/Externals/wxWidgets3/src/common/memory.cpp @@ -4,7 +4,7 @@ // Author: Arthur Seaton, Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: memory.cpp 66898 2011-02-16 05:13:00Z PC $ +// RCS-ID: $Id: memory.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -21,7 +21,7 @@ #include "wx/memory.h" #ifndef WX_PRECOMP - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #endif #include "wx/utils.h" @@ -888,7 +888,7 @@ static MemoryCriticalSection memLocker; #endif // USE_THREADSAFE_MEMORY_ALLOCATION -#if !(defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE))) +#if !(defined(__WINDOWS__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE))) #if wxUSE_GLOBAL_MEMORY_OPERATORS void * operator new (size_t size, wxChar * fileName, int lineNum) { @@ -922,7 +922,7 @@ void operator delete[] (void * buf) } #endif // wxUSE_ARRAY_MEMORY_OPERATORS #endif // wxUSE_GLOBAL_MEMORY_OPERATORS -#endif // !(defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE))) +#endif // !(defined(__WINDOWS__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE))) // TODO: store whether this is a vector or not. void * wxDebugAlloc(size_t size, wxChar * fileName, int lineNum, bool isObject, bool WXUNUSED(isVect) ) @@ -1045,7 +1045,7 @@ void wxTrace(const wxChar * ...) va_start(ap, fmt); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wvsprintf(buffer,fmt,ap) ; #else vsprintf(buffer,fmt,ap) ; @@ -1059,7 +1059,7 @@ void wxTrace(const wxChar * ...) wxDebugContext::GetStream().flush(); } else -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #ifdef __WIN32__ OutputDebugString((LPCTSTR)buffer) ; #else @@ -1085,7 +1085,7 @@ void wxTraceLevel(int, const wxChar * ...) va_start(ap, fmt); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wxWvsprintf(buffer,fmt,ap) ; #else vsprintf(buffer,fmt,ap) ; @@ -1099,7 +1099,7 @@ void wxTraceLevel(int, const wxChar * ...) wxDebugContext::GetStream().flush(); } else -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #ifdef __WIN32__ OutputDebugString((LPCTSTR)buffer) ; #else diff --git a/Externals/wxWidgets3/src/common/menucmn.cpp b/Externals/wxWidgets3/src/common/menucmn.cpp index 0f7cd52ca7..78d78e0b08 100644 --- a/Externals/wxWidgets3/src/common/menucmn.cpp +++ b/Externals/wxWidgets3/src/common/menucmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 26.10.99 -// RCS-ID: $Id: menucmn.cpp 67210 2011-03-16 07:00:59Z SC $ +// RCS-ID: $Id: menucmn.cpp 70479 2012-01-30 16:05:03Z SC $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -597,17 +597,10 @@ wxMenuItem* wxMenuBase::FindItemByPosition(size_t position) const // window will be used. void wxMenuBase::UpdateUI(wxEvtHandler* source) { - if (GetInvokingWindow()) - { - // Don't update menus if the parent - // frame is about to get deleted - wxWindow *tlw = wxGetTopLevelParent( GetInvokingWindow() ); - if (tlw && wxPendingDelete.Member(tlw)) - return; - } + wxWindow * const win = GetWindow(); - if ( !source && GetInvokingWindow() ) - source = GetInvokingWindow()->GetEventHandler(); + if ( !source && win ) + source = win->GetEventHandler(); if ( !source ) source = GetEventHandler(); if ( !source ) @@ -1045,18 +1038,13 @@ wxString wxMenuBarBase::GetHelpString(int itemid) const void wxMenuBarBase::UpdateMenus() { - wxEvtHandler* source; wxMenu* menu; int nCount = GetMenuCount(); for (int n = 0; n < nCount; n++) { menu = GetMenu( n ); if (menu != NULL) - { - source = menu->GetEventHandler(); - if (source != NULL) - menu->UpdateUI( source ); - } + menu->UpdateUI( NULL ); } } diff --git a/Externals/wxWidgets3/src/common/mimecmn.cpp b/Externals/wxWidgets3/src/common/mimecmn.cpp index 52cfcf6afe..e8b7652175 100644 --- a/Externals/wxWidgets3/src/common/mimecmn.cpp +++ b/Externals/wxWidgets3/src/common/mimecmn.cpp @@ -5,7 +5,7 @@ // Modified by: // Chris Elliott (biol75@york.ac.uk) 5 Dec 00: write support for Win32 // Created: 23.09.98 -// RCS-ID: $Id: mimecmn.cpp 64671 2010-06-21 16:36:45Z SC $ +// RCS-ID: $Id: mimecmn.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence (part of wxExtra library) ///////////////////////////////////////////////////////////////////////////// @@ -46,7 +46,7 @@ #include // implementation classes: -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/mimetype.h" #elif ( defined(__WXMAC__) ) #include "wx/osx/mimetype.h" @@ -346,9 +346,9 @@ bool wxFileType::GetIcon(wxIconLocation *iconLoc) const if ( iconLoc ) { iconLoc->SetFileName(m_info->GetIconFile()); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ iconLoc->SetIndex(m_info->GetIconIndex()); -#endif // __WXMSW__ +#endif // __WINDOWS__ } return true; @@ -444,9 +444,9 @@ size_t wxFileType::GetAllCommands(wxArrayString *verbs, if ( commands ) commands->Clear(); -#if defined (__WXMSW__) || defined(__UNIX__) +#if defined (__WINDOWS__) || defined(__UNIX__) return m_impl->GetAllCommands(verbs, commands, params); -#else // !__WXMSW__ || Unix +#else // !__WINDOWS__ || __UNIX__ // we don't know how to retrieve all commands, so just try the 2 we know // about size_t count = 0; @@ -471,12 +471,12 @@ size_t wxFileType::GetAllCommands(wxArrayString *verbs, } return count; -#endif // __WXMSW__/| __UNIX__ +#endif // __WINDOWS__/| __UNIX__ } bool wxFileType::Unassociate() { -#if defined(__WXMSW__) +#if defined(__WINDOWS__) return m_impl->Unassociate(); #elif defined(__UNIX__) return m_impl->Unassociate(this); @@ -490,7 +490,7 @@ bool wxFileType::SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt) { -#if defined (__WXMSW__) || defined(__UNIX__) +#if defined (__WINDOWS__) || defined(__UNIX__) return m_impl->SetCommand(cmd, verb, overwriteprompt); #else wxUnusedVar(cmd); @@ -504,7 +504,7 @@ bool wxFileType::SetCommand(const wxString& cmd, bool wxFileType::SetDefaultIcon(const wxString& cmd, int index) { wxString sTmp = cmd; -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // VZ: should we do this? // chris elliott : only makes sense in MS windows if ( sTmp.empty() ) @@ -512,7 +512,7 @@ bool wxFileType::SetDefaultIcon(const wxString& cmd, int index) #endif wxCHECK_MSG( !sTmp.empty(), false, wxT("need the icon file") ); -#if defined (__WXMSW__) || defined(__UNIX__) +#if defined (__WINDOWS__) || defined(__UNIX__) return m_impl->SetDefaultIcon (cmd, index); #else wxUnusedVar(index); @@ -610,7 +610,7 @@ wxMimeTypesManager::Associate(const wxFileTypeInfo& ftInfo) { EnsureImpl(); -#if defined(__WXMSW__) || defined(__UNIX__) +#if defined(__WINDOWS__) || defined(__UNIX__) return m_impl->Associate(ftInfo); #else // other platforms wxUnusedVar(ftInfo); diff --git a/Externals/wxWidgets3/src/common/msgout.cpp b/Externals/wxWidgets3/src/common/msgout.cpp index ae08c17a94..1b2a30e624 100644 --- a/Externals/wxWidgets3/src/common/msgout.cpp +++ b/Externals/wxWidgets3/src/common/msgout.cpp @@ -4,7 +4,7 @@ // Author: Mattia Barbon // Modified by: // Created: 17.07.02 -// RCS-ID: $Id: msgout.cpp 66592 2011-01-05 18:27:58Z PC $ +// RCS-ID: $Id: msgout.cpp 70808 2012-03-04 20:31:42Z VZ $ // Copyright: (c) the wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -163,7 +163,7 @@ void wxMessageOutputStderr::Output(const wxString& str) void wxMessageOutputDebug::Output(const wxString& str) { -#if defined(__WXMSW__) && !defined(__WXMICROWIN__) +#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) wxString out(AppendLineFeedIfNeeded(str)); out.Replace(wxT("\t"), wxT(" ")); out.Replace(wxT("\n"), wxT("\r\n")); @@ -202,7 +202,7 @@ void wxMessageOutputMessageBox::Output(const wxString& str) wxString out(str); // the native MSW msg box understands the TABs, others don't -#ifndef __WXMSW__ +#ifndef __WINDOWS__ out.Replace(wxT("\t"), wxT(" ")); #endif diff --git a/Externals/wxWidgets3/src/common/nbkbase.cpp b/Externals/wxWidgets3/src/common/nbkbase.cpp index f491ec76e9..bbad0aa2ce 100644 --- a/Externals/wxWidgets3/src/common/nbkbase.cpp +++ b/Externals/wxWidgets3/src/common/nbkbase.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 02.07.01 -// RCS-ID: $Id: nbkbase.cpp 66643 2011-01-07 22:31:26Z SC $ +// RCS-ID: $Id: nbkbase.cpp 70814 2012-03-05 18:00:34Z JS $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -84,7 +84,7 @@ wxFLAGS_MEMBER(wxNB_NOPAGETHEME) wxFLAGS_MEMBER(wxNB_FLAT) wxEND_FLAGS( wxNotebookStyle ) -#if wxUSE_EXTENDED_RTTI +#if wxUSE_EXTENDED_RTTI WX_DEFINE_LIST( wxNotebookPageInfoList ) @@ -119,7 +119,7 @@ wxCONSTRUCTOR_4( wxNotebookPageInfo, wxNotebookPage*, Page, \ void wxNotebookBase::AddPageInfo( wxNotebookPageInfo* info ) { - AddPage( info->GetPage(), info->GetText(), info->GetSelected(), info->GetImageId() ); + AddPage( info->GetPage(), info->GetText(), info->GetSelected(), info->GetImageId() ); } const wxNotebookPageInfoList& wxNotebookBase::GetPageInfos() const @@ -138,7 +138,7 @@ const wxNotebookPageInfoList& wxNotebookBase::GetPageInfos() const #endif -wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxNotebook, wxControl, "wx/notebook.h") +wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxNotebook, wxBookCtrlBase, "wx/notebook.h") wxBEGIN_PROPERTIES_TABLE(wxNotebook) wxEVENT_PROPERTY( PageChanging, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, wxNotebookEvent ) wxEVENT_PROPERTY( PageChanged, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEvent ) diff --git a/Externals/wxWidgets3/src/common/numformatter.cpp b/Externals/wxWidgets3/src/common/numformatter.cpp index ab990d4d59..eb4583b520 100644 --- a/Externals/wxWidgets3/src/common/numformatter.cpp +++ b/Externals/wxWidgets3/src/common/numformatter.cpp @@ -21,6 +21,8 @@ #include "wx/numformatter.h" #include "wx/intl.h" +#include // for setlocale and LC_ALL + // ---------------------------------------------------------------------------- // local helpers // ---------------------------------------------------------------------------- @@ -39,7 +41,9 @@ class LocaleId public: LocaleId() { +#if wxUSE_INTL m_wxloc = NULL; +#endif // wxUSE_INTL m_cloc = NULL; } @@ -48,6 +52,7 @@ public: Free(); } +#if wxUSE_INTL // Return true if this is the first time this function is called for this // object or if the program locale has changed since the last time it was // called. Otherwise just return false indicating that updating locale- @@ -70,15 +75,20 @@ public: return true; } +#endif // wxUSE_INTL private: void Free() { +#if wxUSE_INTL free(m_cloc); +#endif // wxUSE_INTL } +#if wxUSE_INTL // Non-owned pointer to wxLocale which was used. wxLocale *m_wxloc; +#endif // wxUSE_INTL // Owned pointer to the C locale string. char *m_cloc; @@ -98,6 +108,7 @@ private: wxChar wxNumberFormatter::GetDecimalSeparator() { +#if wxUSE_INTL // Notice that while using static variable here is not MT-safe, the worst // that can happen is that we redo the initialization if we're called // concurrently from more than one thread so it's not a real problem. @@ -128,10 +139,14 @@ wxChar wxNumberFormatter::GetDecimalSeparator() } return s_decimalSeparator; +#else // !wxUSE_INTL + return wxT('.'); +#endif // wxUSE_INTL/!wxUSE_INTL } bool wxNumberFormatter::GetThousandsSeparatorIfUsed(wxChar *sep) { +#if wxUSE_INTL static wxChar s_thousandsSeparator = 0; static LocaleId s_localeUsedForInit; @@ -157,6 +172,10 @@ bool wxNumberFormatter::GetThousandsSeparatorIfUsed(wxChar *sep) *sep = s_thousandsSeparator; return true; +#else // !wxUSE_INTL + wxUnusedVar(sep); + return false; +#endif // wxUSE_INTL/!wxUSE_INTL } // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/common/overlaycmn.cpp b/Externals/wxWidgets3/src/common/overlaycmn.cpp index e0bf7fd57b..4704a3114f 100644 --- a/Externals/wxWidgets3/src/common/overlaycmn.cpp +++ b/Externals/wxWidgets3/src/common/overlaycmn.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 2006-10-20 -// RCS-ID: $Id: overlaycmn.cpp 59033 2009-02-19 17:45:09Z PC $ +// RCS-ID: $Id: overlaycmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -139,7 +139,7 @@ wxOverlayImpl::~wxOverlayImpl() bool wxOverlayImpl::IsOk() { - return m_bmpSaved.Ok() ; + return m_bmpSaved.IsOk() ; } void wxOverlayImpl::Init( wxDC* dc, int x , int y , int width , int height ) diff --git a/Externals/wxWidgets3/src/common/ownerdrwcmn.cpp b/Externals/wxWidgets3/src/common/ownerdrwcmn.cpp index 8cf566686d..24f8959814 100644 --- a/Externals/wxWidgets3/src/common/ownerdrwcmn.cpp +++ b/Externals/wxWidgets3/src/common/ownerdrwcmn.cpp @@ -4,7 +4,7 @@ // Author: Marcin Malich // Modified by: // Created: 2009-09-22 -// RCS-ID: $Id: ownerdrwcmn.cpp 63223 2010-01-23 13:21:36Z VZ $ +// RCS-ID: $Id: ownerdrwcmn.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2009 Marcin Malich // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -93,11 +93,11 @@ void wxOwnerDrawnBase::GetColourToUse(wxODStatus stat, wxColour& colText, wxColo } else { - colText = m_colText.Ok() ? m_colText + colText = m_colText.IsOk() ? m_colText : wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT); } - colBack = m_colBack.Ok() ? m_colBack + colBack = m_colBack.IsOk() ? m_colBack : wxSystemSettings::GetColour(wxSYS_COLOUR_MENU); } } diff --git a/Externals/wxWidgets3/src/common/panelcmn.cpp b/Externals/wxWidgets3/src/common/panelcmn.cpp index a4659cbde0..e91b8c0f66 100644 --- a/Externals/wxWidgets3/src/common/panelcmn.cpp +++ b/Externals/wxWidgets3/src/common/panelcmn.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart, Robert Roebling, Vadim Zeitlin // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: panelcmn.cpp 67251 2011-03-20 00:00:38Z VZ $ +// RCS-ID: $Id: panelcmn.cpp 68366 2011-07-24 22:19:33Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -85,29 +85,14 @@ wxCONSTRUCTOR_6( wxPanel, wxWindow*, Parent, wxWindowID, Id, \ wxString, Name) -// ---------------------------------------------------------------------------- -// wxWin macros -// ---------------------------------------------------------------------------- - -BEGIN_EVENT_TABLE(wxPanelBase, wxWindow) - WX_EVENT_TABLE_CONTROL_CONTAINER(wxPanelBase) -END_EVENT_TABLE() - // ============================================================================ // implementation // ============================================================================ -WX_DELEGATE_TO_CONTROL_CONTAINER(wxPanelBase, wxWindow) - // ---------------------------------------------------------------------------- // wxPanelBase creation // ---------------------------------------------------------------------------- -wxPanelBase::wxPanelBase() -{ - WX_INIT_CONTROL_CONTAINER(); -} - bool wxPanelBase::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, diff --git a/Externals/wxWidgets3/src/common/persist.cpp b/Externals/wxWidgets3/src/common/persist.cpp index d2648cf653..84652a9e56 100644 --- a/Externals/wxWidgets3/src/common/persist.cpp +++ b/Externals/wxWidgets3/src/common/persist.cpp @@ -3,7 +3,7 @@ // Purpose: common persistence support classes // Author: Vadim Zeitlin // Created: 2009-01-20 -// RCS-ID: $Id: persist.cpp 61724 2009-08-21 10:41:26Z VZ $ +// RCS-ID: $Id: persist.cpp 69583 2011-10-30 10:08:18Z VZ $ // Copyright: (c) 2009 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -30,16 +30,34 @@ #include "wx/persist.h" +namespace +{ + +wxPersistenceManager* gs_manager = NULL; + +} // anonymous namespace + // ============================================================================ // wxPersistenceManager implementation // ============================================================================ +/* static */ +void wxPersistenceManager::Set(wxPersistenceManager& manager) +{ + gs_manager = &manager; +} + /* static */ wxPersistenceManager& wxPersistenceManager::Get() { - static wxPersistenceManager s_manager; + if ( !gs_manager ) + { + static wxPersistenceManager s_manager; - return s_manager; + gs_manager = &s_manager; + } + + return *gs_manager; } wxPersistenceManager::~wxPersistenceManager() diff --git a/Externals/wxWidgets3/src/common/pickerbase.cpp b/Externals/wxWidgets3/src/common/pickerbase.cpp index 4dbd470d8f..5da75191e7 100644 --- a/Externals/wxWidgets3/src/common/pickerbase.cpp +++ b/Externals/wxWidgets3/src/common/pickerbase.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 15/04/2006 -// RCS-ID: $Id: pickerbase.cpp 61724 2009-08-21 10:41:26Z VZ $ +// RCS-ID: $Id: pickerbase.cpp 68921 2011-08-27 14:11:25Z VZ $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -43,13 +43,6 @@ IMPLEMENT_ABSTRACT_CLASS(wxPickerBase, wxControl) -BEGIN_EVENT_TABLE(wxPickerBase, wxControl) - EVT_SIZE(wxPickerBase::OnSize) - WX_EVENT_TABLE_CONTROL_CONTAINER(wxPickerBase) -END_EVENT_TABLE() -WX_DELEGATE_TO_CONTROL_CONTAINER(wxPickerBase, wxControl) - - // ---------------------------------------------------------------------------- // wxPickerBase // ---------------------------------------------------------------------------- @@ -123,6 +116,21 @@ void wxPickerBase::PostCreation() // associated with it - in that case it defaults to 0 m_sizer->Add(m_picker, HasTextCtrl() ? 0 : 1, GetDefaultPickerCtrlFlag(), 5); + // For aesthetic reasons, make sure the picker is at least as high as the + // associated text control and is always at least square, unless we are + // explicitly using wxPB_SMALL style to force it to take as little space as + // possible. + if ( !HasFlag(wxPB_SMALL) ) + { + const wxSize pickerBestSize(m_picker->GetBestSize()); + const wxSize textBestSize( HasTextCtrl() ? m_text->GetBestSize() : wxSize()); + wxSize pickerMinSize; + pickerMinSize.y = wxMax(pickerBestSize.y, textBestSize.y); + pickerMinSize.x = wxMax(pickerBestSize.x, pickerMinSize.y); + if ( pickerMinSize != pickerBestSize ) + m_picker->SetMinSize(pickerMinSize); + } + SetSizer(m_sizer); SetInitialSize( GetMinSize() ); @@ -169,11 +177,4 @@ void wxPickerBase::OnTextCtrlUpdate(wxCommandEvent &) UpdatePickerFromTextCtrl(); } -void wxPickerBase::OnSize(wxSizeEvent &event) -{ - if (GetAutoLayout()) - Layout(); - event.Skip(); -} - #endif // Any picker in use diff --git a/Externals/wxWidgets3/src/common/platinfo.cpp b/Externals/wxWidgets3/src/common/platinfo.cpp index 895d068b21..30ec0581ef 100644 --- a/Externals/wxWidgets3/src/common/platinfo.cpp +++ b/Externals/wxWidgets3/src/common/platinfo.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 07.07.2006 (based on wxToolkitInfo) -// RCS-ID: $Id: platinfo.cpp 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: platinfo.cpp 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) 2006 Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -67,9 +67,6 @@ static const wxChar* const wxOperatingSystemIdNames[] = wxT("DOS"), wxT("OS/2"), - - wxT("PalmOS"), - wxT("PalmOS(Over Linux)"), }; static const wxChar* const wxPortIdNames[] = @@ -78,14 +75,12 @@ static const wxChar* const wxPortIdNames[] = wxT("wxMSW"), wxT("wxMotif"), wxT("wxGTK"), - wxT("wxMGL"), + wxT("wxDFB"), wxT("wxX11"), wxT("wxOS2"), wxT("wxMac"), wxT("wxCocoa"), wxT("wxWinCE"), - wxT("wxPalmOS"), - wxT("wxDFB") }; static const wxChar* const wxArchitectureNames[] = diff --git a/Externals/wxWidgets3/src/common/popupcmn.cpp b/Externals/wxWidgets3/src/common/popupcmn.cpp index 2466863992..81dce737d4 100644 --- a/Externals/wxWidgets3/src/common/popupcmn.cpp +++ b/Externals/wxWidgets3/src/common/popupcmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 06.01.01 -// RCS-ID: $Id: popupcmn.cpp 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: popupcmn.cpp 69966 2011-12-09 15:20:55Z VZ $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -44,6 +44,11 @@ #ifdef __WXGTK__ #include + #if GTK_CHECK_VERSION(2,0,0) + #include "wx/gtk/private/gtk2-compat.h" + #else + #define gtk_widget_get_window(x) x->window + #endif #elif defined(__WXMSW__) #include "wx/msw/private.h" #elif defined(__WXX11__) @@ -71,6 +76,7 @@ public: protected: // event handlers void OnLeftDown(wxMouseEvent& event); + void OnCaptureLost(wxMouseCaptureLostEvent& event); private: wxPopupTransientWindow *m_popup; @@ -101,6 +107,7 @@ private: BEGIN_EVENT_TABLE(wxPopupWindowHandler, wxEvtHandler) EVT_LEFT_DOWN(wxPopupWindowHandler::OnLeftDown) + EVT_MOUSE_CAPTURE_LOST(wxPopupWindowHandler::OnCaptureLost) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxPopupFocusHandler, wxEvtHandler) @@ -109,7 +116,7 @@ BEGIN_EVENT_TABLE(wxPopupFocusHandler, wxEvtHandler) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxPopupTransientWindow, wxPopupWindow) -#if defined( __WXMSW__ ) || ( defined( __WXMAC__ ) && wxOSX_USE_CARBON ) +#if defined(__WXMSW__) ||(defined(__WXMAC__) && wxOSX_USE_CARBON) EVT_IDLE(wxPopupTransientWindow::OnIdle) #endif END_EVENT_TABLE() @@ -343,7 +350,7 @@ bool wxPopupTransientWindow::Show( bool show ) { gtk_grab_add( m_widget ); - gdk_pointer_grab( m_widget->window, TRUE, + gdk_pointer_grab( gtk_widget_get_window(m_widget), true, (GdkEventMask) (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | @@ -382,6 +389,20 @@ bool wxPopupTransientWindow::Show( bool show ) return ret; } +bool wxPopupTransientWindow::Destroy() +{ + // The popup window can be deleted at any moment, even while some events + // are still being processed for it, so delay its real destruction until + // the next idle time when we're sure that it's safe to really destroy it. + + wxCHECK_MSG( !wxPendingDelete.Member(this), false, + wxS("Shouldn't destroy the popup twice.") ); + + wxPendingDelete.Append(this); + + return true; +} + void wxPopupTransientWindow::Dismiss() { Hide(); @@ -405,7 +426,7 @@ bool wxPopupTransientWindow::ProcessLeftDown(wxMouseEvent& WXUNUSED(event)) return false; } -#if defined( __WXMSW__ ) || ( defined( __WXMAC__ ) && wxOSX_USE_CARBON ) +#if defined(__WXMSW__) ||(defined(__WXMAC__) && wxOSX_USE_CARBON) void wxPopupTransientWindow::OnIdle(wxIdleEvent& event) { event.Skip(); @@ -431,7 +452,7 @@ void wxPopupTransientWindow::OnIdle(wxIdleEvent& event) } } } -#endif // __WXMSW__ +#endif // wxOSX/Carbon #if wxUSE_COMBOBOX && defined(__WXUNIVERSAL__) @@ -581,6 +602,15 @@ void wxPopupWindowHandler::OnLeftDown(wxMouseEvent& event) #endif // __WXUNIVERSAL__ && wxUSE_SCROLLBAR } +void +wxPopupWindowHandler::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event)) +{ + m_popup->DismissAndNotify(); + + // There is no need to skip the event here, normally we've already dealt + // with the focus loss. +} + // ---------------------------------------------------------------------------- // wxPopupFocusHandler // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/common/powercmn.cpp b/Externals/wxWidgets3/src/common/powercmn.cpp index ffd7cde09d..c8af67061f 100644 --- a/Externals/wxWidgets3/src/common/powercmn.cpp +++ b/Externals/wxWidgets3/src/common/powercmn.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2006-05-27 -// RCS-ID: $Id: powercmn.cpp 58718 2009-02-07 18:59:25Z VZ $ +// RCS-ID: $Id: powercmn.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -43,7 +43,7 @@ #endif // provide stubs for the systems not implementing these functions -#if !defined(__WXPALMOS__) && !defined(__WXMSW__) +#if !defined(__WINDOWS__) wxPowerType wxGetPowerType() { diff --git a/Externals/wxWidgets3/src/common/prntbase.cpp b/Externals/wxWidgets3/src/common/prntbase.cpp index 068741712b..2dd209faf5 100644 --- a/Externals/wxWidgets3/src/common/prntbase.cpp +++ b/Externals/wxWidgets3/src/common/prntbase.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: prntbase.cpp 67186 2011-03-14 11:54:35Z VZ $ +// RCS-ID: $Id: prntbase.cpp 68026 2011-06-22 22:58:07Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -999,38 +999,90 @@ void wxPreviewCanvas::OnMouseWheel(wxMouseEvent& event) #endif // wxUSE_MOUSEWHEEL +namespace +{ + +// This is by the controls in the print preview as the maximal (and hence +// longest) page number we may have to display. +enum { MAX_PAGE_NUMBER = 99999 }; + +} // anonymous namespace + +// ---------------------------------------------------------------------------- +// wxPrintPageMaxCtrl +// ---------------------------------------------------------------------------- + +// A simple static control showing the maximal number of pages. +class wxPrintPageMaxCtrl : public wxStaticText +{ +public: + wxPrintPageMaxCtrl(wxWindow *parent) + : wxStaticText( + parent, + wxID_ANY, + wxString(), + wxDefaultPosition, + wxSize + ( + parent->GetTextExtent(MaxAsString(MAX_PAGE_NUMBER)).x, + wxDefaultCoord + ), + wxST_NO_AUTORESIZE | wxALIGN_CENTRE + ) + { + } + + // Set the maximal page to display once we really know what it is. + void SetMaxPage(int maxPage) + { + SetLabel(MaxAsString(maxPage)); + } + +private: + static wxString MaxAsString(int maxPage) + { + return wxString::Format("/ %d", maxPage); + } + + wxDECLARE_NO_COPY_CLASS(wxPrintPageMaxCtrl); +}; + // ---------------------------------------------------------------------------- // wxPrintPageTextCtrl // ---------------------------------------------------------------------------- -// This text control contains the page number in the interval specified during -// its construction. Invalid pages are not accepted and the control contents is -// validated when it loses focus. Conversely, if the user changes the page to -// another valid one or presses Enter, OnGotoPage() method of the preview object -// will be called. +// This text control contains the page number in the specified interval. +// +// Invalid pages are not accepted and the control contents is validated when it +// loses focus. Conversely, if the user changes the page to another valid one +// or presses Enter, OnGotoPage() method of the preview object will be called. class wxPrintPageTextCtrl : public wxTextCtrl { public: - wxPrintPageTextCtrl(wxPreviewControlBar *preview, int minPage, int maxPage) + wxPrintPageTextCtrl(wxPreviewControlBar *preview) : wxTextCtrl(preview, wxID_PREVIEW_GOTO, - PageAsString(minPage), + wxString(), wxDefaultPosition, - // We use hardcoded 99999 for the width instead of fitting - // it to the values we can show because the control looks - // uncomfortably narrow if the real page number is just - // one or two digits. - wxSize(preview->GetTextExtent("99999").x, wxDefaultCoord), + // We use hardcoded maximal page number for the width + // instead of fitting it to the values we can show because + // the control looks uncomfortably narrow if the real page + // number is just one or two digits. + wxSize + ( + preview->GetTextExtent(PageAsString(MAX_PAGE_NUMBER)).x, + wxDefaultCoord + ), wxTE_PROCESS_ENTER #if wxUSE_VALIDATORS , wxTextValidator(wxFILTER_DIGITS) #endif // wxUSE_VALIDATORS ), - m_preview(preview), - m_minPage(minPage), - m_maxPage(maxPage) + m_preview(preview) { - m_page = minPage; + m_minPage = + m_maxPage = + m_page = 1; Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(wxPrintPageTextCtrl::OnKillFocus)); @@ -1038,6 +1090,17 @@ public: wxCommandEventHandler(wxPrintPageTextCtrl::OnTextEnter)); } + // Update the pages range, must be called after OnPreparePrinting() as + // these values are not known before. + void SetPageInfo(int minPage, int maxPage) + { + m_minPage = minPage; + m_maxPage = maxPage; + + // Show the first page by default. + SetPageNumber(minPage); + } + // Helpers to conveniently set or get the current page number. Return value // is 0 if the current controls contents is invalid. void SetPageNumber(int page) @@ -1108,8 +1171,8 @@ private: wxPreviewControlBar * const m_preview; - const int m_minPage, - m_maxPage; + int m_minPage, + m_maxPage; // This is the last valid page value that we had, we revert to it if an // invalid page is entered. @@ -1155,6 +1218,7 @@ wxPanel(parent, wxID_ANY, pos, size, style, name) m_closeButton = NULL; m_zoomControl = NULL; m_currentPageText = NULL; + m_maxPageText = NULL; m_buttonFlags = buttons; } @@ -1436,18 +1500,11 @@ void wxPreviewControlBar::CreateButtons() if (m_buttonFlags & wxPREVIEW_GOTO) { - int minPage, maxPage, pageFrom, pageTo; - m_printPreview->GetPrintout()->GetPageInfo(&minPage, &maxPage, - &pageFrom, &pageTo); - - m_currentPageText = new wxPrintPageTextCtrl(this, minPage, maxPage); + m_currentPageText = new wxPrintPageTextCtrl(this); sizer.Add(m_currentPageText); - wxStaticText * - maxPageText = new wxStaticText(this, wxID_ANY, - wxString::Format("/ %d", maxPage)); - - sizer.Add(maxPageText); + m_maxPageText = new wxPrintPageMaxCtrl(this); + sizer.Add(m_maxPageText); } if (m_buttonFlags & wxPREVIEW_NEXT) @@ -1489,6 +1546,15 @@ void wxPreviewControlBar::CreateButtons() sizer.AddAtEnd(m_closeButton); } +void wxPreviewControlBar::SetPageInfo(int minPage, int maxPage) +{ + if ( m_currentPageText ) + m_currentPageText->SetPageInfo(minPage, maxPage); + + if ( m_maxPageText ) + m_maxPageText->SetMaxPage(maxPage); +} + void wxPreviewControlBar::SetZoomControl(int zoom) { if (m_zoomControl) @@ -1553,6 +1619,7 @@ wxFrame(parent, wxID_ANY, title, pos, size, style, name) m_controlBar = NULL; m_previewCanvas = NULL; m_windowDisabler = NULL; + m_modalityKind = wxPreviewFrame_NonModal; // Give the application icon #ifdef __WXMSW__ @@ -1564,14 +1631,6 @@ wxFrame(parent, wxID_ANY, title, pos, size, style, name) wxPreviewFrame::~wxPreviewFrame() { -} - -void wxPreviewFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) -{ - if (m_windowDisabler) - delete m_windowDisabler; - - // Need to delete the printout and the print preview wxPrintout *printout = m_printPreview->GetPrintout(); if (printout) { @@ -1582,12 +1641,33 @@ void wxPreviewFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) } m_previewCanvas->SetPreview(NULL); - wxDELETE(m_printPreview); + delete m_printPreview; +} + +void wxPreviewFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) +{ + // Reenable any windows we disabled by undoing whatever we did in our + // Initialize(). + switch ( m_modalityKind ) + { + case wxPreviewFrame_AppModal: + delete m_windowDisabler; + m_windowDisabler = NULL; + break; + + case wxPreviewFrame_WindowModal: + if ( GetParent() ) + GetParent()->Enable(); + break; + + case wxPreviewFrame_NonModal: + break; + } Destroy(); } -void wxPreviewFrame::Initialize() +void wxPreviewFrame::InitializeWithModality(wxPreviewFrameModalityKind kind) { #if wxUSE_STATUSBAR CreateStatusBar(); @@ -1606,7 +1686,25 @@ void wxPreviewFrame::Initialize() SetAutoLayout( true ); SetSizer( item0 ); - m_windowDisabler = new wxWindowDisabler(this); + m_modalityKind = kind; + switch ( m_modalityKind ) + { + case wxPreviewFrame_AppModal: + // Disable everything. + m_windowDisabler = new wxWindowDisabler( this ); + break; + + case wxPreviewFrame_WindowModal: + // Disable our parent if we have one. + if ( GetParent() ) + GetParent()->Disable(); + break; + + case wxPreviewFrame_NonModal: + // Nothing to do, we don't need to disable any windows. + break; + } + Layout(); @@ -1829,13 +1927,23 @@ bool wxPrintPreviewBase::RenderPageIntoDC(wxDC& dc, int pageNum) m_previewPrintout->SetPageSizePixels(m_pageWidth, m_pageHeight); // Need to delay OnPreparePrinting() until here, so we have enough - // information. + // information and a wxDC. if (!m_printingPrepared) { + m_printingPrepared = true; + m_previewPrintout->OnPreparePrinting(); int selFrom, selTo; m_previewPrintout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo); - m_printingPrepared = true; + + // Update the wxPreviewControlBar page range display. + if ( m_previewFrame ) + { + wxPreviewControlBar * const + controlBar = ((wxPreviewFrame*)m_previewFrame)->GetControlBar(); + if ( controlBar ) + controlBar->SetPageInfo(m_minPage, m_maxPage); + } } m_previewPrintout->OnBeginPrinting(); @@ -1881,7 +1989,7 @@ bool wxPrintPreviewBase::RenderPage(int pageNum) { m_previewBitmap = new wxBitmap(pageRect.width, pageRect.height); - if (!m_previewBitmap || !m_previewBitmap->Ok()) + if (!m_previewBitmap || !m_previewBitmap->IsOk()) { InvalidatePreviewBitmap(); wxMessageBox(_("Sorry, not enough memory to create a preview."), _("Print Preview Failure"), wxOK); @@ -2102,7 +2210,7 @@ int wxPrintPreview::GetMinPage() const bool wxPrintPreview::IsOk() const { - return m_pimpl->Ok(); + return m_pimpl->IsOk(); } void wxPrintPreview::SetOk(bool ok) diff --git a/Externals/wxWidgets3/src/common/quantize.cpp b/Externals/wxWidgets3/src/common/quantize.cpp index 2b740ec0f9..db58c9e677 100644 --- a/Externals/wxWidgets3/src/common/quantize.cpp +++ b/Externals/wxWidgets3/src/common/quantize.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 22/6/2000 -// RCS-ID: $Id: quantize.cpp 50694 2007-12-14 22:35:23Z VZ $ +// RCS-ID: $Id: quantize.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Thomas G. Lane, Vaclav Slavik, Julian Smart // Licence: wxWindows licence + JPEG library licence ///////////////////////////////////////////////////////////////////////////// @@ -1546,7 +1546,7 @@ bool wxQuantize::Quantize(const wxImage& src, wxImage& dest, if (flags & wxQUANTIZE_FILL_DESTINATION_IMAGE) { - if (!dest.Ok()) + if (!dest.IsOk()) dest.Create(w, h); imgdt = dest.GetData(); diff --git a/Externals/wxWidgets3/src/common/richtooltipcmn.cpp b/Externals/wxWidgets3/src/common/richtooltipcmn.cpp new file mode 100644 index 0000000000..2d98ca758b --- /dev/null +++ b/Externals/wxWidgets3/src/common/richtooltipcmn.cpp @@ -0,0 +1,82 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/common/richtooltipcmn.cpp +// Purpose: wxRichToolTip implementation common to all platforms. +// Author: Vadim Zeitlin +// Created: 2011-10-18 +// RCS-ID: $Id: richtooltipcmn.cpp 69463 2011-10-18 21:57:02Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_RICHTOOLTIP + +#ifndef WX_PRECOMP + #include "wx/icon.h" +#endif // WX_PRECOMP + +#include "wx/private/richtooltip.h" + +// ============================================================================ +// implementation +// ============================================================================ + +wxRichToolTip::wxRichToolTip(const wxString& title, + const wxString& message) : + m_impl(wxRichToolTipImpl::Create(title, message)) +{ +} + +void +wxRichToolTip::SetBackgroundColour(const wxColour& col, const wxColour& colEnd) +{ + m_impl->SetBackgroundColour(col, colEnd); +} + +void wxRichToolTip::SetIcon(int icon) +{ + m_impl->SetStandardIcon(icon); +} + +void wxRichToolTip::SetIcon(const wxIcon& icon) +{ + m_impl->SetCustomIcon(icon); +} + +void wxRichToolTip::SetTimeout(unsigned milliseconds) +{ + m_impl->SetTimeout(milliseconds); +} + +void wxRichToolTip::SetTipKind(wxTipKind tipKind) +{ + m_impl->SetTipKind(tipKind); +} + +void wxRichToolTip::ShowFor(wxWindow* win) +{ + wxCHECK_RET( win, wxS("Must have a valid window") ); + + m_impl->ShowFor(win); +} + +wxRichToolTip::~wxRichToolTip() +{ + delete m_impl; +} + +#endif // wxUSE_RICHTOOLTIP diff --git a/Externals/wxWidgets3/src/common/sckaddr.cpp b/Externals/wxWidgets3/src/common/sckaddr.cpp index 9dd6d3afb4..0992e09859 100644 --- a/Externals/wxWidgets3/src/common/sckaddr.cpp +++ b/Externals/wxWidgets3/src/common/sckaddr.cpp @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux // Created: 26/04/97 // Modified by: Vadim Zeitlin to use wxSockAddressImpl on 2008-12-28 -// RCS-ID: $Id: sckaddr.cpp 65124 2010-07-28 11:26:14Z VZ $ +// RCS-ID: $Id: sckaddr.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1997, 1998 Guilhem Lavaux // (c) 2008 Vadim Zeitlin // Licence: wxWindows licence @@ -79,7 +79,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress) // TODO: use POSIX getaddrinfo() (also available in Winsock 2) for simplicity // and to use the same code for IPv4 and IPv6 support -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #define HAVE_INET_ADDR #ifndef HAVE_GETHOSTBYNAME @@ -109,7 +109,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress) #pragma warning(default:4706) #endif #endif -#endif // __WXMSW__ +#endif // __WINDOWS__ // we assume that we have gethostbyaddr_r() if and only if we have // gethostbyname_r() and that it uses the similar conventions to it (see @@ -144,7 +144,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress) #ifdef HAVE_FUNC_GETSERVBYNAME_R_4 struct wxGetservBuf : servent_data { - wxGethostBuf() + wxGetservBuf() { memset(this, 0, sizeof(servent_data)); } @@ -273,8 +273,9 @@ hostent *wxGethostbyname_r(const char *hostname, #elif defined(HAVE_FUNC_GETHOSTBYNAME_R_5) he = gethostbyname_r(hostname, h, buffer, size, err); #elif defined(HAVE_FUNC_GETHOSTBYNAME_R_3) - he = gethostbyname_r(hostname, h, &buffer); - *err = h_errno; + wxUnusedVar(var); + *err = gethostbyname_r(hostname, h, &buffer); + he = h; #elif defined(HAVE_GETHOSTBYNAME) wxLOCK_GETBY_MUTEX(name); @@ -304,8 +305,9 @@ hostent *wxGethostbyaddr_r(const char *addr_buf, #elif defined(HAVE_FUNC_GETHOSTBYADDR_R_5) he = gethostbyaddr_r(addr_buf, buf_size, proto, h, buffer, size, err); #elif defined(HAVE_FUNC_GETHOSTBYADDR_R_3) - he = gethostbyaddr_r(addr_buf, buf_size, proto, h, buffer); - *err = h_errno; + wxUnusedVar(size); + *err = gethostbyaddr_r(addr_buf, buf_size, proto, h, &buffer); + he = h; #elif defined(HAVE_GETHOSTBYADDR) wxLOCK_GETBY_MUTEX(addr); @@ -397,6 +399,7 @@ servent *wxGetservbyname_r(const char *port, #elif defined(HAVE_FUNC_GETSERVBYNAME_R_5) se = getservbyname_r(port, protocol, serv, buffer, size); #elif defined(HAVE_FUNC_GETSERVBYNAME_R_4) + wxUnusedVar(size); if ( getservbyname_r(port, protocol, serv, &buffer) != 0 ) return NULL; #elif defined(HAVE_GETSERVBYNAME) diff --git a/Externals/wxWidgets3/src/common/sckfile.cpp b/Externals/wxWidgets3/src/common/sckfile.cpp index 467c1500a1..b4104065b8 100644 --- a/Externals/wxWidgets3/src/common/sckfile.cpp +++ b/Externals/wxWidgets3/src/common/sckfile.cpp @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux // Modified by: // Created: 20/07/97 -// RCS-ID: $Id: sckfile.cpp 58137 2009-01-16 15:08:13Z FM $ +// RCS-ID: $Id: sckfile.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1997, 1998 Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -45,7 +45,7 @@ wxFileProto::~wxFileProto() wxInputStream *wxFileProto::GetInputStream(const wxString& path) { wxFileInputStream *retval = new wxFileInputStream(wxURI::Unescape(path)); - if ( retval->Ok() ) + if ( retval->IsOk() ) { m_lastError = wxPROTO_NOERR; return retval; diff --git a/Externals/wxWidgets3/src/common/sckipc.cpp b/Externals/wxWidgets3/src/common/sckipc.cpp index 1088c93dbd..c141d11b74 100644 --- a/Externals/wxWidgets3/src/common/sckipc.cpp +++ b/Externals/wxWidgets3/src/common/sckipc.cpp @@ -8,7 +8,7 @@ // Vadim Zeitlin (added support for Unix sockets) Apr 2002 // (use buffering, many fixes/cleanup) Oct 2008 // Created: 1993 -// RCS-ID: $Id: sckipc.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: sckipc.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart 1993 // (c) Guilhem Lavaux 1997, 1998 // (c) 2000 Guillermo Rodriguez @@ -498,7 +498,7 @@ bool wxTCPServer::Create(const wxString& serverName) delete addr; - if (!m_server->Ok()) + if (!m_server->IsOk()) { m_server->Destroy(); m_server = NULL; @@ -877,7 +877,7 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event) wxSocketBase *sock = server->Accept(); if (!sock) return; - if (!sock->Ok()) + if (!sock->IsOk()) { sock->Destroy(); return; diff --git a/Externals/wxWidgets3/src/common/sizer.cpp b/Externals/wxWidgets3/src/common/sizer.cpp index 5858c1218f..06403167dd 100644 --- a/Externals/wxWidgets3/src/common/sizer.cpp +++ b/Externals/wxWidgets3/src/common/sizer.cpp @@ -5,7 +5,7 @@ // Dirk Holtwick, Ron Lee // Modified by: Ron Lee // Created: -// RCS-ID: $Id: sizer.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: sizer.cpp 69172 2011-09-21 15:07:37Z VZ $ // Copyright: (c) Robin Dunn, Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -909,6 +909,11 @@ wxSize wxSizer::ComputeFittingClientSize(wxWindow *window) sizeMax = wxDisplay(disp).GetClientArea().GetSize(); + // If determining the display size failed, skip the max size checks as + // we really don't want to create windows of (0, 0) size. + if ( !sizeMax.x || !sizeMax.y ) + return size; + // space for decorations and toolbars etc. sizeMax = tlw->WindowToClientSize(sizeMax); } diff --git a/Externals/wxWidgets3/src/common/socket.cpp b/Externals/wxWidgets3/src/common/socket.cpp index f99a0333bb..b3e07700b6 100644 --- a/Externals/wxWidgets3/src/common/socket.cpp +++ b/Externals/wxWidgets3/src/common/socket.cpp @@ -6,7 +6,7 @@ // Copyright: (C) 1999-1997, Guilhem Lavaux // (C) 1999-2000, Guillermo Rodriguez Garcia // (C) 2008 Vadim Zeitlin -// RCS_ID: $Id: socket.cpp 65378 2010-08-21 23:33:40Z VZ $ +// RCS_ID: $Id: socket.cpp 70808 2012-03-04 20:31:42Z VZ $ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -1297,17 +1297,31 @@ wxSocketEventFlags wxSocketImpl::Select(wxSocketEventFlags flags, exceptfds; // always want to know about errors if ( flags & wxSOCKET_INPUT_FLAG ) - { preadfds = &readfds; + + if ( flags & wxSOCKET_OUTPUT_FLAG ) + pwritefds = &writefds; + + // When using non-blocking connect() the client socket becomes connected + // (successfully or not) when it becomes writable but when using + // non-blocking accept() the server socket becomes connected when it + // becomes readable. + if ( flags & wxSOCKET_CONNECTION_FLAG ) + { + if ( m_server ) + preadfds = &readfds; + else + pwritefds = &writefds; + } + + if ( preadfds ) + { wxFD_ZERO(preadfds); wxFD_SET(m_fd, preadfds); } - // when using non-blocking connect() the socket becomes connected - // (successfully or not) when it becomes writable - if ( flags & (wxSOCKET_OUTPUT_FLAG | wxSOCKET_CONNECTION_FLAG) ) + if ( pwritefds ) { - pwritefds = &writefds; wxFD_ZERO(pwritefds); wxFD_SET(m_fd, pwritefds); } @@ -2097,7 +2111,7 @@ wxFORCE_LINK_MODULE( socketiohandler ) #endif // same for ManagerSetter in the MSW file -#ifdef __WXMSW__ +#ifdef __WINDOWS__ wxFORCE_LINK_MODULE( mswsocket ) #endif diff --git a/Externals/wxWidgets3/src/common/sstream.cpp b/Externals/wxWidgets3/src/common/sstream.cpp index edc38fd5ef..f7e1f9a647 100644 --- a/Externals/wxWidgets3/src/common/sstream.cpp +++ b/Externals/wxWidgets3/src/common/sstream.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: Ryan Norton (UTF8 UNICODE) // Created: 2004-09-19 -// RCS-ID: $Id: sstream.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: sstream.cpp 67968 2011-06-16 16:22:15Z VZ $ // Copyright: (c) 2004 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -146,7 +146,7 @@ size_t wxStringOutputStream::OnSysWrite(const void *buffer, size_t size) { const char *p = static_cast(buffer); -#if wxUSE_UNICODE_WCHAR +#if wxUSE_UNICODE // the part of the string we have here may be incomplete, i.e. it can stop // in the middle of an UTF-8 character and so converting it would fail; if // this is the case, accumulate the part which we failed to convert until @@ -188,11 +188,10 @@ size_t wxStringOutputStream::OnSysWrite(const void *buffer, size_t size) // not update m_pos as m_str hasn't changed return size; } -#else // !wxUSE_UNICODE_WCHAR - // no recoding necessary, the data is supposed to already be in UTF-8 (if - // supported) or ASCII otherwise +#else // !wxUSE_UNICODE + // no recoding necessary m_str->append(p, size); -#endif // wxUSE_UNICODE_WCHAR/!wxUSE_UNICODE_WCHAR +#endif // wxUSE_UNICODE/!wxUSE_UNICODE // update position m_pos += size; diff --git a/Externals/wxWidgets3/src/common/stockitem.cpp b/Externals/wxWidgets3/src/common/stockitem.cpp index 19aab1aa28..0c9ea2c496 100644 --- a/Externals/wxWidgets3/src/common/stockitem.cpp +++ b/Externals/wxWidgets3/src/common/stockitem.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2004-08-15 -// RCS-ID: $Id: stockitem.cpp 63383 2010-02-04 01:33:32Z VZ $ +// RCS-ID: $Id: stockitem.cpp 70412 2012-01-20 16:51:09Z DS $ // Copyright: (c) Vaclav Slavik, 2004 // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -118,85 +118,97 @@ wxString wxGetStockLabel(wxWindowID id, long flags) { wxString stockLabel; - #define STOCKITEM(stockid, label) \ - case stockid: \ - stockLabel = label; \ - break; +#ifdef __WXMSW__ + // special case: the "Cancel" button shouldn't have a mnemonic under MSW + // for consistency with the native dialogs (which don't use any mnemonic + // for it because it is already bound to Esc implicitly) + if ( id == wxID_CANCEL ) + flags &= ~wxSTOCK_WITH_MNEMONIC; +#endif // __WXMSW__ + + + #define STOCKITEM(stockid, labelWithMnemonic, labelPlain) \ + case stockid: \ + if(flags & wxSTOCK_WITH_MNEMONIC) \ + stockLabel = labelWithMnemonic; \ + else \ + stockLabel = labelPlain; \ + break switch (id) { - STOCKITEM(wxID_ABOUT, _("&About...")) - STOCKITEM(wxID_ADD, _("Add")) - STOCKITEM(wxID_APPLY, _("&Apply")) - STOCKITEM(wxID_BACKWARD, _("&Back")) - STOCKITEM(wxID_BOLD, _("&Bold")) - STOCKITEM(wxID_BOTTOM, _("&Bottom")) - STOCKITEM(wxID_CANCEL, _("&Cancel")) - STOCKITEM(wxID_CDROM, _("&CD-Rom")) - STOCKITEM(wxID_CLEAR, _("&Clear")) - STOCKITEM(wxID_CLOSE, _("&Close")) - STOCKITEM(wxID_CONVERT, _("&Convert")) - STOCKITEM(wxID_COPY, _("&Copy")) - STOCKITEM(wxID_CUT, _("Cu&t")) - STOCKITEM(wxID_DELETE, _("&Delete")) - STOCKITEM(wxID_DOWN, _("&Down")) - STOCKITEM(wxID_EDIT, _("&Edit")) - STOCKITEM(wxID_EXECUTE, _("&Execute")) - STOCKITEM(wxID_EXIT, _("&Quit")) - STOCKITEM(wxID_FILE, _("&File")) - STOCKITEM(wxID_FIND, _("&Find")) - STOCKITEM(wxID_FIRST, _("&First")) - STOCKITEM(wxID_FLOPPY, _("&Floppy")) - STOCKITEM(wxID_FORWARD, _("&Forward")) - STOCKITEM(wxID_HARDDISK, _("&Harddisk")) - STOCKITEM(wxID_HELP, _("&Help")) - STOCKITEM(wxID_HOME, _("&Home")) - STOCKITEM(wxID_INDENT, _("Indent")) - STOCKITEM(wxID_INDEX, _("&Index")) - STOCKITEM(wxID_INFO, _("&Info")) - STOCKITEM(wxID_ITALIC, _("&Italic")) - STOCKITEM(wxID_JUMP_TO, _("&Jump to")) - STOCKITEM(wxID_JUSTIFY_CENTER, _("Centered")) - STOCKITEM(wxID_JUSTIFY_FILL, _("Justified")) - STOCKITEM(wxID_JUSTIFY_LEFT, _("Align Left")) - STOCKITEM(wxID_JUSTIFY_RIGHT, _("Align Right")) - STOCKITEM(wxID_LAST, _("&Last")) - STOCKITEM(wxID_NETWORK, _("&Network")) - STOCKITEM(wxID_NEW, _("&New")) - STOCKITEM(wxID_NO, _("&No")) - STOCKITEM(wxID_OK, _("&OK")) - STOCKITEM(wxID_OPEN, _("&Open...")) - STOCKITEM(wxID_PASTE, _("&Paste")) - STOCKITEM(wxID_PREFERENCES, _("&Preferences")) - STOCKITEM(wxID_PREVIEW, _("Print previe&w")) - STOCKITEM(wxID_PRINT, _("&Print...")) - STOCKITEM(wxID_PROPERTIES, _("&Properties")) - STOCKITEM(wxID_REDO, _("&Redo")) - STOCKITEM(wxID_REFRESH, _("Refresh")) - STOCKITEM(wxID_REMOVE, _("Remove")) - STOCKITEM(wxID_REPLACE, _("Rep&lace")) - STOCKITEM(wxID_REVERT_TO_SAVED, _("Revert to Saved")) - STOCKITEM(wxID_SAVE, _("&Save")) - STOCKITEM(wxID_SAVEAS, _("Save &As...")) - STOCKITEM(wxID_SELECTALL, _("Select &All")) - STOCKITEM(wxID_SELECT_COLOR, _("&Color")) - STOCKITEM(wxID_SELECT_FONT, _("&Font")) - STOCKITEM(wxID_SORT_ASCENDING, _("&Ascending")) - STOCKITEM(wxID_SORT_DESCENDING, _("&Descending")) - STOCKITEM(wxID_SPELL_CHECK, _("&Spell Check")) - STOCKITEM(wxID_STOP, _("&Stop")) - STOCKITEM(wxID_STRIKETHROUGH, _("&Strikethrough")) - STOCKITEM(wxID_TOP, _("&Top")) - STOCKITEM(wxID_UNDELETE, _("Undelete")) - STOCKITEM(wxID_UNDERLINE, _("&Underline")) - STOCKITEM(wxID_UNDO, _("&Undo")) - STOCKITEM(wxID_UNINDENT, _("&Unindent")) - STOCKITEM(wxID_UP, _("&Up")) - STOCKITEM(wxID_YES, _("&Yes")) - STOCKITEM(wxID_ZOOM_100, _("&Actual Size")) - STOCKITEM(wxID_ZOOM_FIT, _("Zoom to &Fit")) - STOCKITEM(wxID_ZOOM_IN, _("Zoom &In")) - STOCKITEM(wxID_ZOOM_OUT, _("Zoom &Out")) + STOCKITEM(wxID_ABOUT, _("&About"), _("About")); + STOCKITEM(wxID_ADD, _("Add"), _("Add")); + STOCKITEM(wxID_APPLY, _("&Apply"), _("Apply")); + STOCKITEM(wxID_BACKWARD, _("&Back"), _("Back")); + STOCKITEM(wxID_BOLD, _("&Bold"), _("Bold")); + STOCKITEM(wxID_BOTTOM, _("&Bottom"), _("Bottom")); + STOCKITEM(wxID_CANCEL, _("&Cancel"), _("Cancel")); + STOCKITEM(wxID_CDROM, _("&CD-Rom"), _("CD-Rom")); + STOCKITEM(wxID_CLEAR, _("&Clear"), _("Clear")); + STOCKITEM(wxID_CLOSE, _("&Close"), _("Close")); + STOCKITEM(wxID_CONVERT, _("&Convert"), _("Convert")); + STOCKITEM(wxID_COPY, _("&Copy"), _("Copy")); + STOCKITEM(wxID_CUT, _("Cu&t"), _("Cut")); + STOCKITEM(wxID_DELETE, _("&Delete"), _("Delete")); + STOCKITEM(wxID_DOWN, _("&Down"), _("Down")); + STOCKITEM(wxID_EDIT, _("&Edit"), _("Edit")); + STOCKITEM(wxID_EXECUTE, _("&Execute"), _("Execute")); + STOCKITEM(wxID_EXIT, _("&Quit"), _("Quit")); + STOCKITEM(wxID_FILE, _("&File"), _("File")); + STOCKITEM(wxID_FIND, _("&Find"), _("Find")); + STOCKITEM(wxID_FIRST, _("&First"), _("First")); + STOCKITEM(wxID_FLOPPY, _("&Floppy"), _("Floppy")); + STOCKITEM(wxID_FORWARD, _("&Forward"), _("Forward")); + STOCKITEM(wxID_HARDDISK, _("&Harddisk"), _("Harddisk")); + STOCKITEM(wxID_HELP, _("&Help"), _("Help")); + STOCKITEM(wxID_HOME, _("&Home"), _("Home")); + STOCKITEM(wxID_INDENT, _("Indent"), _("Indent")); + STOCKITEM(wxID_INDEX, _("&Index"), _("Index")); + STOCKITEM(wxID_INFO, _("&Info"), _("Info")); + STOCKITEM(wxID_ITALIC, _("&Italic"), _("Italic")); + STOCKITEM(wxID_JUMP_TO, _("&Jump to"), _("Jump to")); + STOCKITEM(wxID_JUSTIFY_CENTER, _("Centered"), _("Centered")); + STOCKITEM(wxID_JUSTIFY_FILL, _("Justified"), _("Justified")); + STOCKITEM(wxID_JUSTIFY_LEFT, _("Align Left"), _("Align Left")); + STOCKITEM(wxID_JUSTIFY_RIGHT, _("Align Right"), _("Align Right")); + STOCKITEM(wxID_LAST, _("&Last"), _("Last")); + STOCKITEM(wxID_NETWORK, _("&Network"), _("Network")); + STOCKITEM(wxID_NEW, _("&New"), _("New")); + STOCKITEM(wxID_NO, _("&No"), _("No")); + STOCKITEM(wxID_OK, _("&OK"), _("OK")); + STOCKITEM(wxID_OPEN, _("&Open..."), _("Open...")); + STOCKITEM(wxID_PASTE, _("&Paste"), _("Paste")); + STOCKITEM(wxID_PREFERENCES, _("&Preferences"), _("Preferences")); + STOCKITEM(wxID_PREVIEW, _("&Preview..."), _("Preview...")); + STOCKITEM(wxID_PRINT, _("&Print..."), _("Print...")); + STOCKITEM(wxID_PROPERTIES, _("&Properties"), _("Properties")); + STOCKITEM(wxID_REDO, _("&Redo"), _("Redo")); + STOCKITEM(wxID_REFRESH, _("Refresh"), _("Refresh")); + STOCKITEM(wxID_REMOVE, _("Remove"), _("Remove")); + STOCKITEM(wxID_REPLACE, _("Rep&lace"), _("Replace")); + STOCKITEM(wxID_REVERT_TO_SAVED, _("Revert to Saved"), _("Revert to Saved")); + STOCKITEM(wxID_SAVE, _("&Save"), _("Save")); + STOCKITEM(wxID_SAVEAS, _("&Save as"), _("Save as")); + STOCKITEM(wxID_SELECTALL, _("Select &All"), _("Select All")); + STOCKITEM(wxID_SELECT_COLOR, _("&Color"), _("Color")); + STOCKITEM(wxID_SELECT_FONT, _("&Font"), _("Font")); + STOCKITEM(wxID_SORT_ASCENDING, _("&Ascending"), _("Ascending")); + STOCKITEM(wxID_SORT_DESCENDING, _("&Descending"), _("Descending")); + STOCKITEM(wxID_SPELL_CHECK, _("&Spell Check"), _("Spell Check")); + STOCKITEM(wxID_STOP, _("&Stop"), _("Stop")); + STOCKITEM(wxID_STRIKETHROUGH, _("&Strikethrough"), _("Strikethrough")); + STOCKITEM(wxID_TOP, _("&Top"), _("Top")); + STOCKITEM(wxID_UNDELETE, _("Undelete"), _("Undelete")); + STOCKITEM(wxID_UNDERLINE, _("&Underline"), _("Underline")); + STOCKITEM(wxID_UNDO, _("&Undo"), _("Undo")); + STOCKITEM(wxID_UNINDENT, _("&Unindent"), _("Unindent")); + STOCKITEM(wxID_UP, _("&Up"), _("Up")); + STOCKITEM(wxID_YES, _("&Yes"), _("Yes")); + STOCKITEM(wxID_ZOOM_100, _("&Actual Size"), _("Actual Size")); + STOCKITEM(wxID_ZOOM_FIT, _("Zoom to &Fit"), _("Zoom to Fit")); + STOCKITEM(wxID_ZOOM_IN, _("Zoom &In"), _("Zoom In")); + STOCKITEM(wxID_ZOOM_OUT, _("Zoom &Out"), _("Zoom Out")); default: wxFAIL_MSG( wxT("invalid stock item ID") ); @@ -218,19 +230,6 @@ wxString wxGetStockLabel(wxWindowID id, long flags) "labels without ellipsis shouldn't use accelerators" ); } -#ifdef __WXMSW__ - // special case: the "Cancel" button shouldn't have a mnemonic under MSW - // for consistency with the native dialogs (which don't use any mnemonic - // for it because it is already bound to Esc implicitly) - if ( id == wxID_CANCEL ) - flags &= ~wxSTOCK_WITH_MNEMONIC; -#endif // __WXMSW__ - - if ( !(flags & wxSTOCK_WITH_MNEMONIC) ) - { - stockLabel = wxStripMenuCodes(stockLabel); - } - #if wxUSE_ACCEL if ( !stockLabel.empty() && (flags & wxSTOCK_WITH_ACCELERATOR) ) { @@ -292,17 +291,21 @@ wxAcceleratorEntry wxGetStockAccelerator(wxWindowID id) switch (id) { - STOCKITEM(wxID_COPY, wxACCEL_CMD,'C') - STOCKITEM(wxID_CUT, wxACCEL_CMD,'X') - STOCKITEM(wxID_FIND, wxACCEL_CMD,'F') - STOCKITEM(wxID_HELP, wxACCEL_CMD,'H') - STOCKITEM(wxID_NEW, wxACCEL_CMD,'N') - STOCKITEM(wxID_OPEN, wxACCEL_CMD,'O') - STOCKITEM(wxID_PASTE, wxACCEL_CMD,'V') - STOCKITEM(wxID_REDO, wxACCEL_CMD | wxACCEL_SHIFT,'Z') - STOCKITEM(wxID_REPLACE, wxACCEL_CMD,'R') - STOCKITEM(wxID_SAVE, wxACCEL_CMD,'S') - STOCKITEM(wxID_UNDO, wxACCEL_CMD,'Z') + STOCKITEM(wxID_COPY, wxACCEL_CTRL,'C') + STOCKITEM(wxID_CUT, wxACCEL_CTRL,'X') + STOCKITEM(wxID_FIND, wxACCEL_CTRL,'F') + STOCKITEM(wxID_HELP, wxACCEL_CTRL,'H') + STOCKITEM(wxID_NEW, wxACCEL_CTRL,'N') + STOCKITEM(wxID_OPEN, wxACCEL_CTRL,'O') + STOCKITEM(wxID_PASTE, wxACCEL_CTRL,'V') + STOCKITEM(wxID_PRINT, wxACCEL_CTRL,'P') + STOCKITEM(wxID_REDO, wxACCEL_CTRL | wxACCEL_SHIFT,'Z') + STOCKITEM(wxID_REPLACE, wxACCEL_CTRL,'R') + STOCKITEM(wxID_SAVE, wxACCEL_CTRL,'S') + STOCKITEM(wxID_UNDO, wxACCEL_CTRL,'Z') +#ifdef __WXOSX__ + STOCKITEM(wxID_PREFERENCES, wxACCEL_CTRL,',') +#endif default: // set the wxAcceleratorEntry to return into an invalid state: diff --git a/Externals/wxWidgets3/src/common/stopwatch.cpp b/Externals/wxWidgets3/src/common/stopwatch.cpp index 246e778921..dc66848854 100644 --- a/Externals/wxWidgets3/src/common/stopwatch.cpp +++ b/Externals/wxWidgets3/src/common/stopwatch.cpp @@ -8,7 +8,7 @@ // Guillermo Rodriguez rewrote from scratch (Dic/99) // Modified by: // Created: 20.06.2003 (extracted from common/timercmn.cpp) -// RCS-ID: $Id: stopwatch.cpp 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: stopwatch.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998-2003 wxWidgets Team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -30,61 +30,16 @@ #include "wx/stopwatch.h" +#if wxUSE_STOPWATCH + #ifndef WX_PRECOMP - #ifdef __WXMSW__ + #ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #endif - #include "wx/intl.h" #include "wx/log.h" + #include "wx/thread.h" #endif //WX_PRECOMP -// ---------------------------------------------------------------------------- -// System headers -// ---------------------------------------------------------------------------- - -#if defined(__WIN32__) && !defined(HAVE_FTIME) && !defined(__MWERKS__) && !defined(__WXWINCE__) - #define HAVE_FTIME -#endif - -#if defined(__VISAGECPP__) && !defined(HAVE_FTIME) - #define HAVE_FTIME -# if __IBMCPP__ >= 400 - # define ftime(x) _ftime(x) -# endif -#endif - -#if defined(__MWERKS__) && defined(__WXMSW__) -# undef HAVE_FTIME -# undef HAVE_GETTIMEOFDAY -#endif - -#ifndef __WXPALMOS5__ -#ifndef __WXWINCE__ -#include -#else -#include "wx/msw/private.h" -#include "wx/msw/wince/time.h" -#endif -#endif // __WXPALMOS5__ - - -#if !defined(__WXMAC__) && !defined(__WXWINCE__) - #include // for time_t -#endif - -#if defined(HAVE_GETTIMEOFDAY) - #include - #include -#elif defined(HAVE_FTIME) - #include -#endif - -#ifdef __WXPALMOS__ - #include - #include - #include -#endif - // ============================================================================ // implementation // ============================================================================ @@ -93,57 +48,117 @@ // wxStopWatch // ---------------------------------------------------------------------------- -#if wxUSE_STOPWATCH - -void wxStopWatch::Start(long t) +namespace { -#if 0 -// __WXMSW__ - LARGE_INTEGER frequency_li; - ::QueryPerformanceFrequency( &frequency_li ); - m_frequency = frequency_li.QuadPart; - if (m_frequency == 0) + +#ifdef __WINDOWS__ + +struct PerfCounter +{ + PerfCounter() { - m_t0 = wxGetLocalTimeMillis() - t; + init = false; } - else + + bool CanBeUsed() const { - LARGE_INTEGER counter_li; - ::QueryPerformanceCounter( &counter_li ); - wxLongLong counter = counter_li.QuadPart; - m_t0 = (counter * 10000 / m_frequency) - t*10; + return freq.QuadPart != 0; } -#else - m_t0 = wxGetLocalTimeMillis() - t; -#endif - m_pause = 0; + + wxCRIT_SECT_DECLARE_MEMBER(cs); + LARGE_INTEGER freq; + bool init; +} gs_perfCounter; + +#endif // __WINDOWS__ + +const int MILLISECONDS_PER_SECOND = 1000; +const int MICROSECONDS_PER_MILLISECOND = 1000; +const int MICROSECONDS_PER_SECOND = 1000*1000; + +} // anonymous namespace + +void wxStopWatch::DoStart() +{ +#ifdef __WINDOWS__ + if ( !gs_perfCounter.init ) + { + wxCRIT_SECT_LOCKER(lock, gs_perfCounter.cs); + ::QueryPerformanceFrequency(&gs_perfCounter.freq); + + // Just a sanity check: it's not supposed to happen but verify that + // ::QueryPerformanceCounter() succeeds so that we can really use it. + LARGE_INTEGER counter; + if ( !::QueryPerformanceCounter(&counter) ) + { + wxLogDebug("QueryPerformanceCounter() unexpected failed (%s), " + "will not use it.", wxSysErrorMsg()); + + gs_perfCounter.freq.QuadPart = 0; + } + + gs_perfCounter.init = true; + } +#endif // __WINDOWS__ + + m_t0 = GetCurrentClockValue(); +} + +wxLongLong wxStopWatch::GetClockFreq() const +{ +#ifdef __WINDOWS__ + // Under MSW we use the high resolution performance counter timer which has + // its own frequency (usually related to the CPU clock speed). + if ( gs_perfCounter.CanBeUsed() ) + return gs_perfCounter.freq.QuadPart; +#endif // __WINDOWS__ + +#ifdef HAVE_GETTIMEOFDAY + // With gettimeofday() we can have nominally microsecond precision and + // while this is not the case in practice, it's still better than + // millisecond. + return MICROSECONDS_PER_SECOND; +#else // !HAVE_GETTIMEOFDAY + // Currently milliseconds are used everywhere else. + return MILLISECONDS_PER_SECOND; +#endif // HAVE_GETTIMEOFDAY/!HAVE_GETTIMEOFDAY +} + +void wxStopWatch::Start(long t0) +{ + // Calling Start() makes the stop watch run however many times it was + // paused before. m_pauseCount = 0; + + DoStart(); + + m_t0 -= (wxLongLong(t0)*GetClockFreq())/MILLISECONDS_PER_SECOND; } -long wxStopWatch::GetElapsedTime() const +wxLongLong wxStopWatch::GetCurrentClockValue() const { -#if 0 -//__WXMSW__ - if (m_frequency == 0) +#ifdef __WINDOWS__ + if ( gs_perfCounter.CanBeUsed() ) { - return (wxGetLocalTimeMillis() - m_t0).GetLo(); + LARGE_INTEGER counter; + ::QueryPerformanceCounter(&counter); + return counter.QuadPart; } - else - { - LARGE_INTEGER counter_li; - ::QueryPerformanceCounter( &counter_li ); - wxLongLong counter = counter_li.QuadPart; - wxLongLong res = (counter * 10000 / m_frequency) - m_t0; - return res.GetLo() / 10; - } -#else - return (wxGetLocalTimeMillis() - m_t0).GetLo(); -#endif +#endif // __WINDOWS__ + +#ifdef HAVE_GETTIMEOFDAY + return wxGetUTCTimeUSec(); +#else // !HAVE_GETTIMEOFDAY + return wxGetUTCTimeMillis(); +#endif // HAVE_GETTIMEOFDAY/!HAVE_GETTIMEOFDAY } -long wxStopWatch::Time() const +wxLongLong wxStopWatch::TimeInMicro() const { - return m_pauseCount ? m_pause : GetElapsedTime(); + const wxLongLong elapsed(m_pauseCount ? m_elapsedBeforePause + : GetCurrentClockValue() - m_t0); + + return (elapsed*MICROSECONDS_PER_SECOND)/GetClockFreq(); } #endif // wxUSE_STOPWATCH @@ -159,14 +174,14 @@ static wxLongLong wxStartTime = 0l; // starts the global timer void wxStartTimer() { - wxStartTime = wxGetLocalTimeMillis(); + wxStartTime = wxGetUTCTimeMillis(); } // Returns elapsed time in milliseconds long wxGetElapsedTime(bool resetTimer) { wxLongLong oldTime = wxStartTime; - wxLongLong newTime = wxGetLocalTimeMillis(); + wxLongLong newTime = wxGetUTCTimeMillis(); if ( resetTimer ) wxStartTime = newTime; @@ -175,157 +190,3 @@ long wxGetElapsedTime(bool resetTimer) } #endif // wxUSE_LONGLONG - -// ---------------------------------------------------------------------------- -// the functions to get the current time and timezone info -// ---------------------------------------------------------------------------- - -// Get local time as seconds since 00:00:00, Jan 1st 1970 -long wxGetLocalTime() -{ - struct tm tm; - time_t t0, t1; - - // This cannot be made static because mktime can overwrite it. - // - memset(&tm, 0, sizeof(tm)); - tm.tm_year = 70; - tm.tm_mon = 0; - tm.tm_mday = 5; // not Jan 1st 1970 due to mktime 'feature' - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_isdst = -1; // let mktime guess - - // Note that mktime assumes that the struct tm contains local time. - // - t1 = time(&t1); // now - t0 = mktime(&tm); // origin - - // Return the difference in seconds. - // - if (( t0 != (time_t)-1 ) && ( t1 != (time_t)-1 )) - return (long)difftime(t1, t0) + (60 * 60 * 24 * 4); - - wxLogSysError(_("Failed to get the local system time")); - return -1; -} - -// Get UTC time as seconds since 00:00:00, Jan 1st 1970 -long wxGetUTCTime() -{ - return (long)time(NULL); -} - -#if wxUSE_LONGLONG - -// Get local time as milliseconds since 00:00:00, Jan 1st 1970 -wxLongLong wxGetLocalTimeMillis() -{ - wxLongLong val = 1000l; - - // If possible, use a function which avoids conversions from - // broken-up time structures to milliseconds - -#if defined(__WXPALMOS__) - DateTimeType thenst; - thenst.second = 0; - thenst.minute = 0; - thenst.hour = 0; - thenst.day = 1; - thenst.month = 1; - thenst.year = 1970; - thenst.weekDay = 5; - uint32_t now = TimGetSeconds(); - uint32_t then = TimDateTimeToSeconds (&thenst); - return SysTimeToMilliSecs(SysTimeInSecs(now - then)); -#elif defined(__WXMSW__) && (defined(__WINE__) || defined(__MWERKS__)) - // This should probably be the way all WXMSW compilers should do it - // Go direct to the OS for time - - SYSTEMTIME thenst = { 1970, 1, 4, 1, 0, 0, 0, 0 }; // 00:00:00 Jan 1st 1970 - FILETIME thenft; - SystemTimeToFileTime( &thenst, &thenft ); - wxLongLong then( thenft.dwHighDateTime, thenft.dwLowDateTime ); // time in 100 nanoseconds - - SYSTEMTIME nowst; - GetLocalTime( &nowst ); - FILETIME nowft; - SystemTimeToFileTime( &nowst, &nowft ); - wxLongLong now( nowft.dwHighDateTime, nowft.dwLowDateTime ); // time in 100 nanoseconds - - return ( now - then ) / 10000.0; // time from 00:00:00 Jan 1st 1970 to now in milliseconds - -#elif defined(HAVE_GETTIMEOFDAY) - struct timeval tp; - if ( wxGetTimeOfDay(&tp) != -1 ) - { - val *= tp.tv_sec; - return (val + (tp.tv_usec / 1000)); - } - else - { - wxLogError(_("wxGetTimeOfDay failed.")); - return 0; - } -#elif defined(HAVE_FTIME) - struct timeb tp; - - // ftime() is void and not int in some mingw32 headers, so don't - // test the return code (well, it shouldn't fail anyhow...) - (void)::ftime(&tp); - val *= tp.time; - return (val + tp.millitm); -#else // no gettimeofday() nor ftime() - // We use wxGetLocalTime() to get the seconds since - // 00:00:00 Jan 1st 1970 and then whatever is available - // to get millisecond resolution. - // - // NOTE that this might lead to a problem if the clocks - // use different sources, so this approach should be - // avoided where possible. - - val *= wxGetLocalTime(); - -// GRG: This will go soon as all WIN32 seem to have ftime -// JACS: unfortunately not. WinCE doesn't have it. -#if defined (__WIN32__) - // If your platform/compiler needs to use two different functions - // to get ms resolution, please do NOT just shut off these warnings, - // drop me a line instead at - - // FIXME -#ifndef __WXWINCE__ - #warning "Possible clock skew bug in wxGetLocalTimeMillis()!" -#endif - - SYSTEMTIME st; - ::GetLocalTime(&st); - val += st.wMilliseconds; -#else // !Win32 - // If your platform/compiler does not support ms resolution please - // do NOT just shut off these warnings, drop me a line instead at - // - - #if defined(__VISUALC__) || defined (__WATCOMC__) - #pragma message("wxStopWatch will be up to second resolution!") - #elif defined(__BORLANDC__) - #pragma message "wxStopWatch will be up to second resolution!" - #else - #warning "wxStopWatch will be up to second resolution!" - #endif // compiler -#endif - - return val; - -#endif // time functions -} - -#else // !wxUSE_LONGLONG - -double wxGetLocalTimeMillis(void) -{ - return (double(clock()) / double(CLOCKS_PER_SEC)) * 1000.0; -} - -#endif // wxUSE_LONGLONG/!wxUSE_LONGLONG diff --git a/Externals/wxWidgets3/src/common/strconv.cpp b/Externals/wxWidgets3/src/common/strconv.cpp index 25c6051b24..eea3e7c71f 100644 --- a/Externals/wxWidgets3/src/common/strconv.cpp +++ b/Externals/wxWidgets3/src/common/strconv.cpp @@ -5,7 +5,7 @@ // Ryan Norton, Fredrik Roubert (UTF7) // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: strconv.cpp 66523 2011-01-02 16:59:15Z PC $ +// RCS-ID: $Id: strconv.cpp 70462 2012-01-25 00:10:44Z VZ $ // Copyright: (c) 1999 Ove Kaaven, Robert Roebling, Vaclav Slavik // (c) 2000-2003 Vadim Zeitlin // (c) 2004 Ryan Norton, Fredrik Roubert @@ -995,7 +995,7 @@ wxMBConvStrictUTF8::ToWChar(wchar_t *dst, size_t dstLen, for ( const char *p = src; ; p++ ) { - if ( !(srcLen == wxNO_LEN ? *p : srcLen) ) + if ( (srcLen == wxNO_LEN ? !*p : !srcLen) ) { // all done successfully, just add the trailing NULL if we are not // using explicit length @@ -1115,7 +1115,7 @@ wxMBConvStrictUTF8::FromWChar(char *dst, size_t dstLen, for ( const wchar_t *wp = src; ; wp++ ) { - if ( !(srcLen == wxNO_LEN ? *wp : srcLen) ) + if ( (srcLen == wxNO_LEN ? !*wp : !srcLen) ) { // all done successfully, just add the trailing NULL if we are not // using explicit length @@ -1145,6 +1145,8 @@ wxMBConvStrictUTF8::FromWChar(char *dst, size_t dstLen, { // skip the next char too as we decoded a surrogate wp++; + if ( srcLen != wxNO_LEN ) + srcLen--; } #else // wchar_t is UTF-32 code = *wp & 0x7fffffff; @@ -1230,7 +1232,10 @@ size_t wxMBConvUTF8::ToWChar(wchar_t *buf, size_t n, size_t len = 0; - while ((srcLen == wxNO_LEN ? *psz : srcLen--) && ((!buf) || (len < n))) + // The length can be either given explicitly or computed implicitly for the + // NUL-terminated strings. + const bool isNulTerminated = srcLen == wxNO_LEN; + while ((isNulTerminated ? *psz : srcLen--) && ((!buf) || (len < n))) { const char *opsz = psz; bool invalid = false; @@ -1364,10 +1369,17 @@ size_t wxMBConvUTF8::ToWChar(wchar_t *buf, size_t n, } } - if (srcLen == wxNO_LEN && buf && (len < n)) - *buf = 0; + if ( isNulTerminated ) + { + // Add the trailing NUL in this case if we have a large enough buffer. + if ( buf && (len < n) ) + *buf = 0; - return len + 1; + // And count it in any case. + len++; + } + + return len; } static inline bool isoctal(wchar_t wch) @@ -1383,7 +1395,10 @@ size_t wxMBConvUTF8::FromWChar(char *buf, size_t n, size_t len = 0; - while ((srcLen == wxNO_LEN ? *psz : srcLen--) && ((!buf) || (len < n))) + // The length can be either given explicitly or computed implicitly for the + // NUL-terminated strings. + const bool isNulTerminated = srcLen == wxNO_LEN; + while ((isNulTerminated ? *psz : srcLen--) && ((!buf) || (len < n))) { wxUint32 cc; @@ -1451,10 +1466,17 @@ size_t wxMBConvUTF8::FromWChar(char *buf, size_t n, } } - if (srcLen == wxNO_LEN && buf && (len < n)) - *buf = 0; + if ( isNulTerminated ) + { + // Add the trailing NUL in this case if we have a large enough buffer. + if ( buf && (len < n) ) + *buf = 0; - return len + 1; + // And count it in any case. + len++; + } + + return len; } // ============================================================================ @@ -1645,7 +1667,7 @@ wxMBConvUTF16straight::FromWChar(char *dst, size_t dstLen, wxUint16 *outBuff = reinterpret_cast(dst); for ( size_t n = 0; n < srcLen; n++ ) { - wxUint16 cc[2]; + wxUint16 cc[2] = { 0 }; const size_t numChars = encode_utf16(*src++, cc); if ( numChars == wxCONV_FAILED ) return wxCONV_FAILED; @@ -1728,7 +1750,7 @@ wxMBConvUTF16swap::FromWChar(char *dst, size_t dstLen, wxUint16 *outBuff = reinterpret_cast(dst); for ( const wchar_t *srcEnd = src + srcLen; src < srcEnd; src++ ) { - wxUint16 cc[2]; + wxUint16 cc[2] = { 0 }; const size_t numChars = encode_utf16(*src, cc); if ( numChars == wxCONV_FAILED ) return wxCONV_FAILED; @@ -1812,7 +1834,7 @@ wxMBConvUTF32straight::ToWChar(wchar_t *dst, size_t dstLen, size_t outLen = 0; for ( size_t n = 0; n < inLen; n++ ) { - wxUint16 cc[2]; + wxUint16 cc[2] = { 0 }; const size_t numChars = encode_utf16(*inBuff++, cc); if ( numChars == wxCONV_FAILED ) return wxCONV_FAILED; @@ -1890,7 +1912,7 @@ wxMBConvUTF32swap::ToWChar(wchar_t *dst, size_t dstLen, size_t outLen = 0; for ( size_t n = 0; n < inLen; n++, inBuff++ ) { - wxUint16 cc[2]; + wxUint16 cc[2] = { 0 }; const size_t numChars = encode_utf16(wxUINT32_SWAP_ALWAYS(*inBuff), cc); if ( numChars == wxCONV_FAILED ) return wxCONV_FAILED; diff --git a/Externals/wxWidgets3/src/common/string.cpp b/Externals/wxWidgets3/src/common/string.cpp index f232d4aff4..7b95949c01 100644 --- a/Externals/wxWidgets3/src/common/string.cpp +++ b/Externals/wxWidgets3/src/common/string.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin, Ryan Norton // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: string.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: string.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // (c) 2004 Ryan Norton // Licence: wxWindows licence @@ -41,9 +41,9 @@ #include "wx/vector.h" #include "wx/xlocale.h" -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" -#endif // __WXMSW__ +#endif // __WINDOWS__ #if wxUSE_STD_IOSTREAM #include diff --git a/Externals/wxWidgets3/src/common/stringimpl.cpp b/Externals/wxWidgets3/src/common/stringimpl.cpp index aa766c0bc1..830ace8284 100644 --- a/Externals/wxWidgets3/src/common/stringimpl.cpp +++ b/Externals/wxWidgets3/src/common/stringimpl.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin, Ryan Norton // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: stringimpl.cpp 66728 2011-01-22 14:38:36Z DS $ +// RCS-ID: $Id: stringimpl.cpp 70150 2011-12-28 13:51:13Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // (c) 2004 Ryan Norton // Licence: wxWindows licence @@ -681,7 +681,11 @@ bool wxStringImpl::AssignCopy(size_t nSrcLen, // allocation failure handled by caller return false; } - memcpy(m_pchData, pszSrcData, nSrcLen*sizeof(wxStringCharType)); + + // use memmove() and not memcpy() here as we might be copying from our own + // buffer in case of assignment such as "s = s.c_str()" (see #11294) + memmove(m_pchData, pszSrcData, nSrcLen*sizeof(wxStringCharType)); + GetStringData()->nDataLength = nSrcLen; m_pchData[nSrcLen] = wxT('\0'); } diff --git a/Externals/wxWidgets3/src/common/strvararg.cpp b/Externals/wxWidgets3/src/common/strvararg.cpp index 6f1d678cc6..694a370d77 100644 --- a/Externals/wxWidgets3/src/common/strvararg.cpp +++ b/Externals/wxWidgets3/src/common/strvararg.cpp @@ -3,7 +3,7 @@ // Purpose: macros for implementing type-safe vararg passing of strings // Author: Vaclav Slavik // Created: 2007-02-19 -// RCS-ID: $Id: strvararg.cpp 65057 2010-07-23 23:32:46Z VZ $ +// RCS-ID: $Id: strvararg.cpp 70523 2012-02-06 13:28:34Z VZ $ // Copyright: (c) 2007 REA Elektronik GmbH // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -161,6 +161,19 @@ public: { if ( CopyFmtChar(*format++) == wxT('%') ) { +#if wxUSE_PRINTF_POS_PARAMS + if ( *format >= '0' && *format <= '9' ) + { + SkipDigits(&format); + if ( *format == '$' ) + { + // It was a positional argument specification. + CopyFmtChar(*format++); + } + //else: it was a width specification, nothing else to do. + } +#endif // wxUSE_PRINTF_POS_PARAMS + // skip any flags while ( IsFlagChar(*format) ) CopyFmtChar(*format++); diff --git a/Externals/wxWidgets3/src/common/sysopt.cpp b/Externals/wxWidgets3/src/common/sysopt.cpp index b7f14a1659..e16ff8256a 100644 --- a/Externals/wxWidgets3/src/common/sysopt.cpp +++ b/Externals/wxWidgets3/src/common/sysopt.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 2001-07-10 -// RCS-ID: $Id: sysopt.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: sysopt.cpp 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -101,12 +101,7 @@ wxString wxSystemOptions::GetOption(const wxString& name) int wxSystemOptions::GetOptionInt(const wxString& name) { -#ifdef _PACC_VER - // work around the PalmOS pacc compiler bug - return wxAtoi (GetOption(name).data()); -#else return wxAtoi (GetOption(name)); -#endif } bool wxSystemOptions::HasOption(const wxString& name) diff --git a/Externals/wxWidgets3/src/common/tbarbase.cpp b/Externals/wxWidgets3/src/common/tbarbase.cpp index f198708da8..0baf8c4d79 100644 --- a/Externals/wxWidgets3/src/common/tbarbase.cpp +++ b/Externals/wxWidgets3/src/common/tbarbase.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: VZ at 11.12.99 (wxScrollableToolBar split off) // Created: 04/01/98 -// RCS-ID: $Id: tbarbase.cpp 67206 2011-03-16 06:36:43Z SC $ +// RCS-ID: $Id: tbarbase.cpp 70179 2011-12-29 22:05:31Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -701,12 +701,6 @@ void wxToolBarBase::UpdateWindowUI(long flags) if ( !IsShown() ) return; - // There is no sense in updating the toolbar UI - // if the parent window is about to get destroyed - wxWindow *tlw = wxGetTopLevelParent( this ); - if (tlw && wxPendingDelete.Member( tlw )) - return; - wxEvtHandler* evtHandler = GetEventHandler() ; for ( wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); @@ -757,7 +751,7 @@ bool wxCreateGreyedImage(const wxImage& in, wxImage& out) { #if wxUSE_IMAGE out = in.ConvertToGreyscale(); - if ( out.Ok() ) + if ( out.IsOk() ) return true; #endif // wxUSE_IMAGE return false; diff --git a/Externals/wxWidgets3/src/common/textbuf.cpp b/Externals/wxWidgets3/src/common/textbuf.cpp index cd46aa9464..28d1e7477c 100644 --- a/Externals/wxWidgets3/src/common/textbuf.cpp +++ b/Externals/wxWidgets3/src/common/textbuf.cpp @@ -3,7 +3,7 @@ // Purpose: implementation of wxTextBuffer class // Created: 14.11.01 // Author: Morten Hanssen, Vadim Zeitlin -// RCS-ID: $Id: textbuf.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: textbuf.cpp 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 1998-2001 wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -40,7 +40,7 @@ // - Mac when compiling with CodeWarrior (__WXMAC__) const wxTextFileType wxTextBuffer::typeDefault = -#if defined(__WINDOWS__) || defined(__DOS__) || defined(__PALMOS__) +#if defined(__WINDOWS__) || defined(__DOS__) wxTextFileType_Dos; #elif defined(__UNIX__) wxTextFileType_Unix; diff --git a/Externals/wxWidgets3/src/common/textcmn.cpp b/Externals/wxWidgets3/src/common/textcmn.cpp index e590bdd9a0..68dfc96258 100644 --- a/Externals/wxWidgets3/src/common/textcmn.cpp +++ b/Externals/wxWidgets3/src/common/textcmn.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 13.07.99 -// RCS-ID: $Id: textcmn.cpp 66592 2011-01-05 18:27:58Z PC $ +// RCS-ID: $Id: textcmn.cpp 70448 2012-01-23 12:33:03Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -143,8 +143,8 @@ wxTextAttr::wxTextAttr(const wxColour& colText, { Init(); - if (m_colText.Ok()) m_flags |= wxTEXT_ATTR_TEXT_COLOUR; - if (m_colBack.Ok()) m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR; + if (m_colText.IsOk()) m_flags |= wxTEXT_ATTR_TEXT_COLOUR; + if (m_colBack.IsOk()) m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR; if (alignment != wxTEXT_ALIGNMENT_DEFAULT) m_flags |= wxTEXT_ATTR_ALIGNMENT; @@ -164,6 +164,7 @@ void wxTextAttr::Init() m_fontStyle = wxFONTSTYLE_NORMAL; m_fontWeight = wxFONTWEIGHT_NORMAL; m_fontUnderlined = false; + m_fontStrikethrough = false; m_fontEncoding = wxFONTENCODING_DEFAULT; m_fontFamily = wxFONTFAMILY_DEFAULT; @@ -193,6 +194,7 @@ void wxTextAttr::Copy(const wxTextAttr& attr) m_fontStyle = attr.m_fontStyle; m_fontWeight = attr.m_fontWeight; m_fontUnderlined = attr.m_fontUnderlined; + m_fontStrikethrough = attr.m_fontStrikethrough; m_fontFaceName = attr.m_fontFaceName; m_fontEncoding = attr.m_fontEncoding; m_fontFamily = attr.m_fontFamily; @@ -403,6 +405,10 @@ wxFont wxTextAttr::GetFont() const if (HasFontUnderlined()) underlined = GetFontUnderlined(); + bool strikethrough = false; + if ( HasFontStrikethrough() ) + strikethrough = GetFontStrikethrough(); + wxString fontFaceName; if (HasFontFaceName()) fontFaceName = GetFontFaceName(); @@ -416,13 +422,15 @@ wxFont wxTextAttr::GetFont() const fontFamily = GetFontFamily(); wxFont font(fontSize, fontFamily, fontStyle, fontWeight, underlined, fontFaceName, encoding); + if ( strikethrough ) + font.SetStrikethrough( true ); return font; } // Get attributes from font. bool wxTextAttr::GetFontAttributes(const wxFont& font, int flags) { - if (!font.Ok()) + if (!font.IsOk()) return false; if (flags & wxTEXT_ATTR_FONT_SIZE) @@ -437,6 +445,9 @@ bool wxTextAttr::GetFontAttributes(const wxFont& font, int flags) if (flags & wxTEXT_ATTR_FONT_UNDERLINE) m_fontUnderlined = font.GetUnderlined(); + if (flags & wxTEXT_ATTR_FONT_STRIKETHROUGH) + m_fontStrikethrough = font.GetStrikethrough(); + if (flags & wxTEXT_ATTR_FONT_FACE) m_fontFaceName = font.GetFaceName(); @@ -500,6 +511,12 @@ bool wxTextAttr::Apply(const wxTextAttr& style, const wxTextAttr* compareWith) destStyle.SetFontUnderlined(style.GetFontUnderlined()); } + if (style.HasFontStrikethrough()) + { + if (!(compareWith && compareWith->HasFontStrikethrough() && compareWith->GetFontStrikethrough() == style.GetFontStrikethrough())) + destStyle.SetFontStrikethrough(style.GetFontStrikethrough()); + } + if (style.HasFontFaceName()) { if (!(compareWith && compareWith->HasFontFaceName() && compareWith->GetFontFaceName() == style.GetFontFaceName())) @@ -518,13 +535,13 @@ bool wxTextAttr::Apply(const wxTextAttr& style, const wxTextAttr* compareWith) destStyle.SetFontFamily(style.GetFontFamily()); } - if (style.GetTextColour().Ok() && style.HasTextColour()) + if (style.GetTextColour().IsOk() && style.HasTextColour()) { if (!(compareWith && compareWith->HasTextColour() && compareWith->GetTextColour() == style.GetTextColour())) destStyle.SetTextColour(style.GetTextColour()); } - if (style.GetBackgroundColour().Ok() && style.HasBackgroundColour()) + if (style.GetBackgroundColour().IsOk() && style.HasBackgroundColour()) { if (!(compareWith && compareWith->HasBackgroundColour() && compareWith->GetBackgroundColour() == style.GetBackgroundColour())) destStyle.SetBackgroundColour(style.GetBackgroundColour()); @@ -670,30 +687,30 @@ wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr, if (attr.HasFont()) font = attr.GetFont(); - if ( !font.Ok() ) + if ( !font.IsOk() ) { if (attrDef.HasFont()) font = attrDef.GetFont(); - if ( text && !font.Ok() ) + if ( text && !font.IsOk() ) font = text->GetFont(); } wxColour colFg = attr.GetTextColour(); - if ( !colFg.Ok() ) + if ( !colFg.IsOk() ) { colFg = attrDef.GetTextColour(); - if ( text && !colFg.Ok() ) + if ( text && !colFg.IsOk() ) colFg = text->GetForegroundColour(); } wxColour colBg = attr.GetBackgroundColour(); - if ( !colBg.Ok() ) + if ( !colBg.IsOk() ) { colBg = attrDef.GetBackgroundColour(); - if ( text && !colBg.Ok() ) + if ( text && !colBg.IsOk() ) colBg = text->GetBackgroundColour(); } @@ -773,7 +790,7 @@ bool wxTextAttr::BitlistsEqPartial(int valueA, int valueB, int flags) { int relevantBitsA = valueA & flags; int relevantBitsB = valueB & flags; - return (relevantBitsA != relevantBitsB); + return relevantBitsA == relevantBitsB; } /// Split into paragraph and character styles @@ -940,12 +957,47 @@ int wxTextCtrlBase::overflow(int c) bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) { + bool handled = false; // we have a native implementation for Win32 and so don't need this one #ifndef __WIN32__ wxChar ch = 0; int keycode = event.GetKeyCode(); + + long from, to; + GetSelection(&from,&to); + long insert = GetInsertionPoint(); + long last = GetLastPosition(); + + // catch arrow left and right + switch ( keycode ) { + case WXK_LEFT: + if ( event.ShiftDown() ) + SetSelection( (from > 0 ? from - 1 : 0) , to ); + else + { + if ( from != to ) + insert = from; + else if ( insert > 0 ) + insert -= 1; + SetInsertionPoint( insert ); + } + handled = true; + break; + case WXK_RIGHT: + if ( event.ShiftDown() ) + SetSelection( from, (to < last ? to + 1 : last) ); + else + { + if ( from != to ) + insert = to; + else if ( insert < last ) + insert += 1; + SetInsertionPoint( insert ); + } + handled = true; + break; case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: @@ -991,6 +1043,7 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) const long pos = GetInsertionPoint(); if ( pos < GetLastPosition() ) Remove(pos, pos + 1); + handled = true; } break; @@ -1000,6 +1053,7 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) const long pos = GetInsertionPoint(); if ( pos > 0 ) Remove(pos - 1, pos); + handled = true; } break; @@ -1031,13 +1085,13 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) { WriteText(ch); - return true; + handled = true; } #else // __WIN32__ wxUnusedVar(event); #endif // !__WIN32__/__WIN32__ - return false; + return handled; } // do the window-specific processing after processing the update event @@ -1084,6 +1138,19 @@ wxTextAreaBase::HitTest(const wxPoint& WXUNUSED(pt), long * WXUNUSED(pos)) const return wxTE_HT_UNKNOWN; } +wxPoint wxTextAreaBase::PositionToCoords(long pos) const +{ + wxCHECK_MSG( IsValidPosition(pos), wxDefaultPosition, + wxS("Position argument out of range.") ); + + return DoPositionToCoords(pos); +} + +wxPoint wxTextAreaBase::DoPositionToCoords(long WXUNUSED(pos)) const +{ + return wxDefaultPosition; +} + #else // !wxUSE_TEXTCTRL // define this one even if !wxUSE_TEXTCTRL because it is also used by other diff --git a/Externals/wxWidgets3/src/common/textentrycmn.cpp b/Externals/wxWidgets3/src/common/textentrycmn.cpp index 281086db98..a344f8319d 100644 --- a/Externals/wxWidgets3/src/common/textentrycmn.cpp +++ b/Externals/wxWidgets3/src/common/textentrycmn.cpp @@ -3,7 +3,7 @@ // Purpose: wxTextEntryBase implementation // Author: Vadim Zeitlin // Created: 2007-09-26 -// RCS-ID: $Id: textentrycmn.cpp 65552 2010-09-15 22:10:20Z VZ $ +// RCS-ID: $Id: textentrycmn.cpp 67515 2011-04-16 17:27:34Z VZ $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -31,6 +31,7 @@ #endif //WX_PRECOMP #include "wx/textentry.h" +#include "wx/textcompleter.h" #include "wx/clipbrd.h" // ---------------------------------------------------------------------------- @@ -368,4 +369,39 @@ bool wxTextEntryBase::SendTextUpdatedEvent(wxWindow *win) return win->HandleWindowEvent(event); } +// ---------------------------------------------------------------------------- +// auto-completion stubs +// ---------------------------------------------------------------------------- + +wxTextCompleter::~wxTextCompleter() +{ +} + +bool wxTextCompleterSimple::Start(const wxString& prefix) +{ + m_index = 0; + m_completions.clear(); + GetCompletions(prefix, m_completions); + + return !m_completions.empty(); +} + +wxString wxTextCompleterSimple::GetNext() +{ + if ( m_index == m_completions.size() ) + return wxString(); + + return m_completions[m_index++]; +} + +bool wxTextEntryBase::DoAutoCompleteCustom(wxTextCompleter *completer) +{ + // We don't do anything here but we still need to delete the completer for + // consistency with the ports that do implement this method and take + // ownership of the pointer. + delete completer; + + return false; +} + #endif // wxUSE_TEXTCTRL || wxUSE_COMBOBOX diff --git a/Externals/wxWidgets3/src/common/time.cpp b/Externals/wxWidgets3/src/common/time.cpp new file mode 100644 index 0000000000..0be9306a0b --- /dev/null +++ b/Externals/wxWidgets3/src/common/time.cpp @@ -0,0 +1,372 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/common/time.cpp +// Purpose: Implementation of time-related functions. +// Author: Vadim Zeitlin +// Created: 2011-11-26 +// RCS-ID: $Id: time.cpp 70796 2012-03-04 00:29:31Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#include "wx/time.h" + +#ifndef WX_PRECOMP + #ifdef __WINDOWS__ + #include "wx/msw/wrapwin.h" + #endif + #include "wx/intl.h" + #include "wx/log.h" +#endif + +#ifndef WX_GMTOFF_IN_TM + // Define it for some systems which don't (always) use configure but are + // known to have tm_gmtoff field. + #if defined(__DARWIN__) + #define WX_GMTOFF_IN_TM + #endif +#endif + +#if defined(__VISAGECPP__) && !defined(HAVE_FTIME) + #define HAVE_FTIME +# if __IBMCPP__ >= 400 + # define ftime(x) _ftime(x) +# endif +#endif + +#if defined(__MWERKS__) && defined(__WINDOWS__) +# undef HAVE_FTIME +# undef HAVE_GETTIMEOFDAY +#endif + +#ifndef __WXWINCE__ +#include +#else +#include "wx/msw/private.h" +#include "wx/msw/wince/time.h" +#endif + + +#if !defined(__WXMAC__) && !defined(__WXWINCE__) + #include // for time_t +#endif + +#if defined(HAVE_GETTIMEOFDAY) + #include + #include +#elif defined(HAVE_FTIME) + #include +#endif + +#if defined(__MWERKS__) && wxUSE_UNICODE + #include +#endif + +#if defined(__DJGPP__) || defined(__WINE__) + #include + #include +#endif + +namespace +{ + +const int MILLISECONDS_PER_SECOND = 1000; +const int MICROSECONDS_PER_MILLISECOND = 1000; +const int MICROSECONDS_PER_SECOND = 1000*1000; + +} // anonymous namespace + +// ============================================================================ +// implementation +// ============================================================================ + +// NB: VC8 safe time functions could/should be used for wxMSW as well probably +#if defined(__WXWINCE__) && defined(__VISUALC8__) + +struct tm *wxLocaltime_r(const time_t *t, struct tm* tm) +{ + __time64_t t64 = *t; + return _localtime64_s(tm, &t64) == 0 ? tm : NULL; +} + +struct tm *wxGmtime_r(const time_t* t, struct tm* tm) +{ + __time64_t t64 = *t; + return _gmtime64_s(tm, &t64) == 0 ? tm : NULL; +} + +#else // !wxWinCE with VC8 + +#if (!defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R)) && wxUSE_THREADS && !defined(__WINDOWS__) +static wxMutex timeLock; +#endif + +#ifndef HAVE_LOCALTIME_R +struct tm *wxLocaltime_r(const time_t* ticks, struct tm* temp) +{ +#if wxUSE_THREADS && !defined(__WINDOWS__) + // No need to waste time with a mutex on windows since it's using + // thread local storage for localtime anyway. + wxMutexLocker locker(timeLock); +#endif + + // Borland CRT crashes when passed 0 ticks for some reason, see SF bug 1704438 +#ifdef __BORLANDC__ + if ( !*ticks ) + return NULL; +#endif + + const tm * const t = localtime(ticks); + if ( !t ) + return NULL; + + memcpy(temp, t, sizeof(struct tm)); + return temp; +} +#endif // !HAVE_LOCALTIME_R + +#ifndef HAVE_GMTIME_R +struct tm *wxGmtime_r(const time_t* ticks, struct tm* temp) +{ +#if wxUSE_THREADS && !defined(__WINDOWS__) + // No need to waste time with a mutex on windows since it's + // using thread local storage for gmtime anyway. + wxMutexLocker locker(timeLock); +#endif + +#ifdef __BORLANDC__ + if ( !*ticks ) + return NULL; +#endif + + const tm * const t = gmtime(ticks); + if ( !t ) + return NULL; + + memcpy(temp, gmtime(ticks), sizeof(struct tm)); + return temp; +} +#endif // !HAVE_GMTIME_R + +#endif // wxWinCE with VC8/other platforms + +// returns the time zone in the C sense, i.e. the difference UTC - local +// (in seconds) +int wxGetTimeZone() +{ +#ifdef WX_GMTOFF_IN_TM + // set to true when the timezone is set + static bool s_timezoneSet = false; + static long gmtoffset = LONG_MAX; // invalid timezone + + // ensure that the timezone variable is set by calling wxLocaltime_r + if ( !s_timezoneSet ) + { + // just call wxLocaltime_r() instead of figuring out whether this + // system supports tzset(), _tzset() or something else + time_t t = time(NULL); + struct tm tm; + + wxLocaltime_r(&t, &tm); + s_timezoneSet = true; + + // note that GMT offset is the opposite of time zone and so to return + // consistent results in both WX_GMTOFF_IN_TM and !WX_GMTOFF_IN_TM + // cases we have to negate it + gmtoffset = -tm.tm_gmtoff; + + // this function is supposed to return the same value whether DST is + // enabled or not, so we need to use an additional offset if DST is on + // as tm_gmtoff already does include it + if ( tm.tm_isdst ) + gmtoffset += 3600; + } + return (int)gmtoffset; +#elif defined(__DJGPP__) || defined(__WINE__) + struct timeb tb; + ftime(&tb); + return tb.timezone*60; +#elif defined(__VISUALC__) + // We must initialize the time zone information before using it (this will + // be done only once internally). + _tzset(); + + // Starting with VC++ 8 timezone variable is deprecated and is not even + // available in some standard library version so use the new function for + // accessing it instead. + #if wxCHECK_VISUALC_VERSION(8) + long t; + _get_timezone(&t); + return t; + #else // VC++ < 8 + return timezone; + #endif +#else // Use some kind of time zone variable. + // In any case we must initialize the time zone before using it. + tzset(); + + #if defined(WX_TIMEZONE) // If WX_TIMEZONE was defined by configure, use it. + return WX_TIMEZONE; + #elif defined(__BORLANDC__) || defined(__MINGW32__) || defined(__VISAGECPP__) + return _timezone; + #elif defined(__MWERKS__) + // This is just plain wrong but apparently MetroWerks runtime didn't have + // any way to get the time zone. + return 28800; + #else // unknown platform -- assume it has timezone + return timezone; + #endif // different time zone variables +#endif // different ways to determine time zone +} + +// Get local time as seconds since 00:00:00, Jan 1st 1970 +long wxGetLocalTime() +{ + struct tm tm; + time_t t0, t1; + + // This cannot be made static because mktime can overwrite it. + // + memset(&tm, 0, sizeof(tm)); + tm.tm_year = 70; + tm.tm_mon = 0; + tm.tm_mday = 5; // not Jan 1st 1970 due to mktime 'feature' + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_isdst = -1; // let mktime guess + + // Note that mktime assumes that the struct tm contains local time. + // + t1 = time(&t1); // now + t0 = mktime(&tm); // origin + + // Return the difference in seconds. + // + if (( t0 != (time_t)-1 ) && ( t1 != (time_t)-1 )) + return (long)difftime(t1, t0) + (60 * 60 * 24 * 4); + + wxLogSysError(_("Failed to get the local system time")); + return -1; +} + +// Get UTC time as seconds since 00:00:00, Jan 1st 1970 +long wxGetUTCTime() +{ + return (long)time(NULL); +} + +#if wxUSE_LONGLONG + +wxLongLong wxGetUTCTimeUSec() +{ +#if defined(__WINDOWS__) + FILETIME ft; + ::GetSystemTimeAsFileTime(&ft); + + // FILETIME is in 100ns or 0.1us since 1601-01-01, transform to us since + // 1970-01-01. + wxLongLong t(ft.dwHighDateTime, ft.dwLowDateTime); + t /= 10; + t -= wxLL(11644473600000000); // Unix - Windows epochs difference in us. + return t; +#else // non-MSW + +#ifdef HAVE_GETTIMEOFDAY + timeval tv; + if ( wxGetTimeOfDay(&tv) != -1 ) + { + wxLongLong val(tv.tv_sec); + val *= MICROSECONDS_PER_SECOND; + val += tv.tv_usec; + return val; + } +#endif // HAVE_GETTIMEOFDAY + + // Fall back to lesser precision function. + return wxGetUTCTimeMillis()*MICROSECONDS_PER_MILLISECOND; +#endif // MSW/!MSW +} + +// Get local time as milliseconds since 00:00:00, Jan 1st 1970 +wxLongLong wxGetUTCTimeMillis() +{ + wxLongLong val = MILLISECONDS_PER_SECOND; + + // If possible, use a function which avoids conversions from + // broken-up time structures to milliseconds +#if defined(__WINDOWS__) + FILETIME ft; + ::GetSystemTimeAsFileTime(&ft); + + // FILETIME is expressed in 100ns (or 0.1us) units since 1601-01-01, + // transform them to ms since 1970-01-01. + wxLongLong t(ft.dwHighDateTime, ft.dwLowDateTime); + t /= 10000; + t -= wxLL(11644473600000); // Unix - Windows epochs difference in ms. + return t; +#elif defined(HAVE_GETTIMEOFDAY) + struct timeval tp; + if ( wxGetTimeOfDay(&tp) != -1 ) + { + val *= tp.tv_sec; + return (val + (tp.tv_usec / MICROSECONDS_PER_MILLISECOND)); + } + else + { + wxLogError(_("wxGetTimeOfDay failed.")); + return 0; + } +#elif defined(HAVE_FTIME) + struct timeb tp; + + // ftime() is void and not int in some mingw32 headers, so don't + // test the return code (well, it shouldn't fail anyhow...) + (void)::ftime(&tp); + val *= tp.time; + return (val + tp.millitm); +#else // no gettimeofday() nor ftime() + // If your platform/compiler does not support ms resolution please + // do NOT just shut off these warnings, drop me a line instead at + // + + #if defined(__VISUALC__) || defined (__WATCOMC__) + #pragma message("wxStopWatch will be up to second resolution!") + #elif defined(__BORLANDC__) + #pragma message "wxStopWatch will be up to second resolution!" + #else + #warning "wxStopWatch will be up to second resolution!" + #endif // compiler + + val *= wxGetUTCTime(); + return val; +#endif // time functions +} + +wxLongLong wxGetLocalTimeMillis() +{ + return wxGetUTCTimeMillis() - wxGetTimeZone()*MILLISECONDS_PER_SECOND; +} + +#else // !wxUSE_LONGLONG + +double wxGetLocalTimeMillis(void) +{ + return (double(clock()) / double(CLOCKS_PER_SEC)) * 1000.0; +} + +#endif // wxUSE_LONGLONG/!wxUSE_LONGLONG diff --git a/Externals/wxWidgets3/src/common/toplvcmn.cpp b/Externals/wxWidgets3/src/common/toplvcmn.cpp index fa3176bb19..5b4dcb3837 100644 --- a/Externals/wxWidgets3/src/common/toplvcmn.cpp +++ b/Externals/wxWidgets3/src/common/toplvcmn.cpp @@ -3,7 +3,7 @@ // Purpose: common (for all platforms) wxTopLevelWindow functions // Author: Julian Smart, Vadim Zeitlin // Created: 01/02/97 -// Id: $Id: toplvcmn.cpp 63171 2010-01-18 00:28:53Z VZ $ +// Id: $Id: toplvcmn.cpp 68366 2011-07-24 22:19:33Z VZ $ // Copyright: (c) 1998 Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -39,11 +39,8 @@ BEGIN_EVENT_TABLE(wxTopLevelWindowBase, wxWindow) EVT_CLOSE(wxTopLevelWindowBase::OnCloseWindow) EVT_SIZE(wxTopLevelWindowBase::OnSize) - WX_EVENT_TABLE_CONTROL_CONTAINER(wxTopLevelWindowBase) END_EVENT_TABLE() -WX_DELEGATE_TO_CONTROL_CONTAINER(wxTopLevelWindowBase, wxWindow) - // ============================================================================ // implementation // ============================================================================ @@ -58,8 +55,6 @@ wxTopLevelWindowBase::wxTopLevelWindowBase() { // Unlike windows, top level windows are created hidden by default. m_isShown = false; - - WX_INIT_CONTROL_CONTAINER(); } wxTopLevelWindowBase::~wxTopLevelWindowBase() @@ -352,7 +347,7 @@ void wxTopLevelWindowBase::SetIcon(const wxIcon& icon) // passing wxNullIcon to SetIcon() is possible (it means that we shouldn't // have any icon), but adding an invalid icon to wxIconBundle is not wxIconBundle icons; - if ( icon.Ok() ) + if ( icon.IsOk() ) icons.AddIcon(icon); SetIcons(icons); diff --git a/Externals/wxWidgets3/src/common/translation.cpp b/Externals/wxWidgets3/src/common/translation.cpp index a278f8aa3e..db59ccd0f2 100644 --- a/Externals/wxWidgets3/src/common/translation.cpp +++ b/Externals/wxWidgets3/src/common/translation.cpp @@ -5,7 +5,7 @@ // Michael N. Filippov // (2003/09/30 - PluralForms support) // Created: 2010-04-23 -// RCS-ID: $Id: translation.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: translation.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -50,7 +50,7 @@ #include "wx/stdpaths.h" #include "wx/hashset.h" -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #endif @@ -986,7 +986,7 @@ bool wxMsgCatalogFile::LoadData(const DataBuffer& data, if ( m_charset == wxS("CHARSET") ) { // "CHARSET" is not valid charset, but lazy translator - m_charset.empty(); + m_charset.clear(); } } } @@ -1440,7 +1440,7 @@ wxString wxTranslations::ChooseLanguageForDomain(const wxString& WXUNUSED(domain namespace { -WX_DECLARE_HASH_SET(wxString, wxStringHash, wxStringEqual, +WX_DECLARE_HASH_SET(wxString, ::wxStringHash, ::wxStringEqual, wxLocaleUntranslatedStrings); } diff --git a/Externals/wxWidgets3/src/common/treebase.cpp b/Externals/wxWidgets3/src/common/treebase.cpp index 92134a0a0c..5bb5455d4b 100644 --- a/Externals/wxWidgets3/src/common/treebase.cpp +++ b/Externals/wxWidgets3/src/common/treebase.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Created: 01/02/97 // Modified: -// Id: $Id: treebase.cpp 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: treebase.cpp 70795 2012-03-04 00:29:21Z VZ $ // Copyright: (c) 1998 Robert Roebling, Julian Smart et al // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -167,6 +167,22 @@ wxTreeEvent::wxTreeEvent(const wxTreeEvent & event) // wxTreeCtrlBase // ---------------------------------------------------------------------------- +wxTreeCtrlBase::wxTreeCtrlBase() +{ + m_imageListNormal = + m_imageListState = NULL; + m_ownsImageListNormal = + m_ownsImageListState = false; + + // arbitrary default + m_spacing = 18; + + // quick DoGetBestSize calculation + m_quickBestSize = true; + + Connect(wxEVT_CHAR_HOOK, wxKeyEventHandler(wxTreeCtrlBase::OnCharHook)); +} + wxTreeCtrlBase::~wxTreeCtrlBase() { if (m_ownsImageListNormal) @@ -335,4 +351,26 @@ bool wxTreeCtrlBase::IsEmpty() const return !GetRootItem().IsOk(); } +void wxTreeCtrlBase::OnCharHook(wxKeyEvent& event) +{ + if ( GetEditControl() ) + { + bool discardChanges = false; + switch ( event.GetKeyCode() ) + { + case WXK_ESCAPE: + discardChanges = true; + // fall through + + case WXK_RETURN: + EndEditLabel(GetFocusedItem(), discardChanges); + + // Do not call Skip() below. + return; + } + } + + event.Skip(); +} + #endif // wxUSE_TREECTRL diff --git a/Externals/wxWidgets3/src/common/txtstrm.cpp b/Externals/wxWidgets3/src/common/txtstrm.cpp index 52865e8ab5..11da612bb9 100644 --- a/Externals/wxWidgets3/src/common/txtstrm.cpp +++ b/Externals/wxWidgets3/src/common/txtstrm.cpp @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux // Modified by: // Created: 28/06/98 -// RCS-ID: $Id: txtstrm.cpp 63244 2010-01-24 10:13:33Z VZ $ +// RCS-ID: $Id: txtstrm.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -336,7 +336,7 @@ wxTextOutputStream::wxTextOutputStream(wxOutputStream& s, wxEOL mode) m_mode = mode; if (m_mode == wxEOL_NATIVE) { -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__WXPM__) m_mode = wxEOL_DOS; #else m_mode = wxEOL_UNIX; @@ -356,7 +356,7 @@ void wxTextOutputStream::SetMode(wxEOL mode) m_mode = mode; if (m_mode == wxEOL_NATIVE) { -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__WXPM__) m_mode = wxEOL_DOS; #else m_mode = wxEOL_UNIX; diff --git a/Externals/wxWidgets3/src/common/uiactioncmn.cpp b/Externals/wxWidgets3/src/common/uiactioncmn.cpp index 85376a86bf..96097c9e27 100644 --- a/Externals/wxWidgets3/src/common/uiactioncmn.cpp +++ b/Externals/wxWidgets3/src/common/uiactioncmn.cpp @@ -4,7 +4,7 @@ // Author: Kevin Ollivier, Steven Lamerton, Vadim Zeitlin // Modified by: // Created: 2010-03-06 -// RCS-ID: $Id: uiactioncmn.cpp 65561 2010-09-17 11:17:55Z DS $ +// RCS-ID: $Id: uiactioncmn.cpp 69960 2011-12-08 15:55:40Z VZ $ // Copyright: (c) Kevin Ollivier // (c) 2010 Steven Lamerton // (c) 2010 Vadim Zeitlin @@ -80,6 +80,51 @@ void wxUIActionSimulator::SimulateModifiers(int modifiers, bool isDown) bool wxUIActionSimulator::Char(int keycode, int modifiers) { + switch(keycode) + { + case '0': + keycode = '0'; + break; + case '1': + keycode = '1'; + break; + case '2': + keycode = '2'; + break; + case '3': + keycode = '3'; + break; + case '4': + keycode = '4'; + break; + case '5': + keycode = '5'; + break; + case '6': + keycode = '6'; + break; + case '7': + keycode = '7'; + break; + case '8': + keycode = '8'; + break; + case '9': + keycode = '9'; + break; + case '+': + keycode = '+'; + break; + case '-': + keycode = '-'; + break; + case '.': + keycode = '.'; + break; + default: + break; + }; + Key(keycode, modifiers, true); Key(keycode, modifiers, false); @@ -91,9 +136,6 @@ bool wxUIActionSimulator::Text(const char *s) while ( *s != '\0' ) { const char ch = *s++; - - wxASSERT_MSG( ch, "Only letters are allowed" ); - if ( !Char(ch, isupper(ch) ? wxMOD_SHIFT : 0) ) return false; } diff --git a/Externals/wxWidgets3/src/common/utilscmn.cpp b/Externals/wxWidgets3/src/common/utilscmn.cpp index c4d1d6e152..6fdb219826 100644 --- a/Externals/wxWidgets3/src/common/utilscmn.cpp +++ b/Externals/wxWidgets3/src/common/utilscmn.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 29/01/98 -// RCS-ID: $Id: utilscmn.cpp 67129 2011-03-05 12:21:20Z SC $ +// RCS-ID: $Id: utilscmn.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) 1998 Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -76,26 +76,22 @@ #include "wx/statusbr.h" #endif // wxUSE_GUI -#ifndef __WXPALMOS5__ #ifndef __WXWINCE__ #include #else #include "wx/msw/wince/time.h" #endif -#endif // ! __WXPALMOS5__ #ifdef __WXMAC__ #include "wx/osx/private.h" #endif -#ifndef __WXPALMOS5__ #if !defined(__MWERKS__) && !defined(__WXWINCE__) #include #include #endif -#endif // ! __WXPALMOS5__ -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/private.h" #include "wx/filesys.h" #endif @@ -354,7 +350,7 @@ void wxPlatform::ClearPlatforms() bool wxPlatform::Is(int platform) { -#ifdef __WXMSW__ +#ifdef __WINDOWS__ if (platform == wxOS_WINDOWS) return true; #endif @@ -394,10 +390,6 @@ bool wxPlatform::Is(int platform) if (platform == wxOS_UNIX) return true; #endif -#ifdef __WXMGL__ - if (platform == wxPORT_MGL) - return true; -#endif #ifdef __OS2__ if (platform == wxOS_OS2) return true; @@ -580,10 +572,21 @@ bool wxGetEnvMap(wxEnvVariableHashMap *map) #else // non-MSVC non-Mac // Not sure if other compilers have _tenviron so use the (more standard) // ANSI version only for them. -#ifdef __BSD__ - // POSIX, but not in an include file + + // Both POSIX and Single UNIX Specification say that this variable must + // exist but not that it must be declared anywhere and, indeed, it's not + // declared in several common systems (some BSDs, Solaris with native CC) + // so we (re)declare it ourselves to deal with these cases. However we do + // not do this under MSW where there can be DLL-related complications, i.e. + // the variable might be DLL-imported or not. Luckily we don't have to + // worry about this as all MSW compilers do seem to define it in their + // standard headers anyhow so we can just rely on already having the + // correct declaration. And if this turns out to be wrong, we can always + // add a configure test checking whether it is declared later. +#ifndef __WINDOWS__ extern char **environ; -#endif +#endif // !__WINDOWS__ + char **env = environ; #endif @@ -812,8 +815,8 @@ typedef struct smaller partition. This *guarantees* no more than log (n) stack size is needed (actually O(1) in this case)! */ -void wxQsort(void *const pbase, size_t total_elems, - size_t size, CMPFUNCDATA cmp, const void* user_data) +void wxQsort(void* pbase, size_t total_elems, + size_t size, wxSortCallback cmp, const void* user_data) { register char *base_ptr = (char *) pbase; const size_t max_thresh = MAX_THRESH * size; @@ -995,7 +998,7 @@ bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) ) // Launch default browser // ---------------------------------------------------------------------------- -#if defined(__WXMSW__) +#if defined(__WINDOWS__) // implemented in a port-specific utils source file: bool wxDoLaunchDefaultBrowser(const wxString& url, const wxString& scheme, int flags); @@ -1061,7 +1064,7 @@ static bool DoLaunchDefaultBrowserHelper(const wxString& urlOrig, int flags) // (e.g. "C:\\test.txt" when parsed by wxURI reports a scheme == "C") bool hasValidScheme = uri.HasScheme() && uri.GetScheme().length() > 1; -#if defined(__WXMSW__) +#if defined(__WINDOWS__) // NOTE: when testing wxMSW's wxLaunchDefaultBrowser all possible forms // of the URL/flags should be tested; e.g.: @@ -1361,6 +1364,8 @@ int wxMessageBox(const wxString& message, const wxString& caption, long style, return wxNO; case wxID_CANCEL: return wxCANCEL; + case wxID_HELP: + return wxHELP; } wxFAIL_MSG( wxT("unexpected return code from wxMessageDialog") ); @@ -1406,7 +1411,7 @@ wxVersionInfo wxGetLibraryVersionInfo() wxMINOR_VERSION, wxRELEASE_NUMBER, msg, - wxS("Copyright (c) 1995-2010 wxWidgets team")); + wxS("Copyright (c) 1995-2011 wxWidgets team")); } void wxInfoMessageBox(wxWindow* parent) @@ -1536,7 +1541,7 @@ wxColour wxGetColourFromUser(wxWindow *parent, wxFont wxGetFontFromUser(wxWindow *parent, const wxFont& fontInit, const wxString& caption) { wxFontData data; - if ( fontInit.Ok() ) + if ( fontInit.IsOk() ) { data.SetInitialFont(fontInit); } diff --git a/Externals/wxWidgets3/src/common/valgen.cpp b/Externals/wxWidgets3/src/common/valgen.cpp index fa04139d2f..7bbdc13088 100644 --- a/Externals/wxWidgets3/src/common/valgen.cpp +++ b/Externals/wxWidgets3/src/common/valgen.cpp @@ -4,7 +4,7 @@ // Author: Kevin Smith // Modified by: // Created: Jan 22 1999 -// RCS-ID: $Id: valgen.cpp 66533 2011-01-03 11:23:49Z VZ $ +// RCS-ID: $Id: valgen.cpp 68225 2011-07-11 14:51:32Z VZ $ // Copyright: (c) 1999 Kevin Smith // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -46,6 +46,7 @@ #if wxUSE_TOGGLEBTN #include "wx/tglbtn.h" #endif +#include "wx/filename.h" #include "wx/valgen.h" @@ -83,6 +84,24 @@ wxGenericValidator::wxGenericValidator(wxDateTime *val) m_pDateTime = val; } +wxGenericValidator::wxGenericValidator(wxFileName *val) +{ + Initialize(); + m_pFileName = val; +} + +wxGenericValidator::wxGenericValidator(float *val) +{ + Initialize(); + m_pFloat = val; +} + +wxGenericValidator::wxGenericValidator(double *val) +{ + Initialize(); + m_pDouble = val; +} + #endif // wxUSE_DATETIME wxGenericValidator::wxGenericValidator(const wxGenericValidator& val) @@ -102,6 +121,9 @@ bool wxGenericValidator::Copy(const wxGenericValidator& val) #if wxUSE_DATETIME m_pDateTime = val.m_pDateTime; #endif // wxUSE_DATETIME + m_pFileName = val.m_pFileName; + m_pFloat = val.m_pFloat; + m_pDouble = val.m_pDouble; return true; } @@ -321,6 +343,21 @@ bool wxGenericValidator::TransferToWindow(void) pControl->SetValue(str); return true; } + else if (m_pFileName) + { + pControl->SetValue(m_pFileName->GetFullPath()); + return true; + } + else if (m_pFloat) + { + pControl->SetValue(wxString::Format(wxT("%g"), *m_pFloat)); + return true; + } + else if (m_pDouble) + { + pControl->SetValue(wxString::Format(wxT("%g"), *m_pDouble)); + return true; + } } else #endif @@ -582,6 +619,21 @@ bool wxGenericValidator::TransferFromWindow(void) *m_pInt = wxAtoi(pControl->GetValue()); return true; } + else if (m_pFileName) + { + m_pFileName->Assign(pControl->GetValue()); + return true; + } + else if (m_pFloat) + { + *m_pFloat = (float)wxAtof(pControl->GetValue()); + return true; + } + else if (m_pDouble) + { + *m_pDouble = wxAtof(pControl->GetValue()); + return true; + } } else #endif @@ -645,13 +697,16 @@ bool wxGenericValidator::TransferFromWindow(void) */ void wxGenericValidator::Initialize() { - m_pBool = 0; - m_pInt = 0; - m_pString = 0; - m_pArrayInt = 0; + m_pBool = NULL; + m_pInt = NULL; + m_pString = NULL; + m_pArrayInt = NULL; #if wxUSE_DATETIME - m_pDateTime = 0; + m_pDateTime = NULL; #endif // wxUSE_DATETIME + m_pFileName = NULL; + m_pFloat = NULL; + m_pDouble = NULL; } #endif // wxUSE_VALIDATORS diff --git a/Externals/wxWidgets3/src/common/webview.cpp b/Externals/wxWidgets3/src/common/webview.cpp new file mode 100644 index 0000000000..79524c245b --- /dev/null +++ b/Externals/wxWidgets3/src/common/webview.cpp @@ -0,0 +1,119 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: webview.cpp +// Purpose: Common interface and events for web view component +// Author: Marianne Gagnon +// Id: $Id: webview.cpp 69981 2011-12-11 05:36:52Z PC $ +// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_WEBVIEW + +#if defined(__BORLANDC__) + #pragma hdrstop +#endif + +#include "wx/webview.h" + +#if defined(__WXOSX_COCOA__) || defined(__WXOSX_CARBON__) +#include "wx/osx/webview_webkit.h" +#elif defined(__WXGTK__) +#include "wx/gtk/webview_webkit.h" +#elif defined(__WXMSW__) +#include "wx/msw/webview_ie.h" +#endif + +// DLL options compatibility check: +#include "wx/app.h" +WX_CHECK_BUILD_OPTIONS("wxWEBVIEW") + +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewNameStr[] = "wxWebView"; +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewDefaultURLStr[] = "about:blank"; + +wxIMPLEMENT_ABSTRACT_CLASS(wxWebView, wxControl); +wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewEvent, wxCommandEvent); + +wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebViewEvent ); + +// static +wxWebView* wxWebView::New(wxWebViewBackend backend) +{ + switch (backend) + { + #if defined(wxUSE_WEBVIEW_WEBKIT) && \ + (defined(__WXGTK__) || defined(__WXOSX__)) + case wxWEB_VIEW_BACKEND_WEBKIT: + return new wxWebViewWebKit(); + #endif + + #if wxUSE_WEBVIEW_IE + case wxWEB_VIEW_BACKEND_IE: + return new wxWebViewIE(); + #endif + + case wxWEB_VIEW_BACKEND_DEFAULT: + + #if defined(wxUSE_WEBVIEW_WEBKIT) && \ + (defined(__WXGTK__) || defined(__WXOSX__)) + return new wxWebViewWebKit(); + #endif + + #if wxUSE_WEBVIEW_IE + return new wxWebViewIE(); + #endif + + // fall-through intended + default: + return NULL; + } +} + +// static +wxWebView* wxWebView::New(wxWindow* parent, + wxWindowID id, + const wxString& url, + const wxPoint& pos, + const wxSize& size, + wxWebViewBackend backend, + long style, + const wxString& name) +{ + switch (backend) + { + #if defined(wxUSE_WEBVIEW_WEBKIT) && \ + (defined(__WXGTK__) || defined(__WXOSX__)) + case wxWEB_VIEW_BACKEND_WEBKIT: + return new wxWebViewWebKit(parent, id, url, pos, size, style, name); + #endif + + #if wxUSE_WEBVIEW_IE + case wxWEB_VIEW_BACKEND_IE: + return new wxWebViewIE(parent, id, url, pos, size, style, name); + #endif + + case wxWEB_VIEW_BACKEND_DEFAULT: + + #if defined(wxUSE_WEBVIEW_WEBKIT) && \ + (defined(__WXGTK__) || defined(__WXOSX__)) + return new wxWebViewWebKit(parent, id, url, pos, size, style, name); + #endif + + #if wxUSE_WEBVIEW_IE + return new wxWebViewIE(parent, id, url, pos, size, style, name); + #endif + + // fall-through intended + default: + return NULL; + } +} + +#endif // wxUSE_WEBVIEW diff --git a/Externals/wxWidgets3/src/common/webviewarchivehandler.cpp b/Externals/wxWidgets3/src/common/webviewarchivehandler.cpp new file mode 100644 index 0000000000..1752458ad6 --- /dev/null +++ b/Externals/wxWidgets3/src/common/webviewarchivehandler.cpp @@ -0,0 +1,118 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: webviewfilehandler.cpp +// Purpose: Custom webview handler to allow archive browsing +// Author: Steven Lamerton +// Id: $Id: webviewarchivehandler.cpp 69317 2011-10-06 10:01:17Z SJL $ +// Copyright: (c) 2011 Steven Lamerton +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_WEBVIEW + +#if defined(__BORLANDC__) + #pragma hdrstop +#endif + +#include "wx/webviewarchivehandler.h" +#include "wx/filesys.h" + +//Taken from wx/filesys.cpp +static wxString EscapeFileNameCharsInURL(const char *in) +{ + wxString s; + + for ( const unsigned char *p = (const unsigned char*)in; *p; ++p ) + { + const unsigned char c = *p; + + if ( c == '/' || c == '-' || c == '.' || c == '_' || c == '~' || + (c >= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') ) + { + s << c; + } + else + { + s << wxString::Format("%%%02x", c); + } + } + + return s; +} + +wxWebViewArchiveHandler::wxWebViewArchiveHandler(const wxString& scheme) : + wxWebViewHandler(scheme) +{ + m_fileSystem = new wxFileSystem(); +} + +wxWebViewArchiveHandler::~wxWebViewArchiveHandler() +{ + wxDELETE(m_fileSystem); +} + +wxFSFile* wxWebViewArchiveHandler::GetFile(const wxString &uri) +{ + //If there is a fragment at the end of the path then we need to strip it + //off as not all backends do this for us + wxString path = uri; + size_t hashloc = uri.find('#'); + if(hashloc != wxString::npos) + { + path = uri.substr(0, hashloc); + } + + //We iterate through the string to see if there is a protocol description + size_t start = wxString::npos; + for(size_t i = 0; i < path.length(); i++) + { + if(path[i] == ';' && path.substr(i, 10) == ";protocol=") + { + start = i; + break; + } + } + + //We do not have a protocol string so we just pass the path withouth the + if(start == wxString::npos) + { + size_t doubleslash = path.find("//"); + //The path is incorrectly formed without // after the scheme + if(doubleslash == wxString::npos) + return NULL; + + wxString fspath = "file:" + + EscapeFileNameCharsInURL(path.substr(doubleslash + 2).c_str()); + return m_fileSystem->OpenFile(fspath); + } + //Otherwise we need to extract the protocol + else + { + size_t end = path.find('/', start); + //For the path to be valid there must to a path after the protocol + if(end == wxString::npos) + { + return NULL; + } + wxString mainpath = path.substr(0, start); + wxString archivepath = path.substr(end); + wxString protstring = path.substr(start, end - start); + wxString protocol = protstring.substr(10); + //We can now construct the correct path + size_t doubleslash = path.find("//"); + //The path is incorrectly formed without // after the first protocol + if(doubleslash == wxString::npos) + return NULL; + + wxString fspath = "file:" + + EscapeFileNameCharsInURL(mainpath.substr(doubleslash + 2).c_str()) + + "#" + protocol +":" + archivepath; + return m_fileSystem->OpenFile(fspath); + } +} + +#endif // wxUSE_WEBVIEW diff --git a/Externals/wxWidgets3/src/common/wincmn.cpp b/Externals/wxWidgets3/src/common/wincmn.cpp index 693af6563b..0abcc2778d 100644 --- a/Externals/wxWidgets3/src/common/wincmn.cpp +++ b/Externals/wxWidgets3/src/common/wincmn.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart, Vadim Zeitlin // Modified by: // Created: 13/07/98 -// RCS-ID: $Id: wincmn.cpp 67285 2011-03-22 17:15:38Z VZ $ +// RCS-ID: $Id: wincmn.cpp 70838 2012-03-07 23:50:21Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -75,7 +75,7 @@ #include "wx/platinfo.h" #include "wx/private/window.h" -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #endif @@ -554,7 +554,14 @@ void wxWindowBase::SendDestroyEvent() bool wxWindowBase::Destroy() { - SendDestroyEvent(); + // If our handle is invalid, it means that this window has never been + // created, either because creating it failed or, more typically, because + // this wxWindow object was default-constructed and its Create() method had + // never been called. As we didn't send wxWindowCreateEvent in this case + // (which is sent after successful creation), don't send the matching + // wxWindowDestroyEvent neither. + if ( GetHandle() ) + SendDestroyEvent(); delete this; @@ -1521,7 +1528,7 @@ wxColour wxWindowBase::GetBackgroundColour() const // wxWidgets versions where GetBackgroundColour() always returned // something -- so give them something even if it doesn't make sense // for this window (e.g. it has a themed background) - if ( !colBg.Ok() ) + if ( !colBg.IsOk() ) colBg = GetClassDefaultAttributes().colBg; return colBg; @@ -1533,7 +1540,7 @@ wxColour wxWindowBase::GetBackgroundColour() const wxColour wxWindowBase::GetForegroundColour() const { // logic is the same as above - if ( !m_hasFgCol && !m_foregroundColour.Ok() ) + if ( !m_hasFgCol && !m_foregroundColour.IsOk() ) { wxColour colFg = GetDefaultAttributes().colFg; @@ -1546,6 +1553,39 @@ wxColour wxWindowBase::GetForegroundColour() const return m_foregroundColour; } +bool wxWindowBase::SetBackgroundStyle(wxBackgroundStyle style) +{ + // The checks below shouldn't be triggered if we're not really changing the + // style. + if ( style == m_backgroundStyle ) + return true; + + // Transparent background style can be only set before creation because of + // wxGTK limitation. + wxCHECK_MSG( (style != wxBG_STYLE_TRANSPARENT) || !GetHandle(), + false, + "wxBG_STYLE_TRANSPARENT style can only be set before " + "Create()-ing the window." ); + + // And once it is set, wxBG_STYLE_TRANSPARENT can't be unset. + wxCHECK_MSG( (m_backgroundStyle != wxBG_STYLE_TRANSPARENT) || + (style == wxBG_STYLE_TRANSPARENT), + false, + "wxBG_STYLE_TRANSPARENT can't be unset once it was set." ); + + m_backgroundStyle = style; + + return true; +} + +bool wxWindowBase::IsTransparentBackgroundSupported(wxString *reason) const +{ + if ( reason ) + *reason = _("This platform does not support background transparency."); + + return false; +} + bool wxWindowBase::SetBackgroundColour( const wxColour &colour ) { if ( colour == m_backgroundColour ) @@ -1555,7 +1595,7 @@ bool wxWindowBase::SetBackgroundColour( const wxColour &colour ) m_inheritBgCol = m_hasBgCol; m_backgroundColour = colour; - SetThemeEnabled( !m_hasBgCol && !m_foregroundColour.Ok() ); + SetThemeEnabled( !m_hasBgCol && !m_foregroundColour.IsOk() ); return true; } @@ -1567,7 +1607,7 @@ bool wxWindowBase::SetForegroundColour( const wxColour &colour ) m_hasFgCol = colour.IsOk(); m_inheritFgCol = m_hasFgCol; m_foregroundColour = colour; - SetThemeEnabled( !m_hasFgCol && !m_backgroundColour.Ok() ); + SetThemeEnabled( !m_hasFgCol && !m_backgroundColour.IsOk() ); return true; } @@ -1876,6 +1916,7 @@ wxWindowBase::FindWindowById( long id, const wxWindow* parent ) // dialog oriented functions // ---------------------------------------------------------------------------- +#if WXWIN_COMPATIBILITY_2_8 void wxWindowBase::MakeModal(bool modal) { // Disable all other windows @@ -1892,6 +1933,7 @@ void wxWindowBase::MakeModal(bool modal) } } } +#endif // WXWIN_COMPATIBILITY_2_8 bool wxWindowBase::Validate() { @@ -2114,6 +2156,13 @@ void wxWindowBase::DoSetToolTip(wxToolTip *tooltip) } } +bool wxWindowBase::CopyToolTip(wxToolTip *tip) +{ + SetToolTip(tip ? new wxToolTip(tip->GetTip()) : NULL); + + return tip != NULL; +} + #endif // wxUSE_TOOLTIPS // ---------------------------------------------------------------------------- @@ -2560,17 +2609,12 @@ void wxWindowBase::GetPositionConstraint(int *x, int *y) const void wxWindowBase::AdjustForParentClientOrigin(int& x, int& y, int sizeFlags) const { - // don't do it for the dialogs/frames - they float independently of their - // parent - if ( !IsTopLevel() ) + wxWindow *parent = GetParent(); + if ( !(sizeFlags & wxSIZE_NO_ADJUSTMENTS) && parent ) { - wxWindow *parent = GetParent(); - if ( !(sizeFlags & wxSIZE_NO_ADJUSTMENTS) && parent ) - { - wxPoint pt(parent->GetClientAreaOrigin()); - x += pt.x; - y += pt.y; - } + wxPoint pt(parent->GetClientAreaOrigin()); + x += pt.x; + y += pt.y; } } @@ -2644,7 +2688,7 @@ bool wxWindowBase::SendIdleEvents(wxIdleEvent& event) void wxWindowBase::OnInternalIdle() { - if (wxUpdateUIEvent::CanUpdate(this) && IsShownOnScreen()) + if ( wxUpdateUIEvent::CanUpdate(this) ) UpdateWindowUI(wxUPDATE_UI_FROMIDLE); } @@ -2967,19 +3011,19 @@ wxAccessible* wxWindowBase::CreateAccessible() // list classes implementation // ---------------------------------------------------------------------------- -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxWindowList) -#else // !wxUSE_STL +#else // !wxUSE_STD_CONTAINERS void wxWindowListNode::DeleteData() { delete (wxWindow *)GetData(); } -#endif // wxUSE_STL/!wxUSE_STL +#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS // ---------------------------------------------------------------------------- // borders @@ -3283,8 +3327,8 @@ void wxWindowBase::DoMoveInTabOrder(wxWindow *win, WindowOrder move) wxWindowList::compatibility_iterator i = siblings.Find(win); wxCHECK_RET( i, wxT("MoveBefore/AfterInTabOrder(): win is not a sibling") ); - // unfortunately, when wxUSE_STL == 1 DetachNode() is not implemented so we - // can't just move the node around + // unfortunately, when wxUSE_STD_CONTAINERS == 1 DetachNode() is not + // implemented so we can't just move the node around wxWindow *self = (wxWindow *)this; siblings.DeleteObject(self); if ( move == OrderAfter ) @@ -3314,9 +3358,9 @@ void wxWindowBase::DoMoveInTabOrder(wxWindow *win, WindowOrder move) bool wxWindowBase::HasFocus() const { - wxWindowBase *win = DoFindFocus(); - return win == this || - win == wxConstCast(this, wxWindowBase)->GetMainWindowOfCompositeControl(); + wxWindowBase* const win = DoFindFocus(); + return win && + (this == win || this == win->GetMainWindowOfCompositeControl()); } // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/common/windowid.cpp b/Externals/wxWidgets3/src/common/windowid.cpp index 9cab454730..e4105c0eaf 100644 --- a/Externals/wxWidgets3/src/common/windowid.cpp +++ b/Externals/wxWidgets3/src/common/windowid.cpp @@ -3,7 +3,7 @@ // Purpose: wxWindowID class - a class for managing window ids // Author: Brian Vanderburg II // Created: 2007-09-21 -// RCS-ID: $Id: windowid.cpp 67211 2011-03-16 07:06:43Z SC $ +// RCS-ID: $Id: windowid.cpp 69682 2011-11-05 11:24:04Z VZ $ // Copyright: (c) 2007 Brian Vanderburg II // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -22,6 +22,8 @@ #include "wx/intl.h" #endif //WX_PRECOMP +#include "wx/hashmap.h" + // Not needed, included in defs.h // #include "wx/windowid.h" @@ -38,11 +40,22 @@ namespace // meanwhile static const wxUint8 ID_FREE = 0; static const wxUint8 ID_STARTCOUNT = 1; -static const wxUint8 ID_MAXCOUNT = 254; +static const wxUint8 ID_COUNTTOOLARGE = 254; static const wxUint8 ID_RESERVED = 255; +// we use a two level count, most IDs will be used less than ID_COUNTTOOLARGE-1 +// thus we store their count directly in this array, however when the same ID +// is reused a great number of times (more than or equal to ID_COUNTTOOLARGE), +// the hash map stores the actual count wxUint8 gs_autoIdsRefCount[wxID_AUTO_HIGHEST - wxID_AUTO_LOWEST + 1] = { 0 }; +// NB: this variable is allocated (again) only when an ID gets at least +// ID_COUNTTOOLARGE refs, and is freed when the latest entry in the map gets +// freed. The cell storing the count for an ID is freed only when its count +// gets to zero (not when it goes below ID_COUNTTOOLARGE, so as to avoid +// degenerate cases) +wxLongToLongHashMap *gs_autoIdsLargeRefCount = NULL; + // this is an optimization used until we wrap around wxID_AUTO_HIGHEST: if this // value is < wxID_AUTO_HIGHEST we know that we haven't wrapped yet and so can // allocate the ids simply by incrementing it @@ -81,7 +94,10 @@ int GetIdRefCount(wxWindowID winid) wxT("invalid id range")); winid -= wxID_AUTO_LOWEST; - return gs_autoIdsRefCount[winid]; + int refCount = gs_autoIdsRefCount[winid]; + if (refCount == ID_COUNTTOOLARGE) + refCount = (*gs_autoIdsLargeRefCount)[winid]; + return refCount; } // Increase the count for an id @@ -92,16 +108,32 @@ void IncIdRefCount(wxWindowID winid) winid -= wxID_AUTO_LOWEST; - wxCHECK_RET(gs_autoIdsRefCount[winid] != ID_MAXCOUNT, wxT("id count at max")); wxCHECK_RET(gs_autoIdsRefCount[winid] != ID_FREE, wxT("id should first be reserved")); if(gs_autoIdsRefCount[winid] == ID_RESERVED) + { gs_autoIdsRefCount[winid] = ID_STARTCOUNT; + } + else if (gs_autoIdsRefCount[winid] >= ID_COUNTTOOLARGE-1) + { + if (gs_autoIdsRefCount[winid] == ID_COUNTTOOLARGE-1) + { + // we need to allocate a cell, and maybe the hash map itself + if (!gs_autoIdsLargeRefCount) + gs_autoIdsLargeRefCount = new wxLongToLongHashMap; + (*gs_autoIdsLargeRefCount)[winid] = ID_COUNTTOOLARGE-1; + + gs_autoIdsRefCount[winid] = ID_COUNTTOOLARGE; + } + ++(*gs_autoIdsLargeRefCount)[winid]; + } else + { gs_autoIdsRefCount[winid]++; + } wxLogTrace(wxTRACE_WINDOWID, wxT("Increasing ref count of ID %d to %d"), - winid + wxID_AUTO_LOWEST, gs_autoIdsRefCount[winid]); + winid + wxID_AUTO_LOWEST, GetIdRefCount(winid + wxID_AUTO_LOWEST)); } // Decrease the count for an id @@ -121,11 +153,24 @@ void DecIdRefCount(wxWindowID winid) wxFAIL_MSG(wxT("reserve id being decreased")); gs_autoIdsRefCount[winid] = ID_FREE; } + else if(gs_autoIdsRefCount[winid] == ID_COUNTTOOLARGE) + { + long &largeCount = (*gs_autoIdsLargeRefCount)[winid]; + --largeCount; + if (largeCount == 0) + { + gs_autoIdsLargeRefCount->erase (winid); + gs_autoIdsRefCount[winid] = ID_FREE; + + if (gs_autoIdsLargeRefCount->empty()) + wxDELETE (gs_autoIdsLargeRefCount); + } + } else gs_autoIdsRefCount[winid]--; wxLogTrace(wxTRACE_WINDOWID, wxT("Decreasing ref count of ID %d to %d"), - winid + wxID_AUTO_LOWEST, gs_autoIdsRefCount[winid]); + winid + wxID_AUTO_LOWEST, GetIdRefCount(winid + wxID_AUTO_LOWEST)); } #else // wxUSE_AUTOID_MANAGEMENT diff --git a/Externals/wxWidgets3/src/common/wxcrt.cpp b/Externals/wxWidgets3/src/common/wxcrt.cpp index 8c6147727d..3bf1855968 100644 --- a/Externals/wxWidgets3/src/common/wxcrt.cpp +++ b/Externals/wxWidgets3/src/common/wxcrt.cpp @@ -4,7 +4,7 @@ // Author: Ove Kaven // Modified by: Ron Lee, Francesco Montorsi // Created: 09/04/99 -// RCS-ID: $Id: wxcrt.cpp 65691 2010-09-30 14:30:41Z VZ $ +// RCS-ID: $Id: wxcrt.cpp 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) wxWidgets copyright // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -40,14 +40,12 @@ extern "C" int vswscanf(const wchar_t *, const wchar_t *, va_list); #endif -#ifndef __WXPALMOS5__ #ifndef __WXWINCE__ #include #include #else #include "wx/msw/wince/time.h" #endif -#endif // !__WXPALMOS5__ #ifndef WX_PRECOMP #include "wx/string.h" diff --git a/Externals/wxWidgets3/src/common/xlocale.cpp b/Externals/wxWidgets3/src/common/xlocale.cpp index 2a6326c092..cbca33cf31 100644 --- a/Externals/wxWidgets3/src/common/xlocale.cpp +++ b/Externals/wxWidgets3/src/common/xlocale.cpp @@ -3,7 +3,7 @@ // Purpose: xlocale wrappers/impl to provide some xlocale wrappers // Author: Brian Vanderburg II, Vadim Zeitlin // Created: 2008-01-07 -// RCS-ID: $Id: xlocale.cpp 66054 2010-11-07 13:16:20Z VZ $ +// RCS-ID: $Id: xlocale.cpp 67406 2011-04-06 14:37:32Z VZ $ // Copyright: (c) 2008 Brian Vanderburg II // 2008 Vadim Zeitlin // Licence: wxWindows licence @@ -279,70 +279,91 @@ int wxToupper_l(const wxUniChar& c, const wxXLocale& loc) case !wxHAS_XLOCALE_SUPPORT... */ -/* - Note that this code is similar to (a portion of) wxLocale::IsAvailable code -*/ -#define IMPLEMENT_STRTOX_L_START \ - wxCHECK(loc.IsOk(), 0); \ - \ - /* (Try to) temporary set the 'C' locale */ \ - const char *oldLocale = wxSetlocale(LC_NUMERIC, "C"); \ - if ( !oldLocale ) \ - { \ - /* the current locale was not changed; no need to */ \ - /* restore the previous one... */ \ - errno = EINVAL; \ - /* signal an error (better than nothing) */ \ - return 0; \ +namespace +{ + +// Helper class that changes LC_NUMERIC facet of the global locale in its ctor +// to "C" locale and restores it in its dtor later. +class CNumericLocaleSetter +{ +public: + CNumericLocaleSetter() + : m_oldLocale(wxStrdupA(setlocale(LC_NUMERIC, NULL))) + { + if ( !wxSetlocale(LC_NUMERIC, "C") ) + { + // Setting locale to "C" should really always work. + wxFAIL_MSG( wxS("Couldn't set LC_NUMERIC to \"C\"") ); + } } -#define IMPLEMENT_STRTOX_L_END \ - /* restore the original locale */ \ - wxSetlocale(LC_NUMERIC, oldLocale); \ - return ret; + ~CNumericLocaleSetter() + { + wxSetlocale(LC_NUMERIC, m_oldLocale); + free(m_oldLocale); + } + +private: + char * const m_oldLocale; + + wxDECLARE_NO_COPY_CLASS(CNumericLocaleSetter); +}; + +} // anonymous namespace double wxStrtod_l(const wchar_t* str, wchar_t **endptr, const wxXLocale& loc) { - IMPLEMENT_STRTOX_L_START - double ret = wxStrtod(str, endptr); - IMPLEMENT_STRTOX_L_END + wxCHECK( loc.IsOk(), 0. ); + + CNumericLocaleSetter locSetter; + + return wxStrtod(str, endptr); } double wxStrtod_l(const char* str, char **endptr, const wxXLocale& loc) { - IMPLEMENT_STRTOX_L_START - double ret = wxStrtod(str, endptr); - IMPLEMENT_STRTOX_L_END + wxCHECK( loc.IsOk(), 0. ); + + CNumericLocaleSetter locSetter; + + return wxStrtod(str, endptr); } long wxStrtol_l(const wchar_t* str, wchar_t **endptr, int base, const wxXLocale& loc) { - IMPLEMENT_STRTOX_L_START - long ret = wxStrtol(str, endptr, base); - IMPLEMENT_STRTOX_L_END + wxCHECK( loc.IsOk(), 0 ); + + CNumericLocaleSetter locSetter; + + return wxStrtol(str, endptr, base); } long wxStrtol_l(const char* str, char **endptr, int base, const wxXLocale& loc) { - IMPLEMENT_STRTOX_L_START - long ret = wxStrtol(str, endptr, base); - IMPLEMENT_STRTOX_L_END + wxCHECK( loc.IsOk(), 0 ); + + CNumericLocaleSetter locSetter; + + return wxStrtol(str, endptr, base); } unsigned long wxStrtoul_l(const wchar_t* str, wchar_t **endptr, int base, const wxXLocale& loc) { - IMPLEMENT_STRTOX_L_START - unsigned long ret = wxStrtoul(str, endptr, base); - IMPLEMENT_STRTOX_L_END + wxCHECK( loc.IsOk(), 0 ); + + CNumericLocaleSetter locSetter; + + return wxStrtoul(str, endptr, base); } unsigned long wxStrtoul_l(const char* str, char **endptr, int base, const wxXLocale& loc) { - IMPLEMENT_STRTOX_L_START - unsigned long ret = wxStrtoul(str, endptr, base); - IMPLEMENT_STRTOX_L_END -} + wxCHECK( loc.IsOk(), 0 ); + CNumericLocaleSetter locSetter; + + return wxStrtoul(str, endptr, base); +} #endif // !defined(wxHAS_XLOCALE_SUPPORT) diff --git a/Externals/wxWidgets3/src/common/xti.cpp b/Externals/wxWidgets3/src/common/xti.cpp index 9c6e06d1c8..f69652644c 100644 --- a/Externals/wxWidgets3/src/common/xti.cpp +++ b/Externals/wxWidgets3/src/common/xti.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 27/07/03 -// RCS-ID: $Id: xti.cpp 66651 2011-01-08 10:22:30Z SC $ +// RCS-ID: $Id: xti.cpp 70306 2012-01-09 18:48:39Z VZ $ // Copyright: (c) 1997 Julian Smart // (c) 2003 Stefan Csomor // Licence: wxWindows licence @@ -117,13 +117,13 @@ const wxChar * wxEnumData::GetEnumMemberNameByIndex( int idx ) const template<> void wxStringReadValue(const wxString &s, bool &data ) { int intdata; - wxSscanf(s, _T("%d"), &intdata ); + wxSscanf(s, wxT("%d"), &intdata ); data = (bool)(intdata != 0); } template<> void wxStringWriteValue(wxString &s, const bool &data ) { - s = wxString::Format(_T("%d"), data ); + s = wxString::Format(wxT("%d"), data ); } // char @@ -131,13 +131,13 @@ template<> void wxStringWriteValue(wxString &s, const bool &data ) template<> void wxStringReadValue(const wxString &s, char &data ) { int intdata; - wxSscanf(s, _T("%d"), &intdata ); + wxSscanf(s, wxT("%d"), &intdata ); data = char(intdata); } template<> void wxStringWriteValue(wxString &s, const char &data ) { - s = wxString::Format(_T("%d"), data ); + s = wxString::Format(wxT("%d"), data ); } // unsigned char @@ -145,106 +145,106 @@ template<> void wxStringWriteValue(wxString &s, const char &data ) template<> void wxStringReadValue(const wxString &s, unsigned char &data ) { int intdata; - wxSscanf(s, _T("%d"), &intdata ); + wxSscanf(s, wxT("%d"), &intdata ); data = (unsigned char)(intdata); } template<> void wxStringWriteValue(wxString &s, const unsigned char &data ) { - s = wxString::Format(_T("%d"), data ); + s = wxString::Format(wxT("%d"), data ); } // int template<> void wxStringReadValue(const wxString &s, int &data ) { - wxSscanf(s, _T("%d"), &data ); + wxSscanf(s, wxT("%d"), &data ); } template<> void wxStringWriteValue(wxString &s, const int &data ) { - s = wxString::Format(_T("%d"), data ); + s = wxString::Format(wxT("%d"), data ); } // unsigned int template<> void wxStringReadValue(const wxString &s, unsigned int &data ) { - wxSscanf(s, _T("%d"), &data ); + wxSscanf(s, wxT("%d"), &data ); } template<> void wxStringWriteValue(wxString &s, const unsigned int &data ) { - s = wxString::Format(_T("%d"), data ); + s = wxString::Format(wxT("%d"), data ); } // long template<> void wxStringReadValue(const wxString &s, long &data ) { - wxSscanf(s, _T("%ld"), &data ); + wxSscanf(s, wxT("%ld"), &data ); } template<> void wxStringWriteValue(wxString &s, const long &data ) { - s = wxString::Format(_T("%ld"), data ); + s = wxString::Format(wxT("%ld"), data ); } // unsigned long template<> void wxStringReadValue(const wxString &s, unsigned long &data ) { - wxSscanf(s, _T("%ld"), &data ); + wxSscanf(s, wxT("%ld"), &data ); } template<> void wxStringWriteValue(wxString &s, const unsigned long &data ) { - s = wxString::Format(_T("%ld"), data ); + s = wxString::Format(wxT("%ld"), data ); } #ifdef wxLongLong_t template<> void wxStringReadValue(const wxString &s, wxLongLong_t &data ) { - wxSscanf(s, _T("%lld"), &data ); + wxSscanf(s, wxT("%lld"), &data ); } template<> void wxStringWriteValue(wxString &s, const wxLongLong_t &data ) { - s = wxString::Format(_T("%lld"), data ); + s = wxString::Format(wxT("%lld"), data ); } template<> void wxStringReadValue(const wxString &s, wxULongLong_t &data ) { - wxSscanf(s, _T("%lld"), &data ); + wxSscanf(s, wxT("%lld"), &data ); } template<> void wxStringWriteValue(wxString &s, const wxULongLong_t &data ) { - s = wxString::Format(_T("%lld"), data ); + s = wxString::Format(wxT("%lld"), data ); } #endif // float template<> void wxStringReadValue(const wxString &s, float &data ) { - wxSscanf(s, _T("%f"), &data ); + wxSscanf(s, wxT("%f"), &data ); } template<> void wxStringWriteValue(wxString &s, const float &data ) { - s = wxString::Format(_T("%f"), data ); + s = wxString::Format(wxT("%f"), data ); } // double template<> void wxStringReadValue(const wxString &s, double &data ) { - wxSscanf(s, _T("%lf"), &data ); + wxSscanf(s, wxT("%lf"), &data ); } template<> void wxStringWriteValue(wxString &s, const double &data ) { - s = wxString::Format(_T("%lf"), data ); + s = wxString::Format(wxT("%lf"), data ); } // wxString @@ -931,14 +931,14 @@ void wxGenericPropertyAccessor::SetProperty(wxObject *object, const wxAny &value { wxDynamicObject* dynobj = wx_dynamic_cast(wxDynamicObject*, object); wxASSERT_MSG( dynobj, wxT("cannot call wxDynamicClassInfo::SetProperty on an object other than wxDynamicObject") ); - dynobj->SetProperty(m_propertyName, value ); + dynobj->SetProperty(m_propertyName.c_str(), value ); } void wxGenericPropertyAccessor::GetProperty(const wxObject *object, wxAny& value) const { const wxDynamicObject* dynobj = wx_dynamic_cast( const wxDynamicObject * , object ); wxASSERT_MSG( dynobj, wxT("cannot call wxDynamicClassInfo::SetProperty on an object other than wxDynamicObject") ); - value = dynobj->GetProperty( m_propertyName ); + value = dynobj->GetProperty( m_propertyName.c_str() ); } // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/common/xtistrm.cpp b/Externals/wxWidgets3/src/common/xtistrm.cpp index 95b77afe2b..16881d3b7d 100644 --- a/Externals/wxWidgets3/src/common/xtistrm.cpp +++ b/Externals/wxWidgets3/src/common/xtistrm.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 27/07/03 -// RCS-ID: $Id: xtistrm.cpp 66630 2011-01-07 17:49:18Z SC $ +// RCS-ID: $Id: xtistrm.cpp 70306 2012-01-09 18:48:39Z VZ $ // Copyright: (c) 2003 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -289,8 +289,8 @@ void wxObjectWriter::WriteOneProperty( const wxObject *obj, const wxClassInfo* c } else { - wxLogError( _T("Streaming delegates for not already ") - _T("streamed objects not yet supported") ); + wxLogError( wxT("Streaming delegates for not already ") + wxT("streamed objects not yet supported") ); } } } @@ -577,7 +577,7 @@ void wxObjectRuntimeReaderCallback::SetProperty(int objectID, { wxObject *o; o = m_data->GetObject(objectID); - classInfo->SetProperty( o, propertyInfo->GetName(), value ); + classInfo->SetProperty( o, propertyInfo->GetName().c_str(), value ); } void wxObjectRuntimeReaderCallback::SetPropertyAsObject(int objectID, @@ -599,7 +599,7 @@ void wxObjectRuntimeReaderCallback::SetPropertyAsObject(int objectID, valo = dynvalo->GetSuperClassInstance(); } - classInfo->SetProperty( o, propertyInfo->GetName(), + classInfo->SetProperty( o, propertyInfo->GetName().c_str(), valClassInfo->ObjectPtrToAny(valo) ); } @@ -650,7 +650,7 @@ void wxObjectRuntimeReaderCallback::AddToPropertyCollection( int objectID, { wxObject *o; o = m_data->GetObject(objectID); - classInfo->AddToPropertyCollection( o, propertyInfo->GetName(), value ); + classInfo->AddToPropertyCollection( o, propertyInfo->GetName().c_str(), value ); } void wxObjectRuntimeReaderCallback::AddToPropertyCollectionAsObject(int objectID, @@ -674,7 +674,7 @@ void wxObjectRuntimeReaderCallback::AddToPropertyCollectionAsObject(int objectID valo = dynvalo->GetSuperClassInstance(); } - classInfo->AddToPropertyCollection( o, propertyInfo->GetName(), + classInfo->AddToPropertyCollection( o, propertyInfo->GetName().c_str(), valClassInfo->ObjectPtrToAny(valo) ); } diff --git a/Externals/wxWidgets3/src/common/xtixml.cpp b/Externals/wxWidgets3/src/common/xtixml.cpp index 3bb3dd2d14..892d282e74 100644 --- a/Externals/wxWidgets3/src/common/xtixml.cpp +++ b/Externals/wxWidgets3/src/common/xtixml.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 27/07/03 -// RCS-ID: $Id: xtixml.cpp 66728 2011-01-22 14:38:36Z DS $ +// RCS-ID: $Id: xtixml.cpp 68949 2011-08-29 12:33:40Z VZ $ // Copyright: (c) 2003 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -325,7 +325,7 @@ int wxObjectXmlReader::ReadComponent(wxXmlNode *node, wxObjectReaderCallback *ca const wxPropertyInfo* pi = classInfo->FindPropertyInfo( paramName ); if ( pi == 0 ) { - wxLogError( wxString::Format(_("Unkown Property %s"),paramName) ); + wxLogError( wxString::Format(_("Unknown Property %s"),paramName) ); } // if we don't have the value of a create param set in the xml // we use the default value @@ -483,7 +483,7 @@ int wxObjectXmlReader::ReadComponent(wxXmlNode *node, wxObjectReaderCallback *ca wxClassInfo* sinkClassInfo = GetObjectClassInfo( sinkOid ); callbacks->SetConnect( objectID, classInfo, pi, sinkClassInfo, - sinkClassInfo->FindHandlerInfo(handlerName), sinkOid ); + sinkClassInfo->FindHandlerInfo(handlerName.c_str()), sinkOid ); } else { diff --git a/Externals/wxWidgets3/src/common/zipstrm.cpp b/Externals/wxWidgets3/src/common/zipstrm.cpp index a42686d6f8..2e36c4ac1f 100644 --- a/Externals/wxWidgets3/src/common/zipstrm.cpp +++ b/Externals/wxWidgets3/src/common/zipstrm.cpp @@ -2,7 +2,7 @@ // Name: src/common/zipstrm.cpp // Purpose: Streams for Zip files // Author: Mike Wetherell -// RCS-ID: $Id: zipstrm.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: zipstrm.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Mike Wetherell // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -1341,7 +1341,7 @@ void wxZipInputStream::Init(const wxString& file) ffile = static_cast(m_parent_i_stream); wxZipEntryPtr_ entry; - if (ffile->Ok()) { + if (ffile->IsOk()) { do { entry.reset(GetNextEntry()); } diff --git a/Externals/wxWidgets3/src/common/zstream.cpp b/Externals/wxWidgets3/src/common/zstream.cpp index 448be53223..e478441bfa 100644 --- a/Externals/wxWidgets3/src/common/zstream.cpp +++ b/Externals/wxWidgets3/src/common/zstream.cpp @@ -4,7 +4,7 @@ // Author: Guilhem Lavaux // Modified by: Mike Wetherell // Created: 11/07/98 -// RCS-ID: $Id: zstream.cpp 66259 2010-11-25 00:53:44Z VZ $ +// RCS-ID: $Id: zstream.cpp 70796 2012-03-04 00:29:31Z VZ $ // Copyright: (c) Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -32,7 +32,7 @@ // apparently not the case for all MSW makefiles and so, unless we use // configure (which defines __WX_SETUP_H__) or it is explicitly overridden by // the user (who can define wxUSE_ZLIB_H_IN_PATH), we hardcode the path here -#if defined(__WXMSW__) && !defined(__WX_SETUP_H__) && !defined(wxUSE_ZLIB_H_IN_PATH) +#if defined(__WINDOWS__) && !defined(__WX_SETUP_H__) && !defined(wxUSE_ZLIB_H_IN_PATH) #include "../zlib/zlib.h" #else #include "zlib.h" diff --git a/Externals/wxWidgets3/src/generic/aboutdlgg.cpp b/Externals/wxWidgets3/src/generic/aboutdlgg.cpp index 01d6dca7af..b5e507bfd0 100644 --- a/Externals/wxWidgets3/src/generic/aboutdlgg.cpp +++ b/Externals/wxWidgets3/src/generic/aboutdlgg.cpp @@ -3,7 +3,7 @@ // Purpose: implements wxGenericAboutBox() function // Author: Vadim Zeitlin // Created: 2006-10-08 -// RCS-ID: $Id: aboutdlgg.cpp 61534 2009-07-25 22:53:23Z VZ $ +// RCS-ID: $Id: aboutdlgg.cpp 70671 2012-02-22 17:35:21Z JS $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -85,7 +85,7 @@ wxString wxAboutDialogInfo::GetDescriptionAndCredits() const wxIcon wxAboutDialogInfo::GetIcon() const { wxIcon icon = m_icon; - if ( !icon.Ok() && wxTheApp ) + if ( !icon.IsOk() && wxTheApp ) { const wxTopLevelWindow * const tlw = wxDynamicCast(wxTheApp->GetTopWindow(), wxTopLevelWindow); @@ -138,7 +138,7 @@ void wxAboutDialogInfo::SetVersion(const wxString& version, bool wxGenericAboutDialog::Create(const wxAboutDialogInfo& info, wxWindow* parent) { - if ( !wxDialog::Create(parent, wxID_ANY, _("About ") + info.GetName(), + if ( !wxDialog::Create(parent, wxID_ANY, wxString::Format(_("About %s"), info.GetName()), wxDefaultPosition, wxDefaultSize, wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE) ) return false; @@ -196,7 +196,7 @@ bool wxGenericAboutDialog::Create(const wxAboutDialogInfo& info, wxWindow* paren wxSizer *sizerIconAndText = new wxBoxSizer(wxHORIZONTAL); #if wxUSE_STATBMP wxIcon icon = info.GetIcon(); - if ( icon.Ok() ) + if ( icon.IsOk() ) { sizerIconAndText->Add(new wxStaticBitmap(this, wxID_ANY, icon), wxSizerFlags().Border(wxRIGHT)); @@ -220,6 +220,13 @@ bool wxGenericAboutDialog::Create(const wxAboutDialogInfo& info, wxWindow* paren CentreOnParent(); +#if !wxUSE_MODAL_ABOUT_DIALOG + Connect(wxEVT_CLOSE_WINDOW, + wxCloseEventHandler(wxGenericAboutDialog::OnCloseWindow)); + Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEventHandler(wxGenericAboutDialog::OnOK)); +#endif // !wxUSE_MODAL_ABOUT_DIALOG + return true; } @@ -242,6 +249,7 @@ void wxGenericAboutDialog::AddText(const wxString& text) AddControl(new wxStaticText(this, wxID_ANY, text)); } +#if wxUSE_COLLPANE void wxGenericAboutDialog::AddCollapsiblePane(const wxString& title, const wxString& text) { @@ -264,6 +272,25 @@ void wxGenericAboutDialog::AddCollapsiblePane(const wxString& title, // NB: all the wxCollapsiblePanes must be added with a null proportion value m_sizerText->Add(pane, wxSizerFlags(0).Expand().Border(wxBOTTOM)); } +#endif + +#if !wxUSE_MODAL_ABOUT_DIALOG + +void wxGenericAboutDialog::OnCloseWindow(wxCloseEvent& event) +{ + Destroy(); + + event.Skip(); +} + +void wxGenericAboutDialog::OnOK(wxCommandEvent& WXUNUSED(event)) +{ + // By default a modeless dialog would be just hidden, destroy this one + // instead. + Destroy(); +} + +#endif // !wxUSE_MODAL_ABOUT_DIALOG // ---------------------------------------------------------------------------- // public functions @@ -271,7 +298,7 @@ void wxGenericAboutDialog::AddCollapsiblePane(const wxString& title, void wxGenericAboutBox(const wxAboutDialogInfo& info, wxWindow* parent) { -#if !defined(__WXGTK__) && !defined(__WXMAC__) +#if wxUSE_MODAL_ABOUT_DIALOG wxGenericAboutDialog dlg(info, parent); dlg.ShowModal(); #else diff --git a/Externals/wxWidgets3/src/generic/accel.cpp b/Externals/wxWidgets3/src/generic/accel.cpp index 17daccf0a7..832c357870 100644 --- a/Externals/wxWidgets3/src/generic/accel.cpp +++ b/Externals/wxWidgets3/src/generic/accel.cpp @@ -3,7 +3,7 @@ // Purpose: generic implementation of wxAcceleratorTable class // Author: Robert Roebling // Modified: VZ pn 31.05.01: use typed lists, Unicode cleanup, Add/Remove -// Id: $Id: accel.cpp 63165 2010-01-18 00:28:11Z VZ $ +// Id: $Id: accel.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -162,7 +162,7 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry) const wxAcceleratorEntry * wxAcceleratorTable::GetEntry(const wxKeyEvent& event) const { - if ( !Ok() ) + if ( !IsOk() ) { // not an error, the accel table is just empty return NULL; diff --git a/Externals/wxWidgets3/src/generic/animateg.cpp b/Externals/wxWidgets3/src/generic/animateg.cpp index da8256b384..af4d2416b8 100644 --- a/Externals/wxWidgets3/src/generic/animateg.cpp +++ b/Externals/wxWidgets3/src/generic/animateg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart and Guillermo Rodriguez Garcia // Modified by: Francesco Montorsi // Created: 13/8/99 -// RCS-ID: $Id: animateg.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: animateg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -308,7 +308,7 @@ wxAnimationCtrl::~wxAnimationCtrl() bool wxAnimationCtrl::LoadFile(const wxString& filename, wxAnimationType type) { wxFileInputStream fis(filename); - if (!fis.Ok()) + if (!fis.IsOk()) return false; return Load(fis, type); } diff --git a/Externals/wxWidgets3/src/generic/bannerwindow.cpp b/Externals/wxWidgets3/src/generic/bannerwindow.cpp new file mode 100644 index 0000000000..450b0a90a2 --- /dev/null +++ b/Externals/wxWidgets3/src/generic/bannerwindow.cpp @@ -0,0 +1,344 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/bannerwindow.h +// Purpose: wxBannerWindow class implementation +// Author: Vadim Zeitlin +// Created: 2011-08-16 +// RCS-ID: $Id: bannerwindow.cpp 69859 2011-11-28 18:58:52Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_BANNERWINDOW + +#include "wx/bannerwindow.h" + +#ifndef WX_PRECOMP + #include "wx/bitmap.h" + #include "wx/colour.h" +#endif + +#include "wx/dcbuffer.h" + +namespace +{ + +// Some constants for banner layout, currently they're hard coded but we could +// easily make them configurable if needed later. +const int MARGIN_X = 5; +const int MARGIN_Y = 5; + +} // anonymous namespace + +const char wxBannerWindowNameStr[] = "bannerwindow"; + +BEGIN_EVENT_TABLE(wxBannerWindow, wxWindow) + EVT_SIZE(wxBannerWindow::OnSize) + EVT_PAINT(wxBannerWindow::OnPaint) +END_EVENT_TABLE() + +void wxBannerWindow::Init() +{ + m_direction = wxLEFT; + + m_colStart = *wxWHITE; + m_colEnd = *wxBLUE; +} + +bool +wxBannerWindow::Create(wxWindow* parent, + wxWindowID winid, + wxDirection dir, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) +{ + if ( !wxWindow::Create(parent, winid, pos, size, style, name) ) + return false; + + wxASSERT_MSG + ( + dir == wxLEFT || dir == wxRIGHT || dir == wxTOP || dir == wxBOTTOM, + wxS("Invalid banner direction") + ); + + m_direction = dir; + + SetBackgroundStyle(wxBG_STYLE_PAINT); + + return true; +} + +void wxBannerWindow::SetBitmap(const wxBitmap& bmp) +{ + m_bitmap = bmp; + + m_colBitmapBg = wxColour(); + + InvalidateBestSize(); + + Refresh(); +} + +void wxBannerWindow::SetText(const wxString& title, const wxString& message) +{ + m_title = title; + m_message = message; + + InvalidateBestSize(); + + Refresh(); +} + +void wxBannerWindow::SetGradient(const wxColour& start, const wxColour& end) +{ + m_colStart = start; + m_colEnd = end; + + Refresh(); +} + +wxFont wxBannerWindow::GetTitleFont() const +{ + wxFont font = GetFont(); + font.MakeBold().MakeLarger(); + return font; +} + +wxSize wxBannerWindow::DoGetBestClientSize() const +{ + if ( m_bitmap.IsOk() ) + { + return m_bitmap.GetSize(); + } + else + { + wxClientDC dc(const_cast(this)); + const wxSize sizeText = dc.GetMultiLineTextExtent(m_message); + + dc.SetFont(GetTitleFont()); + + const wxSize sizeTitle = dc.GetTextExtent(m_title); + + wxSize sizeWin(wxMax(sizeTitle.x, sizeText.x), sizeTitle.y + sizeText.y); + + // If we draw the text vertically width and height are swapped. + if ( m_direction == wxLEFT || m_direction == wxRIGHT ) + wxSwap(sizeWin.x, sizeWin.y); + + sizeWin += 2*wxSize(MARGIN_X, MARGIN_Y); + + return sizeWin; + } +} + +void wxBannerWindow::OnSize(wxSizeEvent& event) +{ + Refresh(); + + event.Skip(); +} + +void wxBannerWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) +{ + if ( m_bitmap.IsOk() && m_title.empty() && m_message.empty() ) + { + // No need for buffering in this case. + wxPaintDC dc(this); + + DrawBitmapBackground(dc); + } + else // We need to compose our contents ourselves. + { + wxAutoBufferedPaintDC dc(this); + + // Deal with the background first. + if ( m_bitmap.IsOk() ) + { + DrawBitmapBackground(dc); + } + else // Draw gradient background. + { + wxDirection gradientDir; + if ( m_direction == wxLEFT ) + { + gradientDir = wxTOP; + } + else if ( m_direction == wxRIGHT ) + { + gradientDir = wxBOTTOM; + } + else // For both wxTOP and wxBOTTOM. + { + gradientDir = wxRIGHT; + } + + dc.GradientFillLinear(GetClientRect(), m_colStart, m_colEnd, + gradientDir); + } + + // Now draw the text on top of it. + dc.SetFont(GetTitleFont()); + + wxPoint pos(MARGIN_X, MARGIN_Y); + DrawBannerTextLine(dc, m_title, pos); + pos.y += dc.GetTextExtent(m_title).y; + + dc.SetFont(GetFont()); + + wxArrayString lines = wxSplit(m_message, '\n', '\0'); + const unsigned numLines = lines.size(); + for ( unsigned n = 0; n < numLines; n++ ) + { + const wxString& line = lines[n]; + + DrawBannerTextLine(dc, line, pos); + pos.y += dc.GetTextExtent(line).y; + } + } +} + +wxColour wxBannerWindow::GetBitmapBg() +{ + if ( m_colBitmapBg.IsOk() ) + return m_colBitmapBg; + + // Determine the colour to use to extend the bitmap. It's the colour of the + // bitmap pixels at the edge closest to the area where it can be extended. + wxImage image(m_bitmap.ConvertToImage()); + + // The point we get the colour from. The choice is arbitrary and in general + // the bitmap should have the same colour on the entire edge of this point + // for extending it to look good. + wxPoint p; + + wxSize size = image.GetSize(); + size.x--; + size.y--; + + switch ( m_direction ) + { + case wxTOP: + case wxBOTTOM: + // The bitmap will be extended to the right. + p.x = size.x; + p.y = 0; + break; + + case wxLEFT: + // The bitmap will be extended from the top. + p.x = 0; + p.y = 0; + break; + + case wxRIGHT: + // The bitmap will be extended to the bottom. + p.x = 0; + p.y = size.y; + break; + + // This case is there only to prevent g++ warnings about not handling + // some enum elements in the switch, it can't really happen. + case wxALL: + wxFAIL_MSG( wxS("Unreachable") ); + } + + m_colBitmapBg.Set(image.GetRed(p.x, p.y), + image.GetGreen(p.x, p.y), + image.GetBlue(p.x, p.y)); + + return m_colBitmapBg; +} + +void wxBannerWindow::DrawBitmapBackground(wxDC& dc) +{ + // We may need to fill the part of the background not covered by the bitmap + // with the solid colour extending the bitmap, this rectangle will hold the + // area to be filled (which could be empty if the bitmap is big enough). + wxRect rectSolid; + + const wxSize size = GetClientSize(); + + switch ( m_direction ) + { + case wxTOP: + case wxBOTTOM: + // Draw the bitmap at the origin, its rightmost could be truncated, + // as it's meant to be. + dc.DrawBitmap(m_bitmap, 0, 0); + + rectSolid.x = m_bitmap.GetWidth(); + rectSolid.width = size.x - rectSolid.x; + rectSolid.height = size.y; + break; + + case wxLEFT: + // The top most part of the bitmap may be truncated but its bottom + // must be always visible so intentionally draw it possibly partly + // outside of the window. + rectSolid.width = size.x; + rectSolid.height = size.y - m_bitmap.GetHeight(); + dc.DrawBitmap(m_bitmap, 0, rectSolid.height); + break; + + case wxRIGHT: + // Draw the bitmap at the origin, possibly truncating its + // bottommost part. + dc.DrawBitmap(m_bitmap, 0, 0); + + rectSolid.y = m_bitmap.GetHeight(); + rectSolid.height = size.y - rectSolid.y; + rectSolid.width = size.x; + break; + + // This case is there only to prevent g++ warnings about not handling + // some enum elements in the switch, it can't really happen. + case wxALL: + wxFAIL_MSG( wxS("Unreachable") ); + } + + if ( rectSolid.width > 0 && rectSolid.height > 0 ) + { + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(GetBitmapBg()); + dc.DrawRectangle(rectSolid); + } +} + +void +wxBannerWindow::DrawBannerTextLine(wxDC& dc, + const wxString& str, + const wxPoint& pos) +{ + switch ( m_direction ) + { + case wxTOP: + case wxBOTTOM: + // The simple case: we just draw the text normally. + dc.DrawText(str, pos); + break; + + case wxLEFT: + // We draw the text vertically and start from the lower left + // corner and not the upper left one as usual. + dc.DrawRotatedText(str, pos.y, GetClientSize().y - pos.x, 90); + break; + + case wxRIGHT: + // We also draw the text vertically but now we start from the upper + // right corner and draw it from top to bottom. + dc.DrawRotatedText(str, GetClientSize().x - pos.y, pos.x, -90); + break; + + case wxALL: + wxFAIL_MSG( wxS("Unreachable") ); + } +} + +#endif // wxUSE_BANNERWINDOW diff --git a/Externals/wxWidgets3/src/generic/buttonbar.cpp b/Externals/wxWidgets3/src/generic/buttonbar.cpp index 1f7d2e03b3..65b7279583 100644 --- a/Externals/wxWidgets3/src/generic/buttonbar.cpp +++ b/Externals/wxWidgets3/src/generic/buttonbar.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart, after Robert Roebling, Vadim Zeitlin, SciTech // Modified by: // Created: 2006-04-13 -// Id: $Id: buttonbar.cpp 61508 2009-07-23 20:30:22Z VZ $ +// Id: $Id: buttonbar.cpp 70450 2012-01-23 14:42:53Z VZ $ // Copyright: (c) Julian Smart, Robert Roebling, Vadim Zeitlin, // SciTech Software, Inc. // Licence: wxWindows licence @@ -140,7 +140,10 @@ bool wxButtonToolBar::Create(wxWindow *parent, // wxColour lightBackground(244, 244, 244); - wxFont font(wxSMALL_FONT->GetPointSize(), wxNORMAL_FONT->GetFamily(), wxNORMAL_FONT->GetStyle(), wxNORMAL); + wxFont font(wxSMALL_FONT->GetPointSize(), + wxNORMAL_FONT->GetFamily(), + wxNORMAL_FONT->GetStyle(), + wxFONTWEIGHT_NORMAL); SetFont(font); // Calculate the label height if necessary diff --git a/Externals/wxWidgets3/src/generic/calctrlg.cpp b/Externals/wxWidgets3/src/generic/calctrlg.cpp index f722bc201e..1317c799a8 100644 --- a/Externals/wxWidgets3/src/generic/calctrlg.cpp +++ b/Externals/wxWidgets3/src/generic/calctrlg.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29.12.99 -// RCS-ID: $Id: calctrlg.cpp 66576 2011-01-04 15:08:25Z SC $ +// RCS-ID: $Id: calctrlg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1999 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -287,9 +287,6 @@ void wxGenericCalendarCtrl::CreateYearSpinCtrl() wxDefaultSize, wxSP_ARROW_KEYS | wxCLIP_SIBLINGS, -4300, 10000, GetDate().GetYear()); -#ifdef __WXMAC__ - m_spinYear->SetSize( 90, -1 ); -#endif m_spinYear->Connect(m_spinYear->GetId(), wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(wxGenericCalendarCtrl::OnYearTextChange), @@ -700,12 +697,8 @@ wxSize wxGenericCalendarCtrl::DoGetBestSize() const height += wxMax(bestSizeCombo.y, m_spinYear->GetBestSize().y) + VERT_MARGIN; -#ifdef __WXMAC__ - // the spin control get clipped otherwise - width += 25; -#endif - wxCoord w2 = bestSizeCombo.x + HORZ_MARGIN + GetCharWidth()*6; + wxCoord w2 = bestSizeCombo.x + HORZ_MARGIN + GetCharWidth()*8; if ( width < w2 ) width = w2; } @@ -733,12 +726,8 @@ void wxGenericCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) int maxHeight = wxMax(sizeSpin.y, sizeCombo.y); int dy = (maxHeight - sizeStatic.y) / 2; -#ifdef __WXMAC__ - m_comboMonth->Move(x, y + (maxHeight - sizeCombo.y)/2 + 2); // FIXME, something is reporting the wrong size.. -#else m_comboMonth->Move(x, y + (maxHeight - sizeCombo.y)/2); -#endif - m_staticMonth->SetSize(x, y + dy, sizeCombo.x, -1, sizeStatic.y); + m_staticMonth->SetSize(x, y + dy, sizeCombo.x, -1); int xDiff = sizeCombo.x + HORZ_MARGIN; @@ -757,20 +746,7 @@ void wxGenericCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) void wxGenericCalendarCtrl::DoGetSize(int *width, int *height) const { -#ifdef __WXMAC__ wxControl::DoGetSize( width, height ); - - if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) && m_staticMonth && height ) - { - wxSize sizeCombo = m_comboMonth->GetEffectiveMinSize(); - wxSize sizeSpin = m_spinYear->GetSize(); - - int maxHeight = wxMax(sizeSpin.y, sizeCombo.y); - *height += maxHeight + VERT_MARGIN; - } -#else - wxControl::DoGetSize( width, height ); -#endif } void wxGenericCalendarCtrl::RecalcGeometry() @@ -1026,13 +1002,13 @@ void wxGenericCalendarCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) colBg = attr->GetBackgroundColour(); } - if ( colFg.Ok() ) + if ( colFg.IsOk() ) { dc.SetTextForeground(colFg); changedColours = true; } - if ( colBg.Ok() ) + if ( colBg.IsOk() ) { dc.SetTextBackground(colBg); changedColours = true; diff --git a/Externals/wxWidgets3/src/generic/choicdgg.cpp b/Externals/wxWidgets3/src/generic/choicdgg.cpp index d29635eab2..0efc15262c 100644 --- a/Externals/wxWidgets3/src/generic/choicdgg.cpp +++ b/Externals/wxWidgets3/src/generic/choicdgg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: 03.11.00: VZ to add wxArrayString and multiple sel functions // Created: 04/01/98 -// RCS-ID: $Id: choicdgg.cpp 63734 2010-03-22 11:40:19Z VZ $ +// RCS-ID: $Id: choicdgg.cpp 70514 2012-02-05 14:18:33Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -222,13 +222,13 @@ void *wxGetSingleChoiceData( const wxString& message, int initialSelection) { wxSingleChoiceDialog dialog(parent, message, caption, n, choices, - (char **)client_data); + client_data); dialog.SetSelection(initialSelection); void *data; if ( dialog.ShowModal() == wxID_OK ) - data = dialog.GetSelectionClientData(); + data = dialog.GetSelectionData(); else data = NULL; @@ -467,35 +467,12 @@ END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxSingleChoiceDialog, wxDialog) -wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - int n, - const wxString *choices, - char **clientData, - long style, - const wxPoint& WXUNUSED(pos)) -{ - Create(parent, message, caption, n, choices, clientData, style); -} - -wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - const wxArrayString& choices, - char **clientData, - long style, - const wxPoint& WXUNUSED(pos)) -{ - Create(parent, message, caption, choices, clientData, style); -} - bool wxSingleChoiceDialog::Create( wxWindow *parent, const wxString& message, const wxString& caption, int n, const wxString *choices, - char **clientData, + void **clientData, long style, const wxPoint& pos ) { @@ -519,7 +496,7 @@ bool wxSingleChoiceDialog::Create( wxWindow *parent, const wxString& message, const wxString& caption, const wxArrayString& choices, - char **clientData, + void **clientData, long style, const wxPoint& pos ) { diff --git a/Externals/wxWidgets3/src/generic/collpaneg.cpp b/Externals/wxWidgets3/src/generic/collpaneg.cpp index f3ea4135f5..26b7525dfd 100644 --- a/Externals/wxWidgets3/src/generic/collpaneg.cpp +++ b/Externals/wxWidgets3/src/generic/collpaneg.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified By: // Created: 8/10/2006 -// Id: $Id: collpaneg.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: collpaneg.cpp 68366 2011-07-24 22:19:33Z VZ $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -57,16 +57,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxCollapsiblePaneEvent, wxCommandEvent) BEGIN_EVENT_TABLE(wxGenericCollapsiblePane, wxControl) EVT_BUTTON(wxID_ANY, wxGenericCollapsiblePane::OnButton) EVT_SIZE(wxGenericCollapsiblePane::OnSize) - - WX_EVENT_TABLE_CONTROL_CONTAINER(wxGenericCollapsiblePane) END_EVENT_TABLE() -WX_DELEGATE_TO_CONTROL_CONTAINER(wxGenericCollapsiblePane, wxControl) - void wxGenericCollapsiblePane::Init() { - WX_INIT_CONTROL_CONTAINER(); - m_pButton = NULL; m_pPane = NULL; m_pStaticLine = NULL; diff --git a/Externals/wxWidgets3/src/generic/colrdlgg.cpp b/Externals/wxWidgets3/src/generic/colrdlgg.cpp index 30fd78ef6c..4ca1da61b1 100644 --- a/Externals/wxWidgets3/src/generic/colrdlgg.cpp +++ b/Externals/wxWidgets3/src/generic/colrdlgg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: colrdlgg.cpp 66615 2011-01-07 05:26:57Z PC $ +// RCS-ID: $Id: colrdlgg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -315,7 +315,7 @@ void wxGenericColourDialog::InitializeColours(void) for (i = 0; i < WXSIZEOF(wxColourDialogNames); i++) { wxColour col = wxTheColourDatabase->Find(wxColourDialogNames[i]); - if (col.Ok()) + if (col.IsOk()) m_standardColours[i].Set(col.Red(), col.Green(), col.Blue()); else m_standardColours[i].Set(0, 0, 0); @@ -324,14 +324,14 @@ void wxGenericColourDialog::InitializeColours(void) for (i = 0; i < WXSIZEOF(m_customColours); i++) { wxColour c = m_colourData.GetCustomColour(i); - if (c.Ok()) + if (c.IsOk()) m_customColours[i] = m_colourData.GetCustomColour(i); else m_customColours[i] = wxColour(255, 255, 255); } wxColour curr = m_colourData.GetColour(); - if ( curr.Ok() ) + if ( curr.IsOk() ) { bool m_initColourFound = false; diff --git a/Externals/wxWidgets3/src/generic/combog.cpp b/Externals/wxWidgets3/src/generic/combog.cpp index 39ef0ddd78..3fbbdae486 100644 --- a/Externals/wxWidgets3/src/generic/combog.cpp +++ b/Externals/wxWidgets3/src/generic/combog.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: Apr-30-2006 -// RCS-ID: $Id: combog.cpp 67255 2011-03-20 10:59:22Z JMS $ +// RCS-ID: $Id: combog.cpp 70773 2012-03-02 12:43:39Z JS $ // Copyright: (c) 2005 Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -46,7 +46,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 0 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 19 @@ -56,7 +55,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 2 -#define TEXTCTRLYADJUST 3 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 17 @@ -66,7 +64,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST -1 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 1 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 23 @@ -76,7 +73,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 0 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 22 @@ -86,7 +82,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 0 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 19 @@ -235,7 +230,7 @@ void wxGenericComboCtrl::OnResize() #endif // Move textctrl, if any, accordingly - PositionTextCtrl( TEXTCTRLXADJUST, TEXTCTRLYADJUST ); + PositionTextCtrl( TEXTCTRLXADJUST ); } void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) @@ -260,9 +255,15 @@ void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) int customBorder = m_widthCustomBorder; // Set border colour +#ifdef __WXMAC__ + wxPen pen1( wxColour(133,133,133), + customBorder, + wxSOLID ); +#else wxPen pen1( wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT), customBorder, wxPENSTYLE_SOLID); +#endif dc.SetPen( pen1 ); // area around both controls diff --git a/Externals/wxWidgets3/src/generic/datavgen.cpp b/Externals/wxWidgets3/src/generic/datavgen.cpp index d27d2445b2..b88b1c952b 100644 --- a/Externals/wxWidgets3/src/generic/datavgen.cpp +++ b/Externals/wxWidgets3/src/generic/datavgen.cpp @@ -3,7 +3,7 @@ // Purpose: wxDataViewCtrl generic implementation // Author: Robert Roebling // Modified by: Francesco Montorsi, Guru Kathiresan, Bo Yang -// Id: $Id: datavgen.cpp 67158 2011-03-09 09:44:03Z VZ $ +// Id: $Id: datavgen.cpp 70717 2012-02-27 18:54:02Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -38,7 +38,6 @@ #endif #include "wx/stockitem.h" -#include "wx/calctrl.h" #include "wx/popupwin.h" #include "wx/renderer.h" #include "wx/dcbuffer.h" @@ -49,6 +48,7 @@ #include "wx/headerctrl.h" #include "wx/dnd.h" #include "wx/stopwatch.h" +#include "wx/weakref.h" //----------------------------------------------------------------------------- // classes @@ -83,6 +83,30 @@ static wxDataViewModel* g_model; static int g_column = -2; static bool g_asending = true; +// ---------------------------------------------------------------------------- +// helper functions +// ---------------------------------------------------------------------------- + +namespace +{ + +// Return the expander column or, if it is not set, the first column and also +// set it as the expander one for the future. +wxDataViewColumn* GetExpanderColumnOrFirstOne(wxDataViewCtrl* dataview) +{ + wxDataViewColumn* expander = dataview->GetExpanderColumn(); + if (!expander) + { + // TODO-RTL: last column for RTL support + expander = dataview->GetColumnAt( 0 ); + dataview->SetExpanderColumn(expander); + } + + return expander; +} + +} // anonymous namespace + //----------------------------------------------------------------------------- // wxDataViewColumn //----------------------------------------------------------------------------- @@ -122,6 +146,30 @@ void wxDataViewColumn::UpdateDisplay() } } +void wxDataViewColumn::SetSortOrder(bool ascending) +{ + if ( !m_owner ) + return; + + // First unset the old sort column if any. + int oldSortKey = m_owner->GetSortingColumnIndex(); + if ( oldSortKey != wxNOT_FOUND ) + { + m_owner->GetColumn(oldSortKey)->UnsetAsSortKey(); + } + + // Now set this one as the new sort column. + const int idx = m_owner->GetColumnIndex(this); + m_owner->SetSortingColumnIndex(idx); + + m_sort = true; + m_sortAscending = ascending; + + // Call this directly instead of using UpdateDisplay() as we already have + // the column index, no need to look it up again. + m_owner->OnColumnChange(idx); +} + //----------------------------------------------------------------------------- // wxDataViewHeaderWindow //----------------------------------------------------------------------------- @@ -169,7 +217,7 @@ private: // for events created by wxDataViewHeaderWindow the // row / value fields are not valid - return owner->GetEventHandler()->ProcessEvent(event); + return owner->ProcessWindowEvent(event); } void OnClick(wxHeaderCtrlEvent& event) @@ -197,16 +245,7 @@ private: } else // not using this column for sorting yet { - // first unset the old sort column if any - int oldSortKey = owner->GetSortingColumnIndex(); - if ( oldSortKey != wxNOT_FOUND ) - { - owner->GetColumn(oldSortKey)->UnsetAsSortKey(); - owner->OnColumnChange(oldSortKey); - } - - owner->SetSortingColumnIndex(idx); - col->SetAsSortKey(); + col->SetSortOrder(true); } wxDataViewModel * const model = owner->GetModel(); @@ -214,6 +253,8 @@ private: model->Resort(); owner->OnColumnChange(idx); + + SendEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, idx); } void OnRClick(wxHeaderCtrlEvent& event) @@ -273,57 +314,89 @@ public: class wxDataViewTreeNode; WX_DEFINE_ARRAY( wxDataViewTreeNode *, wxDataViewTreeNodes ); -WX_DEFINE_ARRAY( void* , wxDataViewTreeLeaves); int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1, wxDataViewTreeNode ** node2); -int LINKAGEMODE wxGenericTreeModelItemCmp( void ** id1, void ** id2); class wxDataViewTreeNode { public: - wxDataViewTreeNode( wxDataViewTreeNode * parent = NULL ) + wxDataViewTreeNode(wxDataViewTreeNode *parent, const wxDataViewItem& item) + : m_parent(parent), + m_item(item), + m_branchData(NULL) { - m_parent = parent; - if (!parent) - m_open = true; - else - m_open = false; - m_hasChildren = false; - m_subTreeCount = 0; } ~wxDataViewTreeNode() { + if ( m_branchData ) + { + wxDataViewTreeNodes& nodes = m_branchData->children; + for ( wxDataViewTreeNodes::iterator i = nodes.begin(); + i != nodes.end(); + ++i ) + { + delete *i; + } + + delete m_branchData; + } + } + + static wxDataViewTreeNode* CreateRootNode() + { + wxDataViewTreeNode *n = new wxDataViewTreeNode(NULL, wxDataViewItem()); + n->SetHasChildren(true); + n->m_branchData->open = true; + return n; } wxDataViewTreeNode * GetParent() const { return m_parent; } - void SetParent( wxDataViewTreeNode * parent ) { m_parent = parent; } - wxDataViewTreeNodes & GetNodes() { return m_nodes; } - wxDataViewTreeLeaves & GetChildren() { return m_leaves; } - void AddNode( wxDataViewTreeNode * node ) + const wxDataViewTreeNodes& GetChildNodes() const { - m_leaves.Add( node->GetItem().GetID() ); - if (g_column >= -1) - m_leaves.Sort( &wxGenericTreeModelItemCmp ); - m_nodes.Add( node ); - if (g_column >= -1) - m_nodes.Sort( &wxGenericTreeModelNodeCmp ); - } - void AddLeaf( void * leaf ) - { - m_leaves.Add( leaf ); - if (g_column >= -1) - m_leaves.Sort( &wxGenericTreeModelItemCmp ); + wxASSERT( m_branchData != NULL ); + return m_branchData->children; + } + + void InsertChild(wxDataViewTreeNode *node, unsigned index) + { + if ( !m_branchData ) + m_branchData = new BranchNodeData; + + m_branchData->children.Insert(node, index); + + // TODO: insert into sorted array directly in O(log n) instead of resorting in O(n log n) + if (g_column >= -1) + m_branchData->children.Sort( &wxGenericTreeModelNodeCmp ); + } + + void RemoveChild(wxDataViewTreeNode *node) + { + wxCHECK_RET( m_branchData != NULL, "leaf node doesn't have children" ); + m_branchData->children.Remove(node); + } + + // returns position of child node for given item in children list or wxNOT_FOUND + int FindChildByItem(const wxDataViewItem& item) const + { + if ( !m_branchData ) + return wxNOT_FOUND; + + const wxDataViewTreeNodes& nodes = m_branchData->children; + const int len = nodes.size(); + for ( int i = 0; i < len; i++ ) + { + if ( nodes[i]->m_item == item ) + return i; + } + return wxNOT_FOUND; } - wxDataViewItem & GetItem() { return m_item; } const wxDataViewItem & GetItem() const { return m_item; } void SetItem( const wxDataViewItem & item ) { m_item = item; } - unsigned int GetChildrenNumber() const { return m_leaves.GetCount(); } - unsigned int GetNodeNumber() const { return m_nodes.GetCount(); } int GetIndentLevel() const { int ret = 0; @@ -338,84 +411,136 @@ public: bool IsOpen() const { - return m_open; + return m_branchData && m_branchData->open; } void ToggleOpen() { - int len = m_nodes.GetCount(); - int sum = 0; - for ( int i = 0;i < len; i ++) - sum += m_nodes[i]->GetSubTreeCount(); + wxCHECK_RET( m_branchData != NULL, "can't open leaf node" ); - sum += m_leaves.GetCount(); - if (m_open) + int sum = 0; + + const wxDataViewTreeNodes& nodes = m_branchData->children; + const int len = nodes.GetCount(); + for ( int i = 0;i < len; i ++) + sum += 1 + nodes[i]->GetSubTreeCount(); + + if (m_branchData->open) { ChangeSubTreeCount(-sum); - m_open = !m_open; + m_branchData->open = !m_branchData->open; } else { - m_open = !m_open; - ChangeSubTreeCount(sum); + m_branchData->open = !m_branchData->open; + ChangeSubTreeCount(+sum); } } - bool HasChildren() const { return m_hasChildren; } - void SetHasChildren( bool has ){ m_hasChildren = has; } - void SetSubTreeCount( int num ) { m_subTreeCount = num; } - int GetSubTreeCount() const { return m_subTreeCount; } + // "HasChildren" property corresponds to model's IsContainer(). Note that it may be true + // even if GetChildNodes() is empty; see below. + bool HasChildren() const + { + return m_branchData != NULL; + } + + void SetHasChildren(bool has) + { + if ( !has ) + { + wxDELETE(m_branchData); + } + else if ( m_branchData == NULL ) + { + m_branchData = new BranchNodeData; + } + } + + int GetSubTreeCount() const + { + return m_branchData ? m_branchData->subTreeCount : 0; + } + void ChangeSubTreeCount( int num ) { - if( !m_open ) + wxASSERT( m_branchData != NULL ); + + if( !m_branchData->open ) return; - m_subTreeCount += num; + + m_branchData->subTreeCount += num; + wxASSERT( m_branchData->subTreeCount >= 0 ); + if( m_parent ) m_parent->ChangeSubTreeCount(num); } void Resort() { + if ( !m_branchData ) + return; + if (g_column >= -1) { - m_nodes.Sort( &wxGenericTreeModelNodeCmp ); - int len = m_nodes.GetCount(); + wxDataViewTreeNodes& nodes = m_branchData->children; + + nodes.Sort( &wxGenericTreeModelNodeCmp ); + int len = nodes.GetCount(); for (int i = 0; i < len; i ++) - m_nodes[i]->Resort(); - m_leaves.Sort( &wxGenericTreeModelItemCmp ); + { + if ( nodes[i]->HasChildren() ) + nodes[i]->Resort(); + } } } + private: wxDataViewTreeNode *m_parent; - wxDataViewTreeNodes m_nodes; - wxDataViewTreeLeaves m_leaves; + + // Corresponding model item. wxDataViewItem m_item; - bool m_open; - bool m_hasChildren; - int m_subTreeCount; + + // Data specific to non-leaf (branch, inner) nodes. They are kept in a + // separate struct in order to conserve memory. + struct BranchNodeData + { + BranchNodeData() + : open(false), + subTreeCount(0) + { + } + + // Child nodes. Note that this may be empty even if m_hasChildren in + // case this branch of the tree wasn't expanded and realized yet. + wxDataViewTreeNodes children; + + // Is the branch node currently open (expanded)? + bool open; + + // Total count of expanded (i.e. visible with the help of some + // scrolling) items in the subtree, but excluding this node. I.e. it is + // 0 for leaves and is the number of rows the subtree occupies for + // branch nodes. + int subTreeCount; + }; + + BranchNodeData *m_branchData; }; + int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1, wxDataViewTreeNode ** node2) { return g_model->Compare( (*node1)->GetItem(), (*node2)->GetItem(), g_column, g_asending ); } -int LINKAGEMODE wxGenericTreeModelItemCmp( void ** id1, void ** id2) -{ - return g_model->Compare( *id1, *id2, g_column, g_asending ); -} - //----------------------------------------------------------------------------- // wxDataViewMainWindow //----------------------------------------------------------------------------- -WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SIZE_T(unsigned int, wxDataViewSelection, - WXDLLIMPEXP_ADV); -WX_DECLARE_LIST(wxDataViewItem, ItemList); -WX_DEFINE_LIST(ItemList) +WX_DEFINE_SORTED_ARRAY_SIZE_T(unsigned int, wxDataViewSelection); class wxDataViewMainWindow: public wxWindow { @@ -427,7 +552,7 @@ public: const wxString &name = wxT("wxdataviewctrlmainwindow") ); virtual ~wxDataViewMainWindow(); - bool IsList() const { return GetOwner()->GetModel()->IsListModel(); } + bool IsList() const { return GetModel()->IsListModel(); } bool IsVirtualList() const { return m_root == NULL; } // notifications from wxDataViewModel @@ -448,7 +573,7 @@ public: void SortPrepare() { - g_model = GetOwner()->GetModel(); + g_model = GetModel(); wxDataViewColumn* col = GetOwner()->GetSortingColumn(); if( !col ) { @@ -468,12 +593,18 @@ public: wxDataViewCtrl *GetOwner() { return m_owner; } const wxDataViewCtrl *GetOwner() const { return m_owner; } + wxDataViewModel* GetModel() { return GetOwner()->GetModel(); } + const wxDataViewModel* GetModel() const { return GetOwner()->GetModel(); } + #if wxUSE_DRAG_AND_DROP wxBitmap CreateItemBitmap( unsigned int row, int &indent ); #endif // wxUSE_DRAG_AND_DROP void OnPaint( wxPaintEvent &event ); - void OnArrowChar(unsigned int newCurrent, const wxKeyEvent& event); + void OnCharHook( wxKeyEvent &event ); void OnChar( wxKeyEvent &event ); + void OnVerticalNavigation(unsigned int newCurrent, const wxKeyEvent& event); + void OnLeftKey(); + void OnRightKey(); void OnMouse( wxMouseEvent &event ); void OnSetFocus( wxFocusEvent &event ); void OnKillFocus( wxFocusEvent &event ); @@ -490,6 +621,10 @@ public: unsigned GetCurrentRow() const { return m_currentRow; } bool HasCurrentRow() { return m_currentRow != (unsigned int)-1; } void ChangeCurrentRow( unsigned int row ); + bool TryAdvanceCurrentColumn(wxDataViewTreeNode *node, bool forward); + + wxDataViewColumn *GetCurrentColumn() const { return m_currentCol; } + void ClearCurrentColumn() { m_currentCol = NULL; } bool IsSingleSel() const { return !GetParent()->HasFlag(wxDV_MULTIPLE); } bool IsEmpty() { return GetRowCount() == 0; } @@ -502,10 +637,9 @@ public: // the displaying number of the tree are changing along with the // expanding/collapsing of the tree nodes unsigned int GetLastVisibleRow(); - unsigned int GetRowCount(); + unsigned int GetRowCount() const; - wxDataViewItem GetSelection() const; - wxDataViewSelection GetSelections(){ return m_selection; } + const wxDataViewSelection& GetSelections() const { return m_selection; } void SetSelections( const wxDataViewSelection & sel ) { m_selection = sel; UpdateDisplay(); } void Select( const wxArrayInt& aSelections ); @@ -532,10 +666,17 @@ public: int GetLineHeight( unsigned int row ) const; // m_lineHeight in fixed mode int GetLineAt( unsigned int y ) const; // y / m_lineHeight in fixed mode + void SetRowHeight( int lineHeight ) { m_lineHeight = lineHeight; } + int GetRowHeight() const { return m_lineHeight; } + // Some useful functions for row and item mapping wxDataViewItem GetItemByRow( unsigned int row ) const; int GetRowByItem( const wxDataViewItem & item ) const; + wxDataViewTreeNode * GetTreeNodeByRow( unsigned int row ) const; + // We did not need this temporarily + // wxDataViewTreeNode * GetTreeNodeByItem( const wxDataViewItem & item ); + // Methods for building the mapping tree void BuildTree( wxDataViewModel * model ); void DestroyTree(); @@ -558,17 +699,26 @@ public: void OnLeave(); #endif // wxUSE_DRAG_AND_DROP + void OnColumnsCountChanged(); + + // Called by wxDataViewCtrl and our own OnRenameTimer() to start edit the + // specified item in the given column. + void StartEditing(const wxDataViewItem& item, const wxDataViewColumn* col); + private: - wxDataViewTreeNode * GetTreeNodeByRow( unsigned int row ) const; - // We did not need this temporarily - // wxDataViewTreeNode * GetTreeNodeByItem( const wxDataViewItem & item ); + int RecalculateCount() const; - int RecalculateCount(); - - wxDataViewEvent SendExpanderEvent( wxEventType type, const wxDataViewItem & item ); + // Return false only if the event was vetoed by its handler. + bool SendExpanderEvent(wxEventType type, const wxDataViewItem& item); wxDataViewTreeNode * FindNode( const wxDataViewItem & item ); + wxDataViewColumn *FindColumnForEditing(const wxDataViewItem& item, wxDataViewCellMode mode); + + bool IsCellEditableInMode(const wxDataViewItem& item, const wxDataViewColumn *col, wxDataViewCellMode mode) const; + + void DrawCellBackground( wxDataViewRenderer* cell, wxDC& dc, const wxRect& rect ); + private: wxDataViewCtrl *m_owner; int m_lineHeight; @@ -582,6 +732,8 @@ private: bool m_lastOnSame; bool m_hasFocus; + bool m_useCellFocus; + bool m_currentColSetByKeyboard; #if wxUSE_DRAG_AND_DROP int m_dragCount; @@ -614,6 +766,12 @@ private: // This is the tree node under the cursor wxDataViewTreeNode * m_underMouse; + // The control used for editing or NULL. + wxWeakRef m_editorCtrl; + + // Id m_editorCtrl is non-NULL, pointer to the associated renderer. + wxDataViewRenderer* m_editorRenderer; + private: DECLARE_DYNAMIC_CLASS(wxDataViewMainWindow) DECLARE_EVENT_TABLE() @@ -732,12 +890,13 @@ bool wxDataViewTextRenderer::HasEditorCtrl() const return true; } -wxControl* wxDataViewTextRenderer::CreateEditorCtrl( wxWindow *parent, +wxWindow* wxDataViewTextRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) { wxTextCtrl* ctrl = new wxTextCtrl( parent, wxID_ANY, value, wxPoint(labelRect.x,labelRect.y), - wxSize(labelRect.width,labelRect.height) ); + wxSize(labelRect.width,labelRect.height), + wxTE_PROCESS_ENTER ); // select the text in the control an place the cursor at the end ctrl->SetInsertionPointEnd(); @@ -746,7 +905,7 @@ wxControl* wxDataViewTextRenderer::CreateEditorCtrl( wxWindow *parent, return ctrl; } -bool wxDataViewTextRenderer::GetValueFromEditorCtrl( wxControl *editor, wxVariant &value ) +bool wxDataViewTextRenderer::GetValueFromEditorCtrl( wxWindow *editor, wxVariant &value ) { wxTextCtrl *text = (wxTextCtrl*) editor; value = text->GetValue(); @@ -796,9 +955,9 @@ bool wxDataViewBitmapRenderer::GetValue( wxVariant& WXUNUSED(value) ) const bool wxDataViewBitmapRenderer::Render( wxRect cell, wxDC *dc, int WXUNUSED(state) ) { - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) dc->DrawBitmap( m_bitmap, cell.x, cell.y ); - else if (m_icon.Ok()) + else if (m_icon.IsOk()) dc->DrawIcon( m_icon, cell.x, cell.y ); return true; @@ -806,9 +965,9 @@ bool wxDataViewBitmapRenderer::Render( wxRect cell, wxDC *dc, int WXUNUSED(state wxSize wxDataViewBitmapRenderer::GetSize() const { - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) return wxSize( m_bitmap.GetWidth(), m_bitmap.GetHeight() ); - else if (m_icon.Ok()) + else if (m_icon.IsOk()) return wxSize( m_icon.GetWidth(), m_icon.GetHeight() ); return wxSize(wxDVC_DEFAULT_RENDERER_SIZE,wxDVC_DEFAULT_RENDERER_SIZE); @@ -863,19 +1022,21 @@ bool wxDataViewToggleRenderer::Render( wxRect cell, wxDC *dc, int WXUNUSED(state return true; } -bool wxDataViewToggleRenderer::WXOnLeftClick(const wxPoint& WXUNUSED(cursor), - const wxRect& WXUNUSED(cell), - wxDataViewModel *model, - const wxDataViewItem& item, - unsigned int col) +bool wxDataViewToggleRenderer::WXActivateCell(const wxRect& WXUNUSED(cell), + wxDataViewModel *model, + const wxDataViewItem& item, + unsigned int col, + const wxMouseEvent *mouseEvent) { - if (model->IsEnabled(item, col)) + if ( mouseEvent ) { - model->ChangeValue(!m_toggle, item, col); - return true; + // only react to clicks directly on the checkbox, not elsewhere in the same cell: + if ( !wxRect(GetSize()).Contains(mouseEvent->GetPosition()) ) + return false; } - return false; + model->ChangeValue(!m_toggle, item, col); + return true; } wxSize wxDataViewToggleRenderer::GetSize() const @@ -941,113 +1102,6 @@ wxSize wxDataViewProgressRenderer::GetSize() const return wxSize(40,12); } -// --------------------------------------------------------- -// wxDataViewDateRenderer -// --------------------------------------------------------- - -#define wxUSE_DATE_RENDERER_POPUP (wxUSE_CALENDARCTRL && wxUSE_POPUPWIN) - -#if wxUSE_DATE_RENDERER_POPUP - -class wxDataViewDateRendererPopupTransient: public wxPopupTransientWindow -{ -public: - wxDataViewDateRendererPopupTransient( wxWindow* parent, wxDateTime *value, - wxDataViewModel *model, const wxDataViewItem & item, unsigned int col) : - wxPopupTransientWindow( parent, wxBORDER_SIMPLE ), - m_item( item ) - { - m_model = model; - m_col = col; - m_cal = new wxCalendarCtrl( this, wxID_ANY, *value ); - wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL ); - sizer->Add( m_cal, 1, wxGROW ); - SetSizer( sizer ); - sizer->Fit( this ); - } - - void OnCalendar( wxCalendarEvent &event ); - - wxCalendarCtrl *m_cal; - wxDataViewModel *m_model; - unsigned int m_col; - const wxDataViewItem & m_item; - -protected: - virtual void OnDismiss() - { - } - -private: - DECLARE_EVENT_TABLE() -}; - -BEGIN_EVENT_TABLE(wxDataViewDateRendererPopupTransient,wxPopupTransientWindow) - EVT_CALENDAR( wxID_ANY, wxDataViewDateRendererPopupTransient::OnCalendar ) -END_EVENT_TABLE() - -void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event ) -{ - m_model->ChangeValue( event.GetDate(), m_item, m_col ); - DismissAndNotify(); -} - -#endif // wxUSE_DATE_RENDERER_POPUP - -IMPLEMENT_ABSTRACT_CLASS(wxDataViewDateRenderer, wxDataViewRenderer) - -wxDataViewDateRenderer::wxDataViewDateRenderer( const wxString &varianttype, - wxDataViewCellMode mode, int align ) : - wxDataViewRenderer( varianttype, mode, align ) -{ -} - -bool wxDataViewDateRenderer::SetValue( const wxVariant &value ) -{ - m_date = value.GetDateTime(); - - return true; -} - -bool wxDataViewDateRenderer::GetValue( wxVariant &value ) const -{ - value = m_date; - return true; -} - -bool wxDataViewDateRenderer::Render( wxRect cell, wxDC *dc, int state ) -{ - wxString tmp = m_date.FormatDate(); - RenderText( tmp, 0, cell, dc, state ); - return true; -} - -wxSize wxDataViewDateRenderer::GetSize() const -{ - return GetTextExtent(m_date.FormatDate()); -} - -bool wxDataViewDateRenderer::WXOnActivate(const wxRect& WXUNUSED(cell), - wxDataViewModel *model, - const wxDataViewItem& item, - unsigned int col) -{ - wxDateTime dtOld = m_date; - -#if wxUSE_DATE_RENDERER_POPUP - wxDataViewDateRendererPopupTransient *popup = new wxDataViewDateRendererPopupTransient( - GetOwner()->GetOwner()->GetParent(), &dtOld, model, item, col); - wxPoint pos = wxGetMousePosition(); - popup->Move( pos ); - popup->Layout(); - popup->Popup( popup->m_cal ); -#else // !wxUSE_DATE_RENDERER_POPUP - wxMessageBox(dtOld.Format()); -#endif // wxUSE_DATE_RENDERER_POPUP/!wxUSE_DATE_RENDERER_POPUP - - return true; -} - // --------------------------------------------------------- // wxDataViewIconTextRenderer // --------------------------------------------------------- @@ -1102,7 +1156,7 @@ wxSize wxDataViewIconTextRenderer::GetSize() const return wxSize(80,20); } -wxControl* wxDataViewIconTextRenderer::CreateEditorCtrl(wxWindow *parent, wxRect labelRect, const wxVariant& value) +wxWindow* wxDataViewIconTextRenderer::CreateEditorCtrl(wxWindow *parent, wxRect labelRect, const wxVariant& value) { wxDataViewIconText iconText; iconText << value; @@ -1119,7 +1173,8 @@ wxControl* wxDataViewIconTextRenderer::CreateEditorCtrl(wxWindow *parent, wxRect wxTextCtrl* ctrl = new wxTextCtrl( parent, wxID_ANY, text, wxPoint(labelRect.x,labelRect.y), - wxSize(labelRect.width,labelRect.height) ); + wxSize(labelRect.width,labelRect.height), + wxTE_PROCESS_ENTER ); // select the text in the control an place the cursor at the end ctrl->SetInsertionPointEnd(); @@ -1128,7 +1183,7 @@ wxControl* wxDataViewIconTextRenderer::CreateEditorCtrl(wxWindow *parent, wxRect return ctrl; } -bool wxDataViewIconTextRenderer::GetValueFromEditorCtrl( wxControl *editor, wxVariant& value ) +bool wxDataViewIconTextRenderer::GetValueFromEditorCtrl( wxWindow *editor, wxVariant& value ) { wxTextCtrl *text = (wxTextCtrl*) editor; @@ -1299,6 +1354,7 @@ BEGIN_EVENT_TABLE(wxDataViewMainWindow,wxWindow) EVT_MOUSE_EVENTS (wxDataViewMainWindow::OnMouse) EVT_SET_FOCUS (wxDataViewMainWindow::OnSetFocus) EVT_KILL_FOCUS (wxDataViewMainWindow::OnKillFocus) + EVT_CHAR_HOOK (wxDataViewMainWindow::OnCharHook) EVT_CHAR (wxDataViewMainWindow::OnChar) END_EVENT_TABLE() @@ -1310,14 +1366,25 @@ wxDataViewMainWindow::wxDataViewMainWindow( wxDataViewCtrl *parent, wxWindowID i { SetOwner( parent ); + m_editorRenderer = NULL; + m_lastOnSame = false; m_renameTimer = new wxDataViewRenameTimer( this ); // TODO: user better initial values/nothing selected m_currentCol = NULL; + m_currentColSetByKeyboard = false; + m_useCellFocus = false; m_currentRow = 0; - m_lineHeight = wxMax( 17, GetCharHeight() + 2 ); // 17 = mini icon height + 1 +#ifdef __WXMSW__ + // We would like to use the same line height that Explorer uses. This is + // different from standard ListView control since Vista. + if ( wxGetWinVersion() >= wxWinVersion_Vista ) + m_lineHeight = wxMax(16, GetCharHeight()) + 6; // 16 = mini icon height + else +#endif // __WXMSW__ + m_lineHeight = wxMax(16, GetCharHeight()) + 1; // 16 = mini icon height #if wxUSE_DRAG_AND_DROP m_dragCount = 0; @@ -1345,8 +1412,7 @@ wxDataViewMainWindow::wxDataViewMainWindow( wxDataViewCtrl *parent, wxWindowID i // TODO: maybe there is something system colour to use m_penExpander = wxPen(wxColour(0,0,0)); - m_root = new wxDataViewTreeNode( NULL ); - m_root->SetHasChildren(true); + m_root = wxDataViewTreeNode::CreateRootNode(); // Make m_count = -1 will cause the class recaculate the real displaying number of rows. m_count = -1; @@ -1407,7 +1473,7 @@ wxDragResult wxDataViewMainWindow::OnDragOver( wxDataFormat format, wxCoord x, wxDataViewItem item = GetItemByRow( row ); - wxDataViewModel *model = GetOwner()->GetModel(); + wxDataViewModel *model = GetModel(); wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() ); event.SetEventObject( m_owner ); @@ -1450,7 +1516,7 @@ bool wxDataViewMainWindow::OnDrop( wxDataFormat format, wxCoord x, wxCoord y ) wxDataViewItem item = GetItemByRow( row ); - wxDataViewModel *model = GetOwner()->GetModel(); + wxDataViewModel *model = GetModel(); wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() ); event.SetEventObject( m_owner ); @@ -1479,7 +1545,7 @@ wxDragResult wxDataViewMainWindow::OnData( wxDataFormat format, wxCoord x, wxCoo wxDataViewItem item = GetItemByRow( row ); - wxDataViewModel *model = GetOwner()->GetModel(); + wxDataViewModel *model = GetModel(); wxCustomDataObject *obj = (wxCustomDataObject *) GetDropTarget()->GetDataObject(); @@ -1525,9 +1591,6 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent ) indent = GetOwner()->GetIndent() * node->GetIndentLevel(); indent = indent + m_lineHeight; // try to use the m_lineHeight as the expander space - - if(!node->HasChildren()) - delete node; } width -= indent; @@ -1540,14 +1603,8 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent ) wxDataViewModel *model = m_owner->GetModel(); - wxDataViewColumn *expander = GetOwner()->GetExpanderColumn(); - if (!expander) - { - // TODO-RTL: last column for RTL support - expander = GetOwner()->GetColumnAt( 0 ); - GetOwner()->SetExpanderColumn(expander); - } - + wxDataViewColumn * const + expander = GetExpanderColumnOrFirstOne(GetOwner()); int x = 0; for (col = 0; col < cols; col++) @@ -1582,9 +1639,46 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent ) #endif // wxUSE_DRAG_AND_DROP +// Draw focus rect for individual cell. Unlike native focus rect, we render +// this in foreground text color (typically white) to enhance contrast and +// make it visible. +static void DrawSelectedCellFocusRect(wxDC& dc, const wxRect& rect) +{ + // (This code is based on wxRendererGeneric::DrawFocusRect and modified.) + + // draw the pixels manually because the "dots" in wxPen with wxDOT style + // may be short traits and not really dots + // + // note that to behave in the same manner as DrawRect(), we must exclude + // the bottom and right borders from the rectangle + wxCoord x1 = rect.GetLeft(), + y1 = rect.GetTop(), + x2 = rect.GetRight(), + y2 = rect.GetBottom(); + + wxDCPenChanger pen(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); + + wxCoord z; + for ( z = x1 + 1; z < x2; z += 2 ) + dc.DrawPoint(z, rect.GetTop()); + + wxCoord shift = z == x2 ? 0 : 1; + for ( z = y1 + shift; z < y2; z += 2 ) + dc.DrawPoint(x2, z); + + shift = z == y2 ? 0 : 1; + for ( z = x2 - shift; z > x1; z -= 2 ) + dc.DrawPoint(z, y2); + + shift = z == x1 ? 0 : 1; + for ( z = y2 - shift; z > y1; z -= 2 ) + dc.DrawPoint(x1, z); +} + + void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) { - wxDataViewModel *model = GetOwner()->GetModel(); + wxDataViewModel *model = GetModel(); wxAutoBufferedPaintDC dc( this ); #ifdef __WXMSW__ @@ -1593,6 +1687,12 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) dc.DrawRectangle(GetClientSize()); #endif + if ( IsEmpty() ) + { + // No items to draw. + return; + } + // prepare the DC GetOwner()->PrepareDC( dc ); dc.SetFont( GetFont() ); @@ -1652,6 +1752,37 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) x_last += col->GetWidth(); } + // Draw background of alternate rows specially if required + if ( m_owner->HasFlag(wxDV_ROW_LINES) ) + { + wxColour altRowColour = m_owner->m_alternateRowColour; + if ( !altRowColour.IsOk() ) + { + // Determine the alternate rows colour automatically from the + // background colour. + const wxColour bgColour = m_owner->GetBackgroundColour(); + + // Depending on the background, alternate row color + // will be 3% more dark or 50% brighter. + int alpha = bgColour.GetRGB() > 0x808080 ? 97 : 150; + altRowColour = bgColour.ChangeLightness(alpha); + } + + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(altRowColour)); + + for (unsigned int item = item_start; item < item_last; item++) + { + if ( item % 2 ) + { + dc.DrawRectangle(x_start, + GetLineStart(item), + GetClientSize().GetWidth(), + GetLineHeight(item)); + } + } + } + // Draw horizontal rules if required if ( m_owner->HasFlag(wxDV_HORIZ_RULES) ) { @@ -1694,23 +1825,97 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) for (unsigned int item = item_start; item < item_last; item++) { bool selected = m_selection.Index( item ) != wxNOT_FOUND; + if (selected || item == m_currentRow) { - int flags = selected ? (int)wxCONTROL_SELECTED : 0; - if (item == m_currentRow) - flags |= wxCONTROL_CURRENT; - if (m_hasFocus) - flags |= wxCONTROL_FOCUSED; - wxRect rect( x_start, GetLineStart( item ), x_last - x_start, GetLineHeight( item ) ); - wxRendererNative::Get().DrawItemSelectionRect - ( - this, - dc, - rect, - flags - ); + + // draw selection and whole-item focus: + if ( selected ) + { + int flags = wxCONTROL_SELECTED; + if (m_hasFocus) + flags |= wxCONTROL_FOCUSED; + + wxRendererNative::Get().DrawItemSelectionRect + ( + this, + dc, + rect, + flags + ); + } + + // draw keyboard focus rect if applicable + if ( item == m_currentRow && m_hasFocus ) + { + bool renderColumnFocus = false; + + if ( m_useCellFocus && m_currentCol && m_currentColSetByKeyboard ) + { + renderColumnFocus = true; + + // If this is container node without columns, render full-row focus: + if ( !IsList() ) + { + wxDataViewTreeNode *node = GetTreeNodeByRow(item); + if ( node->HasChildren() && !model->HasContainerColumns(node->GetItem()) ) + renderColumnFocus = false; + } + } + + if ( renderColumnFocus ) + { + for ( unsigned int i = col_start; i < col_last; i++ ) + { + wxDataViewColumn *col = GetOwner()->GetColumnAt(i); + if ( col->IsHidden() ) + continue; + + rect.width = col->GetWidth(); + + if ( col == m_currentCol ) + { + // make the rect more visible by adding a small + // margin around it: + rect.Deflate(1, 1); + + if ( selected ) + { + // DrawFocusRect() uses XOR and is all but + // invisible against dark-blue background. Use + // the same color used for selected text. + DrawSelectedCellFocusRect(dc, rect); + } + else + { + wxRendererNative::Get().DrawFocusRect + ( + this, + dc, + rect, + 0 + ); + } + break; + } + + rect.x += rect.width; + } + } + else + { + // render focus rectangle for the whole row + wxRendererNative::Get().DrawFocusRect + ( + this, + dc, + rect, + selected ? (int)wxCONTROL_SELECTED : 0 + ); + } + } } } @@ -1725,13 +1930,8 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) } #endif // wxUSE_DRAG_AND_DROP - wxDataViewColumn *expander = GetOwner()->GetExpanderColumn(); - if (!expander) - { - // TODO-RTL: last column for RTL support - expander = GetOwner()->GetColumnAt( 0 ); - GetOwner()->SetExpanderColumn(expander); - } + wxDataViewColumn * const + expander = GetExpanderColumnOrFirstOne(GetOwner()); // redraw all cells for all rows which must be repainted and all columns wxRect cell_rect; @@ -1759,8 +1959,11 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) dataitem = node->GetItem(); - if ((i > 0) && model->IsContainer(dataitem) && - !model->HasContainerColumns(dataitem)) + // Skip all columns of "container" rows except the expander + // column itself unless HasContainerColumns() overrides this. + if ( col != expander && + model->IsContainer(dataitem) && + !model->HasContainerColumns(dataitem) ) continue; } else @@ -1774,6 +1977,11 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) cell_rect.y = GetLineStart( item ); cell_rect.height = GetLineHeight( item ); + // draw the background + bool selected = m_selection.Index( item ) != wxNOT_FOUND; + if ( !selected ) + DrawCellBackground( cell, dc, cell_rect ); + // deal with the expander int indent = 0; if ((!IsList()) && (col == expander)) @@ -1815,12 +2023,6 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) // force the expander column to left-center align cell->SetAlignment( wxALIGN_CENTER_VERTICAL ); } - if (node && !node->HasChildren()) - { - // Yes, if the node does not have any child, it must be a leaf which - // mean that it is a temporarily created by GetTreeNodeByRow - wxDELETE(node); - } wxRect item_rect = cell_rect; item_rect.Deflate(PADDING_RIGHTLEFT, 0); @@ -1833,7 +2035,7 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) continue; int state = 0; - if (m_hasFocus && (m_selection.Index(item) != wxNOT_FOUND)) + if (m_hasFocus && selected) state |= wxDATAVIEW_CELL_SELECTED; // TODO: it would be much more efficient to create a clipping @@ -1852,6 +2054,28 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) } } + +void wxDataViewMainWindow::DrawCellBackground( wxDataViewRenderer* cell, wxDC& dc, const wxRect& rect ) +{ + wxRect rectBg( rect ); + + // don't overlap the horizontal rules + if ( m_owner->HasFlag(wxDV_HORIZ_RULES) ) + { + rectBg.x++; + rectBg.width--; + } + + // don't overlap the vertical rules + if ( m_owner->HasFlag(wxDV_VERT_RULES) ) + { + rectBg.y++; + rectBg.height--; + } + + cell->RenderBackground(&dc, rectBg); +} + void wxDataViewMainWindow::OnRenameTimer() { // We have to call this here because changes may just have @@ -1865,9 +2089,25 @@ void wxDataViewMainWindow::OnRenameTimer() wxDataViewItem item = GetItemByRow( m_currentRow ); - wxRect labelRect = GetItemRect(item, m_currentCol); + StartEditing( item, m_currentCol ); +} - m_currentCol->GetRenderer()->StartEditing( item, labelRect ); +void +wxDataViewMainWindow::StartEditing(const wxDataViewItem& item, + const wxDataViewColumn* col) +{ + wxDataViewRenderer* renderer = col->GetRenderer(); + if ( !IsCellEditableInMode(item, col, wxDATAVIEW_CELL_EDITABLE) ) + return; + + const wxRect itemRect = GetItemRect(item, col); + if ( renderer->StartEditing(item, itemRect) ) + { + // Save the renderer to be able to finish/cancel editing it later and + // save the control to be able to detect if we're still editing it. + m_editorRenderer = renderer; + m_editorCtrl = renderer->GetEditorCtrl(); + } } //----------------------------------------------------------------------------- @@ -1880,183 +2120,256 @@ public: virtual ~DoJob() { } // The return value control how the tree-walker tranverse the tree - // 0: Job done, stop tranverse and return - // 1: Ignore the current node's subtree and continue - // 2: Job not done, continue - enum { OK = 0 , IGR = 1, CONT = 2 }; + enum + { + DONE, // Job done, stop traversing and return + SKIP_SUBTREE, // Ignore the current node's subtree and continue + CONTINUE // Job not done, continue + }; + virtual int operator() ( wxDataViewTreeNode * node ) = 0; - virtual int operator() ( void * n ) = 0; }; bool Walker( wxDataViewTreeNode * node, DoJob & func ) { - if( node==NULL ) - return false; + wxCHECK_MSG( node, false, "can't walk NULL node" ); switch( func( node ) ) { - case DoJob::OK : + case DoJob::DONE: return true; - case DoJob::IGR: + case DoJob::SKIP_SUBTREE: return false; - case DoJob::CONT: - default: - ; + case DoJob::CONTINUE: + break; } - const wxDataViewTreeNodes& nodes = node->GetNodes(); - const wxDataViewTreeLeaves& leaves = node->GetChildren(); - - int len_nodes = nodes.GetCount(); - int len = leaves.GetCount(); - int i = 0, nodes_i = 0; - - for(; i < len; i ++ ) + if ( node->HasChildren() ) { - void * n = leaves[i]; - if( nodes_i < len_nodes && n == nodes[nodes_i]->GetItem().GetID() ) + const wxDataViewTreeNodes& nodes = node->GetChildNodes(); + + for ( wxDataViewTreeNodes::const_iterator i = nodes.begin(); + i != nodes.end(); + ++i ) { - wxDataViewTreeNode * nd = nodes[nodes_i]; - nodes_i++; - - if( Walker( nd , func ) ) + if ( Walker(*i, func) ) return true; - } - else - switch( func( n ) ) - { - case DoJob::OK : - return true; - case DoJob::IGR: - continue; - case DoJob::CONT: - default: - ; - } } + return false; } bool wxDataViewMainWindow::ItemAdded(const wxDataViewItem & parent, const wxDataViewItem & item) { - GetOwner()->InvalidateColBestWidths(); - if (IsVirtualList()) { wxDataViewVirtualListModel *list_model = - (wxDataViewVirtualListModel*) GetOwner()->GetModel(); + (wxDataViewVirtualListModel*) GetModel(); m_count = list_model->GetCount(); - UpdateDisplay(); - return true; - } - - SortPrepare(); - - wxDataViewTreeNode * node; - node = FindNode(parent); - - if( node == NULL ) - return false; - - node->SetHasChildren( true ); - - if( g_model->IsContainer( item ) ) - { - wxDataViewTreeNode * newnode = new wxDataViewTreeNode( node ); - newnode->SetItem(item); - newnode->SetHasChildren( true ); - node->AddNode( newnode); } else - node->AddLeaf( item.GetID() ); + { + SortPrepare(); - node->ChangeSubTreeCount(1); + wxDataViewTreeNode *parentNode = FindNode(parent); - m_count = -1; + if ( !parentNode ) + return false; + + wxDataViewItemArray modelSiblings; + GetModel()->GetChildren(parent, modelSiblings); + const int modelSiblingsSize = modelSiblings.size(); + + int posInModel = modelSiblings.Index(item, /*fromEnd=*/true); + wxCHECK_MSG( posInModel != wxNOT_FOUND, false, "adding non-existent item?" ); + + wxDataViewTreeNode *itemNode = new wxDataViewTreeNode(parentNode, item); + itemNode->SetHasChildren(GetModel()->IsContainer(item)); + + parentNode->SetHasChildren(true); + + const wxDataViewTreeNodes& nodeSiblings = parentNode->GetChildNodes(); + const int nodeSiblingsSize = nodeSiblings.size(); + + int nodePos = 0; + + if ( posInModel == modelSiblingsSize - 1 ) + { + nodePos = nodeSiblingsSize; + } + else if ( modelSiblingsSize == nodeSiblingsSize + 1 ) + { + // This is the simple case when our node tree already matches the + // model and only this one item is missing. + nodePos = posInModel; + } + else + { + // It's possible that a larger discrepancy between the model and + // our realization exists. This can happen e.g. when adding a bunch + // of items to the model and then calling ItemsAdded() just once + // afterwards. In this case, we must find the right position by + // looking at sibling items. + + // append to the end if we won't find a better position: + nodePos = nodeSiblingsSize; + + for ( int nextItemPos = posInModel + 1; + nextItemPos < modelSiblingsSize; + nextItemPos++ ) + { + int nextNodePos = parentNode->FindChildByItem(modelSiblings[nextItemPos]); + if ( nextNodePos != wxNOT_FOUND ) + { + nodePos = nextNodePos; + break; + } + } + } + + parentNode->ChangeSubTreeCount(+1); + parentNode->InsertChild(itemNode, nodePos); + + m_count = -1; + } + + GetOwner()->InvalidateColBestWidths(); UpdateDisplay(); return true; } -static void DestroyTreeHelper( wxDataViewTreeNode * node); - bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent, const wxDataViewItem& item) { - GetOwner()->InvalidateColBestWidths(); - if (IsVirtualList()) { wxDataViewVirtualListModel *list_model = - (wxDataViewVirtualListModel*) GetOwner()->GetModel(); + (wxDataViewVirtualListModel*) GetModel(); m_count = list_model->GetCount(); - if( m_currentRow > GetRowCount() ) - m_currentRow = m_count - 1; - - // TODO: why empty the entire selection? - m_selection.Empty(); - - UpdateDisplay(); - - return true; - } - - wxDataViewTreeNode * node = FindNode(parent); - - // Notice that it is possible that the item being deleted is not in the - // tree at all, for example we could be deleting a never shown (because - // collapsed) item in a tree model. So it's not an error if we don't know - // about this item, just return without doing anything then. - if ( !node || node->GetChildren().Index(item.GetID()) == wxNOT_FOUND ) - return false; - - int sub = -1; - node->GetChildren().Remove( item.GetID() ); - // Manipolate selection - if( m_selection.GetCount() > 1 ) - { - m_selection.Empty(); - } - bool isContainer = false; - wxDataViewTreeNodes nds = node->GetNodes(); - for (size_t i = 0; i < nds.GetCount(); i ++) - { - if (nds[i]->GetItem() == item) + if ( !m_selection.empty() ) { - isContainer = true; - break; - } - } - if( isContainer ) - { - wxDataViewTreeNode * n = NULL; - wxDataViewTreeNodes nodes = node->GetNodes(); - int len = nodes.GetCount(); - for( int i = 0; i < len; i ++) - { - if( nodes[i]->GetItem() == item ) + const int row = GetRowByItem(item); + + int rowIndexInSelection = wxNOT_FOUND; + + const size_t selCount = m_selection.size(); + for ( size_t i = 0; i < selCount; i++ ) { - n = nodes[i]; + if ( m_selection[i] == (unsigned)row ) + rowIndexInSelection = i; + else if ( m_selection[i] > (unsigned)row ) + m_selection[i]--; + } + + if ( rowIndexInSelection != wxNOT_FOUND ) + m_selection.RemoveAt(rowIndexInSelection); + } + + } + else // general case + { + wxDataViewTreeNode *parentNode = FindNode(parent); + + // Notice that it is possible that the item being deleted is not in the + // tree at all, for example we could be deleting a never shown (because + // collapsed) item in a tree model. So it's not an error if we don't know + // about this item, just return without doing anything then. + if ( !parentNode ) + return true; + + wxCHECK_MSG( parentNode->HasChildren(), false, "parent node doesn't have children?" ); + const wxDataViewTreeNodes& parentsChildren = parentNode->GetChildNodes(); + + // We can't use FindNode() to find 'item', because it was already + // removed from the model by the time ItemDeleted() is called, so we + // have to do it manually. We keep track of its position as well for + // later use. + int itemPosInNode = 0; + wxDataViewTreeNode *itemNode = NULL; + for ( wxDataViewTreeNodes::const_iterator i = parentsChildren.begin(); + i != parentsChildren.end(); + ++i, ++itemPosInNode ) + { + if( (*i)->GetItem() == item ) + { + itemNode = *i; break; } } - wxCHECK_MSG( n != NULL, false, "item not found" ); + // If the parent wasn't expanded, it's possible that we didn't have a + // node corresponding to 'item' and so there's nothing left to do. + if ( !itemNode ) + { + // If this was the last child to be removed, it's possible the parent + // node became a leaf. Let's ask the model about it. + if ( parentNode->GetChildNodes().empty() ) + parentNode->SetHasChildren(GetModel()->IsContainer(parent)); - node->GetNodes().Remove( n ); - sub -= n->GetSubTreeCount(); - ::DestroyTreeHelper(n); + return true; + } + + // Delete the item from wxDataViewTreeNode representation: + const int itemsDeleted = 1 + itemNode->GetSubTreeCount(); + + parentNode->RemoveChild(itemNode); + delete itemNode; + parentNode->ChangeSubTreeCount(-itemsDeleted); + + // Make the row number invalid and get a new valid one when user call GetRowCount + m_count = -1; + + // If this was the last child to be removed, it's possible the parent + // node became a leaf. Let's ask the model about it. + if ( parentNode->GetChildNodes().empty() ) + parentNode->SetHasChildren(GetModel()->IsContainer(parent)); + + // Update selection by removing 'item' and its entire children tree from the selection. + if ( !m_selection.empty() ) + { + // we can't call GetRowByItem() on 'item', as it's already deleted, so compute it from + // the parent ('parentNode') and position in its list of children + int itemRow; + if ( itemPosInNode == 0 ) + { + // 1st child, row number is that of the parent parentNode + 1 + itemRow = GetRowByItem(parentNode->GetItem()) + 1; + } + else + { + // row number is that of the sibling above 'item' + its subtree if any + 1 + const wxDataViewTreeNode *siblingNode = parentNode->GetChildNodes()[itemPosInNode - 1]; + + itemRow = GetRowByItem(siblingNode->GetItem()) + + siblingNode->GetSubTreeCount() + + 1; + } + + wxDataViewSelection newsel(wxDataViewSelectionCmp); + + const size_t numSelections = m_selection.size(); + for ( size_t i = 0; i < numSelections; ++i ) + { + const int s = m_selection[i]; + if ( s < itemRow ) + newsel.push_back(s); + else if ( s >= itemRow + itemsDeleted ) + newsel.push_back(s - itemsDeleted); + // else: deleted item, remove from selection + } + + m_selection = newsel; + } } - // Make the row number invalid and get a new valid one when user call GetRowCount - m_count = -1; - node->ChangeSubTreeCount(sub); // Change the current row to the last row if the current exceed the max row number if( m_currentRow > GetRowCount() ) - m_currentRow = m_count - 1; + ChangeCurrentRow(m_count - 1); + GetOwner()->InvalidateColBestWidths(); UpdateDisplay(); return true; @@ -2064,18 +2377,18 @@ bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent, bool wxDataViewMainWindow::ItemChanged(const wxDataViewItem & item) { - GetOwner()->InvalidateColBestWidths(); - SortPrepare(); g_model->Resort(); + GetOwner()->InvalidateColBestWidths(); + // Send event wxWindow *parent = GetParent(); wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId()); le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); + le.SetModel(GetModel()); le.SetItem(item); - parent->GetEventHandler()->ProcessEvent(le); + parent->ProcessWindowEvent(le); return true; } @@ -2096,8 +2409,6 @@ bool wxDataViewMainWindow::ValueChanged( const wxDataViewItem & item, unsigned i if (view_column == -1) return false; - GetOwner()->InvalidateColBestWidth(view_column); - // NOTE: to be valid, we cannot use e.g. INT_MAX - 1 /*#define MAX_VIRTUAL_WIDTH 100000 @@ -2110,29 +2421,30 @@ bool wxDataViewMainWindow::ValueChanged( const wxDataViewItem & item, unsigned i SortPrepare(); g_model->Resort(); + GetOwner()->InvalidateColBestWidth(view_column); + // Send event wxWindow *parent = GetParent(); wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId()); le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); + le.SetModel(GetModel()); le.SetItem(item); le.SetColumn(view_column); le.SetDataViewColumn(GetOwner()->GetColumn(view_column)); - parent->GetEventHandler()->ProcessEvent(le); + parent->ProcessWindowEvent(le); return true; } bool wxDataViewMainWindow::Cleared() { - GetOwner()->InvalidateColBestWidths(); - DestroyTree(); m_selection.Clear(); SortPrepare(); - BuildTree( GetOwner()->GetModel() ); + BuildTree( GetModel() ); + GetOwner()->InvalidateColBestWidths(); UpdateDisplay(); return true; @@ -2157,7 +2469,7 @@ void wxDataViewMainWindow::OnInternalIdle() void wxDataViewMainWindow::RecalculateDisplay() { - wxDataViewModel *model = GetOwner()->GetModel(); + wxDataViewModel *model = GetModel(); if (!model) { Refresh(); @@ -2190,7 +2502,7 @@ void wxDataViewMainWindow::ScrollTo( int rows, int column ) int x, y; m_owner->GetScrollPixelsPerUnit( &x, &y ); int sy = GetLineStart( rows )/y; - int sx = 0; + int sx = -1; if( column != -1 ) { wxRect rect = GetClientRect(); @@ -2264,12 +2576,14 @@ unsigned int wxDataViewMainWindow::GetLastVisibleRow() return wxMin( GetRowCount()-1, row ); } -unsigned int wxDataViewMainWindow::GetRowCount() +unsigned int wxDataViewMainWindow::GetRowCount() const { if ( m_count == -1 ) { - m_count = RecalculateCount(); - UpdateDisplay(); + wxDataViewMainWindow* const + self = const_cast(this); + self->m_count = RecalculateCount(); + self->UpdateDisplay(); } return m_count; } @@ -2385,10 +2699,10 @@ void wxDataViewMainWindow::SendSelectionChangedEvent( const wxDataViewItem& item wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, parent->GetId()); le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); + le.SetModel(GetModel()); le.SetItem( item ); - parent->GetEventHandler()->ProcessEvent(le); + parent->ProcessWindowEvent(le); } void wxDataViewMainWindow::RefreshRow( unsigned int row ) @@ -2434,58 +2748,6 @@ void wxDataViewMainWindow::RefreshRowsAfter( unsigned int firstRow ) Refresh( true, &rect ); } -void wxDataViewMainWindow::OnArrowChar(unsigned int newCurrent, const wxKeyEvent& event) -{ - wxCHECK_RET( newCurrent < GetRowCount(), - wxT("invalid item index in OnArrowChar()") ); - - // if there is no selection, we cannot move it anywhere - if (!HasCurrentRow()) - return; - - unsigned int oldCurrent = m_currentRow; - - // in single selection we just ignore Shift as we can't select several - // items anyhow - if ( event.ShiftDown() && !IsSingleSel() ) - { - RefreshRow( oldCurrent ); - - ChangeCurrentRow( newCurrent ); - - // select all the items between the old and the new one - if ( oldCurrent > newCurrent ) - { - newCurrent = oldCurrent; - oldCurrent = m_currentRow; - } - - SelectRows( oldCurrent, newCurrent, true ); - if (oldCurrent!=newCurrent) - SendSelectionChangedEvent(GetItemByRow(m_selection[0])); - } - else // !shift - { - RefreshRow( oldCurrent ); - - // all previously selected items are unselected unless ctrl is held - if ( !event.ControlDown() ) - SelectAllRows(false); - - ChangeCurrentRow( newCurrent ); - - if ( !event.ControlDown() ) - { - SelectRow( m_currentRow, true ); - SendSelectionChangedEvent(GetItemByRow(m_currentRow)); - } - else - RefreshRow( m_currentRow ); - } - - GetOwner()->EnsureVisible( m_currentRow, -1 ); -} - wxRect wxDataViewMainWindow::GetLineRect( unsigned int row ) const { wxRect rect; @@ -2499,7 +2761,7 @@ wxRect wxDataViewMainWindow::GetLineRect( unsigned int row ) const int wxDataViewMainWindow::GetLineStart( unsigned int row ) const { - const wxDataViewModel *model = GetOwner()->GetModel(); + const wxDataViewModel *model = GetModel(); if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) { @@ -2515,13 +2777,6 @@ int wxDataViewMainWindow::GetLineStart( unsigned int row ) const wxDataViewItem item = node->GetItem(); - if (node && !node->HasChildren()) - { - // Yes, if the node does not have any child, it must be a leaf which - // mean that it is a temporarily created by GetTreeNodeByRow - wxDELETE(node); - } - unsigned int cols = GetOwner()->GetColumnCount(); unsigned int col; int height = m_lineHeight; @@ -2556,7 +2811,7 @@ int wxDataViewMainWindow::GetLineStart( unsigned int row ) const int wxDataViewMainWindow::GetLineAt( unsigned int y ) const { - const wxDataViewModel *model = GetOwner()->GetModel(); + const wxDataViewModel *model = GetModel(); // check for the easy case first if ( !GetOwner()->HasFlag(wxDV_VARIABLE_LINE_HEIGHT) ) @@ -2576,13 +2831,6 @@ int wxDataViewMainWindow::GetLineAt( unsigned int y ) const wxDataViewItem item = node->GetItem(); - if (node && !node->HasChildren()) - { - // Yes, if the node does not have any child, it must be a leaf which - // mean that it is a temporarily created by GetTreeNodeByRow - wxDELETE(node); - } - unsigned int cols = GetOwner()->GetColumnCount(); unsigned int col; int height = m_lineHeight; @@ -2614,7 +2862,7 @@ int wxDataViewMainWindow::GetLineAt( unsigned int y ) const int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const { - const wxDataViewModel *model = GetOwner()->GetModel(); + const wxDataViewModel *model = GetModel(); if (GetOwner()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) { @@ -2626,13 +2874,6 @@ int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const wxDataViewItem item = node->GetItem(); - if (node && !node->HasChildren()) - { - // Yes, if the node does not have any child, it must be a leaf which - // mean that it is a temporarily created by GetTreeNodeByRow - wxDELETE(node); - } - int height = m_lineHeight; unsigned int cols = GetOwner()->GetColumnCount(); @@ -2663,76 +2904,6 @@ int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const } } -class RowToItemJob: public DoJob -{ -public: - RowToItemJob( unsigned int row , int current ) - { this->row = row; this->current = current; } - virtual ~RowToItemJob() {} - - virtual int operator() ( wxDataViewTreeNode * node ) - { - current ++; - if( current == static_cast(row)) - { - ret = node->GetItem(); - return DoJob::OK; - } - - if( node->GetSubTreeCount() + current < static_cast(row) ) - { - current += node->GetSubTreeCount(); - return DoJob::IGR; - } - else - { - // If the current has no child node, we can find the desired item of the row - // number directly. - // This if can speed up finding in some case, and will has a very good effect - // when it comes to list view - if( node->GetNodes().GetCount() == 0) - { - int index = static_cast(row) - current - 1; - ret = node->GetChildren().Item( index ); - return DoJob::OK; - } - return DoJob::CONT; - } - } - - virtual int operator() ( void * n ) - { - current ++; - if( current == static_cast(row)) - { - ret = wxDataViewItem( n ); - return DoJob::OK; - } - return DoJob::CONT; - } - - wxDataViewItem GetResult() const - { return ret; } - -private: - unsigned int row; - int current; - wxDataViewItem ret; -}; - -wxDataViewItem wxDataViewMainWindow::GetItemByRow(unsigned int row) const -{ - if (IsVirtualList()) - { - return wxDataViewItem( wxUIntToPtr(row+1) ); - } - else - { - RowToItemJob job( row, -2 ); - Walker( m_root , job ); - return job.GetResult(); - } -} class RowToTreeNodeJob: public DoJob { @@ -2744,7 +2915,6 @@ public: ret = NULL; parent = node; } - virtual ~RowToTreeNodeJob(){ } virtual int operator() ( wxDataViewTreeNode * node ) { @@ -2752,47 +2922,31 @@ public: if( current == static_cast(row)) { ret = node; - return DoJob::OK; + return DoJob::DONE; } if( node->GetSubTreeCount() + current < static_cast(row) ) { current += node->GetSubTreeCount(); - return DoJob::IGR; + return DoJob::SKIP_SUBTREE; } else { parent = node; - // If the current node has no children, we can find the desired item of the - // row number directly. - // This if can speed up finding in some case, and will have a very good - // effect for list views. - if( node->GetNodes().GetCount() == 0) + // If the current node has only leaf children, we can find the + // desired node directly. This can speed up finding the node + // in some cases, and will have a very good effect for list views. + if ( node->HasChildren() && + (int)node->GetChildNodes().size() == node->GetSubTreeCount() ) { - int index = static_cast(row) - current - 1; - void * n = node->GetChildren().Item( index ); - ret = new wxDataViewTreeNode( parent ); - ret->SetItem( wxDataViewItem( n )); - ret->SetHasChildren(false); - return DoJob::OK; + const int index = static_cast(row) - current - 1; + ret = node->GetChildNodes()[index]; + return DoJob::DONE; } - return DoJob::CONT; - } - } - virtual int operator() ( void * n ) - { - current ++; - if( current == static_cast(row)) - { - ret = new wxDataViewTreeNode( parent ); - ret->SetItem( wxDataViewItem( n )); - ret->SetHasChildren(false); - return DoJob::OK; + return DoJob::CONTINUE; } - - return DoJob::CONT; } wxDataViewTreeNode * GetResult() const @@ -2814,18 +2968,36 @@ wxDataViewTreeNode * wxDataViewMainWindow::GetTreeNodeByRow(unsigned int row) co return job.GetResult(); } -wxDataViewEvent wxDataViewMainWindow::SendExpanderEvent( wxEventType type, - const wxDataViewItem & item ) +wxDataViewItem wxDataViewMainWindow::GetItemByRow(unsigned int row) const +{ + wxDataViewItem item; + if (IsVirtualList()) + { + if ( row < GetRowCount() ) + item = wxDataViewItem(wxUIntToPtr(row+1)); + } + else + { + wxDataViewTreeNode *node = GetTreeNodeByRow(row); + if ( node ) + item = node->GetItem(); + } + + return item; +} + +bool +wxDataViewMainWindow::SendExpanderEvent(wxEventType type, + const wxDataViewItem& item) { wxWindow *parent = GetParent(); wxDataViewEvent le(type, parent->GetId()); le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); + le.SetModel(GetModel()); le.SetItem( item ); - parent->GetEventHandler()->ProcessEvent(le); - return le; + return !parent->ProcessWindowEvent(le) || le.IsAllowed(); } bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const @@ -2838,10 +3010,7 @@ bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const return false; if (!node->HasChildren()) - { - delete node; return false; - } return node->IsOpen(); } @@ -2856,10 +3025,7 @@ bool wxDataViewMainWindow::HasChildren( unsigned int row ) const return false; if (!node->HasChildren()) - { - delete node; return false; - } return true; } @@ -2874,27 +3040,23 @@ void wxDataViewMainWindow::Expand( unsigned int row ) return; if (!node->HasChildren()) - { - delete node; return; - } if (!node->IsOpen()) { - wxDataViewEvent e = - SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, node->GetItem()); - - // Check if the user prevent expanding - if( e.GetSkipped() ) + if ( !SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, node->GetItem()) ) + { + // Vetoed by the event handler. return; + } node->ToggleOpen(); // build the children of current node - if( node->GetChildrenNumber() == 0 ) + if( node->GetChildNodes().empty() ) { SortPrepare(); - ::BuildTreeHelper(GetOwner()->GetModel(), node->GetItem(), node); + ::BuildTreeHelper(GetModel(), node->GetItem(), node); } // By expanding the node all row indices that are currently in the selection list @@ -2930,17 +3092,15 @@ void wxDataViewMainWindow::Collapse(unsigned int row) return; if (!node->HasChildren()) - { - delete node; return; - } if (node->IsOpen()) { - wxDataViewEvent e = - SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING,node->GetItem()); - if( e.GetSkipped() ) + if ( !SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING,node->GetItem()) ) + { + // Vetoed by the event handler. return; + } // Find out if there are selected items below the current node. bool selectCollapsingRow = false; @@ -2998,7 +3158,7 @@ void wxDataViewMainWindow::Collapse(unsigned int row) wxDataViewTreeNode * wxDataViewMainWindow::FindNode( const wxDataViewItem & item ) { - const wxDataViewModel * model = GetOwner()->GetModel(); + const wxDataViewModel * model = GetModel(); if( model == NULL ) return NULL; @@ -3017,17 +3177,20 @@ wxDataViewTreeNode * wxDataViewMainWindow::FindNode( const wxDataViewItem & item // Find the item along the parent-chain. // This algorithm is designed to speed up the node-finding method wxDataViewTreeNode* node = m_root; - for( unsigned iter = parentChain.size()-1; iter>=0; --iter ) + for( unsigned iter = parentChain.size()-1; ; --iter ) { if( node->HasChildren() ) { - if( node->GetChildrenNumber() == 0 ) + if( node->GetChildNodes().empty() ) { + // Even though the item is a container, it doesn't have any + // child nodes in the control's representation yet. We have + // to realize its subtree now. SortPrepare(); ::BuildTreeHelper(model, node->GetItem(), node); } - const wxDataViewTreeNodes& nodes = node->GetNodes(); + const wxDataViewTreeNodes& nodes = node->GetChildNodes(); bool found = false; for (unsigned i = 0; i < nodes.GetCount(); ++i) @@ -3048,6 +3211,9 @@ wxDataViewTreeNode * wxDataViewMainWindow::FindNode( const wxDataViewItem & item } else return NULL; + + if ( !iter ) + break; } return NULL; } @@ -3119,14 +3285,12 @@ wxRect wxDataViewMainWindow::GetItemRect( const wxDataViewItem & item, // to get the correct x position where the actual text is int indent = 0; int row = GetRowByItem(item); - if (!IsList() && (column == 0 || GetOwner()->GetExpanderColumn() == column) ) + if (!IsList() && + (column == 0 || GetExpanderColumnOrFirstOne(GetOwner()) == column) ) { wxDataViewTreeNode* node = GetTreeNodeByRow(row); indent = GetOwner()->GetIndent() * node->GetIndentLevel(); indent = indent + m_lineHeight; // use m_lineHeight as the width of the expander - - if(!node->HasChildren()) - delete node; } wxRect itemRect( xpos + indent, @@ -3140,12 +3304,12 @@ wxRect wxDataViewMainWindow::GetItemRect( const wxDataViewItem & item, return itemRect; } -int wxDataViewMainWindow::RecalculateCount() +int wxDataViewMainWindow::RecalculateCount() const { if (IsVirtualList()) { wxDataViewVirtualListModel *list_model = - (wxDataViewVirtualListModel*) GetOwner()->GetModel(); + (wxDataViewVirtualListModel*) GetModel(); return list_model->GetCount(); } @@ -3171,30 +3335,22 @@ public: ret ++; if( node->GetItem() == item ) { - return DoJob::OK; + return DoJob::DONE; } if( node->GetItem() == *m_iter ) { m_iter++; - return DoJob::CONT; + return DoJob::CONTINUE; } else { ret += node->GetSubTreeCount(); - return DoJob::IGR; + return DoJob::SKIP_SUBTREE; } } - virtual int operator() ( void * n ) - { - ret ++; - if( n == item.GetID() ) - return DoJob::OK; - return DoJob::CONT; - } - // the row number is begin from zero int GetResult() const { return ret -1; } @@ -3208,7 +3364,7 @@ private: int wxDataViewMainWindow::GetRowByItem(const wxDataViewItem & item) const { - const wxDataViewModel * model = GetOwner()->GetModel(); + const wxDataViewModel * model = GetModel(); if( model == NULL ) return -1; @@ -3250,41 +3406,31 @@ static void BuildTreeHelper( const wxDataViewModel * model, const wxDataViewIte wxDataViewItemArray children; unsigned int num = model->GetChildren( item, children); - unsigned int index = 0; - while( index < num ) + for ( unsigned int index = 0; index < num; index++ ) { - if( model->IsContainer( children[index] ) ) - { - wxDataViewTreeNode * n = new wxDataViewTreeNode( node ); - n->SetItem(children[index]); - n->SetHasChildren( true ); - node->AddNode( n ); - } - else - { - node->AddLeaf( children[index].GetID() ); - } - index ++; - } - node->SetSubTreeCount( num ); - wxDataViewTreeNode * n = node->GetParent(); - if( n != NULL) - n->ChangeSubTreeCount(num); + wxDataViewTreeNode *n = new wxDataViewTreeNode(node, children[index]); + if( model->IsContainer(children[index]) ) + n->SetHasChildren( true ); + + node->InsertChild(n, index); + } + + wxASSERT( node->IsOpen() ); + node->ChangeSubTreeCount(+num); } void wxDataViewMainWindow::BuildTree(wxDataViewModel * model) { DestroyTree(); - if (GetOwner()->GetModel()->IsVirtualListModel()) + if (GetModel()->IsVirtualListModel()) { m_count = -1; return; } - m_root = new wxDataViewTreeNode( NULL ); - m_root->SetHasChildren(true); + m_root = wxDataViewTreeNode::CreateRootNode(); // First we define a invalid item to fetch the top-level elements wxDataViewItem item; @@ -3293,28 +3439,112 @@ void wxDataViewMainWindow::BuildTree(wxDataViewModel * model) m_count = -1; } -static void DestroyTreeHelper( wxDataViewTreeNode * node ) -{ - if( node->GetNodeNumber() != 0 ) - { - int len = node->GetNodeNumber(); - wxDataViewTreeNodes& nodes = node->GetNodes(); - for (int i = 0; i < len; i++) - DestroyTreeHelper(nodes[i]); - } - delete node; -} - void wxDataViewMainWindow::DestroyTree() { if (!IsVirtualList()) { - ::DestroyTreeHelper(m_root); - m_count = 0; - m_root = NULL; + wxDELETE(m_root); + m_count = 0; } } +wxDataViewColumn* +wxDataViewMainWindow::FindColumnForEditing(const wxDataViewItem& item, wxDataViewCellMode mode) +{ + // Edit the current column editable in 'mode'. If no column is focused + // (typically because the user has full row selected), try to find the + // first editable column (this would typically be a checkbox for + // wxDATAVIEW_CELL_ACTIVATABLE and we don't want to force the user to set + // focus on the checkbox column; or on the only editable text column). + + wxDataViewColumn *candidate = m_currentCol; + + if ( candidate && + !IsCellEditableInMode(item, candidate, mode) && + !m_currentColSetByKeyboard ) + { + // If current column was set by mouse to something not editable (in + // 'mode') and the user pressed Space/F2 to edit it, treat the + // situation as if there was whole-row focus, because that's what is + // visually indicated and the mouse click could very well be targeted + // on the row rather than on an individual cell. + // + // But if it was done by keyboard, respect that even if the column + // isn't editable, because focus is visually on that column and editing + // something else would be surprising. + candidate = NULL; + } + + if ( !candidate ) + { + const unsigned cols = GetOwner()->GetColumnCount(); + for ( unsigned i = 0; i < cols; i++ ) + { + wxDataViewColumn *c = GetOwner()->GetColumnAt(i); + if ( c->IsHidden() ) + continue; + + if ( IsCellEditableInMode(item, c, mode) ) + { + candidate = c; + break; + } + } + } + + // If on container item without columns, only the expander column + // may be directly editable: + if ( candidate && + GetOwner()->GetExpanderColumn() != candidate && + GetModel()->IsContainer(item) && + !GetModel()->HasContainerColumns(item) ) + { + candidate = GetOwner()->GetExpanderColumn(); + } + + if ( !candidate ) + return NULL; + + if ( !IsCellEditableInMode(item, candidate, mode) ) + return NULL; + + return candidate; +} + +bool wxDataViewMainWindow::IsCellEditableInMode(const wxDataViewItem& item, + const wxDataViewColumn *col, + wxDataViewCellMode mode) const +{ + if ( col->GetRenderer()->GetMode() != mode ) + return false; + + if ( !GetModel()->IsEnabled(item, col->GetModelColumn()) ) + return false; + + return true; +} + +void wxDataViewMainWindow::OnCharHook(wxKeyEvent& event) +{ + if ( m_editorCtrl ) + { + // Handle any keys special for the in-place editor and return without + // calling Skip() below. + switch ( event.GetKeyCode() ) + { + case WXK_ESCAPE: + m_editorRenderer->CancelEditing(); + return; + + case WXK_RETURN: + m_editorRenderer->FinishEditing(); + return; + } + } + + event.Skip(); +} + void wxDataViewMainWindow::OnChar( wxKeyEvent &event ) { wxWindow * const parent = GetParent(); @@ -3342,87 +3572,125 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event ) switch ( event.GetKeyCode() ) { case WXK_RETURN: + if ( event.HasModifiers() ) { + event.Skip(); + break; + } + else + { + // Enter activates the item, i.e. sends wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED to + // it. Only if that event is not handled do we activate column renderer (which + // is normally done by Space) or even inline editing. + + const wxDataViewItem item = GetItemByRow(m_currentRow); + wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, parent->GetId()); - le.SetItem( GetItemByRow(m_currentRow) ); + le.SetItem(item); le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); + le.SetModel(GetModel()); - parent->GetEventHandler()->ProcessEvent(le); + if ( parent->ProcessWindowEvent(le) ) + break; + // else: fall through to WXK_SPACE handling + } + + case WXK_SPACE: + if ( event.HasModifiers() ) + { + event.Skip(); + break; + } + else + { + // Space toggles activatable items or -- if not activatable -- + // starts inline editing (this is normally done using F2 on + // Windows, but Space is common everywhere else, so use it too + // for greater cross-platform compatibility). + + const wxDataViewItem item = GetItemByRow(m_currentRow); + + // Activate the current activatable column. If not column is focused (typically + // because the user has full row selected), try to find the first activatable + // column (this would typically be a checkbox and we don't want to force the user + // to set focus on the checkbox column). + wxDataViewColumn *activatableCol = FindColumnForEditing(item, wxDATAVIEW_CELL_ACTIVATABLE); + + if ( activatableCol ) + { + const unsigned colIdx = activatableCol->GetModelColumn(); + const wxRect cell_rect = GetOwner()->GetItemRect(item, activatableCol); + + wxDataViewRenderer *cell = activatableCol->GetRenderer(); + cell->PrepareForItem(GetModel(), item, colIdx); + cell->WXActivateCell(cell_rect, GetModel(), item, colIdx, NULL); + + break; + } + // else: fall through to WXK_F2 handling + } + + case WXK_F2: + if ( event.HasModifiers() ) + { + event.Skip(); + break; + } + else + { + if( !m_selection.empty() ) + { + // Mimic Windows 7 behavior: edit the item that has focus + // if it is selected and the first selected item if focus + // is out of selection. + int sel; + if ( m_selection.Index(m_currentRow) != wxNOT_FOUND ) + sel = m_currentRow; + else + sel = m_selection[0]; + + + const wxDataViewItem item = GetItemByRow(sel); + + // Edit the current column. If no column is focused + // (typically because the user has full row selected), try + // to find the first editable column. + wxDataViewColumn *editableCol = FindColumnForEditing(item, wxDATAVIEW_CELL_EDITABLE); + + if ( editableCol ) + GetOwner()->EditItem(item, editableCol); + } } break; case WXK_UP: if ( m_currentRow > 0 ) - OnArrowChar( m_currentRow - 1, event ); + OnVerticalNavigation( m_currentRow - 1, event ); break; case WXK_DOWN: - if ( m_currentRow < GetRowCount() - 1 ) - OnArrowChar( m_currentRow + 1, event ); + if ( m_currentRow + 1 < GetRowCount() ) + OnVerticalNavigation( m_currentRow + 1, event ); break; // Add the process for tree expanding/collapsing case WXK_LEFT: - { - if (IsList()) - break; - - wxDataViewTreeNode* node = GetTreeNodeByRow(m_currentRow); - if (!node) - break; - - if (node->HasChildren() && node->IsOpen()) - { - Collapse(m_currentRow); - } - else // if the node is already closed we move the selection to its parent - { - wxDataViewTreeNode *parent_node = node->GetParent(); - - if(!node->HasChildren()) - delete node; - - if (parent_node) - { - int parent = GetRowByItem( parent_node->GetItem() ); - if ( parent >= 0 ) - { - unsigned int row = m_currentRow; - SelectRow( row, false); - SelectRow( parent, true ); - ChangeCurrentRow( parent ); - GetOwner()->EnsureVisible( parent, -1 ); - SendSelectionChangedEvent( parent_node->GetItem() ); - } - } - } + OnLeftKey(); break; - } + case WXK_RIGHT: - { - if (!IsExpanded( m_currentRow )) - Expand( m_currentRow ); - else - { - unsigned int row = m_currentRow; - SelectRow( row, false ); - SelectRow( row + 1, true ); - ChangeCurrentRow( row + 1 ); - GetOwner()->EnsureVisible( row + 1, -1 ); - SendSelectionChangedEvent( GetItemByRow(row+1) ); - } + OnRightKey(); break; - } + case WXK_END: { if (!IsEmpty()) - OnArrowChar( GetRowCount() - 1, event ); + OnVerticalNavigation( GetRowCount() - 1, event ); break; } case WXK_HOME: if (!IsEmpty()) - OnArrowChar( 0, event ); + OnVerticalNavigation( 0, event ); break; case WXK_PAGEUP: @@ -3432,7 +3700,7 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event ) if (index < 0) index = 0; - OnArrowChar( index, event ); + OnVerticalNavigation( index, event ); } break; @@ -3444,17 +3712,7 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event ) if ( index >= count ) index = count - 1; - OnArrowChar( index, event ); - } - break; - - case WXK_F2: - { - if(m_selection.size() == 1) - { - // TODO: we need to revise that when we have a concept for a 'current column' - GetOwner()->StartEditor(GetItemByRow(m_selection[0]), 0); - } + OnVerticalNavigation( index, event ); } break; @@ -3463,6 +3721,184 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event ) } } +void wxDataViewMainWindow::OnVerticalNavigation(unsigned int newCurrent, const wxKeyEvent& event) +{ + wxCHECK_RET( newCurrent < GetRowCount(), + wxT("invalid item index in OnVerticalNavigation()") ); + + // if there is no selection, we cannot move it anywhere + if (!HasCurrentRow()) + return; + + unsigned int oldCurrent = m_currentRow; + + // in single selection we just ignore Shift as we can't select several + // items anyhow + if ( event.ShiftDown() && !IsSingleSel() ) + { + RefreshRow( oldCurrent ); + + ChangeCurrentRow( newCurrent ); + + // select all the items between the old and the new one + if ( oldCurrent > newCurrent ) + { + newCurrent = oldCurrent; + oldCurrent = m_currentRow; + } + + SelectRows( oldCurrent, newCurrent, true ); + if (oldCurrent!=newCurrent) + SendSelectionChangedEvent(GetItemByRow(m_selection[0])); + } + else // !shift + { + RefreshRow( oldCurrent ); + + // all previously selected items are unselected unless ctrl is held + if ( !event.ControlDown() ) + SelectAllRows(false); + + ChangeCurrentRow( newCurrent ); + + if ( !event.ControlDown() ) + { + SelectRow( m_currentRow, true ); + SendSelectionChangedEvent(GetItemByRow(m_currentRow)); + } + else + RefreshRow( m_currentRow ); + } + + GetOwner()->EnsureVisible( m_currentRow, -1 ); +} + +void wxDataViewMainWindow::OnLeftKey() +{ + if ( IsList() ) + { + TryAdvanceCurrentColumn(NULL, /*forward=*/false); + } + else + { + wxDataViewTreeNode* node = GetTreeNodeByRow(m_currentRow); + + if ( TryAdvanceCurrentColumn(node, /*forward=*/false) ) + return; + + // Because TryAdvanceCurrentColumn() return false, we are at the first + // column or using whole-row selection. In this situation, we can use + // the standard TreeView handling of the left key. + if (node->HasChildren() && node->IsOpen()) + { + Collapse(m_currentRow); + } + else + { + // if the node is already closed, we move the selection to its parent + wxDataViewTreeNode *parent_node = node->GetParent(); + + if (parent_node) + { + int parent = GetRowByItem( parent_node->GetItem() ); + if ( parent >= 0 ) + { + unsigned int row = m_currentRow; + SelectRow( row, false); + SelectRow( parent, true ); + ChangeCurrentRow( parent ); + GetOwner()->EnsureVisible( parent, -1 ); + SendSelectionChangedEvent( parent_node->GetItem() ); + } + } + } + } +} + +void wxDataViewMainWindow::OnRightKey() +{ + if ( IsList() ) + { + TryAdvanceCurrentColumn(NULL, /*forward=*/true); + } + else + { + wxDataViewTreeNode* node = GetTreeNodeByRow(m_currentRow); + + if ( node->HasChildren() ) + { + if ( !node->IsOpen() ) + { + Expand( m_currentRow ); + } + else + { + // if the node is already open, we move the selection to the first child + unsigned int row = m_currentRow; + SelectRow( row, false ); + SelectRow( row + 1, true ); + ChangeCurrentRow( row + 1 ); + GetOwner()->EnsureVisible( row + 1, -1 ); + SendSelectionChangedEvent( GetItemByRow(row+1) ); + } + } + else + { + TryAdvanceCurrentColumn(node, /*forward=*/true); + } + } +} + +bool wxDataViewMainWindow::TryAdvanceCurrentColumn(wxDataViewTreeNode *node, bool forward) +{ + if ( GetOwner()->GetColumnCount() == 0 ) + return false; + + if ( !m_useCellFocus ) + return false; + + if ( node ) + { + // navigation shouldn't work in branch nodes without other columns: + if ( node->HasChildren() && !GetModel()->HasContainerColumns(node->GetItem()) ) + return false; + } + + if ( m_currentCol == NULL || !m_currentColSetByKeyboard ) + { + if ( forward ) + { + m_currentCol = GetOwner()->GetColumnAt(1); + m_currentColSetByKeyboard = true; + RefreshRow(m_currentRow); + return true; + } + else + return false; + } + + int idx = GetOwner()->GetColumnIndex(m_currentCol) + (forward ? +1 : -1); + + if ( idx >= (int)GetOwner()->GetColumnCount() ) + return false; + + GetOwner()->EnsureVisible(m_currentRow, idx); + + if ( idx < 1 ) + { + // We are going to the left of the second column. Reset to whole-row + // focus (which means first column would be edited). + m_currentCol = NULL; + RefreshRow(m_currentRow); + return true; + } + + m_currentCol = GetOwner()->GetColumnAt(idx); + m_currentColSetByKeyboard = true; + RefreshRow(m_currentRow); + return true; +} + void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) { if (event.GetEventType() == wxEVT_MOUSEWHEEL) @@ -3497,6 +3933,37 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) } xpos += c->GetWidth(); } + + wxDataViewModel* const model = GetModel(); + + const unsigned int current = GetLineAt( y ); + const wxDataViewItem item = GetItemByRow(current); + + // Handle right clicking here, before everything else as context menu + // events should be sent even when we click outside of any item, unlike all + // the other ones. + if (event.RightUp()) + { + wxWindow *parent = GetParent(); + wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, parent->GetId()); + le.SetEventObject(parent); + le.SetModel(model); + + if ( item.IsOk() && col ) + { + le.SetItem( item ); + le.SetColumn( col->GetModelColumn() ); + le.SetDataViewColumn( col ); + + wxVariant value; + model->GetValue( value, item, col->GetModelColumn() ); + le.SetValue(value); + } + + parent->ProcessWindowEvent(le); + return; + } + if (!col) { event.Skip(); @@ -3504,7 +3971,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) } wxDataViewRenderer *cell = col->GetRenderer(); - unsigned int current = GetLineAt( y ); if ((current >= GetRowCount()) || (x > GetEndOfLastCol())) { // Unselect all if below the last row ? @@ -3512,21 +3978,29 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) return; } - // Test whether the mouse is hovered on the tree item button + wxDataViewColumn* const + expander = GetExpanderColumnOrFirstOne(GetOwner()); + + // Test whether the mouse is hovering over the expander (a.k.a tree "+" + // button) and also determine the offset of the real cell start, skipping + // the indentation and the expander itself. bool hoverOverExpander = false; - if ((!IsList()) && (GetOwner()->GetExpanderColumn() == col)) + int itemOffset = 0; + if ((!IsList()) && (expander == col)) { wxDataViewTreeNode * node = GetTreeNodeByRow(current); - if( node!=NULL && node->HasChildren() ) - { - int indent = node->GetIndentLevel(); - indent = GetOwner()->GetIndent()*indent; + int indent = node->GetIndentLevel(); + itemOffset = GetOwner()->GetIndent()*indent; + + if ( node->HasChildren() ) + { // we make the rectangle we are looking in a bit bigger than the actual // visual expander so the user can hit that little thing reliably - wxRect rect( xpos + indent, + wxRect rect(itemOffset, GetLineStart( current ) + (GetLineHeight(current) - m_lineHeight)/2, m_lineHeight, m_lineHeight); + if( rect.Contains(x, y) ) { // So the mouse is over the expander @@ -3544,8 +4018,10 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) m_underMouse = node; } } - if (node!=NULL && !node->HasChildren()) - delete node; + + // Account for the expander as well, even if this item doesn't have it, + // its parent does so it still counts for the offset. + itemOffset += m_lineHeight; } if (!hoverOverExpander) { @@ -3557,8 +4033,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) } } - wxDataViewModel *model = GetOwner()->GetModel(); - #if wxUSE_DRAG_AND_DROP if (event.Dragging()) { @@ -3580,12 +4054,12 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) m_owner->CalcUnscrolledPosition( m_dragStart.x, m_dragStart.y, &m_dragStart.x, &m_dragStart.y ); unsigned int drag_item_row = GetLineAt( m_dragStart.y ); - wxDataViewItem item = GetItemByRow( drag_item_row ); + wxDataViewItem itemDragged = GetItemByRow( drag_item_row ); // Notify cell about drag wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() ); event.SetEventObject( m_owner ); - event.SetItem( item ); + event.SetItem( itemDragged ); event.SetModel( model ); if (!m_owner->HandleWindowEvent( event )) return; @@ -3618,9 +4092,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) m_lastOnSame = false; } - wxDataViewItem item = GetItemByRow(current); bool ignore_other_columns = - ((GetOwner()->GetExpanderColumn() != col) && + ((expander != col) && (model->IsContainer(item)) && (!model->HasContainerColumns(item))); @@ -3633,28 +4106,15 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) } else if ( current == m_lineLastClicked ) { - if ((!ignore_other_columns) && (cell->GetMode() == wxDATAVIEW_CELL_ACTIVATABLE)) - { - const unsigned colIdx = col->GetModelColumn(); + wxWindow *parent = GetParent(); + wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, parent->GetId()); + le.SetItem( item ); + le.SetColumn( col->GetModelColumn() ); + le.SetDataViewColumn( col ); + le.SetEventObject(parent); + le.SetModel(GetModel()); - cell->PrepareForItem(model, item, colIdx); - - wxRect cell_rect( xpos, GetLineStart( current ), - col->GetWidth(), GetLineHeight( current ) ); - cell->WXOnActivate( cell_rect, model, item, colIdx ); - } - else - { - wxWindow *parent = GetParent(); - wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, parent->GetId()); - le.SetItem( item ); - le.SetColumn( col->GetModelColumn() ); - le.SetDataViewColumn( col ); - le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); - - parent->GetEventHandler()->ProcessEvent(le); - } + parent->ProcessWindowEvent(le); return; } else @@ -3680,7 +4140,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) if (m_lastOnSame && !ignore_other_columns) { if ((col == m_currentCol) && (current == m_currentRow) && - (cell->GetMode() & wxDATAVIEW_CELL_EDITABLE) ) + IsCellEditableInMode(item, col, wxDATAVIEW_CELL_EDITABLE) ) { m_renameTimer->Start( 100, true ); } @@ -3708,25 +4168,13 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) if (!IsRowSelected(current)) { SelectAllRows(false); + const unsigned oldCurrent = m_currentRow; ChangeCurrentRow(current); SelectRow(m_currentRow,true); + RefreshRow(oldCurrent); SendSelectionChangedEvent(GetItemByRow( m_currentRow ) ); } } - else if (event.RightUp()) - { - wxVariant value; - model->GetValue( value, item, col->GetModelColumn() ); - wxWindow *parent = GetParent(); - wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, parent->GetId()); - le.SetItem( item ); - le.SetColumn( col->GetModelColumn() ); - le.SetDataViewColumn( col ); - le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); - le.SetValue(value); - parent->GetEventHandler()->ProcessEvent(le); - } else if (event.MiddleDown()) { } @@ -3805,18 +4253,21 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) // Update selection here... m_currentCol = col; + m_currentColSetByKeyboard = false; m_lastOnSame = !simulateClick && ((col == oldCurrentCol) && (current == oldCurrentRow)) && oldWasSelected; - // Call LeftClick after everything else as under GTK+ - if (cell->GetMode() & wxDATAVIEW_CELL_ACTIVATABLE) + // Call ActivateCell() after everything else as under GTK+ + if ( IsCellEditableInMode(item, col, wxDATAVIEW_CELL_ACTIVATABLE) ) { // notify cell about click cell->PrepareForItem(model, item, col->GetModelColumn()); - wxRect cell_rect( xpos, GetLineStart( current ), - col->GetWidth(), GetLineHeight( current ) ); + wxRect cell_rect( xpos + itemOffset, + GetLineStart( current ), + col->GetWidth() - itemOffset, + GetLineHeight( current ) ); // Report position relative to the cell's custom area, i.e. // no the entire space as given by the control but the one @@ -3848,14 +4299,19 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) } } - wxPoint pos( event.GetPosition() ); - pos.x -= rectItem.x; - pos.y -= rectItem.y; + wxMouseEvent event2(event); + event2.m_x -= rectItem.x; + event2.m_y -= rectItem.y; + m_owner->CalcUnscrolledPosition(event2.m_x, event2.m_y, &event2.m_x, &event2.m_y); - m_owner->CalcUnscrolledPosition( pos.x, pos.y, &pos.x, &pos.y ); - - /* ignore ret */ cell->WXOnLeftClick( pos, cell_rect, - model, item, col->GetModelColumn()); + /* ignore ret */ cell->WXActivateCell + ( + cell_rect, + model, + item, + col->GetModelColumn(), + &event2 + ); } } } @@ -3880,12 +4336,23 @@ void wxDataViewMainWindow::OnKillFocus( wxFocusEvent &event ) event.Skip(); } -wxDataViewItem wxDataViewMainWindow::GetSelection() const +void wxDataViewMainWindow::OnColumnsCountChanged() { - if( m_selection.GetCount() != 1 ) - return wxDataViewItem(); + int editableCount = 0; - return GetItemByRow( m_selection.Item(0)); + const unsigned cols = GetOwner()->GetColumnCount(); + for ( unsigned i = 0; i < cols; i++ ) + { + wxDataViewColumn *c = GetOwner()->GetColumnAt(i); + if ( c->IsHidden() ) + continue; + if ( c->GetRenderer()->GetMode() != wxDATAVIEW_CELL_INERT ) + editableCount++; + } + + m_useCellFocus = (editableCount > 1); + + UpdateDisplay(); } //----------------------------------------------------------------------------- @@ -3917,6 +4384,8 @@ void wxDataViewCtrl::Init() m_sortingColumnIdx = wxNOT_FOUND; m_headerArea = NULL; + + m_colsDirty = false; } bool wxDataViewCtrl::Create(wxWindow *parent, @@ -4010,6 +4479,16 @@ void wxDataViewCtrl::OnSize( wxSizeEvent &WXUNUSED(event) ) Layout(); AdjustScrollbars(); + + // We must redraw the headers if their height changed. Normally this + // shouldn't happen as the control shouldn't let itself be resized beneath + // its minimal height but avoid the display artefacts that appear if it + // does happen, e.g. because there is really not enough vertical space. + if ( !HasFlag(wxDV_NO_HEADER) && m_headerArea && + m_headerArea->GetSize().y <= m_headerArea->GetBestSize(). y ) + { + m_headerArea->Refresh(); + } } void wxDataViewCtrl::SetFocus() @@ -4096,7 +4575,7 @@ void wxDataViewCtrl::OnColumnsCountChanged() if (m_headerArea) m_headerArea->SetColumnCount(GetColumnCount()); - m_clientArea->UpdateDisplay(); + m_clientArea->OnColumnsCountChanged(); } void wxDataViewCtrl::DoSetExpanderColumn() @@ -4114,6 +4593,16 @@ unsigned int wxDataViewCtrl::GetColumnCount() const return m_cols.GetCount(); } +bool wxDataViewCtrl::SetRowHeight( int lineHeight ) +{ + if ( !m_clientArea ) + return false; + + m_clientArea->SetRowHeight(lineHeight); + + return true; +} + wxDataViewColumn* wxDataViewCtrl::GetColumn( unsigned int idx ) const { return m_cols[idx]; @@ -4154,16 +4643,25 @@ unsigned int wxDataViewCtrl::GetBestColumnWidth(int idx) const class MaxWidthCalculator { public: - MaxWidthCalculator(wxDataViewMainWindow *clientArea, + MaxWidthCalculator(const wxDataViewCtrl *dvc, + wxDataViewMainWindow *clientArea, wxDataViewRenderer *renderer, const wxDataViewModel *model, - unsigned column) + unsigned column, + int expanderSize) : m_width(0), + m_dvc(dvc), m_clientArea(clientArea), m_renderer(renderer), m_model(model), - m_column(column) + m_column(column), + m_expanderSize(expanderSize) + { + m_isExpanderCol = + !clientArea->IsList() && + (column == 0 || + GetExpanderColumnOrFirstOne(const_cast(dvc)) == dvc->GetColumnAt(column)); } void UpdateWithWidth(int width) @@ -4173,32 +4671,43 @@ unsigned int wxDataViewCtrl::GetBestColumnWidth(int idx) const void UpdateWithRow(int row) { - wxDataViewItem item = m_clientArea->GetItemByRow(row); + int indent = 0; + wxDataViewItem item; + + if ( m_isExpanderCol ) + { + wxDataViewTreeNode *node = m_clientArea->GetTreeNodeByRow(row); + item = node->GetItem(); + indent = m_dvc->GetIndent() * node->GetIndentLevel() + m_expanderSize; + } + else + { + item = m_clientArea->GetItemByRow(row); + } + m_renderer->PrepareForItem(m_model, item, m_column); - m_width = wxMax(m_width, m_renderer->GetSize().x); + m_width = wxMax(m_width, m_renderer->GetSize().x + indent); } int GetMaxWidth() const { return m_width; } private: int m_width; + const wxDataViewCtrl *m_dvc; wxDataViewMainWindow *m_clientArea; wxDataViewRenderer *m_renderer; const wxDataViewModel *m_model; unsigned m_column; + bool m_isExpanderCol; + int m_expanderSize; }; - MaxWidthCalculator calculator(m_clientArea, renderer, - GetModel(), column->GetModelColumn()); + MaxWidthCalculator calculator(this, m_clientArea, renderer, + GetModel(), column->GetModelColumn(), + m_clientArea->GetRowHeight()); if ( m_headerArea ) - { - int header_width = m_headerArea->GetTextExtent(column->GetTitle()).x; - // Labels on native MSW header are indented on both sides - header_width += - wxRendererNative::Get().GetHeaderButtonMargin(m_headerArea); - calculator.UpdateWithWidth(header_width); - } + calculator.UpdateWithWidth(m_headerArea->GetColumnTitleWidth(*column)); // The code below deserves some explanation. For very large controls, we // simply can't afford to calculate sizes for all items, it takes too @@ -4293,6 +4802,10 @@ bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column ) m_colsBestWidths.erase(m_colsBestWidths.begin() + GetColumnIndex(column)); m_cols.Erase(ret); + + if ( m_clientArea->GetCurrentColumn() == column ) + m_clientArea->ClearCurrentColumn(); + OnColumnsCountChanged(); return true; @@ -4300,36 +4813,56 @@ bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column ) bool wxDataViewCtrl::ClearColumns() { + SetExpanderColumn(NULL); m_cols.Clear(); m_colsBestWidths.clear(); + + m_clientArea->ClearCurrentColumn(); + OnColumnsCountChanged(); + return true; } void wxDataViewCtrl::InvalidateColBestWidth(int idx) { m_colsBestWidths[idx] = 0; - - if ( m_headerArea ) - m_headerArea->UpdateColumn(idx); + m_colsDirty = true; } void wxDataViewCtrl::InvalidateColBestWidths() { m_colsBestWidths.clear(); m_colsBestWidths.resize(m_cols.size()); + m_colsDirty = true; +} - if ( m_headerArea ) +void wxDataViewCtrl::UpdateColWidths() +{ + if ( !m_headerArea ) + return; + + const unsigned len = m_colsBestWidths.size(); + for ( unsigned i = 0; i < len; i++ ) { - const unsigned cols = m_headerArea->GetColumnCount(); - for ( unsigned i = 0; i < cols; i++ ) + if ( m_colsBestWidths[i] == 0 ) m_headerArea->UpdateColumn(i); } } +void wxDataViewCtrl::OnInternalIdle() +{ + wxDataViewCtrlBase::OnInternalIdle(); + + if ( m_colsDirty ) + { + m_colsDirty = false; + UpdateColWidths(); + } +} + int wxDataViewCtrl::GetColumnPosition( const wxDataViewColumn *column ) const { -#if 1 unsigned int len = GetColumnCount(); for ( unsigned int i = 0; i < len; i++ ) { @@ -4339,25 +4872,6 @@ int wxDataViewCtrl::GetColumnPosition( const wxDataViewColumn *column ) const } return wxNOT_FOUND; -#else - // This returns the position in pixels which is not what we want. - int ret = 0, - dummy = 0; - unsigned int len = GetColumnCount(); - for ( unsigned int i = 0; i < len; i++ ) - { - wxDataViewColumn * col = GetColumnAt(i); - if (col->IsHidden()) - continue; - ret += col->GetWidth(); - if (column==col) - { - CalcScrolledPosition( ret, dummy, &ret, &dummy ); - break; - } - } - return ret; -#endif } wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const @@ -4384,23 +4898,36 @@ void wxDataViewCtrl::DoSetCurrentItem(const wxDataViewItem& item) } } -// Selection code with wxDataViewItem as parameters -wxDataViewItem wxDataViewCtrl::GetSelection() const +wxDataViewColumn *wxDataViewCtrl::GetCurrentColumn() const { - return m_clientArea->GetSelection(); + return m_clientArea->GetCurrentColumn(); +} + +int wxDataViewCtrl::GetSelectedItemsCount() const +{ + return m_clientArea->GetSelections().size(); } int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const { sel.Empty(); - wxDataViewSelection selection = m_clientArea->GetSelections(); - int len = selection.GetCount(); - for( int i = 0; i < len; i ++) + const wxDataViewSelection& selections = m_clientArea->GetSelections(); + + const size_t len = selections.size(); + for ( size_t i = 0; i < len; i++ ) { - unsigned int row = selection[i]; - sel.Add( m_clientArea->GetItemByRow( row ) ); + wxDataViewItem item = m_clientArea->GetItemByRow(selections[i]); + if ( item.IsOk() ) + { + sel.Add(item); + } + else + { + wxFAIL_MSG( "invalid item in selection - bad internal state" ); + } } - return len; + + return sel.size(); } void wxDataViewCtrl::SetSelections( const wxDataViewItemArray & sel ) @@ -4464,71 +4991,9 @@ bool wxDataViewCtrl::IsSelected( const wxDataViewItem & item ) const return false; } -// Selection code with row number as parameter -int wxDataViewCtrl::GetSelections( wxArrayInt & sel ) const +void wxDataViewCtrl::SetAlternateRowColour(const wxColour& colour) { - sel.Empty(); - wxDataViewSelection selection = m_clientArea->GetSelections(); - int len = selection.GetCount(); - for( int i = 0; i < len; i ++) - { - unsigned int row = selection[i]; - sel.Add( row ); - } - return len; -} - -void wxDataViewCtrl::SetSelections( const wxArrayInt & sel ) -{ - wxDataViewSelection selection(wxDataViewSelectionCmp); - int len = sel.GetCount(); - for( int i = 0; i < len; i ++ ) - { - int row = sel[i]; - if( row >= 0 ) - selection.Add( static_cast(row) ); - } - m_clientArea->SetSelections( selection ); -} - -void wxDataViewCtrl::Select( int row ) -{ - if( row >= 0 ) - { - if (m_clientArea->IsSingleSel()) - m_clientArea->SelectAllRows(false); - m_clientArea->SelectRow( row, true ); - } -} - -void wxDataViewCtrl::Unselect( int row ) -{ - if( row >= 0 ) - m_clientArea->SelectRow(row, false); -} - -bool wxDataViewCtrl::IsSelected( int row ) const -{ - if( row >= 0 ) - return m_clientArea->IsRowSelected(row); - return false; -} - -void wxDataViewCtrl::SelectRange( int from, int to ) -{ - wxArrayInt sel; - for( int i = from; i < to; i ++ ) - sel.Add( i ); - m_clientArea->Select(sel); -} - -void wxDataViewCtrl::UnselectRange( int from, int to ) -{ - wxDataViewSelection sel = m_clientArea->GetSelections(); - for( int i = from; i < to; i ++ ) - if( sel.Index( i ) != wxNOT_FOUND ) - sel.Remove( i ); - m_clientArea->SetSelections(sel); + m_alternateRowColour = colour; } void wxDataViewCtrl::SelectAll() @@ -4621,16 +5086,12 @@ bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const return false; } -void wxDataViewCtrl::StartEditor( const wxDataViewItem & item, unsigned int column ) +void wxDataViewCtrl::EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) { - wxDataViewColumn* col = GetColumn( column ); - if (!col) - return; + wxCHECK_RET( item.IsOk(), "invalid item" ); + wxCHECK_RET( column, "no column provided" ); - wxRect itemRect = GetItemRect(item, col); - wxDataViewRenderer* renderer = col->GetRenderer(); - if (renderer->GetMode() == wxDATAVIEW_CELL_EDITABLE) - renderer->StartEditing(item, itemRect); + m_clientArea->StartEditing(item, column); } #endif // !wxUSE_GENERICDATAVIEWCTRL diff --git a/Externals/wxWidgets3/src/generic/datectlg.cpp b/Externals/wxWidgets3/src/generic/datectlg.cpp index 7e3a760573..a1b3e0a13d 100644 --- a/Externals/wxWidgets3/src/generic/datectlg.cpp +++ b/Externals/wxWidgets3/src/generic/datectlg.cpp @@ -4,7 +4,7 @@ // Author: Andreas Pflug // Modified by: // Created: 2005-01-19 -// RCS-ID: $Id: datectlg.cpp 66771 2011-01-26 15:52:41Z SC $ +// RCS-ID: $Id: datectlg.cpp 68910 2011-08-27 12:13:18Z VZ $ // Copyright: (c) 2005 Andreas Pflug // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -209,11 +209,15 @@ private: // functions honours wxDP_SHOWCENTURY flag. wxString GetLocaleDateFormat() const { +#if wxUSE_INTL wxString fmt = wxLocale::GetInfo(wxLOCALE_SHORT_DATE_FMT); if ( HasDPFlag(wxDP_SHOWCENTURY) ) fmt.Replace("%y", "%Y"); return fmt; +#else // !wxUSE_INTL + return wxT("x"); +#endif // wxUSE_INTL/!wxUSE_INTL } bool SetFormat(const wxString& fmt) @@ -381,10 +385,8 @@ wxSize wxDatePickerCtrlGeneric::DoGetBestSize() const wxWindowList wxDatePickerCtrlGeneric::GetCompositeWindowParts() const { wxWindowList parts; - if (m_combo) - parts.push_back(m_combo); - if (m_popup) - parts.push_back(m_popup); + parts.push_back(m_combo); + parts.push_back(m_popup); return parts; } diff --git a/Externals/wxWidgets3/src/generic/dbgrptg.cpp b/Externals/wxWidgets3/src/generic/dbgrptg.cpp index efbe4d8b6a..6cc1f4bc35 100644 --- a/Externals/wxWidgets3/src/generic/dbgrptg.cpp +++ b/Externals/wxWidgets3/src/generic/dbgrptg.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin, Andrej Putrin // Modified by: // Created: 2005-01-21 -// RCS-ID: $Id: dbgrptg.cpp 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: dbgrptg.cpp 69828 2011-11-27 19:49:43Z VZ $ // Copyright: (c) 2005 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -228,7 +228,7 @@ void wxDumpOpenExternalDlg::OnBrowse(wxCommandEvent& ) fname.GetPathWithSep(), fname.GetFullName() #ifdef __WXMSW__ - , _("Executable files (*.exe)|*.exe|All files (*.*)|*.*||") + , _("Executable files (*.exe)|*.exe|") + wxALL_FILES #endif // __WXMSW__ ); if ( dlg.ShowModal() == wxID_OK ) diff --git a/Externals/wxWidgets3/src/generic/dcpsg.cpp b/Externals/wxWidgets3/src/generic/dcpsg.cpp index 5eabe59d83..09980ebf5f 100644 --- a/Externals/wxWidgets3/src/generic/dcpsg.cpp +++ b/Externals/wxWidgets3/src/generic/dcpsg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart, Robert Roebling, Markus Holzhem // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: dcpsg.cpp 65820 2010-10-15 23:46:46Z VZ $ +// RCS-ID: $Id: dcpsg.cpp 69243 2011-09-30 15:26:36Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -509,13 +509,10 @@ void wxPostScriptDCImpl::DoDrawArc (wxCoord x1, wxCoord y1, wxCoord x2, wxCoord wxString buffer; buffer.Printf( "newpath\n" "%f %f %f %f %f %f ellipse\n" - "%f %f lineto\n" - "closepath\n" "stroke\n", XLOG2DEV(xc), YLOG2DEV(yc), XLOG2DEVREL(i_radius), YLOG2DEVREL(i_radius), - alpha1, alpha2, - XLOG2DEV(xc), YLOG2DEV(yc) ); + alpha1, alpha2 ); buffer.Replace( ",", "." ); PsPrint( buffer ); @@ -971,11 +968,11 @@ void wxPostScriptDCImpl::DoDrawBitmap( const wxBitmap& bitmap, wxCoord x, wxCoor { wxCHECK_RET( m_ok, wxT("invalid postscript dc") ); - if (!bitmap.Ok()) return; + if (!bitmap.IsOk()) return; wxImage image = bitmap.ConvertToImage(); - if (!image.Ok()) return; + if (!image.IsOk()) return; wxCoord w = image.GetWidth(); wxCoord h = image.GetHeight(); @@ -1041,7 +1038,7 @@ void wxPostScriptDCImpl::SetFont( const wxFont& font ) { wxCHECK_RET( m_ok, wxT("invalid postscript dc") ); - if (!font.Ok()) return; + if (!font.IsOk()) return; m_font = font; @@ -1136,9 +1133,9 @@ void wxPostScriptDCImpl::SetPen( const wxPen& pen ) { wxCHECK_RET( m_ok, wxT("invalid postscript dc") ); - if (!pen.Ok()) return; + if (!pen.IsOk()) return; - int oldStyle = m_pen.GetStyle(); + int oldStyle = m_pen.IsOk() ? m_pen.GetStyle() : wxPENSTYLE_INVALID; m_pen = pen; @@ -1243,7 +1240,7 @@ void wxPostScriptDCImpl::SetBrush( const wxBrush& brush ) { wxCHECK_RET( m_ok, wxT("invalid postscript dc") ); - if (!brush.Ok()) return; + if (!brush.IsOk()) return; m_brush = brush; @@ -1291,7 +1288,7 @@ void wxPostScriptDCImpl::DoDrawText( const wxString& text, wxCoord x, wxCoord y if ( !textbuf ) return; - if (m_textForegroundColour.Ok()) + if (m_textForegroundColour.IsOk()) { unsigned char red = m_textForegroundColour.Red(); unsigned char blue = m_textForegroundColour.Blue(); @@ -1401,7 +1398,7 @@ void wxPostScriptDCImpl::DoDrawRotatedText( const wxString& text, wxCoord x, wxC SetFont( m_font ); - if (m_textForegroundColour.Ok()) + if (m_textForegroundColour.IsOk()) { unsigned char red = m_textForegroundColour.Red(); unsigned char blue = m_textForegroundColour.Blue(); @@ -1960,7 +1957,7 @@ bool wxPostScriptDCImpl::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord wxPostScriptDCImpl::GetCharHeight() const { - if (m_font.Ok()) + if (m_font.IsOk()) return m_font.GetPointSize(); else return 12; @@ -2058,7 +2055,7 @@ void wxPostScriptDCImpl::DoGetTextExtent(const wxString& string, / example: / / wxPostScriptDC dc(NULL, true); - / if (dc.Ok()){ + / if (dc.IsOk()){ / wxSetAFMPath("d:\\wxw161\\afm\\"); / dc.StartDoc("Test"); / dc.StartPage(); diff --git a/Externals/wxWidgets3/src/generic/descrip.mms b/Externals/wxWidgets3/src/generic/descrip.mms index b8365be853..558e6636dd 100644 --- a/Externals/wxWidgets3/src/generic/descrip.mms +++ b/Externals/wxWidgets3/src/generic/descrip.mms @@ -2,7 +2,7 @@ # * # Make file for VMS * # Author : J.Jansen (joukj@hrem.nano.tudelft.nl) * -# Date : 21 March 2011 * +# Date : 3 January 2012 * # * #***************************************************************************** .first @@ -70,7 +70,6 @@ OBJECTS = \ msgdlgg.obj,\ numdlgg.obj,\ odcombo.obj,\ - panelg.obj,\ printps.obj,\ prntdlgg.obj,\ propdlg.obj,\ @@ -95,7 +94,8 @@ OBJECTS = \ grideditors.obj,vlbox.obj,vscroll.obj,stattextg.obj,\ editlbox.obj,datavgen.obj,dbgrptg.obj,dragimgg.obj,\ richmsgdlgg.obj,commandlinkbuttong.obj,spinctlg.obj,\ - markuptext.obj + markuptext.obj,bannerwindow.obj,timectrlg.obj,richtooltipg.obj\ + ,statbmpg.obj SOURCES = \ aboutdlgg.cpp,\ @@ -132,7 +132,6 @@ SOURCES = \ numdlgg.cpp,\ odcombo.cpp,\ paletteg.cpp,\ - panelg.cpp,\ printps.cpp,\ prntdlgg.cpp,\ propdlg.cpp,\ @@ -167,7 +166,8 @@ SOURCES = \ icon.cpp,bmpcboxg.cpp,filectrlg.cpp,srchctlg.cpp,notifmsgg.cpp\ ,headerctrlg.cpp,grideditors.cpp,stattextg.cpp,editlbox.cpp,\ datavgen.cpp,dbgrptg.cpp,dragimgg.cpp,richmsgdlgg.cpp,\ - commandlinkbuttong.cpp,spinctlg.cpp markuptext.cpp + commandlinkbuttong.cpp,spinctlg.cpp markuptext.cpp \ + bannerwindow.cpp timectrlg.cpp richtooltipg.cpp statbmpg.cpp .ifdef __WXMOTIF__ OBJECTS0=statusbr.obj,statline.obj,notebook.obj,spinctlg.obj,collpaneg.obj,\ @@ -243,13 +243,13 @@ icon.obj : icon.cpp imaglist.obj : imaglist.cpp laywin.obj : laywin.cpp listctrl.obj : listctrl.cpp + cxx $(CXXFLAGS)$(CXX_DEFINE)/warn=disable=(INTTRUNCATED) listctrl.cpp logg.obj : logg.cpp msgdlgg.obj : msgdlgg.cpp notebook.obj : notebook.cpp numdlgg.obj : numdlgg.cpp odcombo.obj : odcombo.cpp paletteg.obj : paletteg.cpp -panelg.obj : panelg.cpp printps.obj : printps.cpp prntdlgg.obj : prntdlgg.cpp progdlgg.obj : progdlgg.cpp @@ -304,3 +304,7 @@ richmsgdlgg.obj : richmsgdlgg.cpp commandlinkbuttong.obj : commandlinkbuttong.cpp spinctlg.obj : spinctlg.cpp markuptext.obj : markuptext.cpp +bannerwindow.obj : bannerwindow.cpp +timectrlg.obj : timectrlg.cpp +richtooltipg.obj : richtooltipg.cpp +statbmpg.obj : statbmpg.cpp diff --git a/Externals/wxWidgets3/src/generic/dirctrlg.cpp b/Externals/wxWidgets3/src/generic/dirctrlg.cpp index 77ef878caf..358e0cea3c 100644 --- a/Externals/wxWidgets3/src/generic/dirctrlg.cpp +++ b/Externals/wxWidgets3/src/generic/dirctrlg.cpp @@ -4,7 +4,7 @@ // Author: Harm van der Heijden, Robert Roebling, Julian Smart // Modified by: // Created: 12/12/98 -// RCS-ID: $Id: dirctrlg.cpp 67206 2011-03-16 06:36:43Z SC $ +// RCS-ID: $Id: dirctrlg.cpp 70808 2012-03-04 20:31:42Z VZ $ // Copyright: (c) Harm van der Heijden, Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -55,7 +55,7 @@ #include "wx/osx/private.h" // includes mac headers #endif -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include #include "wx/msw/winundef.h" #include "wx/volume.h" @@ -71,7 +71,7 @@ #include #endif -#endif +#endif // __WINDOWS__ #if defined(__OS2__) || defined(__DOS__) #ifdef __OS2__ @@ -250,7 +250,7 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI } } -#elif defined(__UNIX__) || defined(__WXPALMOS__) +#elif defined(__UNIX__) paths.Add(wxT("/")); names.Add(wxT("/")); icon_ids.Add(wxFileIconsTable::computer); @@ -270,7 +270,7 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI bool wxIsDriveAvailable(const wxString& dirName) { - // FIXME_MGL - this method leads to hang up under Watcom for some reason + // FIXME: this method leads to hang up under Watcom for some reason #ifdef __WATCOMC__ wxUnusedVar(dirName); #else @@ -310,7 +310,7 @@ int setdrive(int WXUNUSED_IN_WINCE(drive)) #else newdrive[2] = wxT('\0'); #endif -#if defined(__WXMSW__) +#if defined(__WINDOWS__) if (::SetCurrentDirectory(newdrive)) #else // VA doesn't know what LPSTR is and has its own set @@ -1170,7 +1170,7 @@ void wxGenericDirCtrl::FindChildFiles(wxTreeItemId treeid, int dirFlags, wxArray wxString dirName(data->m_path); -#if defined(__WXMSW__) || defined(__OS2__) +#if defined(__WINDOWS__) || defined(__OS2__) if (dirName.Last() == ':') dirName += wxString(wxFILE_SEP_PATH); #endif @@ -1572,7 +1572,7 @@ wxImageList *wxFileIconsTable::GetSmallImageList() return m_smallImageList; } -#if wxUSE_MIMETYPE && wxUSE_IMAGE && (!defined(__WXMSW__) || wxUSE_WXDIB) +#if wxUSE_MIMETYPE && wxUSE_IMAGE && (!defined(__WINDOWS__) || wxUSE_WXDIB) // VS: we don't need this function w/o wxMimeTypesManager because we'll only have // one icon and we won't resize it @@ -1708,7 +1708,7 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) delete ft; - if ( !ic.Ok() ) + if ( !ic.IsOk() ) { int newid = file; m_HashTable->Put(extension, new wxFileIconEntry(newid)); @@ -1718,7 +1718,7 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) wxBitmap bmp; bmp.CopyFromIcon(ic); - if ( !bmp.Ok() ) + if ( !bmp.IsOk() ) { int newid = file; m_HashTable->Put(extension, new wxFileIconEntry(newid)); @@ -1732,7 +1732,7 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) { m_smallImageList->Add(bmp); } -#if wxUSE_IMAGE && (!defined(__WXMSW__) || wxUSE_WXDIB) +#if wxUSE_IMAGE && (!defined(__WINDOWS__) || wxUSE_WXDIB) else { wxImage img = bmp.ConvertToImage(); diff --git a/Externals/wxWidgets3/src/generic/dirdlgg.cpp b/Externals/wxWidgets3/src/generic/dirdlgg.cpp index 21f85928ef..8d25c0f04c 100644 --- a/Externals/wxWidgets3/src/generic/dirdlgg.cpp +++ b/Externals/wxWidgets3/src/generic/dirdlgg.cpp @@ -4,7 +4,7 @@ // Author: Harm van der Heijden, Robert Roebling & Julian Smart // Modified by: // Created: 12/12/98 -// RCS-ID: $Id: dirdlgg.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: dirdlgg.cpp 67384 2011-04-03 20:31:32Z DS $ // Copyright: (c) Harm van der Heijden, Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -166,7 +166,7 @@ bool wxGenericDirDialog::Create(wxWindow* parent, topsizer->Add(m_dirCtrl, wxSizerFlags(flagsBorder2).Proportion(1).Expand()); #ifndef __SMARTPHONE__ - // Make the an option depending on a flag? + // TODO: Make this an option depending on a flag? wxCheckBox * check = new wxCheckBox(this, ID_SHOW_HIDDEN, _("Show &hidden directories")); topsizer->Add(check, wxSizerFlags(flagsBorder2).Right()); diff --git a/Externals/wxWidgets3/src/generic/dragimgg.cpp b/Externals/wxWidgets3/src/generic/dragimgg.cpp index 1e84178dce..421926207c 100644 --- a/Externals/wxWidgets3/src/generic/dragimgg.cpp +++ b/Externals/wxWidgets3/src/generic/dragimgg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 29/2/2000 -// RCS-ID: $Id: dragimgg.cpp 64656 2010-06-20 18:18:23Z VZ $ +// RCS-ID: $Id: dragimgg.cpp 70749 2012-02-29 13:58:55Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -247,9 +247,9 @@ bool wxGenericDragImage::BeginDrag(const wxPoint& hotspot, m_boundingRect = * rect; m_isDirty = false; - m_isDirty = false; + m_isShown = false; - if (m_cursor.Ok()) + if (m_cursor.IsOk()) { m_oldCursor = window->GetCursor(); window->SetCursor(m_cursor); @@ -288,7 +288,7 @@ bool wxGenericDragImage::BeginDrag(const wxPoint& hotspot, #ifndef wxHAS_NATIVE_OVERLAY wxBitmap* backing = (m_pBackingBitmap ? m_pBackingBitmap : (wxBitmap*) & m_backingBitmap); - if (!backing->Ok() || (backing->GetWidth() < clientSize.x || backing->GetHeight() < clientSize.y)) + if (!backing->IsOk() || (backing->GetWidth() < clientSize.x || backing->GetHeight() < clientSize.y)) (*backing) = wxBitmap(clientSize.x, clientSize.y); #endif // !wxHAS_NATIVE_OVERLAY @@ -345,7 +345,7 @@ bool wxGenericDragImage::EndDrag() #endif m_window->ReleaseMouse(); - if (m_cursor.Ok() && m_oldCursor.Ok()) + if (m_cursor.IsOk() && m_oldCursor.IsOk()) { m_window->SetCursor(m_oldCursor); } @@ -467,7 +467,7 @@ bool wxGenericDragImage::RedrawImage(const wxPoint& oldPos, DoDrawImage(*m_windowDC, newPos); #else // !wxHAS_NATIVE_OVERLAY wxBitmap* backing = (m_pBackingBitmap ? m_pBackingBitmap : (wxBitmap*) & m_backingBitmap); - if (!backing->Ok()) + if (!backing->IsOk()) return false; wxRect oldRect(GetImageRect(oldPos)); @@ -499,7 +499,7 @@ bool wxGenericDragImage::RedrawImage(const wxPoint& oldPos, // keep reallocating all the time. int excess = 50; - if (!m_repairBitmap.Ok() || (m_repairBitmap.GetWidth() < fullRect.GetWidth() || m_repairBitmap.GetHeight() < fullRect.GetHeight())) + if (!m_repairBitmap.IsOk() || (m_repairBitmap.GetWidth() < fullRect.GetWidth() || m_repairBitmap.GetHeight() < fullRect.GetHeight())) { m_repairBitmap = wxBitmap(fullRect.GetWidth() + excess, fullRect.GetHeight() + excess); } @@ -539,12 +539,12 @@ bool wxGenericDragImage::RedrawImage(const wxPoint& oldPos, // Override this if you are using a virtual image (drawing your own image) bool wxGenericDragImage::DoDrawImage(wxDC& dc, const wxPoint& pos) const { - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) { dc.DrawBitmap(m_bitmap, pos.x, pos.y, (m_bitmap.GetMask() != 0)); return true; } - else if (m_icon.Ok()) + else if (m_icon.IsOk()) { dc.DrawIcon(m_icon, pos.x, pos.y); return true; @@ -556,11 +556,11 @@ bool wxGenericDragImage::DoDrawImage(wxDC& dc, const wxPoint& pos) const // Override this if you are using a virtual image (drawing your own image) wxRect wxGenericDragImage::GetImageRect(const wxPoint& pos) const { - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) { return wxRect(pos.x, pos.y, m_bitmap.GetWidth(), m_bitmap.GetHeight()); } - else if (m_icon.Ok()) + else if (m_icon.IsOk()) { return wxRect(pos.x, pos.y, m_icon.GetWidth(), m_icon.GetHeight()); } diff --git a/Externals/wxWidgets3/src/generic/filectrlg.cpp b/Externals/wxWidgets3/src/generic/filectrlg.cpp index e33397496b..67f713baf8 100644 --- a/Externals/wxWidgets3/src/generic/filectrlg.cpp +++ b/Externals/wxWidgets3/src/generic/filectrlg.cpp @@ -3,7 +3,7 @@ // Purpose: wxGenericFileCtrl Implementation // Author: Diaa M. Sami // Created: 2007-07-07 -// RCS-ID: $Id: filectrlg.cpp 67214 2011-03-16 07:22:56Z SC $ +// RCS-ID: $Id: filectrlg.cpp 70808 2012-03-04 20:31:42Z VZ $ // Copyright: (c) Diaa M. Sami // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -35,7 +35,7 @@ #include "wx/tokenzr.h" #include "wx/imaglist.h" -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/wrapwin.h" #endif @@ -53,7 +53,7 @@ // ---------------------------------------------------------------------------- static -int wxCALLBACK wxFileDataNameCompare( long data1, long data2, wxIntPtr sortOrder) +int wxCALLBACK wxFileDataNameCompare( wxIntPtr data1, wxIntPtr data2, wxIntPtr sortOrder) { wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); @@ -71,7 +71,7 @@ int wxCALLBACK wxFileDataNameCompare( long data1, long data2, wxIntPtr sortOrder } static -int wxCALLBACK wxFileDataSizeCompare(long data1, long data2, wxIntPtr sortOrder) +int wxCALLBACK wxFileDataSizeCompare(wxIntPtr data1, wxIntPtr data2, wxIntPtr sortOrder) { wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); @@ -93,7 +93,7 @@ int wxCALLBACK wxFileDataSizeCompare(long data1, long data2, wxIntPtr sortOrder) } static -int wxCALLBACK wxFileDataTypeCompare(long data1, long data2, wxIntPtr sortOrder) +int wxCALLBACK wxFileDataTypeCompare(wxIntPtr data1, wxIntPtr data2, wxIntPtr sortOrder) { wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); @@ -115,7 +115,7 @@ int wxCALLBACK wxFileDataTypeCompare(long data1, long data2, wxIntPtr sortOrder) } static -int wxCALLBACK wxFileDataTimeCompare(long data1, long data2, wxIntPtr sortOrder) +int wxCALLBACK wxFileDataTimeCompare(wxIntPtr data1, wxIntPtr data2, wxIntPtr sortOrder) { wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); @@ -377,7 +377,7 @@ void wxFileData::MakeItem( wxListItem &item ) if (IsLink()) { wxColour dg = wxTheColourDatabase->Find( wxT("MEDIUM GREY") ); - if ( dg.Ok() ) + if ( dg.IsOk() ) item.SetTextColour(dg); } item.m_data = wxPtrToUInt(this); diff --git a/Externals/wxWidgets3/src/generic/filedlgg.cpp b/Externals/wxWidgets3/src/generic/filedlgg.cpp index c4d34a9c5f..390abba9a7 100644 --- a/Externals/wxWidgets3/src/generic/filedlgg.cpp +++ b/Externals/wxWidgets3/src/generic/filedlgg.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Modified by: // Created: 12/12/98 -// RCS-ID: $Id: filedlgg.cpp 64019 2010-04-18 00:05:37Z VZ $ +// RCS-ID: $Id: filedlgg.cpp 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,7 +19,7 @@ #if wxUSE_FILEDLG // NOTE : it probably also supports MAC, untested -#if !defined(__UNIX__) && !defined(__DOS__) && !defined(__WIN32__) && !defined(__OS2__) && !defined(__PALMOS__) +#if !defined(__UNIX__) && !defined(__DOS__) && !defined(__WIN32__) && !defined(__OS2__) #error wxGenericFileDialog currently only supports Unix, win32 and DOS #endif @@ -57,7 +57,6 @@ #include "wx/config.h" #endif -#ifndef __WXPALMOS5__ #ifndef __WXWINCE__ #include #include @@ -86,7 +85,6 @@ #if defined(__UNIX__) || defined(__DOS__) #include #endif -#endif // ! __WXPALMOS5__ #if defined(__WXWINCE__) #define IsTopMostDir(dir) (dir == wxT("\\") || dir == wxT("/")) diff --git a/Externals/wxWidgets3/src/generic/filepickerg.cpp b/Externals/wxWidgets3/src/generic/filepickerg.cpp index 52e1c56b67..98c7935a7a 100644 --- a/Externals/wxWidgets3/src/generic/filepickerg.cpp +++ b/Externals/wxWidgets3/src/generic/filepickerg.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 15/04/2006 -// RCS-ID: $Id: filepickerg.cpp 63654 2010-03-08 19:37:08Z VZ $ +// RCS-ID: $Id: filepickerg.cpp 70732 2012-02-28 02:05:01Z VZ $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -26,8 +26,11 @@ #if wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL +#include "wx/filename.h" #include "wx/filepicker.h" +#include "wx/scopedptr.h" + // ============================================================================ // implementation @@ -54,8 +57,24 @@ bool wxGenericFileDirButton::Create(wxWindow *parent, { m_pickerStyle = style; + // If the special wxPB_SMALL flag is used, ignore the provided label and + // use the shortest possible label and the smallest possible button fitting + // it. + long styleButton = 0; + wxString labelButton; + if ( m_pickerStyle & wxPB_SMALL ) + { + labelButton = _("..."); + styleButton = wxBU_EXACTFIT; + } + else + { + labelButton = label; + } + // create this button - if ( !wxButton::Create(parent, id, label, pos, size, 0, validator, name) ) + if ( !wxButton::Create(parent, id, labelButton, + pos, size, styleButton, validator, name) ) { wxFAIL_MSG( wxT("wxGenericFileButton creation failed") ); return false; @@ -76,18 +95,80 @@ bool wxGenericFileDirButton::Create(wxWindow *parent, void wxGenericFileDirButton::OnButtonClick(wxCommandEvent& WXUNUSED(ev)) { - wxDialog *p = CreateDialog(); + wxScopedPtr p(CreateDialog()); if (p->ShowModal() == wxID_OK) { // save updated path in m_path - UpdatePathFromDialog(p); + UpdatePathFromDialog(p.get()); // fire an event wxFileDirPickerEvent event(GetEventType(), this, GetId(), m_path); GetEventHandler()->ProcessEvent(event); } +} - wxDELETE(p); +void wxGenericFileDirButton::SetInitialDirectory(const wxString& dir) +{ + m_initialDir = dir; +} + +// ---------------------------------------------------------------------------- +// wxGenericFileutton +// ---------------------------------------------------------------------------- + +void +wxGenericFileButton::DoSetInitialDirectory(wxFileDialog* dialog, + const wxString& dir) +{ + if ( m_path.find_first_of(wxFileName::GetPathSeparators()) == + wxString::npos ) + { + dialog->SetDirectory(dir); + } +} + +wxDialog *wxGenericFileButton::CreateDialog() +{ + wxFileDialog* const dialog = new wxFileDialog + ( + GetDialogParent(), + m_message, + wxEmptyString, + wxEmptyString, + m_wildcard, + GetDialogStyle() + ); + + // If there is no default file or if it doesn't have any path, use the + // explicitly set initial directory. + // + // Notice that it is important to call this before SetPath() below as if we + // do have m_initialDir and no directory in m_path, we need to interpret + // the path as being relative with respect to m_initialDir. + if ( !m_initialDir.empty() ) + DoSetInitialDirectory(dialog, m_initialDir); + + // This sets both the default file name and the default directory of the + // dialog if m_path contains directory part. + dialog->SetPath(m_path); + + return dialog; +} + +// ---------------------------------------------------------------------------- +// wxGenericDirButton +// ---------------------------------------------------------------------------- + +wxDialog *wxGenericDirButton::CreateDialog() +{ + wxDirDialog* const dialog = new wxDirDialog + ( + GetDialogParent(), + m_message, + m_path.empty() ? m_initialDir : m_path, + GetDialogStyle() + ); + return dialog; } #endif // wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL diff --git a/Externals/wxWidgets3/src/generic/fontdlgg.cpp b/Externals/wxWidgets3/src/generic/fontdlgg.cpp index 77f2b66217..391f5d57b9 100644 --- a/Externals/wxWidgets3/src/generic/fontdlgg.cpp +++ b/Externals/wxWidgets3/src/generic/fontdlgg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: fontdlgg.cpp 66728 2011-01-22 14:38:36Z DS $ +// RCS-ID: $Id: fontdlgg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -76,7 +76,7 @@ void wxFontPreviewer::OnPaint(wxPaintEvent& WXUNUSED(event)) dc.SetBrush(*wxWHITE_BRUSH); dc.DrawRectangle(0, 0, size.x, size.y); - if ( font.Ok() ) + if ( font.IsOk() ) { dc.SetFont(font); dc.SetTextForeground(GetForegroundColour()); @@ -550,7 +550,7 @@ void wxGenericFontDialog::InitializeFont() int fontSize = 12; bool fontUnderline = false; - if (m_fontData.m_initialFont.Ok()) + if (m_fontData.m_initialFont.IsOk()) { fontFamily = m_fontData.m_initialFont.GetFamily(); fontWeight = m_fontData.m_initialFont.GetWeight(); @@ -602,7 +602,7 @@ void wxGenericFontDialog::DoChangeFont() if ( !m_colourChoice->GetStringSelection().empty() ) { wxColour col = wxTheColourDatabase->Find(m_colourChoice->GetStringSelection()); - if (col.Ok()) + if (col.IsOk()) { m_fontData.m_fontColour = col; } @@ -610,7 +610,7 @@ void wxGenericFontDialog::DoChangeFont() } // Update color here so that we can also use the color originally passed in // (EnableEffects may be false) - if (m_fontData.m_fontColour.Ok()) + if (m_fontData.m_fontColour.IsOk()) m_previewer->SetForegroundColour(m_fontData.m_fontColour); m_previewer->Refresh(); diff --git a/Externals/wxWidgets3/src/generic/fontpickerg.cpp b/Externals/wxWidgets3/src/generic/fontpickerg.cpp index a1a61c0062..3d3b13ed6a 100644 --- a/Externals/wxWidgets3/src/generic/fontpickerg.cpp +++ b/Externals/wxWidgets3/src/generic/fontpickerg.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified by: // Created: 15/04/2006 -// RCS-ID: $Id: fontpickerg.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: fontpickerg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -97,7 +97,7 @@ void wxGenericFontButton::OnButtonClick(wxCommandEvent& WXUNUSED(ev)) void wxGenericFontButton::UpdateFont() { - if ( !m_selectedFont.Ok() ) + if ( !m_selectedFont.IsOk() ) return; SetForegroundColour(m_data.GetColour()); diff --git a/Externals/wxWidgets3/src/generic/graphicc.cpp b/Externals/wxWidgets3/src/generic/graphicc.cpp index 44e8ac6abf..68588879ae 100644 --- a/Externals/wxWidgets3/src/generic/graphicc.cpp +++ b/Externals/wxWidgets3/src/generic/graphicc.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 2006-10-03 -// RCS-ID: $Id: graphicc.cpp 66615 2011-01-07 05:26:57Z PC $ +// RCS-ID: $Id: graphicc.cpp 70477 2012-01-29 08:35:45Z PC $ // Copyright: (c) 2006 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -21,6 +21,10 @@ #if wxUSE_CAIRO +// keep cairo.h from defining dllimport as we're defining the symbols inside +// the wx dll in order to load them dynamically. +#define cairo_public + #include "wx/cairo.h" #ifndef WX_PRECOMP @@ -278,16 +282,24 @@ class wxCairoFontData : public wxGraphicsObjectRefData { public: wxCairoFontData( wxGraphicsRenderer* renderer, const wxFont &font, const wxColour& col ); + wxCairoFontData(wxGraphicsRenderer* renderer, + double sizeInPixels, + const wxString& facename, + int flags, + const wxColour& col); ~wxCairoFontData(); - virtual void Apply( wxGraphicsContext* context ); + virtual bool Apply( wxGraphicsContext* context ); #ifdef __WXGTK__ - const PangoFontDescription* GetFont() const { return m_font; } - bool GetUnderlined() const { return m_underlined; } + const wxFont& GetFont() const { return m_wxfont; } #endif private : + void InitColour(const wxColour& col); + void InitFontComponents(const wxString& facename, + cairo_font_slant_t slant, + cairo_font_weight_t weight); + double m_size; - bool m_underlined; double m_red; double m_green; double m_blue; @@ -295,28 +307,53 @@ private : #ifdef __WXMAC__ cairo_font_face_t *m_font; #elif defined(__WXGTK__) - PangoFontDescription* m_font; -#else + wxFont m_wxfont; +#endif + + // These members are used when the font is created from its face name and + // flags (and not from wxFont) and also even when creating it from wxFont + // on the platforms not covered above. + // + // Notice that we can't use cairo_font_face_t instead of storing those, + // even though it would be simpler and need less #ifdefs, because + // cairo_toy_font_face_create() that we'd need to create it is only + // available in Cairo 1.8 and we require just 1.2 currently. If we do drop + // support for < 1.8 versions in the future it would be definitely better + // to use cairo_toy_font_face_create() instead. wxCharBuffer m_fontName; cairo_font_slant_t m_slant; cairo_font_weight_t m_weight; -#endif -#ifdef __WXMSW__ - wxCairoContext( wxGraphicsRenderer* renderer, HDC context ); -#endif }; class wxCairoBitmapData : public wxGraphicsObjectRefData { public: wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitmap& bmp ); +#if wxUSE_IMAGE + wxCairoBitmapData(wxGraphicsRenderer* renderer, const wxImage& image); +#endif // wxUSE_IMAGE wxCairoBitmapData( wxGraphicsRenderer* renderer, cairo_surface_t* bitmap ); ~wxCairoBitmapData(); virtual cairo_surface_t* GetCairoSurface() { return m_surface; } virtual cairo_pattern_t* GetCairoPattern() { return m_pattern; } virtual wxSize GetSize() { return wxSize(m_width, m_height); } + +#if wxUSE_IMAGE + wxImage ConvertToImage() const; +#endif // wxUSE_IMAGE + private : + // Allocate m_buffer for the bitmap of the given size in the given format. + // + // Returns the stride used for the buffer. + int InitBuffer(int width, int height, cairo_format_t format); + + // Really create the surface using the buffer (which was supposed to be + // filled since InitBuffer() call). + void InitSurface(cairo_format_t format, int stride); + + cairo_surface_t* m_surface; cairo_pattern_t* m_pattern; int m_width; @@ -332,14 +369,23 @@ public: wxCairoContext( wxGraphicsRenderer* renderer, const wxPrinterDC& dc ); #ifdef __WXGTK__ wxCairoContext( wxGraphicsRenderer* renderer, GdkDrawable *drawable ); +#endif +#ifdef __WXMSW__ + wxCairoContext( wxGraphicsRenderer* renderer, HDC context ); #endif wxCairoContext( wxGraphicsRenderer* renderer, cairo_t *context ); wxCairoContext( wxGraphicsRenderer* renderer, wxWindow *window); - wxCairoContext(); + + // If this ctor is used, Init() must be called by the derived class later. + wxCairoContext( wxGraphicsRenderer* renderer ); + virtual ~wxCairoContext(); virtual bool ShouldOffset() const { + if ( !m_enableOffset ) + return false; + int penwidth = 0 ; if ( !m_pen.IsNull() ) { @@ -365,6 +411,8 @@ public: virtual bool SetAntialiasMode(wxAntialiasMode antialias); + virtual bool SetInterpolationQuality(wxInterpolationQuality interpolation); + virtual bool SetCompositionMode(wxCompositionMode op); virtual void BeginLayer(wxDouble opacity); @@ -400,9 +448,9 @@ public: protected: virtual void DoDrawText( const wxString &str, wxDouble x, wxDouble y ); -private: void Init(cairo_t *context); +private: cairo_t* m_context; wxVector m_layerOpacities; @@ -410,6 +458,35 @@ private: wxDECLARE_NO_COPY_CLASS(wxCairoContext); }; +#if wxUSE_IMAGE +// ---------------------------------------------------------------------------- +// wxCairoImageContext: context associated with a wxImage. +// ---------------------------------------------------------------------------- + +class wxCairoImageContext : public wxCairoContext +{ +public: + wxCairoImageContext(wxGraphicsRenderer* renderer, wxImage& image) : + wxCairoContext(renderer), + m_image(image), + m_data(renderer, image) + { + Init(cairo_create(m_data.GetCairoSurface())); + } + + virtual ~wxCairoImageContext() + { + m_image = m_data.ConvertToImage(); + } + +private: + wxImage& m_image; + wxCairoBitmapData m_data; + + wxDECLARE_NO_COPY_CLASS(wxCairoImageContext); +}; +#endif // wxUSE_IMAGE + //----------------------------------------------------------------------------- // wxCairoPenData implementation //----------------------------------------------------------------------------- @@ -548,7 +625,7 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen ) { /* wxBitmap* bmp = pen.GetStipple(); - if ( bmp && bmp->Ok() ) + if ( bmp && bmp->IsOk() ) { wxDELETE( m_penImage ); wxDELETE( m_penBrush ); @@ -663,7 +740,7 @@ wxCairoBrushData::wxCairoBrushData( wxGraphicsRenderer* renderer, const wxBrush else { wxBitmap* bmp = brush.GetStipple(); - if ( bmp && bmp->Ok() ) + if ( bmp && bmp->IsOk() ) { wxDELETE( m_brushImage ); m_brushImage = Bitmap::FromHBITMAP((HBITMAP)bmp->GetHBITMAP(),(HPALETTE)bmp->GetPalette()->GetHPALETTE()); @@ -747,50 +824,117 @@ void wxCairoBrushData::Init() // wxCairoFontData implementation //----------------------------------------------------------------------------- -wxCairoFontData::wxCairoFontData( wxGraphicsRenderer* renderer, const wxFont &font, - const wxColour& col ) : wxGraphicsObjectRefData(renderer) +void wxCairoFontData::InitColour(const wxColour& col) { m_red = col.Red()/255.0; m_green = col.Green()/255.0; m_blue = col.Blue()/255.0; m_alpha = col.Alpha()/255.0; +} + +void +wxCairoFontData::InitFontComponents(const wxString& facename, + cairo_font_slant_t slant, + cairo_font_weight_t weight) +{ + m_fontName = facename.mb_str(wxConvUTF8); + m_slant = slant; + m_weight = weight; +} + +wxCairoFontData::wxCairoFontData( wxGraphicsRenderer* renderer, const wxFont &font, + const wxColour& col ) + : wxGraphicsObjectRefData(renderer) +#ifdef __WXGTK__ + , m_wxfont(font) +#endif +{ + InitColour(col); + m_size = font.GetPointSize(); - m_underlined = font.GetUnderlined(); #ifdef __WXMAC__ m_font = cairo_quartz_font_face_create_for_cgfont( font.OSXGetCGFont() ); #elif defined(__WXGTK__) - m_font = pango_font_description_copy( font.GetNativeFontInfo()->description ); #else - m_fontName = font.GetFaceName().mb_str(wxConvUTF8); - m_slant = font.GetStyle() == wxFONTSTYLE_ITALIC ? CAIRO_FONT_SLANT_ITALIC:CAIRO_FONT_SLANT_NORMAL; - m_weight = font.GetWeight() == wxFONTWEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD:CAIRO_FONT_WEIGHT_NORMAL; + InitFontComponents + ( + font.GetFaceName(), + font.GetStyle() == wxFONTSTYLE_ITALIC ? CAIRO_FONT_SLANT_ITALIC + : CAIRO_FONT_SLANT_NORMAL, + font.GetWeight() == wxFONTWEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD + : CAIRO_FONT_WEIGHT_NORMAL + ); #endif } +wxCairoFontData::wxCairoFontData(wxGraphicsRenderer* renderer, + double sizeInPixels, + const wxString& facename, + int flags, + const wxColour& col) : + wxGraphicsObjectRefData(renderer) +{ + InitColour(col); + + // Resolution for Cairo image surfaces is 72 DPI meaning that the sizes in + // points and pixels are identical, so we can just pass the size in pixels + // directly to cairo_set_font_size(). + m_size = sizeInPixels; + +#if defined(__WXMAC__) + m_font = NULL; +#endif + + // There is no need to set m_underlined under wxGTK in this case, it can + // only be used if m_font != NULL. + + InitFontComponents + ( + facename, + flags & wxFONTFLAG_ITALIC ? CAIRO_FONT_SLANT_ITALIC + : CAIRO_FONT_SLANT_NORMAL, + flags & wxFONTFLAG_BOLD ? CAIRO_FONT_WEIGHT_BOLD + : CAIRO_FONT_WEIGHT_NORMAL + ); +} + wxCairoFontData::~wxCairoFontData() { #ifdef __WXMAC__ - cairo_font_face_destroy( m_font ); -#elif defined(__WXGTK__) - pango_font_description_free( m_font ); -#else + if ( m_font ) + cairo_font_face_destroy( m_font ); #endif } -void wxCairoFontData::Apply( wxGraphicsContext* context ) +bool wxCairoFontData::Apply( wxGraphicsContext* context ) { cairo_t * ctext = (cairo_t*) context->GetNativeContext(); cairo_set_source_rgba(ctext,m_red,m_green, m_blue,m_alpha); #ifdef __WXGTK__ - // the rest is done using Pango layouts + if (m_wxfont.IsOk()) + { + // Nothing to do, the caller uses Pango layout functions to do + // everything. + return true; + } #elif defined(__WXMAC__) - cairo_set_font_face(ctext, m_font); - cairo_set_font_size(ctext, m_size ); -#else + if ( m_font ) + { + cairo_set_font_face(ctext, m_font); + cairo_set_font_size(ctext, m_size ); + return true; + } +#endif + + // If we get here, we must be on a platform without native font support or + // we're using toy Cairo API even under wxGTK/wxMac. cairo_select_font_face(ctext, m_fontName, m_slant, m_weight ); cairo_set_font_size(ctext, m_size ); -#endif + + // Indicate that we don't use native fonts for the platforms which care + // about this (currently only wxGTK). + return false; } //----------------------------------------------------------------------------- @@ -1060,8 +1204,49 @@ void * wxCairoMatrixData::GetNativeMatrix() const return (void*) &m_matrix; } +// ---------------------------------------------------------------------------- // wxCairoBitmap implementation -//----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +int wxCairoBitmapData::InitBuffer(int width, int height, cairo_format_t format) +{ + wxUnusedVar(format); // Only really unused with Cairo < 1.6. + + // Determine the stride: use cairo_format_stride_for_width() if available + // but fall back to 4*width for the earlier versions as this is what that + // function always returns, even in latest Cairo, anyhow. + int stride; +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0) + if ( cairo_version() >= CAIRO_VERSION_ENCODE(1, 6, 0) ) + { + stride = cairo_format_stride_for_width(format, width); + + // All our code would totally break if stride were not a multiple of 4 + // so ensure this is the case. + if ( stride % 4 ) + { + wxFAIL_MSG("Unexpected Cairo image surface stride."); + + stride += 4 - stride % 4; + } + } + else +#endif + stride = 4*width; + + m_width = width; + m_height = height; + m_buffer = new unsigned char[height*stride]; + + return stride; +} + +void wxCairoBitmapData::InitSurface(cairo_format_t format, int stride) +{ + m_surface = cairo_image_surface_create_for_data( + m_buffer, format, m_width, m_height, stride); + m_pattern = cairo_pattern_create_for_surface(m_surface); +} wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, cairo_surface_t* bitmap ) : wxGraphicsObjectRefData( renderer ) @@ -1075,27 +1260,34 @@ wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitm wxCHECK_RET( bmp.IsOk(), wxT("Invalid bitmap in wxCairoContext::DrawBitmap")); #ifdef wxHAS_RAW_BITMAP - int bw = m_width = bmp.GetWidth(); - int bh = m_height = bmp.GetHeight(); - wxBitmap bmpSource = bmp; // we need a non-const instance - m_buffer = new unsigned char[bw*bh*4]; - wxUint32* data = (wxUint32*)m_buffer; - // Create a surface object and copy the bitmap pixel data to it. if the // image has alpha (or a mask represented as alpha) then we'll use a // different format and iterator than if it doesn't... - if (bmpSource.HasAlpha() || bmpSource.GetMask()) + cairo_format_t bufferFormat = bmp.GetDepth() == 32 +#ifdef __WXGTK__ + || bmp.GetMask() +#endif + ? CAIRO_FORMAT_ARGB32 + : CAIRO_FORMAT_RGB24; + + int stride = InitBuffer(bmp.GetWidth(), bmp.GetHeight(), bufferFormat); + + wxBitmap bmpSource = bmp; // we need a non-const instance + wxUint32* data = (wxUint32*)m_buffer; + + if ( bufferFormat == CAIRO_FORMAT_ARGB32 ) { - m_surface = cairo_image_surface_create_for_data( - m_buffer, CAIRO_FORMAT_ARGB32, bw, bh, bw*4); - wxAlphaPixelData pixData(bmpSource, wxPoint(0,0), wxSize(bw, bh)); + // use the bitmap's alpha + wxAlphaPixelData + pixData(bmpSource, wxPoint(0, 0), wxSize(m_width, m_height)); wxCHECK_RET( pixData, wxT("Failed to gain raw access to bitmap data.")); wxAlphaPixelData::Iterator p(pixData); - for (int y=0; y(m_buffer); + const unsigned char* src = image.GetData(); + + if ( bufferFormat == CAIRO_FORMAT_ARGB32 ) + { + const unsigned char* alpha = image.GetAlpha(); + + for ( int y = 0; y < m_height; y++ ) + { + wxUint32* const rowStartDst = dst; + + for ( int x = 0; x < m_width; x++ ) + { + const unsigned char a = *alpha++; + + *dst++ = a << 24 | + Premultiply(a, src[0]) << 16 | + Premultiply(a, src[1]) << 8 | + Premultiply(a, src[2]); + src += 3; + } + + dst = rowStartDst + stride / 4; + } + } + else // RGB + { + for ( int y = 0; y < m_height; y++ ) + { + wxUint32* const rowStartDst = dst; + + for ( int x = 0; x < m_width; x++ ) + { + *dst++ = src[0] << 16 | + src[1] << 8 | + src[2]; + src += 3; + } + + dst = rowStartDst + stride / 4; + } + } + + InitSurface(bufferFormat, stride); +} + +wxImage wxCairoBitmapData::ConvertToImage() const +{ + wxImage image(m_width, m_height, false /* don't clear */); + + // Get the surface type and format. + wxCHECK_MSG( cairo_surface_get_type(m_surface) == CAIRO_SURFACE_TYPE_IMAGE, + wxNullImage, + wxS("Can't convert non-image surface to image.") ); + + switch ( cairo_image_surface_get_format(m_surface) ) + { + case CAIRO_FORMAT_ARGB32: + image.SetAlpha(); + break; + + case CAIRO_FORMAT_RGB24: + // Nothing to do, we don't use alpha by default. + break; + + case CAIRO_FORMAT_A8: + case CAIRO_FORMAT_A1: + wxFAIL_MSG(wxS("Unsupported Cairo image surface type.")); + return wxNullImage; + + default: + wxFAIL_MSG(wxS("Unknown Cairo image surface type.")); + return wxNullImage; + } + + // Prepare for copying data. + const wxUint32* src = (wxUint32*)cairo_image_surface_get_data(m_surface); + wxCHECK_MSG( src, wxNullImage, wxS("Failed to get Cairo surface data.") ); + + int stride = cairo_image_surface_get_stride(m_surface); + wxCHECK_MSG( stride > 0, wxNullImage, + wxS("Failed to get Cairo surface stride.") ); + + // As we work with wxUint32 pointers and not char ones, we need to adjust + // the stride accordingly. This should be lossless as the stride must be a + // multiple of pixel size. + wxASSERT_MSG( !(stride % sizeof(wxUint32)), wxS("Unexpected stride.") ); + stride /= sizeof(wxUint32); + + unsigned char* dst = image.GetData(); + unsigned char *alpha = image.GetAlpha(); + if ( alpha ) + { + // We need to also copy alpha and undo the pre-multiplication as Cairo + // stores pre-multiplied values in this format while wxImage does not. + for ( int y = 0; y < m_height; y++ ) + { + const wxUint32* const rowStart = src; + for ( int x = 0; x < m_width; x++ ) + { + const wxUint32 argb = *src++; + + *alpha++ = (argb & 0xff000000) >> 24; + + // Copy the RGB data undoing the pre-multiplication. + *dst++ = Unpremultiply(*alpha, (argb & 0x00ff0000) >> 16); + *dst++ = Unpremultiply(*alpha, (argb & 0x0000ff00) >> 8); + *dst++ = Unpremultiply(*alpha, (argb & 0x000000ff)); + } + + src = rowStart + stride; + } + } + else // RGB + { + // Things are pretty simple in this case, just copy RGB bytes. + for ( int y = 0; y < m_height; y++ ) + { + const wxUint32* const rowStart = src; + for ( int x = 0; x < m_width; x++ ) + { + const wxUint32 argb = *src++; + + *dst++ = (argb & 0x00ff0000) >> 16; + *dst++ = (argb & 0x0000ff00) >> 8; + *dst++ = (argb & 0x000000ff); + } + + src = rowStart + stride; + } + } + + return image; +} + +#endif // wxUSE_IMAGE + wxCairoBitmapData::~wxCairoBitmapData() { if (m_pattern) @@ -1156,8 +1554,6 @@ wxCairoBitmapData::~wxCairoBitmapData() delete [] m_buffer; } - - //----------------------------------------------------------------------------- // wxCairoContext implementation //----------------------------------------------------------------------------- @@ -1185,25 +1581,61 @@ public : wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxPrinterDC& dc ) : wxGraphicsContext(renderer) { +#ifdef __WXMSW__ + // wxMSW contexts always use MM_ANISOTROPIC, which messes up + // text rendering when printing using Cairo. Switch it to MM_TEXT + // map mode to avoid this problem. + HDC hdc = (HDC)dc.GetHDC(); + ::SetMapMode(hdc, MM_TEXT); + m_mswSurface = cairo_win32_printing_surface_create(hdc); + Init( cairo_create(m_mswSurface) ); +#endif + #ifdef __WXGTK20__ const wxDCImpl *impl = dc.GetImpl(); Init( (cairo_t*) impl->GetCairoContext() ); +#endif + wxSize sz = dc.GetSize(); + m_width = sz.x; + m_height = sz.y; wxPoint org = dc.GetDeviceOrigin(); cairo_translate( m_context, org.x, org.y ); double sx,sy; dc.GetUserScale( &sx, &sy ); + +// TODO: Determine if these fixes are needed on other platforms too. +// On MSW, without this the printer context will not respect wxDC SetMapMode calls. +// For example, using dc.SetMapMode(wxMM_POINTS) can let us share printer and screen +// drawing code +#ifdef __WXMSW__ + double lsx,lsy; + dc.GetLogicalScale( &lsx, &lsy ); + sx *= lsx; + sy *= lsy; +#endif cairo_scale( m_context, sx, sy ); org = dc.GetLogicalOrigin(); cairo_translate( m_context, -org.x, -org.y ); -#endif } wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& dc ) : wxGraphicsContext(renderer) { + int width, height; + dc.GetSize( &width, &height ); + m_width = width; + m_height = height; + + m_enableOffset = true; + +#ifdef __WXMSW__ + m_mswSurface = cairo_win32_surface_create((HDC)dc.GetHDC()); + Init( cairo_create(m_mswSurface) ); +#endif + #ifdef __WXGTK20__ wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl(); Init( gdk_cairo_create( impldc->GetGDKWindow() ) ); @@ -1226,8 +1658,6 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& #endif #ifdef __WXMAC__ - int width, height; - dc.GetSize( &width, &height ); CGContextRef cgcontext = (CGContextRef)dc.GetWindow()->MacGetCGContextRef(); cairo_surface_t* surface = cairo_quartz_surface_create_for_cg_context(cgcontext, width, height); Init( cairo_create( surface ) ); @@ -1238,6 +1668,18 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC& dc ) : wxGraphicsContext(renderer) { + int width, height; + dc.GetSize( &width, &height ); + m_width = width; + m_height = height; + + m_enableOffset = true; + +#ifdef __WXMSW__ + m_mswSurface = cairo_win32_surface_create((HDC)dc.GetHDC()); + Init( cairo_create(m_mswSurface) ); +#endif + #ifdef __WXGTK20__ wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl(); Init( gdk_cairo_create( impldc->GetGDKWindow() ) ); @@ -1260,8 +1702,6 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC& #endif #ifdef __WXMAC__ - int width, height; - dc.GetSize( &width, &height ); CGContextRef cgcontext = (CGContextRef)dc.GetWindow()->MacGetCGContextRef(); cairo_surface_t* surface = cairo_quartz_surface_create_for_cg_context(cgcontext, width, height); Init( cairo_create( surface ) ); @@ -1274,6 +1714,11 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, GdkDrawable *drawa : wxGraphicsContext(renderer) { Init( gdk_cairo_create( drawable ) ); + + int width, height; + gdk_drawable_get_size( drawable, &width, &height ); + m_width = width; + m_height = height; } #endif @@ -1282,9 +1727,9 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, HDC handle ) : wxGraphicsContext(renderer) { m_mswSurface = cairo_win32_surface_create(handle); - m_context = cairo_create(m_mswSurface); - PushState(); - PushState(); + Init( cairo_create(m_mswSurface) ); + m_width = + m_height = 0; } #endif @@ -1293,11 +1738,14 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, cairo_t *context ) : wxGraphicsContext(renderer) { Init( context ); + m_width = + m_height = 0; } wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, wxWindow *window) : wxGraphicsContext(renderer) { + m_enableOffset = true; #ifdef __WXGTK__ // something along these lines (copied from dcclient) @@ -1312,7 +1760,23 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, wxWindow *window) wxASSERT_MSG( window->m_wxwindow, wxT("wxCairoContext needs a widget") ); Init(gdk_cairo_create(window->GTKGetDrawingWindow())); + + wxSize sz = window->GetSize(); + m_width = sz.x; + m_height = sz.y; #endif + +#ifdef __WXMSW__ + m_mswSurface = cairo_win32_surface_create((HDC)window->GetHandle()); + Init(cairo_create(m_mswSurface)); +#endif + +} + +wxCairoContext::wxCairoContext(wxGraphicsRenderer* renderer) : + wxGraphicsContext(renderer) +{ + m_context = NULL; } wxCairoContext::~wxCairoContext() @@ -1320,10 +1784,6 @@ wxCairoContext::~wxCairoContext() if ( m_context ) { PopState(); -#ifdef __WXMSW__ - m_mswSurface = cairo_win32_surface_create((HDC)window->GetHandle()); - m_context = cairo_create(m_mswSurface); -#endif PopState(); cairo_destroy(m_context); } @@ -1510,30 +1970,25 @@ void wxCairoContext::DoDrawText(const wxString& str, wxDouble x, wxDouble y) if ( !data ) return; - ((wxCairoFontData*)m_font.GetRefData())->Apply(this); - -#ifdef __WXGTK__ - size_t datalen = strlen(data); - - PangoLayout *layout = pango_cairo_create_layout (m_context); - wxCairoFontData* font_data = (wxCairoFontData*) m_font.GetRefData(); - pango_layout_set_font_description( layout, font_data->GetFont()); - pango_layout_set_text(layout, data, datalen); - - if (font_data->GetUnderlined()) + if ( ((wxCairoFontData*)m_font.GetRefData())->Apply(this) ) { - PangoAttrList *attrs = pango_attr_list_new(); - PangoAttribute *attr = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); - pango_attr_list_insert(attrs, attr); - pango_layout_set_attributes(layout, attrs); - pango_attr_list_unref(attrs); +#ifdef __WXGTK__ + PangoLayout *layout = pango_cairo_create_layout (m_context); + const wxFont& font = static_cast(m_font.GetRefData())->GetFont(); + pango_layout_set_font_description(layout, font.GetNativeFontInfo()->description); + pango_layout_set_text(layout, data, data.length()); + font.GTKSetPangoAttrs(layout); + + cairo_move_to(m_context, x, y); + pango_cairo_show_layout (m_context, layout); + + g_object_unref (layout); + + // Don't use Cairo text API, we already did everything. + return; +#endif } - cairo_move_to(m_context, x, y); - pango_cairo_show_layout (m_context, layout); - - g_object_unref (layout); -#else // Cairo's x,y for drawing text is at the baseline, so we need to adjust // the position we move to by the ascent. cairo_font_extents_t fe; @@ -1541,7 +1996,6 @@ void wxCairoContext::DoDrawText(const wxString& str, wxDouble x, wxDouble y) cairo_move_to(m_context, x, y+fe.ascent); cairo_show_text(m_context, data); -#endif } void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height, @@ -1561,32 +2015,36 @@ void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDoub if ( str.empty()) return; + if ( ((wxCairoFontData*)m_font.GetRefData())->Apply((wxCairoContext*)this) ) + { #ifdef __WXGTK__ - int w, h; + int w, h; - PangoLayout *layout = pango_cairo_create_layout (m_context); - pango_layout_set_font_description( layout, ((wxCairoFontData*)m_font.GetRefData())->GetFont()); - const wxCharBuffer data = str.utf8_str(); - if ( !data ) - { + PangoLayout *layout = pango_cairo_create_layout (m_context); + const wxFont& font = static_cast(m_font.GetRefData())->GetFont(); + pango_layout_set_font_description(layout, font.GetNativeFontInfo()->description); + const wxCharBuffer data = str.utf8_str(); + if ( !data ) + { + return; + } + pango_layout_set_text(layout, data, data.length()); + pango_layout_get_pixel_size (layout, &w, &h); + if ( width ) + *width = w; + if ( height ) + *height = h; + if (descent) + { + PangoLayoutIter *iter = pango_layout_get_iter(layout); + int baseline = pango_layout_iter_get_baseline(iter); + pango_layout_iter_free(iter); + *descent = h - PANGO_PIXELS(baseline); + } + g_object_unref (layout); return; +#endif } - pango_layout_set_text( layout, data, strlen(data) ); - pango_layout_get_pixel_size (layout, &w, &h); - if ( width ) - *width = w; - if ( height ) - *height = h; - if (descent) - { - PangoLayoutIter *iter = pango_layout_get_iter(layout); - int baseline = pango_layout_iter_get_baseline(iter); - pango_layout_iter_free(iter); - *descent = h - PANGO_PIXELS(baseline); - } - g_object_unref (layout); -#else - ((wxCairoFontData*)m_font.GetRefData())->Apply((wxCairoContext*)this); if (width) { @@ -1619,7 +2077,6 @@ void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDoub if ( externalLeading ) *externalLeading = wxMax(0, fe.height - (fe.ascent + fe.descent)); } -#endif } void wxCairoContext::GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const @@ -1663,6 +2120,12 @@ bool wxCairoContext::SetAntialiasMode(wxAntialiasMode antialias) return true; } +bool wxCairoContext::SetInterpolationQuality(wxInterpolationQuality WXUNUSED(interpolation)) +{ + // placeholder + return false; +} + bool wxCairoContext::SetCompositionMode(wxCompositionMode op) { if ( m_composition == op ) @@ -1752,11 +2215,18 @@ public : virtual wxGraphicsContext * CreateContextFromNativeContext( void * context ); virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window ); +#if wxUSE_IMAGE + virtual wxGraphicsContext * CreateContextFromImage(wxImage& image); +#endif // wxUSE_IMAGE virtual wxGraphicsContext * CreateContext( wxWindow* window ); virtual wxGraphicsContext * CreateMeasuringContext(); - +#ifdef __WXMSW__ +#if wxUSE_ENH_METAFILE + virtual wxGraphicsContext * CreateContext( const wxEnhMetaFileDC& dc); +#endif +#endif // Path virtual wxGraphicsPath CreatePath(); @@ -1784,9 +2254,17 @@ public : // sets the font virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) ; + virtual wxGraphicsFont CreateFont(double sizeInPixels, + const wxString& facename, + int flags = wxFONTFLAG_DEFAULT, + const wxColour& col = *wxBLACK); // create a native bitmap representation virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ); +#if wxUSE_IMAGE + virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image); + virtual wxImage CreateImageFromBitmap(const wxGraphicsBitmap& bmp); +#endif // wxUSE_IMAGE // create a graphics bitmap from a native bitmap virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ); @@ -1794,7 +2272,13 @@ public : // create a subimage from a native image representation virtual wxGraphicsBitmap CreateSubBitmap( const wxGraphicsBitmap &bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h ); +protected : + bool EnsureIsLoaded(); + void Load(); + void Unload(); + friend class wxCairoModule; private : + int m_loaded; DECLARE_DYNAMIC_CLASS_NO_COPY(wxCairoRenderer) } ; @@ -1809,30 +2293,62 @@ static wxCairoRenderer gs_cairoGraphicsRenderer; extern wxGraphicsRenderer* gCairoRenderer; wxGraphicsRenderer* gCairoRenderer = &gs_cairoGraphicsRenderer; +bool wxCairoRenderer::EnsureIsLoaded() +{ +#ifndef __WXGTK__ + Load(); + return wxCairoInit(); +#else + return true; +#endif +} + +void wxCairoRenderer::Load() +{ + wxCairoInit(); +} + +void wxCairoRenderer::Unload() +{ + wxCairoCleanUp(); +} + +// call EnsureIsLoaded() and return returnOnFail value if it fails +#define ENSURE_LOADED_OR_RETURN(returnOnFail) \ + if ( !EnsureIsLoaded() ) \ + return (returnOnFail) + wxGraphicsContext * wxCairoRenderer::CreateContext( const wxWindowDC& dc) { + ENSURE_LOADED_OR_RETURN(NULL); return new wxCairoContext(this,dc); } wxGraphicsContext * wxCairoRenderer::CreateContext( const wxMemoryDC& dc) { + ENSURE_LOADED_OR_RETURN(NULL); return new wxCairoContext(this,dc); } wxGraphicsContext * wxCairoRenderer::CreateContext( const wxPrinterDC& dc) { -#ifdef __WXGTK20__ - const wxDCImpl *impl = dc.GetImpl(); - cairo_t* context = (cairo_t*) impl->GetCairoContext(); - if (context) - return new wxCairoContext(this,dc); - else -#endif - return NULL; + ENSURE_LOADED_OR_RETURN(NULL); + return new wxCairoContext(this, dc); } +#ifdef __WXMSW__ +#if wxUSE_ENH_METAFILE +wxGraphicsContext * wxCairoRenderer::CreateContext( const wxEnhMetaFileDC& WXUNUSED(dc) ) +{ + ENSURE_LOADED_OR_RETURN(NULL); + return NULL; +} +#endif +#endif + wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext( void * context ) { + ENSURE_LOADED_OR_RETURN(NULL); #ifdef __WXMSW__ return new wxCairoContext(this,(HDC)context); #else @@ -1843,15 +2359,25 @@ wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext( void * cont wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeWindow( void * window ) { + ENSURE_LOADED_OR_RETURN(NULL); #ifdef __WXGTK__ return new wxCairoContext(this,(GdkDrawable*)window); #else + wxUnusedVar(window); return NULL; #endif } +#if wxUSE_IMAGE +wxGraphicsContext * wxCairoRenderer::CreateContextFromImage(wxImage& image) +{ + return new wxCairoImageContext(this, image); +} +#endif // wxUSE_IMAGE + wxGraphicsContext * wxCairoRenderer::CreateMeasuringContext() { + ENSURE_LOADED_OR_RETURN(NULL); #ifdef __WXGTK__ return CreateContextFromNativeWindow(gdk_get_default_root_window()); #endif @@ -1861,6 +2387,7 @@ wxGraphicsContext * wxCairoRenderer::CreateMeasuringContext() wxGraphicsContext * wxCairoRenderer::CreateContext( wxWindow* window ) { + ENSURE_LOADED_OR_RETURN(NULL); return new wxCairoContext(this, window ); } @@ -1868,6 +2395,7 @@ wxGraphicsContext * wxCairoRenderer::CreateContext( wxWindow* window ) wxGraphicsPath wxCairoRenderer::CreatePath() { + ENSURE_LOADED_OR_RETURN(wxNullGraphicsPath); wxGraphicsPath path; path.SetRefData( new wxCairoPathData(this) ); return path; @@ -1880,6 +2408,7 @@ wxGraphicsMatrix wxCairoRenderer::CreateMatrix( wxDouble a, wxDouble b, wxDouble wxDouble tx, wxDouble ty) { + ENSURE_LOADED_OR_RETURN(wxNullGraphicsMatrix); wxGraphicsMatrix m; wxCairoMatrixData* data = new wxCairoMatrixData( this ); data->Set( a,b,c,d,tx,ty ) ; @@ -1889,7 +2418,8 @@ wxGraphicsMatrix wxCairoRenderer::CreateMatrix( wxDouble a, wxDouble b, wxDouble wxGraphicsPen wxCairoRenderer::CreatePen(const wxPen& pen) { - if ( !pen.Ok() || pen.GetStyle() == wxPENSTYLE_TRANSPARENT ) + ENSURE_LOADED_OR_RETURN(wxNullGraphicsPen); + if ( !pen.IsOk() || pen.GetStyle() == wxPENSTYLE_TRANSPARENT ) return wxNullGraphicsPen; else { @@ -1901,7 +2431,8 @@ wxGraphicsPen wxCairoRenderer::CreatePen(const wxPen& pen) wxGraphicsBrush wxCairoRenderer::CreateBrush(const wxBrush& brush ) { - if ( !brush.Ok() || brush.GetStyle() == wxBRUSHSTYLE_TRANSPARENT ) + ENSURE_LOADED_OR_RETURN(wxNullGraphicsBrush); + if ( !brush.IsOk() || brush.GetStyle() == wxBRUSHSTYLE_TRANSPARENT ) return wxNullGraphicsBrush; else { @@ -1916,6 +2447,7 @@ wxCairoRenderer::CreateLinearGradientBrush(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2, const wxGraphicsGradientStops& stops) { + ENSURE_LOADED_OR_RETURN(wxNullGraphicsBrush); wxGraphicsBrush p; wxCairoBrushData* d = new wxCairoBrushData( this ); d->CreateLinearGradientBrush(x1, y1, x2, y2, stops); @@ -1928,6 +2460,7 @@ wxCairoRenderer::CreateRadialGradientBrush(wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc, wxDouble r, const wxGraphicsGradientStops& stops) { + ENSURE_LOADED_OR_RETURN(wxNullGraphicsBrush); wxGraphicsBrush p; wxCairoBrushData* d = new wxCairoBrushData( this ); d->CreateRadialGradientBrush(xo, yo, xc, yc, r, stops); @@ -1935,10 +2468,10 @@ wxCairoRenderer::CreateRadialGradientBrush(wxDouble xo, wxDouble yo, return p; } -// sets the font wxGraphicsFont wxCairoRenderer::CreateFont( const wxFont &font , const wxColour &col ) { - if ( font.Ok() ) + ENSURE_LOADED_OR_RETURN(wxNullGraphicsFont); + if ( font.IsOk() ) { wxGraphicsFont p; p.SetRefData(new wxCairoFontData( this , font, col )); @@ -1948,9 +2481,23 @@ wxGraphicsFont wxCairoRenderer::CreateFont( const wxFont &font , const wxColour return wxNullGraphicsFont; } +wxGraphicsFont +wxCairoRenderer::CreateFont(double sizeInPixels, + const wxString& facename, + int flags, + const wxColour& col) +{ + ENSURE_LOADED_OR_RETURN(wxNullGraphicsFont); + + wxGraphicsFont font; + font.SetRefData(new wxCairoFontData(this, sizeInPixels, facename, flags, col)); + return font; +} + wxGraphicsBitmap wxCairoRenderer::CreateBitmap( const wxBitmap& bmp ) { - if ( bmp.Ok() ) + ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap); + if ( bmp.IsOk() ) { wxGraphicsBitmap p; p.SetRefData(new wxCairoBitmapData( this , bmp )); @@ -1960,8 +2507,38 @@ wxGraphicsBitmap wxCairoRenderer::CreateBitmap( const wxBitmap& bmp ) return wxNullGraphicsBitmap; } +#if wxUSE_IMAGE + +wxGraphicsBitmap wxCairoRenderer::CreateBitmapFromImage(const wxImage& image) +{ + wxGraphicsBitmap bmp; + + ENSURE_LOADED_OR_RETURN(bmp); + + if ( image.IsOk() ) + { + bmp.SetRefData(new wxCairoBitmapData(this, image)); + } + + return bmp; +} + +wxImage wxCairoRenderer::CreateImageFromBitmap(const wxGraphicsBitmap& bmp) +{ + ENSURE_LOADED_OR_RETURN(wxNullImage); + + const wxCairoBitmapData* const + data = static_cast(bmp.GetGraphicsData()); + + return data ? data->ConvertToImage() : wxNullImage; +} + +#endif // wxUSE_IMAGE + + wxGraphicsBitmap wxCairoRenderer::CreateBitmapFromNativeBitmap( void* bitmap ) { + ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap); if ( bitmap != NULL ) { wxGraphicsBitmap p; @@ -1979,6 +2556,7 @@ wxCairoRenderer::CreateSubBitmap(const wxGraphicsBitmap& WXUNUSED(bitmap), wxDouble WXUNUSED(w), wxDouble WXUNUSED(h)) { + ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap); wxFAIL_MSG("wxCairoRenderer::CreateSubBitmap is not implemented."); return wxNullGraphicsBitmap; } diff --git a/Externals/wxWidgets3/src/generic/grid.cpp b/Externals/wxWidgets3/src/generic/grid.cpp index b335b1f755..0fb00db063 100644 --- a/Externals/wxWidgets3/src/generic/grid.cpp +++ b/Externals/wxWidgets3/src/generic/grid.cpp @@ -4,7 +4,7 @@ // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) // Modified by: Robin Dunn, Vadim Zeitlin, Santiago Palacios // Created: 1/08/1999 -// RCS-ID: $Id: grid.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: grid.cpp 70826 2012-03-06 13:18:22Z SC $ // Copyright: (c) Michael Bedward (mbedward@ozemail.com.au) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -72,8 +72,8 @@ const char wxGridNameStr[] = "grid"; // Required for wxIs... functions #include -WX_DECLARE_HASH_SET_WITH_DECL(int, wxIntegerHash, wxIntegerEqual, - wxGridFixedIndicesSet, class WXDLLIMPEXP_ADV); +WX_DECLARE_HASH_SET_WITH_DECL_PTR(int, ::wxIntegerHash, ::wxIntegerEqual, + wxGridFixedIndicesSet, class WXDLLIMPEXP_ADV); // ---------------------------------------------------------------------------- @@ -419,7 +419,7 @@ void wxGridCellAttr::SetSize(int num_rows, int num_cols) wxASSERT_MSG( (!((num_rows > 0) && (num_cols <= 0)) || !((num_rows <= 0) && (num_cols > 0)) || !((num_rows == 0) && (num_cols == 0))), - wxT("wxGridCellAttr::SetSize only takes two postive values or negative/zero values")); + wxT("wxGridCellAttr::SetSize only takes two positive values or negative/zero values")); m_sizeRows = num_rows; m_sizeCols = num_cols; @@ -1534,9 +1534,8 @@ bool wxGridStringTable::DeleteCols( size_t pos, size_t numCols ) // m_colLabels stores just as many elements as it needs, e.g. if only // the label of the first column had been set it would have only one // element and not numCols, so account for it - int nToRm = m_colLabels.size() - colID; - if ( nToRm > 0 ) - m_colLabels.RemoveAt( colID, nToRm ); + int numRemaining = m_colLabels.size() - colID; + m_colLabels.RemoveAt( colID, wxMin(numCols, numRemaining) ); } if ( numCols >= curNumCols ) @@ -3069,7 +3068,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event ) ChangeCursorMode(WXGRID_CURSOR_SELECT_CELL, GetColLabelWindow()); m_dragLastPos = -1; } - else // not on row separator or it's not resizeable + else // not on row separator or it's not resizable { row = YToRow(y); if ( row >=0 && @@ -3648,13 +3647,15 @@ void wxGrid::ChangeCursorMode(CursorMode mode, // grid mouse event processing // ---------------------------------------------------------------------------- -void +bool wxGrid::DoGridCellDrag(wxMouseEvent& event, const wxGridCellCoords& coords, bool isFirstDrag) { + bool performDefault = true ; + if ( coords == wxGridNoCellCoords ) - return; // we're outside any valid cell + return performDefault; // we're outside any valid cell // Hide the edit control, so it won't interfere with drag-shrinking. if ( IsCellEditControlShown() ) @@ -3665,7 +3666,7 @@ wxGrid::DoGridCellDrag(wxMouseEvent& event, switch ( event.GetModifiers() ) { - case wxMOD_CMD: + case wxMOD_CONTROL: if ( m_selectedBlockCorner == wxGridNoCellCoords) m_selectedBlockCorner = coords; UpdateBlockBeingSelected(m_selectedBlockCorner, coords); @@ -3679,8 +3680,11 @@ wxGrid::DoGridCellDrag(wxMouseEvent& event, if ( m_selectedBlockCorner == wxGridNoCellCoords) m_selectedBlockCorner = coords; - SendEvent(wxEVT_GRID_CELL_BEGIN_DRAG, coords, event); - return; + // if event is handled by user code, no further processing + if ( SendEvent(wxEVT_GRID_CELL_BEGIN_DRAG, coords, event) != 0 ) + performDefault = false; + + return performDefault; } } @@ -3691,6 +3695,8 @@ wxGrid::DoGridCellDrag(wxMouseEvent& event, // we don't handle the other key modifiers event.Skip(); } + + return performDefault; } void wxGrid::DoGridLineDrag(wxMouseEvent& event, const wxGridOperations& oper) @@ -3743,7 +3749,9 @@ void wxGrid::DoGridDragEvent(wxMouseEvent& event, const wxGridCellCoords& coords switch ( m_cursorMode ) { case WXGRID_CURSOR_SELECT_CELL: - DoGridCellDrag(event, coords, isFirstDrag); + // no further handling if handled by user + if ( DoGridCellDrag(event, coords, isFirstDrag) == false ) + return; break; case WXGRID_CURSOR_RESIZE_ROW: @@ -4397,6 +4405,14 @@ wxGrid::SendEvent(const wxEventType type, mouseEv.GetY() + GetColLabelSize(), false, mouseEv); + + if ( type == wxEVT_GRID_CELL_BEGIN_DRAG ) + { + // by default the dragging is not supported, the user code must + // explicitly allow the event for it to take place + gridEvt.Veto(); + } + claimed = GetEventHandler()->ProcessEvent(gridEvt); vetoed = !gridEvt.IsAllowed(); } @@ -8152,10 +8168,12 @@ void wxGrid::Fit() AutoSize(); } +#if WXWIN_COMPATIBILITY_2_8 wxPen& wxGrid::GetDividerPen() const { return wxNullPen; } +#endif // WXWIN_COMPATIBILITY_2_8 // ---------------------------------------------------------------------------- // cell value accessor functions diff --git a/Externals/wxWidgets3/src/generic/gridctrl.cpp b/Externals/wxWidgets3/src/generic/gridctrl.cpp index d1da4409d4..2a9378afef 100644 --- a/Externals/wxWidgets3/src/generic/gridctrl.cpp +++ b/Externals/wxWidgets3/src/generic/gridctrl.cpp @@ -4,7 +4,7 @@ // Author: Paul Gammans, Roger Gammans // Modified by: // Created: 11/04/2001 -// RCS-ID: $Id: gridctrl.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: gridctrl.cpp 69856 2011-11-28 13:23:33Z VZ $ // Copyright: (c) The Computer Surgery (paul@compsurg.co.uk) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -311,7 +311,7 @@ wxGridCellAutoWrapStringRenderer::GetTextLines(wxGrid& grid, while ( tk.HasMoreTokens() ) { wxString tok = tk.GetNextToken(); - //FIXME: this causes us to print an extra unnecesary + //FIXME: this causes us to print an extra unnecessary // space at the end of the line. But it // is invisible , simplifies the size calculation // and ensures tokens are separated in the display @@ -598,10 +598,13 @@ wxSize wxGridCellNumberRenderer::GetBestSize(wxGrid& grid, // wxGridCellFloatRenderer // ---------------------------------------------------------------------------- -wxGridCellFloatRenderer::wxGridCellFloatRenderer(int width, int precision) +wxGridCellFloatRenderer::wxGridCellFloatRenderer(int width, + int precision, + int format) { SetWidth(width); SetPrecision(precision); + SetFormat(format); } wxGridCellRenderer *wxGridCellFloatRenderer::Clone() const @@ -609,6 +612,7 @@ wxGridCellRenderer *wxGridCellFloatRenderer::Clone() const wxGridCellFloatRenderer *renderer = new wxGridCellFloatRenderer; renderer->m_width = m_width; renderer->m_precision = m_precision; + renderer->m_style = m_style; renderer->m_format = m_format; return renderer; @@ -641,22 +645,30 @@ wxString wxGridCellFloatRenderer::GetString(const wxGrid& grid, int row, int col if ( m_precision == -1 ) { // default width/precision - m_format = wxT("%f"); + m_format = wxT("%"); } else { - m_format.Printf(wxT("%%.%df"), m_precision); + m_format.Printf(wxT("%%.%d"), m_precision); } } else if ( m_precision == -1 ) { // default precision - m_format.Printf(wxT("%%%d.f"), m_width); + m_format.Printf(wxT("%%%d."), m_width); } else { - m_format.Printf(wxT("%%%d.%df"), m_width, m_precision); + m_format.Printf(wxT("%%%d.%d"), m_width, m_precision); } + + bool isUpper = ( ( m_style & wxGRID_FLOAT_FORMAT_UPPER ) == wxGRID_FLOAT_FORMAT_UPPER); + if ( ( m_style & wxGRID_FLOAT_FORMAT_SCIENTIFIC ) == wxGRID_FLOAT_FORMAT_SCIENTIFIC) + m_format += isUpper ? wxT('E') : wxT('e'); + else if ( ( m_style & wxGRID_FLOAT_FORMAT_COMPACT ) == wxGRID_FLOAT_FORMAT_COMPACT) + m_format += isUpper ? wxT('G') : wxT('g'); + else + m_format += wxT('f'); } text.Printf(m_format, val); @@ -704,10 +716,12 @@ void wxGridCellFloatRenderer::SetParameters(const wxString& params) // reset to defaults SetWidth(-1); SetPrecision(-1); + SetFormat(wxGRID_FLOAT_FORMAT_DEFAULT); } else { - wxString tmp = params.BeforeFirst(wxT(',')); + wxString rest; + wxString tmp = params.BeforeFirst(wxT(','), &rest); if ( !tmp.empty() ) { long width; @@ -721,7 +735,7 @@ void wxGridCellFloatRenderer::SetParameters(const wxString& params) } } - tmp = params.AfterFirst(wxT(',')); + tmp = rest.BeforeFirst(wxT(',')); if ( !tmp.empty() ) { long precision; @@ -734,6 +748,43 @@ void wxGridCellFloatRenderer::SetParameters(const wxString& params) wxLogDebug(wxT("Invalid wxGridCellFloatRenderer precision parameter string '%s ignored"), params.c_str()); } } + + tmp = rest.AfterFirst(wxT(',')); + if ( !tmp.empty() ) + { + if ( tmp[0] == wxT('f') ) + { + SetFormat(wxGRID_FLOAT_FORMAT_FIXED); + } + else if ( tmp[0] == wxT('e') ) + { + SetFormat(wxGRID_FLOAT_FORMAT_SCIENTIFIC); + } + else if ( tmp[0] == wxT('g') ) + { + SetFormat(wxGRID_FLOAT_FORMAT_COMPACT); + } + else if ( tmp[0] == wxT('E') ) + { + SetFormat(wxGRID_FLOAT_FORMAT_SCIENTIFIC | + wxGRID_FLOAT_FORMAT_UPPER); + } + else if ( tmp[0] == wxT('F') ) + { + SetFormat(wxGRID_FLOAT_FORMAT_FIXED | + wxGRID_FLOAT_FORMAT_UPPER); + } + else if ( tmp[0] == wxT('G') ) + { + SetFormat(wxGRID_FLOAT_FORMAT_COMPACT | + wxGRID_FLOAT_FORMAT_UPPER); + } + else + { + wxLogDebug("Invalid wxGridCellFloatRenderer format " + "parameter string '%s ignored", params); + } + } } } diff --git a/Externals/wxWidgets3/src/generic/grideditors.cpp b/Externals/wxWidgets3/src/generic/grideditors.cpp index 1d77e8be57..c92f876811 100644 --- a/Externals/wxWidgets3/src/generic/grideditors.cpp +++ b/Externals/wxWidgets3/src/generic/grideditors.cpp @@ -4,7 +4,7 @@ // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) // Modified by: Robin Dunn, Vadim Zeitlin, Santiago Palacios // Created: 1/08/1999 -// RCS-ID: $Id: grideditors.cpp 66714 2011-01-19 10:48:28Z VZ $ +// RCS-ID: $Id: grideditors.cpp 70693 2012-02-25 23:49:55Z VZ $ // Copyright: (c) Michael Bedward (mbedward@ozemail.com.au) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -300,13 +300,13 @@ void wxGridCellEditor::Show(bool show, wxGridCellAttr *attr) else { // restore the standard colours fonts - if ( m_colFgOld.Ok() ) + if ( m_colFgOld.IsOk() ) { m_control->SetForegroundColour(m_colFgOld); m_colFgOld = wxNullColour; } - if ( m_colBgOld.Ok() ) + if ( m_colBgOld.IsOk() ) { m_control->SetBackgroundColour(m_colBgOld); m_colBgOld = wxNullColour; @@ -314,7 +314,7 @@ void wxGridCellEditor::Show(bool show, wxGridCellAttr *attr) // Workaround for GTK+1 font setting problem on some platforms #if !defined(__WXGTK__) || defined(__WXGTK20__) - if ( m_fontOld.Ok() ) + if ( m_fontOld.IsOk() ) { m_control->SetFont(m_fontOld); m_fontOld = wxNullFont; @@ -862,10 +862,13 @@ wxString wxGridCellNumberEditor::GetValue() const // wxGridCellFloatEditor // ---------------------------------------------------------------------------- -wxGridCellFloatEditor::wxGridCellFloatEditor(int width, int precision) +wxGridCellFloatEditor::wxGridCellFloatEditor(int width, + int precision, + int format) { m_width = width; m_precision = precision; + m_style = format; } void wxGridCellFloatEditor::Create(wxWindow* parent, @@ -988,51 +991,113 @@ void wxGridCellFloatEditor::SetParameters(const wxString& params) // reset to default m_width = m_precision = -1; + m_style = wxGRID_FLOAT_FORMAT_DEFAULT; + m_format.clear(); } else { - long tmp; - if ( params.BeforeFirst(wxT(',')).ToLong(&tmp) ) + wxString rest; + wxString tmp = params.BeforeFirst(wxT(','), &rest); + if ( !tmp.empty() ) { - m_width = (int)tmp; - - if ( params.AfterFirst(wxT(',')).ToLong(&tmp) ) + long width; + if ( tmp.ToLong(&width) ) { - m_precision = (int)tmp; - - // skip the error message below - return; + m_width = (int)width; + } + else + { + wxLogDebug(wxT("Invalid wxGridCellFloatRenderer width parameter string '%s ignored"), params.c_str()); } } - wxLogDebug(wxT("Invalid wxGridCellFloatEditor parameter string '%s' ignored"), params.c_str()); + tmp = rest.BeforeFirst(wxT(',')); + if ( !tmp.empty() ) + { + long precision; + if ( tmp.ToLong(&precision) ) + { + m_precision = (int)precision; + } + else + { + wxLogDebug(wxT("Invalid wxGridCellFloatRenderer precision parameter string '%s ignored"), params.c_str()); + } + } + + tmp = rest.AfterFirst(wxT(',')); + if ( !tmp.empty() ) + { + if ( tmp[0] == wxT('f') ) + { + m_style = wxGRID_FLOAT_FORMAT_FIXED; + } + else if ( tmp[0] == wxT('e') ) + { + m_style = wxGRID_FLOAT_FORMAT_SCIENTIFIC; + } + else if ( tmp[0] == wxT('g') ) + { + m_style = wxGRID_FLOAT_FORMAT_COMPACT; + } + else if ( tmp[0] == wxT('E') ) + { + m_style = wxGRID_FLOAT_FORMAT_SCIENTIFIC | + wxGRID_FLOAT_FORMAT_UPPER; + } + else if ( tmp[0] == wxT('F') ) + { + m_style = wxGRID_FLOAT_FORMAT_FIXED | + wxGRID_FLOAT_FORMAT_UPPER; + } + else if ( tmp[0] == wxT('G') ) + { + m_style = wxGRID_FLOAT_FORMAT_COMPACT | + wxGRID_FLOAT_FORMAT_UPPER; + } + else + { + wxLogDebug("Invalid wxGridCellFloatRenderer format " + "parameter string '%s ignored", params); + } + } } } -wxString wxGridCellFloatEditor::GetString() const +wxString wxGridCellFloatEditor::GetString() { - wxString fmt; - if ( m_precision == -1 && m_width != -1) + if ( !m_format ) { - // default precision - fmt.Printf(wxT("%%%d.f"), m_width); - } - else if ( m_precision != -1 && m_width == -1) - { - // default width - fmt.Printf(wxT("%%.%df"), m_precision); - } - else if ( m_precision != -1 && m_width != -1 ) - { - fmt.Printf(wxT("%%%d.%df"), m_width, m_precision); - } - else - { - // default width/precision - fmt = wxT("%f"); + if ( m_precision == -1 && m_width != -1) + { + // default precision + m_format.Printf(wxT("%%%d."), m_width); + } + else if ( m_precision != -1 && m_width == -1) + { + // default width + m_format.Printf(wxT("%%.%d"), m_precision); + } + else if ( m_precision != -1 && m_width != -1 ) + { + m_format.Printf(wxT("%%%d.%d"), m_width, m_precision); + } + else + { + // default width/precision + m_format = wxT("%"); + } + + bool isUpper = (m_style & wxGRID_FLOAT_FORMAT_UPPER) != 0; + if ( m_style & wxGRID_FLOAT_FORMAT_SCIENTIFIC ) + m_format += isUpper ? wxT('E') : wxT('e'); + else if ( m_style & wxGRID_FLOAT_FORMAT_COMPACT ) + m_format += isUpper ? wxT('G') : wxT('g'); + else + m_format += wxT('f'); } - return wxString::Format(fmt, m_value); + return wxString::Format(m_format, m_value); } bool wxGridCellFloatEditor::IsAcceptedKey(wxKeyEvent& event) @@ -1349,6 +1414,29 @@ void wxGridCellChoiceEditor::Create(wxWindow* parent, wxGridCellEditor::Create(parent, id, evtHandler); } +void wxGridCellChoiceEditor::SetSize(const wxRect& rect) +{ + wxASSERT_MSG(m_control, + wxT("The wxGridCellChoiceEditor must be created first!")); + + // Check that the height is not too small to fit the combobox. + wxRect rectTallEnough = rect; + const wxSize bestSize = m_control->GetBestSize(); + const wxCoord diffY = bestSize.GetHeight() - rectTallEnough.GetHeight(); + if ( diffY > 0 ) + { + // Do make it tall enough. + rectTallEnough.height += diffY; + + // Also centre the effective rectangle vertically with respect to the + // original one. + rectTallEnough.y -= diffY/2; + } + //else: The rectangle provided is already tall enough. + + wxGridCellEditor::SetSize(rectTallEnough); +} + void wxGridCellChoiceEditor::PaintBackground(const wxRect& rectCell, wxGridCellAttr * attr) { @@ -1380,6 +1468,14 @@ void wxGridCellChoiceEditor::BeginEdit(int row, int col, wxGrid* grid) Combo()->SetFocus(); +#ifdef __WXOSX_COCOA__ + // This is a work around for the combobox being simply dismissed when a + // choice is made in it under OS X. The bug is almost certainly due to a + // problem in focus events generation logic but it's not obvious to fix and + // for now this at least allows to use wxGrid. + Combo()->Popup(); +#endif + if (evtHandler) { // When dropping down the menu, a kill focus event diff --git a/Externals/wxWidgets3/src/generic/gridsel.cpp b/Externals/wxWidgets3/src/generic/gridsel.cpp index 7f77177307..0d84cd8e49 100644 --- a/Externals/wxWidgets3/src/generic/gridsel.cpp +++ b/Externals/wxWidgets3/src/generic/gridsel.cpp @@ -4,7 +4,7 @@ // Author: Stefan Neis // Modified by: // Created: 20/02/1999 -// RCS-ID: $Id: gridsel.cpp 60078 2009-04-09 09:01:02Z VZ $ +// RCS-ID: $Id: gridsel.cpp 70177 2011-12-29 22:05:23Z VZ $ // Copyright: (c) Stefan Neis (Stefan.Neis@t-online.de) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -428,55 +428,101 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, size_t count, n; - // Remove single cells contained in newly selected block. - if ( m_selectionMode == wxGrid::wxGridSelectCells ) + if ( m_selectionMode == wxGrid::wxGridSelectRows ) { - count = m_cellSelection.GetCount(); - for ( n = 0; n < count; n++ ) + // find out which rows are already selected: + wxArrayInt alreadyselected; + alreadyselected.Add(0,bottomRow-topRow+1); + for( n = 0; n < m_rowSelection.GetCount(); n++) { - wxGridCellCoords& coords = m_cellSelection[n]; - if ( BlockContainsCell( topRow, leftCol, bottomRow, rightCol, - coords.GetRow(), coords.GetCol() ) ) + int row = m_rowSelection[n]; + if( (row >= topRow) && (row <= bottomRow) ) { - m_cellSelection.RemoveAt(n); - n--; - count--; + alreadyselected[ row - topRow ]=1; + } + } + + // add the newly selected rows: + for ( int row = topRow; row <= bottomRow; row++ ) + { + if ( alreadyselected[ row - topRow ] == 0 ) + { + m_rowSelection.Add( row ); } } } - - // If a block containing the selection is already selected, return, - // if a block contained in the selection is found, remove it. - - count = m_blockSelectionTopLeft.GetCount(); - for ( n = 0; n < count; n++ ) + else if ( m_selectionMode == wxGrid::wxGridSelectColumns ) { - wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; - wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; - - switch ( BlockContain( coords1.GetRow(), coords1.GetCol(), - coords2.GetRow(), coords2.GetCol(), - topRow, leftCol, bottomRow, rightCol ) ) + // find out which columns are already selected: + wxArrayInt alreadyselected; + alreadyselected.Add(0,rightCol-leftCol+1); + for( n = 0; n < m_colSelection.GetCount(); n++) { - case 1: - return; + int col = m_colSelection[n]; + if( (col >= leftCol) && (col <= rightCol) ) + { + alreadyselected[ col - leftCol ]=1; + } + } - case -1: - m_blockSelectionTopLeft.RemoveAt(n); - m_blockSelectionBottomRight.RemoveAt(n); - n--; - count--; - break; - - default: - break; + // add the newly selected columns: + for ( int col = leftCol; col <= rightCol; col++ ) + { + if ( alreadyselected[ col - leftCol ] == 0 ) + { + m_colSelection.Add( col ); + } } } - - // If a row containing the selection is already selected, return, - // if a row contained in newly selected block is found, remove it. - if ( m_selectionMode != wxGrid::wxGridSelectColumns ) + else { + // Remove single cells contained in newly selected block. + if ( m_selectionMode == wxGrid::wxGridSelectCells ) + { + count = m_cellSelection.GetCount(); + for ( n = 0; n < count; n++ ) + { + wxGridCellCoords& coords = m_cellSelection[n]; + if ( BlockContainsCell( topRow, leftCol, bottomRow, rightCol, + coords.GetRow(), coords.GetCol() ) ) + { + m_cellSelection.RemoveAt(n); + n--; + count--; + } + } + } + + // If a block containing the selection is already selected, return, + // if a block contained in the selection is found, remove it. + + count = m_blockSelectionTopLeft.GetCount(); + for ( n = 0; n < count; n++ ) + { + wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; + wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; + + switch ( BlockContain( coords1.GetRow(), coords1.GetCol(), + coords2.GetRow(), coords2.GetCol(), + topRow, leftCol, bottomRow, rightCol ) ) + { + case 1: + return; + + case -1: + m_blockSelectionTopLeft.RemoveAt(n); + m_blockSelectionBottomRight.RemoveAt(n); + n--; + count--; + break; + + default: + break; + } + } + + // If a row containing the selection is already selected, return, + // if a row contained in newly selected block is found, remove it. count = m_rowSelection.GetCount(); for ( n = 0; n < count; n++ ) { @@ -497,10 +543,8 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, break; } } - } - if ( m_selectionMode != wxGrid::wxGridSelectRows ) - { + // Same for columns. count = m_colSelection.GetCount(); for ( n = 0; n < count; n++ ) { @@ -521,11 +565,10 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, break; } } + + m_blockSelectionTopLeft.Add( wxGridCellCoords( topRow, leftCol ) ); + m_blockSelectionBottomRight.Add( wxGridCellCoords( bottomRow, rightCol ) ); } - - m_blockSelectionTopLeft.Add( wxGridCellCoords( topRow, leftCol ) ); - m_blockSelectionBottomRight.Add( wxGridCellCoords( bottomRow, rightCol ) ); - // Update View: if ( !m_grid->GetBatchCount() ) { @@ -552,29 +595,35 @@ void wxGridSelection::SelectCell( int row, int col, const wxKeyboardState& kbd, bool sendEvent ) { + if ( IsInSelection ( row, col ) ) + return; + + wxGridCellCoords selectedTopLeft, selectedBottomRight; if ( m_selectionMode == wxGrid::wxGridSelectRows ) { - SelectBlock(row, 0, row, m_grid->GetNumberCols() - 1, kbd, sendEvent); - - return; + m_rowSelection.Add( row ); + selectedTopLeft = wxGridCellCoords( row, 0 ); + selectedBottomRight = wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ); } else if ( m_selectionMode == wxGrid::wxGridSelectColumns ) { - SelectBlock(0, col, m_grid->GetNumberRows() - 1, col, kbd, sendEvent); - - return; + m_colSelection.Add( col ); + selectedTopLeft = wxGridCellCoords( 0, col ); + selectedBottomRight = wxGridCellCoords( m_grid->GetNumberRows() - 1, col ); + } + else + { + m_cellSelection.Add( wxGridCellCoords( row, col ) ); + selectedTopLeft = wxGridCellCoords( row, col ); + selectedBottomRight = wxGridCellCoords( row, col ); } - else if ( IsInSelection ( row, col ) ) - return; - - m_cellSelection.Add( wxGridCellCoords( row, col ) ); // Update View: if ( !m_grid->GetBatchCount() ) { wxRect r = m_grid->BlockToDeviceRect( - wxGridCellCoords( row, col ), - wxGridCellCoords( row, col ) ); + selectedTopLeft, + selectedBottomRight ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } @@ -584,8 +633,8 @@ void wxGridSelection::SelectCell( int row, int col, wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, - wxGridCellCoords( row, col ), - wxGridCellCoords( row, col ), + selectedTopLeft, + selectedBottomRight, true, kbd); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); diff --git a/Externals/wxWidgets3/src/generic/headerctrlg.cpp b/Externals/wxWidgets3/src/generic/headerctrlg.cpp index 105f90f7ef..a4735d7f07 100644 --- a/Externals/wxWidgets3/src/generic/headerctrlg.cpp +++ b/Externals/wxWidgets3/src/generic/headerctrlg.cpp @@ -3,7 +3,7 @@ // Purpose: generic wxHeaderCtrl implementation // Author: Vadim Zeitlin // Created: 2008-12-03 -// RCS-ID: $Id: headerctrlg.cpp 63575 2010-02-28 11:08:42Z VZ $ +// RCS-ID: $Id: headerctrlg.cpp 67384 2011-04-03 20:31:32Z DS $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -180,7 +180,7 @@ unsigned int wxHeaderCtrl::FindColumnAtPoint(int x, bool *onSeparator) const pos += col.GetWidth(); - // if the column is resizeable, check if we're approximatively over the + // if the column is resizable, check if we're approximatively over the // line separating it from the next column // // TODO: don't hardcode sensitivity diff --git a/Externals/wxWidgets3/src/generic/htmllbox.cpp b/Externals/wxWidgets3/src/generic/htmllbox.cpp index b76cddeb44..1779404086 100644 --- a/Externals/wxWidgets3/src/generic/htmllbox.cpp +++ b/Externals/wxWidgets3/src/generic/htmllbox.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 31.05.03 -// RCS-ID: $Id: htmllbox.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: htmllbox.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -308,7 +308,7 @@ void wxHtmlListBox::CacheItem(size_t n) const m_htmlParser->SetDC(new wxClientDC(self)); m_htmlParser->SetFS(&self->m_filesystem); #if !wxUSE_UNICODE - if (GetFont().Ok()) + if (GetFont().IsOk()) m_htmlParser->SetInputEncoding(GetFont().GetEncoding()); #endif // use system's default GUI font by default: diff --git a/Externals/wxWidgets3/src/generic/hyperlinkg.cpp b/Externals/wxWidgets3/src/generic/hyperlinkg.cpp index 7248f8e1e9..5a302817e5 100644 --- a/Externals/wxWidgets3/src/generic/hyperlinkg.cpp +++ b/Externals/wxWidgets3/src/generic/hyperlinkg.cpp @@ -4,7 +4,7 @@ // Author: David Norris , Otto Wyss // Modified by: Ryan Norton, Francesco Montorsi // Created: 04/02/2005 -// RCS-ID: $Id: hyperlinkg.cpp 65334 2010-08-17 16:55:32Z VZ $ +// RCS-ID: $Id: hyperlinkg.cpp 67948 2011-06-15 21:56:23Z VZ $ // Copyright: (c) 2005 David Norris // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -41,6 +41,7 @@ #endif #include "wx/clipbrd.h" +#include "wx/renderer.h" // ============================================================================ // implementation @@ -89,6 +90,9 @@ bool wxGenericHyperlinkCtrl::Create(wxWindow *parent, wxWindowID id, // with GTK+'s native handling): Connect( wxEVT_PAINT, wxPaintEventHandler(wxGenericHyperlinkCtrl::OnPaint) ); + Connect( wxEVT_SET_FOCUS, wxFocusEventHandler(wxGenericHyperlinkCtrl::OnFocus) ); + Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler(wxGenericHyperlinkCtrl::OnFocus) ); + Connect( wxEVT_CHAR, wxKeyEventHandler(wxGenericHyperlinkCtrl::OnChar) ); Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnLeaveWindow) ); Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnLeftDown) ); @@ -187,6 +191,32 @@ void wxGenericHyperlinkCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) dc.SetTextBackground(GetBackgroundColour()); dc.DrawText(GetLabel(), GetLabelRect().GetTopLeft()); + if (HasFocus()) + { + wxRendererNative::Get().DrawFocusRect(this, dc, GetClientRect(), wxCONTROL_SELECTED); + } +} + +void wxGenericHyperlinkCtrl::OnFocus(wxFocusEvent& event) +{ + Refresh(); + event.Skip(); +} + +void wxGenericHyperlinkCtrl::OnChar(wxKeyEvent& event) +{ + switch (event.m_keyCode) + { + default: + event.Skip(); + break; + case WXK_SPACE: + case WXK_NUMPAD_SPACE: + SetForegroundColour(m_visitedColour); + m_visited = true; + SendEvent(); + break; + } } void wxGenericHyperlinkCtrl::OnLeftDown(wxMouseEvent& event) diff --git a/Externals/wxWidgets3/src/generic/imaglist.cpp b/Externals/wxWidgets3/src/generic/imaglist.cpp index 60fd71eae2..79c28ae14e 100644 --- a/Externals/wxWidgets3/src/generic/imaglist.cpp +++ b/Externals/wxWidgets3/src/generic/imaglist.cpp @@ -2,7 +2,7 @@ // Name: src/generic/imaglist.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: imaglist.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: imaglist.cpp 70345 2012-01-15 01:05:28Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,8 +16,6 @@ #if wxUSE_IMAGLIST && !defined(wxHAS_NATIVE_IMAGELIST) -#ifndef __WXPALMOS__ - #include "wx/imaglist.h" #ifndef WX_PRECOMP @@ -106,7 +104,7 @@ int wxGenericImageList::Add( const wxBitmap &bitmap ) int wxGenericImageList::Add( const wxBitmap& bitmap, const wxBitmap& mask ) { wxBitmap bmp(bitmap); - if (mask.Ok()) + if (mask.IsOk()) bmp.SetMask(new wxMask(mask)); return Add(bmp); } @@ -214,7 +212,7 @@ bool wxGenericImageList::Replace( int index, const wxBitmap &bitmap, const wxBit m_images.Insert( next, newBitmap ); } - if (mask.Ok()) + if (mask.IsOk()) newBitmap->SetMask(new wxMask(mask)); return true; @@ -273,6 +271,4 @@ bool wxGenericImageList::Draw( int index, wxDC &dc, int x, int y, return true; } -#endif // __WXPALMOS__ - #endif // wxUSE_IMAGLIST diff --git a/Externals/wxWidgets3/src/generic/listctrl.cpp b/Externals/wxWidgets3/src/generic/listctrl.cpp index 97cb983eb9..4f7fe3c9ec 100644 --- a/Externals/wxWidgets3/src/generic/listctrl.cpp +++ b/Externals/wxWidgets3/src/generic/listctrl.cpp @@ -3,7 +3,7 @@ // Purpose: generic implementation of wxListCtrl // Author: Robert Roebling // Vadim Zeitlin (virtual list control support) -// Id: $Id: listctrl.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: listctrl.cpp 70368 2012-01-16 13:37:18Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -342,12 +342,23 @@ bool wxListHeaderData::IsHit( int x, int y ) const void wxListHeaderData::GetItem( wxListItem& item ) { - item.m_mask = m_mask; - item.m_text = m_text; - item.m_image = m_image; - item.m_format = m_format; - item.m_width = m_width; - item.m_state = m_state; + long mask = item.m_mask; + if ( !mask ) + { + // by default, get everything for backwards compatibility + mask = -1; + } + + if ( mask & wxLIST_MASK_STATE ) + item.m_state = m_state; + if ( mask & wxLIST_MASK_TEXT ) + item.m_text = m_text; + if ( mask & wxLIST_MASK_IMAGE ) + item.m_image = m_image; + if ( mask & wxLIST_MASK_WIDTH ) + item.m_width = m_width; + if ( mask & wxLIST_MASK_FORMAT ) + item.m_format = m_format; } int wxListHeaderData::GetImage() const @@ -1461,6 +1472,12 @@ bool wxListTextCtrlWrapper::AcceptChanges() } void wxListTextCtrlWrapper::OnChar( wxKeyEvent &event ) +{ + if ( !CheckForEndEditKey(event) ) + event.Skip(); +} + +bool wxListTextCtrlWrapper::CheckForEndEditKey(const wxKeyEvent& event) { switch ( event.m_keyCode ) { @@ -1473,8 +1490,10 @@ void wxListTextCtrlWrapper::OnChar( wxKeyEvent &event ) break; default: - event.Skip(); + return false; } + + return true; } void wxListTextCtrlWrapper::OnKeyUp( wxKeyEvent &event ) @@ -1518,6 +1537,7 @@ void wxListTextCtrlWrapper::OnKillFocus( wxFocusEvent &event ) BEGIN_EVENT_TABLE(wxListMainWindow, wxWindow) EVT_PAINT (wxListMainWindow::OnPaint) EVT_MOUSE_EVENTS (wxListMainWindow::OnMouse) + EVT_CHAR_HOOK (wxListMainWindow::OnCharHook) EVT_CHAR (wxListMainWindow::OnChar) EVT_KEY_DOWN (wxListMainWindow::OnKeyDown) EVT_KEY_UP (wxListMainWindow::OnKeyUp) @@ -2023,6 +2043,7 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) GetParent()->GetId()); evCache.SetEventObject( GetParent() ); evCache.m_oldItemIndex = visibleFrom; + evCache.m_item.m_itemId = evCache.m_itemIndex = visibleTo; GetParent()->GetEventHandler()->ProcessEvent( evCache ); } @@ -2153,6 +2174,7 @@ void wxListMainWindow::SendNotify( size_t line, wxListEvent le( command, GetParent()->GetId() ); le.SetEventObject( GetParent() ); + le.m_item.m_itemId = le.m_itemIndex = line; // set only for events which have position @@ -2200,6 +2222,7 @@ wxTextCtrl *wxListMainWindow::EditLabel(long item, wxClassInfo* textControlClass wxListEvent le( wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT, GetParent()->GetId() ); le.SetEventObject( GetParent() ); + le.m_item.m_itemId = le.m_itemIndex = item; wxListLineData *data = GetLine(itemEdit); wxCHECK_MSG( data, NULL, wxT("invalid index in EditLabel()") ); @@ -2242,6 +2265,7 @@ bool wxListMainWindow::OnRenameAccept(size_t itemEdit, const wxString& value) { wxListEvent le( wxEVT_COMMAND_LIST_END_LABEL_EDIT, GetParent()->GetId() ); le.SetEventObject( GetParent() ); + le.m_item.m_itemId = le.m_itemIndex = itemEdit; wxListLineData *data = GetLine(itemEdit); @@ -2262,6 +2286,7 @@ void wxListMainWindow::OnRenameCancelled(size_t itemEdit) le.SetEditCanceled(true); le.SetEventObject( GetParent() ); + le.m_item.m_itemId = le.m_itemIndex = itemEdit; wxListLineData *data = GetLine(itemEdit); @@ -2346,37 +2371,19 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event ) } } + // Update drag events counter first as we must do it even if the mouse is + // not on any item right now as we must keep count in case we started + // dragging from the empty control area but continued to do it over a valid + // item -- in this situation we must not start dragging this item. if (event.Dragging()) - { - if (m_dragCount == 0) - { - // we have to report the raw, physical coords as we want to be - // able to call HitTest(event.m_pointDrag) from the user code to - // get the item being dragged - m_dragStart = event.GetPosition(); - } - m_dragCount++; - - if (m_dragCount != 3) - return; - - int command = event.RightIsDown() ? wxEVT_COMMAND_LIST_BEGIN_RDRAG - : wxEVT_COMMAND_LIST_BEGIN_DRAG; - - wxListEvent le( command, GetParent()->GetId() ); - le.SetEventObject( GetParent() ); - le.m_itemIndex = m_lineLastClicked; - le.m_pointDrag = m_dragStart; - GetParent()->GetEventHandler()->ProcessEvent( le ); - - return; - } else - { m_dragCount = 0; - } + // The only mouse event that can be generated without any valid item is + // wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK as it can be useful to have a global + // popup menu for the list control itself which should be shown even when + // the user clicks outside of any item. if ( !hitResult ) { // outside of any item @@ -2400,6 +2407,27 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event ) return; } + if ( event.Dragging() ) + { + if (m_dragCount == 1) + { + // we have to report the raw, physical coords as we want to be + // able to call HitTest(event.m_pointDrag) from the user code to + // get the item being dragged + m_dragStart = event.GetPosition(); + } + + if (m_dragCount != 3) + return; + + int command = event.RightIsDown() ? wxEVT_COMMAND_LIST_BEGIN_RDRAG + : wxEVT_COMMAND_LIST_BEGIN_DRAG; + + SendNotify( m_lineLastClicked, command, m_dragStart ); + + return; + } + bool forceClick = false; if (event.ButtonDClick()) { @@ -2690,6 +2718,7 @@ void wxListMainWindow::OnKeyDown( wxKeyEvent &event ) // send a list event wxListEvent le( wxEVT_COMMAND_LIST_KEY_DOWN, parent->GetId() ); + le.m_item.m_itemId = le.m_itemIndex = m_current; if (HasCurrent()) GetLine(m_current)->GetItem( 0, le.m_item ); @@ -2713,6 +2742,22 @@ void wxListMainWindow::OnKeyUp( wxKeyEvent &event ) event.Skip(); } +void wxListMainWindow::OnCharHook( wxKeyEvent &event ) +{ + if ( m_textctrlWrapper ) + { + // When an in-place editor is active we should ensure that it always + // gets the key events that are special to it. + if ( m_textctrlWrapper->CheckForEndEditKey(event) ) + { + // Skip the call to wxEvent::Skip() below. + return; + } + } + + event.Skip(); +} + void wxListMainWindow::OnChar( wxKeyEvent &event ) { wxWindow *parent = GetParent(); @@ -2932,17 +2977,6 @@ void wxListMainWindow::GetImageSize( int index, int &width, int &height ) const } } -int wxListMainWindow::GetTextLength( const wxString &s ) const -{ - wxClientDC dc( wxConstCast(this, wxListMainWindow) ); - dc.SetFont( GetFont() ); - - wxCoord lw; - dc.GetTextExtent( s, &lw, NULL ); - - return lw + AUTOSIZE_COL_MARGIN; -} - void wxListMainWindow::SetImageList( wxImageList *imageList, int which ) { m_dirty = true; @@ -2985,18 +3019,42 @@ int wxListMainWindow::GetItemSpacing( bool isSmall ) // columns // ---------------------------------------------------------------------------- -void wxListMainWindow::SetColumn( int col, wxListItem &item ) +int +wxListMainWindow::ComputeMinHeaderWidth(const wxListHeaderData* column) const +{ + wxClientDC dc(const_cast(this)); + + int width = dc.GetTextExtent(column->GetText()).x + AUTOSIZE_COL_MARGIN; + + width += 2*EXTRA_WIDTH; + + // check for column header's image availability + const int image = column->GetImage(); + if ( image != -1 ) + { + if ( m_small_image_list ) + { + int ix = 0, iy = 0; + m_small_image_list->GetSize(image, ix, iy); + width += ix + HEADER_IMAGE_MARGIN_IN_REPORT_MODE; + } + } + + return width; +} + +void wxListMainWindow::SetColumn( int col, const wxListItem &item ) { wxListHeaderDataList::compatibility_iterator node = m_columns.Item( col ); wxCHECK_RET( node, wxT("invalid column index in SetColumn") ); - if ( item.m_width == wxLIST_AUTOSIZE_USEHEADER ) - item.m_width = GetTextLength( item.m_text ); - wxListHeaderData *column = node->GetData(); column->SetItem( item ); + if ( item.m_width == wxLIST_AUTOSIZE_USEHEADER ) + column->SetWidth(ComputeMinHeaderWidth(column)); + wxListHeaderWindow *headerWin = GetListCtrl()->m_headerWin; if ( headerWin ) headerWin->m_dirty = true; @@ -3030,29 +3088,13 @@ void wxListMainWindow::SetColumnWidth( int col, int width ) if (width == wxLIST_AUTOSIZE_USEHEADER) { - width = GetTextLength(column->GetText()); - width += 2*EXTRA_WIDTH; - - // check for column header's image availability - const int image = column->GetImage(); - if ( image != -1 ) - { - if ( m_small_image_list ) - { - int ix = 0, iy = 0; - m_small_image_list->GetSize(image, ix, iy); - width += ix + HEADER_IMAGE_MARGIN_IN_REPORT_MODE; - } - } + width = ComputeMinHeaderWidth(column); } else if ( width == wxLIST_AUTOSIZE ) { - if ( IsVirtual() ) - { - // TODO: determine the max width somehow... - width = WIDTH_COL_DEFAULT; - } - else // !virtual + width = ComputeMinHeaderWidth(column); + + if ( !IsVirtual() ) { wxClientDC dc(this); dc.SetFont( GetFont() ); @@ -3082,8 +3124,9 @@ void wxListMainWindow::SetColumnWidth( int col, int width ) m_aColWidths.Item(col)->nMaxWidth = max; } - max = m_aColWidths.Item(col)->nMaxWidth; - width = max + AUTOSIZE_COL_MARGIN; + max = m_aColWidths.Item(col)->nMaxWidth + AUTOSIZE_COL_MARGIN; + if ( width < max ) + width = max; } } @@ -3156,10 +3199,14 @@ void wxListMainWindow::SetItem( wxListItem &item ) } } - // update the item on screen - wxRect rectItem; - GetItemRect(id, rectItem); - RefreshRect(rectItem); + // update the item on screen unless we're going to update everything soon + // anyhow + if ( !m_dirty ) + { + wxRect rectItem; + GetItemRect(id, rectItem); + RefreshRect(rectItem); + } } void wxListMainWindow::SetItemStateAll(long state, long stateMask) @@ -3604,6 +3651,9 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) int x = EXTRA_BORDER_X; int y = EXTRA_BORDER_Y; + + // Note that "row" here is vertical, i.e. what is called + // "column" in many other places in wxWidgets. int maxWidthInThisRow = 0; m_linesPerPage = 0; @@ -3625,8 +3675,24 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) if (currentlyVisibleLines > m_linesPerPage) m_linesPerPage = currentlyVisibleLines; - if ( y + sizeLine.y >= clientHeight ) + // Have we reached the end of the row either because no + // more items would fit or because there are simply no more + // items? + if ( y + sizeLine.y >= clientHeight + || i == count - 1) { + // Adjust all items in this row to have the same + // width to ensure that they all align horizontally in + // icon view. + if ( HasFlag(wxLC_ICON) || HasFlag(wxLC_SMALL_ICON) ) + { + size_t firstRowLine = i - currentlyVisibleLines + 1; + for (size_t j = firstRowLine; j <= i; j++) + { + GetLine(j)->m_gi->ExtendWidth(maxWidthInThisRow); + } + } + currentlyVisibleLines = 0; y = EXTRA_BORDER_Y; maxWidthInThisRow += MARGIN_BETWEEN_ROWS; @@ -3635,10 +3701,6 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) maxWidthInThisRow = 0; } - // We have reached the last item. - if ( i == count - 1 ) - entireWidth += maxWidthInThisRow; - if ( (tries == 0) && (entireWidth + SCROLL_UNIT_X > clientWidth) ) { @@ -3811,6 +3873,21 @@ void wxListMainWindow::DeleteColumn( int col ) for ( size_t i = 0; i < m_lines.GetCount(); i++ ) { wxListLineData * const line = GetLine(i); + + // In the following atypical but possible scenario it can be + // legal to call DeleteColumn() but the items may not have any + // values for it: + // 1. In report view, insert a second column. + // 2. Still in report view, add an item with 2 values. + // 3. Switch to an icon (or list) view. + // 4. Add an item -- necessarily with 1 value only. + // 5. Switch back to report view. + // 6. Call DeleteColumn(). + // So we need to check for this as otherwise we would simply crash + // if this happens. + if ( line->m_items.GetCount() <= static_cast(col) ) + continue; + wxListItemDataList::compatibility_iterator n = line->m_items.Item( col ); delete n->GetData(); line->m_items.Erase(n); @@ -4027,6 +4104,19 @@ void wxListMainWindow::InsertItem( wxListItem &item ) wxListLineData *line = new wxListLineData(this); line->SetItem( item.m_col, item ); + if ( item.m_mask & wxLIST_MASK_IMAGE ) + { + // Reset the buffered height if it's not big enough for the new image. + int image = item.GetImage(); + if ( m_small_image_list && image != -1 && InReportView() ) + { + int imageWidth, imageHeight; + m_small_image_list->GetSize(image, imageWidth, imageHeight); + + if ( imageHeight > m_lineHeight ) + m_lineHeight = 0; + } + } m_lines.Insert( line, id ); @@ -4043,15 +4133,15 @@ void wxListMainWindow::InsertItem( wxListItem &item ) RefreshLines(id, GetItemCount() - 1); } -void wxListMainWindow::InsertColumn( long col, wxListItem &item ) +void wxListMainWindow::InsertColumn( long col, const wxListItem &item ) { m_dirty = true; if ( InReportView() ) { - if (item.m_width == wxLIST_AUTOSIZE_USEHEADER) - item.m_width = GetTextLength( item.m_text ); - wxListHeaderData *column = new wxListHeaderData( item ); + if (item.m_width == wxLIST_AUTOSIZE_USEHEADER) + column->SetWidth(ComputeMinHeaderWidth(column)); + wxColWidthInfo *colWidthInfo = new wxColWidthInfo(); bool insert = (col >= 0) && ((size_t)col < m_columns.GetCount()); @@ -4221,7 +4311,7 @@ void wxListMainWindow::GetVisibleLinesRange(size_t *from, size_t *to) IMPLEMENT_DYNAMIC_CLASS(wxGenericListCtrl, wxControl) -BEGIN_EVENT_TABLE(wxGenericListCtrl,wxControl) +BEGIN_EVENT_TABLE(wxGenericListCtrl,wxListCtrlBase) EVT_SIZE(wxGenericListCtrl::OnSize) EVT_SCROLLWIN(wxGenericListCtrl::OnScroll) END_EVENT_TABLE() @@ -4301,7 +4391,9 @@ bool wxGenericListCtrl::Create(wxWindow *parent, wxASSERT_MSG( (style & wxLC_MASK_TYPE), wxT("wxListCtrl style should have exactly one mode bit set") ); - if ( !wxControl::Create( parent, id, pos, size, style|wxVSCROLL|wxHSCROLL, validator, name ) ) + if ( !wxListCtrlBase::Create( parent, id, pos, size, + style | wxVSCROLL | wxHSCROLL, + validator, name ) ) return false; #ifdef __WXGTK__ @@ -4339,7 +4431,7 @@ WXLRESULT wxGenericListCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { - WXLRESULT rc = wxControl::MSWWindowProc(nMsg, wParam, lParam); + WXLRESULT rc = wxListCtrlBase::MSWWindowProc(nMsg, wParam, lParam); // we need to process arrows ourselves for scrolling if ( nMsg == WM_GETDLGCODE ) @@ -4447,7 +4539,7 @@ bool wxGenericListCtrl::GetColumn(int col, wxListItem &item) const return true; } -bool wxGenericListCtrl::SetColumn( int col, wxListItem& item ) +bool wxGenericListCtrl::SetColumn( int col, const wxListItem& item ) { m_mainWin->SetColumn( col, item ); return true; @@ -4782,6 +4874,10 @@ bool wxGenericListCtrl::DeleteColumn( int col ) // if we don't have the header any longer, we need to relayout the window // if ( !GetColumnCount() ) + + // Ensure that the non-existent columns are really removed from display. + Refresh(); + return true; } @@ -4853,12 +4949,14 @@ long wxGenericListCtrl::InsertItem( long index, const wxString &label, int image wxListItem info; info.m_text = label; info.m_image = imageIndex; - info.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE; + info.m_mask = wxLIST_MASK_TEXT; + if (imageIndex > -1) + info.m_mask |= wxLIST_MASK_IMAGE; info.m_itemId = index; return InsertItem( info ); } -long wxGenericListCtrl::InsertColumn( long col, wxListItem &item ) +long wxGenericListCtrl::DoInsertColumn( long col, const wxListItem &item ) { wxCHECK_MSG( InReportView(), -1, wxT("can't add column in non report mode") ); @@ -4872,23 +4970,6 @@ long wxGenericListCtrl::InsertColumn( long col, wxListItem &item ) return 0; } -long wxGenericListCtrl::InsertColumn( long col, const wxString &heading, - int format, int width ) -{ - wxListItem item; - item.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_FORMAT; - item.m_text = heading; - if (width >= -2) - { - item.m_mask |= wxLIST_MASK_WIDTH; - item.m_width = width; - } - - item.m_format = format; - - return InsertColumn( col, item ); -} - bool wxGenericListCtrl::ScrollList( int dx, int dy ) { return m_mainWin->ScrollList(dx, dy); @@ -5060,7 +5141,7 @@ void wxGenericListCtrl::DoClientToScreen( int *x, int *y ) const if ( m_mainWin ) m_mainWin->DoClientToScreen(x, y); else - wxControl::DoClientToScreen(x, y); + wxListCtrlBase::DoClientToScreen(x, y); } void wxGenericListCtrl::DoScreenToClient( int *x, int *y ) const @@ -5070,7 +5151,7 @@ void wxGenericListCtrl::DoScreenToClient( int *x, int *y ) const if ( m_mainWin ) m_mainWin->DoScreenToClient(x, y); else - wxControl::DoScreenToClient(x, y); + wxListCtrlBase::DoScreenToClient(x, y); } void wxGenericListCtrl::SetFocus() diff --git a/Externals/wxWidgets3/src/generic/logg.cpp b/Externals/wxWidgets3/src/generic/logg.cpp index 06e7b0cb5d..e40376598f 100644 --- a/Externals/wxWidgets3/src/generic/logg.cpp +++ b/Externals/wxWidgets3/src/generic/logg.cpp @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.09.99 (extracted from src/common/log.cpp) -// RCS-ID: $Id: logg.cpp 66503 2010-12-31 17:38:51Z VZ $ +// RCS-ID: $Id: logg.cpp 70671 2012-02-22 17:35:21Z JS $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -73,7 +73,7 @@ #include #endif -#include "wx/datetime.h" +#include "wx/time.h" // the suffix we add to the button to show that the dialog can be expanded #define EXPAND_SUFFIX wxT(" >>") @@ -90,7 +90,6 @@ // allows to exclude the usage of wxDateTime static wxString TimeStamp(const wxString& format, time_t t) { -#if wxUSE_DATETIME wxChar buf[4096]; struct tm tm; if ( !wxStrftime(buf, WXSIZEOF(buf), format, wxLocaltime_r(&t, &tm)) ) @@ -99,9 +98,6 @@ static wxString TimeStamp(const wxString& format, time_t t) wxFAIL_MSG(wxT("strftime() failed")); } return wxString(buf); -#else // !wxUSE_DATETIME - return wxEmptyString; -#endif // wxUSE_DATETIME/!wxUSE_DATETIME } @@ -521,7 +517,7 @@ wxLogFrame::wxLogFrame(wxWindow *pParent, wxLogWindow *log, const wxString& szTi wxMenuBar *pMenuBar = new wxMenuBar; wxMenu *pMenu = new wxMenu; #if CAN_SAVE_FILES - pMenu->Append(Menu_Save, _("&Save..."), _("Save log contents to file")); + pMenu->Append(Menu_Save, _("Save &As..."), _("Save log contents to file")); #endif // CAN_SAVE_FILES pMenu->Append(Menu_Clear, _("C&lear"), _("Clear the log contents")); pMenu->AppendSeparator(); @@ -726,7 +722,7 @@ wxLogDialog::wxLogDialog(wxWindow *parent, bool isPda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA); // create the controls which are always shown and layout them: we use - // sizers even though our window is not resizeable to calculate the size of + // sizers even though our window is not resizable to calculate the size of // the dialog properly wxBoxSizer *sizerTop = new wxBoxSizer(wxVERTICAL); wxBoxSizer *sizerAll = new wxBoxSizer(isPda ? wxVERTICAL : wxHORIZONTAL); @@ -757,11 +753,17 @@ wxLogDialog::wxLogDialog(wxWindow *parent, // add the details pane #ifndef __SMARTPHONE__ + +#if wxUSE_COLLPANE wxCollapsiblePane * const collpane = new wxCollapsiblePane(this, wxID_ANY, ms_details); sizerTop->Add(collpane, wxSizerFlags(1).Expand().Border()); wxWindow *win = collpane->GetPane(); +#else + wxPanel* win = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, + wxBORDER_NONE); +#endif wxSizer * const paneSz = new wxBoxSizer(wxVERTICAL); CreateDetailsControls(win); @@ -850,7 +852,7 @@ void wxLogDialog::CreateDetailsControls(wxWindow *parent) // This may very well fail if there are insufficient colours available. // Degrade gracefully. - if ( !bmp.Ok() ) + if ( !bmp.IsOk() ) { loadedIcons = false; diff --git a/Externals/wxWidgets3/src/generic/mask.cpp b/Externals/wxWidgets3/src/generic/mask.cpp index 69d6cfaf74..a7ea34ad2a 100644 --- a/Externals/wxWidgets3/src/generic/mask.cpp +++ b/Externals/wxWidgets3/src/generic/mask.cpp @@ -3,7 +3,7 @@ // Purpose: generic wxMask implementation // Author: Vadim Zeitlin // Created: 2006-09-28 -// RCS-ID: $Id: mask.cpp 41495 2006-09-28 23:02:39Z VZ $ +// RCS-ID: $Id: mask.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -49,12 +49,12 @@ bool wxMask::InitFromColour(const wxBitmap& bitmap, const wxColour& colour) wxImage imgSrc(bitmap.ConvertToImage()); imgSrc.SetMask(false); wxImage image(imgSrc.ConvertToMono(clr.Red(), clr.Green(), clr.Blue())); - if ( !image.Ok() ) + if ( !image.IsOk() ) return false; m_bitmap = wxBitmap(image, 1); - return m_bitmap.Ok(); + return m_bitmap.IsOk(); #else // !wxUSE_IMAGE wxUnusedVar(bitmap); wxUnusedVar(colour); @@ -65,7 +65,7 @@ bool wxMask::InitFromColour(const wxBitmap& bitmap, const wxColour& colour) bool wxMask::InitFromMonoBitmap(const wxBitmap& bitmap) { - wxCHECK_MSG( bitmap.Ok(), false, wxT("Invalid bitmap") ); + wxCHECK_MSG( bitmap.IsOk(), false, wxT("Invalid bitmap") ); wxCHECK_MSG( bitmap.GetDepth() == 1, false, wxT("Cannot create mask from colour bitmap") ); m_bitmap = bitmap; diff --git a/Externals/wxWidgets3/src/generic/msgdlgg.cpp b/Externals/wxWidgets3/src/generic/msgdlgg.cpp index e5532d8cc5..fe1e70f82a 100644 --- a/Externals/wxWidgets3/src/generic/msgdlgg.cpp +++ b/Externals/wxWidgets3/src/generic/msgdlgg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart, Robert Roebling // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: msgdlgg.cpp 65450 2010-08-30 21:48:25Z VZ $ +// RCS-ID: $Id: msgdlgg.cpp 68537 2011-08-04 22:53:42Z VZ $ // Copyright: (c) Julian Smart and Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -74,6 +74,7 @@ protected: BEGIN_EVENT_TABLE(wxGenericMessageDialog, wxDialog) EVT_BUTTON(wxID_YES, wxGenericMessageDialog::OnYes) EVT_BUTTON(wxID_NO, wxGenericMessageDialog::OnNo) + EVT_BUTTON(wxID_HELP, wxGenericMessageDialog::OnHelp) EVT_BUTTON(wxID_CANCEL, wxGenericMessageDialog::OnCancel) END_EVENT_TABLE() @@ -133,6 +134,13 @@ wxSizer *wxGenericMessageDialog::CreateMsgDlgButtonSizer() btnDef = yes; } + if ( m_dialogStyle & wxHELP ) + { + wxButton * const + help = new wxButton(this, wxID_HELP, GetCustomHelpLabel()); + sizerStd->AddButton(help); + } + if ( btnDef ) { btnDef->SetDefault(); @@ -148,7 +156,7 @@ wxSizer *wxGenericMessageDialog::CreateMsgDlgButtonSizer() // Use standard labels for all buttons return CreateSeparatedButtonSizer ( - m_dialogStyle & (wxOK | wxCANCEL | wxYES_NO | + m_dialogStyle & (wxOK | wxCANCEL | wxHELP | wxYES_NO | wxNO_DEFAULT | wxCANCEL_DEFAULT) ); } @@ -242,6 +250,11 @@ void wxGenericMessageDialog::OnNo(wxCommandEvent& WXUNUSED(event)) EndModal( wxID_NO ); } +void wxGenericMessageDialog::OnHelp(wxCommandEvent& WXUNUSED(event)) +{ + EndModal( wxID_HELP ); +} + void wxGenericMessageDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) { // Allow cancellation via ESC/Close button except if diff --git a/Externals/wxWidgets3/src/generic/odcombo.cpp b/Externals/wxWidgets3/src/generic/odcombo.cpp index 635932107c..91d1c3ffa3 100644 --- a/Externals/wxWidgets3/src/generic/odcombo.cpp +++ b/Externals/wxWidgets3/src/generic/odcombo.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: Apr-30-2006 -// RCS-ID: $Id: odcombo.cpp 66728 2011-01-22 14:38:36Z DS $ +// RCS-ID: $Id: odcombo.cpp 70625 2012-02-19 14:49:37Z SN $ // Copyright: (c) 2005 Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -375,7 +375,7 @@ bool wxVListBoxComboPopup::HandleKey( int keycode, bool saturate, wxChar keychar // The m_combo->SetValue() call above sets m_value to the index of this // string. But if there are more identical string, the index is of the - // first occurence, which may be wrong, so set the index explicitly here, + // first occurrence, which may be wrong, so set the index explicitly here, // _after_ the SetValue() call. m_value = value; @@ -902,7 +902,6 @@ wxOwnerDrawnComboBox::wxOwnerDrawnComboBox(wxWindow *parent, long style, const wxValidator& validator, const wxString& name) - : wxComboCtrl() { Init(); diff --git a/Externals/wxWidgets3/src/generic/panelg.cpp b/Externals/wxWidgets3/src/generic/panelg.cpp deleted file mode 100644 index 75468ab942..0000000000 --- a/Externals/wxWidgets3/src/generic/panelg.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: src/generic/panelg.cpp -// Purpose: Generic wxPanel implementation. -// Author: Vadim Zeitlin -// Created: 2011-03-20 -// RCS-ID: $Id: panelg.cpp 67258 2011-03-20 11:50:47Z VZ $ -// Copyright: (c) 2011 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -// ============================================================================ -// declarations -// ============================================================================ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -// for compilers that support precompilation, includes "wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#ifndef WX_PRECOMP - #include "wx/dc.h" - #include "wx/panel.h" -#endif // WX_PRECOMP - -#ifdef wxHAS_GENERIC_PANEL - -// ============================================================================ -// implementation -// ============================================================================ - -void wxPanel::DoSetBackgroundBitmap(const wxBitmap& bmp) -{ - m_bitmapBg = bmp; - - if ( m_bitmapBg.IsOk() ) - { - Connect(wxEVT_ERASE_BACKGROUND, - wxEraseEventHandler(wxPanel::OnEraseBackground)); - } - else - { - Disconnect(wxEVT_ERASE_BACKGROUND, - wxEraseEventHandler(wxPanel::OnEraseBackground)); - } -} - -void wxPanel::OnEraseBackground(wxEraseEvent& event) -{ - wxDC& dc = *event.GetDC(); - - const wxSize clientSize = GetClientSize(); - const wxSize bitmapSize = m_bitmapBg.GetSize(); - - for ( int x = 0; x < clientSize.x; x += bitmapSize.x ) - { - for ( int y = 0; y < clientSize.y; y += bitmapSize.y ) - { - dc.DrawBitmap(m_bitmapBg, x, y); - } - } -} - -#endif // wxHAS_GENERIC_PANEL diff --git a/Externals/wxWidgets3/src/generic/prntdlgg.cpp b/Externals/wxWidgets3/src/generic/prntdlgg.cpp index 244146f639..69141398ee 100644 --- a/Externals/wxWidgets3/src/generic/prntdlgg.cpp +++ b/Externals/wxWidgets3/src/generic/prntdlgg.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: prntdlgg.cpp 64019 2010-04-18 00:05:37Z VZ $ +// RCS-ID: $Id: prntdlgg.cpp 69828 2011-11-27 19:49:43Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -804,7 +804,7 @@ wxComboBox *wxGenericPrintSetupDialog::CreatePaperTypeChoice() wxComboBox *choice = new wxComboBox( this, wxPRINTID_PAPERSIZE, - _("Paper Size"), + _("Paper size"), wxDefaultPosition, wxSize(width, wxDefaultCoord), n, choices ); @@ -831,7 +831,7 @@ wxGenericPageSetupDialog::wxGenericPageSetupDialog( wxWindow *parent, wxPageSetupDialogData* data) : wxPageSetupDialogBase( parent, wxID_ANY, - _("Page Setup"), + _("Page setup"), wxPoint(0,0), wxSize(600, 600), wxDEFAULT_DIALOG_STYLE|wxTAB_TRAVERSAL ) @@ -858,7 +858,7 @@ wxGenericPageSetupDialog::wxGenericPageSetupDialog( wxWindow *parent, m_paperTypeChoice = new wxComboBox( this, wxPRINTID_PAPERSIZE, - _("Paper Size"), + _("Paper size"), wxDefaultPosition, wxSize(300, wxDefaultCoord), n, choices ); @@ -1060,7 +1060,7 @@ wxComboBox *wxGenericPageSetupDialog::CreatePaperTypeChoice(int *x, int *y) wxComboBox *choice = new wxComboBox( this, wxPRINTID_PAPERSIZE, - _("Paper Size"), + _("Paper size"), wxPoint(*x, *y), wxSize(300, wxDefaultCoord), n, choices ); diff --git a/Externals/wxWidgets3/src/generic/progdlgg.cpp b/Externals/wxWidgets3/src/generic/progdlgg.cpp index 5fd81e58d2..d8f04b6c1a 100644 --- a/Externals/wxWidgets3/src/generic/progdlgg.cpp +++ b/Externals/wxWidgets3/src/generic/progdlgg.cpp @@ -4,7 +4,7 @@ // Author: Karsten Ballueder // Modified by: // Created: 09.05.1999 -// RCS-ID: $Id: progdlgg.cpp 67134 2011-03-06 15:24:26Z SC $ +// RCS-ID: $Id: progdlgg.cpp 70512 2012-02-05 14:18:25Z VZ $ // Copyright: (c) Karsten Ballueder // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -87,7 +87,7 @@ wxIMPLEMENT_CLASS(wxProgressDialog, wxDialog) // wxGenericProgressDialog creation // ---------------------------------------------------------------------------- -void wxGenericProgressDialog::Init(wxWindow *parent, int style) +void wxGenericProgressDialog::Init() { // we may disappear at any moment, let the others know about it SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT); @@ -95,9 +95,8 @@ void wxGenericProgressDialog::Init(wxWindow *parent, int style) // Initialize all our members that we always use (even when we don't // create a valid window in this class). - m_pdStyle = style; - - m_parentTop = wxGetTopLevelParent(parent); + m_pdStyle = 0; + m_parentTop = NULL; m_gauge = NULL; m_msg = NULL; @@ -129,10 +128,10 @@ void wxGenericProgressDialog::Init(wxWindow *parent, int style) m_tempEventLoop = NULL; } -wxGenericProgressDialog::wxGenericProgressDialog(wxWindow *parent, int style) +wxGenericProgressDialog::wxGenericProgressDialog() : wxDialog() { - Init(parent, style); + Init(); } wxGenericProgressDialog::wxGenericProgressDialog(const wxString& title, @@ -142,21 +141,32 @@ wxGenericProgressDialog::wxGenericProgressDialog(const wxString& title, int style) : wxDialog() { - Init(parent, style); + Init(); Create( title, message, maximum, parent, style ); } -void wxGenericProgressDialog::Create( const wxString& title, +void wxGenericProgressDialog::SetTopParent(wxWindow* parent) +{ + m_parentTop = GetParentForModalDialog(parent, GetWindowStyle()); +} + +bool wxGenericProgressDialog::Create( const wxString& title, const wxString& message, int maximum, wxWindow *parent, int style ) { - wxDialog::Create(GetParentForModalDialog(parent, style), wxID_ANY, title); + SetTopParent(parent); - SetParent( GetParentForModalDialog(parent, style) ); - SetTitle( title ); + m_parentTop = wxGetTopLevelParent(parent); + m_pdStyle = style; + + wxWindow* const + realParent = GetParentForModalDialog(parent, GetWindowStyle()); + + if (!wxDialog::Create(realParent, wxID_ANY, title)) + return false; SetMaximum(maximum); @@ -306,6 +316,7 @@ void wxGenericProgressDialog::Create( const wxString& title, } Update(); + return true; } void wxGenericProgressDialog::UpdateTimeEstimates(int value, diff --git a/Externals/wxWidgets3/src/generic/regiong.cpp b/Externals/wxWidgets3/src/generic/regiong.cpp index 654cb4327d..a7af760553 100644 --- a/Externals/wxWidgets3/src/generic/regiong.cpp +++ b/Externals/wxWidgets3/src/generic/regiong.cpp @@ -4,7 +4,7 @@ // Author: David Elliott // Modified by: // Created: 2004/04/12 -// RCS-ID: $Id: regiong.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: regiong.cpp 70625 2012-02-19 14:49:37Z SN $ // Copyright: (c) 2004 David Elliott // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -1645,7 +1645,7 @@ miSubtractO ( else if (r2->x1 <= x1) { /* - * Subtrahend preceeds minuend: nuke left edge of minuend. + * Subtrahend precedes minuend: nuke left edge of minuend. */ x1 = r2->x2; if (x1 >= r1->x2) diff --git a/Externals/wxWidgets3/src/generic/renderg.cpp b/Externals/wxWidgets3/src/generic/renderg.cpp index 53a50e75c6..5a3598e798 100644 --- a/Externals/wxWidgets3/src/generic/renderg.cpp +++ b/Externals/wxWidgets3/src/generic/renderg.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.07.2003 -// RCS-ID: $Id: renderg.cpp 66091 2010-11-10 13:52:22Z VZ $ +// RCS-ID: $Id: renderg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -281,7 +281,7 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, // native hot-tracking line (on XP) const int penwidth = 3; int y = rect.y + rect.height + 1 - penwidth; - wxColour c = (params && params->m_selectionColour.Ok()) ? + wxColour c = (params && params->m_selectionColour.IsOk()) ? params->m_selectionColour : wxColour(0x66, 0x66, 0x66); wxPen pen(c, penwidth); pen.SetCap(wxCAP_BUTT); @@ -322,7 +322,7 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, triPt[2].y = ar.height; } - wxColour c = (params && params->m_arrowColour.Ok()) ? + wxColour c = (params && params->m_arrowColour.IsOk()) ? params->m_arrowColour : wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW); wxDCPenChanger setPen(dc, c); @@ -336,7 +336,7 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, int bmpWidth = 0; // draw the bitmap if there is one - if ( params && params->m_labelBitmap.Ok() ) + if ( params && params->m_labelBitmap.IsOk() ) { int w = params->m_labelBitmap.GetWidth(); int h = params->m_labelBitmap.GetHeight(); @@ -379,9 +379,9 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, const int margin = 5; // number of pixels to reserve on either side of the label labelWidth += 2*margin; - wxFont font = params->m_labelFont.Ok() ? + wxFont font = params->m_labelFont.IsOk() ? params->m_labelFont : win->GetFont(); - wxColour clr = params->m_labelColour.Ok() ? + wxColour clr = params->m_labelColour.IsOk() ? params->m_labelColour : win->GetForegroundColour(); wxString label( params->m_labelText ); diff --git a/Externals/wxWidgets3/src/generic/richtooltipg.cpp b/Externals/wxWidgets3/src/generic/richtooltipg.cpp new file mode 100644 index 0000000000..68810dae92 --- /dev/null +++ b/Externals/wxWidgets3/src/generic/richtooltipg.cpp @@ -0,0 +1,673 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/generic/richtooltipg.cpp +// Purpose: Implementation of wxRichToolTip. +// Author: Vadim Zeitlin +// Created: 2011-10-07 +// RCS-ID: $Id: richtooltipg.cpp 69968 2011-12-09 15:58:40Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_RICHTOOLTIP + +#ifndef WX_PRECOMP + #include "wx/dcmemory.h" + #include "wx/icon.h" + #include "wx/region.h" + #include "wx/settings.h" + #include "wx/sizer.h" + #include "wx/statbmp.h" + #include "wx/stattext.h" + #include "wx/timer.h" + #include "wx/utils.h" +#endif // WX_PRECOMP + +#include "wx/private/richtooltip.h" +#include "wx/generic/private/richtooltip.h" + +#include "wx/artprov.h" +#include "wx/custombgwin.h" +#include "wx/display.h" +#include "wx/graphics.h" +#include "wx/popupwin.h" +#include "wx/textwrapper.h" + +#ifdef __WXMSW__ + #include "wx/msw/uxtheme.h" + + static const int TTP_BALLOONTITLE = 4; + + static const int TMT_TEXTCOLOR = 3803; + static const int TMT_GRADIENTCOLOR1 = 3810; + static const int TMT_GRADIENTCOLOR2 = 3811; +#endif + +// ---------------------------------------------------------------------------- +// wxRichToolTipPopup: the popup window used by wxRichToolTip. +// ---------------------------------------------------------------------------- + +class wxRichToolTipPopup : + public wxCustomBackgroundWindow +{ +public: + wxRichToolTipPopup(wxWindow* parent, + const wxString& title, + const wxString& message, + const wxIcon& icon, + wxTipKind tipKind, + const wxFont& titleFont_) : + m_timer(this) + { + Create(parent, wxFRAME_SHAPED); + + + wxBoxSizer* const sizerTitle = new wxBoxSizer(wxHORIZONTAL); + if ( icon.IsOk() ) + { + sizerTitle->Add(new wxStaticBitmap(this, wxID_ANY, icon), + wxSizerFlags().Centre().Border(wxRIGHT)); + } + //else: Simply don't show any icon. + + wxStaticText* const labelTitle = new wxStaticText(this, wxID_ANY, ""); + labelTitle->SetLabelText(title); + + wxFont titleFont(titleFont_); + if ( !titleFont.IsOk() ) + { + // Determine the appropriate title font for the current platform. + titleFont = labelTitle->GetFont(); + +#ifdef __WXMSW__ + // When using themes MSW tooltips use larger bluish version of the + // normal font. + wxUxThemeEngine* const theme = GetTooltipTheme(); + if ( theme ) + { + titleFont.MakeLarger(); + + COLORREF c; + if ( FAILED(theme->GetThemeColor + ( + wxUxThemeHandle(parent, L"TOOLTIP"), + TTP_BALLOONTITLE, + 0, + TMT_TEXTCOLOR, + &c + )) ) + { + // Use the standard value of this colour as fallback. + c = 0x993300; + } + + labelTitle->SetForegroundColour(wxRGBToColour(c)); + } + else +#endif // __WXMSW__ + { + // Everything else, including "classic" MSW look uses just the + // bold version of the base font. + titleFont.MakeBold(); + } + } + + labelTitle->SetFont(titleFont); + sizerTitle->Add(labelTitle, wxSizerFlags().Centre()); + + wxBoxSizer* const sizerTop = new wxBoxSizer(wxVERTICAL); + sizerTop->Add(sizerTitle, + wxSizerFlags().DoubleBorder(wxLEFT|wxRIGHT|wxTOP)); + + // Use a spacer as we don't want to have a double border between the + // elements, just a simple one will do. + sizerTop->AddSpacer(wxSizerFlags::GetDefaultBorder()); + + wxTextSizerWrapper wrapper(this); + wxSizer* sizerText = wrapper.CreateSizer(message, -1 /* No wrapping */); + +#ifdef __WXMSW__ + if ( icon.IsOk() && GetTooltipTheme() ) + { + // Themed tooltips under MSW align the text with the title, not + // with the icon, so use a helper horizontal sizer in this case. + wxBoxSizer* const sizerTextIndent = new wxBoxSizer(wxHORIZONTAL); + sizerTextIndent->AddSpacer(icon.GetWidth()); + sizerTextIndent->Add(sizerText, + wxSizerFlags().Border(wxLEFT).Centre()); + + sizerText = sizerTextIndent; + } +#endif // !__WXMSW__ + sizerTop->Add(sizerText, + wxSizerFlags().DoubleBorder(wxLEFT|wxRIGHT|wxBOTTOM) + .Centre()); + + SetSizer(sizerTop); + + const int offsetY = SetTipShapeAndSize(tipKind, GetBestSize()); + if ( offsetY > 0 ) + { + // Offset our contents by the tip height to make it appear in the + // main rectangle. + sizerTop->PrependSpacer(offsetY); + } + + Layout(); + } + + void SetBackgroundColours(wxColour colStart, wxColour colEnd) + { + if ( !colStart.IsOk() ) + { + // Determine the best colour(s) to use on our own. +#ifdef __WXMSW__ + wxUxThemeEngine* const theme = GetTooltipTheme(); + if ( theme ) + { + wxUxThemeHandle hTheme(GetParent(), L"TOOLTIP"); + + COLORREF c1, c2; + if ( FAILED(theme->GetThemeColor + ( + hTheme, + TTP_BALLOONTITLE, + 0, + TMT_GRADIENTCOLOR1, + &c1 + )) || + FAILED(theme->GetThemeColor + ( + hTheme, + TTP_BALLOONTITLE, + 0, + TMT_GRADIENTCOLOR2, + &c2 + )) ) + { + c1 = 0xffffff; + c2 = 0xf0e5e4; + } + + colStart = wxRGBToColour(c1); + colEnd = wxRGBToColour(c2); + } + else +#endif // __WXMSW__ + { + colStart = wxSystemSettings::GetColour(wxSYS_COLOUR_INFOBK); + } + } + + if ( colEnd.IsOk() ) + { + // Use gradient-filled background bitmap. + const wxSize size = GetClientSize(); + wxBitmap bmp(size); + { + wxMemoryDC dc(bmp); + dc.Clear(); + dc.GradientFillLinear(size, colStart, colEnd, wxDOWN); + } + + SetBackgroundBitmap(bmp); + } + else // Use solid colour. + { + SetBackgroundColour(colStart); + } + } + + void DoShow() + { + wxPoint pos = GetTipPoint(); + + // We want our anchor point to coincide with this position so offset + // the position of the top left corner passed to Move() accordingly. + pos -= m_anchorPos; + + Move(pos, wxSIZE_NO_ADJUSTMENTS); + + Popup(); + } + + void SetTimeout(unsigned timeout) + { + if ( !timeout ) + return; + + Connect(wxEVT_TIMER, wxTimerEventHandler(wxRichToolTipPopup::OnTimer)); + + m_timer.Start(timeout, true /* one shot */); + } + +protected: + virtual void OnDismiss() + { + Destroy(); + } + +private: +#ifdef __WXMSW__ + // Returns non-NULL theme only if we're using Win7-style tooltips. + static wxUxThemeEngine* GetTooltipTheme() + { + // Even themed applications under XP still use "classic" tooltips. + if ( wxGetWinVersion() <= wxWinVersion_XP ) + return NULL; + + return wxUxThemeEngine::GetIfActive(); + } +#endif // __WXMSW__ + + // For now we just hard code the tip height, would be nice to do something + // smarter in the future. + static int GetTipHeight() + { +#ifdef __WXMSW__ + if ( GetTooltipTheme() ) + return 20; +#endif // __WXMSW__ + + return 15; + } + + // Get the point to which our tip should point. + wxPoint GetTipPoint() const + { + // Currently we always use the middle of the window. It seems that MSW + // native tooltips use a different point but it's not really clear how + // do they determine it nor whether it's worth the trouble to emulate + // their behaviour. + const wxRect r = GetParent()->GetScreenRect(); + return wxPoint(r.x + r.width/2, r.y + r.height/2); + } + + // Choose the correct orientation depending on the window position. + // + // Also use the tip kind appropriate for the current environment. For MSW + // the right triangles are used and for Mac the equilateral ones as this is + // the prevailing kind under these systems. For everything else we go with + // right triangles as well but without any real rationale so this could be + // tweaked in the future. + wxTipKind GetBestTipKind() const + { + const wxPoint pos = GetTipPoint(); + + // Use GetFromWindow() and not GetFromPoint() here to try to get the + // correct display even if the tip point itself is not visible. + int dpy = wxDisplay::GetFromWindow(GetParent()); + if ( dpy == wxNOT_FOUND ) + dpy = 0; // What else can we do? + + const wxRect rectDpy = wxDisplay(dpy).GetClientArea(); + +#ifdef __WXMAC__ + return pos.y > rectDpy.height/2 ? wxTipKind_Bottom : wxTipKind_Top; +#else // !__WXMAC__ + return pos.y > rectDpy.height/2 + ? pos.x > rectDpy.width/2 + ? wxTipKind_BottomRight + : wxTipKind_BottomLeft + : pos.x > rectDpy.width/2 + ? wxTipKind_TopRight + : wxTipKind_TopLeft; +#endif // __WXMAC__/!__WXMAC__ + } + + // Set the size and shape of the tip window and returns the offset of its + // content area from the top (horizontal offset is always 0 currently). + int SetTipShapeAndSize(wxTipKind tipKind, const wxSize& contentSize) + { +#if wxUSE_GRAPHICS_CONTEXT + wxSize size = contentSize; + + // The size is the vertical size and the offset is the distance from + // edge for asymmetric tips, currently hard-coded to be the same as the + // size. + const int tipSize = GetTipHeight(); + const int tipOffset = tipSize; + + // The horizontal position of the tip. + int x = -1; + + // The vertical coordinates of the tip base and apex. + int yBase = -1, + yApex = -1; + + // The offset of the content part of the window. + int dy = -1; + + // Define symbolic names for the rectangle corners and mid-way points + // that we use below in an attempt to make the code more clear. Notice + // that these values must be consecutive as we iterate over them. + enum RectPoint + { + RectPoint_TopLeft, + RectPoint_Top, + RectPoint_TopRight, + RectPoint_Right, + RectPoint_BotRight, + RectPoint_Bot, + RectPoint_BotLeft, + RectPoint_Left, + RectPoint_Max + }; + + // The starting point for AddArcToPoint() calls below, we iterate over + // all RectPoints from it. + RectPoint pointStart = RectPoint_Max; + + + // Hard-coded radius of the round main rectangle corners. + const double RADIUS = 5; + + // Create a path defining the shape of the tooltip window. + wxGraphicsPath + path = wxGraphicsRenderer::GetDefaultRenderer()->CreatePath(); + + if ( tipKind == wxTipKind_Auto ) + tipKind = GetBestTipKind(); + + // Points defining the tip shape (in clockwise order as we must end at + // tipPoints[0] after drawing the rectangle outline in this order). + wxPoint2DDouble tipPoints[3]; + + switch ( tipKind ) + { + case wxTipKind_Auto: + wxFAIL_MSG( "Impossible kind value" ); + break; + + case wxTipKind_TopLeft: + x = tipOffset; + yApex = 0; + yBase = tipSize; + dy = tipSize; + + tipPoints[0] = wxPoint2DDouble(x, yBase); + tipPoints[1] = wxPoint2DDouble(x, yApex); + tipPoints[2] = wxPoint2DDouble(x + tipSize, yBase); + + pointStart = RectPoint_TopRight; + break; + + case wxTipKind_TopRight: + x = size.x - tipOffset; + yApex = 0; + yBase = tipSize; + dy = tipSize; + + tipPoints[0] = wxPoint2DDouble(x - tipSize, yBase); + tipPoints[1] = wxPoint2DDouble(x, yApex); + tipPoints[2] = wxPoint2DDouble(x, yBase); + + pointStart = RectPoint_TopRight; + break; + + case wxTipKind_BottomLeft: + x = tipOffset; + yApex = size.y + tipSize; + yBase = size.y; + dy = 0; + + tipPoints[0] = wxPoint2DDouble(x + tipSize, yBase); + tipPoints[1] = wxPoint2DDouble(x, yApex); + tipPoints[2] = wxPoint2DDouble(x, yBase); + + pointStart = RectPoint_BotLeft; + break; + + case wxTipKind_BottomRight: + x = size.x - tipOffset; + yApex = size.y + tipSize; + yBase = size.y; + dy = 0; + + tipPoints[0] = wxPoint2DDouble(x, yBase); + tipPoints[1] = wxPoint2DDouble(x, yApex); + tipPoints[2] = wxPoint2DDouble(x - tipSize, yBase); + + pointStart = RectPoint_BotLeft; + break; + + case wxTipKind_Top: + x = size.x/2; + yApex = 0; + yBase = tipSize; + dy = tipSize; + + { + // A half-side of an equilateral triangle is its altitude + // divided by sqrt(3) ~= 1.73. + const double halfside = tipSize/1.73; + + tipPoints[0] = wxPoint2DDouble(x - halfside, yBase); + tipPoints[1] = wxPoint2DDouble(x, yApex); + tipPoints[2] = wxPoint2DDouble(x + halfside, yBase); + } + + pointStart = RectPoint_TopRight; + break; + + case wxTipKind_Bottom: + x = size.x/2; + yApex = size.y + tipSize; + yBase = size.y; + dy = 0; + + { + const double halfside = tipSize/1.73; + + tipPoints[0] = wxPoint2DDouble(x + halfside, yBase); + tipPoints[1] = wxPoint2DDouble(x, yApex); + tipPoints[2] = wxPoint2DDouble(x - halfside, yBase); + } + + pointStart = RectPoint_BotLeft; + break; + + case wxTipKind_None: + x = size.x/2; + dy = 0; + + path.AddRoundedRectangle(0, 0, size.x, size.y, RADIUS); + break; + } + + wxASSERT_MSG( dy != -1, wxS("Unknown tip kind?") ); + + size.y += tipSize; + SetSize(size); + + if ( tipKind != wxTipKind_None ) + { + path.MoveToPoint(tipPoints[0]); + path.AddLineToPoint(tipPoints[1]); + path.AddLineToPoint(tipPoints[2]); + + const double xLeft = 0.; + const double xMid = size.x/2.; + const double xRight = size.x; + + const double yTop = dy; + const double yMid = (dy + size.y)/2.; + const double yBot = dy + contentSize.y; + + wxPoint2DDouble rectPoints[RectPoint_Max]; + rectPoints[RectPoint_TopLeft] = wxPoint2DDouble(xLeft, yTop); + rectPoints[RectPoint_Top] = wxPoint2DDouble(xMid, yTop); + rectPoints[RectPoint_TopRight] = wxPoint2DDouble(xRight, yTop); + rectPoints[RectPoint_Right] = wxPoint2DDouble(xRight, yMid); + rectPoints[RectPoint_BotRight] = wxPoint2DDouble(xRight, yBot); + rectPoints[RectPoint_Bot] = wxPoint2DDouble(xMid, yBot); + rectPoints[RectPoint_BotLeft] = wxPoint2DDouble(xLeft, yBot); + rectPoints[RectPoint_Left] = wxPoint2DDouble(xLeft, yMid); + + // Iterate over all rectangle rectPoints for the first 3 corners. + unsigned n = pointStart; + for ( unsigned corner = 0; corner < 3; corner++ ) + { + const wxPoint2DDouble& pt1 = rectPoints[n]; + + n = (n + 1) % RectPoint_Max; + + const wxPoint2DDouble& pt2 = rectPoints[n]; + + path.AddArcToPoint(pt1.m_x, pt1.m_y, pt2.m_x, pt2.m_y, RADIUS); + + n = (n + 1) % RectPoint_Max; + } + + // Last one wraps to the first point of the tip. + const wxPoint2DDouble& pt1 = rectPoints[n]; + const wxPoint2DDouble& pt2 = tipPoints[0]; + + path.AddArcToPoint(pt1.m_x, pt1.m_y, pt2.m_x, pt2.m_y, RADIUS); + + path.CloseSubpath(); + } + + SetShape(path); +#else // !wxUSE_GRAPHICS_CONTEXT + int x = contentSize.x/2, + yApex = 0, + dy = 0; + + SetSize(contentSize); +#endif // wxUSE_GRAPHICS_CONTEXT/!wxUSE_GRAPHICS_CONTEXT + + m_anchorPos.x = x; + m_anchorPos.y = yApex; + + return dy; + } + + // Timer event handler hides the tooltip when the timeout expires. + void OnTimer(wxTimerEvent& WXUNUSED(event)) + { + // Doing "Notify" here ensures that our OnDismiss() is called and so we + // also Destroy() ourselves. We could use Dismiss() and call Destroy() + // explicitly from here as well. + DismissAndNotify(); + } + + + // The anchor point offset if we show a tip or the middle of the top side + // otherwise. + wxPoint m_anchorPos; + + // The timer counting down the time until we're hidden. + wxTimer m_timer; + + wxDECLARE_NO_COPY_CLASS(wxRichToolTipPopup); +}; + +// ---------------------------------------------------------------------------- +// wxRichToolTipGenericImpl: generic implementation of wxRichToolTip. +// ---------------------------------------------------------------------------- + +void +wxRichToolTipGenericImpl::SetBackgroundColour(const wxColour& col, + const wxColour& colEnd) +{ + m_colStart = col; + m_colEnd = colEnd; +} + +void wxRichToolTipGenericImpl::SetCustomIcon(const wxIcon& icon) +{ + m_icon = icon; +} + +void wxRichToolTipGenericImpl::SetStandardIcon(int icon) +{ + switch ( icon & wxICON_MASK ) + { + case wxICON_WARNING: + case wxICON_ERROR: + case wxICON_INFORMATION: + // Although we don't use this icon in a list, we need a smallish + // icon here and not an icon of a typical message box size so use + // wxART_LIST to get it. + m_icon = wxArtProvider::GetIcon + ( + wxArtProvider::GetMessageBoxIconId(icon), + wxART_LIST + ); + break; + + case wxICON_QUESTION: + wxFAIL_MSG("Question icon doesn't make sense for a tooltip"); + break; + + case wxICON_NONE: + m_icon = wxNullIcon; + break; + } +} + +void wxRichToolTipGenericImpl::SetTimeout(unsigned milliseconds) +{ + m_timeout = milliseconds; +} + +void wxRichToolTipGenericImpl::SetTipKind(wxTipKind tipKind) +{ + m_tipKind = tipKind; +} + +void wxRichToolTipGenericImpl::SetTitleFont(const wxFont& font) +{ + m_titleFont = font; +} + +void wxRichToolTipGenericImpl::ShowFor(wxWindow* win) +{ + // Set the focus to the window the tooltip refers to to make it look active. + win->SetFocus(); + + wxRichToolTipPopup* const popup = new wxRichToolTipPopup + ( + win, + m_title, + m_message, + m_icon, + m_tipKind, + m_titleFont + ); + + popup->SetBackgroundColours(m_colStart, m_colEnd); + + popup->DoShow(); + + popup->SetTimeout(m_timeout); +} + +// Currently only wxMSW provides a native implementation. +#ifndef __WXMSW__ + +/* static */ +wxRichToolTipImpl* +wxRichToolTipImpl::Create(const wxString& title, const wxString& message) +{ + return new wxRichToolTipGenericImpl(title, message); +} + +#endif // !__WXMSW__ + +#endif // wxUSE_RICHTOOLTIP diff --git a/Externals/wxWidgets3/src/generic/scrlwing.cpp b/Externals/wxWidgets3/src/generic/scrlwing.cpp index 6210c21360..9ceda4929a 100644 --- a/Externals/wxWidgets3/src/generic/scrlwing.cpp +++ b/Externals/wxWidgets3/src/generic/scrlwing.cpp @@ -5,7 +5,7 @@ // Modified by: Vadim Zeitlin on 31.08.00: wxScrollHelper allows to implement. // Ron Lee on 10.4.02: virtual size / auto scrollbars et al. // Created: 01/02/97 -// RCS-ID: $Id: scrlwing.cpp 64877 2010-07-11 10:43:35Z VZ $ +// RCS-ID: $Id: scrlwing.cpp 70443 2012-01-23 11:28:12Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -385,16 +385,17 @@ void wxScrollHelperBase::SetScrollbars(int pixelsPerUnitX, int yPos, bool noRefresh) { - int xpos, ypos; + // Convert positions expressed in scroll units to positions in pixels. + int xPosInPixels = (xPos + m_xScrollPosition)*m_xScrollPixelsPerLine, + yPosInPixels = (yPos + m_yScrollPosition)*m_yScrollPixelsPerLine; - CalcUnscrolledPosition(xPos, yPos, &xpos, &ypos); bool do_refresh = ( (noUnitsX != 0 && m_xScrollLines == 0) || - (noUnitsX < m_xScrollLines && xpos > pixelsPerUnitX * noUnitsX) || + (noUnitsX < m_xScrollLines && xPosInPixels > pixelsPerUnitX * noUnitsX) || (noUnitsY != 0 && m_yScrollLines == 0) || - (noUnitsY < m_yScrollLines && ypos > pixelsPerUnitY * noUnitsY) || + (noUnitsY < m_yScrollLines && yPosInPixels > pixelsPerUnitY * noUnitsY) || (xPos != m_xScrollPosition) || (yPos != m_yScrollPosition) ); @@ -1111,7 +1112,7 @@ void wxScrollHelperBase::HandleOnChildFocus(wxChildFocusEvent& event) // part of a wxComboCtrl visible and the button would still be outside the // scrolled area. But do so only if the parent fits *entirely* inside the // scrolled window. In other situations, such as nested wxPanel or - // wxScrolledWindows, the parent might be way to big to fit inside the + // wxScrolledWindows, the parent might be way too big to fit inside the // scrolled window. If that is the case, then make only the focused window // visible if ( win->GetParent() != m_targetWindow) diff --git a/Externals/wxWidgets3/src/generic/spinctlg.cpp b/Externals/wxWidgets3/src/generic/spinctlg.cpp index 7887529b5a..f8edc709fb 100644 --- a/Externals/wxWidgets3/src/generic/spinctlg.cpp +++ b/Externals/wxWidgets3/src/generic/spinctlg.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 29.01.01 -// RCS-ID: $Id: spinctlg.cpp 67199 2011-03-15 11:10:38Z VZ $ +// RCS-ID: $Id: spinctlg.cpp 70432 2012-01-21 17:03:52Z VZ $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -85,13 +85,13 @@ public: void OnChar( wxKeyEvent &event ) { if (m_spin) - m_spin->OnTextChar(event); + m_spin->ProcessWindowEvent(event); } void OnKillFocus(wxFocusEvent& event) { if (m_spin) - m_spin->OnTextLostFocus(); + m_spin->ProcessWindowEvent(event); event.Skip(); } @@ -283,16 +283,24 @@ void wxSpinCtrlGenericBase::SetFocus() m_textCtrl->SetFocus(); } +#ifdef __WXMSW__ + +void wxSpinCtrlGenericBase::DoEnable(bool enable) +{ + // We never enable this control itself, it must stay disabled to avoid + // interfering with the siblings event handling (see e.g. #12045 for the + // kind of problems which arise otherwise). + if ( !enable ) + wxSpinCtrlBase::DoEnable(enable); +} + +#endif // __WXMSW__ + bool wxSpinCtrlGenericBase::Enable(bool enable) { - // Notice that we never enable this control itself, it must stay disabled - // to avoid interfering with the siblings event handling (see e.g. #12045 - // for the kind of problems which arise otherwise). - if ( enable == m_isEnabled ) + if ( !wxSpinCtrlBase::Enable(enable) ) return false; - m_isEnabled = enable; - m_spinButton->Enable(enable); m_textCtrl->Enable(enable); @@ -315,17 +323,6 @@ bool wxSpinCtrlGenericBase::Show(bool show) return true; } -bool wxSpinCtrlGenericBase::Reparent(wxWindowBase *newParent) -{ - if ( m_spinButton ) - { - m_spinButton->Reparent(newParent); - m_textCtrl->Reparent(newParent); - } - - return true; -} - #if wxUSE_TOOLTIPS void wxSpinCtrlGenericBase::DoSetToolTip(wxToolTip *tip) { @@ -357,6 +354,11 @@ void wxSpinCtrlGenericBase::DoSetToolTip(wxToolTip *tip) // Handle sub controls events // ---------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(wxSpinCtrlGenericBase, wxSpinCtrlBase) + EVT_CHAR(wxSpinCtrlGenericBase::OnTextChar) + EVT_KILL_FOCUS(wxSpinCtrlGenericBase::OnTextLostFocus) +END_EVENT_TABLE() + void wxSpinCtrlGenericBase::OnSpinButton(wxSpinEvent& event) { event.Skip(); @@ -388,10 +390,12 @@ void wxSpinCtrlGenericBase::OnSpinButton(wxSpinEvent& event) DoSendEvent(); } -void wxSpinCtrlGenericBase::OnTextLostFocus() +void wxSpinCtrlGenericBase::OnTextLostFocus(wxFocusEvent& event) { SyncSpinToText(); DoSendEvent(); + + event.Skip(); } void wxSpinCtrlGenericBase::OnTextChar(wxKeyEvent& event) diff --git a/Externals/wxWidgets3/src/generic/splash.cpp b/Externals/wxWidgets3/src/generic/splash.cpp index 2798ae4451..2fad3c6014 100644 --- a/Externals/wxWidgets3/src/generic/splash.cpp +++ b/Externals/wxWidgets3/src/generic/splash.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 28/6/2000 -// RCS-ID: $Id: splash.cpp 60558 2009-05-09 12:22:45Z VZ $ +// RCS-ID: $Id: splash.cpp 69796 2011-11-22 13:18:55Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -42,6 +42,13 @@ BEGIN_EVENT_TABLE(wxSplashScreen, wxFrame) EVT_CLOSE(wxSplashScreen::OnCloseWindow) END_EVENT_TABLE() +void wxSplashScreen::Init() +{ + m_window = NULL; + + wxEvtHandler::AddFilter(this); +} + /* Note that unless we pass a non-default size to the frame, SetClientSize * won't work properly under Windows, and the splash screen frame is sized * slightly too small. @@ -50,8 +57,11 @@ END_EVENT_TABLE() wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) - : wxFrame(parent, id, wxEmptyString, wxPoint(0,0), wxSize(100, 100), style) + : wxFrame(parent, id, wxEmptyString, wxPoint(0,0), wxSize(100, 100), + style | wxFRAME_TOOL_WINDOW | wxFRAME_NO_TASKBAR) { + Init(); + // splash screen must not be used as parent by the other windows because it // is going to disappear soon, indicate it by giving it this special style SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT); @@ -61,7 +71,6 @@ wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int mil GDK_WINDOW_TYPE_HINT_SPLASHSCREEN); #endif - m_window = NULL; m_splashStyle = splashStyle; m_milliseconds = milliseconds; @@ -94,6 +103,20 @@ wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int mil wxSplashScreen::~wxSplashScreen() { m_timer.Stop(); + + wxEvtHandler::RemoveFilter(this); +} + +int wxSplashScreen::FilterEvent(wxEvent& event) +{ + const wxEventType t = event.GetEventType(); + if ( t == wxEVT_KEY_DOWN || + t == wxEVT_LEFT_DOWN || + t == wxEVT_RIGHT_DOWN || + t == wxEVT_MIDDLE_DOWN ) + Close(true); + + return -1; } void wxSplashScreen::OnNotify(wxTimerEvent& WXUNUSED(event)) @@ -116,8 +139,6 @@ BEGIN_EVENT_TABLE(wxSplashScreenWindow, wxWindow) EVT_PAINT(wxSplashScreenWindow::OnPaint) #endif EVT_ERASE_BACKGROUND(wxSplashScreenWindow::OnEraseBackground) - EVT_CHAR(wxSplashScreenWindow::OnChar) - EVT_MOUSE_EVENTS(wxSplashScreenWindow::OnMouseEvent) END_EVENT_TABLE() wxSplashScreenWindow::wxSplashScreenWindow(const wxBitmap& bitmap, wxWindow* parent, @@ -171,35 +192,22 @@ static void wxDrawSplashBitmap(wxDC& dc, const wxBitmap& bitmap, int WXUNUSED(x) void wxSplashScreenWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) wxDrawSplashBitmap(dc, m_bitmap, 0, 0); } void wxSplashScreenWindow::OnEraseBackground(wxEraseEvent& event) { - if (event.GetDC() && m_bitmap.Ok()) + if (event.GetDC() && m_bitmap.IsOk()) { wxDrawSplashBitmap(* event.GetDC(), m_bitmap, 0, 0); } else { wxClientDC dc(this); - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) wxDrawSplashBitmap(dc, m_bitmap, 0, 0); } } -void wxSplashScreenWindow::OnMouseEvent(wxMouseEvent& event) -{ - if (event.LeftDown() || event.RightDown()) - GetParent()->Close(true); - else - event.Skip(); -} - -void wxSplashScreenWindow::OnChar(wxKeyEvent& WXUNUSED(event)) -{ - GetParent()->Close(true); -} - #endif // wxUSE_SPLASH diff --git a/Externals/wxWidgets3/src/generic/splitter.cpp b/Externals/wxWidgets3/src/generic/splitter.cpp index 9af2f66b4e..10a97054ed 100644 --- a/Externals/wxWidgets3/src/generic/splitter.cpp +++ b/Externals/wxWidgets3/src/generic/splitter.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id: splitter.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: splitter.cpp 70840 2012-03-08 13:23:39Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -66,12 +66,8 @@ BEGIN_EVENT_TABLE(wxSplitterWindow, wxWindow) #if defined( __WXMSW__ ) || defined( __WXMAC__) EVT_SET_CURSOR(wxSplitterWindow::OnSetCursor) #endif // wxMSW - - WX_EVENT_TABLE_CONTROL_CONTAINER(wxSplitterWindow) END_EVENT_TABLE() -WX_DELEGATE_TO_CONTROL_CONTAINER(wxSplitterWindow, wxWindow) - static bool IsLive(wxSplitterWindow* wnd) { // with wxSP_LIVE_UPDATE style the splitter windows are always resized @@ -97,10 +93,7 @@ bool wxSplitterWindow::Create(wxWindow *parent, wxWindowID id, if ( !wxWindow::Create(parent, id, pos, size, style, name) ) return false; - if (size.x >= 0) - m_lastSize.x = size.x; - if (size.y >= 0) - m_lastSize.y = size.y; + m_lastSize = GetClientSize(); m_permitUnsplitAlways = (style & wxSP_PERMIT_UNSPLIT) != 0; @@ -117,8 +110,6 @@ bool wxSplitterWindow::Create(wxWindow *parent, wxWindowID id, void wxSplitterWindow::Init() { - WX_INIT_CONTROL_CONTAINER(); - m_splitMode = wxSPLIT_VERTICAL; m_permitUnsplitAlways = true; m_windowOne = NULL; @@ -127,10 +118,10 @@ void wxSplitterWindow::Init() m_oldX = 0; m_oldY = 0; m_sashStart = 0; - m_sashPosition = m_requestedSashPosition = 0; + m_sashPosition = 0; + m_requestedSashPosition = INT_MAX; m_sashGravity = 0.0; m_lastSize = wxSize(0,0); - m_checkRequestedSashPosition = false; m_minimumPaneSize = 0; m_sashCursorWE = wxCursor(wxCURSOR_SIZEWE); m_sashCursorNS = wxCursor(wxCURSOR_SIZENS); @@ -202,17 +193,21 @@ void wxSplitterWindow::OnInternalIdle() { wxWindow::OnInternalIdle(); - // if this is the first idle time after a sash position has potentially - // been set, allow SizeWindows to check for a requested size. - if (!m_checkRequestedSashPosition) + // We may need to update the children sizes in two cases: either because + // we're in the middle of a live update as indicated by m_needUpdating or + // because we have a requested but not yet set sash position as indicated + // by m_requestedSashPosition having a valid value. + if ( m_needUpdating ) { - m_checkRequestedSashPosition = true; - SizeWindows(); - return; // it won't needUpdating in this case + m_needUpdating = false; + } + else if ( m_requestedSashPosition == INT_MAX ) + { + // We don't need to resize the children. + return; } - if (m_needUpdating) - SizeWindows(); + SizeWindows(); } void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) @@ -440,31 +435,44 @@ void wxSplitterWindow::OnSize(wxSizeEvent& event) return; } - if ( m_windowTwo ) - { - int w, h; - GetClientSize(&w, &h); + const wxSize curSize = event.GetSize(); - int size = m_splitMode == wxSPLIT_VERTICAL ? w : h; + // Update the sash position if needed. + // + // Notice that we shouldn't do this if the sash position requested by user + // couldn't be set yet as it would never be taken into account at all if we + // modified it before this happens. + if ( m_windowTwo && m_requestedSashPosition == INT_MAX ) + { + int size = m_splitMode == wxSPLIT_VERTICAL ? curSize.x : curSize.y; int old_size = m_splitMode == wxSPLIT_VERTICAL ? m_lastSize.x : m_lastSize.y; - if ( old_size != 0 ) + + // Don't do anything if the size didn't really change. + if ( size != old_size ) { + int newPosition = -1; + + // Apply gravity if we use it. int delta = (int) ( (size - old_size)*m_sashGravity ); if ( delta != 0 ) { - int newPosition = m_sashPosition + delta; + newPosition = m_sashPosition + delta; if( newPosition < m_minimumPaneSize ) newPosition = m_minimumPaneSize; - SetSashPositionAndNotify(newPosition); } - } - if ( m_sashPosition >= size - 5 ) - SetSashPositionAndNotify(wxMax(10, size - 40)); - m_lastSize = wxSize(w,h); + // Also check if the second window became too small. + newPosition = AdjustSashPosition(newPosition == -1 + ? m_sashPosition + : newPosition); + if ( newPosition != m_sashPosition ) + SetSashPositionAndNotify(newPosition); + } } + m_lastSize = curSize; + SizeWindows(); } @@ -488,7 +496,18 @@ bool wxSplitterWindow::SashHitTest(int x, int y, int tolerance) return z >= hitMin && z <= hitMax; } +void wxSplitterWindow::SetSashInvisible(bool invisible) +{ + if ( IsSashInvisible() != invisible ) + ToggleWindowStyle(wxSP_NOSASH); +} + int wxSplitterWindow::GetSashSize() const +{ + return IsSashInvisible() ? 0 : GetDefaultSashSize(); +} + +int wxSplitterWindow::GetDefaultSashSize() const { return wxRendererNative::Get().GetSplitterParams(this).widthSash; } @@ -514,7 +533,7 @@ void wxSplitterWindow::DrawSash(wxDC& dc) return; // nor if we're configured to not show it - if ( HasFlag(wxSP_NOSASH) ) + if ( IsSashInvisible() ) return; wxRendererNative::Get().DrawSplitterSash @@ -646,7 +665,7 @@ void wxSplitterWindow::SetSashPositionAndNotify(int sashPos) void wxSplitterWindow::SizeWindows() { // check if we have delayed setting the real sash position - if ( m_checkRequestedSashPosition && m_requestedSashPosition != INT_MAX ) + if ( m_requestedSashPosition != INT_MAX ) { int newSashPosition = ConvertSashPosition(m_requestedSashPosition); if ( newSashPosition != m_sashPosition ) @@ -712,8 +731,6 @@ void wxSplitterWindow::SizeWindows() wxClientDC dc(this); DrawSash(dc); - - SetNeedUpdating(false); } // Set pane for unsplit window @@ -849,7 +866,6 @@ void wxSplitterWindow::SetSashPosition(int position, bool redraw) // remember the sash position we want to set for later if we can't set it // right now (e.g. because the window is too small) m_requestedSashPosition = position; - m_checkRequestedSashPosition = false; DoSetSashPosition(ConvertSashPosition(position)); @@ -864,9 +880,7 @@ void wxSplitterWindow::SetSashPosition(int position, bool redraw) // window is shown, if you know the overall size is correct. void wxSplitterWindow::UpdateSize() { - m_checkRequestedSashPosition = true; SizeWindows(); - m_checkRequestedSashPosition = false; } bool wxSplitterWindow::DoSendEvent(wxSplitterEvent& event) diff --git a/Externals/wxWidgets3/src/generic/srchctlg.cpp b/Externals/wxWidgets3/src/generic/srchctlg.cpp index 2de709df0d..1965d6e0b7 100644 --- a/Externals/wxWidgets3/src/generic/srchctlg.cpp +++ b/Externals/wxWidgets3/src/generic/srchctlg.cpp @@ -3,7 +3,7 @@ // Purpose: implements wxSearchCtrl as a composite control // Author: Vince Harron // Created: 2006-02-19 -// RCS-ID: $Id: srchctlg.cpp 66310 2010-12-03 12:40:08Z VZ $ +// RCS-ID: $Id: srchctlg.cpp 69284 2011-10-02 11:28:40Z VZ $ // Copyright: Vince Harron // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -61,30 +61,16 @@ class wxSearchTextCtrl : public wxTextCtrl public: wxSearchTextCtrl(wxSearchCtrl *search, const wxString& value, int style) : wxTextCtrl(search, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, - style | wxNO_BORDER) + (style & ~wxBORDER_MASK) | wxNO_BORDER) { m_search = search; - m_defaultFG = GetForegroundColour(); + + SetHint(_("Search")); // remove the default minsize, the searchctrl will have one instead SetSizeHints(wxDefaultCoord,wxDefaultCoord); } - void SetDescriptiveText(const wxString& text) - { - if ( GetValue() == m_descriptiveText ) - { - ChangeValue(wxEmptyString); - } - - m_descriptiveText = text; - } - - wxString GetDescriptiveText() const - { - return m_descriptiveText; - } - // provide access to the base class protected methods to wxSearchCtrl which // needs to forward to them @@ -128,30 +114,34 @@ protected: m_search->GetEventHandler()->ProcessEvent(event); } - void OnIdle(wxIdleEvent& WXUNUSED(event)) +#ifdef __WXMSW__ + // We increase the text control height to be the same as for the controls + // with border as this is what we actually need here because even though + // this control itself is borderless, it's inside wxSearchCtrl which does + // have the border and so should have the same height as the normal text + // entries with border. + // + // This is a bit ugly and it would arguably be better to use whatever size + // the base class version returns and just centre the text vertically in + // the search control but I failed to modify the code in LayoutControls() + // to do this easily and as there is much in that code I don't understand + // (notably what is the logic for buttons sizing?) I prefer to not touch it + // at all. + virtual wxSize DoGetBestSize() const { - if ( IsEmpty() && !(wxWindow::FindFocus() == this) ) - { - ChangeValue(m_descriptiveText); - SetInsertionPoint(0); - SetForegroundColour(m_defaultFG.ChangeLightness (LIGHT_STEP)); - } - } + const long flags = GetWindowStyleFlag(); + wxSearchTextCtrl* const self = const_cast(this); - void OnFocus(wxFocusEvent& event) - { - event.Skip(); - if ( GetValue() == m_descriptiveText ) - { - ChangeValue(wxEmptyString); - SetForegroundColour(m_defaultFG); - } + self->SetWindowStyleFlag((flags & ~wxBORDER_MASK) | wxBORDER_DEFAULT); + const wxSize size = wxTextCtrl::DoGetBestSize(); + self->SetWindowStyleFlag(flags); + + return size; } +#endif // __WXMSW__ private: wxSearchCtrl* m_search; - wxString m_descriptiveText; - wxColour m_defaultFG; DECLARE_EVENT_TABLE() }; @@ -161,8 +151,6 @@ BEGIN_EVENT_TABLE(wxSearchTextCtrl, wxTextCtrl) EVT_TEXT_ENTER(wxID_ANY, wxSearchTextCtrl::OnText) EVT_TEXT_URL(wxID_ANY, wxSearchTextCtrl::OnTextUrl) EVT_TEXT_MAXLEN(wxID_ANY, wxSearchTextCtrl::OnText) - EVT_IDLE(wxSearchTextCtrl::OnIdle) - EVT_SET_FOCUS(wxSearchTextCtrl::OnFocus) END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -181,6 +169,13 @@ public: void SetBitmapLabel(const wxBitmap& label) { m_bmp = label; } + // The buttons in wxSearchCtrl shouldn't accept focus from keyboard because + // this would interfere with the usual TAB processing: the user expects + // that pressing TAB in the search control should switch focus to the next + // control and not give it to the button inside the same control. Besides, + // the search button can be already activated by pressing "Enter" so there + // is really no reason for it to be able to get focus from keyboard. + virtual bool AcceptsFocusFromKeyboard() const { return false; } protected: wxSize DoGetBestSize() const @@ -317,8 +312,7 @@ bool wxSearchCtrl::Create(wxWindow *parent, wxWindowID id, return false; } - m_text = new wxSearchTextCtrl(this, value, style & ~wxBORDER_MASK); - m_text->SetDescriptiveText(_("Search")); + m_text = new wxSearchTextCtrl(this, value, style); m_searchButton = new wxSearchButton(this, wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN, @@ -328,12 +322,7 @@ bool wxSearchCtrl::Create(wxWindow *parent, wxWindowID id, m_cancelBitmap); SetForegroundColour( m_text->GetForegroundColour() ); - m_searchButton->SetForegroundColour( m_text->GetForegroundColour() ); - m_cancelButton->SetForegroundColour( m_text->GetForegroundColour() ); - SetBackgroundColour( m_text->GetBackgroundColour() ); - m_searchButton->SetBackgroundColour( m_text->GetBackgroundColour() ); - m_cancelButton->SetBackgroundColour( m_text->GetBackgroundColour() ); RecalcBitmaps(); @@ -434,12 +423,12 @@ bool wxSearchCtrl::IsCancelButtonVisible() const void wxSearchCtrl::SetDescriptiveText(const wxString& text) { - m_text->SetDescriptiveText(text); + m_text->SetHint(text); } wxString wxSearchCtrl::GetDescriptiveText() const { - return m_text->GetDescriptiveText(); + return m_text->GetHint(); } // ---------------------------------------------------------------------------- @@ -532,17 +521,21 @@ void wxSearchCtrl::LayoutControls(int x, int y, int width, int height) y + ICON_OFFSET - 1, sizeCancel.x, height); } +wxWindowList wxSearchCtrl::GetCompositeWindowParts() const +{ + wxWindowList parts; + parts.push_back(m_text); + parts.push_back(m_searchButton); + parts.push_back(m_cancelButton); + return parts; +} // accessors // --------- wxString wxSearchCtrl::DoGetValue() const { - wxString value = m_text->GetValue(); - if (value == m_text->GetDescriptiveText()) - return wxEmptyString; - else - return value; + return m_text->GetValue(); } wxString wxSearchCtrl::GetRange(long from, long to) const { @@ -786,20 +779,32 @@ void wxSearchCtrl::SetEditable(bool editable) bool wxSearchCtrl::SetFont(const wxFont& font) { - bool result = wxSearchCtrlBase::SetFont(font); - if ( result && m_text ) - { - result = m_text->SetFont(font); - } + if ( !wxSearchCtrlBase::SetFont(font) ) + return false; + + // Recreate the bitmaps as their size may have changed. RecalcBitmaps(); - return result; + + return true; +} + +bool wxSearchCtrl::SetBackgroundColour(const wxColour& colour) +{ + if ( !wxSearchCtrlBase::SetBackgroundColour(colour) ) + return false; + + // When the background changes, re-render the bitmaps so that the correct + // colour shows in their "transparent" area. + RecalcBitmaps(); + + return true; } // search control generic only void wxSearchCtrl::SetSearchBitmap( const wxBitmap& bitmap ) { m_searchBitmap = bitmap; - m_searchBitmapUser = bitmap.Ok(); + m_searchBitmapUser = bitmap.IsOk(); if ( m_searchBitmapUser ) { if ( m_searchButton && !HasMenu() ) @@ -819,7 +824,7 @@ void wxSearchCtrl::SetSearchBitmap( const wxBitmap& bitmap ) void wxSearchCtrl::SetSearchMenuBitmap( const wxBitmap& bitmap ) { m_searchMenuBitmap = bitmap; - m_searchMenuBitmapUser = bitmap.Ok(); + m_searchMenuBitmapUser = bitmap.IsOk(); if ( m_searchMenuBitmapUser ) { if ( m_searchButton && m_menu ) @@ -839,7 +844,7 @@ void wxSearchCtrl::SetSearchMenuBitmap( const wxBitmap& bitmap ) void wxSearchCtrl::SetCancelBitmap( const wxBitmap& bitmap ) { m_cancelBitmap = bitmap; - m_cancelBitmapUser = bitmap.Ok(); + m_cancelBitmapUser = bitmap.IsOk(); if ( m_cancelBitmapUser ) { if ( m_cancelButton ) @@ -1119,7 +1124,7 @@ void wxSearchCtrl::RecalcBitmaps() if ( !m_searchBitmapUser ) { if ( - !m_searchBitmap.Ok() || + !m_searchBitmap.IsOk() || m_searchBitmap.GetHeight() != bitmapHeight || m_searchBitmap.GetWidth() != bitmapWidth ) @@ -1137,7 +1142,7 @@ void wxSearchCtrl::RecalcBitmaps() if ( !m_searchMenuBitmapUser ) { if ( - !m_searchMenuBitmap.Ok() || + !m_searchMenuBitmap.IsOk() || m_searchMenuBitmap.GetHeight() != bitmapHeight || m_searchMenuBitmap.GetWidth() != bitmapWidth ) @@ -1155,7 +1160,7 @@ void wxSearchCtrl::RecalcBitmaps() if ( !m_cancelBitmapUser ) { if ( - !m_cancelBitmap.Ok() || + !m_cancelBitmap.IsOk() || m_cancelBitmap.GetHeight() != bitmapHeight || m_cancelBitmap.GetWidth() != bitmapHeight ) diff --git a/Externals/wxWidgets3/src/generic/statusbr.cpp b/Externals/wxWidgets3/src/generic/statusbr.cpp index 7031967e24..df0391e226 100644 --- a/Externals/wxWidgets3/src/generic/statusbr.cpp +++ b/Externals/wxWidgets3/src/generic/statusbr.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: Francesco Montorsi // Created: 01/02/97 -// RCS-ID: $Id: statusbr.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: statusbr.cpp 70625 2012-02-19 14:49:37Z SN $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -275,7 +275,7 @@ void wxStatusBarGeneric::DrawField(wxDC& dc, int i, int textHeight) GetFieldRect(i, rect); if (rect.GetWidth() <= 0) - return; // happens when the status bar is shrinked in a very small area! + return; // happens when the status bar is shrunk in a very small area! int style = m_panes[i].GetStyle(); if (style != wxSB_FLAT) @@ -414,9 +414,9 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) ) GdkWindowEdge edge = GetLayoutDirection() == wxLayout_RightToLeft ? GDK_WINDOW_EDGE_SOUTH_WEST : GDK_WINDOW_EDGE_SOUTH_EAST; - gtk_paint_resize_grip( m_widget->style, + gtk_paint_resize_grip(gtk_widget_get_style(m_widget), GTKGetDrawingWindow(), - (GtkStateType) GTK_WIDGET_STATE (m_widget), + gtk_widget_get_state(m_widget), NULL, m_widget, "statusbar", diff --git a/Externals/wxWidgets3/src/generic/timectrlg.cpp b/Externals/wxWidgets3/src/generic/timectrlg.cpp new file mode 100644 index 0000000000..a54b002918 --- /dev/null +++ b/Externals/wxWidgets3/src/generic/timectrlg.cpp @@ -0,0 +1,668 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/generic/timectrl.cpp +// Purpose: Generic implementation of wxTimePickerCtrl. +// Author: Paul Breen, Vadim Zeitlin +// Created: 2011-09-22 +// RCS-ID: $Id: timectrlg.cpp 69991 2011-12-12 14:01:23Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_TIMEPICKCTRL + +#ifndef WX_PRECOMP + #include "wx/textctrl.h" +#endif // WX_PRECOMP + +#include "wx/timectrl.h" + +// This class is only compiled if there is no native version or if we +// explicitly want to use both the native and generic one (this is useful for +// testing but not much otherwise and so by default we don't use the generic +// implementation if a native one is available). +#if !defined(wxHAS_NATIVE_TIMEPICKERCTRL) || wxUSE_TIMEPICKCTRL_GENERIC + +#include "wx/generic/timectrl.h" + +#include "wx/dateevt.h" +#include "wx/spinbutt.h" + +#ifndef wxHAS_NATIVE_TIMEPICKERCTRL + IMPLEMENT_DYNAMIC_CLASS(wxTimePickerCtrl, wxControl) +#endif + +// ---------------------------------------------------------------------------- +// Constants +// ---------------------------------------------------------------------------- + +enum +{ + // Horizontal margin between the text and spin control. + HMARGIN_TEXT_SPIN = 2 +}; + +// ---------------------------------------------------------------------------- +// wxTimePickerGenericImpl: used to implement wxTimePickerCtrlGeneric +// ---------------------------------------------------------------------------- + +class wxTimePickerGenericImpl : public wxEvtHandler +{ +public: + wxTimePickerGenericImpl(wxTimePickerCtrlGeneric* ctrl) + { + m_text = new wxTextCtrl(ctrl, wxID_ANY, wxString()); + + // As this text can't be edited, don't use the standard cursor for it + // to avoid misleading the user. Ideally we'd also hide the caret but + // this is not currently supported by wxTextCtrl. + m_text->SetCursor(wxCURSOR_ARROW); + + m_btn = new wxSpinButton(ctrl, wxID_ANY, + wxDefaultPosition, wxDefaultSize, + wxSP_VERTICAL | wxSP_WRAP); + + m_currentField = Field_Hour; + m_isFirstDigit = true; + + // We don't support arbitrary formats currently as this requires + // significantly more work both here and also in wxLocale::GetInfo(). + // + // For now just use either "%H:%M:%S" or "%I:%M:%S %p". It would be + // nice to add support to "%k" and "%l" (hours with leading blanks + // instead of zeros) too as this is the most common unsupported case in + // practice. + m_useAMPM = wxLocale::GetInfo(wxLOCALE_TIME_FMT).Contains("%p"); + + m_text->Connect + ( + wxEVT_SET_FOCUS, + wxFocusEventHandler(wxTimePickerGenericImpl::OnTextSetFocus), + NULL, + this + ); + m_text->Connect + ( + wxEVT_KEY_DOWN, + wxKeyEventHandler(wxTimePickerGenericImpl::OnTextKeyDown), + NULL, + this + ); + m_text->Connect + ( + wxEVT_LEFT_DOWN, + wxMouseEventHandler(wxTimePickerGenericImpl::OnTextClick), + NULL, + this + ); + + m_btn->Connect + ( + wxEVT_SPIN_UP, + wxSpinEventHandler(wxTimePickerGenericImpl::OnArrowUp), + NULL, + this + ); + m_btn->Connect + ( + wxEVT_SPIN_DOWN, + wxSpinEventHandler(wxTimePickerGenericImpl::OnArrowDown), + NULL, + this + ); + } + + // Set the new value. + void SetValue(const wxDateTime& time) + { + m_time = time.IsValid() ? time : wxDateTime::Now(); + + UpdateTextWithoutEvent(); + } + + + // The text part of the control. + wxTextCtrl* m_text; + + // The spin button used to change the text fields. + wxSpinButton* m_btn; + + // The current time (date part is ignored). + wxDateTime m_time; + +private: + // The logical fields of the text control (AM/PM one may not be present). + enum Field + { + Field_Hour, + Field_Min, + Field_Sec, + Field_AMPM, + Field_Max + }; + + // Direction of change of time fields. + enum Direction + { + // Notice that the enum elements values matter. + Dir_Down = -1, + Dir_Up = +1 + }; + + // A range of character positions ("from" is inclusive, "to" -- exclusive). + struct CharRange + { + int from, + to; + }; + + // Event handlers for various events in our controls. + void OnTextSetFocus(wxFocusEvent& event) + { + HighlightCurrentField(); + + event.Skip(); + } + + // Keyboard interface here is modelled over MSW native control and may need + // adjustments for other platforms. + void OnTextKeyDown(wxKeyEvent& event) + { + const int key = event.GetKeyCode(); + + switch ( key ) + { + case WXK_DOWN: + ChangeCurrentFieldBy1(Dir_Down); + break; + + case WXK_UP: + ChangeCurrentFieldBy1(Dir_Up); + break; + + case WXK_LEFT: + CycleCurrentField(Dir_Down); + break; + + case WXK_RIGHT: + CycleCurrentField(Dir_Up); + break; + + case WXK_HOME: + ResetCurrentField(Dir_Down); + break; + + case WXK_END: + ResetCurrentField(Dir_Up); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + // The digits work in all keys except AM/PM. + if ( m_currentField != Field_AMPM ) + { + AppendDigitToCurrentField(key - '0'); + } + break; + + case 'A': + case 'P': + // These keys only work to toggle AM/PM field. + if ( m_currentField == Field_AMPM ) + { + unsigned hour = m_time.GetHour(); + if ( key == 'A' ) + { + if ( hour >= 12 ) + hour -= 12; + } + else // PM + { + if ( hour < 12 ) + hour += 12; + } + + if ( hour != m_time.GetHour() ) + { + m_time.SetHour(hour); + UpdateText(); + } + } + break; + + // Do not skip the other events, just consume them to prevent the + // user from editing the text directly. + } + } + + void OnTextClick(wxMouseEvent& event) + { + Field field wxDUMMY_INITIALIZE(Field_Max); + long pos; + switch ( m_text->HitTest(event.GetPosition(), &pos) ) + { + case wxTE_HT_UNKNOWN: + // Don't do anything, it's better than doing something wrong. + return; + + case wxTE_HT_BEFORE: + // Select the first field. + field = Field_Hour; + break; + + case wxTE_HT_ON_TEXT: + // Find the field containing this position. + for ( field = Field_Hour; field <= GetLastField(); ) + { + const CharRange range = GetFieldRange(field); + + // Normally the "to" end is exclusive but we want to give + // focus to some field when the user clicks between them so + // count it as part of the preceding field here. + if ( range.from <= pos && pos <= range.to ) + break; + + field = static_cast(field + 1); + } + break; + + case wxTE_HT_BELOW: + // This shouldn't happen for single line control. + wxFAIL_MSG( "Unreachable" ); + // fall through + + case wxTE_HT_BEYOND: + // Select the last field. + field = GetLastField(); + break; + } + + ChangeCurrentField(field); + } + + void OnArrowUp(wxSpinEvent& WXUNUSED(event)) + { + ChangeCurrentFieldBy1(Dir_Up); + } + + void OnArrowDown(wxSpinEvent& WXUNUSED(event)) + { + ChangeCurrentFieldBy1(Dir_Down); + } + + + // Get the range of the given field in character positions ("from" is + // inclusive, "to" exclusive). + static CharRange GetFieldRange(Field field) + { + // Currently we can just hard code the ranges as they are the same for + // both supported formats, if we want to support arbitrary formats in + // the future, we'd need to determine them dynamically by examining the + // format here. + static const CharRange ranges[] = + { + { 0, 2 }, + { 3, 5 }, + { 6, 8 }, + { 9, 11}, + }; + + wxCOMPILE_TIME_ASSERT( WXSIZEOF(ranges) == Field_Max, + FieldRangesMismatch ); + + return ranges[field]; + } + + // Get the last field used depending on m_useAMPM. + Field GetLastField() const + { + return m_useAMPM ? Field_AMPM : Field_Sec; + } + + // Change the current field. For convenience, accept int field here as this + // allows us to use arithmetic operations in the caller. + void ChangeCurrentField(int field) + { + if ( field == m_currentField ) + return; + + wxCHECK_RET( field <= GetLastField(), "Invalid field" ); + + m_currentField = static_cast(field); + m_isFirstDigit = true; + + HighlightCurrentField(); + } + + // Go to the next (Dir_Up) or previous (Dir_Down) field, wrapping if + // necessary. + void CycleCurrentField(Direction dir) + { + const unsigned numFields = GetLastField() + 1; + + ChangeCurrentField((m_currentField + numFields + dir) % numFields); + } + + // Select the currently actively field. + void HighlightCurrentField() + { + m_text->SetFocus(); + + const CharRange range = GetFieldRange(m_currentField); + + m_text->SetSelection(range.from, range.to); + } + + // Decrement or increment the value of the current field (wrapping if + // necessary). + void ChangeCurrentFieldBy1(Direction dir) + { + switch ( m_currentField ) + { + case Field_Hour: + m_time.SetHour((m_time.GetHour() + 24 + dir) % 24); + break; + + case Field_Min: + m_time.SetMinute((m_time.GetMinute() + 60 + dir) % 60); + break; + + case Field_Sec: + m_time.SetSecond((m_time.GetSecond() + 60 + dir) % 60); + break; + + case Field_AMPM: + m_time.SetHour((m_time.GetHour() + 12) % 24); + break; + + case Field_Max: + wxFAIL_MSG( "Invalid field" ); + } + + UpdateText(); + } + + // Set the current field to its minimal or maximal value. + void ResetCurrentField(Direction dir) + { + switch ( m_currentField ) + { + case Field_Hour: + case Field_AMPM: + // In 12-hour mode setting the hour to the minimal value + // also changes the suffix to AM and, correspondingly, + // setting it to the maximal one changes the suffix to PM. + // And, for consistency with the native MSW behaviour, we + // also do the same thing when changing AM/PM field itself, + // so change hours in any case. + m_time.SetHour(dir == Dir_Down ? 0 : 23); + break; + + case Field_Min: + m_time.SetMinute(dir == Dir_Down ? 0 : 59); + break; + + case Field_Sec: + m_time.SetSecond(dir == Dir_Down ? 0 : 59); + break; + + case Field_Max: + wxFAIL_MSG( "Invalid field" ); + } + + UpdateText(); + } + + // Append the given digit (from 0 to 9) to the current value of the current + // field. + void AppendDigitToCurrentField(int n) + { + bool moveToNextField = false; + + if ( !m_isFirstDigit ) + { + // The first digit simply replaces the existing field contents, + // but the second one should be combined with the previous one, + // otherwise entering 2-digit numbers would be impossible. + int currentValue wxDUMMY_INITIALIZE(0), + maxValue wxDUMMY_INITIALIZE(0); + + switch ( m_currentField ) + { + case Field_Hour: + currentValue = m_time.GetHour(); + maxValue = 23; + break; + + case Field_Min: + currentValue = m_time.GetMinute(); + maxValue = 59; + break; + + case Field_Sec: + currentValue = m_time.GetSecond(); + maxValue = 59; + break; + + case Field_AMPM: + case Field_Max: + wxFAIL_MSG( "Invalid field" ); + } + + // Check if the new value is acceptable. If not, we just handle + // this digit as if it were the first one. + int newValue = currentValue*10 + n; + if ( newValue < maxValue ) + { + n = newValue; + + // If we're not on the seconds field, advance to the next one. + // This makes it more convenient to enter times as you can just + // press all digits one after one without touching the cursor + // arrow keys at all. + // + // Notice that MSW native control doesn't do this but it seems + // so useful that we intentionally diverge from it here. + moveToNextField = true; + + // We entered both digits so the next one will be "first" again. + m_isFirstDigit = true; + } + } + else // First digit entered. + { + // The next one won't be first any more. + m_isFirstDigit = false; + } + + switch ( m_currentField ) + { + case Field_Hour: + m_time.SetHour(n); + break; + + case Field_Min: + m_time.SetMinute(n); + break; + + case Field_Sec: + m_time.SetSecond(n); + break; + + case Field_AMPM: + case Field_Max: + wxFAIL_MSG( "Invalid field" ); + } + + if ( moveToNextField && m_currentField < Field_Sec ) + CycleCurrentField(Dir_Up); + + UpdateText(); + } + + // Update the text value to correspond to the current time. By default also + // generate an event but this can be avoided by calling the "WithoutEvent" + // variant. + void UpdateText() + { + UpdateTextWithoutEvent(); + + wxWindow* const ctrl = m_text->GetParent(); + + wxDateEvent event(ctrl, m_time, wxEVT_TIME_CHANGED); + ctrl->HandleWindowEvent(event); + } + + void UpdateTextWithoutEvent() + { + m_text->SetValue(m_time.Format(m_useAMPM ? "%I:%M:%S %p" : "%H:%M:%S")); + + HighlightCurrentField(); + } + + + // The current field of the text control: this is the one affected by + // pressing arrow keys or spin button. + Field m_currentField; + + // Flag indicating whether we use AM/PM indicator or not. + bool m_useAMPM; + + // Flag indicating whether the next digit pressed by user will be the first + // digit of the current field or the second one. This is necessary because + // the first digit replaces the current field contents while the second one + // is appended to it (if possible, e.g. pressing '7' in a field already + // containing '8' will still replace it as "78" would be invalid). + bool m_isFirstDigit; + + wxDECLARE_NO_COPY_CLASS(wxTimePickerGenericImpl); +}; + +// ============================================================================ +// wxTimePickerCtrlGeneric implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxTimePickerCtrlGeneric creation +// ---------------------------------------------------------------------------- + +void wxTimePickerCtrlGeneric::Init() +{ + m_impl = NULL; +} + +bool +wxTimePickerCtrlGeneric::Create(wxWindow *parent, + wxWindowID id, + const wxDateTime& date, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name) +{ + // The text control we use already has a border, so we don't need one + // ourselves. + style &= ~wxBORDER_MASK; + style |= wxBORDER_NONE; + + if ( !Base::Create(parent, id, pos, size, style, validator, name) ) + return false; + + m_impl = new wxTimePickerGenericImpl(this); + m_impl->SetValue(date); + + InvalidateBestSize(); + SetInitialSize(size); + + return true; +} + +wxTimePickerCtrlGeneric::~wxTimePickerCtrlGeneric() +{ + delete m_impl; +} + +wxWindowList wxTimePickerCtrlGeneric::GetCompositeWindowParts() const +{ + wxWindowList parts; + if ( m_impl ) + { + parts.push_back(m_impl->m_text); + parts.push_back(m_impl->m_btn); + } + return parts; +} + +// ---------------------------------------------------------------------------- +// wxTimePickerCtrlGeneric value +// ---------------------------------------------------------------------------- + +void wxTimePickerCtrlGeneric::SetValue(const wxDateTime& date) +{ + wxCHECK_RET( m_impl, "Must create first" ); + + m_impl->SetValue(date); +} + +wxDateTime wxTimePickerCtrlGeneric::GetValue() const +{ + wxCHECK_MSG( m_impl, wxDateTime(), "Must create first" ); + + return m_impl->m_time; +} + +// ---------------------------------------------------------------------------- +// wxTimePickerCtrlGeneric geometry +// ---------------------------------------------------------------------------- + +void wxTimePickerCtrlGeneric::DoMoveWindow(int x, int y, int width, int height) +{ + Base::DoMoveWindow(x, y, width, height); + + if ( !m_impl ) + return; + + const int widthBtn = m_impl->m_btn->GetSize().x; + const int widthText = width - widthBtn - HMARGIN_TEXT_SPIN; + + m_impl->m_text->SetSize(0, 0, widthText, height); + m_impl->m_btn->SetSize(widthText + HMARGIN_TEXT_SPIN, 0, widthBtn, height); +} + +wxSize wxTimePickerCtrlGeneric::DoGetBestSize() const +{ + if ( !m_impl ) + return Base::DoGetBestSize(); + + wxSize size = m_impl->m_text->GetBestSize(); + size.x += m_impl->m_btn->GetBestSize().x + HMARGIN_TEXT_SPIN; + + return size; +} + +#endif // !wxHAS_NATIVE_TIMEPICKERCTRL || wxUSE_TIMEPICKCTRL_GENERIC + +#endif // wxUSE_TIMEPICKCTRL diff --git a/Externals/wxWidgets3/src/generic/timer.cpp b/Externals/wxWidgets3/src/generic/timer.cpp index e7d67f9942..2b45a5d092 100644 --- a/Externals/wxWidgets3/src/generic/timer.cpp +++ b/Externals/wxWidgets3/src/generic/timer.cpp @@ -2,7 +2,7 @@ // Name: src/generic/timer.cpp // Purpose: wxTimer implementation // Author: Vaclav Slavik -// Id: $Id: timer.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: timer.cpp 70353 2012-01-15 14:46:41Z VZ $ // Copyright: (c) Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -34,58 +34,22 @@ // Time input function // ---------------------------------------------------------------------------- -#ifdef __WXMGL__ - // We take advantage of wxMGL's _EVT_getTicks because it is faster - // (especially under MS-DOS!) and more precise than wxGetLocalTimeMillis - // if we are unlucky and the latter combines information from two sources. - #include "wx/mgl/private.h" - extern "C" ulong _EVT_getTicks(); - #define GetMillisecondsTime _EVT_getTicks +#define GetMillisecondsTime wxGetLocalTimeMillis - typedef ulong wxTimerTick_t; +typedef wxLongLong wxTimerTick_t; - #define wxTimerTickFmtSpec wxT("lu") - #define wxTimerTickPrintfArg(tt) (tt) +#if wxUSE_LONGLONG_WX + #define wxTimerTickFmtSpec wxLongLongFmtSpec "d" + #define wxTimerTickPrintfArg(tt) (tt.GetValue()) +#else // using native wxLongLong + #define wxTimerTickFmtSpec wxT("s") + #define wxTimerTickPrintfArg(tt) (tt.ToString().c_str()) +#endif // wx/native long long - #ifdef __DOS__ - // Under DOS the MGL timer has a 24hr period, so consider the 12 hours - // before y to be 'less' and the 12 hours after 'greater' modulo - // 24 hours. - inline bool wxTickGreaterEqual(wxTimerTick_t x, wxTimerTick_t y) - { - // _EVT_getTicks wraps at 1573040 * 55 - const wxTimerTick_t modulus = 1573040 * 55; - return (2 * modulus + x - y) % modulus < modulus / 2; - } - #else - // If wxTimerTick_t is 32-bits then it'll wrap in around 50 days. So - // let the 25 days before y be 'less' and 25 days after be 'greater'. - inline bool wxTickGreaterEqual(wxTimerTick_t x, wxTimerTick_t y) - { - // This code assumes wxTimerTick_t is an unsigned type. - // Set half_modulus with top bit set and the rest zeros. - const wxTimerTick_t half_modulus = ~((~(wxTimerTick_t)0) >> 1); - return x - y < half_modulus; - } - #endif -#else // !__WXMGL__ - #define GetMillisecondsTime wxGetLocalTimeMillis - - typedef wxLongLong wxTimerTick_t; - - #if wxUSE_LONGLONG_WX - #define wxTimerTickFmtSpec wxLongLongFmtSpec "d" - #define wxTimerTickPrintfArg(tt) (tt.GetValue()) - #else // using native wxLongLong - #define wxTimerTickFmtSpec wxT("s") - #define wxTimerTickPrintfArg(tt) (tt.ToString().c_str()) - #endif // wx/native long long - - inline bool wxTickGreaterEqual(wxTimerTick_t x, wxTimerTick_t y) - { - return x >= y; - } -#endif // __WXMGL__/!__WXMGL__ +inline bool wxTickGreaterEqual(wxTimerTick_t x, wxTimerTick_t y) +{ + return x >= y; +} // ---------------------------------------------------------------------------- // helper structures and wxTimerScheduler diff --git a/Externals/wxWidgets3/src/generic/tipwin.cpp b/Externals/wxWidgets3/src/generic/tipwin.cpp index 42bd966eeb..6164e216c0 100644 --- a/Externals/wxWidgets3/src/generic/tipwin.cpp +++ b/Externals/wxWidgets3/src/generic/tipwin.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 10.09.00 -// RCS-ID: $Id: tipwin.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: tipwin.cpp 70843 2012-03-08 16:45:17Z PC $ // Copyright: (c) 2000 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -167,7 +167,7 @@ wxTipWindow::~wxTipWindow() { *m_windowPtr = NULL; } - #ifdef wxUSE_POPUPWIN + #if wxUSE_POPUPWIN #ifdef __WXGTK__ if ( m_view->HasCapture() ) m_view->ReleaseMouse(); diff --git a/Externals/wxWidgets3/src/generic/treectlg.cpp b/Externals/wxWidgets3/src/generic/treectlg.cpp index 72a6b5b8d0..b17ec147a5 100644 --- a/Externals/wxWidgets3/src/generic/treectlg.cpp +++ b/Externals/wxWidgets3/src/generic/treectlg.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Created: 01/02/97 // Modified: 22/10/98 - almost total rewrite, simpler interface (VZ) -// Id: $Id: treectlg.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: treectlg.cpp 70625 2012-02-19 14:49:37Z SN $ // Copyright: (c) 1998 Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -441,7 +441,7 @@ wxTreeTextCtrl::wxTreeTextCtrl(wxGenericTreeCtrl *owner, rect.y -= 2; rect.width += 8; rect.height += 4; -#elif defined(__WXMAC__) +#elif defined(wxOSX_USE_CARBON) && wxOSX_USE_CARBON int bestHeight = GetBestSize().y - 8; if ( rect.height > bestHeight ) { @@ -997,7 +997,7 @@ bool wxGenericTreeCtrl::Create(wxWindow *parent, #endif if ( !wxControl::Create( parent, id, pos, size, - style|wxHSCROLL|wxVSCROLL, + style|wxHSCROLL|wxVSCROLL|wxWANTS_CHARS, validator, name ) ) return false; @@ -2054,7 +2054,8 @@ wxGenericTreeCtrl::TagAllChildrenUntilLast(wxGenericTreeItem *crt_item, if (crt_item==last_item) return true; - if (crt_item->HasChildren()) + // We should leave the not shown children of collapsed items alone. + if (crt_item->HasChildren() && crt_item->IsExpanded()) { wxArrayGenericTreeItems& children = crt_item->GetChildren(); size_t count = children.GetCount(); @@ -2878,7 +2879,7 @@ wxGenericTreeCtrl::PaintLevel(wxGenericTreeItem *item, yOrigin = abs(yOrigin); GetClientSize(&width, &height); - // Move end points to the begining/end of the view? + // Move end points to the beginning/end of the view? if (y_mid < yOrigin) y_mid = yOrigin; if (oldY > yOrigin + height) diff --git a/Externals/wxWidgets3/src/generic/treelist.cpp b/Externals/wxWidgets3/src/generic/treelist.cpp new file mode 100644 index 0000000000..deedad6351 --- /dev/null +++ b/Externals/wxWidgets3/src/generic/treelist.cpp @@ -0,0 +1,1677 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/generic/treelist.cpp +// Purpose: Generic wxTreeListCtrl implementation. +// Author: Vadim Zeitlin +// Created: 2011-08-19 +// RCS-ID: $Id: treelist.cpp 69805 2011-11-23 23:58:54Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// Declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// Headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_TREELISTCTRL + +#ifndef WX_PRECOMP + #include "wx/dc.h" +#endif // WX_PRECOMP + +#include "wx/treelist.h" + +#include "wx/dataview.h" +#include "wx/renderer.h" +#include "wx/scopedarray.h" +#include "wx/scopedptr.h" + +// ---------------------------------------------------------------------------- +// Constants +// ---------------------------------------------------------------------------- + +const char wxTreeListCtrlNameStr[] = "wxTreeListCtrl"; + +const wxTreeListItem wxTLI_FIRST(reinterpret_cast(-1)); +const wxTreeListItem wxTLI_LAST(reinterpret_cast(-2)); + +// ---------------------------------------------------------------------------- +// wxTreeListModelNode: a node in the internal tree representation. +// ---------------------------------------------------------------------------- + +class wxTreeListModelNode +{ +public: + wxTreeListModelNode(wxTreeListModelNode* parent, + const wxString& text = wxString(), + int imageClosed = wxWithImages::NO_IMAGE, + int imageOpened = wxWithImages::NO_IMAGE, + wxClientData* data = NULL) + : m_text(text), + m_parent(parent) + { + m_child = + m_next = NULL; + + m_imageClosed = imageClosed; + m_imageOpened = imageOpened; + + m_checkedState = wxCHK_UNCHECKED; + + m_data = data; + + m_columnsTexts = NULL; + } + + // Destroying the node also (recursively) destroys its children. + ~wxTreeListModelNode() + { + for ( wxTreeListModelNode* node = m_child; node; ) + { + wxTreeListModelNode* child = node; + node = node->m_next; + delete child; + } + + delete m_data; + + delete [] m_columnsTexts; + } + + + // Public fields for the first column text and other simple attributes: + // there is no need to have accessors/mutators for those as there is no + // encapsulation anyhow, all of those are exposed in our public API. + wxString m_text; + + int m_imageClosed, + m_imageOpened; + + wxCheckBoxState m_checkedState; + + + // Accessors for the fields that are not directly exposed. + + // Client data is owned by us so delete the old value when setting the new + // one. + wxClientData* GetClientData() const { return m_data; } + void SetClientData(wxClientData* data) { delete m_data; m_data = data; } + + // Setting or getting the non-first column text. Getting is simple but you + // need to call HasColumnsTexts() first as the column data is only + // allocated on demand. And when setting the text we require to be given + // the total number of columns as we allocate the entire array at once, + // this is more efficient than using dynamically-expandable wxVector that + // we know won't be needed as the number of columns is usually fixed. But + // if it does change, our OnInsertColumn() must be called. + // + // Notice the presence of -1 everywhere in these methods: this is because + // the text for the first column is always stored in m_text and so we don't + // store it in m_columnsTexts. + + bool HasColumnsTexts() const { return m_columnsTexts != NULL; } + const wxString& GetColumnText(unsigned col) const + { + return m_columnsTexts[col - 1]; + } + + void SetColumnText(const wxString& text, unsigned col, unsigned numColumns) + { + if ( !m_columnsTexts ) + m_columnsTexts = new wxString[numColumns - 1]; + + m_columnsTexts[col - 1] = text; + } + + void OnInsertColumn(unsigned col, unsigned numColumns) + { + wxASSERT_MSG( col, "Shouldn't be called for the first column" ); + + // Nothing to do if we don't have any text. + if ( !m_columnsTexts ) + return; + + wxScopedArray oldTexts(m_columnsTexts); + m_columnsTexts = new wxString[numColumns - 1]; + + // In the loop below n is the index in the new column texts array and m + // is the index in the old one. + for ( unsigned n = 1, m = 1; n < numColumns - 1; n++, m++ ) + { + if ( n == col ) + { + // Leave the new array text initially empty and just adjust the + // index (to compensate for "m++" done by the loop anyhow). + m--; + } + else // Not the newly inserted column. + { + // Copy the old text value. + m_columnsTexts[n - 1] = oldTexts[m - 1]; + } + } + } + + void OnDeleteColumn(unsigned col, unsigned numColumns) + { + wxASSERT_MSG( col, "Shouldn't be called for the first column" ); + + if ( !m_columnsTexts ) + return; + + wxScopedArray oldTexts(m_columnsTexts); + m_columnsTexts = new wxString[numColumns - 2]; + for ( unsigned n = 1, m = 1; n < numColumns - 1; n++, m++ ) + { + if ( n == col ) + { + n--; + } + else // Not the deleted column. + { + m_columnsTexts[n - 1] = oldTexts[m - 1]; + } + } + } + + void OnClearColumns() + { + if ( m_columnsTexts ) + { + delete [] m_columnsTexts; + m_columnsTexts = NULL; + } + } + + + // Functions for modifying the tree. + + // Insert the given item as the first child of this one. The parent pointer + // must have been already set correctly at creation and we take ownership + // of the pointer and will delete it later. + void InsertChild(wxTreeListModelNode* child) + { + wxASSERT( child->m_parent == this ); + + // Our previous first child becomes the next sibling of the new child. + child->m_next = m_child; + m_child = child; + } + + // Insert the given item as our next sibling. As above, the item must have + // the correct parent pointer and we take ownership of it. + void InsertNext(wxTreeListModelNode* next) + { + wxASSERT( next->m_parent == m_parent ); + + next->m_next = m_next; + m_next = next; + } + + // Remove the first child of this item from the tree and delete it. + void DeleteChild() + { + wxTreeListModelNode* const oldChild = m_child; + m_child = m_child->m_next; + delete oldChild; + } + + // Remove the next sibling of this item from the tree and deletes it. + void DeleteNext() + { + wxTreeListModelNode* const oldNext = m_next; + m_next = m_next->m_next; + delete oldNext; + } + + + // Functions for tree traversal. All of them can return NULL. + + // Only returns NULL when called on the root item. + wxTreeListModelNode* GetParent() const { return m_parent; } + + // Returns the first child of this item. + wxTreeListModelNode* GetChild() const { return m_child; } + + // Returns the next sibling of this item. + wxTreeListModelNode* GetNext() const { return m_next; } + + // Unlike the previous two functions, this one is not a simple accessor + // (hence it's not called "GetSomething") but computes the next node after + // this one in tree order. + wxTreeListModelNode* NextInTree() const + { + if ( m_child ) + return m_child; + + if ( m_next ) + return m_next; + + // Recurse upwards until we find the next sibling. + for ( wxTreeListModelNode* node = m_parent; node; node = node->m_parent ) + { + if ( node->m_next ) + return node->m_next; + } + + return NULL; + } + + +private: + // The (never changing after creation) parent of this node and the possibly + // NULL pointers to its first child and next sibling. + wxTreeListModelNode* const m_parent; + wxTreeListModelNode* m_child; + wxTreeListModelNode* m_next; + + // Client data pointer owned by the control. May be NULL. + wxClientData* m_data; + + // Array of column values for all the columns except the first one. May be + // NULL if no values had been set for them. + wxString* m_columnsTexts; +}; + +// ---------------------------------------------------------------------------- +// wxTreeListModel: wxDataViewModel implementation used by wxTreeListCtrl. +// ---------------------------------------------------------------------------- + +class wxTreeListModel : public wxDataViewModel +{ +public: + typedef wxTreeListModelNode Node; + + // Unlike a general wxDataViewModel, this model can only be used with a + // single control at once. The main reason for this is that we need to + // support different icons for opened and closed items and the item state + // is associated with the control, not the model, so our GetValue() is also + // bound to it (otherwise, what would it return for an item expanded in one + // associated control and collapsed in another one?). + wxTreeListModel(wxTreeListCtrl* treelist); + virtual ~wxTreeListModel(); + + + // Helpers for converting between wxDataViewItem and wxTreeListItem. These + // methods simply cast the pointer to/from wxDataViewItem except for the + // root node that we handle specially unless explicitly disabled. + // + // The advantage of using them is that they're greppable and stand out + // better, hopefully making the code more clear. + Node* FromNonRootDVI(wxDataViewItem dvi) const + { + return static_cast(dvi.GetID()); + } + + Node* FromDVI(wxDataViewItem dvi) const + { + if ( !dvi.IsOk() ) + return m_root; + + return FromNonRootDVI(dvi); + } + + wxDataViewItem ToNonRootDVI(Node* node) const + { + return wxDataViewItem(node); + } + + wxDataViewItem ToDVI(Node* node) const + { + // Our root item must be represented as NULL at wxDVC level to map to + // its own invisible root. + if ( !node->GetParent() ) + return wxDataViewItem(); + + return ToNonRootDVI(node); + } + + + // Methods called by wxTreeListCtrl. + void InsertColumn(unsigned col); + void DeleteColumn(unsigned col); + void ClearColumns(); + + Node* InsertItem(Node* parent, + Node* previous, + const wxString& text, + int imageClosed, + int imageOpened, + wxClientData* data); + void DeleteItem(Node* item); + void DeleteAllItems(); + + Node* GetRootItem() const { return m_root; } + + const wxString& GetItemText(Node* item, unsigned col) const; + void SetItemText(Node* item, unsigned col, const wxString& text); + void SetItemImage(Node* item, int closed, int opened); + wxClientData* GetItemData(Node* item) const; + void SetItemData(Node* item, wxClientData* data); + + void CheckItem(Node* item, wxCheckBoxState checkedState); + void ToggleItem(wxDataViewItem item); + + + // Implement the base class pure virtual methods. + virtual unsigned GetColumnCount() const; + virtual wxString GetColumnType(unsigned col) const; + virtual void GetValue(wxVariant& variant, + const wxDataViewItem& item, + unsigned col) const; + virtual bool SetValue(const wxVariant& variant, + const wxDataViewItem& item, + unsigned col); + virtual wxDataViewItem GetParent(const wxDataViewItem& item) const; + virtual bool IsContainer(const wxDataViewItem& item) const; + virtual bool HasContainerColumns(const wxDataViewItem& item) const; + virtual unsigned GetChildren(const wxDataViewItem& item, + wxDataViewItemArray& children) const; + virtual bool IsListModel() const { return m_isFlat; } + virtual int Compare(const wxDataViewItem& item1, + const wxDataViewItem& item2, + unsigned col, + bool ascending) const; + +private: + // The control we're associated with. + wxTreeListCtrl* const m_treelist; + + // The unique invisible root element. + Node* const m_root; + + // Number of columns we maintain. + unsigned m_numColumns; + + // Set to false as soon as we have more than one level, i.e. as soon as any + // items with non-root item as parent are added (and currently never reset + // after this). + bool m_isFlat; +}; + +// ============================================================================ +// wxDataViewCheckIconText[Renderer]: special renderer for our first column. +// ============================================================================ + +// Currently this class is private but it could be extracted and made part of +// public API later as could be used directly with wxDataViewCtrl as well. +namespace +{ + +const char* CHECK_ICON_TEXT_TYPE = "wxDataViewCheckIconText"; + +// The value used by wxDataViewCheckIconTextRenderer +class wxDataViewCheckIconText : public wxDataViewIconText +{ +public: + wxDataViewCheckIconText(const wxString& text = wxString(), + const wxIcon& icon = wxNullIcon, + wxCheckBoxState checkedState = wxCHK_UNDETERMINED) + : wxDataViewIconText(text, icon), + m_checkedState(checkedState) + { + } + + wxDataViewCheckIconText(const wxDataViewCheckIconText& other) + : wxDataViewIconText(other), + m_checkedState(other.m_checkedState) + { + } + + bool IsSameAs(const wxDataViewCheckIconText& other) const + { + return wxDataViewIconText::IsSameAs(other) && + m_checkedState == other.m_checkedState; + } + + // There is no encapsulation anyhow, so just expose this field directly. + wxCheckBoxState m_checkedState; + + +private: + wxDECLARE_DYNAMIC_CLASS(wxDataViewCheckIconText); +}; + +wxIMPLEMENT_DYNAMIC_CLASS(wxDataViewCheckIconText, wxDataViewIconText); + +DECLARE_VARIANT_OBJECT(wxDataViewCheckIconText) +IMPLEMENT_VARIANT_OBJECT(wxDataViewCheckIconText) + + +class wxDataViewCheckIconTextRenderer : public wxDataViewCustomRenderer +{ +public: + wxDataViewCheckIconTextRenderer() + : wxDataViewCustomRenderer(CHECK_ICON_TEXT_TYPE, + wxDATAVIEW_CELL_ACTIVATABLE) + { + } + + virtual bool SetValue(const wxVariant& value) + { + m_value << value; + return true; + } + + virtual bool GetValue(wxVariant& WXUNUSED(value)) const + { + return false; + } + + wxSize GetSize() const + { + wxSize size = GetCheckSize(); + size.x += MARGIN_CHECK_ICON; + + if ( m_value.GetIcon().IsOk() ) + { + const wxSize sizeIcon = m_value.GetIcon().GetSize(); + if ( sizeIcon.y > size.y ) + size.y = sizeIcon.y; + + size.x += sizeIcon.x + MARGIN_ICON_TEXT; + } + + wxString text = m_value.GetText(); + if ( text.empty() ) + text = "Dummy"; + + const wxSize sizeText = GetTextExtent(text); + if ( sizeText.y > size.y ) + size.y = sizeText.y; + + size.x += sizeText.x; + + return size; + } + + virtual bool Render(wxRect cell, wxDC* dc, int state) + { + // Draw the checkbox first. + int renderFlags = 0; + switch ( m_value.m_checkedState ) + { + case wxCHK_UNCHECKED: + break; + + case wxCHK_CHECKED: + renderFlags |= wxCONTROL_CHECKED; + break; + + case wxCHK_UNDETERMINED: + renderFlags |= wxCONTROL_UNDETERMINED; + break; + } + + if ( state & wxDATAVIEW_CELL_PRELIT ) + renderFlags |= wxCONTROL_CURRENT; + + const wxSize sizeCheck = GetCheckSize(); + + wxRect rectCheck(cell.GetPosition(), sizeCheck); + rectCheck = rectCheck.CentreIn(cell, wxVERTICAL); + + wxRendererNative::Get().DrawCheckBox + ( + GetView(), *dc, rectCheck, renderFlags + ); + + // Then the icon, if any. + int xoffset = sizeCheck.x + MARGIN_CHECK_ICON; + + const wxIcon& icon = m_value.GetIcon(); + if ( icon.IsOk() ) + { + const wxSize sizeIcon = icon.GetSize(); + wxRect rectIcon(cell.GetPosition(), sizeIcon); + rectIcon.x += xoffset; + rectIcon = rectIcon.CentreIn(cell, wxVERTICAL); + + dc->DrawIcon(icon, rectIcon.GetPosition()); + + xoffset += sizeIcon.x + MARGIN_ICON_TEXT; + } + + // Finally the text. + RenderText(m_value.GetText(), xoffset, cell, dc, state); + + return true; + } + + // Event handlers toggling the items checkbox if it was clicked. + virtual bool ActivateCell(const wxRect& WXUNUSED(cell), + wxDataViewModel *model, + const wxDataViewItem & item, + unsigned int WXUNUSED(col), + const wxMouseEvent *mouseEvent) + { + if ( mouseEvent ) + { + if ( !wxRect(GetCheckSize()).Contains(mouseEvent->GetPosition()) ) + return false; + } + + static_cast(model)->ToggleItem(item); + return true; + } + +protected: + wxSize GetCheckSize() const + { + return wxRendererNative::Get().GetCheckBoxSize(GetView()); + } + +private: + // Just some arbitrary constants defining margins, in pixels. + enum + { + MARGIN_CHECK_ICON = 3, + MARGIN_ICON_TEXT = 4 + }; + + wxDataViewCheckIconText m_value; +}; + +} // anonymous namespace + +// ============================================================================ +// wxTreeListModel implementation +// ============================================================================ + +wxTreeListModel::wxTreeListModel(wxTreeListCtrl* treelist) + : m_treelist(treelist), + m_root(new Node(NULL)) +{ + m_numColumns = 0; + m_isFlat = true; +} + +wxTreeListModel::~wxTreeListModel() +{ + delete m_root; +} + +void wxTreeListModel::InsertColumn(unsigned col) +{ + m_numColumns++; + + // There is no need to update anything when inserting the first column. + if ( m_numColumns == 1 ) + return; + + // Update all the items as they may have texts for the old columns. + for ( Node* node = m_root->GetChild(); node; node = node->NextInTree() ) + { + node->OnInsertColumn(col, m_numColumns); + } +} + +void wxTreeListModel::DeleteColumn(unsigned col) +{ + wxCHECK_RET( col < m_numColumns, "Invalid column index" ); + + // Update all the items to remove the text for the non first columns. + if ( col > 0 ) + { + for ( Node* node = m_root->GetChild(); node; node = node->NextInTree() ) + { + node->OnDeleteColumn(col, m_numColumns); + } + } + + m_numColumns--; +} + +void wxTreeListModel::ClearColumns() +{ + m_numColumns = 0; + + for ( Node* node = m_root->GetChild(); node; node = node->NextInTree() ) + { + node->OnClearColumns(); + } +} + +wxTreeListModelNode* +wxTreeListModel::InsertItem(Node* parent, + Node* previous, + const wxString& text, + int imageClosed, + int imageOpened, + wxClientData* data) +{ + wxCHECK_MSG( parent, NULL, + "Must have a valid parent (maybe GetRootItem()?)" ); + + wxCHECK_MSG( previous, NULL, + "Must have a valid previous item (maybe wxTLI_FIRST/LAST?)" ); + + if ( m_isFlat && parent != m_root ) + { + // Not flat any more, this is a second level child. + m_isFlat = false; + } + + wxScopedPtr + newItem(new Node(parent, text, imageClosed, imageOpened, data)); + + // FIXME-VC6: This compiler refuses to compare "Node* previous" with + // wxTLI_XXX without some help. + const wxTreeListItem previousItem(previous); + + // If we have no children at all, then inserting as last child is the same + // as inserting as the first one so check for it here too. + if ( previousItem == wxTLI_FIRST || + (previousItem == wxTLI_LAST && !parent->GetChild()) ) + { + parent->InsertChild(newItem.get()); + } + else // Not the first item, find the previous one. + { + if ( previousItem == wxTLI_LAST ) + { + previous = parent->GetChild(); + + // Find the last child. + for ( ;; ) + { + Node* const next = previous->GetNext(); + if ( !next ) + break; + + previous = next; + } + } + else // We already have the previous item. + { + // Just check it's under the correct parent. + wxCHECK_MSG( previous->GetParent() == parent, NULL, + "Previous item is not under the right parent" ); + } + + previous->InsertNext(newItem.get()); + } + + ItemAdded(ToDVI(parent), ToDVI(newItem.get())); + + // The item was successfully inserted in the tree and so will be deleted by + // it, we can detach it now. + return newItem.release(); +} + +void wxTreeListModel::DeleteItem(Node* item) +{ + wxCHECK_RET( item, "Invalid item" ); + + wxCHECK_RET( item != m_root, "Can't delete the root item" ); + + Node* const parent = item->GetParent(); + + ItemDeleted(ToDVI(parent), ToDVI(item)); + + Node* previous = parent->GetChild(); + if ( previous == item ) + { + parent->DeleteChild(); + } + else // Not the first child of its parent. + { + // Find the sibling just before it. + for ( ;; ) + { + Node* const next = previous->GetNext(); + if ( next == item ) + break; + + wxCHECK_RET( next, "Item not a child of its parent?" ); + + previous = next; + } + + previous->DeleteNext(); + } +} + +void wxTreeListModel::DeleteAllItems() +{ + while ( m_root->GetChild() ) + { + m_root->DeleteChild(); + } + + Cleared(); +} + +const wxString& wxTreeListModel::GetItemText(Node* item, unsigned col) const +{ + // Returning root item text here is bogus, it just happens to be an always + // empty string we can return reference to. + wxCHECK_MSG( item, m_root->m_text, "Invalid item" ); + + // Notice that asking for the text of a column of an item that doesn't have + // any column texts is not an error so we simply return an empty string in + // this case. + return col == 0 ? item->m_text + : item->HasColumnsTexts() ? item->GetColumnText(col) + : m_root->m_text; +} + +void wxTreeListModel::SetItemText(Node* item, unsigned col, const wxString& text) +{ + wxCHECK_RET( item, "Invalid item" ); + + if ( col == 0 ) + item->m_text = text; + else + item->SetColumnText(text, col, m_numColumns); + + ValueChanged(ToDVI(item), col); +} + +void wxTreeListModel::SetItemImage(Node* item, int closed, int opened) +{ + wxCHECK_RET( item, "Invalid item" ); + + item->m_imageClosed = closed; + item->m_imageOpened = opened; + + ValueChanged(ToDVI(item), 0); +} + +wxClientData* wxTreeListModel::GetItemData(Node* item) const +{ + wxCHECK_MSG( item, NULL, "Invalid item" ); + + return item->GetClientData(); +} + +void wxTreeListModel::SetItemData(Node* item, wxClientData* data) +{ + wxCHECK_RET( item, "Invalid item" ); + + item->SetClientData(data); +} + +void wxTreeListModel::CheckItem(Node* item, wxCheckBoxState checkedState) +{ + wxCHECK_RET( item, "Invalid item" ); + + item->m_checkedState = checkedState; + + ItemChanged(ToDVI(item)); +} + +void wxTreeListModel::ToggleItem(wxDataViewItem dvi) +{ + Node* const item = FromDVI(dvi); + + wxCHECK_RET( item, "Invalid item" ); + + const wxCheckBoxState stateOld = item->m_checkedState; + + // If the 3rd state is user-settable then the cycle is + // unchecked->checked->undetermined. + switch ( stateOld ) + { + case wxCHK_CHECKED: + item->m_checkedState = m_treelist->HasFlag(wxTL_USER_3STATE) + ? wxCHK_UNDETERMINED + : wxCHK_UNCHECKED; + break; + + case wxCHK_UNDETERMINED: + // Whether 3rd state is user-settable or not, the next state is + // unchecked. + item->m_checkedState = wxCHK_UNCHECKED; + break; + + case wxCHK_UNCHECKED: + item->m_checkedState = wxCHK_CHECKED; + break; + } + + ItemChanged(ToDVI(item)); + + m_treelist->OnItemToggled(item, stateOld); +} + +unsigned wxTreeListModel::GetColumnCount() const +{ + return m_numColumns; +} + +wxString wxTreeListModel::GetColumnType(unsigned col) const +{ + if ( col == 0 ) + { + return m_treelist->HasFlag(wxTL_CHECKBOX) + ? wxS("wxDataViewCheckIconText") + : wxS("wxDataViewIconText"); + } + else // All the other columns contain just text. + { + return wxS("string"); + } +} + +void +wxTreeListModel::GetValue(wxVariant& variant, + const wxDataViewItem& item, + unsigned col) const +{ + Node* const node = FromDVI(item); + + if ( col == 0 ) + { + // Determine the correct image to use depending on the item state. + int image = wxWithImages::NO_IMAGE; + if ( m_treelist->IsExpanded(node) ) + image = node->m_imageOpened; + + if ( image == wxWithImages::NO_IMAGE ) + image = node->m_imageClosed; + + wxIcon icon = m_treelist->GetImage(image); + + if ( m_treelist->HasFlag(wxTL_CHECKBOX) ) + variant << wxDataViewCheckIconText(node->m_text, icon, + node->m_checkedState); + else + variant << wxDataViewIconText(node->m_text, icon); + } + else + { + // Notice that we must still assign wxString to wxVariant to ensure + // that it at least has the correct type. + wxString text; + if ( node->HasColumnsTexts() ) + text = node->GetColumnText(col); + + variant = text; + } +} + +bool +wxTreeListModel::SetValue(const wxVariant& WXUNUSED(variant), + const wxDataViewItem& WXUNUSED(item), + unsigned WXUNUSED(col)) +{ + // We are not editable currently. + return false; +} + +wxDataViewItem wxTreeListModel::GetParent(const wxDataViewItem& item) const +{ + Node* const node = FromDVI(item); + + return ToDVI(node->GetParent()); +} + +bool wxTreeListModel::IsContainer(const wxDataViewItem& item) const +{ + // FIXME: In the generic (and native OS X) versions we implement this + // method normally, i.e. only items with children are containers. + // But for the native GTK version we must pretend that all items are + // containers because otherwise adding children to them later would + // fail because wxGTK code calls IsContainer() too early (when + // adding the item itself) and we can't know whether we're container + // or not by then. Luckily, always returning true doesn't have any + // serious drawbacks for us. +#ifdef __WXGTK__ + wxUnusedVar(item); + + return true; +#else + Node* const node = FromDVI(item); + + return node->GetChild() != NULL; +#endif +} + +bool +wxTreeListModel::HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const +{ + return true; +} + +unsigned +wxTreeListModel::GetChildren(const wxDataViewItem& item, + wxDataViewItemArray& children) const +{ + Node* const node = FromDVI(item); + + unsigned numChildren = 0; + for ( Node* child = node->GetChild(); child; child = child->GetNext() ) + { + children.push_back(ToDVI(child)); + numChildren++; + } + + return numChildren; +} + +int +wxTreeListModel::Compare(const wxDataViewItem& item1, + const wxDataViewItem& item2, + unsigned col, + bool ascending) const +{ + // Compare using default alphabetical order if no custom comparator. + wxTreeListItemComparator* const comp = m_treelist->m_comparator; + if ( !comp ) + return wxDataViewModel::Compare(item1, item2, col, ascending); + + // Forward comparison to the comparator: + int result = comp->Compare(m_treelist, col, FromDVI(item1), FromDVI(item2)); + + // And adjust by the sort order if necessary. + if ( !ascending ) + result = -result; + + return result; +} + +// ============================================================================ +// wxTreeListCtrl implementation +// ============================================================================ + +BEGIN_EVENT_TABLE(wxTreeListCtrl, wxWindow) + EVT_DATAVIEW_SELECTION_CHANGED(wxID_ANY, wxTreeListCtrl::OnSelectionChanged) + EVT_DATAVIEW_ITEM_EXPANDING(wxID_ANY, wxTreeListCtrl::OnItemExpanding) + EVT_DATAVIEW_ITEM_EXPANDED(wxID_ANY, wxTreeListCtrl::OnItemExpanded) + EVT_DATAVIEW_ITEM_ACTIVATED(wxID_ANY, wxTreeListCtrl::OnItemActivated) + EVT_DATAVIEW_ITEM_CONTEXT_MENU(wxID_ANY, wxTreeListCtrl::OnItemContextMenu) + EVT_DATAVIEW_COLUMN_SORTED(wxID_ANY, wxTreeListCtrl::OnColumnSorted) + + EVT_SIZE(wxTreeListCtrl::OnSize) +END_EVENT_TABLE() + +// ---------------------------------------------------------------------------- +// Creation +// ---------------------------------------------------------------------------- + +void wxTreeListCtrl::Init() +{ + m_view = NULL; + m_model = NULL; + m_comparator = NULL; +} + +bool wxTreeListCtrl::Create(wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) +{ + if ( style & wxTL_USER_3STATE ) + style |= wxTL_3STATE; + + if ( style & wxTL_3STATE ) + style |= wxTL_CHECKBOX; + + // Create the window itself and wxDataViewCtrl used by it. + if ( !wxWindow::Create(parent, id, + pos, size, + style, name) ) + { + return false; + } + + m_view = new wxDataViewCtrl; + if ( !m_view->Create(this, wxID_ANY, + wxPoint(0, 0), GetClientSize(), + HasFlag(wxTL_MULTIPLE) ? wxDV_MULTIPLE + : wxDV_SINGLE) ) + { + delete m_view; + m_view = NULL; + + return false; + } + + + // Set up the model for wxDataViewCtrl. + m_model = new wxTreeListModel(this); + m_view->AssociateModel(m_model); + + return true; +} + +wxTreeListCtrl::~wxTreeListCtrl() +{ + if ( m_model ) + m_model->DecRef(); +} + +wxWindowList wxTreeListCtrl::GetCompositeWindowParts() const +{ + wxWindowList parts; + parts.push_back(m_view); + return parts; +} + +// ---------------------------------------------------------------------------- +// Columns +// ---------------------------------------------------------------------------- + +int +wxTreeListCtrl::DoInsertColumn(const wxString& title, + int pos, + int width, + wxAlignment align, + int flags) +{ + wxCHECK_MSG( m_view, wxNOT_FOUND, "Must Create() first" ); + + const unsigned oldNumColumns = m_view->GetColumnCount(); + + if ( pos == wxNOT_FOUND ) + pos = oldNumColumns; + + wxDataViewRenderer* renderer; + if ( pos == 0 ) + { + // Inserting the first column which is special as it uses a different + // renderer. + + // Also, currently it can be done only once. + wxCHECK_MSG( !oldNumColumns, wxNOT_FOUND, + "Inserting column at position 0 currently not supported" ); + + if ( HasFlag(wxTL_CHECKBOX) ) + { + // Use our custom renderer to show the checkbox. + renderer = new wxDataViewCheckIconTextRenderer; + } + else // We still need a special renderer to show the icons. + { + renderer = new wxDataViewIconTextRenderer; + } + } + else // Not the first column. + { + // All the other ones use a simple text renderer. + renderer = new wxDataViewTextRenderer; + } + + wxDataViewColumn* + column = new wxDataViewColumn(title, renderer, pos, width, align, flags); + + m_model->InsertColumn(pos); + + m_view->InsertColumn(pos, column); + + return pos; +} + +unsigned wxTreeListCtrl::GetColumnCount() const +{ + return m_view ? m_view->GetColumnCount() : 0u; +} + +bool wxTreeListCtrl::DeleteColumn(unsigned col) +{ + wxCHECK_MSG( col < GetColumnCount(), false, "Invalid column index" ); + + if ( !m_view->DeleteColumn(m_view->GetColumn(col)) ) + return false; + + m_model->DeleteColumn(col); + + return true; +} + +void wxTreeListCtrl::ClearColumns() +{ + // Don't assert here, clearing columns of the control before it's created + // can be considered valid (just useless). + if ( !m_model ) + return; + + m_view->ClearColumns(); + + m_model->ClearColumns(); +} + +void wxTreeListCtrl::SetColumnWidth(unsigned col, int width) +{ + wxCHECK_RET( col < GetColumnCount(), "Invalid column index" ); + + wxDataViewColumn* const column = m_view->GetColumn(col); + wxCHECK_RET( column, "No such column?" ); + + column->SetWidth(width); +} + +int wxTreeListCtrl::GetColumnWidth(unsigned col) const +{ + wxCHECK_MSG( col < GetColumnCount(), -1, "Invalid column index" ); + + wxDataViewColumn* column = m_view->GetColumn(col); + wxCHECK_MSG( column, -1, "No such column?" ); + + return column->GetWidth(); +} + +int wxTreeListCtrl::WidthFor(const wxString& text) const +{ + return GetTextExtent(text).x; +} + +// ---------------------------------------------------------------------------- +// Items +// ---------------------------------------------------------------------------- + +wxTreeListItem +wxTreeListCtrl::DoInsertItem(wxTreeListItem parent, + wxTreeListItem previous, + const wxString& text, + int imageClosed, + int imageOpened, + wxClientData* data) +{ + wxCHECK_MSG( m_model, wxTreeListItem(), "Must create first" ); + + return wxTreeListItem(m_model->InsertItem(parent, previous, text, + imageClosed, imageOpened, data)); +} + +void wxTreeListCtrl::DeleteItem(wxTreeListItem item) +{ + wxCHECK_RET( m_model, "Must create first" ); + + m_model->DeleteItem(item); +} + +void wxTreeListCtrl::DeleteAllItems() +{ + if ( m_model ) + m_model->DeleteAllItems(); +} + +// ---------------------------------------------------------------------------- +// Tree navigation +// ---------------------------------------------------------------------------- + +// The simple accessors in this section are implemented directly using +// wxTreeListModelNode methods, without passing by the model. This is just a +// shortcut and avoids us the trouble of defining more trivial methods in +// wxTreeListModel. + +wxTreeListItem wxTreeListCtrl::GetRootItem() const +{ + wxCHECK_MSG( m_model, wxTreeListItem(), "Must create first" ); + + return m_model->GetRootItem(); +} + +wxTreeListItem wxTreeListCtrl::GetItemParent(wxTreeListItem item) const +{ + wxCHECK_MSG( item.IsOk(), wxTreeListItem(), "Invalid item" ); + + return item->GetParent(); +} + +wxTreeListItem wxTreeListCtrl::GetFirstChild(wxTreeListItem item) const +{ + wxCHECK_MSG( item.IsOk(), wxTreeListItem(), "Invalid item" ); + + return item->GetChild(); +} + +wxTreeListItem +wxTreeListCtrl::GetNextSibling(wxTreeListItem item) const +{ + wxCHECK_MSG( item.IsOk(), wxTreeListItem(), "Invalid item" ); + + return item->GetNext(); +} + +wxTreeListItem wxTreeListCtrl::GetNextItem(wxTreeListItem item) const +{ + wxCHECK_MSG( item.IsOk(), wxTreeListItem(), "Invalid item" ); + + return item->NextInTree(); +} + +// ---------------------------------------------------------------------------- +// Item attributes +// ---------------------------------------------------------------------------- + +const wxString& +wxTreeListCtrl::GetItemText(wxTreeListItem item, unsigned col) const +{ + // We can't use wxCHECK_MSG() here because we don't have any empty string + // reference to return so we use a static variable that exists just for the + // purpose of this check -- and so we put it in its own scope so that it's + // never even created during normal program execution. + if ( !m_model || col >= m_model->GetColumnCount() ) + { + static wxString s_empty; + + if ( !m_model ) + { + wxFAIL_MSG( "Must create first" ); + } + else if ( col >= m_model->GetColumnCount() ) + { + wxFAIL_MSG( "Invalid column index" ); + } + + return s_empty; + } + + return m_model->GetItemText(item, col); +} + +void +wxTreeListCtrl::SetItemText(wxTreeListItem item, + unsigned col, + const wxString& text) +{ + wxCHECK_RET( m_model, "Must create first" ); + wxCHECK_RET( col < m_model->GetColumnCount(), "Invalid column index" ); + + m_model->SetItemText(item, col, text); +} + +void wxTreeListCtrl::SetItemImage(wxTreeListItem item, int closed, int opened) +{ + wxCHECK_RET( m_model, "Must create first" ); + + if ( closed != NO_IMAGE || opened != NO_IMAGE ) + { + wxImageList* const imageList = GetImageList(); + wxCHECK_RET( imageList, "Can't set images without image list" ); + + const int imageCount = imageList->GetImageCount(); + + wxCHECK_RET( closed < imageCount, "Invalid image index" ); + wxCHECK_RET( opened < imageCount, "Invalid opened image index" ); + } + + m_model->SetItemImage(item, closed, opened); +} + +wxClientData* wxTreeListCtrl::GetItemData(wxTreeListItem item) const +{ + wxCHECK_MSG( m_model, NULL, "Must create first" ); + + return m_model->GetItemData(item); +} + +void wxTreeListCtrl::SetItemData(wxTreeListItem item, wxClientData* data) +{ + wxCHECK_RET( m_model, "Must create first" ); + + m_model->SetItemData(item, data); +} + +// ---------------------------------------------------------------------------- +// Expanding and collapsing +// ---------------------------------------------------------------------------- + +void wxTreeListCtrl::Expand(wxTreeListItem item) +{ + wxCHECK_RET( m_view, "Must create first" ); + + m_view->Expand(m_model->ToDVI(item)); +} + +void wxTreeListCtrl::Collapse(wxTreeListItem item) +{ + wxCHECK_RET( m_view, "Must create first" ); + + m_view->Collapse(m_model->ToDVI(item)); +} + +bool wxTreeListCtrl::IsExpanded(wxTreeListItem item) const +{ + wxCHECK_MSG( m_view, false, "Must create first" ); + + return m_view->IsExpanded(m_model->ToDVI(item)); +} + +// ---------------------------------------------------------------------------- +// Selection +// ---------------------------------------------------------------------------- + +wxTreeListItem wxTreeListCtrl::GetSelection() const +{ + wxCHECK_MSG( m_view, wxTreeListItem(), "Must create first" ); + + wxCHECK_MSG( !HasFlag(wxTL_MULTIPLE), wxTreeListItem(), + "Must use GetSelections() with multi-selection controls!" ); + + const wxDataViewItem dvi = m_view->GetSelection(); + + return m_model->FromNonRootDVI(dvi); +} + +unsigned wxTreeListCtrl::GetSelections(wxTreeListItems& selections) const +{ + wxCHECK_MSG( m_view, 0, "Must create first" ); + + wxDataViewItemArray selectionsDV; + const unsigned numSelected = m_view->GetSelections(selectionsDV); + selections.resize(numSelected); + for ( unsigned n = 0; n < numSelected; n++ ) + selections[n] = m_model->FromNonRootDVI(selectionsDV[n]); + + return numSelected; +} + +void wxTreeListCtrl::Select(wxTreeListItem item) +{ + wxCHECK_RET( m_view, "Must create first" ); + + m_view->Select(m_model->ToNonRootDVI(item)); +} + +void wxTreeListCtrl::Unselect(wxTreeListItem item) +{ + wxCHECK_RET( m_view, "Must create first" ); + + m_view->Unselect(m_model->ToNonRootDVI(item)); +} + +bool wxTreeListCtrl::IsSelected(wxTreeListItem item) const +{ + wxCHECK_MSG( m_view, false, "Must create first" ); + + return m_view->IsSelected(m_model->ToNonRootDVI(item)); +} + +void wxTreeListCtrl::SelectAll() +{ + wxCHECK_RET( m_view, "Must create first" ); + + m_view->SelectAll(); +} + +void wxTreeListCtrl::UnselectAll() +{ + wxCHECK_RET( m_view, "Must create first" ); + + m_view->UnselectAll(); +} + +// ---------------------------------------------------------------------------- +// Checkbox handling +// ---------------------------------------------------------------------------- + +void wxTreeListCtrl::CheckItem(wxTreeListItem item, wxCheckBoxState state) +{ + wxCHECK_RET( m_model, "Must create first" ); + + m_model->CheckItem(item, state); +} + +void +wxTreeListCtrl::CheckItemRecursively(wxTreeListItem item, wxCheckBoxState state) +{ + wxCHECK_RET( m_model, "Must create first" ); + + m_model->CheckItem(item, state); + + for ( wxTreeListItem child = GetFirstChild(item); + child.IsOk(); + child = GetNextSibling(child) ) + { + CheckItemRecursively(child, state); + } +} + +void wxTreeListCtrl::UpdateItemParentStateRecursively(wxTreeListItem item) +{ + wxCHECK_RET( item.IsOk(), "Invalid item" ); + + wxASSERT_MSG( HasFlag(wxTL_3STATE), "Can only be used with wxTL_3STATE" ); + + for ( ;; ) + { + wxTreeListItem parent = GetItemParent(item); + if ( parent == GetRootItem() ) + { + // There is no checked state associated with the root item. + return; + } + + // Set parent state to the state of this item if all the other children + // have the same state too. Otherwise make it indeterminate. + const wxCheckBoxState stateItem = GetCheckedState(item); + CheckItem(parent, AreAllChildrenInState(parent, stateItem) + ? stateItem + : wxCHK_UNDETERMINED); + + // And do the same thing with the parent's parent too. + item = parent; + } +} + +wxCheckBoxState wxTreeListCtrl::GetCheckedState(wxTreeListItem item) const +{ + wxCHECK_MSG( item.IsOk(), wxCHK_UNDETERMINED, "Invalid item" ); + + return item->m_checkedState; +} + +bool +wxTreeListCtrl::AreAllChildrenInState(wxTreeListItem item, + wxCheckBoxState state) const +{ + wxCHECK_MSG( item.IsOk(), false, "Invalid item" ); + + for ( wxTreeListItem child = GetFirstChild(item); + child.IsOk(); + child = GetNextSibling(child) ) + { + if ( GetCheckedState(child) != state ) + return false; + } + + return true; +} + +// ---------------------------------------------------------------------------- +// Sorting +// ---------------------------------------------------------------------------- + +void wxTreeListCtrl::SetSortColumn(unsigned col, bool ascendingOrder) +{ + wxCHECK_RET( col < m_view->GetColumnCount(), "Invalid column index" ); + + m_view->GetColumn(col)->SetSortOrder(ascendingOrder); +} + +bool wxTreeListCtrl::GetSortColumn(unsigned* col, bool* ascendingOrder) +{ + const unsigned numColumns = m_view->GetColumnCount(); + for ( unsigned n = 0; n < numColumns; n++ ) + { + wxDataViewColumn* const column = m_view->GetColumn(n); + if ( column->IsSortKey() ) + { + if ( col ) + *col = n; + + if ( ascendingOrder ) + *ascendingOrder = column->IsSortOrderAscending(); + + return true; + } + } + + return false; +} + +void wxTreeListCtrl::SetItemComparator(wxTreeListItemComparator* comparator) +{ + m_comparator = comparator; +} + +// ---------------------------------------------------------------------------- +// Events +// ---------------------------------------------------------------------------- + +void wxTreeListCtrl::SendItemEvent(wxEventType evt, wxDataViewEvent& eventDV) +{ + wxTreeListEvent eventTL(evt, this, m_model->FromDVI(eventDV.GetItem())); + + if ( !ProcessWindowEvent(eventTL) ) + { + eventDV.Skip(); + return; + } + + if ( !eventTL.IsAllowed() ) + { + eventDV.Veto(); + } +} + +void wxTreeListCtrl::SendColumnEvent(wxEventType evt, wxDataViewEvent& eventDV) +{ + wxTreeListEvent eventTL(evt, this, wxTreeListItem()); + eventTL.SetColumn(eventDV.GetColumn()); + + if ( !ProcessWindowEvent(eventTL) ) + { + eventDV.Skip(); + return; + } + + if ( !eventTL.IsAllowed() ) + { + eventDV.Veto(); + } +} + +void +wxTreeListCtrl::OnItemToggled(wxTreeListItem item, wxCheckBoxState stateOld) +{ + wxTreeListEvent event(wxEVT_COMMAND_TREELIST_ITEM_CHECKED, this, item); + event.SetOldCheckedState(stateOld); + + ProcessWindowEvent(event); +} + +void wxTreeListCtrl::OnSelectionChanged(wxDataViewEvent& event) +{ + SendItemEvent(wxEVT_COMMAND_TREELIST_SELECTION_CHANGED, event); +} + +void wxTreeListCtrl::OnItemExpanding(wxDataViewEvent& event) +{ + SendItemEvent(wxEVT_COMMAND_TREELIST_ITEM_EXPANDING, event); +} + +void wxTreeListCtrl::OnItemExpanded(wxDataViewEvent& event) +{ + SendItemEvent(wxEVT_COMMAND_TREELIST_ITEM_EXPANDED, event); +} + +void wxTreeListCtrl::OnItemActivated(wxDataViewEvent& event) +{ + SendItemEvent(wxEVT_COMMAND_TREELIST_ITEM_ACTIVATED, event); +} + +void wxTreeListCtrl::OnItemContextMenu(wxDataViewEvent& event) +{ + SendItemEvent(wxEVT_COMMAND_TREELIST_ITEM_CONTEXT_MENU, event); +} + +void wxTreeListCtrl::OnColumnSorted(wxDataViewEvent& event) +{ + SendColumnEvent(wxEVT_COMMAND_TREELIST_COLUMN_SORTED, event); +} + +// ---------------------------------------------------------------------------- +// Geometry +// ---------------------------------------------------------------------------- + +void wxTreeListCtrl::OnSize(wxSizeEvent& event) +{ + event.Skip(); + + if ( m_view ) + { + // Resize the real control to cover our entire client area. + const wxRect rect = GetClientRect(); + m_view->SetSize(rect); + +#ifdef wxHAS_GENERIC_DATAVIEWCTRL + // The generic implementation doesn't refresh itself immediately which + // is annoying during "live resizing", so do it forcefully here to + // ensure that the items are re-laid out and the focus rectangle is + // redrawn correctly (instead of leaving traces) while our size is + // being changed. + wxWindow* const view = GetView(); + view->Refresh(); + view->Update(); +#endif // wxHAS_GENERIC_DATAVIEWCTRL + + // Resize the first column to take the remaining available space. + const unsigned numColumns = GetColumnCount(); + if ( !numColumns ) + return; + + // There is a bug in generic wxDataViewCtrl: if the column width sums + // up to the total size, horizontal scrollbar (unnecessarily) appears, + // so subtract a bit to ensure this doesn't happen. + int remainingWidth = rect.width - 5; + for ( unsigned n = 1; n < GetColumnCount(); n++ ) + { + remainingWidth -= GetColumnWidth(n); + if ( remainingWidth <= 0 ) + { + // There is not enough space, as we're not going to give the + // first column negative width anyhow, just don't do anything. + return; + } + } + + SetColumnWidth(0, remainingWidth); + } +} + +wxWindow* wxTreeListCtrl::GetView() const +{ +#ifdef wxHAS_GENERIC_DATAVIEWCTRL + return m_view->GetMainWindow(); +#else + return m_view; +#endif +} + +// ============================================================================ +// wxTreeListEvent implementation +// ============================================================================ + +wxIMPLEMENT_DYNAMIC_CLASS(wxTreeListEvent, wxNotifyEvent) + +#define wxDEFINE_TREELIST_EVENT(name) \ + wxDEFINE_EVENT(wxEVT_COMMAND_TREELIST_##name, wxTreeListEvent) + +wxDEFINE_TREELIST_EVENT(SELECTION_CHANGED); +wxDEFINE_TREELIST_EVENT(ITEM_EXPANDING); +wxDEFINE_TREELIST_EVENT(ITEM_EXPANDED); +wxDEFINE_TREELIST_EVENT(ITEM_CHECKED); +wxDEFINE_TREELIST_EVENT(ITEM_ACTIVATED); +wxDEFINE_TREELIST_EVENT(ITEM_CONTEXT_MENU); +wxDEFINE_TREELIST_EVENT(COLUMN_SORTED); + +#undef wxDEFINE_TREELIST_EVENT + +#endif // wxUSE_TREELISTCTRL diff --git a/Externals/wxWidgets3/src/generic/vlbox.cpp b/Externals/wxWidgets3/src/generic/vlbox.cpp index 02ccffc367..b0adc14cfa 100644 --- a/Externals/wxWidgets3/src/generic/vlbox.cpp +++ b/Externals/wxWidgets3/src/generic/vlbox.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 31.05.03 -// RCS-ID: $Id: vlbox.cpp 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: vlbox.cpp 69180 2011-09-21 15:08:10Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -249,7 +249,10 @@ bool wxVListBox::DoSetCurrent(int current) { // it is, indeed, only partly visible, so scroll it into view to // make it entirely visible + // BUT scrolling down when m_current is first visible makes it + // completely hidden, so that is even worse while ( (size_t)m_current + 1 == GetVisibleRowsEnd() && + (size_t)m_current != GetVisibleRowsBegin() && ScrollToRow(GetVisibleBegin() + 1) ) ; // but in any case refresh it as even if it was only partly visible diff --git a/Externals/wxWidgets3/src/generic/vscroll.cpp b/Externals/wxWidgets3/src/generic/vscroll.cpp index 363e06b31c..53fbaebd66 100644 --- a/Externals/wxWidgets3/src/generic/vscroll.cpp +++ b/Externals/wxWidgets3/src/generic/vscroll.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: Brad Anderson, David Warkentin // Created: 30.05.03 -// RCS-ID: $Id: vscroll.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: vscroll.cpp 69180 2011-09-21 15:08:10Z VZ $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -31,6 +31,8 @@ #include "wx/vscroll.h" +#include "wx/utils.h" // For wxMin/wxMax(). + // ============================================================================ // wxVarScrollHelperEvtHandler declaration // ============================================================================ @@ -308,14 +310,17 @@ size_t wxVarScrollHelperBase::GetNewScrollPosition(wxScrollWinEvent& event) cons } else if ( evtType == wxEVT_SCROLLWIN_PAGEUP ) { - return FindFirstVisibleFromLast(m_unitFirst); + // Page up should do at least as much as line up. + return wxMin(FindFirstVisibleFromLast(m_unitFirst), + m_unitFirst ? m_unitFirst - 1 : 0); } else if ( evtType == wxEVT_SCROLLWIN_PAGEDOWN ) { + // And page down should do at least as much as line down. if ( GetVisibleEnd() ) - return GetVisibleEnd() - 1; + return wxMax(GetVisibleEnd() - 1, m_unitFirst + 1); else - return GetVisibleEnd(); + return wxMax(GetVisibleEnd(), m_unitFirst + 1); } else if ( evtType == wxEVT_SCROLLWIN_THUMBRELEASE ) { diff --git a/Externals/wxWidgets3/src/generic/wizard.cpp b/Externals/wxWidgets3/src/generic/wizard.cpp index e4c8191d13..9256a9ef95 100644 --- a/Externals/wxWidgets3/src/generic/wizard.cpp +++ b/Externals/wxWidgets3/src/generic/wizard.cpp @@ -8,7 +8,7 @@ // 3) Fixed ShowPage() bug on displaying bitmaps // Robert Vazan (sizers) // Created: 15.08.99 -// RCS-ID: $Id: wizard.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: wizard.cpp 70630 2012-02-20 11:38:52Z JS $ // Copyright: (c) 1999 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -83,6 +83,7 @@ private: wxDEFINE_EVENT( wxEVT_WIZARD_PAGE_CHANGED, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_PAGE_CHANGING, wxWizardEvent ); +wxDEFINE_EVENT( wxEVT_WIZARD_BEFORE_PAGE_CHANGED, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_CANCEL, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_FINISHED, wxWizardEvent ); wxDEFINE_EVENT( wxEVT_WIZARD_HELP, wxWizardEvent ); @@ -324,7 +325,7 @@ void wxWizard::AddBitmapRow(wxBoxSizer *mainColumn) ); #if wxUSE_STATBMP - if ( m_bitmap.Ok() ) + if ( m_bitmap.IsOk() ) { wxSize bitmapSize(wxDefaultSize); if (GetBitmapPlacement()) @@ -396,7 +397,7 @@ void wxWizard::AddButtonRow(wxBoxSizer *mainColumn) // to activate the 'next' button first (create the next button before the back button). // The reason is: The user will repeatedly enter information in the wizard pages and then wants to // press 'next'. If a user uses mostly the keyboard, he would have to skip the 'back' button - // everytime. This is annoying. There is a second reason: RETURN acts as TAB. If the 'next' + // every time. This is annoying. There is a second reason: RETURN acts as TAB. If the 'next' // button comes first in the TAB order, the user can enter information very fast using the RETURN // key to TAB to the next entry field and page. This would not be possible, if the 'back' button // was created before the 'next' button. @@ -604,10 +605,10 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward) if ( m_statbmp ) { bmp = m_page->GetBitmap(); - if ( !bmp.Ok() ) + if ( !bmp.IsOk() ) bmp = m_bitmap; - if ( !bmpPrev.Ok() ) + if ( !bmpPrev.IsOk() ) bmpPrev = m_bitmap; if (!GetBitmapPlacement()) @@ -782,7 +783,7 @@ void wxWizard::OnBackOrNext(wxCommandEvent& event) wxCHECK_RET( m_page, wxT("should have a valid current page") ); // ask the current page first: notice that we do it before calling - // GetNext/Prev() because the data transfered from the controls of the page + // GetNext/Prev() because the data transferred from the controls of the page // may change the value returned by these methods if ( !m_page->Validate() || !m_page->TransferDataFromWindow() ) { @@ -792,6 +793,13 @@ void wxWizard::OnBackOrNext(wxCommandEvent& event) bool forward = event.GetEventObject() == m_btnNext; + // Give the application a chance to set state which may influence GetNext()/GetPrev() + wxWizardEvent eventPreChanged(wxEVT_WIZARD_BEFORE_PAGE_CHANGED, GetId(), forward, m_page); + (void)m_page->GetEventHandler()->ProcessEvent(eventPreChanged); + + if (!eventPreChanged.IsAllowed()) + return; + wxWizardPage *page; if ( forward ) { @@ -928,7 +936,7 @@ bool wxWizard::ResizeBitmap(wxBitmap& bmp) if (!GetBitmapPlacement()) return false; - if (bmp.Ok()) + if (bmp.IsOk()) { wxSize pageSize = m_sizerPage->GetSize(); if (pageSize == wxSize(0,0)) @@ -936,7 +944,7 @@ bool wxWizard::ResizeBitmap(wxBitmap& bmp) int bitmapWidth = wxMax(bmp.GetWidth(), GetMinimumBitmapWidth()); int bitmapHeight = pageSize.y; - if (!m_statbmp->GetBitmap().Ok() || m_statbmp->GetBitmap().GetHeight() != bitmapHeight) + if (!m_statbmp->GetBitmap().IsOk() || m_statbmp->GetBitmap().GetHeight() != bitmapHeight) { wxBitmap bitmap(bitmapWidth, bitmapHeight); { diff --git a/Externals/wxWidgets3/src/gtk/aboutdlg.cpp b/Externals/wxWidgets3/src/gtk/aboutdlg.cpp index 155ecf7859..7340be7935 100644 --- a/Externals/wxWidgets3/src/gtk/aboutdlg.cpp +++ b/Externals/wxWidgets3/src/gtk/aboutdlg.cpp @@ -3,7 +3,7 @@ // Purpose: native GTK+ wxAboutBox() implementation // Author: Vadim Zeitlin // Created: 2006-10-08 -// RCS-ID: $Id: aboutdlg.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: aboutdlg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 2006 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -126,7 +126,7 @@ void wxAboutBox(const wxAboutDialogInfo& info, wxWindow* WXUNUSED(parent)) gs_aboutDialog = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); GtkAboutDialog * const dlg = gs_aboutDialog; - gtk_about_dialog_set_name(dlg, wxGTK_CONV_SYS(info.GetName())); + gtk_about_dialog_set_program_name(dlg, wxGTK_CONV_SYS(info.GetName())); if ( info.HasVersion() ) gtk_about_dialog_set_version(dlg, wxGTK_CONV_SYS(info.GetVersion())); else @@ -145,7 +145,7 @@ void wxAboutBox(const wxAboutDialogInfo& info, wxWindow* WXUNUSED(parent)) gtk_about_dialog_set_license(dlg, NULL); wxIcon icon = info.GetIcon(); - if ( icon.Ok() ) + if ( icon.IsOk() ) gtk_about_dialog_set_logo(dlg, info.GetIcon().GetPixbuf()); if ( info.HasWebSite() ) diff --git a/Externals/wxWidgets3/src/gtk/animate.cpp b/Externals/wxWidgets3/src/gtk/animate.cpp index 0f8956554e..833c36d9c4 100644 --- a/Externals/wxWidgets3/src/gtk/animate.cpp +++ b/Externals/wxWidgets3/src/gtk/animate.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified By: // Created: 24/09/2006 -// Id: $Id: animate.cpp 58954 2009-02-16 21:14:12Z FM $ +// Id: $Id: animate.cpp 70756 2012-02-29 18:29:31Z PC $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -233,7 +233,6 @@ bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id, m_widget = gtk_image_new(); g_object_ref(m_widget); - gtk_widget_show(m_widget); m_parent->DoAddChild( this ); diff --git a/Externals/wxWidgets3/src/gtk/anybutton.cpp b/Externals/wxWidgets3/src/gtk/anybutton.cpp new file mode 100644 index 0000000000..d58e6246ae --- /dev/null +++ b/Externals/wxWidgets3/src/gtk/anybutton.cpp @@ -0,0 +1,422 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/gtk/anybutton.cpp +// Purpose: +// Author: Robert Roebling +// Created: 1998-05-20 (extracted from button.cpp) +// Id: $Id: anybutton.cpp 67931 2011-06-14 13:00:42Z VZ $ +// Copyright: (c) 1998 Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef wxHAS_ANY_BUTTON + +#ifndef WX_PRECOMP + #include "wx/anybutton.h" +#endif + +#include "wx/stockitem.h" + +#include "wx/gtk/private.h" + +// ---------------------------------------------------------------------------- +// GTK callbacks +// ---------------------------------------------------------------------------- + +extern "C" +{ + +static void +wxgtk_button_enter_callback(GtkWidget *WXUNUSED(widget), wxAnyButton *button) +{ + if ( button->GTKShouldIgnoreEvent() ) + return; + + button->GTKMouseEnters(); +} + +static void +wxgtk_button_leave_callback(GtkWidget *WXUNUSED(widget), wxAnyButton *button) +{ + if ( button->GTKShouldIgnoreEvent() ) + return; + + button->GTKMouseLeaves(); +} + +static void +wxgtk_button_press_callback(GtkWidget *WXUNUSED(widget), wxAnyButton *button) +{ + if ( button->GTKShouldIgnoreEvent() ) + return; + + button->GTKPressed(); +} + +static void +wxgtk_button_released_callback(GtkWidget *WXUNUSED(widget), wxAnyButton *button) +{ + if ( button->GTKShouldIgnoreEvent() ) + return; + + button->GTKReleased(); +} + +} // extern "C" + +//----------------------------------------------------------------------------- +// wxAnyButton +//----------------------------------------------------------------------------- + +bool wxAnyButton::Enable( bool enable ) +{ + if (!base_type::Enable(enable)) + return false; + + gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(m_widget)), enable); + + if (enable) + GTKFixSensitivity(); + + GTKUpdateBitmap(); + + return true; +} + +GdkWindow *wxAnyButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const +{ + return GTK_BUTTON(m_widget)->event_window; +} + +// static +wxVisualAttributes +wxAnyButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) +{ + return GetDefaultAttributesFromGTKWidget(gtk_button_new); +} + +// ---------------------------------------------------------------------------- +// bitmaps support +// ---------------------------------------------------------------------------- + +void wxAnyButton::GTKMouseEnters() +{ + m_isCurrent = true; + + GTKUpdateBitmap(); +} + +void wxAnyButton::GTKMouseLeaves() +{ + m_isCurrent = false; + + GTKUpdateBitmap(); +} + +void wxAnyButton::GTKPressed() +{ + m_isPressed = true; + + GTKUpdateBitmap(); +} + +void wxAnyButton::GTKReleased() +{ + m_isPressed = false; + + GTKUpdateBitmap(); +} + +void wxAnyButton::GTKOnFocus(wxFocusEvent& event) +{ + event.Skip(); + + GTKUpdateBitmap(); +} + +wxAnyButton::State wxAnyButton::GTKGetCurrentState() const +{ + if ( !IsThisEnabled() ) + return m_bitmaps[State_Disabled].IsOk() ? State_Disabled : State_Normal; + + if ( m_isPressed && m_bitmaps[State_Pressed].IsOk() ) + return State_Pressed; + + if ( m_isCurrent && m_bitmaps[State_Current].IsOk() ) + return State_Current; + + if ( HasFocus() && m_bitmaps[State_Focused].IsOk() ) + return State_Focused; + + return State_Normal; +} + +void wxAnyButton::GTKUpdateBitmap() +{ + // if we don't show bitmaps at all, there is nothing to update + if ( m_bitmaps[State_Normal].IsOk() ) + { + // if we do show them, this will return a state for which we do have a + // valid bitmap + State state = GTKGetCurrentState(); + + GTKDoShowBitmap(m_bitmaps[state]); + } +} + +void wxAnyButton::GTKDoShowBitmap(const wxBitmap& bitmap) +{ + wxASSERT_MSG( bitmap.IsOk(), "invalid bitmap" ); + + GtkWidget *image; + if ( DontShowLabel() ) + { + image = gtk_bin_get_child(GTK_BIN(m_widget)); + } + else // have both label and bitmap + { +#ifdef __WXGTK26__ + if ( !gtk_check_version(2,6,0) ) + { + image = gtk_button_get_image(GTK_BUTTON(m_widget)); + } + else +#endif // __WXGTK26__ + { + // buttons with both label and bitmap are only supported with GTK+ + // 2.6 so far + // + // it shouldn't be difficult to implement them ourselves for the + // previous GTK+ versions by stuffing a container with a label and + // an image inside GtkButton but there doesn't seem to be much + // point in doing this for ancient GTK+ versions + return; + } + } + + wxCHECK_RET( image && GTK_IS_IMAGE(image), "must have image widget" ); + + gtk_image_set_from_pixbuf(GTK_IMAGE(image), bitmap.GetPixbuf()); +} + +wxBitmap wxAnyButton::DoGetBitmap(State which) const +{ + return m_bitmaps[which]; +} + +void wxAnyButton::DoSetBitmap(const wxBitmap& bitmap, State which) +{ + switch ( which ) + { + case State_Normal: + if ( DontShowLabel() ) + { + // we only have the bitmap in this button, never remove it but + // do invalidate the best size when the bitmap (and presumably + // its size) changes + InvalidateBestSize(); + } +#ifdef __WXGTK26__ + // normal image is special: setting it enables images for the button and + // resetting it to nothing disables all of them + else if ( !gtk_check_version(2,6,0) ) + { + GtkWidget *image = gtk_button_get_image(GTK_BUTTON(m_widget)); + if ( image && !bitmap.IsOk() ) + { + gtk_container_remove(GTK_CONTAINER(m_widget), image); + } + else if ( !image && bitmap.IsOk() ) + { + image = gtk_image_new(); + gtk_button_set_image(GTK_BUTTON(m_widget), image); + } + else // image presence or absence didn't change + { + // don't invalidate best size below + break; + } + + InvalidateBestSize(); + } +#endif // GTK+ 2.6+ + break; + + case State_Pressed: + if ( bitmap.IsOk() ) + { + if ( !m_bitmaps[which].IsOk() ) + { + // we need to install the callbacks to be notified about + // the button pressed state change + g_signal_connect + ( + m_widget, + "pressed", + G_CALLBACK(wxgtk_button_press_callback), + this + ); + + g_signal_connect + ( + m_widget, + "released", + G_CALLBACK(wxgtk_button_released_callback), + this + ); + } + } + else // no valid bitmap + { + if ( m_bitmaps[which].IsOk() ) + { + // we don't need to be notified about the button pressed + // state changes any more + g_signal_handlers_disconnect_by_func + ( + m_widget, + (gpointer)wxgtk_button_press_callback, + this + ); + + g_signal_handlers_disconnect_by_func + ( + m_widget, + (gpointer)wxgtk_button_released_callback, + this + ); + + // also make sure we don't remain stuck in pressed state + if ( m_isPressed ) + { + m_isPressed = false; + GTKUpdateBitmap(); + } + } + } + break; + + case State_Current: + // the logic here is the same as above for State_Pressed: we need + // to connect the handlers if we must be notified about the changes + // in the button current state and we disconnect them when/if we + // don't need them any more + if ( bitmap.IsOk() ) + { + if ( !m_bitmaps[which].IsOk() ) + { + g_signal_connect + ( + m_widget, + "enter", + G_CALLBACK(wxgtk_button_enter_callback), + this + ); + + g_signal_connect + ( + m_widget, + "leave", + G_CALLBACK(wxgtk_button_leave_callback), + this + ); + } + } + else // no valid bitmap + { + if ( m_bitmaps[which].IsOk() ) + { + g_signal_handlers_disconnect_by_func + ( + m_widget, + (gpointer)wxgtk_button_enter_callback, + this + ); + + g_signal_handlers_disconnect_by_func + ( + m_widget, + (gpointer)wxgtk_button_leave_callback, + this + ); + + if ( m_isCurrent ) + { + m_isCurrent = false; + GTKUpdateBitmap(); + } + } + } + break; + + case State_Focused: + if ( bitmap.IsOk() ) + { + Connect(wxEVT_SET_FOCUS, + wxFocusEventHandler(wxAnyButton::GTKOnFocus)); + Connect(wxEVT_KILL_FOCUS, + wxFocusEventHandler(wxAnyButton::GTKOnFocus)); + } + else // no valid focused bitmap + { + Disconnect(wxEVT_SET_FOCUS, + wxFocusEventHandler(wxAnyButton::GTKOnFocus)); + Disconnect(wxEVT_KILL_FOCUS, + wxFocusEventHandler(wxAnyButton::GTKOnFocus)); + } + break; + + default: + // no callbacks to connect/disconnect + ; + } + + m_bitmaps[which] = bitmap; + + // update the bitmap immediately if necessary, otherwise it will be done + // when the bitmap for the corresponding state is needed the next time by + // GTKUpdateBitmap() + if ( bitmap.IsOk() && which == GTKGetCurrentState() ) + { + GTKDoShowBitmap(bitmap); + } +} + +void wxAnyButton::DoSetBitmapPosition(wxDirection dir) +{ +#ifdef __WXGTK210__ + if ( !gtk_check_version(2,10,0) ) + { + GtkPositionType gtkpos; + switch ( dir ) + { + default: + wxFAIL_MSG( "invalid position" ); + // fall through + + case wxLEFT: + gtkpos = GTK_POS_LEFT; + break; + + case wxRIGHT: + gtkpos = GTK_POS_RIGHT; + break; + + case wxTOP: + gtkpos = GTK_POS_TOP; + break; + + case wxBOTTOM: + gtkpos = GTK_POS_BOTTOM; + break; + } + + gtk_button_set_image_position(GTK_BUTTON(m_widget), gtkpos); + InvalidateBestSize(); + } +#endif // GTK+ 2.10+ +} + +#endif // wxHAS_ANY_BUTTON diff --git a/Externals/wxWidgets3/src/gtk/app.cpp b/Externals/wxWidgets3/src/gtk/app.cpp index 6601f01bdb..c7c020b558 100644 --- a/Externals/wxWidgets3/src/gtk/app.cpp +++ b/Externals/wxWidgets3/src/gtk/app.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/app.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: app.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: app.cpp 70701 2012-02-26 17:18:41Z VZ $ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -38,7 +38,9 @@ #include #endif // wxUSE_LIBHILDON2 +#ifdef GDK_WINDOWING_X11 #include +#endif //----------------------------------------------------------------------------- // link GnomeVFS diff --git a/Externals/wxWidgets3/src/gtk/artgtk.cpp b/Externals/wxWidgets3/src/gtk/artgtk.cpp index c71ed7c567..8ddb480e04 100644 --- a/Externals/wxWidgets3/src/gtk/artgtk.cpp +++ b/Externals/wxWidgets3/src/gtk/artgtk.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2004-08-22 -// RCS-ID: $Id: artgtk.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: artgtk.cpp 70154 2011-12-28 13:51:29Z VZ $ // Copyright: (c) Vaclav Slavik, 2004 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -47,7 +47,7 @@ protected: /*static*/ void wxArtProvider::InitNativeProvider() { - Push(new wxGTK2ArtProvider); + PushBack(new wxGTK2ArtProvider); } // ---------------------------------------------------------------------------- @@ -203,7 +203,7 @@ GdkPixbuf *CreateStockIcon(const char *stockid, GtkIconSize size) // with "stock-id" representation (in addition to pixmap and pixbuf // ones) and would convert it to pixbuf when rendered. - GtkStyle* style = wxGTKPrivate::GetButtonWidget()->style; + GtkStyle* style = gtk_widget_get_style(wxGTKPrivate::GetButtonWidget()); GtkIconSet* iconset = gtk_style_lookup_icon_set(style, stockid); if (!iconset) @@ -310,7 +310,7 @@ wxGTK2ArtProvider::CreateIconBundle(const wxArtID& id, const wxString stockid = wxArtIDToStock(id); // try to load the bundle as stock icon first - GtkStyle* style = wxGTKPrivate::GetButtonWidget()->style; + GtkStyle* style = gtk_widget_get_style(wxGTKPrivate::GetButtonWidget()); GtkIconSet* iconset = gtk_style_lookup_icon_set(style, stockid.utf8_str()); if ( iconset ) { diff --git a/Externals/wxWidgets3/src/gtk/assertdlg_gtk.c b/Externals/wxWidgets3/src/gtk/assertdlg_gtk.cpp similarity index 90% rename from Externals/wxWidgets3/src/gtk/assertdlg_gtk.c rename to Externals/wxWidgets3/src/gtk/assertdlg_gtk.cpp index 28269c39e8..91cc8a5bf7 100644 --- a/Externals/wxWidgets3/src/gtk/assertdlg_gtk.c +++ b/Externals/wxWidgets3/src/gtk/assertdlg_gtk.cpp @@ -1,29 +1,19 @@ /* /////////////////////////////////////////////////////////////////////////// -// Name: src/gtk/assertdlg_gtk.c +// Name: src/gtk/assertdlg_gtk.cpp // Purpose: GtkAssertDialog // Author: Francesco Montorsi -// Id: $Id: assertdlg_gtk.c 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: assertdlg_gtk.cpp 69697 2011-11-08 11:02:02Z VZ $ // Copyright: (c) 2006 Francesco Montorsi // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////// */ -#ifdef VMS -#define XCheckIfEvent XCHECKIFEVENT -#endif - #include "wx/platform.h" -#include "wx/gtk/assertdlg_gtk.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - #include +#include "wx/gtk/assertdlg_gtk.h" +#include "wx/gtk/private/gtk2-compat.h" -/* For FILE */ #include - /* ---------------------------------------------------------------------------- Constants ---------------------------------------------------------------------------- */ @@ -46,19 +36,16 @@ extern "C" { ---------------------------------------------------------------------------- */ GtkWidget *gtk_assert_dialog_add_button_to (GtkBox *box, const gchar *label, - const gchar *stock, gint response_id) + const gchar *stock) { /* create the button */ GtkWidget *button = gtk_button_new_with_mnemonic (label); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(button, true); + /* add a stock icon inside it */ + GtkWidget *image = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_BUTTON); #if GTK_CHECK_VERSION(2,6,0) - if (!gtk_check_version (2, 6, 0)) - { - /* add a stock icon inside it */ - GtkWidget *image = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_BUTTON); - gtk_button_set_image (GTK_BUTTON (button), image); - } + gtk_button_set_image (GTK_BUTTON (button), image); #endif /* add to the given (container) widget */ @@ -72,7 +59,7 @@ GtkWidget *gtk_assert_dialog_add_button (GtkAssertDialog *dlg, const gchar *labe const gchar *stock, gint response_id) { /* create the button */ - GtkWidget *button = gtk_assert_dialog_add_button_to (NULL, label, stock, response_id); + GtkWidget* button = gtk_assert_dialog_add_button_to(NULL, label, stock); /* add the button to the dialog's action area */ gtk_dialog_add_action_widget (GTK_DIALOG (dlg), button, response_id); @@ -124,7 +111,7 @@ GtkWidget *gtk_assert_dialog_create_backtrace_list_model () void gtk_assert_dialog_process_backtrace (GtkAssertDialog *dlg) { /* set busy cursor */ - GdkWindow *parent = GTK_WIDGET(dlg)->window; + GdkWindow *parent = gtk_widget_get_window(GTK_WIDGET(dlg)); GdkCursor *cur = gdk_cursor_new (GDK_WATCH); gdk_window_set_cursor (parent, cur); gdk_flush (); @@ -138,11 +125,12 @@ void gtk_assert_dialog_process_backtrace (GtkAssertDialog *dlg) +extern "C" { /* ---------------------------------------------------------------------------- GtkAssertDialog signal handlers ---------------------------------------------------------------------------- */ -void gtk_assert_dialog_expander_callback (GtkWidget *widget, GtkAssertDialog *dlg) +static void gtk_assert_dialog_expander_callback(GtkWidget*, GtkAssertDialog* dlg) { /* status is not yet updated so we need to invert it to get the new one */ gboolean expanded = !gtk_expander_get_expanded (GTK_EXPANDER(dlg->expander)); @@ -157,7 +145,7 @@ void gtk_assert_dialog_expander_callback (GtkWidget *widget, GtkAssertDialog *dl dlg->callback = NULL; } -void gtk_assert_dialog_save_backtrace_callback (GtkWidget *widget, GtkAssertDialog *dlg) +static void gtk_assert_dialog_save_backtrace_callback(GtkWidget*, GtkAssertDialog* dlg) { GtkWidget *dialog; @@ -195,7 +183,7 @@ void gtk_assert_dialog_save_backtrace_callback (GtkWidget *widget, GtkAssertDial gtk_widget_destroy (dialog); } -void gtk_assert_dialog_copy_callback (GtkWidget *widget, GtkAssertDialog *dlg) +static void gtk_assert_dialog_copy_callback(GtkWidget*, GtkAssertDialog* dlg) { char *msg, *backtrace; GtkClipboard *clipboard; @@ -221,7 +209,7 @@ void gtk_assert_dialog_copy_callback (GtkWidget *widget, GtkAssertDialog *dlg) g_string_free (str, TRUE); } -void gtk_assert_dialog_continue_callback (GtkWidget *widget, GtkAssertDialog *dlg) +static void gtk_assert_dialog_continue_callback(GtkWidget*, GtkAssertDialog* dlg) { gint response = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->shownexttime)) ? @@ -229,7 +217,7 @@ void gtk_assert_dialog_continue_callback (GtkWidget *widget, GtkAssertDialog *dl gtk_dialog_response (GTK_DIALOG(dlg), response); } - +} // extern "C" /* ---------------------------------------------------------------------------- GtkAssertDialogClass implementation @@ -239,9 +227,9 @@ static void gtk_assert_dialog_init (GtkAssertDialog *sel static void gtk_assert_dialog_class_init (GtkAssertDialogClass *klass); -GtkType gtk_assert_dialog_get_type (void) +GType gtk_assert_dialog_get_type() { - static GtkType assert_dialog_type = 0; + static GType assert_dialog_type; if (!assert_dialog_type) { @@ -264,12 +252,12 @@ GtkType gtk_assert_dialog_get_type (void) return assert_dialog_type; } -void gtk_assert_dialog_class_init(GtkAssertDialogClass *klass) +static void gtk_assert_dialog_class_init(GtkAssertDialogClass*) { /* no special initializations required */ } -void gtk_assert_dialog_init(GtkAssertDialog *dlg) +static void gtk_assert_dialog_init(GtkAssertDialog* dlg) { GtkWidget *continuebtn; @@ -280,7 +268,7 @@ void gtk_assert_dialog_init(GtkAssertDialog *dlg) gtk_widget_push_composite_child (); vbox = gtk_vbox_new (FALSE, 8); gtk_container_set_border_width (GTK_CONTAINER(vbox), 8); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), vbox, TRUE, TRUE, 5); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg))), vbox, true, true, 5); /* add the icon+message hbox */ @@ -343,19 +331,19 @@ void gtk_assert_dialog_init(GtkAssertDialog *dlg) /* add the buttons */ button = gtk_assert_dialog_add_button_to (GTK_BOX(hbox), "Save to _file", - GTK_STOCK_SAVE, GTK_RESPONSE_NONE); + GTK_STOCK_SAVE); g_signal_connect (button, "clicked", G_CALLBACK(gtk_assert_dialog_save_backtrace_callback), dlg); button = gtk_assert_dialog_add_button_to (GTK_BOX(hbox), "Copy to clip_board", - GTK_STOCK_COPY, GTK_RESPONSE_NONE); + GTK_STOCK_COPY); g_signal_connect (button, "clicked", G_CALLBACK(gtk_assert_dialog_copy_callback), dlg); } /* add the checkbutton */ dlg->shownexttime = gtk_check_button_new_with_mnemonic("Show this _dialog the next time"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dlg->shownexttime), TRUE); - gtk_box_pack_end (GTK_BOX(GTK_DIALOG(dlg)->action_area), dlg->shownexttime, FALSE, TRUE, 8); + gtk_box_pack_end(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(dlg))), dlg->shownexttime, false, true, 8); /* add the stop button */ gtk_assert_dialog_add_button (dlg, "_Stop", GTK_STOCK_QUIT, GTK_ASSERT_DIALOG_STOP); @@ -369,8 +357,8 @@ void gtk_assert_dialog_init(GtkAssertDialog *dlg) dlg->callback = NULL; dlg->userdata = NULL; - /* the resizeable property of this window is modified by the expander: - when it's collapsed, the window must be non-resizeable! */ + /* the resizable property of this window is modified by the expander: + when it's collapsed, the window must be non-resizable! */ gtk_window_set_resizable (GTK_WINDOW (dlg), FALSE); gtk_widget_pop_composite_child (); gtk_widget_show_all (GTK_WIDGET(dlg)); @@ -497,11 +485,7 @@ void gtk_assert_dialog_append_stack_frame(GtkAssertDialog *dlg, GtkWidget *gtk_assert_dialog_new(void) { - GtkAssertDialog *dialog = g_object_new (GTK_TYPE_ASSERT_DIALOG, NULL); + void* dialog = g_object_new(GTK_TYPE_ASSERT_DIALOG, NULL); return GTK_WIDGET (dialog); } - -#ifdef __cplusplus -} -#endif /* __cplusplus */ diff --git a/Externals/wxWidgets3/src/gtk/bitmap.cpp b/Externals/wxWidgets3/src/gtk/bitmap.cpp index c5ce2a8b94..aabfa24346 100644 --- a/Externals/wxWidgets3/src/gtk/bitmap.cpp +++ b/Externals/wxWidgets3/src/gtk/bitmap.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/bitmap.cpp // Purpose: // Author: Robert Roebling -// RCS-ID: $Id: bitmap.cpp 66372 2010-12-14 18:43:32Z VZ $ +// RCS-ID: $Id: bitmap.cpp 69617 2011-10-31 16:09:47Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -207,7 +207,7 @@ bool wxMask::InitFromMonoBitmap(const wxBitmap& bitmap) return true; } -GdkBitmap *wxMask::GetBitmap() const +GdkPixmap* wxMask::GetBitmap() const { return m_bitmap; } @@ -324,13 +324,11 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth) UnRef(); wxCHECK_MSG( image.IsOk(), false, wxT("invalid image") ); - wxCHECK_MSG( depth == -1 || depth == 1, false, wxT("invalid bitmap depth") ); if (image.GetWidth() <= 0 || image.GetHeight() <= 0) return false; - // create pixbuf if image has alpha and requested depth is compatible - if (image.HasAlpha() && (depth == -1 || depth == 32)) + if (depth == 32 || (depth == -1 && image.HasAlpha())) return CreateFromImageAsPixbuf(image); // otherwise create pixmap, if alpha is present it will be converted to mask @@ -422,8 +420,6 @@ bool wxBitmap::CreateFromImageAsPixmap(const wxImage& image, int depth) bool wxBitmap::CreateFromImageAsPixbuf(const wxImage& image) { - wxASSERT(image.HasAlpha()); - int width = image.GetWidth(); int height = image.GetHeight(); @@ -441,12 +437,13 @@ bool wxBitmap::CreateFromImageAsPixbuf(const wxImage& image) for (int y = 0; y < height; y++, out += rowpad) { - for (int x = 0; x < width; x++, alpha++, out += 4, in += 3) + for (int x = 0; x < width; x++, out += 4, in += 3) { out[0] = in[0]; out[1] = in[1]; out[2] = in[2]; - out[3] = *alpha; + if (alpha) + out[3] = *alpha++; } } diff --git a/Externals/wxWidgets3/src/gtk/bmpcbox.cpp b/Externals/wxWidgets3/src/gtk/bmpcbox.cpp index f65bdd9cfa..3a29159b96 100644 --- a/Externals/wxWidgets3/src/gtk/bmpcbox.cpp +++ b/Externals/wxWidgets3/src/gtk/bmpcbox.cpp @@ -3,7 +3,7 @@ // Purpose: wxBitmapComboBox // Author: Jaakko Salli // Created: 2008-05-19 -// RCS-ID: $Id: bmpcbox.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: bmpcbox.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 2008 Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -122,8 +122,8 @@ void wxBitmapComboBox::GTKCreateComboBoxWidget() else { m_widget = gtk_combo_box_entry_new_with_model( GTK_TREE_MODEL(store), m_stringCellIndex ); - m_entry = GTK_ENTRY( GTK_BIN(m_widget)->child ); - gtk_entry_set_editable( m_entry, TRUE ); + m_entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(m_widget))); + gtk_editable_set_editable(GTK_EDITABLE(m_entry), true); } g_object_ref(m_widget); diff --git a/Externals/wxWidgets3/src/gtk/brush.cpp b/Externals/wxWidgets3/src/gtk/brush.cpp index 06d4d21afe..182b466a03 100644 --- a/Externals/wxWidgets3/src/gtk/brush.cpp +++ b/Externals/wxWidgets3/src/gtk/brush.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/brush.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: brush.cpp 61508 2009-07-23 20:30:22Z VZ $ +// Id: $Id: brush.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -104,21 +104,21 @@ bool wxBrush::operator==(const wxBrush& brush) const wxBrushStyle wxBrush::GetStyle() const { - wxCHECK_MSG( Ok(), wxBRUSHSTYLE_INVALID, wxT("invalid brush") ); + wxCHECK_MSG( IsOk(), wxBRUSHSTYLE_INVALID, wxT("invalid brush") ); return M_BRUSHDATA->m_style; } wxColour wxBrush::GetColour() const { - wxCHECK_MSG( Ok(), wxNullColour, wxT("invalid brush") ); + wxCHECK_MSG( IsOk(), wxNullColour, wxT("invalid brush") ); return M_BRUSHDATA->m_colour; } wxBitmap *wxBrush::GetStipple() const { - wxCHECK_MSG( Ok(), NULL, wxT("invalid brush") ); + wxCHECK_MSG( IsOk(), NULL, wxT("invalid brush") ); return &M_BRUSHDATA->m_stipple; } diff --git a/Externals/wxWidgets3/src/gtk/button.cpp b/Externals/wxWidgets3/src/gtk/button.cpp index 59de0fa435..cb5d90973a 100644 --- a/Externals/wxWidgets3/src/gtk/button.cpp +++ b/Externals/wxWidgets3/src/gtk/button.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/button.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: button.cpp 67151 2011-03-08 17:22:15Z VZ $ +// Id: $Id: button.cpp 68842 2011-08-22 12:41:00Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,6 +19,7 @@ #include "wx/stockitem.h" #include "wx/gtk/private.h" +#include "wx/gtk/private/list.h" // ---------------------------------------------------------------------------- // GTK callbacks @@ -38,42 +39,6 @@ wxgtk_button_clicked_callback(GtkWidget *WXUNUSED(widget), wxButton *button) button->HandleWindowEvent(event); } -static void -wxgtk_button_enter_callback(GtkWidget *WXUNUSED(widget), wxButton *button) -{ - if ( button->GTKShouldIgnoreEvent() ) - return; - - button->GTKMouseEnters(); -} - -static void -wxgtk_button_leave_callback(GtkWidget *WXUNUSED(widget), wxButton *button) -{ - if ( button->GTKShouldIgnoreEvent() ) - return; - - button->GTKMouseLeaves(); -} - -static void -wxgtk_button_press_callback(GtkWidget *WXUNUSED(widget), wxButton *button) -{ - if ( button->GTKShouldIgnoreEvent() ) - return; - - button->GTKPressed(); -} - -static void -wxgtk_button_released_callback(GtkWidget *WXUNUSED(widget), wxButton *button) -{ - if ( button->GTKShouldIgnoreEvent() ) - return; - - button->GTKReleased(); -} - //----------------------------------------------------------------------------- // "style_set" from m_widget //----------------------------------------------------------------------------- @@ -83,7 +48,7 @@ wxgtk_button_style_set_callback(GtkWidget* widget, GtkStyle*, wxButton* win) { /* the default button has a border around it */ wxWindow* parent = win->GetParent(); - if (parent && parent->m_wxwindow && GTK_WIDGET_CAN_DEFAULT(widget)) + if (parent && parent->m_wxwindow && gtk_widget_get_can_default(widget)) { GtkBorder* border = NULL; gtk_widget_style_get(widget, "default_border", &border, NULL); @@ -181,7 +146,7 @@ wxWindow *wxButton::SetDefault() { wxWindow *oldDefault = wxButtonBase::SetDefault(); - GTK_WIDGET_SET_FLAGS( m_widget, GTK_CAN_DEFAULT ); + gtk_widget_set_can_default(m_widget, TRUE); gtk_widget_grab_default( m_widget ); // resize for default border @@ -234,7 +199,7 @@ void wxButton::SetLabel( const wxString &lbl ) if (label.empty() && wxIsStockID(m_windowId)) label = wxGetStockLabel(m_windowId); - wxControl::SetLabel(label); + wxAnyButton::SetLabel(label); // don't use label if it was explicitly disabled if ( HasFlag(wxBU_NOTEXT) ) @@ -280,64 +245,45 @@ bool wxButton::DoSetLabelMarkup(const wxString& markup) return true; } -#endif // wxUSE_MARKUP - -bool wxButton::Enable( bool enable ) -{ - if (!base_type::Enable(enable)) - return false; - - gtk_widget_set_sensitive(GTK_BIN(m_widget)->child, enable); - - if (enable) - GTKFixSensitivity(); - - GTKUpdateBitmap(); - - return true; -} - -GdkWindow *wxButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const -{ - return GTK_BUTTON(m_widget)->event_window; -} GtkLabel *wxButton::GTKGetLabel() const { - GtkWidget *child = GTK_BIN(m_widget)->child; + GtkWidget* child = gtk_bin_get_child(GTK_BIN(m_widget)); if ( GTK_IS_ALIGNMENT(child) ) { - GtkWidget *box = GTK_BIN(child)->child; - for (GList* item = GTK_BOX(box)->children; item; item = item->next) + GtkWidget* box = gtk_bin_get_child(GTK_BIN(child)); + GtkLabel* label = NULL; + wxGtkList list(gtk_container_get_children(GTK_CONTAINER(box))); + for (GList* item = list; item; item = item->next) { - GtkBoxChild* boxChild = static_cast(item->data); - if ( GTK_IS_LABEL(boxChild->widget) ) - return GTK_LABEL(boxChild->widget); + if (GTK_IS_LABEL(item->data)) + label = GTK_LABEL(item->data); } - return NULL; + return label; } return GTK_LABEL(child); } +#endif // wxUSE_MARKUP void wxButton::DoApplyWidgetStyle(GtkRcStyle *style) { gtk_widget_modify_style(m_widget, style); - GtkWidget *child = GTK_BIN(m_widget)->child; + GtkWidget* child = gtk_bin_get_child(GTK_BIN(m_widget)); gtk_widget_modify_style(child, style); // for buttons with images, the path to the label is (at least in 2.12) // GtkButton -> GtkAlignment -> GtkHBox -> GtkLabel if ( GTK_IS_ALIGNMENT(child) ) { - GtkWidget *box = GTK_BIN(child)->child; + GtkWidget* box = gtk_bin_get_child(GTK_BIN(child)); if ( GTK_IS_BOX(box) ) { - for (GList* item = GTK_BOX(box)->children; item; item = item->next) + wxGtkList list(gtk_container_get_children(GTK_CONTAINER(box))); + for (GList* item = list; item; item = item->next) { - GtkBoxChild* boxChild = static_cast(item->data); - gtk_widget_modify_style(boxChild->widget, style); + gtk_widget_modify_style(GTK_WIDGET(item->data), style); } } } @@ -349,19 +295,19 @@ wxSize wxButton::DoGetBestSize() const // extra border around it, but we don't want to take it into account in // our size calculations (otherwise the result is visually ugly), so // always return the size of non default button from here - const bool isDefault = GTK_WIDGET_HAS_DEFAULT(m_widget); + const bool isDefault = gtk_widget_has_default(m_widget); if ( isDefault ) { // temporarily unset default flag - GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_DEFAULT ); + gtk_widget_set_can_default(m_widget, FALSE); } - wxSize ret( wxControl::DoGetBestSize() ); + wxSize ret( wxAnyButton::DoGetBestSize() ); if ( isDefault ) { // set it back again - GTK_WIDGET_SET_FLAGS( m_widget, GTK_CAN_DEFAULT ); + gtk_widget_set_can_default(m_widget, TRUE); } if (!HasFlag(wxBU_EXACTFIT)) @@ -384,326 +330,4 @@ wxButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) return GetDefaultAttributesFromGTKWidget(gtk_button_new); } -// ---------------------------------------------------------------------------- -// bitmaps support -// ---------------------------------------------------------------------------- - -void wxButton::GTKMouseEnters() -{ - m_isCurrent = true; - - GTKUpdateBitmap(); -} - -void wxButton::GTKMouseLeaves() -{ - m_isCurrent = false; - - GTKUpdateBitmap(); -} - -void wxButton::GTKPressed() -{ - m_isPressed = true; - - GTKUpdateBitmap(); -} - -void wxButton::GTKReleased() -{ - m_isPressed = false; - - GTKUpdateBitmap(); -} - -void wxButton::GTKOnFocus(wxFocusEvent& event) -{ - event.Skip(); - - GTKUpdateBitmap(); -} - -wxButton::State wxButton::GTKGetCurrentState() const -{ - if ( !IsThisEnabled() ) - return m_bitmaps[State_Disabled].IsOk() ? State_Disabled : State_Normal; - - if ( m_isPressed && m_bitmaps[State_Pressed].IsOk() ) - return State_Pressed; - - if ( m_isCurrent && m_bitmaps[State_Current].IsOk() ) - return State_Current; - - if ( HasFocus() && m_bitmaps[State_Focused].IsOk() ) - return State_Focused; - - return State_Normal; -} - -void wxButton::GTKUpdateBitmap() -{ - // if we don't show bitmaps at all, there is nothing to update - if ( m_bitmaps[State_Normal].IsOk() ) - { - // if we do show them, this will return a state for which we do have a - // valid bitmap - State state = GTKGetCurrentState(); - - GTKDoShowBitmap(m_bitmaps[state]); - } -} - -void wxButton::GTKDoShowBitmap(const wxBitmap& bitmap) -{ - wxASSERT_MSG( bitmap.IsOk(), "invalid bitmap" ); - - GtkWidget *image; - if ( DontShowLabel() ) - { - image = GTK_BIN(m_widget)->child; - } - else // have both label and bitmap - { -#ifdef __WXGTK26__ - if ( !gtk_check_version(2,6,0) ) - { - image = gtk_button_get_image(GTK_BUTTON(m_widget)); - } - else -#endif // __WXGTK26__ - { - // buttons with both label and bitmap are only supported with GTK+ - // 2.6 so far - // - // it shouldn't be difficult to implement them ourselves for the - // previous GTK+ versions by stuffing a container with a label and - // an image inside GtkButton but there doesn't seem to be much - // point in doing this for ancient GTK+ versions - return; - } - } - - wxCHECK_RET( image && GTK_IS_IMAGE(image), "must have image widget" ); - - gtk_image_set_from_pixbuf(GTK_IMAGE(image), bitmap.GetPixbuf()); -} - -wxBitmap wxButton::DoGetBitmap(State which) const -{ - return m_bitmaps[which]; -} - -void wxButton::DoSetBitmap(const wxBitmap& bitmap, State which) -{ - switch ( which ) - { - case State_Normal: - if ( DontShowLabel() ) - { - // we only have the bitmap in this button, never remove it but - // do invalidate the best size when the bitmap (and presumably - // its size) changes - InvalidateBestSize(); - } -#ifdef __WXGTK26__ - // normal image is special: setting it enables images for the button and - // resetting it to nothing disables all of them - else if ( !gtk_check_version(2,6,0) ) - { - GtkWidget *image = gtk_button_get_image(GTK_BUTTON(m_widget)); - if ( image && !bitmap.IsOk() ) - { - gtk_container_remove(GTK_CONTAINER(m_widget), image); - } - else if ( !image && bitmap.IsOk() ) - { - image = gtk_image_new(); - gtk_button_set_image(GTK_BUTTON(m_widget), image); - } - else // image presence or absence didn't change - { - // don't invalidate best size below - break; - } - - InvalidateBestSize(); - } -#endif // GTK+ 2.6+ - break; - - case State_Pressed: - if ( bitmap.IsOk() ) - { - if ( !m_bitmaps[which].IsOk() ) - { - // we need to install the callbacks to be notified about - // the button pressed state change - g_signal_connect - ( - m_widget, - "pressed", - G_CALLBACK(wxgtk_button_press_callback), - this - ); - - g_signal_connect - ( - m_widget, - "released", - G_CALLBACK(wxgtk_button_released_callback), - this - ); - } - } - else // no valid bitmap - { - if ( m_bitmaps[which].IsOk() ) - { - // we don't need to be notified about the button pressed - // state changes any more - g_signal_handlers_disconnect_by_func - ( - m_widget, - (gpointer)wxgtk_button_press_callback, - this - ); - - g_signal_handlers_disconnect_by_func - ( - m_widget, - (gpointer)wxgtk_button_released_callback, - this - ); - - // also make sure we don't remain stuck in pressed state - if ( m_isPressed ) - { - m_isPressed = false; - GTKUpdateBitmap(); - } - } - } - break; - - case State_Current: - // the logic here is the same as above for State_Pressed: we need - // to connect the handlers if we must be notified about the changes - // in the button current state and we disconnect them when/if we - // don't need them any more - if ( bitmap.IsOk() ) - { - if ( !m_bitmaps[which].IsOk() ) - { - g_signal_connect - ( - m_widget, - "enter", - G_CALLBACK(wxgtk_button_enter_callback), - this - ); - - g_signal_connect - ( - m_widget, - "leave", - G_CALLBACK(wxgtk_button_leave_callback), - this - ); - } - } - else // no valid bitmap - { - if ( m_bitmaps[which].IsOk() ) - { - g_signal_handlers_disconnect_by_func - ( - m_widget, - (gpointer)wxgtk_button_enter_callback, - this - ); - - g_signal_handlers_disconnect_by_func - ( - m_widget, - (gpointer)wxgtk_button_leave_callback, - this - ); - - if ( m_isCurrent ) - { - m_isCurrent = false; - GTKUpdateBitmap(); - } - } - } - break; - - case State_Focused: - if ( bitmap.IsOk() ) - { - Connect(wxEVT_SET_FOCUS, - wxFocusEventHandler(wxButton::GTKOnFocus)); - Connect(wxEVT_KILL_FOCUS, - wxFocusEventHandler(wxButton::GTKOnFocus)); - } - else // no valid focused bitmap - { - Disconnect(wxEVT_SET_FOCUS, - wxFocusEventHandler(wxButton::GTKOnFocus)); - Disconnect(wxEVT_KILL_FOCUS, - wxFocusEventHandler(wxButton::GTKOnFocus)); - } - break; - - default: - // no callbacks to connect/disconnect - ; - } - - m_bitmaps[which] = bitmap; - - // update the bitmap immediately if necessary, otherwise it will be done - // when the bitmap for the corresponding state is needed the next time by - // GTKUpdateBitmap() - if ( bitmap.IsOk() && which == GTKGetCurrentState() ) - { - GTKDoShowBitmap(bitmap); - } -} - -void wxButton::DoSetBitmapPosition(wxDirection dir) -{ -#ifdef __WXGTK210__ - if ( !gtk_check_version(2,10,0) ) - { - GtkPositionType gtkpos; - switch ( dir ) - { - default: - wxFAIL_MSG( "invalid position" ); - // fall through - - case wxLEFT: - gtkpos = GTK_POS_LEFT; - break; - - case wxRIGHT: - gtkpos = GTK_POS_RIGHT; - break; - - case wxTOP: - gtkpos = GTK_POS_TOP; - break; - - case wxBOTTOM: - gtkpos = GTK_POS_BOTTOM; - break; - } - - gtk_button_set_image_position(GTK_BUTTON(m_widget), gtkpos); - InvalidateBestSize(); - } -#endif // GTK+ 2.10+ -} - #endif // wxUSE_BUTTON diff --git a/Externals/wxWidgets3/src/gtk/calctrl.cpp b/Externals/wxWidgets3/src/gtk/calctrl.cpp index e0d9f9ebf0..e53190e2fb 100644 --- a/Externals/wxWidgets3/src/gtk/calctrl.cpp +++ b/Externals/wxWidgets3/src/gtk/calctrl.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/calctrl.cpp // Purpose: implementation of the wxGtkCalendarCtrl // Author: Marcin Wojdyr -// RCS-ID: $Id: calctrl.cpp 66568 2011-01-04 11:48:14Z VZ $ +// RCS-ID: $Id: calctrl.cpp 70755 2012-02-29 18:13:06Z PC $ // Copyright: (c) 2008 Marcin Wojdyr // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -13,42 +13,33 @@ #pragma hdrstop #endif +#if wxUSE_CALENDARCTRL + #ifndef WX_PRECOMP #endif //WX_PRECOMP -#if wxUSE_CALENDARCTRL - -#include "wx/gtk/private.h" #include "wx/calctrl.h" -#include "wx/gtk/calctrl.h" +#include extern "C" { static void gtk_day_selected_callback(GtkWidget *WXUNUSED(widget), wxGtkCalendarCtrl *cal) { - wxDateTime date = cal->GetDate(); - if (cal->m_selectedDate == date) - return; - - cal->m_selectedDate = date; - - cal->GenerateEvent(wxEVT_CALENDAR_SEL_CHANGED); - // send deprecated event - cal->GenerateEvent(wxEVT_CALENDAR_DAY_CHANGED); + cal->GTKGenerateEvent(wxEVT_CALENDAR_SEL_CHANGED); } static void gtk_day_selected_double_click_callback(GtkWidget *WXUNUSED(widget), wxGtkCalendarCtrl *cal) { - cal->GenerateEvent(wxEVT_CALENDAR_DOUBLECLICKED); + cal->GTKGenerateEvent(wxEVT_CALENDAR_DOUBLECLICKED); } static void gtk_month_changed_callback(GtkWidget *WXUNUSED(widget), wxGtkCalendarCtrl *cal) { - cal->GenerateEvent(wxEVT_CALENDAR_PAGE_CHANGED); + cal->GTKGenerateEvent(wxEVT_CALENDAR_PAGE_CHANGED); } // callbacks that send deprecated events @@ -56,13 +47,13 @@ static void gtk_month_changed_callback(GtkWidget *WXUNUSED(widget), static void gtk_prev_month_callback(GtkWidget *WXUNUSED(widget), wxGtkCalendarCtrl *cal) { - cal->GenerateEvent(wxEVT_CALENDAR_MONTH_CHANGED); + cal->GTKGenerateEvent(wxEVT_CALENDAR_MONTH_CHANGED); } static void gtk_prev_year_callback(GtkWidget *WXUNUSED(widget), wxGtkCalendarCtrl *cal) { - cal->GenerateEvent(wxEVT_CALENDAR_YEAR_CHANGED); + cal->GTKGenerateEvent(wxEVT_CALENDAR_YEAR_CHANGED); } } @@ -127,6 +118,74 @@ bool wxGtkCalendarCtrl::Create(wxWindow *parent, return true; } +void wxGtkCalendarCtrl::GTKGenerateEvent(wxEventType type) +{ + // First check if the new date is in the specified range. + wxDateTime dt = GetDate(); + if ( !IsInValidRange(dt) ) + { + if ( m_validStart.IsValid() && dt < m_validStart ) + dt = m_validStart; + else + dt = m_validEnd; + + SetDate(dt); + + return; + } + + if ( type == wxEVT_CALENDAR_SEL_CHANGED ) + { + // Don't generate this event if the new date is the same as the old + // one. + if ( m_selectedDate == dt ) + return; + + m_selectedDate = dt; + + GenerateEvent(type); + + // Also send the deprecated event together with the new one. + GenerateEvent(wxEVT_CALENDAR_DAY_CHANGED); + } + else + { + GenerateEvent(type); + } +} + +bool wxGtkCalendarCtrl::IsInValidRange(const wxDateTime& dt) const +{ + return (!m_validStart.IsValid() || m_validStart <= dt) && + (!m_validEnd.IsValid() || dt <= m_validEnd); +} + +bool +wxGtkCalendarCtrl::SetDateRange(const wxDateTime& lowerdate, + const wxDateTime& upperdate) +{ + if ( lowerdate.IsValid() && upperdate.IsValid() && lowerdate >= upperdate ) + return false; + + m_validStart = lowerdate; + m_validEnd = upperdate; + + return true; +} + +bool +wxGtkCalendarCtrl::GetDateRange(wxDateTime *lowerdate, + wxDateTime *upperdate) const +{ + if ( lowerdate ) + *lowerdate = m_validStart; + if ( upperdate ) + *upperdate = m_validEnd; + + return m_validStart.IsValid() || m_validEnd.IsValid(); +} + + bool wxGtkCalendarCtrl::EnableMonthChange(bool enable) { if ( !wxCalendarCtrlBase::EnableMonthChange(enable) ) @@ -140,8 +199,13 @@ bool wxGtkCalendarCtrl::EnableMonthChange(bool enable) bool wxGtkCalendarCtrl::SetDate(const wxDateTime& date) { + if ( date.IsValid() && !IsInValidRange(date) ) + return false; + g_signal_handlers_block_by_func(m_widget, (gpointer) gtk_day_selected_callback, this); + g_signal_handlers_block_by_func(m_widget, + (gpointer) gtk_month_changed_callback, this); m_selectedDate = date; int year = date.GetYear(); @@ -150,6 +214,8 @@ bool wxGtkCalendarCtrl::SetDate(const wxDateTime& date) gtk_calendar_select_month(GTK_CALENDAR(m_widget), month, year); gtk_calendar_select_day(GTK_CALENDAR(m_widget), day); + g_signal_handlers_unblock_by_func( m_widget, + (gpointer) gtk_month_changed_callback, this); g_signal_handlers_unblock_by_func( m_widget, (gpointer) gtk_day_selected_callback, this); @@ -158,9 +224,22 @@ bool wxGtkCalendarCtrl::SetDate(const wxDateTime& date) wxDateTime wxGtkCalendarCtrl::GetDate() const { - guint year, month, day; - gtk_calendar_get_date(GTK_CALENDAR(m_widget), &year, &month, &day); - return wxDateTime(day, (wxDateTime::Month) month, year); + guint year, monthGTK, day; + gtk_calendar_get_date(GTK_CALENDAR(m_widget), &year, &monthGTK, &day); + + // GTK may return an invalid date, this happens at least when switching the + // month (or the year in case of February in a leap year) and the new month + // has fewer days than the currently selected one making the currently + // selected day invalid, e.g. just choosing May 31 and going back a month + // results in the date being (non existent) April 31 when we're called from + // gtk_prev_month_callback(). We need to manually work around this to avoid + // asserts from wxDateTime ctor. + const wxDateTime::Month month = static_cast(monthGTK); + const guint dayMax = wxDateTime::GetNumberOfDays(month, year); + if ( day > dayMax ) + day = dayMax; + + return wxDateTime(day, month, year); } void wxGtkCalendarCtrl::Mark(size_t day, bool mark) diff --git a/Externals/wxWidgets3/src/gtk/checkbox.cpp b/Externals/wxWidgets3/src/gtk/checkbox.cpp index 8681002c00..4d8c63e203 100644 --- a/Externals/wxWidgets3/src/gtk/checkbox.cpp +++ b/Externals/wxWidgets3/src/gtk/checkbox.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/checkbox.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: checkbox.cpp 66555 2011-01-04 08:31:53Z SC $ +// Id: $Id: checkbox.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -131,7 +131,7 @@ bool wxCheckBox::Create(wxWindow *parent, else { m_widgetCheckbox = gtk_check_button_new_with_label(""); - m_widgetLabel = GTK_BIN(m_widgetCheckbox)->child; + m_widgetLabel = gtk_bin_get_child(GTK_BIN(m_widgetCheckbox)); m_widget = m_widgetCheckbox; } g_object_ref(m_widget); diff --git a/Externals/wxWidgets3/src/gtk/choice.cpp b/Externals/wxWidgets3/src/gtk/choice.cpp index d153260565..0c7f552a4a 100644 --- a/Externals/wxWidgets3/src/gtk/choice.cpp +++ b/Externals/wxWidgets3/src/gtk/choice.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/choice.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: choice.cpp 66555 2011-01-04 08:31:53Z SC $ +// Id: $Id: choice.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -334,7 +334,7 @@ void wxChoice::GTKEnableEvents() GdkWindow *wxChoice::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const { - return m_widget->window; + return gtk_widget_get_window(m_widget); } // Notice that this method shouldn't be necessary, because GTK calculates @@ -371,7 +371,7 @@ wxSize wxChoice::DoGetBestSize() const void wxChoice::DoApplyWidgetStyle(GtkRcStyle *style) { gtk_widget_modify_style(m_widget, style); - gtk_widget_modify_style(GTK_BIN(m_widget)->child, style); + gtk_widget_modify_style(gtk_bin_get_child(GTK_BIN(m_widget)), style); } diff --git a/Externals/wxWidgets3/src/gtk/clipbrd.cpp b/Externals/wxWidgets3/src/gtk/clipbrd.cpp index 678c9d9466..f60a8cc836 100644 --- a/Externals/wxWidgets3/src/gtk/clipbrd.cpp +++ b/Externals/wxWidgets3/src/gtk/clipbrd.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/clipbrd.cpp // Purpose: wxClipboard implementation for wxGTK // Author: Robert Roebling, Vadim Zeitlin -// Id: $Id: clipbrd.cpp 67229 2011-03-18 09:16:19Z VZ $ +// Id: $Id: clipbrd.cpp 69454 2011-10-18 21:54:53Z VZ $ // Copyright: (c) 1998 Robert Roebling // (c) 2007 Vadim Zeitlin // Licence: wxWindows licence @@ -133,11 +133,15 @@ targets_selection_received( GtkWidget *WXUNUSED(widget), wxON_BLOCK_EXIT1(wxClipboardSync::OnDone, clipboard); - if ( !selection_data || selection_data->length <= 0 ) + if (!selection_data) + return; + + const int selection_data_length = gtk_selection_data_get_length(selection_data); + if (selection_data_length <= 0) return; // make sure we got the data in the correct form - GdkAtom type = selection_data->type; + GdkAtom type = gtk_selection_data_get_data_type(selection_data); if ( type != GDK_SELECTION_TYPE_ATOM ) { if ( strcmp(wxGtkString(gdk_atom_name(type)), "TARGETS") != 0 ) @@ -151,14 +155,14 @@ targets_selection_received( GtkWidget *WXUNUSED(widget), // it's not really a format, of course, but we can reuse its GetId() method // to format this atom as string - wxDataFormat clip(selection_data->selection); + wxDataFormat clip(gtk_selection_data_get_selection(selection_data)); wxLogTrace( TRACE_CLIPBOARD, wxT("Received available formats for clipboard %s"), clip.GetId().c_str() ); // the atoms we received, holding a list of targets (= formats) - const GdkAtom * const atoms = (GdkAtom *)selection_data->data; - for ( size_t i = 0; i < selection_data->length/sizeof(GdkAtom); i++ ) + const GdkAtom* const atoms = (GdkAtom*)gtk_selection_data_get_data(selection_data); + for (size_t i = 0; i < selection_data_length / sizeof(GdkAtom); i++) { const wxDataFormat format(atoms[i]); @@ -195,7 +199,7 @@ selection_received( GtkWidget *WXUNUSED(widget), wxON_BLOCK_EXIT1(wxClipboardSync::OnDone, clipboard); - if ( !selection_data || selection_data->length <= 0 ) + if (!selection_data || gtk_selection_data_get_length(selection_data) <= 0) return; clipboard->GTKOnSelectionReceived(*selection_data); @@ -262,7 +266,8 @@ selection_handler( GtkWidget *WXUNUSED(widget), if ( !clipboard ) return; - wxDataObject * const data = clipboard->GTKGetDataObject(selection_data->selection); + wxDataObject * const data = clipboard->GTKGetDataObject( + gtk_selection_data_get_selection(selection_data)); if ( !data ) return; @@ -270,7 +275,7 @@ selection_handler( GtkWidget *WXUNUSED(widget), // In particular, it satisfies Klipper, which polls // TIMESTAMP to see if the clipboards content has changed. // It shall return the time which was used to set the data. - if (selection_data->target == g_timestampAtom) + if (gtk_selection_data_get_target(selection_data) == g_timestampAtom) { guint timestamp = GPOINTER_TO_UINT (signal_data); gtk_selection_data_set(selection_data, @@ -284,14 +289,14 @@ selection_handler( GtkWidget *WXUNUSED(widget), return; } - wxDataFormat format( selection_data->target ); + wxDataFormat format(gtk_selection_data_get_target(selection_data)); wxLogTrace(TRACE_CLIPBOARD, wxT("clipboard data in format %s, GtkSelectionData is target=%s type=%s selection=%s timestamp=%u"), format.GetId().c_str(), - wxString::FromAscii(wxGtkString(gdk_atom_name(selection_data->target))).c_str(), - wxString::FromAscii(wxGtkString(gdk_atom_name(selection_data->type))).c_str(), - wxString::FromAscii(wxGtkString(gdk_atom_name(selection_data->selection))).c_str(), + wxString::FromAscii(wxGtkString(gdk_atom_name(gtk_selection_data_get_target(selection_data)))).c_str(), + wxString::FromAscii(wxGtkString(gdk_atom_name(gtk_selection_data_get_data_type(selection_data)))).c_str(), + wxString::FromAscii(wxGtkString(gdk_atom_name(gtk_selection_data_get_selection(selection_data)))).c_str(), GPOINTER_TO_UINT( signal_data ) ); @@ -335,14 +340,16 @@ void wxClipboard::GTKOnSelectionReceived(const GtkSelectionData& sel) { wxCHECK_RET( m_receivedData, wxT("should be inside GetData()") ); - const wxDataFormat format(sel.target); + const wxDataFormat format(gtk_selection_data_get_target(const_cast(&sel))); wxLogTrace(TRACE_CLIPBOARD, wxT("Received selection %s"), format.GetId().c_str()); - if ( !m_receivedData->IsSupportedFormat(format) ) + if ( !m_receivedData->IsSupportedFormat(format, wxDataObject::Set) ) return; - m_receivedData->SetData(format, sel.length, sel.data); + m_receivedData->SetData(format, + gtk_selection_data_get_length(const_cast(&sel)), + gtk_selection_data_get_data(const_cast(&sel))); m_formatSupported = true; } @@ -366,7 +373,11 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget), wxClipboardEvent *event = new wxClipboardEvent(wxEVT_CLIPBOARD_CHANGED); event->SetEventObject( clipboard ); - if ( !selection_data || selection_data->length <= 0 ) + int selection_data_length = 0; + if (selection_data) + selection_data_length = gtk_selection_data_get_length(selection_data); + + if (selection_data_length <= 0) { clipboard->m_sink->QueueEvent( event ); clipboard->m_sink.Release(); @@ -374,7 +385,7 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget), } // make sure we got the data in the correct form - GdkAtom type = selection_data->type; + GdkAtom type = gtk_selection_data_get_data_type(selection_data); if ( type != GDK_SELECTION_TYPE_ATOM ) { if ( strcmp(wxGtkString(gdk_atom_name(type)), "TARGETS") != 0 ) @@ -390,14 +401,14 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget), // it's not really a format, of course, but we can reuse its GetId() method // to format this atom as string - wxDataFormat clip(selection_data->selection); + wxDataFormat clip(gtk_selection_data_get_selection(selection_data)); wxLogTrace( TRACE_CLIPBOARD, wxT("Received available formats for clipboard %s"), clip.GetId().c_str() ); // the atoms we received, holding a list of targets (= formats) - const GdkAtom * const atoms = (GdkAtom *)selection_data->data; - for ( size_t i = 0; i < selection_data->length/sizeof(GdkAtom); i++ ) + const GdkAtom* const atoms = (GdkAtom*)gtk_selection_data_get_data(selection_data); + for (size_t i = 0; i < selection_data_length / sizeof(GdkAtom); i++) { const wxDataFormat format(atoms[i]); @@ -568,7 +579,7 @@ void wxClipboard::Clear() gtk_selection_clear_targets( m_clipboardWidget, GTKGetClipboardAtom() ); if ( gdk_selection_owner_get(GTKGetClipboardAtom()) == - m_clipboardWidget->window ) + gtk_widget_get_window(m_clipboardWidget) ) { wxClipboardSync sync(*this); diff --git a/Externals/wxWidgets3/src/gtk/clrpicker.cpp b/Externals/wxWidgets3/src/gtk/clrpicker.cpp index 1461f76b94..a70c98c24b 100644 --- a/Externals/wxWidgets3/src/gtk/clrpicker.cpp +++ b/Externals/wxWidgets3/src/gtk/clrpicker.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified By: // Created: 15/04/2006 -// Id: $Id: clrpicker.cpp 55288 2008-08-26 16:19:23Z PC $ +// Id: $Id: clrpicker.cpp 70756 2012-02-29 18:29:31Z PC $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -69,7 +69,6 @@ bool wxColourButton::Create( wxWindow *parent, wxWindowID id, m_colour = col; m_widget = gtk_color_button_new_with_color( m_colour.GetColor() ); g_object_ref(m_widget); - gtk_widget_show(m_widget); // GtkColourButton signals g_signal_connect(m_widget, "color-set", diff --git a/Externals/wxWidgets3/src/gtk/collpane.cpp b/Externals/wxWidgets3/src/gtk/collpane.cpp index d3b31dc144..e943a4c7f0 100644 --- a/Externals/wxWidgets3/src/gtk/collpane.cpp +++ b/Externals/wxWidgets3/src/gtk/collpane.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified By: // Created: 8/10/2006 -// Id: $Id: collpane.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: collpane.cpp 70756 2012-02-29 18:29:31Z PC $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -95,7 +95,7 @@ gtk_collapsiblepane_expanded_callback(GObject * WXUNUSED(object), // 1) need to update our size hints // NB: this function call won't actually do any long operation - // (redraw/relayouting/resizing) so that it's flicker-free + // (redraw/relayout/resize) so that it's flicker-free p->SetMinSize(sz); if (p->HasFlag(wxCP_NO_TLW_RESIZE)) @@ -123,7 +123,7 @@ gtk_collapsiblepane_expanded_callback(GObject * WXUNUSED(object), // transition. This may be sometimes undesired but *is* // necessary and if you look carefully, all GTK+ programs using // GtkExpander perform this trick (e.g. the standard "open file" - // dialog of GTK+>=2.4 is not resizeable when the expander is + // dialog of GTK+>=2.4 is not resizable when the expander is // collapsed!) gtk_window_set_resizable (GTK_WINDOW (top->m_widget), p->IsExpanded()); @@ -200,7 +200,6 @@ bool wxCollapsiblePane::Create(wxWindow *parent, m_pPane = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxNO_BORDER, wxS("wxCollapsiblePanePane")); - gtk_widget_show(m_widget); m_parent->DoAddChild( this ); PostCreation(size); @@ -281,8 +280,8 @@ void wxCollapsiblePane::OnSize(wxSizeEvent &ev) GdkWindow *wxCollapsiblePane::GTKGetWindow(wxArrayGdkWindows& windows) const { GtkWidget *label = gtk_expander_get_label_widget( GTK_EXPANDER(m_widget) ); - windows.Add( label->window ); - windows.Add( m_widget->window ); + windows.Add(gtk_widget_get_window(label)); + windows.Add(gtk_widget_get_window(m_widget)); return NULL; } diff --git a/Externals/wxWidgets3/src/gtk/colordlg.cpp b/Externals/wxWidgets3/src/gtk/colordlg.cpp index 3ecc1bb70f..cb01eca93b 100644 --- a/Externals/wxWidgets3/src/gtk/colordlg.cpp +++ b/Externals/wxWidgets3/src/gtk/colordlg.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2004/06/04 -// RCS-ID: $Id: colordlg.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: colordlg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Vaclav Slavik, 2004 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -69,8 +69,9 @@ bool wxColourDialog::Create(wxWindow *parent, wxColourData *data) } #if !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 - GtkColorSelection *sel = - GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget)->colorsel); + GtkColorSelection* sel = GTK_COLOR_SELECTION( + gtk_color_selection_dialog_get_color_selection( + GTK_COLOR_SELECTION_DIALOG(m_widget))); gtk_color_selection_set_has_palette(sel, true); #endif // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 @@ -104,7 +105,7 @@ int wxColourDialog::ShowModal() void wxColourDialog::ColourDataToDialog() { const GdkColor * const - col = m_data.GetColour().Ok() ? m_data.GetColour().GetColor() + col = m_data.GetColour().IsOk() ? m_data.GetColour().GetColor() : NULL; #if wxUSE_LIBHILDON @@ -123,8 +124,9 @@ void wxColourDialog::ColourDataToDialog() hildon_color_chooser_dialog_set_color((HildonColorChooserDialog *)m_widget, &clr); #else // !wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 - GtkColorSelection *sel = - GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget)->colorsel); + GtkColorSelection* sel = GTK_COLOR_SELECTION( + gtk_color_selection_dialog_get_color_selection( + GTK_COLOR_SELECTION_DIALOG(m_widget))); if ( col ) gtk_color_selection_set_current_color(sel, col); @@ -136,7 +138,7 @@ void wxColourDialog::ColourDataToDialog() for (unsigned i = 0; i < 16; i++) { wxColour c = m_data.GetCustomColour(i); - if (c.Ok()) + if (c.IsOk()) { colors[n_colors] = *c.GetColor(); n_colors++; @@ -159,7 +161,7 @@ void wxColourDialog::DialogToColourData() m_data.SetColour(*clr); #elif wxUSE_LIBHILDON2 // !wxUSE_LIBHILDON const GdkColor * const - col = m_data.GetColour().Ok() ? m_data.GetColour().GetColor() : NULL; + col = m_data.GetColour().IsOk() ? m_data.GetColour().GetColor() : NULL; GdkColor clr; if (col) @@ -176,8 +178,9 @@ void wxColourDialog::DialogToColourData() m_data.SetColour(new_color); #else // !wxUSE_LIBHILDON2 - GtkColorSelection *sel = - GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget)->colorsel); + GtkColorSelection* sel = GTK_COLOR_SELECTION( + gtk_color_selection_dialog_get_color_selection( + GTK_COLOR_SELECTION_DIALOG(m_widget))); GdkColor clr; gtk_color_selection_get_current_color(sel, &clr); diff --git a/Externals/wxWidgets3/src/gtk/colour.cpp b/Externals/wxWidgets3/src/gtk/colour.cpp index cf39ae149f..71be846325 100644 --- a/Externals/wxWidgets3/src/gtk/colour.cpp +++ b/Externals/wxWidgets3/src/gtk/colour.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/colour.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: colour.cpp 66555 2011-01-04 08:31:53Z SC $ +// Id: $Id: colour.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -127,49 +127,49 @@ void wxColour::InitRGBA(unsigned char red, unsigned char green, unsigned char bl unsigned char wxColour::Red() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return wxByte(M_COLDATA->m_red >> SHIFT); } unsigned char wxColour::Green() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return wxByte(M_COLDATA->m_green >> SHIFT); } unsigned char wxColour::Blue() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return wxByte(M_COLDATA->m_blue >> SHIFT); } unsigned char wxColour::Alpha() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return M_COLDATA->m_alpha; } void wxColour::CalcPixel( GdkColormap *cmap ) { - if (!Ok()) return; + if (!IsOk()) return; M_COLDATA->AllocColour( cmap ); } int wxColour::GetPixel() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return M_COLDATA->m_color.pixel; } const GdkColor *wxColour::GetColor() const { - wxCHECK_MSG( Ok(), NULL, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), NULL, wxT("invalid colour") ); return &M_COLDATA->m_color; } diff --git a/Externals/wxWidgets3/src/gtk/combobox.cpp b/Externals/wxWidgets3/src/gtk/combobox.cpp index 2ff7dd9e1f..de031ff72d 100644 --- a/Externals/wxWidgets3/src/gtk/combobox.cpp +++ b/Externals/wxWidgets3/src/gtk/combobox.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/combobox.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: combobox.cpp 66555 2011-01-04 08:31:53Z SC $ +// Id: $Id: combobox.cpp 70880 2012-03-11 23:55:19Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -134,7 +134,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, gtk_entry_set_activates_default( entry, !HasFlag(wxTE_PROCESS_ENTER) ); - gtk_entry_set_editable( entry, TRUE ); + gtk_editable_set_editable(GTK_EDITABLE(entry), true); } Append(n, choices); @@ -155,7 +155,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, // wxMSW and also because it doesn't make sense to have a string // which is not a possible choice in a read-only combobox) SetStringSelection(value); - gtk_entry_set_editable( entry, FALSE ); + gtk_editable_set_editable(GTK_EDITABLE(entry), false); } else // editable combobox { @@ -186,12 +186,12 @@ void wxComboBox::GTKCreateComboBoxWidget() m_widget = gtk_combo_box_entry_new_text(); g_object_ref(m_widget); - m_entry = GTK_ENTRY(GTK_BIN(m_widget)->child); + m_entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(m_widget))); } GtkEditable *wxComboBox::GetEditable() const { - return GTK_EDITABLE( GTK_BIN(m_widget)->child ); + return GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(m_widget))); } void wxComboBox::OnChar( wxKeyEvent &event ) @@ -227,12 +227,12 @@ void wxComboBox::EnableTextChangedEvents(bool enable) if ( enable ) { - g_signal_handlers_unblock_by_func(GTK_BIN(m_widget)->child, + g_signal_handlers_unblock_by_func(gtk_bin_get_child(GTK_BIN(m_widget)), (gpointer)gtkcombobox_text_changed_callback, this); } else // disable { - g_signal_handlers_block_by_func(GTK_BIN(m_widget)->child, + g_signal_handlers_block_by_func(gtk_bin_get_child(GTK_BIN(m_widget)), (gpointer)gtkcombobox_text_changed_callback, this); } } @@ -264,7 +264,7 @@ GtkWidget* wxComboBox::GetConnectWidget() GdkWindow* wxComboBox::GTKGetWindow(wxArrayGdkWindows& /* windows */) const { - return GetEntry()->text_area; + return gtk_entry_get_text_window(GetEntry()); } // static @@ -282,6 +282,19 @@ void wxComboBox::SetValue(const wxString& value) wxTextEntry::SetValue(value); } +void wxComboBox::SetString(unsigned int n, const wxString& text) +{ + wxChoice::SetString(n, text); + + if ( static_cast(n) == GetSelection() ) + { + // We also need to update the currently shown text, for consistency + // with wxMSW and also because it makes sense as leaving the old string + // in the text but not in the list would be confusing to the user. + SetValue(text); + } +} + // ---------------------------------------------------------------------------- // standard event handling // ---------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/gtk/control.cpp b/Externals/wxWidgets3/src/gtk/control.cpp index 1b1100e15e..22bda642ac 100644 --- a/Externals/wxWidgets3/src/gtk/control.cpp +++ b/Externals/wxWidgets3/src/gtk/control.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/control.cpp // Purpose: wxControl implementation for wxGTK // Author: Robert Roebling -// Id: $Id: control.cpp 67062 2011-02-27 12:48:07Z VZ $ +// Id: $Id: control.cpp 70714 2012-02-27 17:49:33Z PC $ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -229,9 +229,6 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, return wxWindow::GetClassDefaultAttributes(wxWINDOW_VARIANT_NORMAL); } - if (state == -1) - state = GTK_STATE_NORMAL; - // get the style's colours attr.colFg = wxColour(style->fg[state]); if (useBase) @@ -245,8 +242,9 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, if ( style && style->font_desc ) { wxNativeFontInfo info; - info.description = pango_font_description_copy(style->font_desc); + info.description = style->font_desc; attr.font = wxFont(info); + info.description = NULL; } else { diff --git a/Externals/wxWidgets3/src/gtk/cursor.cpp b/Externals/wxWidgets3/src/gtk/cursor.cpp index 23600d0bed..8f4b5f6ea2 100644 --- a/Externals/wxWidgets3/src/gtk/cursor.cpp +++ b/Externals/wxWidgets3/src/gtk/cursor.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/cursor.cpp // Purpose: wxCursor implementation // Author: Robert Roebling -// Id: $Id: cursor.cpp 66371 2010-12-14 18:43:25Z VZ $ +// Id: $Id: cursor.cpp 68685 2011-08-13 16:17:59Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,6 +22,7 @@ #include #include "wx/gtk/private/object.h" +#include "wx/gtk/private/gtk2-compat.h" //----------------------------------------------------------------------------- // wxCursorRefData @@ -109,8 +110,10 @@ wxCursor::wxCursor(const char bits[], int width, int height, if (hotSpotY < 0 || hotSpotY >= height) hotSpotY = 0; - GdkBitmap *data = gdk_bitmap_create_from_data( wxGetRootWindow()->window, (gchar *) bits, width, height ); - GdkBitmap *mask = gdk_bitmap_create_from_data( wxGetRootWindow()->window, (gchar *) maskBits, width, height); + GdkBitmap* data = gdk_bitmap_create_from_data( + gtk_widget_get_window(wxGetRootWindow()), const_cast(bits), width, height); + GdkBitmap* mask = gdk_bitmap_create_from_data( + gtk_widget_get_window(wxGetRootWindow()), const_cast(maskBits), width, height); m_refData = new wxCursorRefData; M_CURSORDATA->m_cursor = gdk_cursor_new_from_pixmap( @@ -221,7 +224,7 @@ void wxCursor::InitFromImage( const wxImage & image ) m_refData = new wxCursorRefData; wxImage image_copy(image); - GdkDisplay* display = gdk_drawable_get_display(wxGetRootWindow()->window); + GdkDisplay* display = gdk_drawable_get_display(gtk_widget_get_window(wxGetRootWindow())); if (gdk_display_supports_cursor_color(display)) { if (!image.HasAlpha()) @@ -257,7 +260,7 @@ void wxCursor::InitFromImage( const wxImage & image ) char* bits = new char[size]; memset(bits, 0xff, size); maskRaw = gdk_bitmap_create_from_data( - wxGetRootWindow()->window, bits, w, h); + gtk_widget_get_window(wxGetRootWindow()), bits, w, h); delete[] bits; } @@ -387,16 +390,15 @@ const wxCursor wxBusyCursor::GetBusyCursor() return wxCursor(wxCURSOR_WATCH); } -static void UpdateCursors(const wxWindowList& list, GdkDisplay*& display) +static void UpdateCursors(GdkDisplay** display) { - wxWindowList::const_iterator i = list.begin(); - for (size_t n = list.size(); n--; ++i) + wxWindowList::const_iterator i = wxTopLevelWindows.begin(); + for (size_t n = wxTopLevelWindows.size(); n--; ++i) { wxWindow* win = *i; - if (display == NULL && win->m_widget && win->m_widget->window) - display = gdk_drawable_get_display(win->m_widget->window); - win->GTKUpdateCursor(true, false); - UpdateCursors(win->GetChildren(), display); + win->GTKUpdateCursor(); + if (display && *display == NULL && win->m_widget) + *display = gtk_widget_get_display(win->m_widget); } } @@ -407,8 +409,7 @@ void wxEndBusyCursor() g_globalCursor = gs_savedCursor; gs_savedCursor = wxNullCursor; - GdkDisplay* unused = NULL; - UpdateCursors(wxTopLevelWindows, unused); + UpdateCursors(NULL); } void wxBeginBusyCursor(const wxCursor* cursor) @@ -416,13 +417,13 @@ void wxBeginBusyCursor(const wxCursor* cursor) if (gs_busyCount++ > 0) return; - wxASSERT_MSG( !gs_savedCursor.Ok(), + wxASSERT_MSG( !gs_savedCursor.IsOk(), wxT("forgot to call wxEndBusyCursor, will leak memory") ); gs_savedCursor = g_globalCursor; g_globalCursor = *cursor; GdkDisplay* display = NULL; - UpdateCursors(wxTopLevelWindows, display); + UpdateCursors(&display); if (display) gdk_display_flush(display); } @@ -435,6 +436,5 @@ bool wxIsBusy() void wxSetCursor( const wxCursor& cursor ) { g_globalCursor = cursor; - GdkDisplay* unused = NULL; - UpdateCursors(wxTopLevelWindows, unused); + UpdateCursors(NULL); } diff --git a/Externals/wxWidgets3/src/gtk/dataobj.cpp b/Externals/wxWidgets3/src/gtk/dataobj.cpp index 5637c53213..2003320cbc 100644 --- a/Externals/wxWidgets3/src/gtk/dataobj.cpp +++ b/Externals/wxWidgets3/src/gtk/dataobj.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/dataobj.cpp // Purpose: wxDataObject class // Author: Robert Roebling -// Id: $Id: dataobj.cpp 54741 2008-07-21 03:35:15Z VZ $ +// Id: $Id: dataobj.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -384,12 +384,12 @@ bool wxBitmapDataObject::SetData(size_t size, const void *buf) m_bitmap = wxBitmap(image); - return m_bitmap.Ok(); + return m_bitmap.IsOk(); } void wxBitmapDataObject::DoConvertToPng() { - if ( !m_bitmap.Ok() ) + if ( !m_bitmap.IsOk() ) return; wxCHECK_RET( wxImage::FindHandler(wxBITMAP_TYPE_PNG) != NULL, diff --git a/Externals/wxWidgets3/src/gtk/dataview.cpp b/Externals/wxWidgets3/src/gtk/dataview.cpp index 8f63d624fc..138856c567 100644 --- a/Externals/wxWidgets3/src/gtk/dataview.cpp +++ b/Externals/wxWidgets3/src/gtk/dataview.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/dataview.cpp // Purpose: wxDataViewCtrl GTK+2 implementation // Author: Robert Roebling -// Id: $Id: dataview.cpp 67120 2011-03-03 17:51:52Z PC $ +// Id: $Id: dataview.cpp 70457 2012-01-25 00:05:03Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -25,7 +25,6 @@ #endif #include "wx/stockitem.h" -#include "wx/calctrl.h" #include "wx/popupwin.h" #include "wx/listimpl.cpp" @@ -34,6 +33,8 @@ #include "wx/gtk/dcclient.h" #include "wx/gtk/private/gdkconv.h" +#include "wx/gtk/private/list.h" +#include "wx/gtk/private/event.h" using namespace wxGTKImpl; class wxGtkDataViewModelNotifier; @@ -98,6 +99,26 @@ private: wxDECLARE_NO_COPY_CLASS(wxGtkTreePath); }; +// ---------------------------------------------------------------------------- +// wxGtkTreePathList: self-destroying list of GtkTreePath objects. +// ---------------------------------------------------------------------------- + +class wxGtkTreePathList : public wxGtkList +{ +public: + // Ctor takes ownership of the list. + explicit wxGtkTreePathList(GList* list) + : wxGtkList(list) + { + } + + ~wxGtkTreePathList() + { + // Delete the list contents, wxGtkList will delete the list itself. + g_list_foreach(m_list, (GFunc)gtk_tree_path_free, NULL); + } +}; + // ---------------------------------------------------------------------------- // wxGtkTreeSelectionLock: prevent selection from changing during the // lifetime of this object @@ -258,7 +279,7 @@ public: // item can be deleted already in the model int GetIndexOf( const wxDataViewItem &parent, const wxDataViewItem &item ); - virtual void OnInternalIdle(); + void OnInternalIdle(); protected: void InitTree(); @@ -300,7 +321,7 @@ private: static int LINKAGEMODE wxGtkTreeModelChildCmp( void** id1, void** id2 ) { - int ret = gs_internal->GetDataViewModel()->Compare( *id1, *id2, + int ret = gs_internal->GetDataViewModel()->Compare( wxDataViewItem(*id1), wxDataViewItem(*id2), gs_internal->GetSortColumn(), (gs_internal->GetSortOrder() == GTK_SORT_ASCENDING) ); return ret; @@ -331,7 +352,7 @@ public: } } - unsigned int AddNode( wxGtkTreeModelNode* child ) + void AddNode( wxGtkTreeModelNode* child ) { m_nodes.Add( child ); @@ -343,24 +364,54 @@ public: { gs_internal = m_internal; m_children.Sort( &wxGtkTreeModelChildCmp ); - return m_children.Index( id ); } - - return m_children.GetCount()-1; } - unsigned int AddLeave( void* id ) + void InsertNode( wxGtkTreeModelNode* child, unsigned pos ) { - m_children.Add( id ); + if (m_internal->IsSorted() || m_internal->GetDataViewModel()->HasDefaultCompare()) + { + AddNode(child); + return; + } + + void *id = child->GetItem().GetID(); + + // Insert into m_nodes so that the order of nodes in m_nodes is the + // same as the order of their corresponding IDs in m_children: + const unsigned int count = m_nodes.GetCount(); + bool inserted = false; + for (unsigned i = 0; i < count; i++) + { + wxGtkTreeModelNode *node = m_nodes[i]; + int posInChildren = m_children.Index(node->GetItem().GetID()); + if ( (unsigned)posInChildren >= pos ) + { + m_nodes.Insert(child, i); + inserted = true; + break; + } + } + if ( !inserted ) + m_nodes.Add(child); + + m_children.Insert( id, pos ); + } + + void AddLeaf( void* id ) + { + InsertLeaf(id, m_children.size()); + } + + void InsertLeaf( void* id, unsigned pos ) + { + m_children.Insert( id, pos ); if (m_internal->IsSorted() || m_internal->GetDataViewModel()->HasDefaultCompare()) { gs_internal = m_internal; m_children.Sort( &wxGtkTreeModelChildCmp ); - return m_children.Index( id ); } - - return m_children.GetCount()-1; } void DeleteChild( void* id ) @@ -381,6 +432,20 @@ public: } } + // returns position of child node for given item in children list or wxNOT_FOUND + int FindChildByItem(const wxDataViewItem& item) const + { + const void* itemId = item.GetID(); + const wxGtkTreeModelChildren& nodes = m_children; + const int len = nodes.size(); + for ( int i = 0; i < len; i++ ) + { + if ( nodes[i] == itemId ) + return i; + } + return wxNOT_FOUND; + } + wxGtkTreeModelNode* GetParent() { return m_parent; } wxGtkTreeModelNodes &GetNodes() @@ -419,15 +484,11 @@ extern "C" { #define GTK_TYPE_WX_TREE_MODEL (gtk_wx_tree_model_get_type ()) #define GTK_WX_TREE_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WX_TREE_MODEL, GtkWxTreeModel)) -#define GTK_WX_TREE_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WX_TREE_MODEL, GtkWxTreeModelClass)) #define GTK_IS_WX_TREE_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WX_TREE_MODEL)) #define GTK_IS_WX_TREE_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WX_TREE_MODEL)) -#define GTK_WX_TREE_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WX_TREE_MODEL, GtkWxTreeModelClass)) GType gtk_wx_tree_model_get_type (void); -typedef struct _GtkWxTreeModelClass GtkWxTreeModelClass; - struct _GtkWxTreeModel { GObject parent; @@ -437,21 +498,14 @@ struct _GtkWxTreeModel wxDataViewCtrlInternal *internal; }; -struct _GtkWxTreeModelClass -{ - GObjectClass list_parent_class; -}; - static GtkWxTreeModel *wxgtk_tree_model_new (void); -static void wxgtk_tree_model_init (GtkWxTreeModel *tree_model); -static void wxgtk_tree_model_class_init (GtkWxTreeModelClass *klass); +static void wxgtk_tree_model_init (GTypeInstance* instance, void*); -static void wxgtk_tree_model_tree_model_init (GtkTreeModelIface *iface); -static void wxgtk_tree_model_sortable_init (GtkTreeSortableIface *iface); -static void wxgtk_tree_model_drag_source_init(GtkTreeDragSourceIface *iface); -static void wxgtk_tree_model_drag_dest_init (GtkTreeDragDestIface *iface); +static void wxgtk_tree_model_tree_model_init (void* g_iface, void*); +static void wxgtk_tree_model_sortable_init (void* g_iface, void*); +static void wxgtk_tree_model_drag_source_init(void* g_iface, void*); +static void wxgtk_tree_model_drag_dest_init (void* g_iface, void*); -static void wxgtk_tree_model_finalize (GObject *object); static GtkTreeModelFlags wxgtk_tree_model_get_flags (GtkTreeModel *tree_model); static gint wxgtk_tree_model_get_n_columns (GtkTreeModel *tree_model); static GType wxgtk_tree_model_get_column_type (GtkTreeModel *tree_model, @@ -493,11 +547,11 @@ static void wxgtk_tree_model_set_sort_func (GtkTreeSortable *s gint sort_column_id, GtkTreeIterCompareFunc func, gpointer data, - GtkDestroyNotify destroy); + GDestroyNotify destroy); static void wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortable, GtkTreeIterCompareFunc func, gpointer data, - GtkDestroyNotify destroy); + GDestroyNotify destroy); static gboolean wxgtk_tree_model_has_default_sort_func (GtkTreeSortable *sortable); /* drag'n'drop */ @@ -515,9 +569,6 @@ static gboolean wxgtk_tree_model_row_drop_possible (GtkTreeDragDest *d GtkTreePath *dest_path, GtkSelectionData *selection_data); - -static GObjectClass *list_parent_class = NULL; - GType gtk_wx_tree_model_get_type (void) { @@ -527,41 +578,41 @@ gtk_wx_tree_model_get_type (void) { const GTypeInfo tree_model_info = { - sizeof (GtkWxTreeModelClass), + sizeof (GObjectClass), NULL, /* base_init */ NULL, /* base_finalize */ - (GClassInitFunc) wxgtk_tree_model_class_init, + NULL, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkWxTreeModel), 0, - (GInstanceInitFunc) wxgtk_tree_model_init, + wxgtk_tree_model_init, }; static const GInterfaceInfo tree_model_iface_info = { - (GInterfaceInitFunc) wxgtk_tree_model_tree_model_init, + wxgtk_tree_model_tree_model_init, NULL, NULL }; static const GInterfaceInfo sortable_iface_info = { - (GInterfaceInitFunc) wxgtk_tree_model_sortable_init, + wxgtk_tree_model_sortable_init, NULL, NULL }; static const GInterfaceInfo drag_source_iface_info = { - (GInterfaceInitFunc) wxgtk_tree_model_drag_source_init, + wxgtk_tree_model_drag_source_init, NULL, NULL }; static const GInterfaceInfo drag_dest_iface_info = { - (GInterfaceInitFunc) wxgtk_tree_model_drag_dest_init, + wxgtk_tree_model_drag_dest_init, NULL, NULL }; @@ -594,16 +645,9 @@ wxgtk_tree_model_new(void) } static void -wxgtk_tree_model_class_init (GtkWxTreeModelClass *klass) -{ - list_parent_class = (GObjectClass*) g_type_class_peek_parent (klass); - GObjectClass *object_class = (GObjectClass*) klass; - object_class->finalize = wxgtk_tree_model_finalize; -} - -static void -wxgtk_tree_model_tree_model_init (GtkTreeModelIface *iface) +wxgtk_tree_model_tree_model_init(void* g_iface, void*) { + GtkTreeModelIface* iface = static_cast(g_iface); iface->get_flags = wxgtk_tree_model_get_flags; iface->get_n_columns = wxgtk_tree_model_get_n_columns; iface->get_column_type = wxgtk_tree_model_get_column_type; @@ -619,8 +663,9 @@ wxgtk_tree_model_tree_model_init (GtkTreeModelIface *iface) } static void -wxgtk_tree_model_sortable_init (GtkTreeSortableIface *iface) +wxgtk_tree_model_sortable_init(void* g_iface, void*) { + GtkTreeSortableIface* iface = static_cast(g_iface); iface->get_sort_column_id = wxgtk_tree_model_get_sort_column_id; iface->set_sort_column_id = wxgtk_tree_model_set_sort_column_id; iface->set_sort_func = wxgtk_tree_model_set_sort_func; @@ -629,34 +674,30 @@ wxgtk_tree_model_sortable_init (GtkTreeSortableIface *iface) } static void -wxgtk_tree_model_drag_source_init(GtkTreeDragSourceIface *iface) +wxgtk_tree_model_drag_source_init(void* g_iface, void*) { + GtkTreeDragSourceIface* iface = static_cast(g_iface); iface->row_draggable = wxgtk_tree_model_row_draggable; iface->drag_data_delete = wxgtk_tree_model_drag_data_delete; iface->drag_data_get = wxgtk_tree_model_drag_data_get; } static void -wxgtk_tree_model_drag_dest_init (GtkTreeDragDestIface *iface) +wxgtk_tree_model_drag_dest_init(void* g_iface, void*) { + GtkTreeDragDestIface* iface = static_cast(g_iface); iface->drag_data_received = wxgtk_tree_model_drag_data_received; iface->row_drop_possible = wxgtk_tree_model_row_drop_possible; } static void -wxgtk_tree_model_init (GtkWxTreeModel *tree_model) +wxgtk_tree_model_init(GTypeInstance* instance, void*) { + GtkWxTreeModel* tree_model = GTK_WX_TREE_MODEL(instance); tree_model->internal = NULL; tree_model->stamp = g_random_int(); } -static void -wxgtk_tree_model_finalize (GObject *object) -{ - /* must chain up */ - (* list_parent_class->finalize) (object); -} - } // extern "C" //----------------------------------------------------------------------------- @@ -966,7 +1007,7 @@ wxgtk_tree_model_set_sort_func (GtkTreeSortable *sortable, gint WXUNUSED(sort_column_id), GtkTreeIterCompareFunc func, gpointer WXUNUSED(data), - GtkDestroyNotify WXUNUSED(destroy)) + GDestroyNotify WXUNUSED(destroy)) { g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) ); g_return_if_fail (func != NULL); @@ -976,7 +1017,7 @@ static void wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortable, GtkTreeIterCompareFunc func, gpointer WXUNUSED(data), - GtkDestroyNotify WXUNUSED(destroy)) + GDestroyNotify WXUNUSED(destroy)) { g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) ); g_return_if_fail (func != NULL); @@ -1001,15 +1042,12 @@ extern "C" { #define GTK_TYPE_WX_CELL_RENDERER_TEXT (gtk_wx_cell_renderer_text_get_type ()) #define GTK_WX_CELL_RENDERER_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WX_CELL_RENDERER_TEXT, GtkWxCellRendererText)) -#define GTK_WX_CELL_RENDERER_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WX_CELL_RENDERER_TEXT, GtkWxCellRendererTextClass)) #define GTK_IS_WX_CELL_RENDERER_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WX_CELL_RENDERER_TEXT)) #define GTK_IS_WX_CELL_RENDERER_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WX_CELL_RENDERER_TEXT)) -#define GTK_WX_CELL_RENDERER_TEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WX_CELL_RENDERER_TEXT, GtkWxCellRendererTextClass)) GType gtk_wx_cell_renderer_text_get_type (void); typedef struct _GtkWxCellRendererText GtkWxCellRendererText; -typedef struct _GtkWxCellRendererTextClass GtkWxCellRendererTextClass; struct _GtkWxCellRendererText { @@ -1018,19 +1056,11 @@ struct _GtkWxCellRendererText wxDataViewRenderer *wx_renderer; }; -struct _GtkWxCellRendererTextClass -{ - GtkCellRendererTextClass cell_parent_class; -}; - - static GtkWxCellRendererText *gtk_wx_cell_renderer_text_new (void); static void gtk_wx_cell_renderer_text_init ( - GtkWxCellRendererText *cell ); + GTypeInstance* instance, void*); static void gtk_wx_cell_renderer_text_class_init( - GtkWxCellRendererTextClass *klass ); -static void gtk_wx_cell_renderer_text_finalize ( - GObject *object ); + void* klass, void*); static GtkCellEditable *gtk_wx_cell_renderer_text_start_editing( GtkCellRenderer *cell, GdkEvent *event, @@ -1054,15 +1084,15 @@ gtk_wx_cell_renderer_text_get_type (void) { const GTypeInfo cell_wx_info = { - sizeof (GtkWxCellRendererTextClass), + sizeof (GtkCellRendererTextClass), NULL, /* base_init */ NULL, /* base_finalize */ - (GClassInitFunc) gtk_wx_cell_renderer_text_class_init, + gtk_wx_cell_renderer_text_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkWxCellRendererText), 0, /* n_preallocs */ - (GInstanceInitFunc) gtk_wx_cell_renderer_text_init, + gtk_wx_cell_renderer_text_init, }; cell_wx_type = g_type_register_static( GTK_TYPE_CELL_RENDERER_TEXT, @@ -1073,31 +1103,22 @@ gtk_wx_cell_renderer_text_get_type (void) } static void -gtk_wx_cell_renderer_text_init (GtkWxCellRendererText *cell) +gtk_wx_cell_renderer_text_init(GTypeInstance* instance, void*) { + GtkWxCellRendererText* cell = GTK_WX_CELL_RENDERER_TEXT(instance); cell->wx_renderer = NULL; } static void -gtk_wx_cell_renderer_text_class_init (GtkWxCellRendererTextClass *klass) +gtk_wx_cell_renderer_text_class_init(void* klass, void*) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (klass); text_cell_parent_class = (GObjectClass*) g_type_class_peek_parent (klass); - object_class->finalize = gtk_wx_cell_renderer_text_finalize; - cell_class->start_editing = gtk_wx_cell_renderer_text_start_editing; } -static void -gtk_wx_cell_renderer_text_finalize (GObject *object) -{ - /* must chain up */ - (* G_OBJECT_CLASS (text_cell_parent_class)->finalize) (object); -} - GtkWxCellRendererText* gtk_wx_cell_renderer_text_new (void) { @@ -1143,15 +1164,12 @@ extern "C" { #define GTK_TYPE_WX_CELL_RENDERER (gtk_wx_cell_renderer_get_type ()) #define GTK_WX_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WX_CELL_RENDERER, GtkWxCellRenderer)) -#define GTK_WX_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WX_CELL_RENDERER, GtkWxCellRendererClass)) #define GTK_IS_WX_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WX_CELL_RENDERER)) #define GTK_IS_WX_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WX_CELL_RENDERER)) -#define GTK_WX_CELL_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WX_CELL_RENDERER, GtkWxCellRendererClass)) GType gtk_wx_cell_renderer_get_type (void); typedef struct _GtkWxCellRenderer GtkWxCellRenderer; -typedef struct _GtkWxCellRendererClass GtkWxCellRendererClass; struct _GtkWxCellRenderer { @@ -1159,22 +1177,13 @@ struct _GtkWxCellRenderer /*< private >*/ wxDataViewCustomRenderer *cell; - guint32 last_click; }; -struct _GtkWxCellRendererClass -{ - GtkCellRendererClass cell_parent_class; -}; - - static GtkCellRenderer *gtk_wx_cell_renderer_new (void); static void gtk_wx_cell_renderer_init ( - GtkWxCellRenderer *cell ); + GTypeInstance* instance, void*); static void gtk_wx_cell_renderer_class_init( - GtkWxCellRendererClass *klass ); -static void gtk_wx_cell_renderer_finalize ( - GObject *object ); + void* klass, void*); static void gtk_wx_cell_renderer_get_size ( GtkCellRenderer *cell, GtkWidget *widget, @@ -1208,9 +1217,6 @@ static GtkCellEditable *gtk_wx_cell_renderer_start_editing( GdkRectangle *cell_area, GtkCellRendererState flags ); - -static GObjectClass *cell_parent_class = NULL; - } // extern "C" GType @@ -1222,15 +1228,15 @@ gtk_wx_cell_renderer_get_type (void) { const GTypeInfo cell_wx_info = { - sizeof (GtkWxCellRendererClass), + sizeof (GtkCellRendererClass), NULL, /* base_init */ NULL, /* base_finalize */ - (GClassInitFunc) gtk_wx_cell_renderer_class_init, + gtk_wx_cell_renderer_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkWxCellRenderer), 0, /* n_preallocs */ - (GInstanceInitFunc) gtk_wx_cell_renderer_init, + gtk_wx_cell_renderer_init, }; cell_wx_type = g_type_register_static( GTK_TYPE_CELL_RENDERER, @@ -1241,35 +1247,23 @@ gtk_wx_cell_renderer_get_type (void) } static void -gtk_wx_cell_renderer_init (GtkWxCellRenderer *cell) +gtk_wx_cell_renderer_init(GTypeInstance* instance, void*) { + GtkWxCellRenderer* cell = GTK_WX_CELL_RENDERER(instance); cell->cell = NULL; - cell->last_click = 0; } static void -gtk_wx_cell_renderer_class_init (GtkWxCellRendererClass *klass) +gtk_wx_cell_renderer_class_init(void* klass, void*) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (klass); - cell_parent_class = (GObjectClass*) g_type_class_peek_parent (klass); - - object_class->finalize = gtk_wx_cell_renderer_finalize; - cell_class->get_size = gtk_wx_cell_renderer_get_size; cell_class->render = gtk_wx_cell_renderer_render; cell_class->activate = gtk_wx_cell_renderer_activate; cell_class->start_editing = gtk_wx_cell_renderer_start_editing; } -static void -gtk_wx_cell_renderer_finalize (GObject *object) -{ - /* must chain up */ - (* G_OBJECT_CLASS (cell_parent_class)->finalize) (object); -} - GtkCellRenderer* gtk_wx_cell_renderer_new (void) { @@ -1333,8 +1327,21 @@ gtk_wx_cell_renderer_get_size (GtkCellRenderer *renderer, wxSize size = cell->GetSize(); - gint calc_width = (gint) renderer->xpad * 2 + size.x; - gint calc_height = (gint) renderer->ypad * 2 + size.y; + wxDataViewCtrl * const ctrl = cell->GetOwner()->GetOwner(); + + // Uniform row height, if specified, overrides the value returned by the + // renderer. + if ( !ctrl->HasFlag(wxDV_VARIABLE_LINE_HEIGHT) ) + { + const int uniformHeight = ctrl->GTKGetUniformRowHeight(); + if ( uniformHeight > 0 ) + size.y = uniformHeight; + } + + int xpad, ypad; + gtk_cell_renderer_get_padding(renderer, &xpad, &ypad); + int calc_width = xpad * 2 + size.x; + int calc_height = ypad * 2 + size.y; if (x_offset) *x_offset = 0; @@ -1343,17 +1350,17 @@ gtk_wx_cell_renderer_get_size (GtkCellRenderer *renderer, if (cell_area && size.x > 0 && size.y > 0) { + float xalign, yalign; + gtk_cell_renderer_get_alignment(renderer, &xalign, &yalign); if (x_offset) { - *x_offset = (gint)((renderer->xalign * - (cell_area->width - calc_width - 2 * renderer->xpad))); - *x_offset = MAX (*x_offset, 0) + renderer->xpad; + *x_offset = int(xalign * (cell_area->width - calc_width - 2 * xpad)); + *x_offset = MAX(*x_offset, 0) + xpad; } if (y_offset) { - *y_offset = (gint)((renderer->yalign * - (cell_area->height - calc_height - 2 * renderer->ypad))); - *y_offset = MAX (*y_offset, 0) + renderer->ypad; + *y_offset = int(yalign * (cell_area->height - calc_height - 2 * ypad)); + *y_offset = MAX(*y_offset, 0) + ypad; } } @@ -1364,6 +1371,15 @@ gtk_wx_cell_renderer_get_size (GtkCellRenderer *renderer, *height = calc_height; } +struct wxDataViewCustomRenderer::GTKRenderParams +{ + GdkWindow* window; + GdkRectangle* expose_area; + GtkWidget* widget; + GdkRectangle* background_area; + int flags; +}; + static void gtk_wx_cell_renderer_render (GtkCellRenderer *renderer, GdkWindow *window, @@ -1377,11 +1393,18 @@ gtk_wx_cell_renderer_render (GtkCellRenderer *renderer, GtkWxCellRenderer *wxrenderer = (GtkWxCellRenderer *) renderer; wxDataViewCustomRenderer *cell = wxrenderer->cell; - cell->GTKStashRenderParams(window, widget, - background_area, expose_area, flags); + wxDataViewCustomRenderer::GTKRenderParams renderParams; + renderParams.window = window; + renderParams.expose_area = expose_area; + renderParams.widget = widget; + renderParams.background_area = background_area; + renderParams.flags = flags; + cell->GTKSetRenderParams(&renderParams); wxRect rect(wxRectFromGDKRect(cell_area)); - rect = rect.Deflate(renderer->xpad, renderer->ypad); + int xpad, ypad; + gtk_cell_renderer_get_padding(renderer, &xpad, &ypad); + rect = rect.Deflate(xpad, ypad); wxWindowDC* dc = (wxWindowDC*) cell->GetDC(); wxWindowDCImpl *impl = (wxWindowDCImpl *) dc->GetImpl(); @@ -1407,6 +1430,8 @@ gtk_wx_cell_renderer_render (GtkCellRenderer *renderer, if (flags & GTK_CELL_RENDERER_FOCUSED) state |= wxDATAVIEW_CELL_FOCUSED; cell->WXCallRender( rect, dc, state ); + + cell->GTKSetRenderParams(NULL); } static gboolean @@ -1431,8 +1456,10 @@ gtk_wx_cell_renderer_activate( rect.x += cell_area->x; rect.y += cell_area->y; - rect.width -= renderer->xpad * 2; - rect.height -= renderer->ypad * 2; + int xpad, ypad; + gtk_cell_renderer_get_padding(renderer, &xpad, &ypad); + rect.width -= xpad * 2; + rect.height -= ypad * 2; wxRect renderrect(wxRectFromGDKRect(&rect)); @@ -1443,37 +1470,27 @@ gtk_wx_cell_renderer_activate( unsigned int model_col = cell->GetOwner()->GetModelColumn(); - if (!event) + if ( !event ) { - bool ret = false; - // activated by - if (cell->Activate( renderrect, model, item, model_col )) - ret = true; - - return ret; + return cell->ActivateCell(renderrect, model, item, model_col, NULL); } - else if (event->type == GDK_BUTTON_PRESS) + else if ( event->type == GDK_BUTTON_PRESS ) { - GdkEventButton *button_event = (GdkEventButton*) event; - wxPoint pt( ((int) button_event->x) - renderrect.x, - ((int) button_event->y) - renderrect.y ); - - bool ret = false; - if (button_event->button == 1) + GdkEventButton *button_event = (GdkEventButton*)event; + if ( button_event->button == 1 ) { - if (cell->LeftClick( pt, renderrect, model, item, model_col )) - ret = true; - // TODO: query system double-click time - if (button_event->time - wxrenderer->last_click < 400) - if (cell->Activate( renderrect, model, item, model_col )) - ret = true; - } - wxrenderer->last_click = button_event->time; + wxMouseEvent mouse_event(wxEVT_LEFT_DOWN); + InitMouseEvent(ctrl, mouse_event, button_event); - return ret; + mouse_event.m_x -= renderrect.x; + mouse_event.m_y -= renderrect.y; + + return cell->ActivateCell(renderrect, model, item, model_col, &mouse_event); + } } + wxLogDebug("unexpected event type in gtk_wx_cell_renderer_activate()"); return false; } @@ -1550,12 +1567,14 @@ bool wxGtkDataViewModelNotifier::ItemDeleted( const wxDataViewItem &parent, cons GTK_TREE_MODEL(wxgtk_model), &iter )); #else // so get the path from the parent - GtkTreeIter iter; - iter.stamp = wxgtk_model->stamp; - iter.user_data = (gpointer) parent.GetID(); - wxGtkTreePath path(wxgtk_tree_model_get_path( - GTK_TREE_MODEL(wxgtk_model), &iter )); + GtkTreeIter parentIter; + parentIter.stamp = wxgtk_model->stamp; + parentIter.user_data = (gpointer) parent.GetID(); + wxGtkTreePath parentPath(wxgtk_tree_model_get_path( + GTK_TREE_MODEL(wxgtk_model), &parentIter )); + // and add the final index ourselves + wxGtkTreePath path(gtk_tree_path_copy(parentPath)); int index = m_internal->GetIndexOf( parent, item ); gtk_tree_path_append_index( path, index ); #endif @@ -1565,6 +1584,17 @@ bool wxGtkDataViewModelNotifier::ItemDeleted( const wxDataViewItem &parent, cons m_internal->ItemDeleted( parent, item ); + // Did we remove the last child, causing 'parent' to become a leaf? + if ( !m_wx_model->IsContainer(parent) ) + { + gtk_tree_model_row_has_child_toggled + ( + GTK_TREE_MODEL(wxgtk_model), + parentPath, + &parentIter + ); + } + return true; } @@ -1606,23 +1636,28 @@ bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsig GtkTreeView *widget = GTK_TREE_VIEW(ctrl->GtkGetTreeView()); GtkTreeViewColumn *gcolumn = GTK_TREE_VIEW_COLUMN(column->GetGtkHandle()); - // Get cell area - GtkTreeIter iter; - iter.stamp = wxgtk_model->stamp; - iter.user_data = (gpointer) item.GetID(); - wxGtkTreePath path(wxgtk_tree_model_get_path( - GTK_TREE_MODEL(wxgtk_model), &iter )); - GdkRectangle cell_area; - gtk_tree_view_get_cell_area( widget, path, gcolumn, &cell_area ); + // Don't attempt to refresh not yet realized tree, it is useless + // and results in GTK errors. + if ( gtk_widget_get_realized(ctrl->GtkGetTreeView()) ) + { + // Get cell area + GtkTreeIter iter; + iter.stamp = wxgtk_model->stamp; + iter.user_data = (gpointer) item.GetID(); + wxGtkTreePath path(wxgtk_tree_model_get_path( + GTK_TREE_MODEL(wxgtk_model), &iter )); + GdkRectangle cell_area; + gtk_tree_view_get_cell_area( widget, path, gcolumn, &cell_area ); - GtkAdjustment* hadjust = gtk_tree_view_get_hadjustment( widget ); - double d = gtk_adjustment_get_value( hadjust ); - int xdiff = (int) d; + GtkAdjustment* hadjust = gtk_tree_view_get_hadjustment( widget ); + double d = gtk_adjustment_get_value( hadjust ); + int xdiff = (int) d; - int ydiff = gcolumn->button->allocation.height; - // Redraw - gtk_widget_queue_draw_area( GTK_WIDGET(widget), - cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height ); + int ydiff = gcolumn->button->allocation.height; + // Redraw + gtk_widget_queue_draw_area( GTK_WIDGET(widget), + cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height ); + } m_internal->ValueChanged( item, model_column ); @@ -1818,7 +1853,7 @@ wxDataViewCellMode wxDataViewRenderer::GetMode() const return ret; } -void wxDataViewRenderer::GtkUpdateAlignment() +void wxDataViewRenderer::GtkApplyAlignment(GtkCellRenderer *renderer) { int align = m_alignment; @@ -1844,7 +1879,7 @@ void wxDataViewRenderer::GtkUpdateAlignment() GValue gvalue = { 0, }; g_value_init( &gvalue, G_TYPE_FLOAT ); g_value_set_float( &gvalue, xalign ); - g_object_set_property( G_OBJECT(m_renderer), "xalign", &gvalue ); + g_object_set_property( G_OBJECT(renderer), "xalign", &gvalue ); g_value_unset( &gvalue ); // vertical alignment: @@ -1858,7 +1893,7 @@ void wxDataViewRenderer::GtkUpdateAlignment() GValue gvalue2 = { 0, }; g_value_init( &gvalue2, G_TYPE_FLOAT ); g_value_set_float( &gvalue2, yalign ); - g_object_set_property( G_OBJECT(m_renderer), "yalign", &gvalue2 ); + g_object_set_property( G_OBJECT(renderer), "yalign", &gvalue2 ); g_value_unset( &gvalue2 ); } @@ -1919,7 +1954,7 @@ wxEllipsizeMode wxDataViewRenderer::GetEllipsizeMode() const } void -wxDataViewRenderer::GtkOnTextEdited(const gchar *itempath, const wxString& str) +wxDataViewRenderer::GtkOnTextEdited(const char *itempath, const wxString& str) { wxVariant value(str); if (!Validate( value )) @@ -2303,7 +2338,7 @@ public: m_context = window->GTKGetPangoDefaultContext(); m_layout = pango_layout_new( m_context ); - m_fontdesc = pango_font_description_copy( widget->style->font_desc ); + m_fontdesc = pango_font_description_copy(gtk_widget_get_style(widget)->font_desc); m_cmap = gtk_widget_get_colormap( widget ? widget : window->m_widget ); @@ -2335,6 +2370,7 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype, { m_dc = NULL; m_text_renderer = NULL; + m_renderParams = NULL; if (no_init) m_renderer = NULL; @@ -2342,13 +2378,20 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype, Init(mode, align); } +void wxDataViewCustomRenderer::GtkInitTextRenderer() +{ + m_text_renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new()); + g_object_ref_sink(m_text_renderer); + + GtkApplyAlignment(GTK_CELL_RENDERER(m_text_renderer)); +} + GtkCellRendererText *wxDataViewCustomRenderer::GtkGetTextRenderer() const { if ( !m_text_renderer ) { // we create it on demand so need to do it even from a const function - const_cast(this)-> - m_text_renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new()); + const_cast(this)->GtkInitTextRenderer(); } return m_text_renderer; @@ -2377,12 +2420,12 @@ void wxDataViewCustomRenderer::RenderText( const wxString &text, cell_area.width -= xoffset; gtk_cell_renderer_render( GTK_CELL_RENDERER(textRenderer), - m_renderParams.window, - m_renderParams.widget, - m_renderParams.background_area, + m_renderParams->window, + m_renderParams->widget, + m_renderParams->background_area, &cell_area, - m_renderParams.expose_area, - (GtkCellRendererState) m_renderParams.flags ); + m_renderParams->expose_area, + GtkCellRendererState(m_renderParams->flags)); } bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align) @@ -2406,7 +2449,7 @@ wxDataViewCustomRenderer::~wxDataViewCustomRenderer() delete m_dc; if (m_text_renderer) - gtk_object_sink( GTK_OBJECT(m_text_renderer) ); + g_object_unref(m_text_renderer); } wxDC *wxDataViewCustomRenderer::GetDC() @@ -2441,15 +2484,20 @@ wxDataViewProgressRenderer::wxDataViewProgressRenderer( const wxString &label, { m_renderer = (GtkCellRenderer*) gtk_cell_renderer_progress_new(); - GValue gvalue = { 0, }; - g_value_init( &gvalue, G_TYPE_STRING ); - - g_value_set_string( &gvalue, wxGTK_CONV_FONT( m_label, GetOwner()->GetOwner()->GetFont() ) ); - g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue ); - g_value_unset( &gvalue ); - SetMode(mode); SetAlignment(align); + +#if !wxUSE_UNICODE + // We can't initialize the renderer just yet because we don't have the + // pointer to the column that uses this renderer yet and so attempt to + // dereference GetOwner() to get the font that is used as a source of + // encoding in multibyte-to-Unicode conversion in GTKSetLabel() in + // non-Unicode builds would crash. So simply remember to do it later. + if ( !m_label.empty() ) + m_needsToSetLabel = true; + else +#endif // !wxUSE_UNICODE + GTKSetLabel(); } else #endif @@ -2463,11 +2511,38 @@ wxDataViewProgressRenderer::~wxDataViewProgressRenderer() { } +void wxDataViewProgressRenderer::GTKSetLabel() +{ + GValue gvalue = { 0, }; + g_value_init( &gvalue, G_TYPE_STRING ); + + // Take care to not use GetOwner() here if the label is empty, we can be + // called from ctor when GetOwner() is still NULL in this case. + wxScopedCharBuffer buf; + if ( m_label.empty() ) + buf = wxScopedCharBuffer::CreateNonOwned(""); + else + buf = wxGTK_CONV_FONT(m_label, GetOwner()->GetOwner()->GetFont()); + + g_value_set_string( &gvalue, buf); + g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue ); + g_value_unset( &gvalue ); + +#if !wxUSE_UNICODE + m_needsToSetLabel = false; +#endif // !wxUSE_UNICODE +} + bool wxDataViewProgressRenderer::SetValue( const wxVariant &value ) { #ifdef __WXGTK26__ if (!gtk_check_version(2,6,0)) { +#if !wxUSE_UNICODE + if ( m_needsToSetLabel ) + GTKSetLabel(); +#endif // !wxUSE_UNICODE + gint tmp = (long) value; GValue gvalue = { 0, }; g_value_init( &gvalue, G_TYPE_INT ); @@ -2645,7 +2720,7 @@ wxDataViewChoiceByIndexRenderer::wxDataViewChoiceByIndexRenderer( const wxArrayS { } -void wxDataViewChoiceByIndexRenderer::GtkOnTextEdited(const gchar *itempath, const wxString& str) +void wxDataViewChoiceByIndexRenderer::GtkOnTextEdited(const char *itempath, const wxString& str) { wxVariant value( (long) GetChoices().Index( str ) ); @@ -2674,108 +2749,6 @@ bool wxDataViewChoiceByIndexRenderer::GetValue( wxVariant &value ) const return true; } -// --------------------------------------------------------- -// wxDataViewDateRenderer -// --------------------------------------------------------- - -class wxDataViewDateRendererPopupTransient: public wxPopupTransientWindow -{ -public: - wxDataViewDateRendererPopupTransient( wxWindow* parent, wxDateTime *value, - wxDataViewModel *model, const wxDataViewItem &item, unsigned int col ) : - wxPopupTransientWindow( parent, wxBORDER_SIMPLE ) - { - m_model = model; - m_item = item; - m_col = col; - m_cal = new wxCalendarCtrl( this, -1, *value ); - wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL ); - sizer->Add( m_cal, 1, wxGROW ); - SetSizer( sizer ); - sizer->Fit( this ); - } - - virtual void OnDismiss() - { - } - - void OnCalendar( wxCalendarEvent &event ); - - wxCalendarCtrl *m_cal; - wxDataViewModel *m_model; - wxDataViewItem m_item; - unsigned int m_col; - -private: - DECLARE_EVENT_TABLE() -}; - -BEGIN_EVENT_TABLE(wxDataViewDateRendererPopupTransient,wxPopupTransientWindow) - EVT_CALENDAR( -1, wxDataViewDateRendererPopupTransient::OnCalendar ) -END_EVENT_TABLE() - -void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event ) -{ - m_model->ChangeValue( event.GetDate(), m_item, m_col ); - DismissAndNotify(); -} - -IMPLEMENT_CLASS(wxDataViewDateRenderer, wxDataViewCustomRenderer) - -wxDataViewDateRenderer::wxDataViewDateRenderer( const wxString &varianttype, - wxDataViewCellMode mode, int align ) : - wxDataViewCustomRenderer( varianttype, mode, align ) -{ - SetMode(mode); - SetAlignment(align); -} - -bool wxDataViewDateRenderer::SetValue( const wxVariant &value ) -{ - m_date = value.GetDateTime(); - - return true; -} - -bool wxDataViewDateRenderer::GetValue( wxVariant &WXUNUSED(value) ) const -{ - return false; -} - -bool wxDataViewDateRenderer::Render( wxRect cell, wxDC *dc, int state ) -{ - dc->SetFont( GetOwner()->GetOwner()->GetFont() ); - wxString tmp = m_date.FormatDate(); - RenderText( tmp, 0, cell, dc, state ); - return true; -} - -wxSize wxDataViewDateRenderer::GetSize() const -{ - wxString tmp = m_date.FormatDate(); - wxCoord x,y,d; - GetView()->GetTextExtent( tmp, &x, &y, &d ); - return wxSize(x,y+d); -} - -bool wxDataViewDateRenderer::Activate( const wxRect& WXUNUSED(cell), wxDataViewModel *model, - const wxDataViewItem &item, unsigned int col ) -{ - wxVariant variant; - model->GetValue( variant, item, col ); - wxDateTime value = variant.GetDateTime(); - - wxDataViewDateRendererPopupTransient *popup = new wxDataViewDateRendererPopupTransient( - GetOwner()->GetOwner()->GetParent(), &value, model, item, col ); - wxPoint pos = wxGetMousePosition(); - popup->Move( pos ); - popup->Layout(); - popup->Popup( popup->m_cal ); - - return true; -} - - // --------------------------------------------------------- // wxDataViewIconTextRenderer // --------------------------------------------------------- @@ -3028,7 +3001,7 @@ void wxDataViewColumn::OnInternalIdle() if (m_isConnected) return; - if (GTK_WIDGET_REALIZED(GetOwner()->m_treeview)) + if (gtk_widget_get_realized(GetOwner()->m_treeview)) { GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column); if (column->button) @@ -3076,7 +3049,7 @@ void wxDataViewColumn::SetBitmap( const wxBitmap &bitmap ) { wxDataViewColumnBase::SetBitmap( bitmap ); - if (bitmap.Ok()) + if (bitmap.IsOk()) { GtkImage *gtk_image = GTK_IMAGE(m_image); @@ -3107,9 +3080,9 @@ void wxDataViewColumn::SetHidden( bool hidden ) gtk_tree_view_column_set_visible( GTK_TREE_VIEW_COLUMN(m_column), !hidden ); } -void wxDataViewColumn::SetResizeable( bool resizeable ) +void wxDataViewColumn::SetResizeable( bool resizable ) { - gtk_tree_view_column_set_resizable( GTK_TREE_VIEW_COLUMN(m_column), resizeable ); + gtk_tree_view_column_set_resizable( GTK_TREE_VIEW_COLUMN(m_column), resizable ); } void wxDataViewColumn::SetAlignment( wxAlignment align ) @@ -3163,14 +3136,6 @@ bool wxDataViewColumn::IsSortable() const return gtk_tree_view_column_get_clickable( column ); } -void wxDataViewColumn::SetAsSortKey( bool WXUNUSED(sort) ) -{ - // it might not make sense to have this function in wxHeaderColumn at - // all in fact, changing of the sort order should only be done using the - // associated control API - wxFAIL_MSG( "not implemented" ); -} - bool wxDataViewColumn::IsSortKey() const { GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column); @@ -3280,7 +3245,7 @@ int wxGtkTreeModelChildWithPosCmp( const void* data1, const void* data2, const v static int LINKAGEMODE wxGtkTreeModelChildPtrCmp( void*** data1, void*** data2 ) { - return gs_internal->GetDataViewModel()->Compare( **data1, **data2, + return gs_internal->GetDataViewModel()->Compare( wxDataViewItem(**data1), wxDataViewItem(**data2), gs_internal->GetSortColumn(), (gs_internal->GetSortOrder() == GTK_SORT_ASCENDING) ); } @@ -3481,7 +3446,7 @@ void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node ) if (m_wx_model->IsContainer( child )) node->AddNode( new wxGtkTreeModelNode( node, child, this ) ); else - node->AddLeave( child.GetID() ); + node->AddLeaf( child.GetID() ); // Don't send any events here } @@ -3524,6 +3489,7 @@ gboolean wxDataViewCtrlInternal::row_draggable( GtkTreeDragSource *WXUNUSED(drag GtkTreePath *path ) { delete m_dragDataObject; + m_dragDataObject = NULL; wxDataViewItem item(GetOwner()->GTKPathToItem(path)); if ( !item ) @@ -3565,21 +3531,22 @@ gboolean wxDataViewCtrlInternal::drag_data_get( GtkTreeDragSource *WXUNUSED(drag if ( !item ) return FALSE; - if (!m_dragDataObject->IsSupported( selection_data->target )) + GdkAtom target = gtk_selection_data_get_target(selection_data); + if (!m_dragDataObject->IsSupported(target)) return FALSE; - size_t size = m_dragDataObject->GetDataSize( selection_data->target ); + size_t size = m_dragDataObject->GetDataSize(target); if (size == 0) return FALSE; void *buf = malloc( size ); gboolean res = FALSE; - if (m_dragDataObject->GetDataHere( selection_data->target, buf )) + if (m_dragDataObject->GetDataHere(target, buf)) { res = TRUE; - gtk_selection_data_set( selection_data, selection_data->target, + gtk_selection_data_set(selection_data, target, 8, (const guchar*) buf, size ); } @@ -3601,9 +3568,9 @@ wxDataViewCtrlInternal::drag_data_received(GtkTreeDragDest *WXUNUSED(drag_dest), event.SetEventObject( m_owner ); event.SetItem( item ); event.SetModel( m_wx_model ); - event.SetDataFormat( selection_data->target ); - event.SetDataSize( selection_data->length ); - event.SetDataBuffer( selection_data->data ); + event.SetDataFormat(gtk_selection_data_get_target(selection_data)); + event.SetDataSize(gtk_selection_data_get_length(selection_data)); + event.SetDataBuffer(const_cast(gtk_selection_data_get_data(selection_data))); if (!m_owner->HandleWindowEvent( event )) return FALSE; @@ -3626,7 +3593,7 @@ wxDataViewCtrlInternal::row_drop_possible(GtkTreeDragDest *WXUNUSED(drag_dest), event.SetEventObject( m_owner ); event.SetItem( item ); event.SetModel( m_wx_model ); - event.SetDataFormat( selection_data->target ); + event.SetDataFormat(gtk_selection_data_get_target(selection_data)); if (!m_owner->HandleWindowEvent( event )) return FALSE; @@ -3666,13 +3633,59 @@ bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDa if (!m_wx_model->IsVirtualListModel()) { wxGtkTreeModelNode *parent_node = FindNode( parent ); - wxASSERT_MSG(parent_node, + wxCHECK_MSG(parent_node, false, "Did you forget a call to ItemAdded()? The parent node is unknown to the wxGtkTreeModel"); - if (m_wx_model->IsContainer( item )) - parent_node->AddNode( new wxGtkTreeModelNode( parent_node, item, this ) ); + wxDataViewItemArray modelSiblings; + m_wx_model->GetChildren(parent, modelSiblings); + const int modelSiblingsSize = modelSiblings.size(); + + int posInModel = modelSiblings.Index(item, /*fromEnd=*/true); + wxCHECK_MSG( posInModel != wxNOT_FOUND, false, "adding non-existent item?" ); + + const wxGtkTreeModelChildren& nodeSiblings = parent_node->GetChildren(); + const int nodeSiblingsSize = nodeSiblings.size(); + + int nodePos = 0; + + if ( posInModel == modelSiblingsSize - 1 ) + { + nodePos = nodeSiblingsSize; + } + else if ( modelSiblingsSize == nodeSiblingsSize + 1 ) + { + // This is the simple case when our node tree already matches the + // model and only this one item is missing. + nodePos = posInModel; + } else - parent_node->AddLeave( item.GetID() ); + { + // It's possible that a larger discrepancy between the model and + // our realization exists. This can happen e.g. when adding a bunch + // of items to the model and then calling ItemsAdded() just once + // afterwards. In this case, we must find the right position by + // looking at sibling items. + + // append to the end if we won't find a better position: + nodePos = nodeSiblingsSize; + + for ( int nextItemPos = posInModel + 1; + nextItemPos < modelSiblingsSize; + nextItemPos++ ) + { + int nextNodePos = parent_node->FindChildByItem(modelSiblings[nextItemPos]); + if ( nextNodePos != wxNOT_FOUND ) + { + nodePos = nextNodePos; + break; + } + } + } + + if (m_wx_model->IsContainer( item )) + parent_node->InsertNode( new wxGtkTreeModelNode( parent_node, item, this ), nodePos ); + else + parent_node->InsertLeaf( item.GetID(), nodePos ); } ScheduleRefresh(); @@ -3749,7 +3762,7 @@ gboolean wxDataViewCtrlInternal::get_iter( GtkTreeIter *iter, GtkTreePath *path iter->stamp = m_gtk_model->stamp; // user_data is just the index +1 - iter->user_data = (gpointer) (i+1); + iter->user_data = wxUIntToPtr(i+1); return TRUE; } @@ -3852,7 +3865,7 @@ gboolean wxDataViewCtrlInternal::iter_next( GtkTreeIter *iter ) } // user_data is just the index +1 (+2 because we need the next) - iter->user_data = (gpointer) (n+2); + iter->user_data = wxUIntToPtr(n+2); } else { @@ -4006,7 +4019,7 @@ gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter iter->stamp = m_gtk_model->stamp; // user_data is just the index +1 - iter->user_data = (gpointer) (n+1); + iter->user_data = wxUIntToPtr(n+1); return TRUE; } @@ -4244,7 +4257,7 @@ wxGtkTreeModelNode *wxDataViewCtrlInternal::FindParentNode( const wxDataViewItem static void wxdataview_selection_changed_callback( GtkTreeSelection* WXUNUSED(selection), wxDataViewCtrl *dv ) { - if (!GTK_WIDGET_REALIZED(dv->m_widget)) + if (!gtk_widget_get_realized(dv->m_widget)) return; wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, dv->GetId() ); @@ -4326,7 +4339,7 @@ void wxDataViewCtrl::AddChildGTK(wxWindowGTK* child) GtkWidget* treeview = GtkGetTreeView(); // Insert widget in GtkTreeView - if (GTK_WIDGET_REALIZED(treeview)) + if (gtk_widget_get_realized(treeview)) gtk_widget_set_parent_window( child->m_widget, gtk_tree_view_get_bin_window( GTK_TREE_VIEW(treeview) ) ); gtk_widget_set_parent( child->m_widget, treeview ); @@ -4414,22 +4427,21 @@ gtk_dataview_button_press_callback( GtkWidget *WXUNUSED(widget), GtkTreeViewColumn *column = NULL; gint cell_x = 0; gint cell_y = 0; - if (gtk_tree_view_get_path_at_pos( + gtk_tree_view_get_path_at_pos + ( GTK_TREE_VIEW(dv->GtkGetTreeView()), (int) gdk_event->x, (int) gdk_event->y, path.ByRef(), &column, &cell_x, - &cell_y)) - { - if (path) - { - wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, dv->GetId() ); - event.SetItem(dv->GTKPathToItem(path)); - event.SetModel( dv->GetModel() ); - return dv->HandleWindowEvent( event ); - } - } + &cell_y + ); + + wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, dv->GetId() ); + if (path) + event.SetItem(dv->GTKPathToItem(path)); + event.SetModel( dv->GetModel() ); + return dv->HandleWindowEvent( event ); } return FALSE; @@ -4439,6 +4451,22 @@ IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl, wxDataViewCtrlBase) wxDataViewCtrl::~wxDataViewCtrl() { + // Stop editing before destroying the control to remove any event handlers + // which are added when editing started: if we didn't do this, the base + // class dtor would assert as it checks for any leftover handlers. + if ( m_treeview ) + { + GtkTreeViewColumn *col; + gtk_tree_view_get_cursor(GTK_TREE_VIEW(m_treeview), NULL, &col); + + wxDataViewColumn * const wxcol = FromGTKColumn(col); + if ( wxcol ) + { + // This won't do anything if we're not editing it + wxcol->GetRenderer()->CancelEditing(); + } + } + m_cols.Clear(); delete m_internal; @@ -4449,6 +4477,8 @@ void wxDataViewCtrl::Init() m_internal = NULL; m_cols.DeleteContents( true ); + + m_uniformRowHeight = -1; } bool wxDataViewCtrl::Create(wxWindow *parent, @@ -4474,6 +4504,8 @@ bool wxDataViewCtrl::Create(wxWindow *parent, m_treeview = gtk_tree_view_new(); gtk_container_add (GTK_CONTAINER (m_widget), m_treeview); + m_focusWidget = GTK_WIDGET(m_treeview); + g_signal_connect (m_treeview, "size_allocate", G_CALLBACK (gtk_dataviewctrl_size_callback), this); @@ -4681,10 +4713,9 @@ unsigned int wxDataViewCtrl::GetColumnCount() const return m_cols.GetCount(); } -wxDataViewColumn* wxDataViewCtrl::GetColumn( unsigned int pos ) const +wxDataViewColumn* wxDataViewCtrl::FromGTKColumn(GtkTreeViewColumn *gtk_col) const { - GtkTreeViewColumn *gtk_col = gtk_tree_view_get_column( GTK_TREE_VIEW(m_treeview), pos ); - if (!gtk_col) + if ( !gtk_col ) return NULL; wxDataViewColumnList::const_iterator iter; @@ -4697,9 +4728,18 @@ wxDataViewColumn* wxDataViewCtrl::GetColumn( unsigned int pos ) const } } + wxFAIL_MSG( "No matching column?" ); + return NULL; } +wxDataViewColumn* wxDataViewCtrl::GetColumn( unsigned int pos ) const +{ + GtkTreeViewColumn *gtk_col = gtk_tree_view_get_column( GTK_TREE_VIEW(m_treeview), pos ); + + return FromGTKColumn(gtk_col); +} + bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column ) { gtk_tree_view_remove_column( GTK_TREE_VIEW(m_treeview), @@ -4727,15 +4767,11 @@ bool wxDataViewCtrl::ClearColumns() int wxDataViewCtrl::GetColumnPosition( const wxDataViewColumn *column ) const { - GtkTreeViewColumn *gtk_column = GTK_TREE_VIEW_COLUMN(column->GetConstGtkHandle()); + GtkTreeViewColumn *gtk_column = GTK_TREE_VIEW_COLUMN(column->GetGtkHandle()); - GList *list = gtk_tree_view_get_columns( GTK_TREE_VIEW(m_treeview) ); + wxGtkList list(gtk_tree_view_get_columns(GTK_TREE_VIEW(m_treeview))); - gint pos = g_list_index( list, (gconstpointer) gtk_column ); - - g_list_free( list ); - - return pos; + return g_list_index( list, (gconstpointer) gtk_column ); } wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const @@ -4804,39 +4840,51 @@ void wxDataViewCtrl::DoSetCurrentItem(const wxDataViewItem& item) gtk_tree_view_set_cursor(GTK_TREE_VIEW(m_treeview), path, NULL, FALSE); } -wxDataViewItem wxDataViewCtrl::GetSelection() const +wxDataViewColumn *wxDataViewCtrl::GetCurrentColumn() const +{ + // The tree doesn't have any current item if it hadn't been created yet but + // it's arguably not an error to call this function in this case so just + // return NULL without asserting. + if ( !m_treeview ) + return NULL; + + GtkTreeViewColumn *col; + gtk_tree_view_get_cursor(GTK_TREE_VIEW(m_treeview), NULL, &col); + return FromGTKColumn(col); +} + +void wxDataViewCtrl::EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) +{ + wxCHECK_RET( m_treeview, + "Current item can't be set before creating the control." ); + wxCHECK_RET( item.IsOk(), "invalid item" ); + wxCHECK_RET( column, "no column provided" ); + + // We need to make sure the model knows about this item or the path would + // be invalid and gtk_tree_view_set_cursor() would silently do nothing. + ExpandAncestors(item); + + GtkTreeViewColumn *gcolumn = GTK_TREE_VIEW_COLUMN(column->GetGtkHandle()); + + // We also need to preserve the existing selection from changing. + // Unfortunately the only way to do it seems to use our own selection + // function and forbid any selection changes during set cursor call. + wxGtkTreeSelectionLock + lock(gtk_tree_view_get_selection(GTK_TREE_VIEW(m_treeview))); + + // Do move the cursor now. + GtkTreeIter iter; + iter.user_data = item.GetID(); + wxGtkTreePath path(m_internal->get_path( &iter )); + + gtk_tree_view_set_cursor(GTK_TREE_VIEW(m_treeview), path, gcolumn, TRUE); +} + +int wxDataViewCtrl::GetSelectedItemsCount() const { GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) ); - if (m_windowStyle & wxDV_MULTIPLE) - { - // Report the first one - GtkTreeModel *model; - GList *list = gtk_tree_selection_get_selected_rows( selection, &model ); - - if (list) - { - GtkTreePath *path = (GtkTreePath*) list->data; - wxDataViewItem item(GTKPathToItem(path)); - - // delete list - g_list_foreach( list, (GFunc) gtk_tree_path_free, NULL ); - g_list_free( list ); - - return item; - } - } - else - { - GtkTreeIter iter; - if (gtk_tree_selection_get_selected( selection, NULL, &iter )) - { - wxDataViewItem item( iter.user_data ); - return item; - } - } - - return wxDataViewItem(0); + return gtk_tree_selection_count_selected_rows(selection); } int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const @@ -4847,38 +4895,25 @@ int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const if (HasFlag(wxDV_MULTIPLE)) { GtkTreeModel *model; - GList *list = gtk_tree_selection_get_selected_rows( selection, &model ); + wxGtkTreePathList list(gtk_tree_selection_get_selected_rows(selection, &model)); - int count = 0; - while (list) + for ( GList* current = list; current; current = g_list_next(current) ) { - GtkTreePath *path = (GtkTreePath*) list->data; + GtkTreePath *path = (GtkTreePath*) current->data; sel.Add(GTKPathToItem(path)); - - list = g_list_next( list ); - count++; } - - // delete list - g_list_foreach( list, (GFunc) gtk_tree_path_free, NULL ); - g_list_free( list ); - - return count; } else { - GtkTreeModel *model; GtkTreeIter iter; - gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); - if (has_selection) + if (gtk_tree_selection_get_selected( selection, NULL, &iter )) { - sel.Add( wxDataViewItem( (void*) iter.user_data) ); - return 1; + sel.Add( wxDataViewItem(iter.user_data) ); } } - return 0; + return sel.size(); } void wxDataViewCtrl::SetSelections( const wxDataViewItemArray & sel ) @@ -4995,7 +5030,8 @@ void wxDataViewCtrl::HitTest(const wxPoint& point, // gtk_tree_view_get_path_at_pos() is the wrong function. It doesn't mind the header but returns column. // See http://mail.gnome.org/archives/gtkmm-list/2005-January/msg00080.html // So we have to use both of them. - // Friedrich Haase 2010-9-20 + item = wxDataViewItem(0); + column = NULL; wxGtkTreePath path, pathScratch; GtkTreeViewColumn* GtkColumn = NULL; GtkTreeViewDropPosition pos = GTK_TREE_VIEW_DROP_INTO_OR_AFTER; @@ -5003,8 +5039,8 @@ void wxDataViewCtrl::HitTest(const wxPoint& point, gint cell_y = 0; // cannot directly call GtkGetTreeView(), HitTest is const and so is this pointer - wxDataViewCtrl* ctrl = (wxDataViewCtrl*)this; // ugly workaround, ctrl is NOT const - GtkTreeView* treeView = GTK_TREE_VIEW(ctrl->GtkGetTreeView()); + wxDataViewCtrl* self = const_cast(this); // ugly workaround, self is NOT const + GtkTreeView* treeView = GTK_TREE_VIEW(self->GtkGetTreeView()); // is there possibly a better suited function to get the column? gtk_tree_view_get_path_at_pos( // and this is the wrong call but it delivers the column @@ -5044,6 +5080,12 @@ wxDataViewCtrl::GetItemRect(const wxDataViewItem& WXUNUSED(item), return wxRect(); } +bool wxDataViewCtrl::SetRowHeight(int rowHeight) +{ + m_uniformRowHeight = rowHeight; + return true; +} + void wxDataViewCtrl::DoSetExpanderColumn() { gtk_tree_view_set_expander_column( GTK_TREE_VIEW(m_treeview), diff --git a/Externals/wxWidgets3/src/gtk/dcclient.cpp b/Externals/wxWidgets3/src/gtk/dcclient.cpp index 8d08b11504..3d392b9ed0 100644 --- a/Externals/wxWidgets3/src/gtk/dcclient.cpp +++ b/Externals/wxWidgets3/src/gtk/dcclient.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/dcclient.cpp // Purpose: wxWindowDCImpl implementation // Author: Robert Roebling -// RCS-ID: $Id: dcclient.cpp 65846 2010-10-18 23:43:20Z VZ $ +// RCS-ID: $Id: dcclient.cpp 70824 2012-03-06 04:51:40Z PC $ // Copyright: (c) 1998 Robert Roebling, Chris Breeze // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -129,7 +129,11 @@ enum wxPoolGCType wxTEXT_SCREEN, wxBG_SCREEN, wxPEN_SCREEN, - wxBRUSH_SCREEN + wxBRUSH_SCREEN, + wxTEXT_COLOUR_ALPHA, + wxBG_COLOUR_ALPHA, + wxPEN_COLOUR_ALPHA, + wxBRUSH_COLOUR_ALPHA }; struct wxGC @@ -295,7 +299,7 @@ wxWindowDCImpl::wxWindowDCImpl( wxDC *owner, wxWindow *window ) : wxCHECK_RET(widget, "DC needs a widget"); m_gdkwindow = widget->window; - if (GTK_WIDGET_NO_WINDOW(widget)) + if (!gtk_widget_get_has_window(widget)) SetDeviceLocalOrigin(widget->allocation.x, widget->allocation.y); } @@ -375,6 +379,13 @@ void wxWindowDCImpl::SetUpDC( bool isMemDC ) m_textGC = wxGetPoolGC( m_gdkwindow, wxTEXT_SCREEN ); m_bgGC = wxGetPoolGC( m_gdkwindow, wxBG_SCREEN ); } + else if (m_cmap == gdk_screen_get_rgba_colormap(gdk_colormap_get_screen(m_cmap))) + { + m_penGC = wxGetPoolGC( m_gdkwindow, wxPEN_COLOUR_ALPHA ); + m_brushGC = wxGetPoolGC( m_gdkwindow, wxBRUSH_COLOUR_ALPHA ); + m_textGC = wxGetPoolGC( m_gdkwindow, wxTEXT_COLOUR_ALPHA ); + m_bgGC = wxGetPoolGC( m_gdkwindow, wxBG_COLOUR_ALPHA ); + } else { m_penGC = wxGetPoolGC( m_gdkwindow, wxPEN_COLOUR ); @@ -947,7 +958,7 @@ void wxWindowDCImpl::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord // If the pen is transparent pen we increase the size // for better compatibility with other platforms. - if ( m_pen.IsNonTransparent() ) + if (m_pen.IsTransparent()) { ++ww; ++hh; @@ -1372,69 +1383,12 @@ void wxWindowDCImpl::DoDrawText(const wxString& text, gdk_pango_context_set_colormap( m_context, m_cmap ); // not needed in gtk+ >= 2.6 - bool underlined = m_font.IsOk() && m_font.GetUnderlined(); - wxCharBuffer data = wxGTK_CONV(text); if ( !data ) return; - size_t datalen = strlen(data); - // in Pango >= 1.16 the "underline of leading/trailing spaces" bug - // has been fixed and thus the hack implemented below should never be used - static bool pangoOk = !wx_pango_version_check(1, 16, 0); - - bool needshack = underlined && !pangoOk; - - if (needshack) - { - // a PangoLayout which has leading/trailing spaces with underlined font - // is not correctly drawn by this pango version: Pango won't underline the spaces. - // This can be a problem; e.g. wxHTML rendering of underlined text relies on - // this behaviour. To workaround this problem, we use a special hack here - // suggested by pango maintainer Behdad Esfahbod: we prepend and append two - // empty space characters and give them a dummy colour attribute. - // This will force Pango to underline the leading/trailing spaces, too. - - wxCharBuffer data_tmp(datalen + 6); - // copy the leading U+200C ZERO WIDTH NON-JOINER encoded in UTF8 format - memcpy(data_tmp.data(), "\342\200\214", 3); - // copy the user string - memcpy(data_tmp.data() + 3, data, datalen); - // copy the trailing U+200C ZERO WIDTH NON-JOINER encoded in UTF8 format - memcpy(data_tmp.data() + 3 + datalen, "\342\200\214", 3); - - data = data_tmp; - datalen += 6; - } - - pango_layout_set_text(m_layout, data, datalen); - - if (underlined) - { - PangoAttrList *attrs = pango_attr_list_new(); - PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); - a->start_index = 0; - a->end_index = datalen; - pango_attr_list_insert(attrs, a); - - if (needshack) - { - // dummy colour for the leading space - a = pango_attr_foreground_new (0x0057, 0x52A9, 0xD614); - a->start_index = 0; - a->end_index = 1; - pango_attr_list_insert(attrs, a); - - // dummy colour for the trailing space - a = pango_attr_foreground_new (0x0057, 0x52A9, 0xD614); - a->start_index = datalen - 1; - a->end_index = datalen; - pango_attr_list_insert(attrs, a); - } - - pango_layout_set_attributes(m_layout, attrs); - pango_attr_list_unref(attrs); - } + pango_layout_set_text(m_layout, data, data.length()); + const bool setAttrs = m_font.GTKSetPangoAttrs(m_layout); int oldSize = 0; const bool isScaled = fabs(m_scaleY - 1.0) > 0.00001; @@ -1473,7 +1427,7 @@ void wxWindowDCImpl::DoDrawText(const wxString& text, // actually apply unscaled font pango_layout_set_font_description( m_layout, m_fontdesc ); } - if (underlined) + if (setAttrs) { // undo underline attributes setting: pango_layout_set_attributes(m_layout, NULL); @@ -1492,23 +1446,14 @@ void wxWindowDCImpl::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord wxCHECK_RET( IsOk(), wxT("invalid window dc") ); -#if __WXGTK26__ +#ifdef __WXGTK26__ if (!gtk_check_version(2,6,0)) { x = XLOG2DEV(x); y = YLOG2DEV(y); pango_layout_set_text(m_layout, wxGTK_CONV(text), -1); - - if (m_font.GetUnderlined()) - { - PangoAttrList *attrs = pango_attr_list_new(); - PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); - pango_attr_list_insert(attrs, a); - pango_layout_set_attributes(m_layout, attrs); - pango_attr_list_unref(attrs); - } - + const bool setAttrs = m_font.GTKSetPangoAttrs(m_layout); int oldSize = 0; const bool isScaled = fabs(m_scaleY - 1.0) > 0.00001; if (isScaled) @@ -1561,7 +1506,7 @@ void wxWindowDCImpl::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord gdk_draw_layout_with_colors(m_gdkwindow, m_textGC, x+minX, y+minY, m_layout, NULL, bg_col); - if (m_font.GetUnderlined()) + if (setAttrs) pango_layout_set_attributes(m_layout, NULL); // clean up the transformation matrix @@ -2304,7 +2249,6 @@ int wxWindowDCImpl::GetDepth() const return gdk_drawable_get_depth(m_gdkwindow); } - //----------------------------------------------------------------------------- // wxClientDCImpl //----------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/gtk/dcmemory.cpp b/Externals/wxWidgets3/src/gtk/dcmemory.cpp index 81d4524429..08071cafbd 100644 --- a/Externals/wxWidgets3/src/gtk/dcmemory.cpp +++ b/Externals/wxWidgets3/src/gtk/dcmemory.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/dcmemory.cpp // Purpose: // Author: Robert Roebling -// RCS-ID: $Id: dcmemory.cpp 61724 2009-08-21 10:41:26Z VZ $ +// RCS-ID: $Id: dcmemory.cpp 70809 2012-03-04 23:50:35Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -10,10 +10,8 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/dcmemory.h" #include "wx/gtk/dcmemory.h" -#include #include //----------------------------------------------------------------------------- @@ -65,7 +63,7 @@ void wxMemoryDCImpl::DoSelect( const wxBitmap& bitmap ) Destroy(); m_selected = bitmap; - if (m_selected.Ok()) + if (m_selected.IsOk()) { m_gdkwindow = m_selected.GetPixmap(); @@ -83,7 +81,7 @@ void wxMemoryDCImpl::DoSelect( const wxBitmap& bitmap ) void wxMemoryDCImpl::SetPen( const wxPen& penOrig ) { wxPen pen( penOrig ); - if ( m_selected.Ok() && + if ( m_selected.IsOk() && m_selected.GetDepth() == 1 && (pen != *wxTRANSPARENT_PEN) ) { @@ -96,7 +94,7 @@ void wxMemoryDCImpl::SetPen( const wxPen& penOrig ) void wxMemoryDCImpl::SetBrush( const wxBrush& brushOrig ) { wxBrush brush( brushOrig ); - if ( m_selected.Ok() && + if ( m_selected.IsOk() && m_selected.GetDepth() == 1 && (brush != *wxTRANSPARENT_BRUSH) ) { @@ -110,7 +108,7 @@ void wxMemoryDCImpl::SetBackground( const wxBrush& brushOrig ) { wxBrush brush(brushOrig); - if ( m_selected.Ok() && + if ( m_selected.IsOk() && m_selected.GetDepth() == 1 && (brush != *wxTRANSPARENT_BRUSH) ) { @@ -122,7 +120,7 @@ void wxMemoryDCImpl::SetBackground( const wxBrush& brushOrig ) void wxMemoryDCImpl::SetTextForeground( const wxColour& col ) { - if ( m_selected.Ok() && m_selected.GetDepth() == 1 ) + if ( m_selected.IsOk() && m_selected.GetDepth() == 1 ) wxWindowDCImpl::SetTextForeground( col == *wxWHITE ? *wxBLACK : *wxWHITE); else wxWindowDCImpl::SetTextForeground( col ); @@ -130,7 +128,7 @@ void wxMemoryDCImpl::SetTextForeground( const wxColour& col ) void wxMemoryDCImpl::SetTextBackground( const wxColour &col ) { - if (m_selected.Ok() && m_selected.GetDepth() == 1) + if (m_selected.IsOk() && m_selected.GetDepth() == 1) wxWindowDCImpl::SetTextBackground( col == *wxWHITE ? *wxBLACK : *wxWHITE ); else wxWindowDCImpl::SetTextBackground( col ); @@ -138,7 +136,7 @@ void wxMemoryDCImpl::SetTextBackground( const wxColour &col ) void wxMemoryDCImpl::DoGetSize( int *width, int *height ) const { - if (m_selected.Ok()) + if (m_selected.IsOk()) { if (width) (*width) = m_selected.GetWidth(); if (height) (*height) = m_selected.GetHeight(); diff --git a/Externals/wxWidgets3/src/gtk/dcscreen.cpp b/Externals/wxWidgets3/src/gtk/dcscreen.cpp index 93699c6010..c4b015deb0 100644 --- a/Externals/wxWidgets3/src/gtk/dcscreen.cpp +++ b/Externals/wxWidgets3/src/gtk/dcscreen.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/dcscreen.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: dcscreen.cpp 61724 2009-08-21 10:41:26Z VZ $ +// Id: $Id: dcscreen.cpp 70809 2012-03-04 23:50:35Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -10,15 +10,8 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/dcscreen.h" #include "wx/gtk/dcscreen.h" -#ifndef WX_PRECOMP - #include "wx/window.h" -#endif - -#include -#include #include //----------------------------------------------------------------------------- @@ -58,6 +51,8 @@ void wxScreenDCImpl::Init() wxScreenDCImpl::~wxScreenDCImpl() { + g_object_unref(m_context); + gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN ); gdk_gc_set_subwindow( m_brushGC, GDK_CLIP_BY_CHILDREN ); gdk_gc_set_subwindow( m_textGC, GDK_CLIP_BY_CHILDREN ); diff --git a/Externals/wxWidgets3/src/gtk/descrip.mms b/Externals/wxWidgets3/src/gtk/descrip.mms index cf4536a347..207ed4f17d 100644 --- a/Externals/wxWidgets3/src/gtk/descrip.mms +++ b/Externals/wxWidgets3/src/gtk/descrip.mms @@ -2,7 +2,7 @@ # * # Make file for VMS * # Author : J.Jansen (joukj@hrem.nano.tudelft.nl) * -# Date : 22 September 2009 * +# Date : 13 January 2012 * # * #***************************************************************************** .first @@ -99,7 +99,8 @@ OBJECTS0= \ tglbtn.obj,\ msgdlg.obj,\ treeentry_gtk.obj,textentry.obj,filectrl.obj,print.obj,win_gtk.obj,\ - mnemonics.obj,private.obj,assertdlg_gtk.obj,infobar.obj + mnemonics.obj,private.obj,assertdlg_gtk.obj,infobar.obj,anybutton.obj,\ + nonownedwnd.obj SOURCES =\ animate.cpp,\ @@ -165,22 +166,23 @@ SOURCES =\ utilsgtk.cpp,\ window.cpp,\ treeentry_gtk.c,textentry.cpp,filectrl.cpp,print.cpp,win_gtk.cpp,\ - mnemonics.cpp,private.cpp,assertdlg_gtk.c,infobar.cpp + mnemonics.cpp,private.cpp,assertdlg_gtk.cpp,infobar.cpp,anybutton.cpp,\ + nonownedwnd.cpp all : $(SOURCES) $(MMS)$(MMSQUALIFIERS) $(OBJECTS) .ifdef __WXUNIVERSAL__ library [--.lib]libwx_gtk_univ.olb $(OBJECTS) - library [--.lib]libwx_gtk_univ.olb [.CXX_REPOSITORY]*.obj + If f$getsyi("HW_MODEL") .le. 2048 then library [--.lib]libwx_gtk_univ.olb [.CXX_REPOSITORY]*.obj .else .ifdef __WXGTK2__ library [--.lib]libwx_gtk2.olb $(OBJECTS) - library [--.lib]libwx_gtk2.olb [.CXX_REPOSITORY]*.obj + If f$getsyi("HW_MODEL") .le. 2048 then library [--.lib]libwx_gtk2.olb [.CXX_REPOSITORY]*.obj $(MMS)$(MMSQUALIFIERS) $(OBJECTS0) library [--.lib]libwx_gtk2.olb $(OBJECTS0) .else library [--.lib]libwx_gtk.olb $(OBJECTS) - library [--.lib]libwx_gtk.olb [.CXX_REPOSITORY]*.obj + If f$getsyi("HW_MODEL") .le. 2048 then library [--.lib]libwx_gtk.olb [.CXX_REPOSITORY]*.obj $(MMS)$(MMSQUALIFIERS) $(OBJECTS0) library [--.lib]libwx_gtk.olb $(OBJECTS0) .endif @@ -252,11 +254,14 @@ toplevel.obj : toplevel.cpp utilsgtk.obj : utilsgtk.cpp window.obj : window.cpp treeentry_gtk.obj : treeentry_gtk.c + cc $(CFLAGS)$(CC_DEFINE)/warn=disab=CHAROVERFL $(MMS$TARGET_NAME).c textentry.obj : textentry.cpp filectrl.obj : filectrl.cpp print.obj : print.cpp win_gtk.obj : win_gtk.cpp mnemonics.obj : mnemonics.cpp private.obj : private.cpp -assertdlg_gtk.obj : assertdlg_gtk.c +assertdlg_gtk.obj : assertdlg_gtk.cpp infobar.obj : infobar.cpp +anybutton.obj : anybutton.cpp +nonownedwnd.obj : nonownedwnd.cpp diff --git a/Externals/wxWidgets3/src/gtk/dirdlg.cpp b/Externals/wxWidgets3/src/gtk/dirdlg.cpp index 333a8ccedc..26d793be6d 100644 --- a/Externals/wxWidgets3/src/gtk/dirdlg.cpp +++ b/Externals/wxWidgets3/src/gtk/dirdlg.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/dirdlg.cpp // Purpose: native implementation of wxDirDialog // Author: Robert Roebling, Zbigniew Zagorski, Mart Raudsepp, Francesco Montorsi -// Id: $Id: dirdlg.cpp 64019 2010-04-18 00:05:37Z VZ $ +// Id: $Id: dirdlg.cpp 70898 2012-03-14 12:32:27Z VZ $ // Copyright: (c) 1998 Robert Roebling, 2004 Zbigniew Zagorski, 2005 Mart Raudsepp // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -31,7 +31,9 @@ #include "wx/gtk/private.h" +#ifdef __UNIX__ #include // chdir +#endif //----------------------------------------------------------------------------- // "clicked" for OK-button @@ -96,6 +98,17 @@ wxDirDialog::wxDirDialog(wxWindow* parent, const wxPoint& pos, const wxSize& WXUNUSED(sz), const wxString& WXUNUSED(name)) +{ + Create(parent, title, defaultPath, style, pos); +} + +bool wxDirDialog::Create(wxWindow* parent, + const wxString& title, + const wxString& defaultPath, + long style, + const wxPoint& pos, + const wxSize& WXUNUSED(sz), + const wxString& WXUNUSED(name)) { m_message = title; @@ -106,7 +119,7 @@ wxDirDialog::wxDirDialog(wxWindow* parent, wxDefaultValidator, wxT("dirdialog"))) { wxFAIL_MSG( wxT("wxDirDialog creation failed") ); - return; + return false; } GtkWindow* gtk_parent = NULL; @@ -135,7 +148,7 @@ wxDirDialog::wxDirDialog(wxWindow* parent, // local-only property could be set to false to allow non-local files to be loaded. // In that case get/set_uri(s) should be used instead of get/set_filename(s) everywhere // and the GtkFileChooserDialog should probably also be created with a backend, - // e.g "gnome-vfs", "default", ... (gtk_file_chooser_dialog_new_with_backend). + // e.g. "gnome-vfs", "default", ... (gtk_file_chooser_dialog_new_with_backend). // Currently local-only is kept as the default - true: // gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(m_widget), true); @@ -145,6 +158,7 @@ wxDirDialog::wxDirDialog(wxWindow* parent, if ( !defaultPath.empty() ) gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(m_widget), defaultPath.fn_str() ); + return true; } void wxDirDialog::OnFakeOk(wxCommandEvent& WXUNUSED(event)) diff --git a/Externals/wxWidgets3/src/gtk/dnd.cpp b/Externals/wxWidgets3/src/gtk/dnd.cpp index eb4534f847..40373313b2 100644 --- a/Externals/wxWidgets3/src/gtk/dnd.cpp +++ b/Externals/wxWidgets3/src/gtk/dnd.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/dnd.cpp // Purpose: wxDropTarget class // Author: Robert Roebling -// Id: $Id: dnd.cpp 65680 2010-09-30 11:44:45Z VZ $ +// Id: $Id: dnd.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -26,6 +26,7 @@ #include "wx/scopeguard.h" #include +#include "wx/gtk/private/gtk2-compat.h" //---------------------------------------------------------------------------- // global data @@ -363,7 +364,7 @@ static void target_drag_data_received( GtkWidget *WXUNUSED(widget), /* Owen Taylor: "call gtk_drag_finish() with success == TRUE" */ - if ((data->length <= 0) || (data->format != 8)) + if (gtk_selection_data_get_length(data) <= 0 || gtk_selection_data_get_format(data) != 8) { /* negative data length and non 8-bit data format qualifies for junk */ @@ -533,12 +534,14 @@ bool wxDropTarget::GetData() if (!m_dataObject) return false; - wxDataFormat dragFormat( m_dragData->target ); + wxDataFormat dragFormat(gtk_selection_data_get_target(m_dragData)); if (!m_dataObject->IsSupportedFormat( dragFormat )) return false; - m_dataObject->SetData( dragFormat, (size_t)m_dragData->length, (const void*)m_dragData->data ); + m_dataObject->SetData(dragFormat, + (size_t)gtk_selection_data_get_length(m_dragData), + (const void*)gtk_selection_data_get_data(m_dragData)); return true; } @@ -605,7 +608,7 @@ source_drag_data_get (GtkWidget *WXUNUSED(widget), guint WXUNUSED(time), wxDropSource *drop_source ) { - wxDataFormat format( selection_data->target ); + wxDataFormat format(gtk_selection_data_get_target(selection_data)); wxLogTrace(TRACE_DND, wxT("Drop source: format requested: %s"), format.GetId().c_str()); @@ -647,7 +650,7 @@ source_drag_data_get (GtkWidget *WXUNUSED(widget), drop_source->m_retValue = ConvertFromGTK( context->action ); gtk_selection_data_set( selection_data, - selection_data->target, + gtk_selection_data_get_target(selection_data), 8, // 8-bit d, size ); @@ -734,11 +737,11 @@ void wxDropSource::SetIcons(const wxIcon &iconCopy, m_iconMove = iconMove; m_iconNone = iconNone; - if ( !m_iconCopy.Ok() ) + if ( !m_iconCopy.IsOk() ) m_iconCopy = wxIcon(page_xpm); - if ( !m_iconMove.Ok() ) + if ( !m_iconMove.IsOk() ) m_iconMove = m_iconCopy; - if ( !m_iconNone.Ok() ) + if ( !m_iconNone.IsOk() ) m_iconNone = m_iconCopy; } @@ -783,7 +786,7 @@ void wxDropSource::PrepareIcon( int action, GdkDragContext *context ) g_signal_connect (m_iconWindow, "configure_event", G_CALLBACK (gtk_dnd_window_configure_callback), this); - gdk_window_set_back_pixmap (m_iconWindow->window, pixmap, FALSE); + gdk_window_set_back_pixmap(gtk_widget_get_window(m_iconWindow), pixmap, false); if (mask) gtk_widget_shape_combine_mask (m_iconWindow, mask, 0, 0); diff --git a/Externals/wxWidgets3/src/gtk/filedlg.cpp b/Externals/wxWidgets3/src/gtk/filedlg.cpp index 1c6dd3ef29..b28d54bf98 100644 --- a/Externals/wxWidgets3/src/gtk/filedlg.cpp +++ b/Externals/wxWidgets3/src/gtk/filedlg.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/filedlg.cpp // Purpose: native implementation of wxFileDialog // Author: Robert Roebling, Zbigniew Zagorski, Mart Raudsepp -// Id: $Id: filedlg.cpp 64381 2010-05-22 12:07:54Z VZ $ +// Id: $Id: filedlg.cpp 70898 2012-03-14 12:32:27Z VZ $ // Copyright: (c) 1998 Robert Roebling, 2004 Zbigniew Zagorski, 2005 Mart Raudsepp // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,7 +22,9 @@ #include #include "wx/gtk/private.h" +#ifdef __UNIX__ #include // chdir +#endif #include "wx/filename.h" // wxFilename #include "wx/tokenzr.h" // wxStringTokenizer @@ -172,13 +174,24 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, const wxSize& sz, const wxString& name) : wxFileDialogBase() +{ + Create(parent, message, defaultDir, defaultFileName, wildCard, style, pos, sz, name); +} + +bool wxFileDialog::Create(wxWindow *parent, const wxString& message, + const wxString& defaultDir, + const wxString& defaultFileName, + const wxString& wildCard, + long style, const wxPoint& pos, + const wxSize& sz, + const wxString& name) { parent = GetParentForModalDialog(parent, style); if (!wxFileDialogBase::Create(parent, message, defaultDir, defaultFileName, wildCard, style, pos, sz, name)) { - return; + return false; } if (!PreCreation(parent, pos, wxDefaultSize) || @@ -186,7 +199,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, wxDefaultValidator, wxT("filedialog"))) { wxFAIL_MSG( wxT("wxFileDialog creation failed") ); - return; + return false; } GtkFileChooserAction gtk_action; @@ -235,7 +248,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, // local-only property could be set to false to allow non-local files to be // loaded. In that case get/set_uri(s) should be used instead of // get/set_filename(s) everywhere and the GtkFileChooserDialog should - // probably also be created with a backend, e.g "gnome-vfs", "default", ... + // probably also be created with a backend, e.g. "gnome-vfs", "default", ... // (gtk_file_chooser_dialog_new_with_backend). Currently local-only is kept // as the default - true: // gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(m_widget), true); @@ -309,6 +322,8 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, G_CALLBACK(gtk_filedialog_update_preview_callback), previewImage); } + + return true; } wxFileDialog::~wxFileDialog() @@ -369,10 +384,17 @@ void wxFileDialog::SetMessage(const wxString& message) void wxFileDialog::SetPath(const wxString& path) { + // Don't do anything if no path is specified, in particular don't set the + // path to m_dir below as this would result in opening the dialog in the + // parent directory of this one instead of m_dir itself. + if ( path.empty() ) + return; + // we need an absolute path for GTK native chooser so ensure that we have - // it + // it: use the initial directory if it was set or just CWD otherwise (this + // is the default behaviour if m_dir is empty) wxFileName fn(path); - fn.MakeAbsolute(); + fn.MakeAbsolute(m_dir); m_fc.SetPath(fn.GetFullPath()); } diff --git a/Externals/wxWidgets3/src/gtk/filepicker.cpp b/Externals/wxWidgets3/src/gtk/filepicker.cpp index 3ae914446a..276bc63eea 100644 --- a/Externals/wxWidgets3/src/gtk/filepicker.cpp +++ b/Externals/wxWidgets3/src/gtk/filepicker.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified By: // Created: 15/04/2006 -// Id: $Id: filepicker.cpp 61724 2009-08-21 10:41:26Z VZ $ +// Id: $Id: filepicker.cpp 70754 2012-02-29 18:05:03Z PC $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -80,9 +80,7 @@ bool wxFileButton::Create( wxWindow *parent, wxWindowID id, // use as label the currently selected file m_widget = gtk_file_chooser_button_new_with_dialog( m_dialog->m_widget ); - g_object_ref(m_widget); - gtk_widget_show(m_widget); // we need to know when the dialog has been dismissed clicking OK... // NOTE: the "clicked" signal is not available for a GtkFileChooserButton @@ -129,6 +127,14 @@ void wxFileButton::SetPath(const wxString &str) UpdateDialogPath(m_dialog); } +void wxFileButton::SetInitialDirectory(const wxString& dir) +{ + if (m_dialog) + DoSetInitialDirectory(static_cast(m_dialog), dir); + else + wxGenericFileButton::SetInitialDirectory(dir); +} + #endif // wxUSE_FILEPICKERCTRL && defined(__WXGTK26__) @@ -136,7 +142,9 @@ void wxFileButton::SetPath(const wxString &str) #if wxUSE_DIRPICKERCTRL && defined(__WXGTK26__) +#ifdef __UNIX__ #include // chdir +#endif //----------------------------------------------------------------------------- // "current-folder-changed" @@ -227,9 +235,6 @@ bool wxDirButton::Create( wxWindow *parent, wxWindowID id, m_widget = gtk_file_chooser_button_new_with_dialog( m_dialog->m_widget ); g_object_ref(m_widget); - - gtk_widget_show(m_widget); - // GtkFileChooserButton signals g_signal_connect(m_widget, "current-folder-changed", G_CALLBACK(gtk_dirbutton_currentfolderchanged_callback), this); @@ -274,4 +279,15 @@ void wxDirButton::SetPath(const wxString& str) UpdateDialogPath(m_dialog); } +void wxDirButton::SetInitialDirectory(const wxString& dir) +{ + if (m_dialog) + { + if (m_path.empty()) + static_cast(m_dialog)->SetPath(dir); + } + else + wxGenericDirButton::SetInitialDirectory(dir); +} + #endif // wxUSE_DIRPICKERCTRL && defined(__WXGTK26__) diff --git a/Externals/wxWidgets3/src/gtk/font.cpp b/Externals/wxWidgets3/src/gtk/font.cpp index 822773b38a..b09793a989 100644 --- a/Externals/wxWidgets3/src/gtk/font.cpp +++ b/Externals/wxWidgets3/src/gtk/font.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/font.cpp // Purpose: wxFont for wxGTK // Author: Robert Roebling -// Id: $Id: font.cpp 66641 2011-01-07 22:01:22Z SC $ +// Id: $Id: font.cpp 70476 2012-01-29 08:14:34Z PC $ // Copyright: (c) 1998 Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -52,6 +52,7 @@ public: wxFontStyle style = wxFONTSTYLE_NORMAL, wxFontWeight weight = wxFONTWEIGHT_NORMAL, bool underlined = false, + bool strikethrough = false, const wxString& faceName = wxEmptyString, wxFontEncoding encoding = wxFONTENCODING_DEFAULT); @@ -69,6 +70,7 @@ public: void SetStyle(wxFontStyle style); void SetWeight(wxFontWeight weight); void SetUnderlined(bool underlined); + void SetStrikethrough(bool strikethrough); bool SetFaceName(const wxString& facename); void SetEncoding(wxFontEncoding encoding); @@ -82,6 +84,7 @@ protected: wxFontStyle style, wxFontWeight weight, bool underlined, + bool strikethrough, const wxString& faceName, wxFontEncoding encoding); @@ -90,7 +93,7 @@ protected: private: bool m_underlined; - + bool m_strikethrough; // The native font info: basically a PangoFontDescription wxNativeFontInfo m_nativeFontInfo; @@ -108,6 +111,7 @@ void wxFontRefData::Init(int pointSize, wxFontStyle style, wxFontWeight weight, bool underlined, + bool strikethrough, const wxString& faceName, wxFontEncoding WXUNUSED(encoding)) { @@ -115,6 +119,7 @@ void wxFontRefData::Init(int pointSize, family = wxFONTFAMILY_SWISS; m_underlined = underlined; + m_strikethrough = strikethrough; // Create native font info m_nativeFontInfo.description = pango_font_description_new(); @@ -149,12 +154,14 @@ void wxFontRefData::InitFromNative() // Pango description are never underlined m_underlined = false; + m_strikethrough = false; } wxFontRefData::wxFontRefData( const wxFontRefData& data ) : wxGDIRefData() { m_underlined = data.m_underlined; + m_strikethrough = data.m_strikethrough; // Forces a copy of the internal data. wxNativeFontInfo should probably // have a copy ctor and assignment operator to fix this properly but that @@ -163,11 +170,11 @@ wxFontRefData::wxFontRefData( const wxFontRefData& data ) } wxFontRefData::wxFontRefData(int size, wxFontFamily family, wxFontStyle style, - wxFontWeight weight, bool underlined, + wxFontWeight weight, bool underlined, bool strikethrough, const wxString& faceName, wxFontEncoding encoding) { - Init(size, family, style, weight, underlined, faceName, encoding); + Init(size, family, style, weight, underlined, strikethrough, faceName, encoding); } wxFontRefData::wxFontRefData(const wxString& nativeFontInfoString) @@ -244,6 +251,11 @@ void wxFontRefData::SetUnderlined(bool underlined) // here we just need to save the underlined attribute } +void wxFontRefData::SetStrikethrough(bool strikethrough) +{ + m_strikethrough = strikethrough; +} + bool wxFontRefData::SetFaceName(const wxString& facename) { return m_nativeFontInfo.SetFaceName(facename); @@ -277,6 +289,19 @@ wxFont::wxFont(const wxNativeFontInfo& info) info.GetEncoding() ); } +wxFont::wxFont(int pointSize, + wxFontFamily family, + int flags, + const wxString& face, + wxFontEncoding encoding) +{ + m_refData = new wxFontRefData(pointSize, family, + GetStyleFromFlags(flags), + GetWeightFromFlags(flags), + GetUnderlinedFromFlags(flags), + false, face, encoding); +} + bool wxFont::Create( int pointSize, wxFontFamily family, wxFontStyle style, @@ -288,7 +313,7 @@ bool wxFont::Create( int pointSize, UnRef(); m_refData = new wxFontRefData(pointSize, family, style, weight, - underlined, face, encoding); + underlined, false, face, encoding); return true; } @@ -356,6 +381,13 @@ bool wxFont::GetUnderlined() const return M_FONTDATA->m_underlined; } +bool wxFont::GetStrikethrough() const +{ + wxCHECK_MSG( IsOk(), false, wxT("invalid font") ); + + return M_FONTDATA->m_strikethrough; +} + wxFontEncoding wxFont::GetEncoding() const { wxCHECK_MSG( IsOk(), wxFONTENCODING_SYSTEM, wxT("invalid font") ); @@ -425,6 +457,13 @@ void wxFont::SetUnderlined(bool underlined) M_FONTDATA->SetUnderlined(underlined); } +void wxFont::SetStrikethrough(bool strikethrough) +{ + AllocExclusive(); + + M_FONTDATA->SetStrikethrough(strikethrough); +} + void wxFont::SetEncoding(wxFontEncoding encoding) { AllocExclusive(); @@ -448,3 +487,66 @@ wxGDIRefData* wxFont::CloneGDIRefData(const wxGDIRefData* data) const { return new wxFontRefData(*static_cast(data)); } + +bool wxFont::GTKSetPangoAttrs(PangoLayout* layout) const +{ + if (!IsOk() || !(GetUnderlined() || GetStrikethrough())) + return false; + + PangoAttrList* attrs = pango_attr_list_new(); + PangoAttribute* a; + + if (wx_pango_version_check(1,16,0)) + { + // a PangoLayout which has leading/trailing spaces with underlined font + // is not correctly drawn by this pango version: Pango won't underline the spaces. + // This can be a problem; e.g. wxHTML rendering of underlined text relies on + // this behaviour. To workaround this problem, we use a special hack here + // suggested by pango maintainer Behdad Esfahbod: we prepend and append two + // empty space characters and give them a dummy colour attribute. + // This will force Pango to underline the leading/trailing spaces, too. + + const char* text = pango_layout_get_text(layout); + const size_t n = strlen(text); + if ((n > 0 && text[0] == ' ') || (n > 1 && text[n - 1] == ' ')) + { + wxCharBuffer buf(n + 6); + // copy the leading U+200C ZERO WIDTH NON-JOINER encoded in UTF8 format + memcpy(buf.data(), "\342\200\214", 3); + // copy the user string + memcpy(buf.data() + 3, text, n); + // copy the trailing U+200C ZERO WIDTH NON-JOINER encoded in UTF8 format + memcpy(buf.data() + 3 + n, "\342\200\214", 3); + + pango_layout_set_text(layout, buf, n + 6); + + // Add dummy attributes (use colour as it's invisible anyhow for 0 + // width spaces) to ensure that the spaces in the beginning/end of the + // string are underlined too. + a = pango_attr_foreground_new(0x0057, 0x52A9, 0xD614); + a->start_index = 0; + a->end_index = 3; + pango_attr_list_insert(attrs, a); + + a = pango_attr_foreground_new(0x0057, 0x52A9, 0xD614); + a->start_index = n + 3; + a->end_index = n + 6; + pango_attr_list_insert(attrs, a); + } + } + if (GetUnderlined()) + { + a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); + pango_attr_list_insert(attrs, a); + } + if (GetStrikethrough()) + { + a = pango_attr_strikethrough_new(true); + pango_attr_list_insert(attrs, a); + } + + pango_layout_set_attributes(layout, attrs); + pango_attr_list_unref(attrs); + + return true; +} diff --git a/Externals/wxWidgets3/src/gtk/fontdlg.cpp b/Externals/wxWidgets3/src/gtk/fontdlg.cpp index 716ee14615..0b58429526 100644 --- a/Externals/wxWidgets3/src/gtk/fontdlg.cpp +++ b/Externals/wxWidgets3/src/gtk/fontdlg.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/fontdlg.cpp // Purpose: wxFontDialog // Author: Robert Roebling -// Id: $Id: fontdlg.cpp 64019 2010-04-18 00:05:37Z VZ $ +// Id: $Id: fontdlg.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -106,17 +106,17 @@ bool wxFontDialog::DoCreate(wxWindow *parent) GtkFontSelectionDialog *sel = GTK_FONT_SELECTION_DIALOG(m_widget); - g_signal_connect (sel->ok_button, "clicked", + g_signal_connect (gtk_font_selection_dialog_get_ok_button(sel), "clicked", G_CALLBACK (gtk_fontdialog_ok_callback), this); - g_signal_connect (sel->cancel_button, "clicked", + g_signal_connect (gtk_font_selection_dialog_get_cancel_button(sel), "clicked", G_CALLBACK (gtk_fontdialog_cancel_callback), this); g_signal_connect (m_widget, "delete_event", G_CALLBACK (gtk_fontdialog_delete_callback), this); wxFont font = m_fontData.GetInitialFont(); - if( font.Ok() ) + if( font.IsOk() ) { const wxNativeFontInfo *info = font.GetNativeFontInfo(); diff --git a/Externals/wxWidgets3/src/gtk/fontpicker.cpp b/Externals/wxWidgets3/src/gtk/fontpicker.cpp index fb4fa24047..11b34cddea 100644 --- a/Externals/wxWidgets3/src/gtk/fontpicker.cpp +++ b/Externals/wxWidgets3/src/gtk/fontpicker.cpp @@ -4,7 +4,7 @@ // Author: Francesco Montorsi // Modified By: // Created: 15/04/2006 -// Id: $Id: fontpicker.cpp 61724 2009-08-21 10:41:26Z VZ $ +// Id: $Id: fontpicker.cpp 70756 2012-02-29 18:29:31Z PC $ // Copyright: (c) Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -81,8 +81,6 @@ bool wxFontButton::Create( wxWindow *parent, wxWindowID id, gtk_font_button_set_use_size(GTK_FONT_BUTTON(m_widget), usefont); gtk_font_button_set_use_font(GTK_FONT_BUTTON(m_widget), usefont); - gtk_widget_show(m_widget); - // GtkFontButton signals g_signal_connect(m_widget, "font-set", G_CALLBACK(gtk_fontbutton_setfont_callback), this); diff --git a/Externals/wxWidgets3/src/gtk/frame.cpp b/Externals/wxWidgets3/src/gtk/frame.cpp index 96893aa87d..40b32c37d2 100644 --- a/Externals/wxWidgets3/src/gtk/frame.cpp +++ b/Externals/wxWidgets3/src/gtk/frame.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/frame.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: frame.cpp 66648 2011-01-08 06:42:41Z PC $ +// Id: $Id: frame.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -271,7 +271,7 @@ void wxFrame::DetachMenuBar() #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2 hildon_window_set_menu(HILDON_WINDOW(m_widget), NULL); #else // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 - gtk_widget_ref( m_frameMenuBar->m_widget ); + g_object_ref( m_frameMenuBar->m_widget ); gtk_container_remove( GTK_CONTAINER(m_mainWidget), m_frameMenuBar->m_widget ); #endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2 /!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 @@ -332,7 +332,7 @@ void wxFrame::SetToolBar(wxToolBar *toolbar) { // Vertical toolbar and m_wxwindow go into an hbox, inside the // vbox (m_mainWidget). hbox is created on demand. - GtkWidget* hbox = m_wxwindow->parent; + GtkWidget* hbox = gtk_widget_get_parent(m_wxwindow); if (!GTK_IS_HBOX(hbox)) { hbox = gtk_hbox_new(false, 0); diff --git a/Externals/wxWidgets3/src/gtk/glcanvas.cpp b/Externals/wxWidgets3/src/gtk/glcanvas.cpp index 2dcab7e1dc..8e892ad967 100644 --- a/Externals/wxWidgets3/src/gtk/glcanvas.cpp +++ b/Externals/wxWidgets3/src/gtk/glcanvas.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Modified by: // Created: 17/08/98 -// RCS-ID: $Id: glcanvas.cpp 66657 2011-01-08 18:05:33Z PC $ +// RCS-ID: $Id: glcanvas.cpp 67333 2011-03-29 05:17:00Z PC $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -18,6 +18,7 @@ #include #include +#include "wx/gtk/private/gtk2-compat.h" #if WXWIN_COMPATIBILITY_2_8 @@ -231,11 +232,11 @@ bool wxGLCanvas::Create(wxWindow *parent, // if our parent window is already visible, we had been realized before we // connected to the "realize" signal and hence our m_glContext hasn't been // initialized yet and we have to do it now - if (GTK_WIDGET_REALIZED(m_wxwindow)) + if (gtk_widget_get_realized(m_wxwindow)) gtk_glwindow_realized_callback( m_wxwindow, this ); #endif // WXWIN_COMPATIBILITY_2_8 - if (GTK_WIDGET_MAPPED(m_wxwindow)) + if (gtk_widget_get_mapped(m_wxwindow)) gtk_glwindow_map_callback( m_wxwindow, this ); return true; diff --git a/Externals/wxWidgets3/src/gtk/gnome/gprint.cpp b/Externals/wxWidgets3/src/gtk/gnome/gprint.cpp index 439aef3de6..01900ebf31 100644 --- a/Externals/wxWidgets3/src/gtk/gnome/gprint.cpp +++ b/Externals/wxWidgets3/src/gtk/gnome/gprint.cpp @@ -3,7 +3,7 @@ // Author: Robert Roebling // Purpose: Implement GNOME printing support // Created: 09/20/04 -// RCS-ID: $Id: gprint.cpp 65820 2010-10-15 23:46:46Z VZ $ +// RCS-ID: $Id: gprint.cpp 70478 2012-01-29 08:49:01Z PC $ // Copyright: Robert Roebling // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -1534,7 +1534,7 @@ wxGnomePrinterDCImpl::DoDrawBitmap(const wxBitmap& bitmap, wxCoord x, wxCoord y, bool WXUNUSED(useMask)) { - if (!bitmap.Ok()) return; + if (!bitmap.IsOk()) return; if (bitmap.HasPixbuf()) { @@ -1565,7 +1565,7 @@ wxGnomePrinterDCImpl::DoDrawBitmap(const wxBitmap& bitmap, { wxImage image = bitmap.ConvertToImage(); - if (!image.Ok()) return; + if (!image.IsOk()) return; gs_libGnomePrint->gnome_print_gsave( m_gpc ); double matrix[6]; @@ -1592,25 +1592,12 @@ void wxGnomePrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wx double xx = XLOG2DEV(x); double yy = YLOG2DEV(y); - bool underlined = m_font.Ok() && m_font.GetUnderlined(); - const wxScopedCharBuffer data(text.utf8_str()); - size_t datalen = strlen(data); - pango_layout_set_text( m_layout, data, datalen); + pango_layout_set_text(m_layout, data, data.length()); + const bool setAttrs = m_font.GTKSetPangoAttrs(m_layout); - if (underlined) - { - PangoAttrList *attrs = pango_attr_list_new(); - PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); - a->start_index = 0; - a->end_index = datalen; - pango_attr_list_insert(attrs, a); - pango_layout_set_attributes(m_layout, attrs); - pango_attr_list_unref(attrs); - } - - if (m_textForegroundColour.Ok()) + if (m_textForegroundColour.IsOk()) { unsigned char red = m_textForegroundColour.Red(); unsigned char blue = m_textForegroundColour.Blue(); @@ -1656,7 +1643,7 @@ void wxGnomePrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wx gs_libGnomePrint->gnome_print_grestore( m_gpc ); - if (underlined) + if (setAttrs) { // undo underline attributes setting: pango_layout_set_attributes(m_layout, NULL); @@ -1674,7 +1661,7 @@ void wxGnomePrinterDCImpl::SetFont( const wxFont& font ) { m_font = font; - if (m_font.Ok()) + if (m_font.IsOk()) { if (m_fontdesc) pango_font_description_free( m_fontdesc ); @@ -1691,7 +1678,7 @@ void wxGnomePrinterDCImpl::SetFont( const wxFont& font ) void wxGnomePrinterDCImpl::SetPen( const wxPen& pen ) { - if (!pen.Ok()) return; + if (!pen.IsOk()) return; m_pen = pen; @@ -1757,7 +1744,7 @@ void wxGnomePrinterDCImpl::SetPen( const wxPen& pen ) void wxGnomePrinterDCImpl::SetBrush( const wxBrush& brush ) { - if (!brush.Ok()) return; + if (!brush.IsOk()) return; m_brush = brush; diff --git a/Externals/wxWidgets3/src/gtk/hyperlink.cpp b/Externals/wxWidgets3/src/gtk/hyperlink.cpp index 93ee1bf705..2ea8b35ef8 100644 --- a/Externals/wxWidgets3/src/gtk/hyperlink.cpp +++ b/Externals/wxWidgets3/src/gtk/hyperlink.cpp @@ -3,7 +3,7 @@ // Purpose: Hyperlink control // Author: Francesco Montorsi // Created: 14/2/2007 -// RCS-ID: $Id: hyperlink.cpp 65334 2010-08-17 16:55:32Z VZ $ +// RCS-ID: $Id: hyperlink.cpp 70756 2012-02-29 18:29:31Z PC $ // Copyright: (c) 2007 Francesco Montorsi // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -82,7 +82,6 @@ bool wxHyperlinkCtrl::Create(wxWindow *parent, wxWindowID id, m_widget = gtk_link_button_new("asdfsaf asdfdsaf asdfdsa"); g_object_ref(m_widget); - gtk_widget_show(m_widget); // alignment float x_alignment = 0.5; @@ -123,6 +122,13 @@ wxSize wxHyperlinkCtrl::DoGetBestSize() const return wxGenericHyperlinkCtrl::DoGetBestSize(); } +wxSize wxHyperlinkCtrl::DoGetBestClientSize() const +{ + if ( UseNative() ) + return wxControl::DoGetBestClientSize(); + return wxGenericHyperlinkCtrl::DoGetBestClientSize(); +} + void wxHyperlinkCtrl::SetLabel(const wxString &label) { if ( UseNative() ) diff --git a/Externals/wxWidgets3/src/gtk/listbox.cpp b/Externals/wxWidgets3/src/gtk/listbox.cpp index 8fa3e1d46d..5b4f36e76e 100644 --- a/Externals/wxWidgets3/src/gtk/listbox.cpp +++ b/Externals/wxWidgets3/src/gtk/listbox.cpp @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // Modified By: Ryan Norton (GtkTreeView implementation) -// Id: $Id: listbox.cpp 67136 2011-03-06 18:22:23Z VS $ +// Id: $Id: listbox.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -433,7 +433,7 @@ void wxListBox::Update() wxWindow::Update(); if (m_treeview) - gdk_window_process_updates(GTK_WIDGET(m_treeview)->window, TRUE); + gdk_window_process_updates(gtk_widget_get_window(GTK_WIDGET(m_treeview)), true); } // ---------------------------------------------------------------------------- @@ -773,7 +773,7 @@ void wxListBox::DoScrollToCell(int n, float alignY, float alignX) wxCHECK_RET( IsValid(n), wxT("invalid index")); //RN: I have no idea why this line is needed... - if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (m_treeview)) + if (gdk_pointer_is_grabbed () && gtk_widget_has_grab(GTK_WIDGET(m_treeview))) return; GtkTreeIter iter; @@ -841,23 +841,6 @@ int wxListBox::DoListHitTest(const wxPoint& point) const // helpers // ---------------------------------------------------------------------------- -#if wxUSE_TOOLTIPS -void wxListBox::GTKApplyToolTip( GtkTooltips *tips, const gchar *tip ) -{ -#if GTK_CHECK_VERSION(2, 12, 0) - if (!gtk_check_version(2, 12, 0)) - { - gtk_widget_set_tooltip_text(GTK_WIDGET( m_treeview ), tip); - } - else -#endif - { - // RN: Is this needed anymore? - gtk_tooltips_set_tip( tips, GTK_WIDGET( m_treeview ), tip, NULL ); - } -} -#endif // wxUSE_TOOLTIPS - GtkWidget *wxListBox::GetConnectWidget() { // the correct widget for listbox events (such as mouse clicks for example) @@ -872,7 +855,7 @@ GdkWindow *wxListBox::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const void wxListBox::DoApplyWidgetStyle(GtkRcStyle *style) { - if (m_hasBgCol && m_backgroundColour.Ok()) + if (m_hasBgCol && m_backgroundColour.IsOk()) { GdkWindow *window = gtk_tree_view_get_bin_window(m_treeview); if (window) diff --git a/Externals/wxWidgets3/src/gtk/mdi.cpp b/Externals/wxWidgets3/src/gtk/mdi.cpp index 6b3a4db2fc..2f665e0312 100644 --- a/Externals/wxWidgets3/src/gtk/mdi.cpp +++ b/Externals/wxWidgets3/src/gtk/mdi.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/mdi.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: mdi.cpp 64127 2010-04-24 15:08:00Z VZ $ +// Id: $Id: mdi.cpp 69528 2011-10-25 16:56:57Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -27,10 +27,7 @@ extern "C" { static void -gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), - GtkNotebookPage *page, - gint WXUNUSED(page_num), - wxMDIParentFrame *parent ) +switch_page(GtkNotebook* widget, GtkNotebookPage*, guint page_num, wxMDIParentFrame* parent) { // send deactivate event to old child @@ -49,6 +46,7 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), return; child = NULL; + GtkWidget* page = gtk_notebook_get_nth_page(widget, page_num); wxWindowList::compatibility_iterator node = client_window->GetChildren().GetFirst(); while ( node ) @@ -58,7 +56,7 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), // child_frame can be NULL when this is called from dtor, probably // because g_signal_connect (m_widget, "switch_page", (see below) // isn't deleted early enough - if ( child_frame && child_frame->m_page == page ) + if (child_frame && child_frame->m_widget == page) { child = child_frame; break; @@ -114,7 +112,7 @@ void wxMDIParentFrame::OnInternalIdle() if (m_justInserted) { GtkNotebook *notebook = GTK_NOTEBOOK(m_clientWindow->m_widget); - gtk_notebook_set_current_page( notebook, g_list_length( notebook->children ) - 1 ); + gtk_notebook_set_current_page(notebook, -1); /* need to set the menubar of the child */ wxMDIChildFrame *active_child_frame = GetActiveChild(); @@ -220,7 +218,7 @@ wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const gint i = gtk_notebook_get_current_page( notebook ); if (i < 0) return NULL; - GtkNotebookPage* page = (GtkNotebookPage*) (g_list_nth(notebook->children,i)->data); + GtkWidget* page = gtk_notebook_get_nth_page(notebook, i); if (!page) return NULL; wxWindowList::compatibility_iterator node = m_clientWindow->GetChildren().GetFirst(); @@ -234,7 +232,7 @@ wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const if (!child_frame) return NULL; - if (child_frame->m_page == page) + if (child_frame->m_widget == page) return child_frame; node = node->GetNext(); @@ -269,7 +267,6 @@ END_EVENT_TABLE() void wxMDIChildFrame::Init() { m_menuBar = NULL; - m_page = NULL; } bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, @@ -297,6 +294,12 @@ wxMDIChildFrame::~wxMDIChildFrame() gtk_widget_queue_draw(m_parent->m_widget); } +void wxMDIChildFrame::GTKHandleRealized() +{ + // since m_widget is not a GtkWindow, must bypass wxTopLevelWindowGTK + wxTopLevelWindowBase::GTKHandleRealized(); +} + void wxMDIChildFrame::SetMenuBar( wxMenuBar *menu_bar ) { wxASSERT_MSG( m_menuBar == NULL, "Only one menubar allowed" ); @@ -391,9 +394,7 @@ wxMDIClientWindow::~wxMDIClientWindow() // a call to gtk_mdi_page_change_callback with an invalid parent // (because gtk_mdi_page_change_callback expects a wxMDIClientWindow but // at that point of the dtor chain we are a simple wxWindow!) - g_signal_handlers_disconnect_by_func(m_widget, - (gpointer)gtk_mdi_page_change_callback, - GetParent()); + g_signal_handlers_disconnect_by_func(m_widget, (void*)switch_page, GetParent()); } bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) @@ -409,8 +410,7 @@ bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) m_widget = gtk_notebook_new(); g_object_ref(m_widget); - g_signal_connect (m_widget, "switch_page", - G_CALLBACK (gtk_mdi_page_change_callback), parent); + g_signal_connect(m_widget, "switch_page", G_CALLBACK(switch_page), parent); gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 ); @@ -437,8 +437,6 @@ void wxMDIClientWindow::AddChildGTK(wxWindowGTK* child) gtk_notebook_append_page( notebook, child->m_widget, label_widget ); - child_frame->m_page = (GtkNotebookPage*) (g_list_last(notebook->children)->data); - wxMDIParentFrame* parent_frame = static_cast(GetParent()); parent_frame->m_justInserted = true; } diff --git a/Externals/wxWidgets3/src/gtk/menu.cpp b/Externals/wxWidgets3/src/gtk/menu.cpp index 659d2dc498..3e4f6425f6 100644 --- a/Externals/wxWidgets3/src/gtk/menu.cpp +++ b/Externals/wxWidgets3/src/gtk/menu.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/menu.cpp // Purpose: implementation of wxMenuBar and wxMenu classes for wxGTK // Author: Robert Roebling -// Id: $Id: menu.cpp 66637 2011-01-07 21:36:17Z SC $ +// Id: $Id: menu.cpp 70350 2012-01-15 13:41:17Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -230,13 +230,15 @@ void wxMenuBar::Detach() bool wxMenuBar::Append( wxMenu *menu, const wxString &title ) { - if ( !wxMenuBarBase::Append( menu, title ) ) - return false; - - return GtkAppend(menu, title); + if (wxMenuBarBase::Append(menu, title)) + { + GtkAppend(menu, title); + return true; + } + return false; } -bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos) +void wxMenuBar::GtkAppend(wxMenu* menu, const wxString& title, int pos) { menu->SetLayoutDirection(GetLayoutDirection()); @@ -251,7 +253,10 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos) const wxString str(wxStripMenuCodes(item->GetItemLabel())); if ( item->IsSubMenu() ) - return GtkAppend(item->GetSubMenu(), str, pos); + { + GtkAppend(item->GetSubMenu(), str, pos); + return; + } menu->m_owner = gtk_menu_item_new_with_mnemonic( wxGTK_CONV( str ) ); @@ -282,21 +287,16 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos) if ( m_menuBarFrame ) AttachToFrame( menu, m_menuBarFrame ); - - return true; } bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title) { - if ( !wxMenuBarBase::Insert(pos, menu, title) ) - return false; - - // TODO - - if ( !GtkAppend(menu, title, (int)pos) ) - return false; - - return true; + if (wxMenuBarBase::Insert(pos, menu, title)) + { + GtkAppend(menu, title, int(pos)); + return true; + } + return false; } wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title) @@ -416,6 +416,15 @@ void wxMenuBar::EnableTop( size_t pos, bool flag ) gtk_widget_set_sensitive( menu->m_owner, flag ); } +bool wxMenuBar::IsEnabledTop(size_t pos) const +{ + wxMenuList::compatibility_iterator node = m_menus.Item( pos ); + wxCHECK_MSG( node, false, wxS("invalid index in IsEnabledTop") ); + wxMenu* const menu = node->GetData(); + wxCHECK_MSG( menu->m_owner, true, wxS("no menu owner?") ); + return gtk_widget_get_sensitive( menu->m_owner ); +} + wxString wxMenuBar::GetMenuLabel( size_t pos ) const { wxMenuList::compatibility_iterator node = m_menus.Item( pos ); @@ -440,7 +449,7 @@ void wxMenuBar::SetMenuLabel( size_t pos, const wxString& label ) menu->SetTitle( str ); if (menu->m_owner) - gtk_label_set_text_with_mnemonic( GTK_LABEL( GTK_BIN(menu->m_owner)->child), wxGTK_CONV(str) ); + gtk_label_set_text_with_mnemonic(GTK_LABEL(gtk_bin_get_child(GTK_BIN(menu->m_owner))), wxGTK_CONV(str)); } //----------------------------------------------------------------------------- @@ -581,7 +590,7 @@ void wxMenuItem::SetItemLabel( const wxString& str ) void wxMenuItem::SetGtkLabel() { const wxString text = wxConvertMnemonicsToGTK(m_text.BeforeFirst('\t')); - GtkLabel* label = GTK_LABEL(GTK_BIN(m_menuItem)->child); + GtkLabel* label = GTK_LABEL(gtk_bin_get_child(GTK_BIN(m_menuItem))); gtk_label_set_text_with_mnemonic(label, wxGTK_CONV_SYS(text)); #if wxUSE_ACCEL guint accel_key; @@ -601,7 +610,9 @@ void wxMenuItem::SetBitmap(const wxBitmap& bitmap) if (m_kind == wxITEM_NORMAL) m_bitmap = bitmap; else + { wxFAIL_MSG("only normal menu items can have bitmaps"); + } } void wxMenuItem::Check( bool check ) @@ -640,7 +651,7 @@ bool wxMenuItem::IsChecked() const wxCHECK_MSG( IsCheckable(), false, wxT("can't get state of uncheckable item!") ); - return ((GtkCheckMenuItem*)m_menuItem)->active != 0; + return gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(m_menuItem)) != 0; } //----------------------------------------------------------------------------- @@ -682,8 +693,7 @@ void wxMenu::Init() m_menu = gtk_menu_new(); // NB: keep reference to the menu so that it is not destroyed behind // our back by GTK+ e.g. when it is removed from menubar: - g_object_ref(m_menu); - gtk_object_sink(GTK_OBJECT(m_menu)); + g_object_ref_sink(m_menu); m_owner = NULL; @@ -697,8 +707,6 @@ void wxMenu::Init() gtk_menu_shell_append(GTK_MENU_SHELL(m_menu), tearoff); } - m_prevRadio = NULL; - // append the title as the very first entry if we have it if ( !m_title.empty() ) { @@ -746,11 +754,9 @@ wxString wxMenu::GetTitle() const return wxConvertMnemonicsFromGTK(wxMenuBase::GetTitle()); } -bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) +void wxMenu::GtkAppend(wxMenuItem* mitem, int pos) { GtkWidget *menuItem; - GtkWidget* prevRadio = m_prevRadio; - m_prevRadio = NULL; switch (mitem->GetKind()) { case wxITEM_SEPARATOR: @@ -761,11 +767,44 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) break; case wxITEM_RADIO: { + // See if we need to create a new radio group for this item or + // add it to an existing one. + wxMenuItem* radioGroupItem = NULL; + + const size_t numItems = GetMenuItemCount(); + const size_t n = pos == -1 ? numItems - 1 : size_t(pos); + + if (n != 0) + { + wxMenuItem* const itemPrev = FindItemByPosition(n - 1); + if ( itemPrev->GetKind() == wxITEM_RADIO ) + { + // Appending an item after an existing radio item puts + // it into the same radio group. + radioGroupItem = itemPrev; + } + } + + if (radioGroupItem == NULL && n != numItems - 1) + { + wxMenuItem* const itemNext = FindItemByPosition(n + 1); + if ( itemNext->GetKind() == wxITEM_RADIO ) + { + // Inserting an item before an existing radio item + // also puts it into the existing radio group. + radioGroupItem = itemNext; + } + } + GSList* group = NULL; - if (prevRadio) - group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(prevRadio)); + if ( radioGroupItem ) + { + group = gtk_radio_menu_item_get_group( + GTK_RADIO_MENU_ITEM(radioGroupItem->GetMenuItem()) + ); + } + menuItem = gtk_radio_menu_item_new_with_label(group, ""); - m_prevRadio = menuItem; } break; default: @@ -820,28 +859,26 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) mitem); } } - - return true; } wxMenuItem* wxMenu::DoAppend(wxMenuItem *mitem) { - if (!GtkAppend(mitem)) - return NULL; - - return wxMenuBase::DoAppend(mitem); + if (wxMenuBase::DoAppend(mitem)) + { + GtkAppend(mitem); + return mitem; + } + return NULL; } wxMenuItem* wxMenu::DoInsert(size_t pos, wxMenuItem *item) { - if ( !wxMenuBase::DoInsert(pos, item) ) - return NULL; - - // TODO - if ( !GtkAppend(item, (int)pos) ) - return NULL; - - return item; + if (wxMenuBase::DoInsert(pos, item)) + { + GtkAppend(item, int(pos)); + return item; + } + return NULL; } wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) @@ -850,14 +887,21 @@ wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) return NULL; GtkWidget * const mitem = item->GetMenuItem(); - if ( m_prevRadio == mitem ) + if (!gtk_check_version(2,12,0)) { - // deleting an item starts a new radio group (has to as we shouldn't - // keep a deleted pointer anyhow) - m_prevRadio = NULL; + // gtk_menu_item_remove_submenu() is deprecated since 2.12, but + // gtk_menu_item_set_submenu() can now be used with NULL submenu now so + // just do use it. + gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), NULL); + } + else // GTK+ < 2.12 + { + // In 2.10 calling gtk_menu_item_set_submenu() with NULL submenu + // results in critical GTK+ error messages so use the old function + // instead. + gtk_menu_item_remove_submenu(GTK_MENU_ITEM(mitem)); } - gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), NULL); gtk_widget_destroy(mitem); item->SetMenuItem(NULL); diff --git a/Externals/wxWidgets3/src/gtk/minifram.cpp b/Externals/wxWidgets3/src/gtk/minifram.cpp index f01a2f986f..92bdfe77ff 100644 --- a/Externals/wxWidgets3/src/gtk/minifram.cpp +++ b/Externals/wxWidgets3/src/gtk/minifram.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/minifram.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: minifram.cpp 64404 2010-05-26 17:37:55Z RR $ +// Id: $Id: minifram.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -23,6 +23,7 @@ #include "wx/gtk/dcclient.h" #include +#include "wx/gtk/private/gtk2-compat.h" //----------------------------------------------------------------------------- // data @@ -61,13 +62,13 @@ extern "C" { static gboolean gtk_window_own_expose_callback(GtkWidget* widget, GdkEventExpose* gdk_event, wxMiniFrame* win) { if (!win->m_hasVMT || gdk_event->count > 0 || - gdk_event->window != widget->window) + gdk_event->window != gtk_widget_get_window(widget)) { return false; } - gtk_paint_shadow (widget->style, - widget->window, + gtk_paint_shadow (gtk_widget_get_style(widget), + gtk_widget_get_window(widget), GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, NULL, NULL, // FIXME: No clipping? @@ -80,7 +81,7 @@ static gboolean gtk_window_own_expose_callback(GtkWidget* widget, GdkEventExpose wxDCImpl *impl = dc.GetImpl(); wxClientDCImpl *gtk_impl = wxDynamicCast( impl, wxClientDCImpl ); - gtk_impl->m_gdkwindow = widget->window; // Hack alert + gtk_impl->m_gdkwindow = gtk_widget_get_window(widget); // Hack alert if (style & wxRESIZE_BORDER) { @@ -120,7 +121,7 @@ extern "C" { static gboolean gtk_window_button_press_callback(GtkWidget* widget, GdkEventButton* gdk_event, wxMiniFrame* win) { - if (!win->m_hasVMT || gdk_event->window != widget->window) + if (!win->m_hasVMT || gdk_event->window != gtk_widget_get_window(widget)) return false; if (g_blockEventsOnDrag) return TRUE; if (g_blockEventsOnScroll) return TRUE; @@ -137,7 +138,7 @@ gtk_window_button_press_callback(GtkWidget* widget, GdkEventButton* gdk_event, w { GtkWidget *ancestor = gtk_widget_get_toplevel( widget ); - GdkWindow *source = widget->window; + GdkWindow *source = gtk_widget_get_window(widget); int org_x = 0; int org_y = 0; @@ -165,9 +166,9 @@ gtk_window_button_press_callback(GtkWidget* widget, GdkEventButton* gdk_event, w if (y >= win->m_miniEdge + win->m_miniTitle) return true; - gdk_window_raise( win->m_widget->window ); + gdk_window_raise(gtk_widget_get_window(win->m_widget)); - gdk_pointer_grab( widget->window, FALSE, + gdk_pointer_grab( gtk_widget_get_window(widget), false, (GdkEventMask) (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | @@ -198,7 +199,7 @@ extern "C" { static gboolean gtk_window_button_release_callback(GtkWidget* widget, GdkEventButton* gdk_event, wxMiniFrame* win) { - if (!win->m_hasVMT || gdk_event->window != widget->window) + if (!win->m_hasVMT || gdk_event->window != gtk_widget_get_window(widget)) return false; if (g_blockEventsOnDrag) return TRUE; if (g_blockEventsOnScroll) return TRUE; @@ -212,7 +213,7 @@ gtk_window_button_release_callback(GtkWidget* widget, GdkEventButton* gdk_event, gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME ); int org_x = 0; int org_y = 0; - gdk_window_get_origin( widget->window, &org_x, &org_y ); + gdk_window_get_origin(gtk_widget_get_window(widget), &org_x, &org_y); x += org_x - win->m_diffX; y += org_y - win->m_diffY; win->m_x = x; @@ -235,10 +236,10 @@ gtk_window_leave_callback(GtkWidget *widget, { if (!win->m_hasVMT) return FALSE; if (g_blockEventsOnDrag) return FALSE; - if (gdk_event->window != widget->window) + if (gdk_event->window != gtk_widget_get_window(widget)) return false; - gdk_window_set_cursor( widget->window, NULL ); + gdk_window_set_cursor(gtk_widget_get_window(widget), NULL); return FALSE; } @@ -252,7 +253,7 @@ extern "C" { static gboolean gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, wxMiniFrame *win ) { - if (!win->m_hasVMT || gdk_event->window != widget->window) + if (!win->m_hasVMT || gdk_event->window != gtk_widget_get_window(widget)) return false; if (g_blockEventsOnDrag) return TRUE; if (g_blockEventsOnScroll) return TRUE; @@ -278,9 +279,9 @@ gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, if (style & wxRESIZE_BORDER) { if ((x > win->m_width-14) && (y > win->m_height-14)) - gdk_window_set_cursor( widget->window, gdk_cursor_new( GDK_BOTTOM_RIGHT_CORNER ) ); + gdk_window_set_cursor(gtk_widget_get_window(widget), gdk_cursor_new(GDK_BOTTOM_RIGHT_CORNER)); else - gdk_window_set_cursor( widget->window, NULL ); + gdk_window_set_cursor(gtk_widget_get_window(widget), NULL); win->GTKUpdateCursor(false); } return TRUE; @@ -291,7 +292,7 @@ gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, int org_x = 0; int org_y = 0; - gdk_window_get_origin( widget->window, &org_x, &org_y ); + gdk_window_get_origin(gtk_widget_get_window(widget), &org_x, &org_y); x += org_x - win->m_diffX; y += org_y - win->m_diffY; win->m_x = x; @@ -423,9 +424,9 @@ void wxMiniFrame::SetTitle( const wxString &title ) { wxFrame::SetTitle( title ); - GtkWidget* widget = GTK_BIN(m_widget)->child; - if (widget->window) - gdk_window_invalidate_rect(widget->window, NULL, false); + GdkWindow* window = gtk_widget_get_window(gtk_bin_get_child(GTK_BIN(m_widget))); + if (window) + gdk_window_invalidate_rect(window, NULL, false); } #endif // wxUSE_MINIFRAME diff --git a/Externals/wxWidgets3/src/gtk/msgdlg.cpp b/Externals/wxWidgets3/src/gtk/msgdlg.cpp index a8606ef32a..b09210711e 100644 --- a/Externals/wxWidgets3/src/gtk/msgdlg.cpp +++ b/Externals/wxWidgets3/src/gtk/msgdlg.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2003/02/28 -// RCS-ID: $Id: msgdlg.cpp 65812 2010-10-15 23:45:58Z VZ $ +// RCS-ID: $Id: msgdlg.cpp 68537 2011-08-04 22:53:42Z VZ $ // Copyright: (c) Vaclav Slavik, 2003 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -74,6 +74,11 @@ wxString wxMessageDialog::GetDefaultCancelLabel() const return GTK_STOCK_CANCEL; } +wxString wxMessageDialog::GetDefaultHelpLabel() const +{ + return GTK_STOCK_HELP; +} + void wxMessageDialog::DoSetCustomLabel(wxString& var, const ButtonLabel& label) { int stockId = label.GetStockId(); @@ -135,16 +140,21 @@ void wxMessageDialog::GTKCreateMsgDialog() // when using custom labels, we have to add all the buttons ourselves if ( !HasCustomLabels() ) { - if ( m_dialogStyle & wxYES_NO ) + // "Help" button is not supported by predefined combinations so we + // always need to create the buttons manually when it's used. + if ( !(m_dialogStyle & wxHELP) ) { - if ( !(m_dialogStyle & wxCANCEL) ) - buttons = GTK_BUTTONS_YES_NO; - //else: no standard GTK_BUTTONS_YES_NO_CANCEL so leave as NONE - } - else if ( m_dialogStyle & wxOK ) - { - buttons = m_dialogStyle & wxCANCEL ? GTK_BUTTONS_OK_CANCEL - : GTK_BUTTONS_OK; + if ( m_dialogStyle & wxYES_NO ) + { + if ( !(m_dialogStyle & wxCANCEL) ) + buttons = GTK_BUTTONS_YES_NO; + //else: no standard GTK_BUTTONS_YES_NO_CANCEL so leave as NONE + } + else if ( m_dialogStyle & wxOK ) + { + buttons = m_dialogStyle & wxCANCEL ? GTK_BUTTONS_OK_CANCEL + : GTK_BUTTONS_OK; + } } } @@ -211,9 +221,16 @@ void wxMessageDialog::GTKCreateMsgDialog() const bool addButtons = buttons == GTK_BUTTONS_NONE; #endif // wxUSE_LIBHILDON/!wxUSE_LIBHILDON - if ( m_dialogStyle & wxYES_NO ) // Yes/No or Yes/No/Cancel dialog + + if ( addButtons ) { - if ( addButtons ) + if ( m_dialogStyle & wxHELP ) + { + gtk_dialog_add_button(dlg, wxGTK_CONV(GetHelpLabel()), + GTK_RESPONSE_HELP); + } + + if ( m_dialogStyle & wxYES_NO ) // Yes/No or Yes/No/Cancel dialog { // Add the buttons in the correct order which is, according to // http://library.gnome.org/devel/hig-book/stable/windows-alert.html.en @@ -233,32 +250,29 @@ void wxMessageDialog::GTKCreateMsgDialog() gtk_dialog_add_button(dlg, wxGTK_CONV(GetYesLabel()), GTK_RESPONSE_YES); } - - // it'd probably be harmless to call gtk_dialog_set_default_response() - // twice but why do it if we're going to change the default below - // anyhow - if ( !(m_dialogStyle & wxCANCEL_DEFAULT) ) + else // Ok or Ok/Cancel dialog { - gtk_dialog_set_default_response(dlg, - m_dialogStyle & wxNO_DEFAULT - ? GTK_RESPONSE_NO - : GTK_RESPONSE_YES); - } - } - else if ( addButtons ) // Ok or Ok/Cancel dialog - { - gtk_dialog_add_button(dlg, wxGTK_CONV(GetOKLabel()), GTK_RESPONSE_OK); - if ( m_dialogStyle & wxCANCEL ) - { - gtk_dialog_add_button(dlg, wxGTK_CONV(GetCancelLabel()), - GTK_RESPONSE_CANCEL); + gtk_dialog_add_button(dlg, wxGTK_CONV(GetOKLabel()), GTK_RESPONSE_OK); + if ( m_dialogStyle & wxCANCEL ) + { + gtk_dialog_add_button(dlg, wxGTK_CONV(GetCancelLabel()), + GTK_RESPONSE_CANCEL); + } } } + gint defaultButton; if ( m_dialogStyle & wxCANCEL_DEFAULT ) - { - gtk_dialog_set_default_response(dlg, GTK_RESPONSE_CANCEL); - } + defaultButton = GTK_RESPONSE_CANCEL; + else if ( m_dialogStyle & wxNO_DEFAULT ) + defaultButton = GTK_RESPONSE_NO; + else if ( m_dialogStyle & wxYES_NO ) + defaultButton = GTK_RESPONSE_YES; + else // No need to change the default value, whatever it is. + defaultButton = GTK_RESPONSE_NONE; + + if ( defaultButton != GTK_RESPONSE_NONE ) + gtk_dialog_set_default_response(dlg, defaultButton); } int wxMessageDialog::ShowModal() @@ -302,6 +316,8 @@ int wxMessageDialog::ShowModal() return wxID_YES; case GTK_RESPONSE_NO: return wxID_NO; + case GTK_RESPONSE_HELP: + return wxID_HELP; } } diff --git a/Externals/wxWidgets3/src/gtk/nativewin.cpp b/Externals/wxWidgets3/src/gtk/nativewin.cpp index a0c585e82c..f14e137ced 100644 --- a/Externals/wxWidgets3/src/gtk/nativewin.cpp +++ b/Externals/wxWidgets3/src/gtk/nativewin.cpp @@ -3,7 +3,7 @@ // Purpose: wxNativeWindow implementation // Author: Vadim Zeitlin // Created: 2008-03-05 -// RCS-ID: $Id: nativewin.cpp 52437 2008-03-11 00:03:46Z VZ $ +// RCS-ID: $Id: nativewin.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 2008 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -29,6 +29,7 @@ #include "wx/nativewin.h" #include +#include "wx/gtk/private/gtk2-compat.h" #ifdef GDK_WINDOWING_X11 #include @@ -71,7 +72,7 @@ bool wxNativeContainerWindow::Create(wxNativeContainerWindowHandle win) // we need to realize the window first before reparenting it gtk_widget_realize(m_widget); - gdk_window_reparent(m_widget->window, win, 0, 0); + gdk_window_reparent(gtk_widget_get_window(m_widget), win, 0, 0); #ifdef GDK_WINDOWING_X11 // if the native window is destroyed, our own window will be destroyed too @@ -79,7 +80,7 @@ bool wxNativeContainerWindow::Create(wxNativeContainerWindowHandle win) // destroyed" GdkWindow, so intercept to DestroyNotify ourselves to fix // this and also destroy the associated C++ object when its window is // destroyed - gdk_window_add_filter(m_widget->window, wxNativeContainerWindowFilter, this); + gdk_window_add_filter(gtk_widget_get_window(m_widget), wxNativeContainerWindowFilter, this); #endif // GDK_WINDOWING_X11 // we should be initially visible as we suppose that the native window we diff --git a/Externals/wxWidgets3/src/gtk/nonownedwnd.cpp b/Externals/wxWidgets3/src/gtk/nonownedwnd.cpp new file mode 100644 index 0000000000..efba8cf874 --- /dev/null +++ b/Externals/wxWidgets3/src/gtk/nonownedwnd.cpp @@ -0,0 +1,308 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/gtk/nonownedwnd.cpp +// Purpose: wxGTK implementation of wxNonOwnedWindow. +// Author: Vadim Zeitlin +// Created: 2011-10-12 +// RCS-ID: $Id: nonownedwnd.cpp 69465 2011-10-18 22:59:16Z VZ $ +// Copyright: (c) 2011 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifndef WX_PRECOMP + #include "wx/dcclient.h" + #include "wx/dcmemory.h" + #include "wx/nonownedwnd.h" + #include "wx/region.h" +#endif // WX_PRECOMP + +#include "wx/gtk/private.h" + +#include + +#include "wx/graphics.h" + +// ---------------------------------------------------------------------------- +// wxNonOwnedWindowShapeImpl: base class for region and path-based classes. +// ---------------------------------------------------------------------------- + +// This class provides behaviour common to both region and path-based +// implementations and defines SetShape() method and virtual dtor that can be +// called by wxNonOwnedWindow when it's realized leaving just the +// implementation of DoSetShape() to the derived classes. +class wxNonOwnedWindowShapeImpl : public wxEvtHandler +{ +public: + wxNonOwnedWindowShapeImpl(wxWindow* win) : m_win(win) + { + } + + virtual ~wxNonOwnedWindowShapeImpl() { } + + bool SetShape() + { + if ( m_win->m_wxwindow ) + SetShapeIfNonNull(gtk_widget_get_window(m_win->m_wxwindow)); + + return SetShapeIfNonNull(gtk_widget_get_window(m_win->m_widget)); + } + + // Must be overridden to indicate if the data object must stay around or if + // it can be deleted once SetShape() was called. + virtual bool CanBeDeleted() const = 0; + +protected: + wxWindow* const m_win; + +private: + // SetShape to the given GDK window by calling DoSetShape() if it's non-NULL. + bool SetShapeIfNonNull(GdkWindow* window) + { + return window && DoSetShape(window); + } + + // SetShape the shape to the given GDK window which can be either the window + // of m_widget or m_wxwindow of the wxWindow we're used with. + virtual bool DoSetShape(GdkWindow* window) = 0; + + wxDECLARE_NO_COPY_CLASS(wxNonOwnedWindowShapeImpl); +}; + +// Version not using any custom shape. +class wxNonOwnedWindowShapeImplNone : public wxNonOwnedWindowShapeImpl +{ +public: + wxNonOwnedWindowShapeImplNone(wxWindow* win) : + wxNonOwnedWindowShapeImpl(win) + { + } + + virtual bool CanBeDeleted() const { return true; } + +private: + virtual bool DoSetShape(GdkWindow* window) + { + gdk_window_shape_combine_mask(window, NULL, 0, 0); + + return true; + } +}; + +// Version using simple wxRegion. +class wxNonOwnedWindowShapeImplRegion : public wxNonOwnedWindowShapeImpl +{ +public: + wxNonOwnedWindowShapeImplRegion(wxWindow* win, const wxRegion& region) : + wxNonOwnedWindowShapeImpl(win), + m_region(region) + { + } + + virtual bool CanBeDeleted() const { return true; } + +private: + virtual bool DoSetShape(GdkWindow* window) + { + gdk_window_shape_combine_region(window, m_region.GetRegion(), 0, 0); + + return true; + } + + wxRegion m_region; +}; + +#if wxUSE_GRAPHICS_CONTEXT + +// Version using more complex wxGraphicsPath. +class wxNonOwnedWindowShapeImplPath : public wxNonOwnedWindowShapeImpl +{ +public: + wxNonOwnedWindowShapeImplPath(wxWindow* win, const wxGraphicsPath& path) : + wxNonOwnedWindowShapeImpl(win), + m_path(path), + m_mask(CreateShapeBitmap(path), *wxBLACK) + { + + m_win->Connect + ( + wxEVT_PAINT, + wxPaintEventHandler(wxNonOwnedWindowShapeImplPath::OnPaint), + NULL, + this + ); + } + + virtual ~wxNonOwnedWindowShapeImplPath() + { + m_win->Disconnect + ( + wxEVT_PAINT, + wxPaintEventHandler(wxNonOwnedWindowShapeImplPath::OnPaint), + NULL, + this + ); + } + + // Currently we always return false from here, if drawing the border + // becomes optional, we could return true if we don't need to draw it. + virtual bool CanBeDeleted() const { return false; } + +private: + wxBitmap CreateShapeBitmap(const wxGraphicsPath& path) + { + // Draw the path on a bitmap to get the mask we need. + // + // Notice that using monochrome bitmap here doesn't work because of an + // apparent wxGraphicsContext bug in wxGTK, so use a bitmap of screen + // depth even if this is wasteful. + wxBitmap bmp(m_win->GetSize()); + + wxMemoryDC dc(bmp); + + dc.SetBackground(*wxBLACK); + dc.Clear(); + + wxScopedPtr context(wxGraphicsContext::Create(dc)); + context->SetBrush(*wxWHITE); + context->FillPath(path); + + return bmp; + } + + virtual bool DoSetShape(GdkWindow *window) + { + GdkBitmap* bitmap = m_mask.GetBitmap(); + if ( !bitmap ) + return false; + + gdk_window_shape_combine_mask(window, bitmap, 0, 0); + + return true; + } + + // Draw a shaped window border. + void OnPaint(wxPaintEvent& event) + { + event.Skip(); + + wxPaintDC dc(m_win); + wxScopedPtr context(wxGraphicsContext::Create(dc)); + context->SetPen(wxPen(*wxLIGHT_GREY, 2)); + context->StrokePath(m_path); + } + + wxGraphicsPath m_path; + wxMask m_mask; +}; + +#endif // wxUSE_GRAPHICS_CONTEXT + +// ============================================================================ +// wxNonOwnedWindow implementation +// ============================================================================ + +wxNonOwnedWindow::~wxNonOwnedWindow() +{ + delete m_shapeImpl; +} + +void wxNonOwnedWindow::GTKHandleRealized() +{ + wxNonOwnedWindowBase::GTKHandleRealized(); + + if ( m_shapeImpl ) + { + m_shapeImpl->SetShape(); + + // We can destroy wxNonOwnedWindowShapeImplRegion immediately but need + // to keep wxNonOwnedWindowShapeImplPath around as it draws the border + // on every repaint. + if ( m_shapeImpl->CanBeDeleted() ) + { + delete m_shapeImpl; + m_shapeImpl = NULL; + } + } +} + +bool wxNonOwnedWindow::DoClearShape() +{ + if ( !m_shapeImpl ) + { + // Nothing to do, we don't have any custom shape. + return true; + } + + if ( gtk_widget_get_realized(m_widget) ) + { + // Reset the existing shape immediately. + wxNonOwnedWindowShapeImplNone data(this); + data.SetShape(); + } + //else: just do nothing, deleting m_shapeImpl is enough to ensure that we + // don't set the custom shape later when we're realized. + + delete m_shapeImpl; + m_shapeImpl = NULL; + + return true; +} + +bool wxNonOwnedWindow::DoSetRegionShape(const wxRegion& region) +{ + // In any case get rid of the old data. + delete m_shapeImpl; + m_shapeImpl = NULL; + + if ( gtk_widget_get_realized(m_widget) ) + { + // We can avoid an unnecessary heap allocation and just set the shape + // immediately. + wxNonOwnedWindowShapeImplRegion data(this, region); + return data.SetShape(); + } + else // Create an object that will set shape when we're realized. + { + m_shapeImpl = new wxNonOwnedWindowShapeImplRegion(this, region); + + // In general we don't know whether we are going to succeed or not, so + // be optimistic. + return true; + } +} + +#if wxUSE_GRAPHICS_CONTEXT + +bool wxNonOwnedWindow::DoSetPathShape(const wxGraphicsPath& path) +{ + // The logic here is simpler than above because we always create + // wxNonOwnedWindowShapeImplPath on the heap as we must keep it around, + // even if we're already realized + + delete m_shapeImpl; + m_shapeImpl = new wxNonOwnedWindowShapeImplPath(this, path); + + if ( gtk_widget_get_realized(m_widget) ) + { + return m_shapeImpl->SetShape(); + } + //else: will be done later from GTKHandleRealized(). + + return true; +} + +#endif // wxUSE_GRAPHICS_CONTEXT diff --git a/Externals/wxWidgets3/src/gtk/notebook.cpp b/Externals/wxWidgets3/src/gtk/notebook.cpp index 8ebb6fed28..a12ca0f1b5 100644 --- a/Externals/wxWidgets3/src/gtk/notebook.cpp +++ b/Externals/wxWidgets3/src/gtk/notebook.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/notebook.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: notebook.cpp 66643 2011-01-07 22:31:26Z SC $ +// Id: $Id: notebook.cpp 70112 2011-12-24 18:19:26Z VZ $ // Copyright: (c) 1998 Robert Roebling, Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -277,8 +277,8 @@ bool wxNotebook::SetPageImage( size_t page, int image ) wxGtkNotebookPage* pageData = GetNotebookPage(page); if (image >= 0) { - wxCHECK_MSG(m_imageList, false, "invalid notebook imagelist"); - const wxBitmap* bitmap = m_imageList->GetBitmapPtr(image); + wxCHECK_MSG(HasImageList(), false, "invalid notebook imagelist"); + const wxBitmap* bitmap = GetImageList()->GetBitmapPtr(image); if (bitmap == NULL) return false; if (pageData->m_image) @@ -304,9 +304,34 @@ bool wxNotebook::SetPageImage( size_t page, int image ) return true; } -void wxNotebook::SetPageSize( const wxSize &WXUNUSED(size) ) +wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const { - wxFAIL_MSG( wxT("wxNotebook::SetPageSize not implemented") ); + // Compute the max size of the tab labels. + wxSize sizeTabMax; + const size_t pageCount = GetPageCount(); + for ( size_t n = 0; n < pageCount; n++ ) + { + GtkRequisition req; + gtk_widget_size_request(GetNotebookPage(n)->m_box, &req); + sizeTabMax.IncTo(wxSize(req.width, req.height)); + } + + // Unfortunately this doesn't account for the real tab size and I don't + // know how to find it, e.g. where do the margins below come from. + const int PAGE_MARGIN = 3; + const int TAB_MARGIN = 4; + + sizeTabMax.IncBy(3*TAB_MARGIN); + + wxSize sizeFull(sizePage); + if ( IsVertical() ) + sizeFull.y += sizeTabMax.y; + else + sizeFull.x += sizeTabMax.x; + + sizeFull.IncBy(2*PAGE_MARGIN); + + return sizeFull; } void wxNotebook::SetPadding( const wxSize &padding ) @@ -352,8 +377,6 @@ wxNotebookPage *wxNotebook::DoRemovePage( size_t page ) if ( !client ) return NULL; - gtk_widget_unrealize( client->m_widget ); - // we don't need to unparent the client->m_widget; GTK+ will do // that for us (and will throw a warning if we do it!) gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page ); @@ -410,15 +433,17 @@ bool wxNotebook::InsertPage( size_t position, pageData->m_image = NULL; if (imageId != -1) { - if (m_imageList) + if (HasImageList()) { - const wxBitmap* bitmap = m_imageList->GetBitmapPtr(imageId); + const wxBitmap* bitmap = GetImageList()->GetBitmapPtr(imageId); pageData->m_image = gtk_image_new_from_pixbuf(bitmap->GetPixbuf()); gtk_box_pack_start(GTK_BOX(pageData->m_box), pageData->m_image, false, false, m_padding); } else + { wxFAIL_MSG("invalid notebook imagelist"); + } } /* set the label text */ @@ -434,7 +459,7 @@ bool wxNotebook::InsertPage( size_t position, if ( style ) { gtk_widget_modify_style(pageData->m_label, style); - gtk_rc_style_unref(style); + g_object_unref(style); } if (select && GetPageCount() > 1) @@ -453,24 +478,30 @@ static bool IsPointInsideWidget(const wxPoint& pt, GtkWidget *w, gint x, gint y, gint border = 0) { + GtkAllocation a; + gtk_widget_get_allocation(w, &a); return - (pt.x >= w->allocation.x - x - border) && - (pt.x <= w->allocation.x - x + border + w->allocation.width) && - (pt.y >= w->allocation.y - y - border) && - (pt.y <= w->allocation.y - y + border + w->allocation.height); + (pt.x >= a.x - x - border) && + (pt.x <= a.x - x + border + a.width) && + (pt.y >= a.y - y - border) && + (pt.y <= a.y - y + border + a.height); } int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { - const gint x = m_widget->allocation.x; - const gint y = m_widget->allocation.y; + GtkAllocation a; + gtk_widget_get_allocation(m_widget, &a); + const int x = a.x; + const int y = a.y; const size_t count = GetPageCount(); size_t i = 0; +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GSEAL_ENABLE) GtkNotebook * notebook = GTK_NOTEBOOK(m_widget); if (gtk_notebook_get_scrollable(notebook)) i = g_list_position( notebook->children, notebook->first_tab ); +#endif for ( ; i < count; i++ ) { @@ -556,7 +587,7 @@ void wxNotebook::DoApplyWidgetStyle(GtkRcStyle *style) GdkWindow *wxNotebook::GTKGetWindow(wxArrayGdkWindows& windows) const { - windows.push_back(m_widget->window); + windows.push_back(gtk_widget_get_window(m_widget)); windows.push_back(GTK_NOTEBOOK(m_widget)->event_window); return NULL; diff --git a/Externals/wxWidgets3/src/gtk/pen.cpp b/Externals/wxWidgets3/src/gtk/pen.cpp index fce20a1ea3..2748925065 100644 --- a/Externals/wxWidgets3/src/gtk/pen.cpp +++ b/Externals/wxWidgets3/src/gtk/pen.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/pen.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: pen.cpp 58227 2009-01-19 13:55:27Z VZ $ +// Id: $Id: pen.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -182,7 +182,7 @@ void wxPen::SetWidth( int width ) int wxPen::GetDashes( wxDash **ptr ) const { - wxCHECK_MSG( Ok(), -1, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), -1, wxT("invalid pen") ); *ptr = (wxDash*)M_PENDATA->m_dash; return M_PENDATA->m_countDashes; @@ -190,49 +190,49 @@ int wxPen::GetDashes( wxDash **ptr ) const int wxPen::GetDashCount() const { - wxCHECK_MSG( Ok(), -1, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), -1, wxT("invalid pen") ); return (M_PENDATA->m_countDashes); } wxDash* wxPen::GetDash() const { - wxCHECK_MSG( Ok(), NULL, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), NULL, wxT("invalid pen") ); return (wxDash*)M_PENDATA->m_dash; } wxPenCap wxPen::GetCap() const { - wxCHECK_MSG( Ok(), wxCAP_INVALID, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), wxCAP_INVALID, wxT("invalid pen") ); return M_PENDATA->m_capStyle; } wxPenJoin wxPen::GetJoin() const { - wxCHECK_MSG( Ok(), wxJOIN_INVALID, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), wxJOIN_INVALID, wxT("invalid pen") ); return M_PENDATA->m_joinStyle; } wxPenStyle wxPen::GetStyle() const { - wxCHECK_MSG( Ok(), wxPENSTYLE_INVALID, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), wxPENSTYLE_INVALID, wxT("invalid pen") ); return M_PENDATA->m_style; } int wxPen::GetWidth() const { - wxCHECK_MSG( Ok(), -1, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), -1, wxT("invalid pen") ); return M_PENDATA->m_width; } wxColour wxPen::GetColour() const { - wxCHECK_MSG( Ok(), wxNullColour, wxT("invalid pen") ); + wxCHECK_MSG( IsOk(), wxNullColour, wxT("invalid pen") ); return M_PENDATA->m_colour; } diff --git a/Externals/wxWidgets3/src/gtk/popupwin.cpp b/Externals/wxWidgets3/src/gtk/popupwin.cpp index 68d71d985e..26b11badc0 100644 --- a/Externals/wxWidgets3/src/gtk/popupwin.cpp +++ b/Externals/wxWidgets3/src/gtk/popupwin.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/popupwin.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: popupwin.cpp 62754 2009-12-01 16:23:48Z PC $ +// Id: $Id: popupwin.cpp 70739 2012-02-28 17:25:59Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -46,7 +46,7 @@ static gint gtk_popup_button_press (GtkWidget *widget, GdkEvent *gdk_event, wxPo { if (child == widget) return FALSE; - child = child->parent; + child = gtk_widget_get_parent(child); } } @@ -73,14 +73,6 @@ bool gtk_dialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED } } -void wxPopupWindow::AddChildGTK(wxWindowGTK* child) -{ - gtk_widget_set_size_request( - child->m_widget, child->m_width, child->m_height); - gtk_fixed_put( - GTK_FIXED(m_wxwindow), child->m_widget, child->m_x, child->m_y); -} - //----------------------------------------------------------------------------- // wxPopupWindow //----------------------------------------------------------------------------- diff --git a/Externals/wxWidgets3/src/gtk/print.cpp b/Externals/wxWidgets3/src/gtk/print.cpp index 7fada93d7f..a1f51a3f1f 100644 --- a/Externals/wxWidgets3/src/gtk/print.cpp +++ b/Externals/wxWidgets3/src/gtk/print.cpp @@ -3,7 +3,7 @@ // Author: Anthony Bretaudeau // Purpose: GTK printing support // Created: 2007-08-25 -// RCS-ID: $Id: print.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: print.cpp 70669 2012-02-22 13:41:11Z VZ $ // Copyright: (c) 2007 wxWidgets development team // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -31,7 +31,6 @@ #endif #include "wx/fontutil.h" -#include "wx/gtk/private.h" #include "wx/dynlib.h" #include "wx/paper.h" @@ -57,7 +56,7 @@ wxFORCE_LINK_THIS_MODULE(gtk_print) #include "wx/gtk/private/object.h" -// Usefull to convert angles from/to Rad to/from Deg. +// Useful to convert angles from/to Rad to/from Deg. static const double RAD2DEG = 180.0 / M_PI; static const double DEG2RAD = M_PI / 180.0; @@ -620,8 +619,6 @@ wxGtkPrintDialog::~wxGtkPrintDialog() // This is called even if we actually don't want the dialog to appear. int wxGtkPrintDialog::ShowModal() { - GtkPrintOperationResult response; - // We need to restore the settings given in the constructor. wxPrintData data = m_printDialogData.GetPrintData(); wxGtkPrintNativeData *native = @@ -655,10 +652,17 @@ int wxGtkPrintDialog::ShowModal() // Show the dialog if needed. GError* gError = NULL; - if (GetShowDialog()) - response = gtk_print_operation_run (printOp, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(gtk_widget_get_toplevel(m_parent->m_widget) ), &gError); - else - response = gtk_print_operation_run (printOp, GTK_PRINT_OPERATION_ACTION_PRINT, GTK_WINDOW(gtk_widget_get_toplevel(m_parent->m_widget)), &gError); + GtkPrintOperationResult response = gtk_print_operation_run + ( + printOp, + GetShowDialog() + ? GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG + : GTK_PRINT_OPERATION_ACTION_PRINT, + m_parent + ? GTK_WINDOW(gtk_widget_get_toplevel(m_parent->m_widget)) + : NULL, + &gError + ); // Does everything went well? if (response == GTK_PRINT_OPERATION_RESULT_CANCEL) @@ -667,8 +671,8 @@ int wxGtkPrintDialog::ShowModal() } else if (response == GTK_PRINT_OPERATION_RESULT_ERROR) { + wxLogError(_("Error while printing: ") + wxString(gError ? gError->message : "???")); g_error_free (gError); - wxLogError(_("Error while printing: ") + wxString::Format(_("%s"), gError->message)); return wxID_NO; // We use wxID_NO because there is no wxID_ERROR available } @@ -771,7 +775,9 @@ int wxGtkPageSetupDialog::ShowModal() title = _("Page Setup"); GtkWidget * dlg = gtk_page_setup_unix_dialog_new(title.utf8_str(), - GTK_WINDOW(m_parent->m_widget)); + m_parent + ? GTK_WINDOW(m_parent->m_widget) + : NULL); gtk_page_setup_unix_dialog_set_print_settings( GTK_PAGE_SETUP_UNIX_DIALOG(dlg), nativeData); @@ -1738,25 +1744,12 @@ void wxGtkPrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wxCo angle = -angle; - bool underlined = m_font.Ok() && m_font.GetUnderlined(); - const wxScopedCharBuffer data = text.utf8_str(); - size_t datalen = strlen(data); - pango_layout_set_text( m_layout, data, datalen); + pango_layout_set_text(m_layout, data, data.length()); - if (underlined) - { - PangoAttrList *attrs = pango_attr_list_new(); - PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); - a->start_index = 0; - a->end_index = datalen; - pango_attr_list_insert(attrs, a); - pango_layout_set_attributes(m_layout, attrs); - pango_attr_list_unref(attrs); - } - - if (m_textForegroundColour.Ok()) + const bool setAttrs = m_font.GTKSetPangoAttrs(m_layout); + if (m_textForegroundColour.IsOk()) { unsigned char red = m_textForegroundColour.Red(); unsigned char blue = m_textForegroundColour.Blue(); @@ -1816,7 +1809,7 @@ void wxGtkPrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wxCo cairo_restore( m_cairo ); - if (underlined) + if (setAttrs) { // Undo underline attributes setting pango_layout_set_attributes(m_layout, NULL); @@ -1844,7 +1837,7 @@ void wxGtkPrinterDCImpl::SetFont( const wxFont& font ) { m_font = font; - if (m_font.Ok()) + if (m_font.IsOk()) { if (m_fontdesc) pango_font_description_free( m_fontdesc ); @@ -1861,7 +1854,7 @@ void wxGtkPrinterDCImpl::SetFont( const wxFont& font ) void wxGtkPrinterDCImpl::SetPen( const wxPen& pen ) { - if (!pen.Ok()) return; + if (!pen.IsOk()) return; m_pen = pen; @@ -1940,7 +1933,7 @@ void wxGtkPrinterDCImpl::SetPen( const wxPen& pen ) void wxGtkPrinterDCImpl::SetBrush( const wxBrush& brush ) { - if (!brush.Ok()) return; + if (!brush.IsOk()) return; m_brush = brush; @@ -2149,8 +2142,8 @@ void wxGtkPrinterDCImpl::DoGetTextExtent(const wxString& string, wxCoord *width, { // scale the font and apply it PangoFontDescription *desc = theFont->GetNativeFontInfo()->description; - float size = pango_font_description_get_size(desc); - size = size * GetFontPointSizeAdjustment(72.0); + oldSize = pango_font_description_get_size(desc); + const float size = oldSize * GetFontPointSizeAdjustment(72.0); pango_font_description_set_size(desc, (gint)size); pango_layout_set_font_description(m_layout, desc); diff --git a/Externals/wxWidgets3/src/gtk/radiobox.cpp b/Externals/wxWidgets3/src/gtk/radiobox.cpp index 715c2fdb08..267c7c9f4c 100644 --- a/Externals/wxWidgets3/src/gtk/radiobox.cpp +++ b/Externals/wxWidgets3/src/gtk/radiobox.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/radiobox.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: radiobox.cpp 67136 2011-03-06 18:22:23Z VS $ +// Id: $Id: radiobox.cpp 67331 2011-03-29 05:15:54Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -59,7 +59,7 @@ static void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioBo if (!rb->m_hasVMT) return; if (g_blockEventsOnDrag) return; - if (!button->active) return; + if (!gtk_toggle_button_get_active(button)) return; wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() ); event.SetInt( rb->GetSelection() ); @@ -379,7 +379,7 @@ int wxRadioBox::GetSelection(void) const while (node) { GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->GetData()->button ); - if (button->active) return count; + if (gtk_toggle_button_get_active(button)) return count; count++; node = node->GetNext(); } @@ -397,7 +397,7 @@ wxString wxRadioBox::GetString(unsigned int n) const wxCHECK_MSG( node, wxEmptyString, wxT("radiobox wrong index") ); - GtkLabel *label = GTK_LABEL(GTK_BIN(node->GetData()->button)->child); + GtkLabel* label = GTK_LABEL(gtk_bin_get_child(GTK_BIN(node->GetData()->button))); wxString str( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); @@ -419,7 +419,7 @@ void wxRadioBox::SetString(unsigned int item, const wxString& label) wxCHECK_RET( node, wxT("radiobox wrong index") ); - GtkLabel *g_label = GTK_LABEL(GTK_BIN(node->GetData()->button)->child); + GtkLabel* g_label = GTK_LABEL(gtk_bin_get_child(GTK_BIN(node->GetData()->button))); gtk_label_set_text( g_label, wxGTK_CONV( label ) ); } @@ -433,7 +433,7 @@ bool wxRadioBox::Enable( bool enable ) while (node) { GtkButton *button = GTK_BUTTON( node->GetData()->button ); - GtkLabel *label = GTK_LABEL(GTK_BIN(button)->child); + GtkLabel *label = GTK_LABEL(gtk_bin_get_child(GTK_BIN(button))); gtk_widget_set_sensitive( GTK_WIDGET(button), enable ); gtk_widget_set_sensitive( GTK_WIDGET(label), enable ); @@ -455,7 +455,7 @@ bool wxRadioBox::Enable(unsigned int item, bool enable) wxCHECK_MSG( node, false, wxT("radiobox wrong index") ); GtkButton *button = GTK_BUTTON( node->GetData()->button ); - GtkLabel *label = GTK_LABEL(GTK_BIN(button)->child); + GtkLabel *label = GTK_LABEL(gtk_bin_get_child(GTK_BIN(button))); gtk_widget_set_sensitive( GTK_WIDGET(button), enable ); gtk_widget_set_sensitive( GTK_WIDGET(label), enable ); @@ -475,7 +475,7 @@ bool wxRadioBox::IsItemEnabled(unsigned int item) const // don't use GTK_WIDGET_IS_SENSITIVE() here, we want to return true even if // the parent radiobox is disabled - return GTK_WIDGET_SENSITIVE(GTK_WIDGET(button)); + return gtk_widget_get_sensitive(GTK_WIDGET(button)); } bool wxRadioBox::Show(unsigned int item, bool show) @@ -506,7 +506,7 @@ bool wxRadioBox::IsItemShown(unsigned int item) const GtkButton *button = GTK_BUTTON( node->GetData()->button ); - return GTK_WIDGET_VISIBLE(GTK_WIDGET(button)); + return gtk_widget_get_visible(GTK_WIDGET(button)); } unsigned int wxRadioBox::GetCount() const @@ -548,7 +548,7 @@ void wxRadioBox::DoApplyWidgetStyle(GtkRcStyle *style) GtkWidget *widget = GTK_WIDGET( node->GetData()->button ); gtk_widget_modify_style( widget, style ); - gtk_widget_modify_style(GTK_BIN(widget)->child, style); + gtk_widget_modify_style(gtk_bin_get_child(GTK_BIN(widget)), style); node = node->GetNext(); } @@ -565,7 +565,7 @@ void wxRadioBox::GTKWidgetDoSetMnemonic(GtkWidget* w) } #if wxUSE_TOOLTIPS -void wxRadioBox::GTKApplyToolTip(GtkTooltips * WXUNUSED(tips), const gchar *tip) +void wxRadioBox::GTKApplyToolTip(const char* tip) { // set this tooltip for all radiobuttons which don't have their own tips unsigned n = 0; @@ -595,7 +595,7 @@ void wxRadioBox::DoSetItemToolTip(unsigned int n, wxToolTip *tooltip) GdkWindow *wxRadioBox::GTKGetWindow(wxArrayGdkWindows& windows) const { - windows.push_back(m_widget->window); + windows.push_back(gtk_widget_get_window(m_widget)); wxRadioBoxButtonsInfoList::compatibility_iterator node = m_buttonsInfo.GetFirst(); while (node) @@ -603,8 +603,8 @@ GdkWindow *wxRadioBox::GTKGetWindow(wxArrayGdkWindows& windows) const GtkWidget *button = GTK_WIDGET( node->GetData()->button ); // don't put NULL pointers in the 'windows' array! - if (button->window) - windows.push_back(button->window); + if (gtk_widget_get_window(button)) + windows.push_back(gtk_widget_get_window(button)); node = node->GetNext(); } diff --git a/Externals/wxWidgets3/src/gtk/radiobut.cpp b/Externals/wxWidgets3/src/gtk/radiobut.cpp index eedf1d2204..78a6f2e736 100644 --- a/Externals/wxWidgets3/src/gtk/radiobut.cpp +++ b/Externals/wxWidgets3/src/gtk/radiobut.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/radiobut.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: radiobut.cpp 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: radiobut.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -34,7 +34,7 @@ void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioButton *r if (g_blockEventsOnDrag) return; - if (!button->active) return; + if (!gtk_toggle_button_get_active(button)) return; wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId()); event.SetInt( rb->GetValue() ); @@ -102,7 +102,7 @@ void wxRadioButton::SetLabel( const wxString& label ) // save the original label wxControlBase::SetLabel(label); - GTKSetLabelForLabel(GTK_LABEL(GTK_BIN(m_widget)->child), label); + GTKSetLabelForLabel(GTK_LABEL(gtk_bin_get_child(GTK_BIN(m_widget))), label); } void wxRadioButton::SetValue( bool val ) @@ -134,7 +134,7 @@ bool wxRadioButton::GetValue() const { wxCHECK_MSG( m_widget != NULL, false, wxT("invalid radiobutton") ); - return GTK_TOGGLE_BUTTON(m_widget)->active; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_widget)) != 0; } bool wxRadioButton::Enable( bool enable ) @@ -142,7 +142,7 @@ bool wxRadioButton::Enable( bool enable ) if (!base_type::Enable(enable)) return false; - gtk_widget_set_sensitive(GTK_BIN(m_widget)->child, enable); + gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(m_widget)), enable); if (enable) GTKFixSensitivity(); @@ -153,7 +153,7 @@ bool wxRadioButton::Enable( bool enable ) void wxRadioButton::DoApplyWidgetStyle(GtkRcStyle *style) { gtk_widget_modify_style(m_widget, style); - gtk_widget_modify_style(GTK_BIN(m_widget)->child, style); + gtk_widget_modify_style(gtk_bin_get_child(GTK_BIN(m_widget)), style); } GdkWindow * diff --git a/Externals/wxWidgets3/src/gtk/region.cpp b/Externals/wxWidgets3/src/gtk/region.cpp index 0ddde4ec8d..6832d60d7b 100644 --- a/Externals/wxWidgets3/src/gtk/region.cpp +++ b/Externals/wxWidgets3/src/gtk/region.cpp @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // Modified: VZ at 05.10.00: use AllocExclusive(), comparison fixed -// Id: $Id: region.cpp 61724 2009-08-21 10:41:26Z VZ $ +// Id: $Id: region.cpp 69817 2011-11-25 01:01:26Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -179,26 +179,24 @@ bool wxRegion::DoUnionWithRect(const wxRect& r) bool wxRegion::DoUnionWithRegion( const wxRegion& region ) { - wxCHECK_MSG( region.Ok(), false, wxT("invalid region") ); + wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") ); if (!m_refData) { - m_refData = new wxRegionRefData(); - M_REGIONDATA->m_region = gdk_region_new(); + m_refData = new wxRegionRefData(*M_REGIONDATA_OF(region)); } else { AllocExclusive(); + gdk_region_union( M_REGIONDATA->m_region, region.GetRegion() ); } - gdk_region_union( M_REGIONDATA->m_region, region.GetRegion() ); - return true; } bool wxRegion::DoIntersect( const wxRegion& region ) { - wxCHECK_MSG( region.Ok(), false, wxT("invalid region") ); + wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") ); if (!m_refData) { @@ -215,7 +213,7 @@ bool wxRegion::DoIntersect( const wxRegion& region ) bool wxRegion::DoSubtract( const wxRegion& region ) { - wxCHECK_MSG( region.Ok(), false, wxT("invalid region") ); + wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") ); if (!m_refData) { @@ -232,24 +230,27 @@ bool wxRegion::DoSubtract( const wxRegion& region ) bool wxRegion::DoXor( const wxRegion& region ) { - wxCHECK_MSG( region.Ok(), false, wxT("invalid region") ); + wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") ); if (!m_refData) { - return false; + // XOR-ing with an invalid region is the same as XOR-ing with an empty + // one, i.e. it is simply a copy. + m_refData = new wxRegionRefData(*M_REGIONDATA_OF(region)); } + else + { + AllocExclusive(); - AllocExclusive(); - - gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() ); + gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() ); + } return true; } bool wxRegion::DoOffset( wxCoord x, wxCoord y ) { - if (!m_refData) - return false; + wxCHECK_MSG( m_refData, false, wxS("invalid region") ); AllocExclusive(); @@ -369,15 +370,13 @@ void wxRegionIterator::CreateRects( const wxRegion& region ) if (!gdkregion) return; - GdkRectangle *gdkrects = NULL; - gint numRects = 0; - gdk_region_get_rectangles( gdkregion, &gdkrects, &numRects ); + GdkRectangle* gdkrects; + gdk_region_get_rectangles(gdkregion, &gdkrects, &m_numRects); - m_numRects = numRects; - if (numRects) + if (m_numRects) { m_rects = new wxRect[m_numRects]; - for (size_t i=0; i < m_numRects; ++i) + for (int i = 0; i < m_numRects; ++i) { GdkRectangle &gr = gdkrects[i]; wxRect &wr = m_rects[i]; @@ -459,20 +458,17 @@ wxRect wxRegionIterator::GetRect() const wxRegionIterator& wxRegionIterator::operator=(const wxRegionIterator& ri) { - wxDELETEA(m_rects); - - m_current = ri.m_current; - m_numRects = ri.m_numRects; - if ( m_numRects ) + if (this != &ri) { - m_rects = new wxRect[m_numRects]; - for ( unsigned int n = 0; n < m_numRects; n++ ) - m_rects[n] = ri.m_rects[n]; - } - else - { - m_rects = NULL; - } + wxDELETEA(m_rects); + m_current = ri.m_current; + m_numRects = ri.m_numRects; + if ( m_numRects ) + { + m_rects = new wxRect[m_numRects]; + memcpy(m_rects, ri.m_rects, m_numRects * sizeof m_rects[0]); + } + } return *this; } diff --git a/Externals/wxWidgets3/src/gtk/renderer.cpp b/Externals/wxWidgets3/src/gtk/renderer.cpp index a233bc14dc..f3bb23681a 100644 --- a/Externals/wxWidgets3/src/gtk/renderer.cpp +++ b/Externals/wxWidgets3/src/gtk/renderer.cpp @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.07.2003 -// RCS-ID: $Id: renderer.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: renderer.cpp 69741 2011-11-12 16:50:37Z PC $ // Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -205,7 +205,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win, gtk_paint_box ( - button->style, + gtk_widget_get_style(button), gdk_window, state, GTK_SHADOW_OUT, @@ -256,18 +256,17 @@ wxRendererGTK::DrawTreeItemButton(wxWindow* win, if (win->GetLayoutDirection() == wxLayout_RightToLeft) x_diff = rect.width; - // VZ: I don't know how to get the size of the expander so as to centre it - // in the given rectangle, +2/3 below is just what looks good here... + // x and y parameters specify the center of the expander gtk_paint_expander ( - tree->style, + gtk_widget_get_style(tree), gdk_window, state, NULL, tree, "treeview", - dc.LogicalToDeviceX(rect.x) + 6 - x_diff, - dc.LogicalToDeviceY(rect.y) + 3, + dc.LogicalToDeviceX(rect.x) + rect.width / 2 - x_diff, + dc.LogicalToDeviceY(rect.y) + rect.height / 2, flags & wxCONTROL_EXPANDED ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED ); @@ -315,7 +314,7 @@ wxRendererGTK::DrawSplitterSash(wxWindow* win, wxOrientation orient, int flags) { - if ( !win->m_wxwindow->window ) + if (gtk_widget_get_window(win->m_wxwindow) == NULL) { // window not realized yet return; @@ -353,7 +352,7 @@ wxRendererGTK::DrawSplitterSash(wxWindow* win, gtk_paint_handle ( - win->m_wxwindow->style, + gtk_widget_get_style(win->m_wxwindow), gdk_window, flags & wxCONTROL_CURRENT ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL, GTK_SHADOW_NONE, @@ -409,7 +408,7 @@ wxRendererGTK::DrawDropArrow(wxWindow* win, // draw arrow on button gtk_paint_arrow ( - button->style, + gtk_widget_get_style(button), gdk_window, state, flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT, @@ -488,7 +487,7 @@ wxRendererGTK::DrawCheckBox(wxWindow* win, gtk_paint_check ( - button->style, + gtk_widget_get_style(button), gdk_window, state, shadow_type, @@ -527,7 +526,7 @@ wxRendererGTK::DrawPushButton(wxWindow* win, gtk_paint_box ( - button->style, + gtk_widget_get_style(button), gdk_window, state, flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT, @@ -559,7 +558,7 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow* win, // the wxCONTROL_FOCUSED state is deduced // directly from the m_wxwindow by GTK+ - gtk_paint_flat_box(wxGTKPrivate::GetTreeWidget()->style, + gtk_paint_flat_box(gtk_widget_get_style(wxGTKPrivate::GetTreeWidget()), gdk_window, GTK_STATE_SELECTED, GTK_SHADOW_NONE, @@ -588,7 +587,7 @@ void wxRendererGTK::DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, i else state = GTK_STATE_NORMAL; - gtk_paint_focus( win->m_widget->style, + gtk_paint_focus( gtk_widget_get_style(win->m_widget), gdk_window, state, NULL, @@ -611,14 +610,11 @@ void wxRendererGTK::DrawTextCtrl(wxWindow* win, wxDC& dc, const wxRect& rect, in if ( flags & wxCONTROL_DISABLED ) state = GTK_STATE_INSENSITIVE; - if (flags & wxCONTROL_CURRENT ) - GTK_WIDGET_SET_FLAGS( entry, GTK_HAS_FOCUS ); - else - GTK_WIDGET_UNSET_FLAGS( entry, GTK_HAS_FOCUS ); + gtk_widget_set_can_focus(entry, (flags & wxCONTROL_CURRENT) != 0); gtk_paint_shadow ( - entry->style, + gtk_widget_get_style(entry), gdk_window, state, GTK_SHADOW_OUT, @@ -643,14 +639,11 @@ void wxRendererGTK::DrawComboBox(wxWindow* win, wxDC& dc, const wxRect& rect, in if ( flags & wxCONTROL_DISABLED ) state = GTK_STATE_INSENSITIVE; - if (flags & wxCONTROL_CURRENT ) - GTK_WIDGET_SET_FLAGS( combo, GTK_HAS_FOCUS ); - else - GTK_WIDGET_UNSET_FLAGS( combo, GTK_HAS_FOCUS ); + gtk_widget_set_can_focus(combo, (flags & wxCONTROL_CURRENT) != 0); gtk_paint_shadow ( - combo->style, + gtk_widget_get_style(combo), gdk_window, state, GTK_SHADOW_OUT, @@ -672,7 +665,7 @@ void wxRendererGTK::DrawComboBox(wxWindow* win, wxDC& dc, const wxRect& rect, in gtk_paint_arrow ( - combo->style, + gtk_widget_get_style(combo), gdk_window, state, GTK_SHADOW_OUT, @@ -693,7 +686,7 @@ void wxRendererGTK::DrawComboBox(wxWindow* win, wxDC& dc, const wxRect& rect, in gtk_paint_box ( - combo->style, + gtk_widget_get_style(combo), gdk_window, state, GTK_SHADOW_ETCHED_OUT, @@ -740,7 +733,7 @@ void wxRendererGTK::DrawRadioBitmap(wxWindow* win, wxDC& dc, const wxRect& rect, gtk_paint_option ( - button->style, + gtk_widget_get_style(button), gdk_window, state, shadow_type, diff --git a/Externals/wxWidgets3/src/gtk/scrolbar.cpp b/Externals/wxWidgets3/src/gtk/scrolbar.cpp index c5df1186b3..87e5615a33 100644 --- a/Externals/wxWidgets3/src/gtk/scrolbar.cpp +++ b/Externals/wxWidgets3/src/gtk/scrolbar.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/scrolbar.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: scrolbar.cpp 66555 2011-01-04 08:31:53Z SC $ +// Id: $Id: scrolbar.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -167,26 +167,25 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, int wxScrollBar::GetThumbPosition() const { - GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment; - return int(adj->value + 0.5); + return wxRound(gtk_range_get_value(GTK_RANGE(m_widget))); } int wxScrollBar::GetThumbSize() const { - GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment; - return int(adj->page_size); + GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_widget)); + return int(gtk_adjustment_get_page_size(adj)); } int wxScrollBar::GetPageSize() const { - GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment; - return int(adj->page_increment); + GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_widget)); + return int(gtk_adjustment_get_page_increment(adj)); } int wxScrollBar::GetRange() const { - GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment; - return int(adj->upper); + GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_widget)); + return int(gtk_adjustment_get_upper(adj)); } void wxScrollBar::SetThumbPosition( int viewStart ) @@ -212,14 +211,13 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS range = thumbSize = 1; } - GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment; - adj->step_increment = 1; - adj->page_increment = pageSize; - adj->page_size = thumbSize; - adj->value = position; g_signal_handlers_block_by_func(m_widget, (void*)gtk_value_changed, this); - gtk_range_set_range((GtkRange*)m_widget, 0, range); - m_scrollPos[0] = adj->value; + GtkRange* widget = GTK_RANGE(m_widget); + gtk_adjustment_set_page_size(gtk_range_get_adjustment(widget), thumbSize); + gtk_range_set_increments(widget, 1, pageSize); + gtk_range_set_range(widget, 0, range); + gtk_range_set_value(widget, position); + m_scrollPos[0] = gtk_range_get_value(widget); g_signal_handlers_unblock_by_func(m_widget, (void*)gtk_value_changed, this); } @@ -233,11 +231,6 @@ void wxScrollBar::SetRange(int range) SetScrollbar(GetThumbPosition(), GetThumbSize(), range, GetPageSize()); } -GdkWindow *wxScrollBar::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const -{ - return m_widget->window; -} - // static wxVisualAttributes wxScrollBar::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) diff --git a/Externals/wxWidgets3/src/gtk/scrolwin.cpp b/Externals/wxWidgets3/src/gtk/scrolwin.cpp index 363cb56312..9a50e5dc12 100644 --- a/Externals/wxWidgets3/src/gtk/scrolwin.cpp +++ b/Externals/wxWidgets3/src/gtk/scrolwin.cpp @@ -5,7 +5,7 @@ // Modified by: Ron Lee // Vadim Zeitlin: removed 90% of duplicated common code // Created: 01/02/97 -// RCS-ID: $Id: scrolwin.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: scrolwin.cpp 68121 2011-07-01 17:44:49Z PC $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -20,6 +20,7 @@ #include "wx/scrolwin.h" #include +#include "wx/gtk/private/gtk2-compat.h" // ---------------------------------------------------------------------------- // wxScrollHelper implementation @@ -30,10 +31,10 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, int xPos, int yPos, bool noRefresh) { - m_win->m_scrollPos[wxWindow::ScrollDir_Horz] = - m_win->m_scrollBar[wxWindow::ScrollDir_Horz]->adjustment->value = xPos; - m_win->m_scrollPos[wxWindow::ScrollDir_Vert] = - m_win->m_scrollBar[wxWindow::ScrollDir_Vert]->adjustment->value = yPos; + // prevent programmatic position changes from causing scroll events + m_win->SetScrollPos(wxHORIZONTAL, xPos); + m_win->SetScrollPos(wxVERTICAL, yPos); + base_type::SetScrollbars( pixelsPerUnitX, pixelsPerUnitY, noUnitsX, noUnitsY, xPos, yPos, noRefresh); } @@ -68,10 +69,8 @@ void wxScrollHelper::DoAdjustScrollbar(GtkRange* range, *linesPerPage = 0; } - GtkAdjustment* adj = range->adjustment; - adj->step_increment = 1; - adj->page_increment = - adj->page_size = page_size; + gtk_range_set_increments(range, 1, page_size); + gtk_adjustment_set_page_size(gtk_range_get_adjustment(range), page_size); gtk_range_set_range(range, 0, upper); // ensure that the scroll position is always in valid range diff --git a/Externals/wxWidgets3/src/gtk/settings.cpp b/Externals/wxWidgets3/src/gtk/settings.cpp index e28d6ec8c9..9544fb9bc5 100644 --- a/Externals/wxWidgets3/src/gtk/settings.cpp +++ b/Externals/wxWidgets3/src/gtk/settings.cpp @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // Modified by: Mart Raudsepp (GetMetric) -// Id: $Id: settings.cpp 67018 2011-02-25 09:38:35Z JS $ +// Id: $Id: settings.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -22,6 +22,7 @@ #include #include "wx/gtk/private/win_gtk.h" +#include "wx/gtk/private/gtk2-compat.h" bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* bottom); @@ -60,7 +61,7 @@ static const GtkStyle* ButtonStyle() gtk_widget_ensure_style(s_widget); g_signal_connect(s_widget, "style_set", G_CALLBACK(style_set), NULL); } - return s_widget->style; + return gtk_widget_get_style(s_widget); } static const GtkStyle* ListStyle() @@ -73,7 +74,7 @@ static const GtkStyle* ListStyle() gtk_container_add(ContainerWidget(), s_widget); gtk_widget_ensure_style(s_widget); } - return s_widget->style; + return gtk_widget_get_style(s_widget); } static const GtkStyle* TextCtrlStyle() @@ -85,7 +86,7 @@ static const GtkStyle* TextCtrlStyle() gtk_container_add(ContainerWidget(), s_widget); gtk_widget_ensure_style(s_widget); } - return s_widget->style; + return gtk_widget_get_style(s_widget); } static const GtkStyle* MenuItemStyle() @@ -97,7 +98,7 @@ static const GtkStyle* MenuItemStyle() gtk_container_add(ContainerWidget(), s_widget); gtk_widget_ensure_style(s_widget); } - return s_widget->style; + return gtk_widget_get_style(s_widget); } static const GtkStyle* MenuBarStyle() @@ -109,7 +110,7 @@ static const GtkStyle* MenuBarStyle() gtk_container_add(ContainerWidget(), s_widget); gtk_widget_ensure_style(s_widget); } - return s_widget->style; + return gtk_widget_get_style(s_widget); } static const GtkStyle* ToolTipStyle() @@ -124,7 +125,7 @@ static const GtkStyle* ToolTipStyle() gtk_widget_set_name(s_widget, name); gtk_widget_ensure_style(s_widget); } - return s_widget->style; + return gtk_widget_get_style(s_widget); } wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) @@ -257,7 +258,7 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) case wxSYS_SYSTEM_FONT: case wxSYS_DEVICE_DEFAULT_FONT: case wxSYS_DEFAULT_GUI_FONT: - if (!gs_fontSystem.Ok()) + if (!gs_fontSystem.IsOk()) { wxNativeFontInfo info; info.description = ButtonStyle()->font_desc; @@ -316,8 +317,8 @@ static int GetBorderWidth(wxSystemMetric index, wxWindow* win) int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) { GdkWindow *window = NULL; - if(win && GTK_WIDGET_REALIZED(win->GetHandle())) - window = win->GetHandle()->window; + if (win) + window = gtk_widget_get_window(win->GetHandle()); switch (index) { diff --git a/Externals/wxWidgets3/src/gtk/slider.cpp b/Externals/wxWidgets3/src/gtk/slider.cpp index 92b3a46990..694184cf3d 100644 --- a/Externals/wxWidgets3/src/gtk/slider.cpp +++ b/Externals/wxWidgets3/src/gtk/slider.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/slider.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: slider.cpp 66555 2011-01-04 08:31:53Z SC $ +// Id: $Id: slider.cpp 70756 2012-02-29 18:29:31Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -20,6 +20,7 @@ #endif #include +#include "wx/gtk/private/gtk2-compat.h" //----------------------------------------------------------------------------- // data @@ -124,10 +125,9 @@ extern "C" { static void gtk_value_changed(GtkRange* range, wxSlider* win) { - GtkAdjustment* adj = gtk_range_get_adjustment (range); - const int pos = wxRound(adj->value); + const double value = gtk_range_get_value(range); const double oldPos = win->m_pos; - win->m_pos = adj->value; + win->m_pos = value; if (!win->m_hasVMT || g_blockEventsOnDrag) return; @@ -151,18 +151,19 @@ gtk_value_changed(GtkRange* range, wxSlider* win) else if (win->m_mouseButtonDown) { // Difference from last change event - const double diff = adj->value - oldPos; + const double diff = value - oldPos; const bool isDown = diff > 0; - if (IsScrollIncrement(adj->page_increment, diff)) + GtkAdjustment* adj = gtk_range_get_adjustment(range); + if (IsScrollIncrement(gtk_adjustment_get_page_increment(adj), diff)) { eventType = isDown ? wxEVT_SCROLL_PAGEDOWN : wxEVT_SCROLL_PAGEUP; } - else if (wxIsSameDouble(adj->value, 0)) + else if (wxIsSameDouble(value, 0)) { eventType = wxEVT_SCROLL_PAGEUP; } - else if (wxIsSameDouble(adj->value, adj->upper)) + else if (wxIsSameDouble(value, gtk_adjustment_get_upper(adj))) { eventType = wxEVT_SCROLL_PAGEDOWN; } @@ -178,7 +179,7 @@ gtk_value_changed(GtkRange* range, wxSlider* win) win->m_scrollEventType = GTK_SCROLL_NONE; // If integral position has changed - if (wxRound(oldPos) != pos) + if (wxRound(oldPos) != wxRound(value)) { ProcessScrollEvent(win, eventType); win->m_needThumbRelease = eventType == wxEVT_SCROLL_THUMBTRACK; @@ -317,7 +318,6 @@ bool wxSlider::Create(wxWindow *parent, else m_widget = gtk_vbox_new(false, 0); g_object_ref(m_widget); - gtk_widget_show( m_widget ); gtk_container_add( GTK_CONTAINER(m_widget), m_scale ); GtkWidget *box; @@ -438,6 +438,8 @@ void wxSlider::GTKSetValue(int value) { GTKDisableEvents(); gtk_range_set_value(GTK_RANGE (m_scale), value); + // GTK only updates value label if handle moves at least 1 pixel + gtk_widget_queue_draw(m_scale); GTKEnableEvents(); } @@ -471,12 +473,14 @@ void wxSlider::SetRange( int minValue, int maxValue ) int wxSlider::GetMin() const { - return int(gtk_range_get_adjustment (GTK_RANGE (m_scale))->lower); + GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_scale)); + return int(gtk_adjustment_get_lower(adj)); } int wxSlider::GetMax() const { - return int(gtk_range_get_adjustment (GTK_RANGE (m_scale))->upper); + GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_scale)); + return int(gtk_adjustment_get_upper(adj)); } void wxSlider::SetPageSize( int pageSize ) @@ -488,7 +492,8 @@ void wxSlider::SetPageSize( int pageSize ) int wxSlider::GetPageSize() const { - return int(gtk_range_get_adjustment (GTK_RANGE (m_scale))->page_increment); + GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_scale)); + return int(gtk_adjustment_get_page_increment(adj)); } // GTK does not support changing the size of the slider @@ -510,7 +515,8 @@ void wxSlider::SetLineSize( int lineSize ) int wxSlider::GetLineSize() const { - return int(gtk_range_get_adjustment (GTK_RANGE (m_scale))->step_increment); + GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_scale)); + return int(gtk_adjustment_get_step_increment(adj)); } GdkWindow *wxSlider::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const diff --git a/Externals/wxWidgets3/src/gtk/sockgtk.cpp b/Externals/wxWidgets3/src/gtk/sockgtk.cpp index 62ac793e29..5ba3ab13b9 100644 --- a/Externals/wxWidgets3/src/gtk/sockgtk.cpp +++ b/Externals/wxWidgets3/src/gtk/sockgtk.cpp @@ -3,7 +3,7 @@ // Purpose: implementation of wxGTK-specific socket event handling // Author: Guilhem Lavaux, Vadim Zeitlin // Created: 1999 -// RCS-ID: $Id: sockgtk.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: sockgtk.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1999, 2007 wxWidgets dev team // (c) 2009 Vadim Zeitlin // Licence: wxWindows licence @@ -17,17 +17,14 @@ #include "wx/apptrait.h" #include "wx/private/fdiomanager.h" -#include +#include extern "C" { -static -void wxSocket_GDK_Input(gpointer data, - gint WXUNUSED(source), - GdkInputCondition condition) +static gboolean wxSocket_Input(GIOChannel*, GIOCondition condition, gpointer data) { wxFDIOHandler * const handler = static_cast(data); - if ( condition & GDK_INPUT_READ ) + if (condition & G_IO_IN) { handler->OnReadWaiting(); @@ -35,11 +32,13 @@ void wxSocket_GDK_Input(gpointer data, // shouldn't call OnWriteWaiting() as the socket is now closed and it // would assert if ( !handler->IsOk() ) - return; + return true; } - if ( condition & GDK_INPUT_WRITE ) + if (condition & G_IO_OUT) handler->OnWriteWaiting(); + + return true; } } @@ -48,19 +47,17 @@ class GTKFDIOManager : public wxFDIOManager public: virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d) { - return gdk_input_add - ( - fd, - d == OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ, - wxSocket_GDK_Input, - handler - ); + return g_io_add_watch( + g_io_channel_unix_new(fd), + d == OUTPUT ? G_IO_OUT : G_IO_IN, + wxSocket_Input, + handler); } virtual void RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d)) { - gdk_input_remove(fd); + g_source_remove(fd); } }; diff --git a/Externals/wxWidgets3/src/gtk/spinctrl.cpp b/Externals/wxWidgets3/src/gtk/spinctrl.cpp index 48ff350c70..a1f3f0f9dd 100644 --- a/Externals/wxWidgets3/src/gtk/spinctrl.cpp +++ b/Externals/wxWidgets3/src/gtk/spinctrl.cpp @@ -3,7 +3,7 @@ // Purpose: wxSpinCtrl // Author: Robert // Modified by: -// RCS-ID: $Id: spinctrl.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: spinctrl.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -152,12 +152,14 @@ double wxSpinCtrlGTKBase::DoGetValue() const g_signal_emit(m_widget, sig_id, 0, &value, &handled); if (!handled) value = g_strtod(gtk_entry_get_text(GTK_ENTRY(m_widget)), NULL); - const GtkAdjustment* adj = + GtkAdjustment* adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(m_widget)); - if (value < adj->lower) - value = adj->lower; - else if (value > adj->upper) - value = adj->upper; + const double lower = gtk_adjustment_get_lower(adj); + const double upper = gtk_adjustment_get_upper(adj); + if (value < lower) + value = lower; + else if (value > upper) + value = upper; return value; } @@ -297,7 +299,7 @@ void wxSpinCtrlGTKBase::OnChar( wxKeyEvent &event ) GtkWindow *window = GTK_WINDOW(top_frame->m_widget); if ( window ) { - GtkWidget *widgetDef = window->default_widget; + GtkWidget* widgetDef = gtk_window_get_default_widget(window); if ( widgetDef ) { diff --git a/Externals/wxWidgets3/src/gtk/statbmp.cpp b/Externals/wxWidgets3/src/gtk/statbmp.cpp index 115f3627ee..6ef20ec877 100644 --- a/Externals/wxWidgets3/src/gtk/statbmp.cpp +++ b/Externals/wxWidgets3/src/gtk/statbmp.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/statbmp.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: statbmp.cpp 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: statbmp.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -47,7 +47,7 @@ bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bi m_widget = gtk_image_new(); g_object_ref(m_widget); - if (bitmap.Ok()) + if (bitmap.IsOk()) SetBitmap(bitmap); PostCreation(size); @@ -60,7 +60,7 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap ) { m_bitmap = bitmap; - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) { // always use pixbuf, because pixmap mask does not // work with disabled images in some themes diff --git a/Externals/wxWidgets3/src/gtk/statbox.cpp b/Externals/wxWidgets3/src/gtk/statbox.cpp index 4f2e9d88d6..da884716f9 100644 --- a/Externals/wxWidgets3/src/gtk/statbox.cpp +++ b/Externals/wxWidgets3/src/gtk/statbox.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/statbox.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: statbox.cpp 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: statbox.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -16,6 +16,7 @@ #include "wx/gtk/private/win_gtk.h" // for wxPizza #include +#include "wx/gtk/private/gtk2-compat.h" // constants taken from GTK sources #define LABEL_PAD 1 @@ -31,15 +32,16 @@ static void size_allocate(GtkWidget* widget, GtkAllocation* alloc, void*) // clip label as GTK >= 2.12 does GtkWidget* label_widget = gtk_frame_get_label_widget(GTK_FRAME(widget)); int w = alloc->width - - 2 * widget->style->xthickness - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD; + 2 * gtk_widget_get_style(widget)->xthickness - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD; if (w < 0) w = 0; - if (label_widget->allocation.width > w) + GtkAllocation a; + gtk_widget_get_allocation(label_widget, &a); + if (a.width > w) { - GtkAllocation alloc2 = label_widget->allocation; - alloc2.width = w; - gtk_widget_size_allocate(label_widget, &alloc2); + a.width = w; + gtk_widget_size_allocate(label_widget, &a); } } } diff --git a/Externals/wxWidgets3/src/gtk/stattext.cpp b/Externals/wxWidgets3/src/gtk/stattext.cpp index d152499e2b..ff4bd25251 100644 --- a/Externals/wxWidgets3/src/gtk/stattext.cpp +++ b/Externals/wxWidgets3/src/gtk/stattext.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/stattext.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: stattext.cpp 67254 2011-03-20 00:14:35Z DS $ +// Id: $Id: stattext.cpp 70446 2012-01-23 11:28:28Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -153,31 +153,48 @@ bool wxStaticText::DoSetLabelMarkup(const wxString& markup) bool wxStaticText::SetFont( const wxFont &font ) { const bool wasUnderlined = GetFont().GetUnderlined(); + const bool wasStrickenThrough = GetFont().GetStrikethrough(); bool ret = wxControl::SetFont(font); - if ( font.GetUnderlined() != wasUnderlined ) - { - // the underlines for mnemonics are incompatible with using attributes - // so turn them off when setting underlined font and restore them when - // unsetting it - gtk_label_set_use_underline(GTK_LABEL(m_widget), wasUnderlined); + const bool isUnderlined = GetFont().GetUnderlined(); + const bool isStrickenThrough = GetFont().GetStrikethrough(); - if ( wasUnderlined ) + if ( (isUnderlined != wasUnderlined) || + (isStrickenThrough != wasStrickenThrough) ) + { + // We need to update the Pango attributes used for the text. + if ( isUnderlined || isStrickenThrough ) { - // it's not underlined any more, remove the attributes we set - gtk_label_set_attributes(GTK_LABEL(m_widget), NULL); - } - else // the text is underlined now - { - PangoAttrList *attrs = pango_attr_list_new(); - PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); - a->start_index = 0; - a->end_index = (guint)-1; - pango_attr_list_insert(attrs, a); + PangoAttrList* const attrs = pango_attr_list_new(); + if ( isUnderlined ) + { + PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); + a->start_index = 0; + a->end_index = (guint)-1; + pango_attr_list_insert(attrs, a); + } + + if ( isStrickenThrough ) + { + PangoAttribute *a = pango_attr_strikethrough_new( TRUE ); + a->start_index = 0; + a->end_index = (guint) -1; + pango_attr_list_insert(attrs, a); + } + gtk_label_set_attributes(GTK_LABEL(m_widget), attrs); pango_attr_list_unref(attrs); } + else // No special attributes any more. + { + // Just remove any attributes we had set. + gtk_label_set_attributes(GTK_LABEL(m_widget), NULL); + } + + // The underlines for mnemonics are incompatible with using attributes + // so turn them off when setting underlined font. + gtk_label_set_use_underline(GTK_LABEL(m_widget), !isUnderlined); } // adjust the label size to the new label unless disabled diff --git a/Externals/wxWidgets3/src/gtk/taskbar.cpp b/Externals/wxWidgets3/src/gtk/taskbar.cpp index 76b99b45bd..d92e0d0cae 100644 --- a/Externals/wxWidgets3/src/gtk/taskbar.cpp +++ b/Externals/wxWidgets3/src/gtk/taskbar.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: Paul Cornett // Created: 2004/05/29 -// RCS-ID: $Id: taskbar.cpp 58822 2009-02-10 03:43:30Z PC $ +// RCS-ID: $Id: taskbar.cpp 70701 2012-02-26 17:18:41Z VZ $ // Copyright: (c) Vaclav Slavik, 2004 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////// @@ -116,6 +116,7 @@ status_icon_popup_menu(GtkStatusIcon*, guint, guint, wxTaskBarIcon* taskBarIcon) bool wxTaskBarIconBase::IsAvailable() { +#ifdef GDK_WINDOWING_X11 char name[32]; g_snprintf(name, sizeof(name), "_NET_SYSTEM_TRAY_S%d", gdk_x11_get_default_screen()); @@ -124,6 +125,9 @@ bool wxTaskBarIconBase::IsAvailable() Window manager = XGetSelectionOwner(gdk_x11_get_default_xdisplay(), atom); return manager != None; +#else + return true; +#endif } //----------------------------------------------------------------------------- @@ -180,7 +184,7 @@ void wxTaskBarIcon::Private::SetIcon() m_size = 0; if (m_eggTrayIcon) { - GtkWidget* image = GTK_BIN(m_eggTrayIcon)->child; + GtkWidget* image = gtk_bin_get_child(GTK_BIN(m_eggTrayIcon)); gtk_image_set_from_pixbuf(GTK_IMAGE(image), m_bitmap.GetPixbuf()); } else @@ -207,10 +211,22 @@ void wxTaskBarIcon::Private::SetIcon() #if GTK_CHECK_VERSION(2,10,0) if (m_statusIcon) - gtk_status_icon_set_tooltip(m_statusIcon, tip_text); - else -#endif { +#if GTK_CHECK_VERSION(2,16,0) + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,16,0) == NULL) + gtk_status_icon_set_tooltip_text(m_statusIcon, tip_text); + else +#endif + { +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) + gtk_status_icon_set_tooltip(m_statusIcon, tip_text); +#endif + } + } + else +#endif // GTK_CHECK_VERSION(2,10,0) + { +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) if (tip_text && m_tooltips == NULL) { m_tooltips = gtk_tooltips_new(); @@ -219,6 +235,7 @@ void wxTaskBarIcon::Private::SetIcon() } if (m_tooltips) gtk_tooltips_set_tip(m_tooltips, m_eggTrayIcon, tip_text, ""); +#endif } #endif // wxUSE_TOOLTIPS } @@ -240,7 +257,7 @@ void wxTaskBarIcon::Private::size_allocate(int width, int height) if (h > size) h = size; GdkPixbuf* pixbuf = gdk_pixbuf_scale_simple(m_bitmap.GetPixbuf(), w, h, GDK_INTERP_BILINEAR); - GtkImage* image = GTK_IMAGE(GTK_BIN(m_eggTrayIcon)->child); + GtkImage* image = GTK_IMAGE(gtk_bin_get_child(GTK_BIN(m_eggTrayIcon))); gtk_image_set_from_pixbuf(image, pixbuf); g_object_unref(pixbuf); } diff --git a/Externals/wxWidgets3/src/gtk/textctrl.cpp b/Externals/wxWidgets3/src/gtk/textctrl.cpp index ef032998c6..2a9dc26663 100644 --- a/Externals/wxWidgets3/src/gtk/textctrl.cpp +++ b/Externals/wxWidgets3/src/gtk/textctrl.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/textctrl.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: textctrl.cpp 66555 2011-01-04 08:31:53Z SC $ +// Id: $Id: textctrl.cpp 70674 2012-02-23 13:56:14Z VZ $ // Copyright: (c) 1998 Robert Roebling, Vadim Zeitlin, 2005 Mart Raudsepp // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -110,6 +110,18 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, NULL ); gtk_text_buffer_apply_tag (text_buffer, tag, start, end); } + if ( font.GetStrikethrough() ) + { + g_snprintf(buf, sizeof(buf), "WXFONTSTRIKETHROUGH"); + tag = gtk_text_tag_table_lookup( gtk_text_buffer_get_tag_table( text_buffer ), + buf ); + if (!tag) + tag = gtk_text_buffer_create_tag( text_buffer, buf, + "strikethrough-set", TRUE, + "strikethrough", TRUE, + NULL ); + gtk_text_buffer_apply_tag (text_buffer, tag, start, end); + } } if (attr.HasTextColour()) @@ -391,7 +403,7 @@ au_check_word( GtkTextIter *s, GtkTextIter *e ) for( n = 0; n < WXSIZEOF(URIPrefixes); ++n ) { prefix_len = strlen(URIPrefixes[n]); - if((len > prefix_len) && !strncasecmp(text, URIPrefixes[n], prefix_len)) + if((len > prefix_len) && !wxStrnicmp(text, URIPrefixes[n], prefix_len)) break; } @@ -579,6 +591,18 @@ gtk_paste_clipboard_callback( GtkWidget *widget, wxTextCtrl *win ) } } +//----------------------------------------------------------------------------- +// "mark_set" +//----------------------------------------------------------------------------- + +extern "C" { +static void mark_set(GtkTextBuffer*, GtkTextIter*, GtkTextMark* mark, GSList** markList) +{ + if (gtk_text_mark_get_name(mark) == NULL) + *markList = g_slist_prepend(*markList, mark); +} +} + //----------------------------------------------------------------------------- // wxTextCtrl //----------------------------------------------------------------------------- @@ -620,10 +644,13 @@ void wxTextCtrl::Init() m_text = NULL; m_showPositionOnThaw = NULL; + m_anonymousMarkList = NULL; } wxTextCtrl::~wxTextCtrl() { + if (m_anonymousMarkList) + g_slist_free(m_anonymousMarkList); } wxTextCtrl::wxTextCtrl( wxWindow *parent, @@ -660,10 +687,13 @@ bool wxTextCtrl::Create( wxWindow *parent, if (multi_line) { + m_buffer = gtk_text_buffer_new(NULL); + gulong sig_id = g_signal_connect(m_buffer, "mark_set", G_CALLBACK(mark_set), &m_anonymousMarkList); // Create view - m_text = gtk_text_view_new(); - - m_buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(m_text) ); + m_text = gtk_text_view_new_with_buffer(m_buffer); + // gtk_text_view_set_buffer adds its own reference + g_object_unref(m_buffer); + g_signal_handler_disconnect(m_buffer, sig_id); // create "ShowPosition" marker GtkTextIter iter; @@ -678,7 +708,7 @@ bool wxTextCtrl::Create( wxWindow *parent, ? GTK_POLICY_NEVER : GTK_POLICY_AUTOMATIC ); // for ScrollLines/Pages - m_scrollBar[1] = (GtkRange*)((GtkScrolledWindow*)m_widget)->vscrollbar; + m_scrollBar[1] = GTK_RANGE(gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(m_widget))); // Insert view into scrolled window gtk_container_add( GTK_CONTAINER(m_widget), m_text ); @@ -689,7 +719,7 @@ bool wxTextCtrl::Create( wxWindow *parent, gtk_widget_add_events( GTK_WIDGET(m_text), GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK ); - GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS ); + gtk_widget_set_can_focus(m_widget, FALSE); } else { @@ -1082,13 +1112,19 @@ void wxTextCtrl::WriteText( const wxString &text ) // Insert the text wxGtkTextInsert( m_text, m_buffer, m_defaultStyle, buffer ); - GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW(m_widget) ); // Scroll to cursor, but only if scrollbar thumb is at the very bottom // won't work when frozen, text view is not using m_buffer then - if (!IsFrozen() && wxIsSameDouble(adj->value, adj->upper - adj->page_size)) + if (!IsFrozen()) { - gtk_text_view_scroll_to_mark( GTK_TEXT_VIEW(m_text), - gtk_text_buffer_get_insert( m_buffer ), 0.0, FALSE, 0.0, 1.0 ); + GtkAdjustment* adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(m_widget)); + const double value = gtk_adjustment_get_value(adj); + const double upper = gtk_adjustment_get_upper(adj); + const double page_size = gtk_adjustment_get_page_size(adj); + if (wxIsSameDouble(value, upper - page_size)) + { + gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(m_text), + gtk_text_buffer_get_insert(m_buffer), 0, false, 0, 1); + } } } @@ -1141,7 +1177,7 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const } else // single line control { - if ( pos <= GTK_ENTRY(m_text)->text_length ) + if (pos <= gtk_entry_get_text_length(GTK_ENTRY(m_text))) { if ( y ) *y = 0; @@ -1194,6 +1230,37 @@ int wxTextCtrl::GetLineLength(long lineNo) const } } +wxPoint wxTextCtrl::DoPositionToCoords(long pos) const +{ + if ( !IsMultiLine() ) + { + // Single line text entry (GtkTextEntry) doesn't have support for + // getting the coordinates for the given offset. Perhaps we could + // find them ourselves by using GetTextExtent() but for now just leave + // it unimplemented, this function is more useful for multiline + // controls anyhow. + return wxDefaultPosition; + } + + // Window coordinates for the given position is calculated by getting + // the buffer coordinates and converting them to window coordinates. + GtkTextView *textview = GTK_TEXT_VIEW(m_text); + + GtkTextIter iter; + gtk_text_buffer_get_iter_at_offset(m_buffer, &iter, pos); + + GdkRectangle bufferCoords; + gtk_text_view_get_iter_location(textview, &iter, &bufferCoords); + + gint winCoordX = 0, + winCoordY = 0; + gtk_text_view_buffer_to_window_coords(textview, GTK_TEXT_WINDOW_WIDGET, + bufferCoords.x, bufferCoords.y, + &winCoordX, &winCoordY); + + return wxPoint(winCoordX, winCoordY); +} + int wxTextCtrl::GetNumberOfLines() const { if ( IsMultiLine() ) @@ -1265,7 +1332,7 @@ void wxTextCtrl::OnEnabled(bool WXUNUSED(enable)) // disabled and enabled mode, or we end up with a different colour under the // text. wxColour oldColour = GetBackgroundColour(); - if (oldColour.Ok()) + if (oldColour.IsOk()) { // Need to set twice or it'll optimize the useful stuff out if (oldColour == * wxWHITE) @@ -1578,7 +1645,7 @@ GdkWindow *wxTextCtrl::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const } else { - return GTK_ENTRY(m_text)->text_area; + return gtk_entry_get_text_window(GTK_ENTRY(m_text)); } } @@ -1642,7 +1709,7 @@ bool wxTextCtrl::SetBackgroundColour( const wxColour &colour ) if ( !wxControl::SetBackgroundColour( colour ) ) return false; - if (!m_backgroundColour.Ok()) + if (!m_backgroundColour.IsOk()) return false; // change active background color too @@ -1698,7 +1765,7 @@ bool wxTextCtrl::GetStyle(long position, wxTextAttr& style) // Obtain a copy of the default attributes GtkTextAttributes * const pattr = gtk_text_view_get_default_attributes(GTK_TEXT_VIEW(m_text)); - wxON_BLOCK_EXIT1( g_free, pattr ); + wxON_BLOCK_EXIT1(gtk_text_attributes_unref, pattr); // And query GTK for the attributes at the given position using it as base if ( !gtk_text_iter_get_attributes(&positioni, pattr) ) @@ -1804,16 +1871,24 @@ void wxTextCtrl::DoFreeze() // removing buffer dramatically speeds up insertion: g_object_ref(m_buffer); GtkTextBuffer* buf_new = gtk_text_buffer_new(NULL); - GtkTextMark* mark = GTK_TEXT_VIEW(m_text)->first_para_mark; gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_text), buf_new); // gtk_text_view_set_buffer adds its own reference g_object_unref(buf_new); - // This mark should be deleted when the buffer is changed, - // but it's not (in GTK+ up to at least 2.10.6). + // These marks should be deleted when the buffer is changed, + // but they are not (in GTK+ up to at least 3.0.1). // Otherwise these anonymous marks start to build up in the buffer, // and Freeze takes longer and longer each time it is called. - if (GTK_IS_TEXT_MARK(mark) && !gtk_text_mark_get_deleted(mark)) - gtk_text_buffer_delete_mark(m_buffer, mark); + if (m_anonymousMarkList) + { + for (GSList* item = m_anonymousMarkList; item; item = item->next) + { + GtkTextMark* mark = static_cast(item->data); + if (GTK_IS_TEXT_MARK(mark) && !gtk_text_mark_get_deleted(mark)) + gtk_text_buffer_delete_mark(m_buffer, mark); + } + g_slist_free(m_anonymousMarkList); + m_anonymousMarkList = NULL; + } } } @@ -1822,8 +1897,10 @@ void wxTextCtrl::DoThaw() if ( HasFlag(wxTE_MULTILINE) ) { // reattach buffer: + gulong sig_id = g_signal_connect(m_buffer, "mark_set", G_CALLBACK(mark_set), &m_anonymousMarkList); gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_text), m_buffer); g_object_unref(m_buffer); + g_signal_handler_disconnect(m_buffer, sig_id); if (m_showPositionOnThaw != NULL) { diff --git a/Externals/wxWidgets3/src/gtk/textentry.cpp b/Externals/wxWidgets3/src/gtk/textentry.cpp index bf1042235b..234232a05c 100644 --- a/Externals/wxWidgets3/src/gtk/textentry.cpp +++ b/Externals/wxWidgets3/src/gtk/textentry.cpp @@ -3,7 +3,7 @@ // Purpose: wxTextEntry implementation for wxGTK // Author: Vadim Zeitlin // Created: 2007-09-24 -// RCS-ID: $Id: textentry.cpp 61836 2009-09-05 13:23:03Z JMS $ +// RCS-ID: $Id: textentry.cpp 67509 2011-04-16 17:27:04Z VZ $ // Copyright: (c) 2007 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -52,13 +52,19 @@ wx_gtk_insert_text_callback(GtkEditable *editable, // we should only be called if we have a max len limit at all GtkEntry *entry = GTK_ENTRY (editable); - wxCHECK_RET( entry->text_max_length, wxT("shouldn't be called") ); + const int text_length = gtk_entry_get_text_length(entry); +#if GTK_CHECK_VERSION(3,0,0) || defined(GSEAL_ENABLE) + const int text_max_length = gtk_entry_buffer_get_max_length(gtk_entry_get_buffer(entry)); +#else + const int text_max_length = entry->text_max_length; +#endif + wxCHECK_RET(text_max_length, "shouldn't be called"); // check that we don't overflow the max length limit // // FIXME: this doesn't work when we paste a string which is going to be // truncated - if ( entry->text_length == entry->text_max_length ) + if (text_length == text_max_length) { // we don't need to run the base class version at all g_signal_stop_emission_by_name (editable, "insert_text"); @@ -179,7 +185,7 @@ long wxTextEntry::GetLastPosition() const // GtkEntries GtkEntry * const entry = GTK_ENTRY(GetEditable()); - return entry ? entry->text_length : - 1; + return entry ? gtk_entry_get_text_length(entry) : -1; } // ---------------------------------------------------------------------------- @@ -231,7 +237,7 @@ void wxTextEntry::GetSelection(long *from, long *to) const // auto completion // ---------------------------------------------------------------------------- -bool wxTextEntry::AutoComplete(const wxArrayString& choices) +bool wxTextEntry::DoAutoCompleteStrings(const wxArrayString& choices) { GtkEntry * const entry = GTK_ENTRY(GetEditable()); wxCHECK_MSG(entry, false, "auto completion doesn't work with this control"); diff --git a/Externals/wxWidgets3/src/gtk/tglbtn.cpp b/Externals/wxWidgets3/src/gtk/tglbtn.cpp index 83f349d7d5..7590fd23cb 100644 --- a/Externals/wxWidgets3/src/gtk/tglbtn.cpp +++ b/Externals/wxWidgets3/src/gtk/tglbtn.cpp @@ -5,7 +5,7 @@ // Author: John Norris, minor changes by Axel Schlueter // Modified by: // Created: 08.02.01 -// RCS-ID: $Id: tglbtn.cpp 64940 2010-07-13 13:29:13Z VZ $ +// RCS-ID: $Id: tglbtn.cpp 69830 2011-11-27 19:49:54Z VZ $ // Copyright: (c) 2000 Johnny C. Norris II // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -45,157 +45,30 @@ wxDEFINE_EVENT( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEvent ); // wxBitmapToggleButton // ------------------------------------------------------------------------ -IMPLEMENT_DYNAMIC_CLASS(wxBitmapToggleButton, wxControl) +IMPLEMENT_DYNAMIC_CLASS(wxBitmapToggleButton, wxToggleButton) bool wxBitmapToggleButton::Create(wxWindow *parent, wxWindowID id, - const wxBitmap &label, const wxPoint &pos, + const wxBitmap &bitmap, const wxPoint &pos, const wxSize &size, long style, const wxValidator& validator, const wxString &name) { - if (!PreCreation(parent, pos, size) || - !CreateBase(parent, id, pos, size, style, validator, name )) - { - wxFAIL_MSG(wxT("wxBitmapToggleButton creation failed")); - return false; - } - - // Create the gtk widget. - m_widget = gtk_toggle_button_new(); - g_object_ref(m_widget); - - if (style & wxNO_BORDER) - gtk_button_set_relief( GTK_BUTTON(m_widget), GTK_RELIEF_NONE ); - - m_bitmap = label; - OnSetBitmap(); - - g_signal_connect (m_widget, "clicked", - G_CALLBACK (gtk_togglebutton_clicked_callback), - this); - - m_parent->DoAddChild(this); - - PostCreation(size); - - return true; -} - -void wxBitmapToggleButton::GTKDisableEvents() -{ - g_signal_handlers_block_by_func(m_widget, - (gpointer) gtk_togglebutton_clicked_callback, this); -} - -void wxBitmapToggleButton::GTKEnableEvents() -{ - g_signal_handlers_unblock_by_func(m_widget, - (gpointer) gtk_togglebutton_clicked_callback, this); -} - -// void SetValue(bool state) -// Set the value of the toggle button. -void wxBitmapToggleButton::SetValue(bool state) -{ - wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button")); - - if (state == GetValue()) - return; - - GTKDisableEvents(); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_widget), state); - - GTKEnableEvents(); -} - -// bool GetValue() const -// Get the value of the toggle button. -bool wxBitmapToggleButton::GetValue() const -{ - wxCHECK_MSG(m_widget != NULL, false, wxT("invalid toggle button")); - - return gtk_toggle_button_get_active((GtkToggleButton*)m_widget); -} - -void wxBitmapToggleButton::SetLabel(const wxBitmap& label) -{ - wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button")); - - m_bitmap = label; - InvalidateBestSize(); - - OnSetBitmap(); -} - -void wxBitmapToggleButton::OnSetBitmap() -{ - if (!m_bitmap.Ok()) return; - - GtkWidget* image = ((GtkBin*)m_widget)->child; - if (image == NULL) - { - image = gtk_image_new(); - gtk_widget_show(image); - gtk_container_add((GtkContainer*)m_widget, image); - } - // always use pixbuf, because pixmap mask does not - // work with disabled images in some themes - gtk_image_set_from_pixbuf((GtkImage*)image, m_bitmap.GetPixbuf()); -} - -bool wxBitmapToggleButton::Enable(bool enable /*=true*/) -{ - bool isEnabled = IsEnabled(); - - if (!wxControl::Enable(enable)) + if ( !wxToggleButton::Create(parent, id, wxEmptyString, pos, size, style | wxBU_NOTEXT | wxBU_EXACTFIT, + validator, name) ) return false; - gtk_widget_set_sensitive(GTK_BIN(m_widget)->child, enable); - - if (!isEnabled && enable) + if ( bitmap.IsOk() ) { - GTKFixSensitivity(); + SetBitmapLabel(bitmap); + + // we need to adjust the size after setting the bitmap as it may be too + // big for the default button size + SetInitialSize(size); } return true; } -void wxBitmapToggleButton::DoApplyWidgetStyle(GtkRcStyle *style) -{ - gtk_widget_modify_style(m_widget, style); - gtk_widget_modify_style(GTK_BIN(m_widget)->child, style); -} - -GdkWindow * -wxBitmapToggleButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const -{ - return GTK_BUTTON(m_widget)->event_window; -} - -// Get the "best" size for this control. -wxSize wxBitmapToggleButton::DoGetBestSize() const -{ - wxSize best; - - if (m_bitmap.Ok()) - { - int border = HasFlag(wxNO_BORDER) ? 4 : 10; - best.x = m_bitmap.GetWidth()+border; - best.y = m_bitmap.GetHeight()+border; - } - CacheBestSize(best); - return best; -} - - -// static -wxVisualAttributes -wxBitmapToggleButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) -{ - return GetDefaultAttributesFromGTKWidget(gtk_toggle_button_new); -} - // ------------------------------------------------------------------------ // wxToggleButton @@ -216,11 +89,28 @@ bool wxToggleButton::Create(wxWindow *parent, wxWindowID id, return false; } - // Create the gtk widget. - m_widget = gtk_toggle_button_new_with_mnemonic(""); + // create either a standard toggle button with text label (which may still contain + // an image under GTK+ 2.6+) or a bitmap-only toggle button if we don't have any + // label + const bool + useLabel = !(style & wxBU_NOTEXT) && !label.empty(); + if ( useLabel ) + { + m_widget = gtk_toggle_button_new_with_mnemonic(""); + } + else // no label, suppose we will have a bitmap + { + m_widget = gtk_toggle_button_new(); + + GtkWidget *image = gtk_image_new(); + gtk_widget_show(image); + gtk_container_add(GTK_CONTAINER(m_widget), image); + } + g_object_ref(m_widget); - SetLabel(label); + if ( useLabel ) + SetLabel(label); g_signal_connect (m_widget, "clicked", G_CALLBACK (gtk_togglebutton_clicked_callback), @@ -267,14 +157,22 @@ bool wxToggleButton::GetValue() const { wxCHECK_MSG(m_widget != NULL, false, wxT("invalid toggle button")); - return GTK_TOGGLE_BUTTON(m_widget)->active; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_widget)) != 0; } void wxToggleButton::SetLabel(const wxString& label) { wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button")); - wxControl::SetLabel(label); + wxAnyButton::SetLabel(label); + + if ( HasFlag(wxBU_NOTEXT) ) + { + // Don't try to update the label for a button not showing it, this is + // unnecessary and can also actually replace the image we show with the + // label entirely breaking the button code, see #13693. + return; + } const wxString labelGTK = GTKConvertMnemonics(label); @@ -283,35 +181,45 @@ void wxToggleButton::SetLabel(const wxString& label) GTKApplyWidgetStyle( false ); } -bool wxToggleButton::Enable(bool enable /*=true*/) +#if wxUSE_MARKUP +bool wxToggleButton::DoSetLabelMarkup(const wxString& markup) { - if (!base_type::Enable(enable)) + wxCHECK_MSG( m_widget != NULL, false, "invalid toggle button" ); + + const wxString stripped = RemoveMarkup(markup); + if ( stripped.empty() && !markup.empty() ) return false; - gtk_widget_set_sensitive(GTK_BIN(m_widget)->child, enable); + wxControl::SetLabel(stripped); - if (enable) - GTKFixSensitivity(); + if ( !HasFlag(wxBU_NOTEXT) ) + { + GtkLabel * const label = GTKGetLabel(); + wxCHECK_MSG( label, false, "no label in this toggle button?" ); + + GTKSetLabelWithMarkupForLabel(label, markup); + } return true; } +#endif // wxUSE_MARKUP + +GtkLabel *wxToggleButton::GTKGetLabel() const +{ + GtkWidget* child = gtk_bin_get_child(GTK_BIN(m_widget)); + return GTK_LABEL(child); +} void wxToggleButton::DoApplyWidgetStyle(GtkRcStyle *style) { gtk_widget_modify_style(m_widget, style); - gtk_widget_modify_style(GTK_BIN(m_widget)->child, style); -} - -GdkWindow * -wxToggleButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const -{ - return GTK_BUTTON(m_widget)->event_window; + gtk_widget_modify_style(gtk_bin_get_child(GTK_BIN(m_widget)), style); } // Get the "best" size for this control. wxSize wxToggleButton::DoGetBestSize() const { - wxSize ret(wxControl::DoGetBestSize()); + wxSize ret(wxAnyButton::DoGetBestSize()); if (!HasFlag(wxBU_EXACTFIT)) { diff --git a/Externals/wxWidgets3/src/gtk/toolbar.cpp b/Externals/wxWidgets3/src/gtk/toolbar.cpp index 5e6949d45c..464f45dd8a 100644 --- a/Externals/wxWidgets3/src/gtk/toolbar.cpp +++ b/Externals/wxWidgets3/src/gtk/toolbar.cpp @@ -3,7 +3,7 @@ // Purpose: GTK toolbar // Author: Robert Roebling // Modified: 13.12.99 by VZ to derive from wxToolBarBase -// RCS-ID: $Id: toolbar.cpp 66633 2011-01-07 18:15:21Z PC $ +// RCS-ID: $Id: toolbar.cpp 70510 2012-02-05 01:20:03Z VZ $ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -195,12 +195,15 @@ image_expose_event(GtkWidget* widget, GdkEventExpose*, wxToolBarTool* tool) return false; // draw disabled bitmap ourselves, GtkImage has no way to specify it - const GtkAllocation& alloc = widget->allocation; + GtkAllocation alloc; + gtk_widget_get_allocation(widget, &alloc); + GtkRequisition req; + gtk_widget_get_requisition(widget, &req); gdk_draw_pixbuf( - widget->window, widget->style->black_gc, bitmap.GetPixbuf(), + gtk_widget_get_window(widget), gtk_widget_get_style(widget)->black_gc, bitmap.GetPixbuf(), 0, 0, - alloc.x + (alloc.width - widget->requisition.width) / 2, - alloc.y + (alloc.height - widget->requisition.height) / 2, + alloc.x + (alloc.width - req.width) / 2, + alloc.y + (alloc.height - req.height) / 2, -1, -1, GDK_RGB_DITHER_NORMAL, 0, 0); return true; } @@ -250,7 +253,7 @@ void wxToolBar::AddChildGTK(wxWindowGTK* child) GtkToolItem* item = gtk_tool_item_new(); gtk_container_add(GTK_CONTAINER(item), align); // position will be corrected in DoInsertTool if necessary - gtk_toolbar_insert(GTK_TOOLBAR(GTK_BIN(m_widget)->child), item, -1); + gtk_toolbar_insert(GTK_TOOLBAR(gtk_bin_get_child(GTK_BIN(m_widget))), item, -1); } // ---------------------------------------------------------------------------- @@ -284,7 +287,7 @@ void wxToolBarTool::CreateDropDown() box = gtk_hbox_new(false, 0); arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE); } - GtkWidget* tool_button = GTK_BIN(m_item)->child; + GtkWidget* tool_button = gtk_bin_get_child(GTK_BIN(m_item)); gtk_widget_reparent(tool_button, box); GtkWidget* arrow_button = gtk_toggle_button_new(); gtk_button_set_relief(GTK_BUTTON(arrow_button), @@ -308,7 +311,8 @@ void wxToolBarTool::ShowDropdown(GtkToggleButton* button) wxMenu* menu = GetDropdownMenu(); if (menu) { - const GtkAllocation& alloc = GTK_WIDGET(button)->allocation; + GtkAllocation alloc; + gtk_widget_get_allocation(GTK_WIDGET(button), &alloc); int x = alloc.x; int y = alloc.y; if (toolbar->HasFlag(wxTB_LEFT | wxTB_RIGHT)) @@ -376,12 +380,14 @@ bool wxToolBar::Create( wxWindow *parent, FixupStyle(); m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) if (gtk_check_version(2, 12, 0)) { m_tooltips = gtk_tooltips_new(); g_object_ref(m_tooltips); gtk_object_sink(GTK_OBJECT(m_tooltips)); } +#endif GtkSetStyle(); if (style & wxTB_DOCKABLE) @@ -417,7 +423,7 @@ bool wxToolBar::Create( wxWindow *parent, GdkWindow *wxToolBar::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const { - return GTK_WIDGET(m_toolbar)->window; + return gtk_widget_get_window(GTK_WIDGET(m_toolbar)); } void wxToolBar::GtkSetStyle() @@ -436,7 +442,11 @@ void wxToolBar::GtkSetStyle() style = GTK_TOOLBAR_BOTH_HORIZ; } +#if GTK_CHECK_VERSION(3,0,0) || defined(GTK_DISABLE_DEPRECATED) + gtk_orientable_set_orientation(GTK_ORIENTABLE(m_toolbar), orient); +#else gtk_toolbar_set_orientation(m_toolbar, orient); +#endif gtk_toolbar_set_style(m_toolbar, style); } @@ -479,6 +489,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) wxToolBarTool* tool = static_cast(toolBase); GSList* radioGroup; + GtkWidget* bin_child; switch ( tool->GetStyle() ) { case wxTOOL_STYLE_BUTTON: @@ -491,7 +502,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) break; case wxITEM_RADIO: radioGroup = GetRadioGroup(pos); - if (radioGroup) + if (!radioGroup) { // this is the first button in the radio button group, // it will be toggled automatically by GTK so bring the @@ -532,7 +543,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) if (!HasFlag(wxTB_NO_TOOLTIPS) && !tool->GetShortHelp().empty()) { #if GTK_CHECK_VERSION(2, 12, 0) - if (!gtk_check_version(2, 12, 0)) + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,12,0) == NULL) { gtk_tool_item_set_tooltip_text(tool->m_item, wxGTK_CONV(tool->GetShortHelp())); @@ -540,15 +551,18 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) else #endif { +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) gtk_tool_item_set_tooltip(tool->m_item, m_tooltips, wxGTK_CONV(tool->GetShortHelp()), ""); +#endif } } - g_signal_connect(GTK_BIN(tool->m_item)->child, "button_press_event", + bin_child = gtk_bin_get_child(GTK_BIN(tool->m_item)); + g_signal_connect(bin_child, "button_press_event", G_CALLBACK(button_press_event), tool); - g_signal_connect(tool->m_item, "enter_notify_event", + g_signal_connect(bin_child, "enter_notify_event", G_CALLBACK(enter_notify_event), tool); - g_signal_connect(tool->m_item, "leave_notify_event", + g_signal_connect(bin_child, "leave_notify_event", G_CALLBACK(enter_notify_event), tool); if (tool->GetKind() == wxITEM_DROPDOWN) @@ -572,9 +586,9 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) case wxTOOL_STYLE_CONTROL: wxWindow* control = tool->GetControl(); - if (control->m_widget->parent == NULL) + if (gtk_widget_get_parent(control->m_widget) == NULL) AddChildGTK(control); - tool->m_item = GTK_TOOL_ITEM(control->m_widget->parent->parent); + tool->m_item = GTK_TOOL_ITEM(gtk_widget_get_parent(gtk_widget_get_parent(control->m_widget))); if (gtk_toolbar_get_item_index(m_toolbar, tool->m_item) != int(pos)) { g_object_ref(tool->m_item); @@ -609,7 +623,7 @@ bool wxToolBar::DoDeleteTool(size_t /* pos */, wxToolBarToolBase* toolBase) // while if we're called from DeleteTool() the control will // be destroyed when wxToolBarToolBase itself is deleted GtkWidget* widget = tool->GetControl()->m_widget; - gtk_container_remove(GTK_CONTAINER(widget->parent), widget); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(widget)), widget); } gtk_object_destroy(GTK_OBJECT(tool->m_item)); tool->m_item = NULL; @@ -709,7 +723,7 @@ void wxToolBar::SetToolShortHelp( int id, const wxString& helpString ) if (tool->m_item) { #if GTK_CHECK_VERSION(2, 12, 0) - if (!gtk_check_version(2, 12, 0)) + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,12,0) == NULL) { gtk_tool_item_set_tooltip_text(tool->m_item, wxGTK_CONV(helpString)); @@ -717,8 +731,10 @@ void wxToolBar::SetToolShortHelp( int id, const wxString& helpString ) else #endif { +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) gtk_tool_item_set_tooltip(tool->m_item, m_tooltips, wxGTK_CONV(helpString), ""); +#endif } } } diff --git a/Externals/wxWidgets3/src/gtk/tooltip.cpp b/Externals/wxWidgets3/src/gtk/tooltip.cpp index d82bfc03f2..214d0e0784 100644 --- a/Externals/wxWidgets3/src/gtk/tooltip.cpp +++ b/Externals/wxWidgets3/src/gtk/tooltip.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/tooltip.cpp // Purpose: wxToolTip implementation // Author: Robert Roebling -// Id: $Id: tooltip.cpp 66431 2010-12-22 13:57:28Z VZ $ +// Id: $Id: tooltip.cpp 67326 2011-03-28 06:27:49Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -24,7 +24,9 @@ // global data //----------------------------------------------------------------------------- +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) static GtkTooltips *gs_tooltips = NULL; +#endif //----------------------------------------------------------------------------- // wxToolTip @@ -33,98 +35,85 @@ static GtkTooltips *gs_tooltips = NULL; IMPLEMENT_ABSTRACT_CLASS(wxToolTip, wxObject) wxToolTip::wxToolTip( const wxString &tip ) + : m_text(tip) { - m_text = tip; m_window = NULL; } void wxToolTip::SetTip( const wxString &tip ) { m_text = tip; - GTKApply( m_window ); + if (m_window) + m_window->GTKApplyToolTip(wxGTK_CONV_SYS(m_text)); } -void wxToolTip::GTKApply( wxWindow *win ) +void wxToolTip::GTKSetWindow(wxWindow* win) { - if (!win) - return; - - if ( !gs_tooltips ) - gs_tooltips = gtk_tooltips_new(); - + wxASSERT(win); m_window = win; - - if (m_text.empty()) - m_window->GTKApplyToolTip( gs_tooltips, NULL ); - else - m_window->GTKApplyToolTip( gs_tooltips, wxGTK_CONV_SYS(m_text) ); + m_window->GTKApplyToolTip(wxGTK_CONV_SYS(m_text)); } /* static */ -void wxToolTip::GTKApply(GtkWidget *w, const gchar *tip) +void wxToolTip::GTKApply(GtkWidget* widget, const char* tip) { #if GTK_CHECK_VERSION(2, 12, 0) - if (!gtk_check_version(2, 12, 0)) - { - gtk_widget_set_tooltip_text(w, tip); - } + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,12,0) == NULL) + gtk_widget_set_tooltip_text(widget, tip); else #endif { +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) if ( !gs_tooltips ) gs_tooltips = gtk_tooltips_new(); - gtk_tooltips_set_tip(gs_tooltips, w, tip, NULL); + gtk_tooltips_set_tip(gs_tooltips, widget, tip, NULL); +#endif } } void wxToolTip::Enable( bool flag ) { #if GTK_CHECK_VERSION(2, 12, 0) - if (!gtk_check_version(2, 12, 0)) + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,12,0) == NULL) { GtkSettings* settings = gtk_settings_get_default(); - if(!settings) - return; - gtk_settings_set_long_property(settings, "gtk-enable-tooltips", flag?TRUE:FALSE, NULL); + if (settings) + gtk_settings_set_long_property(settings, "gtk-enable-tooltips", flag, NULL); } else #endif { +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) if (!gs_tooltips) - return; + gs_tooltips = gtk_tooltips_new(); if (flag) gtk_tooltips_enable( gs_tooltips ); else gtk_tooltips_disable( gs_tooltips ); +#endif } } -G_BEGIN_DECLS -void gtk_tooltips_set_delay (GtkTooltips *tooltips, - guint delay); -G_END_DECLS - void wxToolTip::SetDelay( long msecs ) { #if GTK_CHECK_VERSION(2, 12, 0) - if (!gtk_check_version(2, 12, 0)) + if (GTK_CHECK_VERSION(3,0,0) || gtk_check_version(2,12,0) == NULL) { GtkSettings* settings = gtk_settings_get_default(); - if(!settings) - return; - gtk_settings_set_long_property(settings, "gtk-tooltip-timeout", msecs, NULL); + if (settings) + gtk_settings_set_long_property(settings, "gtk-tooltip-timeout", msecs, NULL); } else #endif { +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) if (!gs_tooltips) - return; + gs_tooltips = gtk_tooltips_new(); - // FIXME: This is a deprecated function and might not even have an effect. - // Try to not use it, after which remove the prototype above. gtk_tooltips_set_delay( gs_tooltips, (int)msecs ); +#endif } } diff --git a/Externals/wxWidgets3/src/gtk/toplevel.cpp b/Externals/wxWidgets3/src/gtk/toplevel.cpp index 7c3f467f53..cd796e4bed 100644 --- a/Externals/wxWidgets3/src/gtk/toplevel.cpp +++ b/Externals/wxWidgets3/src/gtk/toplevel.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/toplevel.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: toplevel.cpp 67164 2011-03-09 17:22:43Z PC $ +// Id: $Id: toplevel.cpp 70733 2012-02-28 04:40:15Z PC $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -36,15 +36,21 @@ #include "wx/sysopt.h" #include +#ifdef GDK_WINDOWING_X11 #include +#endif #include "wx/gtk/private/win_gtk.h" +#ifdef GDK_WINDOWING_X11 + #include "wx/unix/utilsx11.h" // XA_CARDINAL #include +#endif // GDK_WINDOWING_X11 + #if wxUSE_LIBHILDON #include #include @@ -72,40 +78,52 @@ static wxTopLevelWindowGTK *g_lastActiveFrame = NULL; // send any activate events at all static int g_sendActivateEvent = -1; +// Whether _NET_REQUEST_FRAME_EXTENTS support is working +// 0 == not tested yet, 1 == working, 2 == broken +static int gs_requestFrameExtentsStatus; + //----------------------------------------------------------------------------- // RequestUserAttention related functions //----------------------------------------------------------------------------- -extern "C" { +#ifndef __WXGTK30__ static void wxgtk_window_set_urgency_hint (GtkWindow *win, gboolean setting) -{ - wxASSERT_MSG( GTK_WIDGET_REALIZED(win), wxT("wxgtk_window_set_urgency_hint: GdkWindow not realized") ); - GdkWindow *window = GTK_WIDGET(win)->window; - XWMHints *wm_hints; - - wm_hints = XGetWMHints(GDK_WINDOW_XDISPLAY(window), GDK_WINDOW_XWINDOW(window)); - - if (!wm_hints) - wm_hints = XAllocWMHints(); - - if (setting) - wm_hints->flags |= XUrgencyHint; - else - wm_hints->flags &= ~XUrgencyHint; - - XSetWMHints(GDK_WINDOW_XDISPLAY(window), GDK_WINDOW_XWINDOW(window), wm_hints); - XFree(wm_hints); -} - -static gboolean gtk_frame_urgency_timer_callback( wxTopLevelWindowGTK *win ) { #if GTK_CHECK_VERSION(2,7,0) - if(!gtk_check_version(2,7,0)) - gtk_window_set_urgency_hint(GTK_WINDOW( win->m_widget ), FALSE); + if (gtk_check_version(2,7,0) == NULL) + gtk_window_set_urgency_hint(win, setting); else #endif - wxgtk_window_set_urgency_hint(GTK_WINDOW( win->m_widget ), FALSE); + { +#ifdef GDK_WINDOWING_X11 + GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(win)); + wxCHECK_RET(window, "wxgtk_window_set_urgency_hint: GdkWindow not realized"); + + Display* dpy = GDK_WINDOW_XDISPLAY(window); + Window xid = GDK_WINDOW_XID(window); + XWMHints* wm_hints = XGetWMHints(dpy, xid); + + if (!wm_hints) + wm_hints = XAllocWMHints(); + + if (setting) + wm_hints->flags |= XUrgencyHint; + else + wm_hints->flags &= ~XUrgencyHint; + + XSetWMHints(dpy, xid, wm_hints); + XFree(wm_hints); +#endif // GDK_WINDOWING_X11 + } +} +#define gtk_window_set_urgency_hint wxgtk_window_set_urgency_hint +#endif + +extern "C" { +static gboolean gtk_frame_urgency_timer_callback( wxTopLevelWindowGTK *win ) +{ + gtk_window_set_urgency_hint(GTK_WINDOW(win->m_widget), false); win->m_urgency_hint = -2; return FALSE; @@ -147,15 +165,7 @@ static gboolean gtk_frame_focus_in_callback( GtkWidget *widget, g_source_remove( win->m_urgency_hint ); // no break, fallthrough to remove hint too case -1: -#if GTK_CHECK_VERSION(2,7,0) - if(!gtk_check_version(2,7,0)) - gtk_window_set_urgency_hint(GTK_WINDOW( widget ), FALSE); - else -#endif - { - wxgtk_window_set_urgency_hint(GTK_WINDOW( widget ), FALSE); - } - + gtk_window_set_urgency_hint(GTK_WINDOW(widget), false); win->m_urgency_hint = -2; break; @@ -218,8 +228,9 @@ size_allocate(GtkWidget*, GtkAllocation* alloc, wxTopLevelWindowGTK* win) win->m_oldClientWidth = alloc->width; win->m_oldClientHeight = alloc->height; - wxSize size(win->m_widget->allocation.width, - win->m_widget->allocation.height); + GtkAllocation a; + gtk_widget_get_allocation(win->m_widget, &a); + wxSize size(a.width, a.height); size += win->m_decorSize; win->m_width = size.x; win->m_height = size.y; @@ -303,29 +314,26 @@ gtk_frame_configure_callback( GtkWidget* widget, // we cannot the WM hints and icons before the widget has been realized, // so we do this directly after realization -extern "C" { -static void -gtk_frame_realized_callback( GtkWidget * WXUNUSED(widget), - wxTopLevelWindowGTK *win ) +void wxTopLevelWindowGTK::GTKHandleRealized() { - gdk_window_set_decorations(win->m_widget->window, - (GdkWMDecoration)win->m_gdkDecor); - gdk_window_set_functions(win->m_widget->window, - (GdkWMFunction)win->m_gdkFunc); + wxNonOwnedWindow::GTKHandleRealized(); + + gdk_window_set_decorations(gtk_widget_get_window(m_widget), + (GdkWMDecoration)m_gdkDecor); + gdk_window_set_functions(gtk_widget_get_window(m_widget), + (GdkWMFunction)m_gdkFunc); // GTK's shrinking/growing policy - if ( !(win->m_gdkFunc & GDK_FUNC_RESIZE) ) - gtk_window_set_resizable(GTK_WINDOW(win->m_widget), FALSE); + if ( !(m_gdkFunc & GDK_FUNC_RESIZE) ) + gtk_window_set_resizable(GTK_WINDOW(m_widget), FALSE); +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) else - gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1); + gtk_window_set_policy(GTK_WINDOW(m_widget), 1, 1, 1); +#endif - const wxIconBundle& icons = win->GetIcons(); + const wxIconBundle& icons = GetIcons(); if (icons.GetIconCount()) - win->SetIcons(icons); - - if (win->HasFlag(wxFRAME_SHAPED)) - win->SetShape(win->m_shape); // it will really set the window shape now -} + SetIcons(icons); } //----------------------------------------------------------------------------- @@ -399,6 +407,7 @@ gtk_frame_window_state_callback( GtkWidget* WXUNUSED(widget), bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* bottom) { +#ifdef GDK_WINDOWING_X11 static GdkAtom property = gdk_atom_intern("_NET_FRAME_EXTENTS", false); Atom xproperty = gdk_x11_atom_to_xatom_for_display( gdk_drawable_get_display(window), property); @@ -424,6 +433,9 @@ bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* if (data) XFree(data); return success; +#else + return false; +#endif } //----------------------------------------------------------------------------- @@ -438,6 +450,14 @@ static gboolean property_notify_event( static GdkAtom property = gdk_atom_intern("_NET_FRAME_EXTENTS", false); if (event->state == GDK_PROPERTY_NEW_VALUE && event->atom == property) { + if (win->m_netFrameExtentsTimerId) + { + // WM support for _NET_REQUEST_FRAME_EXTENTS is working + gs_requestFrameExtentsStatus = 1; + g_source_remove(win->m_netFrameExtentsTimerId); + win->m_netFrameExtentsTimerId = 0; + } + wxSize decorSize = win->m_decorSize; int left, right, top, bottom; if (wxGetFrameExtents(event->window, &left, &right, &top, &bottom)) @@ -449,6 +469,24 @@ static gboolean property_notify_event( } } +extern "C" { +static gboolean request_frame_extents_timeout(void* data) +{ + // WM support for _NET_REQUEST_FRAME_EXTENTS is broken + gs_requestFrameExtentsStatus = 2; + gdk_threads_enter(); + wxTopLevelWindowGTK* win = static_cast(data); + win->m_netFrameExtentsTimerId = 0; + wxSize decorSize = win->m_decorSize; + int left, right, top, bottom; + if (wxGetFrameExtents(gtk_widget_get_window(win->m_widget), &left, &right, &top, &bottom)) + decorSize.Set(left + right, top + bottom); + win->GTKUpdateDecorSize(decorSize); + gdk_threads_leave(); + return false; +} +} + // ---------------------------------------------------------------------------- // wxTopLevelWindowGTK creation // ---------------------------------------------------------------------------- @@ -465,6 +503,7 @@ void wxTopLevelWindowGTK::Init() m_deferShow = true; m_deferShowAllowed = true; m_updateDecorSize = true; + m_netFrameExtentsTimerId = 0; m_urgency_hint = -2; } @@ -564,7 +603,7 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, #endif gtk_window_set_title( GTK_WINDOW(m_widget), wxGTK_CONV( title ) ); - GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS ); + gtk_widget_set_can_focus(m_widget, false); g_signal_connect (m_widget, "delete_event", G_CALLBACK (gtk_frame_delete_callback), this); @@ -572,7 +611,7 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, // m_mainWidget is a GtkVBox, holding the bars and client area (m_wxwindow) m_mainWidget = gtk_vbox_new(false, 0); gtk_widget_show( m_mainWidget ); - GTK_WIDGET_UNSET_FLAGS( m_mainWidget, GTK_CAN_FOCUS ); + gtk_widget_set_can_focus(m_mainWidget, false); gtk_container_add( GTK_CONTAINER(m_widget), m_mainWidget ); // m_wxwindow is the client area @@ -582,7 +621,7 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, // we donm't allow the frame to get the focus as otherwise // the frame will grab it at arbitrary focus changes - GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); + gtk_widget_set_can_focus(m_wxwindow, false); if (m_parent) m_parent->AddChild( this ); @@ -593,13 +632,10 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, G_CALLBACK (wxgtk_tlw_size_request_callback), this); PostCreation(); +#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED) if ((m_x != -1) || (m_y != -1)) gtk_widget_set_uposition( m_widget, m_x, m_y ); - - // we cannot set MWM hints and icons before the widget has - // been realized, so we do this directly after realization - g_signal_connect (m_widget, "realize", - G_CALLBACK (gtk_frame_realized_callback), this); +#endif // for some reported size corrections g_signal_connect (m_widget, "map_event", @@ -677,6 +713,13 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, wxTopLevelWindowGTK::~wxTopLevelWindowGTK() { + if ( m_netFrameExtentsTimerId ) + { + // Don't let the timer callback fire as the window pointer passed to it + // will become invalid very soon. + g_source_remove(m_netFrameExtentsTimerId); + } + #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2 // it can also be a (standard) dialog if ( HILDON_IS_WINDOW(m_widget) ) @@ -713,8 +756,9 @@ bool wxTopLevelWindowGTK::EnableCloseButton( bool enable ) else m_gdkFunc &= ~GDK_FUNC_CLOSE; - if (GTK_WIDGET_REALIZED(m_widget) && (m_widget->window)) - gdk_window_set_functions( m_widget->window, (GdkWMFunction)m_gdkFunc ); + GdkWindow* window = gtk_widget_get_window(m_widget); + if (window) + gdk_window_set_functions(window, (GdkWMFunction)m_gdkFunc); return true; } @@ -726,6 +770,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) m_fsIsShowing = show; +#ifdef GDK_WINDOWING_X11 wxX11FullScreenMethod method = wxGetFullScreenMethodX11((WXDisplay*)GDK_DISPLAY(), (WXWindow)GDK_ROOT_WINDOW()); @@ -735,15 +780,17 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) // check if WM supports the spec and use legacy methods if it // doesn't. if ( method == wxX11_FS_WMSPEC ) +#endif // GDK_WINDOWING_X11 { if (show) gtk_window_fullscreen( GTK_WINDOW( m_widget ) ); else gtk_window_unfullscreen( GTK_WINDOW( m_widget ) ); } +#ifdef GDK_WINDOWING_X11 else { - GdkWindow *window = m_widget->window; + GdkWindow* window = gtk_widget_get_window(m_widget); if (show) { @@ -762,12 +809,11 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) gdk_window_set_decorations(window, (GdkWMDecoration)0); gdk_window_set_functions(window, (GdkWMFunction)0); - gdk_window_get_origin (m_widget->window, &root_x, &root_y); - gdk_window_get_geometry (m_widget->window, &client_x, &client_y, - &width, &height, NULL); + gdk_window_get_origin(window, &root_x, &root_y); + gdk_window_get_geometry(window, &client_x, &client_y, &width, &height, NULL); - gdk_window_move_resize (m_widget->window, -client_x, -client_y, - screen_width + 1, screen_height + 1); + gdk_window_move_resize( + window, -client_x, -client_y, screen_width + 1, screen_height + 1); wxSetFullScreenStateX11((WXDisplay*)GDK_DISPLAY(), (WXWindow)GDK_ROOT_WINDOW(), @@ -790,6 +836,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) m_fsSaveFrame.width, m_fsSaveFrame.height); } } +#endif // GDK_WINDOWING_X11 // documented behaviour is to show the window if it's still hidden when // showing it full screen @@ -809,8 +856,11 @@ void wxTopLevelWindowGTK::Refresh( bool WXUNUSED(eraseBackground), const wxRect gtk_widget_queue_draw( m_widget ); - if (m_wxwindow && m_wxwindow->window) - gdk_window_invalidate_rect( m_wxwindow->window, NULL, TRUE ); + GdkWindow* window = NULL; + if (m_wxwindow) + window = gtk_widget_get_window(m_wxwindow); + if (window) + gdk_window_invalidate_rect(window, NULL, true); } bool wxTopLevelWindowGTK::Show( bool show ) @@ -820,7 +870,8 @@ bool wxTopLevelWindowGTK::Show( bool show ) bool deferShow = show && !m_isShown && m_deferShow; if (deferShow) { - deferShow = m_deferShowAllowed && !GTK_WIDGET_REALIZED(m_widget); + deferShow = gs_requestFrameExtentsStatus != 2 && + m_deferShowAllowed && !gtk_widget_get_realized(m_widget); if (deferShow) { deferShow = g_signal_handler_find(m_widget, @@ -831,22 +882,19 @@ bool wxTopLevelWindowGTK::Show( bool show ) GdkScreen* screen = NULL; if (deferShow) { +#ifdef GDK_WINDOWING_X11 screen = gtk_widget_get_screen(m_widget); GdkAtom atom = gdk_atom_intern("_NET_REQUEST_FRAME_EXTENTS", false); deferShow = gdk_x11_screen_supports_net_wm_hint(screen, atom) != 0; +#else + deferShow = false; +#endif // If _NET_REQUEST_FRAME_EXTENTS not supported, don't allow changes // to m_decorSize, it breaks saving/restoring window size with // GetSize()/SetSize() because it makes window bigger between each // restore and save. m_updateDecorSize = deferShow; } - if (deferShow) - { - // Fluxbox support for _NET_REQUEST_FRAME_EXTENTS is broken - const char* name = gdk_x11_screen_get_window_manager_name(screen); - deferShow = strcmp(name, "Fluxbox") != 0; - m_updateDecorSize = deferShow; - } m_deferShow = deferShow; } @@ -863,33 +911,52 @@ bool wxTopLevelWindowGTK::Show( bool show ) // causes the widget tree to be size_allocated, which generates size // events in the wrong order. However, the size_allocates will not be // done if the allocation is not the default (1,1). - const int alloc_width = m_widget->allocation.width; + GtkAllocation alloc; + gtk_widget_get_allocation(m_widget, &alloc); + const int alloc_width = alloc.width; if (alloc_width == 1) - m_widget->allocation.width = 2; + { + alloc.width = 2; + gtk_widget_set_allocation(m_widget, &alloc); + } gtk_widget_realize(m_widget); if (alloc_width == 1) - m_widget->allocation.width = 1; + { + alloc.width = 1; + gtk_widget_set_allocation(m_widget, &alloc); + } +#ifdef GDK_WINDOWING_X11 // send _NET_REQUEST_FRAME_EXTENTS XClientMessageEvent xevent; memset(&xevent, 0, sizeof(xevent)); xevent.type = ClientMessage; - xevent.window = gdk_x11_drawable_get_xid(m_widget->window); + GdkWindow* window = gtk_widget_get_window(m_widget); + xevent.window = gdk_x11_drawable_get_xid(window); xevent.message_type = gdk_x11_atom_to_xatom_for_display( - gdk_drawable_get_display(m_widget->window), + gdk_drawable_get_display(window), gdk_atom_intern("_NET_REQUEST_FRAME_EXTENTS", false)); xevent.format = 32; - Display* display = gdk_x11_drawable_get_xdisplay(m_widget->window); + Display* display = gdk_x11_drawable_get_xdisplay(window); XSendEvent(display, DefaultRootWindow(display), false, SubstructureNotifyMask | SubstructureRedirectMask, (XEvent*)&xevent); +#endif // GDK_WINDOWING_X11 + + if (gs_requestFrameExtentsStatus == 0) + { + // if WM does not respond to request within 1 second, + // we assume support for _NET_REQUEST_FRAME_EXTENTS is not working + m_netFrameExtentsTimerId = + g_timeout_add(1000, request_frame_extents_timeout, this); + } // defer calling gtk_widget_show() m_isShown = true; return true; } - if (show && !GTK_WIDGET_REALIZED(m_widget)) + if (show && !gtk_widget_get_realized(m_widget)) { // size_allocate signals occur in reverse order (bottom to top). // Things work better if the initial wxSizeEvents are sent (from the @@ -1194,7 +1261,7 @@ void wxTopLevelWindowGTK::SetIcons( const wxIconBundle &icons ) // Setting icons before window is realized can cause a GTK assertion if // another TLW is realized before this one, and it has this one as it's // transient parent. The life demo exibits this problem. - if (GTK_WIDGET_REALIZED(m_widget)) + if (gtk_widget_get_realized(m_widget)) { GList* list = NULL; for (size_t i = icons.GetIconCount(); i--;) @@ -1218,8 +1285,10 @@ void wxTopLevelWindowGTK::Maximize(bool maximize) bool wxTopLevelWindowGTK::IsMaximized() const { - return m_widget->window && - (gdk_window_get_state(m_widget->window) & GDK_WINDOW_STATE_MAXIMIZED); + GdkWindow* window = NULL; + if (m_widget) + window = gtk_widget_get_window(m_widget); + return window && (gdk_window_get_state(window) & GDK_WINDOW_STATE_MAXIMIZED); } void wxTopLevelWindowGTK::Restore() @@ -1270,49 +1339,6 @@ void wxTopLevelWindowGTK::RemoveGrab() } } - -// helper -static bool do_shape_combine_region(GdkWindow* window, const wxRegion& region) -{ - if (window) - { - if (region.IsEmpty()) - { - gdk_window_shape_combine_mask(window, NULL, 0, 0); - } - else - { - gdk_window_shape_combine_region(window, region.GetRegion(), 0, 0); - return true; - } - } - return false; -} - - -bool wxTopLevelWindowGTK::SetShape(const wxRegion& region) -{ - wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), false, - wxT("Shaped windows must be created with the wxFRAME_SHAPED style.")); - - if ( GTK_WIDGET_REALIZED(m_widget) ) - { - if ( m_wxwindow ) - do_shape_combine_region(m_wxwindow->window, region); - - return do_shape_combine_region(m_widget->window, region); - } - else // not realized yet - { - // store the shape to set, it will be really set once we're realized - m_shape = region; - - // we don't know if we're going to succeed or fail, be optimistic by - // default - return true; - } -} - bool wxTopLevelWindowGTK::IsActive() { return (this == (wxTopLevelWindowGTK*)g_activeFrame); @@ -1334,7 +1360,7 @@ void wxTopLevelWindowGTK::RequestUserAttention(int flags) m_urgency_hint = -2; - if( GTK_WIDGET_REALIZED(m_widget) && !IsActive() ) + if( gtk_widget_get_realized(m_widget) && !IsActive() ) { new_hint_value = true; @@ -1346,12 +1372,7 @@ void wxTopLevelWindowGTK::RequestUserAttention(int flags) } } -#if GTK_CHECK_VERSION(2,7,0) - if(!gtk_check_version(2,7,0)) - gtk_window_set_urgency_hint(GTK_WINDOW( m_widget ), new_hint_value); - else -#endif - wxgtk_window_set_urgency_hint(GTK_WINDOW( m_widget ), new_hint_value); + gtk_window_set_urgency_hint(GTK_WINDOW(m_widget), new_hint_value); } void wxTopLevelWindowGTK::SetWindowStyleFlag( long style ) @@ -1380,6 +1401,7 @@ void wxTopLevelWindowGTK::SetWindowStyleFlag( long style ) } } +#ifdef GDK_WINDOWING_X11 /* Get the X Window between child and the root window. This should usually be the WM managed XID */ static Window wxGetTopmostWindowX11(Display *dpy, Window child) @@ -1399,17 +1421,22 @@ static Window wxGetTopmostWindowX11(Display *dpy, Window child) return child; } +#endif // GDK_WINDOWING_X11 bool wxTopLevelWindowGTK::SetTransparent(wxByte alpha) { - if (!m_widget || !m_widget->window) + GdkWindow* window = NULL; + if (m_widget) + window = gtk_widget_get_window(m_widget); + if (window == NULL) return false; - Display* dpy = GDK_WINDOW_XDISPLAY (m_widget->window); +#ifdef GDK_WINDOWING_X11 + Display* dpy = GDK_WINDOW_XDISPLAY(window); // We need to get the X Window that has the root window as the immediate parent // and m_widget->window as a child. This should be the X Window that the WM manages and // from which the opacity property is checked from. - Window win = wxGetTopmostWindowX11(dpy, GDK_WINDOW_XID (m_widget->window)); + Window win = wxGetTopmostWindowX11(dpy, GDK_WINDOW_XID(window)); // Using pure Xlib to not have a GTK version check mess due to gtk2.0 not having GdkDisplay @@ -1424,6 +1451,9 @@ bool wxTopLevelWindowGTK::SetTransparent(wxByte alpha) } XSync(dpy, False); return true; +#else // !GDK_WINDOWING_X11 + return false; +#endif // GDK_WINDOWING_X11 / !GDK_WINDOWING_X11 } bool wxTopLevelWindowGTK::CanSetTransparent() diff --git a/Externals/wxWidgets3/src/gtk/treeentry_gtk.c b/Externals/wxWidgets3/src/gtk/treeentry_gtk.c index 7a87b39b2f..63d8c234ac 100644 --- a/Externals/wxWidgets3/src/gtk/treeentry_gtk.c +++ b/Externals/wxWidgets3/src/gtk/treeentry_gtk.c @@ -2,7 +2,7 @@ // Name: src/gtk/treeentry_gtk.c // Purpose: GtkTreeEntry implementation // Author: Ryan Norton -// Id: $Id: treeentry_gtk.c 65341 2010-08-18 21:28:11Z RR $ +// Id: $Id: treeentry_gtk.c 67433 2011-04-11 09:36:56Z JJ $ // Copyright: (c) 2006 Ryan Norton // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////// */ @@ -46,10 +46,10 @@ gtk_tree_entry_new() return GTK_TREE_ENTRY(g_object_new(GTK_TYPE_TREE_ENTRY, NULL)); } -GtkType +GType gtk_tree_entry_get_type () { - static GtkType tree_entry_type = 0; + static GType tree_entry_type = 0; if (!tree_entry_type) { diff --git a/Externals/wxWidgets3/src/gtk/utilsgtk.cpp b/Externals/wxWidgets3/src/gtk/utilsgtk.cpp index 70a7c04f9f..bf5e770bb6 100644 --- a/Externals/wxWidgets3/src/gtk/utilsgtk.cpp +++ b/Externals/wxWidgets3/src/gtk/utilsgtk.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/utilsgtk.cpp // Purpose: // Author: Robert Roebling -// Id: $Id: utilsgtk.cpp 66657 2011-01-08 18:05:33Z PC $ +// Id: $Id: utilsgtk.cpp 70704 2012-02-27 00:40:16Z VZ $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -26,6 +26,14 @@ #include "wx/gtk/private/timer.h" #include "wx/evtloop.h" +#include +#ifdef GDK_WINDOWING_WIN32 +#include +#endif +#ifdef GDK_WINDOWING_X11 +#include +#endif + #if wxDEBUG_LEVEL #include "wx/gtk/assertdlg_gtk.h" #if wxUSE_STACKWALKER @@ -37,11 +45,9 @@ #include #include #include -#include // for WNOHANG +#ifdef __UNIX__ #include - -#include -#include +#endif #if wxUSE_DETECT_SM #include @@ -90,7 +96,7 @@ void wxDisplaySizeMM( int *width, int *height ) void wxGetMousePosition( int* x, int* y ) { - gdk_window_get_pointer( NULL, x, y, NULL ); + gdk_window_get_pointer(gtk_widget_get_root_window(wxGetRootWindow()), x, y, NULL); } bool wxColourDisplay() @@ -100,7 +106,7 @@ bool wxColourDisplay() int wxDisplayDepth() { - return gdk_drawable_get_visual( wxGetRootWindow()->window )->depth; + return gtk_widget_get_visual(wxGetRootWindow())->depth; } wxWindow* wxFindWindowAtPoint(const wxPoint& pt) @@ -186,31 +192,28 @@ const gchar *wx_pango_version_check (int major, int minor, int micro) // ---------------------------------------------------------------------------- extern "C" { -static -void GTK_EndProcessDetector(gpointer data, gint source, - GdkInputCondition WXUNUSED(condition)) +static gboolean EndProcessDetector(GIOChannel* source, GIOCondition, void* data) { wxEndProcessData * const proc_data = static_cast(data); // child exited, end waiting - close(source); - - // don't call us again! - gdk_input_remove(proc_data->tag); + close(g_io_channel_unix_get_fd(source)); wxHandleProcessTermination(proc_data); + + // don't call us again! + return false; } } int wxGUIAppTraits::AddProcessCallback(wxEndProcessData *proc_data, int fd) { - int tag = gdk_input_add(fd, - GDK_INPUT_READ, - GTK_EndProcessDetector, - (gpointer)proc_data); - - return tag; + GIOChannel* channel = g_io_channel_unix_new(fd); + GIOCondition cond = GIOCondition(G_IO_IN | G_IO_HUP | G_IO_ERR); + unsigned id = g_io_add_watch(channel, cond, EndProcessDetector, proc_data); + g_io_channel_unref(channel); + return int(id); } @@ -328,14 +331,11 @@ private: GtkAssertDialog *m_dlg; }; -// the callback functions must be extern "C" to comply with GTK+ declarations -extern "C" +static void get_stackframe_callback(void* p) { - void get_stackframe_callback(StackDump *dump) - { - // skip over frames up to including wxOnAssert() - dump->ProcessFrames(3); - } + StackDump* dump = static_cast(p); + // skip over frames up to including wxOnAssert() + dump->ProcessFrames(3); } #endif // wxDEBUG_LEVEL && wxUSE_STACKWALKER @@ -362,7 +362,7 @@ bool wxGUIAppTraits::ShowAssertDialog(const wxString& msg) gtk_assert_dialog_set_backtrace_callback ( GTK_ASSERT_DIALOG(dialog), - (GtkAssertDialogStackFrameCallback)get_stackframe_callback, + get_stackframe_callback, &dump ); #endif // wxUSE_STACKWALKER @@ -472,11 +472,11 @@ wxGUIAppTraits::GetStandardCmdLineOptions(wxArrayString& names, { // since GTK>=2.6, we can use the glib_check_version() symbol... - // check whether GLib version is greater than 2.6 but also lower than 2.19 + // check whether GLib version is greater than 2.6 but also lower than 2.31 // because, as we use the undocumented _GOptionGroup struct, we don't want - // to run this code with future versions which might change it (2.19 is the + // to run this code with future versions which might change it (2.30 is the // latest one at the time of this writing) - if (!glib_check_version(2,6,0) && glib_check_version(2,20,0)) + if (glib_check_version(2,6,0) == NULL && glib_check_version(2,31,0)) { usage << _("The following standard GTK+ options are also supported:\n"); diff --git a/Externals/wxWidgets3/src/gtk/webview_webkit.cpp b/Externals/wxWidgets3/src/gtk/webview_webkit.cpp new file mode 100644 index 0000000000..d4b9528193 --- /dev/null +++ b/Externals/wxWidgets3/src/gtk/webview_webkit.cpp @@ -0,0 +1,924 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/gtk/webview_webkit.cpp +// Purpose: GTK WebKit backend for web view component +// Author: Marianne Gagnon, Robert Roebling +// Id: $Id: webview_webkit.cpp 70768 2012-03-01 16:44:31Z PC $ +// Copyright: (c) 2010 Marianne Gagnon, 1998 Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT + +#include "wx/stockitem.h" +#include "wx/gtk/webview_webkit.h" +#include "wx/gtk/control.h" +#include "wx/gtk/private.h" +#include "wx/filesys.h" +#include "wx/base64.h" +#include + +// ---------------------------------------------------------------------------- +// GTK callbacks +// ---------------------------------------------------------------------------- + +extern "C" +{ + +static void +wxgtk_webview_webkit_load_status(GtkWidget* widget, + GParamSpec*, + wxWebViewWebKit *webKitCtrl) +{ + wxString url = webKitCtrl->GetCurrentURL(); + + WebKitLoadStatus status; + g_object_get(G_OBJECT(widget), "load-status", &status, NULL); + + wxString target; // TODO: get target (if possible) + + if (status == WEBKIT_LOAD_FINISHED) + { + WebKitWebBackForwardList* hist = webkit_web_view_get_back_forward_list(WEBKIT_WEB_VIEW(widget)); + WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_current_item(hist); + //We have to check if we are actually storing history + //If the item isn't added we add it ourselves, it isn't added otherwise + //with a custom scheme. + if(WEBKIT_IS_WEB_HISTORY_ITEM(item) && webkit_web_history_item_get_uri(item) != url) + { + WebKitWebHistoryItem* + newitem = webkit_web_history_item_new_with_data + ( + url.utf8_str(), + webKitCtrl->GetCurrentTitle().utf8_str() + ); + webkit_web_back_forward_list_add_item(hist, newitem); + } + + webKitCtrl->m_busy = false; + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED, + webKitCtrl->GetId(), + url, target); + + if (webKitCtrl && webKitCtrl->GetEventHandler()) + webKitCtrl->GetEventHandler()->ProcessEvent(event); + } + else if (status == WEBKIT_LOAD_COMMITTED) + { + webKitCtrl->m_busy = true; + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, + webKitCtrl->GetId(), + url, target); + + if (webKitCtrl && webKitCtrl->GetEventHandler()) + webKitCtrl->GetEventHandler()->ProcessEvent(event); + } +} + +static gboolean +wxgtk_webview_webkit_navigation(WebKitWebView *, + WebKitWebFrame *frame, + WebKitNetworkRequest *request, + WebKitWebNavigationAction *, + WebKitWebPolicyDecision *policy_decision, + wxWebViewWebKit *webKitCtrl) +{ + if(webKitCtrl->m_guard) + { + webKitCtrl->m_guard = false; + //We set this to make sure that we don't try to load the page again from + //the resource request callback + webKitCtrl->m_vfsurl = webkit_network_request_get_uri(request); + webkit_web_policy_decision_use(policy_decision); + return FALSE; + } + + webKitCtrl->m_busy = true; + + const gchar* uri = webkit_network_request_get_uri(request); + + wxString target = webkit_web_frame_get_name (frame); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, + webKitCtrl->GetId(), + wxString( uri, wxConvUTF8 ), + target); + + if (webKitCtrl && webKitCtrl->GetEventHandler()) + webKitCtrl->GetEventHandler()->ProcessEvent(event); + + if (!event.IsAllowed()) + { + webKitCtrl->m_busy = false; + webkit_web_policy_decision_ignore(policy_decision); + return TRUE; + } + else + { + wxString wxuri = uri; + wxSharedPtr handler; + wxVector > hanlders = webKitCtrl->GetHandlers(); + //We are not vetoed so see if we match one of the additional handlers + for(wxVector >::iterator it = hanlders.begin(); + it != hanlders.end(); ++it) + { + if(wxuri.substr(0, (*it)->GetName().length()) == (*it)->GetName()) + { + handler = (*it); + } + } + //If we found a handler we can then use it to load the file directly + //ourselves + if(handler) + { + webKitCtrl->m_guard = true; + wxFSFile* file = handler->GetFile(wxuri); + if(file) + { + webKitCtrl->SetPage(*file->GetStream(), wxuri); + } + //We need to throw some sort of error here if file is NULL + webkit_web_policy_decision_ignore(policy_decision); + return TRUE; + } + return FALSE; + } +} + +static gboolean +wxgtk_webview_webkit_error(WebKitWebView*, + WebKitWebFrame*, + gchar *uri, + gpointer web_error, + wxWebViewWebKit* webKitWindow) +{ + webKitWindow->m_busy = false; + wxWebViewNavigationError type = wxWEB_NAV_ERR_OTHER; + + GError* error = (GError*)web_error; + wxString description(error->message, wxConvUTF8); + + if (strcmp(g_quark_to_string(error->domain), "soup_http_error_quark") == 0) + { + switch (error->code) + { + case SOUP_STATUS_CANCELLED: + type = wxWEB_NAV_ERR_USER_CANCELLED; + break; + + case SOUP_STATUS_CANT_RESOLVE: + case SOUP_STATUS_NOT_FOUND: + type = wxWEB_NAV_ERR_NOT_FOUND; + break; + + case SOUP_STATUS_CANT_RESOLVE_PROXY: + case SOUP_STATUS_CANT_CONNECT: + case SOUP_STATUS_CANT_CONNECT_PROXY: + case SOUP_STATUS_SSL_FAILED: + case SOUP_STATUS_IO_ERROR: + type = wxWEB_NAV_ERR_CONNECTION; + break; + + case SOUP_STATUS_MALFORMED: + //case SOUP_STATUS_TOO_MANY_REDIRECTS: + type = wxWEB_NAV_ERR_REQUEST; + break; + + //case SOUP_STATUS_NO_CONTENT: + //case SOUP_STATUS_RESET_CONTENT: + + case SOUP_STATUS_BAD_REQUEST: + type = wxWEB_NAV_ERR_REQUEST; + break; + + case SOUP_STATUS_UNAUTHORIZED: + case SOUP_STATUS_FORBIDDEN: + type = wxWEB_NAV_ERR_AUTH; + break; + + case SOUP_STATUS_METHOD_NOT_ALLOWED: + case SOUP_STATUS_NOT_ACCEPTABLE: + type = wxWEB_NAV_ERR_SECURITY; + break; + + case SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED: + type = wxWEB_NAV_ERR_AUTH; + break; + + case SOUP_STATUS_REQUEST_TIMEOUT: + type = wxWEB_NAV_ERR_CONNECTION; + break; + + //case SOUP_STATUS_PAYMENT_REQUIRED: + case SOUP_STATUS_REQUEST_ENTITY_TOO_LARGE: + case SOUP_STATUS_REQUEST_URI_TOO_LONG: + case SOUP_STATUS_UNSUPPORTED_MEDIA_TYPE: + type = wxWEB_NAV_ERR_REQUEST; + break; + + case SOUP_STATUS_BAD_GATEWAY: + case SOUP_STATUS_SERVICE_UNAVAILABLE: + case SOUP_STATUS_GATEWAY_TIMEOUT: + type = wxWEB_NAV_ERR_CONNECTION; + break; + + case SOUP_STATUS_HTTP_VERSION_NOT_SUPPORTED: + type = wxWEB_NAV_ERR_REQUEST; + break; + //case SOUP_STATUS_INSUFFICIENT_STORAGE: + //case SOUP_STATUS_NOT_EXTENDED: + } + } + else if (strcmp(g_quark_to_string(error->domain), + "webkit-network-error-quark") == 0) + { + switch (error->code) + { + //WEBKIT_NETWORK_ERROR_FAILED: + //WEBKIT_NETWORK_ERROR_TRANSPORT: + + case WEBKIT_NETWORK_ERROR_UNKNOWN_PROTOCOL: + type = wxWEB_NAV_ERR_REQUEST; + break; + + case WEBKIT_NETWORK_ERROR_CANCELLED: + type = wxWEB_NAV_ERR_USER_CANCELLED; + break; + + case WEBKIT_NETWORK_ERROR_FILE_DOES_NOT_EXIST: + type = wxWEB_NAV_ERR_NOT_FOUND; + break; + } + } + else if (strcmp(g_quark_to_string(error->domain), + "webkit-policy-error-quark") == 0) + { + switch (error->code) + { + //case WEBKIT_POLICY_ERROR_FAILED: + //case WEBKIT_POLICY_ERROR_CANNOT_SHOW_MIME_TYPE: + //case WEBKIT_POLICY_ERROR_CANNOT_SHOW_URL: + //case WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE: + case WEBKIT_POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT: + type = wxWEB_NAV_ERR_SECURITY; + break; + } + } + /* + webkit_plugin_error_quark + else + { + printf("Error domain %s\n", g_quark_to_string(error->domain)); + } + */ + + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR, + webKitWindow->GetId(), + uri, ""); + event.SetString(description); + event.SetInt(type); + + if (webKitWindow && webKitWindow->GetEventHandler()) + { + webKitWindow->GetEventHandler()->ProcessEvent(event); + } + + return FALSE; +} + +static gboolean +wxgtk_webview_webkit_new_window(WebKitWebView*, + WebKitWebFrame *frame, + WebKitNetworkRequest *request, + WebKitWebNavigationAction*, + WebKitWebPolicyDecision *policy_decision, + wxWebViewWebKit *webKitCtrl) +{ + const gchar* uri = webkit_network_request_get_uri(request); + + wxString target = webkit_web_frame_get_name (frame); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, + webKitCtrl->GetId(), + wxString( uri, wxConvUTF8 ), + target); + + if (webKitCtrl && webKitCtrl->GetEventHandler()) + webKitCtrl->GetEventHandler()->ProcessEvent(event); + + //We always want the user to handle this themselves + webkit_web_policy_decision_ignore(policy_decision); + return TRUE; +} + +static void +wxgtk_webview_webkit_title_changed(WebKitWebView*, + WebKitWebFrame*, + gchar *title, + wxWebViewWebKit *webKitCtrl) +{ + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, + webKitCtrl->GetId(), + webKitCtrl->GetCurrentURL(), + ""); + event.SetString(wxString(title, wxConvUTF8)); + + if (webKitCtrl && webKitCtrl->GetEventHandler()) + webKitCtrl->GetEventHandler()->ProcessEvent(event); + +} + +static void +wxgtk_webview_webkit_resource_req(WebKitWebView *, + WebKitWebFrame *, + WebKitWebResource *, + WebKitNetworkRequest *request, + WebKitNetworkResponse *, + wxWebViewWebKit *webKitCtrl) +{ + wxString uri = webkit_network_request_get_uri(request); + + wxSharedPtr handler; + wxVector > hanlders = webKitCtrl->GetHandlers(); + + //We are not vetoed so see if we match one of the additional handlers + for(wxVector >::iterator it = hanlders.begin(); + it != hanlders.end(); ++it) + { + if(uri.substr(0, (*it)->GetName().length()) == (*it)->GetName()) + { + handler = (*it); + } + } + //If we found a handler we can then use it to load the file directly + //ourselves + if(handler) + { + //If it is requsting the page itself then return as we have already + //loaded it from the archive + if(webKitCtrl->m_vfsurl == uri) + return; + + wxFSFile* file = handler->GetFile(uri); + if(file) + { + //We load the data into a data url to save it being written out again + size_t size = file->GetStream()->GetLength(); + char *buffer = new char[size]; + file->GetStream()->Read(buffer, size); + wxString data = wxBase64Encode(buffer, size); + delete[] buffer; + wxString mime = file->GetMimeType(); + wxString path = "data:" + mime + ";base64," + data; + //Then we can redirect the call + webkit_network_request_set_uri(request, path.utf8_str()); + } + + } +} + +} // extern "C" + +//----------------------------------------------------------------------------- +// wxWebViewWebKit +//----------------------------------------------------------------------------- + +wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewWebKit, wxWebView); + +bool wxWebViewWebKit::Create(wxWindow *parent, + wxWindowID id, + const wxString &url, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) +{ + m_busy = false; + m_guard = false; + + if (!PreCreation( parent, pos, size ) || + !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) + { + wxFAIL_MSG( wxT("wxWebViewWebKit creation failed") ); + return false; + } + + m_widget = gtk_scrolled_window_new(NULL, NULL); + g_object_ref(m_widget); + m_web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + + /* Place the WebKitWebView in the GtkScrolledWindow */ + gtk_container_add(GTK_CONTAINER(m_widget), GTK_WIDGET(m_web_view)); + gtk_widget_show(GTK_WIDGET(m_web_view)); + + g_signal_connect_after(m_web_view, "navigation-policy-decision-requested", + G_CALLBACK(wxgtk_webview_webkit_navigation), + this); + g_signal_connect_after(m_web_view, "load-error", + G_CALLBACK(wxgtk_webview_webkit_error), + this); + + g_signal_connect_after(m_web_view, "new-window-policy-decision-requested", + G_CALLBACK(wxgtk_webview_webkit_new_window), this); + + g_signal_connect_after(m_web_view, "title-changed", + G_CALLBACK(wxgtk_webview_webkit_title_changed), this); + + g_signal_connect_after(m_web_view, "resource-request-starting", + G_CALLBACK(wxgtk_webview_webkit_resource_req), this); + + m_parent->DoAddChild( this ); + + PostCreation(size); + + /* Open a webpage */ + webkit_web_view_load_uri(m_web_view, url.utf8_str()); + + //Get the initial history limit so we can enable and disable it later + WebKitWebBackForwardList* history; + history = webkit_web_view_get_back_forward_list(m_web_view); + m_historyLimit = webkit_web_back_forward_list_get_limit(history); + + // last to avoid getting signal too early + g_signal_connect_after(m_web_view, "notify::load-status", + G_CALLBACK(wxgtk_webview_webkit_load_status), + this); + + return true; +} + +bool wxWebViewWebKit::Enable( bool enable ) +{ + if (!wxControl::Enable(enable)) + return false; + + gtk_widget_set_sensitive(GTK_BIN(m_widget)->child, enable); + + //if (enable) + // GTKFixSensitivity(); + + return true; +} + +GdkWindow* +wxWebViewWebKit::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const +{ + GdkWindow* window = gtk_widget_get_parent_window(m_widget); + return window; +} + +void wxWebViewWebKit::ZoomIn() +{ + webkit_web_view_zoom_in(m_web_view); +} + +void wxWebViewWebKit::ZoomOut() +{ + webkit_web_view_zoom_out(m_web_view); +} + +void wxWebViewWebKit::SetWebkitZoom(float level) +{ + webkit_web_view_set_zoom_level(m_web_view, level); +} + +float wxWebViewWebKit::GetWebkitZoom() const +{ + return webkit_web_view_get_zoom_level(m_web_view); +} + +void wxWebViewWebKit::Stop() +{ + webkit_web_view_stop_loading(m_web_view); +} + +void wxWebViewWebKit::Reload(wxWebViewReloadFlags flags) +{ + if (flags & wxWEB_VIEW_RELOAD_NO_CACHE) + { + webkit_web_view_reload_bypass_cache(m_web_view); + } + else + { + webkit_web_view_reload(m_web_view); + } +} + +void wxWebViewWebKit::LoadURL(const wxString& url) +{ + webkit_web_view_load_uri(m_web_view, wxGTK_CONV(url)); +} + + +void wxWebViewWebKit::GoBack() +{ + webkit_web_view_go_back(m_web_view); +} + +void wxWebViewWebKit::GoForward() +{ + webkit_web_view_go_forward(m_web_view); +} + + +bool wxWebViewWebKit::CanGoBack() const +{ + return webkit_web_view_can_go_back(m_web_view); +} + + +bool wxWebViewWebKit::CanGoForward() const +{ + return webkit_web_view_can_go_forward(m_web_view); +} + +void wxWebViewWebKit::ClearHistory() +{ + WebKitWebBackForwardList* history; + history = webkit_web_view_get_back_forward_list(m_web_view); + webkit_web_back_forward_list_clear(history); +} + +void wxWebViewWebKit::EnableHistory(bool enable) +{ + WebKitWebBackForwardList* history; + history = webkit_web_view_get_back_forward_list(m_web_view); + if(enable) + { + webkit_web_back_forward_list_set_limit(history, m_historyLimit); + } + else + { + webkit_web_back_forward_list_set_limit(history, 0); + } +} + +wxVector > wxWebViewWebKit::GetBackwardHistory() +{ + wxVector > backhist; + WebKitWebBackForwardList* history; + history = webkit_web_view_get_back_forward_list(m_web_view); + GList* list = webkit_web_back_forward_list_get_back_list_with_limit(history, + m_historyLimit); + //We need to iterate in reverse to get the order we desire + for(int i = g_list_length(list) - 1; i >= 0 ; i--) + { + WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)g_list_nth_data(list, i); + wxWebViewHistoryItem* wxitem = new wxWebViewHistoryItem( + webkit_web_history_item_get_uri(gtkitem), + webkit_web_history_item_get_title(gtkitem)); + wxitem->m_histItem = gtkitem; + wxSharedPtr item(wxitem); + backhist.push_back(item); + } + return backhist; +} + +wxVector > wxWebViewWebKit::GetForwardHistory() +{ + wxVector > forwardhist; + WebKitWebBackForwardList* history; + history = webkit_web_view_get_back_forward_list(m_web_view); + GList* list = webkit_web_back_forward_list_get_forward_list_with_limit(history, + m_historyLimit); + for(guint i = 0; i < g_list_length(list); i++) + { + WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)g_list_nth_data(list, i); + wxWebViewHistoryItem* wxitem = new wxWebViewHistoryItem( + webkit_web_history_item_get_uri(gtkitem), + webkit_web_history_item_get_title(gtkitem)); + wxitem->m_histItem = gtkitem; + wxSharedPtr item(wxitem); + forwardhist.push_back(item); + } + return forwardhist; +} + +void wxWebViewWebKit::LoadHistoryItem(wxSharedPtr item) +{ + WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)item->m_histItem; + if(gtkitem) + { + webkit_web_view_go_to_back_forward_item(m_web_view, + WEBKIT_WEB_HISTORY_ITEM(gtkitem)); + } +} + +bool wxWebViewWebKit::CanCut() const +{ + return webkit_web_view_can_cut_clipboard(m_web_view); +} + +bool wxWebViewWebKit::CanCopy() const +{ + return webkit_web_view_can_copy_clipboard(m_web_view); +} + +bool wxWebViewWebKit::CanPaste() const +{ + return webkit_web_view_can_paste_clipboard(m_web_view); +} + +void wxWebViewWebKit::Cut() +{ + webkit_web_view_cut_clipboard(m_web_view); +} + +void wxWebViewWebKit::Copy() +{ + webkit_web_view_copy_clipboard(m_web_view); +} + +void wxWebViewWebKit::Paste() +{ + webkit_web_view_paste_clipboard(m_web_view); +} + +bool wxWebViewWebKit::CanUndo() const +{ + return webkit_web_view_can_undo(m_web_view); +} + +bool wxWebViewWebKit::CanRedo() const +{ + return webkit_web_view_can_redo(m_web_view); +} + +void wxWebViewWebKit::Undo() +{ + webkit_web_view_undo(m_web_view); +} + +void wxWebViewWebKit::Redo() +{ + webkit_web_view_redo(m_web_view); +} + +wxString wxWebViewWebKit::GetCurrentURL() const +{ + // FIXME: check which encoding the web kit control uses instead of + // assuming UTF8 (here and elsewhere too) + return wxString::FromUTF8(webkit_web_view_get_uri(m_web_view)); +} + + +wxString wxWebViewWebKit::GetCurrentTitle() const +{ + return wxString::FromUTF8(webkit_web_view_get_title(m_web_view)); +} + + +wxString wxWebViewWebKit::GetPageSource() const +{ + WebKitWebFrame* frame = webkit_web_view_get_main_frame(m_web_view); + WebKitWebDataSource* src = webkit_web_frame_get_data_source (frame); + + // TODO: check encoding with + // const gchar* + // webkit_web_data_source_get_encoding(WebKitWebDataSource *data_source); + return wxString(webkit_web_data_source_get_data (src)->str, wxConvUTF8); +} + + +wxWebViewZoom wxWebViewWebKit::GetZoom() const +{ + float zoom = GetWebkitZoom(); + + // arbitrary way to map float zoom to our common zoom enum + if (zoom <= 0.65) + { + return wxWEB_VIEW_ZOOM_TINY; + } + else if (zoom > 0.65 && zoom <= 0.90) + { + return wxWEB_VIEW_ZOOM_SMALL; + } + else if (zoom > 0.90 && zoom <= 1.15) + { + return wxWEB_VIEW_ZOOM_MEDIUM; + } + else if (zoom > 1.15 && zoom <= 1.45) + { + return wxWEB_VIEW_ZOOM_LARGE; + } + else if (zoom > 1.45) + { + return wxWEB_VIEW_ZOOM_LARGEST; + } + + // to shut up compilers, this can never be reached logically + wxASSERT(false); + return wxWEB_VIEW_ZOOM_MEDIUM; +} + + +void wxWebViewWebKit::SetZoom(wxWebViewZoom zoom) +{ + // arbitrary way to map our common zoom enum to float zoom + switch (zoom) + { + case wxWEB_VIEW_ZOOM_TINY: + SetWebkitZoom(0.6f); + break; + + case wxWEB_VIEW_ZOOM_SMALL: + SetWebkitZoom(0.8f); + break; + + case wxWEB_VIEW_ZOOM_MEDIUM: + SetWebkitZoom(1.0f); + break; + + case wxWEB_VIEW_ZOOM_LARGE: + SetWebkitZoom(1.3); + break; + + case wxWEB_VIEW_ZOOM_LARGEST: + SetWebkitZoom(1.6); + break; + + default: + wxASSERT(false); + } +} + +void wxWebViewWebKit::SetZoomType(wxWebViewZoomType type) +{ + webkit_web_view_set_full_content_zoom(m_web_view, + (type == wxWEB_VIEW_ZOOM_TYPE_LAYOUT ? + TRUE : FALSE)); +} + +wxWebViewZoomType wxWebViewWebKit::GetZoomType() const +{ + gboolean fczoom = webkit_web_view_get_full_content_zoom(m_web_view); + + if (fczoom) return wxWEB_VIEW_ZOOM_TYPE_LAYOUT; + else return wxWEB_VIEW_ZOOM_TYPE_TEXT; +} + +bool wxWebViewWebKit::CanSetZoomType(wxWebViewZoomType) const +{ + // this port supports all zoom types + return true; +} + +void wxWebViewWebKit::SetPage(const wxString& html, const wxString& baseUri) +{ + webkit_web_view_load_string (m_web_view, + html.mb_str(wxConvUTF8), + "text/html", + "UTF-8", + baseUri.mb_str(wxConvUTF8)); +} + +void wxWebViewWebKit::Print() +{ + WebKitWebFrame* frame = webkit_web_view_get_main_frame(m_web_view); + webkit_web_frame_print (frame); + + // GtkPrintOperationResult webkit_web_frame_print_full + // (WebKitWebFrame *frame, + // GtkPrintOperation *operation, + // GtkPrintOperationAction action, + // GError **error); + +} + + +bool wxWebViewWebKit::IsBusy() const +{ + return m_busy; + + // This code looks nice but returns true after a page was cancelled + /* + WebKitLoadStatus status = webkit_web_view_get_load_status + (WEBKIT_WEB_VIEW(web_view)); + + +#if WEBKIT_CHECK_VERSION(1,1,16) + // WEBKIT_LOAD_FAILED is new in webkit 1.1.16 + if (status == WEBKIT_LOAD_FAILED) + { + return false; + } +#endif + if (status == WEBKIT_LOAD_FINISHED) + { + return false; + } + + return true; + */ +} + +void wxWebViewWebKit::SetEditable(bool enable) +{ + webkit_web_view_set_editable(m_web_view, enable); +} + +bool wxWebViewWebKit::IsEditable() const +{ + return webkit_web_view_get_editable(m_web_view); +} + +void wxWebViewWebKit::DeleteSelection() +{ + webkit_web_view_delete_selection(m_web_view); +} + +bool wxWebViewWebKit::HasSelection() const +{ + return webkit_web_view_has_selection(m_web_view); +} + +void wxWebViewWebKit::SelectAll() +{ + webkit_web_view_select_all(m_web_view); +} + +wxString wxWebViewWebKit::GetSelectedText() const +{ + WebKitDOMDocument* doc; + WebKitDOMDOMWindow* win; + WebKitDOMDOMSelection* sel; + WebKitDOMRange* range; + + doc = webkit_web_view_get_dom_document(m_web_view); + win = webkit_dom_document_get_default_view(WEBKIT_DOM_DOCUMENT(doc)); + sel = webkit_dom_dom_window_get_selection(WEBKIT_DOM_DOM_WINDOW(win)); + range = webkit_dom_dom_selection_get_range_at(WEBKIT_DOM_DOM_SELECTION(sel), + 0, NULL); + return wxString(webkit_dom_range_get_text(WEBKIT_DOM_RANGE(range)), + wxConvUTF8); +} + +wxString wxWebViewWebKit::GetSelectedSource() const +{ + WebKitDOMDocument* doc; + WebKitDOMDOMWindow* win; + WebKitDOMDOMSelection* sel; + WebKitDOMRange* range; + WebKitDOMElement* div; + WebKitDOMDocumentFragment* clone; + WebKitDOMHTMLElement* html; + + doc = webkit_web_view_get_dom_document(m_web_view); + win = webkit_dom_document_get_default_view(WEBKIT_DOM_DOCUMENT(doc)); + sel = webkit_dom_dom_window_get_selection(WEBKIT_DOM_DOM_WINDOW(win)); + range = webkit_dom_dom_selection_get_range_at(WEBKIT_DOM_DOM_SELECTION(sel), + 0, NULL); + div = webkit_dom_document_create_element(WEBKIT_DOM_DOCUMENT(doc), "div", NULL); + + clone = webkit_dom_range_clone_contents(WEBKIT_DOM_RANGE(range), NULL); + webkit_dom_node_append_child(&div->parent_instance, &clone->parent_instance, NULL); + html = (WebKitDOMHTMLElement*)div; + + return wxString(webkit_dom_html_element_get_inner_html(WEBKIT_DOM_HTML_ELEMENT(html)), + wxConvUTF8); +} + +void wxWebViewWebKit::ClearSelection() +{ + WebKitDOMDocument* doc; + WebKitDOMDOMWindow* win; + WebKitDOMDOMSelection* sel; + + doc = webkit_web_view_get_dom_document(m_web_view); + win = webkit_dom_document_get_default_view(WEBKIT_DOM_DOCUMENT(doc)); + sel = webkit_dom_dom_window_get_selection(WEBKIT_DOM_DOM_WINDOW(win)); + webkit_dom_dom_selection_remove_all_ranges(WEBKIT_DOM_DOM_SELECTION(sel)); + +} + +wxString wxWebViewWebKit::GetPageText() const +{ + WebKitDOMDocument* doc; + WebKitDOMHTMLElement* body; + + doc = webkit_web_view_get_dom_document(m_web_view); + body = webkit_dom_document_get_body(WEBKIT_DOM_DOCUMENT(doc)); + return wxString(webkit_dom_html_element_get_inner_text(WEBKIT_DOM_HTML_ELEMENT(body)), + wxConvUTF8); +} + +void wxWebViewWebKit::RunScript(const wxString& javascript) +{ + webkit_web_view_execute_script(m_web_view, + javascript.mb_str(wxConvUTF8)); +} + +void wxWebViewWebKit::RegisterHandler(wxSharedPtr handler) +{ + m_handlerList.push_back(handler); +} + +// static +wxVisualAttributes +wxWebViewWebKit::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) +{ + return GetDefaultAttributesFromGTKWidget(webkit_web_view_new); +} + + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT diff --git a/Externals/wxWidgets3/src/gtk/win_gtk.cpp b/Externals/wxWidgets3/src/gtk/win_gtk.cpp index 59d0dc8a02..84e6aaf41e 100644 --- a/Externals/wxWidgets3/src/gtk/win_gtk.cpp +++ b/Externals/wxWidgets3/src/gtk/win_gtk.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/win_gtk.cpp // Purpose: native GTK+ widget for wxWindow // Author: Paul Cornett -// Id: $Id: win_gtk.cpp 64725 2010-06-25 04:31:45Z PC $ +// Id: $Id: win_gtk.cpp 70482 2012-01-31 07:30:11Z PC $ // Copyright: (c) 2007 Paul Cornett // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -39,34 +39,36 @@ struct wxPizzaClass static void size_allocate(GtkWidget* widget, GtkAllocation* alloc) { - const bool is_resize = - widget->allocation.width != alloc->width || - widget->allocation.height != alloc->height; - const bool is_move = - widget->allocation.x != alloc->x || - widget->allocation.y != alloc->y; - wxPizza* pizza = WX_PIZZA(widget); int border_x, border_y; pizza->get_border_widths(border_x, border_y); int w = alloc->width - 2 * border_x; if (w < 0) w = 0; - if (GTK_WIDGET_REALIZED(widget) && (is_move || is_resize)) + if (gtk_widget_get_realized(widget)) { int h = alloc->height - 2 * border_y; if (h < 0) h = 0; + const int x = alloc->x + border_x; + const int y = alloc->y + border_y; - gdk_window_move_resize(widget->window, - alloc->x + border_x, alloc->y + border_y, w, h); + GdkWindow* window = gtk_widget_get_window(widget); + int old_x, old_y; + gdk_window_get_position(window, &old_x, &old_y); - if (is_resize && (border_x || border_y)) + if (x != old_x || y != old_y || + w != gdk_window_get_width(window) || h != gdk_window_get_height(window)) { - // old and new border areas need to be invalidated, - // otherwise they will not be erased/redrawn properly - GdkWindow* parent = gtk_widget_get_parent_window(widget); - gdk_window_invalidate_rect(parent, &widget->allocation, false); - gdk_window_invalidate_rect(parent, alloc, false); + gdk_window_move_resize(window, x, y, w, h); + + if (border_x + border_y) + { + // old and new border areas need to be invalidated, + // otherwise they will not be erased/redrawn properly + GdkWindow* parent = gtk_widget_get_parent_window(widget); + gdk_window_invalidate_rect(parent, &widget->allocation, false); + gdk_window_invalidate_rect(parent, alloc, false); + } } } @@ -76,7 +78,7 @@ static void size_allocate(GtkWidget* widget, GtkAllocation* alloc) for (const GList* list = pizza->m_fixed.children; list; list = list->next) { const GtkFixedChild* child = static_cast(list->data); - if (GTK_WIDGET_VISIBLE(child->widget)) + if (gtk_widget_get_visible(child->widget)) { GtkAllocation child_alloc; // note that child positions do not take border into @@ -236,7 +238,11 @@ GtkWidget* wxPizza::New(long windowStyle) pizza->m_is_scrollable = (windowStyle & (wxHSCROLL | wxVSCROLL)) != 0; // mask off border styles not useable with wxPizza pizza->m_border_style = int(windowStyle & BORDER_STYLES); +#if GTK_CHECK_VERSION(3,0,0) || defined(GTK_DISABLE_DEPRECATED) + gtk_widget_set_has_window(widget, true); +#else gtk_fixed_set_has_window(GTK_FIXED(widget), true); +#endif gtk_widget_add_events(widget, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK | diff --git a/Externals/wxWidgets3/src/gtk/window.cpp b/Externals/wxWidgets3/src/gtk/window.cpp index cc7ce677b6..3ac730cad6 100644 --- a/Externals/wxWidgets3/src/gtk/window.cpp +++ b/Externals/wxWidgets3/src/gtk/window.cpp @@ -2,7 +2,7 @@ // Name: src/gtk/window.cpp // Purpose: wxWindowGTK implementation // Author: Robert Roebling -// Id: $Id: window.cpp 67280 2011-03-22 14:17:38Z DS $ +// Id: $Id: window.cpp 70734 2012-02-28 05:29:35Z PC $ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -31,42 +31,30 @@ #include "wx/tooltip.h" #include "wx/caret.h" #include "wx/fontutil.h" +#include "wx/scopeguard.h" #include "wx/sysopt.h" #include #include "wx/gtk/private.h" #include "wx/gtk/private/win_gtk.h" +#include "wx/gtk/private/event.h" +using namespace wxGTKImpl; +#ifdef GDK_WINDOWING_X11 #include +#else +typedef guint KeySym; +#endif #include #if GTK_CHECK_VERSION(3,0,0) #include #endif -#if !GTK_CHECK_VERSION(2,10,0) - // GTK+ can reliably detect Meta key state only since 2.10 when - // GDK_META_MASK was introduced -- there wasn't any way to detect it - // in older versions. wxGTK used GDK_MOD2_MASK for this purpose, but - // GDK_MOD2_MASK is documented as: - // - // the fifth modifier key (it depends on the modifier mapping of the X - // server which key is interpreted as this modifier) - // - // In other words, it isn't guaranteed to map to Meta. This is a real - // problem: it is common to map NumLock to it (in fact, it's an exception - // if the X server _doesn't_ use it for NumLock). So the old code caused - // wxKeyEvent::MetaDown() to always return true as long as NumLock was on - // on many systems, which broke all applications using - // wxKeyEvent::GetModifiers() to check modifiers state (see e.g. here: - // http://tinyurl.com/56lsk2). - // - // Because of this, it's better to not detect Meta key state at all than - // to detect it incorrectly. Hence the following #define, which causes - // m_metaDown to be always set to false. - #define GDK_META_MASK 0 -#endif +// gdk_window_set_composited() is only supported since 2.12 +#define wxGTK_VERSION_REQUIRED_FOR_COMPOSITING 2,12,0 +#define wxGTK_HAS_COMPOSITING_SUPPORT GTK_CHECK_VERSION(2,12,0) //----------------------------------------------------------------------------- // documentation on internals @@ -233,29 +221,6 @@ int g_lastButtonNumber = 0; // the trace mask used for the focus debugging messages #define TRACE_FOCUS wxT("focus") -//----------------------------------------------------------------------------- -// missing gdk functions -//----------------------------------------------------------------------------- - -void -gdk_window_warp_pointer (GdkWindow *window, - gint x, - gint y) -{ - if (!window) - window = gdk_get_default_root_window(); - - if (!GDK_WINDOW_DESTROYED(window)) - { - XWarpPointer (GDK_WINDOW_XDISPLAY(window), - None, /* not source window -> move from anywhere */ - GDK_WINDOW_XID(window), /* dest window */ - 0, 0, 0, 0, /* not source window -> move from anywhere */ - x, y ); - } -} - - //----------------------------------------------------------------------------- // "size_request" of m_widget //----------------------------------------------------------------------------- @@ -313,7 +278,8 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win) if (!win->IsShown()) return false; - const GtkAllocation& alloc = win->m_wxwindow->allocation; + GtkAllocation alloc; + gtk_widget_get_allocation(win->m_wxwindow, &alloc); const int x = alloc.x; const int y = alloc.y; const int w = alloc.width; @@ -325,7 +291,7 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win) if (win->HasFlag(wxBORDER_SIMPLE)) { gdk_draw_rectangle(gdk_event->window, - widget->style->black_gc, false, x, y, w - 1, h - 1); + gtk_widget_get_style(widget)->black_gc, false, x, y, w - 1, h - 1); } else { @@ -342,9 +308,12 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win) // for scrollable ones detail = "viewport"; + // clip rect is required to avoid painting background + // over upper left (w,h) of parent window + GdkRectangle clipRect = { x, y, w, h }; gtk_paint_shadow( - win->m_wxwindow->style, gdk_event->window, GTK_STATE_NORMAL, - shadow, NULL, wxGTKPrivate::GetEntryWidget(), detail, x, y, w, h); + gtk_widget_get_style(win->m_wxwindow), gdk_event->window, GTK_STATE_NORMAL, + shadow, &clipRect, wxGTKPrivate::GetEntryWidget(), detail, x, y, w, h); } return false; } @@ -356,16 +325,17 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win) extern "C" { static void -parent_set(GtkWidget* widget, GtkObject* old_parent, wxWindow* win) +parent_set(GtkWidget* widget, GtkWidget* old_parent, wxWindow* win) { if (old_parent) { g_signal_handlers_disconnect_by_func( old_parent, (void*)expose_event_border, win); } - if (widget->parent) + GtkWidget* parent = gtk_widget_get_parent(widget); + if (parent) { - g_signal_connect_after(widget->parent, "expose_event", + g_signal_connect_after(parent, "expose_event", G_CALLBACK(expose_event_border), win); } } @@ -376,18 +346,6 @@ parent_set(GtkWidget* widget, GtkObject* old_parent, wxWindow* win) // "key_press_event" from any window //----------------------------------------------------------------------------- -// These are used when transforming Ctrl-alpha to ascii values 1-26 -inline bool wxIsLowerChar(int code) -{ - return (code >= 'a' && code <= 'z' ); -} - -inline bool wxIsUpperChar(int code) -{ - return (code >= 'A' && code <= 'Z' ); -} - - // set WXTRACE to this to see the key event codes on the console #define TRACE_KEYS wxT("keyevent") @@ -677,12 +635,6 @@ static void wxFillOtherKeyEventFields(wxKeyEvent& event, wxWindowGTK *win, GdkEventKey *gdk_event) { - int x = 0; - int y = 0; - GdkModifierType state; - if (gdk_event->window) - gdk_window_get_pointer(gdk_event->window, &x, &y, &state); - event.SetTimestamp( gdk_event->time ); event.SetId(win->GetId()); @@ -736,10 +688,8 @@ static void wxFillOtherKeyEventFields(wxKeyEvent& event, event.m_rawCode = (wxUint32) gdk_event->keyval; event.m_rawFlags = gdk_event->hardware_keycode; - wxGetMousePosition( &x, &y ); - win->ScreenToClient( &x, &y ); - event.m_x = x; - event.m_y = y; + wxGetMousePosition(&event.m_x, &event.m_y); + win->ScreenToClient(&event.m_x, &event.m_y); event.SetEventObject( win ); } @@ -782,6 +732,7 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, keysym = (KeySym)gdk_event->string[0]; } +#ifdef GDK_WINDOWING_X11 // we want to always get the same key code when the same key is // pressed regardless of the state of the modifiers, i.e. on a // standard US keyboard pressing '5' or '%' ('5' key with @@ -800,6 +751,9 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, // use the normalized, i.e. lower register, keysym if we've // got one key_code = keysymNormalized ? keysymNormalized : keysym; +#else + key_code = keysym; +#endif // as explained above, we want to have lower register key codes // normally but for the letter keys we want to have the upper ones @@ -877,34 +831,58 @@ struct wxGtkIMData namespace { -// Send wxEVT_CHAR_HOOK event to the parent of the window and if it wasn't -// processed, send wxEVT_CHAR to the window itself. Return true if either of -// them was handled. -bool -SendCharHookAndCharEvents(const wxKeyEvent& event, wxWindow *win) +// Send wxEVT_CHAR_HOOK event to the parent of the window and return true only +// if it was processed (and not skipped). +bool SendCharHookEvent(const wxKeyEvent& event, wxWindow *win) { - // wxEVT_CHAR_HOOK must be sent to the top level parent window to allow it + // wxEVT_CHAR_HOOK must be sent to allow the parent windows (e.g. a dialog + // which typically closes when Esc key is pressed in any of its controls) // to handle key events in all of its children unless the mouse is captured // in which case we consider that the keyboard should be "captured" too. if ( !g_captureWindow ) { - wxWindow * const parent = wxGetTopLevelParent(win); - if ( parent ) - { - // We need to make a copy of the event object because it is - // modified while it's handled, notably its WasProcessed() flag - // is set after it had been processed once. - wxKeyEvent eventCharHook(event); - eventCharHook.SetEventType(wxEVT_CHAR_HOOK); - if ( parent->HandleWindowEvent(eventCharHook) ) - return true; - } + wxKeyEvent eventCharHook(wxEVT_CHAR_HOOK, event); + if ( win->HandleWindowEvent(eventCharHook) + && !event.IsNextEventAllowed() ) + return true; } - // As above, make a copy of the event first. - wxKeyEvent eventChar(event); - eventChar.SetEventType(wxEVT_CHAR); - return win->HandleWindowEvent(eventChar); + return false; +} + +// Adjust wxEVT_CHAR event key code fields. This function takes care of two +// conventions: +// (a) Ctrl-letter key presses generate key codes in range 1..26 +// (b) Unicode key codes are same as key codes for the codes in 1..255 range +void AdjustCharEventKeyCodes(wxKeyEvent& event) +{ + const int code = event.m_keyCode; + + // Check for (a) above. + if ( event.ControlDown() ) + { + // We intentionally don't use isupper/lower() here, we really need + // ASCII letters only as it doesn't make sense to translate any other + // ones into this range which has only 26 slots. + if ( code >= 'a' && code <= 'z' ) + event.m_keyCode = code - 'a' + 1; + else if ( code >= 'A' && code <= 'Z' ) + event.m_keyCode = code - 'A' + 1; + +#if wxUSE_UNICODE + // Adjust the Unicode equivalent in the same way too. + if ( event.m_keyCode != code ) + event.m_uniChar = event.m_keyCode; +#endif // wxUSE_UNICODE + } + +#if wxUSE_UNICODE + // Check for (b) from above. + // + // FIXME: Should we do it for key codes up to 255? + if ( !event.m_uniChar && code < WXK_DELETE ) + event.m_uniChar = code; +#endif // wxUSE_UNICODE } } // anonymous namespace @@ -926,6 +904,13 @@ gtk_window_key_press_callback( GtkWidget *WXUNUSED(widget), if( wxTranslateGTKKeyEventToWx(event, win, gdk_event) ) { + // Send the CHAR_HOOK event first + if ( SendCharHookEvent(event, win) ) + { + // Don't do anything at all with this event any more. + return TRUE; + } + // Emit KEY_DOWN event ret = win->HandleWindowEvent( event ); } @@ -1009,25 +994,15 @@ gtk_window_key_press_callback( GtkWidget *WXUNUSED(widget), if ( key_code ) { + wxKeyEvent eventChar(wxEVT_CHAR, event); + wxLogTrace(TRACE_KEYS, wxT("Char event: %ld"), key_code); - event.m_keyCode = key_code; + eventChar.m_keyCode = key_code; - // To conform to the docs we need to translate Ctrl-alpha - // characters to values in the range 1-26. - if ( event.ControlDown() && - ( wxIsLowerChar(key_code) || wxIsUpperChar(key_code) )) - { - if ( wxIsLowerChar(key_code) ) - event.m_keyCode = key_code - 'a' + 1; - if ( wxIsUpperChar(key_code) ) - event.m_keyCode = key_code - 'A' + 1; -#if wxUSE_UNICODE - event.m_uniChar = event.m_keyCode; -#endif - } + AdjustCharEventKeyCodes(eventChar); - ret = SendCharHookAndCharEvents(event, win); + ret = win->HandleWindowEvent(eventChar); } } @@ -1041,7 +1016,7 @@ gtk_wxwindow_commit_cb (GtkIMContext * WXUNUSED(context), const gchar *str, wxWindow *window) { - wxKeyEvent event( wxEVT_KEY_DOWN ); + wxKeyEvent event( wxEVT_CHAR ); // take modifiers, cursor position, timestamp etc. from the last // key_press_event that was fed into Input Method: @@ -1070,23 +1045,9 @@ gtk_wxwindow_commit_cb (GtkIMContext * WXUNUSED(context), event.m_keyCode = (char)*pstr; #endif // wxUSE_UNICODE - // To conform to the docs we need to translate Ctrl-alpha - // characters to values in the range 1-26. - if ( event.ControlDown() && - ( wxIsLowerChar(*pstr) || wxIsUpperChar(*pstr) )) - { - if ( wxIsLowerChar(*pstr) ) - event.m_keyCode = *pstr - 'a' + 1; - if ( wxIsUpperChar(*pstr) ) - event.m_keyCode = *pstr - 'A' + 1; + AdjustCharEventKeyCodes(event); - event.m_keyCode = *pstr - 'a' + 1; -#if wxUSE_UNICODE - event.m_uniChar = event.m_keyCode; -#endif - } - - SendCharHookAndCharEvents(event, window); + window->HandleWindowEvent(event); } } } @@ -1119,6 +1080,21 @@ gtk_window_key_release_callback( GtkWidget * WXUNUSED(widget), } } +//----------------------------------------------------------------------------- +// key and mouse events, after, from m_widget +//----------------------------------------------------------------------------- + +extern "C" { +static gboolean key_and_mouse_event_after(GtkWidget* widget, GdkEventKey*, wxWindow*) +{ + // If a widget does not handle a key or mouse event, GTK+ sends it up the + // parent chain until it is handled. These events are not supposed to + // propagate in wxWidgets, so prevent it unless widget is in a native + // container. + return WX_IS_PIZZA(gtk_widget_get_parent(widget)); +} +} + // ============================================================================ // the mouse events // ============================================================================ @@ -1127,38 +1103,6 @@ gtk_window_key_release_callback( GtkWidget * WXUNUSED(widget), // mouse event processing helpers // ---------------------------------------------------------------------------- -// init wxMouseEvent with the info from GdkEventXXX struct -template void InitMouseEvent(wxWindowGTK *win, - wxMouseEvent& event, - T *gdk_event) -{ - event.SetTimestamp( gdk_event->time ); - event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK) != 0; - event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK) != 0; - event.m_altDown = (gdk_event->state & GDK_MOD1_MASK) != 0; - event.m_metaDown = (gdk_event->state & GDK_META_MASK) != 0; - event.m_leftDown = (gdk_event->state & GDK_BUTTON1_MASK) != 0; - event.m_middleDown = (gdk_event->state & GDK_BUTTON2_MASK) != 0; - event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK) != 0; - event.m_aux1Down = (gdk_event->state & GDK_BUTTON4_MASK) != 0; - event.m_aux2Down = (gdk_event->state & GDK_BUTTON5_MASK) != 0; - - wxPoint pt = win->GetClientAreaOrigin(); - event.m_x = (wxCoord)gdk_event->x - pt.x; - event.m_y = (wxCoord)gdk_event->y - pt.y; - - if ((win->m_wxwindow) && (win->GetLayoutDirection() == wxLayout_RightToLeft)) - { - // origin in the upper right corner - int window_width = win->m_wxwindow->allocation.width; - event.m_x = window_width - event.m_x; - } - - event.SetEventObject( win ); - event.SetId( win->GetId() ); - event.SetTimestamp( gdk_event->time ); -} - static void AdjustEventButtonState(wxMouseEvent& event) { // GDK reports the old state of the button for a button press event, but @@ -1189,9 +1133,23 @@ static void AdjustEventButtonState(wxMouseEvent& event) event.m_rightDown = !event.m_rightDown; return; } + + if ((event.GetEventType() == wxEVT_AUX1_DOWN) || + (event.GetEventType() == wxEVT_AUX1_DCLICK)) + { + event.m_aux1Down = true; + return; + } + + if ((event.GetEventType() == wxEVT_AUX2_DOWN) || + (event.GetEventType() == wxEVT_AUX2_DCLICK)) + { + event.m_aux2Down = true; + return; + } } -// find the window to send the mouse event too +// find the window to send the mouse event to static wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y) { @@ -1241,6 +1199,7 @@ wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y) else { if ((child->m_wxwindow == NULL) && + win->IsClientAreaChild(child) && (child->m_x <= xx) && (child->m_y <= yy) && (child->m_x+child->m_width >= xx) && @@ -1418,6 +1377,42 @@ gtk_window_button_press_callback( GtkWidget *widget, } } + else if (gdk_event->button == 8) + { + switch (gdk_event->type) + { + case GDK_3BUTTON_PRESS: + case GDK_BUTTON_PRESS: + event_type = wxEVT_AUX1_DOWN; + break; + + case GDK_2BUTTON_PRESS: + event_type = wxEVT_AUX1_DCLICK; + break; + + default: + ; + } + } + + else if (gdk_event->button == 9) + { + switch (gdk_event->type) + { + case GDK_3BUTTON_PRESS: + case GDK_BUTTON_PRESS: + event_type = wxEVT_AUX2_DOWN; + break; + + case GDK_2BUTTON_PRESS: + event_type = wxEVT_AUX2_DCLICK; + break; + + default: + ; + } + } + if ( event_type == wxEVT_NULL ) { // unknown mouse button or click type @@ -1501,6 +1496,14 @@ gtk_window_button_release_callback( GtkWidget *WXUNUSED(widget), event_type = wxEVT_RIGHT_UP; break; + case 8: + event_type = wxEVT_AUX1_UP; + break; + + case 9: + event_type = wxEVT_AUX2_UP; + break; + default: // unknown button, don't process return FALSE; @@ -1612,22 +1615,16 @@ window_scroll_event_hscrollbar(GtkWidget*, GdkEventScroll* gdk_event, wxWindow* return false; } - wxMouseEvent event(wxEVT_MOUSEWHEEL); - InitMouseEvent(win, event, gdk_event); - GtkRange *range = win->m_scrollBar[wxWindow::ScrollDir_Horz]; - if (!range) return FALSE; - if (range && GTK_WIDGET_VISIBLE (range)) + if (range && gtk_widget_get_visible(GTK_WIDGET(range))) { - GtkAdjustment *adj = range->adjustment; - gdouble delta = adj->step_increment * 3; + GtkAdjustment* adj = gtk_range_get_adjustment(range); + double delta = gtk_adjustment_get_step_increment(adj) * 3; if (gdk_event->direction == GDK_SCROLL_LEFT) delta = -delta; - gdouble new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size); - - gtk_adjustment_set_value (adj, new_value); + gtk_range_set_value(range, gtk_adjustment_get_value(adj) + delta); return TRUE; } @@ -1659,18 +1656,15 @@ window_scroll_event(GtkWidget*, GdkEventScroll* gdk_event, wxWindow* win) return TRUE; GtkRange *range = win->m_scrollBar[wxWindow::ScrollDir_Vert]; - if (!range) return FALSE; - if (range && GTK_WIDGET_VISIBLE (range)) + if (range && gtk_widget_get_visible(GTK_WIDGET(range))) { - GtkAdjustment *adj = range->adjustment; - gdouble delta = adj->step_increment * 3; + GtkAdjustment* adj = gtk_range_get_adjustment(range); + double delta = gtk_adjustment_get_step_increment(adj) * 3; if (gdk_event->direction == GDK_SCROLL_UP) - delta = -delta; + delta = -delta; - gdouble new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size); - - gtk_adjustment_set_value (adj, new_value); + gtk_range_set_value(range, gtk_adjustment_get_value(adj) + delta); return TRUE; } @@ -1753,7 +1747,7 @@ gtk_window_enter_callback( GtkWidget *widget, int y = 0; GdkModifierType state = (GdkModifierType)0; - gdk_window_get_pointer( widget->window, &x, &y, &state ); + gdk_window_get_pointer(gtk_widget_get_window(widget), &x, &y, &state); wxMouseEvent event( wxEVT_ENTER_WINDOW ); InitMouseEvent(win, event, gdk_event); @@ -1793,7 +1787,7 @@ gtk_window_leave_callback( GtkWidget *widget, int y = 0; GdkModifierType state = (GdkModifierType)0; - gdk_window_get_pointer( widget->window, &x, &y, &state ); + gdk_window_get_pointer(gtk_widget_get_window(widget), &x, &y, &state); InitMouseEvent(win, event, gdk_event); @@ -1885,29 +1879,19 @@ gtk_scrollbar_button_release_event(GtkRange* range, GdkEventButton*, wxWindow* w //----------------------------------------------------------------------------- static void -gtk_window_realized_callback(GtkWidget* widget, wxWindow* win) +gtk_window_realized_callback(GtkWidget* WXUNUSED(widget), wxWindowGTK* win) +{ + win->GTKHandleRealized(); +} + +//----------------------------------------------------------------------------- +// "unrealize" from m_wxwindow +//----------------------------------------------------------------------------- + +static void unrealize(GtkWidget*, wxWindowGTK* win) { if (win->m_imData) - { - gtk_im_context_set_client_window( win->m_imData->context, - win->m_wxwindow ? win->GTKGetDrawingWindow() : widget->window); - } - - // We cannot set colours and fonts before the widget - // been realized, so we do this directly after realization - // or otherwise in idle time - - if (win->m_needsStyleChange) - { - win->SetBackgroundStyle(win->GetBackgroundStyle()); - win->m_needsStyleChange = false; - } - - wxWindowCreateEvent event( win ); - event.SetEventObject( win ); - win->GTKProcessEvent( event ); - - win->GTKUpdateCursor(true, false); + gtk_im_context_set_client_window(win->m_imData->context, NULL); } //----------------------------------------------------------------------------- @@ -1934,8 +1918,10 @@ size_allocate(GtkWidget*, GtkAllocation* alloc, wxWindow* win) win->m_oldClientHeight = h; // this callback can be connected to m_wxwindow, // so always get size from m_widget->allocation - win->m_width = win->m_widget->allocation.width; - win->m_height = win->m_widget->allocation.height; + GtkAllocation a; + gtk_widget_get_allocation(win->m_widget, &a); + win->m_width = a.width; + win->m_height = a.height; if (!win->m_nativeSizeEvent) { wxSizeEvent event(win->GetSize(), win->GetId()); @@ -1977,15 +1963,71 @@ void gtk_window_style_set_callback( GtkWidget *WXUNUSED(widget), { if (win && previous_style) { - wxSysColourChangedEvent event; - event.SetEventObject(win); - - win->GTKProcessEvent( event ); + if (win->IsTopLevel()) + { + wxSysColourChangedEvent event; + event.SetEventObject(win); + win->GTKProcessEvent(event); + } + else + { + // Border width could change, which will change client size. + // Make sure size event occurs for this + win->m_oldClientWidth = 0; + } } } } // extern "C" +void wxWindowGTK::GTKHandleRealized() +{ + if (m_imData) + { + gtk_im_context_set_client_window + ( + m_imData->context, + m_wxwindow ? GTKGetDrawingWindow() + : gtk_widget_get_window(m_widget) + ); + } + + // Use composited window if background is transparent, if supported. + if (m_backgroundStyle == wxBG_STYLE_TRANSPARENT) + { +#if wxGTK_HAS_COMPOSITING_SUPPORT + if (IsTransparentBackgroundSupported()) + { + GdkWindow* const window = GTKGetDrawingWindow(); + if (window) + gdk_window_set_composited(window, true); + } + else +#endif // wxGTK_HAS_COMPOSITING_SUPPORT + { + // We revert to erase mode if transparency is not supported + m_backgroundStyle = wxBG_STYLE_ERASE; + } + } + + + // We cannot set colours and fonts before the widget + // been realized, so we do this directly after realization + // or otherwise in idle time + + if (m_needsStyleChange) + { + SetBackgroundStyle(GetBackgroundStyle()); + m_needsStyleChange = false; + } + + wxWindowCreateEvent event(static_cast(this)); + event.SetEventObject( this ); + GTKProcessEvent( event ); + + GTKUpdateCursor(true, false); +} + // ---------------------------------------------------------------------------- // this wxWindowBase function is implemented here (in platform-specific file) // because it is static and so couldn't be made virtual @@ -2038,6 +2080,7 @@ wxMouseState wxGetMouseState() ms.SetLeftDown((mask & GDK_BUTTON1_MASK) != 0); ms.SetMiddleDown((mask & GDK_BUTTON2_MASK) != 0); ms.SetRightDown((mask & GDK_BUTTON3_MASK) != 0); + // see the comment in InitMouseEvent() ms.SetAux1Down((mask & GDK_BUTTON4_MASK) != 0); ms.SetAux2Down((mask & GDK_BUTTON5_MASK) != 0); @@ -2182,17 +2225,14 @@ bool wxWindowGTK::Create( wxWindow *parent, if (HasFlag(wxALWAYS_SHOW_SB)) { gtk_scrolled_window_set_policy( scrolledWindow, GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS ); - - scrolledWindow->hscrollbar_visible = TRUE; - scrolledWindow->vscrollbar_visible = TRUE; } else { gtk_scrolled_window_set_policy( scrolledWindow, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); } - m_scrollBar[ScrollDir_Horz] = GTK_RANGE(scrolledWindow->hscrollbar); - m_scrollBar[ScrollDir_Vert] = GTK_RANGE(scrolledWindow->vscrollbar); + m_scrollBar[ScrollDir_Horz] = GTK_RANGE(gtk_scrolled_window_get_hscrollbar(scrolledWindow)); + m_scrollBar[ScrollDir_Vert] = GTK_RANGE(gtk_scrolled_window_get_vscrollbar(scrolledWindow)); if (GetLayoutDirection() == wxLayout_RightToLeft) gtk_range_set_inverted( m_scrollBar[ScrollDir_Horz], TRUE ); @@ -2268,6 +2308,7 @@ wxWindowGTK::~wxWindowGTK() // delete before the widgets to avoid a crash on solaris delete m_imData; + m_imData = NULL; // avoid problem with GTK+ 2.18 where a frozen window causes the whole // TLW to be frozen, and if the window is then destroyed, nothing ever @@ -2300,8 +2341,11 @@ bool wxWindowGTK::PreCreation( wxWindowGTK *parent, const wxPoint &pos, const w m_width = WidthDefault(size.x) ; m_height = HeightDefault(size.y); - m_x = (int)pos.x; - m_y = (int)pos.y; + if (pos != wxDefaultPosition) + { + m_x = pos.x; + m_y = pos.y; + } return true; } @@ -2310,6 +2354,21 @@ void wxWindowGTK::PostCreation() { wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") ); +#if wxGTK_HAS_COMPOSITING_SUPPORT + // Set RGBA visual as soon as possible to minimize the possibility that + // somebody uses the wrong one. + if ( m_backgroundStyle == wxBG_STYLE_TRANSPARENT && + IsTransparentBackgroundSupported() ) + { + GdkScreen *screen = gtk_widget_get_screen (m_widget); + + GdkColormap *rgba_colormap = gdk_screen_get_rgba_colormap (screen); + + if (rgba_colormap) + gtk_widget_set_colormap(m_widget, rgba_colormap); + } +#endif // wxGTK_HAS_COMPOSITING_SUPPORT + if (m_wxwindow) { if (!m_noExpose) @@ -2331,6 +2390,7 @@ void wxWindowGTK::PostCreation() g_signal_connect (m_imData->context, "commit", G_CALLBACK (gtk_wxwindow_commit_cb), this); + g_signal_connect(m_wxwindow, "unrealize", G_CALLBACK(unrealize), this); } // focus handling @@ -2370,10 +2430,30 @@ void wxWindowGTK::PostCreation() ConnectWidget( connect_widget ); - /* We cannot set colours, fonts and cursors before the widget has - been realized, so we do this directly after realization */ - g_signal_connect (connect_widget, "realize", - G_CALLBACK (gtk_window_realized_callback), this); + // connect handler to prevent events from propagating up parent chain + g_signal_connect_after(m_widget, + "key_press_event", G_CALLBACK(key_and_mouse_event_after), this); + g_signal_connect_after(m_widget, + "key_release_event", G_CALLBACK(key_and_mouse_event_after), this); + g_signal_connect_after(m_widget, + "button_press_event", G_CALLBACK(key_and_mouse_event_after), this); + g_signal_connect_after(m_widget, + "button_release_event", G_CALLBACK(key_and_mouse_event_after), this); + g_signal_connect_after(m_widget, + "motion_notify_event", G_CALLBACK(key_and_mouse_event_after), this); + + // We cannot set colours, fonts and cursors before the widget has been + // realized, so we do this directly after realization -- unless the widget + // was in fact realized already. + if ( gtk_widget_get_realized(connect_widget) ) + { + gtk_window_realized_callback(connect_widget, this); + } + else + { + g_signal_connect (connect_widget, "realize", + G_CALLBACK (gtk_window_realized_callback), this); + } if (!IsTopLevel()) { @@ -2422,7 +2502,8 @@ void wxWindowGTK::PostCreation() gtk_widget_show( m_widget ); } -gulong wxWindowGTK::GTKConnectWidget(const char *signal, void (*callback)()) +unsigned long +wxWindowGTK::GTKConnectWidget(const char *signal, wxGTKCallback callback) { return g_signal_connect(m_widget, signal, callback, this); } @@ -2456,15 +2537,13 @@ void wxWindowGTK::ConnectWidget( GtkWidget *widget ) g_signal_connect (widget, "leave_notify_event", G_CALLBACK (gtk_window_leave_callback), this); - if (IsTopLevel() && m_wxwindow) + if (m_wxwindow && (IsTopLevel() || HasFlag(wxBORDER_RAISED | wxBORDER_SUNKEN | wxBORDER_THEME))) g_signal_connect (m_wxwindow, "style_set", G_CALLBACK (gtk_window_style_set_callback), this); } bool wxWindowGTK::Destroy() { - wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") ); - m_hasVMT = false; return wxWindowBase::Destroy(); @@ -2502,12 +2581,15 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") ); wxASSERT_MSG( (m_parent != NULL), wxT("wxWindowGTK::SetSize requires parent.\n") ); - int currentX, currentY; - GetPosition(¤tX, ¤tY); - if (x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - x = currentX; - if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - y = currentY; + if ((sizeFlags & wxSIZE_ALLOW_MINUS_ONE) == 0 && (x == -1 || y == -1)) + { + int currentX, currentY; + GetPosition(¤tX, ¤tY); + if (x == -1) + x = currentX; + if (y == -1) + y = currentY; + } AdjustForParentClientOrigin(x, y, sizeFlags); // calculate the best size if we should auto size the window @@ -2539,7 +2621,7 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags int bottom_border = 0; /* the default button has a border around it */ - if (GTK_WIDGET_CAN_DEFAULT(m_widget)) + if (gtk_widget_get_can_default(m_widget)) { GtkBorder *default_border = NULL; gtk_widget_style_get( m_widget, "default_border", &default_border, NULL ); @@ -2583,7 +2665,7 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags bool wxWindowGTK::GTKShowFromOnIdle() { - if (IsShown() && m_showOnIdle && !GTK_WIDGET_VISIBLE (m_widget)) + if (IsShown() && m_showOnIdle && !gtk_widget_get_visible (m_widget)) { GtkAllocation alloc; alloc.x = m_x; @@ -2616,21 +2698,11 @@ void wxWindowGTK::OnInternalIdle() RealizeTabOrder(); } - // Update style if the window was not yet realized when - // SetBackgroundStyle() was called - if (m_needsStyleChange) - { - SetBackgroundStyle(GetBackgroundStyle()); - m_needsStyleChange = false; - } - wxWindowBase::OnInternalIdle(); } void wxWindowGTK::DoGetSize( int *width, int *height ) const { - wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - if (width) (*width) = m_width; if (height) (*height) = m_height; } @@ -2682,7 +2754,7 @@ void wxWindowGTK::DoGetClientSize( int *width, int *height ) const case GTK_POLICY_AUTOMATIC: // may be shown or not, check GtkAdjustment *adj = gtk_range_get_adjustment(range); - if ( adj->upper <= adj->page_size ) + if (gtk_adjustment_get_upper(adj) <= gtk_adjustment_get_page_size(adj)) continue; } @@ -2725,39 +2797,17 @@ wxSize wxWindowGTK::DoGetBorderSize() const void wxWindowGTK::DoGetPosition( int *x, int *y ) const { - wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - int dx = 0; int dy = 0; - if (!IsTopLevel() && m_parent && m_parent->m_wxwindow) + GtkWidget* parent = NULL; + if (m_widget) + parent = gtk_widget_get_parent(m_widget); + if (WX_IS_PIZZA(parent)) { - wxPizza* pizza = WX_PIZZA(m_parent->m_wxwindow); + wxPizza* pizza = WX_PIZZA(parent); dx = pizza->m_scroll_x; dy = pizza->m_scroll_y; } - - if (m_x == -1 && m_y == -1) - { - GdkWindow *source = NULL; - if (m_wxwindow) - source = m_wxwindow->window; - else - source = m_widget->window; - - if (source) - { - int org_x = 0; - int org_y = 0; - gdk_window_get_origin( source, &org_x, &org_y ); - - if (m_parent) - m_parent->ScreenToClient(&org_x, &org_y); - - const_cast(this)->m_x = org_x; - const_cast(this)->m_y = org_y; - } - } - if (x) (*x) = m_x - dx; if (y) (*y) = m_y - dy; } @@ -2766,13 +2816,13 @@ void wxWindowGTK::DoClientToScreen( int *x, int *y ) const { wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - if (!m_widget->window) return; + if (gtk_widget_get_window(m_widget) == NULL) return; GdkWindow *source = NULL; if (m_wxwindow) - source = m_wxwindow->window; + source = gtk_widget_get_window(m_wxwindow); else - source = m_widget->window; + source = gtk_widget_get_window(m_widget); int org_x = 0; int org_y = 0; @@ -2780,10 +2830,12 @@ void wxWindowGTK::DoClientToScreen( int *x, int *y ) const if (!m_wxwindow) { - if (GTK_WIDGET_NO_WINDOW (m_widget)) + if (!gtk_widget_get_has_window(m_widget)) { - org_x += m_widget->allocation.x; - org_y += m_widget->allocation.y; + GtkAllocation a; + gtk_widget_get_allocation(m_widget, &a); + org_x += a.x; + org_y += a.y; } } @@ -2803,13 +2855,13 @@ void wxWindowGTK::DoScreenToClient( int *x, int *y ) const { wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - if (!m_widget->window) return; + if (!gtk_widget_get_realized(m_widget)) return; GdkWindow *source = NULL; if (m_wxwindow) - source = m_wxwindow->window; + source = gtk_widget_get_window(m_wxwindow); else - source = m_widget->window; + source = gtk_widget_get_window(m_widget); int org_x = 0; int org_y = 0; @@ -2817,10 +2869,12 @@ void wxWindowGTK::DoScreenToClient( int *x, int *y ) const if (!m_wxwindow) { - if (GTK_WIDGET_NO_WINDOW (m_widget)) + if (!gtk_widget_get_has_window(m_widget)) { - org_x += m_widget->allocation.x; - org_y += m_widget->allocation.y; + GtkAllocation a; + gtk_widget_get_allocation(m_widget, &a); + org_x += a.x; + org_y += a.y; } } @@ -2887,7 +2941,7 @@ int wxWindowGTK::GetCharHeight() const wxCHECK_MSG( (m_widget != NULL), 12, wxT("invalid window") ); wxFont font = GetFont(); - wxCHECK_MSG( font.Ok(), 12, wxT("invalid font") ); + wxCHECK_MSG( font.IsOk(), 12, wxT("invalid font") ); PangoContext* context = gtk_widget_get_pango_context(m_widget); @@ -2913,7 +2967,7 @@ int wxWindowGTK::GetCharWidth() const wxCHECK_MSG( (m_widget != NULL), 8, wxT("invalid window") ); wxFont font = GetFont(); - wxCHECK_MSG( font.Ok(), 8, wxT("invalid font") ); + wxCHECK_MSG( font.IsOk(), 8, wxT("invalid font") ); PangoContext* context = gtk_widget_get_pango_context(m_widget); @@ -2943,7 +2997,7 @@ void wxWindowGTK::DoGetTextExtent( const wxString& string, { wxFont fontToUse = theFont ? *theFont : GetFont(); - wxCHECK_RET( fontToUse.Ok(), wxT("invalid font") ); + wxCHECK_RET( fontToUse.IsOk(), wxT("invalid font") ); if (string.empty()) { @@ -3131,6 +3185,7 @@ void wxWindowGTK::GTKHandleFocusOutNoDeferring() wxFocusEvent event( wxEVT_KILL_FOCUS, GetId() ); event.SetEventObject( this ); + event.SetWindow( FindFocus() ); GTKProcessEvent( event ); } @@ -3174,7 +3229,7 @@ void wxWindowGTK::SetFocus() GtkWidget *widget = m_wxwindow ? m_wxwindow : m_focusWidget; if ( GTK_IS_CONTAINER(widget) && - !GTK_WIDGET_CAN_FOCUS(widget) ) + !gtk_widget_get_can_focus(widget) ) { wxLogTrace(TRACE_FOCUS, wxT("Setting focus to a child of %s(%p, %s)"), @@ -3192,17 +3247,11 @@ void wxWindowGTK::SetFocus() void wxWindowGTK::SetCanFocus(bool canFocus) { - if ( canFocus ) - GTK_WIDGET_SET_FLAGS(m_widget, GTK_CAN_FOCUS); - else - GTK_WIDGET_UNSET_FLAGS(m_widget, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(m_widget, canFocus); if ( m_wxwindow && (m_widget != m_wxwindow) ) { - if ( canFocus ) - GTK_WIDGET_SET_FLAGS(m_wxwindow, GTK_CAN_FOCUS); - else - GTK_WIDGET_UNSET_FLAGS(m_wxwindow, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(m_wxwindow, canFocus); } } @@ -3210,8 +3259,7 @@ bool wxWindowGTK::Reparent( wxWindowBase *newParentBase ) { wxCHECK_MSG( (m_widget != NULL), false, wxT("invalid window") ); - wxWindowGTK *oldParent = m_parent, - *newParent = (wxWindowGTK *)newParentBase; + wxWindowGTK * const newParent = (wxWindowGTK *)newParentBase; wxASSERT( GTK_IS_WIDGET(m_widget) ); @@ -3220,14 +3268,17 @@ bool wxWindowGTK::Reparent( wxWindowBase *newParentBase ) wxASSERT( GTK_IS_WIDGET(m_widget) ); - if (oldParent) - gtk_container_remove( GTK_CONTAINER(m_widget->parent), m_widget ); + // Notice that old m_parent pointer might be non-NULL here but the widget + // still not have any parent at GTK level if it's a notebook page that had + // been removed from the notebook so test this at GTK level and not wx one. + if ( GtkWidget *parentGTK = gtk_widget_get_parent(m_widget) ) + gtk_container_remove(GTK_CONTAINER(parentGTK), m_widget); wxASSERT( GTK_IS_WIDGET(m_widget) ); if (newParent) { - if (GTK_WIDGET_VISIBLE (newParent->m_widget)) + if (gtk_widget_get_visible (newParent->m_widget)) { m_showOnIdle = true; gtk_widget_hide( m_widget ); @@ -3385,18 +3436,20 @@ void wxWindowGTK::RealizeTabOrder() { wxWindowGTK *win = *i; + bool focusableFromKeyboard = win->AcceptsFocusFromKeyboard(); + if ( mnemonicWindow ) { - if ( win->AcceptsFocusFromKeyboard() ) + if ( focusableFromKeyboard ) { // wxComboBox et al. needs to focus on on a different // widget than m_widget, so if the main widget isn't // focusable try the connect widget GtkWidget* w = win->m_widget; - if ( !GTK_WIDGET_CAN_FOCUS(w) ) + if ( !gtk_widget_get_can_focus(w) ) { w = win->GetConnectWidget(); - if ( !GTK_WIDGET_CAN_FOCUS(w) ) + if ( !gtk_widget_get_can_focus(w) ) w = NULL; } @@ -3412,7 +3465,8 @@ void wxWindowGTK::RealizeTabOrder() mnemonicWindow = win; } - chain = g_list_prepend(chain, win->m_widget); + if ( focusableFromKeyboard ) + chain = g_list_prepend(chain, win->m_widget); } chain = g_list_reverse(chain); @@ -3431,13 +3485,13 @@ void wxWindowGTK::Raise() { wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - if (m_wxwindow && m_wxwindow->window) + if (m_wxwindow && gtk_widget_get_window(m_wxwindow)) { - gdk_window_raise( m_wxwindow->window ); + gdk_window_raise(gtk_widget_get_window(m_wxwindow)); } - else if (m_widget->window) + else if (gtk_widget_get_window(m_widget)) { - gdk_window_raise( m_widget->window ); + gdk_window_raise(gtk_widget_get_window(m_widget)); } } @@ -3445,19 +3499,19 @@ void wxWindowGTK::Lower() { wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - if (m_wxwindow && m_wxwindow->window) + if (m_wxwindow && gtk_widget_get_window(m_wxwindow)) { - gdk_window_lower( m_wxwindow->window ); + gdk_window_lower(gtk_widget_get_window(m_wxwindow)); } - else if (m_widget->window) + else if (gtk_widget_get_window(m_widget)) { - gdk_window_lower( m_widget->window ); + gdk_window_lower(gtk_widget_get_window(m_widget)); } } bool wxWindowGTK::SetCursor( const wxCursor &cursor ) { - if ( !wxWindowBase::SetCursor(cursor.Ok() ? cursor : *wxSTANDARD_CURSOR) ) + if ( !wxWindowBase::SetCursor(cursor.IsOk() ? cursor : *wxSTANDARD_CURSOR) ) return false; GTKUpdateCursor(); @@ -3469,8 +3523,8 @@ void wxWindowGTK::GTKUpdateCursor(bool update_self /*=true*/, bool recurse /*=tr { if (update_self) { - wxCursor cursor(g_globalCursor.Ok() ? g_globalCursor : GetCursor()); - if ( cursor.Ok() ) + wxCursor cursor(g_globalCursor.IsOk() ? g_globalCursor : GetCursor()); + if ( cursor.IsOk() ) { wxArrayGdkWindows windowsThis; GdkWindow* window = GTKGetWindow(windowsThis); @@ -3505,17 +3559,20 @@ void wxWindowGTK::WarpPointer( int x, int y ) { wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - // We provide this function ourselves as it is - // missing in GDK (top of this file). - - GdkWindow *window = NULL; - if (m_wxwindow) - window = m_wxwindow->window; - else - window = GetConnectWidget()->window; - - if (window) - gdk_window_warp_pointer( window, x, y ); + ClientToScreen(&x, &y); + GdkDisplay* display = gtk_widget_get_display(m_widget); + GdkScreen* screen = gtk_widget_get_screen(m_widget); +#ifdef __WXGTK30__ + GdkDeviceManager* manager = gdk_display_get_device_manager(display); + gdk_device_warp(gdk_device_manager_get_client_pointer(manager), screen, x, y); +#else +#ifdef GDK_WINDOWING_X11 + XWarpPointer(GDK_DISPLAY_XDISPLAY(display), + None, + GDK_WINDOW_XID(gdk_screen_get_root_window(screen)), + 0, 0, 0, 0, x, y); +#endif +#endif } wxWindowGTK::ScrollDir wxWindowGTK::ScrollDirFromRange(GtkRange *range) const @@ -3538,14 +3595,14 @@ bool wxWindowGTK::DoScrollByUnits(ScrollDir dir, ScrollUnit unit, int units) GtkRange* range = m_scrollBar[dir]; if ( range && units ) { - GtkAdjustment* adj = range->adjustment; - gdouble inc = unit == ScrollUnit_Line ? adj->step_increment - : adj->page_increment; + GtkAdjustment* adj = gtk_range_get_adjustment(range); + double inc = unit == ScrollUnit_Line ? gtk_adjustment_get_step_increment(adj) + : gtk_adjustment_get_page_increment(adj); - const int posOld = int(adj->value + 0.5); + const int posOld = wxRound(gtk_adjustment_get_value(adj)); gtk_range_set_value(range, posOld + units*inc); - changed = int(adj->value + 0.5) != posOld; + changed = wxRound(gtk_adjustment_get_value(adj)) != posOld; } return changed; @@ -3564,49 +3621,37 @@ bool wxWindowGTK::ScrollPages(int pages) void wxWindowGTK::Refresh(bool WXUNUSED(eraseBackground), const wxRect *rect) { - if ( !m_widget ) + if (m_wxwindow) { - // it is valid to call Refresh() for a window which hasn't been created - // yet, it simply doesn't do anything in this case - return; - } - - if (!m_wxwindow) - { - if (rect) - gtk_widget_queue_draw_area( m_widget, rect->x, rect->y, rect->width, rect->height ); - else - gtk_widget_queue_draw( m_widget ); - } - else - { - // Just return if the widget or one of its ancestors isn't mapped - GtkWidget *w; - for (w = m_wxwindow; w != NULL; w = w->parent) - if (!GTK_WIDGET_MAPPED (w)) - return; - - GdkWindow* window = GTKGetDrawingWindow(); - if (rect) + if (gtk_widget_get_mapped(m_wxwindow)) { - int x = rect->x; - if (GetLayoutDirection() == wxLayout_RightToLeft) - x = GetClientSize().x - x - rect->width; - GdkRectangle r; - r.x = rect->x; - r.y = rect->y; - r.width = rect->width; - r.height = rect->height; - gdk_window_invalidate_rect(window, &r, true); + GdkWindow* window = gtk_widget_get_window(m_wxwindow); + if (rect) + { + GdkRectangle r = { rect->x, rect->y, rect->width, rect->height }; + if (GetLayoutDirection() == wxLayout_RightToLeft) + r.x = gdk_window_get_width(window) - r.x - rect->width; + gdk_window_invalidate_rect(window, &r, true); + } + else + gdk_window_invalidate_rect(window, NULL, true); + } + } + else if (m_widget) + { + if (gtk_widget_get_mapped(m_widget)) + { + if (rect) + gtk_widget_queue_draw_area(m_widget, rect->x, rect->y, rect->width, rect->height); + else + gtk_widget_queue_draw(m_widget); } - else - gdk_window_invalidate_rect(window, NULL, true); } } void wxWindowGTK::Update() { - if (m_widget && GTK_WIDGET_MAPPED(m_widget)) + if (m_widget && gtk_widget_get_mapped(m_widget)) { GdkDisplay* display = gtk_widget_get_display(m_widget); // Flush everything out to the server, and wait for it to finish. @@ -3615,7 +3660,7 @@ void wxWindowGTK::Update() GdkWindow* window = GTKGetDrawingWindow(); if (window == NULL) - window = m_widget->window; + window = gtk_widget_get_window(m_widget); gdk_window_process_updates(window, true); // Flush again, but no need to wait for it to finish @@ -3643,7 +3688,9 @@ void wxWindowGTK::GtkSendPaintEvents() m_updateRegion.Clear(); return; } - +#if wxGTK_HAS_COMPOSITING_SUPPORT + cairo_t* cr = NULL; +#endif // Clip to paint region in wxClientDC m_clipPaintRegion = true; @@ -3655,7 +3702,7 @@ void wxWindowGTK::GtkSendPaintEvents() m_updateRegion.Clear(); gint width; - gdk_drawable_get_size(m_wxwindow->window, &width, NULL); + gdk_drawable_get_size(gtk_widget_get_window(m_wxwindow), &width, NULL); wxRegionIterator upd( m_nativeUpdateRegion ); while (upd) @@ -3675,6 +3722,27 @@ void wxWindowGTK::GtkSendPaintEvents() switch ( GetBackgroundStyle() ) { + case wxBG_STYLE_TRANSPARENT: +#if wxGTK_HAS_COMPOSITING_SUPPORT + if (IsTransparentBackgroundSupported()) + { + // Set a transparent background, so that overlaying in parent + // might indeed let see through where this child did not + // explicitly paint. + // NB: it works also for top level windows (but this is the + // windows manager which then does the compositing job) + cr = gdk_cairo_create(m_wxwindow->window); + gdk_cairo_region(cr, m_nativeUpdateRegion.GetRegion()); + cairo_clip(cr); + + cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR); + cairo_paint(cr); + cairo_set_operator(cr, CAIRO_OPERATOR_OVER); + cairo_surface_flush(cairo_get_target(cr)); + } +#endif // wxGTK_HAS_COMPOSITING_SUPPORT + break; + case wxBG_STYLE_ERASE: { wxWindowDC dc( (wxWindow*)this ); @@ -3709,7 +3777,7 @@ void wxWindowGTK::GtkSendPaintEvents() if (!parent) parent = (wxWindow*)this; - if (GTK_WIDGET_MAPPED(parent->m_widget)) + if (gtk_widget_get_mapped(parent->m_widget)) { wxRegionIterator upd( m_nativeUpdateRegion ); while (upd) @@ -3720,9 +3788,9 @@ void wxWindowGTK::GtkSendPaintEvents() rect.width = upd.GetWidth(); rect.height = upd.GetHeight(); - gtk_paint_flat_box( parent->m_widget->style, + gtk_paint_flat_box(gtk_widget_get_style(parent->m_widget), GTKGetDrawingWindow(), - (GtkStateType)GTK_WIDGET_STATE(m_wxwindow), + gtk_widget_get_state(m_wxwindow), GTK_SHADOW_NONE, &rect, parent->m_widget, @@ -3751,6 +3819,39 @@ void wxWindowGTK::GtkSendPaintEvents() paint_event.SetEventObject( this ); HandleWindowEvent( paint_event ); +#if wxGTK_HAS_COMPOSITING_SUPPORT + if (IsTransparentBackgroundSupported()) + { // now composite children which need it + // Overlay all our composite children on top of the painted area + wxWindowList::compatibility_iterator node; + for ( node = m_children.GetFirst(); node ; node = node->GetNext() ) + { + wxWindow *compositeChild = node->GetData(); + if (compositeChild->GetBackgroundStyle() == wxBG_STYLE_TRANSPARENT) + { + if (cr == NULL) + { + cr = gdk_cairo_create(m_wxwindow->window); + gdk_cairo_region(cr, m_nativeUpdateRegion.GetRegion()); + cairo_clip(cr); + } + + GtkWidget *child = compositeChild->m_wxwindow; + GtkAllocation alloc; + gtk_widget_get_allocation(child, &alloc); + + // The source data is the (composited) child + gdk_cairo_set_source_window( + cr, gtk_widget_get_window(child), alloc.x, alloc.y); + + cairo_paint(cr); + } + } + if (cr) + cairo_destroy(cr); + } +#endif // wxGTK_HAS_COMPOSITING_SUPPORT + m_clipPaintRegion = false; m_updateRegion.Clear(); @@ -3767,7 +3868,7 @@ void wxWindowGTK::SetDoubleBuffered( bool on ) bool wxWindowGTK::IsDoubleBuffered() const { - return GTK_WIDGET_DOUBLE_BUFFERED( m_wxwindow ); + return gtk_widget_get_double_buffered( m_wxwindow ); } void wxWindowGTK::ClearBackground() @@ -3778,33 +3879,20 @@ void wxWindowGTK::ClearBackground() #if wxUSE_TOOLTIPS void wxWindowGTK::DoSetToolTip( wxToolTip *tip ) { - wxWindowBase::DoSetToolTip(tip); + if (m_tooltip != tip) + { + wxWindowBase::DoSetToolTip(tip); - if (m_tooltip) - { - m_tooltip->GTKApply( (wxWindow *)this ); - } - else - { - GtkWidget *w = GetConnectWidget(); - wxToolTip::GTKApply(w, NULL); + if (m_tooltip) + m_tooltip->GTKSetWindow(static_cast(this)); + else + GTKApplyToolTip(NULL); } } -void wxWindowGTK::GTKApplyToolTip( GtkTooltips *tips, const gchar *tip ) +void wxWindowGTK::GTKApplyToolTip(const char* tip) { - GtkWidget *w = GetConnectWidget(); - -#if GTK_CHECK_VERSION(2, 12, 0) - if (!gtk_check_version(2, 12, 0)) - { - gtk_widget_set_tooltip_text (w, tip); - } - else -#endif - { - gtk_tooltips_set_tip(tips, w, tip, NULL); - } + wxToolTip::GTKApply(GetConnectWidget(), tip); } #endif // wxUSE_TOOLTIPS @@ -3815,7 +3903,7 @@ bool wxWindowGTK::SetBackgroundColour( const wxColour &colour ) if (!wxWindowBase::SetBackgroundColour(colour)) return false; - if (colour.Ok()) + if (colour.IsOk()) { // We need the pixel value e.g. for background clearing. m_backgroundColour.CalcPixel(gtk_widget_get_colormap(m_widget)); @@ -3837,7 +3925,7 @@ bool wxWindowGTK::SetForegroundColour( const wxColour &colour ) return false; } - if (colour.Ok()) + if (colour.IsOk()) { // We need the pixel value e.g. for background clearing. m_foregroundColour.CalcPixel(gtk_widget_get_colormap(m_widget)); @@ -3859,15 +3947,15 @@ GtkRcStyle *wxWindowGTK::GTKCreateWidgetStyle(bool forceStyle) { // do we need to apply any changes at all? if ( !forceStyle && - !m_font.Ok() && - !m_foregroundColour.Ok() && !m_backgroundColour.Ok() ) + !m_font.IsOk() && + !m_foregroundColour.IsOk() && !m_backgroundColour.IsOk() ) { return NULL; } GtkRcStyle *style = gtk_rc_style_new(); - if ( m_font.Ok() ) + if ( m_font.IsOk() ) { style->font_desc = pango_font_description_copy( m_font.GetNativeFontInfo()->description ); @@ -3878,7 +3966,7 @@ GtkRcStyle *wxWindowGTK::GTKCreateWidgetStyle(bool forceStyle) flagsActive = 0, flagsInsensitive = 0; - if ( m_foregroundColour.Ok() ) + if ( m_foregroundColour.IsOk() ) { const GdkColor *fg = m_foregroundColour.GetColor(); @@ -3895,7 +3983,7 @@ GtkRcStyle *wxWindowGTK::GTKCreateWidgetStyle(bool forceStyle) flagsActive |= GTK_RC_FG | GTK_RC_TEXT; } - if ( m_backgroundColour.Ok() ) + if ( m_backgroundColour.IsOk() ) { const GdkColor *bg = m_backgroundColour.GetColor(); @@ -3930,7 +4018,7 @@ void wxWindowGTK::GTKApplyWidgetStyle(bool forceStyle) if ( style ) { DoApplyWidgetStyle(style); - gtk_rc_style_unref(style); + g_object_unref(style); } // Style change may affect GTK+'s size calculation: @@ -3967,35 +4055,34 @@ void wxWindowGTK::DoApplyWidgetStyle(GtkRcStyle *style) bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style) { - wxWindowBase::SetBackgroundStyle(style); + if (!wxWindowBase::SetBackgroundStyle(style)) + return false; - if ( style == wxBG_STYLE_PAINT ) + GdkWindow *window; + if ( m_wxwindow ) { - GdkWindow *window; - if ( m_wxwindow ) - { - window = GTKGetDrawingWindow(); - } - else - { - GtkWidget * const w = GetConnectWidget(); - window = w ? w->window : NULL; - } + window = GTKGetDrawingWindow(); + } + else + { + GtkWidget * const w = GetConnectWidget(); + window = w ? gtk_widget_get_window(w) : NULL; + } + bool wantNoBackPixmap = style == wxBG_STYLE_PAINT || style == wxBG_STYLE_TRANSPARENT; + + if ( wantNoBackPixmap ) + { if (window) { // Make sure GDK/X11 doesn't refresh the window // automatically. - gdk_window_set_back_pixmap( window, None, False ); -#ifdef __X__ - Display* display = GDK_WINDOW_DISPLAY(window); - XFlush(display); -#endif + gdk_window_set_back_pixmap( window, NULL, FALSE ); m_needsStyleChange = false; } else // window not realized yet { - // Do in OnIdle, because the window is not yet available + // Do when window is realized m_needsStyleChange = true; } @@ -4011,6 +4098,49 @@ bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style) return true; } +bool wxWindowGTK::IsTransparentBackgroundSupported(wxString* reason) const +{ +#if wxGTK_HAS_COMPOSITING_SUPPORT + if (gtk_check_version(wxGTK_VERSION_REQUIRED_FOR_COMPOSITING) != NULL) + { + if (reason) + { + *reason = _("GTK+ installed on this machine is too old to " + "support screen compositing, please install " + "GTK+ 2.12 or later."); + } + + return false; + } + + // NB: We don't check here if the particular kind of widget supports + // transparency, we check only if it would be possible for a generic window + + wxCHECK_MSG ( m_widget, false, "Window must be created first" ); + + if (!gdk_screen_is_composited(gtk_widget_get_screen(m_widget))) + { + if (reason) + { + *reason = _("Compositing not supported by this system, " + "please enable it in your Window Manager."); + } + + return false; + } + + return true; +#else + if (reason) + { + *reason = _("This program was compiled with a too old version of GTK+, " + "please rebuild with GTK+ 2.12 or newer."); + } +#endif // wxGTK_HAS_COMPOSITING_SUPPORT/!wxGTK_HAS_COMPOSITING_SUPPORT + + return false; +} + // ---------------------------------------------------------------------------- // Pop-up menu stuff // ---------------------------------------------------------------------------- @@ -4043,6 +4173,14 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y ) { wxCHECK_MSG( m_widget != NULL, false, wxT("invalid window") ); + // For compatibility with other ports, pretend that the window showing the + // menu has focus while the menu is shown. This is needed because the popup + // menu actually steals the focus from the window it's associated it in + // wxGTK unlike, say, wxMSW. + wxWindowGTK* const oldPendingFocus = gs_pendingFocus; + gs_pendingFocus = this; + wxON_BLOCK_EXIT_SET( gs_pendingFocus, oldPendingFocus ); + menu->UpdateUI(); wxPoint pos; @@ -4119,7 +4257,7 @@ bool wxWindowGTK::GTKIsOwnWindow(GdkWindow *window) const GdkWindow *wxWindowGTK::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const { - return m_wxwindow ? GTKGetDrawingWindow() : m_widget->window; + return m_wxwindow ? GTKGetDrawingWindow() : gtk_widget_get_window(m_widget); } bool wxWindowGTK::SetFont( const wxFont &font ) @@ -4144,12 +4282,12 @@ void wxWindowGTK::DoCaptureMouse() if (m_wxwindow) window = GTKGetDrawingWindow(); else - window = GetConnectWidget()->window; + window = gtk_widget_get_window(GetConnectWidget()); wxCHECK_RET( window, wxT("CaptureMouse() failed") ); const wxCursor* cursor = &m_cursor; - if (!cursor->Ok()) + if (!cursor->IsOk()) cursor = wxSTANDARD_CURSOR; gdk_pointer_grab( window, FALSE, @@ -4177,7 +4315,7 @@ void wxWindowGTK::DoReleaseMouse() if (m_wxwindow) window = GTKGetDrawingWindow(); else - window = GetConnectWidget()->window; + window = gtk_widget_get_window(GetConnectWidget()); if (!window) return; @@ -4221,17 +4359,14 @@ void wxWindowGTK::SetScrollbar(int orient, thumbVisible = 1; } - GtkAdjustment * const adj = sb->adjustment; - adj->step_increment = 1; - adj->page_increment = - adj->page_size = thumbVisible; - adj->value = pos; - g_signal_handlers_block_by_func( sb, (void*)gtk_scrollbar_value_changed, this); + gtk_range_set_increments(sb, 1, thumbVisible); + gtk_adjustment_set_page_size(gtk_range_get_adjustment(sb), thumbVisible); gtk_range_set_range(sb, 0, range); - m_scrollPos[dir] = sb->adjustment->value; + gtk_range_set_value(sb, pos); + m_scrollPos[dir] = gtk_range_get_value(sb); g_signal_handlers_unblock_by_func( sb, (void*)gtk_scrollbar_value_changed, this); @@ -4251,7 +4386,7 @@ void wxWindowGTK::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh)) sb, (void*)gtk_scrollbar_value_changed, this); gtk_range_set_value(sb, pos); - m_scrollPos[dir] = sb->adjustment->value; + m_scrollPos[dir] = gtk_range_get_value(sb); g_signal_handlers_unblock_by_func( sb, (void*)gtk_scrollbar_value_changed, this); @@ -4263,7 +4398,7 @@ int wxWindowGTK::GetScrollThumb(int orient) const GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)]; wxCHECK_MSG( sb, 0, wxT("this window is not scrollable") ); - return wxRound(sb->adjustment->page_size); + return wxRound(gtk_adjustment_get_page_size(gtk_range_get_adjustment(sb))); } int wxWindowGTK::GetScrollPos( int orient ) const @@ -4271,7 +4406,7 @@ int wxWindowGTK::GetScrollPos( int orient ) const GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)]; wxCHECK_MSG( sb, 0, wxT("this window is not scrollable") ); - return wxRound(sb->adjustment->value); + return wxRound(gtk_range_get_value(sb)); } int wxWindowGTK::GetScrollRange( int orient ) const @@ -4279,7 +4414,7 @@ int wxWindowGTK::GetScrollRange( int orient ) const GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)]; wxCHECK_MSG( sb, 0, wxT("this window is not scrollable") ); - return wxRound(sb->adjustment->upper); + return wxRound(gtk_adjustment_get_upper(gtk_range_get_adjustment(sb))); } // Determine if increment is the same as +/-x, allowing for some small @@ -4296,16 +4431,15 @@ wxEventType wxWindowGTK::GTKGetScrollEventType(GtkRange* range) wxASSERT(range == m_scrollBar[0] || range == m_scrollBar[1]); const int barIndex = range == m_scrollBar[1]; - GtkAdjustment* adj = range->adjustment; - const int value = wxRound(adj->value); + const double value = gtk_range_get_value(range); // save previous position const double oldPos = m_scrollPos[barIndex]; // update current position - m_scrollPos[barIndex] = adj->value; + m_scrollPos[barIndex] = value; // If event should be ignored, or integral position has not changed - if (!m_hasVMT || g_blockEventsOnDrag || value == wxRound(oldPos)) + if (!m_hasVMT || g_blockEventsOnDrag || wxRound(value) == wxRound(oldPos)) { return wxEVT_NULL; } @@ -4314,14 +4448,15 @@ wxEventType wxWindowGTK::GTKGetScrollEventType(GtkRange* range) if (!m_isScrolling) { // Difference from last change event - const double diff = adj->value - oldPos; + const double diff = value - oldPos; const bool isDown = diff > 0; - if (IsScrollIncrement(adj->step_increment, diff)) + GtkAdjustment* adj = gtk_range_get_adjustment(range); + if (IsScrollIncrement(gtk_adjustment_get_step_increment(adj), diff)) { eventType = isDown ? wxEVT_SCROLL_LINEDOWN : wxEVT_SCROLL_LINEUP; } - else if (IsScrollIncrement(adj->page_increment, diff)) + else if (IsScrollIncrement(gtk_adjustment_get_page_increment(adj), diff)) { eventType = isDown ? wxEVT_SCROLL_PAGEDOWN : wxEVT_SCROLL_PAGEUP; } @@ -4398,12 +4533,6 @@ void wxWindowGTK::GTKScrolledWindowSetBorder(GtkWidget* w, int wxstyle) } } -void wxWindowGTK::SetWindowStyleFlag( long style ) -{ - // Updates the internal variable. NB: Now m_windowStyle bits carry the _new_ style values already - wxWindowBase::SetWindowStyleFlag(style); -} - // Find the wxWindow at the current mouse position, also returning the mouse // position. wxWindow* wxFindWindowAtPointer(wxPoint& pt) @@ -4416,38 +4545,25 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt) // Get the current mouse position. wxPoint wxGetMousePosition() { - /* This crashes when used within wxHelpContext, - so we have to use the X-specific implementation below. - gint x, y; - GdkModifierType *mask; - (void) gdk_window_get_pointer(NULL, &x, &y, mask); - - return wxPoint(x, y); - */ + wxWindow* tlw = NULL; + if (!wxTopLevelWindows.empty()) + tlw = wxTopLevelWindows.front(); + GdkDisplay* display; + if (tlw && tlw->m_widget) + display = gtk_widget_get_display(tlw->m_widget); + else + display = gdk_display_get_default(); int x, y; - GdkWindow* windowAtPtr = gdk_window_at_pointer(& x, & y); - - Display *display = windowAtPtr ? GDK_WINDOW_XDISPLAY(windowAtPtr) : GDK_DISPLAY(); - Window rootWindow = RootWindowOfScreen (DefaultScreenOfDisplay(display)); - Window rootReturn, childReturn; - int rootX, rootY, winX, winY; - unsigned int maskReturn; - - XQueryPointer (display, - rootWindow, - &rootReturn, - &childReturn, - &rootX, &rootY, &winX, &winY, &maskReturn); - return wxPoint(rootX, rootY); - + gdk_display_get_pointer(display, NULL, &x, &y, NULL); + return wxPoint(x, y); } GdkWindow* wxWindowGTK::GTKGetDrawingWindow() const { GdkWindow* window = NULL; if (m_wxwindow) - window = m_wxwindow->window; + window = gtk_widget_get_window(m_wxwindow); return window; } @@ -4462,8 +4578,8 @@ extern "C" // is realized (and so can be frozen): static void wx_frozen_widget_realize(GtkWidget* w, wxWindowGTK* win) { - wxASSERT( w && !GTK_WIDGET_NO_WINDOW(w) ); - wxASSERT( GTK_WIDGET_REALIZED(w) ); + wxASSERT( w && gtk_widget_get_has_window(w) ); + wxASSERT( gtk_widget_get_realized(w) ); g_signal_handlers_disconnect_by_func ( @@ -4472,9 +4588,11 @@ static void wx_frozen_widget_realize(GtkWidget* w, wxWindowGTK* win) win ); - GdkWindow* window = w->window; + GdkWindow* window; if (w == win->m_wxwindow) window = win->GTKGetDrawingWindow(); + else + window = gtk_widget_get_window(w); gdk_window_freeze_updates(window); } @@ -4482,10 +4600,11 @@ static void wx_frozen_widget_realize(GtkWidget* w, wxWindowGTK* win) void wxWindowGTK::GTKFreezeWidget(GtkWidget *w) { - if ( !w || GTK_WIDGET_NO_WINDOW(w) ) + if ( !w || !gtk_widget_get_has_window(w) ) return; // window-less widget, cannot be frozen - if ( !GTK_WIDGET_REALIZED(w) ) + GdkWindow* window = gtk_widget_get_window(w); + if (window == NULL) { // we can't thaw unrealized widgets because they don't have GdkWindow, // so set it up to be done immediately after realization: @@ -4499,7 +4618,6 @@ void wxWindowGTK::GTKFreezeWidget(GtkWidget *w) return; } - GdkWindow* window = w->window; if (w == m_wxwindow) window = GTKGetDrawingWindow(); gdk_window_freeze_updates(window); @@ -4507,10 +4625,11 @@ void wxWindowGTK::GTKFreezeWidget(GtkWidget *w) void wxWindowGTK::GTKThawWidget(GtkWidget *w) { - if ( !w || GTK_WIDGET_NO_WINDOW(w) ) + if ( !w || !gtk_widget_get_has_window(w) ) return; // window-less widget, cannot be frozen - if ( !GTK_WIDGET_REALIZED(w) ) + GdkWindow* window = gtk_widget_get_window(w); + if (window == NULL) { // the widget wasn't realized yet, no need to thaw g_signal_handlers_disconnect_by_func @@ -4522,7 +4641,6 @@ void wxWindowGTK::GTKThawWidget(GtkWidget *w) return; } - GdkWindow* window = w->window; if (w == m_wxwindow) window = GTKGetDrawingWindow(); gdk_window_thaw_updates(window); diff --git a/Externals/wxWidgets3/src/msw/accel.cpp b/Externals/wxWidgets3/src/msw/accel.cpp index b2bd12669f..53d542abf3 100644 --- a/Externals/wxWidgets3/src/msw/accel.cpp +++ b/Externals/wxWidgets3/src/msw/accel.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: accel.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: accel.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -148,7 +148,7 @@ WXHACCEL wxAcceleratorTable::GetHACCEL() const bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const { MSG *msg = (MSG *)wxmsg; - return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); + return IsOk() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); } #endif // wxUSE_ACCEL diff --git a/Externals/wxWidgets3/src/msw/anybutton.cpp b/Externals/wxWidgets3/src/msw/anybutton.cpp new file mode 100644 index 0000000000..b9206fdbbd --- /dev/null +++ b/Externals/wxWidgets3/src/msw/anybutton.cpp @@ -0,0 +1,1244 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/msw/anybutton.cpp +// Purpose: wxAnyButton +// Author: Julian Smart +// Created: 1998-01-04 (extracted from button.cpp) +// RCS-ID: $Id: anybutton.cpp 70815 2012-03-05 18:26:20Z JS $ +// Copyright: (c) Julian Smart +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifdef wxHAS_ANY_BUTTON + +#include "wx/anybutton.h" + +#ifndef WX_PRECOMP + #include "wx/app.h" + #include "wx/brush.h" + #include "wx/panel.h" + #include "wx/bmpbuttn.h" + #include "wx/settings.h" + #include "wx/dcscreen.h" + #include "wx/dcclient.h" + #include "wx/toplevel.h" + #include "wx/msw/wrapcctl.h" + #include "wx/msw/private.h" + #include "wx/msw/missing.h" +#endif + +#include "wx/imaglist.h" +#include "wx/stockitem.h" +#include "wx/msw/private/button.h" +#include "wx/msw/private/dc.h" +#include "wx/private/window.h" + +#if wxUSE_MARKUP + #include "wx/generic/private/markuptext.h" +#endif // wxUSE_MARKUP + +using namespace wxMSWImpl; + +#if wxUSE_UXTHEME + #include "wx/msw/uxtheme.h" + + // no need to include tmschema.h + #ifndef BP_PUSHBUTTON + #define BP_PUSHBUTTON 1 + + #define PBS_NORMAL 1 + #define PBS_HOT 2 + #define PBS_PRESSED 3 + #define PBS_DISABLED 4 + #define PBS_DEFAULTED 5 + + #define TMT_CONTENTMARGINS 3602 + #endif + + // provide the necessary declarations ourselves if they're missing from + // headers + #ifndef BCM_SETIMAGELIST + #define BCM_SETIMAGELIST 0x1602 + #define BCM_SETTEXTMARGIN 0x1604 + + enum + { + BUTTON_IMAGELIST_ALIGN_LEFT, + BUTTON_IMAGELIST_ALIGN_RIGHT, + BUTTON_IMAGELIST_ALIGN_TOP, + BUTTON_IMAGELIST_ALIGN_BOTTOM + }; + + struct BUTTON_IMAGELIST + { + HIMAGELIST himl; + RECT margin; + UINT uAlign; + }; + #endif +#endif // wxUSE_UXTHEME + +#ifndef WM_THEMECHANGED + #define WM_THEMECHANGED 0x031A +#endif + +#ifndef ODS_NOACCEL + #define ODS_NOACCEL 0x0100 +#endif + +#ifndef ODS_NOFOCUSRECT + #define ODS_NOFOCUSRECT 0x0200 +#endif + +#ifndef DT_HIDEPREFIX + #define DT_HIDEPREFIX 0x00100000 +#endif + +#if wxUSE_UXTHEME +extern wxWindowMSW *wxWindowBeingErased; // From src/msw/window.cpp +#endif // wxUSE_UXTHEME + +// ---------------------------------------------------------------------------- +// button image data +// ---------------------------------------------------------------------------- + +// we use different data classes for owner drawn buttons and for themed XP ones + +class wxButtonImageData +{ +public: + wxButtonImageData() { } + virtual ~wxButtonImageData() { } + + virtual wxBitmap GetBitmap(wxAnyButton::State which) const = 0; + virtual void SetBitmap(const wxBitmap& bitmap, wxAnyButton::State which) = 0; + + virtual wxSize GetBitmapMargins() const = 0; + virtual void SetBitmapMargins(wxCoord x, wxCoord y) = 0; + + virtual wxDirection GetBitmapPosition() const = 0; + virtual void SetBitmapPosition(wxDirection dir) = 0; + +private: + wxDECLARE_NO_COPY_CLASS(wxButtonImageData); +}; + +namespace +{ + +// the gap between button edge and the interior area used by Windows for the +// standard buttons +const int OD_BUTTON_MARGIN = 4; + +class wxODButtonImageData : public wxButtonImageData +{ +public: + wxODButtonImageData(wxAnyButton *btn, const wxBitmap& bitmap) + { + SetBitmap(bitmap, wxAnyButton::State_Normal); + SetBitmap(bitmap.ConvertToDisabled(), wxAnyButton::State_Disabled); + + m_dir = wxLEFT; + + // we use margins when we have both bitmap and text, but when we have + // only the bitmap it should take up the entire button area + if ( btn->ShowsLabel() ) + { + m_margin.x = btn->GetCharWidth(); + m_margin.y = btn->GetCharHeight() / 2; + } + } + + virtual wxBitmap GetBitmap(wxAnyButton::State which) const + { + return m_bitmaps[which]; + } + + virtual void SetBitmap(const wxBitmap& bitmap, wxAnyButton::State which) + { + m_bitmaps[which] = bitmap; + } + + virtual wxSize GetBitmapMargins() const + { + return m_margin; + } + + virtual void SetBitmapMargins(wxCoord x, wxCoord y) + { + m_margin = wxSize(x, y); + } + + virtual wxDirection GetBitmapPosition() const + { + return m_dir; + } + + virtual void SetBitmapPosition(wxDirection dir) + { + m_dir = dir; + } + +private: + // just store the values passed to us to be able to retrieve them later + // from the drawing code + wxBitmap m_bitmaps[wxAnyButton::State_Max]; + wxSize m_margin; + wxDirection m_dir; + + wxDECLARE_NO_COPY_CLASS(wxODButtonImageData); +}; + +#if wxUSE_UXTHEME + +// somehow the margin is one pixel greater than the value returned by +// GetThemeMargins() call +const int XP_BUTTON_EXTRA_MARGIN = 1; + +class wxXPButtonImageData : public wxButtonImageData +{ +public: + // we must be constructed with the size of our images as we need to create + // the image list + wxXPButtonImageData(wxAnyButton *btn, const wxBitmap& bitmap) + : m_iml(bitmap.GetWidth(), bitmap.GetHeight(), true /* use mask */, + wxAnyButton::State_Max), + m_hwndBtn(GetHwndOf(btn)) + { + // initialize all bitmaps except for the disabled one to normal state + for ( int n = 0; n < wxAnyButton::State_Max; n++ ) + { + m_iml.Add(n == wxAnyButton::State_Disabled ? bitmap.ConvertToDisabled() + : bitmap); + } + + m_data.himl = GetHimagelistOf(&m_iml); + + // no margins by default + m_data.margin.left = + m_data.margin.right = + m_data.margin.top = + m_data.margin.bottom = 0; + + // use default alignment + m_data.uAlign = BUTTON_IMAGELIST_ALIGN_LEFT; + + UpdateImageInfo(); + } + + virtual wxBitmap GetBitmap(wxAnyButton::State which) const + { + return m_iml.GetBitmap(which); + } + + virtual void SetBitmap(const wxBitmap& bitmap, wxAnyButton::State which) + { + m_iml.Replace(which, bitmap); + + UpdateImageInfo(); + } + + virtual wxSize GetBitmapMargins() const + { + return wxSize(m_data.margin.left, m_data.margin.top); + } + + virtual void SetBitmapMargins(wxCoord x, wxCoord y) + { + RECT& margin = m_data.margin; + margin.left = + margin.right = x; + margin.top = + margin.bottom = y; + + if ( !::SendMessage(m_hwndBtn, BCM_SETTEXTMARGIN, 0, (LPARAM)&margin) ) + { + wxLogDebug("SendMessage(BCM_SETTEXTMARGIN) failed"); + } + } + + virtual wxDirection GetBitmapPosition() const + { + switch ( m_data.uAlign ) + { + default: + wxFAIL_MSG( "invalid image alignment" ); + // fall through + + case BUTTON_IMAGELIST_ALIGN_LEFT: + return wxLEFT; + + case BUTTON_IMAGELIST_ALIGN_RIGHT: + return wxRIGHT; + + case BUTTON_IMAGELIST_ALIGN_TOP: + return wxTOP; + + case BUTTON_IMAGELIST_ALIGN_BOTTOM: + return wxBOTTOM; + } + } + + virtual void SetBitmapPosition(wxDirection dir) + { + UINT alignNew; + switch ( dir ) + { + default: + wxFAIL_MSG( "invalid direction" ); + // fall through + + case wxLEFT: + alignNew = BUTTON_IMAGELIST_ALIGN_LEFT; + break; + + case wxRIGHT: + alignNew = BUTTON_IMAGELIST_ALIGN_RIGHT; + break; + + case wxTOP: + alignNew = BUTTON_IMAGELIST_ALIGN_TOP; + break; + + case wxBOTTOM: + alignNew = BUTTON_IMAGELIST_ALIGN_BOTTOM; + break; + } + + if ( alignNew != m_data.uAlign ) + { + m_data.uAlign = alignNew; + UpdateImageInfo(); + } + } + +private: + void UpdateImageInfo() + { + if ( !::SendMessage(m_hwndBtn, BCM_SETIMAGELIST, 0, (LPARAM)&m_data) ) + { + wxLogDebug("SendMessage(BCM_SETIMAGELIST) failed"); + } + } + + // we store image list separately to be able to use convenient wxImageList + // methods instead of working with raw HIMAGELIST + wxImageList m_iml; + + // store the rest of the data in BCM_SETIMAGELIST-friendly form + BUTTON_IMAGELIST m_data; + + // the button we're associated with + const HWND m_hwndBtn; + + + wxDECLARE_NO_COPY_CLASS(wxXPButtonImageData); +}; + +#endif // wxUSE_UXTHEME + +} // anonymous namespace + +// ---------------------------------------------------------------------------- +// macros +// ---------------------------------------------------------------------------- + +// ============================================================================ +// implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// helper functions from wx/msw/private/button.h +// ---------------------------------------------------------------------------- + +void wxMSWButton::UpdateMultilineStyle(HWND hwnd, const wxString& label) +{ + // update BS_MULTILINE style depending on the new label (resetting it + // doesn't seem to do anything very useful but it shouldn't hurt and we do + // have to set it whenever the label becomes multi line as otherwise it + // wouldn't be shown correctly as we don't use BS_MULTILINE when creating + // the control unless it already has new lines in its label) + long styleOld = ::GetWindowLong(hwnd, GWL_STYLE), + styleNew; + if ( label.find(wxT('\n')) != wxString::npos ) + styleNew = styleOld | BS_MULTILINE; + else + styleNew = styleOld & ~BS_MULTILINE; + + if ( styleNew != styleOld ) + ::SetWindowLong(hwnd, GWL_STYLE, styleNew); +} + +wxSize wxMSWButton::GetFittingSize(wxWindow *win, + const wxSize& sizeLabel, + int flags) +{ + wxSize sizeBtn = sizeLabel; + + // FIXME: The numbers here are pure guesswork, no idea how should the + // button margins be really calculated. + if ( flags & Size_ExactFit ) + { + // We still need some margin or the text would be overwritten, just + // make it as small as possible. + sizeBtn.x += (3*win->GetCharWidth())/2; + } + else + { + sizeBtn.x += 3*win->GetCharWidth(); + sizeBtn.y += win->GetCharHeight()/2; + } + + // account for the shield UAC icon if we have it + if ( flags & Size_AuthNeeded ) + sizeBtn.x += wxSystemSettings::GetMetric(wxSYS_SMALLICON_X); + + return sizeBtn; +} + +wxSize wxMSWButton::ComputeBestFittingSize(wxControl *btn, int flags) +{ + wxClientDC dc(btn); + + wxSize sizeBtn; + dc.GetMultiLineTextExtent(btn->GetLabelText(), &sizeBtn.x, &sizeBtn.y); + + return GetFittingSize(btn, sizeBtn, flags); +} + +wxSize wxMSWButton::IncreaseToStdSizeAndCache(wxControl *btn, const wxSize& size) +{ + wxSize sizeBtn(size); + + // All buttons have at least the standard height and, unless the user + // explicitly wants them to be as small as possible and used wxBU_EXACTFIT + // style to indicate this, of at least the standard width too. + // + // Notice that we really want to make all buttons equally high, otherwise + // they look ugly and the existing code using wxBU_EXACTFIT only uses it to + // control width and not height. + + // The 50x14 button size is documented in the "Recommended sizing and + // spacing" section of MSDN layout article. + // + // Note that we intentionally don't use GetDefaultSize() here, because + // it's inexact -- dialog units depend on this dialog's font. + const wxSize sizeDef = btn->ConvertDialogToPixels(wxSize(50, 14)); + if ( !btn->HasFlag(wxBU_EXACTFIT) ) + { + if ( sizeBtn.x < sizeDef.x ) + sizeBtn.x = sizeDef.x; + } + if ( sizeBtn.y < sizeDef.y ) + sizeBtn.y = sizeDef.y; + + btn->CacheBestSize(sizeBtn); + + return sizeBtn; +} + +// ---------------------------------------------------------------------------- +// creation/destruction +// ---------------------------------------------------------------------------- + +wxAnyButton::~wxAnyButton() +{ + delete m_imageData; +#if wxUSE_MARKUP + delete m_markupText; +#endif // wxUSE_MARKUP +} + +void wxAnyButton::SetLabel(const wxString& label) +{ + wxMSWButton::UpdateMultilineStyle(GetHwnd(), label); + + wxAnyButtonBase::SetLabel(label); + +#if wxUSE_MARKUP + // If we have a plain text label, we shouldn't be using markup any longer. + if ( m_markupText ) + { + delete m_markupText; + m_markupText = NULL; + + // Unfortunately we don't really know whether we can reset the button + // to be non-owner-drawn or not: if we had made it owner-drawn just + // because of a call to SetLabelMarkup(), we could, but not if there + // were [also] calls to Set{Fore,Back}groundColour(). If it's really a + // problem to have button remain owner-drawn forever just because it + // had markup label once, we should record the reason for our current + // owner-drawnness and check it here. + } +#endif // wxUSE_MARKUP +} + +// ---------------------------------------------------------------------------- +// size management including autosizing +// ---------------------------------------------------------------------------- + +void wxAnyButton::AdjustForBitmapSize(wxSize &size) const +{ + wxCHECK_RET( m_imageData, wxT("shouldn't be called if no image") ); + + // account for the bitmap size + const wxSize sizeBmp = m_imageData->GetBitmap(State_Normal).GetSize(); + const wxDirection dirBmp = m_imageData->GetBitmapPosition(); + if ( dirBmp == wxLEFT || dirBmp == wxRIGHT ) + { + size.x += sizeBmp.x; + if ( sizeBmp.y > size.y ) + size.y = sizeBmp.y; + } + else // bitmap on top/below the text + { + size.y += sizeBmp.y; + if ( sizeBmp.x > size.x ) + size.x = sizeBmp.x; + } + + // account for the user-specified margins + size += 2*m_imageData->GetBitmapMargins(); + + // and also for the margins we always add internally (unless we have no + // border at all in which case the button has exactly the same size as + // bitmap and so no margins should be used) + if ( !HasFlag(wxBORDER_NONE) ) + { + int marginH = 0, + marginV = 0; +#if wxUSE_UXTHEME + if ( wxUxThemeEngine::GetIfActive() ) + { + wxUxThemeHandle theme(const_cast(this), L"BUTTON"); + + MARGINS margins; + wxUxThemeEngine::Get()->GetThemeMargins(theme, NULL, + BP_PUSHBUTTON, + PBS_NORMAL, + TMT_CONTENTMARGINS, + NULL, + &margins); + + // XP doesn't draw themed buttons correctly when the client + // area is smaller than 8x8 - enforce this minimum size for + // small bitmaps + size.IncTo(wxSize(8, 8)); + + marginH = margins.cxLeftWidth + margins.cxRightWidth + + 2*XP_BUTTON_EXTRA_MARGIN; + marginV = margins.cyTopHeight + margins.cyBottomHeight + + 2*XP_BUTTON_EXTRA_MARGIN; + } + else +#endif // wxUSE_UXTHEME + { + marginH = + marginV = OD_BUTTON_MARGIN; + } + + size.IncBy(marginH, marginV); + } +} + +wxSize wxAnyButton::DoGetBestSize() const +{ + wxAnyButton * const self = const_cast(this); + + wxSize size; + + // Account for the text part if we have it. + if ( ShowsLabel() ) + { + int flags = 0; + if ( HasFlag(wxBU_EXACTFIT) ) + flags |= wxMSWButton::Size_ExactFit; + if ( DoGetAuthNeeded() ) + flags |= wxMSWButton::Size_AuthNeeded; + +#if wxUSE_MARKUP + if ( m_markupText ) + { + wxClientDC dc(self); + size = wxMSWButton::GetFittingSize(self, + m_markupText->Measure(dc), + flags); + } + else // Normal plain text (but possibly multiline) label. +#endif // wxUSE_MARKUP + { + size = wxMSWButton::ComputeBestFittingSize(self, flags); + } + } + + if ( m_imageData ) + AdjustForBitmapSize(size); + + return wxMSWButton::IncreaseToStdSizeAndCache(self, size); +} + +// ---------------------------------------------------------------------------- +// event/message handlers +// ---------------------------------------------------------------------------- + +WXLRESULT wxAnyButton::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) +{ + if ( nMsg == WM_LBUTTONDBLCLK ) + { + // emulate a click event to force an owner-drawn button to change its + // appearance - without this, it won't do it + (void)wxControl::MSWWindowProc(WM_LBUTTONDOWN, wParam, lParam); + + // and continue with processing the message normally as well + } +#if wxUSE_UXTHEME + else if ( nMsg == WM_THEMECHANGED ) + { + // need to recalculate the best size here + // as the theme size might have changed + InvalidateBestSize(); + } +#endif // wxUSE_UXTHEME + // must use m_mouseInWindow here instead of IsMouseInWindow() + // since we need to know the first time the mouse enters the window + // and IsMouseInWindow() would return true in this case + else if ( (nMsg == WM_MOUSEMOVE && !m_mouseInWindow) || + nMsg == WM_MOUSELEAVE ) + { + if ( + IsEnabled() && + ( +#if wxUSE_UXTHEME + wxUxThemeEngine::GetIfActive() || +#endif // wxUSE_UXTHEME + (m_imageData && m_imageData->GetBitmap(State_Current).IsOk()) + ) + ) + { + Refresh(); + } + } + + // let the base class do all real processing + return wxControl::MSWWindowProc(nMsg, wParam, lParam); +} + +// ---------------------------------------------------------------------------- +// button images +// ---------------------------------------------------------------------------- + +wxBitmap wxAnyButton::DoGetBitmap(State which) const +{ + return m_imageData ? m_imageData->GetBitmap(which) : wxBitmap(); +} + +void wxAnyButton::DoSetBitmap(const wxBitmap& bitmap, State which) +{ +#if wxUSE_UXTHEME + wxXPButtonImageData *oldData = NULL; +#endif // wxUSE_UXTHEME + + // Check if we already had bitmaps of different size. + if ( m_imageData && + bitmap.GetSize() != m_imageData->GetBitmap(State_Normal).GetSize() ) + { + wxASSERT_MSG( (which == State_Normal) || bitmap.IsNull(), + "Must set normal bitmap with the new size first" ); + +#if wxUSE_UXTHEME + if ( ShowsLabel() && wxUxThemeEngine::GetIfActive() ) + { + // We can't change the size of the images stored in wxImageList + // in wxXPButtonImageData::m_iml so force recreating it below but + // keep the current data to copy its values into the new one. + oldData = static_cast(m_imageData); + m_imageData = NULL; + } +#endif // wxUSE_UXTHEME + //else: wxODButtonImageData doesn't require anything special + } + + // allocate the image data when the first bitmap is set + if ( !m_imageData ) + { +#if wxUSE_UXTHEME + // using image list doesn't work correctly if we don't have any label + // (even if we use BUTTON_IMAGELIST_ALIGN_CENTER alignment and + // BS_BITMAP style), at least under Windows 2003 so use owner drawn + // strategy for bitmap-only buttons + if ( ShowsLabel() && wxUxThemeEngine::GetIfActive() ) + { + m_imageData = new wxXPButtonImageData(this, bitmap); + + if ( oldData ) + { + // Preserve the old values in case the user changed them. + m_imageData->SetBitmapPosition(oldData->GetBitmapPosition()); + + const wxSize oldMargins = oldData->GetBitmapMargins(); + m_imageData->SetBitmapMargins(oldMargins.x, oldMargins.y); + + // No need to preserve the bitmaps though as they were of wrong + // size anyhow. + + delete oldData; + } + } + else +#endif // wxUSE_UXTHEME + { + m_imageData = new wxODButtonImageData(this, bitmap); + MakeOwnerDrawn(); + } + } + else + { + m_imageData->SetBitmap(bitmap, which); + } + + // it should be enough to only invalidate the best size when the normal + // bitmap changes as all bitmaps assigned to the button should be of the + // same size anyhow + if ( which == State_Normal ) + InvalidateBestSize(); + + Refresh(); +} + +wxSize wxAnyButton::DoGetBitmapMargins() const +{ + return m_imageData ? m_imageData->GetBitmapMargins() : wxSize(0, 0); +} + +void wxAnyButton::DoSetBitmapMargins(wxCoord x, wxCoord y) +{ + wxCHECK_RET( m_imageData, "SetBitmap() must be called first" ); + + m_imageData->SetBitmapMargins(x, y); + InvalidateBestSize(); +} + +void wxAnyButton::DoSetBitmapPosition(wxDirection dir) +{ + wxCHECK_RET( m_imageData, "SetBitmap() must be called first" ); + + m_imageData->SetBitmapPosition(dir); + InvalidateBestSize(); +} + +// ---------------------------------------------------------------------------- +// markup support +// ---------------------------------------------------------------------------- + +#if wxUSE_MARKUP + +bool wxAnyButton::DoSetLabelMarkup(const wxString& markup) +{ + if ( !wxAnyButtonBase::DoSetLabelMarkup(markup) ) + return false; + + if ( !m_markupText ) + { + m_markupText = new wxMarkupText(markup); + MakeOwnerDrawn(); + } + else + { + // We are already owner-drawn so just update the text. + m_markupText->SetMarkup(markup); + } + + Refresh(); + + return true; +} + +#endif // wxUSE_MARKUP + +// ---------------------------------------------------------------------------- +// owner-drawn buttons support +// ---------------------------------------------------------------------------- + +// drawing helpers +namespace +{ + +// return the button state using both the ODS_XXX flags specified in state +// parameter and the current button state +wxAnyButton::State GetButtonState(wxAnyButton *btn, UINT state) +{ + if ( state & ODS_DISABLED ) + return wxAnyButton::State_Disabled; + + if ( state & ODS_SELECTED ) + return wxAnyButton::State_Pressed; + + if ( btn->HasCapture() || btn->IsMouseInWindow() ) + return wxAnyButton::State_Current; + + if ( state & ODS_FOCUS ) + return wxAnyButton::State_Focused; + + return btn->GetNormalState(); +} + +void DrawButtonText(HDC hdc, + RECT *pRect, + wxAnyButton *btn, + int flags) +{ + const wxString text = btn->GetLabel(); + + if ( text.find(wxT('\n')) != wxString::npos ) + { + // draw multiline label + + // center text horizontally in any case + flags |= DT_CENTER; + + // first we need to compute its bounding rect + RECT rc; + ::CopyRect(&rc, pRect); + ::DrawText(hdc, text.wx_str(), text.length(), &rc, + DT_CENTER | DT_CALCRECT); + + // now center this rect inside the entire button area + const LONG w = rc.right - rc.left; + const LONG h = rc.bottom - rc.top; + rc.left = pRect->left + (pRect->right - pRect->left)/2 - w/2; + rc.right = rc.left+w; + rc.top = pRect->top + (pRect->bottom - pRect->top)/2 - h/2; + rc.bottom = rc.top+h; + + ::DrawText(hdc, text.wx_str(), text.length(), &rc, flags); + } + else // single line label + { + // translate wx button flags to alignment flags for DrawText() + if ( btn->HasFlag(wxBU_RIGHT) ) + { + flags |= DT_RIGHT; + } + else if ( !btn->HasFlag(wxBU_LEFT) ) + { + flags |= DT_CENTER; + } + //else: DT_LEFT is the default anyhow (and its value is 0 too) + + if ( btn->HasFlag(wxBU_BOTTOM) ) + { + flags |= DT_BOTTOM; + } + else if ( !btn->HasFlag(wxBU_TOP) ) + { + flags |= DT_VCENTER; + } + //else: as above, DT_TOP is the default + + // notice that we must have DT_SINGLELINE for vertical alignment flags + // to work + ::DrawText(hdc, text.wx_str(), text.length(), pRect, + flags | DT_SINGLELINE ); + } +} + +void DrawRect(HDC hdc, const RECT& r) +{ + wxDrawLine(hdc, r.left, r.top, r.right, r.top); + wxDrawLine(hdc, r.right, r.top, r.right, r.bottom); + wxDrawLine(hdc, r.right, r.bottom, r.left, r.bottom); + wxDrawLine(hdc, r.left, r.bottom, r.left, r.top); +} + +/* + The button frame looks like this normally: + + WWWWWWWWWWWWWWWWWWB + WHHHHHHHHHHHHHHHHGB W = white (HILIGHT) + WH GB H = light grey (LIGHT) + WH GB G = dark grey (SHADOW) + WH GB B = black (DKSHADOW) + WH GB + WGGGGGGGGGGGGGGGGGB + BBBBBBBBBBBBBBBBBBB + + When the button is selected, the button becomes like this (the total button + size doesn't change): + + BBBBBBBBBBBBBBBBBBB + BWWWWWWWWWWWWWWWWBB + BWHHHHHHHHHHHHHHGBB + BWH GBB + BWH GBB + BWGGGGGGGGGGGGGGGBB + BBBBBBBBBBBBBBBBBBB + BBBBBBBBBBBBBBBBBBB + + When the button is pushed (while selected) it is like: + + BBBBBBBBBBBBBBBBBBB + BGGGGGGGGGGGGGGGGGB + BG GB + BG GB + BG GB + BG GB + BGGGGGGGGGGGGGGGGGB + BBBBBBBBBBBBBBBBBBB +*/ +void DrawButtonFrame(HDC hdc, RECT& rectBtn, + bool selected, bool pushed) +{ + RECT r; + CopyRect(&r, &rectBtn); + + AutoHPEN hpenBlack(GetSysColor(COLOR_3DDKSHADOW)), + hpenGrey(GetSysColor(COLOR_3DSHADOW)), + hpenLightGr(GetSysColor(COLOR_3DLIGHT)), + hpenWhite(GetSysColor(COLOR_3DHILIGHT)); + + SelectInHDC selectPen(hdc, hpenBlack); + + r.right--; + r.bottom--; + + if ( pushed ) + { + DrawRect(hdc, r); + + (void)SelectObject(hdc, hpenGrey); + ::InflateRect(&r, -1, -1); + + DrawRect(hdc, r); + } + else // !pushed + { + if ( selected ) + { + DrawRect(hdc, r); + + ::InflateRect(&r, -1, -1); + } + + wxDrawLine(hdc, r.left, r.bottom, r.right, r.bottom); + wxDrawLine(hdc, r.right, r.bottom, r.right, r.top - 1); + + (void)SelectObject(hdc, hpenWhite); + wxDrawLine(hdc, r.left, r.bottom - 1, r.left, r.top); + wxDrawLine(hdc, r.left, r.top, r.right, r.top); + + (void)SelectObject(hdc, hpenLightGr); + wxDrawLine(hdc, r.left + 1, r.bottom - 2, r.left + 1, r.top + 1); + wxDrawLine(hdc, r.left + 1, r.top + 1, r.right - 1, r.top + 1); + + (void)SelectObject(hdc, hpenGrey); + wxDrawLine(hdc, r.left + 1, r.bottom - 1, r.right - 1, r.bottom - 1); + wxDrawLine(hdc, r.right - 1, r.bottom - 1, r.right - 1, r.top); + } + + InflateRect(&rectBtn, -OD_BUTTON_MARGIN, -OD_BUTTON_MARGIN); +} + +#if wxUSE_UXTHEME +void DrawXPBackground(wxAnyButton *button, HDC hdc, RECT& rectBtn, UINT state) +{ + wxUxThemeHandle theme(button, L"BUTTON"); + + // this array is indexed by wxAnyButton::State values and so must be kept in + // sync with it + static const int uxStates[] = + { + PBS_NORMAL, PBS_HOT, PBS_PRESSED, PBS_DISABLED, PBS_DEFAULTED + }; + + int iState = uxStates[GetButtonState(button, state)]; + + wxUxThemeEngine * const engine = wxUxThemeEngine::Get(); + + // draw parent background if needed + if ( engine->IsThemeBackgroundPartiallyTransparent + ( + theme, + BP_PUSHBUTTON, + iState + ) ) + { + // Set this button as the one whose background is being erased: this + // allows our WM_ERASEBKGND handler used by DrawThemeParentBackground() + // to correctly align the background brush with this window instead of + // the parent window to which WM_ERASEBKGND is sent. Notice that this + // doesn't work with custom user-defined EVT_ERASE_BACKGROUND handlers + // as they won't be aligned but unfortunately all the attempts to fix + // it by shifting DC origin before calling DrawThemeParentBackground() + // failed to work so we at least do this, even though this is far from + // being the perfect solution. + wxWindowBeingErased = button; + + engine->DrawThemeParentBackground(GetHwndOf(button), hdc, &rectBtn); + + wxWindowBeingErased = NULL; + } + + // draw background + engine->DrawThemeBackground(theme, hdc, BP_PUSHBUTTON, iState, + &rectBtn, NULL); + + // calculate content area margins + MARGINS margins; + engine->GetThemeMargins(theme, hdc, BP_PUSHBUTTON, iState, + TMT_CONTENTMARGINS, &rectBtn, &margins); + ::InflateRect(&rectBtn, -margins.cxLeftWidth, -margins.cyTopHeight); + ::InflateRect(&rectBtn, -XP_BUTTON_EXTRA_MARGIN, -XP_BUTTON_EXTRA_MARGIN); + + if ( button->UseBgCol() ) + { + COLORREF colBg = wxColourToRGB(button->GetBackgroundColour()); + AutoHBRUSH hbrushBackground(colBg); + + // don't overwrite the focus rect + RECT rectClient; + ::CopyRect(&rectClient, &rectBtn); + ::InflateRect(&rectClient, -1, -1); + FillRect(hdc, &rectClient, hbrushBackground); + } +} +#endif // wxUSE_UXTHEME + +} // anonymous namespace + +// ---------------------------------------------------------------------------- +// owner drawn buttons support +// ---------------------------------------------------------------------------- + +void wxAnyButton::MakeOwnerDrawn() +{ + if ( !IsOwnerDrawn() ) + { + // make it so + // note that BS_OWNERDRAW is not independent from other style bits + long style = GetWindowLong(GetHwnd(), GWL_STYLE); + style &= ~(BS_3STATE | BS_AUTO3STATE | BS_AUTOCHECKBOX | BS_AUTORADIOBUTTON | BS_CHECKBOX | BS_DEFPUSHBUTTON | BS_GROUPBOX | BS_PUSHBUTTON | BS_RADIOBUTTON | BS_PUSHLIKE); + style |= BS_OWNERDRAW; + SetWindowLong(GetHwnd(), GWL_STYLE, style); + } +} + +bool wxAnyButton::IsOwnerDrawn() const +{ + long style = GetWindowLong(GetHwnd(), GWL_STYLE); + return ( (style & BS_OWNERDRAW) == BS_OWNERDRAW ); +} + +bool wxAnyButton::SetBackgroundColour(const wxColour &colour) +{ + if ( !wxControl::SetBackgroundColour(colour) ) + { + // nothing to do + return false; + } + + MakeOwnerDrawn(); + + Refresh(); + + return true; +} + +bool wxAnyButton::SetForegroundColour(const wxColour &colour) +{ + if ( !wxControl::SetForegroundColour(colour) ) + { + // nothing to do + return false; + } + + MakeOwnerDrawn(); + + Refresh(); + + return true; +} + +bool wxAnyButton::MSWOnDraw(WXDRAWITEMSTRUCT *wxdis) +{ + LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT)wxdis; + HDC hdc = lpDIS->hDC; + + UINT state = lpDIS->itemState; + switch ( GetButtonState(this, state) ) + { + case State_Disabled: + state |= ODS_DISABLED; + break; + case State_Pressed: + state |= ODS_SELECTED; + break; + case State_Focused: + state |= ODS_FOCUS; + break; + default: + break; + } + + bool pushed = (SendMessage(GetHwnd(), BM_GETSTATE, 0, 0) & BST_PUSHED) != 0; + + RECT rectBtn; + CopyRect(&rectBtn, &lpDIS->rcItem); + + // draw the button background + if ( !HasFlag(wxBORDER_NONE) ) + { +#if wxUSE_UXTHEME + if ( wxUxThemeEngine::GetIfActive() ) + { + DrawXPBackground(this, hdc, rectBtn, state); + } + else +#endif // wxUSE_UXTHEME + { + COLORREF colBg = wxColourToRGB(GetBackgroundColour()); + + // first, draw the background + AutoHBRUSH hbrushBackground(colBg); + FillRect(hdc, &rectBtn, hbrushBackground); + + // draw the border for the current state + bool selected = (state & ODS_SELECTED) != 0; + if ( !selected ) + { + wxTopLevelWindow * + tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); + if ( tlw ) + { + selected = tlw->GetDefaultItem() == this; + } + } + + DrawButtonFrame(hdc, rectBtn, selected, pushed); + } + + // draw the focus rectangle if we need it + if ( (state & ODS_FOCUS) && !(state & ODS_NOFOCUSRECT) ) + { + DrawFocusRect(hdc, &rectBtn); + +#if wxUSE_UXTHEME + if ( !wxUxThemeEngine::GetIfActive() ) +#endif // wxUSE_UXTHEME + { + if ( pushed ) + { + // the label is shifted by 1 pixel to create "pushed" effect + OffsetRect(&rectBtn, 1, 1); + } + } + } + } + + + // draw the image, if any + if ( m_imageData ) + { + wxBitmap bmp = m_imageData->GetBitmap(GetButtonState(this, state)); + if ( !bmp.IsOk() ) + bmp = m_imageData->GetBitmap(State_Normal); + + const wxSize sizeBmp = bmp.GetSize(); + const wxSize margin = m_imageData->GetBitmapMargins(); + const wxSize sizeBmpWithMargins(sizeBmp + 2*margin); + wxRect rectButton(wxRectFromRECT(rectBtn)); + + // for simplicity, we start with centred rectangle and then move it to + // the appropriate edge + wxRect rectBitmap = wxRect(sizeBmp).CentreIn(rectButton); + + // move bitmap only if we have a label, otherwise keep it centered + if ( ShowsLabel() ) + { + switch ( m_imageData->GetBitmapPosition() ) + { + default: + wxFAIL_MSG( "invalid direction" ); + // fall through + + case wxLEFT: + rectBitmap.x = rectButton.x + margin.x; + rectButton.x += sizeBmpWithMargins.x; + rectButton.width -= sizeBmpWithMargins.x; + break; + + case wxRIGHT: + rectBitmap.x = rectButton.GetRight() - sizeBmp.x - margin.x; + rectButton.width -= sizeBmpWithMargins.x; + break; + + case wxTOP: + rectBitmap.y = rectButton.y + margin.y; + rectButton.y += sizeBmpWithMargins.y; + rectButton.height -= sizeBmpWithMargins.y; + break; + + case wxBOTTOM: + rectBitmap.y = rectButton.GetBottom() - sizeBmp.y - margin.y; + rectButton.height -= sizeBmpWithMargins.y; + break; + } + } + + wxDCTemp dst((WXHDC)hdc); + dst.DrawBitmap(bmp, rectBitmap.GetPosition(), true); + + wxCopyRectToRECT(rectButton, rectBtn); + } + + + // finally draw the label + if ( ShowsLabel() ) + { + COLORREF colFg = state & ODS_DISABLED + ? ::GetSysColor(COLOR_GRAYTEXT) + : wxColourToRGB(GetForegroundColour()); + + wxTextColoursChanger changeFg(hdc, colFg, CLR_INVALID); + wxBkModeChanger changeBkMode(hdc, wxBRUSHSTYLE_TRANSPARENT); + +#if wxUSE_MARKUP + if ( m_markupText ) + { + wxDCTemp dc((WXHDC)hdc); + dc.SetTextForeground(wxColour(colFg)); + dc.SetFont(GetFont()); + + m_markupText->Render(dc, wxRectFromRECT(rectBtn), + state & ODS_NOACCEL + ? wxMarkupText::Render_Default + : wxMarkupText::Render_ShowAccels); + } + else // Plain text label +#endif // wxUSE_MARKUP + { + // notice that DT_HIDEPREFIX doesn't work on old (pre-Windows 2000) + // systems but by happy coincidence ODS_NOACCEL is not used under + // them neither so DT_HIDEPREFIX should never be used there + DrawButtonText(hdc, &rectBtn, this, + state & ODS_NOACCEL ? DT_HIDEPREFIX : 0); + } + } + + return true; +} + +#endif // wxHAS_ANY_BUTTON diff --git a/Externals/wxWidgets3/src/msw/artmsw.cpp b/Externals/wxWidgets3/src/msw/artmsw.cpp index 7f7ed5a855..b12355da80 100644 --- a/Externals/wxWidgets3/src/msw/artmsw.cpp +++ b/Externals/wxWidgets3/src/msw/artmsw.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Modified by: // Created: 2008-10-15 -// RCS-ID: $Id: artmsw.cpp 62199 2009-09-29 17:04:08Z VS $ +// RCS-ID: $Id: artmsw.cpp 70154 2011-12-28 13:51:29Z VZ $ // Copyright: (c) Vaclav Slavik, 2008 // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -91,7 +91,7 @@ wxBitmap wxWindowsArtProvider::CreateBitmap(const wxArtID& id, /*static*/ void wxArtProvider::InitNativeProvider() { - Push(new wxWindowsArtProvider); + PushBack(new wxWindowsArtProvider); } // ---------------------------------------------------------------------------- @@ -124,6 +124,10 @@ wxSize wxArtProvider::GetNativeSizeHint(const wxArtClient& client) { return wxSize(16, 16); } + else if (client == wxART_LIST) + { + return wxSize(16, 16); + } return wxDefaultSize; } diff --git a/Externals/wxWidgets3/src/msw/bitmap.cpp b/Externals/wxWidgets3/src/msw/bitmap.cpp index be335ae726..624cabfff6 100644 --- a/Externals/wxWidgets3/src/msw/bitmap.cpp +++ b/Externals/wxWidgets3/src/msw/bitmap.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: bitmap.cpp 65962 2010-10-30 23:51:09Z VZ $ +// RCS-ID: $Id: bitmap.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -387,7 +387,7 @@ bool wxBitmap::CopyFromCursor(const wxCursor& cursor, wxBitmapTransparency trans { UnRef(); - if ( !cursor.Ok() ) + if ( !cursor.IsOk() ) return false; return CopyFromIconOrCursor(cursor, transp); @@ -397,7 +397,7 @@ bool wxBitmap::CopyFromIcon(const wxIcon& icon, wxBitmapTransparency transp) { UnRef(); - if ( !icon.Ok() ) + if ( !icon.IsOk() ) return false; return CopyFromIconOrCursor(icon, transp); @@ -605,7 +605,7 @@ bool wxBitmap::DoCreate(int w, int h, int d, WXHDC hdc) SetHBITMAP((WXHBITMAP)hbmp); - return Ok(); + return IsOk(); } #if wxUSE_IMAGE @@ -739,7 +739,7 @@ wxImage wxBitmap::ConvertToImage() const // so the 'depth' argument is ignored. // TODO: transparency (create a mask image) - if (!Ok()) + if (!IsOk()) { wxFAIL_MSG( wxT("bitmap is invalid") ); return wxNullImage; @@ -747,7 +747,7 @@ wxImage wxBitmap::ConvertToImage() const wxImage image; - wxCHECK_MSG( Ok(), wxNullImage, wxT("invalid bitmap") ); + wxCHECK_MSG( IsOk(), wxNullImage, wxT("invalid bitmap") ); // create an wxImage object int width = GetWidth(); @@ -823,7 +823,7 @@ bool wxBitmap::CreateFromImage(const wxImage& image, const wxDC& dc) bool wxBitmap::CreateFromImage(const wxImage& image, int depth, WXHDC hdc) { - wxCHECK_MSG( image.Ok(), false, wxT("invalid image") ); + wxCHECK_MSG( image.IsOk(), false, wxT("invalid image") ); UnRef(); @@ -929,7 +929,7 @@ wxImage wxBitmap::ConvertToImage() const // and then DIB to our wxImage wxImage image = dib.ConvertToImage(); - if ( !image.Ok() ) + if ( !image.IsOk() ) { return wxNullImage; } @@ -1039,7 +1039,7 @@ bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type) else // no bitmap handler found { wxImage image; - if ( image.LoadFile( filename, type ) && image.Ok() ) + if ( image.LoadFile( filename, type ) && image.IsOk() ) { *this = wxBitmap(image); @@ -1084,7 +1084,7 @@ bool wxBitmap::SaveFile(const wxString& filename, { // FIXME what about palette? shouldn't we use it? wxImage image = ConvertToImage(); - if ( image.Ok() ) + if ( image.IsOk() ) { return image.SaveFile(filename, type); } @@ -1106,14 +1106,14 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect ) const wxBitmap wxBitmap::GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const { - wxCHECK_MSG( Ok() && + wxCHECK_MSG( IsOk() && (rect.x >= 0) && (rect.y >= 0) && (rect.x+rect.width <= GetWidth()) && (rect.y+rect.height <= GetHeight()), wxNullBitmap, wxT("Invalid bitmap or bitmap region") ); wxBitmap ret( rect.width, rect.height, GetDepth() ); - wxASSERT_MSG( ret.Ok(), wxT("GetSubBitmap error") ); + wxASSERT_MSG( ret.IsOk(), wxT("GetSubBitmap error") ); #ifndef __WXMICROWIN__ // handle alpha channel, if any @@ -1248,7 +1248,7 @@ void wxBitmap::SetMask(wxMask *mask) void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp) { #if wxUSE_WXDIB - if ( !Ok() ) + if ( !IsOk() ) { // no bitmap, no data (raw or otherwise) return NULL; @@ -1326,7 +1326,7 @@ void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp) void wxBitmap::UngetRawData(wxPixelDataBase& dataBase) { #if wxUSE_WXDIB - if ( !Ok() ) + if ( !IsOk() ) return; if ( !&dataBase ) @@ -1427,7 +1427,7 @@ wxMask::~wxMask() bool wxMask::Create(const wxBitmap& bitmap) { #ifndef __WXMICROWIN__ - wxCHECK_MSG( bitmap.Ok() && bitmap.GetDepth() == 1, false, + wxCHECK_MSG( bitmap.IsOk() && bitmap.GetDepth() == 1, false, wxT("can't create mask from invalid or not monochrome bitmap") ); if ( m_maskBitmap ) @@ -1468,7 +1468,7 @@ bool wxMask::Create(const wxBitmap& bitmap, int paletteIndex) } #if wxUSE_PALETTE - if (bitmap.Ok() && bitmap.GetPalette()->Ok()) + if (bitmap.IsOk() && bitmap.GetPalette()->IsOk()) { unsigned char red, green, blue; if (bitmap.GetPalette()->GetRGB(paletteIndex, &red, &green, &blue)) @@ -1487,7 +1487,7 @@ bool wxMask::Create(const wxBitmap& bitmap, int paletteIndex) bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour) { #ifndef __WXMICROWIN__ - wxCHECK_MSG( bitmap.Ok(), false, wxT("invalid bitmap in wxMask::Create") ); + wxCHECK_MSG( bitmap.IsOk(), false, wxT("invalid bitmap in wxMask::Create") ); if ( m_maskBitmap ) { @@ -1625,7 +1625,7 @@ HICON wxBitmapToIconOrCursor(const wxBitmap& bmp, int hotSpotX, int hotSpotY) { - if ( !bmp.Ok() ) + if ( !bmp.IsOk() ) { // we can't create an icon/cursor form nothing return 0; diff --git a/Externals/wxWidgets3/src/msw/bmpbuttn.cpp b/Externals/wxWidgets3/src/msw/bmpbuttn.cpp index ba28d5db69..76a63576c7 100644 --- a/Externals/wxWidgets3/src/msw/bmpbuttn.cpp +++ b/Externals/wxWidgets3/src/msw/bmpbuttn.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: bmpbuttn.cpp 66555 2011-01-04 08:31:53Z SC $ +// RCS-ID: $Id: bmpbuttn.cpp 67931 2011-06-14 13:00:42Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -80,7 +80,8 @@ bool wxBitmapButton::Create(wxWindow *parent, validator, name) ) return false; - SetBitmapLabel(bitmap); + if ( bitmap.IsOk() ) + SetBitmapLabel(bitmap); if ( !size.IsFullySpecified() ) { @@ -92,54 +93,4 @@ bool wxBitmapButton::Create(wxWindow *parent, return true; } -void wxBitmapButton::DoSetBitmap(const wxBitmap& bitmap, State which) -{ - if ( bitmap.IsOk() ) - { - switch ( which ) - { -#if wxUSE_IMAGE - case State_Normal: - if ( !HasFlag(wxBU_AUTODRAW) && !m_disabledSetByUser ) - { - wxImage img(bitmap.ConvertToImage().ConvertToGreyscale()); - wxBitmapButtonBase::DoSetBitmap(img, State_Disabled); - } - break; -#endif // wxUSE_IMAGE - - case State_Focused: - // if the focus bitmap is specified but current one isn't, use - // the focus bitmap for hovering as well if this is consistent - // with the current Windows version look and feel - // - // rationale: this is compatible with the old wxGTK behaviour - // and also makes it much easier to do "the right thing" for - // all platforms (some of them, such as Windows XP, have "hot" - // buttons while others don't) - if ( !m_hoverSetByUser ) - wxBitmapButtonBase::DoSetBitmap(bitmap, State_Current); - break; - - case State_Current: - // don't overwrite it with the focused bitmap - m_hoverSetByUser = true; - break; - - case State_Disabled: - // don't overwrite it with the version automatically created - // from the normal one - m_disabledSetByUser = true; - break; - - default: - // nothing special to do but include the default clause to - // suppress gcc warnings - ; - } - } - - wxBitmapButtonBase::DoSetBitmap(bitmap, which); -} - #endif // wxUSE_BMPBUTTON diff --git a/Externals/wxWidgets3/src/msw/bmpcbox.cpp b/Externals/wxWidgets3/src/msw/bmpcbox.cpp index 37fbfc70b8..ef7deffc98 100644 --- a/Externals/wxWidgets3/src/msw/bmpcbox.cpp +++ b/Externals/wxWidgets3/src/msw/bmpcbox.cpp @@ -3,7 +3,7 @@ // Purpose: wxBitmapComboBox // Author: Jaakko Salli // Created: 2008-04-06 -// RCS-ID: $Id: bmpcbox.cpp 67254 2011-03-20 00:14:35Z DS $ +// RCS-ID: $Id: bmpcbox.cpp 70039 2011-12-17 23:52:43Z VZ $ // Copyright: (c) 2008 Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -257,6 +257,16 @@ int wxBitmapComboBox::Insert(const wxString& item, return n; } +int wxBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap, + unsigned int pos, void *clientData) +{ + OnAddBitmap(bitmap); + const int n = wxComboBox::Insert(item, pos, clientData); + if ( n != wxNOT_FOUND ) + DoSetItemBitmap(n, bitmap); + return n; +} + int wxBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap, unsigned int pos, wxClientData *clientData) { diff --git a/Externals/wxWidgets3/src/msw/brush.cpp b/Externals/wxWidgets3/src/msw/brush.cpp index 795a7a773e..a4300be424 100644 --- a/Externals/wxWidgets3/src/msw/brush.cpp +++ b/Externals/wxWidgets3/src/msw/brush.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: brush.cpp 61508 2009-07-23 20:30:22Z VZ $ +// RCS-ID: $Id: brush.cpp 67681 2011-05-03 16:29:04Z DS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -277,28 +277,28 @@ wxGDIRefData *wxBrush::CloneGDIRefData(const wxGDIRefData *data) const wxColour wxBrush::GetColour() const { - wxCHECK_MSG( Ok(), wxNullColour, wxT("invalid brush") ); + wxCHECK_MSG( IsOk(), wxNullColour, wxT("invalid brush") ); return M_BRUSHDATA->GetColour(); } wxBrushStyle wxBrush::GetStyle() const { - wxCHECK_MSG( Ok(), wxBRUSHSTYLE_INVALID, wxT("invalid brush") ); + wxCHECK_MSG( IsOk(), wxBRUSHSTYLE_INVALID, wxT("invalid brush") ); return M_BRUSHDATA->GetStyle(); } wxBitmap *wxBrush::GetStipple() const { - wxCHECK_MSG( Ok(), NULL, wxT("invalid brush") ); + wxCHECK_MSG( IsOk(), NULL, wxT("invalid brush") ); return M_BRUSHDATA->GetStipple(); } WXHANDLE wxBrush::GetResourceHandle() const { - wxCHECK_MSG( Ok(), FALSE, wxT("invalid brush") ); + wxCHECK_MSG( IsOk(), FALSE, wxT("invalid brush") ); return (WXHANDLE)M_BRUSHDATA->GetHBRUSH(); } diff --git a/Externals/wxWidgets3/src/msw/button.cpp b/Externals/wxWidgets3/src/msw/button.cpp index fa3bc61418..cdf3a823d8 100644 --- a/Externals/wxWidgets3/src/msw/button.cpp +++ b/Externals/wxWidgets3/src/msw/button.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: button.cpp 67284 2011-03-22 17:15:34Z VZ $ +// RCS-ID: $Id: button.cpp 69984 2011-12-11 17:03:56Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -52,402 +52,24 @@ #include "wx/generic/private/markuptext.h" #endif // wxUSE_MARKUP -using namespace wxMSWImpl; - -#if wxUSE_UXTHEME - #include "wx/msw/uxtheme.h" - - // no need to include tmschema.h - #ifndef BP_PUSHBUTTON - #define BP_PUSHBUTTON 1 - - #define PBS_NORMAL 1 - #define PBS_HOT 2 - #define PBS_PRESSED 3 - #define PBS_DISABLED 4 - #define PBS_DEFAULTED 5 - - #define TMT_CONTENTMARGINS 3602 - #endif - - // provide the necessary declarations ourselves if they're missing from - // headers - #ifndef BCM_SETIMAGELIST - #define BCM_SETIMAGELIST 0x1602 - #define BCM_SETTEXTMARGIN 0x1604 - - enum - { - BUTTON_IMAGELIST_ALIGN_LEFT, - BUTTON_IMAGELIST_ALIGN_RIGHT, - BUTTON_IMAGELIST_ALIGN_TOP, - BUTTON_IMAGELIST_ALIGN_BOTTOM - }; - - struct BUTTON_IMAGELIST - { - HIMAGELIST himl; - RECT margin; - UINT uAlign; - }; - #endif -#endif // wxUSE_UXTHEME - -#ifndef WM_THEMECHANGED - #define WM_THEMECHANGED 0x031A -#endif - -#ifndef ODS_NOACCEL - #define ODS_NOACCEL 0x0100 -#endif - -#ifndef ODS_NOFOCUSRECT - #define ODS_NOFOCUSRECT 0x0200 -#endif - -#ifndef DT_HIDEPREFIX - #define DT_HIDEPREFIX 0x00100000 -#endif - // set the value for BCM_SETSHIELD (for the UAC shield) if it's not defined in // the header #ifndef BCM_SETSHIELD #define BCM_SETSHIELD 0x160c #endif -#if wxUSE_UXTHEME -extern wxWindowMSW *wxWindowBeingErased; // From src/msw/window.cpp -#endif // wxUSE_UXTHEME - -// ---------------------------------------------------------------------------- -// button image data -// ---------------------------------------------------------------------------- - -// we use different data classes for owner drawn buttons and for themed XP ones - -class wxButtonImageData -{ -public: - wxButtonImageData() { } - virtual ~wxButtonImageData() { } - - virtual wxBitmap GetBitmap(wxButton::State which) const = 0; - virtual void SetBitmap(const wxBitmap& bitmap, wxButton::State which) = 0; - - virtual wxSize GetBitmapMargins() const = 0; - virtual void SetBitmapMargins(wxCoord x, wxCoord y) = 0; - - virtual wxDirection GetBitmapPosition() const = 0; - virtual void SetBitmapPosition(wxDirection dir) = 0; - -private: - wxDECLARE_NO_COPY_CLASS(wxButtonImageData); -}; - -namespace -{ - -// the gap between button edge and the interior area used by Windows for the -// standard buttons -const int OD_BUTTON_MARGIN = 4; - -class wxODButtonImageData : public wxButtonImageData -{ -public: - wxODButtonImageData(wxButton *btn, const wxBitmap& bitmap) - { - SetBitmap(bitmap, wxButton::State_Normal); - SetBitmap(bitmap.ConvertToDisabled(), wxButton::State_Disabled); - - m_dir = wxLEFT; - - // we use margins when we have both bitmap and text, but when we have - // only the bitmap it should take up the entire button area - if ( btn->ShowsLabel() ) - { - m_margin.x = btn->GetCharWidth(); - m_margin.y = btn->GetCharHeight() / 2; - } - } - - virtual wxBitmap GetBitmap(wxButton::State which) const - { - return m_bitmaps[which]; - } - - virtual void SetBitmap(const wxBitmap& bitmap, wxButton::State which) - { - m_bitmaps[which] = bitmap; - } - - virtual wxSize GetBitmapMargins() const - { - return m_margin; - } - - virtual void SetBitmapMargins(wxCoord x, wxCoord y) - { - m_margin = wxSize(x, y); - } - - virtual wxDirection GetBitmapPosition() const - { - return m_dir; - } - - virtual void SetBitmapPosition(wxDirection dir) - { - m_dir = dir; - } - -private: - // just store the values passed to us to be able to retrieve them later - // from the drawing code - wxBitmap m_bitmaps[wxButton::State_Max]; - wxSize m_margin; - wxDirection m_dir; - - wxDECLARE_NO_COPY_CLASS(wxODButtonImageData); -}; - -#if wxUSE_UXTHEME - -// somehow the margin is one pixel greater than the value returned by -// GetThemeMargins() call -const int XP_BUTTON_EXTRA_MARGIN = 1; - -class wxXPButtonImageData : public wxButtonImageData -{ -public: - // we must be constructed with the size of our images as we need to create - // the image list - wxXPButtonImageData(wxButton *btn, const wxBitmap& bitmap) - : m_iml(bitmap.GetWidth(), bitmap.GetHeight(), true /* use mask */, - wxButton::State_Max), - m_hwndBtn(GetHwndOf(btn)) - { - // initialize all bitmaps except for the disabled one to normal state - for ( int n = 0; n < wxButton::State_Max; n++ ) - { - m_iml.Add(n == wxButton::State_Disabled ? bitmap.ConvertToDisabled() - : bitmap); - } - - m_data.himl = GetHimagelistOf(&m_iml); - - // no margins by default - m_data.margin.left = - m_data.margin.right = - m_data.margin.top = - m_data.margin.bottom = 0; - - // use default alignment - m_data.uAlign = BUTTON_IMAGELIST_ALIGN_LEFT; - - UpdateImageInfo(); - } - - virtual wxBitmap GetBitmap(wxButton::State which) const - { - return m_iml.GetBitmap(which); - } - - virtual void SetBitmap(const wxBitmap& bitmap, wxButton::State which) - { - m_iml.Replace(which, bitmap); - - UpdateImageInfo(); - } - - virtual wxSize GetBitmapMargins() const - { - return wxSize(m_data.margin.left, m_data.margin.top); - } - - virtual void SetBitmapMargins(wxCoord x, wxCoord y) - { - RECT& margin = m_data.margin; - margin.left = - margin.right = x; - margin.top = - margin.bottom = y; - - if ( !::SendMessage(m_hwndBtn, BCM_SETTEXTMARGIN, 0, (LPARAM)&margin) ) - { - wxLogDebug("SendMessage(BCM_SETTEXTMARGIN) failed"); - } - } - - virtual wxDirection GetBitmapPosition() const - { - switch ( m_data.uAlign ) - { - default: - wxFAIL_MSG( "invalid image alignment" ); - // fall through - - case BUTTON_IMAGELIST_ALIGN_LEFT: - return wxLEFT; - - case BUTTON_IMAGELIST_ALIGN_RIGHT: - return wxRIGHT; - - case BUTTON_IMAGELIST_ALIGN_TOP: - return wxTOP; - - case BUTTON_IMAGELIST_ALIGN_BOTTOM: - return wxBOTTOM; - } - } - - virtual void SetBitmapPosition(wxDirection dir) - { - UINT alignNew; - switch ( dir ) - { - default: - wxFAIL_MSG( "invalid direction" ); - // fall through - - case wxLEFT: - alignNew = BUTTON_IMAGELIST_ALIGN_LEFT; - break; - - case wxRIGHT: - alignNew = BUTTON_IMAGELIST_ALIGN_RIGHT; - break; - - case wxTOP: - alignNew = BUTTON_IMAGELIST_ALIGN_TOP; - break; - - case wxBOTTOM: - alignNew = BUTTON_IMAGELIST_ALIGN_BOTTOM; - break; - } - - if ( alignNew != m_data.uAlign ) - { - m_data.uAlign = alignNew; - UpdateImageInfo(); - } - } - -private: - void UpdateImageInfo() - { - if ( !::SendMessage(m_hwndBtn, BCM_SETIMAGELIST, 0, (LPARAM)&m_data) ) - { - wxLogDebug("SendMessage(BCM_SETIMAGELIST) failed"); - } - } - - // we store image list separately to be able to use convenient wxImageList - // methods instead of working with raw HIMAGELIST - wxImageList m_iml; - - // store the rest of the data in BCM_SETIMAGELIST-friendly form - BUTTON_IMAGELIST m_data; - - // the button we're associated with - const HWND m_hwndBtn; - - - wxDECLARE_NO_COPY_CLASS(wxXPButtonImageData); -}; - -#endif // wxUSE_UXTHEME - -} // anonymous namespace - // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(wxButton, wxButtonBase) + EVT_CHAR_HOOK(wxButton::OnCharHook) +END_EVENT_TABLE() + // ============================================================================ // implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// helper functions from wx/msw/private/button.h -// ---------------------------------------------------------------------------- - -void wxMSWButton::UpdateMultilineStyle(HWND hwnd, const wxString& label) -{ - // update BS_MULTILINE style depending on the new label (resetting it - // doesn't seem to do anything very useful but it shouldn't hurt and we do - // have to set it whenever the label becomes multi line as otherwise it - // wouldn't be shown correctly as we don't use BS_MULTILINE when creating - // the control unless it already has new lines in its label) - long styleOld = ::GetWindowLong(hwnd, GWL_STYLE), - styleNew; - if ( label.find(wxT('\n')) != wxString::npos ) - styleNew = styleOld | BS_MULTILINE; - else - styleNew = styleOld & ~BS_MULTILINE; - - if ( styleNew != styleOld ) - ::SetWindowLong(hwnd, GWL_STYLE, styleNew); -} - -wxSize wxMSWButton::GetFittingSize(wxWindow *win, - const wxSize& sizeLabel, - int flags) -{ - // FIXME: this is pure guesswork, need to retrieve the real button margins - wxSize sizeBtn = sizeLabel; - - sizeBtn.x += 3*win->GetCharWidth(); - sizeBtn.y += win->GetCharHeight()/2; - - // account for the shield UAC icon if we have it - if ( flags & Size_AuthNeeded ) - sizeBtn.x += wxSystemSettings::GetMetric(wxSYS_SMALLICON_X); - - return sizeBtn; -} - -wxSize wxMSWButton::ComputeBestFittingSize(wxControl *btn, int flags) -{ - wxClientDC dc(btn); - - wxSize sizeBtn; - dc.GetMultiLineTextExtent(btn->GetLabelText(), &sizeBtn.x, &sizeBtn.y); - - return GetFittingSize(btn, sizeBtn, flags); -} - -wxSize wxMSWButton::IncreaseToStdSizeAndCache(wxControl *btn, const wxSize& size) -{ - wxSize sizeBtn(size); - - // All buttons have at least the standard height and, unless the user - // explicitly wants them to be as small as possible and used wxBU_EXACTFIT - // style to indicate this, of at least the standard width too. - // - // Notice that we really want to make all buttons equally high, otherwise - // they look ugly and the existing code using wxBU_EXACTFIT only uses it to - // control width and not height. - - // The 50x14 button size is documented in the "Recommended sizing and - // spacing" section of MSDN layout article. - // - // Note that we intentionally don't use GetDefaultSize() here, because - // it's inexact -- dialog units depend on this dialog's font. - const wxSize sizeDef = btn->ConvertDialogToPixels(wxSize(50, 14)); - if ( !btn->HasFlag(wxBU_EXACTFIT) ) - { - if ( sizeBtn.x < sizeDef.x ) - sizeBtn.x = sizeDef.x; - } - if ( sizeBtn.y < sizeDef.y ) - sizeBtn.y = sizeDef.y; - - btn->CacheBestSize(sizeBtn); - - return sizeBtn; -} - // ---------------------------------------------------------------------------- // creation/destruction // ---------------------------------------------------------------------------- @@ -498,11 +120,6 @@ wxButton::~wxButton() { UnsetTmpDefault(); } - - delete m_imageData; -#if wxUSE_MARKUP - delete m_markupText; -#endif // wxUSE_MARKUP } // ---------------------------------------------------------------------------- @@ -518,7 +135,7 @@ WXDWORD wxButton::MSWGetStyle(long style, WXDWORD *exstyle) const ); // we must use WS_CLIPSIBLINGS with the buttons or they would draw over - // each other in any resizeable dialog which has more than one button in + // each other in any resizable dialog which has more than one button in // the bottom msStyle |= WS_CLIPSIBLINGS; @@ -541,132 +158,6 @@ WXDWORD wxButton::MSWGetStyle(long style, WXDWORD *exstyle) const return msStyle; } -void wxButton::SetLabel(const wxString& label) -{ - wxMSWButton::UpdateMultilineStyle(GetHwnd(), label); - - wxButtonBase::SetLabel(label); - -#if wxUSE_MARKUP - // If we have a plain text label, we shouldn't be using markup any longer. - if ( m_markupText ) - { - delete m_markupText; - m_markupText = NULL; - - // Unfortunately we don't really know whether we can reset the button - // to be non-owner-drawn or not: if we had made it owner-drawn just - // because of a call to SetLabelMarkup(), we could, but not if there - // were [also] calls to Set{Fore,Back}groundColour(). If it's really a - // problem to have button remain owner-drawn forever just because it - // had markup label once, we should record the reason for our current - // owner-drawnness and check it here. - } -#endif // wxUSE_MARKUP -} - -// ---------------------------------------------------------------------------- -// size management including autosizing -// ---------------------------------------------------------------------------- - -void wxButton::AdjustForBitmapSize(wxSize &size) const -{ - wxCHECK_RET( m_imageData, wxT("shouldn't be called if no image") ); - - // account for the bitmap size - const wxSize sizeBmp = m_imageData->GetBitmap(State_Normal).GetSize(); - const wxDirection dirBmp = m_imageData->GetBitmapPosition(); - if ( dirBmp == wxLEFT || dirBmp == wxRIGHT ) - { - size.x += sizeBmp.x; - if ( sizeBmp.y > size.y ) - size.y = sizeBmp.y; - } - else // bitmap on top/below the text - { - size.y += sizeBmp.y; - if ( sizeBmp.x > size.x ) - size.x = sizeBmp.x; - } - - // account for the user-specified margins - size += 2*m_imageData->GetBitmapMargins(); - - // and also for the margins we always add internally (unless we have no - // border at all in which case the button has exactly the same size as - // bitmap and so no margins should be used) - if ( !HasFlag(wxBORDER_NONE) ) - { - int marginH = 0, - marginV = 0; -#if wxUSE_UXTHEME - if ( wxUxThemeEngine::GetIfActive() ) - { - wxUxThemeHandle theme(const_cast(this), L"BUTTON"); - - MARGINS margins; - wxUxThemeEngine::Get()->GetThemeMargins(theme, NULL, - BP_PUSHBUTTON, - PBS_NORMAL, - TMT_CONTENTMARGINS, - NULL, - &margins); - - // XP doesn't draw themed buttons correctly when the client - // area is smaller than 8x8 - enforce this minimum size for - // small bitmaps - size.IncTo(wxSize(8, 8)); - - marginH = margins.cxLeftWidth + margins.cxRightWidth - + 2*XP_BUTTON_EXTRA_MARGIN; - marginV = margins.cyTopHeight + margins.cyBottomHeight - + 2*XP_BUTTON_EXTRA_MARGIN; - } - else -#endif // wxUSE_UXTHEME - { - marginH = - marginV = OD_BUTTON_MARGIN; - } - - size.IncBy(marginH, marginV); - } -} - -wxSize wxButton::DoGetBestSize() const -{ - wxButton * const self = const_cast(this); - - wxSize size; - - // Account for the text part if we have it. - if ( ShowsLabel() ) - { - int flags = 0; - if ( GetAuthNeeded() ) - flags |= wxMSWButton::Size_AuthNeeded; - -#if wxUSE_MARKUP - if ( m_markupText ) - { - wxClientDC dc(self); - size = wxMSWButton::GetFittingSize(self, - m_markupText->Measure(dc), - flags); - } - else // Normal plain text (but possibly multiline) label. -#endif // wxUSE_MARKUP - { - size = wxMSWButton::ComputeBestFittingSize(self, flags); - } - } - - if ( m_imageData ) - AdjustForBitmapSize(size); - - return wxMSWButton::IncreaseToStdSizeAndCache(self, size); -} - /* static */ wxSize wxButtonBase::GetDefaultSize() { @@ -883,6 +374,25 @@ void wxButton::Command(wxCommandEvent & event) // event/message handlers // ---------------------------------------------------------------------------- +void wxButton::OnCharHook(wxKeyEvent& event) +{ + // We want to ensure that the button always processes Enter key events + // itself, even if it's inside some control that normally takes over them + // (this happens when the button is part of an in-place editor control for + // example). + if ( event.GetKeyCode() == WXK_RETURN ) + { + // We should ensure that subsequent key events are still generated even + // if we did handle EVT_CHAR_HOOK (normally this would suppress their + // generation). + event.DoAllowNextEvent(); + } + else + { + event.Skip(); + } +} + bool wxButton::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) { bool processed = false; @@ -922,44 +432,9 @@ WXLRESULT wxButton::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { UnsetTmpDefault(); } - else if ( nMsg == WM_LBUTTONDBLCLK ) - { - // emulate a click event to force an owner-drawn button to change its - // appearance - without this, it won't do it - (void)wxControl::MSWWindowProc(WM_LBUTTONDOWN, wParam, lParam); - - // and continue with processing the message normally as well - } -#if wxUSE_UXTHEME - else if ( nMsg == WM_THEMECHANGED ) - { - // need to recalculate the best size here - // as the theme size might have changed - InvalidateBestSize(); - } -#endif // wxUSE_UXTHEME - // must use m_mouseInWindow here instead of IsMouseInWindow() - // since we need to know the first time the mouse enters the window - // and IsMouseInWindow() would return true in this case - else if ( (nMsg == WM_MOUSEMOVE && !m_mouseInWindow) || - nMsg == WM_MOUSELEAVE ) - { - if ( - IsEnabled() && - ( -#if wxUSE_UXTHEME - wxUxThemeEngine::GetIfActive() || -#endif // wxUSE_UXTHEME - (m_imageData && m_imageData->GetBitmap(State_Current).IsOk()) - ) - ) - { - Refresh(); - } - } // let the base class do all real processing - return wxControl::MSWWindowProc(nMsg, wParam, lParam); + return wxAnyButton::MSWWindowProc(nMsg, wParam, lParam); } // ---------------------------------------------------------------------------- @@ -982,586 +457,5 @@ void wxButton::DoSetAuthNeeded(bool show) } } -// ---------------------------------------------------------------------------- -// button images -// ---------------------------------------------------------------------------- - -wxBitmap wxButton::DoGetBitmap(State which) const -{ - return m_imageData ? m_imageData->GetBitmap(which) : wxBitmap(); -} - -void wxButton::DoSetBitmap(const wxBitmap& bitmap, State which) -{ -#if wxUSE_UXTHEME - wxXPButtonImageData *oldData = NULL; -#endif // wxUSE_UXTHEME - - // Check if we already had bitmaps of different size. - if ( m_imageData && - bitmap.GetSize() != m_imageData->GetBitmap(State_Normal).GetSize() ) - { - wxASSERT_MSG( which == State_Normal, - "Must set normal bitmap with the new size first" ); - -#if wxUSE_UXTHEME - if ( ShowsLabel() && wxUxThemeEngine::GetIfActive() ) - { - // We can't change the size of the images stored in wxImageList - // in wxXPButtonImageData::m_iml so force recreating it below but - // keep the current data to copy its values into the new one. - oldData = static_cast(m_imageData); - m_imageData = NULL; - } -#endif // wxUSE_UXTHEME - //else: wxODButtonImageData doesn't require anything special - } - - // allocate the image data when the first bitmap is set - if ( !m_imageData ) - { -#if wxUSE_UXTHEME - // using image list doesn't work correctly if we don't have any label - // (even if we use BUTTON_IMAGELIST_ALIGN_CENTER alignment and - // BS_BITMAP style), at least under Windows 2003 so use owner drawn - // strategy for bitmap-only buttons - if ( ShowsLabel() && wxUxThemeEngine::GetIfActive() ) - { - m_imageData = new wxXPButtonImageData(this, bitmap); - - if ( oldData ) - { - // Preserve the old values in case the user changed them. - m_imageData->SetBitmapPosition(oldData->GetBitmapPosition()); - - const wxSize oldMargins = oldData->GetBitmapMargins(); - m_imageData->SetBitmapMargins(oldMargins.x, oldMargins.y); - - // No need to preserve the bitmaps though as they were of wrong - // size anyhow. - - delete oldData; - } - } - else -#endif // wxUSE_UXTHEME - { - m_imageData = new wxODButtonImageData(this, bitmap); - MakeOwnerDrawn(); - } - } - else - { - m_imageData->SetBitmap(bitmap, which); - } - - // it should be enough to only invalidate the best size when the normal - // bitmap changes as all bitmaps assigned to the button should be of the - // same size anyhow - if ( which == State_Normal ) - InvalidateBestSize(); - - Refresh(); -} - -wxSize wxButton::DoGetBitmapMargins() const -{ - return m_imageData ? m_imageData->GetBitmapMargins() : wxSize(0, 0); -} - -void wxButton::DoSetBitmapMargins(wxCoord x, wxCoord y) -{ - wxCHECK_RET( m_imageData, "SetBitmap() must be called first" ); - - m_imageData->SetBitmapMargins(x, y); - InvalidateBestSize(); -} - -void wxButton::DoSetBitmapPosition(wxDirection dir) -{ - wxCHECK_RET( m_imageData, "SetBitmap() must be called first" ); - - m_imageData->SetBitmapPosition(dir); - InvalidateBestSize(); -} - -// ---------------------------------------------------------------------------- -// markup support -// ---------------------------------------------------------------------------- - -#if wxUSE_MARKUP - -bool wxButton::DoSetLabelMarkup(const wxString& markup) -{ - if ( !wxButtonBase::DoSetLabelMarkup(markup) ) - return false; - - if ( !m_markupText ) - { - m_markupText = new wxMarkupText(markup); - MakeOwnerDrawn(); - } - else - { - // We are already owner-drawn so just update the text. - m_markupText->SetMarkup(markup); - } - - Refresh(); - - return true; -} - -#endif // wxUSE_MARKUP - -// ---------------------------------------------------------------------------- -// owner-drawn buttons support -// ---------------------------------------------------------------------------- - -// drawing helpers -namespace -{ - -// return the button state using both the ODS_XXX flags specified in state -// parameter and the current button state -wxButton::State GetButtonState(wxButton *btn, UINT state) -{ - if ( state & ODS_DISABLED ) - return wxButton::State_Disabled; - - if ( state & ODS_SELECTED ) - return wxButton::State_Pressed; - - if ( btn->HasCapture() || btn->IsMouseInWindow() ) - return wxButton::State_Current; - - if ( state & ODS_FOCUS ) - return wxButton::State_Focused; - - return wxButton::State_Normal; -} - -void DrawButtonText(HDC hdc, - RECT *pRect, - wxButton *btn, - int flags) -{ - const wxString text = btn->GetLabel(); - - if ( text.find(wxT('\n')) != wxString::npos ) - { - // draw multiline label - - // center text horizontally in any case - flags |= DT_CENTER; - - // first we need to compute its bounding rect - RECT rc; - ::CopyRect(&rc, pRect); - ::DrawText(hdc, text.wx_str(), text.length(), &rc, - DT_CENTER | DT_CALCRECT); - - // now center this rect inside the entire button area - const LONG w = rc.right - rc.left; - const LONG h = rc.bottom - rc.top; - rc.left = (pRect->right - pRect->left)/2 - w/2; - rc.right = rc.left+w; - rc.top = (pRect->bottom - pRect->top)/2 - h/2; - rc.bottom = rc.top+h; - - ::DrawText(hdc, text.wx_str(), text.length(), &rc, flags); - } - else // single line label - { - // translate wx button flags to alignment flags for DrawText() - if ( btn->HasFlag(wxBU_RIGHT) ) - { - flags |= DT_RIGHT; - } - else if ( !btn->HasFlag(wxBU_LEFT) ) - { - flags |= DT_CENTER; - } - //else: DT_LEFT is the default anyhow (and its value is 0 too) - - if ( btn->HasFlag(wxBU_BOTTOM) ) - { - flags |= DT_BOTTOM; - } - else if ( !btn->HasFlag(wxBU_TOP) ) - { - flags |= DT_VCENTER; - } - //else: as above, DT_TOP is the default - - // notice that we must have DT_SINGLELINE for vertical alignment flags - // to work - ::DrawText(hdc, text.wx_str(), text.length(), pRect, - flags | DT_SINGLELINE ); - } -} - -void DrawRect(HDC hdc, const RECT& r) -{ - wxDrawLine(hdc, r.left, r.top, r.right, r.top); - wxDrawLine(hdc, r.right, r.top, r.right, r.bottom); - wxDrawLine(hdc, r.right, r.bottom, r.left, r.bottom); - wxDrawLine(hdc, r.left, r.bottom, r.left, r.top); -} - -/* - The button frame looks like this normally: - - WWWWWWWWWWWWWWWWWWB - WHHHHHHHHHHHHHHHHGB W = white (HILIGHT) - WH GB H = light grey (LIGHT) - WH GB G = dark grey (SHADOW) - WH GB B = black (DKSHADOW) - WH GB - WGGGGGGGGGGGGGGGGGB - BBBBBBBBBBBBBBBBBBB - - When the button is selected, the button becomes like this (the total button - size doesn't change): - - BBBBBBBBBBBBBBBBBBB - BWWWWWWWWWWWWWWWWBB - BWHHHHHHHHHHHHHHGBB - BWH GBB - BWH GBB - BWGGGGGGGGGGGGGGGBB - BBBBBBBBBBBBBBBBBBB - BBBBBBBBBBBBBBBBBBB - - When the button is pushed (while selected) it is like: - - BBBBBBBBBBBBBBBBBBB - BGGGGGGGGGGGGGGGGGB - BG GB - BG GB - BG GB - BG GB - BGGGGGGGGGGGGGGGGGB - BBBBBBBBBBBBBBBBBBB -*/ -void DrawButtonFrame(HDC hdc, RECT& rectBtn, - bool selected, bool pushed) -{ - RECT r; - CopyRect(&r, &rectBtn); - - AutoHPEN hpenBlack(GetSysColor(COLOR_3DDKSHADOW)), - hpenGrey(GetSysColor(COLOR_3DSHADOW)), - hpenLightGr(GetSysColor(COLOR_3DLIGHT)), - hpenWhite(GetSysColor(COLOR_3DHILIGHT)); - - SelectInHDC selectPen(hdc, hpenBlack); - - r.right--; - r.bottom--; - - if ( pushed ) - { - DrawRect(hdc, r); - - (void)SelectObject(hdc, hpenGrey); - ::InflateRect(&r, -1, -1); - - DrawRect(hdc, r); - } - else // !pushed - { - if ( selected ) - { - DrawRect(hdc, r); - - ::InflateRect(&r, -1, -1); - } - - wxDrawLine(hdc, r.left, r.bottom, r.right, r.bottom); - wxDrawLine(hdc, r.right, r.bottom, r.right, r.top - 1); - - (void)SelectObject(hdc, hpenWhite); - wxDrawLine(hdc, r.left, r.bottom - 1, r.left, r.top); - wxDrawLine(hdc, r.left, r.top, r.right, r.top); - - (void)SelectObject(hdc, hpenLightGr); - wxDrawLine(hdc, r.left + 1, r.bottom - 2, r.left + 1, r.top + 1); - wxDrawLine(hdc, r.left + 1, r.top + 1, r.right - 1, r.top + 1); - - (void)SelectObject(hdc, hpenGrey); - wxDrawLine(hdc, r.left + 1, r.bottom - 1, r.right - 1, r.bottom - 1); - wxDrawLine(hdc, r.right - 1, r.bottom - 1, r.right - 1, r.top); - } - - InflateRect(&rectBtn, -OD_BUTTON_MARGIN, -OD_BUTTON_MARGIN); -} - -#if wxUSE_UXTHEME -void DrawXPBackground(wxButton *button, HDC hdc, RECT& rectBtn, UINT state) -{ - wxUxThemeHandle theme(button, L"BUTTON"); - - // this array is indexed by wxButton::State values and so must be kept in - // sync with it - static const int uxStates[] = - { - PBS_NORMAL, PBS_HOT, PBS_PRESSED, PBS_DISABLED, PBS_DEFAULTED - }; - - int iState = uxStates[GetButtonState(button, state)]; - - wxUxThemeEngine * const engine = wxUxThemeEngine::Get(); - - // draw parent background if needed - if ( engine->IsThemeBackgroundPartiallyTransparent - ( - theme, - BP_PUSHBUTTON, - iState - ) ) - { - // Set this button as the one whose background is being erased: this - // allows our WM_ERASEBKGND handler used by DrawThemeParentBackground() - // to correctly align the background brush with this window instead of - // the parent window to which WM_ERASEBKGND is sent. Notice that this - // doesn't work with custom user-defined EVT_ERASE_BACKGROUND handlers - // as they won't be aligned but unfortunately all the attempts to fix - // it by shifting DC origin before calling DrawThemeParentBackground() - // failed to work so we at least do this, even though this is far from - // being the perfect solution. - wxWindowBeingErased = button; - - engine->DrawThemeParentBackground(GetHwndOf(button), hdc, &rectBtn); - - wxWindowBeingErased = NULL; - } - - // draw background - engine->DrawThemeBackground(theme, hdc, BP_PUSHBUTTON, iState, - &rectBtn, NULL); - - // calculate content area margins - MARGINS margins; - engine->GetThemeMargins(theme, hdc, BP_PUSHBUTTON, iState, - TMT_CONTENTMARGINS, &rectBtn, &margins); - ::InflateRect(&rectBtn, -margins.cxLeftWidth, -margins.cyTopHeight); - ::InflateRect(&rectBtn, -XP_BUTTON_EXTRA_MARGIN, -XP_BUTTON_EXTRA_MARGIN); - - if ( button->UseBgCol() ) - { - COLORREF colBg = wxColourToRGB(button->GetBackgroundColour()); - AutoHBRUSH hbrushBackground(colBg); - - // don't overwrite the focus rect - RECT rectClient; - ::CopyRect(&rectClient, &rectBtn); - ::InflateRect(&rectClient, -1, -1); - FillRect(hdc, &rectClient, hbrushBackground); - } -} -#endif // wxUSE_UXTHEME - -} // anonymous namespace - -// ---------------------------------------------------------------------------- -// owner drawn buttons support -// ---------------------------------------------------------------------------- - -void wxButton::MakeOwnerDrawn() -{ - long style = GetWindowLong(GetHwnd(), GWL_STYLE); - if ( (style & BS_OWNERDRAW) != BS_OWNERDRAW ) - { - // make it so - style |= BS_OWNERDRAW; - SetWindowLong(GetHwnd(), GWL_STYLE, style); - } -} - -bool wxButton::SetBackgroundColour(const wxColour &colour) -{ - if ( !wxControl::SetBackgroundColour(colour) ) - { - // nothing to do - return false; - } - - MakeOwnerDrawn(); - - Refresh(); - - return true; -} - -bool wxButton::SetForegroundColour(const wxColour &colour) -{ - if ( !wxControl::SetForegroundColour(colour) ) - { - // nothing to do - return false; - } - - MakeOwnerDrawn(); - - Refresh(); - - return true; -} - -bool wxButton::MSWOnDraw(WXDRAWITEMSTRUCT *wxdis) -{ - LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT)wxdis; - HDC hdc = lpDIS->hDC; - - UINT state = lpDIS->itemState; - bool pushed = (SendMessage(GetHwnd(), BM_GETSTATE, 0, 0) & BST_PUSHED) != 0; - - RECT rectBtn; - CopyRect(&rectBtn, &lpDIS->rcItem); - - // draw the button background - if ( !HasFlag(wxBORDER_NONE) ) - { -#if wxUSE_UXTHEME - if ( wxUxThemeEngine::GetIfActive() ) - { - DrawXPBackground(this, hdc, rectBtn, state); - } - else -#endif // wxUSE_UXTHEME - { - COLORREF colBg = wxColourToRGB(GetBackgroundColour()); - - // first, draw the background - AutoHBRUSH hbrushBackground(colBg); - FillRect(hdc, &rectBtn, hbrushBackground); - - // draw the border for the current state - bool selected = (state & ODS_SELECTED) != 0; - if ( !selected ) - { - wxTopLevelWindow * - tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); - if ( tlw ) - { - selected = tlw->GetDefaultItem() == this; - } - } - - DrawButtonFrame(hdc, rectBtn, selected, pushed); - } - - // draw the focus rectangle if we need it - if ( (state & ODS_FOCUS) && !(state & ODS_NOFOCUSRECT) ) - { - DrawFocusRect(hdc, &rectBtn); - -#if wxUSE_UXTHEME - if ( !wxUxThemeEngine::GetIfActive() ) -#endif // wxUSE_UXTHEME - { - if ( pushed ) - { - // the label is shifted by 1 pixel to create "pushed" effect - OffsetRect(&rectBtn, 1, 1); - } - } - } - } - - - // draw the image, if any - if ( m_imageData ) - { - wxBitmap bmp = m_imageData->GetBitmap(GetButtonState(this, state)); - if ( !bmp.IsOk() ) - bmp = m_imageData->GetBitmap(State_Normal); - - const wxSize sizeBmp = bmp.GetSize(); - const wxSize margin = m_imageData->GetBitmapMargins(); - const wxSize sizeBmpWithMargins(sizeBmp + 2*margin); - wxRect rectButton(wxRectFromRECT(rectBtn)); - - // for simplicity, we start with centred rectangle and then move it to - // the appropriate edge - wxRect rectBitmap = wxRect(sizeBmp).CentreIn(rectButton); - - // move bitmap only if we have a label, otherwise keep it centered - if ( ShowsLabel() ) - { - switch ( m_imageData->GetBitmapPosition() ) - { - default: - wxFAIL_MSG( "invalid direction" ); - // fall through - - case wxLEFT: - rectBitmap.x = rectButton.x + margin.x; - rectButton.x += sizeBmpWithMargins.x; - rectButton.width -= sizeBmpWithMargins.x; - break; - - case wxRIGHT: - rectBitmap.x = rectButton.GetRight() - sizeBmp.x - margin.x; - rectButton.width -= sizeBmpWithMargins.x; - break; - - case wxTOP: - rectBitmap.y = rectButton.y + margin.y; - rectButton.y += sizeBmpWithMargins.y; - rectButton.height -= sizeBmpWithMargins.y; - break; - - case wxBOTTOM: - rectBitmap.y = rectButton.GetBottom() - sizeBmp.y - margin.y; - rectButton.height -= sizeBmpWithMargins.y; - break; - } - } - - wxDCTemp dst((WXHDC)hdc); - dst.DrawBitmap(bmp, rectBitmap.GetPosition(), true); - - wxCopyRectToRECT(rectButton, rectBtn); - } - - - // finally draw the label - if ( ShowsLabel() ) - { - COLORREF colFg = state & ODS_DISABLED - ? ::GetSysColor(COLOR_GRAYTEXT) - : wxColourToRGB(GetForegroundColour()); - - wxTextColoursChanger changeFg(hdc, colFg, CLR_INVALID); - wxBkModeChanger changeBkMode(hdc, wxBRUSHSTYLE_TRANSPARENT); - -#if wxUSE_MARKUP - if ( m_markupText ) - { - wxDCTemp dc((WXHDC)hdc); - dc.SetTextForeground(wxColour(colFg)); - dc.SetFont(GetFont()); - - m_markupText->Render(dc, wxRectFromRECT(rectBtn), - state & ODS_NOACCEL - ? wxMarkupText::Render_Default - : wxMarkupText::Render_ShowAccels); - } - else // Plain text label -#endif // wxUSE_MARKUP - { - // notice that DT_HIDEPREFIX doesn't work on old (pre-Windows 2000) - // systems but by happy coincidence ODS_NOACCEL is not used under - // them neither so DT_HIDEPREFIX should never be used there - DrawButtonText(hdc, &rectBtn, this, - state & ODS_NOACCEL ? DT_HIDEPREFIX : 0); - } - } - - return true; -} - #endif // wxUSE_BUTTON diff --git a/Externals/wxWidgets3/src/msw/calctrl.cpp b/Externals/wxWidgets3/src/msw/calctrl.cpp index ddbd321588..badc7e8821 100644 --- a/Externals/wxWidgets3/src/msw/calctrl.cpp +++ b/Externals/wxWidgets3/src/msw/calctrl.cpp @@ -3,7 +3,7 @@ // Purpose: wxCalendarCtrl implementation // Author: Vadim Zeitlin // Created: 2008-04-04 -// RCS-ID: $Id: calctrl.cpp 66558 2011-01-04 09:14:40Z SC $ +// RCS-ID: $Id: calctrl.cpp 70568 2012-02-11 16:26:47Z VZ $ // Copyright: (C) 2008 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -120,8 +120,8 @@ wxCalendarCtrl::Create(wxWindow *parent, SetDate(dt.IsValid() ? dt : wxDateTime::Today()); - if ( SetHolidayAttrs() ) - UpdateMarks(); + SetHolidayAttrs(); + UpdateMarks(); Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(wxCalendarCtrl::MSWOnClick)); @@ -396,10 +396,12 @@ void wxCalendarCtrl::SetHoliday(size_t day) void wxCalendarCtrl::UpdateMarks() { - // we show only one full month but there can be some days from the month - // before it and from the one after it so days from 3 different months can - // be partially shown - MONTHDAYSTATE states[3] = { 0 }; + // Currently the native control may show more than one month if its size is + // big enough. Ideal would be to prevent this from happening but there + // doesn't seem to be any obvious way to do it, so for now just handle the + // possibility that we can display several of them: one before the current + // one and up to 12 after it. + MONTHDAYSTATE states[14] = { 0 }; const DWORD nMonths = MonthCal_GetMonthRange(GetHwnd(), GMR_DAYSTATE, NULL); // although in principle the calendar might not show any days from the @@ -412,13 +414,9 @@ void wxCalendarCtrl::UpdateMarks() // in its window if you "zoom out" of it by double clicking on free areas // so the return value can be (much, in case of decades view) greater than // 3 but in this case marks are not visible anyhow so simply ignore it - if ( nMonths < WXSIZEOF(states) ) + if ( nMonths >= 2 && nMonths <= WXSIZEOF(states) ) { - wxFAIL_MSG("unexpectedly few months shown in the control"); - } - else if ( nMonths == WXSIZEOF(states) ) - { - // the fully visible month is the one in the middle + // The current, fully visible month is always the second one. states[1] = m_marks | m_holidays; if ( !MonthCal_SetDayState(GetHwnd(), nMonths, states) ) @@ -462,8 +460,8 @@ bool wxCalendarCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) { // month changed, need to update the holidays if we use // them - if ( SetHolidayAttrs() ) - UpdateMarks(); + SetHolidayAttrs(); + UpdateMarks(); } } } @@ -472,9 +470,24 @@ bool wxCalendarCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) case MCN_GETDAYSTATE: { const NMDAYSTATE * const ds = (NMDAYSTATE *)lParam; + + wxDateTime startDate; + startDate.SetFromMSWSysDate(ds->stStart); + + wxDateTime currentDate = m_date; + // Set to the start of month for comparison with startDate to + // work correctly. + currentDate.SetDay(1); + for ( int i = 0; i < ds->cDayState; i++ ) { - ds->prgDayState[i] = m_marks | m_holidays; + // set holiday/marks only for the "current" month + if ( startDate == currentDate ) + ds->prgDayState[i] = m_marks | m_holidays; + else + ds->prgDayState[i] = 0; + + startDate += wxDateSpan::Month(); } } break; diff --git a/Externals/wxWidgets3/src/msw/checkbox.cpp b/Externals/wxWidgets3/src/msw/checkbox.cpp index 064414e582..371dde59fa 100644 --- a/Externals/wxWidgets3/src/msw/checkbox.cpp +++ b/Externals/wxWidgets3/src/msw/checkbox.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: checkbox.cpp 66555 2011-01-04 08:31:53Z SC $ +// RCS-ID: $Id: checkbox.cpp 70015 2011-12-16 11:03:15Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -147,6 +147,19 @@ wxSize wxCheckBox::DoGetBestSize() const dc.GetMultiLineTextExtent(GetLabelText(str), &wCheckbox, &hCheckbox); wCheckbox += s_checkSize + GetCharWidth(); + if ( ::GetWindowLong(GetHwnd(), GWL_STYLE) & BS_MULTILINE ) + { + // We need to make the checkbox even wider in this case because + // otherwise it wraps lines automatically and not only on "\n"s as + // we need and this makes the size computed here wrong resulting in + // checkbox contents being truncated when it's actually displayed. + // Without this hack simple checkbox with "Some thing\n and more" + // label appears on 3 lines, not 2, under Windows 2003 using + // classic look and feel (although it works fine under Windows 7, + // with or without themes). + wCheckbox += s_checkSize; + } + if ( hCheckbox < s_checkSize ) hCheckbox = s_checkSize; } @@ -260,7 +273,7 @@ bool wxCheckBox::SetForegroundColour(const wxColour& colour) // the only way to change the checkbox foreground colour under Windows XP // is to owner draw it if ( wxUxThemeEngine::GetIfActive() ) - MakeOwnerDrawn(colour.Ok()); + MakeOwnerDrawn(colour.IsOk()); return true; } diff --git a/Externals/wxWidgets3/src/msw/choice.cpp b/Externals/wxWidgets3/src/msw/choice.cpp index eac398a30c..ce5c5510dc 100644 --- a/Externals/wxWidgets3/src/msw/choice.cpp +++ b/Externals/wxWidgets3/src/msw/choice.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: Vadim Zeitlin to derive from wxChoiceBase // Created: 04/01/98 -// RCS-ID: $Id: choice.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: choice.cpp 70870 2012-03-11 05:31:06Z JS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -86,10 +86,7 @@ bool wxChoice::CreateAndInit(wxWindow *parent, // initialize the controls contents - for ( int i = 0; i < n; i++ ) - { - Append(choices[i]); - } + Append(n, choices); // and now we may finally size the control properly (if needed) SetInitialSize(size); @@ -358,6 +355,10 @@ void wxChoice::SetString(unsigned int n, const wxString& s) else if ( HasClientObjectData() ) oldObjData = GetClientObject(n); + // and also the selection if we're going to delete the item that was + // selected + const bool wasSelected = static_cast(n) == GetSelection(); + ::SendMessage(GetHwnd(), CB_DELETESTRING, n, 0); ::SendMessage(GetHwnd(), CB_INSERTSTRING, n, (LPARAM)s.wx_str() ); @@ -367,6 +368,11 @@ void wxChoice::SetString(unsigned int n, const wxString& s) else if ( oldObjData ) SetClientObject(n, oldObjData); + // and the selection + if ( wasSelected ) + SetSelection(n); + + // the width could have changed so the best size needs to be recomputed InvalidateBestSize(); } @@ -408,7 +414,7 @@ void wxChoice::DoSetItemClientData(unsigned int n, void* clientData) void* wxChoice::DoGetItemClientData(unsigned int n) const { LPARAM rc = SendMessage(GetHwnd(), CB_GETITEMDATA, n, 0); - if ( rc == CB_ERR ) + if ( rc == CB_ERR && GetLastError() != ERROR_SUCCESS ) { wxLogLastError(wxT("CB_GETITEMDATA")); @@ -544,7 +550,10 @@ void wxChoice::DoSetSize(int x, int y, const int hItem = SendMessage(GetHwnd(), CB_GETITEMHEIGHT, 0, 0); int heightWithItems = 0; if (!HasFlag(wxCB_SIMPLE)) - heightWithItems = height + hItem*nItems; + // The extra item (" + 1") is required to prevent a vertical + // scrollbar from appearing with comctl32.dll versions earlier + // than 6.0 (such as found in Win2k). + heightWithItems = height + hItem*(nItems + 1); else heightWithItems = SetHeightSimpleComboBox(nItems); @@ -749,7 +758,7 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) WXHBRUSH wxChoice::MSWControlColor(WXHDC hDC, WXHWND hWnd) { - if ( !IsEnabled() ) + if ( !IsThisEnabled() ) return MSWControlColorDisabled(hDC); return wxChoiceBase::MSWControlColor(hDC, hWnd); diff --git a/Externals/wxWidgets3/src/msw/clipbrd.cpp b/Externals/wxWidgets3/src/msw/clipbrd.cpp index e64b118fa3..d994fed669 100644 --- a/Externals/wxWidgets3/src/msw/clipbrd.cpp +++ b/Externals/wxWidgets3/src/msw/clipbrd.cpp @@ -4,7 +4,7 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: clipbrd.cpp 67280 2011-03-22 14:17:38Z DS $ +// RCS-ID: $Id: clipbrd.cpp 70440 2012-01-23 11:28:01Z VZ $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -214,7 +214,7 @@ bool wxSetClipboardData(wxDataFormat dataFormat, { wxBitmap *bitmap = (wxBitmap *)data; - if ( bitmap && bitmap->Ok() ) + if ( bitmap && bitmap->IsOk() ) { wxDIB dib(*bitmap); if ( dib.IsOk() ) @@ -332,19 +332,19 @@ bool wxSetClipboardData(wxDataFormat dataFormat, // string when you overwrite it so you follow up with code to replace // the 0 appended at the end with a '\r'... char *ptr = strstr(buf, "StartHTML"); - sprintf(ptr+10, "%08u", strstr(buf, "") - buf); + sprintf(ptr+10, "%08u", (unsigned)(strstr(buf, "") - buf)); *(ptr+10+8) = '\r'; ptr = strstr(buf, "EndHTML"); - sprintf(ptr+8, "%08u", strlen(buf)); + sprintf(ptr+8, "%08u", (unsigned)strlen(buf)); *(ptr+8+8) = '\r'; ptr = strstr(buf, "StartFragment"); - sprintf(ptr+14, "%08u", strstr(buf, " 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 Uo3t>UXl@6~Veu142(6<409RkwoB#j- literal 0 HcmV?d00001 diff --git a/Externals/portaudio/Win32/Debug/portaudio.pdb b/Externals/portaudio/Win32/Debug/portaudio.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4e0b029fd398908f0d1b0252496d4aca3c7e7f0f GIT binary patch literal 192512 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ⅆ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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/Win32/DebugFast/portaudio.lib b/Externals/portaudio/Win32/DebugFast/portaudio.lib new file mode 100644 index 0000000000000000000000000000000000000000..cee5475d340e9a02c9c36bd15e02e47bc12327a6 GIT binary patch literal 1318338 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

l{5Bt^9Vlzu?VH_+9C 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

RBLhRDJtISoBSal8^IDh~7~VNDG8BOZPC#P> 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

`cHl?H}5!M$Z+YC@s5fZXw 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 z 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

|&sGEhWnzZ@Kv4B&(g3O$HXkO3?ZAGuFm0S(Pc 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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/Win32/DebugFast/portaudio.pdb b/Externals/portaudio/Win32/DebugFast/portaudio.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3227491cfef89d076959d1603fa5ab6b02e4f550 GIT binary patch literal 192512 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

wHF9asX3Y9|_XM>76`Z;^}2SLtIXNQWp`Z@c% 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 t~b1sVByso?qp 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

l{5Bt^9Vlzu?VH_+9C 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�iqw+KTu>~7ELkVbzz_flG+6M1 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⁣(>OnZHSF*?!TpR3s~AEfqZUnQ4QyF> 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 z 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≥HVRswZ$?a=Z7$W0)B>vq=cjRgf*c+DIe5? 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

RBLhRDJtISoBSal8^IDh~7~VNDG8BOZPC#P> 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

`cHl?H}5!M$Z+YC@s5fZXw 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 z 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

|&sGEhWnzZ@Kv4B&(g3O$HXkO3?ZAGuFm0S(Pc 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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/Win32/Release/portaudio.pdb b/Externals/portaudio/Win32/Release/portaudio.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3227491cfef89d076959d1603fa5ab6b02e4f550 GIT binary patch literal 192512 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

wHF9asX3Y9|_XM>76`Z;^}2SLtIXNQWp`Z@c% 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 t~b1sVByso?qp zB*wzvo0(jc4;BQq`$1x?3?OyIsi5&H5TA_!v=<)1XJ-h_%g)O$&vVI4&n!vI2}mq1 zF3Bj$FHO$?_y0KbLE_vD zusR7Lf!v4zwdFu(0D<~2m87*{j6tJ8ko`x*v|)_FZJ2$~G741o!N$oz;RQ;kpuEb$ zP+SG^mM3`44@ex8cUV{u_aK4VeH<*HL*pT9u0VU!1z4aJH$*dJ4=c3Z2FXjX_-5v1 z=9cDSk*^SAU{HYR2L)4N3AhZa5@TTSU;(XQg$C$n$XphvKCVVe=K(CR{v5<`aMuvD zstm2q4N8BY^bE>3p!5u4gW6yqHmqF)D%U_5R1SdR1T?l)56aJ=vmik|aP(3Q`XW7f^Ztm8Cr(c?KqdUJ#8`mV(rw z*OmPsH4IDw6F@Z1IT+AB&H`vNAUm~^ArwsjQ9ezAnuF{Ykh>OlLrKs3ZJ z0wBGRJqSz!(?Q}bpuOjeLZJEyoL`X4D|5~052>IMdCp8fXacD(0IeC-zhjG$jQgw3EZ%TaUlA! z?@cO6Oh>5q@dxd2`1}dS`U+1_rIc8boB=)~uDAfigqRI-+ghmGu-oGanOI>6g)$KO z))Uf~UzC^*y7Uv&YEMj0g_UC)q542+18Z19cOayuz^pDwOh*%gnY9^e7S3=5ZT@u( z3UZ7D2P~Wi)4vs}ANyK%P*gfPgLOJPI)n6J4jJ`asR}A!H^@VJJu?eltCwW_l1Z6Q(c}r1JBpk9fk#%?HwZbar&}2_ayv zixbSTE>0lV;z-}%@OJ`l)Ppl2=@fhZ1}h2%oumNuADB(REzXc6vvqtl!667@}TxF2Sa8asP2c^3F`BM%zy|&=3hW( z0dX*7z|C1E23oIF3KjsF1Db#3U`WeBHV3rki-RF032Yg3UpvITN%{F;L5SH9Hx?)7 zr$ElN28BNdLvkg^GLYF&b3j+Lg8RfPz;>r)=A?qgl_C8T&|V%6hJw=4Ovu>CDzKV@ zkbi=_=kdj$k01^cIVFTFw0%*kuQMU;u2B~ks z>b5|{&}vPHn?PxhgP|a?s3@@#7I)jh>XQ?bq5ZNQP<|=YA3LG^OsM=WD8DolV&-lr zAGWu250qaDO@Di#eAwL+`=I>N42b^yP<~ntq`i3n%1=qk0ms2XC?AvpU~WDH6@#Pz zNLU<(iX~S<%sm3-r+`ucH2jZ3#o#FcDt-(q4o(bEvExuNc!Ge6pMZ*kQUJ_7Cy~TJ zsRAZ`3M!scP+S6=t2_-CD+dXJp+Jau;VfO8H=52*hIN^4*Ns2b3k4Gx9^XoiM_C1}hGqz)W6@z6WklssBF-Qi0xC7Lu<6tN#OGL`!pt2n_ z4gz*AbZw+B0|V1#q`r&*Xzd$P{Q<5~kochbLt<(0xfGmWvT!}L1qfW zC-7cd(3xFVk<1nWpJoI~4WOZK+Zu z06O!KnSp`ru^4FeD9UDgtb6Z4^Nygj0J>L$fdM+O1WjvC#6W$1sI}1Y4is0Q`?a8p z^WbNufZ|kwA-FUNY6NH;6tqU`DN;OYFkl<;#61oQYBPYww_xE0>a&B`*xNy#zP_+w zMDW-xj00&0fy{ad4R`EqA|(CLjyS?VkO0D**HCj{<4U-w=ggXd;-znbO#xS0;vb3Pf&b; z#-YA|(@9};!~pfP$_bb_J+CHz1Fh`0fn3Gx#t3_*T@ zu|f8O*r2$aN37w~#7I0)xdk$dL7agBq#sAxLDB(o4?`%ji69Y}IZRMxgWLkb z2)8pc$b-}|FbODtXt3Fcu~S$)D#7ItVE|fxi7l{F0==okq9JI~>zECa|);X!^f*KB(n(B70bSDy(kCqr8iVyLhEz$=mHW{9Ugbb}0;JD36Ly&1!3u4Sot zC7^k=9JpUW;b;M}KRC4ryinsar0v7cz`&#q4r55(w_!jpNl^1Ya@hiMJ1F0S$^cNh zfU!Yw0Aj<|_P-6N1z=p!N;UdL*%+ zq_ij%tvW##gqQ(}CtIj{@R1a6Nbmde<7Q?v%F?XJFu9M4Yp1C(gj|fiW35F$W}qF8ze| z4?yEGUr^1olnb>M+E)SD`vyfGYAsYAr2hkoJf!~wviA$f9+1UQwa(%U3_qAsL4`KhZFZnR zH)hD*9$(NP8&n&BL4l5r&2pC{GD6XE^8N7pDe+ zZksEH)Egji5tv#?bpx)OK;jZGao37WSlEEXWtcO-y~51AbbsimSPVKIJJ)POhOLc$W1j!l@8VD13x1KDlC zoZ(m&l2{DNHz4=8i8C{bF$#eC z*RXkJPiVOXDqlhEKv2Ddy*xxU8+A#oHGLqzfyQ2uX;8fdsoz)` z{6OkK_XmUM1_lPybMA^WtDy78Jp!Pb7Zm=E1(_k01)#DI6i$%xwhVNRUw$4mu0Ucu z3~4!u>5#pvAie5rMWEe^^Kqsie zqX=njNgz@jDZooEM3^B}oF$NR4$|^L;Rp&JMNs9>fH>137#cpX{t9S(WT5~91E_5Q zQV&X3pz)hfkU9n?fiMsaZC8NWc%b+N)lqK*ApHOy28NHYees}nGRPc|d7$<<$ZU{# z2y@vOqCn;`FbPD1XsEfM@&{xt=nOH;dLEW;z@KC`MszW>C84VJJ^5ORWIsH&FRw0zID=+<=D0 zC#bz<0o`K)Ye0k22}s<5p&+#=Gd~4pCMdi-7;+%Z?BLYo{Ja$K8ZwZ2kof@&X+@w~ zG9a}GRI9^}SOm#~!Z?JXI3uwr6dE^0CHL+Bn^VZW02BvoHzqR0%$xQ z6p&DNgVdaW`UkYm9cJDcgc~5e1!(>N#q9-#(&E%2h_GWG_#6&j&`dwff1vz&g&{XT zFCU@?CJwUe29h{(__2yHFx&ylfj6^(!y0t%>;s09#LOI2b3o=lK@#^(&CM^WgzS3) z-RTsMly_br@(!$liAY1iFd<0V0hMQ<@CBtySX&gG!VnPC*C>KK>=8bLHT z444E!ePdAAf#Mp}w}r78p=x094mOhka_$Kz&4b(yF_(p*4WyQVNuV7>BZZB%I0FMn zA4ol{j|J)rg2JW~q!zTE4MaoT0#XaIA7&>=AE?g=!XP%tP7n>!-wViDzh*!fG|ie zD362AK-vbt=$1Ut;hZqFtPnX@zYx%kfI+Tq zu0gJ#bJIck*pTI*>4_a877*kQx^>0V&pjS=rg~5)F44f?&st0=mLrnNc^%QtAR;-`niKuK+R!8R^#gD0#k;p zh8L&w;EK6pfBPKAwK=ND3kG$%(8E$zCLd;Pl9atS%IE500~=vxlpT zvwr~mekyKcHNmdXunr7$4ThY#$%8EK?Bf_5?CIhd=IH6;2-=PVaSt!D8qj4>phF!I ziokB+LskQJ256lksPsfA1jQXcvN~{h1xNZhgO0a_q$`jb0c16LqZ&#J)mWeG_qPZPoEIipdeS!shl7~ zL1_T0P6k;Wc%`YcqaQeZ`-OOd7P~^@Ll#+`XDH+tTSW2zhq)ZG8c5Ct6&Bz+QXW|@ z$T1x545;}E$npU}{t=Nbt|3U}h9a^&=o+hlkRVW953Apmkma5I{k=UwH%TGxY*R*+ z_YH7#4v7!&_wjU&j1O{kcJ&N%1@C$2>3dg;N$4&=j$2l>lotf0jZ;mk<|r+I{A18d$_H$1o=!e`jxa8`BI$4fuk;c(C&cdLd-KqQS0aF=H}`W4=J}W>JJNK zwPq$xo}go~{6STIFaxL!YXNOXOoFr{K=~cgIDoWa5qt*+2GE!$XdDC7#>`+~_&5)` zFO-o1?=k71MOKg#(|sKS0zl0u=skr@`1K(luWkrStIYWIxcY_qf^MC2jW>kEBMW}@ zm~IP)=wrpN57}*wFt@Q0uLph}89RPG2>(FCjDuM9;S3-BkoqW7L1&`lIm{k(AUYmt za2pbKE+#1ciRr_D*5JYJqjQE`NCzE91<6S;q?cxxj<{0V& zyK9gMEC#>*5_CPMzn@PeIKRO9IWs|LSC=HF2Ly+Lu5t4B11$|g<~ulm&lUic6ATQ_ z{=V)$PVuf0&aRN_0wB!-XdTXoDevO%=N}ReQ5Emz7~%*k>j|;ORa}!;PU4lW!Il1PQ z6jcU5P7MLgl!5Mkz>tB&2k4~i1}0Fy6oEY;Eg5H5@BzdK4rCk$G*&YYboLx{>;R3Ax2${zb5oTaeKvw5gnv>&F zT9A`k0reT=JQdKHkBgD=81&3XlH(b4&kQ6_ga-M5PK*z7b%$p^Xj_tz0ZGoo+s7B0 zPnb}}okJNw``Oq|(A$2e_L>yFCdOAbh#{v-pwFJNo3DDiIpfMMa+m=J}7|3GK z)tHcs1>-q5Fic{G^v@X>!b0L*eFH)wA@vX=i0=ow1r}m26Nv8#IscFu%!b@C!2)6j zLD;NdwgtE>U<0w8Bf)HT5F0$|1u=^Q#0PBwgSwv+#D}{cqJ|43<{A_PyAPQg#0T%_ zgUIuM_^`8Qpz+5G5`%UzKzRxj-+Ul37guLbU&NT407%Rea&Ds_h#l$)ujhpzeDHoM zkbYqZ-vnl!2#D_q@uMh+9qMTTlM@5+JrR8eaS$JLPYBeX5+HtZ*E5(@|kf|)4|;=^~TLgGdSB<2j+#0oM;7Q_eL?BL?+=IMuMzsiBc!Mo-l z`s5*e(55(Wyr_WqL9WiQ`zusId{4iScqIGPKw=<2fCV98?*I}5wQj*Xq9J0AATjU` zKM3Cm#19S$a&`0t+vN=5`v*C?!^eAEAYvdjt}gNZPRRWgSBRW{5JCprS9Al3gX}?5 z?+y}ohMd3Q0cL}DLW1>pg80yT++1Dap{|0s^FM!BNIWPl#)AxngcE~680hk0=MaC$ zoiPjwVIlF5;0Bw=-~iGS3F^s!`AiKA4PhbiL9XBnvLSbYFg5)D9~Kht>Eq+-4$JFc zyPzVzj=`WtI9NYe9Mrc42{L^8sKmf7Y65K^uM}Zm2y+YqwZ|C3O`t3X2L>i+z6ICI zp1zLmuJLX@j_$$no<86<11Md9>tkd&VgOH;8}oq3hlPNKzuX-IP*i~2!pH#i3@DD`eH|m>otLe^9)q zkFRTphrbJWP>*(j`4!z$S zIZPmz#D~J< z`e%lTgVckg7*e*dz{CTB{M|hv!S3b?)noy82g#{kqOS`YCP z#K90RLD-U?qfld2Nf%@G{g#(3vzV}a)pk!vBAZh{e7K4DGCxU>`-xMM?cWO zj;A})xGM)#E;QIRINr}SB-}s98)gS5RL(Ov9z3cAYmaat#KB!2A0Jm2aQO|5A8v#^ zL|?prP&{aC1zKkCK;^-9f>l7$0WVbCGZ<7ph6aK5ynxaSACkDE8zgM`p<-Y&JUoL# z{DUIh{Cz;ff*(QiPoRAPpg7zJYIBz)rh{Y2AKbYGwYyP8Kxb=1?sAULqQE3Nc_O&o4|6Q z>;+Dw5INX96Ic#@ix@->HopXx3w4YS@QiTvf!^~5n@@ttIs5zggVwKt!V@-!1eWs; z2B$^Xd=Xd-T22rLKnH!Q8f{0^Hd0;>rC73YvaSXf$u%@ZNyL3JKD z_`vqV=7_-ZpiqP60oa@nSlknGei+CPuz4V`IH*Mv4;l)L5AjE9@4@DR!0G}*f*{Jk zIW7V=o&uW-0;`E|35xd*@^ts~1COT&LFZ^$^_>7I>P$E%wT@Fr=OV#1E~Ijh3!s=y}^;eh_Honz+nqpj{-Vx z0o!_%-Jr1>1}1?$AR1{s3P?R@O$lgh5VRg;A4r~oNnk&ShVBgnjm_)@k6mEjCw4#t zG~R={PYfi6yiW|YPZKoGa1d+`WQ2-`!4rBIA#`;Q5)U+{1sX4fq*u^zG05NXey}_8 z7#ZMVpiux22b@ot5aMBuL11BUI$%bKgHj!6IvT8=1tIR~8{p&V>>1)15a93R1+6Ps z5%QpwE8z4F8ZQNv-G?D@0_#T2 zn6JM}sE;e8&S8d%fm=^*j?S<;hXpDQ&xufTS)t<2{@@7>upil=VvatZjklR$bzQN(+||B0?klD^s=JKySjM7=LXr( z1c=({Y$Ia6ZKCb+~9#sxfa)9;#vWvpnpvOhfLkK)d4B8Nc z5^i8o2L}c-c=`!WEhh2jQ0K|X(b+rR6*T4N(o*(ms}G~nxHK;;7?16Fxx@`Kb7OxV?cZngpEJ!b6k@P3mW()sh}Ky5Z` zR)Sh?*u)(i7~Y|*UxOZB16|{ONDx$h2IS{M&y+bL2pS`I&Ph$oD=ly@$}cT|j5Qw@ z1dWd)i#sRgC8y@V7wkjlhCu7p1sH-7lT%%CVCUAH6ai2dYC<7{IIS!DsV= z()|Ub@?L|1{4@cw7qspYwlXKx?-_7*wx;Xm$o>hN~cT z3`_#oKr~YQcUA@@8U`kT_aGYTmPK$jWDP7xA4m_xd`5;(AbAERfzKei zfq~%?bWD(e!Ohh%Bs9ns+GYm#@<2<5pmiN1TplzL0%}NxfqS^Hwj2{&9@IgH%m#wA zgUSqMRJmZ#Dgc-q3tTQ7y!;L{A{r9p=?q$A1gk$;5o%nW{GHgJYu7UX-JO<2Xl z@z9`x#jOBbJ!nz^+-nN)hm4be-6IH>2TfH4JBGQsfZXit;pz+@KM;bead!;?`8M9g z-xqu?YJg*iM|`LsxD$z(hY*IV4{>yIa&?J!3i1yJEnS4hnFw4SyhsJ?4pF!m)B~{K z_4N0P5B3lBbAhA@F${G+uI`S`k@29GDyUflYNkQcy*OMglFYzz#}oD2*u=?n}qVhjxYrVI=Yh71hioD2+sA`A?*9t;dM zAq)%;Ss54_y%-ok_oB#HFfcS%F)(CEGB6YtGBEtkWnj3&$iQ%0pMhazDg(nD2?mCp z>I@87feZ}pF$@fm*$fOeLJSO%Dhv#-5*QdFbr=}T_!$`d5*Zl6*%=rvcrY-S#xgL( zIWRDUgVqixF)++!V_?X1VPMb|VPLot#=x-Fo`GRr6az!4IRitRH3I{m6$68Z9|J=& z=m1C-28M1$1_t+B28O13(Ci5VgQyDwLw*(m!>4Qp26KG|h81xP431I^42%X03{9~N z3|Gn-7>eB)7+BdD7zCvm7>e~77*5MDFvyrNFql;^FszJaU^rFJz~E89!0?@kf#I_! z14D8l0|O&B1H;>728PQ{3=BPb3=EPA3=E3Q3=Gk}3=EE?3=HSu85jb?85o{OGB6}Y zFfb%kGcZKtFfe2qF);iVXJEL>&A?zA%fRqEkbz-_5(7iK6a&NmA_fNeTn2`hH4F@n z8Vn3VRSXQPA{iL;^cff~OEEBrGBPkM7iC~j%4J~SFlJ!*9K^uzig?4${836^BEY5%NZDY(-;^`Y#10)m>3uqGehDpDTsj~OO}CQ zQ7{98e>DR`up|S6L_Pz9H5&uNH+=?%xH1NY!#NBLob?P0Pb(N0qMR8RPS-FnG*~e( zTvTRY5UpciIIhXSAZx_H5Rt~faEyn6!H1WD;du%JLy80ggOLUU!wqK!h9jyB4AT@C z7z}+F82)H5Ff7VrVDOV>V9<$SVE9_gz@X;Az;MQffx#q^fk7{efuV+zfgvxLf#ID2 z1A}`l0|QSo1A{;o1B04614BV61A|K-1B0L}14Bsx14D=_1H)4%28K5U3=GlH3=D6~ z85lNuFfh1FGcfRnGB9kkXJ9b3WMEiQ$-wZSjDf+@h=Bog-UFu%14EiT1H(j328P@+ z28M!I28Q){3=F=k3=C8285o)q85r8#7#NZw85l14GB8+LGBAM7qg=$sz#v=8z_6N~ zf#FRU14Cyz1H&z628QFZ3=FZ=3=A1;3=HgQ3=Cb-3=CGj3=HRd85o4+85njcGBEtC zVqiF&!oYA)iGkrj2m^yQ4+8^ePxV)G28NAA3=Gl$!N73em4PAEi-F;d69dB; zZUzQ7VFm^bJq8BHSO$h^bqowrbqov*Squ!VSqu!foERAPSurr&HD_RWV8_6)$cKSJ zAd`V%RyqU2{2&H~3VjBKrV0jzDt88k8chajZhS(Ygh6`ShGO0J4f#Eqb1Hzz`bD zz|d{Nz`)JHz_7)b0elDd{&EHePg&4x9s@&dG6O>p#=j&dJqFc5DNoC zLn;G9o+$&vUKR!hIVA=L(E0Y)>=+o{>M$^HaWODV<78m4Ok-ep?#jThE}wy6PZ$G3 zz90j`9Rmi2oAL|{rwkbw)_~mZ&A28MYG z3=H#i7#J>RGca%#FfcIrFfg1?XJELL&P3mF)) zSQ!}BM>8-)iZC#oOlM$7$YNkvp3cB<(wu?8*qec29xDUGr%DEfC*}+c?}`~1w)rwJ z#L6=;7;rE!DAh7B6fiR|;CdSCxTbbqxc9b~FRS9wr8cgSre1d)*lrB#ams=BP0+Xcsdu%;scZSjEG@FqMOW zfs>no!M%)ufh&=LVP!r8!-gmZ26saShMEcnhJ$Vl3@0ra7;c&}F#JnqV7TbVz)%v% zz@X*Lz~E5Bz|d~Zz)+#az!0U)09v@mFhP)kVGS1pL$DbGLx~Op!-0GThEz)i1}*^x zhE!(;hDufjhAH6;4DOr^44Q5X3=O3W3|OkiPP_-x3)uv?LVVOb0VLuU#DgP{%sgLf7rKXb=0Fnmd5 zU}(@{VAxT^z_4DOfnmBH1B03l1H)l&28I>`28Ly#3=G`r3=HAv3=9U+3=BKD85kxM zF)+-NV_;b5%fL{X%fN8hih<#8Is?OPUIvC14F(1^F$RXDI0go*R7hSB(O_VhE5pE0 zCCb1sMTLQ(-GzbSZ!QDFNpS`S4<`l&qdW$NccBan>+KmBCi+9lpBZWl3>u~k46kb# z7=mpW7>X28L~M3=E)iX^t8*Fj(6&Fr3h1U}%ZIDU|?7Wa%(ID zgK#(lgNOtJL$(Y91GgaqgRDLS!-r%Bh7(B)4C`zd81^MHFdVdFV3@1Jz#uNjz@V4T zz_8n&fg!?*fuS;hfni%d14BI%0|V%+kPR6O49`Ru7*etr7>x267|vxgFkDY&V6gRI zU}#BVV0fU`3wy2bQu`a>%VA*XjbmWglmThqM=~)mR7Ei` z1f(-Ctgd5VcmV1*2s1FGBr-7QMl&${5oKWLRbyb7z|Fu=;>N%bti{0aHkE-v)0csv z!-0X}jw1uZS7rtV`*H>bxdH};d?yA5MOy}j32F=sf{6?apfh8R2{AA<3NSDP+c7Y- z1u!sdQ(|B^uf@Qi!OOs~zKVgNPM(3`ZZHEwd^!We$|42^rcwrm{#XWv>%0&@S$Z%q z%ui%s=(J^Es5fO`IAhGf5aP|iz^lfAw`pcLD`If z0W^MB>CM1!UY>!$*PVgkS_lI}Ehx=~GB6~{GcXu>GBDhUWnci^i(M1Vz#sxj8+8l} z;W`Wq`vVvl)>Jbv_%bpuT&rbZn5DqLpaH7C$`}}&G8h;NWEdEvOBfgms~8w2Br!0= z_%Sf}Wiv2vcrh?EF)}b*NMK;NV$Z;EIDvuT6&nLXxGe)iwLb&H8x{rztyl&Io-hUm zV@(EzOIi#JJ3|;4-fA;2%r|0S2#;W3xE;&D5aGwb06GKsaV-Ob1tSB)H#Y_bJy82g zk%8e!1OvmTas~$BTn2{g#S9F~>KPbLnldm%+CbX*X6y_Me#{IE4Ll4C;zA4zPg58e zR;NMo^inAXh8Y?R4E^j33~4G143Z`c3=Lmmtak!1`F zYvLIgKD#n7{0(4WXlG|&kdR|wn47@BuppO#;i@YG!(u)Lh96c841t^s3|li982XkUnv* zDg#3f8v{eKGXn#oECYjJ1_Ogx6$680Jp;o>7Y2q&Y77jyz6=aAG8h;#k{K9slNcC; zlo%K)q!<{~T^ShMv=|uX1~V`$k7ry;=#bcEz7`AtI5E?ro+InHk5(kZzcmn z6Bh%6GYEq6xC;0GBjm&IWcajDjcw1IS+3*e>W?n0U~=^`QF^K{V1hHYbu=$XOCh3`rn0 zp!01&G*~UOC}?aNgaa5DK7z~zu|a1?89>Lf)1Yd(7#Ib@L>U+uq4NS6aB(Jq2oM{3 zu1yw*jdX?z$h{ylGePcwo&^gM1I@_ffYdTD3FLz42GChlj6$ICaFBWo%)-C`I;R2T zMu>iPhJ27d1}1?55DmT?5!)V(fW&Zc_y=d^rRSu&fOke@=I23<7cF+oOMx6l1UZU| zD3zeObI{yK5!7DLoF3+xETA){GE#~_w~aA`B5@#b3epd1_k!jSK0CdNL~WRSyCW58K_)nacYWZ9`uk|h&c>d46LG{GbzfE z@(1`VG@?SC0iIO|#Uw0#Kz;{>?W{eul&oNSzErQED-0COU=TBPdOQ!V1*hf|Mknc|lM-;!abrbM`>@n973Y zr5PaQ1?X&lM808Vr~#!l1}1@85REjiRt(CcP(29s%nbD)b)dTnL39IXjter+#EW!( z7HIyf2_(||scQwvGcXCXfoLTALFR$-0Vo}T><7`Hxy25UItC_zP7sZx z9%L>y_1z$K3`_z&AR1iGF@lEN7-0SbnGKs`>;tJ`U=rvD(O@?-31~vk)WLpF5xhJB zpU;MrD#3hM+M5J5Pmjjuje^QT4#t9_%-mGS@pqxcnR)53`C|s~yfLVp;$h6pD=3A` zM}zn}jQOP{AOUFl1C=X2jEPD4MUc~%VR--~9>7>ol%Jeh3^EyV2qnZ^Q2c~o$RW<~ z1kHU$FoJGBEh))K4L~!)KM!>HOHO`b3d}B$Ut%!KL!AQ$sYzhW$V`VG4GNcq`U51N z0=F{-;#{~QL|)54s0q$VO)c;(PECg8PmmcojG4utld21#=U;=)E-hfpEC$c;L(icE ziIp%Gm*f{9{08$2NUj1Bo=B1i`)e2zbD+oI6}yxcfma3i7DMh-7G_{znu1hDHZT%S zbFjP*I=2y2*MjOwP5T-9g)>0r z?P2<6g4BcVsszzUc@U%zQ#~`o9FRH&CV{yix`Bbgj)75#j{#DLgWLqeAoD?GA86k; z$ld6CkT^&l;Rim3`5-eHm;@GpXmFl|lt-Za4N?cm+l&m0K=KSs0*gU3SRIo9NDZh? z&|+W|;$&c80JW1qVjw#}7-S#FKcKV?;)C1+G805IFmQtV(xCc!In+$pxtYjjfb@aP z0O>*KWn)+g(!;-<(G&=(e!zPeg1}1^cAR1goatOf8gN55xs2uit*K%_~ zw_!n=HwZSY{M!!I3tKk=Dyw&hLeAdh0}U>Ar6yMq}ttiu3uCldq1 z$0BIm4Vs2xV93ZXErOIiAU-2QZYJ!UR}i0xp*R(G4;6^d3~7si*VTadEDUMzIvB)f zWk@N_&8-B>?-6BSU}Gpq1l8}Lav!uFbuUsL+I|D;;eqMS( zNl`&Q_$*M6nV@xF`;p9KA;Qcw6f<+dW`X)2P&*QH3lL}IL&TDkU}X@5Uy_-eT@3c) zKCs=zxdkPVee4Io{M^ixOoor3dvMqo7}ySqg4RZ%cn<45IC4;Tf#Q*Yp&Y#E4dkvv zqM(+2DFZ0Yfcip*!FE7eFgy&1bixpdV8hZ(F|^(Vr4LXZ2DK@S1VHT#CV^u}=>t?J zf&2zKw-%Ha3!wTy>>?-|WCrN0VNm{nrRUR7GeGLpq3S?vP<{fH39x?FIZ?zOZAhMA zVmJ@d%fKXX0Yrn-DTe^4y#nfkEfRv1m7p|^;4_OxK+o6Z0{5*Dd`>7IR6m0J0h5RE zCD7zm(fI0Ud`~n!9|P#DbZmVgNOcH4H7z+KHKjBswTK}Uiy$ODgTm$x)W1n6@tqr= znUa$lp9{Jky%>7nEu?M(r3V&<-1xlIijw$ZP|XU-uOM*_hTM4AJ#ZjC4?}KzQEG91 z4&;FOkD#+ALF=*aA*C4s1}x6Q<7QYKg3JeDP&xq7pm=!z@(Tl#z(WuXjzh#<4WKxI zo!bd&KZEAQL3jLtXpkA8bO0(hO&D?$E1*4iSbG5!hZYQ=JH-=AU}7NkHVjFr#U+sY zpn^b~@S%5sf%c~CkcQ+55b3}W9}lkK!&7ntGV>ThQMib>SR>5FKs zP`%2)z`()8@bMKioUG}keMc0uqy8@J&t0EX_qOhYc74 zGV?qkcSVBY#stI<$%k~}p?%5&(hLk14DiP4M^K#s+Mj^XM zf!G_w;2jLwvE$|+KioS5Q0nEJ!^AlfXF;4YdcP z29zE^`D+VQd=)hOK<$9$g&|_^z9xveXnvUIU#m zBf#LBn3Z1y34CZe0EsIg-3nj!VrQSd!RH7I;$01ng{6tAAAb=O=^e1yFthwVyz3pF1G;Ffa++1^J2y!22JvN92=SN6i2UO=F`{xNro`Ff=DTqcIGX~{%SY8LQLE#IdLHa@N zVqjorcn;FXz$EYjM1$J^h<*>u>{n1ZSbG3u4ydjGnF(qefXoB48CV$JfYdTD3A_c- z4GavRItg38igycg^aY(Q<{9GZ3yMM%0Ysj94>bprmOen)1kD5|R1`zOBA|4E{XPco zV7T>QmGR-Op6(tYt}d8{z@;E=d;~2ILFEwx1LUNBaN{3Z9)iRL7@SIr!GefBGL2#P^6s{U*<*5#X8~FYN)cVvdGba^M_QCR$3Dh2t_2H?R=@})Evg8w_ zZq2AH&P-0sL6lFQr5PApz~*P>r9*_l`4H5u0L|$_YCi@BP?-P^GdyvK{k(1OV9=3) z&W<7eL2yGL6(=@vP`rWaeyr&TdA)L|cQEq$Wsp8ldk~a{K;am{!0@pQ8ebqj0|U6A z@hnM2?MJeJ+9F7C@EzPHgf`mpa|?<B*(%Kke{CeN>Pxs1QO!_r%mlduM6)xnGq8d5F)#_R zgJ`6&FOYp8H>2Cf2~x+vB)|ot!R0if?f|I=nGGq^nHYFLY8aRVctJE+Euu_^)qng@ zxj3wMvBd`m#6ymN1RcBK8U)%18t(!+zQhM~oP%S0I7295HK64K6PJxPnYiEW}AEOvpML~TMO{933fiy;h)!QV5 z3&tw z@})kK9?%##+TLfdT82=FUXUL2v;<10APjPkfefe>&%$5?GLwNxz!*d$-Rl982bERHFPCh1vkFfe%1F4Jx z)!&XFy$nnOP9VC0fdSN3z-$j8@(iQ~0o}rfoFEXQpzsC7i3`*`&>nbD`7jeTZy+>4 z(>=&f4$yQ8YKMc|0jitakkY6JQW`}v0BJZAAqsK_ES^F8Awb~(ntKD~2T+(p`mZbu z9w2uzFbQ~qXmDIX+5sTCD2_qt0_6&Ep(?=Uf#fAn z<^7T6LGdZWm;_ou6OdX29wY{J6yW2^AbAD2JfzP7Q2=olNM3~zau*)>YES5VJV;yv zDvmrS4-(gbii76wVg3M#8$iV!L8}~~=^7+%!kC|v0-dFYkG?|NWuSPsfa-(HL_qog z0Wu5>HjLmqPvL!lAQ=XR0LFsEJLvDvQut1J(-(FSur?n?d>;p!(5Nfa44#-@*i54+0qx12;qwW_N(@cP%J| z&Rl>c!F^&$1_q{Jr2IaC2~qAqat`-XF0<||V^ATvg z2z1mZ?3DjdGyzEct_7{r!@=(H0IzL>#q}g<1_lF$;LP;A#2kNaNZ z+$5yT2H6XWdrG!cSFfr7C&N^UV639T3gXm*qfZeH<1(mB}fSqmZ9Sq)a4DS8~hdBDV zI0nJafdw620No!B8Yjh~&d1+B0Df#NNI7Vn6*P8=MJ?z6GSCGPA3^7yfX;0K`7K8V zG;WHi8a#-KDGWYOMhJRt9Y|+D5a_O)kjQw{;bHJTd61h?yFvQF?hSSYAL;-dM`lG=2UY_LY=}8*=<>dE+sH_OizbcvQ@P$WVn$UH7| zbpalc!Jf{JKF|p`(6Ip^b=>IcoE<}4-Ti|iq4x2h%Y#l|fXeZr%Q=INg9~y5ozV;m zN@!4n{l|x{78Ei5!LA^6kO?_Z`-EK-G{+1|Q+ePt1ybZ11W6g-)PyVmPDggo@)T6I zFfbs>8c^B5!2muZHL)ZgGVcTu<6&?~&CAct%ma&l`UoluLFpK@zX4LhGB5}*V3vib zee57mmkwb#wEhB_&%ywfL$(B5cY)+MAac(6dBr7(c_qGyMd{#mK%g;GkQ<7S$}CX0 zBae}S%4K9esC;&V`W-Yz%)kH{1O}DCAiH=NJo5r_5|dMr#ydgc0t|lnC8$y#L4ACX z{Uu2Di!hKs)(&$Q$UX+pJQuiO1gVcRM184^od(4k4)rC3e&-0x8!}$|EH8(Ah8lAkc}#e(vD%6QyiIRtvd= z%RdO}mU!0)uzHlT3Q2u%h+|NQV+aGN+y~XKpgdZEnnw|;QL`#S9C~&cEDbQg*9?Hi zeBk5sEO7DQ(jiX5twbXfW+YJ)ST3k z{5%|E5d;)K+Hjz@U=6emZi42)fgGa&`4u$&RfiNd6Br111+)MhZ(uctygrg0Rfy+r70nl2Km+TSAq$JsJX|Aut*OqaiRF z0;3@?8UmvsK%Wrc1D)fN&A`Ac!NAaN!oaW&be0n%0|P@f14CFQ1H(Ia1_n?YcBupd z!*_KChRg8`3~}tB`BDZ3$07!XMU0Shq)sLU|1)?z+fuNz`$(4 zz`z*Kz|apme=duGVW%nsgEi=^Kph5#IClnyy+#ZSlld7K!W0=8=D0I3aF;MJ9FAjP zNKa>Ac;e2$@RNgq;l3#YL%AaZLr^vY!3&wh#t}3%U#pSA`iE3|JT#JUJN{R$DVL?675Eu=QbJ zV98}*_#w`~VCKre&|AsCAfnH}kSE8$AREEJ@W+~gp~Iem;kOP0!%-UshNf}`hOh(% zhO4#=3^7a$3{8#<44j1w47cPN7^-y`7&ewNFnq~kU|8?Nz;M=tf#Ihd1B0X$1A}%w z1H=DX28MeX3=Atv7#R9h85l0cF)-W^W?;w$ofj0rzz`Y8z;LXPfnlW<14B|d1H;K2 z28PvI3=Ac*3=CgG7#PeL7#RHA85kC*GBBt_GBEHdFfcF~K+dbG=3-!wQ($1w^Jid? z@nm4|E?{8TUdX_3vxI@+r3C|nvMvL|6;lQV`%(smKTZq`Ix3JeSUNcw81{nFO%4M? zlpzB{paKJfxHSWVmNNrGUl9YtI?$Ob@(c`bDi|1Ma56Bk+cPjsj%Hx^Z^6Le8pXh% zn#;hj%#wj2IG%ywxEuomhc*L)us;Jsqy__n2p0oGb07l)CnEy`8$SbshzkS5uSf=l zM>z}(ict&uToc9w6n&j7HU|`o`V3@|tz@Q-o zIj0VE7UonZ28M1028LQC28Q{O3=H#Q7#O_l7#Oy4F)-}&VqoxKVPL4XVqmz<$H4Hw zmVsfhI0HjZAOnMW1_Q%(Z^#)+H?2pgIGf18@U?(}VSY3N z!(2%QhMTbr40m-H7~W_yFuaIiV7Q{nz+jumz~JG|z!0g;z+j=o!0-=rK4K07LxC9s z!zM=thFj_k47s@s4A}_`49s>63{T@27~-`V7 z%)lTW&cN^}lz}0|i-AGFlYzmNk%2)Al=#&d7;0P@7%n+6Fn9zrFa+yC&eGvcVPJ5N zWMFub&%j`6#K3SxjDg{A1Or2Q76ZfeItGT?bOweCP7DlRf*Bb08Za>Ii(_Dr4r5>l zc4S~!=FGtGMHwO%uE43gCj)~PA0*wrEMs6eBh0|ik;1^B=)l0B8_dA4UWS3eje~(fE0uwv2Xsz)8Uus3 zB?CiN2?N89PzDCC0tSZmYz7AHBnF1}P7Dl=HVh2v+6)YfH5nL+av2!*R5CEU%VuDB z>ImI$t!Ifnl{R1H%?~ z28IwN28Oku^a(n5F_D4cSUdwm9q5cCMFxi3EDQ|q^BEW(2r)3cu4iCqQ(|Bc zc41(U3t(XQ%+0`{YRBGQKr_R9eES`ZO!+?Ro&z6C~%9?>ekez`+K8Jz9QiOqF zUIhb#K?wuHwKB-rc!?4W3@g1D7zA}07(~4o7_9gi7=%G*d<8KuLc?hFi0S_}+tOc@xy2Qn}SWiv1o_(0NWi2wtG zD+dF^+c*Y>>)H$qM;IaJvf39jFzn7{U}&~xU=VX-V0dT5z_2xlfngah_i3z6DbCU+rkVC_thB~c7f_c4hDu~KL!SM5e5dGTn2_4xeN@C%NQ6`Qy3T) z#xpQnaAshL3}awum1AIVV1t~A6l(-I!_bM1fnkOq1A{Q=j8#EM{t{4QU|1W%z;Gap zfuSapfx!}V2d)YO!^0W|hP|u|3~8XV_UsrKp7}E{$eJ)PWSK$mMqUPn%|Z+eX^{*J z7mFDf`qCJ{=Un|0WMFVrU|_I|W?i46}V1 z82SYn7(&Gv7y>vL7_FlZStFf5H_V0g#Fz|djH!0?QjfuT5uf#Hx8 z1H(ZZ1_o1W28QNp28P>p3=9Rb3=F2B3=Hf185mTUAm^K^Dl;%l3TI%5N@rluHfCV> zEylo5t<1o1DTRUI0Ve~)M12MZ(0=5v!3+!x&I}CU84L{9(ij+`$`}~Zc^McS^cfhY zfzpsW1H;xV28K6W3=FD93=9jb7#JpTFfe>oU|`r9$iR@r#=sEE&A>3%mx19<9RtHv z&^dgdaFt+Surg*~2oPalFso-^kT+pqm}|zspqs$Ju&I!N!9mcziX zn2mwK7j#CJG6Tc3BnF11mJAGEQW+Tj2r@9#moqR-XJug6UCY4mPL+Xyt&V{q#g&2K zc`5_L`ZxxLqf!hEvx*rQ48$22w4xXoez-C)91w%#A0;IQhDDj6b;S$}Gu0t^=#Vc1 zgRL3^!=nrahI`oz3>(BDXPFilGcZU5F);kIWnd5tVqo~j4>=R|syYLM96tktT>%5b zxmd_q0xd2K43SC<3`!;p3@YLb45um?7_Lh(FjyurFc^Z`EE)_9#t94zs)3O6N?WTK z7*p)rz_8k#fq}D*fx+FDfnk~~1H+ay28L^V3=BaG z3=D;)3=Gf085ovkGB8x~GB9M@GBCX5WMD`PVPJ?TVPN31VPJSu$H34e$-toM1UYw? zNs57CSq=lkW>y9U3o!-;&;eJVyct~2zz|u=z%ZkTfnkRn1H(He1_mi*1_o(y28NA} z3=F9(3=G-T3=GWN3=9X#85kCNF)*}qFfjC6GcbH|V_@)1VPM#j$iPr6$H0(W$-pot zm4V^C1OvmJ90rDR3kC*jSq6rmQ49(_>(W z)nZ^+XTiV_X~4ixY0tp$sepmuYdQnNyle)BZ*dF^{9X(U%-ReL)*%cGM#>BfzB&vH z(%uXVzBLRCO~MQe`P>W)`mziRH@z4bz9~T3$GMyAL)E#V9d zH&_@L=6EnLoG8#DP&-f(_mnDrOd$aw1k1-gC7IKdTR!Tw<-(_7m6Tf zsaDr8FsOPkFcil#FdR%}U|1!|z);M=z`&)%z`!IA$#bCdrK?jI7!>>%82Td_7ZFe z28I=u3=B>j3=AdQ3=H!e7#OOn85sNn7#IY!85neP7#LdQ85qtBGcXu}&O;AlV7OPv zz##9;z#w1B!0L&_xfvLQ!WbA*EEpL2jUjy)UM2WjN!P=97VG$Dp zL$xLY!xaq%hOJ@@44|_t1e_Td9$7Ik?8#+dkV^o~_%JZoi6hQ2fy~)3G3*qF?2iGR zfeTu@1UrWStQLCi9Zc;Ws9I3I1gY(V&V6nY2aRE1zXNWoIH(*)y#o#;hI|JcXkKuK zIB5UAduj=E5hh4%w>W6}EGRW6HL*AqNqnC;=*}Yd)DqA^WC7r1i{Qltp!=pk>(BRt z-2-wHXn&WdV`)lezH?$hNoi54b53SzUJ3MCIqVXUc~8*18OWU=e}dR+Kz>JBJMARS zzyR8}3ENi*2_t5P!yt7GOaezhGcG@k}KALJNF9<*N^M5CDtI``p$ z7-Y`}%v{iUwIFw#!l52yF35bC`ZFMP3`_!NL39HH1MEDSqu{W?9#wMIRTQ+B?mXB|NPLJeK;k1PH7_N#2s1j+#bNWvAa}sxVhYqxu(??W9C2|O zq>h0};0lOFiVKi>P*{P&3=|jFK=KSs0@p!w1E>ziw!Z`7Zr8k&g8a<9lCb=o(%e+| z6muv(S(qPgLd}QeF_1fMi6h4|6T@wg8qnQQAR0Ws3R!~)Qd^3aA3gVMx(s9NOk zaA1J!9|HLkmL?v8)PeRYgJ?9f9nj2v0#d`kB=8hOBh5vF-N69br;lzv3&V4eTF@S4 z5RH_k;d)T)U}ks)Qpdm~@ESy;sRuO=K=aSY?tcqX$G{};4n(85AGU`9;#Vey4F)#^y0nun?qq>8M;TuQ|1Czja5RIl5wr2z8j-Mbk3`_#Q zKr~u7g2Ehz5pH2&_ybbQz$EY&L^m)nv@tOYfy%?H;CzHV@7}K^ zIH>#$PA&0G1X%{jGCrwgsnGlEK=LvS*yMwg6LS*b=TkldwRIVSxAqBoPX|6A&csfh6vdU!DhA zZwAuyTbzNxhXI_9JQ9mi$`gxHgG&nv@{6E*&i{e>(I7WKj12-Git+i=M^ODL%D}(` zx@Q4WnlmtjK+AK~auKW3FTJge?7mIv2q~v;jDw=88evI$RPUpXU^S zwS4~cQHy~UbPW#^H&`4b2Wsy?&1DFMGGOLG+5)jiWj<(i3@^wI1||VM5DhL*I0Rtf z0h1Ge%E7_|)b;?~(aRx$Tz@b#2!YfwFbN2QXlNLK)PTYO6waV>31lZMoW+pTDMP~z zv<@D2rWfd}GT446&^ja#2GyIO@)=|vhz;5!DFrfzfk{9bL?e~AccEwJf!Z`6^$>qC zGsuF}f%dS1Xt19l^_(@RjfzxHfLg8!AT?cS#g3Jb)2{IexCuNX41CxLX zhz6@;5&*R;L4F6-lbeywPTLLjD@eQsv~CHi9@MshsRy-bKx~j55Pvel*Es1w?LZDI zHU`L9)Sxf|xd(QyqCS#Z(7lKtvlJK@!0TJFq)8X>2AYukg8ZEP^h$1U|4R#z;Hd7 zfq^NRfkCm9fx%RTfuW6sfgymCfk9r5fq@G&*Ac|PAi>VSaNdG}VHHSyJp)5r5CemG z5d%Y45d*_5K?a6&Uj~NgFa`!)&>U?!14FVC0|Q$G14C2+1A}8V1H3Jwh3%L`jB#VI|%YlI*T9Sd`k{Sbp zkrD%gP$dJyLnQ_VGbRQGfglEk)3FQ;8`KyW!c7?%G|U(n&gw8Q%*tnA@Cs*OP!45a zsL5ntkjr9VIHSkFFeRIT;c77h!*MYNhV$_Z3|guT40T=%4BE8}4E&A^48Lj_7^Vs^ zFf^$#F#NJ+V3?`Qz_6*5fk9D@fq@~JfuSUlf#HH41B09Z14EG}1H-HW1_m7-28L`7 z28Kiy$k-z&mo5YC$5voqm+TFt9i5-GJKb0U|?xrWH=+m zz_4ZkBg0P6Sw9CD89;kOOhA{#fGi)yqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@? z8UhUHV-8VhV-C@vaRLS=ffx`C9j~y5veEU%q3H$n)j(qn2~hR0`AyKch?EfW_%stk z5=af`E!kLD{hVs~|f;?gnAd7| zTUi-0K7Ayf>!vG&W zgv^G4=3K%hKx-L5b4KtHPw;+ckRB1xTnlsz2ciQq&lD>Gnm=<-ErH6x=5IjjVr4*j zKq2E)=?S{~1!M>49(x6lIAlZ?E}kX9zyO{fgB&ds06L}B1FvfF1f{?LAQ22xV1sY=mu|Z?2AT}($fX2H(^AzZ7B=SLF54!&lM1#{BWV{We z9(la22qe$IBv1^ZLGz&S^KL@(vh(uG^WxzF4L-Yoks$zjPI5dr4nfB#fzDT8LWqOT z7%GB^GcyF|rEaU)r7}y>;vr{Xl|YB^;|&Z93}A$zF+;csR4J4qsKdd50TjMv&~Sj| zFHm@uqoi*ph6<1x1}1?@5DmU33wB13CwTr39O zA@li#;Jk;u%qhWA=77Y|%bY4$nFBhG3p$6~04r-;5=#=@a`MZe;>{AEbyLth6Os=; zZ=)4l#<*k_Cqv35P7 zP-bch)IN|J4Um3V8HKC>de00u0|Qe(IBX#0k`4oLb3Gupfyy6Hynw2$qKzker8&NY2AX&^){l z>PA=|2KjvvS{_~uQp3O`umnV-`5kme5hzR{`IL!a8AuHSlfZHi4Ze2|>l!TRf)#M_ z4!*kvJndIfl%E3^Lexzwp=N>7!zw5nISqj3URI;HnVDe?NFC_zIuMQKX4JL>6T^Ct z8qoc9AR3%rm;^xW4^Ub|4wp?Rb}%t)2B~LY64(Nwk=6u(!Vr|kFzZYfhHW6V3`_#s zK{U?uR6+R!6d0g|C-4P5@E}4Kg|(%2Ld`=C7m)qCP~6PSup6X~fk|Kwh(-$+RJBYD z`#@?Km<0BN=mrLcUC{Dw8aPj5FYjhzDepjH=;hrUSa}D&$_dg=nhz`QeDaeMa}f7< zg4BZBR_;0ZNniBn=8O&9;Cem7KXO}K<0znRp_Y?(pUqx<3Rgh z!EG#bHPEtmqXYwk27_x}X)egpV$Zx}&>>{$;4&B_r-P95FD*&W2OWR~Du=g9K-U_< z)&uw_Wu+!V?nB)n!N6d`06s+&bW0c59eX7}Yl^V0?}9H@1etq40<_Ku$NDa~%1_{P zmjoCXm_YlIAf+*AEfRR58`Kbl&NYLWh@%VPFzC z2BN`v3DPD6sRxx4pnL%;dryGm8JGl4f@q|42vUb$o}LD&VPFzC1EO)3Dc-?ej?Uik zF0R4OL7o92po8&3F~wl{DlgW4xBHYo4H*dRZE*iG;=*-}9+1XXIFYzA%2!|w7ykuweeEw(ky z1>Z>qYP&KqpvVW7CKi>X7D4nfqslp!Bo<_Xs|8SlA9{ux3#ytRXGe%$R#b7&p`yu& zIS@HEG`W(D)FPM6^vsgP9B_Tijz!)vFEJ-S9ipEDRo=HWrzA5uBQY;8H3y>1#nTVe zh64GI6IE?QPEkNnep+gAab`Zq7vQrLxlq*vc^Mk|=BK2>!-yMI-Z?)v33T3JW_}*S zM=u6;Q62^cCQzIImIMPsKw@}eabiIxEJ9L~LAQ*6qJ<&c1h*vk?8Q~6@#&tL?~|V# znwJgp3nRoG5b>bYM9^7XAU{Im5F+kYl%H1u2`6a$LBxGh(?ER`ka}pGLBxX~cjJJ> zp>YNg56Lfp*$a&?h`3XJNlAV#ay&uALGB4i%mb}O1(^knBdA;^=yr5)SVQ9jBJP=2 zoSBm9o1c`Klj@TR?;Aqn1ER*ID6=dzDG{`e7Gy3oE+BFqF20`7ekKoc*!Y*0pc?!M zY&S2m8pjaF08dCb@ga)`L9bpng~;(^lQRR|tH~}3D#t=}0mT z4h(tl{x>)ex~Jy(nsEC7^N#l-!Zs3lj&qI347y6iELB ztOn|Cm>Q@2k_?18$GjAJOM&c-aQZcQC(z_I@E}Etq0R-b0H5R7r5Y1C_g= zvK~~X1|jkw$X}q03%3)L{umijVdB`zQkWciISLcURffXkk;_k*7<$6ioIZbIcH%nV#*B}^V$ISG?PDI=|r%E-qO3=FOT$rT`lkoW-wF+;csrXV+2*2N6Rp>mXvNQ14wU1;BZrXk3LKXp^_b-t zL_M?&1DVYNbvH;kE_Z|WNrB3_=g{;9F$Am{?ryk#2L}ew{b(Sw85mMwB?Pz_0*Nsq z#6YgbR-VE15Gu=H>fmJxC~v^Zv6o=CRwTm|LGlOKx#)u6yaBt<2Go{kU;y<-^HOts z6CtPlLi<`EITi-z{2b_+%}*pi=gFhxKB(Gf&~`AW*#QYDNdN8yv>gl&FK8d^6?ps$ z&9zXoKw&R|Hr@qVg9^Ie>@`xGS%v|#ZvZ-b7QGJvYAb{GOJL4zAea2ejr33)5{Q1) zTWDVbH5{QWNvz?R3=hZK;BbTv@@3}dflD!{-|vFMF&*4|Lk`FL;BZU_SM$i?55eIG z+Ao5L7Y3+VpuUgf%;n@ zHfXIq6KHKe1CzifXc&R&NKo1VsROY=egUyTdO&PsJ>QV@fYJ^~9Y_x-TtIA)9uON@ z&o3lBpmYdQ2hsxy8xR|$2gF9!^AAZ6C@n(NLB^Otdj>#Z2hs;(gZ4czN<#MLGJ$At zpO{I&1-frR3)-Iy0PhJaD9TSxEiQ)U8IXP!2GAWHpaEb8@STRBF+x^JSm=ZD6fFEf zCm|zF(}kx(6k$l%gWLw`-y-fQV28R5Hr@pqQ+0#xZvo{gkUuyVWj19yFnJXg+TI&s&8vwb5fg#y72kFjB(AY8yLjhb2 zw66dZuW~5yT9TOV?C2C662uS+XF}o+mS(V-4cfPeY&K}kImm1UOtV9MpeBd<5H?qc z1+*Uu)6Ghl<_0_aySPG)2D3qBC}`XSRHrd9IQx70d4|M01~>+V_`3Rqgm?tGI=Z;J zK-vZjFnQllpAb(}ITo0li)XN-laFh>zmKb-i;F9$%mSIs0h137aCLQw_YZRoiuZN( z1zm#hQH_CJ6jtAhf)wl!hHw)&+rfbWU)T!b2m>|DFmUqshlMVP2?<{u`!3K& z8bL!eknJj!e7g(lbynENiYz~Yedf(1PPf?_BZdmwgz z_N9Q*4Hmz7LgUsG6t8IEl?2|v53NH$cb~B^6gcJNC%Gh+B!c%pfXviIauWwACY*fy zoxp~I7!do>%!TI_(3mIat|;U*4s)wMy1CAd&R}Dm9i6eb6~#=@JO;9vusmsq#Y~@I zPZyZEAU4cwP#R=o2zLy24DgJHT*MU|AK)4k@97s18WQgm>gMJe!~hzLWe4vy1eF)Y zk_-$srFnUYxv43-C5h>F4B;jyeCRyQGBL&K? zJ?K6@5REkF1X2g8=RoQ}bpS{Yq>g7{Z~>`hU=nZz(P(-WL(jWM*W(US%fKYy0ix0L zCdXV`bjL^pl-rod@??9+NSla=l2jq8zS|)~IkQxRife;W4b`N4b0W2KDpmMOi zu^@9mc7rggc`OVOAhirk0+ApZ=bERI#B|Wb_Q4_U;KT!EgUSeyyFvSaKTqoA@cr`ptVlH zsU_fw0Md^Ok_7b=obwAR5o-)WB^ekL7@YHSb2Gtxeo(m{E(u!S6qH()S_Bu1k_64S z`Q#^OgXY5W!E0YYYC+;U454|Ti%_95;CZun&^{xE;F3h>9{40l(A=7HPJUi018DC! zA81<{Qhv8!fNt#uRj=@U-XIPnuj4Dfe9+1-(7sww9#2IwA6&mVJA$r&33Ckcbo2`W zrwSAiP}+diVOZKzuo4wqo`T9O%)Y3nOJ;FFVo7oa$l;)sUPxSsKR{_O1C~CZeU419 zI}vRLP@M4}u1{fgMh=qM(6DjyfrW{iPY5V1%%JWA zQz>78JmY zld$`BMNsP|So{>AmM?_P)+(#59)T%9mos}>7|(|VW~x+NgwFg1t`A@Fcd(J zC}8;X5i~XdN;5@B=8AyYL{M$1DNv=LP5_!1B&@KmuK-U@gVtR_69ft$qz{xHO3>0n zDcB8|>7fiP4o?qov!Ij4;Pss#GeP%7LF&a|NRtOTUdqT29Pb|*5)cZlADI|}PlE!y@H7L5$N74EP2A$7km;*Cgc)iXXF#3a7jVZ z1t@H)(88t~90rK60k!2pd8Gy{4i6h_1~Y_uViShg1uB!UxE;DM2pW4xJWx1;+*gO@ zzIw1b5bguzH<0@pz~XTCK}`Y`bdX)gAoK9$<2iz;`2bW#fYK}I%tMH&pfLz=KJW=Z zbXLJ^LS~;wD?dSQ2ASQ0 z;047ptrF|P}`nG-RU3+6jGFo4G7u%sVopAzIM z*!m%8TEZa%iYrjM>O@OdUEsJtq$|*RV^F&428%;d0HR-sY#*X)i7X1TCkYx43=Ga8 z@s55jpw_dCCwRpMc)pYoB<>%CBn%s?cMgg7^9Q%Kk<~MU#C=>H-H>#cA@%orA?c+l08kTy4}n1chjjesRQgG=&@64O(mVTi;7`3Dqk{b=Df0USPva08`nP`FJ5 zi^IbWY7!_vLTmt;hc7>Z?)k=6uTDlX7n)~6VIB2QP*43cq^`mA8>qeN=;rDe6yzA` z>DmUP2to1>=!}%9(6%ZE1H(tyU0|TQ%NZDwT{3fv!EHhipNS#OEj1BzR3AhP zQfDV8fjZr(c_r{Wi$UTX49TDd9$XC6kKth`C<6}~K*tiMf!m!$>BWgj`K5U&;CKR^ z5jY*m-x8pD6Yg+ufdS`%!u1-oZU%)R14BW1axr-E8MxgDat8}TNo4`_j$2UspMxP8 zWjter7^v-=TLQWW7t{^`@g*3NQTPfBiEuv1Obv$gqBL+H57HI}iRpmEz&?f^*95&& z8q{VmU`Wm>&P)M^BS@_SNG+&2o9dKVQVeNhgT!4JKv(k?m8GVD>PuEp&|2G>NMYdt z4vP@S5G?%=Sl`1M$5~9XL1~$RNnj3$29MQ3`l2B9pneC)eo$X@9!Q>nNnk#RMmj49 zq|OK0uLP-w^h22$7J}3H(8I#89Hf?kNnizt#^RpoXlF5k&Qt~E-PKU_kD%!TbcQ|yt`&J;iw8YY!5{S_-Q=$1}4Y;r6pBGS+Uyxcf+u*24N0ZBp11W@>a@&Tw%i?7^T4-U5iSJ*f>s2>BWzd>gOLrOz+`3%NHw9<;&-TDJR$gZks;;I(GR z;-L8z4~Dd&#N5>4_=41;_@vUbv{cA_y^ai^`yPuEa|?1(<3WpZpmu=V7{QPP>cWFs zN8oZ8Bo@PvR+^I&pHfsH~{&DfguCF z8V+(YEV$(#kXV$MTa1{M#E^o7J*;d5tuqI$p9al?A<7tLhFzetf`Lh3H;6_m8$s$p z>Og4_R5tDf$ulqs>;utAWgSQzX#NMJ7E&%UF&qG?VPFzC2%^!{g2tth)gA_^0i8<= zq8k{%Yq>yaa1Yr3*vESIgYzEhSPw`Hz05iUF0(-A@h0ZN&M`a+E~ng6OFTWnX%5uy z0kuz$f$f8Yw+QCE0;qsMGyvhHC`cF*&ai$2wlQSK5ZLsQi(`l@L_O%-TTpsuUrIuuwx^rR#MgKKzZUP^v>F|->FS|EWc;^4ply2BN-jfL-2Sx}fT;5~O1 zqyp4_0hP6PT=ItH1!787@vv%t?jwnHh>R)AJzhBaj{@Fdv}?u|IMuY=MX1CziF5RFvcfz*S_C6Hf1<=riiJOh)!Z4ixAhJn<<=Fnl~-Cd9x1}1@f zAR6a5x+iF93;2B0P&gCfW>7wO0M!d(KZLSjWB6b@86acokDzn>5W86z9)r{}FbO;X z(G3g?atw?@YzzzxAU&Y+9#l4i>N1eOKn+fiA0c|#7@mRjFfa)`2hk0nyREQ|y_F=U zyLbi%1ULpc`UZnz62V2d|0UE6P&tTMUX&!JBaaqC*`T}#^6zV?UQoWms@FBb*)_n^ z&&?lfJ)8&A{}!rWi-A#y6Y6(RJ_h+8^c_qof@J5n>;T>o#2hus7>sZkCUW3HY>!ACvItUi~Nc$q5!s;TJ9JFol0z3x+ zs-s+r{nJ2wI!K@MBe=cnnOBydoeC=FLG3}%`lU}`cS6cW83w{*=UDO{xC;xacR}IC z!jR(w>6JqI*r2@k1<4L@-iG%?@%OQ#pkWCLdj^K0^s>aFbdcM@c7f+%i_%jviwiPS zK>kc|EJ}y?6_jQ<7?M%=JPgSQMbJH&p!)0^lG`BV825Q5SOdYkA6C><~` z3H$`nNM!^_Jt+Tx(iEtS_zjY0U=sKPq8k_(K;y+AfBgcx2Yb5ti>2)X5<^ZmpnL$T zU;cs3fy65hgC}&X6I6SG##bQYogf}49~eQy8RRww1|Rs|S4ez%WWvH+7;Ic-UWu6r zgB$~!C^G{C8-o<6Z4Bz1L^6bcDM-GCg%jv318m_0x*G;eQ4l$1W^1S&ntlVp!lkTuEz$g4+@C)^bPRwboPYKConQN`v=6k28KHNfX7}z zYm5Rw1BDPF@R%YqSdEWsaBzr+qaUPA$O0B~4{~)3aSZ|sL&h0d!QwEr{y`99AaZPA zIV3$WY3SH4J6Jx<(I?b3J~+fNC?q)CGsFX8A8372Ks-dw)z1YY1J%cgqz|;1z|qq$ z7?cJwIH3+N$eNYuH0bVx@ zOYfjM1(e<)^(rHS5GXBz&bkKC4GawDpm`Hi4>2&5JLjiB+Ib*86IxpkG?vH0kW^e! z6r5jLlngHCL1_^r&H)xjT6zktFF`yb%f=YY~wG&2<-~<+-G$r4|*XrnqJ1{tl1(_;W#XW)Vqg-G0MSTgE=WBnY(ahjmAO(NdC+;@AR4K? z15yVXKLe?QVbpa6Yz(p>Jq%0&av&OuUQoE;(yIW{13K#)M1$SOBmlA#G)@F-bAkBi zZcvtjtjUC=4K@Z9kbVXx0aXwU-b>FY1X}wE(+i?OZUD90Ks2g;b_R8jJ_aTM&^??W zyJ6?c!1RIcgaGLU@j>ARv6q!W3#v~WL?f+F0jUGI8AgNbMAoMZQqRC7pa-In%5IQ) zRJBYD1|T&IOag`=8mtzvJ_QzU#!xv>8p3Srd4e_~LsytEgd+1mWhSVuF@@>}vCW`t z^e}+Mqd7|0voctK)H5&%Sb}J<`ygvjKz;#*0m9!*4Avku3`_zxAR4J2f~iGS&&*&4 zQpdm~U=O0f>4Q-KG>*u~@aZGSt&UJ}WVeFMaFSwRfMJCFtPIW|^$bh`E+87st)RLX zp_Ylk4Wx#FNx&UMqq!9nM<9$)&&=QnQpdm~;02=5)MHz_;{#I1z$D-cq8k_(=0Vrv zNP_b}_BvJuOC1XmL$71y!F8;2QEFmIDs*K4xSmx4*R%cwsd-RQXc?s@1*%_R>cNv( z;POcmTy{a!Lqs8C%sNt-YjyOcKx=h;^UG2}UCh+H66hHqMpB^lI;d-SKzCDWFrcpC zv65n7fb5Hh>W9u_*h+!+#Ji*xmlWk!LZv`;9;p0wkOHmS2}%VmjD$&n#9gI8`{ILB zOQ3?FMIpt|a@|7;v==@&wZu6mu^4KHw-jifJ7_&pNn#1o9EzV51A_~6oe(H*2{AA* z`GeyJ(kAf$tqTGN45$SHYCl5e=RiDA-kQb)In#rY!PzI+IV1wK;33H089KHEse_r& zAlQfXR9K1t82cGy{bVsLmIF$p^Xm`iHo}G=tkY z3NSgSUZ|ahX3%jm2bg@2D|i^p#Sr4w26S;Fh&Tfy)PFGb#!zu4G;tHCI15zV&p#ft z4m{q)Kitp9-_ZqXKLZC;9%deNzbk_PR2-x)G&scHH{RDVDA>c%2WqYYRNmDOy!0EZ z*$z-Oe*W=pj-EcDL9X#W{_f!LW@=z)fXc#Fk2^X-_l&bNfOdC4WufMSBtc;fl7q*i zTadqRyo;-wW2g^!5<0{+0yZ`eQU{MyN9PdFFvk$rcw?h@C(jUA1i{RM$1hx+nF%&^ z@OXy0$=S!>(c9C{9hMH58yFbiz6uDAck%II0FD2PLECA8&~_R)fkK;RV77w;d=CTY z%nwlch~B3Q29;f)wUZzkQa%fTu9*j^2bGPWG7{9j2m{G8FbRZ%Xr!_cqzP#J-x{tZe^&M!)Vj#42wkp3X39*cwea}zT& z`0giA8ceKj`Jj8oI2h7$N^%~)NEJ)fZYT&9})mi^FV8xI2Z~b zfdCbQnFk68kUK!_PLR8cON!wBy8!VYEFi$5>yNl5D>S4#*8=^3d$0} z#zDkDZ95Kzq{^byG;myi?gQdrNQT=7N@pAlrSPx<RY5t%Hbx_HKZ}1>^vbKOkwL0O9~>IDyupb1)P@903(m zhQt}vArP}b=e~jBIS-s@A!4BM5s+S}L%`t&2?J374U}0SKF|Pv}CkCw_ zN&$;Q$}$!P_`o;=`WQKAEix9jAc`ocYfuFc?ny&)PdeCMgnK~cA;>)$U~#y65XLct zdLlRwb76g2(0DzzIwuQcCj*l}Hi$;5b3p1rbqFYJg6f=HkURsEKpu#0U;wWL!t`rN zVmfG@mtzQY2OW$9aSNzyE`aI>u?wMW*nR?#okb}9Atr`mkQxRiff5jnf8N45KeqrH zCm<%m&N8T8ke%gFHnN=+Xm(bD)G#m!RDo!Gesv4=a|WG#1RhF&aS-;_K=p&{t%b6Y z;{%j`>rm`wW~c|LV_*_!0MR)83&{^~tHT_FKx|N*39_pRsu#p=hO*J^Z9%iQ6{L=V zNuUixBlW#OaRRDqK; z?gi-ql}jN1fXZOp^DP_2yFnP_KM;+upN(NUNDt_YLlE7- zz>o!9Tf)fT=@;hj?HUhCD$uq$6HE-WTfsFbB+}hA1XR9*+pXwwpw-;aF+~n6azUE`36vZF$>Zbg;?tC>E{Azk0SUE4)D1+n7?LAF))Dq1Hzzs0@+`4K>lH15||63 z(c%tNPCP=H_hV+54^qd#B(MNPqs1L43_*6Gwt-m~7J<|h0}U?qsgeMc0i((uVlf)*)0nMttxwHm4ql)u(M z*~s~8trTJpGbr7$GcYr(1F2(R5?BwSk;Y0u;SMSXLGAz$CC0M5Cz%<$Ywe+d*m=m;`o!Xi&KZy&E+LT%Ta?2jpYv2Y|%T`vIlk zy4^js1QcqHB_*Kqsz7axYVa5dR2)<+L&pso!DA%usU>cudC8#RVyJjKc#H&eUuR+w zSQy$C=>m_DxTltYX4jzO487nn68F@Spwu*wwfMJyQ0FhFfyYe{^Oqn$%mj~_xTlu5_wOh9ruIj(sn zMWC~*KzbH}$4n4z1Gjjfepvz@GjU8wDM~Fa_D}Oo%}q*$h1YWM*a>9p$TP3FBry*$ zzP<`PegeA7HNOBh{<1-efx!cG9wTV*JTWsbGcO$!0HAaWcHd?x(0!%Qd%!_5NO7}G z3baNHDu)&iJEcJPlS1Xf5OD!&Z-M%{yTEA%(guk@w27cC9FRpIAA`7%`Vf{sKzBA{ z=3!=rJ)ktnz$CC2L?g9BKFiO42#BcOcu1}8nRCdk{3a7E5MMGoC#g03*w6~q?Du2 z{ea4H35ML%+)U8X$i*c^rQq8y!RZ_%Cj*fK4{k!FApH|iJ*L2rQvjN<1$|>-5^B^%jP~Wbo7~Izb@eLS~VFeM2 zIwPoEVQG*#E|6LihU6s2oXqq*P`Lti7f9TUp&XQnASD*G+yIGNFqHcyX5|-!r55>> z=0d^`ByPn}?wgs1Dt;1N&XlC27AHIAWG2Ghatd6IWTxbRWI(nseEJBAf6#dBX{5B} z1DY=bMLCZ4JV*~_{Db>PKAB0Nl!d4}K|D|z0M(gip?L+??>Yyz6VcBBt)&9>bIyas zA?Y02?*f%;kZu>WKE~1KLYkui*^D|*0}_F`K0fpB)q_W0i`3jb6^}uIRdIvaHJzpivbi}(1ZlzLiBm(q*vlObhI~+w16BtaL&|{;B9+4D(;tA#|J0n+Tu=mrfzJR1wJkvDM~0z1EU^fZ zen4WNJ0TSq$`Xsf#nmV9*~6f9R}Yc=tpdu=(7qx#O+ne9Gyz)w4l)Ont{51=sQ@(F z19l(CJ`SY4MxcE`JPbwY;PqF<4B)Z@v=-6(XRuFlnWE$>2Z$*9)LNh5$omUKv;j zQXe#nfad3t6LWHs^Yh9eX&5xdD#4HpHVoFb0*Oh%#QY23DU)q=tb>;0K6C zQw!>kBfI$*NDTv%z;6(ZrWUoo%Ea&&q=tb>;2(%a>U+Zc2bv29V?kkwX&);C8%R9^lK?x2MvDWG-%-PgnSm3e z4s?DPh(_~2$c-SsfW`_y{Z1Z`8U`i-UJwmd%OL=A2dLc*ODFtLIpp*QRwIDChJ=|x z5Tp)th8T!$U|=`|ZTr0fr*Z7<;eptb=0MwxtkR&lc$k=9KIl{q&=?QMZ5+~|`S^g+5;uf;keCSrObk^$w=`%j9&Q$B z>kqi>!+RF{f=;A>b^>8`2uOqGSBhEpgtpLJ)}62KNJ}7_X!z7@ymniG@NY*@Vaz(K@R7E z^kAuX!SM-dqjNAo+vw1=B?-E>nE|{p4AdY1kHLfLT`44gfY%nonkV3D7si3a11#Ty z)+J%9H)KHhm4Qh>7DOY}8zA+dvH}!;pz=T-B+tMkpa7zg%1V$rkQ(qB9h5cfEDTB@ zwG2!G${-qCzChMC!SsO4ht)NzATUt_B1}%^p1||V* z5DmQt3zUxJz+r~H98#3VTzd-=LobI^q(SWsKX`gomju6D z2eLZ^#hpwHp&&I3Oafsb8XR7bvI3+QHC-_=M1a(Q&Kd*JNOL|QwV=8P)V2a)%yt$V zLo`Sa=nhB_jZ_|j^uqE2>f9C!LmWsg1Cu~Jh(@yyrUw*`pnedDkBB=qhD4Aa1}1?d z5RK+9P`H59!sZiFKx!D61X4jX=>8*UTg(ZZhOy@tS1kDjB!-?}+`;(;I=&C8@{#rq zd4cl|k{q-i^8=TQNaEnE1?igwg3CxGIsY_p>kO2?!@>2rduoYKW)gT98#*o)B@J3D z3DpD2g;0B9r9o>YL1Xin4UHTV@`3pAV!APXo8lpyS{nFpD95 zHeLn>rgU%^LdpRXNI8IW>iI6B>6$(7tjO*xmwoV<5Ex z;$BdB%fbNKp`Vxw>0mfDZ0z@N~zaV)~Sr1bWDz`xABbR~HF)#^~gJ>l6puQXEJW7xraGAjZN*~M&l^}JX zH4q>gseA#M59*hK)q<2VFfr7C)G#m!)PiWRS`Gn_d7vG`^`J9CL3dF?cN<6@=w3)hS}c<3&;_EA!V07ZSv`mkvZDv24s=H)h(=QnvjgNNi22M6 z{UCJ=Oac=?G|svZe3r5g=;R3(hEOC9qAr{S)el?W0E$acnnb5T_0?o(y$EsxI|B#9 z6p&uf`UVi)zyQ9>0hEV9`WYC&hX;V~OoEBAz{NmkeIW8D2ZMiFT5&3TYz(BI2Py_u z2`w)`ZsK47-$(_Y>ja4jFl2x`exSZ8EH6$+$|E8SNM6Sh4j?^ z`h|G9dAbHMgd+1mWgDpNFca!;*nUVz*%O=!x;F{tX8{JpeRv>$i7-IQ43Io%?I!~R zV&(?q4$!#wY$Uf!5O4>qy$lKmkoo8|DBck1hMi$9$jzWTE>t}-e&A)ni*UVO zbqt9QcMNldFhNxiPAP=h>!D_^g05=<14k|c1EVJcgPI5f1AhergNP*qgPT4B z!_j00hBMg=3_7+93=@JF7$#OTFtDpKF!Wh6Fi46rFg&thVE8Y`z_8n%fgy>Hfk9e| zf#JP81H(!W1_q5(1_mAr28N^}28Qj{3=HDl3=GS~85qp<85nlgGca7_U|{$u$iT2j zn}MO(je+5n2LppPGXq0wB?CicCXAeVumGK7JlrILYRxd{Wqn@k1<-#`Wi zLm>u+W-kT?iD(9f!>$Yrp!Ha0o(v2TRSXQ$tPBj9;S3B@MHm=<1~4$J(qmv?jbvcZ ziDO{Ui)UbH^jrFDC|uDs~2j3H%HU z?J*1t2iO@HZpkq)WO*@GCPg^m;QeB*Zc>#A`7ySP3yO z%(P@+h+t)45Vc`oXl7(!5MyFscw@)Fke$lFkWj>p;FesWq{I({afnicI14Ek(14Fhg1H7#RK*Fff4H8D>=s3~E{o4ErJ(7>dgo z7?R`|7F)-*?F);AkGcfchFfioCGcbIs zgya(@Mh1p%e+Guj)(i|+(-{~(YcMeAaWOE6MKLfi)H5)Y=`k?qMKCb@vS45cWMW|0 zXTZSFk;cGqDTaYznI;1RmmC8_Pa*@u?_vf9FC_*B(48WGR2Ud+tr!^A>o72Y+WN;p z`~U`q?=B1sQmPCLzx@~(qOutnJa`!xRD&59+{_plP6{wEtcz!0I9JKQAnCxs@Fbmq z;iCitgPbA*!!rj4200rBhWjcE486<@46Cad75rp zR>Z)tJBoo}6%PYLYb*o9Q(gw}ns5;>1_pl*28OMU3=EGg85p*TGcX*fVPJS<&A^~o z%fK){o`K=IKLZ254+BF&2?N847zT!&;tUL}ehdsQ8Vn4J4Hy^<#26Ura~T-=`4||! zNH8#5aAIJHmtbJHtIfb5<;lR%=LN}I(L4+c&DsnMR&opsj|14CRe z1H)-?28Lyc3=Fwy3=F?57#LbD85q7)Ffcp_VqoYAW?=ACWng%t!oaZ8l!4(~J_Cbv z3Tn2_0+zbrQT^JbJ^cWa!J1{W(j%HwxE@WT`&ShX&=F7m)!NS0hV#UC~P|3i+ z8pOcB?9ISXkjB7JuFJsiD}#YyRz3qmX$1oVrzr!2umb}_nhyiR%Txx2{3Hg3K5+(y zJ>m=u*Ay5S_SZ2mtoLJJ*vbe=vnm!047%nF4BIRi7=(Qo82n`!7;FU?7?J`Y=_t>Q zfk9S)fx(iOfuTZ{fq^NAfnjnj14ElO1H%&@28N(w1_o{c28I(%3=CIw85oRo85j&1 z7#L0nGcYg;FfbfWXJGi0!N4Hl!@wZT!N71Yfq_B6je)^Bih*H)D+5ED9Rov!4x~Pj zH)3Ge%f`Tvlh44wX2ZbHUBJL#<-x$PT9bicr6&W!;yeb1ttJc%D-;sbOG{absXOTgt$|k;uTXCxC&$1{AJI3=C^47#No4FfdpfF@Wbb zl6e^zVzd|-mS-|B{BvMn;4fleI4Z}$a7>qhfsc=Y!4I?m*M@Z)egXqS zN-hJ#4GRW_pRx=LHi`@kJB1k-CZ#ek{HbSP_>;`Q&|AvDU{k=rAXE#96LoV22EAYg zhRJ#i40qfa7??C6bwq&;14E`51A|pA1HPGsmZ{= zV9UU8Qk#K+$AN(%qnLp~la+y?%7%gAZ!rVIt|A78YI6n#XGaExb-@e_`%@Vhbi^1K z`Xm_`u9q_~e6nC*sMKI!u;OB1kW*q{5Km`dxW>i65Ub9>pcc)*(3;G^&~47Zz!=WJ zFk7C1VP`!9!zxAwhW(`s3@>FF7}6X2!tqP?mw=b{+%6Ol}5- z?}`izDZC5}`(qdw%(EC6iVPSSvQ-%v5-J!Nj!82xG*mD!oHl1*V69|ecrD7nkW$aU zu*jH!;ink`!~IMKhP~Dd4ApK741&B24E{U}49_?j7^Vs_FnkkdV7P0`z!0I!z@Vwl zz_2)xfniEC0|S>C#BK4`3=Hj73=GTT7#O@A85lr&Rtn7-7=qIo7z8637(iow+w&M0 z5+xWI!~z)@`f?Z;3OFEjOSS_8gMTFh1LzFFtvL(~yZjj#)}}KsoN;AfxMl)ryEC{l zFob(BF#I)VV5k;mU?_=aV0fCwz+f!Lz|bDZz_6o;fkCLAfk8)=fq{>cfx$qKfniM; z1B19Y1H)G)28LH03=BP@3=F457#IrG85mBmFfgo6WMEJgV_@h^Vqgg8Vqlmn&%glM z`*z8hf#E+J1H&p)28IlE1_sdB^*Vb71}A3*26Y1lhIiHs3=3Tu7__n&7>pDc7$#*h zFyzTIFbFU*Ff8I{UKGVejTso8)-W(ghB7eN`7MQN@ZX$D`H^KWny4xFk)c1 zz`($eRlvZo%9erQh7$wBW?lw{GklOZ%yMO5IA_4X&>G3WAnC-wpkB|w@Ft0Y!Ox3< zp)!SmAzF}uVKyipG8q_*T^JZPWic>(FJ@qn;9y`-5Mf}*6JcQZAC` zh=E~(F#|)08w0~)a|VV3sSFIcwhRnH4h#$uHVh0;r5P9wBr!0Yuw!6YWXZrV-;sgg zWjZ83+GjE_Z1Q1XIOEO0kgf))FF@_V+zJK;!xRRF|9lJ#s&WhrhvOL-xWX71zQr*x zROc};>loh9XdVH=KdN$drL$atQ;&LQw_=c0C4$ z1Xl(Iwm=33_bLVkvqT1l-~S4yiCOfX=7f z%fY~)T*<)jg^hv1fRllN!;yg@CX|6eK9YgKmV<#|Nj(EYDjx$wfEfb=gAW74ZF>d= z(B6x!iVO_l@eB;VH5eE=ycigK_!$_|LGhBtz`%XVkkJA(v@F2DFhhoc!Q&Yt11rP- z|DdT7@Ocmn3=9cI5DYpV;(-xJF=$;NWbOvEE*Lb93mIQw1T7L_0F7ya+Et*rcI;zx z0g0g{nK_O*Ir)&wRNRa5OACB5^RhwbDdUhrjL|WJ?&$>YeT1BWz#;&0QyzS+3dk)i z4A29kKYs$B=?ofkVg;)MsRixVr_c>7khLTrzk=)s`PB{UdUdS!;P5BHkDO3H#zDt~ zLE+56kdv904Vi=njo*OmWdVyhfzG^!&(nd#IT(sT16!alMG@y=NQ8$vXgx2;&7iS; zQ2Q7XGN33V-OaGMDv&!t_Jc4eU4UrNJQ6R+KMYI)d>|UU9s`noKyd|92b#|Z&HV|0 z$-(rCg4b$7)?gQNiH3=wSSutLHlq$o2nFTFG;vB)K}BqO!RJvA@2D6u5J2o|F_6(HhP8tOOL zxn&?XfX3orG-zH;2JBAA-L#-k0QGM`X-y8Q7sQr_vSH^bgY+>l6cnYFW#*Sc_Ys1` zSQv^D^HPFSQ&SAVV}T$s4!D>R_>5`L9Ec(`d_n1ehk;uDg~SugKcF>^pm{|O#TZ}@nlATcyAF|Q;u zIkO1bsiJp07i8+}m(8ZsS5&?476Jx_?gnTggi2NYX`5+MU zzaZoww>?1J^c5ivng)dK-)3z1cB3E>VhCgm+b_Qaam5Jud??0-?>7n(of1<#{UIhg z=jSG6=0SFm!rlA>Y<_WRT3TjuW@=uEZ)$FS5qPaK#9co@W`Ga)56RDW%1npMoiH~1 zLKY9sP0RtG4+7Ei8x)SEIXTXWIXOv*$=NVHe?WQ?q1T)RloY|l|K2D_1fA}c;$K<< z6Z;2tS4nD7USbX;m?38Wzfq6~@lI%7Vp(ElPGV9{Dm1JZZi2!evL5<(FUL2EN(=mOj|PW`ffX zR0(K41EP=pWI9SUgb49yVkP{EMH zbcY6}8WeZvV9H~4hXI;83#2eNL6?I$13JeC@~;Jk8n83K^Kc+}8w`0QXCRs5fUGXm zGq1z~5gslWaxjM=;?)CF4cH;Dc=5rMM{)?loB+^T7)UCGCQ5`mLJ)GEc_l_BpmGCd zegv8v%!M%d7!-NP*@G~-1T;Bxy(uX27VtEmfhrEu1`qojgghifk;1zGO%A3R=B5&m zypahgw_=1t1wsyzlab7=L6JlCX9JoXx}7a3@(6!+po+t^!Ts5TkjL=n1T;CAW|%*x zfaDF$u=;ZbLJq^9b5P_^)4~E2IfOr!po+ts0{6!Xggk~n)}YD3G{gL{0VHpM>qy$ETx(FZ)?o}}`Fo5^cf!e+d;C3;Sz-a#; z6g(gdX&s=Ab-;RyXu^m-;%NULGQPsbFxvkg?f)|gjQ0Ow{kPHnKcs&*+W#Nz|K}D! z#$ZPK|D*kX)NzQ>{y%DXjQ0OaERe@5M*IKF450C;(f&WE+YTAdg7xP|QvZKJ2?GP@ z-b7O)1_rNm28M^#3=GDs3=C2H3=C453=9F13=HDT3=Dz>3=GR_7#PHT7#IQ_7#L)Q z85jzc7#RL5F)-{cWMF8Mgsjg`D`jA?^J8F$uwh^*<7HsrFkoO17GYp0W@ccx?aRPm z$<4rEE6l)Pq{hH-#*l&GlNJMmvjGFc#!Lo=R9yxJE?)+Qi{T6mV%ZD~(##ADs}dL( z4puWTw1zM+gyu3Zh%zuRRMj#toYiDtaLR?OJMQCTU^t$`z_2QufnkR!14C^&1H%?? z28M1y1_r@G$Qu0X!3+#c$qWpNr3?(FDhv#5EDQ_*oD2-|atsVyehduiK@1EM>)`CCI>#?#sXs9mc?*Yrw$3Q4ZQ2%fP@E!N3qz zz`)>G&A_m`ih*G+Xw9871H+bN28P+`3=Hdo7#RFQ7#NO#_B}*1FwD1MU?@~&V93y9 zU@)v^V6eAkV2~4GU^rXOz)%&?X6ch1A}rX14B(F1A|-^1H&0T28Jow3=CI`85oX>F)*BuXJF7$WnifDVqnm& zWnkb3t*#&40DAT82*6PbqX^u$TTo8bc--B z6f9t10G;z@ae#p#9<<*60RuyU80ZWVMg~`L1_l=eM)3M*76(QK9Z3cTg9Ju~@1VOJ z8yFeRNHH+1S-{A!6Lf~m0Y-*083qQE2cV%Ui2bAFXb6mkz-S1JhQMeDjE2By2#kin zXb6mkz-S1Jh5+jN|LHOe3^rKS|Hl|HFn};<{r{cO_5a}egh6YLL2Ld&>##v<+(B&6 zT6$b-2GJ(^N9X^cYo|fs2wFQ0S+mW^FuML9a%LB7y*wmb*ueXnL1_&%&H_qnAU0_H z7R0uL?hyg4>mObJ58E>_y8b@}vUGoR{l6$P17pMJ`hUo}iP81{puI(->;ED95JuPk zLzj0$rvZ`I&5o}B2W?mxUH=c+xPu6X(e?kJGm<>>N+2uBA(Q7w>)J=x|0B}M2wDF> zI+QXR0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*AuxzTfQ^BHVG9ETgF6EQ zL&G!3nrTS}1_sbMf4U3|4C)LF3~CGv46F>GUC0a!pfdq@7(jPOg3i!mVBll`odw9i zz|8Uqv!vPp8q#`{@>{Ne`%>jqv!vLLiYQPp8uDVS%7rL-{|>& zsNpes{vRZtlz`598$JIIX^!962>JYk(ewWh=k5*V^Z&FN7#Kk3|ABh`6rBGzh(|a^ zoi-W*qaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsfIRFj zqiJ9?4UDFN(KIlc1}IMhoPTC8&t?!Fq#HX(g5!xF9w46w*Uh# z5tvWo7z5q$hFc7LApH3X1K%hnIt=(1iZQ_PhAswv5I%T^fgcyX{)2&^3@orAjsXqF z2PB4;Wah+s=4F;-Cgx;TrAAno1>_`V<~ir*m8BMyq!tx3#0MmXXXeF+yZCws#|M_C z7FD`s=9Hus`6gCm=9cCxcE9a=Oa|ut2lca*sC~u*_);%X6B@(*qhj!W)#`0 zxcJ$tIJ>3To7t;4Iy%6NaSd?rck%P{@d>l9Z=inOV>KB3{XYT6m=;iI<=HQ%IP*PfyiXv&@>J;GX;o;}z z5Rj8tnUt8EjVkTsJ+M8lP z9GS(*)xp)*#n<1}-yt9|Jh3>jAQP$lM7PGx)zQP%(a+f-4_X)&qu7Jn4mVdHCnslT zm{0smOK^I{-OJP4!^1Pcq1-96q&Oh82vR`Wo8rpvPOc6fpj_eM>FkgPQ4H3Wnv7SE zkH4#npSQo4Lms%Kbj-<2&x890w@-Xs-MyV$oE;tV9Lv(3DoavfcHz?E=HTM%<>c+* z>E#ga80;9}X>SZo@*ckSrg@3EsrD*vJ|LlDdlff7w8G5E-NDt*$=})2)!)IfEI75q zHy4sz1Bx>9i!w_pQKQJ+!NbMb*FV6~!y%;{8b_cC3+yo!7e9jvkVO%gmiT%4x;S~c z`8YU+x;Xpzg~YqY`}v2&2Z#6v1h~4OTjKBJ?&{<0=!r-(?x`hSiOJdEx(HRZhl8_| z2Pk*K4r<}zrcPQH$C(_P`FgR2(ga?8on!Nbkb$;r{x2}!w&YnZ1q$ddTbU^L@B9lU(~ zJYD_WeGx$uUX)pqiX&`19Rl0}{Cr*A{SisY6j7I@*qi2OqercmgPUi7qnDSvJCYuI zOS}-ZK6UbPa0~GBbaV7_bZ|^A$t*)HwZNqkYOr}bcsRTHJNkmc0aF7c^P}tVa&-6f zaP##9g+xG6ezIdqN)f!iH%-eg0%c}rH`Myg$=kupCBWO?%LCbWDXC?d$*K0HnJE>Z zsvnf%4UEuR2~OS)0d8&q{@#wRNRb6f^PYa5A)byto>A!O-p9e!)!Es_&&d->2Q;mP z`1{BEI0m_+#juZqo4c30e}JDWBJ{yc78OwDPfAR&H+4xYNwhb0%gHadS8;Yik3Js< zKOa9QKX(sAf(?!j@DKJ3@$~nL4-Rqk@j-W{uY;3|n~$@v7jh1QIun${;~|YAl$7i1 z;Nj`z2yQ8Kus7AF^F7L;V> z=b=WuuYgVm}9}a3DdV&%_3b_48EbyqkZJ zuOn*H$jQ&a&ELbt&oux!c;T5GT#`73U^>{t$vwc!!^zztJ|I6Q$33+KoNwHUKy5Z0 z+1=m4$<^E0*VWC%!Lcl;1kzrBl>YujDXB%7dFk#&`K1M@;py+-?BU_z9N^&w))k(Z zS>m5Zgf4dgnU;<&PAk z;X(d>?(wdEF5u>Dd`M&fS~=tI;P2t*@9yD>C?;Iv!R>kvM?V)IXl3q-nv|U#9h^J@ zJbnDUe34uX>+yhcO|iXcYEcnNruXoLNMJTqoE;sUo&3EW{rugKoDQp8p*bYLHOSK+ zwLJmS=j!6_=;#svO0lV+o;s|RgO(&vqRH9O!Noto+26+%x#aNlbM_Aka&-=Y)zhFN z4_%+9o1d4jqn|I5J3~A`X&v0?337G!3=VM(Ld(R?P7bba0p4B#&bUjRaK|uLXsHn& z;OuK}2Jc-uJ309J`?`2J1~|AuIeYrLDIr;n=(vZeq}CtrUbKPLxhli1#*JS;IMGX;068ll_S z!P(8p+uh0487YL2s}NAuarE(Y_j5&Pa&ho=^zrp}_Cc;5(bJ%7M1ZSv2(qSt0CyKB z7f0kK6VxXE0M{T#a6K2`>gVE#(B$gi>gMa_>5h~~g5#kP2rILok%-Xb=HTt<>+K4v zn-FbWw6Y4~Egys?cL#re7f08C06#gD0*4Uh2L#G>Mi#2j#x7lRwZ_NLDMzV@aC`I!hiJskXfT|9g}ywL*RB@`YS zpgaUhst8S<4ql#~-p(HGE;wsMWUO|o(}##{;uABF3xbLCWAVsV22{oCa75k zDsho*4RH4M_6_jyCCXOUh!7-Oy&RleUEJOLygf*?)yu)fCBVni$Hm9N-o)O--Uvb# z7bV*pW#ku^Bo<`a8ty-eqV2IXAfs@ZzTP&vKnDAWE8{H8KKeN!Nu3v-^)5TuJ1Kd|nu?P3!5e9iVczC;bdbqeE)uo7*eoAVZy-9EoYU9~7H?hLr z#MuKy6xl={S2tG|7e9Cmm_mCt#*n^HioI!OvArp{L6Hm@|3&EbcJT1=aPsx@M(76R z-9(VX;RzOz%Mqoki=Ts+i?5##s7nnWurS3M^NFA_6S$SGE)LG#uC6Zr&Tg=nH-&UH zOamMt45-61?M*=?C!`@^2J(y>qRe%5b8zu@a(8!gh4-0Y#&`s|28a5Dfb_!i2#5nU z2;mYp2Up(!Usq2jXP8Tj?Xi0yIlrhV6`|4H!PCdh-`T|vsl3OoF(ow_S)-SOv!k1% zr>|##gR?(m@C3QlY;12@nO|yenp;|2VsDz92)EJQ+ri1%&)Ln}#R=wAQ$#$4J9>u1 zhj{wB`iF+to7!92n-&zowR$=`c=!Z(Ir$@HY~;F0#o03xG-3#DVuJE1sIP(0?c(6% z;p-gW?Tj=og{D0pJWPkIAFkcU!QIit-QU;E-vOyQL~h9XICusGxH|`UI|QXBraB*&@c?7hZcm|YJFCn2t8E z8{pvM?das?p(dY4Lup z5h3vb{^3Rp@z87(?-u0m8z1iJXKcg}@9XOv92}nr9j$@!Q&N#cAdMGD06XXB2IObv zL1xr^p)#dOSR@0yT_fWilM72Ti!(uC>gmD|4-qRU2rW)6^36|4&53udNX{uuNp&mA z&kfGVFZayzOD*@zD=taQ$-$-^yCI&%E~&*OKAFWO!Knp_MTsT(Mc6b46s3ZO`U5ia z@-p*4vuj`%BD*FiH7Bt&FFC_GKQ}iqF9n++FeNUT#RWNum41o2sX?j5`K3k4srZz8 zCg{htP6UMw$P}3F(v-}6*SwShP$VpmE~h(xi~e0(elN*dCBkS)7@in1k1J==4f)Jh;K*Qj}SinimgB zOQ=?+XXd5GyMV_7L7qwk&FLaJ6)f%V>We8C4;?%Q4`?Hs8Sk8*TTql*3@WTp#9i}} z^HVbO(w#C(iV{muycUnee9z*r#G*`4L^x%Z1fgpPNKMQROUx-nH3rg?!%z$n2F?4R zI0%v%(bH5sRJb%Z2`PP)WWe)^b7D?vUP@w7yh~{ja*BhCdlviWZA3PqInB!PdlA4#2nhF~9O)V}?1x;Inq6w!$kgqTm6{RQU zWmcsYL5;z%4JHrLjV>9Knwy!Il3E0v5l68-D7COOvnVx%pfk}Gf-J&tCM^GBlPJi~ zD^3kANh~SFkOh^CAjdi4kqJqyfTeKf#Dc`+%o5Nt0f=8pQqv);2Eg3>+}u>~3I`ak zG!I$`#XBY^gH}I)+ztz*{M=lGyh~z9s%J@Ru4_d>W)UK)P}I2P=j7y}K=X48N=s6UP=g696z`InoDV7kQb3C?f(sJibpoiI zPE0O|cg)MnEK4maP6RLGfcP!11T0froLO9wm{)>gE}C3OYEEiFMm{17=0g-XWfqlW zq$DDo2o)|Z&df_KE=J21Fiohk&PZtnhYC>Yz;L(|sxbli#U=h}X_?8XPWgx^!0H~5 z(!?C+{1kYJg56$Fd=XSql$r|90cgg!C06($mwK?sfVtcwKQ|RrdBW2os%votx^rSq z4rmbsZuugdQW=>!DMhL9ViD?KPz{rqSLvIWnTJcK3#frpf|7+Hu64~#%*??a(a2Ip zXr4rtGsYu_l--f+!;)6rGILTLi?K=+6=O@>phg82NMlLlAbDH~93+P;A$j^@ z4;bijCPcvsiEb}PaQi1Q58UDn0F^-{naOAg#>+9@EfX5cxRv-MLec>)75PaanI+(5 za>(VQPhwIktV;lkbeKtK&hSml1P!%f_n&WON=i;DmIUXUpOl%CiYvJMGLy5hXo5sM zdMgK-o&8HPFq$M-q_CtvWS!uKC`PG^tO8#OL|2D32_h@PmIhJfu_QuJ>4~$j3rH<0 z&d*EC!4|6lMVYyYMU~K~!V(f_3b1BIR5kcQ15+i|@IY0DEkw{&U<(t7*N_WXv~&tJ z1Xq#^D9TSm>2AQ1eQ-g3X)(4WjMnafXTR2F5XXTYmx& zZCoPDfJcI0R)ZxFD+`be@+=N0$}dSxE=h&;-$80YMuT$_OeJV7OL8)(&jD8k7J@YR zkyRBXXJnQk3`;CY1=Z7_S!iUPka1FE5zk!6IzS||eDhN>(=rieAv^#d*nsp|opTb4 zi$PscA%j~%XmKho$$+B#0#GJF8+JkVDXh1G#cr5XuuCvD+02~Oyb`GEu*ioN z6krb!sE^~Jg(`|xxLi(oVr4O?X9;nuW3h97ULH!O0S7KzJz^Znv8V{%(ST@%DRN3I zP6dq*xKSdjVu)mDUS?rwYEGqR z3dqhh@X#9$4X$~~MU@3eH3v$v^(+Q8^m2R?lQR&bU=TYH?)FVBNlZyBNeoT}onJ*T zDEv}O%JYk|A*SGPm0x~|CuqbywHUN$#4W!FY8!6l;rT_`nR)4;;wiN#2R1AKu>`6) z-m^F$5j3`i!<68R#G=#`h!&hmKm+zJpfm?9J3uV~)Z!jy8>p!sk3UYqN`h12y<&*n z2m?R^^ANG%lEifIl!0qSK~8=VTBU|lhkqVKJJcCiedU{&R|;D1Sc=P3So}ICCS~Tq zha4aV!)%7D$w*DkE-uZ*ZWA=2VAOYTQ$Q0W81)*eEb_1hsvDqD-euRJubAThHDt{AKR(5XKZIdDo(OH78;x$)5U2V4}p z+IVmU?OvLRTI9iXL5om~phhTg%>#|d`aV(15A2HvJ~yff}>!nl)UrAl|@{)?M>Tb5p_d(->JA zG82x`U5dw9^q|N%mO$1nz(+u#LExU6ms*sW42dvk^9-%Y74MN)lmaRnFp@1)J&ra^ zJX9L9&WFfgHvi+{1siHC`=q8Pq9<>Nm{VynDC46kht4T_=B4FhmjNX+v@D3T`xuY2 z#z&FC6~MlUC7{+|IwZW&3q#PnG-`JPJXM{8uFfwX+9nCkFNH5VfEXF?mtPW4lv<3K zw1bJ4<|f92iU8Cw2ypSoOj`kopgqE93PBxe&>j>l!Z?yI#2v}0e)*uykPvsE>4wyT zp+P?A;`vEAskumVJrLcXjo78BNHf?_;h@yq{IbLx$V4EjQ7BT-<^diR{$;5}MVas^ zCRFor_!Cwip&JWX<`IyYoSjrX$uJKupD|0%<-MrV7?J z#xc@R91l|f856)Vcz~`1>#zZ291rA5P`ILd23JF>7}oR+$RQ+{$OsACon+MbUx+XIsT)feEMhS+7nr!gR=V&J+!t1LlFgW+rCTwqe5 zP7vDE53&?wQ~*A#fGic9h%~7Lm&h#3L|R~oum-9C(`_D^DJiLW!8w^JsaX948dU?0 zw_-XSbm9zFEzlLou=E7AI^MT52ee5oB{R`EC$j*nPQQH6c#|Ng!35nk z4RbtH0n})4n1BitRB22TQTiYdGs05yQu2$!Qf2;8ETqqUJ5d=q97ks z3;6_ly1??FD@4o_A>!r|AC_612_BDu4OW0x13^wN%FNG0YUhI`&^xUlLFCW^@i7Ae zBi=B|Ap-m}pDjxWRfVvA=E+{n(S+poM5!8tW9bSc~r9tXl`~#5Gx%dZQx6;Kw0Gn+{ zDFQ zPa;Nqfm{L;#%(1`1uiRL@>s0Q&r3&7BVapW;&?2DDZyzgOaYp;nV>_6K=WwuX;e@Y zd*-G?hP+Xe5wb9Lw;-#)<`iUkRF}Yl1u2SQLfEZ>$zrnxCWmGPEDVtCfQjL-1SXBu z7MLWeHNJ@jE{P@ZSt3w)`lcopmlmb^B9_L2M4@|tGV{`Xk*9Y-Qo)HOsW~~BCGhb- zuwX$de5?=7$L{W6kWy@J21}s27p2q#nHy4+m<*ebhV!x816GR792ml;9W>Su^5C&zq{0bJ25k@+O&01JbVFgCVRUh%dKhkyXD*`W z0T;wF{D_bP%>bgCj8w6~6$YmkWhUmJw1E(E8L2s-eHP%oZSeGgkVf8f0GT3(?;U_~ zVIdQbWH*K!v>ym{E=)S!DJMS(T?{&hiN&;d&tl(Hm|k>k(0&q@6?HHj@i3Rd6AfGj zvI+o;crnUSesCNGBo-BC=A|RM4-|FrPMIYxsRi&36Ig9LxM6@?$HRmnyMi!!S~t5$PBBbzzk z?UAsE0S5{~0aEi0q8Cgef*h397J=4;;IarNjbaUGL=vf{hpf2+ z2_X9~FD*YLvj9Z|wACUx6?`rRs2$~;Qw*Ow2G3IDCFUSUf3agpNn&yasB;PPd@*$F z*)Km2+_(hw=Ro6BpeastH8|vu*ARLZqc1-3EC#hZ)8R!poDW-m2)D&EFF7A{mMFY2 z4_T=KatU<19FifR?T?`09FX_G$u^`Y6*eB?Sq$2;3pW?ChQ&WGrxLX46G=EPB_uy2 zu_ztB{=u^tGTZ=DQ<9ns>2$&qQ%Pzrc#<&Q^#c%?e*Fjw5 zG+C0G8(IXLE%M4QEy_#G0WFyUZ4ZK33=?+ED=Df3836T?cWPyMei3}$**gcd=Ys`7Tfq>+JYXSEDggBz5epL_!ieE*WK&TZAYg@%w20m*M3RD*=%Cm^ zHVL9H*v;M1AC%WnoQWvecr)^iA*L6Wc1=iR=Q4>&< zpHi9(A8UY^6i}3(n-40E(USpmsd{F99!9!>nI4n~axl6b;9cIqC6(}fGEj?3lX5bP zGtjIDZMsIob+fHavvqa~15R9YsQxu9+Qe)*22CHbIX z1QaKNq{35^(ESTOssXmD7Gg_eDtwtObeK0DQQ1NrhKMfk=sl7GP>GE$>y!*WL=v(7 z6lShdaxzFg+@TP|oN=gj#;O>6pm;HO^bINbLQO)JMB4lcvmcbegHn@Ik+u^cO9dlJ zMVK&hsRS1*%Fjhz+l?%P#e*J+NX-}Y!1641D^Kw+3Q8@2uM>qC2c^L!5?YuA6y@iq zVJr-RYKRX8@7=@hMu;31SAr%BU^NZQppbm*hJ@t1v8vADEmBO285Q9O@ zx%^^8)&d*hoS&Cc3R*%43wW3)Xmbs?gvT5hg%}5I)nM^~dukqht_`9Vy4lY=6<%0^ zt??`dxhXRToXSxg;8R(YnG8=tV8y=q@P+0OLqY8&|FmFu+Yl<6T9k>VFt{==Iin~a zv~xcNi^1R_0hB(ipQEoU)H$H|ECy|`b_NYf!vyn7QX%~@3<0DjkRM{g&JVPPCZH(4 zA~QF$q%z(mKQ}QGwkg*?Ee*7p0eVCyXptc-kf1Us%@F^h%=FB>#2ip*3340M0g#>n zJkHyg~v^Iu9{=1u+X8x=4Wo7In)k$_1@HLv12} zrQCD!lM-_vbq{<@0xW|Xpq>FvrNywNb*P~V4$GVzP*lOn7Kj0mBW6Hrevw`6S%6yJ zfYpL#(2ysak*0sZ^2j4Ni24p91zqEf#dDwrb`F|y=rlaI0}5IKjkMquY#h404`RVH zSRQtO3Kma5mTr}Rb2OT*pw&nvuoF0tLjxpHh8{#g`JnY^`4zCt0Jb;CNrx5J%8qfH23S3CD-I1_gWi!={`9pwfP>A>sZ(-thrJ{%)Q=uEFt+K0f~8 zuCTL@a4K_gb#n~$2|=?A!!#FHKTiz9f}Q;XVC5pr0?$cn_o9F*2As$fuRVljMz z4^^tzA9A7#I61@J0Uoq-%FIgvw;JI~g`s^vmagD;Qg_nqdHJ*LI~qB7NG*W!On@G^~T60 z6p95wzeD$xP2I zNz94L&xdV~!4SvgX(X-KeeD|I>4sM1f?WbWG72RCz_Zw;MX64iiSYanQ3{&ghDzXa z2eM`y4uP72d=d`Cn=rj#8A29-72&r5yyGqrH7H?rK;G!FA}5{qFwgQ2E@L|pSyi_+n>5!n512yvV?A(Y^;4QIvy+W@Y@ zQIZo_7$cnB@{<#Dd{U8?T0xzU5Xb3Egc8p@x6B;W2u3m(hbKVV19B4cQX>%K?x-%t zrUI{P(2XNxb0k5VkyH@28A&mAo82MTeu0j~L-8q+I4)a|ln^uRBZM)G z12tX?Fj@g{Q7r09L2KkOlU;BILIPJ5Bdft4$HApZpzTbcv0>1R8mi||<#1Ypstmh5 zA&KdrDF?^&^rF;sq^>QvEC=s9NX}15O>xUF0*x4;I3qkGvn16CvP}-B1ai1R&)SBm zg>q3;4SV7_n1nVmK5$Xp3DG zXAnV$;V^Z929PjBAwww`!r$m| zxS@finaSB$EDOQmvxoqwCEz1!5$*ubUx2!s@Sz-(o*;ySlr0hQ3)1LydrX1w|TsQD6$_>cq@^ z&=JGXu|xPA4T@rykT5((dAQ(_3`#9XO)POL%1=y5Ms&kaOb>R1t>8owhK?UOrln=( zpd2cUqz01v5_90DgMtmyv(Q=*vlv1$3c}3HO9%B4FpU5W%4O!~f%dk5h9z+-Kya^QrPt(IwI7|?LBYc5eL1(r9lNpCCufp>I*6hxdt~sxwJSn1*?y-Cb)2yu`Fkb|-yhhw9JL>}lc@iN3wrNN*z zOC^~g5v0-r)MQEpO+iA+5tvOGiAAX?Amfn)Ky$*#OW=Y*%jM$zb2CdoXOe?z0J!4R zoSb+>3PfEG5S$5GfP-pXW)*DA8Fu_aC}IX1CImkC3^c@yO%5`djC`^Kq+8P-Tdjn?VgOP}&AdgU@z^X7ctC^B4UTup%mHnt1(iXl6N_M3(3DzEDrgY^ zrcUrQ5!AMjjMChsyu?h{N+3AjIWai{aiSJn7_^HEKJbHFXM?w_fLazv3+6(K5>rxh z6N|w2LxXncfE!1kM1gj+IYb;*s6d?t5d<%=z&P(5BIlN0TIB4Eq8z-q!Xp*btHl&Y zI?^0!0O+oY@XQqWB1?!cVv(U^aY1S_=-l*7Sep)_0^=-ns4)1pC8VfE5k}r636TH? z8tO^zPzlifXDs~?h%9VvA{N)>=alBA#)IPlxlJAh5%(i2WB^1py0M`12+)j$%o+qF z78iq-n!%@IKxROfE~05bKRyPeGAK12bk9a&5t>@iUij2v?o&2W$qbaEWoa*!~n$U!gCS>y z!pk|341B>-PHG}-UK?2)b&wn+1NI6$c?7$_jtu}6YA_!LyTpS$h^z`_1`WK(CmvdD zCxWj@cTX)rx=0b$jDg)d4cZ`zxZ56j8MS+A2_(fqC#2x}|6sb{3WD;%Eo>xlaG3)t z$U&FRLoUt+U(OD`8Y~|9%3@4m)JhO$D0HO+q)LYg2BjuK_O_*BxE^{L3v_(JDL)@P zTLROFDhs(GivhHF9dsZm_VdAuKQsh~ zCTD*KFK2f@S8pF@hk!)T&hw%YNRkBI?p2;xmg<=YKK9q%v?#Tt6n+Vni;IJYtDm2f zr;`Wh9wm_bO+je}Suc32F8GoGBJTAq=K(CP2s;o|1+;_BrM*NNs!RILu+ zaxgQ`*Vh%~Ge|gs3nECnnt(K-Ku0qIQV!rY16dx$klfUGpfV)inE_Nt zg!q7FlVRmRlDR>maSDup6;&LXZJnGQ+`T>BU7TD!93bs;@bm-Z5CYUJ>FnU;;^Xe* z>Er0&0={}0yp+=)JgSeX(%r$|%Q3*)+tU@RioYC?B(F$ z;^O1)V?3novCgx){#S z#ogD{-_5}}zceQ$&)%ZM-ZUp4bUk}YG3YEVdy|x$9N1;ZrpfRe=HuY%i2^ z4s!2WKw@}io(t$OoXnEU#GK5kR2Og*fk%VDx2J)cPEbW5sYT$u+}P9jxdRGT$H&-tY zUr#SkdG71!7w_X3;_Bxd8SfkH>WrEoTpfH|yiLN;N=E#=Mq&qW@Sl#{(0lvO&0j_>N4xpk5TslHpWT4x*wd|=nFOhQuvW%gtMoEe}J!(mzS%T1L(|8@QtjXNJI*4SeA13gt#dUo@kx@ z96bD7oLvJP9h?*MAlHY2_G+Zsn?kcAw7!HS2@`wMpj2edey*<00geGqXjTV@gUf0x z0fNx%@8II;?B?q2?uBxrqp`iIOK>=(;s@(TtLU8r9K2opUHzS0-O((~1f8%7&Q?&T zJ0so73BFX;-OJh0*9XI=NFjynTewqQJRCfHoE-yv1AH7DQ&J$2gsAF4qk?cFkTrR^ z`}??h1bD(NbWbgDPAn)!B#yNFBBX#$Ni9QY_i+da@bYqU_HZSj9d31A3PQK9gRi5X zzpp21jbLx;iKH5m%;FK(t-AO-cm}vQIePoLIRqqvI!cgefOr^`rjWJ6Epv5o@O5$W z_V)KesVYz{gGPxHLYKRPtB1di>ugB6z`^m;gWIr_NxdiZ!aKvK0uvArqi zib9YNL6`c%N*V(^47hP_&JONgUS7U#?(jeZb!Lhnfd&a>A?ff*jV6 z%*+t)<{9J~?&#waAK)Jp67THeAM6VCIjW3*fGaFWK%o%t=W;NuwT=j;*h6dDrZ?+4Z5{80-zYRo>Ih(-|5~U{^RfhJ?5VMaH{$20ME=2D!U}z3A^3ZvZy~hXO-F z3XBLTFvh9C&BxI_7>^Sm^0-|9k;m--h&*oleO$v_eel>1k;iR6L>{;O5P5X_16+fg zUHw8F-Cg5@TtPY2)6X3(h=N0%KoJ@M6?XRb3-f-5(UAbR~Yml3xvunJwi?fHLpSx=ilC?;ZLH@p2CH#FsSs9y@i)XMm zHgPu}|9}8w&%tf+@N{u;^@|Vl_X!2C8MgIwc7KzB)d`1`oP0u`hmoGL)t;-OcUBTJ&C zPFFuiCm+}N;Be0nXODO{{~%{qm-t|h&=8P*s6G!*C)Xf9#}L>3gRvLzlZ_`y~|>H}z@4s|-F1WI^-r6HADe1L0Eus^6r83M~d0YU!G zuED|nL7;Yze>fI1Gm?Cekqo^`7wJ28Yp}e$c=n#vO3Q zM7jf^o}fEGNf{K4uq2GbxuBFygfjmy*P!^&5KmZBk-W5k(-b1TkD;GjeYn#UsCagVouo7sIh1Eat@Z5yYF>pl$9D`7Y(=m7=3TI6K555qOAW&)T8t>~E z;prO+Yhoc{5uw1-55EEw?*_XDgLX<{ZHNZ@xVi>ltA{WpQ0gJDG^Bls9%>LNwE7O# zYXSw3e`p9awxAs*w4NDM6zVE;gCKn@XMcZC#zaktA&~({jcU~TJ=71>neuaqhd2+_ z9ihRlL7uRtA=F-!CJLm94R4>pdW{%uZZvh!P6Ip{LcNWy3e=cKYIZ@T{rvnR9sQhL z(He6QS?AE8AXmSTcwcDq1cysNEqzq4LbQXM5g;qE8jc8ZPfwS4$XH4Vc&v{h9$m!P z1v2V_O$M|&8gu~)rW`Ik@PP$%YoHRi^nv$>S3>Ra2Hijk+9X;DJ_G@5R8VSKY7yv4 zMCY7*&|!%X!Tg-Wyp*tDXV=_P(4oUAhENlN&?Sr*;(Z;RJv{wj-LZI3+Yb~0poTv~ zydQMiv9F__qq}PmXlMh}Ru71Gba8<+5`%&~!yJ9U0~MIceH>9$2f6zCBdPX>w;rMT z0|I=(c@JD(2gif9Nn?|NHj2@t;vJox{X_jg&C+<+2t1MyuYv3W6|}zoexMeo8`w@H zT_8EI7=}CGGMMf_NI?g=AkB9qV?#V#gM1x*K#lm2AV*KX5KK8}=0`IfGG_xG5r<6v zFvNqhH%u{Vyuqh1Q87^jOn3{|bPr)i~VvvYqNkgi+IcP2tiecuM z7^Grf>R^zDral0&jK`%kH@6Zru3b>-lb;A$OpGcHIz0|)xd)mq@VX!z(jc9nNoMeB zA+R-I)o>xuj0+?8Bg4_*T%?z;sLkZX;sA}ADN{cfPhQN(?Pc1=+f{extEes`~6?Kq9 z8zJ_iC;;0{z!0z+bW;$aiEt3ynIM;85r!B94;r{~r_}V!JV?ojIKmb#3%VW}JoSSj z0vS+;3%TZ{;55KJwFE^jzX)ucPhv@GUUDU54HDcSOvMnJu&YLd0-6nQ^E`{uWFW@5 z<`#fYEP+HxP--!T8{sAdrMiEQj55$lgIV5-g5O3*o>(@*axIP(s2l zA8ZSIGpIS{0ZyJi-i~fQ4#B11Yt$i{ zpt4R*4&JU_o&jDS-VUC5Wr;bNDfXrr`Nbvnrj7xg=t}*4yuDl;Jscpuus1Eq&$l-% z&P~k8!BFYz?i}Fk?BoEB9eY#IUB_uT`Q@o8s4ATuT%5fE+}#6w93aKKy=i8#y=iet zK4`5qs#+HZCr7^kXIDor2S`BMo0jIKq!wW_*Tuor$IHvf)zRMpG+_$yjVX8{Jq^5C z1ZByEi-TK$zmJQXufGFi$_Zq0Vp(El4(L!FbXR!z`8fIe1h^vtEVZZzG-C`}bdIjr z&(Y7<$KNf$!3nffB?(*=*_#&RgYO_kRqX2E;pOV+9pK@JFu6Dpv|9x@$YBGy)zLSg|WV!a$(0s@?!T?1SlLh}+q7g=W( zB$lMY(>N9_-VW{_F5Vt~9!Sd=APFZk54K7OEfM=TxVd_`c=@^`<)OUN+@#bZd(-?h zd(cur&_2jw)DZJ^@bmR^a`AR?b%4#0gI3lgme@nAD=sYnotccDWBeSPoSfZ!{asuf zAg2i@f)4}(<(Z_J;oUrYWGS!;y7*1OxaHJvh zx;uFL`8hiJAcZuFfAhc#NRf3T^!hlsczJs`Il6(0T+kuYuw;QK%wZ9nY;RhO(CFt7 z;OpY#;pE|p$cB(?VG1tKOhLMGBq(#)I^dsF}95_?l4xMn{GXK&vCH_*ahc*T>JlbDW@Ndg=^{aieKz1*Ep z>zt%abag(C-X8u=u1KB$$17@~8Q|dKwX(X%5VKG*NJ^3vn=-45a2nmjYc;2ye53))hk( zz+4Lw0XrYMb2AYn0P>S#K_-ees2H+7tlkIdhZK6yEpK2GAs%!_bXmd5z-0=ui4bL= zt_@0m385Iap#>oV?(kr!4oijYL;_n6<-+|4^$aX1Qc^2I@{u^;fQ707?XvMqfhQGs zB0+AC#RnwDdlo}B#~>f}4ibfU$uYSkvkbIl3?T$sMP2|tDKRnLzaTXay2S>f9_#{; zC=wSGEJ)noROm8&$j%MO1%;61I;hL|!DfMML(&Yd`N5LlFoelMdfz67257?)X_-aE zB?u?QgLHyBH;}U{N>UBYoH9#7iZVf`o984JxnzR2P-Cca%gIl~tqM_hpc@3+90%!@ zxuhnQrh_kbgIf>`+N%T;MY<9Mq5<6hg{D8~%`Tv}He9!BUJ4#rEW<4bm!j$e9jpwo z65Qj&kc0#;cwxLnnqi7@YKp0m1$^U+aaw9J5gw62t>x5Fg}jh-)A`R8oKeWC9!5B`_I;PKY~T zd=L%7Fm*6jfqV)R2bl&k6QqU%>^2CG0~~rFS&$3}L)aiQxWIBCcS3j|5~QAufr|m= zGLRi0T@Vbj4H6~N|j2;4@bcZem;X}d_CJ*C{(xV|T8UmvsFd71*Aut*OvjuBz*!(39|I4A09YrsFo3jhL9H|h zW@BJuV1_~_Xge6zdL)Hrf$N3Y3NjzmB82flG!L}B%EG|GAj|-2XM)<0AR5&A6=nd5 zgIEwzkT@u;L9Io0a2T+FNl<7&Fsua$G8?3Vm4TB%1a_c+k)NB7pPRp*gP%Xja2xJ} z28=xeJiMHpJUkpCU4v2dnD~1HxCMa5ECc*~d{CrJJ$yVIUEJN=9NZIgQ&ES%O})LH zeH{aQyc{4qBf-OO&`Bv%Z-0Mh_W%z+2iGuHzYr8N&0XCcy}Ui#9H8rbP$lusby>JN z1^9Y+__;a2HXfm9w(xTDcJmDI_I5}tD=L9(Cq{Oag^!POfWNnkmqSuwN=j-Obi~@x z5k9185#ZlRia0eNY3^~gJd{#QDIwuD=#{fq+KOZLt(4a(4esOAX31k=m zUEz?K{d0D3b@X)f@bwCCz!*hC^^`Mc?vL2L*3{pj@9f~?@965~>gMDC9egNF$;@}o z0ng4MCnzUp2NHLB5BC{R7YBcD7f&~5(0l^qI34gnHgvifCG1>D+Vt+?@8ap{=Hly+ zoCF$hwl~FqDlUGI42?Fg>FVI>>*DM0>hBN$I}->osE3;FTpiq89X(tf{hS^0po;@Q z`^yn_;kLug)yK)n*%_RxQ;UlsgY?+F?e692?cw1W;85Kzgq9ZU}<>%?^;^gJ#Vobnej*d96>fS^kUyGZh+cXGZLm3cQgBj;r-O%^qmz@P zs}qvjpj%Qs{Xk1{QN8Zz;N|P*>FV$9i%1*bxhWip!_y(aEx^y$)!iSFu}zWJa+v04 zqvsp?EH&|RaPtgs^zw3dM{=3HC0>YDJ$X5}1^9WoIeIxdfM*XAOH#q@N=S19TzjI1 z9?56?kg*=d+rh)x&EL@%6r-RiO;krgDmPSDc{_MHx_f%K`Feul6twmfbkUc+X{v?I7aP6IC(pGxdeFodwC#-Aavs2G&7|FbixBjn}JaZdK3@j0X5zZ0d8&q z{@#wRNJ-w$KO`Qsx6%`I1_OH0?Bn3->g?>|=j4f`16n+U`1{BEfHwW3hADZgl6)N8 z+`ZiW1N>YOX;Q`6EyW&O4JLtB-?$`}B-)$0<>Z&!t2jHMhpUf+pO2rDpSuU5WD1TC z@P}+#2kj{H@j>^TuY;3|n~$@v7jjVv^&F@yi+9B=qI?}ZJiUBeT>L$;xf8UI%HA?9 z5p*vntlEaGE<(#c)_|)2s&O4aR#PWVsbXpk(8*BLFQsFUk86DN3Q^1 z4|k+!cMb>*4F(-A;2PoV>gs|Xn&d7J^K)=^clYx1^7C*ghx8Rg64Sx$3wXmU)X&?` zKOEFh2Ax<0N)*ms=<)9dS_tUv8h}#Og!%=C27va(ySjjOko!8KcIut{9NhdpT>M-E zkW&D>4gl9`jv<&H^>A_z@bYkScYvK{2`=!!>u-y3)CS}ne&|HEbIzRn9h_Xfoqb*1 zTpS$Bf^eTmiJH3n9h^NpJe&hO+`zg(Yn%M@Afp5RMJcJEO9jDm(&)O}eVqLQoZXNc z1&%&Ju8uB|xJx2`2M<>dKQCW5Kcpn-8sY2{8Vov91$1soyuY6hT6@Lc!3%U0k)OX4 zYV#QFBuuoU;`|-F+?>69L4!nPK_xhk-$eJ8kF%GDtBXH!n>W}sD9qCt()JAs_4D)e zbH~u-=k4d~@8kwgOpuBSZ));)@b&ig_jhv)K$JqJpyid0VL>6_(hGq~2 z8Q`_C#*jsvpcR}*3x}N?{M_8#oZNkp8(8qX1Ui%fd{l|2kE;u^LjydWeEog=oS+M` zi|tLy!D}>ekF+3kJ3BbLIeEJ~xjG{SE^;FVlpP&?Jl*|Vku{CD1=21KzMy>t&OXR3 zS@dGdH6p;(IRp_-E)D?!?k-L)j>vsPXyEz>fKKG`^apJ^^>gt=XmWLMb@O%ebVn*y zgFy$KxH`JT!>T!Gl1J7={`ze<2X9ATZ&y&m5HZ?*)_JP!O6t9lSg}y`4SWU2wK7kxLLy zS68G=;_2Y;NSGeJjk|Eas;QRLx3~rm|7oSqTK8n5rX7q zF9#=A7k4*5Zx0gP?B(F%65!+M+J2|Qzt49s;`5qo4+3@RUv7FRtli~B&G$> zBmM0yVS}Tl$vMdSeZ9S%J)FJ0k@Umb00@gAvumc#2#o`GG%E#LHJr&k*45v^#n;*2 z%g@6HDVR`3xRILhh(Pjp@Cfj9^!IQ*VR?7~tXS zf#SU&tc@|a_bA%<0@CbD?vb}n4sO1lZl3z)5FWh6L;`BhX#j$YDM=@PZ!X!w4iQ5iamI;2;q1y2M=!- zPY)MYq#g!h7%e3=&E6z92z6x2G&ixr-o)7hMHJaYA6GY57Z*Qxj)Lr5O9j>P5I2Cg z&Vu`z$)!a_sdB3e-{199N7pM#f+ub&TS zG6X&sXNtA-NCeFtA_9r*laigiU0q%Lo!wxifGK3i(KNsj!Y~HSemc8l+MB|HyV%|g zB<6-_%8_~CG6lC)xcED{ySurJtKTD!lFkaX`tW7^!dO>gM3;8{q5e z>EsOaxUoINxcR}jm+feJ=K^JB?I{P~NxH`bCgEz@Q$Mv9C3lAE1ZwDu5 zKW8^@7bjRUHbsEsN$sslC??HGhQ%1YFpUq1&|FHdhrM|TI% zeda}(Nu{8x7*Sm8@8Iq3<>KP*;sBeGfR=p7ZVqs80v$=<<>wB%SqE~}1++FnRp##H z?BVa`>jG6~Z|a+vmzbVfgkmMVcOpX*K!Agfx1*Dnm#@ErXK{FbxtR&5Ym!=wIu9D) z5a8|U=IZ9<0$xD`N&Da~6WFKm;9;kDKi3G*fsElsqlev(9(L~u8Uyq34<9}39yD_f zJy|&(_gU|dLmuPN4|_)(xDP&y8qZ<#5P95(%|qmII{+e&+kVJl^ajv_BQY-ofXL&v zA0m(2euzA}{m^qOL9@}Lhux1Jb`M^&4!##)^sswan-iKN!KXNn9(E5pRWmpq=Ml%C z18%V$s|!Ac7DWQ(kYTX&=wbJuOFp2<4RIDU_`L4`==uHdGq*w0zQG=dYas}#$99r6 ziqY^xuThSa#$hg8F_G>-s3+)-(ZlXt<6+SaI_4easQ%Hz?p@*$NfH)JphJd1OA|w2 z7dRm)aSehVWQ-$OgY}Lcb{`BmeH^3o0S6E0U~wF`65y-}Mi09mJ?!2!2z2s1G)+Oy zqjww(huuTR*W=xS{C(rYJ^hT0pvS?xATGPa6d64L-_wO5-q+VTI5<8Lx-S66Pf0}* zfviJ;j4`6zc<&39!Fu1lADvIu_jZkpcT6rU%`DCY4N!vo762A2C{FEcM4oAE)ZIf0URqGxh`9;UjS%w+I6#UN8)x%}dTt0i6|}SpvHL6-5q<`JTmLiA9;9h;Yg*2?AeOiioTDfYik7FwkM5D8@kc znPMo02!l54qN)a;2#KDiK)21OCg%Eq&)tQqFUf%C73aj9)V!3$qIj3mBIFbY7xygo z&&$cogQasM@t{=DggPQq!KHliAqgC6A6(qO08}I-<~Wv=q~@ihrh;}er4|>b!cr7Y zg&<#HDk@4(%*(7wErJ?@VH->yq#Io_C^a_|bV@e#P)tyK!)*^rEiBC}N=+f?Omu}H zi!huC%m3IU3i9)cQ$eRQmSV_)%0-al9P!9N&*X$Sz92C<6MSYrgjABsJHyq9C&f5mhK=xaH^MHg zfXX}ADW8}&d88($q!xk9!fH`Keokg`Wk@2dj0P3Q2xkO?5?f|TrCUy7Iy^{F91#pU z?Hg9Yp=u6EEY3y^W)z(WY2*;i&n-yILkhuy(vs97)L;S&#k-^?=Yz_C6wu*@!3Bx% zIssHpCnlG~JLctOmZcUICn7~iUI|#HxHz-8BoQt6(d0r>b5aX3@)21uAELl1v#2B^ zB@y97sBmdFW?6s(X~@^S>Xe-iV+E#3f78B~&)jFw=$9OKmgJyk zc%Q_iR9Ke)7U?jP(466$mkKKR1nJFnbsUZ8&b>$~z=A_~ZF2Bs=Y%H1}5s%)= zffi%_prf0yy8>AXOZr2R#+m?;Rp3j3=<2X0L1abP(jcllmP80DJ#iLx0jWjB`FV*s z*kU!HC^I*)s1h1TSV96#0oJfURf8`yFjZm=4^(B?LIhm}wlINs4Y`0tOL0&`a3#5b zqWrYfVx;Z{EZGMaOTuXF9!Sm&35g7GalvH?NF00Z7@nF0idJMdXXd4*fEsPc zg+ppy2`GRN&DQ+9lGMBsq)r~_TCAeX^bC0Q4BDHL8V_pHLJfBb@{I>IEYS5UTny@p79}Q^q!wismt-cxy$-&60jdI|4z$w~JYs_Ak)xObQUe`RfsYJe zC_pOQkmX?K>8BQfu0Vjh8^nRQz$LW|DXx*Vf`@jBAqVz@qXEg?pzZ+{!$86Ti6t3W zq!H)-N9#GPo6l7N_Ep3@FMk0A&)iVHf03fb~|e z*bS2kb_vENo0*fER|0h%7WvSE0_*_-^>IA3P({%Sm&++ntSkogEFo@nEOyS%%R|XD z;MjtzM~p)`78Sue8W7DeMNWyusi5%z*NTGFqD;^gp`P&kfMS|+B1)eW)fAW{ctd_X z=)ef9K0s9lN;r6xfenfe$SEyKgta2DTMJPboSBzinv)1?f8tPz(^jZ@MD{ks>NpH# zu+}+L0y4x18^$WlO9l;^1eYcSCFW&gH!!m}8FZ6arEh9UMn3kyCm1_!ptwuP0XOup z+Je*D(8TJQ7f_U+UX)slT4KSHiD$86X-P&Z=&~u$Ra4llAdntGBfjA4T_7Qa!wiUI zXkKPvX=+ZTX9~#9H1N|H=<4qA4AS^}_!J47qYHc(SN z9)B4FRuY^F?-ipP02-Kwhy|A+M&+C>MP&Gyi(Ay zIHkBug~hLPVp3)ve8>S}FwADSnvB%s?Bdc~>^4CY3PybgHw837f>E!b$|4WuqPhXv zxP%pxSe*bJwFD=G%)E5hoYXSpfnQVuVTwUp8o;d${K`Y~3KBDm;EJ)@4_$1JA_q?C zpzCnKb#6Sg{Q(!nt~MU5*u69pwaA0(f)=3|L5)!0ng<$@$E6)-k%%w=e2q?O5qLtP z2r|uy7t!O3pkKMjN&@p z$UnTqBr`9y2(5~bcPcGL8Ek`i9V85zIRjN-sI>w_2GUZ7sKu!AK}tYv zOpN%AcTOxwOv=p3EI|zYK+M3~bdGmM9e#sp0kxA+(ie_o1sVxK8i9jp2aOVguNw4B zLGz+>eqLH;I`VimTu)v}BDPR;@d$_yN=-`4Nz6-51s&d$nT%SBgHp6#ehTW80n}7% zO>&U>%;Z$eu!SU8RBuDXaCR%=A@ZO;4mN$b?C{J>!^nV8qdfD{f>Xh*8*Bz5WL+y@ zok*BhLGyn_KKbeSKA`*bu;~U>f;ijgQ2VjA-=T6CjV-7+)~w;01@Q)swC8OM?m@J1l`2q-jsz_*HJCPN|&+B`#aWx=hRc#p)Q6j0fKk!+#r zakOFLq0*RjK13!jITgKZfER42@#K@5o`{~jA!1IY#h{FjrW`t_2)*(S(Y1^RHP1jL z3@DkQWkHobgVbHuZYIg%XRh@&b&MzO@CJ6@Jy^HEy zzxLYYxAfQ!pji#O6%w(;Yrh*LiMtC8md!80*Bb^Y!O{-~3FGVmgC(I2YG@^hnFM{n z3&|i!4S#>N7^R{?3vA!a;$q09q^Nnc7*dg76!kE1%#LAkJT#!N=z+>$)U|LusVUf# zpnO9$Wp0W5sErSpEUYnv?iJj@6_T1; zkb_v136Fq~{F1~R*OW}q2rTl)kRWns zf%upK0TOksC`rvj$|xW)w;(^L>p?uES`NhZFVBMy6NC7u@#U5Y_HQCge@(~w1rQWHU)=%QS3VnUK}@ee@dVYkx7KLDF; zNGS(oIcROZQ)(jUkZoi`Q;SQWqBsmkD8On7LK@XqAnQN}qku-v(CmW=2~JyK3ec?0OiN1zjU{Bl zr%^#s?3tSm8S+M~jYk*8?iOT?*qnkakLnUwupmV-ObEMGFj;KYz~s=ZfQ13F9WXH* zmcXR3+5(eAwZ=EGz$LK+K1&1&IN#L7;?g3}auHbZ3=)N&Y?GOn?u$IV3z7;>EJ@AD z$t;17|A7SyQsHBLa6Wc-2ZNMib2C^1)x9XC9?0B~qQqp_d^DVo-5#(~Z1#X9Q0;*h z(eNe@Y@8B2l$}=$8xBJVL#E5&BX!VNL&$^2ijfK@G#Ru(U^H2%YtRjab%xQ!k?LW% zL7usYo(EhI%kU#Y4m1OZZZcBE23HuIT9lcXgVF{<$YrGFfc9CSjt?WGOA<>;VU;>$ ziX6Uo0LF!dOgxg^7;?~lAk?`q>3FA{{3LWS=o}^%)8ajgeN$n2(X~PQNmy3Y!F0sK zTnbM#a2d!d04(CgC`n!EOsm@NleZF zbuM9UDu#|d`{n0>8<(K|9B7;hGy#FG28SH-8bZ%v^u;Hh#h`X)I=l#n^I^*m;kJ0@ zCFkcBfJ}o6!CV5}E{9|YX!|2*I0uxv!O1qHC>2)Acou^W$%7jLS;OL=ms1H^^@${$ zmlBd6l30`uU;p4)3>j{KsVPa#g>*XMiK!$t7d%OiG{yun6sb4{aozHBQXu&eT1Frl z2$2H~ED|B-msnJkUyh_3~(mYP=*mYG`ao1c>EmS5yllwV#9OC5w1 zLy`;BMWC)}ykk*1ct8f`e6S#BLl$C~2P_0i1)#noVqpSA7_op3*;JGU2v{K`Euwb{ zk))s{Iw*FKO@inPc5`?12jw*sXQImmmwxJr#M@8loJWNuV_yyy!%d3QkSV2kp|VM3>CZ$$`v0gQqia%3?@>murLiHQ)vU zyw3}@60({bT@z>pcYcv$K>=(7Gc-`4nlPkM8&42bE@3Wc#)47-crz`$w1TQkEJ+PY z%}GrxMwdX{s0vXHHNgos1c4-)nU@}%S^^rvfkh)k5`2Xb^1uT`*w@*`6UAfjbzP89 zfi*Tz)C3ger<5kc#~L6e1r+7y=7TB*^kfiFln+{}o|&JAk#1n72PJ|WjBW>bmv?YU zC48R@)S}X)oXp}3H0wc|u93FXK$HfTCc&4_gC?Osi;ZCel@Jw>CKG711k#F1%S1C5 zw2j{{-?6kLA2f`B;zW>Ccxn>5f5C^N!dBHnY>7;TFSCUX^Ts18Td2bj(FGp8M^XSP zvC(Cnl9N%_KEup)N=^o;hdUHvm@^L5&R7-a=YjWcf+7;N^r5F{9Nq*1D&FP#e*J+NX-}Y!1641D^Kw+3Q8@2uM>q? z1f{_x5?YuA6y@iqVJr-RYKRX8@7=@hMu;31SAr%BU^NZQppbm*hJ@t1B1p`xip znP>`wEAx^wit_U^t5Q?27z`c~K+Zi6}i(ldakngG9m2>6*E@X8EL6gC(PUnGPgpP8QrvKW?Az;dYT6#Vk@P?jn{ zlz>(zCYOLG{y@{UQ1>C^z$+I)l@P3e082rp>R{$0YeJO)uaH2K&O>bMhL{BoU8KMP zi@IeN<$_k9p*9h~QtmnVNr^d-x(7Zc0hU1xP|pCT(qh=sI@C}Fhh;M%ko`5XfDgozcG+RNdkxF1Ea3F^UNTLiqh=TG#>(TNnV3`4Iad2{e z0et8YA_6+3A=Nn}F)t53>H(F&7^;GagI2U)aXNJ25^8pU3SuN!a5oe^jbW$?Er4xZ z2HPD0vK5~0L!E-doP*iN=1Whz{5&xX3wHJofR&3dcYvPMLWr;8r7isW7zfhny%N<9kTGLGaQ8P_qn_RA2@|mLq_s z>|i1p`6c=Bjs>Yj$VDiMAm->@0E#^NcpXI63A{fRbW{h5O$cFJ#v)W;H`qB5wB8uG zghH_ZDvdPE3~>)c9LuOOR2sA%A`#v`LKQ@gWU$vkt=^EtZ1}z&h;oJt`VMYXhkmACEz2YPyzrvi(Oij>XexX&;Jmmpy_R>1TJ?VYsTRa zs42)N;Xu3z(+id%WC2(aejC6$?h;Xh5@rWf4kKb<^2ik$iswNRgxm&FgWYLvC~Y^0 zx1nOV424SLFfS*u7`8JQY8ptyH7~U&9bOxO-S37F$7vHn2_D;UW*o2$;3^y?Ie~>S z!r3i9IWfm46=|sz)cFW;oX$ij@yv6}%t4J{B!h8y0;D}4CowNI0%K4e$qnc#@VW+F zF(I2H3EGULg0RgjOF}AsG2UL5TZ(K_~8k7FeNJ02lR7ODl$VxnMdfu+~++iEwdTA%Ua> zdr0`Ef{rD~O9$lvR0knRV1$uBXlpT~5sIP-NgP8@Kx%#g@cv2R_q2NJV?4me> z2s#XhsS7mPgdqwUO2H5YCkLEX1c6T8OG!-$3B%ABmYI^8k0c7}jew@Q(sDABOF$#@ z1<1h;lLd{lfl?(X-=j~2fx-xfI+QsuxH|C66v%a%IpA?ebk~4l%)bD%GcYqBba+B8 zrjtP35Xj>2!L7wKB5-k4)FX1sJjUt%0cM~LO4j-5)r?kt-YW@1(en$vUE{uN+x`! z7D)os4}oSU)I)}l)VLO87U!oRpRI%>=~?U;66_2$0_qhMY3Cg9GTB7%zOc-^bm-V2 ze2xZ1u}er89-};5@JI%w7NjPYI2Gk5rX(Y}VJM~tI|g975ITP3n3k5AgL0@al2%CW zOU!|r4hl9*qoB1SW-)|h6oi?Xmk#P9U>X4$l*`P|10ACX8kWSV0IB1SF;g2H>=FQ4 zDhpfg0LltbgTPWQsb!!IWJnGG3qu0}+-?93w86B1&+Gur*yab9=7J6;LzMtU33$7< z2cjne$?%}^1XNxH)mj)Fal`xmXsxPQ)U}n=_Rv%+g5T03*;RZeW z5;b^`c1lCdN1oGx3WXNsgye%ew5Xa9;vfqk2W3Id4n_%yJkVj{Wr(9ngF$PSN-{wr zNTmg+$&?D3f`pVKFq<+Gi&9fS#v=)U=7f=#zy*Vr%f_D${^H zwJjv0G&dfyqmU0m>iALKe4yk!N{vOroe7gCg%lA4=Xlnsl2 zaN`J+DA0~Jhls-p6{yo7g5U)f80Vcsv7jI|1$;sSEPP;6pt%;PSh%wvWa1E% zcwp%eELd8S0ZQ~p>LACBfG?BB5QVH9hs8d~0ElXIV?pN;pcxC9H3E(R?%gHOkR z%z!RkMALwNd<;lsP-=Q+aY<2P5t`bd)WXu#V&r2Z!K%}o5Z5q(1Ry(?z|Co--9HeS zB4iOi*AP&uMq02L4ibV+jw4$R5(X7n$m>19YGDg-U||SS2$~WrL2e#`Rf4C#kd>jE zABwc+G(6Y^cHT~C5Nv%BSg@cVIJFQwGYL9712$!Zkb-ujP#V4n*iA64%pk4>uOqeRSocu(5s!CA&l3xT)7Cwn3sd>qj;F=%d7WY(i#gG(( zQ#CXwkla)PjnSY~P;(_U4?f@v@vVDm3B*XS&9KfATn-U*pg6*eKKIlTR3)IwDnAd! z2M7h=SS4TxSPd3apk*V}Wkva=1<=St&!^z*fF%+U1qNF9!vhPU!Wop~u!*B&aL}Sm zhed-Wfp^EZB z%SKDUi~Nwqqf(3VQ3Okj@>0Ng2(feqrXDVZC3OdN3L)O81yO5o-;w3P&R80d6qD#-o;a zP(k<95=c!BU7>`?Xy^)p^1(x{i3oA9uR%R~P*g#@iDaF7Y6<9WGI)i7&<7Gm9TkBY ziYUL33<^q3gtl`Kl`hnI%rsQlpj1!+2R1h|&joa*|90-k;Z4>f`V9h^KNir^84OO3CuYrK1E2_(wE2@f)k0<{~LG$N!j^H9`4 zViLC*$nq$LDeZfP#mU2vbrJ0|59K|>!DJw`O%2S9Oj1&e(hL(V(~=S5N#+KL#wjoYN!-%X zBF!+xI5ox8$ie_c+!78Fk;GGzEKChy1VTI+E@o<&iezsx+z?AkOC)nrARdB}2y;?! zn3ICToK&a@5DH;VYBCZ)3Lj`dLX;!(Nkg~=xyg0+L~1`%*^xVdSd z3(7zxEF|~FGsG7-mO&a^zPXTQ82pep*tI(#6(x{U-XJRci&9cSYwE$>bBGBgE}*fz zRNV66iJ2w-dAQ_*Q%mq!k0cFiLNde`Bs#;omBk<)w2nelMW73M3qTDLmtrgpz=A|j z+Z%M9j=sJE3NSP_v@|iaFt@Zs5mqpOa?Q-mp{xY1@XS18qZnwR9#fDQUtwVuUjXW- z$0x&GrC4Noc6W7emLXv8zfe%FipoE|mfvRKy{dnpB!z06H%kyL@s%X-*vykC0%H`#g)Ph4Ghf8%oG$1Elf;}!DC07*6&{8_rRWk!Gr+< z^iqmalS|4{Av^{KeFg@GJ1`E6<`Q7gO9A;(B^V}TW5mF~&B(yuZVVC0V_;x#U=VQ9 zD+1ja0}%s}HVh05lg&Xa1a@F>aL_ABttdeVF=(?fFq}7MVEAPV5maYjU{GKPNPyZK z0ug0kNMK-KXt0OzAT-Ec1qB6t=++}2PbVuSA5SM|-w-8KL4O|?(9X+XB?T4+28NFe z3=A_^85m+17zIHFIa|emR$3It1ZO0c=f$|B7H5~_7sP-MW&tgYj7ciZ%t?vKEiOxr z!6*W778X_vHel1)83Y&@7^LSi!fD^k9?!GZl3GOB8hd zD|HogUBW&6jExj@UHn{JokHCebY0>@gM(ard=zwD0vzLA{T!WqT;suV@&2J90ihuv zCC))1@xiXnp+T!pbr056&;?!TWEC9jYNVi>R$!HuSX`o@ z8 zR?tn%OU$XPO4U`+O)Vm%=HW$si;4K zp|~iSK~FD6PcH_M$8fffk{Jq8l0XFznMEl)#u*sCGB7Z-fC^?P4r5?o0F~PkP<}2W z0|Pr$jFo|b!57Mg$uDDMU|<64U|?WlU|{e@lmEcTz`)4B0X7X}jwhPD4--g=2SkAD z3UfvV1~UeJaA^(}WME(bxe255GjI!nTn5q$x%UC84J0ALz`y{~29bd35MbaI1O;L#0|P@c=%QK%DF$vq z83qOh836_cNK*(pt(srNAjiNh_~-xs{~#X}gJx{p3Q9q%G>h_cK!*l1Fo6R96UeKK zAOeCx;Ra&KGB7ZF0WlaD7^X2WG=Rc#3j;#~7Xt&sHU@?Ueg+1H?FU+ub}=wCfSk9RfuTW~fq`KU149GIoP7)o4GIhl3VPI&mWME)8%fQfJ&A`BLo`InO)C#!< zZE4(KU}$h;U|_h-z|i0fX&yDWGB7aQV_;}-XJBBs&%n?CN;?l37#h477#JQgFf{lu zFfcr3U}*4XU|?9oz|a6nA5R$=8qm{p1zMUzPt*Bm^5|(g7fl{LO=qLYqo?T!j0_Cc zXlWYcCQv+p(gmJ09S=G@n?S-=!IQ8-+99c1m5{3BoW$G$1~o#;ia|&4rwsYb0?I1^ zNO=VmAD}D(O2aNt@wd>t!p#WDE4+-5yu!x_$t(Pfkh~(u2+1o#jF7w{%m~RVqKuHd zBF+fOD-w*5yduR2$t%)~kh~(p2+1pQjF7yd#0beNDvXd;xGEz9I4`I(Lh^zZBP1_q zGcq)Q%3EDVh6Yf%tj7q+3;K)<4S@^{3`UF$4WPb+F(X3*s4OsHWN3(BU|=v~WN3(E zU|=w3WM}|2^=%j#8j=|p80;7s8bEy%dq#$abOr_nM@EK*Oa=x9Cq{+_P#Sk(WN64? zU|?`%WM}|&Mcfz}8VVU07?>Fu8bImTgAp_DeP>``0F@&k3<_UR-UF3~pmG{i-aJH; z-^GNePlOp57;d7;voa&<6OcKV(BzYtLAHPjYDnM1l!<}C5iRe5+yv758Gn5e4_V{_ z%0l2A2=fBM0uT#SwP@kVGzdc=`B0lUwUFGXL!9CvkS9Tv+lT-E|0^-TDz~7-yp-V7 z)D$Cvl^aO!7p!^>8KfDw1z-IC{~wf=AoVNgHV0@OE6Knu_ya{Fc(YP|X)##e8>qgF z%=C4K22i^vn~|Y`n}LBL zhmoOykAZ<97g`3CL(70lMurAe1_p*IMur9r1_p*|Xx^`7WN6T1U|^_&mI3vQ3=N>( zej_78gBb$@Lo>82Xklb%0Cn@*7$Nm$J0qmN?0}XDUC=V14_XFHU}R_rWnf^K$jHzT z4H_O`WN3&5)&GnP4e<;N4AU7I8WI^87-mBA{&Gf!hBO8Sh857fz7m?pS1~d)6oBei zMuvtm1_p+;j0_Ex3=9nG7#SMs7#JAVGcq(ZGB7Y~U}R`$W?*30#K_Rl$-uy{nUSHP zhk=1%3nN2AKLZ29Rz`+~Nuc%yBSXVfP&p6hKAXo_68$E!(0XihTV(| z4GTc+4Mv8B#S9D#dl?xTmN76e>|U)DB@}XgJQm zz;KC?q2Uw*1H%t^=#nQG0xe25f zRNmukhZvcF3qX+Fp!5&IkP;Te;=tFoHZp;fdZ5-bNIR%~jMRFDHj+WIAOk^_2$C!` z7lWG61KG9~ftDhmBBmrYx4<*6#MlVAjL?9#7eJu_3QrIXD(7UN;;$GP8bD#p&&1FG z@}?jYLj$NGFT}*q0IG+CnHU}&3aVCZac?JdsNhXE{ka^Nf zkamL%6GMX*0|SFB6GMY80|SFR6Qm4LU}9)6VqjoUWMXKrU|?WSW@2ctV_;y=U}9)+ zU|?X-WMXJ=VqjpUo z9z9RgqRFG@iE1=?^gOW?OWPdeCQy8};cFilnIPKcpp*@YbPxtbFo(e9%fDbj)MKDF{Y%gw2ejP|ia%pkL_G#F2UMRT>z@D`ctWbjys)(CL2d%+ zWoE=PMr34y-lhjx19Acgqvl+kZF&?#Ao&+(n;umyBo`B@c<|?CP_vv?P5LL$ra7ri zdRSKgqe%}cSYYja^hzAm&X0h$=RpYpl$JoW2Ll5GWGsh)VGk3eoqvxB($2rn1Zn3# zfR-O`m>_-qcTA9W{(B}!JO2X{q>ujzT5f!1g7o#jFhSb+-nof*=n=VWGRNCJ(4GDGTMUS>%9o}Zba zAp_KQV1|?%a?FtSy*x8RLosMNkQq{LC^19I31wzT`JloKDHl|kA?1P^GebiMsBOW_ z(9j2JTQD;;Ok`kS&|+q2m;!2JFf%kv2lbPf85(9WFfiybL)!QH%#ilI0W(9xA_fKq zLuQ7CrJ%72W`>3p3=9m$%nS{y85kH$m>C+@F)%QgGBY%61dUlRGc;^xU|_IhW@y;S zz`$U|%+Rn0)COUOwCin{85#~UFfiCNGc+6qO_MS+G#mqsVK6f^oM2#JaAsy`ILE-i z;Lgm@aDjn=!GoEh;WB8vni@ z=4XMl>jhXK_465Kh6Yf27GlAyUqIuOp!@~Gpl}A|K~UQml&nGR^Fcf2ZfJ(yK8JY$ zDNy`R0tf5V610B`|$7rB~Ygfpay8}{N z9F&$pkq?>+Hi3#uu|V45W-O4lxH$`?EpEXAsXv`qAoZsU3#9&ZWr5V6ZY+@c(}M*v zUgpUHX^VTYK-%IyERcHCj|I{e_h*6BqX8_Cws;T=q#g}sfz+QNERgy#j0Msbk79we z#ba0?ZShzZNLxG}n)j1fAZ_tv7D!t>l?BokFNWs*5@=p8Wr4KC%b1d;trjO}>x?GWNch1v2)&gatD8 zzKjLZMqkbX8GB#B0%@bKW`VTP*RVjw-q*4~#@^RK%S07W!hvE~I}OTZ_z!A~K-(&y zHZiEo^<)qL4a>rmFu?SH#yWR`MxY@w&|?n}3#YMcH3lt3fvCnH8<>#CjzM!PFeNbi zxIuGdP{GYC44`2dhAk|Rw&Ye8$e8gq7KR2;n{x*=ZSQ1(jQ#FnfwTelK-1`67D#=y z51JD+G7LO|rl55nU}vPEEH;T}kYwNyRD)~G1dWFW zCnx5l7R56tqDVoOv81MehsYNH$sUT1CO94+~vvndBr91 zX`n+3;vr6rF9!J|o>7Niy&=a0r6N+yW9q!C`{m z6g378K_vkO28b!>+u9LJe~48FS>rQ-0W_Azz#zb=e6Q?BAiFYOsmWRSsN(m*3=E)k zGy;qwyVR5BZTgwFA-40%zLu{c3=E(#b^*rSriZqt3w)Ti({kZfmL7o*;I%;v0*uvr zI451maevV8N_?GrioY17pCiEd&327K+j8zrC*DaOZhtxHHv@wOBgo!!r+g$ZA>83OY!{>SZvH zsIR25AhnoSZIDH=AnUNMQ6|}Pq|FdS=!Gt1M69CL%V1CmF;GxRO)5~ZRZvOIEKmUP zO%${h;=lq)5CI6M7{ako&{nWjAX}q?ije`>77GPkur1UxNkPTP7;Lnm5gp7{P%$!r z*k(pG+l;6eC~%|Tp#oZ3O{EaWV>momjHwqaRE$r!QSe{^t;42Lu;4Kq9xO%%R7)*X zj8M2y@L-{0^x-ia9xNs(!J=1`2szmkTna&pC6rPKR7Tk0(AS`Z% z7$}R2VG2PZYYb3L01&CX$a&#Lnw=jAw-mc0kl$qn;`O&ael{;$}DiWpOcl zlVxB4t@h+*_yuKgG2D@Z=-_5}0A+D8ypd;M0F6|!Gt5wcu(%oKKv`T2*A*BTK=aSs z47Z^yE{4Af3=E+48QctviVzkTgNh;pgC;m6HJ~gm1_33Qc_L627ej$E0|RJmmz_aI z1;XNHP=K-$`EdbeNYw`gN+)@ zJO?O?i=jn>fdMpv%+7ED%Hn3Y0%dVAXlO!YxfyhzEG~u>nhXq}b=}+yYoIJHhQpeW zbw}I`$Du4PhKHIA44^d>+zd~lEG~vWnhXq}HRs&mKmoD18057;DG7v?p)4*2D=o;{ zeQpLjD2t0BR*Qjw7aV?xP!<;es+ zb-Rl2uRql7E5X111oOG>T8{2m9{%;WX3xG^`{yPo#2M~_JC--um_OV&d0U?OxAn); zPj?U8{672kqno*Z;^U&bpT-_O0|#W9-!0bo=>Px!^^Lzk>*wpaVD`P{?-o1wN}l;c z;~|iAr+BZ8y!FS@3pia6+Wn^ajYPMrOgBe&086(6M{rnpr|*x>&@Y{?A4v5znyaEA zuIhAsvCFh&Gk3S^m+y~y8?uun%{pDbK!rZQgt|k&9DF6z>H6W|3!z>Xf$q>B-*5Gb z2y}+N>2&?k?fT-j>zf;(1i*0b;B9&A-sEqs{{R0!!mA)(`Tpn*{Sx2F(e3*ot}}q8 z(}M#w0>J(Uc^ao*cY#(EZmY;z;WZXM_a#6NEdEBb_q)&;pnb62P~? z_P^#uiu!s6H0K<}?wm7V_sD=kij?@r7ba+KjEA_f)Ab27#>q+qFTjc5$!*sc@I(;% zraSZvUQhG47Lb!3@aA{W`g8`oso_4}Oiw7k<1-&EWTBbrn9KmF5ZM@%85zLK zblDg*86g!S8$%x>q}pO*5MhGJN-=?|MFs{oh8DP37hFt(8KzE;nE^aY$;L358D@$S z3rtpn1yXUcF*L!&I^bdwtT1(QtdPo-jiH$pX38a2NM+B)a1GiVXJfbn7kj`8X#%q` zJcEn9VudtR*%&^+#lEmYnw@M6zu;p3SRsu=HU<_pm>nE!kR}`(10P&Whz-&pV`Gqj zi^;G-noVpBN^mhXHb~=!4ZIaGia}I#?L|=?RSj2<3B_}iKHTV(1nHU(> zpopY0F);L@h_o>=FgyT@z|2|9#K5qQ8QHGWObiSQQA9p7F)$dRh)6LrFnj=uz|7HM zW?;}^K{m&OnSmhyECN##&&DJYr^G zn8S)}7dHz7LobSmF$)8O5{gI^3j@Oiu!sUUZ!j>_gCY|YbPS-Sq|m$rS~tr8D$ki2 zL8$~P4W)Wn7#QNy&?YY8!Q=9<`2y&eKic#JNDX4T0a*=_Xl7msVp0KF4U#DC*@bxY z4af{C=px{WYZXHiGgAf()!>yTShRq4s>MU*rBw_~EKG1I0nc-TR2bt@0oo4@QecF| za>yPjkX=}GBP8JtF*Pv9uMp}SQv);n>L89XHNXfFBMhHHx1FdMni^qIjWzsWOYOno zr($SoVv6n>mRU(4Lvh+ zbT=7d1Uq!Go{FKVg&C%5tf7axVoAl&%m5?!U`n74HZ#BoK9~xKQ_T!8f)8Z{2D*1q zB;l#g%m^b~P!+0A>kxdVDBcO+c$Dc>E`1Xt@cBS60)C>91xy4& z!%h@3GBY-Y=m4E4#KN#{_Y%LxB*-8esDMLmVSxCct$Cnra3D4uV>wZ1LIeYY79#`0 zu1JU~&>=sdlYNkDZIH}H76t}`7zT!i(1I1zD!_G8kRnn`1f&;a9{Nc^rKOoEdO4X% zXlDiC5Y8@6$F82p1Bd!p85qK;ao`ZPGsh@7Yv}vvSwrBHokq_Z8a-=h^sFJACx;Et zSwrZh9Tkrmf*dpin#cjw5FiXXNCLzM^-@9nRB1?01Juw5El~Q+z`$UOc5nko52&{W z+Q1?Pno9#|WMB+W$#qXH3CIN9g<6nWR8k4KUJtxi0b~VO6)Mrd#2|=t+)oDh!Z`*$ z1~x&^RFn`yL1vz33WFe&FUU|(ln*wU0d#B+XtW5lfuSrhr!kj2K?43LeuxeSoag6Ry9 zg@zzL=x`j+rd*JI5C(0M0R<8$+(CR$Jb{0Xv_m73mKgP^}Uhh zUxMQW604wi1hqD7(BctfC&&)a;y_ujdXUYS@#tHcQ<8}hjS#azIv5(582B031VND@ z&VUw)!f25wgos4Yxey>z_`uNvwxu8^6?DrV1Gbn0oiPDY4vM*4kdvT_!BLGrT0uuJ zfLscSR!}sHUusQYi4v$E%6S9oP-~cnFl#Z9<-nmVi;Hrc$g2u0wn@b zXd)0|NJ#~qQ11cB&!8+0IyDOvaYd=cr8y;#rI(;E2904s4FFHpg2EUy4h2ffAn{oY z3=JT+&4nItwFpa?fF^!Hjsjtj9`rB)*$a{bVURp}n1Bwn@I(s}keMKRK_g~Lh`fOs zCZGZZRM0u+=jN8?WkPN~1!okPRUqq-*bPh!IKl{2pn(!MC~d(?J#O$>W0KMg49KAd zDU*=H4dhnza9aiqx0TQX!Pe0r+?IgLK-5FxKyHDBn+l^8J-jwS!)q%vyg&!9fy!v)L;037Fn|v<1ywwthy|rH&>~?_1cSe+J}~(S zGN2JRkSwH(291Uy%ijj)O;D^u7KMTiQbU%v0IeJW&nZ9-Q4(MT9qfl1-XJ%D+yFYH zMI8~|NEsKFNIg?h^GY()GE<9+p~pXhgB@fc$TJ`eb2#YSStbV1fgd2pfr@pM{0yp} zLFp7v(GDt(L8k2xVqnOGTO6EP0yY(7Cn!@QWIR(C_!%JSomZNHA+sbk7u+%cZEOZv z1bOM3>wGRp@-z1fF6=}iUG1n z8+14x=x`knAGEm^#0SkFfey<9%^zK1U}%`nz`y`HG!GQ+Aal^uiXjtZRt6M+pr8e% z70_H1C^dj+6*T$f;J60KLYBj@qRD>(%R@{99YAxK5!HNu(CQ(iwBpCezz~48kRIeF zklngW3=Bs=tGYlAV_*yb9X1{hIl>ikb#!JIjX?(@f@XC<2O)x% zWIbbm93G?}43N#CuNWYkLP7GN&7f}>Ae&i0hu?t)f8Ime79SWO8_#|+ zFf=@dY<6v6Wn^IZ2WoqQCb<|H8pNP{1x5x2Hb#bqCyWdXphNCHgAR;fWN7%t$iN`a z$k4zD@*yKb13MD~1L&|jVI~F!kbR(;63`)c8cYlf8jK7Lp!5QA7pVPED+gMb$1cb! z!oa}F;Ordl7U1R>9OCTg-=>m3Zbn$*od$k#C> zJ|r^0HQq7Q#nYcbmVsT68=OudHYh z6$`Q|cUM2xAV(htIjAHnvZSY9n4^!Ui(`l@ILtuSGH?Vt#s?&V?py}lO$YN08?rWt z$J`t}eOz6@ZVM0rZAb_ShzCWAlcTeDd_a(=e~@QLWV|0J{2;Ms4ptTB7!)52aERZBC zMAFqS1mu+x}Osw42xX2Q@K#Z!D$j4SRfm?(Inl19NodD@-eUrYKwqMnXr&} zPa_5aD4&BNEF|73I3x(1pe;o}J-!HEA5dU|6Fb~`kRLz>aDp_rcm@YJhB$kG!xSW{ z0ul{!b@mT(VE}o69UPy|o&oVLp26PnZlOLt3{nj2f*^5529UU;v$Jb(aJ-AFpQoz} zgCbOp2`uO58txhtALbeq?CI|p?;7D591;vy!VFg8@8g201ZD#ZSP3X2#XI}^x%qfH zhcFmIZD0kK_LthP%AjVvVN|vF7ZLGPX7K78AEV{g+vAixH`xCdiuJ8q6Dl5B*V-A zm2va*aRqr6>;{kw3rr>;$lu-51)Ow1;;e9SM`v$GcZeoXL8c3~$k`te=)R6#Af6F8 z*6Kt+>#akJGUEe+`~zHrLL%d%{QV#~um+r+L2@3Tyy@Z>40Z-cn27-{>=_Vd!eGq6 zE?5P&36y?(93w%IH?1I8zJ3yHV zRAht($Gds@xp?}y2e}6OhXy&jf{QhfA|?hTMb7?yey+|TpqK=e`5<{_WceUh7tbK5 z0#&FjEXWF+T-`nWT>QiReEc0J`nT>V^76oHZr$TD_hMJQ&$lUgu?2Gn8> zWW}C-!6A-5KAwK=NGdgyd~iu(UP@w73WE~VUT$Q=f?c5z5E$wj9Ks;Uz%Hl{j-=2aA5hYW_w)-1 za`bZz0T+@+;7)^gFx(1I(eLNt7~~Qk91`T}=nIM?SQPLg+XGAVj$w|TKA@`u81xv} z1wrO9GGH~&$KOA|71>xVsPp-djRgk-EZZQ=R)ebLM^+1tx!_1YXHd!q=Xr2t2Z~_< zWOc57E~u(tu^@=73T#?v06ay33Og z$|k6d7GGBv&rn~qs05WoAj?FNO>*^f_6KDq1{t&j0m|zT0|GMh7<8dwBZjOu%r(f< z&C}HdGn!!OS{zw9#IcaX?c)zAcfkcD$Wao=DqUQmjsn%eCeomGg?BK>LEyqC0Cd|r zs4NTyx3fUE{k|w}+#ji;rs%xH{$sS6iMbIjO-J zr6no(<#`M`P=8AyYj^hd3vu-e0TpBZ!JeSTf@4UCqq7G%vw)n#jLkVgpquQ2!8rot zVHp$?eS$q*oE`nZS>G?j6Vw<3+?B66y!7B;f_E9I|zgViZ*Jg4-b=zsV!Z2RVj=0vZ%y-~a+C zP(W4?5ab^b>Eap!EsQ~}O^_NzWHq4nLI9{tad!=dTcd=m0@5su4|eqn0ax81Ba~4U z_y#yShrlii403gL^#oPXurO3XRSarm#s`N6fG!mbc6EWrn;JG{A&w!g@ent{6{_P@ z7~~3W7lIm)AXjSOR2UHC?;8*TF7!YO^^g??fZ9jFpmYdr5y!)Q1Peg}WcA=e50r9) z{C(gi8ltGcNY=12k^xrx7$K_%$Es^YNPv%{r=PE9urIhx2+MHB$Vvl3oqRllJzRqj zX%bdMm>{bIWho!WNKkVIp%T>b0eRmPS!HmrPiREEpJSMlkH53Gs|!4*nxUuywZekn zjVFYeuzYQfqT0{X&CS&%9#T-bAXI}|mZ1JVsMZ0MKCsdy-V@T{0?C1kAWy$|xE!ci z2mcfPb6FyGgJb6rw^#p6dL3Mmt=uT2KoDkz`GZq zUK_|rR;VOg0^}W#1Upp16;xfh#(M_Ghx)k&J39urf=dIC5)P;maODA30#yL2_dp6b zp$Y;VLpAAP-a!+}4LwAs}I1 zn6R^ltFI&62tJswC$y&xQp*n&bn*9f^z?%VtpHRQUQL23LXdhvs02J{p&CJ>9Uyrj zs65o`pl+K4Bp!o9;Rz2^J{XIDR-^}px&}ppLK9r^`1rWGxcY?zMS{b$0-SE$TpdF| z7c)Wnvhko&1k_vu)hHkZj0`XZ;C7#@k82pDkpyxuNC6XE0VwF=!PPCu0GK>8s(dgg z3xec9nI5E{1uh>BZjFPwRv|&2&Y)U17+kx9RIwsdxjOkf#|QWaga-IJ`Z>BoMg>$+ zG8D?7PH?CbsA`H2aP|fFc0k6l!Hsir^>7UH^bZOKxB5VG>~J|3&tOoSG~O39(gA6Y zG3XGs$kWx;HQvp~-w{->qc+>XWd~@iBqSc@tZ>ILSIF>_YXsc89B?;)5{Qqlqq7I7 z0|hDxL46T$XCCBMPPjT)dU0~}a{(8^mfQBX+ctGc|FfcHL`uO{~Gl2G2gT{M3Jzc=(x`1|@gCszhL6U((&|8Fop(HWg zv7jIaI{yl~?VCZ0fkV(!gn=Qz)5SN~6V#;*2@Q@9bMy&y1)BpJLI#-;9}p76z{|h^ zUc2BE5a#dc!XUxGAs8;ez>t#6>7e00UsqqqKq5#fXoR*TF+I#N2&|NkfkP0qy2U#;W0K*1qBkQ5(CYzfh_<{LY5?^LuTW^1-1qQhu|})4rd=%N59a3c=sUxP|(DjpR=nE ze0~m`_&{C&`v7zhnjfe>Lr#3qs0LS9kFlAFJ!V051Sl7R>j-cKD9^wFp8bL4JWv36 z<`tJD=H$eKi+4~~1!V+}AlKkfpAc|>f@*G%-yD5>oc;a67(l5J)NldiFmTfFa}9xZ zKYTocL6a~Xf}lZ}`i1F1 z@)Bl3tg{0Xjz=;ufG&IxV0{0TKk{LggJ*~A+8pPEdNBs@E?@!1^-KQ*t+DC4v2<0x zfC|G2Wd;V&MMDCN6<_Sdj`6MTXJ6)d$+OaT0t162_#m}is#_!yXPmTAXU*YV^842* z28MXB_!*{%e{#%4A^8s&|F5bqImy5P+Q}%un3TBo1nj^4D}7_1u@{ ze-5?8Up#Xz_0|gphOJ<6-3bY+7&iqusE1pyf8bYG&cN^sEG}sM{C`gDtSImQ`3IM_ z=-7e}VP_CvY`#*tom)uv=M#m6k21U_l`$~1GK0+LzuTTUFZV?c!#3_0&kDnm7#L22 z#Uq^?f-I*bNwxpto;Y<=n;ip#5DQ2>=7DnVU~&J#n5GX0f~1X4yYET)!)wXF&%X0@btMA>Gb_mahqWzdL^#8~ zzTC?%xT-&>lYzklEbb<_l$A&A=xa^;B?XfnKUZX6=m(2WetW{D;8dQ)M0Gj6%C*OS zFo1VQ3ox3@pM8NtDd^Qk*Ax-X9Ie|746^KWa++19qcJ!oFSqCL_{rVR`XX<+d? z75>4McA;jD&5Dh7JuFcS46DH6e$S;_moR60I!T=kUEHZ>!octzES|AL>So9yWruA_ z0YN^m=Or>Qn6ZP*&zaw5vd4Y)x*dPMNdKC7`W6F2IaoY6^Vya%`}ouHMv_r_nGIbG z3Ffy$g8z!$ID7x9Dg%QL2gv-_ zYgLc-r?kh~E?B$c=_T&f3=9*&;w-!0R6gQls6Dd7gsaTF@EQZd1F-llO|MwxX{SXd zHmXlN_ssDh1A`$a$eeoK8CIUFrp%0d%scIf;K>6F3}s;PEj!reJvU{QQGEA_VZyHy z(F_d7z~W6;PGsL*CMFbAq57*$_lXn(0}mI-oJ~ta4}Wy!Z}?jE!$|1!@l^~AL11y? zJ9!$b_MC3d^2%YE%OrS^fng3! zWMJ427EcfO(RqB@>epO3g1_`TN0I>L~ z@Fc|*_H}%Iz316ku77>Qz%Uam9;G9{p5+(E|I+xvi%kDzE;2AY0E=6GKKg9&31#cj zJ=_Lwt?M>1FsSi@%#ZHB;jDYb=--1ot#4MD-Q#Cq$Oen^uQKdjn$W1b*Wk>dmN|Wj z3=HeR;yd^KZ;>l+`8g$b+6mpS<(&8&L*^`CxG|$>xQrot&#DWCm^YWaraiV0Z`?&t9{%YG;%AG|30& z_I|v4emw(&8b8SVS38AdS}yJsd>9zHM)wBODM;@$V zV3+|G-{B?lql+V?>-yEw7PZe#w;34jg2h!>AKq6NHd5Xh!h26S(wc*TL0$-C{`!c? zb07b!`s1>0%FD=CecB8RDPVDiJIB9oK9i|cU3uxm@;95r7#LQ8#Vd^E6`Ft4q*-77 zQTp|4jSU0Cd$9PV{>%eP?wYyle?IPs{j}{V1B1CR$b6~me%x9r*ZxWQAAee6f2*B= zp$;rwk!#|fJIf&B$^3s2>6iB%VPH567XK=CW$xrh4ovsYOPM6Ezwv>AffKZDh4FWl zK;XvAz|7fdNs~PjK0jq(05t#v80*3cCO`d={+`LZb>`Yd!AuMcQ^D%9GduzqLReSz z7>j=2y!pp>28O#}ai6rh$usMY2+rKI_xbEe&%78Ilte-9l-y9?x^KU;udhqQo0Q(| zkqitOU~vbPP4=2M7aqGG{xds~>6In}!+NmzZsl;!=OLy#zI-#Lx|E%L#=!6mEM6EU zwRDG-f<)d^2E%o`r^GTaSc-wnulf``#r_t@l$z}(iEGQ1RxvQtfW#l08 zXuP{NT=X@=Z`I5Vw;31|B|zqXDE_$XV8OS42WG$jCNHabfPoWixo5~EX*`x zax;^Q@{9A+N)(DyvWsKNGxOlLvM0iBWe15CmnB0Ea3$N2;?$zDf};E~3XRE2E~+dj zq0o@xjMSW*#DYu;jVaH}OG+$GCB~Gp%;M6-9EIYN(v-}61w#WpgP5{pcmS6rrlh7p zPsk-ZfOC^8h;a#?c+OAEOv$0pjPlI9;^f4l6o@gToKcLqXD*qNG>dfTFxf#`RFIsP zQUvh|MTQh-7Eo?VN^&ZtrW6!s6eK2R8$uj|KX$Mkg-l6|B&VbnLBkTi#h|0B5r3cu-Q3EE9_>^C&IWGjmhplXLS^UqJd5`ua+DLIt3c1!cJ^U5i0W)u}r+5;#mNKQ$nw1Wjo`;@nFKwYC^ zqDFNHq`8um#3D+g2ih1gp|EfQwcDuC_$x>)qCyigJ%u{Ko0(5cun>wRQ0IskbMTb9 z<(YZO6c=^*IjM=IB}91%k5ixt#)xts<)xOCQ`$x^&!c#3AU`LSQqSZi85>X-9{EXG zpcWo6rVvVRDLI)*#F&F8lFKvmDDSOgm*f&XyoujWIhnbcB}BCd@%SkvC6&0E9*-Gi zsYOM_MU>V><(YY@MMe2k=ndxOP#h{b6c5~hyhHK4KtX;1Xv~+wbX#0fl$ev5PHA(a zJTotk8XX)^@~6;8IaR3@1&Mh?_51K7Tu=o9osv=+u!{mwuLdLMvO@TsgK(n|_l}uR z;W{?Rt%KCKyANU#RqlvGGYalwBkK7W?oLd@;Xw|+DvU6mc_vZo>evxEOY`LGIq*X4ns9aWPzhvbY&;Kv`T2 zI_!{Byx19bKv~=jd!Q^XhDjU{S#E}DP!<=%A}EWSVHuRg#jpv=;%3+eWpOc_fwH(6 zE=pQF)ZL_U;y2;%+A2W17UG92tZj}3^SlCZiYEf78k<>9?)SE3=HfHHM|fO zH$wxI#l=v<2NSD+vbY%j@IkH!WM^2x4`FdLtbww)7`6$(#CAbhTnxvcEN+HVP!<=% z11O7|;R%$*#gHrnI*AAr>giAx7lW511N3q~KPZcfK|&gKxt|P_#l;XU4ccD^(i;zD zaWOnsfL$;68p`5guuy^Aqr%N#17&eBEL4GASGW|);$k?j0=q2mGL*%|0KVc!Obh_Lx$D^CES*!e@fYm4}k73+wt+n|NkHc=pHkOeZk$a9O2!z3=9km z#s>mAec$x@as&o|YzzI;8+s?GlNn?SNE*}LuufMFWUD(}fBe7RdZ3gSV!7=r1_p-G z;BHrrfEOSGnvbw_GPfQm<&NL+&0NWAs)6JC4e0~l zFDSeIiG%t64Co52KqU3uz8t-7%y=}QnGaU~55M~6Hv(bZr5xeCu78aG2Xxl{>8$+# z)xpwwpakSGu!Fio|8zUCbk_dpbp2v|ye?ut=t#2WLlWAxJi)KodzXL@x9oQ10pDic zYa;%dx!04STZYYAqEx8)B}?-Gmgb)<#qYX(1uVHrM7mvnI5Z!U=yd&I?fRwWM0f3n z*R1%*n& z&^QPS4$fi*;Q&Y^cYo+C{n7mIeCR7LkWuoa!IZ#rYYSRdx^JHp7o5Z?Vi7%CCm zeXjclSV{8{4r|vB{H;?N85o-XGnQ~R|7YfJZD(X)$YKDU70eK}6Oqsx z&0>T|^?I-(OYpb&BkKblsfH>Iy630YmnU#1=(N!8%g0@LKxqKi3eCo_cf>?y|Y1v zcE>OYSWA@JAqf{rBbIZc)`4E)TH0-udRh8a@%h%jiu z#Z2L1?#z%%fQ=ypE>^}2vv(ykr1)lIxXuhI@YxuCF++-ZHU?Q1NJYcO;KBl_BG?!@ zSzs<*!UA#|$mgJ93fq-epsYG@S6+dxqyQx^1cqMQ6ATgoodC$p2)d2}bOi-S1cH$- zq5x$uW=7Ce6rk%T`0j};f~WzJAU}g>X883{;BzWLLf|WcKn&1jQXm?HLH02)fDSk; zU;rIw2D_jLbi^S@9(1QIL`^Y-%YYE+f{TETN&|5gFfcGUFe00?m4Shw07c{$0|UbX z6p>#H3=9`gL=+jp=T|a-d;ziD7ZhnAE8xCJ!Vt;D5CNrbs3z!zNuVtus3He3bb*d% zL{;+#Lyb7ZSzu*M4A2+^U%Uj00c;m9fi{=K<2sT(K0Y(IAU+;)KBs5CbADb)QGSkt zu@OT&Wa}2BQ)qZO=j0csLJqZd zFky%X?aYE4{Sl9HXaQ)yFLcKxss!xV0Hi|(uqyx^cYs|6<-~z_?_lT|L8!-q#UmZR z1&K-ciD59G6s0DXq`GD1q=q{fSup6ETS6|rfszF8#W66qFa@gx-HXEtz89z44^k9^ z(x_evXa=|}6~qQ%(EW9HKn!Gz|7h52S6^slFj6MtuD}6ycNX3Nf{v2&Th#D9PvX`>^bBMeqr-zk+ zA&hF*sCuK2MG1!25cns{|gR7U0Ev_Irneo(vA7wxEZkRDLG8B|gI01+UK4A7(2gA;QLa#G#ErF2NX zPi9_fVo`Wv8B8QG9egl9SO+H2fH;^Rw28YI$t>`J_?Xv2fZPH)rX1uRn7_;!7#cu) z3kHS;kn?Py*Fzv*Ns|e+9CVC1hzasHXm|<~4xsA}U~P7oJZPH|BlJcPkUChqA13cF z1u_LB0|~eL3=9lTXyFF36Qm-Yfq}skbl3|>3oP6aH~k?(%e4X{ut563+Q5x^QRw|b zs=^Em!ThK3jh1_mDnh6Yf$_+p7G(6tAkcmy3q53&msSD+C{B?a0( z50ZuSfk77sBkTW)7FVFFC%n+&3S=k94$u_{>cquWNornkW>QWnIL<)!f!qqhgCx#C zsRGo=1?8+{NRsePEY1dB7yuf>1D(eJT5SZ5T=cjFg$H`v21Bog3T0qu05!y-85kNo z85kJSpm7Ph5^4ei188`x0Thmz(71)=Q&8A|$H&0eCWCkk44}9L4i zH$&r_qVY}8_{L~_BQ!qfa3O9%PyzvEJ>fnkW;mjF7x z6m*yunfD;T4jJcVKpX{zi}9odU|tUKt`T#z#Y5|L+< zz^68A3o|eTfY!DkW=X(@5o4YLPx5i@!l2{jg&7!7R-u3#HxTEygAOG|KA{~H6*M}N z9elbs=u!g63G1L!!a+xmQ+|#*$RtoSLQX^n#Rq5%0(K5F^mu(-C!iBJ@*H&bK4>f( zd~!eN8UT{dKL=@27G_{5L5XjWxuCIiaJG_R;1DGGRCG`;9-rL-7RNk3`wUnd^Z0Bb@G;z& z$7e@^#W9c1o(C4kJU;s&SUe5m_-r-sG2EEPXXk*$F^|vQ3>L>cKKnaZ9P{{WJMi(` zn8#9yB=)TGR;L zIgm`zS!v~Dgo-M2B<`HrZy39%+r`o`Rx+WLg|)jsHkU zY9EtMgEOp&^Z-T~LfKiA;G<$k&#%UkPLV=p^!#cPE+GL0C54ARf!boD=U3yp=mmNL z;pq9*B?|bD%^N+x8gwivW|MwoonKAelc&jU3y#=>qw$=|H+tAJwu`(*4|~RP`Bw4h zVb9poN_l1;l@5CzJ*64caK#+_8a<^MX)ti~lx95l1CE~3jH84aJ*63SNPYB_X3%A& z*o#}(B`*VUN;Bl3Vd|YK3^NISR_>5HSeb!g0W0L(0(OQsP!>1%a9_}Q1Y8UWY!F#) zh7>4^i(v*Ep17&eDe1NjJ7+g3YXBx7DkL3lO7Rk+U1uDkH zaDo#e%gt~G%Hm>BfF8!n&X5CTaWfP^SzHX8xFBZ>ax-j$vbY%bazRcR36NDX(oCRfZF+dKd6JTgyU|7XqF}pCd z`;GB|=2{L${wW7~T^JZ+55vzO1v5gs-*meQgoQ&+jlJtC(e2C8{h`~H=VmQmTBjpZ z_ci|Y7x=fk@}+gxitsYzgD8#Rie|8C9N}%=VmS+|N29n zjvT!rpkrDXj1Q!B27*ixh=W@TJ_uKUI4hB?+yC!B1H;W+j zuuBYdd_!lT0RQ$-5s*VzzzzYOoBIKz0d!D7TBjq(O+wwS3Z0=KQQr?~{MS4sIvqvQ z_^&xCU>wxi?aJZN{DZyR;=f8OXv69b(Af^Lhj)OEEQmb}I&YdG_V5m41_lrXI#(t3 z@D9*{jj@M!{09pfABa5+(ufah!B6I#3ul2&>jb%&je!q(9w!?E=-^e**$8Y59gL9F z$;Qyb2uYJ{3=_1R;_KRf9Movw?wu0d$%O zLd`Ph37HTP6(2v)K`#s~jF8id*ceoN{0u?H)FO)*fkeuXML;Q!As<-;bod2B2C|4L zNLM1V2Mh1qn zpwosJ7#Q?Gi3N1pVo7QR=&TipMh1pw3=9l2y%-qkp(ieak}LQW#iU}yDXq{0hG2SN zbOVFK0lgyB;~PN*4(L=ym>Ll6AmHGDO&zBXNEU%{sT0JeE+sXoG+hOJOe)9((1BHw z=;{~*oG3fxu{<*`H&-twGf7E7-^JCQM&BiI(7oD@dFH($@g_735|es2J!}M39^O z7#JErCmsesPuvT`;%AULs5UV5LlR7Z`zN5&*+4C8^wSPudO!!UZ-x7r0eT8L`1o?? z(xRf&ypo(sSZt>_fqYdAKJ5@<0|wc^1U^d;;z#881lb4jBZ!8@XA}dd)6KvT2R_-7 zfgu5l-$3yUvIP`2AR0aGf?8~PXz>Zs1F{Fyumj(p1JVeJ&-mb+)YJk3?nh3pxy7l; z;8+A5a0xQSRTPq3G14o@PIUjJK+|g~1Nc@U@F|I)-ZjksAOk_C>wy}OAT|ht{0F)n z1ms^(+;uZBFxa5^52OdA#uC)eg2x>rH0}@$d1p{`fqjc?1IQLAZeU`NWZ)M3@&Et- zDWH9knaSD30jWj7smb|yDPVttk{(F$1Ysn9L)+INaR!iEK>h}~#|A9Iz>otyB{H9Z zp#gNpDCjgoZ3YGg&?$qU(*{AO4}#nd;-iNL=u|;u*P@3Eqn?4G0hCVq7#JErS+t*lp#ijYaVGS1#wpNK7D0Sa+%J{@ zjZ%!Bs_5zG67TNn=Njbb!vH#a2y_-CEAm;8o_=ADKAtX)A+F%#M7%(0fFsy3J|M9u zF*mg&wTMB1fn5-!jSX3wvxlRfyQ`a{r;n=(g9-yXc<1lvsfs?1?(v|5!$3#p`8#>J zI)^ZbFtCrFs>lF3_+<1{#b8G_S5VS$bn*`hVUS>87X*a~2ZOU`K)j!;t4n;4tCPP! zLWN?71GyDWPupW>MGfc+K)5q1%(btthjDcMcB*Oxe2?+9c_jF+Z9iapg zXN8M9I(s|1Lo|Voht(AU)lbg;LGfX(LBXE>e(}DJULc+kIM(V!K;yWe^9KTg`~zHr zLL$LO?0`!P&vNuzzTfvn#k{1nu@`LRRGL@8{?09OCKc z&L9spgc(^r$koL&2&w>f`Wp+f0w-5@Pd^v`a6cb^M;8~z5J$LU*pQXE`njMe8a-&y z)iKP`)5p=t$CY99phZ7-hS7r-{enXr{X#rJtrS>R8$D|bZat#g%@^lV~cXST%40Da}1XXT6J`Avv9eFTSf*ScC%RmiD21Tfeyl{1n zE-v6!yPu=GtFNnH2>eV$KDd&AApa15XMdk~ADFxKp~mpT)p&%21jL61y9R;!6Y&9# z!NH*O!s1;<4_b6}cXW=7A3bQ%(K*0z(s>o&5cM7(hp`fqLg9 ziRqB8J_G11L(o}$<;fX|Me!vJpkwu32{JGQgapJpJNo!IIXZjCgUbv*XIBP61`a`e z5e9~m#B^wt&Hy?O5;Pw1x(EY9Jk$X}uI}LD^FVGubppt-ph4S^0N79i1L)K} z(4@}*pPvXiju7Mw4@W;2A6Etf$0>pm0?8*Rf}$NXjW=k{N(A`=H0UvCk2sWO;1Ki^ zK}-3reqo+L{(cM+3><=wVcEjR)zL3BAl^O5KQsWGhQV>^?&I&|2+3lgR7b%nhoHCv zEu{+e^b27CrFT|HmILKSXMevi2GIGHpjtk@BrzR4_~hpr0&OSxcm{`n4`T(jDnarA zjzPh$pt|4RZ={@fxYga|<%~ZDsn@+?y}cJ5dBec4jtO*<6y}MCpTXjoCmvdWPcXzh z@vsgoj(OtY5wJMsiHF?alL|3UJoE>PW1e_85iE{*;^8&0IOd6mvfz^nC%--6QgABI zVxqd7Ugg?jKNuKNz~Y!E9V!c3-jQxf}xP|4F$pFld2KD#SeT zFdrzcxVhh!4UJr!z!>i=81<# zz~Y!E9`b@uD#SeTFa#`)dE((LusG(4hxftam?s`8gHJHrx$l3ATzSjSDY?^T$gH}u zl7XQaERK2N;aRXa=81>=;FAio*DS5t*iA1|L@&%h7@7Jrj{FfJxhb?po# zak<>zYtAz;%m9mHo_Kg4ERK2Np$hl}L(CHoGr;1QCmyZ?i({U6_!%sYdE%iZ_yj}D z6A$aa;+Q8M9srB4kC;67@xQ7+F6*YejC|Fn%>cd@QGgNi#6xfJ35J*_9!>y@W1e_; z11yet;-NhFq(aOS4^zP6U&XG>o&3mw>Hc{sljQX`J}@w>0*hmwc=#SHj(OstIrs!a z%o7i5z~Y!E9v%XVW1e`(2|lS1^Tb2YLD2$?m?s`i2CK(B@$ed09P`9ON$^R9m?s{_ zgT*mVJX{VI$2{@y4OkrW#6x5735J*_9#(_JF;6_)4;IHf@sJgKQX%Gvhdy9&%o7hM zg2gdUJiG!H$2{>+5`0o2=81>#U~$Y750`<(F;6^v1s2CV@z4-_vLWV)hZSIP>?a1roIQk18uJN{-0~A6^s#J@F8_ zjFh6pI(pV2mJPGeqo52S(L(;&G%2Y?MHHGbde$M9_!*G14ng@ZIX^cyKM$1uz_H zq$U?bj(?jQD`3YR5i*?DIPuK5Zq3{QgT9T zw$VclM-MqnFG|c+NXyJgEmqK|upss%($PZ>Neize*vTuDw9-cpImC9_W`03tN)Cm! zMP^=N3dP5?gIa|tIh3{;O7pVw$|#`ao*1X# zKd^T6ki$$IM~ICca)`T)WJFBD!*dF2d1l_|A%{rAh@*!bjvjJIVq+7Og>oppi6tc` zol+ypGxJi@C^e)Yzn~y7Ih(>#W%Q6k8Xt0~SCkl>npl*apLFASuspug`6(O&hP-r;%0aPWpObWut8+G8BCxoE(Q-Mi<`j*%Hm>ZU}Ina zZM$Y?I0I#IGhBeOxELhaA+p>IvQQQmg9((y&0qm#aWRxY&;4U(0IhD|VE~=KcLXZN z#UQ}}J2OxQ%Hm=O;9y_??U-k0m;+^TGc16zxESt3S=bGkk%vxELI`7#Ki1q}dsIpe$~N2~ZXn z!&NAYo8cyu#l-+xy8zO`&F~T~#=s3Rg`0r|%Hm>pD*)P44GN8qP!<;h=w?6Asy1#0 zF+tEiK~M;TPx<2r$a45E3fjmAKaCH31mKx7XCU&e2TIrju&OXVfO>2oL_I<+_*6fR zUe_N`q1FQ>()V+J90#2e20oJT=8JnD@5+Mg?tU737$OeiLF{jS!_f@de$T*AB91WV ze(sMuplDJjJw3#d|%pFvD!_$hgy>-In*APhRGgMq;S8kz_-&LBxB zhNuY#AAH8ZfKUTE^#pWE0YU^6k5Em}6ZxhwfKT9n>e53x3=QNi#Cd=)T@ZR51Ef>~ zt6@Ms@(h&Jm>FRwE;O9EwFtCD7ouxFgkk`xfw=iPR0LuUi1QvqKruv(5Yi!V5D^(h z28IO;FrOmZ4muA4Vf(Lne<~5S>p;x`sbNBKGw9R?gs$Ba(!s}lKpf!$)df-mu{{PV z0+NS_6rzYg(+2p!Hc&WVJN<7GBLhP`^yCiMIV--Yx%owv4Ds=qxdrj@?m78Mi8)|7 z2Mf4bq*G~7)PckuOyJ7EyOMDp4>o-^}Eq{Nnty5`|zF@8Xzn zq;XKk80e}BB?VniC1BWGSiJ&gif){mEJn;{7T2u=Y1A`I+ zui$^sibYV_&QOr(kzZWmSdfXR#*2!<+cJz}L8k=<6lInrmZSzGx)tT;mB5{pmQS=gaRv^-RbVFvqu2&^+8#wW$k zz#$0g8U!RlbTJ4sa0osJ8v_gWw0!J>N(>x=o53nUfej6Zpwxn*)Z)~vC7b>De_#HxjX~UA}R3ca0~*Bn7cndGcYi$1*PX?s~G(2 zqVVQ5qI83%?()G4x}dofGCYUhT4=!$Q;=U&l31FOnXi`ta_$mV&^Q8Uq+tb=h1T|B zU|<0CB_QX>gZd&6*5K>)f*PzKA0aTbX^C{AJgBh>=>s8DK~80d@L}h^gT`nOBABPn zgGQ<_&4Kl&L0N4`kv=hrggD@+hY9J~Z7#su) z9FRNEAn_yy28I(D>M&0>_h(>W(1M<(4$=q0;FHaRjCyBWqyqIWk&llqkWmtz6=F@5!&`;P>MS$_Gdt+0;hm# z5h$Jyr9q>pAf~Gn19h|AVY%{0|P@S z149F-KLk4E88kPM$iUDL$H2gl#K6#y!@$6h%)ro41-f*KfuR9(@;pdg69WT7CIdr5 z7Xt%BHUmQg$f=-Hqe1an%D~V7iUW{3P`ZGfstj^o6o^2IS5UeDr3V-W54|JFgVF`8 zRSJr8&@7c5+G)}tGeP=6!N~(V0UC6AI3nId^ANQ>M$CisLY+ln%!48gb{;$^(m;Gz z>uIh8Xh0a$Yxu;#z)%3S5JZ984~j$3+#W0sRWUF$fZPQ-i5fJcSI5B60E)Xt28ITZ z4b9LvY++z%0G-U;&cM*%3Auf#0c2x014Ba~0|P@Z149ESTqZCuG=Rd-L=rSFIC?_$ z=n2)HPN5;L3_{RzqL~@|{9Rn*LtG<5z^C#Fihyz*Sj-u8h-`c?=*(GvKk%WoAW2q; z23Nlj&ydLYAXhinAXm`QK%i3~LB|ydKu>`T^7M0$cN;yS8hYw71NhWs7tdhtc(+g= zAMjbnpwpNc!Qzh2&aT11@h+}@o~|z7BiBH3Okg=b*Kk+FVacu$p1~o(a3#!OCH_7x zm`Y%0V6%XgfDc&%onY+a=^Vmf2z3=JSS}Feqr3Oay>T@ZAz6H^02 zLs&?BkZZ7OP?)O=gACMOcCaC#ek1sV>e1t+p+{B2lUgwN^g_@XQ5?`R#4#i^7;^ZS zkB_IHJCaIG=n>hR$SPeCM_VH)g&oPwg{(9bl%|~>ojqJ#oc#kL!ABT^Z01H*6zmE; zw>vP@H8_Mpl7St3_!;~-Q_x{&L5_Z|Aq=We=kOwH2c6{^5*aXhyfio(UHzQ>L8qWI zj296eqdblkQp;+STt9WM>) zUz&o)y$TZj@*(rhqeo81yZHOYgO1k*<<9s}KX9YS)dhU%6(~Il!%xQ!addKWb%}Qh z@(%|!Rl)b|fK-UURRjn7ghqhxiUEZ)W5bUd1&N+{#ieO!naP={c_q-bsh}%OKpI8i z8lfj_$NM>kdAdXTZNdJbelEcbpgtZ*tr&({pV2d^nHij&<9+d;Nex?33X)v znFAW=1(^{a5E8_o&cGq~O9-?w2s+g1jAKZeXoWDB`#_FH25~`4aDqLfT;m~!(7Hq1 z4eHT=M$y0r)4D>$TwH^l!D65zm#raU!I8mWAu$FHK}(2Ggs+dQud8o7$O!OJ(&iBH zFvlRUQqbwt%Aj#+kUv2fd|oqXG~Fj4I3x(Xh6pso1V2I;G{(dLT5<%sH7Y*d*VDx( z-V=0pl!1YPA$a+eG3cb|lEn1DP}iVH{{Ya~2E~V9gTe;ls1T5=Kz>F$6Psp-U!$+! z0UZtuY65|(edq-n;D7~19ZinC2KgPFz7%+F^BJZjnfwaneSeHHUY}?_Z}F7~;X=XP6@X$uSp& zP*!4K1qJpcb=Q|$C#C1q>} z1sE7~!6#k+POREoRB<+0@O14jTf=rc28I%_IESQruGGbo?FXvuR&6z!_LqTS8(19k z#O&W-am*959l$4GW1g7Z1{TLWG5ZWy9P`9%Vem=Um?vh3gT*mV%$^Ar$2>9n9#|an z#B5dYN!OSsX6Jy#F;C3i3>L>cG5Zf#9CHn%A^4#1Z>O`vm3$Um?vhR0E=Uun9a)pN^h7aX2*cVF;C213l_&bG5Zr(9P`9%C-4c_ zm?vg;fW7x0({an=84$}U~$Y7vzLLzF;C2X3l_&bG20q^0(N@9kIv)M zR=?)T5&XUJj^Ydkh9wr(XK9sLIRj$`x{89SsRZ~+l#26SLCuU=wq`d~L9`hvaPhjzxLd@5u z^&VUM=S>b{@6-o^3=HPr6RHb<_X(k;FGQ~PuPwFi({U!y%a2tdBXN9usG%k+Xmnh zurW{AE(MEYp0K?aERK1?HWT=yYs?e2J;36aCv5kF#W7FVhMbsJYicLe9|@M3ENR%am*98=Yz#DPuPA67RNkcTL*kHHs%T21z>T^6SlX5 z#W7FV{s$Jve!{jgXp=J~$Dx6aFD;|=oU7v0qOyXb{4&Ubf3nX&&7;QoZpEV~Y-2m1 zDnF6(1KvPsh5Qq?(Uv<>lxRm!+Qxm>*62ywu-%BD(`_>IlS?Q)*bsDfUJ2#Lj}OR6 z+t~J3QIhqL585WXpa&Hsh%>YCZx93ROGE4|qry?)NC!YuSYM5vv|XZr=g>Z+fF3<* z8?ESmA3&YE0Ql0y0EdZ5Huke^R!wF$bRrlc5p9}E7v0>7_{ z6Df7d=t5nLf(7cU6ccs57=bdkBqgzk(qq`6H)NPl*v-&1Jz7YP%$zA8*KqI zngMj46lniFJJyrL4?@om=VmwxWpOcFgtE99u0mN{3=g3!Zic5&78k=uD2tonE0o2> zz{3tX*O!|?0LtQG*uxGv`_-L$$hp*}2KI(h&iEZaZv6ir7kfC1A&a5cl_wwrbnHV|7DEPuAlw{Zp6*bNz_1{&=5AM> z<|91NW4GgXe1vF++QNUFy?--IU#B}uyzzm!*u$XHzQejpdAiwbL9Qziu>~nA5k+

ruO& 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

bT=r80_N+ zyDvD7g`u5*I#9Zw9mm3Ooq#%!e_zM3Fv!Ofw%0hGg(01QI#7D9j%Q(5O+X#Uef#5C z7=9B_2XY^O0t7kKM5sHT$il#!gx_9}dE!Yd4BiCPf&3Al#KJI}fI3jTtxsZMxKBVG$llLM zEDY+&gxzPI%)*dQgu3Qr7KZHv)PdZ0I+=yxHxcUiQ&<@6Q}DYFWL|Iz3qvyjb)f#+ z^b{6`!vxfU(!uo<76$%Q{Pu#>DW|e9L=#X4a$kNb3&VT@>Ok?aIhBRsIRSN`e(mp6 z76#=s{O$wUYo5l!kWN4yC|y;ju`p~Wpbq5U(`hUW%<1^;1^GiforS@hfI5)-;?r3e z`U$85xo>eg3&VXP)O}88VbISY>^|oV7KU;H>Ok)6&R}8KO+X#UedjY+7`QX>+Y3@B zpUJ`yO+Xze{PHtd7#0(uZhIyR!)pTSK=%I6WMQz*BJ4i@EEa}t0_s5So1ewPaG8KQ zQ20I1Vqp-^#&0huJ!@yPFa#4&2eLOkn}uOE0d*jI*JraZ+$Tca=WG@ROkej^kNo<%LLSc`ti?; zSs3(7@Y@Sg=Ul?V&`m%cDE#J^urOREpbnHTpO>&O$d}@`7vx{#QWl0}0_s5iEiYwZ z*i1kj$bH94Sr~p3PzSP?zl?>!z6`(nK;{LPu`sj~PzUnw>@pUH%LLSc%zIwO!XRCa z-(HaW^vhWo;t8k&nO9uS!mylxI#B%XE@xq2uE1|ENS$~E3qw2sbs+Z@SFkWFCZGnCt#lmo&fI5)-9#^q2h*#sc7o<+RnuQ^rfI5)-imO=| zRuiFae>DrkcLM4__Hx&-Fxc1NcOS^!;2IW&ZUXAS;ZnoGaGroVka>@5SQw;h@!Ja; zztXQ|VaO+-4&;yKS{8=wM5sGm%fj%VfI5&rgzH!soa^wr50p;B>sT0?38({^H@%L9 z;WzOlUO-ps;qnSeS_dVb!_!XV#*-+dte8n>`8q!UmF@^5tu3&Uyx z>Oki0Z((8hOh6sTJoZ)=2J=?@?gRP5yOo8ZnSeTQxU{k`Tqd9n;bs&5Hx3Mtjx8rvoC|sP|Ss1Dbr~}#C-_F8t zm>-u&Ydg_ z-$+4))S%ba6b#fX9DU#kT zNh}Q038(|vyLu7}!+iqkK<0g(#KNFF8Nd5L=9y1sVaO(+4itX%lUW#c6QS<>WEKYQ zDfsOLrBnGSEDYWR)PdX=KZS*1G7;*QPhnxWO+X!}Tzfx-g+YHRe)oa=>pYc(p`L&` zkozW2Wnnl@Kpn{5+f!K>q^A+KSAQA{LpA|*pmbF~jfG)50d*jMoSw$Qz&;(ny&!)` zPiJB9C!h}GkL2kr42ub<1KGQMIt#;R0_s5NfPDrFgYgW)?sK2P!ca{>9mwAP87vH^ ziBNZc1`C7qO#JqO!dZVN3qv{qb)fuKJ(GoDH4*Ce&tzeEPlP(=Su703vk1G-eHIHt zJrU|A&thRXO+Xze9o(PA!XP{wzrCPvR-etnkW4@wDE!K2voNeDpbli-;n^$<|A|m1 zJcotBe-3{4fyV!m=dduWCZGWcuznbDBhUovoKiC$L~H+y7!;Y z!cb2@9mu@N^H~^96Ho^-@BVxi2L1*3?FEI4@&Xoya02Q;=4CHnVVF%o9msv_7qBoq zC!h{w@9zaH4EhW4yAKo}&I?%>>WNS{c_9nKc>?M{_C8+7!XUl~zr7%TXfI-6NG6~T zWM26q7KYUX)Pc;~zleq5I{|ed^SBqYFxW4~?>82Fdsw-@9-<)thP;RMuy%*$TN z!Z4eFI*@tmm$EQCCPLl!r7R5E%kaAo6d(4>SQzRFr~{?v$;((6&J$1v3g^emSQw<2 z6Sh}>ISWHR5$c+kvoIVcpblj3_2n!K{44O=3sR@Nf`uWPfI3h(=dWO4SWG}2$h_?< zSQy?DPzN%Pc_j;j`AYom1EmA+l`IU^1k{1d>tD&jaF~EPka^cvvM{i(!f!9gJn2;| z4E{u@OJ2poFr9!pP`IpK#lrBIfI5)9-&e6PXs;&hKKs=y48;W0f&AOPnuTFI5$aB_ zW?}eEggX8;EDZK*@VgJ>-{3VY4BZ6Of&4pv4GY6%0_s5ic)o^(L3}NKdqL{7*Rn7~ z6Ho_oU;bJahUEm*f!w!yEepeY0_s5aGOuG{FkXk>eW3Qe`#KheVgl+w?rUGi!myu! zI#9iEc^wOb_Ig4AiRXJN=Epbk{7HLqu3*iVGI%j;Pf_&4CU7ZiTV8(0{^38({w zU-kwThS>zvfy`UKfra5Q0d=78`@VsNL4PBD_kq+oZ)9PpCZG;vZ~sOXhQmatyS|Zy zfqN5Sd*wH=FoYAKE_)LT!(syJKg`t}Wb@Ml~ zFkB~~4%82Ly_toOl6g?_^;x--+LSpz!nF$->Y~gu3ZFSs2a}PzUnIpMW}0IB(v~ z!tj`YI*>oU?`C08-hQ23eeVPPmHpblhj`yLjC?L??My@!S2Hvx5^bilutg~5F< ze)oamEqX5t!(syJKIstVc zd#ewyFl;8E4itXJ53n#WAH;7jNS*jW7KUH~>Ol6UA7o*ePe2{WADa)dFgzwg-S>km z4C;sQyANcZ^&u99Yy#>)?yEn>;d{)br@ z+6kxw**p6%3&U|D)ZISJ!oYrnu)WepSQvtdP?vs$g<(Dcbs+a`KElFqpMW}0dj5Qb zg+cu&e)oaG&-y3}LpA|*pzy0d%EGXnfI5)-P9J4q_)b6_$bH<$SQzY&5q4kjF&2hq zBGgSk#=>x%fI3hpo)oQ2^z5$b*)XJODk zf!}?g_;5bK!ca{>9mv1^Cs-Ix6Ho_o-~AIT48kYz+Y3^sev*YDnt(b`y2?Mv!Z4qJ zI?%Z@n@_SZTqmFoWbf;fEDZ9e2)obt6bnN-5$dW>u`sMBpbq4Z!>3pnJ`+#}O84xi zSs08@<98p(JonQq4CO?q>psoGu$zE7P`I2w&BDNZ2EV-^b>e4O7`%y47k`F@VKNcw zmY-o^xJ^JE$iMH;urSD0; zc@~D}1k{1d`+c5;LHh!J_kq;eUtnR#C!h}GkLC+347&-a1DSXJ0t>@`0_s5Jn(##y z2LFqM-Isikg<&!Qb)axrevyUYHUV`Yd*5GVVbH#W-(HY9`%5eg)dbXm?CrnA!f==f zb=NPkFmPYSZ!ajEG0d=5oslUy_u$zE7ka_2CvoNsVA#AVo9TtXQ0_s5NFZ~V+ z!*T-ZK_51kk1%;pWeHMmt0_s5Kb>C-UI8Q(w zsQvu-J_`f?1N`=a!cX}D3qv>obs+a;KVV^4PCy+f{B}QJVfaiy9msv`4_O$D9};$- z`$HCnY69v&_VzzyVK`2Ny4w#~7=#}YwpaZT3qv#kbs&55AF(hjC!h`#&buG6FuW(A z4rCtlV-^PM$N1d`iVy$CEDYTQ)Pc&~`Hxu`&J$1vviI?076$1j`0WLmr~ib7A)bIb zko$_CurRDALfzpfEDZmNP$&G9g~9(Re)oawO@7M4FrNr@o1d~UyeFUz6fVrqSQxCI z5w_R=84E)<0d=5sF#j0~!({^MK;_HxXDkfr&k5UW{hWoNoPauzKf0f@FdQbJ4itXZ zpR+Iszrb%VXk1zS1q(wy0d=7C()@yjVKWixj=x}G_)b6_DEzozvM|`c#P2?ky}>V8 z7@CPtH~l3G!*L?i-G0f!!2Jrpy`XYU{uK*@Hvx5^aE^b)!Z4eFI#9f=f5pP^oPat| zdini|g~9qYe)oaw^?%L6&`m%c$h`TlSs3mUPzN&a^J^9c{WtjS1^L7I4GTjx0d=7G z?SI3FfcG^e_&xKC!h}8e)+({aGroVka>?kurTO<#BVRizs?_77@CPtH~k|E!*wFm zz5d9;p#2HIy&!+se_~;1CZG;Ll{RO|hAb;3@VPU8ypbnHT`@gU-94DX-6n?kAurSDf#cwZ2o$*%| zhH?VxKK@R1=}D{|5`hX#(m%>EQkk z76$R3gzeS-$-?WWNRDYcR$-=<=i?F@ozgQT838({^m;Q@|VKxDE zApfra#lrBM2z9@Iu`n3_#_v9mz3#tR7^(@V(_vs>=>N^au$u^V=YO*>{3f6d)NbPc z!@^+y2fzD3_6Gl9VW=md4rJcsKP(J~38({w-}OH%4E%rb+Y2&J`7aAYFadQS_oe@3 zVVF#Wy5)aa7%me~2a1p9e_0r$|KWEZNS*#a7KUUZ)Rq5ZVOUK-9VlG(|6^hJPCy;V zzuf;>7|j0@cAxiu7KVBP>OkQ<`9BN8VFKzv_Fn(b!obYH$^ZgP3=9ko0s>BYDXB@N z=_F%SlsC(gji;7)|PXa-h>ZUX8+;WD3rmEk%8b)a(NH3KVyHX~N|g@D`!!UYTr z4E9hpAU+5?FbFs)C@AQ=xVkxp`h@s+I$0@|mS(2tE!Gi;)15w-^azz z(bqLt34GV}M+OFlcs2%xYz9U_kgd*EF`>n&Ma40}8Hwe2F)pda*(Lb}F$Ib7#U+VJ zIjQkwhL-V028M=)hDL@lNu`-NDZ1sEc`*g~MJ0))DVg~obtRd}dMTMjF)pB30O>8y z%!@BiEKV%Q)XPuGVz6Sc5oAbUV7R~_z`(#DJ(m$q`(`E=^lw{^+ zR%Pa;D>&!p7G&n67BOsLwH0JYE>B?~)1?f_IUub8MfvGPiMa}HnK`M&3K|s_W|}bw z%fm8@OA~Vxf=fU?QZO{oGl&Uuj!DYQi>a_Mi%-l=F*AvA_R&kNNM%UQO<~YYR?zh% z%{|3M$uarGG3A+g3c8+3&Q>w_9psW(l$u-;p%Coit)SsmnwP3zWMF8Z8RMCkoKu>T zszkE=nGlU6>jSwvIX^cyALMS*ybMn)3c6953c7juIr-`N3cBIO3cBGDx(d4fDGIv& zNd^kKF5#Yj#zqRdF7e@>elGsu!62rKt5c}Eg04$|W4NbZd}y$1e7K9RcW}ImYnZ3A zYrLnQn?H)Ii)WClb4aj%sGo~lsE?0JXn>DvgmaLqV~8urIOm{{_+VG(&>+`%KmYh} z#~?pXKX;Ht0scWDj-f7|{_)Pfj^3{E?yi2WL5?A=E(*FX5D`zm5EsuN+ZZKC@>T*F z7wYHf?C%0H8P0Og)m6|93UM}6(De;TQP2gMo>pL0P?VaSS)8h%8>MbKZ2pSC>d0akx*EJvTjCxaYw|vVGt4k)fHe#RKkgofsa8@P=SGgp_GAv!Jn~=fuBJTYzdTa#K6SB#=yYviGhK^ z14%Q;?gPvWU^!3^1SEBpiJ<}Ho@-1D4ay7*4A+?$8q63N7;Z2zG}tmQFx+HfXaKqO z7864Q$WObO85k_l{NyOazyLaN*g}YbVGhF80g2(@DlpzNFS8^wF(Vqlmh0P-m)HXREx86+751y?XJFqDA(4;A&y zOG&L@5M~e*1hp<8Qbno7r8y zm|@;vU}t1tSj7nTDafoH3=9mlVAUz9X^EvdB|)iqDXB%NMJSqjK>+{>B?$&W!5a(= z42o=EmljvKK-`c5j$=?fBiqKs$iT1>q7h`<4|Lm{6AMa8vDv1_40a;OHVH;zZ7bno zVAu|6=m{|h3aT(NFergTxVR*-Bo!RU8jP4>hvL;-Mh1p#P-10Z09kH<({f~QaxgP6 zbb=z2fkBKxP%wg#fnhy3PzwTz@(WUnNNz@RG*3g@!KoYGWq2qRm2ih+TFhYM^DNcjo^%KJcB9HIOM7Uk&i_lJRj zVInu!22k4KU}9i!20JJC_q^l8bX;E7-Cr%8giHz7~)tM8hV)+7~)wN8fG&w zFeI=rG=OqlDhoryUM2>HG?2MW3=HWk3=RL87#K2H7#f6_85nX{7#cL085r_e7#cts zu8@VH!HSuIp@@Z{A)c9mp%fHu%nS@=pzva5U?^u{Xjsb3z)-=$&;TlTYgrf?J~J~g zG_WuHidR+!hDj_84Gydf4AWT{8nRd!7-q0AG?cP3FwA0MXsBgn zV3^Iq(9p!nz%Y-6p#hZN7qBoi9Aaf)SjfWA@R*f>VG#>M!$(#IhQ%xl4a{r|3@ca| z8ba6@7*?||G=TE!!o|SwnT4U@1Q!Ft zR~CkbYg`Nrzd`Aa3!Kjy#JL$5{)5s1HvvVHvvHHvj5>|$WtAY#+6|4*mHw76O>R1^X*n}7u8dw<` z1cVqEnpqhd#Dy3bT38tx2$W0201A_z;Lqj7Y1A`@1{EfT245xy23018hBzh$1~n#zhI}Rl26ZNehFT^D1`Q^L zhHfSX22Cc0hM7zZ3|dSK4a=Dr7_^xf8n!YqFz7NdG#qAPV9;Y?Xt>D4z@X2>&~TrL zfx(E0q2VnP1A{5Z|4a-F7EBBcJfOY@6GMXlGXsMav_FyqYB!+eU2_Ho1~~=>215o0 zhAu?j%}dP7H#9H^$q!CV&d*CJ2IpQxcLf|ZFaq2efpoHj!A;tt)HHBI3e*lk&ha3- zKye9bKZACIfDEW)VrT%_U(3YM0CGbe)UBZ5S$#COP65Ro0|P@JBLhRY7)Uo52d9>l z7C43lg@7H2Y#~@0LO3ykodj;vfx00OQ3eK(nIJcTnuVb70f~z-Gc<^TZpUS2XwYO} zV31&DXfS4AV31^HXs`keN-{&*a5Bsc4U<4^J!Xc6eV}k;W@vcDz`!8S%+MeVN)OBo z4K|Dn4C>4b4InpbFhk1F7zPFg3pBsEF)%QI>;z>nB)^3gr-u87o0){?7iA|F<(KBA z5aCJma0i(U@*{G%Plft%CNo0=$j(_%w}IN4x@c}|fx4}Z0VUi$i^KEF%}l@!0%dtn z(4k=`MsU9mlu03-%p{m5DFzO~P%#Dup8z+%c+X(4Cj)}~on3>28Dybdc96V3V_F_m zPe4(Aa%yogA|4ZvYy-Iw(l&QtW@zwc zU|?`#W@t!cU|?`(W@t!dU|{fMW@yM{U|{fqhKV{O1A{qQm_$O;VlX2ELnIObVnA z)T4oPPgBZ$GxHGoK>a3A!3~pyX#(|^Kp33AUO;>UCPCo@iWeyc28KIe5e9}RXuQNS zGcW@sn| z4J9x``b>Gu3=LBm7#Q-I85%Y-FfbG`Gc@dFU|=X_W@xws8lZs2V=Xg7!)FEthI(d( z25v?Mh9+i6->8|Hp+Sa`fuWU|p#c=!ZOjY}x{M4A9nk#S#SG~)^)NFu_%bpuOkiec z0LA-6sJWoLk6u;o0Nnl0%uCA$XC-j7f#YofG=4x7 z$o-&r12xK~fCLyA7R4$8bImv5-UT)ECvRKtE>zSt3iWGpne!=jFy$5 z;U;K|7SzvSWMH_>%FrOf$iQ$1nx-a#+d!!OntV{5&cMI`stYC}(p0>AY6+-Y0~%cg zU0Wzi!s*?(^hnZVZVs2`2 zKxz>v;W(A1rKJ{u^EIMo067|tp@9cVCeVBxTvC*pm|3Tv{AdPGc4TYdvTi77^lbH?D=GA4wY(s5kW?%rdO=mGP zFlYJYe z9oq-3I01{7CzhpFfLjU3mc=rH`>r7CK$d;MW*I0?qF4r+U&#O)ifY*jES7;&DWvQJ zO^Sdl0%1^k0i{z=n-SDr1BsnwXJ`PWp>ynzGVVM(Ljx!cUtoufuU}zjXqXSG57-$R zK%sJ-ouL5~PP4z;K@((sz5n&d~6cfq~&MJ7i4Y2|GhW6(a+~ zGj@iCS&R$}&)FFomM}6fykci)c)-ZO@S2^Wfsu)U;VnBu12+=`!#j3{25}|^hL7wF z4Qfmb4Byxp8Vs2j7{0SJG&nIaF#Kd^XaJ3&{bFZmNMT}N_{$FI!~bJvXm|;ljpATv z;ACcCVB~=G-B~yo8vL0V7+5(N8VZ;h7}z-&8mgEX7&tf>8k(6I7`QnY8d{kd7?*zkv%R&{QEPT+uKzn}MbyLD>wH zoDYCT`@s>KTM3;#0cDjFOjxoCsL^qO36{m;3qYB#7@P)gFflNoCkv42511GjtiYz{ zmzIQslOZUry@1bTLb3ycJcFPhD8r=)gXW^ZNh<~FE8oPDtpP-=v1_qEh z9SC#44o5ZzR4m$qBMDM0f;|PwyvQL3nx}(qDF^jBL6b*NcNL`NmcWby6{aUZ^HUJx zKvHniKqi9fEYO4!zM-s27Y#ihEt3T41(+o4ObZ%7)00^ z8t#I|8QB>czJSIV*%=!CfyNct85)F{7#I}T85*=f-8bC?K24p`I1A`qqL&Iby1_lRqhK9AE?8nZ~umdz5%FfVm zjfsK5m7SqM2UORxGc*`8Gcb67{K3q?;0Y>=m>C$nK;|(sF!-@EG|XgXUVgo4UA76yiJc7_JfmsiW8#8bFtHMYA(BfG%5! z0hPHd3=DCgvXX^?AqiB*vM?~DuroA(HaVn$%wc6Ar381mQ|8g{WVFyyl{G#q7RU?^Z`XgJHtz);A}&~ToWfuR`WK2`>XGLX5f z3=EZ^vYVBGp$fzYmF=Lh9<;I$ROf-#aDeDF@I1y4kO;|^kdiPY-w7qJf?D~A_6aNr zf@#dD3$&RG)KPa6v{7|qG`2JRBZXF`@VK*!5L1sB*c3=9k) ze}VD^sAL1Jum_3Hfv#Jb%LM65Ens43hypFtV1kT$En;G50JR5~fX1U47#Nl@LE3Q3 zp<}V2F;Y9UaC`z9pJrfS0MY9a;pm%~oeCrs&l%ET3NkPVsk=+S$7ZhU#A!?YB zK2w3J-xMuO3C97bFamWjASF4Z5dF;E^I*&jjgf(O}&7c{g7HNKL-;1pfVBE@PmdU zI4(eO4;r%$0hMc@_8l9ff1S++8C%O?gY*sa*&yo?3fLGLl0jo-Yzz&c@!b+Oh6Ye2 zR>lVDM^~^hG=Lh8m233x5gUWs;28IP}3=L^a3=9j|7#d2L7#J3@F*GzWF)%D)V`u=iW>&H> zG|XdSU|7e-(6EMyfnhTnr0m?z#?Y{fiGg7UwEqGc$G1ew1NRsi81z763yf&}7f2%= zlJdh6b26bl7+5@^($KyhC{bYPwJ^XMP2kP}*vM2wuLUj(X$>JsgAyR9!-0`9k*j9V zfE6e*!F_(nvN%YB1zQI31vu4$YG7oIprj3oP0-{AgP4C zEd&Lr0VQ64#*88cB?du3(3(R?(F}JaXv79?CrAyb?GI4{3PkV_407XvL5@LC5LASM z4EJXQ2ca{hoOjMI%_{-RgOVr246rD;*(8bE_xo?HwKwu}r6 zUR(?fPM~#qT#&U40bG!>Cyqzz{Sv@#Kgdm#Kq9y!NkCj%mrDakjBN(uo~1?2e}KhPLB(+1|f%w zp#jua&*Nff_{7A(kk7@?z{1SHPyli#GXp~*7ej*`Xx$zcLqjcS-5wW1LqBNU9v4Hy z8fFHDN-l7nm6s>bW3&jV3OJ22K_RhGvj^SQr@ExfmJ}SQr>OxELDp zSQr>OxfmK6SQr?(xELBh7Z`VQF*JZKqU_;fXaHS=)XT-t0J`|64`e_V z30w>fpaa+@axpaAVPRmH#Kq76+TcEwi=ly)m4RUz7j%6e7ej+LD+9w!E{29S(E2_u zhK9wg3=DI)7#eo4GBC^q`5&~-59CfZ28Q`u3=MK@3=9jn7#hsk7#J3V!jFxCVF?#Q zgFhPs!!j<02GBIXa!~w&*86cWG%R6bU|7$^&~T8Afng)aJ!}jNo46PnKC>|}Y~x~R za0adO<6>y=0Cn4I4Qb7+!(W8z%$9TP}tM zCN2hscU%k&@>~oIAGsJB3_c#>c>5!OhSh$j887$<5H91zMlT&CuWhT9?Sp&=AMRz~ITv(6Ee; zfx(-bq2V+i1A`AYL&F6=28JMRhKAdG3=ARM3=MDj7#PAq{^Vz1h~#Eykl<%vhz6O* z&%hAJ&Cn3a&%ltx&CpQ9&%jW_&Csx&pMjwfi!OhShC&0ka$<5H9DZs$c&CSqYC&0ikhnu0{u>b?ZTyBPjR{{(S z^SK!s*aaCF7H~5(fK~=B<7Q~66=Yyo&CSs8PLP3N9mwB83=A7U;U~nvu#uagK~{)? zVJkO7gN6_T!!~Y)22&vhh8^4t4WKsEPHxEf=t2et1|zh#7HDl5XnTn&0|UczL|+!X zelZ{sv3e0&yrWa#)|Q|ksF4P#@>7e7z|*G^pfwH9N)@^^4%ESeEP6|WEsX>9>md5T zOXI*b3S{gXH2n&*4CF>oodT*(U~|#-ObiVmcRPUAxq;TVFflZMdXLUb3=JT^xIp{w z%RuYI(fnKvt=B{qzfi&FU z)n*=~#Q>5FPE7{SSAqNmscZ8f_JONYh`&L-3y?ergWL)7H)!uLXr3J;wwVdCZe$k| zWQ>0|bi85@)W4v0^yq6;LF-UJ>&!swHqIja3mU5k$qz_`j8}l$)X1R@vJHxz7{QY$ zpxK(m;4#X~Jn)Dw$oDV6gU_&TIRmJ#18S#0buxhL2KfQBObFC&1Bu(PLDo{(vO(5T z*t0P-L^3ciIDz`dp!%MTp`jBr*T}}uFd4Kqi48Ij>A?n>zwly%tflZ_V`zBEz`)?k z23Z5?$Hvg`9n|~*^^X}C7=qXs8W=$B05*mO(EgeT&^Q1i149%WLxUx#9RL~+U}Rv3 z0gat9GBCulLB=?f*dS|MlA--ykY0PVGz4154_Y(;nlt!<2vf)8lFYKil2k{~23g3= z0Hoar4qi~p7ZdusHqQ% zCwNmIG_V~4PoBAn6_7S0xWxxr{{$KhgY=vsEx!1i#FEs!q8cDLi)6eI2js1{qm)p3=JS3EaQaqT~}~2G=R#cm7EL> zp!~X;6Vhj0$H~xeo`Hd38z(~pXe50*Cqn}>BLl-uPKE~1l;|!_h6Yzg28P|73=Lk4 z3=I1@85&|385j<8GBnI*WMDV~GLMmg;TR`mJmokiL&FP328I)y3=MA?85quTGBo^W zWMH_+$+i2!fcTBWg?)lA<)`PXqvCXGG`5{ zdqHbKFY+=lJVyA@xhNGi#e;o^Jm3Lx2o!^The+!w`FW|}G7%J?kfdG!=?sBu5zq|i zHgJhk5L}uBPT-&!Zb$-$be+ImVbBCOsDxQimTjf(lCJhae6I z_v%2o85C8J!2{?BDyaJi>XAZBP0Gnn&d$tB2k(aiB{7IFQlAvma|EsN0OcKjMtJV` zf#y%--rYe41_pM>L>6f51JvJyR8#q7sYQu7IpEBUtO2xl&>vL6GBBtz@CaUqN3XAA zM7&d|o11G;e1N}?PrOTLkYfmF<)s=fWv*eaejx~Tph_LtCJAN+hKHb~stn-x1WoB7 zdkE|@kRC{V2lMVwY{ejXqs9rn*@f?FQ2V`xFI|oApC{jH*AbmKN z4QH7c7+N_P8km?F7}_})8bA@+!@Eb=Fs$HUXwYS0U|7Y$&|t^H zz_5;kp&^`wfnhTTLqjSH1H)DhhK70;28Qh%3=N>mws&$cG=MIp+Qq@p06MgMF9)PA zxu1if0dy$bK@Nrn7FGs^!yJ%#ts@)^4YsTd43|K2_^b>J*Etv(l35uTZgMa*RIoBI z+~#0t=w@YLxXZ!Nu$q;D;T{J=!x2^nhKC#s4aZm+7#?#lG~8xoV0a30KPv;na}I_E zJ~jr17aR-?>TC=QUpW{WPO~vE{N{k{5o6$FXy9cB@84|DWoKYu;bdrVV`pGs=VWLo zW@ljF;$&!8#m>OM&B@TPk)45omy@C496JL8A16b@Wp)Mz2~LKFat;OtNl=}{!N4HP z$p__!DtoH!X8M7bCkTsRpTjJOyWTsavU%()mC zyg4Cz!TdNG8fJ4bF!+P)^ikpEU zl9Qo9gPVaNnv)3jGKWWlarz0EH?u~7AHf)eQpMZ98Sm{ zv0P4u22LIZh9XcM&BMS@&B@Skfro*ihLfS;Iu8Rw9VbJ>7aj(NdQOIhpF9i7Y8Dmw{mhvMqcF>8tPphyl6{BP1WXF#}w^FklDZrWB+< z0x6eq?Z*Jw1u9EG#R#aa0y3_fiJ<{xe?Mps3usIo+NSOT?LkGW??LNsK!q5n%-N4{ zE2t0Q0q+Tb=1xHdW5Ljw4^YPmQu@KV0-z=ssPhCF0Y&RQAj(DL#skPL=zf_B+KET;^B>OWA& z4&txGoXm8{=p(pqfb4FNz3A>f!o<)3a?4RBh6a#(jzQhs&%nTd?rzYSAxJH#oOeQZ zw;NU54eH~8{0s3*QEF~tCTJf%xRL_<2UO966o4?uJs|&pwyA^0IYDBlq5e6;1Zn%8 z1?|6LU|=}M1X+)Io(WP2o2mev|U`)L>$7(jD}ClF~3v=-MlKQBKdKN!5q z#W%Bp;L1u+I|LMDkkkd4Q3rSBKoOPzUL2p2Sp@MO*ngmQ0mvU93~~p^f1u*N*L!BjTC`8h3=N<(_Jx_Dp_ze!;VUyk11RpkF*7vGW?*3W&J3x4e?a#u{9R>12+p~?v;myp&^}-fq|C=vX+gHg`uGmv>y(%*BrDi1+*8Lfq?-n;%^jh0nQzuFa-q%8g^m?H)BDG9x_uCA77FWZuWrs`7oih zqWoNV6BClslEJejpqU#`D>WJ%F<@n&*>F%+gb1bPrGT5WAZsBaC6J8`;J8C}6v$7Y zxC6~5fW}QgI&MJM>tA7DU_f8vuoM~wp!I_U!@$st4uKGZ83+&|~L6oDd))(1ZY8FNGX8 zAb+8!g*(u2z*a7T_L+h51E@U57Y;@t{)R)PTm<9V91n@h@A_A`{(c6t6f1!uNb3EYy>cfG; z0W`KtFg+NV&?OuojY5=gfCwRn14IO8IDq_x9u6<46%NKmLpmH@Lc`%YXf7HpUx4aK zPJv;4#ztv$2?$8z5G6rCgpd;iLiOsn_A?RSyGZ(>YF{0S5zk4X+RfLj!24R~R&h zz`(#D0^QGc4okm$HvS&PvKx?LNA%&kaEc6^fd|n7NSI1b8n4FzjQVc!< z6cjBGQE(cJPpT|Qg&dFrDtkbyBw+3Z`56?3$a~};F+ui*JY|BMUGWk+KKq7=p&^KY zf#EH5pU`{g{-6&`khQ6wm>3$`85kHoGeOp*dST0@UMmbQ+GfdS-) zrA!PA_}7Yn7gU3rhoF81%>76-czy#heGZw41`X=vt8%pm`|J+6m}dkyp^QB5ye%W#l_fNcex?gq#ifkrQ$@=x0ubhMf!y4Bt2z z8bD*x|3LFqp#6=UkhMRITnr7ej0_A+(6z$MTnr8Fpf&$o3=N>QN!(lv4Rb*I7(r`X zLHiiF7#a?M_AzoXG(2TwU=ZM9Xm|xW?}&?`;ScD1G|-w)CI$u>E{298CI$w1E{28< zCI$v&(Arecenl?G-Wm-q$XXH5ScxH89t53t23jjp&cwiQ5>dB-x9&n0Kj6=Lpp6Tl ztOprDhSW!(h(n1@P^tixbSS9;T*`p*#{*cTfR6rUf~?sF9p3;N^8iWh1+7(NU|`tC z&CsC6z`(Gd8*;|$A<&vd1_p*B+zbt%J$A>rA#1fxa5FRek3O7)^L1m$$@Hhgk#DX}D zfdS-ZP~HJ8{{`*w2Z=w0#?doq96jfT>>+x=4LOJRHE3Ng0|UbwZpd1}x7?6*SMRwQ z8bE#aPu!4wZl9rH1*$I{(8B5w^em@4pmTe$g%x;X1A0J#f&%11Gz>i!22=&0q)O1T zHnKtq(q~0Z%OLlH!U;Joe}{(C4`?|3goe{EXj=XaN>iXsAfR=^pmRN-;q{-Jp`j6U zo(B&@186A`GY{lE1y&x02GFJvP9BDa*9;5{Ts#a7zZn=9xOpIFI`Q&A_D%`%Fo4&J zi10wp&JyKeXaMa^6z5?8@12(BVQ5$YI$MzkvWHrhhoNCR=uAZ($Q~(W9)<=`xU29$ z$`Vjpzzr>aKzqVKX&H3JO*$fef>Lu*6N^*fNjfzpxHJhpmOx1lErvi`Cr0qbTTso9 zo}9r+6I`x?WI>8S7~}>}m?O`nYw$qUcxv)M_M>Y-{Qzorq31`?wiS>cKxc_X;`0OX z9sm`7ASa?EGmz^+Wgn=00&+J9gX{*m9eK`H59)RU9)^Z!(Ah}P_&4E!oU3HY16ea< z2K5tYuZtsEynxmmf&2uT3q>kpe910hWEc?DKD3;QFD^}ju6Dy!{@^KLAbAJ5i~+eB z6c)&3j1@F2Y@MzK|OdN=LdT7K+eGN;(^Qudqcwt zwD!slEv!K6l0jhwI$tgq5&y8T!dk+BA{P{YXxNF7K>|xaA=*ixk_jbI;0Ym6T0t&b zK<)&E4|3V!4-KCH9!NbI2+H%IwZ}Y=`S4&KhK4ZEdNLl!xtU?0ywAYE5Xr;P0NSn= z#RFO691TrlaXgSS&f|F)8bIgBC-6YpHOV{-4YwH>7}9tcz-OGN^FYpf&489Y*&zEF z85nYSAp13Qc_8c63V0YAOc@y%N_ilAlgoG*8ax>p7|Nk#QUx?#?ts!cT05ncg@FOI zrXI8o45^(GT#{H+0;wRuO;u1U6D=A*TyQbM3g3uX4AKQntx8Byl$W0eTlomOBB`hZ zss_}?0S%xbw{bv`htkFYEp7&-1ZV|X1a8-Yx?dGsGtGK-Mu&g~r`99)^Zrpfd@1Ap6*6@<7%x&*FicwK0!}p}`7tCLj-FU)v&( zy^IVD%XkC$JgUn}UV0gj9&~TZV zf#EHvUS(!rc*n!gz|6wH@ScaEL7Ihu;R6ptgE0#O!)H+VurM%u<6&s|x(3|gCHf>!Q= z*35(a3_4pH)6dR1sfl@|1>|}fI^PWH)PwvC!XW!V{s!e%P~QP0rUdo33NNIcpvue8 z0Lu1iybKMXdR3hlve!d{7jmw!CNDz+$h}%ne}UFRqwgOFl?WhzfyOyd%B_6Z+Hz21 z9(P27iXM;|u%ZW6et-%VkefjmBoFcn^4=Uhs9y|tA>%WKypS;lBdA+J=j)>P1wrOu zajRoeK1vx&nq#41PsqJyQ1@Cu-D?STuNBn2ptB!M(dq=yT0@X~K}9iA*m@R2GD>hs zenA2B)H+1Z78GD`jI?49Ie?*V289PqDabBR7$dhU?VxV9=Y^b)-~e?is2zj8?+LWx z9n`J^)j?R?3f`*&ImZ!ZBN`2LD##r$TF4(BLyT8-fBIB8NgkoeAnz!JLV=EJ98fAiF_s zM^49H&@lFfri%bxh6a$^0-=5Yok5Deb{BL8F31o1ptHiU_`$iL)F(d?au^75*dciY z>J5-5Vcr1cJV-kgSr5oAkeiXyMJUwGVZ00tAUA|V-MW&AfdRdIIK~D#pO%4PEgJ)a z48pBJsfj6&R16Mm(1~0~u7ffe+nKk{BP>WartQ|BQ z4>JPP;s>>bAgU9~5;Jo^_fUeD19Cv`u<`>P?Eq2;n!$wFRRB3iJT(P;<_;(&K#Yc5 zd6r2npS>{(D4nBcR@uk#1)xfKY&IIA(o|q53)es z`~ljIe+9G#5ppCmXjeZZq>@V0Am=@SI%J?>T|Y*UP(1kXU62=^FfcH{#f>21ptd_` zfDs~|l3JWul$ruwaS7Tu1UJ|SECd=2hbSycO@tgGgzPfVV9+;Eieg{@oqJ#cYBPiO zi9jME9x{Lmp5#H+1=_Z_6Erptx~)x65VQ{o5)|Ok=y*hEgO+uJ&e4I$LQIP<$&W8i zEQ4Gi1xf1QzI6liOgB(ygVHJ}t^0zGwt$L9^FsPyF}#reX&f)4JsQsoIY%LZ7c$P1 z$P1YdNaBUem!$JT&Vb9{g^ZzQ@-j4l&dkc z%g~U`$iPs+%g|87$iPquGMABop_&&mc3Q&=8MkQQWoQ6JZWAwLOs|<2a!yejFGB-6 z69Yp#FGGVU69YpBFGGVO69YpxFGE8z69Ypp$lXi~3=?=68k(6H7$);V?tYlY%g_Ki zQgJ%SJ)q0oK;|+rFw6y+3p(G3m!Uxkw6}$qp}`rnw}qFXA(EMaVFfQkLq0PD!y1q~ znHd;)WMN>q%FEDjn1zAiCdgkb3=DU985+1*85kb$ zGBk*=GB7;iWoR$}?S0{8XfS1EV0gyM&|t;N!0-xWKPv;nTV95SJXQvV54;Qw{j3ZO zA9)!Xma;N1d;yuy%E0iAm!aV*D+9xKP&lzNF#P0YXb@s!VE79%hmC>ZKQBW=7^p(z zV`zwAV_;z7V`zwFV_;zCV`#`@V_@LqV`!Mb#=yYE$It+}!w+jbVbEl^VwcIln!giJ<{>?r{PWLj!1TKM^|51KMZpj8>0> z?oj~MfuJ#?YW!j2ms(L03@+h8O;Jz-0}_rXq!S~!JOzawa`?dgiad@5vK!=AQ1rs~ z9;86;7fEAcXmAFdhsFeHV`nl!#%!{gAmv96)K8$X8T7k3K>d90gPqb+!;x>Vv`q)V%U%%yTI%N(3hZto{eN6W#xR zpnEU=LF4>C=uR321_owkNO{S^%+LVx7b|ql!ZJqCT`;KUpv$sA+6pWz3=Hy!wnBJO zW=SeiV*yl=f!vCUVT}dQ;W~ae8VjHe>X4cW(pUhQv`PR}?ZPT!P+JbP^#NL^f+uOg z2?J5_qBa(q!P?Oq3!rKl6wZE(sEq~C4kl280p3^uHKieTA*wIXOdu#v;%Y2_f|01k z0w~QwT!DImE9eeX9!UKL%I2UmpdiY?UPG>a!O;({CqWl0!U7x=PoVe*-Jt=R&jX3` z@j>cIem+P#7vh7A!HMue>Pb;P$a(@PK86O+*t#?yWK2$m4>B(z%Lh6CPk|4zu0Vy4 zq2VNG-6tPI!z~5|1}#2@hA>7325nF|%E-W=!w1=OqQ}S3(9X!fpwGw9u!xa?!I+Ps zVLc-QgBc&>+#z#5hKBQu3=CF$kntNEKFB%BwtNf?Y@j2=_!t^MVd2aNIfuxVkD(!f ziGjh54>Dfk$;Z$DI_=hrkD;NFiGjg~kD;NBiGd-2kD*~A69Ypa$o)(V3?Y0B4aY$D z6oTwyVql2iV`u=KksQUx(C~qYfgzfYq2Vj&UP3;GhCfUU42d9jFf%Zu@G&%qFf%Zu z^Fj8SX7e#L1cUA+1ce{yUP6#Pp!1FR7#h}s&Nl-2kC}m?gpZ+N3o`>lB_Bh>QP851_lNjw6Y$w{t;Bx zgR-_F!rkt$J{zbr;RtV(g9>?2_Y7nU8iw|IK=l@=81QF=oDB_{oCk%MKU!`Dm6o8~ z3Z9<_l?p<75)^Kr_D36{jp6I-92^{< z2t9oS+~~rc-ay;RK_bv!MhNJv zR^;vvXk`HC##d0MA9_O`s88z8m|R*EUr>~pUzAx=2|lMBRLejNN0y3D&PjycY6VHQ z44`mFb~(tupl}E6%LSPMiVtOeNV-+whs?RC@{Y{f*(@eTk=EN zv!FX?&CtTr5_-=GXdDE5j1kBJ1_nrYrlg{TC@8Bzq)|v{GY!;?MGhy3hd}-TwOL_0 zK=y(B1L`w^@;FG`7U~~6sDJGFA^FjfA9A*VE7bjur| zI3fIQBGfPpN-aw*f&?PS*C@dU;Xnfs6vU7)fdnGh^Puzq3Q34c1_qGbAism^Kv=sy z9hx38py?r#A2R-y%@0|tmdnr30CH;{)K8#08m!UM#YAQX22ekzgPDQhGoo1z_mg{S ziC1EBHlj)eE!KfK3W>(L;0)B52VGPN$?LGoZ9ugV=qL=xK`dF2Ev%p!I#9la*IA%e zJ!oiYf&}OQ&jRQCygblxTi{K|pbP;q6Lbp`sBZ|`emo7LG9a<21iUZ-bafG=YRrQB z0OTUjHew`GL-N6@LE}SnASQr3?2=lX3@+9{&0&aLnc&NuKx2nU@l%?~-ZcQQZZzRxNAkh#U_{E#;441UNNnX^IW zFfuUApP_*TbcQrPWUg^3C_jSE%;ks7F|Guaxl9ZUYxp7S zu-5Z4G}MF6mgZ+@SOA)vOuEJKt!`3iAk10P;dex1B0t1IFZ8=9?TU~&J>^m z7<4YGGuSpzrhp7PgO0F(q-Ibqqk4V--GG5JKY)S+7Qmo*0_6wL`PMa%!CwYp0fq)p z+=&V>G`NE1F9jfVw}b%Xe11s*NZl+<4XR8G4E6$$J8ql= zAnOsG1sEE#L47p=hK4Cj3=Hl9kaX`Q0J;0!TL5y8t&adh!!0HT249f5ObiTu0t^it z%nS_v0t^jOpnE7l=7R2@5MXGqWM*Ip2ZakW14D!WLj&l#lt=+cUn@$0q2VDj14Fa` zLjxZR14FC;LxVQx{s{qw27ML=hIo+q3=9mQeyS&09|p8u7PJ-@M0+Cgk8^$=sD=Y2 zT2Q)4O$OzhkjjG8aK~WB0MC&807q~G6H%+cA{tC%UTJ`Oe>Gk1Yo_!T1XTTo;Px@7 zwuj{MkaIRJ@G~@k_TyaS zXJ`Q3=XaSO(l@&TEkBbOLHCWJj%|U~Hi6C~QGxA83dGG^hmfl?*BzA6F~O>g3<(N-G(oYG?7PgngBHokpm250wlmd zc?V<{C|p1oWIrgpKd%1uq7p>;M|AQB9qNbhD(DhFkRf2t660590Z2K)0<9m}1R#E8 z7l5P{4gpA7;S_+R6>b5DUwNSAJZL-$y?+BL-<25{7(nauE8x8{hWLQ|oE-Pm5~LBf zVq!;JKoJTWLO>aL0yXVHgU67)Pl!=wP{Rq-w1+g>3ldXOK*t<{8bP3d0>w0ZGz&Ba z0Z|5-B87(=$XrnR0AY}SKxqVdooccGLxVB{14F6+72)cXLXDUf2A*&sK9!UnlNSpf~3Y5@lD9V2xDkUn$0 z0OStoMgfKfke`~Me*eqBz+j2ipX3AG!3A1Yz{J3iipVd}d&wb52)efj)W!y-4VaUV zXsDM#oqr53gF0W);1(=&+94mZoD(!UfRZFY;Q$I!c)|g-e?egYnw;=wOaWblfjmeB zY92z59tO3`K^;GcdAa#{`OujK$a(@$fPye|ycpD>ggGAMe^9uB&Q1c&nS;dJ1R&!y z9iX-v=uQ@Bo3&Q}GOw@*+GbrW0O`9e1GU{47#NldFf@Sng{~HWtPfoWYQr%wFsv6~ z0I%)cAiw~=3wpBvLqiZF1H(1}$lWSC1Q;4X*EZ}DfShl;Pk^D}66oAp0fvV6j0_A1 z1sEDWgYH^^#v^Fb$O0`MPcktufbK{F-C&rB5s%;`j1-N?H5tgqPz;Sm(4`_6(Fh7O z^k~EyW1t+36l0(g1vF3qi5h6`2Mqy$N^j5zmp>!sauU#rXwYhA=v_RZ3KpUtXVil7 z3uuZB>JtV~c!1&+H2woRV;CfUOn{*Q6h_CP@p=+kmYjl?CFcbo_eNb1U;y78c3FU- z0hFY#fcg@k`!)q2bICWLeU+QgvgVEe^`D45n-h3^zap0>tm2vJf&<=vtPV z2N@wmPHGTUVA6?^K@@3xp#;2oA|AAUOdN}FQBi&oc+3iPNHSzZ5qyF$czg?VwC^JD zWLI%&Nqj2UX3%gg=v-Y$ZzU-_F|))mCkO1RV(K0z%OP!kN2$x_Op+t5JQ z{eUtv)DVczobz)%^D;{^6LT`FpliZFMLkLsgPH-Lp|5PT!W>lif(rRquy_jOo_A27 zr4|?GBcC~ly#5Ik)}XY3y#7f`5OT)9o*<;IHxPuhjSK}LYo?6^A@^BZ3qtO*wh@H1 zlkEi|eI!Rg$T}z|LCAhCS3yV{z)g^$0TgT=f{;C>K7x=nAO3=nGY5k~_A)Xsgn;Y? zohuJYYm5vGVSR86!v*WN4^n zVqi!CrClZlhBQHjh9#hTWds=-Kiv$@OeuK^m7G!7uot|7O z$j~6m%)n43$k5;hnqL)UXh>#eV5kM<31$X{CXo5e3=FM;ko$4l1sNK4F*7i9g8akG zz|bWKIUBeilm}QC7$yobG{}SQgArtCP+?(Um?j8W?=(Y@p&^Tffng>n99b9`<_kjB zIV}=|taDl+$k4Exg@Iv>AVb4776yj3f(#9}Sr`~L2r@MAure@g5oBl(WMyF3D#*|v z#>&933lx5=3=F#k85*=$85s5oGBmibGBE5HWN1iaWnefU$k31mIzt%b4^{?-6M_s4 z<*W=0Cj}WADp?sAPJ`l$m4V?bD12BM7|sbYH0)z#V7M&E&~TWQf#HTAB)GcVmIKOeGq9<)^uoa<2u=y)Tj z5(SMng7(IP8t;(&4ZbuAS`mX}K;z(`#f#88wIHob@IpmU2NR+PavnNV6KD|yX#5MJ z2_gm610w=Gid1ps`){s6x4Ez zg`}W;)u6iqpfiu4;TKSs(4P@%Wjx45;NAmrQxK%f12O^$3LsD=ghLmso&p^=4~sWY z+=I#@P#-`AVhY1fKFIj}Ewz5}W9^UUU5HJY;9>yOCq~s9pI-`@F9YRL66<2*Jj2Pzz>p5w9soJ7AG8h|lDQ!z z0!AJK^_2dBrnecur+R>vT|?C8rB;;0gZ+$h=Qb~>B@61VLd*wUhzU`TWIiZ2BD-lh zD+2@g=1qtlh#5f~b`-EOfNlx^B_&Ylw*WG zL{5G@xN`}LMcDdqf5uFtRozWMp7~L{DZsq#FY=1k{;>D213D z54vX%C2%${gO5-LIUJ;63zEa3y<~7vjJOG%5p?%9Xkdha0o2|CZ9RZ^32ToCIZQ#* zo2sBGc!*BWV=|77KF*JaxPYEH&9H@*CLjx#z z$_hd5GF23UoEfbo1UV~OO^BgElaYZzQ;4Af6id27ko#ivgcurTfY$2?F*M8qtpOEc zXt==0z+fW806wF_Oo*X@8+0Fv5JQ6&69a>l5ae!hYavM4X#;XE=q_?0$o@$uA%=!C zpgYKg7#gmF=75A48Xhw-Fn9<-*4=puF*JmN?j9F{w99;j7#ePX=6r-8>*az#?q*?N z2oZwZ(GV&GS%)4a#L(ahn%fa#XaMEN1R;ioA{GXQL?MQT$t(;E$wH8O|5Ak*8n&`9 zFr*7HG#qDPV8|3=Xn4uOz>p0J7gh#_d?AJg4$xiVLJSQ;pu5C{7#d7i85l~17#adW zcZdryGz7CUFw_V!G=OqWqYy*GOjZVlW+8@#ZLACoEkXF&VfuTT{ zp`nSBfuTg0p1p4U2dg7_Ncb z$;-fSU6`R^9WMjJ4Pl0c&Abc@H$maR%fRqJn4#ei=i@f~-G~^1JZ3Gv+s08$+E|8g!;+#Hf?>V9O0&p`!*1hmB zL(Y#7fUdn4gs#08g08&>?NGBv8><90TtIDY(33bCK5y z{}G1FH~bZbj6wW^#%Vs5v2#7>8bi>a2+|ru_*yKtqEvEy0CFyP{SmTzLH2>_US#(& zi9p8Fm_;CC)+{2BGzgjllVV^Oj1&cJuL~{8j1LI%4{!|%iHwi(_j6?c?E?bsrxayi z7Yr9=U|?hbsqyd+4vBa13uX|53Ns;uJp;l_7{L0Z!JRX9L2Gc_rGnf>0ae>%B&m{& z)FPM6^vn{FEugRh-RUk1RmhH}&@nGDCqErx7ifH09jcB4q0YB7rzA5Oa$`0`xr--g zNh{d>puC_6)x(L<6OmICP?VpRT3no&5B4p{9kQUa0HA8Q5NdYl(SyoHkY3Q#04N?DA#Q+8nu8V( zf$axP=qfR=3xebs8B$^LAQz+;C6=V7Ko(kp)xz=wNG%gWty6wU2131KUJBT7Xn4ZP z7?2)jgdUVKMw4dJTnhcg9N3fWEQ0+mmm$?_g-D^7WirrUfd(x^5xhKu zc@rA05Ls|ZrUKQ+0|{}63`Q9Sa~&_TDoE)Cs!7d|;{#NzAQfC7hk@kb(E^eO6#?Md z93~5o8jvi!xB^)V(hH9rkSwIg0tK}N!dh5a1j>*MY7FdxAUUX&FgcK=DCHC=iG$QZ zEr+SYUPgi952P6C7MNmK;RNysXh#JDLn>sn5Vo(v4|FRkNHa*55nUF1w=e^!5&=oG zp-Tr8P+=jIWA?kmC%`7fWOUq2o zOwB8S_7kA?!`es?wZCo@Btj-nLh|#2b3vD+Le;_QS%|uSU^5{tOGs#e+zFa12gN5u z4eQNp`729!YS9+;ZP;I!%-67T5e z67THq=i&*zcoke%g1R}NU`~@_VBlhK_78{;bMy&yjra2parXBMarE>H2CD<@a};D? z7o04>z`zTt$G~fNAz=lIbUp@lK^{?1y%-h}?`Z_q1DZ1ufQoZ4goVUA1&4szOd$8e z+BYCQoFF+D&)@*Z5NFW(8<0F`I$Q{S;6wja_C zKr_?XCm7@cUtdg3Apd~+Y@nNNakx1s6?7dS)a4-ckTwjO9Y}smEGQ{0N`-2G`W3VS zOc|?JAZ~*1LXpI(2)r={WH)ZNdKZHVIpmEHAoWfR4B!qNC@z^A7#hMt;)7g+U4z10 zT^Kabt?~|baSU;UTx1;|9O@Jj8Q>Zp;0&6V2brY<+7C^X9!D3DE|4BjyHlSiJ)W+v zuJLX@{*It2L2z7xk`O43o&)ER;CN5JfKZSm$Xr;O2gxxq1jqY_hJYnOa>)9a7=q)S z{X_j=`e5yCkUj>6;CQ!CA0L;{03X)~NPf`*?fqt87wnW|U|?f_tO$({aCG)|4GE49 za1DYu0(x6AG;U#KoDevVg+vAixH`xCdiuJ8!VilYW(KGlH%}i|KSy8C-UyJpVeM>? zIV>rt0{0S3o3!!^9`w~{EJdji!$@l-HY-|;e9et83EFF3RJKl^tq(w zq?SNyI8=S0R?1fqP>0gV)6XS1#4#i^INr_E&&AWvJ;*iKKQzc0=6_H+1C@6mBe5tkxg@nHv$!NPxtIY|S%C~=K{m|E)!oz2#XsE7$KTNfl#jr10ovQD%fKs$ z8eZV-g}6+Ig%}&M>8^e*C}xA&C?F@WBP&92g0sJGfWM!sUq~=0nm}<5IzL#0fn5-! zj{{ksr(bZ0qmPfLpF5H!Wd>eBe;fe3bGH5}Aj1O6vGsuOo{EJWvwjWYPL&Ad} zSra&Zf+PK$L8EVw8`eSbq6XT_1hqr}S-q>D3#w{}+mXXg5LrFg{Llb+0)&=5urVc2 z*a;)6cl84meX!&Tc001!BFJh3g8W1Lo&9~BeH?>>JweN3!0KUbB9Pgl$m(7Foc%$0 z9O?$p_@XY`g@hOL_3{uE}%2P=C0T~P{59N^+204a<{12|S zK*I%~KvF)c&I`3)5Qu(mtMXeDH| z&i?-1p04r1uHdQ~>~Bz=4J+rAQPuheI68;K2l)GVI!DF_xjMUgf*Lfi46TBy7-Dc} zKtPadaIh<+E=7(9HEha5979~=As&F0pU8UDaq0TFvIUVc=WIY-<^#la@`v$=E z7%(s}=t0w#9@-Ez6CCUl8WHd380O^T@9gagDzHFqLC&{k zDC$9N;vjgl4c#7OedZ|o{5;*gVDEuWymfVuq>-c6AO7@(hWL4-En(Bd}R! z&^ZW@Su9X>LH_Bskb-2cR2FHi` zxduBs2DpO9>_JL6pi01HI#>x*0VsT6brDD*Csbj8V~9t*Tadpm)Y0hbxS;AngM1*$ zKpLRs8mPY`%m4`|Zm2p?G6z=-AWL|lg5dsC5I8(w{R@yZFHG9m!_^l${{%_~Ff;jJ z@}7vY9$7y>RNlqk*AX;B1adoa+zCMC;ng41-Jtb%po#$G20^GAc-%n^1I>+q!R@DzfOuy|A0H=2XYcrcAWwgA3h?s}@^u6y0+5?PjYJU!cELZ8bQc_o zl(<3iu=dzgkmDI#!dxRjB@Ae^14Kj80j%s25e1EP1ctf>MS>ClxHk0hadmO^3kd=x zPLO%9_DmIctl!z+)6X*`-Z8*2CqUj#fO0kQGdU9 zUq>$x&j?~a=*%Q;26n;ApiIW#2|7jw92TJJA2inS11t_2@=r|$jW&SH2F+`N#v9Lq z<)9;e@d!0AIYx$njLKrr{9-(4tPwoG3DOT6a{}pSLa1@AfDAl=?FY4+Kw%3~!^{wz zpH@CXVlSRhdrgs59)1#FBA)b9t?@xh=3$KdAb7!n%f8t?A}s+;0L^#Q0e z1yjHXR{(A)yZX3>LE2N0uz`(3fy`opD+T3*cyLn*WE99hptGDo=?1u0fz`IX=KKI5^xt$R!>cq_8#Jsl1|b3)<=l$Akqogk$maHZhJ1US4v zWe})C2$C0t%R@a4YHoPCgR@S2uz#qZOE7r445U^JL#>aiyQ6btJg8#~YL|NY!`A>H zr#*4FJ~#g$XV-W~7ndOLSTSTI1?(nR+W};c1YCWDuMa4SplJwH9)Q|bAT^S3H86LF zxcd0HhJcoZfctph5krtlDY!~ES63HMxP$UJa$b^#s{psNpu=O3_AE?2tncm*+Wf^( z0KN(oTvUOE&mrUD!I@R5V86i32B~F)s&xX5t*54-sfNTCC_jP5zMq2Y9%tuxXBSsz zA8-u~5@KR-c8>QAb`Ee1c81qipf)V1OouCg%7W@dkQg&qlOtRc$j_i+6jX16f)6WKy4~_)6$cF(`xPvsYg9Lp8!XfSl zhXt%H0Fvf_N<*CrmIs}YZp^?g7z(c2pp9f_e?K=*_xNCEM?W7>DdivJ;u_@X=MEbG za1HWtbOzOokg$W5S#Lp=9D}omqo2F0x2K;AD3STP`Z~D=LDa$OW{^5YWOXjCKCU6I zFr{EO!P;OTwM@urgIz;F1qCckfX=D~)de7R%xLOhO+;`;VgSukfmE>|t8#bsa}5GT zC@5@U^%F=HE3zt2zc5E1PZv;E8l(={A8g3#AYONK^z;D-4oEF5z9qnIpfJavcu1XUrf)#k38LuE-JVSa51622e#yRo2%O$fIbbft&aAmPu1vrm>1}8l~e;3zyXke4GsGPst`Q*&>No=itl!_&7pfVQ-9VaIAex;)BiZr6 zpaCCn1qE^ss7?p9^FYd2AnEAXhinAXh(UR|e3!H&AH8#xud8>E`3;4zBj& zL;Rs_QJ5cLeF%`5Y{+Ip(*r1*fy!r)JO@PH+20r3^aH0qP+177w?Xop5P4WJ0xm&7 z;#{cW@!)YTsQIvQDUdpDG<9x4j_wefAaMQp-|vz;dv% z6eP#Y;E|e`Qjn3KmkP2TL!N~JyyzLM0G2jj;SJKy3f5no3Yyaa`43r+jlm-^F9jh7 zYj=S3u`@vXXV9fi0g1)MB^gEerRf=9H-M(IK=b4vwHyq=0WO|yU~yzKI2oXt!KJ)Q zW^qAIVkI<$KyHEc=Rjs~!R!NNE2KIA);7-oC1?i6P#0$(zmWJ~562)^Ur;FsWjl+QCn80#=uHmkT-m+_iXE10c31kn<4yR=PqL&S<*EIq(itOVSALQx|8Y~S0HzVRhJbhjL!PCd!umI&bPOg16iJt0WNP8;%^An z4|4-ZKNG5aJZxMhQvYp{e3`PQ3gH+4nY}F28Q6sV6X~d1`ff45Mu%ygB*Q9S{XzcI0TQQ3A#ow z2r_U89)<{mx_AL0K@1`c9D@6$K^DMuyGDTB0czWV8p+Q7eqmq%kYnL41vvv`6wDlu z%QZw97(j(1*j*q2E>Q*sw@^QbS5z4|1aqYsK)J=!KR(RgC)5|bU*l4QVb4p2TOn)SRl>704mbKfhNSjAqWyENlb@}sWET}N=P#>1UQDe;Bz&|Fav3b z_rZpN!Uxns4RZ_v2M5S-8%WTDLIkV^6dl?SF;5pCu#gx7hhP@SwLz)L`9&$9P2F(E zg0#c+f-D5JnmvMC-9TXuP8a6V3=Cn8L12?W3P43Lqz~Zf0uD1vh;5ERL5`7NRUjvT zbd@Bg!!&}DoC(MYps)o6BREP>ML@m*c^8y+BLiH)MuB_`@(s)@AT^2*`#=r^r*BZa zX@bl~iVU#BFa$x)R|TmAxxyzi37i5k1VHA)4F~yUn-n-hg*gU!I{Jk$@G@`+f&u~5 z1M_rYP-ox}lm!_It|nlefw26X(%e*M=ni;raD#G%07xOoc6cO!e6$ag5D}5XfK3eK z5FaT929T}bWE>0*LeQcQ5AgUAs2Rq^z#&*E#J~{j=LAmSAeTd(?HJ?^*02j?7t94% zL_oRRONxO3R1$)t)Cn}Q0Zs`>rh&sZ8xk(A5zejwo_=orU@PBCf&&YhDZnAD$ObA3 zphXQ21BW0ejfML7`?)iK91L2A<>~3dAj!ZXctZ?v&^4s01qBp7DNvk(S}GvpKp3o6 zM-=P`$AW?!XyXUuW3X>aAntQ^1h0UTV&D+e5@lcr@O1GF_5^qOLW3de?!ZomnH&!) z)hQp}(|Ef^GJx`yoB+ttp(U9)&~r9ZL0c#|1bajn7y^78gWN&Aoe)=d*C24P zf!dxRBS5{(07n;Na0;>z2AL6_nFlcjaU=`4TL(Qs0hH8;QV2?-pgmDO0b%~oT&g7q zvLG0I^Da0{LD>dF5R}T=VIc%wM+XjuKA4b;lMjPD1Bc)yP%47;a86IQjegxH|eVfC~L&F$M-;F8p$ z)O1M;cA&x$+#wAH7bu{L6k4=`D-Tdce;~%d;2BVqUyxc< zQW;#5Uj*74!Xb!77?k!wjfj%ObWp(zHUShsw_qv5ITD<>RYVyWJfUrGaAJ^Q;1C2I z4+Ps92Z|5qkt6v<4ESY17KjLe3Xjlm(0Wx+>I5}YN)ppyEfrZ%h)FUqcw(%F1ltZO zZ9s>Y2Y@0GoLND=u9C!bP`At1)fdt!1ld!_z`)?|IAxl2N_JA_eQc#`%1!7`)Dp(L?EU4p>T2z#mA727aC!jJDQDB1dDd@@u zp8#i&|3G;F)cVKhCxEpckz`;14|RjuwqOxZt^k*#;DQh2*8*@+3o;Aj;2B7H9+o|z zMG2_boG*lkD{wYP5dftRP(dAlvOF7{d^17G2DZG`IX@={a-c9?IZy~`!*gX+YEgb_ z5!h1D7S@2o(9FCNVbDXV6+k*!dvEnN_LrCE&&!Xq2KPF&)&z1Wm&Dxr3`Vbx_Uf>g)-c z#nQ@LaHe0BB+mYz}DS2Xah6w!}fA8e|VXc~FZB zG-nEpz5F6@!U4rh3Mj9Fl2WlxW^oDFQJ@5xF3i9X?il9k2Ab~n~m%(1cCl5*oFJU1X>IqH!@sB-RNMXnMF8?54|wMRRQrHh{-D~`(ajaD@!t$_ zAUL~&gAWu?usQ(jEl}+YT7z4Xm=0ag1Wx7dl87b@s3=9=vH(iI_~b!Zbuy??gW8H# zX5bJ6t?&p+EyzhsPAzuMFY-t!@&oM+$xL=hP0Iw0Hi8`K0ZRLzk-Nl_ z0%}sgChOyo+DV`ot2+azdjcAhhlT)@0tG}auI>rw zwg3)6P-hT6(P+JPLeh#@{g{__gHydQ67#KXE9cJ*V zu(ZTvNG}0YD=NW*C!{DdF)zI|C$Y#S6SP&^Jv9$fpMz^fV$>;s3P&kKnG248NLB+6 zN*6N_Rsl+^;E^R?f0s}nSFne9KxTS7#)D?{g2AIKpv!5zgS|j21wnnnAWulE4K${+ z2VA-OfHj5+FfhbJ5^Q`4xTxxZm0Y17;O;D_$VDr0K`!tDjr2MO1qAs!gTs&q9!ido zLt--X^B}vGKs6$$B>-+SgU4z>`YXVW2zK^&aRv8H;}8W9WM3kvZG#~Q%1NM%>Fn?0 z9~9*31|FUP?dJhiu6TFyfKm-;3yqs&8PaYd_~sdq!JLqCF(k;<(HGo`Uk~;ZBvZh% zC8!_(jXZ?Hd!wMHpEIJ}2Qmtj%3Tsm65Vq0%fV5~3`%0YzTklv=%^PY+QFqXs0ISf zRKZFDq=_m}SV7AjaM*!zBWRB^a@!TQ(HYv)BSHzt6QFPe#|b#vL7mgG#Q2=dVn{Lo z4Hd%12|>Q8Bm+9a2Aa)b{U9T7TlO6|XhH2KSi=(3B)~2Tnzspd zjCU+4DGEs}N>7E1I)MrV@RCPY1{DSl@P0AWxJBP72J(fYBm;wMKt(cIh=CHvKN0Y- zq`Qy5lcSG+KuEl+2V|@fGD343mMwfB?F>-65Y#&k_4ErdHUjrAKqVcxUkI`Zbm)z1 zKyn4Ndjsp7f_w=Ic=!Mr_@q@(lO2?%oFYS9!KK|HaPDyP2>}NdXfZFSLl6)g3R;xt z?+4B?AnTwl^{UfZBY{Vhjw9KA!G=@u0Q_xTF3NR9%Dw#0U8M z`+)VpGpCse*mBTlOE@@ngOV~x7UW5A>H|3+)DJ5`>4<@HIH;3>=wX0ba$z8Qz||6@ ziHsOn0;N9CIg9~d|AKVaz(N$KY`hl$n1(QW(AFn zIy*W;#tq!Sr4gv(>s(Oklb@L4o0?c$T9jG@&VD|iJQNlLT9XM`au06TfC^<$_?nr3 zn~R`~2MRAoNZtbldLvqu22Q)60ea9G&aeUiRTgiY@q(){=+b&umtaVJ2C7GrK?w<(w9)yXCLHL{0(egcG#ulZ0v?vdCJyS=!YbYp z+}nOZ?gNE9bTA1NQP)5b4;}LWCw~+HP{O$cQh}|q1h+JB%YsY?b;C*$(|y1_F;GDQ zYAT|nLZr4LsCx$*2q{TShnA$^u?A49544aIG@a+;7>R2cCpe|ri=&Q8g}C|!dxC~X zL0JVyB>)O*Y@?$faa?^@95oln7934IP)Oo#m4Rec;H3g2QNY{2;BdyBDL_dS?;r@s zaNNZ|am6>N_L>Z?&EO-MAfYp$v;iu_!GnX~tcNB9YW_f~Sn$D9WvQUnRALFJjLA#Q z0iPlTN+_USu@9_U461`b%QswoGb=zR%oTwf$EYHppgsYqr=b0t)D%d#;ZF#lCO2sO z)!ESlT=9UWRO7+p$)F+=)FFm6AwZ4-O(Vbu5J3WCjlvHrB1=`jL>iWXB`h#r;&HcFsfflWS{Cofuny@h#u%A&yKp6zI3=h=L z_4oD5Pe}z83*ZLVN~9VSQ~|@QcUXxAE;>Mac0prS&<(p_-5_s+Y9~nJACy*bCqz*B z0qU=S!@vhzWr4;9!Cd4l3sMIv6ax}L1u3|M2NjE;qyui_fNoa~fHoIF0k#w5aY*ce zi)B!~0@@P=S_)E80y??|7L1@Y2(}Jn7I+K+6mXIt{h(wB)(x6cEJq%5Lk#tTM^JFd zfszI^0f5#01!c&PfcRif-vA%bhC#?)FK{ZK0xG{5sk2TXK?s~GQLNUYcOcPEy!E2J``9r=mb?* z!w4LY4WMiWZ6qRUCr~Q~y9_97K+D)bS-{c92fUIE)Cd4=paJ!uJpDpkgZx}Wpqub~ zJcA)ihCuxfXGd`715^ovc4LB+gZJY?yIi0W1{ACT&fsxoP$YpiJ%Vfk?|K9emP8>Y z6?5_-lZv1s^f@S9!SgOSNrCbkXbc3T-w{$0f|_KY2|%z=s1LZ4_YIskAW0J3JOsrb zh9JmoCGffuv{n~%4L|@F=%^P41_8#0wJm2vIK#fa+{-Vxsz0a`bT=tTympSG_11#9 z?AzBGzwmkd;wu9K=>AjzMsLM=UFt^cftR*rPTIem{}cnm6$X%czvt4eOPI4goutl& zF7DJbVPKGC1c_U+E$(wT?em&p`qK%FX&kK#42fXzkNc|g|F!#yJ_O~-_2J_PH9uv6s@K9;wGzNxKVDUsR*=dD_GZdWq zGKHq(ZnR@ykYfg!<74u|BdaQ=_*b=GmTg?|YX*iCu(-%B^`v>5e&%h6?Yy$DU~%0E39A@41v#jPTd;rNS6I%#V8jA4U!`*E zM}7H2ZW3u#FYfhdWil|7fyEtEHrZ?5TzKq$_|NP_rdOH_412-if1h8;+Q#Q}6oIg7D|f6Mt!GkuE&_ZbWfp!4Ac7$-}`czb=|sV#Bt{*q-DsK~&e#s)Iq zhIMZBkMg{tjbG(u7Z==I&%lrk7FS_?cwb%ENO@-n?>*&6YYqm6wP5jytldBA)TWqv z+CDgzcR2SX1H)&q_~fHM)p$?eKb@04*N|;aZ!rUdEj!5k^%0ZjKK@tr$7S7=myxgf zv>6zhz~W0*I8B%!{e9Z2jE}wAItz9%Fq{XAAO6*0>KAaeu}^H{vJ>$#2N@VdIY8!o zvt6Umww!y@iFcBR+h0!l&A<=`7VnWrzc4*WUcyX>b#`FF@kj=S#bEIYV|j( z)&h%f%FJW5uqs@wbd3L|T11931H%rmcv9lp6TA<%Fem;jI^O(l{sabwUtsaqYgLc- zr?kh~E?B$c=_T&f3=H;MAoJ%mMgHsLmyatuB(A)^MZ?x)2%G8 z-ckt8WMH@s7O&@>Vdc4M%FM{eywi>do;<+7Aj1tZXXC#W`woXc(&L-+A+!ALw=f2V zT(CIDqOaNv=hzSLW1B7Clhpr>fnhUP-07UEYp~FB_+H6D*#fdv{Z8 zX647*JZ=AOp6@)xz~IUQGGF_{KF<~A;e9JB*u<1vMe-OJ`oQA)tBn_N#qic{kTB-yEw7PZe#w;34pc|qn>eF~mpe~V*E&32Q-wdG2y7#NDc z;x3mIddg)NnTj9%`qSF1w26UX2Uz@fl|bOe%)rdqYDtql6Fxs>U;v%tF2HEl6SvSY zuIsm8F^jLx+|qpv46b}2^QEr)aciku`zPgp{Ar2(t#$^69_D=(c`{$`UH1H%ij_$;oUrO&or z$uhNW@)DWNw3&gyLI7m`ZH+nG+Sa!R%}ZFcM>@&0fq|hBEM6B@F!||^^!H5Otuxmy z3T9$pH~|(9efP5Pm}zOtmJe^YN&0EFGk{O27hp8scVd;HQB&l(FmrhZo<&j&455Nx z^Y3q{pTa8o=Go`@rvi@3RxvQl1&aq~KHE}eAAefjNHR(<6LdlKbFg^Rl@r-_mx&1l zRjB@I(|sbvz@RGxGDmVlee1sc&c41b5pPm@w?{HC6obXh+AeG^ojqYe@L#bTXYXHC zWnkC^7H8eCIbf2r;k#)|k6g%0Qg>irU=jwI!?OEL7>!FVeqep1#GvPz)B|vV(2jb5m9s#dn_=Cj2@P z&A@ONEFRr|!&&!=(Z2_GTHmZPyT{MK0GekMU=*}|{y!&nR+RVu{DVtdbZi+Id__U# z8{f&(SheSLdzM!Y%UmYGgA5GQ!Qwmj{cn*gZ}~YTciIe@RaaIrFnkA#H(#mT&Ml<- z^NGU3M;Ts|$`}}I#X#m9tG?85p6kZ4*5#MXtt@^1FeHP; z59O;)mFx8vf0RCZ)zs7sF$RV;VDU;%jaj`5467%5*A!^%UQx=x@EI&FCfU3&wUcx8 zgv_9gp6q-&3=F0cAoDMNsO#RFrlo&v^-fvKC1Eca7^=bI>nHF$XboaaeAW}@*nMEf z4F-n&VDW!p*IlCw71FIy+9R9oQne%dA^e}AWe(|g@EQx`^8!Wy{ zb&EvejFUF%tU0_(e*Zefz%UUk?)h8lc}WuMCdpS(H(dpr_AxMkhT#Ml-+$$ge3<3n z*&(|&$2p;1jDbN>3S|D|wi8Z8hM!<@llikRa3}@6+US}h!kMFWn}NYW8f5;z zgN|`R#n+pkPnZxc)jZjcfuRd5?vqwGd1l=a!I^vZKA%15nHK}Yd9b+Phv`S2|NpTm zcKWZ9GPZ*P3=G0DAaiyrhjTs;G1c+qn=#d;?CdiJhA6OjVVKm?9aahwc~2P(*X^DX z%fK)fEIz3}^MI1OX72i*k9%T2ZF|bV@DwbbTgJt7qif4VUFLgxguGu|W?;~g1({!w zYvP_e%OK;){C^SYm-iiEV8{oHS4tKHt`m=2$v?TRV%~N2UF3e?M_yra}#KvgAa_zJCWx*Y54VsS}XJBxa1DPME{gmU}v(x)8#I3w+^KD5q z149Q`ob95J-d>p~b-Uw#%o+EG^)oPhW?*1A2il~TY!y>bl%HOdn5&SMnUh+qpiyCA zrWun9z9u6-twfGDXeg;tWu2MQIWQHA<+`zAY{B z%c00$AQxq)R;Hw;Q5bDl+i>wIsbvN5Rv6hyqBJi%ubk2C7@$J#P|zOAm`_#CYF{^8db%K zIq}7%1qBp3rZ^=#B_+FzxKSrOohp}4A~C^MNT1M#~nxu}E+ zE#PcQ(;~9hO7n;;+VK0VIFZseIjED70xdnrF6~o5_hA-+{YOmV#_y-({FKzhyu_T! z;>_Zh;{4L0bTo(TIwd7FsWctj(x%Wk&}Nneg~nv&QaaRHkY4~AzN63``N>4~V(`RJb}{%+ zKMGv}8ONbCH>i;9Yipoxy`GNKrKs0K0q!5_FNqs5ejZe9+h4HD20QZabGj)7qc8v_G34+8@? z!we{ki{S^9#m(>s%Hm?kU}s>E2CK_~vbY$QvNJHqfyGurSzHVi958h?P!<=%S}2Q~ zVI!2q#qbQu;%0aSWpOb`bHen>Ls?u5Ay5`KLj;t?#V`ZP;%1lwWpOc_g|fIAE<#yc z41b_3ZqRieVApdoxNyPj@PM+o7>c1RZiaFwi;H0yl*P@k3d-VQxB+ExGu(l)xEOf2 zVde=ySzHV@0t^iP;Baw(vbY#3K&Oa-#cH4|E{0|S28L{~7-$bYh{eS)MSy`J3oJGR z%Hm>JD!{;y2^L!kWpOcV6JTJ-0E_K{vbY#P``OdMVy6Wd7(gs8h8qG53~6AoJ5UxE z!%G1MhE%ZFTPTZ*;gJBFMlH1r}QYWpOcV6=YzD1dHv2vbY#P z`~M=qVy6Td7(gs8hU1C6DW&|p+S^^p%SdF1J*?XE`}9Q7B|BhD2t21 zK%9Z01+2~l%Hm?k7iVBd;0Bcu#ZVR(LoZa8n_(i9#l_$t0n_UOWpObCNHQ?AgUt(p zvbY#P`<5VL7vN$)pe$~NKTsAI!vQJCdQ5JHBTyC>!yhOMl-VG%Tns7F3=EUNc4R*M%Hm?!tOyg^4rOsMC@8_iRG=&_ zh8`%3n_&W!#l>((nSo&^*t`c&78iqvDojiQ%Hm=ug|fIADxoYch89%@hIDXTc0gHN z4BMcx+zh**EG~wBP!=}>lN!WiE(Sj+i<=<`%Hm>}0cCMB%z?7F7+z>FFq{Cp?+uj2 z#bB(-z;F>PW)5X>F*s>5FkAqOxj|W648EES4CldOflw9~L#!qP!#S{6B9z6&kgLhS za27092xW0G)M_#?oB@k9LRnl48#G~V*#c#8F&JnuFkAwwGl8$VWJiT!)>tGR49v!VWAcS!!5AbQYedyVWSoU!%eW*Rw#>$;h+`+ z!ws<5Q7DUx;i47;!*#IORVa&#;h`1-!!@wjQz(mz;iDD^i<{vsl*PrMqz6-{24!(EL_k^G3^7m^7sCX728M@V^QJ&q zTntC_85o{`#ZEw3TnxQNFm)55EG~wZP!>1CTPTZ*!NeG*&H~EfV)$dh!0-la9)l%> z#l_G8WpOj~Kv`T2A1oOd-h0+hwgFa^ruV(4&XV2}j6r3cF5Vz>ik zaWg!CvbY#b+!z>S!0IfZEG~u>P!>1C8Yqj4fx(@DK?$sm11C1t^P)LByMZK@Y4>0?OiIxBz8wGhBhPxELgS7#Iw}>SUlSE`}>m7B|BUD2t0h z#+QM?1guU0%Hm?U0cCMB+<~&V7!>>%7|g-yRG=&_h6hjw4bOIO{Y{BXbpe!zi7f=>A!y71zi@_j}fx!W+&IHQhVt4~(aWi~? zvbY#bf*2T_!RjoaEG~u*P!>1C7buI1!6KM}!40g=2Fl`M_yJ{cGyH+FxELHl7#MuO z>Rg~KE(V5Bm>3I`#l_$e%D~_cR_6m{aWQa&!Nho=EG~wCFb0Mou(}W^i;F=Z9400L zWpOb?gflRNg4M-9SzHVf5il_sD2t0BA%cM+0<10t%Hm>Bh=hr$Kv`T28IcSO(O`8s zP!<=1OB77Z1IprJSQEv-kO)?{0m|ZHNQs7tWk6Y63~!lbsw4WRe*eYQgFh zpe!ziEl?IW!wx8mi(yX+14AQN-2o_zi$Nn5CZ+>raWOQcGBC7))wMubTnta3EN+Gu zP!<142RMg z7$$+mjzL*m3<4Q2bs|s}7lTA51H%-sIvFU7i@`UOfnhpWED*}#Vo1$oV3-LO%Y?GH z816uIa5FrBvbY#nau^uqfz@$9SzHVeP!=~s43x#i@FRzTVKG?UA1I59As`nf76N5) zFKdRdE`~Eu7B|BMD2t0hC!c{~Em)la zl*Pr+0A+DAv_M&03^(!_7&d^_-GQ>W7&HoCVmeS37ehk<1H)#px)vyli{S~B#m(>n z%Hm>hDP&;S4p!#@WpOdgfU>w5=0I6o3?B*^7+%Hm?sFM+8uhO)RATA(a$h7Kr;i$SNHf#EvX4g)BQi{Sv2#m#U8 z%Hm@1s9<2Y4OZs^WpOdAfwH(6Hb7Zi3^J7r4EMn56re0FhBZ(YH^T-fi;F>~ih-jH#SmM?!0-etmI!5WF;rB;)YU*)TnuZVEN+GkP!<{Dw7sH=M1_n+(P#cb+3BuxH2!XP=86u!8E`~i# z3=F(rbqAm}-p#;Z3l^IVWpObq?`B}I0gJ7M zvbY$wcQY_pgT;13SzHXqyBQd)z+$JNEG~xY-3$ztV6od!78k?wZUzPmu-I!Ti;LlV zHv@w?SnM~H#l^th!@yt$7UPDpxEL&YVBul|WpOe5=wV=R2CMr6WpOdM^)fI7gT=g{ zEG~w?UIvCBuvjRR#l?`+%fJu_7E6P&xEP9i85jb? zz~BcKn+aucF)Zz6VDJTtt%S0;7`FB@F!+GQc0yTP3`ctz7`(w^C!s7ZhO4~{3|?Td zn@|=P!_!^{22ZfqODKzr;cG7gg9ljbCzQp-z}m;a;0_k!gtE98MEe*R+`wXzP!<=1 zOCKz(JfJKt2A+Nfh7hni0Vs=$p#;j}W~hL&xEQ|lGcbgM)%}37xEK;9z{FCZEG~uz z6Brnx!0MhrSzHV=Cc?z#Kv`T28j~0p62aw4-b`U&$N}s90A+D8teXlG+XQ8CF+72?xEWqRSzHVv z(-{~_!Fna2EG~u&D2tmR2g>4NFqpx>PzhFN0%dVAWX@nsf#c&VG;%0aRWpObG%!8>DfwH(5 zGUhWdOahyi17&eBteMZiFcmDe0m|ZHI69w!VLDjsB$UO)@N7NSzHXipe$~Ne^3?|gUw=?UI!?Pi=k%)1H%%qKPEs~Tnrj3VPZN^78k>e zl?)8a!RqEfSzHVpt6*Y0P!<w44(w)N&;^SffwH(5B=;~d=z+y#p)4+jl06Iz`e3mND2t0hYcB(X z0a#2A%Hm=;aD;(j4|vSz2$aRe;B$e20dyxHH$woF#l_HYfq?;ZN+CBx3zWshaO48$ zjx$gj0|V%!JZ=Vtix3tUgWg331`!63IwL5Hiy`JB0|V%8LT-ixD2t0> z%|!+VF|fJ~P!<=%{fi6?p!?jo86HDfTnr7D7#Kizv~e@EKv`T2J1#LWfbIe1X4nH| zaWVY3#J~W$tBsrC50u5l;2Iy`4?Yxz0Rmj(p?9A;2DyVoVCNiyFD{D*-EQyc=;Ij$ zzMB?R-q8ni*L@_K8ifAvAb&sicvn9cu!Zs9;}pSnqk(T7bd7g$4fAwHSRVqh0-@i} zKO{al#6KVaEP)Vr3UzaH4T=x(_m2l3Y7KG~vbp}DA@Tlh@!-3Mk;Oy(fV@?*UW>AMN${y0Sc#h zkau9W0=l{&$-{3_j0a!B2vX1}+W&j_R3APp4-NCLw z-~a|07!>N~2XPw0zpi1fej$((!oZGmjRiHC+PI3f`8NTTtsK|%gOU>_so zodZHcgB{&n<3TstxVk`s4=Mbh`k`78`k>+<+rSP7pB@Xtca8otrRNr zOBHfUi%S%e6LWGDobx^5dxJDI6_P;v?ot&3665^~Qu83EjA>|s>~c@cgBGpyRm}8EhF87z{uLfZW4i#Sp^~3RYFb zP|Og+5X_LlkjPNZkjD_i;KGo~P|T3cP{NSUP{0twP{5GL5YJG|P{NSNki?L~kjfCx zP{v@$V95~AV8md+Ujcofb9Nu_Ng$2nYox+ZGQa9)vM^A=ghH!>_ zhH?fo1`~z=a867Hr(y6_#SFOO3wi;8LbzkFV}K_ELsDW&N@|&E3dB_m49-?Dp~b01 z#WBI)V-;KoAFBY}o`Gv`9@JpiNq_N(vIi_fEBoA2OPq7^i&KkBAg7yxEd!NDH1eNk zF~lC|o$aZx0Hu}x=xv{KQEFmID!AnUIhP+AptSPesD0GUf1}|!8lI42aEL3fhkJT) zOfCW6;D%J9`InXyl!8th1{H0HwlIjtzz|%LSX2UO9D@biQ=z<|)Wj6Wvc$}s#H5^5 z+SQ*_b8mQ2W=Sf-!L%yBNp&ySSxDgvy=9AL?GZ}d=aLE9&6HFMI^77AARz531>eNH z#Prl6#05t2?x`i9i{qU0OY=Z!Yp{lQd_aCqj(cheBonw5fx3Q(RKmajJ-r+v4ZR-& zLUzz!NAZIeb{0BA!(|d#8e?|Gpsl~-$=OYC_J@W_H zZg5~SFkpuN5O5#llyTRxRB%p&_++5cFT{4*)fc1YLr#amI4cGgFi@IS@eehgX8Ci} z{DF;M^!kU^@iA&2b^CAh4o_OA4_ccK>gFId&tcZltb7~p_Q3*hwEjUkMG`R~0}UWr zg-<|EVr5cdayHZ&Q2Sp2JQe^Gpb||h_rshwYW~2apV9Ci*!CB#!yh!>LC^l;sD0FJ z-;JE`1P$E5as%zg6A&%nS5mNk%PVBi3=EaVv&*ugC38%t#; zUAgPmqx|5&|9AC#(70nj7iWY@po=r%5C>hO36err&jJ!;V8Ae+6^A$*4snp{K~m`E zgZu{)_hp;^QHMj_Z%=VX)56_-J|Hm=R^w}ba@6LM&n~x9T(b(^vcTNwvv#MF<8tl zgoHDK4{msKNwKe-$3K(y z49I+_GMZ74at>j9fnz}?g2%vML1BI)bOk;}*O#IjUSJi%yCxSU{MV9)?D zpco{N%%?QGpvKaSg4AOOxz97OOi7f7zz@L5_6&TR&i-kT0H1(00stz z;*!*&)O?6u2s<9Gv^X)h0JK;PLL-S6q~(GZ2^E8AgfO^;1ThJf1l2zZNJ1wVQNz1~ zk%0kO-UCgZ15F-1zCiT{Xk#19iUNm8oj)ww0wt|ODv6E-ll<zSezZ7nF4BNgPhL*Dg%+@8!Siy zf$o0v{#XHIR3;?9AU`KRy^^88IX^GYttdYiY6qAflFv{OkXQstdj+7C@Sv61Q2DIH z1(>GXX=v^84MNkJp=LJA>d#T06aAAhx)ROpAlx-gn4J**v zf#@1MBznA-Wag%N=A}VLofsHE$9;enIR-)d`30$YDCrwL{?Yrxp!Oi>;Gn_dV^o)* z`=6Nf0LvpFlfZq=(j3r!JqBd)%yp!-j@iWlo zb3o&9$aRqlntB#A{u8wRB`EzOr&sj!3yQzNoPI%JHj1ei0_gqC8B7ceW;~!7_Z3VG z4CY|g4kiW$3oz>h69a=Kn014Rfx!yQdcnlNU=3#dU}9jf0kb%m85nHAED2@?20JiI zgPDQB9?Y^}W?*mtvpkp?7#zW@8LSKpreM|%RtAPfmtWm85p*KSvS}j z7`B61FW4Cvc7RzO91ILw!7Kqz28MlLmIfyS!+tQ!f|G&a0GQ>$$-rfmtg!85oX(SsmOA3>>_m5TC)#z`zM+aquuO zu!C71JPZtCU>4{i8F4TRbUBX%m<7@&3T9dGGB6Z?SsuI$4259U4qgU^d@u`iOy_AZ zD}s-K;S89S!Nx2XYLmZg(LV|%I3(V4xWMIeyvp|>K6o6S7k_-%m zU{-}B149v*)gj5iPz+{eNHH)pgIN_)3=Az`R)-V=Lo1l2AxT>j!#psH zLzaPIK9~i%3TFYBr6J3}un^3$kY!+41ZH{2GB7L#vp}nNW`bE0SX@%NeJ%=i7jQ6` zZIogLt%^Yx1C?0lVxSQVbTQCOz&rh>XW~6czD+iLbN=j=jRCb*Es zf6bQraUd~ty`a%DbTQD%9dt3!IwW*4Q0*MG*hX^|=Oy2b4f2m%i@Jh9c6d&FxBt=O z<(?~&4n%f{#JmBC_0EYlT-or`Z=G0QN$yhF0+5)5uKKq#=QcWQ%CZzJtXjSoBo?(U z`syT$D#vA>$JRuxdbJrO#y-u7Q#YdCx#jS^$%{7m*nq^GntV#W`sTQB^A}uO5QLCd&6nIM^6D z&O3TzgLTo0MIf;&(>_OUipzJ~`%-`NCo|bRkl6X~TfqmCj<`17D-+oB{`yytm`}um z#~s_Fyml+pN4cC_a~Bk*YaAM!$`^L|Oi%dsJyEHC7D!#4$+G4r`40ZO<{W7Ya=7>f zB-Y}8_@tu}qsun-y$Wwj*VTi>COUGz;a;8QGhy4YVov-QA!@qOd zsmRBsATg`d>V}E)-aGeC7d*%EPT?p>>{yZ1KG|8@-PS)}zrN?a=S+}Txl741^Fz_@ z3ra&iyUftk0*RS=i_iY=a7l1c9m4_t!yJX6bb5Q&)mh8W6}T+0-QgFwbILrBx;Z)m zXB|R2yq0}Sc``$$=OReVS7q|7wab6_&z|Y}&ga0aZy+(7W4YoTYMp+K&Wqg}_*Gx( zGcYjR-Ns*Bb3WT?f&E^woRjZVK0~9QK&}to22f?qolZm`L%C4d4E}_V4|_ zly}+sFd2~8yaiVtMqIz>v+a$^iml7-8$e>`3jOx{6u;`R?Vhf&%X323~_u1WZ>EniznxNYl7!F?y-v7X}-oG_Hs!6u% zs1r!ttK2*Nnme@}cTKRYQY}gS2NGkMUUcPS-+Si?D%zJDCF-wTM;wmKx(x^FD3 zUol6W<1I*xt$6;Q{{No7^S9ami{T6e=cC2-zkX<6Y<2JQ%aoe(eerXUy5xXq7AM|j zIJHdNUSwEwUK1p?#oRY#^TV~?8)nwkuuRK31rjs=e4|Bn#%7mkqQ@h1cZq}ZjEaB$ zndXEm-t8gjzPvB0c7W6^_geIE`J8VKoo}Y!`}zOHZIGBt#dHzR?6qFYMV16we`84i zi3LuGOI{kV$b08)zYAf86ZBHs1be7N${XM31mtcpwZS!`mUSyX$~L$QK!_r2!) zo5*`X&JJ82gf#!0QI)vEtu-N9I%U6nCrB@PdI25pwlHcL$H^~uo#)JipqWOUS!(uh*TxlM?GeVi%NWoye`-;n#kpJge!- zWN_Y3_;`=Y{x*m6EJZfuYO!D7bbpP7FKu;Wx#xoUO@@ZTtJOey(cJ<%hPG>O@3j)+ zM(>$Lc8A%TZrg&?@qW4S`EV~SKjYc#m&RH0w=^1L2Sbrrf5D*|*Ns;m)I^`1a2zC- zrLg8eT~mPD)OF>Lc9;A)2@*p$4|G;7x|lKp0|UC47Zx#4dGIT-F~HjJs&n(ggKN%b zBPve~y7BtLXSNs%Q9&oBn`+sfw zOwTsmsS>Y*}eoMrg~+!#NRjX-L?r;dnK5>T>uh0{yFa6LpMKWLf-+UlEcg4Cglfzl~@T>(nZOjpldouel$FnKx$gSO7kb)a;Q zt{0S^(be%YFfc63O4hKQdP#8WHHHKJHzh8B+A8Q`vJ4Ci=z68Gh=Go7o`lxs;$~oA zF!-pt{k^-Cz|xOQ2|e>(uK|r1d|k0iNB+hs_l;FQZYUWr8iK-L`}H5rE=$_|CpQPF z%gmk#ZeKNS|5bEr%~R)%p_`ojTc1^c)S;UP^2b8i9U`WThQ8Bo=IlS2E;SQ$I5fIC z(DLoAMJ@L0A8hh%C_HNaJnQ*6ka?`D;*bBG_S|#MmiY++O;>|KV(5B7@qsP|T3?PH zR-hG%!L{#sQhr?&T*S=4@I(IXJ5U_iaD9C8%rn-Zsbi7#m3OOhu-O4RUi(4RdB>>l zY#w{tBah!y>DviXXM)x~0Hp(TJ3wOSZUOb{?@hU%zMLoDcl#t(D?5MY^C0uwpTBa| z>Rac~v;S1k>SdzfvKT#`g8ZTPH{{M-i9(N6j2wr)R(XNzU-a|`N^1@;?Bulf0D_ zYdd?l%eHl@xBQd4(n0wRT?~|7PQ>4ed1w6Df5Mb?)i>IDd_j8s9zLDWoucNkY1Nwb zm3*ecpuS70`-<5Ak1L$oHY}=4|9zJkr0!C}=Vd=b?|JOxOyc9@N~r;fUF^;=$0FYyy|1r;A0&ouFQ~79E(VHUbpL|vMOTL{{V6gqFhu)wy#J@Y+i}&?vUm6WXEK58 z%}LCbB4$8LRdwims7Ye8abBidMY=q_>Gy={%$M}@kLAh9hax4*YLF*~l`^>L%^ z*-~)YMbCrS+y_d3Zw>a|a%SjsU;g8Q@RH&*C6IX~3wpC-toJx~%Q*DRwB38H>#i9{o!F`iS3G7eaa`4Uv;JpF=46l!bu$%5X4f>z!Q*>bszq&cp zxcp`aeEO;Ay#4*Ik5kt>OM=XE;P|)PMfihTuX)hhLM`u~ATi$sJMZh8E%w>W%@ne+ zI=TfUh91tKnFDk&IV^P^D4fyDHBcCooR^<7U3Zt`mUXA~%o3M90f}|L?7o@3W2(dc zpt;JM9xMm<#g%?8x2$o$=h1y)Q;XwcCvcm=ai;924~`!U zJsQeZML*`y2KRB$(=Nz7^!gXHuV(4}o;2wyW#@I?Pt`50WE(+lK9Tp=L#XS%&jLHY zqe}(f-UEp(6am@9z;FPP;M_prf}ZX{X&hZlkb!|=qgbxX+TH?>{N~ z0O&R-hJwN)>%WThc=j7?xH$WX=P^(|f8SEgrOspT*7Bb1C_4k=K2Z6Rxc&IMDft^6 zr_4XDS;Tu0G|0_RCV$pbElk{d$qR`stE7~`WjneU=&B8LG0;^TC;SgrcnO^Hnztm# zH)v*Fcr*h81G-oo7O@!6E+jO2L2gFZYtF#Hz;>ywr^{a5WAo~D^W@k4$pMAmq5}So zri3-_U8|Q{UR=y@cqSG*0 zc~*LEO%tkg3old1TUOqA8xG)igR@H ze6i?tV_;ywaI*pfMqGl*4Rm!(3YdDC6&M)M!xXfF4n596^$fZgsGdO=1Jx-!-UVz1 zFB*L&R!n^IGOA$#DEzeR4;)cxP4io4wM;o)!1^^P{5;-^r2X?#ahZ4P_2&Y)RD^f(9QBXs|Q;?1G#=K95L0#4g%H0C(2+7}A413gTq zV@dZQb?A05GBPlri!m``#xJP+Lw5_PZ-6caDqqmWK;eQe2C5s;>uyk7qL*Qye$M^4gRaVMf)ylNr1=U;si}TOW)#jooy>PmE}&=Zfs>D$j#{Hf$~1O7|0*b;uz%A z_jfyOkf}`1I;#O5M>@gU@nGuX`wk74LOxtOVi*Fl1KrJ__&_%glupsrf$|5s7$~gJ z#Xxb6E(S6W-41Mev4trp?9ugNb2I3ABy@X0c@SMMHZg2&2KA@W^@8e@Cz5N{t?T4) z-MM{tTh+ctZ$WNG7XyVAx){hG=whJsj4lRBL;knxnu?>ByL8I_{lEH^DY!mAt!q*d z@z~XI-K^|?e*E(TL2e^PHd&Ed4!Ud$x z&RB1H-I|Y{UH6ysvaj3&9v>Gv!DMF5|G~9&ZGuV0wJFLVbvE9)$2wk|ao;(A?kT&+ zzTp1Wk1u}xta*G%ly(VPBeDM;N)S?gWz+G4#IEm>5!MDqi<%|F?B$1HxWQt#bL zMU@qq<)=aFSk~FCWXVwRU(?9BDa}<8Jm)a`vCE%)-%f4gc5Ti7dhn>#=`@ho(HhygmN7D}ZJQ_c=}Me&2Z>Em zGPgQazua@?)hE@Pt~>|(?c265ZBQ(n@!q)9fBymmPNAynPJZcYc}~>$KK`!Lzp^Z`+OwYuZ5SnwV4<=l;IxF{|_T zsdJ@g!2Vq(rz0U#)9kR?dri)Kzl$0mb*k^atg_yF-FN>H_wUsk_#y54-#>WFB|bVW zo4%Z}YEdV6tl;RBeG7I4RD0|-WeeHY(FksLie-zr`!46rOm{GTsOzcDy{|PQ220*Imb72%BsZ<^qXr zU%G0^1*v$KMk)UOy!3BdL1O>UtG8!(9P?Wn-MF(=@gg{^-kCfT`>$Q?xwp&NajoS$ zu=_5qx>bAP%sR*I0h>-Y7_M6c(i_Ayhp8?4xZ9cq>Y4vfJiY=F+jRTLk;z-L-FDx) zV5@%hi4{mJM?7zziK~w9nx}^MZXHYj_v1UiZD0~v>FU=cD|^dT@6r*FI_*z)jIV0= zxHXu{y?lQu2s~!=?A9WkJ8x?p_I)h3bXxrj+|G`DE4tv-stDh%Hk*h{g;(Hth{SnU zBKccZdabm4#5ub@89ZlG`n1kXRX*Hxt>2EV-Mn)|L3Si@#NH~)llI%Sw}46dQpgmL zSd^|%ZQMFj=MKl~ay8HO!Q)7_=T5E>KIG)t?UBo&@JR+7ZzsQef8!sL>pOQw*Y#Pq zzJS$znHVC}-?+(b;?}F?rDo#b`48ur2g;0V9(&HKJG-l0=hrQe9XyjRp7_Riz+p|B zzLnPnc5qqzMNP9{nae}xb%m};g<_r7Aa(zq-8Mb!!r-!M-KFC*kFdW0i7oLhP}+2C zrdMCs$J`$$Rl$DiM;osLm0{>@dBz0{3@h`!%~qRhdF<0($MlWY8Jyo9x^&2|RpD@* z`!`r^iRd|S-`=B8>XOc76}L_X^&)}qbHL*a=;kpqGBD&nw|oYXn7{9dPQn%5NdC6Djz+5;Ys__J}})LbJMx6RYe+TG;K1&{A4dQCaW zw&b5jlj^$Tk9-uRzc4Z|po@KFWMD{F%XfYx^4fnhmq!A`1rGV%g#V;C$FtH zj2zw8pH~I>tzCV8%y|zEr=5K7;$oecrhwY_=whILGP+(+7yw+)Y0eYDezo^<{8I(g_#qawiJDx zucvPa9&bmVX9tBJx_O{F8C?vtqXAt^m4Sf)Jq>}{SLo_M?KN~UP#+du4Ajp<7Xyu@ zp^K?8FfgEtsbdiXts+HN2O0;dTK9UE%d}dLl{%@Vt#3=EK=G?*zBp{oxl4lc`4|$W zA8Y%D%?{AK6}ow#``XaOl(4u3l%CP;0Hyny{mzCf8bUle8Xi4i?A!~kr_smPKjlkAqKkpriO=Wh zu1G&64ElHzC|`CQm^~}kf1cY+$>*$&3J&10uZS!2 z&Yt7wcU;c*Q|S2aIWeI1;x?aWOsJi;!lU=8o{;)7zlor@e175~ccWyP+d7fI*ZWzQ zf#Yjxg_DWPCqg+;G=BQ3=aD7zI6azPte+cs?;3br2D&;> zd4Mhk%B$#Npt1x#AIUQ?Fl1RPW$THp^x8b1^;*TBT=0A?x?WJ-{p(bj`;$EzeHPiN z#g*N7EeP_*y%$^DHl5{l>4*`Fc%8aa1SE!DCo@fAVCY`F@?mS*UbptRaNgrM;3GU3Ak=l7RY z%0OcMg0=HRHZO4P`F$;9r})X2ATe}%`574)(8UC>hzT+>FszKO&{FPw>)Z4!VR68T zECG;tpI+XL3=VqbFss{r-n3&X;I%#I<}puTU~u>m{X=!-A@2=G`pmY@NC&T{;aeYF za`5SIpDyVOh6|P|gU9q$cAgevNVRrfy6l5T~$uJBy6l!XABP3$tfnbuFK|i`!+nohF@+Fxj8?6Wm7s5mh}c zYUW$Fd4i^!kM69{1)0~WFF3jTkiKWvT<=G0I`6tbVg~2mo|Wvp@6zw%x9R`wUhv#I zy8Dzm7#OxsIQGvV-py^DyU(iMD_RzV^rEYq)x^Lsz4c|N*xCn9+f)=IXGzYm0I7TA zQm1M-LD_kYMeEU^c4a%TOaGj3Di_lMuK}{PUHd13 zgWqA*V*Ru;kCuV^LMOlNT6Oe+q?_(tZZE#Ngfrn{T}N%=lmHA-E@)209X)pwga zSu*@V_e&mZ{@|L#z#w`o+F;?Gr7rWY2prf|=?L~Or`z)dzB@eqcOmfzU;nO8D?GvTrqg>5od15T#ijG^>-WxK|G??~>t|!mHg`Aw6)&#&UanuN z2-3S=;PjnGTROa_{$!T+joJe4H(q%1-`{`Y5wG6-lgDHqW`f(8%PJFP%T^dVY!Ehf z-?YsaTn-&|e7eZNWrcTJUFrD)85-dA8=dY3zm79B_)hSW^F33Px(Z~+U*9&TC3DOD z_rCR7TdkT7UYAyLzOQe`_8or9?D?LHp3Db_=_ZS$13$Sdot7)Bwx)}oo(s~89;WIY z3=H2--FFW@ZwkO}7AsYM7_Xh_(YaACBKmT76*j#blNcC+jSYT9ZVPf~ zeYs~%WytInkUAAd`^IM`;=ZfxvgK`*+!unx4qgAo@#*m&m-TW{OHWAY+JVHbsFWX< zPdMr}yYs01<1&49CexXY-i9~?+M_36uO()CowSe{MGojqB_cLS@h9W zm1jk$kmM@MxFkg6xP#<+*3TeeAs11}}U#ws>y*Ghqd@;Wlty_&816 zZ=~td#HVO>fGS!7qc+{-0ybH?lP?BIOMzI46EtXz&~L3sTM1HMy*Wu-z3mhSGG6_L{9x9ha&0nTV<@K|J*t?j$U;9ou)tyg`^j`stvmx|kImc0CU zu2b9Js>he-v}^&HXYIf>p_+55ch@6!`CIQcg8Q7AS6DRqD^_{578LG0*!~b4M_Vry z&%Cj}%X!z7V9!mHCBW@iqk9bZ>OvYl*LsKO>rG$>&r4p8pMIZ9mBpd8-{jFOJ9BWJ z*|p);g)XxIhZRjZjQkg8`Gf2&-IUo`I)%Y+Mf?BBJGRJy`;7-LEr0x{!NI%V#Nd^n z^c`>+VIXF3X3|C_pUp+{eR7Ta*g<-4SrvYMJVDTJ)ziNR%UXBt1BtbBWjC$E63>sJ_2>D-2|>0_VPcg=HZ=i(h;Gy?=1x zJCGQ99~RVxLl*$=3^dM)E(RJaMHd6L_0YvYZ9;j@i=KKM_MV&U zFBx>LOassRp{oP6pV7tG7%=OC)Axx^d#8Lfn;dBM1~fhSsJA57 zqW7@RnuHIW8^Vu>!xt7TP zV!oa3FQoVX+MEl@ALwBK%7b>nSF1(W-*(w?VsDzt!wW{BbRT&z;M@-VzmEGdEKO1H}ir7$^+T#Xwhe_7&skDD3DUUYS!@Ix=xKw^HX zF-v6b|MhE7NWbW|BH#f?FS-~g4A8|u_M(e{!Vg^x6fWpu*z5&`3%WW`IfO0-%3J7S zpgILz3{>Z#i-Gblx)`V~Ll*X4gK;wkyVxTcqbTLpqLKg$&BXlv) zI5oN$XiOSi3^XQVxVz(bTQEQ6}lK`Tnb$bG)9Il z1{x1T7Xyt!p^JgWfsZb8aQ-!!&3(E~bxH%r(&eCZiY^99r|4p!bc!wpsz1=hKxr3U z3{)1Qi-F1)bTLpGM;8O7ada_I8fPf9OkOIg2{Uqj?~Ipo@Y0fxb3{fsq00 zI;drGHyVmdc)Xj$-XE0G@#zMchb{&(4_yotF6d&QaH*TZ9pccv$92V`EbdO9y^BDn zY@myQ>_8U-*?}$wvIE=trn{*-R@mxIaacS3>Ez`+rPn~_p^JgcLl*;?hb{(kGrAZk zF44t6afvPlic54cP+X#mf#MQf3>25>VxaO0T?|xSp^JgaD|9hXd4(2n;yNl27w_4=V`e2sr@r8;;ps+_5!=?@t_UP(BVUI2b3VU=hP}p}* zRCJ#Ajn{qYJ>QPwQJ1_yZblaam8a-ppz;r03{?K1i-F2NbTLr*hb{&x|NiWsrMf)e zocnr?jFZc+8>fN709_0e2Iyj-FhCarg#o%4C=AfWKw*F`21u%$;wB@shk;Otc zY+@k2=;a!y4nP+J)dA>YpgI6u3^a$q(a;dQn?2EOkImMpb_J~oAbZi(8Dm-32U_!q zuFe#TIx{R{pf#!JdO_<1(ZwvW=mqU>L|5m8MV&JiG0=%b=z2lxK+(lO`~A?xK&LIC zi-Go%p^Jg`0HTY5?khkS!?q^X4~v`qv4{m=5hHf3F19tApmnt9?!&g;7Tdbqa4c>C zoeYU?UL+QEQCP&Vt$zlsbw)QY7K>hN>!jncr~@6Ng>GIF7ImQeB+=D@#sJX8Ky%FK zYlK1TpE1O+tQ*F)mKa;T|Lhcd$F^Dl|Gp>AajS$U?E&RgbTLpFfi4Cro6yBTWfQs> zsC_S6|L&D>)-0N2ukFDh$5lO@)0hGn z7%r9X5r#sVyQv52u^u|oih7#kKbb}V8XSj0H7h%q=|x{ncy7!wvTP})WJ zFDUJzi-F1#bTLp_f-c5@C9Q$dIEK0eEN;dk#+1OoP{)4Mzirz-m&uRYPW?0MISX<# zx){jK=wcu@ql;m6GnTj%C}3c)TC(@vX7gs}iO*eT+|r!78e}iJ7|339F_69JVjz3b z#XxOfbTLpH7+nn121XYHwSgPBB|BQ&ZV4{RVqn@lqpuO*G#6nBlsgt?;ev+?&Cmat&P!3v9=7Ns5hnnlr-J`OAiGks`i%J1#9`1OHN(YDr9b$UCMFq4?3dDT@ zB3ciWvKt?Gc}9?dVJGN(HL##Zr;AF3M{|uz1w$z>$dn&9{{Md&CkV0$B*O|?b>z`~ zVJ9ecfOT}bs1!8Us1z`iu)Z`CWMBXbdUX4!RCshYaxlU)HtztjkqzYp8`=VPFH}8; zM>mYmaNGf`0Y!udWGj-0M=wZ#!K2ed07>+?188`X0YyaS|NsC0QA89VA|Ov4ZvdSr z3n79r7yt1;BmY~ z1$56B!qjfCEgszrKD|9)DY&WN!0PS<+4?^~0nOYJ{hbq7puuVhv9d%Qi>15x85myn zLL(Y<;~2zdh$}q089aKYsDOk)Nd)Au{{b3kHX->Smmd~yte`~dxZ^)KB4H++fJSl; z*hENhfC3j}F375GhzI`%2!MhCbUZV}F`&Rj2?mf9Bp7yqLKu<^C=H1Xd`KYy3RH;Y zEh-?}K+fx(q5={Ig#<_lZ%8EbAwq(cfdLT`5EBp~0pcS<0%R`8s_q`Jt)P$qCoL4; zgR&#k_n?9X)%Oy(V+V9vAT*^afa9eHoU=W;IXyaiR4l;7!Ud4;Ko)@F1tj!80FQ~a zyii|uH-JsdJP^Rbz|alz9V9b@j$=IDq5>*zKq2~Cpc}&Zf1ne>0J{ldf+a+xSO==c z17ae?i_DE6qa1gD>@dFM0k!7!2C)9-9UvDl@V7Z|qq^zf1Lp1vU?m>i9iXxSo(MrD z9@z7a8X(_7xC|c66&lFp4d?_*uy%+GJ+cpYU^B0?MWq3hi<J8sON3(8s|CGlBdA67B9$0i6xn=>ZFL zECC8K4-(_xbl||mz~Iw;pnD29#t@P%Dj*rmf(9x3=YfL$c#8_?qC;dyBS&I)CnyqO zre|IPMWzoZjr(>tfMmS7MVLIgg*-Z^sCa-qsx0XY$tj-Yj_M>l7;gG8sJ3^);afD1+{8L5EJqb-aapuC9N@tspt0+<*W zT%d;dLPE<2RIB(xV#&Xog~PX-0i51jz=}P(c{m*Z2N>WkWU@H%g+J6TlvD_@i>MS4 z0ZN;_Eh-U=3=E(W0Fov^qIlEgH4ab-465Bhb#adh=%P+&DF87GT)Vb_#XWk#wKOO- zfNa5=*6KJwMGYk1c^r2DweT2rF@jPpC_$qXH=QjipyQ!En)iTdhgQUXeVpo|Z4KiI-f4-SuBh?gPB)NuzQ zAV4>mf=vc#19=x35Fl|<0-}^19O)ZC4sQOTQN{REr1)et8`vkH$_jfTeZa`T z&^d+CgN1XN|ca76BG|1QBX~O9Fo{TB_k+&K-c?$*tmm(s63GY z%@ZKw;68<943N}+0kphYQ;*w1Q26tJeAeBg0yYoQG$;TkX>ij3BHE$?5<)Z$Kz;|w zK>ZG4LR&E)Ce-gBCdj`azk{yY1+j5Eg($yQK>ZFf&Ii=@aWy^(X&Iq~1V|ymxmcRP zn?Yq|3$&mIw_+e|4oKky3Kt2G3f!e>Zx5FMIOL|NfLsHu!Wuvh>^|VpeG!xpAQCMq zAkqH;pqd-h%fjLsRgg)|d%z|^!xW;I0cH#|OhKZcaDC_yqYFo4_)YQL5ULs^XcE%O-|7+!)-x4~@)|MnI}B~bWu_kbHdosJT? z6?=5|FoL25>~&;UTHx0Mifjx$8ZSZ4!>tk1Wg@s0<8+w;emz)Srtq2r7Ox;rLR%ov zy27K|K?78ff+EPHQ{)7)3I~b*2S7;*qJy*3QQ~F%SCk$vwD0QC>0yAR5g}@URn!5} z*l9lC0axjxl7PgHKw<|Vv60m~Ac*e8c1wdw;MI_!|M)koy-clQ~^oPz`6;V z#C%jLIvWi*85lt2D5xn8&GR58v>XL7p?My}1m$_-1FyYE(f}^ez*d3>UP|F#$_6Giz9#8?11u8viR5Tds&6`0~Nqo19iU#Yy|7GPM8$e=m{OvBF zS}WN_1(rm*TN**Z=D~dM{{xWmj0~L|{4LKIA;vSI@R;Gemwy=iVvXfF0$wDqYIov7ubs~um)XVHo8C;n!xKCWLLe;L*XT$@PbfyE+{-R z6rKhOPYQ*{gUkcZY3-&K~NH_$XLZICz@CYkzwcyGK*3}}Q z_76A-5NGZM64Zhl`9!#Z#rVMMYG}#m(T&HkAca95&5$4|v4OLU;4BR|OAgKwfwQ-VhZNkM0xyLsS%64}fJ@x?Mm**lL;PBLP_a z=KyjKXvG86J<8j3~1>JGjT z@PL`p>7t_3?V_U6>7ruMT%%&aP!tQISj#v;6k7?)Yv0#Vpc<^xMa8DMM#YAq1SDg_ zSR(vdsT-Wnnolr7GTdtgm;e)0fFCBnfBPuo}pyDrgF;*c&8;)a%ypfQ zkSM4n!NBl(7D%~7pV5YH7hEt^i~>X!$41 z@a`V)xHG6h2pSw_DCOG0bMycImsc4eJuQ&={fhL*`f(uC>6%~jNKe4YVFlZF>c0(qgI$cy!z{Oe$D4%w_sHAkds5pQt&txB!5D&!Yss(&>wTBBd z7~}%)KZ865b_Q4*)&^_ykpe6s2oE;&G7c1(3A;c=I>?U}V8cPBKr^U7D-j2UN&-U( zH^`R>pvl)x4&wu_SwUP2>GjhTovE*6pKG0J0bn5fLCOBN$5A zcYFYaV>GD25z!q2QRV`3p9*pun1h@X0gnS0SRBZEB)h1%AmyhB56EancMD|r3P%7Y zUl3NP=^;f=4Hdibu1J3dj?GK%OuG`ALJJL=faq4UcXfmF~_9pkXu) zkc0tL!T=&6z|6n^3T2cQ$tQln7~~EI)D?|yKyyBzFa<6CgoY`oJ8J+guE6=q!}thj zpaoQDfx04~RjlA~4zQ9=7ZneXC}_PV1Bd}y7|HO7Uto?3=<+_F?iLjXuu-r{h#nP? zK3Fs)G}ovkFqD8YO~T8&pzcBQ9`I}h1Ahx>o$m1#6;J~gl=VQpWYFw_N4J9ns5}b* zc|CxkL<$rp0o@KfkouY%ss&WU!nGtbAVs1FG!j8Qda!}XLLP`&6c5Z<6ws8HPp^xL z1t<~~a1D@wR6z#FK&_(YJ>Zcrh7v8uozK{@3@3pUfkOeD-CsV0)X1Qm&EU}snmGYw zBG6zp$p4^V1UdB+zd#Q-TtR6Cn%7!Xz#Vc>MaWPh2?`7gaLMkYVgV}CkGrUVW2|`( zSRF$NPd7xz%RErLH17e&4+DQoEXW0rsajZYLt+jR+|X9GH_rCZjdY@xL=nZcLDXGK_k#DDxfo{K`BZB z6x<-sfPx$3RP4e11yuGE5!@hkprqZR0%E;pGCqL4!0YaTOo|(y0Xxv6@dzkSq7@;C z@q$nMfWhQ9D1(Jb5;}D=m#OE9T|ATTWI9VKb zQE>ssT`z2U>W4@778TIh+B-q5vCm6DsWAdHP!F2w0{h@2ROS=Ez!VkGC5axrAu17| zQUkO#5bTNOJu09(6B$bRLE0@qkh1~I`g!QTSzpm)2dfb9Ye3VZZImfb)b-%yu> zTEm~0fO84|b_Uyj{}~ucLmhX3@*QYi(gI{7$N^wqfQ$f5*@6VYMt1-3=q;4k2{i<6 zK@WIh7sZCx5{^4S`*5%r+6~H?;Jz3rHb4RK$%9{~1rn0oJt`pUtsPlPxORYI>g9K4 zP(#{9B?jaQkR1PZPbTYwCECq3Dlv?uQlLT(BJ9A_{DY~K)A+#4!^{i}ueo-70yR~( zGcz!B`=}&$|+E~@BU$YU?*s!#phL^&;b>Cpz1dQ>UmJSd|qT71dG92%>=Q^5AYLJw>&xcG$h zvtV%mYB|3IZH+tLqOt{KEdv7sc%cP|172tWVt6D&WIdXHF!MKagCJ4zdF5cr1Yinht>k z8i)mQJzAiFgh7D@GK9!L11Tjc&_H8lFE9W5|DS}AV}ys?32^ANsGI`PXdwrh@4`%7 zSc6S~2`$(ldV5qr=Hm*s4kiW$NU(ueSb_~C3<@@oA^3vL04c43{Q=3vV0*Eowb!gK z@BaJ$-*IOdJ4RLIqXKE8g3=>6Q(=rKclW4(igFJ`eF3Th;^PpD70;Z3x0lfynV=>( z$Y}muALJoxAOD}|WKn6hQIRjV>Sj@amX`e6Kvy#}Fd&ck?f_-(*W%#G@7Dr5K!xCI z&K;oc8Mtl(ua^Y%bwJ^WhFKU{SXh`?Ab=S{!AWLt10Rj}#4i}40vQ_zH&w$x<7p9~ zdJeQx8eY%&s1zJ`Q855n=K-FbfHn>-K#fBSh7xIzs0FyS!qR%6ga^tM=mhn2K^nR} zIKZ)#25N5cZ+8I?wm^$S(8fnd#DZ2z_^1?sRf3Et05umhKr9VV^j7e1_hd=y^k9M% zAJ~HC9|CoJ;J^ecO6zpwgQ{|10`=&?qWs%E`MM9z zY<|SfeCXg0X3#tU|N0Z%2f>nQosM9iXz*`$-~o$td$J&;I~_Sd239mzurSpd!t5;J zg0eVDWkF359~F(XPDcUI;sEdoS|=muW>=WBBX~@rqT7K3 zlzN(fFoIU=fF?d5<(Efqg@i}7fsyK^-74yLpca1E^(IA^{rd z0#%a?CA`NWOSeEhf!ClOG-!qlq`Dg--r1r8y8H&*tq0Y#pk_KqC#VYzG7QvC0J#WU zKz72{r7Jn^bm78M!$Attmxh9%3PweNiGe|tf#LuE)&nJ4ph@_zH$ZixCmx-*1sE81 zR=^f#gL)UBAOQIXL^G6vjR7s7cib6($CxRg<>K9tWv9m*3Rpl{13cCz0SX}gRwhuO zx2PNeg#-fwXay>$Eezs;tO9wQp~M#y8z3eq?Lig*g38Vc_{eLE3Ml9yH3KN@KucdC zVjkTc@Rb#v5Nkl@f&vz5E{I97xga-pL)y!h5L?PXYgs|Q>TFS|VPs%<%?Fi-^1C6z zoh>S$fN0(WrWi_P5S}o;1U@bQ`^Sq9psGMF2L%HIe~SYfWL*r13o5@M!UQ7& zHFLq)xCNXPA;m?D3MlEqRN?nE$TE;>h7u8w1`xB`fd{mJ7~~sJ0tT)814k4zdO?G` zpaHXvJKzEf7Ux$$DIVmM<~?BR8A{BM41|m*senX4=?aoWKs#6vA|L}mW*}VT4w8hr zsQH0F>wywema5U}&wFp7oe2Bk5qZeQm zy*t1;s{13l0#=APbOxZa5tMXcZUBwXFflN6c7PW1!vsI^3$&5!24WxVgKcJw~MFr}0cgLMOv3a=!97Le%vXLx?>0jdUS)$0^8ROaRC4N78Q{5 zppFH_6gb8@8$tbAxMP}kfVe1@U&Ld1JZO~_G%9_%J3x9t3*f;PO#yoxZZeXSV0AmF zh2*&N1|IYOb1*QxRzcc72i-mg>S%UD5+7qz(3v~0_uo> zoB|(_2Uj^z1Bs||Kn8%y7ErPQ>0&4WS2-XixP*pRIUo^4l>_CWRXHHhZp2(8M2YrtCN zz+^$O3JP#gs)trN3Lr=Jwjc)Lwt$llIG>_c7Lb9;9U34F-8iZo$d*3vXgSEG=ru|& zWQ(3h?+y>BDQI;PD?}Vpo_lmQI)Ify3KDpgQ-LIiQsp#&Bv7gx(5ik=T!E_`5C;_I zuuuT)Vgg502S^_@_jdPyYwXUB9wb3<;}urrfChy@0SF36aLIxwcfn0;NR=bUji-&z zibyRUtl-H4XmQj%MFo^2p}fu(l{qMx0$k;Q0v4PEFsdAoj7PVpghywG19IKc4X<** z`wO5x^(PV6Ac>Y9Jdg(5oCnY+gpMa*VJkf>t?_EYMO8 zR8E0n>Nq3-prsrrEIM1j0R+nCpymhzWLYPO3o5}F_*=kZAn-c679;}-7KV}{P_%<8 zWpLPmvJbdT29kt}fLpc5YD#TDx=_@B;~3H#^Ty*BUr^Y>(qf4%$QV$9Io^-}8i4`D zDrlt5qxpabXqpGqA^`OtL2Xa)z9>kffRop2G|iy&4C;ticz{!-vfO|l(1@aWUBMoYq zgG52DeeI912b_dKA0!pr+p$pJdDQForsOkp|`gTtNZ;*fmHp&>l zd^~9fbZ-VI#K0*WG+YZQ06*~yG=K)(Kk*B;s2l**u)Jyf;RoPcSg3e_1KWH!sSp&#I z2bgZ;PtVTI=29#RC2Q=VcKL=S4!@r#Ywkn;GzXdd&0a~EW%-^yN zy6PP?VqL=e@+&A?f|uSkACPba&rra75|A{~dH^(G>Y@_BzuiHo`G-O&7kK>pC8+E5 zIulgX1bE=l>kd+(z`xyr540k&xkg2YqeK-%2|y@`5&;lTp@iwR%nr~P((9}ppfd1v zGI+fIbqr*>B=of(*xJ`V$mSV<2Erlc89>Z4fS6~1WS$hnJYk4=JP`9(cYsE&P}b2w z!?*DbD070w6G3Y{;nOBP;9l}^7ZuR4XbjMt<)V@SN|E3?p#jwJ0A*sBhzBdEI`rxF zQ89sT4+D*3LCgWCP0;)aWX%_-)-Zvz3|4SrX&IP+)xUfRPWjMLAC#5>+|J_-FJO&j z(D4-D*lhs01GK=UH$)`_lsiD~^?=mqpe?K}Dhd#1fI5cQtXBYA4_cZFapNv*ilAO)LiN~ zX9uWm>~>KJftRXq6%A*Yz+2Z~1wh=vPyB*N$>$TlfQw27Xk-Lbq#7Rpmp&%oQ67xh z%*G?26pFUm1*v?%SVIq*3Ik;u2hi|0O8EfVk^(LXm|i z$Lqn1NWuGc;Mohb3<;FIK<6$ZWiQYQ9#C+BN1eJI!1IOR@*XVEe4qm4_yCxS?gmhq z23p?<69LtKpfLn+xK_YKyBk2A4y5=3nbzHKhk*ffCJJa>2Y6K|bi5VXZw572Kotr| zEklU_Xu86Kp#;2eFaR`#1llq55_I1(Xmr;_r2;&K1llU}@(2&8?G9St*UbRVanRE) zK=nU(6&&b*YIp(bqv8QxMl1oFrDG^ja@-k>xflyJ!~N12Y(8}Jck=-WP}?2UN%2w9 z00oZ%%-b&A9x0$zoS-%xIA=lJ0nW#u2~+T-QHe9ilb}U%3?+OZoggMCt#pDmX}NGP zbapuIOvU4xrQpFa7nOkK3KmBGR!~D2WDF?S__sSqHUD7ZZ=DRzY%VGu%{xHbFhOgP zAS3FaKn8cbjxa#hy}-1BY7Ma(Hu%N(w_MJOOqGfRCQ=K$);{QAvRrRw@s(5EKKYg2tCX`4Bo-2r>`8 zpE5)x1?Ct?Xmmqjy}2TVp)?m}3aAebTBQn_9rCdB2&fIjD%0tKC_z9jgc#+~?GXSr z8?VK$v(b$NZHvWj8CZrA%V1W4LWjQIV=5p58Z>M{!72$3Rw-uiL(y;H!eK|!e> zBn0VUKo%l{nl~%o(duX)4r`0jmI^XVAqh*)&i~02SpLM ztp(zMI@zFd5tP`_+FBrK(%V`&c%0pYl>NE`WV(C6X#;|Ob5qrS`I$0W$ z_(3d?XHeY_DGQ;M0C*w-Bk_YYl9TvBra==wXc-;2fnJBlzmq_HL^X&~dB>ftxRt)n zf_nm5n0s`B&y)m*38eb~J#7TsNr20Nn^w?d32V53#uhr`%Hm)H zWddjeWk>^K$R@+h!*OOQXuyl11k$op_+Fx-(S4|sMdda7aTd_P4(KdX(8^wI&XHZ8Z@(ko;>gpR2IP4pnDQwY*1ATV_yOFZy={JyaY9~z#Sg=T4@&* zj^-K_4#pB!5XDqt3ZhuR!+snP8#zEW8o*3zLzwou7Ap9<1jfjQF_K=#Az8uGT%*Fn zSmFetm`aR56ibN`h~g*#t&`;eS)mKls|I7p!Wbej1~-fW+I562L0}AJ;96-4-V+Sk zj|f^M3MzCsKxNaRm7Q*|lz9_jQ9DwVg8!RAzy;ULIgVbuShv zkc*o^>Of9jhv8%@xwjGBy-slVc5}jA%Yx!sObLivSwLoSyxxT2R!}Y-buT3Kdcni@ zGrs`iXMRBjut4(x)G)>_i4xAMP{Ntw@a0j#%x)|ypyi4#pbQ0GsLjE@&6AP&;Kd)H zjldm@V3&h(6)4+5+{Oe+1N%|jMwR&IQSm^_UMwml;04wk{QIG<+waK)b6r{|#ChN> zgm51;jqat9`%tnIi%N+xXb2dz{S2zxsNo*W{Gp9-4bCbCnk7!r z!aeBe4G}uHDiLTdKntBSG)n)2%{{vC_`+8KK*Q(+a*VlvCQTrl+8`Ua!JP*jjeT%0 zMB@{Gq>G9HXjbL`=x~=Z@VPIbmhWp(3J=neAL=WmYK&QKKtQ3IsP58lm2Ln*w1i5DdDj^iQc~m+(K%F-*uXzWE z3ECSDYWf~;0P#R;XCRWGISh92#-$Q{un5u^F+W(~cmrq@2d)Fj0BkK?aB*@5baVsK zc0$l@LhL)MK6&Do)aEBGNLI$#L5Y*7M096>+r3^ek z;{jL>r9sRmg2ES;7|K^B9W+x+WYR02RV?7Ki~K|qoGKSU)0B+yu+q5u-B1R{@b>To7K*z%<%xr#C586e@4mx`Vbm&ax0gx7ub_~T1sMDU1z&itUsjuif-_F0$0#(MDWqLpb2VFVgRl7fX?EBX2GC~2|i#Oet^z`qb?>uUfB*BmjIdT zal8SvO%^uZ0v76S0679Y%!j&|03-|<>VrDN-Ek))wl&M>Gxbc^6hYmHxtIWaq%(Xm z0cc4GXc!6NG{mZS@Ra8TxIem~YvHjhCg8(nJGvA3u_=N&5pyvCXw^H+>gFAwv!@x5 z7ZZS_q4UwNx$!L~0IjIQv6!HTk;ugapk-BLEha#uU(6FWK^fQqb_f6{%Y)YyfVcHJ zfYV~@0nmK1j|zkb$}}KV8XnC%K-(A?5XX3dxS+Ju4Vu61?gVi`Ga8_g4UgjuATA{F zflkS4-T_*WiliCDMbZr7B54M3ku`&slOSmZagj8GxJa5oTx89l#EqmG#6{8!;v#7V zagjBH^AN(%ATE+-5En@^h>NTlyqX808N@}>4B{eb25}LZyE{HGGcZ7oY=DG+cgGJT z5g!%EiDEE0(81l{=z|HYV1~|R!vsJ(FHlr~b~2y{96;A{0#yKM?I9=?!5jc{3aE0! zQJTWbQv&G`b~Yc#%?=*N9l+a4A)Mv|0?4bDT~r)Ax;;1`0R&5=AT6K;#h^1i6c|br z!Dn8T!rBoUuR%jODxjG~P#T3*4%nRxZvkLkuLsLN$nFjBINks{6d4wWApQgRaxT#M zc*h$MyYwJ@&@mqf_02oLsgJ(}QY?X#u!2NjOASEYgsk-<>@!fH1$eN69E2Kd0Uq5Q zGnimW3uGij>G1}TD9ABbtk5!gU}iu9^bfINgmA=0t_XpAa5IZbUO$@ zvodJ6xBxUC8^F^ndJ~8!^LK!v3tChecyxo46T+5GkSxL?uq?>y5C=8y00kS8W)K%i zGl+|%8N@|sMoDH6^T6vLVUdX3vWEm1+&}0|I8ey|KFb@P8A0Ybcr+j20L3Y&b?4D7 z06iuFk$oYFj_EaM^{&Ee39u>9!U{KEQjE?fsIC~qOWKLJ!Z;tT@tvRnrbXvQiDf!cySQ!%}^ zg35#3jAR9<3dLy!>7fjdZ=A#~9&DHp%tMLKwJzd5pAxQ)@7Uco*s0AoxczASnfEVdB*Qj`a7NxnUIDmG) zzdQn(f(CW{ns07)TR z?FqKpM+M@AP8SvM@@CLc11>5Kpe>m%8Nn*RzJ?U^pnb)lo)vhLGHkJ$GQ^j#*asiy zVbR@yv|XYk3ZjG+bXyN7U^HOW5vb#40bP4#e98DEIM_idzz4K~gD$|M6TAr@v@9|J z>VB~6l0jz!MUZSVR7bauN(7S05y&QUGBGghN_YiXTWR6Z-2njl{^b94A;MJF)4lqWd03UDy_E~~QXNLtSzQ9K;LJS2biuFk5fvQuy z=4C)apxZ|!!=tmq0BT+a)IVVJ;xWt%hH8R$ufVAbveEZ{0H|LIO$=I&J8$t|St4!# zjww*C0msE(Xu$zWXOIwp+W_K1OLYtA3T$*6o)KXK_|SAvMge6fkU`)Qsj~xA#Xvpd zqXH5K7bBe=py~oe92AfqogJVC4T?C}eVrYkh7DN!cmoUcmRId5=H}$?g=2vL9R3K=mwV~5Qn_3fr!Df zo|fZIP?B@pfvgpr!a(g66s<&P1Scgd8hunCkq`1bjOC(Y00}p68H(PN09U|7_}`;> z2WYJncqtC}_$P42hxirZ;NuNo1<=%H;L!{%NNLB!a8~6h%lHKwMM}AQ7+zq>v>P zp0H>FpLc}i$YrYOM?b&}lrA8v{=30hsr5i9C-g#B2^^OfapVBe1SYZ zfVF=Eif!-d@nkH)u)b%Fw(6w9$iszZJB$!lN5x5y)DPgAbTJnh&UWbhd(T zTkD2U%?J2BtijB3E{`1_Kt;~~|NI`!4?aK))PCU63(CZut)P6%h3-R+vv z?VIA!9V+1i2}93r7SMu*Q?Ji~R3e|e(CJ#zTwB7x-!dC?bWrONkhu&D498oaKv^Eg zTS2R^Ks=A*t)SIWAZE8~NoOl)jY@YbXtSdwm|eyL;X!0PdckIZS}z(Ny_ktYAz~AzaiGiVeD#)*3Hz3!4;Ko=9>&tzh z#frV5B_PLv(^RJ`M{_L)Ly4N>&h5MytruU&#J~=4%VjI*o*htvXnhQ>RY2JQe4Gz| z3uucs$WF+v150o?74yNO9Ml7QEr5{k1fNIJ4JJEV!I#f~vd{$3;AwX+h!1fZI4c`p z>IT!`i?6?b>;!X~_kw)MRK^9#?x2N}5FyYRW=MGzqWZNVa{h&gL6w(?b@zgdg5-FJ zX`n>>a``{dy;rUbNIiAXG0Px1(Bf#&c_j=!y}ltny{;u5y`dJM0QKmGcH<>rp{n0l z%K^Grs6^3m=OdiK`x2BmUYf#e1SMur456k{kOlCR>}r8EErHSjvB?;kYD!Zesoc`F zq%0B?MbL9!x_d!60DKN(XDfL75hOGCmOyfX4QK@$Si+;**8;Mf!=<|wBn;jN4+=TN zAub?;5h2+P@|`aOJh&8K!6oOo^FPi|dd>P$=r1f%kcw$=^5r?+3Of7?luloBLD-IRE~)=c*LUV!fI^63VbuizvGy40$>7hK&KpM{9@E(IN56CaCo0x7sY15Ir~D_$JS z%fMT=N~IllfNmg#S_bWe;)B}9tphC9;izSN+Xt#)qiURZwREQb}9>mG2Pi1iiHq4IWegRb-IyKUizU87AHh?i54HF2@~T7~!oI-wJSw0~y-91H2Ugxv2u) z4v1)~K<-;_1yhiw3W$lXsiNS~*?ItUD@ZTcj~?AqK{`CTdqIK_o14K3Kur~p7|6dK z$W0Z{gvD`J&^-+dpr(oksHx%sa&C76$aR*k9-yX*N4KvBw5b9Le?(KIc`svVN#u61Dm705PxnDrfWOU*h)28QO^5Qfq! zh?@kM85k^EL3V;_H4xp|3TpbnYBd4S(HpHGk!~>A*$O%i2CR1iXn%2cFNhCyK#K9D zZr7BZpi1le$4=Lj=Gqj7QXY?9Xry(zro5E-|NnnC*gi|wkTOmPv(q&MWTHoR1Ej~! z;M41B(GBsNM|USk5VRm3>OuX+S{F8k&W=*nm*>FeGe_a}?tV~x-dt+|y4z5qY0p}6{ESnrzw6^{wv<}YX;Kgf9?5e0Z*z`g_2b$MM17KL|Q*ufo_*YTk1 z3QWNLNRazLiw!{Q#x)p9R2+9s!3;Fmd>*((_gWERCQ@6n+egI&yo$y}1w5?+3M0&W zAknV1fme%^_zyhTsNm5IE$X2DbHeApwS@c!Iw%CkR()hI;CDZK9B{@ZI=6DzKZ%m|k;(9Af~r4r#dK45&VZ zn}NL#4{58gLz01KH)wNW^AC<9sDOn>GDrk+8ns6^&p~k70(n>gG`6e&y2}Tgr@$lT z4j^|ZctEe|K^+PJ=MlJD@c9R7H4n%z$jAh);g~bvsu|K?XnX^@+XQrI0qD{mXfSp6 zs04tztS&0x8Wz-EuK?#OUM(I$6HiHK%<19(h+o62s9L+ zJA6QgM1f>Wxxkk*y}Sv&+!-R-Jq7Fn(0Tvxo3c!rYg9}?cc{3in7mvAYSlsaOT+JK z3MqmfTHObdO?Cm@g9W{O8gjWY?6RL^&eH9rs=F>m?-T}=eKdZq%jTny(;KOj}0 zS_5_?NiFM3*fH1@9^DL}3j;tSACP8d1!Nr&WXoVJ>&s7|kb$0K2pYKVodOP1(83>( zrvCw;D_&i8f+otrVQ1~4;sU;B)`iJ|p#i)XtCsa8=u#livK&x!K&=GD2DDrT83vO1 z4?5=_YBSU8YLEu7Dv%p{R6tP%og9G-*mOgVtot930YAc_mI-t$I^DS{fDv)$W%BC*RHe!(f zz@wUwGzoGX^pGpCu@F&EiUcVJ`5LMi#DppaF`&%gL-SK@EFyGBfK-@O{GF@caxasz4DBI=v0-Z%Co!7Dyv(f3gSYR2Ushg(C2V-|#G1Vg+!PETE-3*xQ)hJu0B$0O@8JP$_~@ z)_@uqkYWaNK{sgZ05o6#*^9|tp5c)UzZ3@fjt%1jul+&O2@J12z>7g%JMI8gS+A`i z=aU(O4p?A#t+NAkVDf9#9qgc;#Bz|+%EWhYf_MTuxIh%=4)9eR@O_Fz+?xR^rjRkn zKj@eU|8=vd!0x``DKEm|PlzAGAb#|R_|XI6M@NVstss6hhWJqj;zw18ALSr^6o>dx zU!!Lg+~gyZD-C95x!Kl58Qr*H;Qq0nxN;Kxu~eX3y5wPm5k%yFa>qp5L`GRq(EU?fIQCPq5`@d1hmlrq7X6K0$&T{4A#`V19aLn zL#c3Mjfw$y_=Vm00Qh#w*Gi5%mt%7}q_gu9a@(4VN`Xi74seR)ZvmZ=3O1F0d&4y* z1_s0pN{|&4kkNTiHvzO-y}MxpXq3uDC8W#!MQN)7=140a|nfR`owX0CZ9+T;8L50!SVdGT>!g1^*|2 zJn&i_tQx~i(CKF$$cBNGA%!+*Bxnlc_G0jbxUjHRK&-oxb=?FM#e(z&M|; z`3RQVY(eXnL!g&Xf@Z2ATNeK81YM&D?NEYR0HAZX;fGfocTvdz<-+5Tn+HKmP`e6# z6$)sb1EgaP8;G=L0^d>&>5%q@sJOt)1UE4dUIX18Yw%JOG}Q*aAd>YZXowTkk^ngX zF^2+5s~{ILfEdu(s2=cjh@d{73#d2%AD|1-1)rCKCs#XA0tHP?ffrMO&-!@@n&)-g z`2=^!zN}?rV0c*qZe2nB+PnjFham%h%Ux*03S=Sw_J(PU$m!Kb#RZaBp~paXLv(jH zfbPk(gb0>7!h8ukrMCkl+YONgC0~dpkM0hn1@S%L8)-Z`8$n_&kP|XOAcuc~Tmn@L zGx`4nkZVCaP?yW2+X1}24b-Ftr8;n|pjZM^`Cs6*7L1Km7idWt=yYY!)$sx#l@QCp z>v%o78M?tnL){9SB}7Wl@{T(h1+g@eAZ5dA&X@E4{{N3VT{j*9C0cmf2wt^dA8!Gf z16w~81Im1$#X+EwmZ1cEj3j7vGKdQu40MV%D9M5boInLFJHiV%hp@G+tZ zup4;5mkB07sw>7)(5c^`<3m8kgO4KuaX^mkZcza-JE1p)LQWI`4Fpy|42SNQf^eF5 zfNo4-C=rElSwTEdCmR$cuX#ahTqF5KBNpNS0WDEP+d-TEYrSIN)&Zo(Q?W2sRlH z31HA}9fneM$m(KHT?Q%a!8$xT8$r_0bN~ubn8QK4e(>l5NkbD7vM!Ke(6z~+$ONeZ z&C?`<#~mQf0mnCg3uqt>eh~+F0XwLH2$F>6pahTZi6H$DcfztYXoL)s2tlWSm0&A} zAcL4M--E^_yFqp$HP?JpKuu1NEs({k2%~E77_|g$RPzpS`s8l`t!-)E1Gys|vi=_A ze2^rP^Fg5jb3RB4GQfwhvlEY<;FIM+&Ub+vmJg~V!JFgIbCZ(e&WU);fvi`91Ovzo z2%2q(?JW7J%5T?#5ezzYBo@s7SeGr@xu6myQ?Ic!k#3skarbYB2ZBSKPN zr;ADis1*Ws7}DBTSQ7-44ZB@bB03>MCe3@mqoxccYETwqNnRsFjERwfp@jA2CeTqu zU;;GV2TR4EWyGKa2%6Ev7lQloczYSBw;TpD5j1njP|Eb$6)Zp~a^xL%p2cnSYrmIg z!84e!TcW{<1>|*x<~`uiX~t4ENO*y5Lt2XqN*NyANUN8P54;uuD?(Y<{(3R??oi_q zP;G&JmOZFr1m1rR8ikht4T^$m7f?eJQuh1-U$%nO(1etG$it$LwnU2xr~m_%y$WfN z>jPX=EZ{5$I1AJu1TTdIIb8vCeFSU{7aR)U!@+5f5tIj@$2E3BZmR?ZS4KB@F$jbSK9U|{GUR5n<~`uM-I>Zj_Jfv^fZB;* zwaq&~_oOhC$b)&vhIl~ThGGIk322%Kyw;(_t{Wm{32{X+=(0?Z*_|yapjr%kStdv& zl-~^zhF;+L+6?L@h7u%wZ$LMgfG*jD>I3n+TU0<4RA2KR@Y&!D{H;Gh*Wq4*IGem+ zqQr-wTU?QS2;z6QsDLP_OR@V9w2%r}ABf-Gq5`6z`al&hXrTvWuCcdA1(Zv{k$D`E z4xz`^fl6#}YdHhdOofe_WO$&omNPuyt!2-n(s=}!8}Nt(Gp@v5x8@e z0TJtjh=CFX$O2Fq3*NN`&77da)j?;lm&iKq%*O4p*PhLLz>Z=lu_wl;QanbHu_4 z0aH*XBGowHRxE!j=*nAI`BEwZN|f-d2Q}e1WWWd%&96bl7O0*2{{Zv?vgSSD3!s?z zd;35Om?26#Tflec!ERtI;fJyqOQK#TAtfzX%hwMi)*AxaLx)*AfQEVT1ezc_1H(&R zkO82feE4!F)|a575|k`iz;am4-Hyjx&;kA6K!YXPI4}>AKrLHTK*knZK#2< zL7NglY|s!cDCt55X<(N^;!a}VB_q94R6r`R6d#~2bh0q+((42Z_)>0=ZU+9At)M-q z;DmrU5CF?I1IT5_pb2h}CqbzM4W&U`#B zGGqYI1S#Xv(p;3Nso*@&g5Eh?bU?4F{s1uP350EMqXg%x@Ht=1?e zfg%Ppa0b!}s)j(30Et)lqz5C|I2V-+ER!A}t6<~EJ7DUd^B$0^?fBc)f*aVNc3BVj zD!k4P@C*n<8Z?Rw_6O=DNQMVu5(HFOfu=JUO4B@0V+PdTgLo5E5P${_q4J>qt4BA3 ztMLJZ5|G&c00qaL{TM;N6SP?iTLm61_ z0jG6XnCwA>325ltvPA_Xf*K|ukxtmiI*5Y^6VMPk*jQI0b{s$M}AOo6rfFry_9b_#?2iOYuv{sJ_JefjfwxH6mya1Xyz?Ka_eo)&^Sz8Kq?awI2@SHU&Ix3koz)sRq`Em@R^P z9VPw3+dL)mjyo^nF;&RgEXu!ZGZp&|1$j-Xe$n^ngS;naMEes1HSA7Wsn8h zKtOUAmO+*bq6S&Id%zc!BdrPnbs5nHT|lEO_~!Jfwx0yF=!1y;B&hS@I3{JlsS&=D z2YER!Y<)S7ZAYN6hs+Z}HuQi-R7!Y2w{L=qLPId?J_7@T0hk49W9frgpq5QCH%Q%K zMg|7Zy|*k3mlzos*kO7%vNJGfg4MBbz*s4qFjGKB z{mXHHTz{4mW{NNu1A_)whYA-1Lkid*W?T#m>R_=5E(QiQFe{e}W=cC31A`<3$P^K7 z1_o8ItP(d&ojEs5T_86D1L(Xe7KROQS!*5!23fEjuDlEkGGLYq9|J=wnB~pKz>o%J zh4V2m_=8Oj;%8vU1GC!TtT%9$f&fgmPk@1;9jtDN00YBAFl(0p1H(En>zn`sg9?~+ zOMrnv8O(Ynz`&pcW_=Q1U{D0J{s}NJfVOn9FmMSnFl^=p`BF@ffnfufr6kC}uoleH z6J%gm1!h?ZGB7L$vm6B(7^Z+(9)b)EMPOEdAOnK}*yJQZ28N$tu{=QrhRV2GD(MEDV9d3=Fwou?S%Xh8!LS24;pi!VCL$x z!K}R^3=B?S);SRd24^tqz6b+@3z+pmgn_{o%wiN}U~mJoghUw_+`%jbQ3eJNFiTIA zfx#2ZvJquq@B*{EL>U-Bw;;1HM2Ipl_<+UIL>U--!K@Nd1_nPct4WlB!5_?;Aj-fH z0A{TaWnc&fhv^Pc28L{KnC=l}V8{Zq4u~=^WP({oL>U+|z^oIZ3=HXD))`R-hBPqi zf+zz+DwuUelz|}y%(@}Uz>o}P-4SJANCLASh%zuFf>}>Q85n}VtQVpT3<+S?8&L*^ zcrfdOC<8+rnDs@Jfgu*m`XS1|5CdlY5oKVA2D2E%7#O0!EEX{ahDb1rLyUnT0?gtO zV_*mevjoH#7{b6T5itgaP%ukE4CVqEI75Caw~f$OM(>u3~bV9*E4c0gII4AaCJ z7-GR1UXUaMLn2r#S`ua+uM|WF3xgP(B?o7z!&&-pmIa*U z0B3o^S^fx?Gy_8~*nRoZ3=BPBR)aJHLpPW;Lz;o13(Q&sSGQc6fuRp9c0(GHHdq-R zL0K#eFQge5CW2+(L&Z24GG!PTW`o71$}liY1+!#iVKuC-ECa(du$Yl7EQBg$85rh) z#n#F)Fw6(DHo;{-$->N&l!KXozF=UEC24B24TG6h)e{8WK~VJBF}RYjN%CM5=j9I!f0B?g9EFiTVkrXxfNremHG z1H%@u-o;8Vw`@~lVAu>6<4}gVs#=+W;SyMkSA~IL518es0t=UEaMnT| zSluF3m|iJ0m=0Ann7Z|93=HXD_gzeQ#Vlqrf#hU z149Pbye%3G44GioUJaPf&uK6)>;=2(vIfk*&op5Ewbq2yy3U#m3>U$ro|h&A!v!#_ zLX&~vJeXCZ$-r<9%xchNU^okAwP-RhoB^{sG#MC9gIPLSurLVIg0;xB!!{ElFumHQ3=IFkdM!;E7+!-}2Td6m6v65~n=&vg0<(UZ zGB7L#vzX0b@hf4*z_0`?CU3^T0J=?IB&+l zupG>~0oU=<3>I(v<}e+u<_rug!0LR=85mZAS)t}IJ9^9+7+!(xSZdC|unH`@#+-p+ zHJG&(t}fV`fq@Ae8pYNO3~Ru$Rn`m)Yr(8$YnXZStYM+C#u^qHCN>NV3Sf0(3+vu$7|hubnRYyykL*)lL}2D8#_VX~WS z85mxI{qYgb;mS=>W7#JAAq2}%c z%RT;Zv0P^c241jiuQLNf8`v#VoEaF}!K}H?FjwtxW?3YD_P4IxFuz4N~3>sipUGZRGC<3dy?ZLoM3}!un z>+teqV2B2*OY&r3kOZ?zJz@ELswV@33|MThCj)~pnDq^=Bi0M1ZlV_hgA!PFu@?hF z3YhgDF3aT&la=v?$>w;&^p<-wFsOocbi!r#c{4DSfL(eS&iV}3@egjEfDg<(MIQ!+ zQm_s)I4jHtW=EnA%mu}89i_f7*#=*j>?B{9dCz@eF~jA@z)%J@SfuRX3YaYzN&F)-+XSxR9H42EEq zUKj&|37BOS#=u|>X4Ql-Fj#?E9bpU%wqVx8Fa`z(Fl$yA1A{Y|wK$A{!41s1AI8Ao z17^JlV_@(Hvp$9~Fa&{Fzrq+8LcuKNa0Z45Fsm+>fx#Qh;z?v+NC2}^k{B4$!L0fu zSorNqhLv2mk{K8#fJ5kEG6TazFzZz^tju9eft6g5DGUsgz_JM`3=EUOtjrWxh}Wes zFiZi9wWcsIOa-(0QedY1Nnv1^1{PyZWnh>NX7QxL^eUz@Fw6jpX{0hR%mlLxQ(<~v zrZO<(fnEPD6&5pYX|U0mkTlqs%#CyghH|jFS8&#sbOwgSU@_JV28K0!;E^3TOFaYD zzPEt0JmIV;I4e7YfuRg+N@)fILn)Y550`zF0m~IXGZ+}E!LkoB85kJ%6+)HmRtsgPO#ps zxiEWo=fZTng3C(e!R(dGgUMRwF)-AE^}6OUFtmbM^YdWgyf2S|VJ=wgL>??mZ|5;E z%mIsO=fhZDa8`Fd0|RKa5DNou0RuxNBZFmoYHx0<)f%!Fol-u4G_13})q3GB6whvsS@n&%tG1 z!eyna7#I$M)!A3U;wYkufguqb8hKR=47V_*QC(Z|B@xs8E=6Re}N9X2|%za2I@6VSoH0Gdf*VK~|Wn<4ty z!N8ylHbtwGfk6e#%I#ucI1Of%bTKfT0kdkmV1DcAVqlO2+cB{V=C^xYuyhsN4YRki z8)mOm56s^F9+wPfyz35|L&;aXr+Xr(WLq9AX1oXqkBf|R`7@YV(vk!av85kVF ztONZF3=Uw{k$wgSdob%nKLdjun02O~fx#Bcy3o(S06MCSnc+%51A{eK>_$HWgB6%{ zr=Nkr63lwg&%j^-WUi33Cn1NXq6JTz!pTNKn3>I56fq@|i%-S%4fgupg z+A@KGAppz*9dYXqX6>24z~BdF9hktt;0tCQnZUr{17@9=z`y{S?P6v)Gl7A@3oLeF z0t165m~~|W1A_;cbz=epgFBdYX95F*8<^!YiGkrfI81{lF)&;JvtlN}Lbq!Y14Ar0 zbo(d4LRWM$1H(nII+@7~441$x)yXg&7bY_>Tn39>pUl8;1749~!4LLn&Szj~1k28w4~vaAVNVKH-QIRnFMu)3Se85rJxS&!g4SXaQ*$*y2vcng*V zt*CwnX6degnQXIyf#E$^%y|U^!v`?S2QJ&Rf`Q>9Sgdme1H&gUYZ6=*w2uPPR%ToY zOJT|@VQq%_D`9DE`$`6e&tSd#Rx&Vr0ke*;gt_4RN|@jHS1~Yr1_aCIkFF);iD%U)Q;!0-#qx(Qb&vKr>*w$*Sq zuZFp0`)US;-(Vg4Rx>dC0ke*;hPlOa4Fkhpuvowv28MrNR^%F(Y~)&4DRpEm1H*r? z>}k-#5pWrCbuFyFn!66B?#4O>21c;#{dEisOkmc_bue{j)-y0LgT*edXJB9fv+k^i z*(S7sfq@k)Cb@xufep-3+5nTy*}%ZS4i+okz`(!(X4SxD=WT%H-xV8R`FF<#SpL1a z0hVXp!&(18EO5$Z-U!PxVjE$3CTAn8rTT6o1H&q?I+aZf4C}!x&|)Qb5CO%GLQn<+ z1H%;1=`c{PIg|!bQ=sceL2Ne=0ma~LKu~rhlA1sywk=d1MCl`m=Ys^G7_<)z%4Dd7 zF&G#aHY2%51$0OaR1UNs6v||H0@_Ui<$!KtfifAKk^H3&6J%guC`V!=yLls$IiM4w zVah;#2pC%i#$aGzKn@4c5q&VJTo{9afuRw}zo6^UU{XtA3^7JJ1_lOXHfVN{S)f&E5S9o71A{DB z40O;PsExNjQv&=D)0VA&i7$O;5zh5|UNgn@x! z0$3Jw=;ACetA>Gr0m1^Mk11d=Q0WU=i@?kP%GVH94+8_kT(B&tY*-0qf%b_&SfCY@ zOTc2F5@Icw19%nYCd z%Rw{G%nYEt9UsB6p#9CD8D(Y$9!AI<2QvfcBxeR*P|p^$F#_H(Cip91L%N3 z2n%%Zq%>I8g%L9P&&&W?)eV|4V`lIHt!M?yf)0WO&5kiMgfK#8nwS|tCnc(YWn&m2 z^IyyiptI&cGhxgODU1vZ>R?&WqH)kX9y3D@BV;CrnE`ZKi56HEbPNt?ri7URv^*Tb z0^LEN3zh}#c>~R!Ff+6;GJxk%m>EDrwfx!$c3)(sYnt5SnSiuOHgJEU>9rS1kmIYmu1DcItW&kZ@hp<3f zC2YX5p!NQs85(8=&{Yu-))7Vq279n9XnP-M)`pqk3?pRzhM56$DY6q-7If7IXeNi5 z0kk$4!UFBa08 zI9OJO2{MDk%%A{gsW34xM1f^NOUFU;ugnZOOpuvaW(Lq15wT!d6DG(k8Z!gvzHiWc z8Z(0p69YpsSQfM;88p|*%;3TVnYUzS@L*zKNCV6IFhS;~m>B}#tPmy!hD@+5=za*$ z3Jzul&`r`17U(wW9I$K(6J%bWnE|w|0krm(nIVUXfuRH}3)X!oQ0Q@g_aQ393}>a zcCZ*|%S#`a1v=v0lco5 znE|xfa2i8Cc*f(2)R} zz_L8dkQLR;3<7W#=-{`lU|G<8j@!X38D_{DY-R?~L9jc)Vk*p#_0h}>8gP~lGXuk3 zu&eoGc!cMSuxBE43ELG3Cs)(pTMjXI4gshf#D-qEQcAg&YPK`0M065W?=XVmaSlh ztOsXisDZN@m>C#;gJoNo85lUgqkSE4Ru8Cx0gFvwW?4{!ItXhIGXsM-SPXO@ zwh@>Gx>pp!0$qu%1{OQR3>h6}W&quh2pT75X1K!4z+eiN1>MF98YgCExWfz?F=l1} z?e}s8%RXU-j3+ZQfUa=?jVv=WykTZw2m{N44sijEEHg8FVTOz`Gc$nBw21`E{$XZd zNC2}yJN_Xo&>f30U@_30pebM$4+{eWgax|fFBvQ*!ot9i4Q7E(pM$VuSQr@6!D67h z{YtnHg+YAakC~44{qV z)nHi{7RU$@GlK`5<-@|j&;gbOodE@!5oKlwVS&tzGBZT5Fff4bCSYcWVS$W2F*AU! zbOnt(0#3OK8Vg@IumSd3AI ziGfpywSZBBnL&^-h=Hqsfq_w*i9sSrq<~S5iGfRqt$0c}6N8kHSOKFB6N7}12*Q3XCI;~!;Q~f%{)71wM1#TrL>sX| z!URTx!T}@>q7|7KxGtf|!_=YEptQiohzL)Z`9W+2lCG?#vc?jOmJEUg0-(+e0|Nu7 zjm4#u=K1M|b_5!v9Nf%}YX+{Zf`UCYvLH!y@bCA3%SRNz>YJ0)c6v%udZg_lv z`d=Hty#`Rf3c>=ldmt=OO9a9K)!PsjsLq10Ky?v>1+oQ(MR~xT5*U|(fk6^1LSUz# z0z*CMOihJO7M0hcpc8vk|NmzI^;p;$_;JCMunFpEe`H`_0QEL47z6~7 ztYYwDU;y`~LA~7tVsIIcAlKkfpOARBAb;QZa8EyDBL*1;ApuaY9Igh=P;g>o;A0RJ z1og$07#JA*87ml=7}yv<*C>F*U9z$>UP4l#{^ zA;8-;GCm;GDLBkIINr}SB-}s9J3b)D-_6s+hFlB`+zg=c3lNJ7 zR0%SG%mj@^7?EVAn`5X?2m{DW6S$cm7Q#%>Xs0R`GyMW0;@xxdlM-`0Q&RIvGD|8M zz~-34%>l6x=E#9l2Bv>O=7dxhq!u$k^jpF8gIEat@(c_NvN+rkoSY9f0OSu_xPB0e zIQt?Q%e$45=#=pQj3Z+^Yg&r;0!kh#6p-O4a$)? z%<*)AxWNss7sNv7RbyaaP{E-$C^a{~Bo*Y5)M8jzdcw^Cu@L5fa+LxubMo^`0*dl0 zKqKd%@brP30b(J{z#ATkd8KKI$t9&lsYRhhIpFZ{hnoXpAzmvjYMrc7Y*#1zsUJwhR7oR@@ic*VH^GXs+GV}95&H#l6Xn!mu z?}1pvnd6pOlv|!yl!}}_qT%iVu@L5{GB7YG z2y^h|TbI~lS_+Ioih^i@=`&y0VsS@;O2l> z2y-+U7#P%X_{%vzw;(aOBseoYFA^Lol;aQ#|vEOA_;vQ^7$5c3U^xJP?aG^L!GEOZ@Un zGSf1X!43?`%!RwJ4{jcag)mQ|D2oSej@97uXx05=1~ zLYRRsju2@GlFt{z%>c0wX5a{4usgtIe@SLiPAVjOfx>1P+#C=KVGh1L3iS_4zE}x2 z2gE{{gD=g1+EHcTP=WYq4crV63tFP>90P$X2+15DTFnM;Za^cgZX+$VsdO z8v}|L(A74OIuFD`n1Rm^p~Z>mpn?FTe>dC>AQnPDj`#q(0hIZ2kn-?8xEUZ8!VDbg z6l?}4PD`K#0mvN(;bwqX2s3b$-C#4E^K)}k^Gd*Rc?7N>#6sxD(Ut}44=Bnn%S=JE z+m6G{0I?8e;OOUsJNw1MnvY;NoPz5Iu@L%kg@dzSd{Am(X=-r^I6A>*oQ0bKVj;}H z6%NjR@s6b>8DIlI;dlYAAH+iF$KwXqyyT+F0wgzFhMNImAm$93Q#yY=jWwmru(LrWaOuSx=P@%xCu80#6p;ZD{X_qGtDV657w@@1J@5?A@t)) z+n}%nRp+n*3lyIB;bwqX2s7}6C&VwVMMe2Vkn-vg+zb$l1T&xx0lDKT+zb#4VFr#e z4-}@5W_LhhadCNmQHm#|%zFVh2gE{{gDamn`^EbQ!&5oLKd<3tfLI7KaI_skZV5}x zOUW;Cttd&&19!*4@%s*L4v2*?2TwW)N=?r!E-6YZ0w*?TIs6fB4v2*?2S+*Tkyw-h z>iWfl0w}K-Qht1an*m}W%)rrJLzn?6j~z=&iZYW*5$(V4aPvScgn2l^2w`4PW?5>H z3%Df-iuYe|b3iPFIob>i44RmA44OHJ5)Ne6U$|Ky7Q!qo1_lNVf@UES0mv){ZrFGi zh=niOf|=IUp9o931HpZjNViejdyWHn8($${sNVz9d;;AVkX2(xgMsR*-55=%;Vh)IfFb79iL(Fl_OU_Tp%u9F5ECIDjVd)1H4iK|IEQDDgld<$;A!fPd7v&~G z$}&(GK=gxH2>m$942XWu;;_V`Oi(M^DYGO9UjBgG4>1eGLYM_|8J2z`#H@hS#O$!d zoYGWC*nrXq#0(G%VFr%!8Dd6oVs1fBD%c^Qc+zKpl{X+3NoE9RRzdnxMsPDgEMmQf-s3!vF5h&dn@!W=UO1_l$%x(e(ftnQz zcNd6-FpE%}fI2yuMX4!{B_&wnBn)mYh=nkhP@JHf3-UHBP9ouEf>;PMapY4Ze;4PM z7A3>e3uv7$B>X@uggH3MQe<-q^7D#QK}~pAofQvv6NrT{3rCv}ZdPzcemN)}9HDhz z65JdR3tq%}|h0P!D)g)j?O+Re|+EzN_DC&oJ_Cxfa|P`Ja&Bhboc zh>9umHl1ZuvPm z`Q@brpa!F7UP@{O#NVLCBgCB`7Q#$W4TWVM1Jz8A)Wnq3B9KeL?kj}555z*4g)2T# z{2Y*nwFMX0rq1R+>am@!W^Q)DF}&6Txn~mGe;^jZESzzO)huWDng`I1Du~-aEQEQu>J*s&P~8UZDS)CA z>|fCC3W%8?7Q#$WOVAj19H99(AiuaIF~=D+=>)A;XT$vtVj;{0wG7QjGS@#XEi*aQ zDIbz&=fTYdu@L6s%x74`6qIox?Pt(VHi-X0EQEPD%XS>*6{V(v3O8_=g7&09%mlFz zX5y@WP|b8ptU#T6Uk>*(h=ni@XE}vxo=1LeY5-_d0F)+I!Oa4(5M~kSHsmY^_A6*} zD#WiK7SZN8C+6fNB_?NMm@A!}>4!OZ}%5M~faYv8G-yh`81%sf;#fp*eC{03qn%)`}wgXUkC)PlsK67Z}5 zq&@}hTY{JaVj;{S5Js-KiJ2&C0`|lG2Vx=2AyAehn*%C(!0F%++$<1_EVDpOAFx?R z;bwtY2(xhY6`@ILa3zQB(ySN}>1!5u0!qs;}HVe6~It_Odh=nkRK-{@y=A=3n zLk$AC=N#M|5DQ@r0r$9N78Rq^ofqNefLI7~2&8Yf(j3Sv7sxH3J#3J$0kIHf;26_` z)tBy|4i9Ky5Xg+{aCd-M2r~$@Dp@c!p#J+5N6_7=ZOgWT-Zy&Sp@1V6tj@)XV3~?h}%Fcgn0zYJ&<`Ab@Nxa+dwRm%tBNS&^8lj=O@HnAQr+b z0%e1zFFf@^>WANOH-T6Pa|o0To_U!inTa`&@$7$aGe9ha8K43m+n5rx-1KschgN@} zGA{tsI4{XehWd|@5jNflVj;{VP@j4^#>0z0xQU?r4%!O~2`>-}VIG0@wU=W&cok7% zZYtb3aJ|D0cOQs_FpogEdF3aCWR^hJw{XGD0I?8e;F#lp^Xvk26EzL_a0Ind=0 zU^j`u%>l6x<`5`Xee;ttb5fCV3&>59aI-)xgjoc_$S*TF8Ia>!b}4FPjoXOaRTZjLdzOG zxVaz}!dwD%2C})33J7YRA>2F=3t=9CdK}d}Xe9*lH)uaSBrHKJgn0zg9;hFO)YE~K z_vUc7fmjH$2-If*sYS*4d5JlY!VBt8E4W!87Q!q7{tPI}%uOt+gq9oN6bNyfE!;d1 z3t=9C_6nMLuv7>!6Li`DB}mE{KINmp~pwH5Zx^LFReF%>%Iz<`Jkv(ai&=M38wtaPvScgn7id54p<)i5q{o zc_0?TJObqx)P0CT9^|$lxLF_;!Yl&yPC!w98hj!fWKJmD91x3WbAk)CSejX!37Xdg?M8x_kq&nU zh=ni%hdUe#3UZ*cHsC59T&HKj%>c0wW=Mf{0AuE3&^klVk~Xm3T)18k3!xXsz8~kr zg2ZId;4CN%K_`(w{10Lgp%=O-2BfzbZZC+1(2HXa7ijJPv_ur_X3%BZ5PLx^V)Pay zf=*-x*;@&>7sNv7#jz#>)UXH5F@OUbq#ty?3dC*@3!xuhe#p#AP4O&A&4tZr*2CQZ zVj;}Hk#0ck<64`LzogI3RAS@Z0i zUrgIGlBFDwO3KZDZ%=<;lc z{U8=``iqh?GRvU$PlVeKVj=Y7hy#%OL1`f;6}0Fa+HL@ymjiJFh=ni%M;w67C`tt{ zTL=4LI@}E)7D7LsF!anV$S(pp0ThR`;QB!UGUaLFio!w->}h=*3aTfyWbba-cg!z^i~DZde942gE{{gCj43 z&4I1&gyqGRa5F$Ggc&&U0muySWD;zi9CYpxBpg62gnk_5H%LEd-&|29czp}RAM4?6 z0I?8e;7E%gGmuu`Ld@6%Hv_~%n1LfML1wrG`9btelhd_427qEizz&^Ns5DTFnr`y2^F%g{q4#M??xA6Fj8Nlb_6hdKge##y)-AQr+5T;YJ2Wrw66&@0o}g?&j+A$ z$RJ?=Vj;}I(I17I<5}#R3gf`al>2ZufmjH$aP)Uz+T)=e3X~2CD4akic|zO&=1a;ka+q9 zHv_~%n1Q2x;#uriQj(aQ0iLx5`Qa~IKZu3Uk7FFfv)CmyEwMDG#4kS&Tt@^amZc&M zIfBC$bSfVtTtF;@nYiK{W+pbXn3))$XMKQJ2(xgMdm#6rwEx)P`avv&ejIg|XEAh# zR%!|)d^zFzK`exRoc4oC|8$UUhEGzaCd-M2)(%SZ*g#HVo`F2e_l={ zsGA4&iyYhx5DQ@juKZUVoSK&sk{^;-ln!201Ij;&a5F$Ggc&&MRnOvJ(57t2{xHxP zlMw%dSO~qi(q>6&E@WH)y53M7Za0X9(2uKbElJIF&PgmThV(EY=~D}C28e|)1DE?t zQggwb1d!i#;d((VgkD_vyd*W(Ek7p(Qb9l~XIT0Mou~;33lNJ0vjP%JGSJL2hPw;I zLYReP>=2Y5Anrmk%P+C0D8C#MMrLsHKrDoLc)|#j+QDhe60R4-Lg>ZO_W-#Cq!;cZ zP&k9m6NQ8gh=ni%S2`_81@EBAZ1NB+)fY+p%0gxnRzL2zed6Jf>;Fg`XuJ1m%`Td z#lrQ1SO~p1#u0oob5ax2Q$6$2z+0?9r%6HL8g%k4#NQwm!W z0I?8yafF#)X%6I!n>4sS5DTFXN1f@PmIm78<5-rMnUk25nFAVv1>2tqHwVN*n1iF7 zhMEKE0>a8i(AmBa|ASZvGjQZz|Dw$F%)G=LP+uHWo`Btv4|fNMg)jq07(&{2o-Sa$ zMR2_!7D6wMGAJOi2y}8(PEcYAXtxq14ol%?fLI7KaP;F)%?L_OEQX#f20Fb_1L;^HRV=wxI1D;4rF#n*(AY%)wEg zL(Kt44_JRATtA3KtbS1O2nk=%8P1S!0kIJJaip_=)S~26&|oV#qd@y4?Ql1MSO_z4 z`2l1`UI}RV9>fh@aQz?_LO+f)7EqL#Uj)i1pm^wo>jkk8dU2G=Fum|{3Uq2J#Qz`` zLO+f&IiM&%D>WIqH)k^3ZV(Hh7gzd*9%lh6*TJ1;ko%{>%>c0wX5eVgqU4R4aJ?WF zLNAWKBt$RR=a6s*oxu(9JBWqQk0aiKL1zP$WR`(~9-Q{(!|eyL5c+Y{?MV6|jsW?8 z5!?(A3tvh=ni%M;-#T<}>r4!*#H-8gz3D#2p|O!VDbc33%Ifynk+HiCa;A zZdhh2X!j7vKcHK5Am)Hr2y<}chu}<5e-G*zkbcnF>Ja@P7D7LcdJjBm57M_C9tI#5 zLLV-B^V3Q|XFP<$=8bm2^@CUl{kYNrcoQHfCqc`gy>R^?7D7LcK6h|QVo?dWQv%fw zIyD~RZx9QiA4fifSF|9%ABNivVj=Y6C_{ovlMrRdF}Pk33!xW>yF)TcbCdECGeJiO zg7YBgrWlC3K`exR9CbWgzjI=82I%-Qko!Sr;zP^;u@Gk9$OCXQg2CISA$j0D+#eto z!VF0U1_p7=HYUnCol9`NAQnO|j{FmnUjk{QfD<1y{;tB!0I?8e;7C6qMTse?xrs&D zuyO=+@;@XDKrDoQ9Ahq^qe+reK_j!E0|i5aK-bcMv5SO{}*w2g3>3o#Lt zol6x=HT@!+?;@%(qiX~#G-U?0~O@1w{Y`7EQEP@{fgB*M4bq_NdgjnAQr+* z9BUI{enmZcGdMFZy)-8gwzuIk+?^m6!c08|1_mtq6Vc6dFUl`10H5gz&2Qh}=7CrU z^Ki^%pqmFaDjw-<(4TPgKrDoLIQsZ-^PrIdDvv=Mq`~B6X3I_K`ewhIMzqP{01F056REZ zDaiyK%nmY(6>b)Yg)oaiJVMMwnxO`b)q~6f-8=#bD-er(^FV16WF9x%eIORXJRD=a z5O)>FyJQw8=a;1xRYHy!gXC2{xLF_;!YmwpKbTo=MVYC2DLIwk0tw_MLAW^}7Q!3? zX$y7~5~#BTswTi`0(2J(B)mW@gjodQ5?;c?3r@B-aV0|_q>3t^T40|Nt=GlU^}i{m|u zgP|=%=pmJ$0v8l!%5b-VSP1h#H~5+3s$YxaeG*Iak~1Kt2bUzKr-GWzt`!A2`9+8| z3u0OwNED*aC8=CfqC#3t<+4w2N|F704XW{XLNI1F;b15Gc!h zGeIk|Ks!^Rn*(AY%pv3+(6QvOoxmV}nZnHh zu@L6qn3sjbTyZ=!wSp#xAf+P6EYK}RkT3$V5M~i@6Vxn-??C2Q!`%d8k!lWPLggLm{ajdef&4WOZVrfrFb7v%2Q$YbGbJT8FE}SN z1)e0q@wO0d9*Bi7kC3}So0uVsZy@Cp=zd8^Is&l}<`4>RpUgbCgFyaU4tEcTg)j$K zT?zA_Z(?3zdMYF>u7aBZVj;}HRe!_HD9tI!%uP+nOmxo4EP!M-kek-R%>%Iz<`MFn zUp{L72i>v>2_q1TcymCzw;-;8g!N{)dq6CNIfTlQfW)H2^rFOq45(oszioq?1!5u0 z!c~vM!V38=BI&*1-Tyux_1;3ULY32EJAq?b`%|~J-Z+7 zCJ+l@4xu!ToLfL)bqH<_h=nkRkb6Q>a|?37r`kf|?nFG3i77{if7Q!4{?KhA)sl~}C zdtI)>-2!3}Wrk;QKv8}P(s=7FxEUZ8!VDbqKrTVP@t`n)1uZyi@50Rhu@Gk9n1^%^ z2nJnOlUY&G3QA3bnDG*B28e|)14p_8n^BaSh_bK>j!;mln zu@L6qSg!#x2b6xn@$(+;1`rFO7mq(&Qj1HRQWL>P7=z9D1UCc3LYRSL3><7f!VHvX z0-N_0ZXSq*Fb_vtAI&^ORDr?1Qf_`j4ZHq^&l3)JRD^*x_O9zg7!f{_fJE@3dBN~ zhbKLP(gMtn;J^a8iyiJR5DQ@rfw1yPEJ5UZF1Q&W7QzeyVFfb-BdmDg=7CrU^9Y0$ z%sh;+0^P<92`dl_VIG07f|&;oD`B|1KrDngIO=Cu9Qx$vr9%P>8h2uFb3iPFIR@Cr z^)bvr4lqz0O2W+pu@L4F$kT9lAqN=9Jkb5*knjSr5a!|NvthUo6ks58>5h92Au5DQ@jo_vOE28zc(<{84x z1F;b1;mK#n<{>-?P1m5i=^^0+Vj;}Klh2UN10@@9`E3q&7l?&02TwZ$mRG_0t>F4W zEQEeM?GTuLj4-l=n+0Ma%)-+SftiI7J`QlRKrDn=c%o5O1m|!!a;bwqX2s3c3 zkpr7ikc!w(7YEl5Vj=Y7@k=mBKYBVzgqs6mAl0}IbGxPA}|p&w6q1RWLtjW|N`OC{V45DQ@j zj&u&*8yxSHS>lpf0G~&xftvwhAfmjH$@W!u8W-e&m zeSRKfzGfoa3=j)p299#EQC2Y;@&I2v?wnzCmy_(Fd4d+ zav9tV5DQ@jjx-H3!!@s@2y!7UG|pGT%>l6x=HOVP?2}lTUs@6XUP+q=c2R0x324g! zsI}mhU*uGjUtSDa7ywEKYv5*sSQMKL*?|pp_j&-&c1Rh>e_P@DK`exR9PtR&4;uUm1Dy~DJ)da@+zb$lNHdTITtV*G z4L1YCLYRSL?+(}hYmv-C*%k!Ox5wdTfmjH$aI}GaK{Hz5n|kw$;CpUQ!OZ}% z5N6=W`%p8=QbCJ)d{WE6haiK(=q%hE5DQ@rjV znG>9voDaI5t`c0>g4}c&ZWf4zFbhZj5^7d{PEIQLdQk9saFAgjv#!C-0kiYK3 z%>c0wX5e=ZXrey92uCyX5m-^0`(h)SJ+I;BfLI7~aFowb_aH7z1cmuKxEUZ8 z!VDbc8q|z17f>Ps>Hi4V4`Lzobt{)OuYu@L$}djPQ9 z`3BXWT9TNOSds|M6R-o3U~O3jR@htsh=ni{Z(Iiy<)@S;gBM(b{KX761H?j@fj8X+ z6y@jUgBq~lVj7&c*x=@XSO|0Qmaovc$IN`hz37~9b3iQO%>iFhkFxLh04v2*?2X9&qC{4=AEY1K0GAN9N;AVhW2s3buw?fEQA?2`Y;eTK@J-OolO8aqbn^F7Q!67c@<<%cxnj$wA`f-LWc&&6i;)E|~e8b8wEx36g z7Q#H7?F4l5K+Ef)>)CbTW`S4;vvB5jh*?g_$0kII~;LHy&b0AIun_&qz1H?j@fwR7WnvtJZmReK{ zK9mAf{ejK0ftv+lAT@aRFd=c)-m7u@Gk9ESn+j0Bsk7 zCqj^0yy516SO{|n_y=STIOaiS_`%Hpu@GhuhXvxW$!mxUNuXs%EZi&*3t<+4G6-T8IOZVvA^~m=h=nkRKw1Q?=>`pz zfWs&mZU%^jFoQrD6p{~5i4eD>!Oa1&NHE7GA0=;O!p#A(NHPayKYtF~91sg(4uLWe za^4>_p7P;lfLI7KaD`22ab|M7V@^_Ou47S2W-;bwwZ2s3e&?O-#Zr{=*@4JfR;;O2l>2y<}tLBZy@r{)zw z+wHw@{U8=XKi>2Ly|K(Y6|x^{0^AG`3tL*^T%!S#b!2>rO)qu{Xc&CiGJ4VVen4`Lzo<4r4|Qw06ffmm%y`) zuvOcTcv%WJ2gE{{gCkr)%jDz1Q+?3#aRppIh=tIPBOfF5Lnov_;kp`b28cz_jDU>% zlKgnbg4CjtQczL{myPS-W`I}-GjOywQO!V^5rl-xM!0z(7Q#Fn?FLlykY)iv{@VgK z3&cX0g(DwA%yI%>hXK0(8tlLAa5F$Ggc&&c&*)~L_z>i#U2yY2EQEP@!wcaiBp*V; zYcJe95DQ@*j0riAJ60=kDAn|n`ZU%^jFavKGyJV(kmL%px<>%+Z!uS&091sg(4vu+#s9O-` zASX;v7+r;%2Vx=2!!d4vVIFeA1etdOZXSq*Fb_u^3Ng>M4Aj*F=eyf*{U8=XKi+V1 zjqr4XkB~#c`ySjJ5DQ@r-ne(ID98sbhjPkHg!Qi;!p#A(5a!@$uR#5SWDatGL(A|d za5F(Hgqe8D7G$>}1v)6qpTo@qu@L6rXfvR?(G$|^2buEfh@SO|0Q zrY|IOkb?>o_8f5YKrDoLc*{d1^N@lG98TPD^FSoTwzkdzKGLj-OHh=ni%N8cKf2i>5RJG2ZGhnoRnAl6x=HO44 z2y@W=s0=p`#6p;dKOG^=^UQP0%*lo1JvF#lAQr+b{AnCv7J8Uz!p#G*5a!`6TiihA z1>_{=rA8nvy#j}w4%|Et3t=9PbxP3q#AY6HC_?udcLYQsAz`$UJxvmk9*@#d8 z!@vS=Hi(5Vo5(OgG8;7vtl{Q@SO|0R z<{kIM%skNCQ&B$rY*Rb9IUp9o9K3l4$sA-KgW|>!ZXSq*Fb{8fM=}rLOGp}Wftv?n zA=IocDa; zW`S4;v+&jrV6(tg4A_hSxEUZ8!VJ9Wzz1|2Wia@7Us&B93^xbFLYRZsExw7_sYRe+ z4@mfi!OZ}%5N6EQDEj{pFijfi!di4xbpfIUp9o9K7ip z$sF|b9S=7T#6p;dH+>_Shn~KZ;O2o?2=nl^V|`OgQbAjFL5oA7=`s~=4v2*?2XDGW zHV2wfKzTR=ZWf4zFbi+k`-4t|EP;-SLgFwRZVrfrFb8jXKr#pFByc?D!Oa4(5N6?Z zQ$T8dK@RvvW>6OsY)&EE91sg(4vsZqkU9xW=BAbuWhR3UnJg$uh4~Z|UL|ldK`exs zIPL-mn-&iyv6%_+HOSm@xVaz}!d(1*22JZF=0cMO*w0mPb3iPFIe6m%+UEk9191@~ zPHW+2fmjH$@TRk%RM4>#DZ%-rc`2aPCD1h605=Q7LYRfOjUAj=0$a@n3ZrJY86XzI z3>X+EY)%i{ z91sg(4&E{$IHMGF3^Q_F)ekoZ#6p;Zw{MGV4sziKjk8H`GeInbnRwe?$YvrHfS_=n z3O5hLLYRj)Z9-3X2dzhiUfTx_w;6D=KrDn=IL-@%rUl4J@i4QHy$o{SY`B>q7Q#%t z<1}dQL-I1%o%7&kf>;PM@#dkB#B|Vp0LS$7qSSQAAub^IErgo|Vj;}J+gAxGO3W)x z&QD2Aamz0PO~OF(_7b>RAQr+byy-4HBeNvcDKQ5c5g<1$hnoXpA06cXW@0d~sauRHgY%Saz5DQ@ruKbNKr!*xq9}+$r;AVhW2r~$} z#W^u26|^)Qnuj*S%>l6x=HM##;BIjS&nbYzWgFZK5DQ@juDStX2565G=ynx|pLW8{ z0kKFl2RxDtF=r3l91sg(4z7F*cMq01=KXN9KrDn=xXN_6S)jTlxU#q;6|zV75ZoLP z3tl6x=HMEGfxE{&AQ;xZJ^?oa#6p-sF#UmdJ3+$uG~5gj ziv%;kDc0wW)KXU0MM*0YS`R`n+0Ma%p#bEgHn_8 zi&9ckLc+jqdH^>E#6p-uFl@pyQ&OSj)?>ICAQr+59OK8JwYnjh1&~4*6wlA#`avv& zemvpglUZB>TJV^blbKusT25X7z0c_-+$<0aVHS?Ff`4^-Xfjd~x00qU(SGai~7Q#F{=?v^X(9K{jsU?Y-Igm9dKj7woSO|0Q@TQUki})tdYc7q7Knu~3r~3mHY>0+GdVj1e7ywNP3&-UKrG_T2|-Is zTyS$hEQC3P!YLvE8bkq!d7uq+pmf9wHw(ltnTU@|q%frnEu@GkCNGB*}yM%NtmmYI_YE~a5+z8>665DQ@@j(#bUyC98|#2mOkK?xh|PD8kv zAQr+*!tR6)>|kkko50Nku@GhwPR|f0XXd4YX0O5SGl!c6Vj;}JF-{6G0MzP<2koHF z%+CYes{uL*9h%py;O2o?2=fT1JE(a`>&k86W`S4;vv8D8kOl#0<8pp*X>M*}5okgj zl-?ZR=73lTb8ysmP;)?e0DN_k2WWyGWR5f391sg(4vsb+k~yiME1<#Q?FKgk#6p;X zV{QX#2Kd+l@FHxGJ3QfLfLI7KaI|$`W`Oppr=+HUnrf*~g>TM*m~5DQ@jjJi-Lf$r~gOU%hhf*eW&@^>8EY!C}!HjaJ-)a; zYmA}#A=^1X_NT!0gIEat_|sEpQBFuccy$x3JWhw317ab}!Eq)I)Ex+OKtbc1pOTrD znG7!Hk<)4x+-wjFVK$Dj0;EzHoDISGCKql7h=ni%M>v6}B=Qn-z$F|goC@IjK`exR z9Q7*JGaiCVKod-mzCkhEJP-?E9*(jF$vn`GO-S6A!OZ}%2$})%OL0MBa;mdWFgRd9 z{;GtV0b(J{z?JVZQgd?R5yw`*yaW#88n{^?7Q!qX_rN$76o59Ng1VkL@vargIi)G! z>#c$_^2KrDnAINA)TW)y>ta0PWe zf>R3;i@=8^gUoD&n+ake%+zOKV9>=}kAY$)s6UjNR}zq!mj}Olr2}prh=ni@M><0> z4>TnNx-JZK?n`1GWDh|%+&mBqVIDDY0y7V~)dZA&K+8Nzi=gN9_QA~tu@GkC7h za*-z}o~Ogj0kII~;3$JY69Dm`c!0DfAo+C`+zb#4VFs@HvNA6jKHh^=sDbmtT)0^v z7Q!rCbsVx;Zka{JC7`?CKz$o%I4yvi2Vx=2!;y}m{>uZ8ML|w!K^O=Muf=flKrDoL z`26aTn3s|Rx(Nk#S_}02m}PLYKrDn=ILb<}+n{EFvOYMxR>I8yu@Gk9=*J+N0ZR8^ zGuFV(0I^6i1ANIEC|uUV%>c0wX5dQOpm>A&1!RU#ViIU{0g|3J!Oa4(5N6?OJAljr zT|Es76p&lC!u5k#2>tldG)O-DN9~ws&;AVhW2s3bm z3&afA88uFsB}I^FT5x{63^xnJLYRf4O$RZ{Ex)wL*%_?=8eBh!h0u>TT)=1Cc%*_> zd%@biH{s@hSO{})v`wJy0G*W+1ojOmFW!Nh0b(J{z)?OSnGv3uQj!7o&waQVAQr+5 z9A!Af48$3Wj>QG3$t9rkV4!mxkKpEkSP1j*x+yp@w;(4Ke1agzUr*s?fLO$u0luIe zT+D#XcmX#9#6p;XV{8H9FVJ0YiMjAa+aPmZ!_5J)h%^U$F$*H$fy{XaHwVN*n1iF7 zfVc<8`hbscvp_6_SvbZAAZCSu#srcRb5LRoQdWF{n+IYc%)^zY^K(jbQ{zE1A<#)) zXg>W8HwVN*n1iF;6b3QJv)DJWpdd8`d=ET0P5y$L17ab}!BNM+%?ZlShwp{|3pWGA zLYN`Jz`!7e*~a#B^mPT>&AK4=m$RKm1 z;pTu?#F~S0^*7jGa&U7%EMm=pwZTEn5lDHU2sa1BLYRX;tpvFEgG*nC87goyKrDnA z_`?QtFJ)3@P9|jZ5)?M-aC1N`ggH3sNoW{{dcq2EkQrKVGe9ha8Tj22T2PQ$*>PH0kMcR$0xrW%^U-`IUp9o9Q^6esk9i>ng{0uNEjQ#%>l6x=HM?Id{WaB zlPjU7fzyo{+#C=KVGjO$=~P+_4P;OlTf)r%u@Gk9Xrn>n$u$pl_Y*YffZbyQHw(l< zn1w&i5x2a7++z-kq6ui5DQ@jj(Hbo_`+`r%`7efopJ$5H{NiwKrDn=`2B=9hzArd zesD8DEQA?2+8|K(!15)iri9%R2ys&&+&mBqVIKZ43IOFTm&B4paJmVBn*m}W%)p-? zpw|xvd z%7otA77I5I#6p;dzdVDEjDos}(6d_-;O2l>2y^g<7p%Sj9cBy}mrjP817ab}!Jjsr z5{pw|lQ2b~BNxGOmI^v z7Knu~3x9bF&M!zNLGoTH+$<0aVHW=Mc0wX5cUToij3XQi@>bPSnB80I`TQBRDe&G%5qF>l@)_fLI7K@Rx7k4qHKfQ3+DW zK*G2MZXSq*Fb}`Kf>J?-fle<5g>O6D3=j)p2LAAc)c3IP?Sh*DVj;}H-@gHu9eK&A z;A{#`f4y*XKrDng`12QLexCq02gE{{gTF2U&;NiO0}7YPa5F$Ggc&&2U_kQ~a{Jk_ z1af&bV$OUT+)NOQSTm8^_LyeQgqsOsAIuRw0rO-}X8FLBE+f;b+MrslxS1F;b1 z;V1+AN^=uIa}*VsxtS%E@heKl^>}o%Tq{6>L!hwQ3pWqMLYRl&ZN7;m$r+h>=@8>Vg%8NA18}oIEQDD& z@*qSr)NQb1uwh|;7;YAbg)j?$IR^13Xw?tsUT}0XkHO6Zu@GkBug4%}I_E>vKDY-A ziHnnP^FS24p5@rxt}Irh|sJ!0F@++&mBqVIGcspwRF`HP5voITgI-5?Xhk zhnopvAT_MZVrfrFb99T77}(o`RVySNcUn~g_{LpA8=RPy3UBuomSz^g&3gzp55z*4hu@u8 z%!Bu+AaVT!ZZ3$0Fc;U@W>Hx{c6vOx9Rl{}bGUvG3!xuZxe3u9mYSE6Ulg926r2e? zv-B0*91sg(4zBQmm;+fyo|*!x>fl$EgWdHOZXSq*Fb`Lq2Q@E08GMrvcybc7jtFel z2e?@v7Q!qXbEPg2vp}mgAYuF&t{=og=*QL1farHBO3X_EO_wI;L(i4_1~&)9LYRZg zPpP0WZ16C2Jj$RRsQms3Hw(lf$t;wCJ&;*{;AVkX2(xgd0VH?92A;s-{2y)(h=ni* zZ~X-EAIu!^02atiOq{U!3=j)p7OpTyaua+I3uF!}+#C=KVGiE%3*sikKo+#k!vQx7 z#6p;bx2*{=3u8bF+@c+#>=v1H?j@fvX%qiZ`%(U1EHniXK$w9n+IYc%){FjfSBi(A6lFWWchm+Olx- zz{bTxBN#3UYx7yd%?7a$X5%PR+)DGncb9>SfjsEiOFOt3AQr+59OFlBF7cq7{J`^Z zpsf~QKRUwA0I?8e;BQ;|<(EK)F+g1~usJSpb3iPFIXL_S39I^M}ngJaohUP^txEUZ8!VLW5PtaAGP&0htW`I}-GjO#X!DTg4+c5yHAH+iF$6Fr2 zQwVhN0XP>!+F8MH^FS!MC ziezRy+)NM)VJ4Aogm&9NB@HA_lHlfnSP1j*)*lEz2P7i(fl}dSfmjH$@Q%I0%>p;0 z!QqwxHwVN*m_t-Lfek)E^FTJ-ED#G}7T$6h<|fbr?D*hR*!X=O+$<0aVU_^{1A`u} zz9@=Wh~Nj6^M!EpKrDoLIPP_ZloK%XJc}WF3&3d^+!s$x0Tm(8IkXbE*&r6eY@*!i zSqz#?%kfPF4J<+CdCTGEfmjIh@RkKIxB5cwu|p~gs^I2s(7nvRM5d3OXhZI-vtHw+C)6 zh=nlMj)8%}hLF2Giy=V)xwkH-5_W4HsI3JJmwveUAQr-WqSA_EadCb!WG}B{QBfkO zF#>Y)B)FL%7Q##%dvhRegoOo^hq!9k5L_lsg_{XtQEH|U*vuJlGeInbnMB2zXR%*? zNqBxyc4l5WXplFxCH0~EQGm4mOY>o&p<;)pwSVqJLkd81F;b15m}EyH(o;m z7S?WE2sabNBH2u6a~RdkC2%uAEE3Ixmph3`nR$qFE|RJfrxbDs6e!Pc zgPRLtAl;pTx@2=j<4Lty4XPC5ex0@&|+;AVnY6qyNjD9GRY z;bwwZ2s4Swo6xJZVa|o+%|mcAK`au@49zP@%q$Ac%S0U~ISMxu#6p-!RQ(OhM{rXS zISCX7C*Wp-SO~LmobQR6Rv|oCzc{!w2{O|IGWRsxTo4Okt}O!tgEgVL&oQSwu@c-y zgxKI%3~dk~+WzO@=7U%W^NGs;C?g<{Gnt{=og=*KaS?xAOF}DxL*Pq)C7mc54ag17Qzf1ZUEoFlA7Y_=>nbO{ted;Vj=Y782f_i2k+vC z&%OVHn*m}W%)rr(0OzK>lZ*x~v?EQEes=_1%AJ~%nQ0KDi6?xAIDr7$bMLB5}rUo=J3MJ0kII~;K;`ya~ul_f>R4&Aq?HaEC4qL#6p;Z$2|~p zf>Vo&GxPIcdv=B4=73lTb8wUg2=_qGhlDQk2d7&xxLF_;!Yn*t903|q1Vs`kY$W0O zK`exR9OK6zx4^>KIVUv{zFtiRZVrfrFbBtaN{~6wNfX3A7kRiDAQr+59OJeDp-#bJ z&cX2^kpYmsVoGrRAQnPDjywp{AMETO;0kMlslv?wu@Gk9C`({w__~HTx;Tb7g5yL3 zZU%^jFauW^4fO}ijQB9upkPmbKd@QaaI-)xgjqP+!!Y;wxrT)M2YJT_1o^vp`nU$i zJNo$ehr7Cf&D4XN31UIa%wiA~&D!zpQsL@Aw`DU;p3A7zRxmO!FeF>WloqEJ6~`23 zB$nsJq@)&Sm*f}36ePwMmw<*7;>!#z#XpuJq$W~^? zI8cP3U_G!=Dxi%Z3``6R49tuzT8s>5Kuowgy%f;i0|=KHtj1i2fq|WYfuWX912n7z z+U*zYZee0(Zl)m!vKfR`AR?wOFo!wixKVW=7-33PJ|D+ECDAPiMw zaD@@X17W=)gcDi7E_9G*U;yRD%hyicfw&w*g5+Q{#EYPk8?;*zBm)ugV_;wajV&NV zK%;gZ3=9kik%?f#Cp(h&3Yv!wnRX zNJa*R4{#A=pR$5|3My|veu}hC_GSRbA&6H3if{%729O#i24r1qD7so6bM8dw>VfJ4 zsX^5Rifv{_m|feaT#H2LS`5_%QiH0C1I4cF(|cH?`j)y0jX>(b|}hX`FvkOaX1QiH0C2St}n%>B;@T@p}T zAT_AEcu{m^`RrMZ(4_~}1yX~miw{K?zczy~LYE6v7f21NE`AhU|HRiELgH?`j z)g^$UYwg*Ood{jUP+cH3sJaAEbUiz!BZ|<~1=R&ogQ`miMVDWlO9n#M5~wba8dP1v zD7s=})#f8~?S|?CsX^5RO1FsA`(cUIHH5CmP+cH3sJcW^?79pgQ`m$MOU}#dpm?KC#Wuv8dP1Nk_+K4A<;L75xQcbxD+6*4X(bcuk9dW?CHB|etcL+EOQ>H?`j)uoM+QyjjjA;t1Cs4kEiR9&DpGs3O~(`q6RcI|=c0;xgO z1sdH#=(=IOcRE7XO{gxA8dP1N@jryFJ?TZ|2wlIRxH?`j)dd<|M(ARC&su`el@HYgQiG}sG^dBq<>@-N z8KG+;R2N7MsxHuo9zvJ;A$6pBc?(n*NDZnkP`?DBYq{ykDG0kRLv?}Fpy~phHiyu4 zs_Z>dP4p3}3#0~B7ijJRp^H=gRV>0T&81yX~m3$)S!nA7GS z!mdWBE|3~jU7*zy2wjG+dVe8w&4lU#sX^5Rng>AWTAUMKkI=OlstcqBRTpR^9-+&V zVa-#7u5(abAT_AEKy%j!T{qJG*CTYjgz5sRLDdDCsYmFFzqoV{LKiEjNzTB)08)dh z%K@ddxx;-2sXUZ{>H?`j)#Zqy>)|Jc1qi!Lpt?Y6P<4SimIxQF;gLt`r+{|!gVF{_ z4XQ3@6uW{>Z)-r)df<6s>>ZkS3%i*afDrapt?Y6P<4TNtq2$HxX5RW&~+24 z3#0~B7igpsp)0oWe>g%HX#W5xG(c)lb$OwNLoxqu3QuzF-4FR|-@YNDZnk(3l;*Y@YkpkzC4{a_s4kEiR9yuqx*B$OS0HrNLUn=Epz10_(WS^MEP~KA4XO*I22~em z&lkd9{vQgE#-lbvb%E5N>H^IPAatEmP(fMBL?*MeA!9E86H@9IMCf`J`0Y5tE>);5kQ!87RVXf8wfow0gf1hf zE|3~jUDYVMZXKyELg;dV>H?`j)m4L{OK)PY1VUE?R2N7Ms;*iTUEbdek@_jwP+cH3 zsJiMYSLv?}Fpz3Ns(KX|7e;C4FbD_FGYEX4G zqUh2MP)4$AJyaJ+4XUmt6kRtL`XY^{9)#)wsX^7%jG}Ahsl{6nF1!NO1yX~ms|7{Z zzRts42whL1xyphJ1 zvLnTE8&nra4XUm_6kQQqQo0C#O@`_MsX^7%kD{x;ILj5GYavt@NDZnk(0nbTWLxrK zPCr7|2BkQ!87Q&Dt%3w@P@(8UOv24rAh0I5OMH4R0V zsCXJHLYF917f21NuIVVc;ySx*5V};LxKdfb z=z!`1sX^5>7e!azm(Je^yH-JUfz+Vtnunrm8-H;cLf2uaE|3~jUGq_N{dXzPM(DZ) z)df<6s%rs?u4OZ7ULtgTgz5sRLDjVoMc0fAtVp9GJfMkX1_lO@8dP12P;@;k_e07l zT2NgeHK@84qv(oy0osNGogij#fa(INLDjVcMc4E>MduLy3V`YYsX^7X6h)T_d!hhB zR|-@YNDZp4WhlC~K5n>(&{YQ21yX~mYdMOp%ssD>dN(tnxzIU4iNXsX^7X8bz0(XByI& z`D3UqkQ!87YfyAa@~oCcxbPQL7f21NuC*w-GOS-IBXseAmMSnXFo4vc>RN}Qi|2N@ z4?>qJR2N7Ms;>1Yy6pS!BF)1(L3M%Dpz7LyqU%D74bljVA5<4e4XUnNwo z>H?`j)wLBxS5J3C2SV2>s4kEiR9)Lpbd?C5bVumg0o4UkgQ{ygimrA8?rwyx%TQe) zHK@9Fpy&#HbU+ND>m5`VNDZp4ohZ7*8*UH?`j)wLHz*Q4<5NV63&P+cH3 zsJix{=qgX%gS7gn5ULBL236O76kRjVaIzypqX()Bqy|;j0Tf*;d>0|Lh-N``fz+Vt zI*6hxVx3Dq!mc$?T_826x(=b}I%?H&1)*yvR2N7Ms;poN$NDZp4V<@`hJWeBx5xs@#0;xgObsR-k z+}%aC2)kH8OSc#p7(i-Jb)7)b#Q+Ad+8i{>1QGzLLDh8mG_OL7h8Db5d)ex-9=q>;eAP+cH3sJb4Y=<=MvjMO*31l0vngR1Kximo14Ris(Yr%+uWHK@8Cq3ALT zSs#iBjlWP`AT_AE9;4`TPZe8^(8Uj0Hp{@k08)dh>j{c3MFsck2wjp;T_826x}Kuw zs@=zoG*6@r)df<6s_PkwuJFS7NNdcjp}Ih7P<1^=(N*cwjWh%91=R&ogR1KViZ032 z_a71d3WMqbsX^8C5=9s9um4DGfMlpHkQ!87uTXSJnK2-(#3+L50;xgO^%_N2rj!%X z9AXDl7f21Nt~V&UYM6pO5&oJB)df<6s_QL^uGKcz4G_9kKy`uCpz3;uqN`HlTP;G@ zZm2Gh8dP1Ny&8xT;KeqD{|H^Dp}Ih7P<4U!X&`jv9qBiUGDON@a7X%)9AR2N7Ms;pgR1KbiY^0J zE2KVbHB=W!4XUoMD7wVgenl#yra*Op)S&A6hN7$Jl;=By3%5dbfz+Vt`i`Qjyy7WR z%i$JO7f21Nt{*76Tsy3hMqvIyb%E5N>iUVI>zsqpE`$r^K+EkJ7#KimP<8!6(G{xH zhBN}>0M!LjgR1K{imo#TqDWyF4b=rwgR1Kfimt_ss^1VUEP?6*sX^8C7e&|WrAkP% z6`&b3P-_{a236NT6kWnIB9L}Ttc2PHQiH1NKZ>ru=5LWk4^BdLfz+Vt0&QbM3Z@4k;_EzA7f21NE>09( zrr)O_^(%itb%E5N>f%Dt_1-963SpNRXk!Wk0|Q76sxEF6U1_0_NNW!apt?Y6P<8R3 z=t}t&h7`-5P+cH3sJeJjbTQ5aoqY{UQ3+68AT_AE_)v899h!%BNDZo8Vko-yI=w~ejb=l2fz+Vt5=YV1os)?)-a84Z3#0~BmjsHg zcidMiL4E+0(+mtdpt?Y6P<2V7=(_T)3TeN?GpH_*8dP0UD7t0@1U^F8#R}St#lXM- zQiG~X8b#MEg)%;bE_J9bkQ!87pnb83a(;RCexyAkQ!87@+i7)T>6W&7Ha}j7f21NE(H`__jCI?5iVQ})df<6 zs!I_?*TlA(#Ry%;p}Ih7P<1Jx=&IK|xe=l34pbLN4XQ3>6kTtm0+D7AK0s>kU#HARDR+qy|-&28yod*S;gQ51XL6Kx$BRX`<-LnCrY5;lf!^T_826y0lPq z1+86!G%B(kstcqBRhKr3t_QFB&LiwP2h{~qgQ`mhMVEhR57MgO7f@XwHK@9DQFMLt zjW$8p#RS?S$-uw>QiG~X4@H-jkO5N9R|cvJqy|-&K8miElr1+Ac9}qRfz+VtGCk}UM};r)wI!j z1wz*xs4kEiR9z-0x|+?rklJippt?Y6P<5H2=(@5{;{(F3Q&3$XHK@AGP;|v-Dk8P? z-avJM)S&7zN6~d;FK8bztZl;r+6W8U|AkQkSfJ?2k^6_#lahhz0;xf@%MwLb+&hI{ zgug7Ix=>V*JQ2dNUJ0EL3M%Dpz5+m(e>%vGo<;H zyHH&qHK@8AP;@Q4Ww{&S!p~4$AT_AE98q*h*u^7_Z*YUQJ2NmafYhMsazfGdZQ?7W z(H<43E|3~jUCt=Fw9Yjm%?8>)b%E5N>T*HR<-gK)Ey7=cP+cH3sJdKHbWQ#ihBUvN z2Gs>pgR097MHlx;XQcU*N~kW78dP2GD7uc^U52#6q#LRWqy|-&2a2u}`)6-L_-h4J z7f21NE>9F)i+w*Lty?|})df<6s>=&S7n8_;q*YZnpt?Y6P<45u=rTN}?}l*UN2o54 z8dP0AD7rrJ_A4WF{fFuTsX^7{i=xXqUSt(Qmk4MBJp%&+NDZnkKNMXJDvy!&nwda# zfz+Vt@<-7%>zX%Goe~7q1yX~mD*#28*7F3U9oAV;T_826x&l#jdG9bl+S%Fw)df<6 zsw)UZ*WaqoNWFlCP+cH3sJentbg{&{BAu3S0ICb5231!GimuWn3y^BPn^0XKHK@8m zQFM8gT|*j!eGkc4^1pz4Z3vFpkAA4n@_8liT9 z)S&8$M$yI1{t#*J(n6>%kQ!87F(|suy*(_02#wuPT_826x?)ju9bf(hY4z+ys4kEi zR9$f>x}FJ4M=C|{L3M%Dpz4Z8(RKWDKT>P?8&nra4XUmL6kQ${WRTWK^MH=E0G;cE z(Mm}~(G|nqjAT_AE zQc!e7Jds4|r&L3Afz+VtN=4CS=PB?5;lf_1E|3~jU1=z~!mqDK>LIRz>H?`j)s>E- zi@$O|QZM@`R2N7Ms;&$aT{SnhA*Vy zl5$y#R37?6b%E5N>dHgW)%9&V(kO8XR2N7Ms;+z#T~21fRR|Z>L3M%Dpz10>(WPpp zjWnh=391XE231!fimvZ1Vn{0%7D9D_)S&7rLeW(+uNG;C+HR;WkQ!87#VESYZ}&!; z8MzGA1yX~m3v`+qqQqVxB#5*t^C?spNDZp4QWU$csa{5ErF@0z0;xgORfeK#N~9ao zdH?`j)df0?5aBP|nLbGELo=u@kQ!87l_+){ z{dN^;51j{87f21Nt|}B=u@9_}=IEoLx^qqDhwQZI|b%E5N>Z(K0<+#NHX}|dus4kEiR9*Eby0`^Wk@~Rz zp}Ih7P<1t+=!*T;g|t#v40Pxb0|Ns{4XUn26kV1K?MN;(gz5sRLDkiSqU)N5G19!b zJ5(1)4XUnY6kS~95lANsr9*Xr)S&8WLD9u=-VH?`j)zyol>%ezL6@*>2P+cH3sJi-4bn*SVkJKXShw1{U zLDkidqN~;D8q&(NrBGcUHK@8Kpy-lW0jcjn?QsT%-B4X1HK@8KqUcgMl8m&|{|rbC zLUn=Epz4~6qU$VA2-4}DMo?WKHK@9#q3GJURsd=Jh8I*9NDZp4=_tD5nU?-Rq>U7) zE|3~jT{BR0$#7jqnontf>H?`j)io1ES7mNC(hR~}s4kEiR9&-BbXB~{LYf=h3e^Qt zgQ{ybimvI0?jf}SE<<&J)S&8`gQDxx(xlml(0BpW1yX~mYc7f|@3~u%<~Z0u2hK4t zFo4vc>Y9h5>-3k&NNdcrp}Ih7P<72m(KXfA2x&Kg6I2&S4XUmMD7yI8Fe06n5Czo* zQiG~%A&M@mR7s>&A9+w+AT_AE7NO{3_0>Y!O;8Wj1yX~m3v`w(qD7RTH4SMW#}ue8 zkQ!87OHk~JNr#*W1}Qf-Ky`uCpz2zRqU*C#GSaH5V^CcnHK@9lq3D|CdLL;W(KV

evmqqmEY9f26E|3~jU8_-a?fvuzX$CwJstcqBRo5C6T?azrr&=DgBFd%E}(7E|3~j zT^mqz-I(ft)C;%+)df<6s%s;PuA4%RNV|}}L3M%Dpz7L$qRUHa3(}k~59r8A1_lO@ z8dP1IQFLWXPeeM;K@O@5qy|;j78G5xkL^NQ&7ud@1yX~mYb%PbZzq-`t!VXw>H?`j z)wK;p*M;SoNNGMBstcqBRo8YDU0V-aMXF(&p}Ih7P<8D<(Z%zF2`SCbfa(INLDjVr zMOWtheMtFhJyaJ+4XUnPD7rkImwO@Vl*3S6AT_AEcBAOhQISR(fw>RW1yX~mYY&R9 z$?K&H5qAB9>H?`j)wLHzm)7(%ZxFg9K*y0XFff4Bpy~phBaSGs`+TzQB6R6Nb%E5N z>e`QDSKD^37=$iIs4kEiR9y#9bY)2FN1D5dg6aaPLDh8-MVEN_45WS81yEfeHK@7{ zq3C+@+7YRh(gW26QiH1NFp4g@xsQ?Z*D|OskQ!87M^JRVdwv~h9N+*{7f21NuA?Zr zW?A2EL4@I5s4kEiR9(kVbZw0}$Ai%I1F8$8236N_6kWXa%t+%l0-!@@LHoZjYN8V; zx{g>>{zKTM4AlivgKF1F6kXpg*ajkWSwVGy)S&7*g`!J_;UChPr9h}IkQ!87r%`k* zj6aGr|CIsN1yX~m>kNvn7Gu@z2p85sb%E5N>N<;}i?^E_siij=stcqBRo6KbU3@jV zrx126gX#jQLDh90Mb{-|H>4fAd!V{NYEX57PWMOT<<8e9kXBWlgX#jQLDh8;#V*<2 zYe?(9UO;t$)S&9RgrdvfvOLl*zdul2AT_AEE~DsTQa*^ZTSpLdj4=ZP14s?3F7Qni z@D<1b(ZO7ZFf@Vc0;xgObrr>~h#bF32wlEVT_826x~`$T=z1736Y2boUZ^gR8dP03QFPs_S%tI%bUsuUNDZp4TPV6h zw=6~)?_Ceo1yX~m>o$t6rQoYdVe3+kKy`uCpz6AVqU+9za-{i`YfxPvHK@AoqUd^X zdBzPy7=D530;xgObq__?qJT=Ikmm*+ti!;-08)dh>pqIEAFI@m_Ag6Ab%E5N>Uw~p z>v&-gQeM`F>H?`j)%6fXSB$_ZqyvR4XUokD7v(s zWg+bxuZQXasX^8C1Xb51F{BpJRH!bH8dP0RQFJl*86%BiZG-9psX^8C3`N)G^_!9A zQ?5dFfz+VtdXA#2>cvTlXj8dP1cQFNU-v<0c97XsAs)85EU#d`DAT_AEzM$x`dwiUYJtGihk zX}4)SR2N7Ms;+M+x~_UUBAvq54AlivgR1L0imvz{{78G-mqK-c)S&A6fuc*HIv#0e zQFPtC{T}JOWgn<6kQ!87|4?+rt+IT8 zaA7i37f21NuKy^yN-lIGji$Cjb%E5N>H=MFg(v~))VIVV>{<%d1yX~mi;)R*uNic6 zKEpNnyjuuehoHJZYEX57Zhu19mFaQX7oqD0R2N7MsxD>}yIhq!kwzWgLUn=Epz2~l z(e>@+t3HHX44~^EK=*%v*A^k~PhmyTWt-fFG*Tf4)df<6Y8M-dE{#YFq&AxsR2N7M zsxEdET`tuVI1nxjgz5sRLDj{9qU+Dk|492`i=nzeYEX4?qUfsX@!W>6YXVdkNDZnk zE)-p&1~ZY`8yldyKx$BRaii!`*IkR$|GEg(1yX~miw8y5z0Vd%t(3n|T_826x_D7^ zX|eoEMfgh{bbSW{0|Q76sxCehUDJ*{M4CbHfa(INLDj{NqRXsn5mH_*f$9ROLDeOI zqHAL57NpcW52_2K2340Jimr{1jhPYt0?iD9>MxKQR9!+Sy8I@JBF!&fhuQ^FgQ`my zMOU7~4WyF{ze9C_)S&7TLD7}VaS>^xT?ljq3TXcqM*b2-(Umv-h$g~cYEWGuHK=xp zq3H4oIfQh2rxR2cNDZnkaTHyPCmJH1f*ual1yX~m3v|~UqKuMMTZXh!HxH@{qy|-& zB#K@0_f{i~9yCLBfz+Vtl0wln>vt2{kwQiG~X8AVsY9?*R{u>SH)s4kEiR9z}4x)%R+LmH_#1l0vngQ`mvMVH?f z7NngfH=(*fYEX5lq3GJVpciRw^b1rMNDZnkbrfB$^^=j-!3uybCSqV<0I5OMrGcW$ zI%PM~jE@>r7f21NE=?3&qFv@lvoH=&T_826y0lPq9d7YO8v6=`>H?`j)uoN1OY@#3 z(wIXYR2N7MsxBQAUBMo=k;bFipt?Y6P<82|=t`SA3u(R0N~kW78dP1Nn=KJ#)P!g6 zkoLo#g6aaPLDi*?V%PUMiAW>2PocU%YEX3M}#oC2iw|wBu30lqysgNDZnk8x&og1r|uL>;TmTQiH0?7Dd;S#vY`z;G&?q zKx$BR*`erqxj_bL=RzS=7f21NE_)PRjXgC;>*rgbxH?`j z)#Zqy%h~@s(g_CZpt?Y6P<1(>=z6{264LzFX{auc8dP1*D7viIrXt-c`v|HFqy|+N z=pJ1}8O6!ijI_i0J5(1)4XQ3z6uV~p=R=x7;00YJ$H2e)&K?|x2 zqy|-&JBluaAT_AE zyijzVbUcByroA1i3#0~Bmp6(o^>?*M{@xIy;8^~+2g>2|I4P+cH3sJcQ?bUDsVMcNl|45|yH231!W zimur$Y)JL;W2i2W8dP23D7s3uHzS2SBj~C|1_lO@8dO~oD7s44Y?4NVp(IonNDZp4 zNEBTwOKu>I+}c2Ofz+VtibBz~_w@;+d%z>0xH?`j)djjC z9FaC|^pqgAdlx}s4kEiR9*2X zx&%-2A(hyFp}Ih7P<17s=-Sq>W?37<9EJX#W>R`!Eqj*WCl0Nar7#L3M%DpxTv$ zqU(%s3eqZq7^p6g8dP1$D7uO>k0Q0%>Y=(oYEX5hpy(3t;YZrbITxx6qy|-2DvGYh ztC)~hWA26O0;xgOm4>2gQ{fk+{dzZ{xQFJx4 zoo^7T+%AT_AE@=$br-m(wr zc9OYJT_826y7EzUT^I8}+I_zZstcqBRaXIut~|Z@Nc-q-L3M%Dpz10_(PiTYIXe$D zYRJIA2D*fnfq?;}231!PimtaN$B|AI5QpjlsX^6MjG~K!Sqf>cO%tjMqy|-235qW3 zlA}mt<_=I@AT_AEN>OwPH!~vbq05Hq0;xgORfeML;B*C~-Boo^T_826y2?>>J^5yg zberb{s4kEiR9zJ)x)#SuAdRzag6aaPLDf}>qRT}j8R-PnV^CcnHK@9(P;@m;>__VB z-Gb@@sX^6MjiSpUR2=D~weL_}AT_AEYEX1N?X7h}lmM!r3yK*S7(i-Jb=9Ki;#N9= zwA0@TstcqBRaYH~u2`ehNWIYns4kEiR9*Ebx?;AjLOOB15vmKM231!BimrxN2a#^0 zUJTU*QiH0i5k;5fB{8Hr0I5OM)q`|mH8#2-?c{QR>H?`j)zyZgi_6m=X(v}4 zR2N7Ms;+hvUHN*Sk!CCEpt?Y6P<3^n=z3oljZ|*Thw1{ULDkiXqN_{tInwz2UZ^gR z8dP0fD7s?r=_0M~y$IC>QiH0i8%0<5yk|(Kpg)J|0;xgO)q|qz-OnhbQOCbfT_826 zx_VJ`?RaU4G;1aSy2_h@fdQljRaYO1E{mNLKOyq6CR7(l4XUnw6kSd?=OB#(*g$oG z)S&8`fTBy}ix{0J0;xgO zH3vo4pYj-_vNr~*3#0~B*IX1`I_0;K&Iqc7>H?`j)in=Am+psKNOzk~hUx;TLDe-M zMc4BEmypi=UJ2C&QiG~%0gA4f0uPXS90#GgKx$BREkx0^`hgu%E9E9s7f21Nu0<%i zT>ZO|PGRN`P3-unKNT@E58dP1&QFH~qmPA?|kqp%ZQiG~%1&S_{o~20h z%T-WaAT_AER-)+Y-BN_K&U_M77f21Nu2m?y*lMbgTCi)NxZVv;}PLpn^E|3~j zU0YFft-ienshnQ`)df<6s%smHE}_TSNG0}8s4kEiR9)Lqbd|SUM=C`xL3M%Dpz7Lz zqHCsh64H$7E2u7z8dP07QFQ(BxrcPVD2p2;ZGhCE>e_{(YgNqN*ND1O3aSgF236N? z6kX@78G{kJOrg3!YEX6ULD8i+Ws4(1mlsqQNDZp4y(qd|K64=5pp*pF1yX~mYafcP zzo+jb)kI}bT_826y7r^!nz1Gsscq8()df<6s_OuXt}^CpNHy#Vs4kEiR9y#AbP1GxKy`uCpz1n=qU%YI64E&KZKy7g8dP0}QFJxFo`N~x8 zLv?}Fpz1n}qDyY!1f-M6L3ize!XBgsRo595UDd~QkXl4

~1Ppz1n{qHAjAOr#bO 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�juF)}n*GcYh5Wn^doh4V2+hK4i-28I)ikh1p- zBcvU778+J5j0_C+Xkk^w#K7Rnz`&5m#K5o~5mtz_0-m9Rrj)$2d~kRjKn^7Y8ya3a zz?C1Ub%)+s0<{4yFfcGcQV^tigtY-cfpY`ix`4Ed2FE%` zVg&<^x*QaT7D$aqP#A;a5R@WxpyI2U7#cv~zJ`gR!Iy!7VFMFGLo6u2GBGq{gX&2p zhK5d1J;}t-07`V*nHU;oFfcIeU}9*P&%nU2i;1CO83O~uK_-TVwG0dlN0=BIwu9oH ziJ<`$PA8cd8bG0Onu(#|0|NuY8778?uM7+f=a?88KrN&5ObiX8j0_AHnHUaN zLxVl2USwiuaA#y-xX#4T;18-7nHU;CEt*?Q3=PSQ3=DUe7#cvMeK&BkbKR>$iQHOmR7SEL2Y{mhCoIJh89Fx1>aZ- zP79y|1Ry63xK@A@>H<(riAbO@7Br#GU52$gHk=Ht5<>{6%M*2 z4OAq6Fr+L6bpatJGBAL`0+gn>7#J90pn^3#BGYJAr3=JSBiZU@Ym@_gkh%qrV*f26MNI>Hth>?N87A+1y zO?({&28Kfn3=DG+ap00#lA2rsEn6Xno&+D9h4~)Rqrk}XpvEuA&ycDGMLLB+ z4cb#`1&17R?10k){9srKXuktuNN!>Ue0?*he*-GHAu^fZ_Bp8bTZrC1M~>D+1_p+B zNO*(F08k=;^mvLBa|?1(!JYfPxfc{`Nod&}+;c^AzY!@dBrzRaMu0kz5Mv=}08&aYfD$(- zIpIj$kfZ?agCU0}C@w&00o0(I0u5jbXkB5+#Ly4~n%RTa6^={{4do0B49-jp4Sfs@ z44zC34ObZ$7`&Mn8t#C`ftVN?R2dl3wcplRne0|P@GTH48E0L@%7Fo4E}8WCv+ zQUpLk0<@niGcP%gE3G3afw6Hkl+NXj~4p{SJydMaXy@!)L^J z6*xbFLd!GHI~a1esV`D-1`0WljWE|E(N2uukqK}`1J0cw&wD~|7xGMD0F{v-k3*VH z$Yms`bq^|bAlVGsDgtFp69(8Y6QsTbU8)4WO$(HbKmo)IZiXQw8IVg+T?Ph*Hi!d3 z1DT)zgV=x=$OOj-q^tzBe;|q(7(ihIiW7bY1_n^Z1BrJsF*Ja}tA~l9L6d=jp&!(y zU|?XF0BTb(FfdGFVrYnBU|^Wc1nFB$VS==iXD~4|fLt+)iJ@U80|UcsCWZ!3UYyIs z(6E|;fngpKL&IhU28KmU3=Ml37#Nl?F*F=xU|?7Z%?~rds|8TwZVt381&skRaWg~O;bzQ`cDMyIq#bS#8c$+iU~poFw8Pz)A?$!+k*G zN{kE)zRZwzxIZ(b9UcT4Ut?ro2nLO>F)}cOg2vYv85qJq<7KRtEoWS;6XZGr z6gHqZL9R1cm?3orJ2Rxt;9`c<+uWe>Rt5$JUS>$0!N&}#Gx(Vyb%roAq|OipjVCiO zFo-cTG|XjSV31&DXaEfeNHQ}tfLgt>pnS*xo;3iES1CaA52zloL~BF6W?*0djpJMb zty)90p}+^;LZ(r`M<9YOJ_l76p!on$(S?Sgl?7<<8&p||@4h1yn2x^HrfCskni_0>h!+PL0D{}t@W@zwZ zU|{G3l`o*NIcA22A_fMAUS@`dN>H86%+S!wz`!t(nW3Q{R9Az>=|SV0%nS{O85kI* zL&L8XlrPZ257bTr%>{zmRZ9@_0?wIbCo z$Sp3AJ3!%pJXTi<8b=1LNMwPu7b{p88q66O7^+wx>8%C|N^fA(LfD(x65ks3ykfc7aR<^|2vUG}u%~tqz_p1DOhH&O>A&rXop$ zk}#ra2-b|;3;@sIfyO-{O@6REa=!ySO$ZtrfyhIQM^ON31A*F|c-laqZUrcDHOBwWBJl7ItUhe1#flxiX7fo1VH7ZgRHt^vd>i0>df zh{1+|a{{QmjexGi1tl|3ItAqeP~3s$$UtI?SQr{WeTKy>3=N=EvV{fGKiUSGR{_oc zu|UTAcYx+O7#JA#urM@$)>iCgVQ82Jng?Woj9DE5&95*pFdSxKX!rse`v%PqF)}b5 z2jwf!ydVohgEweikOev)$O0L!JkP?=Pz{<71kGbHGB8{Q&BK7^|5z9rc$gR%uCqYK zC2xS{ub3DZZn7{mC^0cG+y>1zF)=XQ0nOJiF)-W%%{zhS16ddvfC#8 zurM^JFf%ZGVPR-6W@cdc#=_9x#LU3(orR$xkePwu2Ma?(5;FtC9~Op&e9(L#3qwOC zXjGGxpV`XTF1I_cXGBl)v=J!|`8d_Nx7{pi^8s3BE_gEPkzOgVcNU$7$gnarNU}08$gwgs$bshhSRwO$imVI`_N)vH%B&0x@vICC zYOD+mg`oL9R)&TORt5$QR)&T~(EJ`NL&Ho~1_nKlJ**52`m78Me_0tA3|JW&SlAdC z>{%HaK;@hRE2P~ym4Si54Xr$^g7!f{Dfu9x-URL0%Yo!P@We_;emHow0aPdjTs(rh zsGxL-hM~nHB4@#>15ig8RFHw}LYw9S*M}fEm{}lqfzm%{9jXpg@HHbt1E?H&!^qG8 z%A4I!<#CWK2!q@U@;4i(e+3c%t%U;R zBT!$R1=7yy0Od~x28J$B{sGnhpnS@}z|aS+_du15GqK?S>0AtWK!D0WLg6qG8V-}7 z;V=yv4l|(PFdG^UbD-hi1j-9&;c$_Mfx!zj2gJj`un7^#Nat#U8al`&F*Fhw7#JAa znZT2oHy9Zh{1}-SFvk)=qt*;e3=E)Vfgd9*-Ggc)4kiW$b^(ySV(=m$0VW0pP(#3v z5nOv9wF5x4g#=s{Qd=NNgPI8nOprA~evFXOQt*g5sK(M@f{ZBnF{TwI=B9#9GKB2o z0uN6az-5cURT*T=7BmuN!NkC@0pdEajB{d6PEulWHh5acfr)_uG!o^vK0=p70W-*zbv&V2Xr?SsI37Su!5Ke3SO{f5HCW^1eGzM7z5=rKiJ|g z&}cbmZ4^WwJZM1ErjX z$8ZsfsVNXA!j@%$+CHF00K^bT@<1^K z~5D729VM#&_Wa=S;6&y z5)1=q37QPtR7e^_J-`svXi)NiwLMXT(l@a<8$4$q!N|Y>2}y`gA<3s0+$;rE3y^4r z$e~07C>?;Z_h)c4K-|Ir3SiI#GJ4RUgdZqvgJzH*ick^@QfdRc4zvgZ)Odtt0Z@Vh zt;GXnMNnY|YVbilhSc5zMG&Z}LyKmx;jmZ+1r4Zy2{8fUKO`eSi4fK*_k*^Vq231v z9Vo%W)+WLn2g{$3)Bwq#Aah`g9bx7`f*6ucz*Q8uZk_?Eh(Q^Pfq?;3hJxxSQ1_?@ zD*l;+p#d~q`;~*C0o3aL#sOLP`kjNJ0hDEba4}hFwey45pk64SPWSPfmu0!%Pee7MzeZ zYnGf04VRf17_2xM8g4T&Fj#XkG(2KrV6f+8X!rms);Sp({xUHzIB_yGa4|D5ICC;I zNHa4qxPsit%)sEm$%b22o%VrF0n;ACj{$IQSG#L3X0 z$-=-8%*oJT&ceVD%E{0W!ot81#>vo-#KOQ3$;r@A#KOQ3&B@SE&BDMC%gNBt$-=-8 z&&klx&BDNt2#OyT28JX~hK7wS3=GMf3=NxE7#LDG85+*8FfgQZLe{KhaxyerWno~* z;$&#J!@|Ij&B@U4goS}22NX{%3=FxP3=Lmc7#J!z85)>b85k-#85($585rs~85-1C z85kNk85%5E85lY^85*{+GB9* zPI2jr?a4;}j z1o@wXf#EVJ9yu5oZi3WvGBDicWN2{bWMH_%$P(D0m-f#DM;Lqil71H)%dhK5uw28M4Sd$<@FesVH2EaPHe_yvkrE(V6b zp!^0JXysyP_{qhU{K^@XvpGWU{K~_Xei)eU{K*=XlUSJ zU{K>?XlUbMU{L2`Xz1r*V9?}ZXqdsnz@Wp$&@h{afkBrG(zp2rZZD&b=YsmauvxOZ zh_*lEW(4pN1>u<`8L$gNKpsf>{FJB^W{p^1TkA(Ig@R+|OwV}aHk+o83oLFz#D zK4^p`0TIptiJ*-E(0c@fD~n4~bHR&tzPHP`%r!gytdRAPZXg52K&F8){19zO>nb?4q$D#h9n{1Z5&%_?U`40|);$oQ zMh9p-Q3*WK3~IDNHoOO<7J=IZ5aSs@4Pej!BSIOHETqZ?RsEn2AVLY;BuLEj0~ z2g1nu`xqG*nn5FC4B)OE$dMrI5AMQ3f(XrakO?3R>bHaXwh+r17(n?1l<({q7#RLQ z=Z*Q%KO z(l%6MV`u<%Nz~aG8eTFmFle$dG=O|>$i~nBn%A>tV`!KGTKmYx&@dk~*UHAwumrTu zfQ_MH86yLO6B|PV=r90hHim{nj0_BJYzz$-K*7(((C`)1w`XH$5M*Lt2w-DqkYr+D z2xMbukYi$C2m$$niGd-M4YJ-coQMi?Nc}_Ljx%6BA{crZcGdeL13{n%@QO zXF87vW5~T}puQ=@jR>DQ=A|HnAx;Oif1_yaXz} zK^T%wLDetBG6n`vIs&Cr&6;h_pV1=v!TFA=K z5C&TB#mdl7&A`C03^XSK+Uv#&nVVk83YnW;&C1X)9ki#7m7!q~XstdgWL?-cR)z-9 z9R6`uhK4twQ(jmZ8a{)TfwMx^_M8Xh7toq}R)z+B(4I6_$hzw*tdKSLH&_`O(m-qM zSs5BY`QR=zzhr{Sb+r8Q7rO59J7_)}QLJE;NuUhlo>`Wf=aE>H5?WA@TI7?Nn^^*G z$KuW_plpE1E7-CDDA^)13ZY~RYC#}U9i-4<5MkgEJPgn31x1;;sm1Z&U8kT_2dTp| zQIZv?kO6H5VqgHziXxI#N@iImXk#d7v>K6w3cw9)(TgBv#10ekvf+Kvfr_Y6|!Ee zn3bVn9cUj5D?u({EgECD7YJP&cIG`Ygw7sC_gBOs4XP!VQ3eq}-jA?>ro8 z2Q;?^T9C_(=*L0(-ZF)+MkV`u;!3Gj}Mp+O!LMxZt#0|Ubc zP}>f4Mh_cgPs1l@+v_uEOcBk`r&vI1-53}^<9Hm{{0v%J2=yqWPy@LH<~jroT^(h? z4jS#iwKpw*9sAxiP@5@&oq+*YzI4Nq?#YIv zc5wbEV24bN`6Ew_fu`ju*da3su!-kl@RV2sJ8U}~WFi-m#6fGhJK#1!vnY6A9c0o3 zcGxzjOvo%UxV%NIN6CT@7C|x^w5SHHHUW*sKmEV&F%7kdf5F7S0NSt3zyJ;s(9#o(4H=+WKhTsI#74*r9wf7S zrl8appmtRkq-zLr&I8kMj*VRmEDQ_;HgEfG!p_i;4%*|z&d>mAWwEnE<|;VY85(9Y zFfeekL)Ig5u`@L6W?*38W@l(P1zOL@4r!b4u`@JW2c6o+4(Wdivokb+_S%WEGc zt`lQtXwYS3U=U}Av{5A385%%qs3qAM8oU@87-ZNP8bJHPWZ5BY6?t~Z{(2>LhKBWw z3=Hb*3=QWP85lI#85-U*GBD_~Gc@QiF)$dgGc~>x!M&85(vl zF)+BWL*^bl*clpFm>C$n*%=zRL30G`3=N{7eR}K+4KmCO41w$n4T_*s@z@y}Kxch~ zvP0I%M6fe7L^3llM6xq9#4$54M1$PN%)k)C&d`v}%)k%_3NK~`hIn>{h6-i|hHQ3* zh6ZK^h8%W=22c{oV`pgi#mvA^z|PPBirpf1hK3v#28L3QJ6RYQ%0c=;a{(azEDQ`) z>>d{hiA$}WJ1+aRSjXy-bv!U>e^f3Trvd(crKphICGc`&)Os3(=_&85%%k z)C6|O`qhc-3=Ky?dr{aSdoHK2Gc=qBt#4&#Xm}1<-^$L=z{bb`Izh4lG#WRP9dh2q zTy};AO-2TW`Roi0hKvjh3)mSNK*6|(ouOeVBLl+{c7_H}2rOfV%n7an-iGg7gJ3~V}69dC$P`YMfVA#ga&``w0z_1;fZo9C|MSx~& zLF;QleWR101_CG`7#N&$@{3a;RWIpt5uimG@VN+38Ur=UP|_HvS2Y{FY?nfD5G%rA92B@h7i4a&* z0pwIr_Pz?PC?Smw zAQuauvIcb63IhXp8Vhv(3XUooRGH%`7LW}EDFxLOP(v@^E^EMh$-!ZSwJ`xo*dPo} z+sKDafzli(ZR>;9%R&6haDW}sMn1^S&;UyBXF&NDG^PNp_s_F4G=SE`UjWr(3=9mH zLG>^L1H%<)y?>1zvKRCQJ3|8~3~xj0^*ihg4Q7lC4ENX>8bE!>`|J!2&WsEUk3r=b zBLl+|c7}!|Mh1pw>l|% ziJhT=iHU*XGqgPV%FfUr58C(7&d{I&I_HKRvhV*Vs2u^?|IZFttMHedpEG&C_YFmQ1|>Tzxk zNIlNO0jbCNIT#ugLF-&O7#h@A7#IXO7#g%e>s>h@x?4W6L$Y&anG zH)xC=z5ZSaJyB{gBLl;GT=h3nkpQYTQA-0b58BfLrFMLEHX@nB@*gOFA$qu3;Qkt@ zPmC`=B8pYW_6<<~4K&3Db_oLm1ISOHG$#z&-v||y<$$bJRpfy5b(J|78p0VE7*shJ zz-O|kaWFK1*0^eLK*lt*I3QyfIvkL`tR4sC3@3dKh6Wi%1_lETh6XuC1_nb8$a)qN z4#=8pGY*D^N=60-3l4^cX3)NL4u%HMmJ}Nf$XQLc91IPhu(pTB2|sAQ1Fe4uS{Dq8 zipdNN4BtTvh#$fdb23vBOHv^#e__jqkfy`HMK(k&I_bm+-n$K|=s>F+{TU&n6=>@i zK?95!gBhUm78K%;u~$gX1ZFv;BM4eI2#PbvOfV7a20P8B1T@+U z^8_e7K=H{7UCRa%&*org00m7B2SbA_0|P@o2V@?-kb|MY2BeMyGG1TC0cp#Wb1*c3 z&fux!U}z|0U|^^Q?C_Ns6&fY0!1;$Ub1g?lqJetbalP-yW3I+F`DcMm#C zhAO|rp1f`Y~Wu}&;Lb`3>1Bf7zgA~f3C<0{?hz=AIx=b514i8$c3K?$#tzHAw zhoC+qo`?gL;}{VKs_;PL>Y(*{XuWLc`azf|BGL=QAhCvrf}VVlgs&;V+; zP2qr?yEcOZ(jJ}30omI;i-VzI3+N0F4#;@aTn>hY#|#V%^Fie%0|UbX4#>G{i#Qk> zK>2Pd2SbAxBLl+<4u%HM!p2pg@|2N*VKoP&9$Cl1&|t;Lz_1>g7C>{F4rplsH0}us zAJ8g*zlgK|%d6mNb>skpj91|BnCWnV&Us>B5awcFKngSDJFh|YfC6al1u3wgOla>4bo?&%-W4eP z3QQ6-vS<-hBk2F9mYjBv=+2<5n|{Aew>CL z;KgewCjVpoFfyR}1AZ_nOJdpm~VjhMD1||lEB|HobtV|3H z%Xk5kMb}y9Aai*IL^b+aFv;X;Uo`3!(CpTn%%UKv0Zt^fRtY=|hxW&WJaFT_A;WiIL!($c(hUYvC4gXmf7+&!( zG_bHTFudVmXwYP3V0g#F(9pul!0?`jp`neHf#EAiKPv;ncTjk+F);k#VQAoCV_^8j z!_WXqo4-No*%%o9@IcNT{Ri?t8w10C9)^a=ptQ@&(6ES&fq{{iphKBQO3=HhN3=Q|#7#KKs85-WQF)(oPGBhx;Gca)TLe3-Q)9!Op-S!^_aHft`UtmY1Pn zFFON+94|w|A$A4^WnPAci|h;xD!dF057-$P)OZ;h7&#aiGrI5`*?GFGB+tCj)~WFGB-ACj)~6FGGU}Cj)~sFGGVmCj)~kFGE8BCj)~!FXVhvPhN%w zP|ooJ`Ja=4!JC(%;XNkb!xv5lh5%lMhF_cv3}L(s4gWY97{YlWbqeT=MD+7N zLG4~pJ&ZP930}MmUgk`@;Yx6x1ywMxJPUFQD9?gQ8qoL+NIVZZUYQRauPlU)R~AFZ zD@&o{m1WTJ$|~r1Wi@oX@)k1##u;wUxfvKh^F`;l85nMefNTL{#CSerLmG(B0IE^MXt4W)JmOyR-1#Weo);AaZ@IEdKXlRL+mRq zNi2b#+>Tt^=x{JFFhlAAP&)&(A{wLlfjGk)bXt`yL^Ws)n*k#OLpivrOv@}PE&+|> z!Vh-=M<-}ivMShHxw)Wd26tCM8?!)D`u>dNMVTe30r|z5pbJ^S2?f+Ggse~oD+jH| z0L^3|gq%{-@{3YI_iw|rfx7~X3=9w>3vv=GlM<7&;iiI82k6jmgb|KuC8DQrogPJm zF3_TqL`ZW0)XQ`Louvg%nUGFTXkJQcQCd!ZIoOdPD?u2trmX_fN&@FjP~HZWA)vhx zpgBp9;Cn8}xsV^YAm^)m0_}AHt-9l4XaHSr_LU2A_U|t)h6d0b5dXOt8YY1>azoZ7 zGjc=LtTAyjG(2QrU|{Bk^!Hi0A$!t9xfvQjkuAmzX(vcU z85mT!A!B-K+zbslj0_BV+>mn?47eE@CV|HMxEUJeGBPk2b3@iMn{hKVtOA`E#SNJ+ zw&rGN*bZ9X%+1iSpOJyVk(;66I3ojtGdDxSHAV&oS8j%eCyWdX?%WIwzZn@ALO|{V ztz+h9XaMa)4&!EMkY-|Fh~Q>uPy?-J=4NOxWny56=Z2iqp2!V3ry-Ra(k?0ChU|qa zoWHP%8?py&3pYc90xJWw6ZfWJmh9* zSj5i2@R*ySVHZ0C!&7dChGXmu3@^DE8ZNLiFudkwXt>YL!0?8fq2U!f1H%VyhK5h< z3=E&R85+K@GcbGwg*yiW!#8e*25t@phCkd44G|m+4F9+p8uB?97#MjN8frNh7??oq zEl~LfYVUC{FtGAK+8rD`3=Jzd7#KJ~?KKVt1};$Fl!JkRkB6b*0S5zvAP++WJ0}B! z7!N~(D<=bk91lYSD2podFf>$iGBBuu+Haf;3~HcuFed|pIuAp`Y)%FSO&*4ZeVhyo z`aBE`XE+%c40sqCE^{(481gVQ+~Z_mFy>)sc*)7YV8O%C@RyT;!HS2WK^oMzZN;9+RU=3-!Q0<|x>7#Li57#ikrF)+CCFf{DuVqkFR zVQ9F>#lYar!_e@Ei-EzHhoRvK7XyPo4@1KrE(V4`9)<=eZU%;M9)<=( zZU%-(P9p`nVKfguItFKz~gG#-YAsoV?<={yV#%eWaBGIFAX#pf>KXHia>BX3M2>91hSihg@FN7fq~{gK;n*EkZ}tqF34D#Gju;4 zXkDcV+Sm-}tSNN{1_n^;fDhqzNJW9-UeLHd$aFO9#0ajHLB6>Lt~Nodpgf?nJ)l8) z&0jVt@6PA#64XDls*#Xf5nVo@@{h$E@kPHZe+zs+KXjL0%J{lxu z#Kq76@{1`KWFMS47efQ+Tw+Tu$lV*(T#z+FwpF~0n-Gs8{{|SICX=@sXH`IJ)mv}wT>*%+zx85f!sa|bPgLL zPW|!`u^L#KTAB(u@dbChg2wGZ9>O&n2Z||BbqtBAEbt%_$PW-cB<4VV12tqp;vfui z8^~{bC$c2Jm|HATG!mU?HIWqYMlTVW54g3=9krT#)&dC@#qSN;DTk z1880+j*FoIq|ouv-y2k0{~Fd*eo$CR?fyyVo7e81F+5~Q38?hAnC zt3mEV!_d9}XypuOa7`F=KqoT;14?cM34+EaA;}xs?guqSL1`5dKJY;=P%wf9y&%G< z%l<$!_MmBK=nxk9tAjwr2PiI($2>t{0*VXdG0!$=`>CCap#ikts~Z{zy)$4V)G;zJOa`fAWMG)W1)2Ar#s#@QW+oRy0~-?q!)z{w2GGeTb3uEAnHU)6LE{K? z#=bpTx_!wA>8pYEZQ+U|a2sRDTpBMffG<9LZSjTZ~__{0VPJrPzBP^2&fhS4GBS%!)pOhjRC3!P?7>@-#jRF zLezo`fei70d<3dhA>yc22Bz0`31O_ zgoA1j5|)O64$*_wUJr0D4Fg@xg~w2kYa!+03+VbUQ2GU>5m4F%ZGXB06_4hH^#5ac zA@x@*FJuizHZNqZt^hPX%fP@;%nNBtl<-2<{jR%9yA?0OgI1bup#0y!w zQ^yNAueu&I{>;e0(7?;kzysQ04H~~?WMF9LWoS@iWMJq3+0V$p(8UW`kJ`rzDQ_o$ z#-Ty=BrjyW*mPcohUtt93^REl{r_3K3=N=In+qD}Wn^Gj%*)W=#l*m{l$W6)3N+8a z3t6AKl9!>O9dsuV$o-)8s=N#h>zNoBw(v4E>||nK*viY$a1gX^m6xI6BohO}4$yco z69dC;Uda5y9$tn9A!Y`KeIR!;GcX+GWoVFNW?(qR%g~?znm6EuoVR#}m!TnsnStRP zFGE8WGXukUUWSH7W(J0fybKMXbaIK8q2VVp1H%>2xHB^Y!*yOr|NSN}LxUA)9)Xvk zA%ca0;SR{%EDQ|ycp>L0-sfd#xX!}B@Q@dBw#*Y=hKAQH3=B^}*Gg#XEqsp#gM8Fe4vie<>>;WFDQJ4{~NaCm-bg4lX{(noS-) zh6XoA1_oX}h6d1xJU<`gOj98~$o^0fK8A*gpmU@6AoYznALKp{Nj}I}m=qsm&xH&h zWK2wf53=`PosXd*hlznfgO8!140KKuA7m^{n~$Mk1``8=4j)6qBG5Ted<+dMLFYp8 zLDpg#^D#7>W@2D4<6~&J1v(#!kD=iu69a=KA49`i(78~2kU1I97EM#MvK?Cz3X%Gh44~j2PKMvHM z0EyZ0LBDxuDbsbi5*HqzU90kojmB8seaq5X`BdgadLVX2JovA33~1_JiDyoNmIP?hogK zte1)8gX|}dg8Bn=E(dx$541N4bT)!BGXsMR!XH7Yi7AjA08TTYm0D=7M>@L`)K>zX z-3bbK(D(w#H-3ze`6iG~2p=-W1fIeHE%XJo%V1|8f?I^36^9T($I!5pfq|it4{}dHH6P^cz*;`Y`pP;!h6Y(i z28Mc2UIw+l_#kHkH1a{#K`5@~xChDI6ox+Nbp1Qk2F6d|H$$~ z@{a;PB>yP#L-LO@KP3OCfb3;vV9@1fXpm)QV9@7>0W9fu<2xXc}>crV$Tl8u5gt5ie*O@rI@m(EYd`44}oq zh&XPC<^|AQ^ho`XfW+|3JYQeeczC7&w{{@ATOsWN(p#9ImKLai;SW2@8x#(p1``qC z0CFcNogn9xQfN4o^F#V6mHZ41pcYmYKV(d|nxCNoG+I`}51IF?g@yy@JQ?&d0kjtx z)bg6x(8x6nY2K~DoH0RpPe zK!bsxgQ#H#XMm2T0d3`hwI5M;cYs=EpfrP=r$BxIg%xt13gL(JEh3>|6$K5eXnyE; z89$`G7RL`cuP2@#GH#X#4a0PP$aG1ZX~-1Wj90plNF=G#^fbrlIN3d^iId4tp3tcYUIkN1$+q zr4b{1X#_bO1}KrBhYiT>=wUMlnnvb9)5v0I8d(BOBTJ!aWEnJ#EQf}Ti5lo0S$07Y zQ3eJshQLtQpvZX7;CN5J;1EY2A6FMwzmT9v1}z32!Ef-@t`TM!XyZX3> zIfi)p`!UEtO<;m6@b&a{jrVZ$bMXNg0F!4%l@IpwbaMmAt3dU$z~#d|{apOR9L`8&r4_y>dr_&WMIy1V+i`h_q^LDjLr)j7F(IEH!p2L&_0 zY+{GYxp)RUI{CQ9`+CO*1o?;fJNx^EjBr%*Wr+g+UQ& zA}?H>ql=5bUp$iUm7q%a;7VZLLbzKWs)iq~#v>#oAU-tMHOSA=*EK%CF*rEfKgcB> z8aNCvLj~X(f*svlH-`?JmN$BT>YH=U0hul6riRG!!?9BIyt$z#5)D~hX;caj~G;i z2wX*Quuo_NgBDa=6fO?+O}w9Dn5R29<;Dm5hx)k$GiXEAieaeradmfej*NHq_YDYg z4GspSc33(ThbwmT4{~;mcXV+Hig)yLi4P8O3<(WpkboL00aq8{>jMgCc*2l`%fOr# z;_Bn)8iGiPFwaTBRl2#lx**cAG+f*Xlq%yr{Q^S4+I<5;f*AxE*ae@8FfcGOI6KEX zySO_0Fo;5hm_S0l!Oj7W!Oo683_{4lP%)TNX0TF6m{MV=QWlVKaEObuqmK^*$ekdY zSV4kr0d9`LAz*QsVm6R?a3shs9|jSq3G5(2-+*vbmvKNvp{@YsvA5uo%-O@y&)wDA z)6WGI)V{91POd@V^Z}A)WI&R3arJQxafPaoVPF>osbE4@5$qZQO6ib*1j#a^$-4ME zhk{BIa57<#hMK{GtjgWh&o#)=2VDArj9^8U^z;jJ^zn3Y3~_}!kqucM;#xOHQ0`^` zg_49QD4xO`gTTqh(-|C7pTQpY^LKHLhZ+bjjKxG57!xeru4`nksk_y>o?JNx^4 zd%D8)F*1Plx%xm#MR5jpL6C7w5MjrVkRVT|&=6N})Pp3LArc|35g}mzg2Y%LV$Lp( zA&&9EuHb?g>|c;1D@4-OFT^t>GCs)F%{9o?&)Jnhoq=5tt7rOa4x`WG$_z-_+ z{Q^!0AcNSD4T8I$10w3|?+c0ta0&w{=7b2t;s@?jE>!XOkjMa6aA1KnaidAP1v$Ed zO$DVcDN)dB$p~K`P*8!i#lsB;m3#i+fq;U<(2~p?@PWmkb~j{n6?CQ|*kRAX@#O3o z04g!P>3;#@8as`=?W>wL2^uBIX~BM*P!??*C0^w67L$} z85|M}F6u!_n88Z?eOxe=fGRqW5*Dx$Ph=07JlYdYMxab4Pa)4$1TwPt_gIt~b{X@VNupv09hXllf ziU=o1XHd=S=?|(ltWS7byzb?hsm(2`UW(T!TU)<3Y_1aQX-bn*fsY0Hu5v zzhH1QfP|SC;KH5(VI~ZG4D5nDq6`d73}GSho<FA&cNoNGXuR6v@7T%G-cT)<8Mi7_=WG=znK8ZWLvVXiLV z&=3L}6%rX7;OZO?Y8`^2s+O;xHK&-vm%~Bm4Qdl7*!Rd&5WuHR3(^#=jI9$ z{qiAaoEbB)3xr&l$L<*I0J2CNliiWGRw_^ zL`e9w$Tm@ELw4F!q5zOLX#+gET40aBZQ8ZPl}o_;Q#e(pi8!TzB^ z&aPm$f)p`93v{p|XMaCGP=x^PAAsbUk>!J2T|9%J3P7<0Qow?&z{%Ae+{pI>wQNBZ z4BRnn$jV&(Twu*#up&??1u}~rSrLj^ptc&gWD5p2v_OhEkQGB4-JX8#NGdfM*abl< zIgwQ&*^Q(W)X)Vfly?uT0Vl?2c9W8 zslgegB`Nvkc?>#GS4$ylclP%SarFxU6|Vllo*+j!hJ-jedw|RQm*bx;Q)f zffKY}h$pDA3Cn7-$O=6}{k;AB!~GD60aSQ_%#%Y_2Fb9Xf&kob0?ErG%Lh4zgFFVV zxj-!=kOBo{1pz_+5s@ygA<%3O>brr|C?cx?HG~2}fqK#;$0KnQ~#G}85u6$XGBe!-x4hc@BkgIu9Lf`y;~vU+g- z2BnlBe;>GshA1j9k`b&pV1Si#M#$>HvFaKT65!+L>F4Vi>cW_h4OJ;5ow#MHQ$i6$EcN zAuj}V_l(;A~(p@J>JFD%`wym(rN`sGBO}ZdU*Tz zf?In*0t^fe48e}^zNsY{`JjVL*abmi3>?9Z@$l2Qzzwv=;2Jf+F(}wI-r3R5-_O(8 z(Z@5&l>yWV14%M5KqTFQJYD@H*tO2Q>T zg)hi1cBq6actiy>Rv7B%8tm){?H+-Ya6pxS%Qjb#5~u=DD<7nQ6RH3_IO7)N?+bPp zOqL5O3mV1&OM;YvJGCIa+)!CiA_EtOAVD6eU@$mZ;ljKyVP_9lUq`qRd@y0p5J>+P zWCTA{(8b@^(bEqev;t6JcqtAl>OkrRp%U<*g=z#1bAaT9pz=_!g9a)7K;kht6rMzc z88`%&i!v~TJBER}LC%f=!Ql)-3><=!p@N=%5HU#x4nZAJ28NQvbjN~%oXq4z(Dv_; z%7Rn|DFzNfEl~!B08ba+U{7#&KQuT#%+V**m4TmuLr|E3fx*Wg)T<8(Vi05C5R?;O zU>oYd6~r-sVShF zVL=$`Y}i|a0oVvFff1yA;1Hy z@$dnRU~u?rK*AbSH-Scoz+!3;F&EchXRsK^P!S;p2A_b?a8Sojkby%`2BIc7G8n7` z6x^WkfRe;?(13uit1o0A0i+Z(LQ|5M9_APXRtho=G@F!KRFsz=4+*LS0g&m=Aj5eW zI0Qjw7y1N%c(M!}f-{if0v2G_%9D<<9jR2G`3k@I3<1zC z5M)wKoPk3S)PawW_w{t~iT4Ec$qft)48aD15>!!fW>so@3D}jOsf_rN#B}gvhJOI4 z*#q`tx-cZ8xq$`+LR=#lWDvoGa)ULfD_9JU^4p>e450m{87V~|6B)P}I0Qki1EnLd zAHRY!9(WEr7uq$#C9KB4A?OK?GEhBY9VqBPJ}=G8 zD=8=`f~FYI!4bZ`pivdD0#Mh!BrzQ_8UPL~(7NgJD4IzhS9Io{I+oK(0VIo~bR4^cYE2r)1OI73PY zkO>fjA^m+&i3@5SfT})FXD!Ip9qe&Xz6}Wg4X%NP?-)Qiyq{?-w6t3@&>?Lw3m00YQ)fI|fkdSAx4Iq$o2nFTFG;vB)K}Bm;B+NnUDE zBFJCFssrVcPyq&pcu2^_mw>|QEpwUZEA_w{31Jp|JVE~m@>%rzh0u)v{gEJtgNC9OK50@YYP^}I+Ar@Sw z`sPAUWd#=lpyUFoxjp?t;z4$Tf*6!Ez^(ur1gZ_n6613+i%Y;Zf<`OR%10w`arzGI z6nJt@%f}-MYJmnj#)Iyo4M{9YPb~p^KSvalfx+JO^aEGoVBdn~V_m^1^q&a0Y2xnV z@8sy?9}p7n>H%qi1cQrAP@w|~J#g8$2y7TA2;i9xREK~(7mx@EFh~ImDr~`(c4UYv z*vX*w6R0!@2o42Jc>4Q+!vVCC(kH+f+(rSlcRqr$Lr6e;fWN;FSOGlp%uK-f7F6Vg zgNrtPIDx_d6d<6rZ=lv3I2~7jgAyDspkxRtpg}n+9&6SDB~nmx z1=?BxDRu*=3{ZUpUC!^Dnpj*~lv>09@=OMjm!YW#t!Mxl2}-0O2br0GYY@;uNU&&x zrF+o$Cpb}q+Ix5vfDBXw*B0PH8kBoMhiv-2Nl~TiRnJzk{eV$g32nCAVVswK;;Z*gc{oa#5Fz*jz-)?2q>&o;E@bT z6lMggW!xzU6kynzZNx<|o&rjrfkW^HQVJn>2No#oA@zKa zYcQyP460ZlxjsBI57DB8W-9R2NgzF-O4J8di-H`q6WLa9!wsCc@JN9I0o3q~M{D_l z>R`|?H}pDh@RiY^A^@ZoMJc%W0Sz_4Te+ZNOmJ}qnhz{VOn343^~+C51tmvtVgwD* zl_aLa#^=D|_>%!Bse%sN3INX+fNksr=WkHjhxG$NoxQ)HloS#WAMEKH-~$>F@bLl7 zdVzJkg%re)>0ofbLW6-r@EcTzGpO?u8W8UuX!ol^tJ}9b?OCxC3VgPj!KVx$hxV`{w76up4paKAteM3Pd z47eTyr3gteP;~@t=7NF^bcdZ!0Ju>ODqo>J3~+-Jlzl)`hp?Iv6vv)<#U+V3Iq~2g z1SoC15C$3O3<_v?p%1bMQC!A5gR2ry>FWVazM#?=l%7GA2e?T9+G+(W`oK*>&SOvc@FfeT30h2B(J~mfq}uD0VLj_lHe%SalK2jk6E&?lLizYtAz;fX+}AVBD=7&iOpVRL7TZ##EQGv(Fe9Kznlp z7}EoObRM6!`ZZUM;O~uh6lX9nfUY+YU@Q!iTDrqZK_c%dgW0vg%bmVBQr?chIMZBkMg{tjbG(u7Z==I&%n?I7SAo?V!F|_Wuh+g zy*)zSFD^4MoCb@3DE_$XV8OS42WG$jCNHabfPsM@be9HWrDQ?iI`O!b{FB=%=3Q40 zW?%>fi^pj{?Rw%CI>vSV7A$7*)tOtmkAdL`Sls23 zLQlEuB2)3BUw>Mgl{PUjaIu5Tsk^GRqVew9aM9Nczg06g+-6`10*jxxRq*cfk>_z9 zk3McXINeK`fdOLAD9zV^;)1_sdCs{)L#b_&U~T-+)6Ffiiv z5{D1X3=Dc4AoHEhsk#OW9b49Kbmw>f&Yi9d3?*Rk^-KQ*t+DC4v2<0xfC|G2Wd??w zVDZG=kG$I-IT~+R_3XdPkq4_782*FBE56u^9phWw&%Vs_l4qsw1O^5-PLTOKyhMI< zafEbTzgpU&_Sxw+14B1h{0vjXKRM>2ko*UX|5w$QoMd1CopmO_s2^<;`Om2-eqn{Q zZVbvTp)9PCsu7PsyLf0c)IqNtzo+z14BGm+(BiNz2?n@$L@#!%uZx_rOCjs z3@olYAz>BcrXUCPa0~Vi{0hq%7+!*$0G$WNAi(Hf7}NCOK#;WYY4<%Te|Rmy=c+LXFzTjnxOq-WO zejbp$DwSJ5>dPN;lSr$2aj!=!6MVifg8<{-=U1|}vAwxcHa#|$U+&>k@Oiro0*sby zi~Af-`@CkD{&WIk8b>PwLlQ5@oO7ptihefDNct|7`}xD<=MxzimVm`2H`KT8+wbh_ z>k{!MrFVNI1H&t@_=-~xLV5Pc%D&te^mqA|wP_3t27DlM+ys}h@~9nst!clcVAA8~ zis1c(3<8YOt6t0u7wFnyC)(-8vFY$l28P{W^&j_D=l^T>6?>k`A+Y|RlnVpHKd|`Z zw}&ZN!oYA5EWX?H(DrnJ57Ty9F5Jq}Bk+NNK~w-_&Zf*fMhmOL)k??sZ>mLP zI5RLrg2i92RXy6D(jIHOVC{~lm$+9mFw6ss*YnP>@?14#X5?euX-5Q49$;X23>M$C zMD*}SSN?{tRX>b`J|ADjz@RAzGJnO2nX?#c__v(zG}E_eaG$}zPyiOM3oDrX^hf%8 zChyjnYZnEB&W8YtuL@66Tw!0w=hu6lo#pyh&}D8yAanj5bc_=!zTW(N!h~?C=E;5x z3|?UI=>8kdx>t<;J-E~QW|i4Jeg=kqu=vh>|6AnBTYgT-oi;;e)s>YD4DZ3>89StI zhAdKc*rpT^g|_9~n@+rwJly_r(r*Tae_-(_9r^Vvzc~Jv#ur{>`Y&^l zfx%S_WX|kwXW9(rrQJOyaP8rt(#UBH3_W0R{#AzEOA{J(_Zplz)H0_}k%8d?SiEx2 zk3Zex|9t|8l;-eLxZXJGNUt_Gsb3obfNx3au?OCdOu zfk9saWWL~s=|`Ub|FJ1{`md5Qwu1r;48>sa(04BjkC~RXZ29nZo1~v+I|IWmuy}Ch zvn^%z@u%gDB%|~)8@d=6SR_H_n6+KlTsnKgg5bYmH_qO_s>;CN4HjqF{igB}CqwO# z9VT35=7rZ77-oURZ)tkPDo;BtGOovgT=EmJOUU(SXcEJi+)B6T^gGC!!e`n!(}^Yg^8UaE5(-xtCvXRew+?1H%chxbdAl zja7S2w`Y0fu*_u=JjlQxBn>iWrV#VBX}!nR{&|zb*gN%sAOk}cjx#VQ z%Yn?_rMg8TamGm-b=Dl-CBJ{2VqnMwi?5HEJooXxsy{C4ro4=N)u+wCunsJ4zVE~; zL!+k1b7AK43_OdZ7#O~Q#c$u=P(OuL^v$!+^G^jFm91i6u#pFuUtuh-(EOt&&HD0> z(ywQ0Y#10o_rf>IGcYhDTg4O<<);@V<|?FR=A;%YXjE93X~yJcCKu%w=ckn@6sKet z$CPL0rR0|v$CR1t86?JJ<|XHprlf*I3sQ^H^fCyWQkGdvmZE{g1tdImnSaD2oMq+thOiF5Tc1eCgOhICNaS7U!IbiT^wIpl1Xu%EGWt^$V{QMkjX>x z7}@QX)n34#0Lv0n-~|?mQ4R`^{5(*U zLpIM-=%ez?yyE1#&K!y}&7El5%VcYtaF zM6r-uP@0pUNNI*H&&wue%{3xgnDBHIv9%BQrXEGf$`B`O!<&&frplvdA0sfoqZ=v)=&Cll3a#p9pi zlA^?%%ycSL^2H@7nb6FPKjGppoRW)55RC==2Bl;cr6!kDfQEq-G_p$bQWcC03=K5l zLpMbQ$;FA#EREkJ{7#~ZA<6kEsfl@sIhDnk#WBVCrA5i9iFtYXCE!)!l%{M@vnDs0 z;$}^GW?p&2L=f3o2{hK40vqh1z%Pkq zpz98E6G;yh)V5zDd>t@_9?MUpy!#Itl`AUBr?j(CT#%YvTvC*oNAWOWabiwN-4@LODzIB zjY98b<|U?3JWK$sk}W87OL0nBJoS8*om!NannR5+D#$MYP1I57JJ6tQNik79QvAs} zvA8(3h^Xv=Cm9wMP})Yw%uS6?&dpDuc%&*nCzZ$?fj?YOS{r2N&+^PXP)t!6*^nVG zh#@4@h^X}#bnFXa3Vsja51CwWjYy0+_)|}fdzC| zIs*e}88DQ^#Zbe}z+eCtYk;!27*0T0+ze-+EG`BG&^_s3bt+I67eg%Qj&!hCB9z4i zy6=wxbVMgNLlhSSn8n3#1j^!OI00pGf!Dx6)R}O@)Cur2Fo4eLl%Hm=GZRr7R zN8@HF0Bu}j0Gw41ms}qM4&7#h6Z^ChS^|sEl?I0gOUPF zObyE7Vkm*KxEU&-EG`BXMFxf?V7(kr78k=ED2ton0hGnXz@Y?F#{*??F&t20U|0p# zdj!hjV#rX2iRD09Tnr2<3=Dh0>R6yGE`|aqi<_YY%Hm>pp~Ap$0Ico}l*PqRp$-$P zfwH(5erPf<90sfV17&eBRA|A(YM?AGh8tQ844}KIxEbz1SzHVS+Ay&aD2t2Xfi?pJ z=>9rxh9^)K7ej>(OsodV;$nEA!@zJBZ0{Q=i;F=+mx19jSWE}X;$jdnf~k{$vbY$o zm@zPb)|zuO+<>yU7`B+h#CAYgTnsiA3=BWP<~cxFTnsy)EN+H9P!<=1f+Yh3BO|DM zQGv3!7!oZR7+An!sZbUdL#Z`PT_u#o#jpv=;%3+eWpOclg0i?7zCl@B3w>bl7`{MR+zdaU zEG~vGP7Dk}V7)(}EG~xi&I}Bo6X&=YHbYrl40oMj>K;N_Tnut9Ffk=4i;KYn%Hn45 zfwH(51Y8*yKzD0$Gl)Q0TnrX&Ffkh_i;Llf8v}zR*e!3MEG~u=cbHfPl*Pqx$DM&e z2CVJ@l*PrM?!mwy4;IsgvbY!yc*4{jfwH(5c)eg^f>0J0LlTt5&5#CVaWU+GvbY)c zKv`T2D|{Fj)WLSFfwH(5X8OX!=0aIq4DX;UZiY`#78iqqA55JKl*Pr6;LpHd1U4@P z%Hm?U0%dVC+<>yU7(xOV7)-(HBA_fThWP;u3>ILq#ZVR(!<9gox*Jdy7Xxb$OpFuC z;$nz`vbY)Ipe!zi4Nw+0!xkuuiy>N{5NbL0Mc3iWx95RVa&# zAsou$W{8HexEOk&EN+I0P!<=%2`G!3;S7|;#gLK9z%T>smK-RHi{T8E#m#U5%Hm>B z$zx!c4OXWCWpObafwH(6PC!{)3^w@;4D-P19H1;Nh6PX-H^UMri;Lk$K4kw7H^Uz& zi;JPA04CM|WpOd^6f!U@0h=cPWpOcVhqAaCc0*ZQ3>-x;bv#fO7sG}k28PvOy<4Cx zE{2$5m{&} z%Hn1?17&eB+^Aw;0NrQA&2R_G;$qlZ4HMf5WpOcZ)xgB~pe!zi7$}RIApy$bVpvkk zz;Frdw-rzp7XwcnOiTdE;$q0DV_>)nR#yOJaWPzhvbY&;Kv`T2CiM&qH^AyFpe!zi z7AT9Gp##d|Vz^V!z;GL^?g5m=#o*Ea6Z3$wxEPi+FfiN$t6KqOaWTj=!Ne4xEG~us zD2tmR1j^!Kc+kwi@C>Z?36#af5Zek9ON6qx7$!hj+zeBoEG`Cxb_RxbV7)3(78k<= zD2tn63Y5jgz|q0L@DZ$z2g>4Nm;z;SGt7XpxENeI85q8R)p50u5tZ~)5UVle4uVE6}CX8~n#F}#4XxEbC+SzHV=dKehkm_Y5T zIZzfCgH10?%mK>cV%XBlz`zSuw*$)JVsPn$iFrU-Tnu|adl10t4nSF43<>=V3?g8$ z6ex>};ZZ*W13$R^_YBJ7Vz@Dr0d(^w12@ARD2t2X-%JJu&~<0r3{0~iEG`BGT?O#1 zBMeZWpsV0tT2fF7>I;E{Qc}w@lT$%^AwBalOEMF4GONH7Yr&<-$*HL+si3|ZL|s~9 zX-*sDUV#VKRGyg(XM-4^`$Rw(#3l!$o1dGT z3O=(YB(JToN~W+t*YObkSWE~sZfG6ZyaH3Jh!hCUeGDo{Ryo>m2RfCmEu1L&4G zFoz5R$!lQUkn$lQu_Ob0f;V_XiIV(+Zhm<_X8eM#{svo427zuqay$;j_@#CD=NFfO zt`CNXG-xambe|YpfJ6p*_(QJE3`i|PJN^Z9ehSFw%)Elq669ksK!OYm4Ef+n3R41Z z9_Z8-aLooW7^;l{G$M>747p~Dfq?-bnTb%BMXd!^=Cr}#|O&QT#^zsFiZy~v|C^0t`R7W{g zmZTPg%K>PvLzO_Y3DgcoPM@H<2bqtioa$Uc^*OQi7qRL|%z5!joM@jpF>H$b+16k4RBR1TLRd)bn0aExc0G+%8iW8{41Ks|FI)i2udfp>8 z+=x|o0WEwtpoQ-QP*@{{Kj^q7~<(fYKmq z09BZvGzV3Yz=B)&mrjN;J{fQ0}kdBfNsI<+h{ zucVlP0be-)ISU!2nt=f{UWaVP4h9AWlSYdBiS_3LwD!jVwD!jWPyiy;9}S>T1c`y@VSvd^-^7ORX!{N|k(3t0hTb6J z=;KBeX!9YU@|2SPIm8y?N%W*W)Z7c%T#xXt23mL`WQb!SWqq&)X!{(@1`(9T54!oZ zcK=W}{|4xW8E}&v)H3k}vwkozF!+I49E=PM{$Q2_BLf3yUW$=HgOPzD5G)qK#K7PU zW>qjTFo0%?7#VgjF)+k~#cnV$Fo1^M85ty)85lt0DvS&f%nS@gVA%|228LoV>jpCe z1L#4f>}FQ7#L=OSwC197(h3w zGcs7PGB7Lxi+QjzFf0bMcCa!qECjP|ure^L1hXXA7#LQ7Sr%*z44~WP85t_r7#Mbg z#eT3eFgyXXI5-#>o`P8t91IN4z$^_828QQgmIVi-CCA9%!NI`r5-b+M!NBke%*xZV3}(#$^^L&e*EhHr82*FBG`JZUxWHl-+zbrd zVAcw51_n+rOM-`iK?%&#;9+1;2D2=9AhX1b3?4iT460zU2p$FoH3*BBfk6?>+QG}f zpa*81;ALRY2eWSQGB6l`Suc1Q7!1Lz9efN7x?q+BKLdj;n5Dtbz+eYvS@1J3*n?Rf z{0s~ZV3vdc1A`5iWg)=8;16b12rw}CL0Eze40&Kyhadw(KA1H_kb$89%vvGHz)%Qg z?GR*OC<3!i2r@7fgIPBO85lq#_KXZK1Q{4g!D2rI85qjIEDj+ChH@}VLWqH(0?g77 zVqmBQvnoUw7;?d^9U=@2pm_jBh7%$T3{$~kH$)g1rh!>6L>L&RgIPO785kymSwBP> z7*>K=9AXR%tH7)ZF$RVeVAc*X28In_)(J5NhK*pBg*XGldN6B-I0M5`Fl&W41H&;e zYlk=k!*MX{gg67k2{3Dh1OvknFzbf|1H(Bmi$juu;XIfnA<4jS0nE~nWMH@mX8n+4 zU^okAX-F|JJOQ&Tq!<{Uf>|r17#JRdSvRB@7~X(cFQgb4-hx>X(hLl*!K?~t28KUi z)(&X~hTmWoXiYXN6R6`ZA;ZAH0%lprFfed~Srsx23|wH=3>gLnAu#KP3`wP2N8=Bp@^-9;$$Wfx(%< ziXny}l%bd*m7$2Cm?4HCm?489k)fO+k0FM^g&~!pm?4{?gdv}yfFXvVfFY3~o}rkb zgdve3i6Ms}l_8#?jKPq>k|CbKh{1rt5DJYL3>jh=iW!O+k{MzcG8poqdI}ga8Dbd9 z8FCqN8B*cql`~{ACaRvqkSq26M(BX}$3=9mK3=9m~3=9nV z3=9mW3=9m`3=9mm;CKhSc+kf`D4i8EXDY!Rf0QoMIFh%oxleo(21RaHscFsDF|fN*FR3${14Nc@x=R z0bm~^`(A;;2Anr23$MXn9%#XHIA(ZwGUP$?D{9EtF(@$L)8`LPTacWNtP_-I27CFa z!H|ZO-XZD216tnV@|OaGDuV(Zeb~cMlR<&O7M#XFD?3181HwZ&e6ahIQ0U+aRn+kD z=nPR2@aXhW;RyF=eiPu){b#2L0|Ud3GiT16`Mlbr+eak=K z4j#u{R6sp51`q=r(A_R74xKJ48Xny)DhVE)E-DHx-99P~KHV-V8OE24PyPqrtlD~@ zl*RbKYgUM=<|6^|he1}sG2AH%Ag6%(=cjYBMN9*!Db+Nr}51MMg|6u zF`yxTxG_B{3m6#~j=QLUC%SejFhUyc3?L_0cr@3jR4|nCf~0@k`2YXq3uwEZ0c3TB zM`t6b0|at>g-7!a5F1(XZVr%rEno|v>Nz~RVSI+;4qy!^B0Qks03;EQUQjK`;L+(J zfFyd{0X*W1A|mtu|Ns9eA_@=@7nO?R4Fb?^FW9Na8$gRzK-u7UiwbBxDU=CXIttR` z)7t|U_UUa=0g3GrRbXJ)36gOlfX>YMj~4PxN$1I;FTBtuN`IQW3M z`vN!wJi0qTVGl_<-H;^U(aq`6>8ODegdWWm8p!eanvH=0Zdmq#0BnYJwx~>CU|{fQ z-UFtQwXZ?ee((VkHtpR$Dxg#a>P$l%+PnkAMm8oDWK8cA6_DdSdV5qr3wl9p23SDy z_r)=RQ*;R^T3&N?yQq}>KhWu-Qqm0xaZ4AK68>IGCI*J)8kLg&rM$;mR2mo=7{JQ8 zLCQfdXqRr7x2HgT<)cyoQUxma3Yu$F z3K&XQUtVWn00lfq0|S4{15nf>a(Huv%>Pn3kTsw(#-p176kZS}XSahyr=!ekoo+}T zvxHbyDuYiovK%M|z^SFX6O=-_r-0+AQ=}1D5mM4l_LT7GcF^$Xo&t%JPLUJf6xIzc z8~z^v7f_vzpn?L)gl-23kQ6+JbUI4BT=Vz;e^@5Oo7Owv<8ua zq&1KfIQ@V!94P&O(;9{-IIY1&LFomg7M#{FL{ZWj#M@I;Kz4#71Ed!vt!0C9>>d?d zX-xrtT2lb0HBiZH2?=AoX$|Z-Fl+eFo}lsF#m>G#&x9#xR;}@b;bosG$a$2ZuM* zd{kfo4>knUqHL~FQTShC38ENkj6e=^=ys5>bWu^LRq;r6QBeRT9S4tYPYsW5mV?a| zA`Epr5LG@Z3Y{J@&_E{JJPB0u6g--b7@&Fy>Yv6ppq38EOQ5YGa4$hC&u&P%Fg^lm za~2$TQ31Ey9Cv`!dh~{p4E-2!g490y5)8W*7I(s2i9)&S(qfbJ7;4;nPr zs2H%9@`H>5H@rdHGGFt7L>WrhjSsw>&j_w}K_>h!O#lTz1jJ*_2e?2Ds}>cA+mPCM z;ND1cjS93)rvNq=v@IEAc?2kUG$2O6GN_LVMBud#lKKA+kYYS&H8{HQ-7PAR(C|^w z@aXj5;NRY&G6yui_5VKuLx~KG+x&yEh9AbU1r7e!$$~-@r1!W3Xp0=Ur34D#V-7wH zujOHCL8%3#sMApdq#mjO++G3+do&*q@#wzL-J=2uJcy6GdsINmIvjmqI=XvQW-u@? zbb5GzL_qpnx;;doMOgO~uwIZwAZ<`HV37;zYJk!p_Ke@%15P7I2@#aGULA_E z#y6m)pP)nsG9Q}gx_eYW3l=?)vP_H03}$e17c}n#?tg;v4TG!kNuTZ(l^x6s4Bb<} znqYlSP`4G_J8e;!zzj}BAc~>`egPL12e24;bfCfoG&`QH-+89d(;o3ke|$`z2}sQC?glLVBfLG=@;HtPl@(gy;q2THg=LZAuh*GdpU1(;w8 zBLl;0UXU)Zr$G%Ea50J8Xh16eFmoYj^zFEdiVMg>P|ivKm2tf;Dki&l!6Qx3>a+Dg z3202MwA)9;1Z)$yKmp|;1qSeFTXeUJiitRFb-T+ObBDXgV zLfRW36VTfm+>izV#BGGy8=xs_kmV$|H;6MHbfYf1@t|4|T+Wf#-T;NRT*aOrq?t!!w z5hVdA^`VyppwxQi3{w6aZJ+%APxJN(Qg~BZ9v0y&4UqBZ{Qpxa%KN4&dNUVbq)W8vB!06ofKn55Q z*$Lz=?AhrI)a#g)D=5IhqcskY+6$b0QN|z?P=_4Ay?vz8x7$YrQhT9v%0KZ7#;7Rx zfEv80K@aL)gDM;q)Sw5o2|%6&)1c-cXkZ`I8)D#Zxxxe*#esC@x*b?RwIoO>NVeO7 zqtitt0><^|c8~yhBcagr~v8HK#}xFW;qBdLczX;j+%hnZGobyx#l1XV=dQ?PoU1v zMivGJ6xr^OgDjxPgO5klG}oxqFqCk1yQtK>Y{F13auB2%-qbIEc)bMN`~-O$G!?I_lQ05=vvH3O`%=yQ+-)TJnZjy{2GLU$L}j?W-}ykurz zc)9K0|No#yo283NKnd3lhMWKYzq|mF04?ByI!qE8z>xTWsagf8a`7eGP=wB8YxUb+Q9>hOjMs2vRs6A%LwETHjoQ1$47Ef`chhzy2DpfugQ zM+MaVVc>7M2;z3PfVq$)4jv!?$wHEN49LkKE-Z;>bi1g;pe6BMBvVk5cm`4u&%j9H zpmrM0B%aajfF+4%cp#E^2sDX@z>+6e5?2y;Kv9K~#6c_XP-J0A+yUIo=yXv*N#dZ9 zDOBZXNxTG8y=>7u&;lEhoVIRcuR zP?I>eFaez!3l0+y0~{tTDj+6k91k<6tN4JDIKE(D2j}$HOvVR5qt6Ts3|Q(UP=60z zCt+Q4028b(eaCEvFKslfI1snuE z@e8_I9B&0#1hN1s1t~yXJv@5BGN2km!Kb$uWQ$KP*nJ+|p&lOHy&xOFsj1VIp}CfU zp@gH`mEolwHv>aAMCZW=%pT1LR6IIcLG$Y#-4Lqz0KbPdm|4!{vEu`1uK)jkevjq{ zAHarrXg~1ibx|qs=xhb8T=wY&hptEWREQb9AVG-2X0QSUk8UsxiVaYfDqzk7~Z;&0K z28gk@PFIEIz2IOi5r8BH#^bILpm=-j=+Rv3!BC>;(e3I1u4q_V50nT)6+r}5I$a}P zOL}yJQ$@E23)pQ?6(A|K0Oc;9Zr1>h?x`RT;Ed)J4seP9d!&0RNEc3}mLNMq zO^{QBO7mWjPDW6Q0F@Gq$6Z0aD+X|i2!N!B0OS+_R^-v`8qn>a(&-ulP7xqW5h((! z0wkq&+!cHh$Z=QDLGlb9$6X<ubQx{;#0+W*<8!I6#ru z3>r2pw;umODU;_8OK;!YC5Cru# zKJg2Cx+(0*+o-qGEk1%f`U46BJiqagR<{0gvWd0fthZFxzhm-uwIg0y&aPX(#-==K!=yZN{) z=s0Qyu!YSB0zUBz^n!xY1LjhAX$~G5hUeriP@e-FIF_y{#dgM*y1|_9r77KqS`U;+ zJMLJ?$pD|&N2%~3wGm^tYf5J;=qRYy_QsdGT~oeq1qC%s_j*FQ!PY?yu!Pk)B|;d6 z%Yt$pIH-hSa!6W1-tP8I>Fj{4mT(p5?ghD`vjen`q+u_(+AQTko)ib^@Mu1e;QLlRy$IHCVP**z8HasKreyH7D6#AAR1$N;1a=imX& znGZk{Gh!aFgvoQf6%>Y`1pJx{!iFX6?p}~gX9s8y1Y}ybLk`@%ApR%*$Oh1oHrUV# zoc7??IRHwyosFQ)I3T6R8$fj?$Px$-v<(Mr4K&%7)HUn{H-WH3A~;7LcToXt$YSXB zjp+1IvFPpvRhFR0@PJg%p!fxKqQQX(E-4g1E^z7Y1a(VXx}nXG3m)CR9N_$fh$BW& zTML?DK<)q)k__0~0V)ST?f^Nw+cyT{4p0#dbq6S#al2y;1Gq8(m75-*VRsC7fVOtQ zGl&x?oFIh}Xle=)a^R*2$OZ+MZr>D_ZdZkFNP!0}1Q31#ZE}NUDE<~u*8^f6)C=I& z0I2!})v1s~49-t3-L5L#Q$ZyvER`aRyag@aAUThJeFvy`>PAh10^lXTpZFtBr15JU zgr(_Ei1YwzK)nY0t=l(+e|-n29ZZfH@Z@U<@fWB(22D?c+cB=jCmlgGJp*X)6Owyi z-e7ty=F!~>I%p4+Iy^eT4N%Zs7U1fDzhyntlOD}GKt_Ulx~>8q-5nqvWTX;eAt)db z#zVwFH3xM531TZm7^D>4JrEg?28axbw&q$1h7tj=5^wNqHafTG#>EJUPt=?g{%hWJ?2)#_)?V4r`+F}#VGw{lT& z@BsC%85n#(lYF3_Y(#g6N&u**=m85c&;qDVMo=fu!K2xNp;Q#4A2jg~Q2MI?*kq2@6+p}5&~NA z0qQb9Cz!i?!1GJs7z4G0K;z<|HM`qbAPclXN*PMBK!X|}Cb$*I*m|G@JZ=jT0j(G- zsV+7bsI;s9|#^)_M@FJ%Wq0|Ud%?=>nRh%x%e78TGm7pN>a0UiRm z0G@3}628z087l$>1;`PgzP15~0~*r>alkD;m+q6G$V};;q5_&BgDt#=SktO zcnzMO1L=n(QBZh*jE3-<_kh;|G4S^}gT_Fc_kgEh8Tea3hwy`xg6893LCfFL2g*gz zd0Is9g4Cb|uOP@Y=+Gl5Btc5x!3!GWMF@&?av%}|XcZ91T9A7|NN-TML+raNk_0D7yAyZBRi49lL^$?|wG~H{lS8BASVT;dK-?`^%*r zcjSSW?t?eJAh)uN4?xTY*$G)A4stYx+5bW72f*X6AcY9Ob#h=&3I`l_fYKL8AxJ~F zAhd)434r3Slkp`eHb6P21e8L+Av^`VLJxUy7;rBI+jK3KtzKBfqoCIeL&-99QBy)GR8jW2yK zQPJpRQR!w;`F{XJyQmmgvZxfZce|(2+kw+5QHDdqsN zKyzEKVJrnurC9;;Y9|M%+)IG)1wa#F;MxHcy`a@mkm?nrGQyIBziA3IS%IXw8JZ8U z8eiH8+P(b!V<&VCE@N3SXvvzTi%LN;XroO5XpRtUZw8134l@@O4dYAQE-D(|OH@GJ zZk=uy6&*_#6_qlO`#^nk6;KTDuXj;V0o9%ros0w=X?(z=`G^C0T?($>LsSG{QH?Fs zyIoWQKp_eWeP>XSlu95t75Ljgx2PR=Q2`HXfM*&(2?ONTWDo&~gJzpXh7udl=(Y;9 zWb0;W1Pw8OeXambQ!XlCpM(6VVeO)#Pznk#koOf{GreActQTZjDQNjr04N#2lVt=b zNWlgMd@oTkc+L4T{6BcY4z%zZYj8l;GlPm33FP#MZ6y~dYk^`Fw73bJCP1zSuNJNa z&0c7{1YLFqnji^aD9HzO&4cCFj`CL>~Kn*icX9FBs3gCHJa1soF zOj;=v>wzL16xRXZ39Aql70Zx=EOnx&!Y&6vlgcWucYzWQDA>TsBchWL9RFx5%|Wpb zTAu>my4mfbA^>erf}ASgaohp4fRO>rIqm?;a1gc!d@G@giokIPaLXS#T_N%_>U25i zR7Oyy2K8;BnHrRb0@y*5*^ngypyli>Di$CSPHW_~k(*Cs=KB1qTCo3#S8kkZL)!VF8i@ zZ8c;Et#TGP?xF%7#RW&12RO<=27vCQv~*GNsC57>{{=fs8kAB!;4bO*mp05?a7*98w*AFyte zknLqT2&=g4Q2pbWZ{M-2-X+fXizy>Y3GCqvFC)%JniCG=B=ZiVPH@ zAb}bG{{MgJ0oo_&qT&DF>BR>8_NczXym0K@_6 zX+8k8$-DpT+yQFZf(lW{nyU|BVdRqR0vmXj0r*H0P|*NZ0V-SgTR^Akz=XOT1pc1@ z4ZlN65-_{DM#Y1Hzh@R?5$O-m9Wo`(@DvI*2~>_W+Z+VVNWd~WT)dm-ASALoT~u6N zgIC^ybGakMMu5{cf6E_8YZ`o^5`XJE(441>iUTwOLY$ieOAa9_pxq2ar9RL`1(dXa zXEy_mqzBrpKy1sxLvNfU{8mxGD=kG7;3$uLW1d;JOHGO1Gy3yed8gSKFf^ z0jkYB6o@d9zgG>kU#Le#0oFR}b%fZm24{LsTL}U` ztb4TbsQ{z204YK%E!aUV0nnw#sGf$Nf`H9CFW49uP`m>Yz~-GQbnig+t`X}a(CM!z zK57APeZ%k+NFA!DUYmkE6M&Q;AZgtr+2s%mGfXd%dJ;LX6`{uXF6Fes2TKzUMwfxiWGb|Taqh+Y-2IVxatAbV~3d%#mS;4W|W z0r1H)8Xlm`!QTQpBNAkR3M`*$KvKVD2%`Xh3+R+ea4}H=uB{P@5UE806ubc*-Jp~o zqGEuQPFz$B5Q*fqJ*q9Z46r~kzye_an)YrUMsRe!6a=3f1KaKTau>KRbO9B29ui;` z;IM&r6_JM?u#ew2*QiJ^l$3z9Npv%KH2=^jxWS*ue{HUx$N4z>y-+?a2cg zHg{2x01w21=2kgCvKq%g-AR}*sH+X`Mhi4s{3~JK@ddQW61+|r932wfo(i2D#s`p6 z6Ldc_xc`sbf5qHN07_b**=%qJ7?dmu82DSRg90yJHc&@FNhwDS$JH4D^Q0jE>&`e=ohZJ@zOsFsTE z5EYY7k%Qe(egSN(0Ax%BXd$;_r^^Kvm^4@fG>ivb_p0$S6&$ZFDjD4lETA=dCG6le z+pkq#%Yj0-0_5q8Zca$hLwTMoogN?~6|lFi(Km8|+ta8)i#6B6MgYM13OXVJIv5JH zSHCy`HtZ1rS$7L{rZ-#|vS=4v0VCE^Yrv&p>v1)}iM7*31-yHlp@a=I{PvpVbq{#F z1nU6NPFa!%6qsZGKq5DI2C@tkt%bYYah zX$UiDtmqK30U*zS8d)C%&{`!R0YrTP8bfccQ3+rusl{xSfQAu3231EP0uZAR zFTb)gFudFg8ffW40R<^&rdEJ~q4@-OxxR--^T7<4?gJjZkV$56NdgXam_gv` z*aJ%jI*@@VR*t)Ulq(4m6hF?ERVdqY%G;LCr&dpTTGJi5W5&kW{*_E0y1oC6L&sPjO> z>6RTJQU2CwP@->w48;%%rs7xvLBxTa{Xt;^FF!y7!k`5m9^E{rT)Lq%(NF3N816 zv}5ExkUF&7SIEr3@RI5O|Nk%B|A2;xTvR-cH=IGvM`+m!vQQ6{f54G@yaBXQ52PN- z1udOIk_8|72rJG!x;sGiEjYP>hLj*fJFG9?fTjRIS=ghy15`_6C^!vQ0O=foX2`+z zp;i0PBRg4N&Vp-T1ubR*1&#)+od#NlIX<|03G*u30@}(a`W*9&~^2oo58^PjyL=Og$B&a-4j5vU>T3@4v>iuV_Fa3GWb5M zJOewayA!0pv*QC?6kcD0*2mx}GojTmmO21jMG{vBG=TOY_^1Rx9F4yw1l@iH3TUJ{ z0Hhrw6@t{Er9#k!0pL0S5>W7J4m1vd$BWPm8p7WUTJqWr8h!znaNV8Y9Ein>ScV`# zm$(s|(Lfi#p?MLc9m9(tb*Nr^&Hd6AGNJ468q^1Iz}^Sx?ok0Z?+_#WpynY;w+}Xa z3T;1n;AkJiQah-_=fF@xh4E8pd%W=tXoogv#1vF=BaN7X>SOp;rX!$(DgwZXwgqzR zAE-MBi%VFc3yN-q?gr4JPx!)NltsdwE-DGfTU0=c6<~#mf=BZXP$|Mtq5$gjgIhKV z9^IWFF^^84BcKhv(BVd~@gB`PKxGQLa*!Cha_|5iXeot9cPD5)Cz?Fyq+F0IK!^P% zxEdb-9Y$f%?V}O`$sL_8DlyG9Dlz{{g+cxUjoU$;4k{49Zs~3Sm4~edN(7K(Uh;E+ zn)slT%^EkvT8-a)O(Opbb`_ zmPiI@#PYa{N)CvI84W507)s(nr3_>rh1ka{^lOBg_JKtRS{^H-L->9hM53ss?qVAP0+qmPdlCp-=pRE#PH~jypgH z1cDl)AaT$TBfQ2|}#@_h@K-+idFMFp}H5tJ$+dO$G% z(gRK@%;3f!sO1WpKyFb1^#d&-dTRW-A&l-GuwmLKx({~ufK`B6ooW1e2R`#ZI{*$Y z#P$J!9eFab}AJmL20L1`kjT$UBz{&uq zHdx=86w4g@fR0@{p?p(sizyRtbfVB94;vCdT0PTQ4=_Dw? zItdVE2fC+#{Q*vR-7P90QRtC1ph)Y4`0}M1bW9E@>9bNLT)_1_Bq*?k3#d5`3YQ$T zZ~@)RgBC6rN}=Hb?w73ZQ2}Z3frSf3=LsGz5M}7$0usd$F3_XaK+zA5Y)}FNr7h6n zXjt0nge>6%%Xfo&{>(5D(3zf%ptyrdf}D#g2@(NIg3@yL6!2nDn8C0UjZ2wcyF%Ga zr7B?6$H6rcs0Kl*kwDcK$fd8vp=v(Yt;Sns<4XwcVTfr;JK;a0h z@=B|~Dxkp)+NEXL0rF635=5M`ItO+j3ij#=Vgs}i;%@=%lLHIE+{WJunMBla84p|%&=-mw)SeF2%UH9@Qbi*|Q_wxB^O*4N%(AtX1UnGWiU zL6zVz9i#$cI(RJ$c;uwHMkR%zL-EDg#vi@5vbDX_5hE9EBp@tPa=V;uK-x)2aTR!TUXuPqXKT9Bf1)( zc0E#81KQqieuMR_2#_NTT)M&Im0))F1W@$_W_omYfW~pb2^RST2zb{8%mB|%piGLQ zFW?481oTjd*BnTzwlzSjw$(t#KP3C87{KQE6+F6G4t2Y5NHjlSgr2d;{`w@S@?gMr zOayWM12t^Gp6Z?eG6~G|=AdC*4q zFO&!ec?dbeLESZ+5e`v|E5bptuuO^==Or`3q47;%JPPY>3$Tsg8OHx7Khco=AEzIg}8=M1IbUVj3l#|vH%V*omK z!9^vZ8$1RM5dzJ$ce<$P;Bq-!Kgi{fNl(}^3h<RL}r< zHNm4BJgozo22DUpv)wEQLCYRMJ(2|9?gmiG28}-H_-3Cp@a*O};n~f@>0!yk1lht3 z+Dk#mG#3HTe2E6wB9HD#5EETgbU-C2XfX+BP0gw95ETv3FnNM6#92PwAu0*35O?`z zUo!CQ7P$yo8Q}n$Fza>!o#HP7*}d!4%>y}(0z9bzb_}?h1daYd7K1RoW_`IEau^+G zZwum9ENJ{uxFQoYJnI3f9ziqPpvEQxf6HCyn2g79aQ_61G-Wups_|J z-~}@SLoH}kGMEJ#(*^598O!fqN2hxcmFF_ZeLM(xIa4ta`>>kZKKs^)&{xke*D&Y1$BxG4phc!zb zz`~HS#?nP4rCc95A%GM^k_RX?HP@(w{4ZsC&C~6ok^;6a<@HLie%P2Wf6Hme^eO0W zX-Lx$SDb)uhDHuYznp7;_^F zKx=eER3ea;0NBH$rx`Y&M!V9;Cz+_fl07)(7VDKYT3fOZ5NcTs^HJ_RZs zV!&xO2CNKTJjC!f&w~^XG2qPPfn}NwniNYAt!dDL=LllbA80KzsPKnRKf0*kT=0yP z_`ugoyqpVK_3Vt9451T{xO@gphB5F7NVv~%CBrJ1&){pHiSit1O*4w;@UMNw@E_;| z6YvBiI7&RAbKCqa&9Iu07F8kp4p0^L+67`K^6WQ61o>DjaDqb|0R-lPRu+JgDkyv4 zoGt~WX{0U)C@&zoAfRR;97FR<^BX+<@lF;Mk8T!~Zt!VDXoChM=?A$Tmwxmux}e+u zY3rgiY~l7{U3Cfy!T?Z`fZSLD8uf*Z_~6(;4IXa+wb~$;pn{L41f7)tI+_wZ#G{3J zJ~U{81zvs}_2_i1@PHmUc-$2fEesyrt)L?ZJUU%Djzi9c107k0D_yL~{2s-8r zR?N49DvfSej^-Vp<%$fTLv32YZt8TEc)1pwI9)lq8^ELF@UtIXGd#LoGd#d&{JCb} zJK#^jqtms(r`I*YqdPRiquaLtT(5gHyA~*Tbh{RKbh=7-fDY4v9puLZ+PC6r1M=N# zj&4_*{|7odEk*f`VGiX_UH^|+-9I)Y!$91+A_ zF5Msn2f9NcCr@{~I&}M5fLmRz7BAyK>m6KGx_dz<~4tJE67=vt}6UZuK)i3f6ac}m4Wl-|NrpQk{-ZM zOLB#r)&Raw!MDN#aZVCw&>nG4(xA#;(3%;MzqWu9HLm;x&T<2rzd%kPGk<~F&S?3I z1)je^9etGi1?mwY+WwGqOjP~?_uMh_7pMpAfiHidD*z>7NEZY-f1%AaLfl2g`~~th zJb!^WkURn^aS-!RrKIIAP{5OtzqlyMU-0@6YyAnT55fBZU^5_)Dy9T7g^5}Szh-~U zx&xHivDdd)%|{+Ta&YN(08gJfbO#7PEbfMGCjyoHpvD$d)JMgk+f%38K|>pKBLUcH z4&4qapy4|o6$fiag(A=?G2qkoUh{$VfMr4FbASeOK!);WHjg;RTmWv$c#g$i;4w!8V+1-g2t&{ zvw>INnP6{DBJchJ&4-Y7Up#b_60|c%;dRa~(3&35W++J22 zgH;E>gA*AZmW~1?;9Jr>pohP9`>23Lp`(?c)?$VSXg3%*7`eeE9eU>xR9B(zXF{23 zBQ1=7*?FsS#cfH=%_WxFT^;i9ic4kXq2L7=q!Y$-uy%#=yY9 z!jQuNK75&hg#lE(L&QK=A-IEORT&u=+`z2Kj0_B*gK=0G6qy(pK&^KchHxeZ2GDhD zEDRY;3=Ga-bu*Y47@WYY_e=~7j$oDzGmKRYXMql1TLqR?WMyDT1habC85kymS+h78 z7=pp9H5?2Kpwf_q;SdJ{1E@32!f=CwfdRB)j)mb32Ll7>$O#sP9~=w}_Fx?>oD2+h zV3q(U1A{G?CBwf3xf|Q1H(zMSOg~n z1883e3qw37149&8ERBpQ<78j}weeXP8aNpkKr{9%3_Y9-4DZ0QGdLL-o`G3Q zI2jl~N8htBY~W;Ium-zj58MSO;4ZiVcfkX=3*Nw8@EPucUvL*Nalu?*z{S8|2{zf0 zi-7@DPO&h64u3ZXi^Xs;FnEDkiChc}o?zBOE(Qi}Fl!kX149^?^^uE#0kmF_h2a}q ztel&H0W@yG!mxmwfgu{KZVxvDLll^Gft!IL4$QjB4Kw)(Hv>Z~Sj>zErnixYfguen zwwH&20kmhGh2c66EJZNzGBC)2W!ZTdK%+?vEDVCY3=FAYFK-*_n7()3N7}CLFQG77>oKT z3=E+4Oe_qxf(#6x9fd3m(Si&Npe`W`!%9I0hDNZCpMnewbzoMJ5CcOsn6+1kfuRb_ zx+}!M0NMh}!th84=7O(6Fc+i?!%RLP49lSxg&7ziIr$%4Oi+Y@p&x9Xr3eE9B$arH zFff3+&nyi7A~2JeiNIX{QG|g3G%U};peqWC4|h>md=!YnVz6A40d(ah0}Df=C@cm+ zXVF38d>LHFdAN=wF$M?%N^-%jZX>VEO#K6wEC? zG7Jo$K~xroDj5cb!(dZx$-r{O6B$^VOp}GF>yw44dngN2_gWUFPG6pZ;S|`ESb3Pb zz4EX)IxY`W=cxcwSEv9}cSHfE?wkTlou48DD62EDFoY^HFz|s*j#6Y`0G&{5l9!mb80#Xt>aN|PGQl(lLM44^x%Sr|^M!Ay};hnd2!!N9->woP3F zmLdW)7#JkMVo7k;Z4Cy7dtmqd(qLc!O%<{**lRK{fKCu*VQ|xAV2}jMdTYY`TdT>y zAO#j{(PUtd2D3WhvTRxm44=Vb+*%9_pq)xA4DDJB40pg{YqS^`Zi893wHO#c=Ps}? z)M+y?+yslYX)`cf1G7$RGcbGvvo2`EOwrb1U;wRMWMK%_VPF6q=gGnlp#ziM443_{ z!@yt)_GOSRjMb(KGx-#pC8@{206LJ1g&{?cf#DL^whBE421l^oemHBT9s`3qSnL>_ zbw`hZ;UZYaYdr=A&{iZChA(=s^vtTy!0-qxE2z)F@DR*W)`#VVY5EKdpaWT17`E#( zFnkBg?$c*r_z7ld8!#~Z1+(l7V0quufPn#YjuQ(*umJIh7azr(D)B$33@Uk>J1B1E+3ey zl;A8YA6V>%!dYoPu(G7U2UeC;`M_K-#|Ksi?Dc_#Gp{cLLpIngoPG=pSzwllA1s8* z{9qy3;|B{#et!mrOt3mDe^}b6@rS9K#t$-uA) zEZY^yz%UQYS_qe2AIZS56)d(Oih-dQ%sLvyz|aF`oq~(~kAm5&9K*oS4VHC`fyH!w z3n$BQh z$WCBjXa}3OApxfDU;+cfYOokfBFyzYiLkibk;uT%29`aL$iUDFW_^dt$|W%{fUdG( zVF*ov>G+()z|aU*$DGW-FbT}!NQT9cR5C1%ijo-^W`kveQeZ6iR9MWor@``3ei|&j ztV@HXgCl9Mbl{TCz_1)_if1~^j_7ol9n;fc=2>LG@717@CSCIiDd zuz6OQF!OveVdiblgoR{QHUk4_+=PXpG8-0t$FpI!spc>+90HpXn!~`bAIxgWVPMz? zX3c_&9m;`~q8JebKs`3wwu!6w`0!~9mC5A)m9 ze3;)prU}@L96z1ltQdrJ=Q3@-^S<7H;`Sdbaj&Cf3h4a2LSZ<6f zhvmkJX9v%j9YXhF4(OIn^+?tgeQ+ zg{_8x;Uic!u?Ch0@4#7YwJ_O}wG0gZ!0JTn7#MzmSyFYdu#c=`U;xcjvoKWFF))B` zCt_iET*tt`%mi}P3%EMndYCEg^$ZN0VA-B}m?1H%ynlL2(t35;6>8XSjmK(#lN$pBh%0Ao8L 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
;R=-P+o@ZGwYIIV8FJ|Y!S5FSPXR&Y@ZoOJ#yY( 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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/x64/DebugFast/portaudio.lib b/Externals/portaudio/x64/DebugFast/portaudio.lib new file mode 100644 index 0000000000000000000000000000000000000000..3029595193329f1c10b59d47520bd154a8587ac7 GIT binary patch literal 1161496 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 z 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 z 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%0AHeo^O6iD%gq?aI`{us^EI97ZlbgEj4gJ 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˕l^>*Ffg2EU}ykY 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%0Ahh`XJ7!i1!O-6uLp-eDAhw)pg36v z7K3FpjQBvyVbJgg2foMu1c9B5H~;@{{=vxaau6(rRKA0(0c9@Ga5#F;8r1v(MF?oQ zD|&?F7f==-po{`)cY!<%!XUdqkpVhb0oIG?ghoaeG&1_3kueb(8Iz!qF$J1o=0hW4 z8Y`q{2;zexVGBGGKrG1qc@PV-e;&kwL;}bSAh&=pX!ipoV?bD-NZ3V5BuEeu3D|N4 z$WhoM!7(YHO1XkiL@b6z#1d#ktb|6yYG_2PfkwnSXhiIUM#KhaM1c69h&TX`2oMXB z8$c{bZUC_`BjPwX&_T%*!U9FaF|ZgcH-I+e`*a@!w|YPmuAbcv0-m4&Ysi8WkOtJk z2Q=h~zFZWvY64^lXdDVPt$P+jQhG3Sivy_o0QcxX$pjTcTZ*9Raa^q!SS zvIAr;2!p0>AZZ%H0)-4{L=CZ~0cTKZfYZKP8=2z zAR{C}MF*i^JPQrRbI@SC3=PIB&|tg;4aOVr6bWKMQY454Ns%BHW-#6dr#_GmAuLd+ z+yjfj4y4-_?<9%p2K81$kUuX&NkCmYTwCmtKD`bWN#0TYc z&^irB@&vIU;R<3w!WG1Vge%BSkli5s8XSfoA46E6a0P8C!<9TsIMevUK^+#2!_X`b zN~9kD6AVB)35PEz>49tmxq%CN_=3*q2DdmsYC !+0}1dia9OKo4IgHb{17W`ksR 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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/x64/DebugFast/portaudio.pdb b/Externals/portaudio/x64/DebugFast/portaudio.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3642ec683a190c8bca4d42f0648e36107ea72a40 GIT binary patch literal 184320 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˕l^>*Ffg2EU}ykY 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%0Ahh`XJ7!i1!O-6uLp-eDAhw)pg36v z7K3FpjQBvyVbJgg2foMu1c9B5H~;@{{=vxaau6(rRKA0(0c9@Ga5#F;8r1v(MF?oQ zD|&?F7f==-po{`)cY!<%!XUdqkpVhb0oIG?ghoaeG&1_3kueb(8Iz!qF$J1o=0hW4 z8Y`q{2;zexVGBGGKrG1qc@PV-e;&kwL;}bSAh&=pX!ipoV?bD-NZ3V5BuEeu3D|N4 z$WhoM!7(YHO1XkiL@b6z#1d#ktb|6yYG_2PfkwnSXhiIUM#KhaM1c69h&TX`2oMXB z8$c{bZUC_`BjPwX&_T%*!U9FaF|ZgcH-I+e`*a@!w|YPmuAbcv0-m4&Ysi8WkOtJk z2Q=h~zFZWvY64^lXdDVPt$P+jQhG3Sivy_o0QcxX$pjTcTZ*9Raa^q!SS zvIAr;2!p0>AZZ%H0)-4{L=CZ~0cTKZfYZKP8=2z zAR{C}MF*i^JPQrRbI@SC3=PIB&|tg;4aOVr6bWKMQY454Ns%BHW-#6dr#_GmAuLd+ z+yjfj4y4-_?<9%p2K81$kUuX&NkCmYTwCmtKD`bWN#0TYc z&^irB@&vIU;R<3w!WG1Vge%BSkli5s8XSfoA46E6a0P8C!<9TsIMevUK^+#2!_X`b zN~9kD6AVB)35PEz>49tmxq%CN_=3*q2DdmsYC !+0}1dia9OKo4IgHb{17W`ksR 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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/x64/Release/portaudio.pdb b/Externals/portaudio/x64/Release/portaudio.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3642ec683a190c8bca4d42f0648e36107ea72a40 GIT binary patch literal 184320 zcmeaxOfJeV&QB{*aMpL$)>iNhc2h9dGce%gl5z=VU|?VnU|?WkU|`T?U|?7Q;xjNX zXhZ2yYBU5!Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$($b^6b!~an*8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiSyLx6#SLF~YX;q1dvzm0~#Xb6mk zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD{CofJJtG4H0|-M1#JUCM1_&DzN+1?8 z&Beed1kxkKz`(%Az#+iQ22#NY-Y>w#z$CyZz`(%6z{udoz$(hX&;Z&(08#+O0g0g{ znK_O*Ir+(nC7Jno?nU{f1wNU1*$kmLr5qd>K7aZMGMgD{wi*Mo5U(gR1B(F2*u2z= z5{8c;KFBQ`3`wPFX{kjZJs>wQF)%Q(g4Kc4f}DxdBI4Y@2Js)rJs|r*esv?>uQ=>L z_>mLp$2h1TLE+56kdv90?VMklSHb}DC&*q7u$WU$esXp($gePQ0fyp&#G+JCn4*YF zFeJi5y_n(CN06IY7#Ntik-|oS0c+Ucb+ZryqYyI#0|UsNAa{WZmc4Bbf^6%gYNfFmNzr<`tBdptuy)*9FOIFyxn( zU?_m}ZJ8Mum~6pjL*mSX!6n!wwJb9k)#D7IScM_sQH3=O;$4CRg8TzqgF+(XT|9$a zokN2CL;YM_T*Ew_UE^I`gPnss142Cg{o=#pT^vIk8A3_b0Sha8Xjm07Fbgq>f_loB z_Ju?SxW>EshWa>$xVkWW`Uq0T$bds#ScD5G{6K1$aH$D*@dc@IVqgc^$W+3>z~Csv zfI~GyxCwTv92^)veGJ3nZcxa$`S^#&2f6yWxCSwR+=R{DaCOd(0U@D5t{}I0F|dn* z#&tk$bH?g6m@cgDgGqwjI0>2#oxo`&q_Q9tlKxzT7#LU>ToOwX-E#8FA!6#_Gzm#X zo+%J9MK%To2?m$c;^d;t0??2a!zb`q6i8fw!8bppG$$40X3+QyNKAvlGp{7IC@nEL z6+D)s#K6E{z!08TmWnVJl9#zP`(DSqp;?ofW+|3JkU^}bAGO8US>&VVoqiixD*LWEiTO| zftDqBRDklxGHBdQ0*~Ef=4GT7WtOC-AWA1_T11;?-A(fkA*V8HZOseFT-ItPBiHen{~t!3Yim z3d&MO0Z@8mWPpr~27uy$g^>X^9v3LYzyQMR;BhYw0S<67VrB?}##=B*Jp&_nY%T=K zHp3cMp3XUm#l>!k$tC$kl?Jp*qw6Oa>G%q_ZzdVm2)Dy}ArC(6EB}4UzF)#|TFfcHH%um7UCKiTN zs9kALJ+S-<(gP|BLGFUYGZRAwRBa|yZ51>ue z1(Bve@dip$1z>TA8#x$Yv4t=bWF9Qs9fTMdVB^T3@CTikR0Iw8VyJzfI4*&*LFpEA zPQ=r@IG`xMAhoEZGB~w_ArzGlvJYfN8Pp6=SQ0V=bnDxhY;!lDxFXGB_EQoR^$ShDi!SYu**0jvbPzw#GI;dM<`3s~Tl#XHfs{yL65vop&fl&yQ z#zE>pF?iGfjwoq>S?pBW%Gfb3ylU}tE9>TieY zhvijd{it@bFmyuobV2phLGxcdI83qUza}jC4=;}dfS_>MspnS%_;0&$jA?-6z+TdVt&d)0WO%s0l z2y!E+?KlZ390Ulot{(DY zth@q+$!sA822dT0C7gWX@8-c`)jToF5SVgTE7?{k#=?Y@+1xCmmv2%W2S!z*9YEejHQcfx;*+LrY z$f6+s;Y#-))lsQM`Dg|p2|?0*5;Se=fZYI+4z+-#Rgf4514zsQ><18E0L(WuLslaJ z7BezI7E=I=85@DbKyC!JPprUpK>VozoeKwNLS#1!Au#NyJT z)FOC5p$bF%3QAKp(D`pr-x-weK>3^jk{>hk(gRY9GV@bFZidNmFyumv&P~lL2`))2 zDhbKVh4x`VdIcB~%TkLH(^EmNfX@3fGcX9*A^BAT>Q_?S3d$QG^Fg5nnU`l0aDciU z);_WoU|;~L0jULzUVz$1P6D8QBV-OAB#)3|WN-oZRUmy%kQ}H^N60fVxPj$41VCnj z+TI}bPK=PT5vGR!|AQUl9dmLRpkp8)UU6}1Zc==(Q2&|_8qz2Y@gqf`n>=+-ET2fk+7nYb)3T~H!^mBmJ27^5cF~5PK zA=oiKBqOt!L63o5RFHuIJl5kWzyMO|SW;3Hl30|UTEY-+0t!hu-@$=_i-A#~5WIE> z()aX+#ycqe7C_g>fbtY(o&c@;$w|%3OUsXk1Uf?~h7ckz_(9E;Vqg?vWnf?cjW2-e zJRboD27dtt29RB#^Z{vmvoZvL(-xCJAXFdrd|8rFl$w}=uomVJ?Bbv@4CJq1sF|QL z5z}7~y}3!rAg`esh$4vaTPV~#SlcB8oF8-Y!6rcK>o5V(7%0>L21tDgYP*Dk)q-*! zXgw3cCxpY4Q2BY+y`!M{3zAnE8KR-#83R=ZYxjb}9TX2B^&mDP4pHk@kym=#hF#mcmkQL!4O}PTacEQn48J~@-qhm15+AOJQ*-R{EF;n zP`H8o2#QHq8JYq06D&?Z@*s5}dqHJh7S!+AP<5cTASg~j@xj0W8e@l)t+8lvnFr=W z%2rUAg6ssD3yEtch61oWvnZ&{1(_wm!0=HEYuuG2ru#U@d%7@$!dRgA1G%GE0MaH^ zVPNIm!8XWelNU3Zf5`?<=6; z3@Y;!k;=R(Byj~K@fxT&$gP-m#K-3($CqU0rpBivmLxKSqVhrE2(q&dYQ`c)$T~+z z+{1$b95$s4pz-OP1A_`kZDtBsO*wd+6r?w?BsCp0+6Rpr1_lNWMv!<;W;V2K0df-$V{TG>a%oX~ zZej&2Zo%=$2oA*f%)FAEc(}8nW`W`qDxX)Hi;(_|kXL}p=jP{O$X5z5Fla#J!EOfG zXTX?TQdy8{h)@hM3zW_*pmH$xRSPgMI4~A~HNeDbLH=eeNY2SkEI<|uU@S;3MG~tQ zU|@&`~pg23=HKyiFxUz zpjZXPDM*Zop&Z=RDyoE(Z6GlgkXTA;07xAuuY%^hnvmSV#sJHq=y{bx0Fv(+8I-~K zo)Nrm5>zgL@;<0s0MVfKS}U}?X#=MpMg~~h4paw&)F7+vfU50;t7R62l}&~W3?IM2 z=Yt9oJ@Z^r%Tjal3qb8wXxoL6p&-!(sq+SEw=gjjB>MWgg4-<23q|bAC~(V`)leKGbY>hJr-@;9#&h93XRif*oPzaDw@e zb{iK%L84Qte=tmro1q{v+{M>B7-|j=LqVdKqq8?mo);wV80;9}3DM67G7DsHaB^m9 zUUI5OfG2|y1G^|6w0+ehz`ziY2%Vw;O*eU_Foc_+iGbT!Oai^oaD>%|pn3*5jzE0S z8ryyWP@9@bU;EQInx|!P3JN0R{$8 znE*-;AR3f*rb68{4XPH`ToB0WfTGN@#FEs2M7N^+yb`EGJfR~Zcojh0hrPUohbzn^ zB!eOPKz(a$VTCk!5*m<*;DPcg$p4_R7Fbx!hWZayXM@596b`UFHWwNW^PuXmw~Yf5 zA+t{KMt(6vD5e<1enx=>0-)9ar2V}RYA&db0@(>`-z|oUdtt4|VP?a|%Rv1`STI3c zf-VEIdnuCL%b<41F)#{&mRc_nfQ*TQ+7ZhI7#Kh_XbcV%9*}gw#;^h!9xI`GwHO$M zI2jliK;Z@&n^+{kzyQLaejZ3a2(N;gi!g_iVKvm8HBfV4?Ng9BApIZ=G6SK9g<&03 z&w8jH*!=GdaJgB4k_y400j-y2g4^PtvK&(W&H>d!&@nEMI@mbbd;!pWZb)iTZe|{+ z_XsM#*9tH&STOh(q~<}w6;yVB#5aKIA_mW5xBQ~q#1iOGZE6YwDF1@SYBz%21Zt^) z<}WGFzaY1P(kvo87#Lvf&MnaJ0Lg*U5Xe@T+%~8jXg>wEyaLLe5T9W$RE49c6Jxm=Jxapi58M#yk0f(LRFY%CR&<`@`q6Vo%3 z!R?Hl;P?maHNlL>-2$MtYcbY&Wl*}6V1UTM@)Iong#H%)HFvjMNl#HK4qs z!BAS9S_E2)07-j$z-bJk50v&m=7Hh{v}Ry0Qkn^Xj_W{tNP66W{0s_5P?~_`T}B4j zK8*v=c*8#S2`P77i;D7#zzz&W6M)4Pqrf4gvg9z-Oebht2vq+uFl0a$8-eOdXnzYd z49dcg3Nqa}KLyfP1J#Qh5U~)@NI%G3p!U#Fr0@`c*1Uw=1?n%r+ASOm3?GsCQfPch zG`=(%Uj&WMkH+Uk%!u#uq~4i=pwA(D;gId^I#asPBgy zUb1NNx(uK`Dw6=HJO!mKSosS{Uyz}bu+*aB%=|oXz5}HJ76wrB9+LJU@eJzlLHHnj z0?=|8+(3q=5sQ4F^b8b(5Na%t)u0*#?(c%kae%1_hEGp1fXa9-1_q{Q zNO9%CfZSpOMHM7!K}8X$j0e>bp!yq>{y^~rYRkdm=_NGm+n{9-D4rOg=?ms>kQfU? zGSUPXBs@WN1_xxUJ{3}@L&QOD7hotZO;1lPE=f&+1rXR@pz>V;R>lPvq$X#kWhO%k zY>;yqKy5|P+{9}n|AEpXLETei7ALV5CX~&dFl()PFNoq6wV9`#hF#mu?Ub`Szuv^ zR8N4^aWIrYOOsC@L2d@s3Ez;yk_TEx5^xMC5fR}vh?|ka%?KK9KcId9r8khfVDa$_ zDh_J{gW9Yh3`#Q~bs!9CLxB5NYzz#jWdL)1b*DOm&|>w#hGE{JcRb1<+$&0vR`0dgCttpu_cWEaSf zpk55DO~D0K2kY;G@&*Wl!T_Wm8oOd^7y z7C!_hK=TBoj3K_=4e}o-Zb9)3YTH8Ci~^wcDlENAK*Jd}uM3G&%(@MfHlXXjQOZk@ zxBvrW-8W1E6y6|l32501TDJfSGb098Q5FUUCMhJpA<9m0@e1!@gLtsI0pwnY+nEGp zpza0v2^23daZp^q*r0fTu|eSsVuR8csD1{8D5xI=OVgmT3Y7Lhav(LJG8mMml?5Sd zmX3ha9i(3dk_V{+rBhITgtZ+&WdX<>kUS*(m>ARrL3^+vd$B=f1V|jz4@RhAX3&J% z@d#`OBRG%4%mk?iVT5`n1|1|bL1hvMgTfi1hM7T6kbwcYYyg=7!k|0|QVXI%B9$ZO9ul0l9lR zbpC;Xf#IVZw2T3T4FdycIttc4NlC3>`1BDpP6k@k$NJFv0hIS~ z_2(hs5m1z$oLXF*4_~){CJd?XKxW!N^T{HlF6TdmS&0&2GH0qNDXw!EU1b`G6kXrG$ssE6P8$%2`cSS6$K;~f!3CX7AK~sf=-<% zPfY=@fnW!h3!rpr2P!kcr&6Hm^aXV+K?AcO!!f16dj~-N291S5@;hSg4Af@?r5{{j z3vFn_HVq&`7efLOzE05a1*IitLC8Ft00YCvPb`o*B1l?F11&Tt4oEEuElw?hgcY+-)HDBZo1h{Q*+r z0apWZKc*Ux`+dM+4v|Ck0Ho~!a(@8KEpQJ&_qwg4;-GJgV!`Iu%n2r@9tU;s@Pf?5}lcmnBLfV3AS zv81%vEhjM@=5A0NEdlpsz{fl4gN2d#Yq zsNPZs?T0o(7JRG8#Xs$E6BhAaxcgaAR5%>g0w+d7=oew zq!6foLH2>tFi1aaZVRLzp@)$n9I7V*st2}K3#1Oz4h4lH2!ql+NFRu1U|?m4g6fNg z>Vvh9VfsM%0HL0lAr`7W4yqp6KQMbhW+U{lFeE_rBtrFo`~&JAg8XC0z$nDWz`y{u zj{!1I1=0_)7es?FD6N8M7zU*eP}qXP4rC8VEvVI=0&S~;)PdUSpfG{8t3l?2#6jvI z;mpL4j?}IO$%EnnW+p@pGeaht8c;l-n#0VH4Yn83h6b4f3I~uqAa$Vm*IckXhXBN# zkhnq)XHeP)sYU2vW+*_jH(3x8Hpps*4x}y#d{}(;fGlCiH8iq_2SpyZ9_dAhfg%|!)`t+ww1CE4Ka!ZC8Khk?0ZGi*2qHES zNzBXyA~p#s1`1Qi{w8LIrO>?%%b@!ZU}ZgMzW_)bBybrSRzTIQgsKD0lVJ97;$4EB zLfzb4gFsv1!CPezTu7b)je)Kf0+p1I^$TmD=7Gk#G0j8X=K!hQQFl8)#6WQkN*C*( zW`Wr2p=?-P0rJmUAqIvG82dX|7&b!vwh5{Sw4MsnE%7eF&W-`WU|)e4F#j+KY=P>7 zl`SBHg{u^p-wRu+TQg4_yn7bv_T>X{jKLe=krs>i-=(Iec?B|e@Z z6hgzoVGmRfvK@Pc5M?>cj(t!&_CwVp>_^1+LAV?w&w|_wYF8lCGBF&6nsWr3TIgAk z5IdO|jzQHPhpGj|6?p$L17dv{$c~d};dctE?=)1O6m))UIcPu)vfmBdBLi=)hqgsm zVcAm$5<}lpw;8;r4zi~eyrvA2tiWyN9pL?Spz+wm0$4kJH+YYoOKCw)W^!UlDzX-E zzC9oW8rKa@Epg5V?d?nijrjV2R=h#;@F5}4nh;Q}n3xRP$9Gf+R3EvgmIN21CT6D= zIp^o4Wu`;&?Fk{!SZ^>^xidnbabNg8dT<>Jn*ZizU|>264jXX6&Je+XoR>g5kWh0H zNCcLCKz;_bleCzT#}`t{LE{3j{w%0mU|~opNAACX#5fpI%6&8Qf>V?8^HLIvDj}VF z@Te>}Y(Q#wKxz^z@Tw7DNGT5}%FInHs)WP_blwuAUj(Axque*MA~P@DF((J61k#5A zsgXcc6AU`1BpId*nm$14WYE=t4hYE1ONS{1^;Nbb{txzE@It3M48@~GA!nPGyg2F)s%|198cLa_+$Hyb2*RErS)azIgoW)YHm zTo_WyL-I=!b3Dp@Q*)g_V>95q1`1~nxEXLMxEp*R{s1>I)7>DEfv!J*A*DPt4|J46 zNKs;5aaw8-DD8QaqsM0mD1GH5Ryr4y`j@2^Wuzvi1j7{}xix|zr93FL7_^@~#Sof* zLGFw}5(l-vKy`)$0|V0qq&$}Z+FJ^$DzMZUp!^QXW3V~{)CT~yH9+Mmhz7NVE8%y19t#`{q9Aa^~0vO#@j%=#9KyFi5$R=0s95bk>f zH5az0@-aA05PK>?;Q$(Ae*zYVl#i%;DxqG+Y8S#Dkh!36h4~#67O*{*p!k8*dCUyY zp?-e>br&oiLFz&3Kz%10{QQ~5Cg*}jP$_5@EPjYFHk+8{DbK>P@4;pfj}&X z|Cj{6LG{7%56G_XXl;fcP&DB3Q32=*Yl7Oe#qD&NH3^fhmLW9&z}axDQFIs5!7jdIF|vu-`*J%laQ1PV!`4R z6m}r@fYK7^TpbV_7Qdi5PZnWFn;KR=vI;}iDX!AOWa;L8yM1T|&Z; zwb>xGkaCHMK^Ur51gaJkexgt|vR$D49w3ZvmpD|v1XK^KT(g4aL&$g*BZCxFoitP( z%xoJW$UaVxe?a>gKyHKiLl&w>4yp&_w*An4KZq>`4@=m77A6K*dQgJu!Cu~hW6K4x z)dVuE1RkY_#3WWZNE|W>s0f2fYDnKz6>3itG_8U106A-uU~MoS2GDlIVt89f06NDI zfMq^U1hxjvH?cUI;nPQuUqNMqI#SvN?d=Ag%154GnZSMpr8`&}0<8g1L(79&(0I~@ zh6Skafmx1&!yI(b8KlSnt*8pm%tHtu$|PN=Ij}tidcu&sC7`ecr43M<2gC-Y6-fGG zW6+1X!2qfkG|mGXm(gHg_-F==A0u$sq=7bSgUcsaxN9(^R+JPa`sC-OyX6--=47Vl zfp;c>`~oTujKTUK1(*(`JU}=dhhMPQ-6i3UVXkieLB5V5t`Q8OC|pDsm_q#lO6O)! z_ByB^K;ugc4CRn;3`tCf^~XTsObmJO;uq#O7KS`X7YsE08JwC7Qx6J54u(9(vUG6! zJ0P_PBnfHDgUsS#$OB(601gdkJp~fyV<>mZECCw^UWf@Z4luz)R53NHX zHM9k)9jJ0Jdu*X*gY2<`vO#T3{PtkA04j(`3l328KxR8a*?J6&LR<_C44^g)2!q;K zps_937>|uG1B1OV1A~(=`dKDi49?KJ;sP}bWUece4QgKy}-HC8N zC@q2d5x!t?Z0<)j8=t)(J3)B{GyK72r%N%Unu3-#FfJqvKyl~~b*mm^&H{851_J{_ zypLm$yKB6sUx=%_YY;;SDj#GgXgn5Ft}-!v`q%_rPXgMP!vLDoOij#1+c^U6i-XQ7 z31CP@J;nrDMu64=WkBy?LCnNL$`w!^EMP1^s$UU#7B;>O8vCn2Q3DwR1C5b3popW4 z4uR`TkeUt@HIR93NGgJu11k3>FhbT4Ld3y~BK_0Sic?F#MIl5TC`_iHr~{R35Cx#J z6(m0cDi59`M@WOiC{UPzVF6=7YEc?^c0RQzBr`c1RBS>l1-lodW(8wGQEFLcera() zPGTi^3K#Q@UV-uixg)LC~L-SHni_&uPA-jYT?%x5G_bd)7&CAQo zONYi0$nAR=(=ziCb3jWuz@7qyLP=^K*j=E$)B%)mgr;Mteo#N}1d2R(EdtbMkhlif zae)zhhA&$1K;%L0zrqMQjRO+&uzCa}egmQpVjfz!g3P_c2wMMukOo@-9Ula>4<0Z= z);b~k2_*i4u^2oo35o{LN*a*IVfKRLKQI>L=j4DEH-V4Zfs9W=%>~8B4@THIqL5Kf zP&xpK|6zpe$AXAL{0DL;0~1U=bQTjDcc6AO2U7uL1yyEVI%p&~C$$8;J`H4MkT3&- z08?f$c*QYv{V+&Ogeenc{V+&Of~mM9zW|!kKv4{}10*NIln7drj3fzh8z_twn2IZl zOHy+|DXu6ewKzYg6m)_uWLbtUqzwvkrv_7bVrB_wbsbnGIDLS`4UpUq=|Mr#9ms48 z3^`Bu8Yz%o2Ml>c2!P5!H3kNzV5BnDgNe8@5LEAh+N+>)8M7Qkt`iXD4rYCTDhDYe znFPY1(3mM= zI14;TfZ#&vJCHui_yvs>xw^TzI)}g~ADt0=P}qXPA^{o}^Puf%kYDH-79jgTa}#b6 z;Cca^pAv;ZdqHywT!Nk5B0#Hy7$E!5K<(!w^spf~_QxauYNvqm0c>0n)F#C?E}05# z3#LKC1lE5CsRyMakXu2$-3+L@OsG0NtZgn(_&b4ybHH)t3}!;&3l#3zP`$9eB*=~& zXkQXG9+3;RCl9I?+5Mn7M-T?N3!m0@Z`; z9#pkV3}sNYZ8ur7J>5@NUXG|C^fGnAip>hRN2AGtx{ponW^rnCD2j}R0mfGgXVBS^RXqMWt!l8 zS}hEkw?!S31*xqQ2F=}q&OL_IfsMl8`C8C{d|-Xe!k{@?&~6}ze48-n>`lll70eBt z!l1J^-BU~ald@8iOFZ)e5=%0m>-wsI+Hb zD8M!r3@N-VFzY#Jn+{1HRz`y20aSi~@-1lW9>fOOhgs$#*QqGx5wH#^d`UaJeGok8cLDhlAzA?iKv_1x2M8Zl)@ZA`5p!#6>24wzRwDNHt)Q z!A0b$V^A~D!}+){0|O|Y5caY#oPgSU5{Dj8SflGX4b^i7st4JRpu7vx1EN9c0bv&_ z!#SwF^H6sgVVAfZg!1WKJzS;_| zdqCq4kosu{xV{0cU&3Br?iB{rHNhzLd2$Qp#2l5btFj50*0W};*$I#*qL{yghBfuKyHZu*R^MbLHi#ZlM72T zi&8=T+R~!rRA?Xmf-nQa4p11O)v=&)Pte+pi{SJCsb3DD)TKz3Bx>z~B;f$Rs~D87 zKy?eK{sgV-1F=EtJz+ ze^Bd7h+Ww1f!P6STY=mS@&hQ{!`Ps@8N`N_-=MJ|%sj`;a0i;_?n2!Pt2aUFL3tCD zS3&jWeWV$XenQRs1=aTt+K;{mPHWi9 z(uY{eQji#WS^5M^S^AtnS^5e~S^5@MmLipfA8@qYKZDCtL|OO^t?m8;T!tdbrQhJP z6HzXK+Qpzf^nbwqhvc;cl(GY*0Sd~-sM!uf8c~jb!U&YtKzR_9$3bjZ8Uu}WW6O68 zB9Ju^j3Tf#5s)(;Kw9)r0JRka~n#CI&gE zT6rvL(c71bP_;@})S|a9RiJ8B;c5}(1uVU&L*-!Q1t?r#U;EbinZlic3&CjJ);?C~iSz8>pNEjjMy$ zuzU)dGsITT89>vOAv9gV+7}@8p!5gIGoW(L7^=<$st$J64oDqn?i_?c<9ML{CurOp zqz^WC4l)N)rg1WuLCrCTniB`D_l&^)$DWQ&v7}>=7wU1u<`cS*f7P!P;~nyFpybe7GoUqbAUA``Jk92;$07H@|`+SCD@p{z2@=i-4+w-K_~Z)2A}+L&=DZeF;q}p$HD+QgbpkSKIad# zwkruK965+MPu>ff?}@Pk)CW%nn_mj@3DmV2*w$*8 zF)#}8FfcF#2s1EDh3@A9t-FGSGd3}hJ3(O%DaUvi(x73M4h=I{oFSVD(t~U+LO(l0 zCRBeGR6i_Vfb@g(fiNhpL3$wZ%)*cZ)sqX=1Bz!*eFBMFCIL_z8^%5iO=loApt>9; z4(bPh*syjH$UgLTVF}cpQY3p^k;;i2B(p*7evo+}doqy3LG?3CJP%16R42m3L45!i z+a1aLd?fXt`FDsKNZJLt7ZfItcwl5`g1WUC>Q;~(C>}v&A55+lDhDf4StbD?>Zf%nqnN(0C*$55dMGyP)E*{0}OFKxTk2!W?FX9;i9JQ1!62m>~7t zBA~OT7#R9QAnS=iZU*TE(F_c14E<2O6QFw0?E1fBz5{f9FtNSHBRL94k}~U7QUn z?&#<2;U5G!tDhYz=IZC{@8TNo85|$#=L*{3>k5(QfXchL!sMZ{pCM;YaYE$-9788`D`;L|U~u*fh|UwIDNi7?Lv6eIffaU}6Fc#kq+&Ibczkm7_<`yi zSltD3BS<}HoDJ00gVCV$01^k)U7MihY=)WxtFK^s5o(zjwnEizgQ|tKU14fLW`gQD zgdP@#9Y|;5fYgD`5CW+~s9|Qi4-!|r4EqEb7+`J(ozo985BY2&h&mRA17QC`;v1w6VFn|^A&8s+ zs67CSGtiwOTn(V{V@A+6G6qmy0JQ~KCd z3k`^O5AqKUfEeJ6EQD~wIjC8%^aP4i5JrR{6T<~?7%~Z5gsR0c<^ZZ0!@w0Ws3;C` zjR;`~jmH#3*nJslo*Qm|IQsa2!`0I-IKl)cnei&UNU%f6}arW4Hgdoox@#R z0=h91T2|hHh(qpNfv$H1ozHz2EDkBtScvG4qn@Vx;nw~?F(pn1E)pMMM4aSv87i~IoS9v z=w3IFIuH%2N8Uiw>|2C7@cpDL(E8~;LL6KVeSp?OAR46qBUJwgsFvu3ljq?R4p5tT97*;wXi-v$X-w%6XX_A5;$1*1=M@ z_yMlg zOk+^qgOmp;<^I9YG6A$<7}QRK=39_F=sX|1nB{vfs>P1l9peT3)-I!a)+o81A_=dag}qh3(S^}pfCchqZb1;Iw0Ad zL4*-4NN|J^EUrLt1d1<^y`cC2(V+1e32698!ovr)R~>OjtTbGX8Gh%V0`#sI3FvqL zXg&io9$kVVr(gRe=B7I4rGPG@4@(7K#~g}N3K6&RPG6Yx0jTf6z<{`O2PDq{-pc{;FKF++1Vc^%*f40_4yo4)@(K_qW_$$25okV3 z6Una{*!+qoj$maQsLcw>pP+OKvI|rOX+zVg4m1uy{s*}Yxdwv< z6hP$@XiP+$!Ohh%Bs9o1-pxPA*)`tL#U&`-(a$A5IK(j|6moB-1YAvoua8GaNC0&F zMiMUW;u-Ad<=5~k%Fspb9Hrrm?;exbMoKl>>uhE!T_2FV;7Z$jzh_cLdKy$+gyYETtlF~@$n1}VStQB zVUclgV2FZ`%eZ(32lzNff<{U_-Q$Cu9sPVf{aoYygIrvLJpJ6`L;ZpST%A4LK%+B| z@gYVALV5y%{N2F;9p(!43ll*-V0ZdBI=i~S;)WDG@u2|$u0d{|u0AeqoG9tuX{Gj7xOb9X0fG`vA7#K5(m>F1%1xd`s4|HY( zyC|q^2Dx7ml)mD9Jzad_JwY}b7#J9V5*C^e_$=CWOvr8w2=Whb4FXL!I|cjugoe1r zhX#3q?SuFME*~5MPG`X(jzN%dI*4E3@{XY)9{!+-Yec#Lxdbi`4Lq>%;IT@G9})79 z;bBPHh4>XN=Nb{>>W5q&u!6$^F7FoP=nfuc2ZcQwsvIa1!2V%J6%TL>4i5JZf{bNy zpv#4Lfc0=*7FlF{oYzwI4xw1yoOgXi&Wcn#%{(T_8SaMVG25Xl#i|Kur{~HW4=W4AKu8R|C-? z3~Pt_LeEA5i7_y+GiX5dYeMyd%!Z70F*3mJ+R}!~!P@&E_kh$v+`!173pGOzsxAy` zA2lE`JTuQXHx;x?+_4}N?GOaWF+sSb5p5|0s2$g!Z7I+l%AmVyGEzZ9$0-QIp?wI@ z-K8E#_XB`VP((DLAY%|9H7gjBKnEOV=A}apg+NyWYBz8&VsEz!K=#%{n%$5ssNiuL zQ22;I&kI171hrv7bAb|!<=_y3$a$uK+QOi)1C2u)i9$Oa3=9kkjFg9+9@aSV0G*xV z=?6LP)-lW##6*O(2{f!h?JZL%8#az?CJLF`1+9$)wHrYgl%_!G0+fD1eK@px1gs@)tr3q#xvNcc|U4z3QO*8Ike~LIX6}R3vb6_bm3#%P)t|*@M*jLe)Y}3&E!N(?^isK<$4|q_hsYV;9{Ypjj7mF_7Ot zX#teSKz$WG0Z2LM4fQLmy$_NHt&c`l>kEw&Kd4$*e1h&B_ZLO1MFXw50fhxZFB?Mu zRBs?uFKo^Lls`b}6O<1?7^DZp2hC~)L-m9}^_XGJizSKaklYB`%oxrPipmH17ZjIa zP%~h817ue?G#w)BWM+tf+8GH|kDNCg7#Kdn&SC`h*BBVeeKVnV;DPu|4CMhZKFAL& z3}r4wnPsWyV=&R8pc<&SDj+X07q)i@6kh0Q2V|xXLpd}NK++RP%#Q)-7}(FCdXrTY zRQAQ7qzBY+z!okbe}lpS)bE3h@x?*?4GJ@mJ3)O`SegLUU!b}bqz}XfrJqD-cqKvg z!Q#~enjT>30;C60Ke8~SK=q`e=>e4!pl}1Z34}p;XlfgVjqa zgTXriL2*$n2AVfd!&)YdzR)AoqdhN<4jiAvFqg2{keo zk#0d|gYqOS-Gb_OP@V+E6(~GFe9%~F6Er-Uq2U2a^TtSQkUv4@fW(85#C4!-nE6^_ z3=G)Tymvy)?}Dm_wQ)h}LGA#hM^L%a169`xRR@bhkUCIX4x|^f;dgj&so7jr`KQ5(aR)bP71m zJxfw^8Nl~4g8JlB!FEC7P=f&;htByqIjP{ON3_^Pl|aNR$Uaznm_q#n8mGi8<3N=i z?AS(dXW7Zel_3K&5-q<&~_+DUV_CpGcPl@ zG#88fOi((8=?8^hVhOmdI$Ml^!Gi@f!vhI7P`rZLnxJ}Q4pKS~U$b=XU zntlSeHPOUC=?_%CfbtD2ZG-YKj14LmVQf%&3Sxuo!%Xv@D1|IEOJRt?>{|p1F9t>i z*q-FYV7DXoB!k+KpuWTsus9^|axkFU!4QhdhnWpB3*=5%*;Im~d|VDKn^r*G0xKUu z>Oo~5D2_qp<0`1S)lhY?@)4vCy^dQ8Rl5$V7F5S$h81YdV*#{I%1*6h2t^Y>lsOxq z<{V?17rI7o;A1R|{fqAS^uhL*-!YwUyww#$G3^!BQuH z#L(-6^;qhJEug#v+Q;t*$wNC~b$?i5PARmlun%1SgU%yBh#e3E)%ni(xw)Ao$ocFb z*qx9x>426d38j0G-JrB-gnI5~DEh&hr~;7m09sdxNK2qKqmc|DUVG5TA?{;f zhr&gI0Qc{)A&p!xL1|B$gy+fcHfg7l4=$vq5e<4RsrKdpscn zU<{#9214IiLi+NH64OB!U4WX9iRr1ZvgSNgANDe_BrzR2>z$jX4XZhSvbQr z*wM|^F(}9}5*)B_9!&pbsDAA8x1e}+bO!5mc60{m!5&6nb)k^Bb9M}c#swZTJ)vfL z5;7B}FchTn^QVt^%=Cep=|jj&n8HwyO8jPeK+W_ZWF|~uC`je!PapAwlbcTn)KoX0 z5CZ19IKdq2;skOnj`R%uA}|}|2R!z`3MRM~NTEg09#DY< z)dONe)Z?)SqzGO*IXl9*5Pf+3;}Z}Z5(Kpf%m(=fXWn*p^a%(@)&Sx_?7-fJ00%B; z(k;v}$kWjemJX3bK=$FxV=k_cvcSa^To!=J&ezcL1H?Xx#7=>(9RP`+K@z_LWp83- z76P@2A>%D&;JOmVXF?kXgNd^s#En38D@>dXA#My42aR)ZFeHa1Lf27(&g$o2NP_c0 z%N98pGU0rXJ2)6h!2%$2K}#?=7;@n9p!O37Ln&AQBoFFma4=-%m4H-0*Q9{@vLG`c zf{?is(B3!>h76D@a9{HXxJ^E$X|eR5(lw6Apy$}ffb<2sa|36;MA<(Fnc z{CN|~hpn-_1?87Q)8B0Z7y>z1ynqzptuBfPxni>SUE@#951h+VxV45St4YOA~gMgGcqVGDzJgZ_6oo$ z4#XFP@ZtFunzkSr8R}Nhz77tC0&va&=>he>Kxqvu096B;N9JHCfM#e&Sc1l}KMl@p!PD*=u>T5DQo+7~sDru<5`|E=yoIQPWMrrq z%nndAg8Tp)Q{`YN00lqX{C5z21*MQo1a|Lxs2D60f%JZWia{~}#2uhM9S1`}St3#% z2bJxhu??_uq4N>G3=B*kk@_+cps{D9`U6~dA@M==i4t_I1hlS?fgvro1X|XB%2WY{ zg3J_#PvG^XpgpXgk<1nW@B9O$hSZ{xO5A;3SpO81R*=U`L1U+&G1ITme&si4-2)r1 z2B`AGkUu0ZHnZi1yxka|%11jQF<1V#v|P8hC^NdP?V2p(U7?5PCl z0WHu0>4T(eCI&I6K5?i%*jY4!V83A>ZxIm(mCdO0E+8@V@fHbj(7cO#YKco?Nupa$ zemOM%gVK#8*nCLXDIkX(C@N6m7bJj)8<3fxa07)Q$S*K9$bJwT6gQZC4^QwYv~x}- zXxC6EG7nU4fy|PF`X5KyLDCO$4+DxBAQ6~33Q%)kX-5(4Pt3HV1Qv(*pMwF}MW|-O z%mvM1f&2$@E67X`8ZsVlaWKHHE5$)hQrzLGA*%#T?}vUKR#(s2&Tb9%Q$ms%2uZf~vKK zszr`dkXt|);dW*QTc~%Y8v2l zi9O$IW6Ad*G4ykK_VHZdgybTtV`pQSix4A!$4QYArW&Y^dl*oZ^VSM$w;T_6E&C)taG&Qk}K zN#IE$lzA6NanLzy;G0swZE+Ak0_hxC5I+HQW^5{??d~EDJzveWEH$qLG*^}bzB3!- zHc&VgfZQFNS_GPn0=1DrWeYz81CuK_j3Ify0wwQ*N)puk4-$cu0U)=7@;#^w0Hq5U z8x#j1HY{y|(k`g21Hz!ZhlqC;1}|v5dqd+Ld96Soc%KbqUjZnef%Jj;mZ18@530`} zst@D_(7Y?iUJ%ri+-!_iogfQB%m9T;G}Jx# z%!4%>phpHm>lRc|nEzs-=3)0Aq#g-M1zqBV>O5pIm|5{qvp{J8R6c;($N~%uAKkF7 z(}IN^XsIdm8le0lMEIcyL;Mdq&lOUSq(ZLs2`I`0UD#6Tm!Ah(HwBVoWI&Sx*R+uO zg$Z2_dcG+rFM;$jqszNw7MB!dCV_7sg3gVzpsR6D%mtm{4ARevE(ba~F)1+_bO$C# zo()63C?DcH$l7;yboubiyp;TM-^9Gc^wc7Tk4_BiqM*4~P##PMl`YU&SJc2@2seQR zEvf{#9y|p-Uz}F=s6~l0FcdH%&K-&oXJDAXl#HC10}??OT|oN>pmCWQsPfR91nJ9w z^e;e_2bZOB;tUKcm@@Oi@*(3KAbU43<(Goi8i2~n1aSt23(Q4GDHm!jw66lP_XdhQ z)LN)KNdE&Ac}V{WWbX^+{8G?a;-GW`vMW)Xf#CylDyYx~yUiXn=*E&%nwFMY>P zgPI9CcZ-Fk2<5&r@Yo+qN;xE|Q17A=V99_8L&FM`rzBW1oOAMvQ-eS!tQSM-4Uo73 zOf96k0oP3+aSfQbYegn3Y(U}$EE(WlVP;;sKXgcgje04gs+ya%apmrdr4#Hj@ z!ZH@bEYx)l2r-BqOafU@b75zsf&2y&QE07rG-Mz^fiFtXckP}`Y`796I#sZlM zjnn)hXlx?n6~K1F9dz{dc44lV7EJ_6zl^`*Yo($+6pO8~CAZZXJo`ZA`bq%Oo z0FB3k0usr-7f}Cz_JP36dxLNTq_+UgAE3DXz))HYyT;lv54`uq7c|ok^B*X`{$R+> z&&!8uMY4;55h0Eoej1>$Qm~wFW(9QLJm`!b0mhQV%p6p6K;}yziTkGJ<`-2mfY{nKqg3QciQ0MOact>b0U}o96{}R7SLKBCV@^Q zHK6bUxf5n5$Uar5`#^FaJA0sZ_QLfsg2$v_<#<0r9DJTehB#z>D99{OpJO6a|0Jk7 zjapg1-_VuSj(pl}3RAER1F{pO7THda zK2X0Agh6bOogf;de>GJ98mNAd9K=1046wLb2bBYv4QhLV%m$qygIUHx`YNcs98hl; z*8jznfz{I+p?1K=*fxRl8)A$N)Yk%y&u#{bgDWEj*ccnCso3p;*#jDv0J$IJ7f^i( zV`oF{hmEI!!WVs>Lldg z!jM3eDf^-3!ouqSI9xEp>mXPhHM~%ag#{OiAi^F{c?t8&PNXsf)Ha8SABDOFdmj^$ zCXoB8$X-MjhsD!zsF^VTodEj-;XhE@5R@KHg2hq&hioRyd&puiJ3wIu@&hctgW?U_ zy81KFxIYVZ6D*B@)PvFptZX|ERd)fZ4%VIlsrx4eDN8`}m&$Am3?K~B3(3c9440sK zFGKah$~cf-SQ!UV%fxUMs`eT-wP<6VH=t^7Le;|d&7A{>8}>25i&(}4L1O4*f>*%p zRruH+xGi%XJRTU7nvXCLG}MF*m$5{YDGyvVsdtB3Am~T}42TVjUr?IG7QgqQVe|kRMzHt=sRzXoEPfwB z)jfu)LpB!_N1!+csfWZ9Gs9D;`e!)QgUm%%{{pK1B~*P8bnf*bIBc-T)e|gn1rkG# ztLIqa>J^r_0_9=Q9*WmsJ0bC*0gVsjJOm1LYD9k{0`6sBl&ro$iSjV>@We;lo0B`zY9g~B}!u;?RYCbGK zg52>9+NOcTGZVvis9SzuQ44B6fZPpJ`wOb}H&iWhc!1Uuf%?7(^~?-^q3ZuZ)g!wD zw4MQ>mI*X5#{ddzMhVEADXjefax*A>Vw%swz$^ioi)4Z7L3R&V4@!B$%)ka!&yGbs zsIEkJKPOZ@7gRm6`%&96Obk3wwY*TZC~jecl%ELyGBfZ))eAt?Bb$xt4kiX6s9Iqx zYC&Z(!dxZ>QK(ums9NN31cf;aBlNH^NI>;SLiMyk$M`;i^AYyE`vpth1&N{O-JjsR z8&(kQsTYIpBTI zP&59EgZ9M*rHb<$%#3MMX>%FlLTz82D>>RdGMV$ z1k7QT0MFl~mO$N#>>!X|K=KhF_h8CH9R%sOa!7#g(E;rpgABW%n*)*u-=Ryu9Bv5) zh60d%zNICwF&{n&28IgIybzL@pacU$14s;FQE*9W0eFZ7ghVLxTu6}k z1SD}6qX$eSK z4kA}T%X8Fn5ma)+N_0#aSa}FapP+Ial=fl$1X$Zx4x091`4%)Tf~|~KfaVoNsCrPD zwHR8yf!H8@AUkl(`$L9Upw2~b5N!ZesJXDVqZ-)nh_)kWeK)A>s16nfg$QWv19Xc3 z#$Ex){1&KB1@beb9A{+Eg!(}XY8OZj79KD;9jF{EJV0RqS}Um{!N34g4>60GK@Vz{ zK2$v@3_xl?VSrGF=z|y`sRPYlLewG7)&q^D!OASqxCRJ=>P=Aj3^EVI2KD{Sp!S+W z&4am<3Dj1F_EACVA^u`!u!O3&f~tp=x1hcfdOc?YRci}X3#-RLW`oQG)h(cU+#agV z0j`co0MxDo`3V#byOH`FptdDUycT+HAV>|UZ37brwP`?XkR1?zBF0Z&E4 z1Q2P{4{9!`KTFUYXc|W~93+S^F92#DEUgEE(=;NjgWL;B>p@^~cv?p_5{G-SuXXoy z&dR!V!^(#csC%%__afATe8CWk%7>W|1~mibr*N>_5q<)>3*@H=usGaLINgPP zO}r=glATa6g$U0msNEntu*45Y57g-}CPHrvR4>fkv0(Qh+zoOE$lY;Zak#rd27$IV zCKi=I%mVdovDoch?3I|D4Z8>`Ge3_Z)DuGt7KRB>w}9I7#Fz#36xh6g_>iE`;1JNg z0-kQ3&ak7YeFOacT>V1geLaJNJ^kDv^SNx`djwn~T;qdXeca-MT-`l`LtKL(dO*9- z{6pdA%&~*jhWddvGR24Z$2&TKPOXB>yK;c#{9IjK;)7hB{QW^^_<`nYInl-ALp|dI zT!X-l@b_bIV_+BMf}T&c5p>@KWbd%2bAC#yXI^nhVonZdvoP{GRp?USIoT*^Ukg%Z zq?Cg@r_eEGkQnIfR^)MTkQnI9R!A2Yau`3TZU>2j&T9=yElw>eOHBc_hd^lwv_5XL z2qexyqyR&_ORzKeig)mR*$^fq{$c$-kXZ~2gxvyK#|b%e(fb0NN&^sxe;-ZH`tvBF2t?x;AieRdpP>JyLx;2xx_oV zxcIvII>GKLVPrs(b8+=?4RM7^L*kwZSw7e`1ayuX?0iRNG&$JaE#L$OUk`v}zPqcR zYmg)S?haOD{hoedjy|5CO-}<$#5F^|iJ$+n3bFiSa$Br!T3%S=r4{82?JM>-; zxW}P4d%*b)4h(fvPFJCMprgG)iW2jR(^89qKugNO?Q&3Bfu09k>0D3>nhnlKO-x|` zwRJ%8x)Uj0ML_Y2NP1uvsNB$l$E9aVPHJ#QX-NvG1qwbdkP)=bI5{;1E(*Qt1+?xP z)UMbK2@9Asct#X_&k3>!%3UXZprwb<7=e@}j0|8gS07jKae`obnIK~D>-a$V2^2TX z5OMHn`5-fg(`+}#veDD9Q+_fsJnR} z@_zmykkk&kTZb1~*6oFaw~N28Uw%p|BDj$Rz~!0{2jsj-Mg}KOKNrY>t?_Q2elDJV zpwmbFLxY^*XAUwUt8w=C^K*3$0TuM1aAHQ53vzYw41!8R-O7S2@8s(4>F44f?&st0 z=mLrnNc^%QtAR;-`niKuK+R!8R^#gD0#k;ph8KY6=yORf5 z-r2`7IM~z0G0f4^2XsCzG!611s{vgG1v(rOp$P02K4djuXMpxzf=W+>LQvfCBdY_4 zS8$}CGw9?|NV)>45kOYs>gR&00un}o$ZEjmga*K47#e><$Z8S3{O9IkaZr8el9+)LEth#3R#V_zh8)}UkKMLnoV6=-eY+|)H6e~6uJEIRA#tvTQys(;u(YU-Q(cg&m#Z_p?W=)PT|kh(Zvb4K zCQfxeu8zTwb8)qBssWXj?m><&kaJzNk<~%N%p=Iv4d!+o6nW!-cn?=c7igN*MV1SO zoCh8cjUV)I*F#nt0J@AU7?i{@l!MZPKC)U=bA#g@eL$y6gU{RnsWm`W3ohS4nI{N- zX1F1WJVw5P6^7t+Y=o>9oQPc`LIQjoJ^g$=gMA%CoIN0QlrgfpfKVqN&tMPNAVh`% zxyuAu4Jae~I7XtDx{x$vimWa;*e5h1-p?@%e3m)9jcJCW27JL^JlJ`W0j>yJA?BH* zsP*%7b8~fxhm>0w^@jzrS~C+TPw>I%pejF@0n~=IfVLy{L)sCb{0?axK-#bfzJmh; zXuJfpE(6qW$Y5ajI1hS$6(fU7Flf6V_ylW6xe@Fi>gVF(8s_Qj8V}ky24VU-1_Xeb zQP6t|negj#aSe73@(chKjq!%Cw91TMkE>s(FR0h)8gB@RM;83*G2Ipp(Z`BkAF|sV zVQyn1UQako4?BK62>(FCjDuM9;S3-BkoqWxL>Tbu1Rbo7ClbMJNZ9$Bpgsnv{ZVIF zhZNeE2K7}X7}85KQ(S_b-6FtU^t|L$@Z2%Td<~?2sUdVu0wk`3Bo6DZg655nAoXhu zK>ZqLL=P3*VMXGD`Zz|=J`N*8KyYZhi>sSss1Izcfe9=Izx@()J*U5)Pb4_M!1_7I zKw}IgiRl5sp`a_e{QW@Nosjts4h*1k4ngGv1B0`_ue*;^ylaHBDIuadjq!v(Woz&q3AdLDzAf0jHS^ zSlWvR66h2Q*Ct8b$F>%1TX!tnZ#D1iIVOC9^0sxdiM(=b}_l=NqK& zya;IO6-mw&di6_cI5=I43WN4YVUu?R%RdkT?Uh23hplgbSOM93k^XuEL=CIVAJkN^^2tN(*vQE1*961U^rZlYxQh0yw-tqgJ4OR^-Jq=)M?8 zo(K){0i8S_FEr0 z9}7eb)Di$UBtUn+g2r4xZo2}>V<3w`Lt~JP1>-q5Fic{G^v@X>!b0L*eFH)wA@vX= zi0=ow1r}m26Nv9=1kUHoU^e8g3KkGM2*PFsvn{}C*g$OONHCin#0HOgLCoR+@j=Jh zK;6#?;=^4JQNslia}5fD-G|H#;)72qg2?lL_^^{`pz+5G5`%UzKzRxj-+Ul37guLb zU&NT407%T!5bQQV5IfWpUe60b_~0{QK>CFtd=r>?A|Spe#E+sNcBrQXOim2M_eAs^ z#6f(}eIrnRN`Uxb{+_V$JxLJXBgi!vR0Tl&AO#W&2nm9jDGlO-2CO0HaDn?vG9WQ$ zhyciqvLHU_h6oo|H%~uAe?$%>4n7G85~uPIKIotyu-{cc{2*6n*gY7kAik$xNIa7L zY9KL?AHaf;uy+87fm*kq@pY)*96@5>Q;Q&KoIw2GkRVq_U$9-y5WatqqdR=O#|0t= zQse3p@9%`%UvY)V`3E6nzH%hhPj>?A@dWXq_p!NxZVdw2 z2zB>={;-gEP+E)!843v}27xfp#_;_Ddf4eJwv#X)^*kRZdSk4g;eq9)Mx z@ih?!hA_tGl0?sxIRXfGd6Pa z3<+`#4D}3x+06o~vys(!`o#NqIt4ifLGmsKx_od*kiVZhsJjvD=?+S4koXorSLf## z;u+=|555&Cz#o(=z+uJG0Gj1=_V-1$GbG5-+1tg{DHJjk2Xi~(W@%qXFaMzUFe6C( zfc%9f2To(4_70M`ryn%_Kz;~{hYb9?fbUp|_i^=e4}pz&K;*+hK*L||jsYktKyG1V zfO-ZLNAbRn5%JDWu>AR-!P!43-qXj|HN?Z;1w8T_AMESs;{#R)8dnMi-6#+CJ0keChzKjkOQ3s0g7apUMI(3PiJsf4iYAybPyB|@k2Z~o+0AU zumbxn9^4Ouh=bxCt{!qfyq~Y5pQAhUesAP3fm{+F3X_iyat(3x^ow^42!LMD4lTO` zz+nM(1L$hqcwf*RNT55aK%*q!FaVv)0P}~dV~AILh)1ZOcRVgR zVBriA4{&t$2I&SRKS)1A0-8^5h%hh&r55BQCZ`rV=NEaT6#0R!zspQ^NlnWHolzWa zf=?RUu4IGuD;XO8L+kH&l=%S$SUVs-AjlP3*2epK`oY}@mj?~tfl`38hbQ!o8+h9y z-qQ~>0_6(5M+e@vfXsQq`{m4Vv%q(5`N7n)z{NxTz_X;#_m-$V2qS`v=8?##W$dkOwLcwiB!Zk`8#G;-0~v@-Z|BcHbNy zlDMNAWXzBsDh4*g!!tOafZSIo9bZ{*BgFCmNb~mbs zg9C#Q^u9CL{1f;ZGsrk2e2xY-?*x{E46lO6z+hvC&ylX^AkYjvkkPpOfuz4r2 zoR6cQdnl-Z1BoBld=pp>l)b=-6e0(kX9CN?ZzF@q!RD91a-oj#0iF@AKG6H(VDm{Z zIcI+#f6$&>P`ZT8A%W%mA$J(U=8M2$AUDK2y1V*8=7C`IL|{3nzhP+==6Bd!5m-$C zs5plV!ot!LY@P@q532LP!3WL@usI^IJSfzlc>p#i1Qz#%oO2HH18g1$EDmbX#Dj(c zL8~<&nHgp;Y%U0_E+8Zbq70nlB4Fbwu(=?xnh2Mmc>f?zcTYd?c#06T-gp2h3qY1Y z?nr}_2ME4{0|V&HEs)#5EiusI4{+`P&EP`fixJd916__5;^_=?9}`&2+20R3=f(`? z!#g?PG8Q%t@(ALFFvlQ77Y)h*m$BR6{l^GjAJFVHsKAH^F+ed1a|5y*cv>1Z^$^_>7I>P$E%wT@Fr=OV# z1E~Ijh3zwly}^;eh_Honz+nqpa|l`&30fb?E`Yi=@&$AZ=OuIu2eyt7q#k*V-)pG4 zH&At;^Nv7cGq1p77vOcXh-=WGW07w~K;u2AXI_ECkk?;>)}Vs!oqq>52QmgC!QctK zGy%G53W*0A(*li`Lc$Ol*`OeF>ve2&CwZF=deJ<;W-g% zE-O^r*&jTi0rn#sRLs%G(-Br4vO~o}{XG5spnm0mih(=|N_(I&E08}wLHr2{H;_Ld z{)F)y92lgaZ4Cy708ba+U{7!n5*i%u=N|+btpNLt5nawT9PBnGH1U8SS07JbnBP&& za|v>EgO!OaX!<<;K#i&(*I;Pf#BX8)QS10}WZZLgy{m(c}Vx{QceF;e+ZP zH%~wKxbpvcR5?h=0XowWv99im2zm&CM~Oj)oS=joSk%FR!3>^$fjLF{=1npIE%gjs6$*ck= zFSv=|vG50iptHnE!DH-yL>L%s7+~`7(=ov6Kz?&z0I&E2k9mXoUVo9wdk+R2QBOpg z0ND##j}EK1eu+TpH^`cLMg|7xd0LFn`?z5986b6_@CDUz5VcGU%uux~P_?kS6QmXt z_MmV^sAmS>I02d~VTYd2@ z#2^NBi#Sv*$St6`5|CS9VGhy<(gUg!K<<))>XC-(xda`{V}Rc!4r%LxduO1fKF~Uf z5iSp!zyLJ>!ypT&pz=&`c~Hk1GK&Y&4r&W9qsj$?X76EgEO5DS@Ul73NM=ZoCwRFb ztlncqsBv}jca9J64+sr_3>bkIAcE{*gR60J^>7UH^bdmcLD=Equshg&z2jkPtKfA6 z^j7qE@Ysp3BY5Zp#PJ3#Dgl?KA^vJm|9ecu>y_)H{rabp_+0K?N$CKyDI%s|QU6fO|V3{*Yt>c8?%j9yG-i>=@?i z0&=snhpRKZ-!BAL3}zc2WXmH@{PkN8kOaOV#(e;^E3AL8ib*?OceK&XMuX{=O-`3=Cg57#OTL z7#O_d85q)J7#K3R7#KkJoS%zgV7PC=z_3r9fq|!*fq_qif#D1r1A{Xs1A|LC1H&X0 z28Ib-3=9s23=F4C85jaZ7#M0j7#M0o7#JS1GB7lHF)(b8V_>+P#=y{A#lVmu$-wa0 zjDg|1Ed#?HMg|5q0S1QpFb0M>5)2GG)fpJF0vQD#N*Dvf zT6+eD;%EkjQga4|Hfsh3jtB+@4?hNmWCaF>zF-E1Zbb$L_gn^srg{d3-MI`5qAm;! z`B@AMpRySk%=H-UzdI7%@vFd8s0G{rJ7Tq$Q@D0XLHuu^4UI3&fuASlhiu&RcE zL4}`z;h78r!`4~`hLy1l3@ls>3?2mx47>Ok7)tCJ7?KMa7#O)37<9!L7?$TUF!VSw zFbD-RFj%lLFf_+AFtF<~Fr15LV954jVDJ!OV7Twjz+hL#z|a`Rz>sOgz)-2fz>p@w zz_8Mvf#F6S1H+Dd28Is_3=E+h3=FUA!Bq;we>(<-+7t$cRgnw~VLA*9JP`~GrQr+= zm%SMnlyVsuQZyJCJ_j){I4LkNoXcQfaFAqR$TnnP;NxXrnC`*AAaBLMkXOyXa9@dm z!B>lc;blGp!`cD{h9d$D41QJ&457vh3=VH7;K3^HUopM83V&Z2?hp5PX>lk zMh1rE3JeVWWeg00ehdtMWf>TX^B5RFXFzXtVqj1eXJGg(&%iKAj)8%diGjf-kb&V4 zCj$e2C<8-IDFef!dIkp2{f~Z93=Erd7#KEtFfbUDFfb@pF)+x6Gcc4&GB7NuWMFtu z#=xNHz`)?;#lSE^$ZNni3|+p9t;dg zkqiv>J`4;jbqowHsSFHVRSXQveHj>fQW+RBDj688@)#IyIWsVPH)CLkC}CjOmBqkN zoyNex?9ITi&ya!PoG$}IcPRtI30?+FmSLiFr;QPFa*RgFeFqnFfg$(Fa+8%Fl>-zU}&giU?@#sVAxZ| z!0@Gjfg#h4fg#M3fnmP^14EGq14C~x1A}BT1A~4b14B^+1H-o*28Mhk28K=^28Om^ z28J7z3=G$;7#McsGB8xjGcc_5V_?`9%)k(;&%h8G%)l_!g@Iw67X!lk*%=rni7+svX)rJt+c7W%Wiv2531eV*W6HoV zgOP!OHI#wjGYbQQ0}lhk`eFu#i(U*2Q*0O*vUnL7W|=WC$Yn7wwAM2)IHfT#h!ij| z=mj${Wco5N_**bA+;(ALh+%=$E7z(S80;z;7~WbjFfh9_Fia0&V9-}*VE8J+!0=d$ zfx)Phfq{#Qfnho;1B0px1H&5u28J6d3=DEg3=D083=G%o7#JcL7#PZUA$3Kf3j>3o zF#`iv00V=(9s`3t69dESLn>qu7tQG?U zlN(0O+VZ^|& z+Jk{XyO@DtHYWqaDjo)gsT>Rp58@aY+{+jk#6j`N$G~vHjDZ0(HaWM1fuWwAf#IYj z1H*Jh28Msh3=BKC85rtv7#O$$85r)yF)$bzFfg2qV_=BVW?;A;#K15?kb$92m4Ttt zh=HL*hk>D!i-BRiG6O?yA_Id!5Cg+083u;<0tSZIGzJDuHwFgwcm{@rNem26gc%q< zvNAB7VP#+lPGVqKrOUwJ?90Gllgz+yJ&S=MnT3HtIgf$ilqv(mr3eOwXfFl^&JYHM zqG$$&pE?W-%LN!1c%>N_c8N1E9J6I$XmDU)NK<2A&|qO;xDvy_pjXYnuqcCpA=r|E zfm51+;Uqf)LsC2gLz*K4gNz0PgN7diLz*xHL#i?ZgN!c&!%IU3hGcFA1_@pUhHFI( z3~NDiz!3}#joJ(hL5>UzS{e)tXE+!bL=_kqma#H0D9bP~C|EHt1gSDGtdnM7sLN+y zuoq%rSSioIFoBJM;Z`IA!)Gf7hGkU@3}z7w3}qn<3@s5140{V17`}xvFa)_VFgUp~ zFl+hP$N<43VIEB!z*&O`U-u*@}T- zmLUTJ8>miDW?q0X6s!NZAx;Xxn+ zgM2OnL#H033{tISVECxZz|ic#z;Gvmfg#w2fdO=H&~G~ih7|=247IEb3{ya5niT`X zv}gu~zCs3uv@`~W7EuO<8L|uv3+fmcM64MYu0%61^jI=5%wT0;uyJHySX#}%@T{1D zVHapzK7xV4F_?h?bauwGS_X#80t^fRDGUs^oER9EvoJ77Rx>a(aWF8%S}`zuv0z|W zoXNmo%)-C`I@j=uHUq<49R`NCEDQ|x5ey9PvKSa5KyI;RVECZKz)%p)z~E)dz_1~M zf#H-g1H-3K1_mx!28O#L3=DR43=H!m7#LcT7#JStGcfGVV_=BpV_iz`)RE%E0hDnSo)JBLlM=09t7KqklxAQk;$UEy$;80m7S6!%PM3j!57ds2Wng$( z&A^~x%)rna$G~uqhk@a{2LnSS69Yq46azy*Is=2GKLbN~F$2RR0|thaLaeB?E)KGy}swGX{p`ehdsZ${8453o$S(RAgY-7skM_Qx|j42p&f4AKD%3|j;k7<4rl7$(>p6*fZU3K;iNkQ z!#^bk2H|=JhF)d{hW*YA3~dYy4Bf^I4AvnG3@3OP81@!1Fx=E(VA!9^z;G&>fkC5` zfk8Bff#E+314EBB1H&mU28Kx?3=H=q7#QvqGcYhpF)%o$FfcG>GcZUMF)%zcWnj3V z%fP@c#K7>Th=Ji`CIiEidIkm?Z3YG>9|nd^;S3D@Yzz$FLl_w5W->6$^JicM(9X!f5G4iagUGotFx-%1V0h%nz|fP)z%ZwTfkB3ef#Ieo1H<0{28J{h28Q?X z3=FVynIPk3EDYt)@v;i&co}S5%}^9|EVBx#t{SQi`#A>S^~1iosgRRfz=z_1&WFy- zLlFbbqk+cqYN2L@VLjgqW)|c)3&*?^=;=L>6OG`;VwFaW+t)+wIEJ!UyO@e+J*O3c zPN)xn9dHXBKL?FFi$KrGg}4~9Kfghgfk6U#?l0{8T##A?s2H+Zkhls1>RHmDaOY%T zU}^-9k%C54L3IHvtcVMDkQ+c_sGvRJps{&KT7cZb4jL1KiLt=!hB)dYD4sxbIH39g zVl#M-ATb;qzgQyze0DBwX-GWrF))IL6Bs;185lrrL5$}zF|iJ20DXhGSod&pn70;3g_YATB#2f}t{D974pNEt;!Dq39GXVAD2jq89I^P5hQ_#J63=BC1 zpzFI}{sE;k#91ajsd?!o8OU;=^Gv`eoCKvN=NF}X$>+!|Fg&XdMWO zchKC@N~pS3XzCo%)UAQ4TMJbOvmaz0C~QFHf$Rs-pt5K^RQ(1t^&oSxsow-uzZt3? zRwlyy2QnKruecSeb{kYJC@*S3&)vd)juUEKf+)ZtbqlO)*as032n zAc;RrbU@9)jFF^PW<`GawfdQr$)cyg55wgAmP<;oX`e1n$qz_X)Gs9u1`Xf;F zb_|R{d<>8}9ONb#2DuAl7if<)$ld6CkT^&l;TArIV^Fh?L(PVjN1*%-QU}S~j0`8C z>Q2GcF$sXwfa(M-21X%H1_lODI|(EPvIB%c_JRBZO4}el$UPu4K{NvcC&O8&ndhKp z!p^xyHUp#&WClnNLN6P`1*qPOP`$7)1l3a@`%u+0GhBwMzXDYc^XD#Tc?wbwDtE6z z)m?|GgSEXt?)V@8sRKZ4kXt}BsO<&n_khZ}TTne9Ihc8{aJvJQ1D)Z8*}lom1>MFC zY2F~%u=4L7R4>erptAbDDCF#akX<1Eg39&>P`5vXst2`6L3f^m>O&?5hL5oGz(8UQ z3>o>QMUXNL#Ajs4&4k@E1L89=6sN-O!3Ob}A#D-x8W<3tg&_@I2ZQ*m3@N3#xs_n~ z$D#}jYzzg7p!yw@2SIB`pCIKy4z#;zLv2d)@)C1XQ*=ub)9oN_Iw@#70}{r?`FZID zB}E1K#h@|)WF}~h)-xnCS%@$*4aLk{uvwt~2h@(l+ycZMeGswaB#?awH6@wJ*~MT# zJ_XxdoLf)=*>nCJ%+JkC$z=Elx`&sIfr0IXD5%eZ;yDIv_wdR=-35uqa_|B*kex3@ zL8+^h0hDGyeW6!iJ0QIw9tK1@VF*RAVQHoWTJM6=0H{6!r2z@>S{WvRLZ}=l%@#x1 zpmYSf&j^$UU}+XK&JN1oAaxp0bs#n<&w#{XZGq3Ch&|JgbkD@_1)3JW!qXy$0H{p@ zy8Gj@5Tw5kO2-I3vuGsr4j(RX{|Uk8gz`akAjlsuc^Dt$FOWZBd{s2{>S%mVG(H~# z=sq@V`^O_48%m-mmIsnn2cwvR!Yt07r6LJ`X;sjPUg4)P&A`A=~ zLJSNb8e|3}9k4KPLe1cUn*r&6gWA!cdJCi$ls-ZB@j%t`Le-WrK=(8^{C5ls3WSIEaa}M$h@pOjlEe5T32Zbxh5By>b4Dl#d zfEGET2!Pj(!om^c7Xj#9Hz55We+feUB?R>sC>%leV1d%I95^j<2!Pg>f%4uTLC9Ev zC>FIsV6~9&1KEQ*zQ)8L0kuaGi(WCXUJe0>n-KSJ%D~lf2teW;Atwiw1Ep(F8P6jC zx$6gXB_50oG7rWEoeK|QBi8==dPc;%cm~DC8;1Bp*84Luz{QM0{2_a{nNY>zL2JA~ z`@BHwt9b_U&xS>bAC=vYH|tWP*hAoL_XJqnumSuFBbElOZ+j-1W6#w)rOiY1}#58 zYc@drY>+BYT?BGJsO|%;`2l;80aV9eu@8JtHoB)E_JGFLFv9?LuNmlCFUNw+pwt3T z4?3>|+?)n?&A?YxVU>oM3rZ*YQ1^q}iD?Jiov`C3K(~Zq5k#102sICsX9^h@z<0bc zut4t9!ZaV|2Z+DnW5QsEBg9~JBPVulAZg9kJ`JfUuY z_18e^LE#1pM^Js~4OQm@Rp$k3Gccq=Qaf~wD#d042KZX!odjCT7rZZG2vhY4+kfx zpU}f0RE&Wk3@seOq2Uk#)q|Y2Ks{Y z$TP7}GhyvPQ2fQAxR;3`9%_FAR4o&<{_z6mBkX$&L3gNgFre-+1c@Q@NUqb4dmr?*ZJqtRf7b(WTpa8nx!v#_$ps0e@3o)RwAEE|)Jw3?WL@@>i0|waL zF)(9MLIPSZLi#Tt^%h8X$l%rS8FEGxXpBAy90riG#DM``#(_MPT9jClUj!R@RGl5P+A7@IT(V$<2~r=co^U(?t{nWLFWt#F!&~B zAZ1%}|#B&aCJT#%RnLvTTAa%Ng4^qyGAUL?ny%=En6)VvY~kRLf1 z7}yR=GcY(XAo~i_kD&Q?%(@$*2YmQ#ykn?~r$0j|h7ckj9EFAvXfH0vji4}NU;tHj zkgI(_VxaJFVDL?>$jmLxg|2)6)dw&+7Y5(VJdm7IW=U~CY7r#lAo(1m*8`>(hrAC= zKSZNj5$L}2yyQwy8w+Mf0L%<5YCz!t+H-syv^WV;G%!R!!;YA6sDjsv-ofyF#Gp;O zelCtduydq9o2Z~;1B?t<)%p1Q2f&Y=0x1X8mrU5zf(|eM9WeV5v~LpDk3A{PfK@d^ zxCu53!F3_*+zXIS_!+4Io__Jp;Qdg3&aRMsI3PEp%7Zp2L*zhiM3Dn$EYKjzC-684 zGlMtc=uVK?AbD`WLiDp>lLrT6uq$|T8MIBoimnc<2DE7#Vh$U+ysxW^XQ(gy{0??> zdC)Njp?=VtLm+J#4s_|VmYBF;b96{HSY z7NVS=avGebK#IVp=LUF!4iZI;PH;K`mAkNdP(T1u?w*B~4WRWXpfMfLdK3l~28L5< z3=Ee|85ruN7#MtFA?xW<#TgjR88a~K2xVY+!p6X`H;sYem<{P-mwe} zcl8+Si10BmOf6(!Si;W0P^iVg&|AU4&|Sd5 zVByZd;1R^Y5NFH45Twb#;A_ah@GOdfVGch7!*@3Zh6T)!HIa9#85k_n7#QxCFfb%n zK-Pd`AX`KZ*5TeAuVCu!d;N-x-pqt3R(CNd#P?yfYuu_qM;inn{!z2?1 zhDW&!44`}GU)M7*SXwYJbec0TEO%gF5U*ok*s0IJppneLFg1yRL0p-E!Aq8bLB)%K zAwrvhVOcx_Ll_$a!>W1)hE#6`2IfKr2AwDdhI^F^3>U2#7*={QFjUAgFi5a7Fj(<3 zFbHcfFzmNyVBiO>fA?fyc+Jnikm|+2U?#}Gu&{!Gp*DemLCTwfLC}?f!6Tc2Ayb-x z;cz7bgOWJ|!x9k&hE;_O4EM7b7&Idp7(z4|80Ob7FuaXpV7Lxiqt6K0A7Wq3z)%Ak zr!{9_5OZT-n3T`Jur-K*VHq!EZ<&e(1H%+)28KCa3=Hk*3=C!Z3=CUR7#I>jd-J>* z7!DgTFg&+sU~mv(U~mX!V9@elU|7qG1A`P30|RJ23$zwf610D*mVqG~ z6#u#m4A7zz`6~z);J?z%Y@Wfnl~31H%bs28Oqy3=H2T z7#M!~F)%E*V_?|F!N6eW%D}L~oPj~xje+5X3tO9BJKB{l|zT2BTBp%ey&bY2Dq2Ym*H zJ}m}@`R)u1TeBD#-f%H6+_Gd~C{AKvn8d-r@Ku3WF z!!jlYhG{Ac3@u^|45us@7y>|P*NcJSGAjc^H$MYIArk|`J7oq26G;Y!2GBmvXa#)N02-ec^I%|TH)mk@EyTcZSC4@qIE{h9xt4+9 zi3S6MlQU#b$2AEChKZRB3>T{z7}_)$7|cQb6J%geQet4Rwq;;oPGVr-&0=7X=V4$l z0PU4YV_=9(WMFuZ!N6c2$-rQf#K2Hu&cN_ffPvvl2m^zO0|Nu224vq^i82F&od*Mh zqyPg$Up@oF6G;XJMQa9zNF@dabz24o1qTL(AAAf9dzc|%V_46?@E^4IDuIE)Ooo9W z&y<0owTgkExr~9~Kqv#leK`h(-!TjfE{+Tg+z|{6tKAtGHpVhAxZ5%?G)FNoY)NBa zh~Q*k2oq&sC^ThYcoxpU5TnMx@UEVLA={RL;VmZv!*XrN-adys28K6v3=F2h3=9bx zkiC8VsSFIO;WVDJxSVED)k zItdsuCcWQ?fni?~14BFy1A}@c1H&5=1_nM?28Js>3=E4L85m-$85kDXFfi=VWMFun z&%p3ckb$AUfPp~{eg^-zD2* z$G{+|&A>1%gn@xymVqHvlY!wfHv>b1DFXvL0|Udx3I>K&aRvr$M+OFeBL)V~PzHtr zoD2-ErVI>KKaHWvfK?Fa^jLOBM8myD48(G?C14B4p+4C;0a3`(vH3?F0|7;gA8Ff0jTVDO7$ zU`SP9V0f&@z%WaUfk94#fk8QxfkD`Xfnk*?1H&0T28Jow3=B543=A!13=HSv85jgI z85pi-LiQ~2gCZR~X3xN|3`8q1FiaO@V32TNU|0p3%uZln=n!UL5NKdv*d)ThP_lr5 z0d!87$N>h18qnPO0|tg#G0+@4BY3Smg90N%D(Fr<2Sx^aNd|_T1V#p4DF%ju21bU* zQVa|d3mBojk5P)45SXH8$oTtnsz2z=jg`vWw|qF7eV6A*e=+t>UkOTk`k+N0#SEZ8 z1u22iFr!&u3{aZ;8^ypN;>5rp;mN>|YskRxQ<;I`wj2Y47z+b~y9NV8i2?%ypAQ4W zRtW}%t{Mi0$rTLXJ;o^#3=BV%85lyf7#LQnF)&O6r4s=Lh6x4?442~>7`W3I7(jO% zT6!`tsHHM6%=Tkokj`Xau#{(DSXRQo;8(`L@W>RR?iDWsLqs(LLwz;_LzE)}LxB|o z188g()TULcV_^7i#lX2W(I~HMg|56T?U4ep#6i= z3=Day3=Ccd3=CpS3=I2NA?=OHK@1FmJ`4;K85kHWq!}1Q@);Ob7cemBN-!`SsAXVq zc4lCB9?!sVzmkE0H-v$q0<>RTkAZ=mmx1Av69Yq}H3Nfz2m^y^5Cg+Uc?JenI|ha* z4h9DOQU->dWeg0;bqox<%@`P_XfZH!L@+RvGchpSDP~|;VaC8vz`?+Ea_IWcfoK|IEI915Nz-Gt5P|wZ4FvpL9;Z!*T zL!B`LLsdEh!xlXT2K9Od2C*szh7XJk42z@~7wHX*h85tPzBpDd)Dl;&=C}d!e zQf6S-R>#2LsL8-^K8=AP(3gRMC4qtAvj78wfGGpRWf2C37$yb=rwj%L4$vN*N(P1? z69xujHU@@9BL;@HVg`l^Ee3`uMUe9jKPcgKxMKh14D=h1H;~Y28II$3=BQd3=AvE7#NZ&7#K`)7#M`I85r`|7#Mb%FfgnK zwGjdt7(i=^CPyon zVCb-8U|?ouU@!yixi?{8kN~v}3Kn7{tOE7~Cxx7~bzFA6LtZWe!wPi< zhHOU$hQ@RTh8duGJe+~yQ78jLiWdVzpb`UvD;ffdoLxDO21A`C)!v@g4$#e#W$=VDIUxFDJN&*=e z_Qf$U#3e8=)aNiTEOTaH_@WFE`^nG1;A+Fb5Y5WK(96WYkjBFR-lrcXz`)>E%D_;P z#J~_6$iR^6$G`yUW4%vdVDPbEVAvhZz)-Ekz`&lsz`$I~z%bhXAMO8-_WvRE@o4{l zwEsWa{~zuDkM{ouZ~wo_i-AG6jDaCOkAdM+5Ca282m`|*2?mCPW(*8^{tOJK0~r{O zcrh?2fzGMOV_>kfWMJ6g!@%%IjDcZ=B?E&`76Zd`O9loOaR!F4bOr`HX9foCTn2^- zObiU?g&7zOa~T-qof#P9OBonqA{iL`xfvK7GZ+|-M=>zifyV8;A!pfKa%N!AN@rm3 zv1edV4Q61llV@Nk7h+&|8OFeHA`f!r$d4?@nBpCO28JK(3=Hku3=Ab%3=CNg3=Gkd z3=Egl7#J8p{Zj_|jb|K^W?)b`0P1=(P#v%_FfgoOU|?_u(MKV6NHQ=mY|&?6&;*@x z#=yV;YU;8wfcA?(#-n%`K;tnC44}Cx(4HbL1_lOhNOPD0G?y;Iz`(%Ez`y`nCL+!N z+D8ECqkw`9G=~M6A_kqeB+md^=fc1MT4xQKqXw!DXM$)@Z1O_qGx?zYf~^$<#T7^$Xni18BVsj0UX}mI1qy zLjdA0HU?R+pP2;Ypn5^+P9Dm(gQgLXJ_d$@qSUg?{L*4bUI2-)Fcc-`r39y@rWk_v zMS;XP;9^D$Ape5aKPV!l0Ul@?!08>L{R@dFn14X~4?yv(4E2u+)DNKfZO~9LXnq?M zU!d?nR;P}n4rB&M9W2cuhZ{&QB+Qt>XQ_a~NgJ-0Nk9k6hOPYrl{+8|(g&hJv*3CH zpsqb+&jLschCymTVGc^qkn=H!6NbBLbbpl~eBL7XfO_5UA`p2QT$ zvi^XQBA8i!ZxkekWag%(_?MQz#QuTZRgzkimzVUkq79{$E_q2!RrKA=?Wg&8`HwzM>?()koaRYAv zfZ53gHWQqFph^&7%6_vT(K#{CFTW%xH8I7lC_mQ`wzVGO1!x#>z}1BpWtOCdfccWn2YY3^!o%8d`Qj1Dbi$cK3A{3h_ zX#L|cHfAAEJq;-{+;Z|0ON@=;L-ON2^Gb}3AmuYij)MVRE*?_3K-c<$)Cgdzan8vs z0GH<=c?nE;h#6p2ki8)wbqZ+ej7$*j(7=$xbcX?^8n6v8e_CM5V|9lEnmR)>ggZPi z9TAxFSly9;rp^K>%rnsCV9tQ9Sp|h>0fri|Gr;XokbDJ(Jd!hz%xOSY z7wVZ;Vu1*c4h%V%LlE&g0aFdwA+UIvfhmvV5QI4k7{G}WluDtA65);&2szKZ5+m?E ztuXU9pvl2p2$SD|B5!C0Dsy0R2hilu^`1bHw}7Yl3#j5SZSb(afsluUC{lPoK$C-M zhPmklNZ!ZbpsXmT*kFn?-*>@G&loA4mAuHpva-7qZKG}i16LO=$v0r84nHxv;!Nd7s%=$xPJl3JWx zlvx1UP7B($0jjq^ZRR8iNdFeLuPhm~=7IsSuMD)_8?>(sG>S29Hka|$N8`S;=wY#&R>awBg zU~PPmx>D#_Y#bnmGB7dZLe=I$)q?yS3S}d^2h>+8kN}Nga0o#3GBXrH^%gCQhxB$5u zgh740W)!!wGPFSLZ-wgn2JPEsg3}-NeOEaWps^^_eODkc^nF+P5}>gq_tX;S{Jgx> z=x(BRu)o2HmLY(_ z6QVODzaT#+KfMx^VHrZP2qMNBK>h-aO@ZPf92%yu^a4un*z#L9G!A;8>S6f}q#ilH z^+DD3L)Epx_i#Wj$%}^vG^F3a5Rg$>oSB@M18M<-J6&LLCWN?a1*9_u7H4J%&QB{T zPb^A}_wUusEteo;2Vr;kMp?4qE(D4_H;QG$U1x~maNf%b$# zc7&EdgAu+X6tp+g&=~7>NW3~692h|1I|&*Nu>1uIugNIsn~7lxG|Z+#)q>8@0rgiH z7(DYp=?BDSWB_$hA^rf3TY~&Con(Jt-`tb(d}dHuM948Rz|znHEat$@&VZS-2x`t^ENW59XeNfGP_@gjs6{XHRzTIR zgsPQ-?)B^i=RNFY4(L7<^u3-SG4wKL8m!C#pBMxwH$eB@K=yYgmL$66)@?m;b!O9t^ zTz-*f3Y3|e0<{mMCID34K}s4_1)o2G&uasnA+Q=8Hjr{Dg25AN41DV+3LjQ4fZPU( ze^6clg)NL73k`Qzxdf^ku$4=odl5i-LFsJXCo3{r<4 z_uHUqw_{O@-e%YdRl5tSRta9-!MzJEw-`Zt4#8DFY98K0avsLMH5*?Z2JOxUh0$K9 z8G6=lr~qqWm1hi5sDyq=6!Y zsGE*L%>tQw49Z4M1E99oaTGT*Gn|0B`6N_5vj0%q5=;!Ip=!@S)q?B+wLd^<2U*`a z6g!w0&O`NGfa-(oZwI9xP#VKbn=A~Mpn5Jt^?>Sc+~EV-z?q)vmtT^ZR>=SlB4klm zp1BG&4>?>w_Jj5=AmWFa;X2g*8&LJg{zFyE#Bd9$_BK@QE@*kT37n^~mv^8wyXfT| zNDRHa+W{-@{1S6hq2=0cSlh}cKRGc6ab6}!Ex2vvo|B&hmVlIx2f<|?wEcusZXN-b zd7ySuX%bi%+Lr>E?*J;Z&{H3zu?Fsof$sY8z@`T3#?MEd30S7iFF&BL-XFff7c(t*Sx zs4almcLv2IwmvmT92N#3`$2IEiZ4(<2*w7rPhf0N-UYFx7#J8p>;FMB|CFr%r{?@W zX#Ng#j3Q|69~>R902!r6Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz7>B z0S7Gxh6!a13=H`U43Fg*7{Nf1~IBjh_EEV$c5@Zu|d_n=>%n&1PUo1f6~-0O@wq>uf`6p9KI~BLG^% z09p&s#0b61jUg4ZLIJd>4YbS#x|kQbXA)J;H~@5Wg=uasXbl5s?J5(hd|+uJXrmlN zFEgr~V@YB`CU~V-ULt&7Ckv{YAZJI2URG3b|AG?GI%0?%8=4$wU$#qTdS*#t4tPBt zI~IAzyu_S*=sr^pRC(|{EXf&(d3mWh5M?f&elY)WqN&ddk-0=$=z z3sp^!m!Y9=eo87ljJQ$dk$22~^kQHa<$>-|{03T+lo$@a84DI6kc-bi(E{GGh)WWD zp7<)%_;gRr_sLHV&C7=Qg%RQohk9^4Du&XLeA#(iKKTe5?WE?@$!_5Oht?-0j9 zwp53k!0zh;r3fS$2M2~c_a#W z^aZCDBo={|twH4AaSzhx56WQ>H-pZO0J-@WhMPeOvAY>A$0DpP|Hc@S553KPdxmcr!F%Tbs(t}+xRk6eDj#L&x5xHu?Q z(aKE}IY?m$Nyi+ZyQ%W>Km`$@@)BkSuCfv)kFA`9$)S{yR!C*!e+dQ#*MQ^-kU~iO zfSd%nfD%Ix95+?a_+Vs6g=8L3IRnk}OfWIjG7q8-wY-Cfp_X+JG1PJnB8FPVLBv4z zqLyz^ag?$RB8IzMgUDl+X%KPL@(dz|yDWpqqn2Y3G0ZXyRoo1cCIrAS0g(ddeB>L- zK7Rt=i2+)x3MwxcB_Z*Kq#7D&NFojn3{8kK4N@*)mS+%gP>u&30isA;85D$Ua7fRG1jZ)!522 zm^`7f45kiVj)C$9tQ=znyR{-2rU;Thz|KV%1m}%)&^54-wY;E3$$6?P}oZ_pze18truozU|?bg9asfvhBL@8V6F`YUA~0Ah8VO~7W-Y5$n`7oBHd6N z5{PxxoM8VlGN6Vdv?Yl(9FyVU2)aXpg8{n9Co>;hu!7o4pglc5!E2P$!Ob^Fii50^ z|1ALu$8>Ntk1YOI0u+v*Q(6%50y7J=7FvQK6J_5JC>%iH$c++?IJ^rw_XpAHL<%58 zIDq^Ds{26e!a;1%x^QOboymOAFap()ptJ*02V#T#0%C*ofY``-gpl-r(hf)+NDm}j z7{O;lf!N4;#E|qr(jnwtWKh_E^n>gHv61yiA?X37MTk1cSyG@ghCt_&f%JjcpmTy` zB_aEg<&g9xiG$KSBZC$+FXe#_Kw~H<%1=%$E{5hAkbVw^(&E%2&>de4A3_KjW?blf;0&$x%)NQbJ_@KSjDWLma7-08IGcl+_ z{h7==>!^NywgT2%nJwl)g~(urV;e_8UOdFoW+Z zfvEwBfiM?}Im`@Zk__;;1C@0Q49TuJsk!ho)Ij^kI2a1xVxavOpt!R@iMx`-bZ1AW z;E*5&(6xaOCM1qv=>nVCpu5(Q%?9l&2bpb!X?Ca&)Z|bf!sZIGfy!u1H``#E8|>`w z;tDky%m$T{puG{GdW(s{+27O8GbG+Iz%eMq*VQj1#3RVn(Z$sTQvWl+&~K1!u4uFwa(S0gFQ_HV*I}OO%atSnPq=p$0wg5R2bDp>gX8idVF> zn1p=Kq5>qmoO1G$ToOwX8DMGA9m!1spqOy-@pl3n3SvO)M>7|mS3q@H0mNLm7|gAn z=;k^*I)jaMc67$#R=9qUnV`Lj$oU4AC%v(l=@abf0y7uHhM5gYgKP}pj=_!rp78;W z&fcye!SMmELGhk`0ihxBPN8mYu0af-{Z{OtYYV{rbYDpZ2Ak46&Lbv*Ht~gvKe!!L0QVOxyg_&2KvDpxt_P)d$50Qb2SPmvhqohIc*D#M!VDW1 zCs?v~aRQYpAMv^Ogcxd>Vg^lfA(-Ym`*;R`uEvA98pegV9h4tV5)nROXyF61FC5c8 zP`L|Aj8OYvT!?)}@OHUNm}^9ct6xYw=pIN{zYs_n#>fB{2i=V59^~l5pvS-tK0g#x zUqnL6AJ91kc_pAxJxCdZ;Dh5FvM>3Z7^IGZl=Y0@^J78&je+NXMj_A;GDsb$o&%`^ z)d8S-4pNV^FvLOY$#^V!mIy%ZoJQA^2-TB>MNgnGL=PyvA={Gz)sqU<1FO41ZUd!X zgjyzsbg0@4s9M_;_^g`o&)UNKY;sEoiY&r1^1gF_rcfn0Q_=bHSVk|f>pq_UE z5<}mIm>>x{?*w%69^@>OWJ%B&C*afdzmoRiypFH@0^QAwTxVE8%ddJQ^TG9-vm@x@PUKslQA9v#16GG&X-~mQ zRB(9;Dzh-toTp1>aY159at72F$Xtj&KxwZDmOh~Uie|7o5p4!gdIp`x)B+ZV)EFEL zaI-f?i?C9nb0tyQ=sQW zC9xzGbnqrP&4I*O7*fhTGSf5Q5}!f!D&&mj4kSA`7~GRNdTC}#SZWbyVh1`t0m|qjPr;CN^MP`?nUJOe{; zyj!S`k4tEPk81?OM^Ie}YpYKpqJ0E9n;T1>@bv{Bj*yuQ9@lWr0Ua6(4GvsVkaPhG zn<;2vGZh>Lh_C^*@p{GGXor}Z+g)_)~Gtk^O z6YLIz`#|{(MiC`b&?%!3S#xKw7lP_O=-e&nNabRrX(KS-!GQrZ?uI4(pd9r8 zPJ6I}zHrEZ;tG_m7Ne!BCE&O~q$|*wB%pM)6f6!;S6EC%bS*()13Re%WKR+_9vB#$ zL*gC%TtKa77tat+e?LgrGJ?eYgOG$F^M_0zaX)`>Ya3ZTGf3RW)zJ+}hZzIAD69-w z4ry;Y`};w3#e=R)hqSp-#T*>KZ3Hag8C;TIl$Z|dnj`T*{sD#CO0;lW1r8rXxPj6( zDBMOOblsmsfi_} zMX3-mNS&RW1nQio=9R$5!a(9249TDd9$XC6j}c%fC<6}~K*#PkfZL%(>BWgj;FG99 z_q6LI<^J zL2U*LhUA>$%oMQsAhjMKwV>u~s#9hO^gMo$xDP{7YH?~&8R!gkP?-!mPir$$SOkE> z0((CM*7t}L!+uugR%m}>8#GPB&S?Ru2lY`v_JhW}cRYoQ$VgQanNHLfKNnZ!R{V15c zV@gUYB+fzN8VoS;pw!%aP!vPb&S7xh3M7}7SegSp0TN~^G@l#;_qF`<0*dkrQj1C| z!xD2!!Ie`wc)9s>h@J3#sNEZF=~aGnLtJuol?mL{e^++f7O2C9eH&Vl_O zAL`>6gVUSo3Lt1H0PJBvfK~8D~lG*}>^89i$ zlX%b(ory)@YTzR*JzoOH0VF+FFu>*=9ZOR(^C2z&fW)H2++xJcBZd?t>|tdF=qx$V z8EK%oE<_o_%y0!-W?Y4q8L+Yuq#mRWl4ckgu0z$`fU1L)bs%-1`5%y4NIAsBa0{yT zHWsy@acN|=ccE(ULDhoRYk|_>HL(A&msvN#X%BU*2PB4GX59goS?;MN;A#<4=G+ID zQ|_rHo}S<|2kQ5L+NTe|_Cdm119M&hT6RF2g;?e=Ky?-9*GedD^dLE>11?gb|^AT!5ZU@y3 zusbtAd=3Vmd}KZkgKuVvu@Sh;0+r(+c{3A+kD#$1P@VZ2-Tf}E&fr$2iz|43Ne${| zkl74qZAWOBz{3NS_TQqL2b*R98w%qps9b{hm672KRNYsoI#_uJQU{wuhn08Vp=y6X z)q=_bEO`dB2oHP*PN*l032`$hAN+#q1+jla*|0Vu*iHt>nED^++&si?7KXo2yZ=G; z!0yii=>e7Zpt2cMmx25Rn)3$v5u%rkfk6tg9)eK{vOWXUhQV}qNn*N-XK+A(W00e7 zFgPX=T!j0Xp=MzBdr4wC@@O%X4a$ok|FS~$g7Ots`&}cPT?0J*-2B1T!+9|M>`?t$ z42(jcyZ1nT2jyds|3Ur+Lc@UzYR)ofy8jGLZ`kXg zZ&>OekQjO$^b=MG!J-`L?8E=Cx(Fr*Z5uF2f!ZXXI?AQkKMhoQLHeBBQlPmA&%Cny z>{L)W4~j3)8YLdkfrXHwk--8nz6~viF~`oaU(OSc1ZyfuSh9EU_pZDSi~y+zOkYgAb*K~-Ge>dh=bA~18Um^B!--BK=}Yvzes@1 zfkdnX1MJ2GXtY8{K0!QCJ}`oYGsJB^@bj%9@#&EX3v*$xahZ7~W+n`B3~Zvzplktl z6R2|%$q)jjP{RpyUjepol7aeP7V3XkIDyn7hm$;1odQ%HtSkkoLoZ8}plX$&YGH8& zR?EP^fPRmIDpb81R6VTyC~Ww7_AhE2fW(mF02GfZQlRk>@cjp+p#2^oF?A`> zd?EB4UIxh7-=OxR2G~Au;4)}H&YFeKPaw}Lz~ZY8y5<_RJ}4mG(>K7!)7cX`pTNlA z>>m*C8W`&610H(?tuYFS_wx^d2!Z!_FoV_jxCRG@csN4G8Ck$$?m@1OA+AASVaPZm zD_9(+);|bh3`C9%EQh2ACJo&izz&uVbMy&yjSmiS3J zIR&7eOKJtAJqsF-)LLC-2$=`G){!i4YpE{ z^)8UK!Ny<*HOC%mjuHc-5IX|{1IR3p`$06w4WM=#h(^`V&fo~u?*!EkTW12(cT$Lf z0i+ki2ZbBNURDMds6JOL`e62gXpo)A`rM)VJfQkuWjDxtRJBYDUQo5(aJ7i_DX@6+ zh01}_5N2D?6Li=(bcG2+C^8R}hCpHN57iH12SC~AVE~KAK$Ng&We9@0FBqy1*)Jf! zBmB+85DHZr233okenDzM7@?k-Ap)vC5~?0_ck3}RP>TKZ5#-irs5r7)L1x5AF)+X| z!aP=nSg3h%P<_a51=Ym}wM+~NP_>Crwa9J-#SsW2)H5?AL)E8XQIBoyP8w8wI#m5U z=z1JuaQ??$$C_cOV?ko*b*v@0j&&|dO)N=;E+PPro7sTtS^t96Jg6wNjB)_CjbZA+ zlUU&L$r)UBLDWM;A>%!6QkZLXJf%Qub$s*7QbAqJ)VvbtJs&<&p!GV=`MJ4>H9US& zp!GVaYj{GW7#JXD-$V67=P|;iKc@=3?0yQ zLZG}Q#K6Fm3638~n`8oLT@W~6KrIl&{2Yh}%3ITzAp4vd8JvBBokJo(3m$^}ouOk( zkUE$NP0qv7&&9_z2;4?tfyw#!J3IQov_a}&4w#&$UjV{P$o*}gI$r=LALQ!mAL0tr z3~uKrz~rEMp>`UYLC47)VDdq(;9)QqLx@`&(8Y});tY&X|H0H7L&cfU#7&^$EKqSj z|9H?k@OT&ha6cb^M;EC53>;8-n0e4WtqcNCage^y;1GY`cwfh$U=K$hsJRMIc~?L1 z(r>J0J3!U=`Nz9CdisP0xyJkWyMx1U=v;Jyk7j(73#VE~Q)i$U9I+0b?xIDtZ&W?;61 z0|Ttg1KsNZDj(7Nbh*$nEDu_S!P*xf^`Np5R7QeAtpKX75ULK@T#y=2{R&bKsaKg9 zilORDpz2}$-F$G~!(KKPVJRCyV(4XKDY$I(2VFf3x)bFiXl(?jzgq@28w?FrVd88EabuWzP(PJ}Atxs+F$Y|}gW8`Q3}7y}egKV;axf%;q``ba z2GF{mOgJBOA36s^T22W_1X_21=506_Qj)-?K*b>XlJfJxf{;1`Vi%;X3v%O8@VcI4 z(A*=~El_hn8^OVLgWBI5;PyAjGKd)|LLm1Pl;&k4#6aUx91I01nZ*SlL9pH{V6zJn zi;5D#cYlNIgN}cKJqO}L_i2DV2jYXq@i-U?z%B;yg~8(}1(3jk`U|>V5gGsxH$m6E zLjwRJ1~nTN0AM#k&4&a4)I8|gCP*Ma#bD-v0s`a?P`i_Zp#anof&1?r#DB1W0Gt0F zDh3M(klqhaF-Sl_+y)vm;$SE!ODqBz2N46c?Kl{cDvMInz;RIkj`w7c00Tok*#2M5f5VJ}kVo--b#6aUCAiYpQupc2|0P4SiGAm?` zpi&CdKP(7JO$KLPu)5dKxlpjo_6sTI9 zesv4=a|YdS1WuGN4#M7PQ2ii#r$gDu@d3)eGf?biW|#@JdlpnZcK<@=D&SU!IR=5) zp!@)`YYtQ|h&>m|Mz?n!n!WR(_AY>`hxGwLaRRDqK;Q_M3uY{_H%{PJE1#=UqESB?unua*dZ-z&@e`04ApIb_K^Wve5RI^(jbS5H?k$t>%V~DRN+u3vzV>uVn?b zzd-fH7D!tZVyU;Mp9`ctir_mqFrfQus}y8x2IMDDJ%Q}6ZBT!0hx!XSu0iDl>bxH_ z!%nFBT~PJNaR&-RkX@*4U>1fwP(6FG=mE7?Fv~C&hW$`I2cUY8-377-CX1 z)gOkc2hH8$C{uhglb}V4Pi7JEt$?K}xpk6iwM%0ZC( zK=)^XX4y|e)t%}b6Qq6I2Ch%A_X9ey^aDU* z=>33xa6iC3wFFf2I+m1x&ZGjhHKu~cNTA}NVi`JaFdIBZ;+|UKR+^U#8ZL&4F9eT~ zxTltcB^H5&p>2^R;4u<+$T}J5IKy)A7>RpoNl5DU`YSOp#{0nJfD zg~1EBA#!WMV;{jSAlwFS@j(5u4?Je#n37VIT3qa(=9`+ElnM*4gW$0f$k>r*UU5lc z9%6j`2zdO&J+;I)zW_G=a!QJUVFKtLL(t%PVrE`uUOFfMK4;j$D1!wQ%jQe1%ATcEz~6>yq?v_Uo?+C42$50nf|M)O}pHN>{ z(4-V-J_S5k5)awXieDa<&+kC(faO(?TkfLNn@kM%pzgU3RSWA|-vEaX_B?ePOP&IW zq35Xw;5>!sTSqalg4Q)MJp`K#33~;+>x@9*kAJNZNCn8hINLa&CLE}70dC{KIFLBS z**5WX@qufBvO#vtf{w|8)?7pOX+iQ3C~gH9a*{Kl>vTbU5r&j<^tm5USuVklo0^*m zy8gJhq^J~h7d*rakem!e4m`LCk%IJ3K=qgcLrwu`!YVljDDQzWy=F31) zj-x$~JP~3v%^+4{!Y`c^s zri1sEz;hv-2h;xv>Tf^jyzfV_-8lu|)B;V1pP^!jpmYKi1LYY8hK!=rG*I3^q(2Vm z_!`JPp!Vk%uwF=bf&BtXM{wuBIFND#RHtD20i2FNEe23@K@$>;3(*G(hi_1Sz|zup zu)T=*1BERp{(gYPA?|^uC6HlA=0eN_xgXOlC5h>-KCZrS_ro|4J(Hke2r7dZAY~Aw zEC7#{U@vzB81g|y4p<#%3`u|?2RevU3ZGB^1up+nb5e6b5fBDG=Mz@uSTK}_B^E)_ z4@m5>2m^x+Ls?=GxVZWRzF!!$?&>#^zrpk0(7qx#O+ne9Gyz)w4mJm@9-In5vprz< zfzqo0(q1Fbz912XqIB^3t73+apfCfi1^Nrt3khTJz94w21KS4Yf$Rgt9ms#6H2e=o z_<{O$91J-HMd^@XK9KwVgU66SVz6)lFER(a^Qs7FElgTzUNSfk!0jJUA47&AGp`IR z1gQ@;h=A6|Bq!$NB;dg#~CX9F$iP=Cd$JLG?&O^}xnW(Dk79b6FW=q59;o z=mV9pps>WWkCj0Is!tKB4>=A%en$-}W(H-bdKIX86Do&nFGvll|CkxHp=Rko)gOYk{aCh1^_f+vP%%kq&^$b}UkmE$K*eRGL38n-er;xI4z%4UFAbWDhl%;+ zgHGiDjq!lorX&rTj}Is#G6oH*x*_EiXdf$Rz6;bQVnN!+is%ctmZj!_&JZpEEdc|&0hBHU7?ONT zOCbB`K;Z>4LxdsCH?g=RwFt7Q1MGj$*rWtQ9%zCwFEt0!7B`S)V31)*OoIwSR2MUR z1oas~>md!1{Gq^rzfZ^zieDa7r-AB0tZfJIx^#F!4(EaNV5xV({sFbo1sI@hbZFW# zmIlwCfHqZu8U)~d)1Z3S1jQft+bXbp3tE?it==$$=38@UzJ=8rAoZZK0#r7E$^%QN zIxDC;SXl{D2T}uGqXW8!jsdp5iiN=js>c?p2UZrr^nlEV)iw4|wGME#Fmo6gV0Jsf zx&!ULB=D?TX;+ z%mPUMa)y>W#i@|~o*THlft-s2%1fa3nLF4Wki2BUfV`Rvly^}379bH&nt{b3Xf6X= z9C||i>;?5REDk~HL17GvA5a|nK-Kxe)iDWt6oIrC)EL-A5ox(3G2O}2&m|xv2)y_j z$_BXw)Q$^)>W8fp1la@XbA#*wwRb@EtiLn^L!dPBIzx7bAgKMpQ2nsF6Ink#$XnY+Mr{3VO#2%-9SmG2Uh90LO;5c=H_xZ!YaSGytJIdhwt)Q|a0&Eu~ z-ZUWNU!eX3D2kB!6d*37{DZ|AXuKF(oJB$X6be~DsxA(y4kQOE`#|vt zlS_cgA=?R30}4x!dPp8)W=MjXl?+u6ic8SA2dGVst~V7W?wA?UpnB7xdXd$G{D*E= zCRBYER6WkJGQ`Kz2{GOPnAaVHZ)KGfaVR->{Zi|JX0;;DHst4IVm>y6# zg8D%qJ|gbe7^oQARImv}7s1tf-^UlPIj z1*si`w09^4oOh7qp!HY=xLiaM2WKrv-z*zkMk2}ir-55%p!{73Yn%CGCV_{sq2ppD zu=W|q98fNV+EWf|qq$&?+gE|xX`YbND4^!lg4=0snR(!SK9DlJ0o*==ji19ThK!f- zGB7YTg2NC}4rD;e0i0uB*vC0a64T)=0@ny|PZ^01D`T6Xac2bWE4P5{EdcKl2Q>y# zD&xsVPf#I2z5rB<*Wh+Dy9GH`oPZ3Wrs1hoe=-^9R>Qvm8!gY1E| zDM52fAn~%qBCs$hen90mNUS6oG!y^nBd87m?cHeyrzPBV2<%J~L|YKz7f}6yJTClP z1av-jab+=5UmoON2^?dhQdq`BLF#1~%6&4EAfW>)hd^hVbRvZfckfXvt<0c@#g2oQ}k-|uT zk$_h~rwiZ>42WMr?Ja!a2yrE{VGt2eUI5iK6QSV*ORGD;;RHFW0WI*seHR-6P(Lua zpwuTnF~v7EvADDdKF4Px2wG?tqV(3JgeI#}W>pIStIP^9~M(5AgJ32!%2rVFofEn_5p7SHBQXH&53fkOl+~ zlty9w$c11x!A_z<_+Nq{AT!Ssa^4Nd?=lSVS&5Gzw}JYRi@b8t z4SPQF4hA0`9^m5|?-}Ci3(|uk0MQFd3rnE!2x2dVvX!894ai*#4B$gd!FdS82i;i# z+SmxP7gT;OM{*+v1M&8P!Ufc>1=+h2YA!5C41zk(T0E!<^zj$YVU*AwaPiM&Nwx7SBD`f3HBUbrfPd{&nJQH?#|Ii?3 z@Hrfy^+(KD)j0XX_ExfBmk;uEaR-|Ly3+*IR|5HEgEUqbGlZLX2M3`0!@+?8bRH?l z4KROz=Iz~l{KMlt{UCb_pmxK>{X@a)raOt5~1akfXhz&9e6ptX9fq|W2J5>J;sD6;#MsRvz zVz?{>8LQugB)1t&ZVyxrmTq=3GB7xWGcdd^VqkdB!@y7}#=uZ5$H2gC$-uBRo`Io3 zkb%KXhk@Y*D+7Z-Gy_AeIs-$w2Lr=SM+Sy<`V0&iX$%ZcnHd<|+!z>??HCwBA{ZE! zDKapKJ1{WhD>5)}W-~BI*)T9@%P=tbYcnvsvtnR4S-`+>)SQ7qh?#-mGXn#IT`&WK zfDHq~-5>@AYXJrZ4G9K@DVYomFKZYWPE|87Y|UX{cwNrG;9(fBur`!|L4=8c zVShOTgEKP&!`6HThD|XH41eMn7zAt?7<#K17*sPE7}^9G7;@Yg7~U{2Ffe*DFl3o9 zF!bm%FmT5+FuYY^Ul^zTX)5{nb4m&Y094=;HkTPaq*rdk5uw0yh!IzhT!M}ik z!JveJfw7)};ZHpS!$}SXhH!oc2GG45_UQ}^MNSM1_TCH(i%b|8{>d^h)YdRCu(B{P zEaGEeFjQnGB6x+WMG((%fN6#mVx0@00RSODg(pKR0f8KS_Xz-7X}7XZ3c!$Zw7|E zQU-=h83u;^tPBjToD2+2CJYRnvJ4DH>3}Rro=f}VRIwyT8Cj)~`CIf?FHUooi z4Ff}DG6TcnOa_K)nhXpVgcukU%@`O!>ukTpGcZg_hJ;zREd#^q6b6R6Tn2{YCXh5O zV#dIb!pOi-QpCW}$icv16vM#qw}1iMzA&p|U{KRyVAvPQz))Pyz>p-zz`$d~z;M8i zf#Hfa1H&2%28P$B3=DJX7#Kn`85mBeGBD_=GB9i{Vqh>4WMFt?#K2Ikz`!7D#=x+F zk%8f?4g`%NZD!+c7X~)n{Ok&0}CVFT=pVsmQ=k zq{+arJDh>x76$`^pD5^V0tN;HB?bolDh7txB@7Hb3JeUn@eB-wRtyXu#2FaMd>I&y zSurqNS7Kl=3SnT_%*Vj+zJP&&i=BaCJwF3OR|Ertk|_g&Qvw5nxhVsKxC8^k@*D<+ ziGmCa_2CQ*^-K&5uQVAL%#s-xeljpH98+On;0s`2sPblDXi#NfSSHKB&?m^i(Ba3x zz@)~&@I8`&;e#6k!@76|hI5q+43Z8E3{TP-7(PlcFvuw~Fg$Z$V34z6U|1!{z;L>j zfx(}XfniS)14FAZ14FeD1H)Eb28M|i3=Dt585pc(7#O}WF)&O?WngIVWMKHF!N8#5 z$H0(S&cL8!!N9Oqg@NIw1_J|V?4U83f#IYz1H)@>28Jhs3=AKw85o?b85lxp7#KpW z7#Jjs85m6K85n#d7#Qp&85mCZGcas1V_=xA%fPTWo`GSj2m^zq76U`9D+9xAV+Mxz zVGImHHVh2!SQ!}p%QG;r_%krbJ2No6HDF*ks?5N^Qq90%pU1#(rI3N)c`XBjejoz_ z=zOlKOa=x`H3o*cS&;J7+?#>nk}Ly5hA#s{WjF(anm7Z)O)&z7`*%$ z7Rz_7iLfdRDkbtkB-<7Hr2 zTgkw1riy_?5(-;PZS*8pO99j$v_NELBj0p@3(e4Zk&O8hZ8oCS&k1QD& z9{DpcG{-P7WP30$Ec0bx_*B8ba6y-WfuWLtL86|4VVeO1g9j+QQyCa|Y8e>3g&7zO zy%`vGg)%UF&ShW_b7Eky5Mp3>%+J8EvV?)*pdSN6n*#%bLLdXfBnJit(7xJb0SpYs z^BEZI0~r|BNHQ?2XJKH7V`N~ck6>V!9>l=FW5U27;mp8rtb~DqQ<;I`Oeq6{z9$1i z9H@NJW?;|=WnkEBz`)SN%)k&I$H4FnRDUNkFr?QqFq{B24yza#v85lO?GcbV8st4^g1l5mbh71hu#S9D|4H+0NvokQnMKCb8Q^mj#Q^dd^pUS{6#fpJJUzCA?iIsuDRfU0}rjCK(i9Z9wR|f`$jX4Yq>+=~H zcqKZX3=G%n85mNt7#Oz4F)+-nVPJSG z%fRrmoPj|mmw_Qjk%8f~0|Uc^LS2xU@O4D5EjY6 z@RE~(LA`*1p~97cL8+L5!9$6G;jtY9L$MA6!=@kx21{cGh7Cas3`g7<7(yc%7&!bG z7(QAsFnslAVA!U>z~Cdvz>sdm!0U*fIEXVa9Fk*Tm@2`*uwIOTVSzCNL!J%;!z@Qe*zz}H2z|d{Zz`z*Jz%W~$ zf#FXi1H&pt28MZ|3=A)285ne&85mgg7#RNNF);kjXJBBhWnd6B@z_4GPfnf$S1H<`f1_lXr28J!U3=EEP3=B(rb{+!*qXQ%_rSLK^ zJV<6>m{-lfuoslhIT;vwco`Tt(-;``aWODNhBGis*I{6YEMQ<@QDI;Z^kHCF&&9xS zKa+uBt{($KycGk(5>*BUe;x*g#xMqksX`14ekBYHT3QSY5xNWv+fo@AK7q=7Nd|^w zEe3{TwhRomH4F^95*QdX*cceR9T^ymg%}tnS}`yfvN13?>oYK1kzimjcVJ*B@?c=N z&Bnk`%*Md*SD1m}r#}Njm>C1ZNgD=+i!uxh>c$KV8R85K{8?7x0{#pPjY3&4+I@7|EJ5ow7#N(K85qX7!aaxnu#Suz8ISp);a$y^48n`I0P+a(wnGHVzZCYv!Zh`2K_@Y^vky!2vVum$=_txbr={p3K$r^XfZH6W?*1=9Kpa~9l*fQW68iElE=Ux;KRW1 zMTddGke7iW!;gXCi5~+)O9TVMBNhgRELR2wH&zA)&M*cBNhbydsT>A|G(H9f(^3Y8 zcPyX7oa*= ziGjgVgn{8eDg(oHMo3!VOA&u z!}LG~h8HFb3~9v-47;ls7$QM^2tfvhSTjg|zQV-7@XnWkVObpmLxL*LlfX*npSHi&X&Vqr#L5qQ5LKy=CLp}q;V|fM!9(M+YEI9@SYfyg`wC*B=fuYNe zfuYrffg#?Jf#EUCj&#SAp^rt zWd?@ZatsV&EDQ|p8Vn323JeTwI~h6x4?442~>7`W3I7!o8H7%V**7}Qc37-su1Fi2-IFj&enFf1!!VDKwr zV0dH-QTK|Mfgz%rfuTN|fg#F~fuX>PfdO>p_|!rM2BkU%hW}O!3_bh|3^Q#R7;Y;w zFkC2MVDO4!U@&54VCZ3FV35#dU^tn=0A3%Lr^>+KWdP|{?qg+Om|MxfFgb{UA<&0` zVIl(qgM~B$gGfFD!|DPC23-jTh6A+>49?CB4A0{k8194GXdw&?6($S}SM(Sd*m)Tk zJ~=TkL|QX27>F=1s0J}Ge3WNkV6|glh~i*i&@W|R*jdKFpj^kmu-lA*VTu+5Lq`My zLpc)z!<}LVh81QE3(uK7+%COFr-&7Fn9_wFwF2`U|43&z%WCUfgxF&fnlFF z1H)-mNV}WOj)9?`n}K1D9|Oawat4MvV+Mw*bOwekdJGKe^$ZMRRSXOt7#SEqdoOpf zFfc4uXJA+n3n`C3RxmJ3S7BgSRSg*@`C`w&@Th=+;k_OMLy;Z>gBmjf!#{flh7*Ad z44*3)7_JL5FkDh*UR@HvQqK|Yj$fjypq zL6(7mq11$dAwHUc;bI&E!wq2uhFvBM42c>H44FX;49=+x3`~p+4DIy{4BM?47*=aB zFuYY@U|1r^z_1xqmVx@zmJAH;!jN$;uQ~>X{bmdd*JKzNj7=FBBrF*i9vegYOQP%y z3^z*{7(Pow%Akw{28N^A3=Gfe85p=y7#LVY85lx57#Q~EGcX)5U|{HpW?)!R#=wwN z!N6dW!@wYv&A^by#=x-Cgn?nb0|Ud4Kn8|aq6`d^qakPJM^!N}qoy$n>jNu zbSp40fbI?3r^&#;Tf@MxC4zyW!;XQ0nVEsXESG^{1E|mA#=vm9kb%LimVx0&0s})& z90S8{vPGm7K__;DL@CGt4NUJe0 zBxo`)$Q3d$n8YzK95ZEL$jfD5SfS3qknPC8(3sA^Fhh%hK{}j);ZZ09Ly8vzL!c4^ zgDWEggO)7=gOfR=jd96|fx#mfQZIqh)hh!A2KPt?hBqDz45mg544`u?3e*`G7=#!Y zHWV;0)TT2qOx9*#_!7*(P!h<%urH2*AufS|p+1L!VVN@n!xv?U*iU{223H#fhG

BAiuBx74FCT#FfcRd zr4*$mmz04PN-}_KVP=d4RV*l2FC{gpG+hO>n3{o!fq{XUv4@wDp#a2$tJ5n2UA+$B zGK1CdLpTh#CAl3L!1_P}EFc0T&j1ob)&-Jb21Nx}Md@}mSC9%YhXIu4K`f9OCI)0( ztRS-(IYE*P3=A!ExFQg`e4wHrHK@ASz`8&rNC{_#uPH)THb{tpfdM3os*4@0ix(d+a*mOKVFilFZ$<`&11KU=ObiS+ zP(&=47#KdlMUdm28|+h1J_dO!(mL525kA2X?=gVXpoR|*imsN&oI4S^vZ1;_YEX57 zVw{-~X4m#9*CG+RnxMKsYEX6Yq1csudT$Lv*IcMBkQ!87pj?Bni`_*@9-(VJR2N7M zsxAQ(yWVR}c#P0>2C56B2340JimpqavmPRJJ%s84sX^5xgrdtP=Kg1duJ2G?AT_AE zgi&;5`RrMZ(8UWXFc=sZKx$BRfx;XS8vNQIB~U9El%cvnYEX5FqS*CMe9a+*UDi-t zAT_AE#87mtJ^Qf}p(_Zg3#0~BmpF>9XUB9z5xO#=xqy|-&6pF47ORTOTbRB}~0;xgOC5@u%PEdshLf12>E|3~j zT{0-TLJla)A#|~V3U3Am29O$5U9u>;x>euXA#^E1b%E5N>H@VB5Md}J`sOe~mkm@G zNDZnkP|b|cwNO7;8=)%&stcqBRTpRu2%$@6(fJUBt`4X!kQ!87pcyQLF6P|(ClR_9 zKy`uCpy~q6Ss`>i3iPu==-La_1yX~m3$y|qp=;s$X;BDW*PyyUYEX57+Byhb7Zoxt zBXoU+>H?`j)diX*MCh6scH}BTmk_A3Wnf?csX^5RY9AtWO@H?D1VWc7R2N7MsxHt9 z7lf|ejeCU)S&7D&6pr`{fjLOznjR9&F)8iX#-?zu?ma2r$?NDZnkP>TkkE7bXe4#KVrP+cH3sJcMyb%d@DQ@ctL zy52!`fz+Vt0`=Muy40WVFhb}OfHpBeYEX57`n3pMJ1h>HBXk);b%E5N>H_te5W3tg zF3d&f0^NxO3VDzkR9&Dp2SQikV`)8vF3^oNAYC9esJcL-CJ0>)-_(#|xfSX{kQ!87 zps{L%t_9O-kXnqOn;k%Qfz+Vt0`*i8x^7tSosMwf4yauqHK@8k<4*`(d(w-_5xQH?jjgwS=bD)BTz*I%eEkQ!87pfNdwE~oboz9Mv~fSRS?d%{3s$n7Z5s0%_D z(|gtukP1*3FfjN*b%E5N+65X{MCkH#o!gAi1v*U*q#vXPRTpRl1wxnlA$6pBc{0>4 zkQ!87ps`zouH~jDry%SCoeBi93#0~B7id-xq3cxHd!(8ObS?`>7f21NF3|WELKmm} zt5}3x@1ZUPsX^5R8eu}{n&Wu#EJ7C_wBZj@gQ^QOCxg&+@!?-Vgf0!JE|3~jU7#5# zgf8zpEJ$hI4yp^J233~>N)3CM)8-z+F3>JZP-uYEpz3l&(Pj9m_ZLDJXdfL&7f21N zF3>z2!i9@-;_DH*CP7^YQiH0?8O1J7hBZ$Sy4FH9G@f=+L1K-lE~)df<6s>=&Sm-!kl3xuu^ zs4kEiR9)UEx>kvOUxv_?3)KZugQ^SEBS-japX4H>-c1u!7f21NE?*S83d-(_BkTgr zLxSQ9qy|-&ABwIW7x|14x^_VA0;xgO<&UB(w();BLe~wbE|3~jT>&V%7G1ru2%!r! zx&?9}NDZp4Konh(+@VPALq$-Bn}LA=qy|-25Q;8_1Fr)RcG*L9fz+Vt0uA0ELf(hp z8>tNt2h{~qgQ_b8#jXdPJg*UURYG-v)S&7LMbWjOCE)@>*A%EOkQ!87VJNyR_Ez;E zbghQ!0;xgO6^^27zGWOz&-Wly7f21Nt_T!ezv3Q6BkXz#)df<6sw)yjmvfrwF@!F5 z&|m`t0|Q76s;(#$U0=jxkjr_fE|3~jUC}7InmH3DBkZz+>H?`j)fI!H>r7t44uq~i zs4kEiR9&DEKSbK7C}>5h&C{W}Kx$BR#i7`>Mso{NifV@H0;xgO6_29phv$bjgbQaw zb%E5N>H>{7AzWDa@!kQ1t{qTaAT_AE5>f1$Sh!#%Lf1K{E|3~jT}ddq0xh>ZL+E-1 z)df<6stdIB4&g$Rkgu5tT`Zs>CC~^i#+WB);|@aC%!^t}5xSJ1xB+oVHvfz+VtN=MP9bOSWh3LAmxgX#jQLDiLkqO0a) zH&TmeEmRjs4XUn86kQH~C*MK%>nv0kNDZp4EEHYp5BJVM=z0m&1yX~m3pC1$2*V5N zZ7B#{ETF+W1_lO@8dP1Nh2#ibk0aF9A#|xgb%E5N>H@8bLg=cO-+)vvyF+z>)S&7D zZR$nny5c%Z31L?*R2N7Ms;+#L(716xVJbq`G^j3+8dO~cD7ub!e?l7B-VW6TQiH0i z5Jgw##+V}ryKX{tfz+Vt0_|l$_{%mhO%kE&7gQHW4XQ5CRzrlYk4rqiBXmiChEW+9 z7(i-Jb%7QtBXk*6fkr}Lsn-Ci3#0~BS1F3W=Er4ULfGX2)df<6s;dk|SHte^3WTm0 zs4kEiR9)pLx)gbZMG(45p}Ih7P<4Su+Y$cq|4@K59yJN73#0~B7ih&1Lf1J36{HsI za;Pql8dP0XC@y>)>V*_vyPYEX4mqv%=?YmtNS*LkQekQ!87H7L3Y3U2L1=(-Kn z1yX~ms}@C|$U*_@Y9T_826y6RALX-_pos?EPcb%E5N>Z(W4^(^q)afAz5Km+p( z3=AMOsJa?ZbgkNb?Kwi1AXFDf4XUn26kWHDR2Lz1DMNLE)S&8WLeZr+u~!12%N(i; zqy|-2Gm0+nZ-z+y6fdYQkQ!87EhxHjKUE`*R768{fz+VtYDLkN(0dapmb0L`Kx$BR zwV~*m@wh(>;jbE~E|3~jU7&e6M4HzPP)4$=52_2K231!Fid{Ds`XY^{E`aI+sX^7% ziK1)esl{6nF5C>&1yX~ms|!WfzRts42wg{@xgq+&_4f1;q%iyn)df<6s;du0*K5}cNWC^D&}0+?0|Q76s;+(% zT}n)=ka~zxP+cH3sJcLNjfhxQ_;PO+A~f`%xx`JxikzzR&stcqBRo4_0T@hSTx(I(2L3M%Dpz4~6 zqN~3+3uz|30jdk6236NI6kSU`%;`ti)eqGLQiG~%I*P6t-W*7My#-KRAT_AEW}xW0 z|LrW&==VCPE|3~jT{BU1Jq(OP>ILkD>H?`j)in!6*W(M@kY>^^Ky`uCpz4~9qU&4e zt0Y8dJb>x~sX^5>2St~tcp580*B7WRkQ!87b5V4~b#~bxbTNY_U>O(~Kx$BR%|p@U z=(vs_p-T{|3#0~B*L)OR*VP=CAauz?b%E5N>RN!JtLI}f8$y>6R2N7Ms;-47x_oYC z6d-i@Ky`uCpz2zLqKjeb8l=!jhw1{ULDjVwMOWUJ&ff^TI-$BiYEX48LD991zc>w{ zYY|izNDZp4r6{`oyOd`mbnS%d0;xgOwG2hqvKcim5xOowb%E5N>ROJXYsLjuq*0OA zP+cH3sJcKaEfD45!*V~QoWcp3oM(Wn#z57z62-2l7oa8ju-39XR2N7MsxHtP7KB~X z=M2IOxP0z5W1Y9x& zjnuoTfa(INLDjVmMc1^#jYzfLWT-BX8dP2DQFP7mUhoRx!bMPBAT_AEHlXM-_xpg9 zqBcWyfz+Vt+K8gd&@&Bb%={2k7f21Nu1zSqBzacLB3yVAstcqBRo7+|T^ZJ|lo7gK zLv?}Fpz7L!qKoHtxDP@X3uw6q0|Ns{4XUoKD7x(X?;_2^DnfOE)S&9xhNA02iw)8U zj4o6cNDZp4?I^kqH@6|pN;^Y!fz+Vt+JT~LO;;jP`!F1;3#0~B*G?2&X#(s>qr|CD zT_826x^|)H+OuKVdqfzPL3M%Dpz7L&v3FMLL(ch3#0~B z*D(}bD|{CrwTLRAxHK@AI zpy-nGIE^$$bOx#mqy|;jSrlDycNf_r?0N##1yX~m>l}(M1~7ot=AWRtKx$BRok!8N zqvSyr!mdA1T_826x-OvT>J7R46QN5KwA7A)fdQljRo6unUHTSNRS~*0pt?Y6P<35G z(G~4uinQLw4yp^J236N(6kP`|?X5=G^cI~1yX~m>n4g_LM#kx5xTBIb%E5N>bixZYmNR!q!RlDR2N7Ms;=88x=yVJ z?SX)$-k(riAT_AE?x5&mYREzAWwV18Z!$12fYhMsx{IPKbymVBguf)AxJex}I4TB_iyyg6aaPLDlsDMOUl&F{JfTZctqyHK@8CqUegX z%s^Tr9R}3}QiH1N5sI$+w;v<557VK#Kx$BRfmW9zQdDoS?qf!pC*lGvSY}{g0I5OM^#(;(c;S4cHD*#!T_826y56Gbs`Tkb zngQ2@>H?`j)%6ZVmt^Yuj|hL6LUn=Epz3;$qKo&}f21~m6I2&S4XQ5C9s@+`l`>;M zT8R+|)df<6s_P?)U71o&NOOqkP+cH3sJcF(=&E4~_C)xr2C56B236N*6kV%rt{Wh9 zwL^7*)S&A6f}*QZ<6A94*DR0lP+cH3sJecj=n`Y#Kw8Bu0$MoFz`y`fgR1K%imv)f4e)S&A6g`&&A)e5N(8wJ$`QiH1NH;OLtwO^6SsA8xtkQ!87e^7K4o$`E#aN!iF zE|3~jU4Kz@l~+7PYB}tL>H?`j)%6cWmurVL(g@65s4kEiR9*j3be(fB+J$i8U#KpS z8dP1Nt!0S(6{^&RGy)?J+Ohy@oic(S9CDr8Iwm3&LL~pt?Y6P<64R=$b#V5^3c2DO49o4XQ2< z6kWP1pwqEot*`%3T_826x;RmEc{p<;txJ&tZ7~7uS;L5BE)-p>7W5H?`j)g^+W ztMAY}r1iZKP+cH3sJcW^biJJ$un!R$Wl&upHK@A8P;~9?HAY(Z)eqGLQiG~X97Pwi z(bF{uyH-GTfz+Vtl0eb5apEzgRon-mxXJs$#U`PSv^qi+w1ta-fdQljRhJBkuDwogk$R(EP+cH3sJdiP zbam%sB8~SJLUn=Epz4xC(e;k|Y9%5xrbBgs)S&8;N6~fVTNToNhoewkAT_AE6i{@{ z2nc+HuBc7(i-Jbt$3fTAsZhX^)Q#R2N7MsxD;| zUH4w~$06*pgz5sRLDi*#qKmDJ8L36&2h{~qgQ`mvMc0i>f05Q=L|J>Kf*Eip26NFt4p}Ih7P<5H0=+Y80K?)S&7zN6}@)Hy5d7bB5{ysX^6cfuc*|(K|JS zT}e<~AT_AEEKzhdZS-D&&{Yl91yX~m%L+wTvzZrCn{6^w7f21NE^8EBR~Bk~K-jes zstcqBRhJEluJ}wvq?X=ks4kEiR9&_xx{mB^Wk%Tb7^(}T2340Gimn{Fe@H#4-%wp3 zHK@AmQFO(~!k%)r0^QiH0?0Yz7BYY@^I6qZn3AT_AE98q+&8GT!buqzCz z3#0~BmlKLE&PpdHgsxnuE|3~jUCt=F{66*8A#}Atb%E5N>T*HRHCgL9(&~u0P+cH3 zsJdKHbbUJa3~4@P4^$UO4XQ3T6kQ8%S?)%-@DfxPNDZnkcNAR`cJWB#8?T_cKx$BR zd7$X}Ht`kGXb&@J%QyoA14s?3E>9F)TIU*(W&@?6x>Ti*W_i6Cks?vu_)^C=NfT_826x_nXWI&yaz(h8F-s4kEi zR9${3x=!q$y$KOt?ND7HHK@A$QFJZ#{fM+~c@b0>NDZp402EzJBL9(ARc(jr0;xgO z6^NqC@R+_E!i5*0xjL>xtstcqBRaY>IF6(%aRR~?5p}Ih7P<4f% z=xR`TjI`HG7<32$0|Ns{4XUnC6kW5fc_Y;+hEQD~HK@A6P;_ZMPe9sX?FrQdQiG~1 z97UJ+4g;i}t)RRH8utOILDdz3qU&$fXQW<01Jo{%8dP18D7skUU6D>pm=DzjQiG~1 z3Po4xk_AY$-VUfPkQ!87(I~pS%B~@e!JdQa0;xgO6@#KH#_}T4NZ@;@E|3~jU9l*- zT%Gw}AkqdO=+FoT1_qECR9$f>x?C;=A(iv$P+cH3sJh}&bUjao}52Ted2~b@iHK@80QFL*$KjcLCs{yJDqy|-25{j;KZx72Lbj^b50;xgOm5ie6 z`0_7Et7kVrb%E5N>PkV;^-N$oQYpF@stcqBRaYvCuH&Ekky^`Fp}Ih7P<5rD=<>KA zgS1BaHB=W!4XUnm6kRdw?MQp}89_&bFfcHH)S&9hK+)B5G1VRshDuOfAT_AEGEsDi zovTFJ>F)^D1yX~mD+@(e#1l!Reo7Qn7f21Nu51)tcAf%15H8Gt>H?`j)s=&yEByL; zq#j}?R2N7Ms;*oVUHp~%k$Txnpt?Y6P<7>@=&HG~4QW<-CsY?m4XUnu6kWbMCE5}G zIs?@OQiG}sbfy=gUaoMPf;7_p3aSgF231!fie1HX79gD;#RfV6hJk?rqy|-25sI$O z@i&tZE|h`l0;xgORg9ub%4IE5d8h}~1yX~ms{})df<6s;dk|m#UdI(wJT$R2N7Ms;+VrUEf>8kX9@-Ky`uCpz5kX(N!|97HNmt zET}G!8dP1CD7wyX_ePo-*#y-EQiH0i3PslfAwi^FnMa_yKx$BRRio&-rg|Bvm2w5D z3#0~BR}G4;DUohS^C^#^xgqw!WzpV-v>LM)stcqBRaY;HuFd}aM-k=WYN#%d8dP0< zD7sDf9fs-xsX^7%kD_bS4MU{WVmG0>Kx$BRO+e9gxhQ2O!i688xY9q8tJUZl(#o_Js4kEiR9(|hbjhrMw3$HtCkBRDP+cH3 zsJf=3=u$Y6jI`5#HB=W!4XUmgD7q@oUqd?I<|tGbNDZp4nJBts^|O&qGJFWt1yX~m zYZi*Gpj#eDr~Uka>H?`j)ioPM*IAwrq|-YEL5ILGFff4Bpz4}~qHE(?0i^XCnowOJ zHK@AgqUefeTKWf(4xOR8Kx$BR%|p>8!*v~LJ|!Ni3#0~B*L)ORmATnSGYB)wL8w*Hm94q}>FHP+cH3 zsJfP+=;B+$h;&+lB~%wk4XUo?D7vgtC6QKr_(FAo)S&8Gfuf7mR|{!3K^#;UNDZnk z(5bzMS}#Fs8qz+FVyG^V8dP1YQ0$6Hhn%VgDL49|xe~@OtEugwUYEX4; zLeX^~bPv*sg+Qn-kQ!87n^APde``ZJzc&r43#0~B*A^6AyQRgD_93=Ib%E5N>e`B; zYftH4q*GRALv?}Fpz7L&qU**~2c%xWZm2Gh8dP1|QFPrDazxsNbQP)#qy|;j4isHp zQd^Mbd|yL#fz+Vt+KHkoTY4hWc@BS}x@ba-vpHK@Awpy;}=JQFF+dqH)9)S&9xi=u1mfvZS0Y!Xx#NDZp4eJHwk zelQ`W`EsZ(kQ!87`%!dd&fkZWzxtrMKx$BR9YE3L>Ac(vk(U=ib%E5N>N<#`OGiZ- zX#{2;R2N7Ms;)yQx+breE=1UM7pe=S236N#6kS@=&%8nC`VQ3vQiH1N2#T&gpRBtG zUA&+pT^Se{Kx$BR9YxXAww)^mp-Ta(3#0~B*D(}b84~-E=58#ZxW2F4m3e^QtgR1KkimrFhuOp2E z%!ld%sX^6s8b#ME>)S1eFx&&x1yX~m>kNvntug0#5W22Ib%E5N>N<;}i?^N`Y24;L zR2N7MsxHup`-s~7h(+Z;gk4OagL@em7(i-Jb)84C>)Qp}K!h$ys4kEiR9zQPbjdLM zLt3+B0M!LjgR1Kyimrw6N0H{g+@ZQaYEX4uLebS?thycH!f2>2kQ!87mr-=_c5@@O z^opRmKx$BRT|v>sSEG9hVOJ|u7f21NuB#}zE-AYq?bw|S)df<6s_PnxuFlsdkXBW# zh3W#SLDh8~MVD;vHKcW4$Dz7FYEX6EK+$DzSsrPZ-)*QakQ!87H&JvkDIY}It@8n@ z3#0~B*DVxX0nx!+h%gie9iGC#zyMN%s_Qn2u817JNeEp!P+cH3sJiZ;=z7yr;*Zc} z3)KZugR1K;iY|V!-(?70!BAZwHK@Aoq3C)TG85_ijU1>hkQ!87_fd4+t67D#1GEmR z3#0~B*8>z?p<5OsjraCJb%E5N>UxNxYbp2|L)e(ZVyG^V8dP16P;}i{QI0g9vK6We zqy|;jV-#HvF3-4u2*b-zT_826x}KouS`<);6!Nd2xm7Uxi&%T;g=(kUzKpu^x97#KimP<4Gk(N!>?38`e0hUx;TLDlsUMc0`_Taa3M#!y`# zHK@8iq3F8wM+@o984su~kQ!87pHX!69Yx-=9}m?9QiH1N3yQ8?QGG}!7&Jn4fz+Vt z`ii2<)h-?B9J7T`T_826y1t?4N?59mv?ps5R2N7Ms;=)Sx}^1H=N#h0t}?(-G+uz9gtFkQ!87e^Fc*|AQZCZ+i<= z7f21Nu74=H6sqHqW=7^ib%E5N>iUnO>yLCCQr~0XaJqU3tp>&yw{8wMc3Wi z?~%@1)`sc=sX?`i1w~ifD$5557dk<8fz+VtVnxwaa-kb(G&KdP3#0~B7aNMMI`u8_ z2)kOKx09(uF9QA zqmE~wc7fEO>f%Dt_3h=WK7?KOp}Ih7P<3&m=(0_2LmH|03)KZugQ|-MMVCgT1yY+$ z5_Ay<0|Ns{4XQ3)6kRUW6F3kqG=S;?sX^7nhobAx&;LmKVS}K$Kx$BR@uTRf>hau$ zuqz*`3#0~BmjH?`QG=OC?Tvn@E|3~jU4kgO)OFV)^}jYib%E5N>JmcHb?>tUQY+;S zR2N7MsxDy^U0N*vQW5@Q16^hUy8jC!SBjwMns($N(hPz+R2N7Ms$HTey3D#3A?4*@ zs4kEiR9#{yx+a!xK}x-~P+cH3sJg^abZvZWjI{Q93RD+J4XQ2)6kUE3MUm#0w?TD* z)S&8;MA4P!a0BTi!)s7oAT_AEK)324%HCX#i%28wAECNHYEX4aquMq7h$bSwSV33K zfcAf3#Fq?;F0YV7NT+uyLUn=EpxPyiqHFO)L!?vC&7itKYEX5_q3DuSTZXh!*B7b_ zqy|-&Jc_RQd#jN~50ap|Kx$BRDWK?@^}7jaJzFhQ7f21NE=3ewX{AO;yE3Ohb%E5N z>QX|{72tRr>3+R!P+cH3sJfI8>lXj8dO~x zD7u`kZ$cXV4u>8b*Y`PzNF%pLpt?Y6P<5H1=n~sM8L7Yg3aSgF2340iimu12J|XoT z_&}F&F)%QI)S&7D-OGxoQ<5HRM_P5S1=R&ogR09C#V(KHe@LO>4%G!xgR094Mc4ib z3z6o0!R2N7MsxD6yUDj(;k#3be2-O8r zgR095MHeSyGtv(0YfxPvHK@A0QFP7t&xbUF@CK?2qy|-&4~nj4y*8wl11D(V2m=EH zNDZnkUld&m$v2T!5hz1-fz+Vt@IkSVkQ!87{wTUc39NZO?w(t7f21Nu0RxB>hEfi#t(a;xMM2k-g7$x5^z|}O zbe$1SL0Uy%4b=rwgKAeMimu|!qeyMGIH)d=8dP0bD7plE_>uN<)o+byb%E5N>dHgW)u)t$ z)N*(Q)df<6sw*Ew*8{;xNbRWqP+cH3sJaSJbVVoMMk+;xLD$JLFff4Bpz10_(bdd) z0%=~)2&xOD231!Pimui&y}5|I>kJG}p}Ih7P<2(H=z42%9O+bnZ%|zzHK@8OQFL)IOCim*ae%J>Wnf?csX^6Mg`&&4 z0i*_1S2Kz(Zlx1Q zJN+f0xH?`j)zylkD`x8|q!ZT@pt?Y6P<6GT=xTU%5a~AR zCa5lu8dP2FD7q{!i6PY~8=$&CYEX4`py(q6T7aUH4)qy|-2CyFkwcuk~|?GscN zNDZp4E)-om^DK~V9OeOCl+D1v08)dhs~bgEW1}0=PA++N5 zb%E5N>gq+&m9O_1X|^I3stcqBRaYO1uJ?7I``}=!kLsYhKx$BR^`q$Ol6;OdK0gPl z3#0~B*8~(@vG;V5*7t6J>H?`j)in`CSNFVUNT;A5gX#jQLDe-0Mc2EZQAneXcc8jJ zYEX4eM$xt7r6tm=*>|WekQ!87Q&4nS?3{?S0+|DJ9XbO814s?3uBj-xoNmrR8V8Vu z>H?`j)in)8m&nQgNVT2?R2N7Ms;=oMx){RVBdx0Pfa(INLDe+_Mc3hgXrwlFBvcnj z4XUo0D7v1^zKOItq714Fqy|;jEEHXDzkNhn;Xe_o3#0~B*K8DBhi>E{?Rs7a)df<6 zs%s94t|eO;4H?`j)wKXcS5^8Bq!SDTTp+C#kQ!873sH1=Oix1^F;j)=0;xgO zwFpJmpYj-_vez1_3#0~B*J2c1I_0;K&IpQu>H?`j)wKjgm+psKNOzkSL3M%Dpz2zR zqHFp7ODTwu?||w8sX^7X3`N&Wfd@!E4$xV?pil&S73?f~U>1^J4B0i*_1 z*J>19zw9p|jp?aEb%E5N>RN-M3-ul!&^R;5Hjo-rU29Qv1-_Om8wF{&MRo6Nc zT_!zCk>-~pp}Ih7P<5?G(bc=92x*;pAygMg4XUmUD7x5cs*zf--B4X1HK@8aqUZ|9 zkw98|FdwQ5qy|;jCKO%!4zEQzlW-$c7f21NuFWXAZZ8o;J~a`l3#0~B*A^6ANpp@N ztunm@)df<6s%tBXF81G5NT<4eg6aaPLDjVlMc2!a^GIjhal3(11_J{~4XUo~D7t!# zi`5W$Sp}*Kqy|;j4isIkC7eiWdu*Y)Kx$BR?L^U~AiNc+6b*#x0;xgOwF^bpxjhU> zJ592nxB9?zb zb%E5N>N<#`>%28%FhZAzJ0wMc)S&7*grZAv$`(h2E={N|kQ!87hf#F7eC9y9LCF!S z3#0~B*AWz5e^1{>s)<6OxF0Lv?}Fpz1n-qU%YI64E&KE~qY$8dO~;QFJxFo`OL;odm^rrxByE7ypz1nsst4XUoQ zD7voI{6QKs2c3`uvJIpLRo6KbT^5%;k#^oCKTN236NB6kT2G&mygn?t|(AsX^6s8%5XSS=v^Jbhr?z3#0~B*BumH zsCR$tfa(INLDh8^MOT{le59LRFFXkVTqL`2y7iQiH1N1&Xc(4yTazR`7X4Vi}|c zRo6=tT}Rc+Ksyy6iWyX)x-ES2C56B z236M^6kQVkWst_BYM{D6YEX5(MbT9|V*%3W+)Su0kQ!87?@)A2HWx)IZMHylfz+Vt zdXJ*(Tfj=B(&jo;7f21Nt`8`>{4?s1MmWDgb%E5N>iUSHON;*y(rBuv4?O=Cuv_$xHB+-)S&A6g`!LIVh7SZtS(d+NDZp4-zd5! zyo^VhH+P5X0;xgO^#?`Q*S^O{t3J}9xiUPGtIiE{ z8aZryei~F4NDZp4|0ueG{d$o~fb~#aAT_AE7?_cFa=j{xLQ1`7p}Ih7P<1h)=rUht zfK+0?hUx;TLDj{CqU$DOE7D24tbUMK2B|^S#f+kBPnspt%%c)i7f21NE*2DBta0y< zN>OX5E|3~jU92d&5-fv|O6)MGE|3~jU2G`244He7)-07nb%E5N>S9OH6_R3rbmBxW zR2N7MsxA%`U2kKaPeio7RzP)u)S&9(MA6k@9gVbSWFJ%)NDZnkE)-p9Q{Ex1F}nxV z1yX~miyK83^XDL>RaFfBkXQz(LDj{BqAT>V;cbM!6rj35YEX6YqUbVc=|x)I=K$3O zQiH0C4@K8KZ40E;eeqCTAT_AE_)&E2_Gv-dxlj$&1yX~mO8`X|Q%Nw=`ilm3@1NG=8`hstcqBRhJNoF21+#kyZuYfa(INLDeOUqAR;A80k#-Ur=2jHK@8o zP;_0|)Pi*Phj;)amO*Mzb%~iYdcgINDZnkX%t;%3>%P6ojL{81yX~mO9n+(a5@jtDSY>!x$Bi)iC5C};dAT_AEsst4XQ3B6kVvdUQU4O0;xgOrHrBr^{%n?P+cH3 zsJc{8bp3Zfg|yrBG*lNz4XQ3x6kR>%9VHO?>oHUpNDZnkH56S*315)*-TZ^<0;xgO zrH-PDo!tZJbSCK_NGyZYpz6{<(Y4QhzCOZ*woqLlHK@8YQFNi+y_f~n1yX~mOAAF; zzyvL%+hls6x=~YrjH-p-wO)H?`j)dkwuizu;CZ+hho zfrJJ~4XQ2^6uVGwdNqdX0;xgOWs0H;^|rxCs4kEiR9$8$x)f3FHf@CJ0;xgOWsaf? z^&Zv5P+cH3sJbjrbfMnadJL)yqy|-&C5o=|$BlClDe5Iu7f21NE-MsWGp`4jB6RVD zLP8#-2340eimpE!-XPWH7EoOvHK@95P;?2&M(?80;xgO<$$6K^{(gVP+cH3sJa|cbSb=V zN4mL&HwV1N7f21NE>{#?4HMQP^$?dsb%E5N>T*NT_4K?POg|yba)RzD0J#yQ231!GimtZ5(~(ZP z&V1rq;;^M z8BdTtkQ!87aVWalq&Fa)wrU5p3#0~BS3HWYQwui~BjPI>stcqBRaXLvF8>Bcq&eSg zs4kEiR9%TEx)$nxL7MYzg6aaPLDiLnqKi3S18KL;bf_+n8dP1$D7x;>n>H2Uua!_; zAT_AEQc!d)EMi4ES7Z-V7f21Nu2d9V7EiU1`b3wYx*Vy(r^ev+U2(fstcqBRaYL0E?@OmoCv#)L3M%Dpz6v;(Y3fE9%)zRWvDKY8dO~c zD7ucle~h%F@HJEyNDZp4LKIzHp^uSn<@*oS1yX~ms|ZEcj-|FpIYlxWlA=IrP<0if z=(>BTQ5O*!I#698HK@8uP;?pRnjqybE2u7z8dP1SD7t=qJBl>+6#~@-QiH0i3`Lhn zWC7ARTOL#wNDZp4aui)B*rbte@o0tW0;xgORe_?*syZHNE!I4!E|3~jU6m-hu3UMA zwC-ygR2N7Ms;(*&U27AUBb`NX5vmKM231!ziY|s@2}n1}y@%=osX^6MgQCm%oDkA^ zUxG1^v;k6ss;d@7m)gp8NT=dxLv?}Fpz5ka(N(bXEYeziFQ_h%8dP2ND7r-N6(XIN zk_puXQiH0i0Y%sOpB+eda@9h0fz+VtYDCesYMu$w2+TC7E|3~jT}>#uTnrnLMnzUZ zb%E5N>S{*Ol_k6m>2}D2P+cH3sJdEEbhYe}M%tBm8LA7U22~g6er&{8%EQ~sk#?HA zgX#jQLDkiUVpqiD0;K(wys?n90aAmis~ttx{-||Gr`GF0b%E5N>gqtzWin|w(n)KM zP+cH3sJc2)bm{LuigYGMC{!0n4XUm#6kT37Dv{21&WGv(sX^7%jiPHw`5C13^Q}-_ zAT_AEdQfzk1<4}aCbIyl3#0~BS1*dL8-G_I<>hTqT_826y82Lb?VTlpH2QrSstcqB zRaZZXE|x`yk=ln(p}Ih7P<2f}(G@TA7-^O1AE+*n8dO~qQFI;f{)MzYN+1rBqCjd; zbxlIi6)f>A8&MN!L3M%Dpz4~8qHFK=V5HMXtf0C;YEX4eLD6;N!h59Cv^=4@Kx$BR zO-0d__`)Iv;lg;RE|3~jUDHr>vGlhfrTKiQE|3~jUDHu?y;3klYArWIb%E5N>Y9O~ ztKS_o6AkNs&4B6xsX^5>6Ghj}@OMZ%xmH1Sfz+VtnuVgP(`q}?DAr!6E|3~jU9(Yi zDXvRJS~+tLstcqBRo5I8U41PDNOu%IhUx;TLDe-EMOR__0i^QqD^wRq4XUnrD7xC+ zERar};);i)UXU78UGq_N>0f$cZTW$sX^7X2t`*-02k5?w&74+AT_AE7Nh8rG~b5Q(#wJB0;xgOwFE`i0{%p# z7HlI_7f21NuB9ltj%M6N>PgLp>H?`j)wK*o*Tb%Z%MrP99aI-c4XUo?D7p?^lS0}@ ze;ld{qy|;j3KU)aI|PvWME9V&Kx$BRtwhnaq9+9DG{`SdT_826x>lj+n*F;QX-B+p z0wf)R)S&8GjiT${9CM@-hIOF2Kx$BRtwGTxVBCas2C^qq7f21NuC*w-SPCSOdTpst zT_826y4IoSD!FWrlq+kXxiIGxLed6E4XUoKD7s$VUxPFbAP3b2QUj?mj1w6cI2aiixEL5fOUM`) z7~B&X7$i_cq7oSxG*CoJ6B!sRP(&srGB9|ch^$FuV2D5wIiASC0J^svVb{Gx1_sbg z%LtLzi3|*&yI~O`tVs+EpxZ1FB8o{2450h>5F++T3=E(f!yqDhNyWvG&|zTM1`ZAA zfl4qzD4mo9VSv?unYl>}3>*v)U6AnUNn&6SKoMD;#K0hdB62E;fk6R9zv_9t0t9Shn zl^{|Ms%sas0s}LHUID@zyTQ7iFf%ZK&T^?Z`xkn%8%UQfR2NtcgI)zf*B-DgA65ni zP;<3-N$*0CdI)xg>H@1_Q1S5t-*5oB^9|%eHn5^7s2Wf_LgK3oMFjb*`@LYhpc^R} zcx&hEM&#uVs4kEi)Lgj_tVP+R zY23bC9_db#cBn3p8YWQ4gU>_;-M9-0dE`(%3^qpzWC#NT!}L#6kVYZ)L(KuH0hiXU2GDKZnC2V>n(tcRwG>9-r z4cHv;8K9uM-!aWOhGI_7k}F92pu?f&fYgA^F$9$m1&j;~nC2V@n*$4H5l42UxruJ5 zIUqF1+w#(0u zP6Rp+H3y^yVh$)lt70|h9M~LHs5vvvJV6>UW66LBgVaFG0VQZjtmd2tn*&QfeOWq4 zt8gu$=77{d%mF26UaaO^0Gk5~=aairkjB*uq2_?pfXy)irDsO0=3E4u1FA4lKWi5-ZSHR}L+%vJQ0ci(~71SJ%8i+Zd^n4Mk zIak5vz{>ED3Cof8l4nBA0jYtQ14_?Fv6^!YY>pVj0}L+VqDZSX=0ME>sezaSO3yp7 znsXg&4lI0>-`zl3VR8y;4oD5e98h{*i`ASPU~^#k>q^09q#Y3dq2_?pK+FN9XHZp+ zSsva*F-OYy8d6WeBn#qQkQ#_Np!7Ty?j98%KNC>O1l2HXE|3~jU3bB{ctI91FffF#PDUC9Wz2>MgVaFUHmcbS450I7AgwQutWh=t0}lfO z1EggI5^;lyKw3@6Iqn|VF6d!53~6phk#=B3L+t{of!MVODuQTPZOUd~0IjA+*nTFP zfdRCB3L)|;n}Go|BMlKjw*5ZXc2FA~18B?!(;Uz~0A@y*3oqW2Ksr_1 z3u+EX4aA(J9Ehn9b5wl%Kv|hVjs?~RfVEd8kVQbn7=sY92&h0};6WAv6)g;G$Rgm@ zg$h)J8PpyFWeWxixCqFP4LJ-931AU$%e)BD#(snnK31=zkvs;M zkA_Ik;<=y{$iM(e&mc7>xeN>eD7xHp85lO8h@|B*FbJ?An_Q5~zyNBGBTR10WnchZ zF$^&oIjw?vG0cpxvNtg81ky;?^P9W0B13#gqARjHo`aUnjeDh3W#S zLDlsVtP56(vYJ#Q&AH5i>H?{O#OWod2*?en=DY%%1M{gQYb4TXB+sF`Kx!c7$mWAg zfM8T}UW3iygh(;`P6p1M$Ths0c_oYG}L#n*$4t4GX=I<}a8FK1a;G@$sxq<{gm zc?YQm@r8;&e1YudcVN4?A%-%%>M28N`=vwe0;z%6)mgy6V8DqSVsi=@7(ff25h1p% zfPn$D)dgY~$l!|w3=9bI)ed9-xTKC}dy|;6^rQV<7`W09*t)eBOh@2R7DXtDAiikiF=xR1(+qH`r7(lxjA@vSOms=47Ljn)7nxrBIh6yMl z6-5jT4ZO%|nm}q$S`Jf-7#KifMTodqQN#c`b_pqM?1t(>s5w`}z)*o=&O@jOLd};V z1_n@-frxkZVg?4#@F_x#6jTJEM!T4S0kq@~p~eJd28J6bYPOd!Fl<3l^Pq%*;RuQv&Qb=36)0*9N*Ne-ps0x`1%(m_gF-AfH8;7S z62t>xkcf(pAGj^C0qhG<9}Of^U&_GHzz+!@h`*+lLR^T5oh=}f8DZh0;^PPEfgA0n9 z{xSxJKPaKGp$szmjYvNi%NQ6wps4u-wH={GxSWCE35pt{as~z-xLwHk{R23^i-4TS zz`)@5PzY%~QcyWW7^DWZ#Qun)>#y(vq_x(4P+cH3sJcF(=$gGR6KO@qA*e2p8dP1M zQFH~BJ0Q(q{)FlRsX^8C1x43~%LkGAo;sk+&cMI`QiH1ND~hfKD!NM$?VkjwE|3~j zUEjdEVB;;JQI$xoiw>lGBo_Wc z8YvZl<_nM-R9!#8x?nC`tT!L&lnigEE|3~jUBAG(K>c8l3;C4uk=6-!LUn=Epz8V! z)};l~!oa{VPvI=mto)%6#w3l@f- zcy}VT9Q>fVKx$BR{R8WQjVJIuK7`a`?S|?CsezOmm#P>T41^#h03^RZ1gQ~57Wq}h zz@UIq0!UReFr>h9oQjVhxZku}1f&a8wy5~{f%{FXkwriaIELBCBH$ibH?j!0jH*T! z0S$OCWFw1!qbwR(1YAOTBa0Y;EV}^}f%wb1nt_2q6y!o!U&g1Jfk6kwUn$iL3^{Or zA(tfo!J#S$i7JNA!4Hu7Xtf}d85kHqYEa_>G_AwTs0r1T_oWkQ9)B5B7f1~xE=0#UNDZVkMwHL_Aame8 z1=$KZOB^)wh)}b*hJm36t_C?Y7+FB)W(a|_F)%Rb`lKNBZuZtdgh6T`{(4@+z|bI# z>}J+l28IJDB67713<5I9YRqaG7-CTT6OYGDTJg3W(L2b3Y5v5*bb1yX~miv_F;dRQdG$AH^N z=Ws58>H?`j)x`?dr3Y~egSG$z(m54(p}Ih7P<4SuJrE->ms5Ts?KBaqhZqJ@gQ|-i zY!@uGJYMnuX+4`BR2N7MB(+4;GcY)SLlu@!i|Qfi5D^!X>lqk8_Xb1a3pwODz;-o5 zoWkI7^(E4ox?7=kfz+V7kQ1y6HnMcZBX$>}X8Z!x1yX~miwmp^GSA7tplEm>X+)Z* z0pbLZ8dP1}U|q0TUf$0d(0O5ydJU*9kQ!87pb;o$(4jIQWeg0TpCXOUIYV`U)S&9( z1=|Jd?@VDlgtU_@8mbGV1`_h64GausD%jF9AJ`n&2t$vrFVejpO;B?{Y9QupX<%Sb zPz9L-i@~!Ekd+3A7<>y-!vt%cBF7*<*sdmsKN-XV<&e&l<70Nr~AHwRP=LUqB+dDXC{cMZ}J7 zGXn$YJ}$U9;F=nu3uaDmGXui|6m#;MAtfZjoJq|L44`|WAm)HVV_P!=gPjIer>q$Y(0f~Uz zlhwk&AfN?u56tAs7D!!yFuA{lfdO<|2*TuLEg-!R44wx8w?H7~z)arJ!oY9=YBHn+ za-xNS;RA}ub&xsQ5ZfVYo`OWc2E*L*1>`~$HLR^*1q`5ZS4ip=Z)IRmfU1Fr7_~Am z7(hiJCVRCqF#JGCEt#zh44~U55dP|fn+(epj}i9x{wfq_;h+30|N^aa{qK~8v_IAv~`HTkjoZ9aG3xaQwF)lQP9j1=1&HO zBT&0QY9J=Fw1ZSZFhoQeL&O+G1lcaoECMqltcK0cT8Gqc@`CCDsR5@Sa6X0j3zmKw z+Zh-dP<%S69a8HdQs%051_sc1-k3fW2Ky9Lih$gImct5Zuj^r`?I1N^+rhaTVi(Nz zU+oMG8>)?_gj6-I0#4-MWK;0dzVw#C8=QKX6+eq6=nDLI>zNX5{#)>tJ92-EoaD zXK@Du1L)LbxH*u}&;#j$nRBv(fx!SQ0!xSYI~W*1cN8Pc`P0F`06NVVVh(a#h=4-_ z)~^)*vk7V3PpT6XLJSNbHIP{L=wx6h)`!^+>fM04HxS!l?g{N=U=T0>sR7k-pb{I@ z;mHMyfYg9QK<1_+i-3$_NJJI^X<~>*76JP`6j=luJO0Qb;9im^vIscjosmVry(C*? z5pWr0jw}M6w*nEMxmq^Ryp8^9tkzk_@#Y6uDqsNcap zenyL~qU1L$5;gzd@Q3=E)?{4i}72ip!C-#EYaNGqZY@8|~k zj)4KB24OqIE|~3myBQcBpxA!88`4Ta*#4j!GLsIm9h8?rDFLDjX3n>628IGtSQr+i zCg$YiLl=WGz(Q4^hk>C1t|qN06}nCip;x`se$AIU#JMke27RShDb471Qr)lF+`SO zh#bQZc>xyzxhOt9IU~Ec1iE4ZX7bNo28IGFkiTH11Zy8;tq3A~B>ET_K&Ol#!bbqO@_IrxewB6 zLbzvP9|Hqump{Zk$Z;VBwjH(>%kr@z(w^c2P`f~CAhy5nV_-THT{2+1VDkk5rHM#;MnGfipl}7L0p~byT?w%Z6gwcfH~kC@4)zeALTvxv4{4Ji zY?qwCzyR8NifOwn*mhx%K@1EG$tmZN&O^o@8S~~7`R^Lv?}F zK+O3L6~Qz|5o`{)8N>1H%EZdtl*nYcc}^==?~8 zzurz}U;vE^BK*ZT1r)*{3@gLcFhty@Ffb_ig8U9MIcN%GeI3H&^eGGsF)WZ=2g#K+ zQy3UPrxPL6Oq{~N;DMrM8AyZ~xmUY;3Il@)ikb^k7#KjOz9Gzc3UUvMnqN~ObuK~; z?^Ff`P(6w8sp3=yhGqUBUx4x{a;{Vb#}2HPN#P4ax@W`$wCt0CfdQlj63*dM85mCa zVKYY!Yz}OOuJ%tp(rFT9P;)?PP-9sgtP3{(Rg?c6>4c*7P+cH3sJb-3x?poIpOjpX z+J`Tox_Di=na;q_fug2iI;8GK zsF^gKfuR6J&C=Bhy-DnT`m|RsVE}IwrhiJR|9EhU|`s&ZHAOqyP>*3Y9O{BgNh*H{Sk%; z+f1lo;C=zJT{>X9U~O98MSfoptvDH|E|40CU3N1W7y=?eK85)!XeI*#XiYaFLrrjBWFQE45S7%ck6?7!CHeGKORQ9 z@2>@_3#0~O`wplGB6iMWhAaiAQ%`J)(43p-4Egi z)df<6>MujEF4(Sw8BW4T_s1=O>H?`j)nx?M1sfUow_5~hkH$l&E|3~jUB+NtqEJu% zotuSpdY%Sokre|214s=d4AY?^AmtE|I=BcZ9U}W3R6j8@!qz%wFy2JUxgAhlAT>-3 z<;le*`MF8Z6BDx@0;S3%7Ise!oX1yls$LS*-tfz5%<0f}WCKw6XY z9jXhY1~q)l!Mb3xUAtGjL^^@TYA(nY1_qECi0!3N5lCt&PcF_wEa3wA3#5JmTn#9H zBfAi^Mx2=u*8VxCdK2kB#N|+3ATWc7aTOjUs|_Af*jB=OXP|wE~+ATA>SZ6$3*Uc-JcO&Q@!% z8qjDNOieh38XK@0WOE`g)YyX6fZE0|b0RU+*kP!N!cb!mRs$N0f|(PIp~eA2O$>$_ zM+`Nw7;2orYLNXNhoQz9tOnU%@fd1cz-o})oPeRm6|4q13==WbxPjFm+m(c&#vQB% z*_>nyHJ}zMGb6H^6bv<U8st34hoNR3SPil{{1|HHgViAWO8`R+Xyg&K z{u0Dcvk=1^Aq+K(Fw_WRs96kFgB*q;7;2Vas1e0bvlK&(7>1f<7;3~Z)GWtPBY~l2 z1z3#>c%3AquP%w9W+hk+a^Fe{L(M9%8ssuT8bi%$uo~nzmBCQ621AW3hMKitHOOw3 z!%(vhtOnW5@)&B?gVi9%mjZ^G4PZ6MZdSxlvk|NY*&HPdHJiX{kj+uXP_r4V2008> zFw|@Tt3mdcDu$Y^7;4lo)NBK*L3WQihMMgdYBVs^fJXnB8Ij$riJ@jE*c{~W(ZW!( z3#<6nsc8>vu8qjG7 zsO66#hMI$5bCB&a!ccPvtOnUGV+=Ki!D^7xh6#q6BVaYidB+q(%~1?BW*BOYfz=?p z#~ee=aj+U>_gG-4IRRFKY>p*{nv-BP$l+s!q2?4=4YE1b7-~*qsIkFN1Df$dZA;i< zs5uKZ2f5y{!%%Y$tOnUV_84l;gVi9XLkA2s7ckT~VyL+YR)ZWqP8ez~VW@G&P;(hW zjSGgFD_}LqZg#~`a}`648-|)|7;4-x)LaLvK@MjR3^g|})Ocd3xd~Q->}D?vHMhWO zknQruP;(os2H6}R3^kxxRc1!yxbVeLa~Et5a@z32P;(Eg208EeW2m{0p(X%B%>%F+ zWcLJOsCfuhgY2Fl3^k9yYLLwd#!&MZLrn;VnkQg2$YB_Yq2?)A4RTzBVW@cqR)ZWq z;TUS3gViAWD*{8!3k)@p7;0XE)gZek3Pa5+3^mahYF=ZgiNR0lCkaE%C$Ji1_atMe`3zQr z9A7CIYQBKgAjf+uhMKQnHOO^b8ity0U^U2grDLf1j-e(4L(LDc8f1TEVyO9vp(YDM z%`dPTWcOrasQC?6gY5Sl3^kznb!J9nHMtmS{({Xx4xc;>HUGeBklmAyq2@n^ngR?p zAOY0&VIfF}0l8nv$O_u|iyVeU7;2cnYLL@dF@_pYrxvyDF2PX40yYOZ&6i@RVFjx} zwyO+74I5YuvYX2>)UboqAlp@ep@suPO(ljJP7F0w7;3n{YLMqjsxj1XW2mXYPy<@S z!OVzkPA!HSUJP^UFx2p2sHw+L!w*)2JPy!+p$2qP7;5{u5krk2*c{|=Zo*I_1XhD= zS2KnhVGK1b7-~c?)U;x#5yeo`hM`6bLrpt|8gZ~1WPf#FsF47xLH1WCh8jr>HC-5L zq%hQUW2lh^t3gg1Js4_aFx2#7sF4M$LC#-&7;5CeYLNZjkD*2$tOnWd6EM^$fYl(I zGZ90LB8Hkt7;2QjYLNXt8AFXShMFlDYE-~#klj2LLyaninrRqn)WB+x-7_6SjXGEj zvRyMU)M$X!AcxOP3^kfyHOS`7!ce0HR)cKLYz#HpU^U3*%)w9tT4#n@{>;TtqYE|% z+3)i()aZfLAiHNih8lga8sv1i07H!dSPgPHzYs%>Ay^G^UAYKDjS*N4vR#WY)EHx^ zS%RU)1VhbI3^k@;HOOvWhM~p`L(OswHRfP7$YHnwLyZMk4RV~W#86`iR)cKLDhxGN zU^U3*tj17d4OWBPwpoLr#s;hg+3#yH)YyX6AltPLLyaAVn)MiJ>@n1Az)<4=R)ZYx z8!^;4g4H0qXA_1RC$Ji1b2ekBaR#eF_WKqLH7;N^$a!Zgh8kC}8szxehM~p{L(O&! zHSSg)gZfPKZY8Auo`549l%fnI`b5@{c{jQO(2FjhcMIxVW>Hbp(Yrt z2046=V5kWJt3meHQ4BSqU^U2bdJIEN7+4LmIma>7gkz{VfuSY>tOj((D{KwSNenfS zU^U2gox)HPg`ws&hMH)w8st292188@SPimWXED^og4H0q`5cCtIItRIyUt^%i3h7e zPCpkg)Ffc2xrm`A5v&H;&6hCLB!Sf++jSX3O)^*wvYW49s7V2MFtOnVxTNrAxz-o}g@HU2;Y_J++bM9cM z$pNcDHs>yenq06NWH;Z#P?HB%gKW-y3^n;+HOTIHfT5-UL(M}BHHBa`$nJTBp{59| z2HCF17;1_!)I7mZQvz0lY}Zo^HKiD8o?)md1FJz!W6v?vl!MhEyZHr%nhLNQsM(64Mh!#FHn19G_o!p2*^Z$`14GRYuo`6dXkw_@iJ?XdL(ML* z8svD_#!#~xtOhyn=wPVXgP}$jL(N_cHF_9o_JP$P`%51~&3>>NWcL_gs5yY4#t=iz zK@2rU7-|k-s4>P+a~MO735J>@7-~#0)Evc7V}_yT7+4K*S~bT|a~!M&IeaWI)SSRj zV~L^WBv=h{TD8JZa|)~m**(@6YEFaIAiKu~L(LfsHMSUP&Vtn-rwuy{HRr%;klkaC zq2@eT4YD~77-}wn)gZgs5kt*I3^h&|YA#`@amG+{8LS4`%`O;fu7K4b$Av3~nyX+n z$ZmGSP;(7KjXQ>#>lkW0Fx1=tt3h^;Cx)7v7;3yQ)ZD^Q-30?B-AmHBZ56klho8q2?J_4YGT}G1NTAP!oZn<^@;{vU?&i z)Vu_%L3U3RhMHGkHOTIX#!&MbLrn~Znm1rI$nJ^7Q1cc;O&o@rcVIQh?uo}x^BzM@ z0*0CoU^U3@NyJd|5v&F|e3CHKd;+UMPKU`DYCeP2AlsFKq2>!%4YFOS7;3&^s7b?6 z^9`&9IegMF)O^QKlYyb;2UrcVn=>)g`~<5(E;q6;)cgXgLC!nb7;1iFsL8=l^9QU3 zIec<4)cnOzlZT<^A6N~td-5^V{KrsJfT4zg4Yalg**%3AY8b(4ki(}4Lk$yH4YE1K z7;2coYLMfi1VarASPil{r5I{h!D^7*Q--024Xg&)u5t`D>=)gaqdiJ^uQ zLroQi8ZHbq)fj5H!D^7*T!W#82SZIQh8kY58e})uVW{B)t3eLudJHxE7-||Y)PU~u zL+yVxVyF=Wn}eK}n=sS}fz=@Q8JjWG2xF*e!B8UtR)ZXdtr%)V!D^86P8)_AF|Zos z@M*_TBMw%B?5_?CH4*oPG>7@?bT{aXJA*jRJ<6i5O}W!D^7*GYLbD5?Bp#nxBlJ zMj5OI*_eYP2!b%)wBj16G6V=D8SZbTQP-!%(9KR)g%G`50>S!D^80T7aR( z0IUYt?+Y>17=qOxo3jW*jS*N4^7zJL3^m4JHOOvWf}zF)L(NhQHKt%S$ZlSSp~eiX z204u_$53MqR)cKL3Jf(CU^U2oUx}f{608Q%HSri~E?}rh0INZE&qWM1iC{Iz?zx1aCJC$t*__K5 zYLYS3T)|M20#<`uCS1i(lL}UY?4D~FYSO@Jklk|~Lrpq{nj08uGQet(>y(=qYBIrU zklk|&LroS~4YI#(W2ngnt3h`29Sk)&U^U2g-NjIo3s!?{*F6k1c^GQ$W2ngot3h_p z0}M3g>cMJ|?fQVBrU9%5*_@9UY8t_6kj?pop{5C} z2008rW2kAyQ1b;tO$%5JavJ-Jp{5nA2H8E|Fx0eRsQHeerX8#Xxor7?p{4_@2H9Uf zG1PQ|)gZg)7lxWHuo`5$eq*TV2CG4~>ko#S9`nF&^d>>e%*HM20(aAT;M4OW93 zhCCQ*=77~8haoS9nz>*#$nN38P%{s#2H6~b3^nsH)CgdxSpZgpJVqplp=Kdi4f47a zAq+K(z-o})BaESDF<1?K@Mjl3^j+qYLL^RF@~DMU^U2LXo8{U2v`lWU8Wdnj$)`W!%%Y!tOnUGa||`d zG1ORKs5t>vgB*sI7-~*})gaqtg`wsYSPil{));C|gVi9%sSSpjGhj8y=GbDWISW>U zY>pjK+Y?l*;noAgJoH5i~2CG5#mkWlP zD;R2AG1OeeP~(Q7<{DTHvcKFh)LaLvLH3sihMF5-HOOxE#87h+LyZ@Pnpz{~Y*!?PnwJ=AqA=9F0;@rGPc(*_*BEMIFx0#Ot3h^8EQXr5U^U2PcpQeB zcVIQh?uo}x^BzM@0*0CoU^U2X+C&UBAHiyn?MlK>^9e&uGKQMZU^U3;Fa<-+7qA-S z^plFA<||kYa`>cSsQHGWCLKe~cMLTd7;1ii)gb#l6GP2Uuo`54WnrlK1y+M>PBw;` z-(WS!X(Ie;8`=G1UAAt3mcx0frg|cF_7CWH%RLs9^-F zL3U3Oh8iZY8szXP#!$nIp{4{w4GUNevYSgW)UblpAgB2<3^ilxeY^&7+4K*-QA9%MjWgLIea=W)JTBUAg7;B3^kHqHOS%9g`q|Y ztOnVxZVWZjU^U3$(}ST#2189Rh8kJ08f3frFx1F_)gZgMA482ihMEZ&Y7{WkOvF&5 z2v&pao=F&Ll)!3`^Uh=pHOgQ$$Znp3p+*I)2HCEu7;03(YLM-khM`6cL(OyyHR@nB z$ac-ZP@{pNW+sLjO|Tkd_sqgjqXkxjoDOGWsL=+iK@Oie7;1FDYLMML7ekFMSPim! z=3%JO1FJ!H&wLCu`d~H4?pc7L#sEXjLJT#AU^U43ViATKBd{7|yB1@pF~(4{1VfDp zSPinjmSU(e#Za>hLyZ|&4RSay$53MqR)g%X6&PwPz-o})vl2s%C5D<+7;3D*YLLTc zHHI2%uo~pO_G>WI*nrg_yJszi8e0rC>oC;VVW?S;p~fDp2HDLUFw{7J)gY(UjTmYi z!D^7r*@U6S2}8|h3^mSRHOPM7f}zF*L(NtUHLe(HwqdAo!%(vwLybFF4YI#>V5so` zt3h`2P7F1kU^U3*?7~pv1y+M>&Tb4f-WY23V5srIP_q|9jW33peHd!|z-o})ydOi2 zKUfWN9z1}dCIGAk*_?wIY68J(ko|rLLroA^4YE0hG1LTOs5ye6CIqYo+092W)P#c7 zAlr2eLroZ14RYCX979bwSPil{Cot4RfYl)T{UnB(NU$1YyG~)KiNa8G8beJqSPimW zXE4;nV5m8Zp(Ylr200ARVW^1%t3kHwJcgQh3^f-p)Fgn_Alr2jLro%vnoAgJk}%X< z#!!Io@wzsL24UL3Yng3^kb; zYHneu$pWiE_WNxNHQ5+y?qI0N0joiF&s_{PxnMQOeVKb0YVt7D+{aLp4_1R5J`XU| z6oAzrr=N!yY6`(>kj;67p{59|2H9VaG1L@;)gYVm1Vc>;SPim!o?@se1*<`hi)R>W z$}rSC$52y_q2>jKnhFdxFEP|qg4H0q`4xtmDzF-4zrV&%Qw>&wY|a}DH8mJ&-eRb! z1*<_$KkqQq)PdC?yXQTIntBX1A28H3fYl(|^$|l&BUlY`e0{=D(*#z7?Dx+YYML?B ze8EuD0#<|Up05~cTES|N`{v&;)U<)sAcxO)3^nawHOS`tz);fxR)gF={E4Ba6RZX~ ze12i5=>n@kcF%7NHQit}$YJ;gLro7@4YGUwVyNi_t3h_pKMXZ}U^U2g{l`$#kD-PE zbc8qR`X8_wWV;wK)Jz1cLAHwtL(L?x8f0^rG1N>3t3fu01w+jguo~oWX2no56|4ri ztYgDaGYzZ;*)DbrHPgXrkj>%1P%{Ip2H8EF7;0u>sNup;GYdlvH-?(o7;1Ph)Xc$9 z!;7J2E?5n+-}x}q%mb@I_7^{fn)zTg$Z;xwp=JSC4RU@L#89&ktOnUGAq+K(z-o}) zER3OMF<1?22CN1-3}rFYtOctG=P_q+5jTVNQU0^lHc4=d%*$q~M92Ytm zYW9HDAe*C$p=K{wO#ssQetH;c_JP&-AgR&EP_rMb2DyGWz)*7ltOnT}Lku+s!D^8G zWrU&T5QZ9K3^j)_)R}FF8HAlf}kmJ-0L(MU;8e}({W2iZfp~eD3%?S)O zmKbVIg4H0$sTGErQ(!g7Znnlya~iA$Iq%qDs5t{xgB(7#7;4U9sIkLPa}KNq***3c zYR-ezAcvs?hMEf)Y8)}tT*Of0grVjVh8kxKHJ8C^ki*#pL(LVi8szYC#ZYqY2H7rO3^jMbYLLzG!%%Y%tOnU%{upZRW2gzhQ1bw+2HCDa3^fnIYLM&YAPhB+ zFw_KNsCf)lgWQ$~!BF!AtOnVxP-HbBpgTyPg4HB|m?+qD9s`5DeY~?nyg`72yO*+=#`k99bB3eQdxj1ot~MO8t;-?mYJLi3cAD+ z6wP2+e^*}&sd(p%#Js%J9OwMfJY+5L&iT0oMXANbnfZB0CdIqvCFiGP=A}DjmJ}tH zAUgpZV<^_fdlrW!7G;7$$SJcV2u*oFYGQU+VooWF8NrFU1v#ncN+F`bnN_H2ONvqx zbNv!?v5A)ECc#pJb7D?vUP@w7yh~{jQYwH8dlviWqdkpd^-<<5*IXnwOHA>X?#Jlv-Sz3QbXP?da-2KEO~@l%ANES(RD@H3ZEC z{xE5fUNpI&)ZEOxl+>b-Ojy9cZ4OE;EX^!RO(En$bafzG&|MgmTAW{6l#JoKpw!}m z{Ji4S;F83WQglth8TsWPcRAvg2uZDgrbFla+}zTTCk|@Y2P!FR>yCjyR zdX}W-x>giq7Qr2bqQosfCnvwWw7@etKhHBSB^8=sQLXVvO-xBG0-1!(mVo@6%;d_D zL|BSIF+UiTTrx{4-EtDsVg5r^P@0yOiPhGS#Nup}07KD-kVOfcg3^-IqIj3oosCvdJU4%;}BQqzZC>2_E!$JmBs3+!C`X*-P;n3%jT98;&lA8*v z3}8B4a}zUju*NL1j1j8mkfn@qOCho=BtXI1FjJ*lW=^VOF*fm{Vl0UmRP|yib_W&B z&}IV6ZxAu0x(FuWk)M>5iS9a3JYo$9BniyqjVuW&$Iz2Dl02?tjiv-gl15U6B{`$W zVkTvfG>&8plERT@Jbkf-hi6`9NoHaWyeNc3u9qXYX_1&$35uKmP~lRNnT(n^yd2}* zGNF-*Q-x0=B-U{#$WIE%EXhI3%|3}qsX3^2!Hhu_^-avo$;?Z~>M!5Sl$4xQkn7R( z|k>bxbZS%`DCYHH6_krh0faCU?B&e7)D%$b4XM;g%_{-L2)r?xpI4HaSAyt3 zIp-Ht7GGC<30j zpspUW65srk%(P6nNNFm_I*2u{c_|1ExcbYV(p+yEDH$t*6&Nd#9n zXfmF~zNs)}Xj0JJhM65<>f>QU4zP3%mk7If$)I5r zs0(vJ!ySo5#hH2ONP57@Dlre%`iCSl5FaVTiXBTz5|c9!8OpQRB{eOvG^fNbKMx$a z!HH$5sI?JX33e%@pp#CZL%uCJ(_4;9>37*9; zCqM^A5GDj<=H;cPgye%f4({uO6s1C|c+cXX)I?}z^ehfeO)N^z@XyPs1QiA_n}SpG zQbO`W5{uGdZFtY(;Eco~xCJGtxsZ|xT6};sJLe=87b8jwkPsqMf_QHEIVq5+g{Cy9 zbtS2}5UGH~k_^I9eu+gz`Q-?`AU~q=Fw6ic2`Ea1cPc@y2}mp|$xO~HNX#oi@&r~V zAPJ&dj_O|!4=Ej$q~?YeL7P$Dsg>pVMJZ6LyfgElQ2=5gwD=_ErI#kAL!-(!Gbc4M zJ=HTWEx#xiX(Ywh)7KSb6~xzmr8!VL{L|7v<1>zBiJ3WxNtrqDTo08%E=T-}GSf5j z5_3QW6exHgW5Wb1#k(!ee@1L7l;#QQO8-I`S`5pi z!Qf#hkPo32l_VCGAaW#%g{4V|unEa1%}vTn%!DQ?IM+EbIV05*nrz{s!QjC~hz&?h z(2)ERNZLZwzad45DXF=MMcL5MfsDb%2NY%Im82Gh2Khh?fe3qo#L^OzQ(^Mp(cU7L z%%W7#P&c$~gI6sgJ>gJBP(eU`5mJ8{VoGtmQ({R;YEh+6W*Rh`qDchglomT@Bo?K^ z^9&vZh{OX^7_Y|(2h8|8uz07(gLtTQiLr?e;$8k=wv zpbiA30yJ-U7CYzX<)tRW>nFG#P`4^GFSQ7k2w)P>$}uEAKc^(K0M#iFH6Xu08&!q` z&vZ(?!=d@LR&=bM;UnwAJ|1fiuE-^}9T)D+Mt8Cqz7 zrcZLvb3!qARwV~{ln!PEGzdVA3oNk>mBlmRUnJHL33K|iF^a7wk2{k9)Co>PL2Iv$#nrh$D zoRZAk)RfFb=bX#}Y=P#Nk3FP8!ztL*2P76HrWYj^WMGvnN-YMpYC*LF@+>brID%3k zp@dTU!Mp~WyF&8=&M*o|%`M1*Pw2w!05^|ZQ!+vAYS26%nsF#225?Q``9&$nJ__=U z2d9CY#7dOeJQpO1U{IqEmY_l6=%X7T#h%3hMfoMjHGYt9JZQlKl5Oq*!SRkcC7C6q zu<3SW5tr1w{M^jEMEEKMWJ$l$+|(lMQbDO{5U+#P7o{d*^mRZIAYUSsxuh1CIHe{c z=9|Gv5Q13Uf}{zHbC6_FTm%vat=<5Q51={#CW_NCm;xNO!K5*)^GQSxV~`_YqByOC zDZpVJOd8X={JeCuI0f4W6UJ>JOa(3*Ve+U}W~Qa3f;yF%um&kO^85pkLf1b4yQTgC zSgi8QO^5Ue;L9&S1|o}MH4Iq+0aH=j4+}?xb73M_t$|5mu>vNAYCJ5^kj#e(VYdJ# zi_Hd@9Eugbi3Ki+C8fCt8+=m}i%W}AK@CBKU_enmXk<4tFWncZ-3x6T$x;Gf45Q|&E;wbKfGy)I~3MooV&PL;6wF0aVixpsT6f2;mEUen| z1PvI*J7t!*q!z&1DG)L6kSur@4dMWpC}iPJYKl{4NpV1GQ9xz|Y|;#$3Jh1{Q;g;j zRHg7Vk0A_d%^%$;iMr;M6jdVn z5k85P`K2WR;68aCSW9YN324X!l%C!4i=2w`%Zs7yW_eGDW%Dd5}zaY7&|^!;3OYP)&$Tg^ia%J9P1g`5dS-;jshm z?<2{BMlR4KosyGL=9yuJIwdEARKr{dG07RbT4!uZ^Yg&#%|KCyNMBH6kmV3d@L*O$ zQZHmk9Myi1OfbB7f~iLulZFcw<>zAc7HH%N(_bEmNRwh{0pwZiR-WQt6qH&38-9RU z0;R!)45~W=it_W*Jo5sI^3#h_i_r`OO+TS6>42IP50S!jA82?0o?szi7?O|Gen$9ykkyMX|7{YNoFy$lJi9f!=n))glr~66ho_1Y9hG( z;G3CO3Y*)57z&yJ%rAzgZm@pm{JfM>&=@$fqoBzeTpA;dwIVBlPKsf=+&wj~2o`i; z8=&ivyi;N28$`4iANC=%P5xL}0kKu%&_Y6PO2gq-@p2B0gz=Mr?a1gwoDWG#{cg4QCb#cHj4VrCwwLMqBfiCiRM z99AHyAY?FlBJm9N2ah2j2dYnMUNNrp2bM!GOnpF$+aS~C$maNhwmX4p7p#K*X=%l< znhlbed=o3M)i_APIQ);K0;~UhQ%h1o!=9jggW?t>arA)k2ThTdAXVBBHzEn6>j+5A zFMurDMJaK?`f^iCiZYYIGpGecshGy%RD@v(sNt8Gi|!L>fd~>t*AbKo8b?nF&M(bN z0reh`10XoD1f|~wc1Aox6x}S)Y*hhz{S6nyR9y<1@yAGC!5Ii~95ITl1Z$KALsnjZ zI>m@VW~lQ~rEuARstT(mA&Kdr5fR7q^rF;s_+$jcmXM;vyyE2il++Zr{31{b3^`oG zGcrq3of31hEFykklkNDFlS2{bhc6$fpwgjxVs4BK^uDGq86VTgjp ztB{uQKy3t-H}Gx`!a|I;FhUBHhJq`LOHyGaIov_+sd=gJ1rrDj?g7E*jscHvp$me$ zxmX2p1q-yZfuRS~m_`?btlL5t1;-^W_ z$t*4bjj5&OWF~{gBXSF%eI8J#z$8J7gh9y*lxfih-0&zv9&3Xu0}q3NT$-5!UiAiX z8eAF_W&Q=Axunc|P}dRDIiTfWE~zDnnXugyaJ^9fp_%BHp9fn%k0ujPlv?)j%jI`ImjECk(5C4Pht+- zXi#Wj_!3$VVH6)o20@sadFi00HiiM9ao)`QJkWw0(E0~l@`!;9NPYkf-sT6F=7P3u zK=eSxK_Qh0T6^UIZ@weRq{7#*LIuHt6gcdrE2wC{2P!&^{W3 zXQ09!nI%ZGz)(S0B7jW2!8akmWkK1n66R!REdZ4aEKMz{bjwdJEly3r=20y2paqm} z(EWWVffAIM2b~gv8jdsy1QiJ_$_dE__t8*vB7{MPLv|KG_Rk^$04efeAqj5yLI}^ZZiFp$p3(o zXrlpWWDH~n#B5M=2DFI|v|I-o8&IJ+4vohhCDX__2 zh$v#x)3LZ9H5qgqLngG11W|x~$O2Rpybc->*eIe%yPYB8;PpRPJcOe)4$%agDaCYG zeokp_YCNcUgxsPHg9v*T`z96?q^5vZP(uR+CKHsO4{g!;Ir_RnBq7V@phskYvIvT> zM`BS5Xq~wyY%2p)IVkcIOEQykQqg6CQ;R@{ZJ?NfG$R1h586HAUYZH5Euf-cH=`_N z1vf`C(~(B-p-M4(`cMg6i-hB0Sr?R=QCt_`;*W?(s41X@hu|$0@O{ouiBM1E<{3<| zpdhu#Ei7I?Cni@yWl>z|R9cM1X4gE}YAXycpsig4 zAAu4N6AX5N_HLjKbxAD)6)`9_f-9cl%ra;Z0aXcK@0eL!0-p$g%Aw4_K*eAI21;5e z3-BNg3IK(WOJWIhha6NBbnz+VTnQ9Mp~yg2qT^QJUzS=_lnGnH1~nX7d4ftURIkBO z2*yhBc&EhTR9FKCZ9P0F=lJEPpd9Q0wJ4w{KPe|Q7jY5;RNNJ``yw+x4^;nw%1>xz z1(k*R5W6HexUfq(l@?={fb7&k2_$EfV-TPg2WKXMN_$k-fQu;5-c0Of2c?4KV3X}o zgCL0*#X@kH=Ox28lt5MD3R7^)2R6A3Rg0Xl9nm&+LX{vF3OJMmfY*a2r~2iWxaAi? z^g&$eSDKp$YE)EY=4O^u#=GR_CT2pf^%s0FCft`*6t;65yB`i3|V(Y1i;g$VoPr|0`1*3dxZ{PLkYX264!C}9O2OUg`! z=!Ur(wT^R40j&cDZQ+MCazRV%Q;X5|-^3GGgO5!ft+XpD3&>7~Z0&$L5+V|onwOGa z6rP$CoC%wMc7e!1Mki8JKuHI>e+NY;Y;7`ld>Pc!L6HSD<52{hiW2ichhiZ~fD3(a zb09txN2Ljo#Z_}cWMS19)H)N+3eYQFh$xuEE`>cf zz#3pl2Bi%ImI0Ma1-LQ_M1>zLpMbfTLF1PX?Uvz?56;X1ZB~HnS;D40v^W)qR%k_x zrR@jS5D)S)dZ`1E0h73LIJg52-WG^l_#-L3fscV+OvD+|4B(v;+{`LWItv!V8BINEHKZXhVeqOH)fz5o;cyqM#-Stm6a~ z0`;xoBim3haBT>24nzd*Mo{A;GdUGKXrb{OkEJ~ZlXAhm(GI2rW9K@=a)dN!=^^N} zfn=n!9Kcx-p#)k|qBal^(wN(o;Bv{ZjmD_9VyW+7T0r9j@xiIEB@L+hz>)-90~uZc zhYWN_Bq)MV+K4c_aBs_lsemo-!xcB6Llz(l03l;n*eic@)0{I>le3Fq>$y?A=vnNS zUjj}Vsl}i*iJh3kAQ7bpw0aENzD1ZNpmsB8kGg9`K`Llw z61@QkQwKUu0n}@RtQO3vgsl|>Woc{?$$0DPyPu)f(8G3$qe3%Lr<$ z5LSiDEa+lrn332F3e77>%q$Ac%fzf1VNQkxHe3lc#?$N=*V@ zRveF*4S?*yL=u2%1Q)NM774^S@Y1c+6i-hVXs-e)03PUv3V}l=FF7?VF()$xH1zJA zQw$sT3J-RHRnnnB(AD7}G0<2HR6B?poSa_(o4*0^Vc8$m3m~%!3W8G$VK%}Bhe28# z!7{;+v#>BFpmWm5@e9%w0ct@YIRs|0b53d^v~LVj25t8tM%DsCor1%hgX2RY1E9l< zFp*$qe{>;V*APb+#}G$IkirzgMB~F;gMvN%p{FmwWc^%2!u^B1;{$^H-8_9*p{Eh!RORC8=ShSjH^)$)5U6wf0wUtwbMliCb0C!x?10VykOWdZf%(W01r|UK zK(GKT1W}?6ECY)aFb6aUR02CH7s(}{5!`^H{0eBJ6RZ|FTf^s^ATppliz*aa06kO? ztN_|n1y>BH>fADmazO*XnC`@~`V@Vo+g7(op|4-HU8DMK^aGr*~|7&bBvGd|qUH6$LKKOrsy^Ffv%aiNtN znrJBEkO;6QP_Q7)34_Hz&L}}zU;!3H>C1sdP)E7Ko&Dlb@)t+|)RagqMmmQNBnawh zA-T%g4|L!-=uk0KK~U2jLnJK|x~UUZjywCs2cz-FJo z-P}Cb!ghoxq;~@!>4n53LK<{pd=X;Y6ios(F3==Vq6IDoYqFtPglL(-RU$1FgNq@T z(`Y7uTV7~li2MjQ0kh~uNP!NKf`n=jeh@*3;G1HQvp~ z-!X(C!^JbNptQur$A_W7u`H+r(kKkcC`wIC@h?gNFU|$`K_JpDsi0&3a7u?KW|sKp z;gAkaE%D8T$e|B7f~-z0OD)2u07*OSC^QCp&~~%T{5%JHLwkGo)DpqY@vdR6ej)KLp+Sxz zp8kFg_D+rt_V$pFfy6F2Sz+o6@b~c{R$Fdva&dfKVs0wf?E#75iN%QpnemYDfqBp= zKff62K93;R;835Cc()*b-}rD(KVu_?_;{cEbdUVv5=a52QUKa&se&$Anpd8gmx3-F zkQiE$nG+wJS^}y};f6q}L5Q47YEo%B_&65W%vAr4meiA1S2X}uzH-C?S00+lV7iS;8koaJD zxcdf#M50_7;_T|+>gMa_>F(u^q&&nU$kov$-q8m{MaBoYx_btPxFYQEaq#o;bMkZd zK(-^mKiCr#o$&K zpn2NK*TKof&Bxi-%Nt1#vb!+tadvcY@egqJ_i;tG$J5W*KPbr6IRqAyAYY*bu#>-o zzlWc{yN4?xPFx`w&BM{p#Rn1w!LA`Fx|}^6{C!h-v>!kuxk)FDS%=%DAdo-)6X5%S56LoZtiYQ?!K-_x?KHS0{lJwLgJl+ zTpdGPpxMIH zFFrKb6(ty)JRCf|{k?tM{gIOdEIVPQAU_A!05@;f0F(?7>K7au5a1sa;_4C)sUOkp zaQE{IaPxCUPU8NdA@Tlh@%}+Bu0g2EeH>g}ot<6$oRAX%)ZZcg{_#GJLGEb2aCh+Y z^mTFaazjo6ps)=N@ec?<3s@&V2RDBY7eChkWcR?s2wajlhM;Tmckpxd^l?He16||8 zgZ%y6E(SAj4= zsFPh?9GtyfU0wX0-O#JF07ppiXKZf@s>L!9sm?1vCC^a$1!8p}C zF~vO1$TBf0IWf(|f&nTYk`L7ZQ)psnW^8DbVgLgSpgmq5dBp*cP029h(o$gxz%)ZZ zB4qI&WZ6w|P%*jm8gIE)gTI5s;I#7uL+M2;G z2aQmylJ2P`5VODm3+};V3i)Ox7v&d&j{+%X2u>|2EpQAA3V~UQBmlJuAp%V|PVNq_ zeop?*p0555j%8TdrYM;a)N*ijad&id32<;M3&PjbMbYQv@8IR+?d|X9?}Ta#S_9e< zU6-?mhlg{3ha1SY5}d7abX{I<&R)Kt>)FbJN^rLHQ8jrxcsaUzdbs&|I=H8THq?Mm zi?BCMOU%qkO|dsk%P#_D6=yf-RdVt1nYjg^ECV`@2{xbv3sZjwCs%K0UspF5u)85G zZb-gC>5D*|05QrZKQYB8GpPu4D+H|MvhZ^9cJmDI_I5}tD=M)!Ny*89XaTqTkz*Q3 z025s3MqyOp5k!;*(*ad>{YnF)gmR11s`(cqq1;#^t;IuQ)yMbOY3)O!IAKHiQ_ zUS7Wb4p1FX1rWEvb^GRniVet8X-Bx10{ndZT)q9B9I{i3@=|k*jUc)(Iz2E)Vv&G4 z7gGl6KpzJmKSzIG=KwEITtYih5NkqJ*W;s{_ zo8@2$Y?ebM(hvnCxZE|s<(POM95RMxIHinCa7q~);gL!M$+@SNAV-LAW<_cdLr7{7 z`0T?}SS*{WAPFUBBxdHRpa?;_o+g;8P=p|=j4@TA2tiaCVyZ$Bf~Z1r6*SQyL;@1S zGxNZ`T<3hyq$T)DqD;_5g0TK=aY<2rr6c@e4ahi007Mp)?;Ue;5VFM#NHV^uxu88l zpn?q4cXlkugoPA}5Y$b`Vo*ceQ%j&4gHl1;20$AZKP(AtaiJPzVW1BVtV?LLtON17b}iLLtONf_{buI3ab=NPvVdcrR5*J~TRz#IVFg zP<{?PPheUCk;Ul-ur#tRNINAUwFqQ4wB6&ApC0ZQ<_hV{xJHDy`UQJB`MAR3-Bbmq z0!V!0Q2+@;6GA57Q2;T)n2-s06hKTcAY=j_1rQT(h5|J7amhogIww~L7k?K|Pd67| zhvX#CqBVO{45;Gb2Wt4I*qcErL4;m+FHdg|56=LHa+LNmsHKBbkB`5ri=Vf@mqVUY zPJVJWxa|tJ61P>puI}DWF3ye)d5&f2paYsgE&AZpWP99NJV4`+9-ht)d5~s2Oou5R zJ#Ma!9!!l0Y1J&1v{t^f?Mt6=iuz_?&as@hdah$L#Qgwo*+-B*sC~u!SYae zVp(cPen285=)fIJkPw6m>SP8a7A58u!-_jlCl%uAp(S^k(Xz*dmz{1bj!PU{z(Zkm(zyU)MBmkk+ zF}$0OS|i2>r6wolB$t8?OMz69#gP5m@y;+|aABI70v+psh6_$S`qXg!3Ag|VfD1@T-DV2kxnmb?%^rn2vcV(35>3Rx==s0PoSp>l92C81BGO0<{fp4d`HtBrLWN zRtL37{w}4mmP|e^KdXV8w zFcTEjp3u^P0jdTP;m96<)^51v(OifTxhgQ{!JTGl%n%Q?2(;+6v;dY@(M6#~qX|Qk zEU2{w8MTDBUxG{WLHqRKd~hC1WpGa|fmjC~ok!IEU@lzJxu6s@xCq#oj!%RZ{IJx4E(#4pG+}6|?dgMkU>hB?nZPOC)LL++> zHy?Y`0_X*Y_Li`&n`v?ms6K?x7(lK=1aD=7<|X&k5=aJut(ZZGLkHm@(y#*G+26s% z*V*68&jYFQFh!ZbL7G}|V1W1~B^A5Zk;PFwk0b&0zKfHClc$?wfQPRKlJ{}V1%c)j zaW4phg+F{K3F1ds5P%mA!6zs1D#9TNnV=$I4NMW#ZA!IeMaPoEVbMo)wH1J(^{@~kE9rIE^bHxlG2SZ#0 zGY?q=Y8aA`V^V$*v_^+%KoNrKKo$#1O-wI0HKIM zg2L1UJ_z9J;P39_;_L6|;((+O5*X0%1bG6|%s@2CKt4q{4O$MtTV-gnP>0}+JySf!xWW0Qkf?dss>>f_|(?CgL=6^gCkB!$&d6d6=Ik)>c(x;XfIyLh@e z2e`oOL{f#Y64G{nG;5)8ZKwirB#H!VlnX-w5-bL|bYPKy=)f=t$wSCCLvjY%1g;9C z*%%K_@umg_#td)~$k2tUfsrw+$>-wj;Nj!p;+f~`|Y2Hm`qnU`*F zidfL-?(N{@?C0#}?cxM$vmxmWck~R25ApPM^$!iPH?_9}HDF<_RcOHiz6Y`ZRFDm^4vrd#Yrs(ei5IA+K~72q3&WRzxVSlZ_`A6~`@6e3fET>ko0h^x zCcv&Q26y-DO`SnA5C!@0;W=kt2VZY*XAfs@Z|BTmp&I%u(BZ|V&53Fz1g*u=SO z1p`81Kz>dRtgtsiihhVVB)wpYLn0qJfg!8M6o;rsw-qC;Kny`i6-EYTn5n|jl0hXc zCB6u9O;UUkc&S-@W}b?LsgVJ^+zfCC@b+|bb@PJc97yzltboK0G=n+&IQV+|c{n;d zI^qpcutrnodb)B&XMgM}Q55Y$`9V$fn5zNi7B8)L};c$EWO5v2401zKuxaefg4 z_{L0#PME!BDky@G=t2{OguMwim1u$xl}6Z9q6tD&8emh2CJ0f9;!0@vpokTNZUco6 zvKSkh!7`bzgP)&=uZu^3s{@h-NDQjv<>w`VCSf!4(&N!gFtUW1;Oyk!>+kF0@ukaF=^HxHs4yIyo<&3HpzGgQKItKuukVdl2jbM#W z=nY4iRjFu>z*K-bzEgy$08&(-6*90=&)vb_-^I~2AOLBa2YFTlRI8Nc@PkZv!qh;QV!`@CPzU)qxI4PI`}?~2J0Ri& zlFi}0C4|ke6l{uEnuII~Ny<1RA!)%FpH3W-5S>_^15HlYb#d`SG`3T~=VgJaN{D*X%wl`fynN6O56C)cSX(ovxTGjK zw;&v5os*Y?n`eNdmzTRcB2+*vZA*LH5OukaledGHOMth(mj|*DP#2kIrc}V3Wnctf z<^@f>;MJgLWey~uobw^m%HZw#p!3q8u^8ash z2Lr=P76yjKy$}&4Mg|541_39%BGBelh!}{JVqjpndIH2kUV2R&3}3L4-ON1_p)%40Qn*{%~brU|2$gI*>nJVyMFm7m&J-M5_Bqq&h|u!ttTU zz`(#sggRda1_pBsb(rA-@<$7XI!yl>GcYjp5TOo~-u7dt!?f3gfq{Y7l(2t6?sFtk zohK3MKt(|yhB^ZWXn7C<%L@q%3=E;@>KFu^6ciNnU0lJ36!~~MSt*s4W~S)nWF{#Q zC0w4Fmz#@4xsRulvu_BR8U8*lprhi0l@vgZ{>Z?<(80>U;K#ry2y&#eRSf8!isG2y zjKuQ17?;%I?2`O~7|>bAiKQu-`7ueQnK>yjxy5D4F%@PeG0=q!G0^pW<+-`3dihCN z3|0&_f(#A}3>O##7#J9&=Q6@+$X>Mkv=Rl4AWa4Tf|AVK%&N@1bOq2sF_}53MGU`K zYy}yT%TpLga129o4oErpa)iWO1<*LAj1>L;-oc#2B1>JCC1>NunT?Ji#BL!XmBtr#V|4ap4 z{}KgVm-ui`KQj{rT^BzWSEo>SkVt57kc*Fxg04$|W4x=Mqmz$oJXkK?KQtsDGz6r? zIVdDP*wr~S2(+O!-o-T_$ko{~#1*V39J28_KHSCEI~aCGfTy3EKUfwj?B^fv9SmA7 z9Pi`l1d#|0c8zxo_Vl+kK=56Hk$K_1zOJ^02w6x=14RU6Cs<2-n6rgJd}x4skfV#M ztwDu>nSp_VuDhFpu6wSog08DaF^EW3(De;b(2XiEG*i%Z57t%CO)IcUODrx?(2YvA zDo@TxEQ*J))AEbJ#|$axy5$p04@l95oIwF(L0B0?FfcGEF)%RP7lCpZ z7=lZRLYxaKL-L&&WEg}%MJ-$kiQ&M=z|SBk2&(i7*ccf68B6jR1Q`ScLF%IfKmut+ z`MC^C3~UUaz;+|_g6s|8VqjoqU|>*z3SVGgXaF%UF)%cM+;fY8p#kLXWCjKXT{L%t z8icG24B*oLHmbXQQu7EnS^(;3h#QMbioj09a3jbLbT>X=U}ymO_Yng_1IU}tpl+PV zz`$U~z>gBPp$rTRYzzzx{tOHZs}ODsNc7E31?^@B9T@|;mIXWq0d}+lC;%|A10#bN zgP>plG^YF+!TA(?U4$rupkM?80|O)mateHlL9@CLA2ERagls0rO&~vk!Vc7^0a@k9 z$j|_Cr#B-*1E}HT!^qG8YN+}$GBkkP?#Bp;2T&v429F<=MM0*4F{E<_o^%1-qXj!H z0F;&#zzQ%32Sx^A20=js1_lOpaMH<01YMTIAjcpmXu-h1uud41o^lGnW+I(lCCMNt z2=XAPm*UTu1Ufk@F$X*V%OJ%dDChy|P=VrrF$vlogq%nQvI`WNkR*^(06szslu#KU zVFn6Om>XeX28wqds9-E3LjxxR149xcLj%ao$&3sQrVI=WX^adFP7DkTnT!k#?hFhJ zS&R$~pvEnT4+={VAC#s+&b3AhOG5?*22k5chk=3N2q;iiR>}~X*)PN{JCy|1Z z8JsPlK?(96C?6vG4P+-MJs|rnkCCAPn9AB!0o8iW}b7|IwK8bGmE#mLa0%D})- z&B)N8#lXM-;)C1_;)DDK>cpa_6OcV1GePQ*{01JXgsgU?g6FWr9mrmE|J6hN*97%n z3)Fw@Q2%v9{nrEaABYcfH;51NUl#)d1A5$n@(sv;pbpPkL|z9SYLQn4-Fgb$6X^oZ z=%9p&9&w<~FC&8pG^0Z@bZTB1IBkLwEGY18gh2TqHLonGG!2@`L2(L7%P`|WZUOn3 zoq>S?l#fB;d!c?l%E-_F%BIH{85%&H2#=yXE5)p@xy?l@f1JE+2%)Id2+|=NL)a1;x%w+K0S|Ry9 znR%&+MTq@mA&Kb({0l0iLH-5R>i&$yiMa(isSryT6rk+|h*UW^6jAJhgaCRP2e}{Q zf8;d&8S4LUj0_E+`t2_xLjxBB1H(T?h6Zj128JJukUASA4vI>UI4F&;Wnf@HFR#{s z;+uhiVKFFAAi^gQbV((6jtSv?*9x%jp(9w(aD`J2j0~U}+JTXQ0XbehQy4&j;=#zk z5D2c>$`i|=LE>5gmIB50UT{{(%}oV25WpwnAms;eV+m>z$i1NO0L44V9*{5-6Qqt} zWnyRm4Je5+F*IZ{FffQQF*M{cFfd3kF*KBe+E7dk4K+}HD+2=q9}`0ZsEh;2PiA0X z;9_EEm;sev$iTqB!Nkx23Kx((DE!tjFfiDnr7w_sK=mU?-5Ip-gG}fRYyg7N6QS^v zfrg(vH2n0T;b#C1KO<=PX+gse#0Q0+1~mLYd{FqQK*JBj2Zf&!H2gq(Q241cGB8-7 zg`Wi@0|Th;l4WFIIFA;7keq|qzzAwp6@Vff6FV?6h%*QZf_yp`+^T|sGBGq90=4y+7#f~3FfgPrLE6KqObiX585kJSnHU=Q7#SEcnHU-* z7#SF{pz`;zpw;NSv9EvR)1^%*kdz{nuWASehL z`8x)QL2%g#jhVc(d1d2fJ-7! zJ_0!b<}#4~K=A>}`>@f;5+;TQIR*xX3MPgIP&=iDiJ<``SIflE0CGYd6GH>Y_$nrb zhFS&&1`r<j{x`2*F z04H8hSb;Je#EA?HAh(0U3RIVa%3qLpClf;h$Upr|3=N?CKYT~7fh$0yga!&uP{e{ffQB7F1GKE5+zFC^ zOrC=~W}rj^Y5qV80nlb6PSOpbLbM_~Ck5Pm1}9i>1QnMi zCxZ@;0(JR8F@6h@+%uEGF#_r9aUhNBgZvJP6Ht2n19CD01H)=2h6Yf0tYL!md$uq! zG}tmQFl=Rl^!2tgLHc?-m>3#B{li_*bbgSDp&^`sf#C!bLj%Y~Cz%);szL1uXgWU! zttZYiF*K}aU|_h&#L%#jfq~%)6GHrz|r=1E|83XJ%-a z#K6D+G7ps3Kqc^zn8lW`+ik z^L>~h<)SY$B(M21L-JY>GbFDCGeh!P7&Ak|Q3eKv2xf+cOAHJQG0Y4NpfWO>nW2G^ zk%1wHnW2G`k%1wd8B*70Ff%mBfa-o`h6Yte28Kdrh6a5`28JSLh6Z;=28J?bNZzVs zW@t!aWMHUfW@yM`WMHTRxs#EBp`IDimH_2@OSH5BD#t4D1_p*{%#eQhbZFRs`YifrVFMcD0F7B{GB7YKK-By2#k=4x8OX^X2cThS z2OLzzPX;%Nv5Yl<(iBV^$S#ndK=y&!lOXX@7D(T!f(0_3QpEzPBdS>-eyn3*XaKpb zo&^%WpmwDbnjb)Q3dk%8(0B@{Lki+BFnAV&D>P_33%tb-wXF|PhCxEx`k;`9 zG=SXR2leA@P+OZ=KSIh8x_XirKTd@DaT3&z)1ZEw1NGx^&_V??KVD#BU;xc$tY%_h z*a!+`P+)=L5nD$McWWLr?gwhxpr%Ps9SLeYECHuf@QDoI<7`sFH;98;OQ6CXA`3YO z14$axmjadV7~L><+x-W$+yyxqX%SQ#2(m>3w;SQ#3!nHU(3xJSQ#1?GBGgdvobU+W@2D4U}b1n$;7~5&&tpMN~aF2ka7t$rxSvf zop8kK{R5J z4vY-S&?z`bXQ{X}Jso_nF|@*g8Ubp5fbtVW5vY`gSd3%~sOkchK@cUmnR%JHrMVDQ zVCO-LH*h_LT)u()2ukb7<(oSzqZx}Tt?0YnkD2mvKXP+u6L0!xC_h0fPP6ciMt zrll4YrKaGDGEfAAn)?vtgd!M}V?e!UC2&g*YmNa`D4=QvT?r(NKotWhEg&~0L17O{ z3!q@%0!j!B3=F-jkh*^oD`XCE3M*vZXc{YIK6C~vWbS1lD?K@742>SAOH zYX=t;LZG4xk)XkGRveI81a3$}jAsC44NzMMp$thD5=WphQBcPnp#*Lcq`3+;N{K;G z5Y*{Ks6&>9m<3w502-)%I}rfOrMP9Uw*E{v)b8 zASz)F0VQxy4GBrX5UY?}0&0prK==hb1qdGE1{JBGTncdkwjx!9K~NA8l%T8w4gql7 zAaW)s8KA0yxDQPkD5F5K~9WKO3Zs6Jld%hy&F-Y>@df zaW=^OfixRro=kxaQue5^F*JZ&pw7n702*)7WMgPp&A`B5$Ob8stl1bE*ccfYY}g?4 z1rBVGaXKe9h6W)<1_oy~h6WKv1_n1aNL$vEjiJGgk%7UFjiJGpk%1wEjiJGxk%1wU zjiDiok%1wcjiDi)k%1wajiDizk%1wOjiI4}k%1wNjiI53k%1wD4bpbaWMgQU&d9)! z&&JTO1T;p$#?Y_|G)BS3(6FA70krt1;VdHqLn|9Y!zD%rh8{MCh7XJk483d&4WRzP zEH;J)ZzcwY*&zFw7#QZUF*JlQF)*xPgS16gu`x6xGBGf$VPj}W2K9m17#a$h7#KFQ zF*Fo2F)-|6V`%7QVqiGH#?a8u#K3TfjiF&869dCxHim{NObiSs*dT3D(ELpRT3HPn z_5iIv@kEpzh_UG4Owg$lkoAX|`FW7FB*l)fQ==fo2`DzPVCc{YsD&j7&OVTZGRV3? z$pus&g33Oa2_QFt(hBn2^BXou+wmhFGSlK{X)`DNvAt+vA|p z0_I+jpFv>?YRjL23bwFA>Z(?D$hxCWc1T;Jn;p`Y=w*kD{q?g$#{MR-L&j+*vNJS9 zgT|5AA?rM*vqRbvbJ-#JcRo90{B{vLLjx$yEn#P9n8v`su#BCd0kjqXWd1G&28K24 z3=O9l7#P;FGc;UgU|`t54(XF_VrOXhz`($;nVq5GI|Bp5c6NpaCPoH^ZS0V~DTogm z?**BS9=9xv3=E+32I|Y2;)>hU#FW$`NXi8@8KA*|OhMxolq&JXEofv8HEuzH4@%FV zst0Bu$W5TI2aUUe<~>2;vK)|gj*1)%4U!BD49Xmk_L(XNB#hNKAZ4Nk2V`zTivu$M zq{9K3v(x8bXaLQ18*o6@3K()QG^}J`U@+l;^!q{jKzo-gI3WFgkok{6>o7PN8bI!| z<$(0}?KvQ21E{Z$zBUK8wh6SR#}*Nm;B$TxOHv^#a$u9oNL3N29{}jD&w;5-CsuE6{O3J*{`g8HMNc~g*h zHV33!%He>NOZgm-vDgw0NFT0@12Vo-&H>3|l^l@q%W4kDdaxP}NPE7S12RWa$HCBG z&A`CW!~yB+fyC_?7#IpUAaf=lJ}B+8GcquEqLt;KIdssPv!$SQZix5_N-ZhMOf7@1 zodPcwgG3fmsDq*m6m%djp<(D~E+{LYj+}uSB%lm{Cn7=3OpJ&G6^fuf)PL~g1tipq z!SlZ0ZWFi-1QCVA1!$Qm$RJ2Y12s<^3o;=SHsG!`Mm&MS0X?3&IUs%Mi5!rA(-dfU zPKM^Y861%I_Dl|j29V?Ca6rnkxg3zWr}-R^w#Xt5$lTLX4u%HMT-_=T$XbTg(0sU# zgP{Qw{_COnY85Ch(BcWSRsuBE4O*}2jEE;#z5+MCkQ=z?^#_MI7#fT~ zV~QM*u}qLWXszyX4oH1+f`g&Ki-Cb*F9)PP0r5d;8PtYzBrS{}P0s-eBvAQDD2&cQ z!{{olR!c%MBuEBS z5<@a%68Ll)$eCk^Gz2ObU^ar>2}(mCdth@`MqH3`)07L+1~KP?l#?Jns7SWuVrb9> zt@-DIjC)veLCQ%xE=YX^>U*Ql^@8eAke#6RV;CYlpeJmCvlU5U16nT%az; zq{M;De}lpuWFH8F><0M}dA+D3)Q?VF3=JSRIYZrE1@5MyuCoE@2blv>hv{}ma;KK# zLFt!}+ufjUcZa&&1L}6rIvNYKbO@S11+51KjX6dm!rd<);o!j1)Y4Q!t9C(MdQf=d zYH@*57s&0P$^aBrAPlk_6z<6Dp?tX@b#VX}Wc@)97o_eDfu^A_E=U~<;)BM@K=MJL zHN0Gq^(66l{0i!Kg1iW#i$M&KBN!OmQ<07X0gW6HDzia;1;qg=eg)Zy?$<0X$QXJa z7o=V*;eyN?m2yGGk;=Ik8uCGV2)H2Ylp47h8hSwO3oeF+MGOoKAU>#k0j;Az-(MpJ znonV1U;xd_Bc(~`nS&wuplczKauv9wQ9$bRLxKiOLbptS`bsFdiBLBNTpxi3pTMSo z#t0Z07(ihF>c4@?ACPz(7o^YE4lP5vxfmKibE+UdsIKeff{cky;9_X#XJBBM$OT!W zHHC|z0n|nYsRykkoXG`Qe>j_qq2Uc^jTaYWO~O2AdH}8KLSM@TS|0@JJA;N^aD@?a z?xjT_f${|MxFpC;pfCdUi*rB$1X`a44Wq@-Fj@``BM=`HMyt6P8j3)DGA@ROG6n{Q z^<0p#7LYp7dZjH~3=KyZ7#Oy3LHcYvxELBhe%=WU8<1Y~^%bBx0Mu>(?ax698|TE5 zP-a0%I-t@3QVt`R2Ov8^en&13_H#kjsUL=x14p?aZSP}T3=R6A z_6irIt$m6MGM0Xt3o>R7;)C1{;)C)CXdNJWe-ku@0P-WKzlrHbWugTyaE{dkQFGTwXxn&xjo%YnOGko7qaxfmKiYsW$2pg#Ch zE=d3I85ctXXdVKj?=Axa!z(U^hW88%46nHu8h%3gAU}fmps+a4fVrl6CmRC;Xg;co zje$W8RFQ!k#sEHy4>GO+>41ScWZ-N78dilUK_ML&!J8ZzK(oN$LHPp5qIB@)HBjW{ zfGgwFvedkiV(C#Og6wBzU^vaq&``_Fz;F)aZ)OID>)Z?tH<%e1ZgMj;ykKTvxW~=Vz{0}7@R*yS zL7Ihu;VCymgE9*P!)tDa20a!Ah7a5f4fZSy3~#s@8a!DT7(Q_`GIPowv9Asr+aN%KSIM2$!;KswyaEFzF!JUVp;T0^;4E8(>4T@|G4Dmb+4W4We`@+~5 z7?OAx8Zy`z7}9tc8mieC7}9wd8XDOc7&3Vn8bIYn4#=Mj3=E)sGlppG%$cCQG7Jn1 zeW?34!FwDbBO2gh1$ReTfPob>HwVhz(3R4B&=s`v}8XicSqmBpCrmW|I%)2)7K+z{AjRjDdjxBo8XfLFz#>Y%6#m>&92|Ff@DtwWW9Gcqt7;epI69p!03!p#WgdoxpNtF)*LWBjIGGq2Zh`V369dC-9)<>8 zCI*J*Ab&D3FudYnXs`p7xuCqr#K5qGhoK=0G@k_WCldq1Z%|%@@ zWoBRy>#~n3;h=l9!=@mxX~rikG25h=qYchL@p1oP~iwmY1PHg@u7Z zj+dc9lLg`rA5dA#!_W}O!oZ-$%g~U+!oZ-#%g~U=!oZ-z%g|88!oXm{%h1rw!oXn0 z%g``^g@M6>m!V-H3j>2CFGIs776t|@UWSJ4Q2C=Q3=Gb^3=QX47#Li685$n2Ffh3D zGBkXL@>y9K7y@`18hBV47;JeN8jM*P80>f%8Z1~D7`%8PV;7+H6b5Kz8yCpm3=9l^ zn9%ZeegSgP22H`x#0{ey7#TnrIRLcI4cuZXCOCBjN^aosS1g+!LG2*WJSWU}klR3c z2-K&_f%fmBc_C}KVt65A8`->&^$x|nkoDx{ybKMX@xn@8h6d1H;woN9xmU*v>4(gw;7bi7#JAZc_DeNgBQ{+?E-~4sO$%&1qKF&3A_vqFG2eyco`Z5 z85tO6g51H#z%YxKp#fBOF6L!u$YNw*Sjr1oXSk9Vl9$%=Lgr*QgW?pF2YDG9UNAB+ z>;}alBLl-8UWSH0j0_A%LH=W6U^vCg&>+FYz;FhXwwM?g&haudm@_djoabd|ux4Ul zxWvoQkP4Lt&Bb2lWoW2nVqmxlN=u-;#|v2>c!!svVL1~6!+lmNb=nw6lk0W>rRi6G?r3c%y|coT^MbrK0EjUeyq z0l5v7Mv(XQyy0bN0J--!FJvx+fe$hc!^j62+hgT}j03atLCRZBKFIzLE;oA80-Wq)reK&)}nnDT?T20t^g(jKoAVL?v28gUbeJn*tQ4Aa|n2^Lc1IUx&u? zZD>3{gvRq@XgoiK#`AM%Jima(^Gj$vzv6?8!MujXGl&n0XI*|sJcIb4czzF!=Z~Q9 z2DyzN63@*1ka*_dhr}}Dnn4lMjSOwdLaplFVF&QP+Wm9$Uabff$BHVz7~*}B|oIjvEhe|yV~+Y z=J*`=A?*Nren_7g#0QNfg7&wduW1FD3o;9rKfno>5|1!I%2Gmpae?~99qJbks9(IH ze({3(1;hvW1=Masj}uV)7c@o;Dkm#Y=8Ql~Xnb8E`44(aE4aMHJ%j-py(|NdUP9+2 zLG1(3R6nTD^=B*wZ_x%7*{BNwz^w*Q{DJzkps)pDklR4@N z_TEMFL*{5>`5}An;`kxs=<)oJ_FOtYWZXQTAF`IIkRP&6EQ=qqmMNPb(#`{kgTe}Q zCWHstxpSaBP@sAfG-r&|UJ6Kr1XVmdA%mw6AglBsv(linj9hzzd?x#ZIeg-t|L3~i$gZQAh2erRk(EJPv zQ&`+rF;F7a=GrftBh=U@wsL3;u~r2xiJKcFF7P;G=`To#8Er~(0{3s74Zl_3scL^(9q4mz);T) znLBG>hxG3S*%=zPF)%O)vokb+<|;va&}IuUcF5TQvg`~E_ZS!$pTnFT+W%)~Xb50rU~pn*XlQ0+U~pk)XaJp= z-~n<6BLjmsJ43@nMg|6dc1Sx9WZry6h<$rOb874i4Hp?17_!+J8m=)iFyyf_G`wSE zU?>2sUk0uJXJ=^OVPas22CcJZVql12XJ`;(VqmCZhqT{7W54M6zzwt)m4Sgln~8xT z0B1gcF3|#2d7w!_P(+|%toZ4H)ys1<}Gh2oF`rBF!y z4LY|979^lB1*K8Yn1~LjJrCMf&CbvO;-6uMoRx5v9kMo2jDw*e3N$av0XZw-GCO1r z;0ilrz2`M{$a>Ek?2vOVKzvY|ybVeVp#9VAka^w5>5I?EV!{;7-|GQaQ1&cLt^G5(0S&j?&Efp!|eLLNbb#tJZ} z-#~E>T15hCsQNL25*+A=B2eQ66n3Cjym=F(|PFv@TLm5Hx}bO0Td%3BIw-zksL%8HFqjF-wy{P!JTG5H)bKASQrTeSq)z1BDg%WHp3Ruuq|jdBN2gD7-+8 zQZ$o5bt;k%z~`Fy&-un9az*V9g0x-(kpKur-3 zPRJOA4<}@AnlC3q0|OHSgFh!jgE6R1;)Ja42;yXD2x4Mj2h~#8wXaLoHoD23umIT;$3GBGeDb22n+Wny4R;bdso z$Hc&p&dJblj){RGmy@9ZG%r%Y$JS9Qci{jJ{AUs<(v!+5-bc1n>ZO7q*xdjwsA5v$g?mo z?BHZ*&|zULWso_n z3=B6p85(q185nMZ;)#`k;SMK5Ln9l_{7Q3 z@P(Cu;WNlxtPBj_K<2SAF#P0XXwYI~VEDz!&|t*I!0?xop}`!~ao}QTh+$)3U<9r6 zVq;)n=3;2bVq;)n0`gE|*OgFQO~gC-Y4gF8C| zgANx%1E~Jcg{~U}wYx0Q`a~kE3=E*`2%@Kf@-HO6LHfhFsqu(T0l2~e?cjx|Kq0ZV zfIt-vs0f_`KJ5imjDac~P-6pBg+Q7hP*F(t7_?UpRDFPo27gBQX#$YaA-E*5q_h}P zhJg0)g7iZaf)>*ImzD&;P9K1%2NzhNm3*Me2(+di{h%m4(5W5pW;|qf258Y5+{cL} znfZCapfmSUQ&LmF+mAtY7>aqw2TOr=ID@JSgsVLB&>aOX-9YVn z-NbBW$lAhX%#gLl%b6kTCRQ>tG=TOf6|g|grC7@hS%bU|dhXOlW=NZA3o}ClXpQ(* zX2@QfZJ@KdK>PccA!pp|V}|qx_A^7)(w%08?72C^%+LTj7w7^rq@90-8FDV)Rc6TA z#B0n94WP5%Za~ityU7e`@84pE%njdVhMr*qI)9Flf#D%DLxVLV1H%($$T@v4nIY>h zUV+ZX0=31M85+_V85ll-&YxpsVEDw$(9puj!0;919!3U+AIuC5pnkwFW`>4cpfhZk z85%&{vcJp>4G%!){V_8%JO-Uj!@|&D#l*nC&%)5)#KgcL!~)spE6f5ZJ4IO_`+UV& z7#gBMZ7&wcK3^FY2JpUKSSI%nS@JpfiV<85rDI7#fn985lfR7#fP085q1+7#b>=85q1-7#ixB85q<- zXZA2NFa)wNG|XaVU0!q2VZJ zk3kk{6DM3LR@|PTtg5k5#~85xJoxyR~JM&mWGQvfl_6>r(ZxQSi5gPNHBvS1G}J+ z2m=EngR^tIvx}><54gMl2{D0$e1n|>9D|)5eHetGD#5}~F;LM0QpyZg>IhRR3{}bk z5)KY=aRwz|kUK$YSwVts0d9`LAz*QsVm6R?a3shs9|jSq3G5(2-+*vbmvKNvp{@Ys zF$-|%E{9pYF}4hC)Xfw`T$8YG9XF2xcaz;xI$IPFt7`PR4^f{2zCtt zrF2L@f@GP|WL^B7LqVkpIGHd=L(O18R^{&M=Njbb11|kQMzA7FdisSq`gpoHhPc9= z$c8KrajlypD0ee}LMa6tPhpNh;N;`!42~%~u*d!UU0ma#27(LYBoPJ%9tKeE0~L>c z?(qTs!6EU^{{G&cu5f*f3}Ah(K9EvToPk{sWE>Mj*fAs|$kQn_#1$O%APHuOM2Krd z2-v?MF&2oJvx{ShBk2A#P(cj#FG!LVBI)WE;u#VdALQ!h8szHd?8>0dz%B@Kp#ZWA z-FzI~!R1AKh<`k^!~mrOkU?z72EpCW0TFff_XWiR11N=o6mvp^VetcZDi^AFd`M(~ zD>$$~nz+#<-GUt5!KQ*zSDFaus;CHGA5c(%w8g^>2bFta;F;utM9}T);M3?pJ#k3C z9&|tq*kLB%cyjg(0F{{D@ou3$KHzEyB+keH5_fcVb`1vIF6Zaz3Mt1ya!g=3Ki6>A zp!hJ?AW-oV?;7D591;vJ>Oo4F!AksnTrib@Dmsu77O)afdX9JY_jB{{bPi!KWMCHr z$+3dvLV`krLqIlox_LT-lQg(Q^Y?T03yJsj382`$P5m4*SXK_QXxpk@a+ zeJlZ+0Fv_nrF<8^U~n{mgqaxN!kz(PCJcNG?1B*@3=B*RVIlFJMhpT_J_m^J6dV!+ zE{;GdI6)#Vp1}c*AAhQe7jMQ2+;yLuV#R@Tw8*Eu}er`cxNoG<`DntRO%mVfHLAjw<0F)aF z5`BGL!HqTtaAtzkCZL8(yql+=i>IG^kZZ7iXpplj*sUN%Owa-ytjO8l&(GC41k?fp zbs#|U%*gUVt}dQIPz9i<1u0-bR^a674sPW8fm*hp3I^^NHe_Y4elD=)FIW+%lmeN> zj;sj9EKpkwT(Sj&8(JX69LS2Hjc!jrcO;dX4D5m+m7K^bk?clN3To(rlyV^}4FwgU zpbnF(i?e?~B)G*4QpAm{DA*Mmuz{hj!66Ki4D5n2;J^;qo)t3(*kbef|T(gD+9X%R*)dnf|{)$wfx9x!2uT>>F4Yp04?FcB{WDK ztojDWwyU2Dsw!9@2x6EP8UT+_PE48|E71>E`L`f*EF@UKvQaII?nxO_1IgsILcZ=z!`tkV*+; zl`gK%{-E3e&T=4GNn}}&*FF8*LAHW>zpg>xqQwT>KJZM*Ne#{@ElJ5Q&tuSmCO9c% z?auywA+CNQppwl$*c0Rk$B+<5XAf|j3S^lKifW%=PZwuLKX8Kf3-JUsHep#!7FnTZ zsGql=f4CnaF@Op$ka=>*${-mQR1km*Opv@hvV4$ZILKq*nhVr20x3{HRuB;69}(%| z8UoGspxOeYMiE&Js38;(5(H|>2g9vVLRJB3$HoVP`tq>cu8gX{H^9+3BtF33$I}_q z@^p6f1l6-JzpJ1s2DOUggF^$r9XMAPcvz}oQx@VF;u;TeBV3_6PK80Ppn(#&LJgb> z1A_d0140<|ppmYJtS|u7@CydTJG2QOALI)45iA4^kky0pHz=h9`TM|4G(=H>k&Ix) z0Rya@GeTAmj#bx)kN_V?Pd{JJU|(!3b4xCiU%0?!#{D5^kBsUUdE31KEIADN@528}Gay2L}W zwF^Qus3R8w&Wz9^H^|jJ9(sv6xNQQGWMn{+^zioa1-H5kz$JBnV^FYbytAX9zn`bG zqmO5lD+8!!1(IZ9fJnLpdAjR5HllKLpq?t>`)0;@GwcdXE12UB-q&z+UEf&;eaXu7g(+!C9V(!pkfWAfD@_!JmTUOP4u!`% zD3>LOFfed21ctf>MS_9~T%`K=xVpIdg#<-12s3a9g6d1qC^o$>2$gkjjEo1}O#(!7>pBh5%0&-(XL0FF!Om zKFrZ4)RlpsfkRN3fq}utAJmx-31Sdq;1HA(U|Yo!cA`0iftP_p z5H#oR6Am4Ej37uWr0EBmL%}X6!N4IHA;7?plb@WJlbV^AmLFeSQdF8;0yYw~ z+aTC8$~8WOL7ssFeDQKXBE(3y%)HFvjMNm+bT;VF0R|-o4#6#O=RzBsL8%2rsl};z zCEze1N(~(}ECYvN9a3Dt z0t|ji1BW1Jb}9g+y916aZFp!#r55F<7J-upXjNQ5VrXVwiLntliGUWjfu{yRD+D2( zB?b`&4)E|xNn$#vDu;{^F^Dp72!;tTFcg$z6s0Dn1Nk=q+QorP4T>{x2!cB3@$tT%E%OA^z;xywHQ)T{yfF+`Yw0c4LGsM8;TQzYyr3~GNKpdv0b=mVH$Mf`QRNW)3i2@Whzz&@1dZl_N*73i4gsZT zP>ulgSxOSqp_L@qouHKI>kIV_14t3bBaj0|z!9a)z##}4P6dOE!s~ME;o#Q=Sz$q&XQX;s8`XNdUaUlkV0B1<40m@ca z;b9Le??L85tb+^+fa(NL69QC~f_ij8uI}K_0Oj(K0MG~=Xp9dWk)Wyrn)YC(fr^Vp z0R{$09z_((&{A2BfkUtc6j6{$0dgOvOKNd)QD#9&eh~v9c|`^e!9(zJ1yYow71Bf~ z0RpP&o@^1lbDG2+7jDhXGE&4UCetjq$J zgrMRIWVeS)5Cf=bZ~|2SgST_QuX6@nrU^<#pz7b#FC-phCn$(PDF*BcutA_4Se6){ zlUZB>wh=VaiB|R+fs5(~V5h*-ep)^rQP5m+uw%SqNl8&iVo`c(3E2Bv!HFDN0f5US zux~+gxvmVL=yr$X6n7tgCr2OufRK1s4@fg67+f5KN+M9`fh`940^VxKNlY&WD*>%w zb&3pe1uFry$3R6yKyWB%R@C1Q>|xM`IiCP$aEk`iI(h?2_aOoC0sj6zUw@Z<5>QmYD;pIC4nY>A+5$3y=a`2&o=Kc4Py}v)B@$0R za3V_txfq;NA>}Q65g^#P3TzAv0pKtIRbimhkwI-gaDqL6hyYM}167KkEEJD54}nr6 zsBr^r+kh0?gOdQL@`7%*^-WDIE-gweVgPw&6H*d{CKI$W0AwU6HG&*uW&*B1EWmz2 zP2iwGQgB5GY8~QL05VXK4P0%3st`~%l@ADXd43*;h@62Br)9wT%LmpLQtWE5@blF5~x5~B*MS|?WE!wK?X-7?y>?D)?(m* z0fjXra6I!$Qj5|OlOeS#?wA0D8No^!cM1Xp7`C<_aS@ECB+>`I17=K@MU>wiVp^11By#QlPpPH0B+U z2(EjbL2VgOR>x=+fQuQ>xC6XN3>wn}SHhsl!IH#u7k^*B{FGEsvI8eN(0E-*VmfTF z4lIs8x)!_{4{DcO?y9fD)f@aD5oLzn3lV#wFH7M^R z7bDO-!2s$BzQblYxVQ!_q63$#pt{Zg+>=6Ub%C-pC_{#V$_#K728!c2a3+VgW-#M@!7(lV!|1v+yT zKv01SN|K=RA6$KdmM6n1A#hs{v{C^S`i?$6&i;O3;D!@u1r(?n0?!)xxrRWOI{A18 zhcJ+wD?n}s4L^Vk1P=;9Yc^0S0d=-$`C|9Ehit+PXi4= zya2~Jq?!Wf4XlC;3=E)sKpVI~%RU$w1Q_3BAB>AhR9!nmNn9@X_nPyd`*%U&yOqN^ zpNE+0`0~w|>QZ+083P08Y*Ycp!Z4|&JFFBW@}4pnuG>8&mVp6u-k|_v$2Cr&?eAt! z&^i0`(CLX4P7Dm7dqo5oZCK}4|0vHZ+W1voc5%VY^$ZN*j3D!K%ea_sbZwca%Y1K- zkoSwr3=DI?;vb4X?mAfT?cagf@4v~*Y93%<0IeGoV62oZ2wW!~w~~KyTgANV>cI>Q zYD^$=;gciYx5v`22d$v$I_P`UZS2A%g&8bpH)!-77}_9^7etv&!rqKlr{r1_8zsw+h~U zKJq-yV!9vHD^&8#!-M@3E zD+2>)&9ngH`lWw@*4T92Sh}iTK!xFiG6TayusMmlA9=Swax~ts>e+vnBM(-A_na{Z zFzQF!ME-MXieFeEtsBF0VJ-thJUhtViZAwJ$M{zFvoG_!1a$bYvzb6)O?9)@k) zFP;^KB{49haDnW#WLwG} zlxL5u?8|*Yf0u7ro5sMf94s!q>cz}(fvz2PqMdFWn-1RupYzBd!02BX)AZp$khJk> z_dO|pcr6(ilz2eqf81A{|F7Lw?0GJS!1{kuE({D2U~%2_4R;T69~Z0>@cM73YhB5} zFbga$vP(T_-lm^<8)7@J>}&ZN!oY9|EWX?H(DrnJ57Ty9F5Jq}Bk+NNfs+?xzT}4b z)_wb(eSKXb-lX(yk7Qu*2aCH2E@kCWJNjDFeo4Wk$IlfR7^Z>6C%--6QgABIVxqd7 zUgg?jKNuM9g2hed&%VH+6!dDNYl;YGj@E4k1{FS#`3))wj#3@hyCnOVCEKbK_AxMI zfyFmv<}q4W6|Pn~#(z^SBEy-1VI5ff^;*@V{VDCSwhPwoczTI@H3P$Euy{T13@gu7 zQ)Wg!=ACv#@ZcHZM@>QqG_4UK7)aQQ2=Dl;a?r5egRh-`@}XbI}tB)kb%Jp zEdKAHW1LX&_2%ajCWK2hPxfPAXaS3Vvt6Umww!y@iFcBR+h0!l&A@N~ES|AL>So9y zWruA_0YN^m=Or>QunU6B|6L^zxG^&@bGBO2WY2`pPZ=0|z~U;ETR-Z{A99mOt9o&- zM=O(oVFFlO>bf7dmddq%QvS!Eme}8FXJEJv7XSPFO4c^EH&@E0$Hwx@J$%Z*ASVPe z|NU3~$cI@Do*lAlbDR_E#TXb;!Q$C#mR9X-GM^^-;N0Gim(QI647ws9^JjlM(`GO)?d~ywYYz{VMowd301YY&F!HZ5>|UDC zsJqwT%%PS!eTobWJHYCb64##KeYk}=@n_NT=6CZaFfjZAiwl03e&qT8ADd#Q|0*eC zJ1D@wU?&PPKlI(p!egeTEn7ak-6rX$+0MYw3KqBPiCgFx*Y#Vln8jCTZs|S-hO=Pt zx~p0%8t<+R7k$m}TQzgTZ3YHWF_1Y7caDGGd?r(?y7JPAC=piTyc1z_=+Ld@5u^&VUM=S>b{@6-o^3=B`f;+38nvw9a8R!{b>DbU!x zqLhI_M;v7S#SeAed(*V^udUuGYq=!sB?ChdSlnB2UYEKNd*G#QnUnS}=Rd{3unR11 zzVE~;L!+k1b7AK43_OdZ7#Kc-#c$u=P(OuL^v$!+^G^jFm91i6u$BOsufqE9zPhlH z^3D+6d&-g491IM#VDZ};bGEguZx5Q6uxO8Tl4%12!!fY9-*f5KCCu5LPEuz>7kBEJ zFfedSg3LL@#%RED?X&k~!5wQ2nvWc3UoYPBAdd0*kMY zm^}CKzp6hj>!!SneATDTz;GWd9-R4XOPPKAX?Y{bD80;vE(QioDUkVRm?HkkF&Bm8 zKVba7s=nkT14AKL+^p@w=F-^{76ktlyK(mZRaFLt9bj>m-ES%%aWd2%*#81O(eIl#|M3_cCgKRZptd7`0f+KgkLA385m4uK;|3Y$J`z8cfT?)JO+zLIyVGaPDzq#|HVCV>ZUe31_muTkojVg%?ndIIag1} z4BF_)&Zon`kOLO?NvoSYv+juC%sqRb&z|(mi-7@jU)e^`A$rMHF$G2W=|zdT3Tc@+ zsl^H!6&7ZiF}az^Mft_~X(bB9DcQv_<(YXY`Q^niW#)PYi7}aZ$vLGdsWHjvrI{&u z84Q$|QJ$HXms(PuO{p zEh;K5qBK}R5u8&@p;JDWK!&r+~Nv~f6LS=bOF&_xU}&Ic5L1>6F9M27QZn<2F$PaDlAn~7lvtcfj4AjXlU!7i0*_<- zr5b*NiW4c#J2_RU6$OcTM3s*C-IAQ2lA4&8m{VDtSsYWGUs{x$nwXcD51HwQrf2+q z#S`@9nR&@Yl?5e~hkbE*K~ZL2Nt#|}UJgYSLP1e}L1qf2;ZMA`@Ptlser|3`PC6uT zKv@odnE_Isp9d;4Ag47z^pPDm#TltNIf(_C6dD7qx+yfJI3+tJCA%!Oh!}J5C+O6Q zWa1JWo|q}k%g!sOLPcAgoLEFu9>wF9g5r#V#N=$E3R67Bl$TT%q*9uniwctSQizHp zJT3tlQk+>pOibf9B_%nPC{ysKmt63+0b*Q(-<;x-l*A&UGBd1w3vUt-V>zCn0A<0{ zG>9Rj6eGz6rJ(ymN!M6Xl$cCZeTv7?$tkHt(3C`qn?a2vh=a*4_)=1!ZYRaw6!1a@ zh|Q$vqeiaF&q+-zEupj-RGyianV(!jY0U@9y(RFdBRdj`3X&6xD~an=;m>!ui6t43 zcp=*{C1v@gM72@yr04R?yrNWS_9xpRMX8C!)ac+9=O;sZyriVnl+>isbZ|3^!tg9E zDN4-AOovvWq&T6VC_g#1n5b$hC9^0sxugO#fS{m}RhpNoU}Ruupb76f6cr@H+u5Wz zAsMzpmnc`@PZ7nr$rRWB<(YZuDO6~s7L^qg z<(E-tOcK%k6FhDy&&(?>qjVr6yCfGBEYMVkKgGgZ5YX|1++3onG<0o=WvOZTMY)O4 zl!4z)(69xf3z7(5ZAW1QfWodIKcCWSDL1#cvbZEQmqOPR6cuMcLxb!>JU6+5LRaJ` zQr<%ajYky~$E6j)=IY*X@+ zvM3MX%)G=DiaSHlLe+wp;KdUx1^ES_P9ia;;E$xl;^NdIXbvEyJOG_GM&w`ueh1`& zOBP~0f+skN3Meg&GjmhplXLS^DDE=n=cE#u)bNK32`wW$0aKotN94Wz;?e@5#uV@wgYX#9#^LuJB$z176G-6= z+8dUc49(?a7own^U@@f)Q)E|_=22d|teK;Adc9;AS`gWpOdcfX*5Pi-A`AgJiiFNVSAOTh<17&eBOo6hv8D>CPTnvBM85lrQ=G+Vn91s>4!wD#ho8b(U#l_&k z$-n?wq07zS17&eBEP=AP8CF19Tns8)3=HaEdo`deE`}B;i<_YX%Hm>R;bvga2CL(M zvbaF^Btyk&;9?)RL1$@$!sQE;#l;ZA0~1StvbY%T@Gvld?jhx7cmQQ_F~sn~#1fz^ zE`}|L%AXG(K}uaE?>xEK^fVPYy!78k<>Q3i&1uz6RYEG`CNF$RVtu$VZM z#l^5i45n@el*PsHM4W*EbT1z_!wV>ji=jsXCN=@e;$pCoWMBZ@6~@ir0A+E3FBb!C zY~yBVk%ZiR%f+A|1yiR2WpOb?NHZ{0g544WWpOclfwH(6en44V3?(uQ;ER#C87iPG zE`}3O7B|BgD2t21LY9G{6>Odjl*Prc2g>4RH~?jFG04a4N2+(CroZ412)l=|EXr3=+mL zF&QX}i{XMX0|V#|0&a#YP!<Rv4n|nKv`T2J(dg%XTau7fU>w4K0sOA z3}2uuE`|y#28PREbu~~H7sD4Qi<{vGl*Pp`$C`oRHdx&PD2t0h!UiTL17&eB?66^A zcnnsz2g>4N5V3`cNkCa#40CK57(n;PaWgD{vbY$2Kv~=jf1oTbh81=U4DZ0^t%0(* z7!vGZVkuA-7Xybg0|PrFC~xsVSzHXZ&I}BEU@=E1i;DrYju)aX2d<98g@FNdKQ1=| z50u5lVC%xbAO+D2WpOd6xWd$FKv`T2Puv+84N=z+4h874qkTnu}>85lr!$8a+ofU>w41bkp(B2X3=Lxv9ngCp3y94L#6VF#4O z&9Dc`;$jf+Wngdus}q5;xEKgD(SvGg#dgD2t1M#SbRN0cCM9#P~5V zxPa9qKv`T2Z=fu0h7V8{7lTUx1A`}6od=Y~#c&16;%2x3WpOd+1Tir9g4G#7SzHV) zP!=~s2b9Id@FfUzg(4_^e?VDW3<1F~u@ESWi{U^p1A{-fv9Uqgy`U6_>jWDP!Cr31%Hm>BEoNW<-6zM*pb2GhF?bh)8?X%A4E|6S7lVSX z0{Hks1}IR_Re&6P2j(|)JOy2o!N5@P96~$XhtLJr!E{5%RVe)xOfwXGhtlkz1|I{1 z!+9wGIGAqeI0~j24jh8e4*MZA1L(Ls&=H{w44_+aAueZN0Nol0IvNzTRaP8yn+51L zCI$uu&}~qfpj(U>7#Q>!7#K_$7#OS>7#M6B7#N(vE@xoy=|1SAeJCxBU%mw_!oQ8l zXOyQoBT zU)~A2@E3Fe4TDFwk4gkY&ZGH=Lo~8IVDl9myAS$w`=|uCc3<%6zU9$<)8jb!h9Q^k z1CHI7JiAXrb$2p*v>qsxfbhCcfKA`=@y7rE9?eG-q7Q>S1)?EN2a_JnZ!|nwPnIY` z^t2u*6^F3UbZbB~YaqJ~WB?WPdwBGQs3k&De$A`ErR zoz5~I#Hp45t5$%79>}{G*rU4rRq7U!* z21+Dw-VYSse`KEV0S}lmbhm@}L*4xzoiQpL9-TQV0v??uDiWaLK*2G@qxnsNPxqtl zDJq~_k3G77?gZT_&97OalHk~V)3N&nIN5;(yFY;0pZEo~s4M^#NFPdb)A;p3WfMaw zck^$?Qt5B*9xSB_a6t`_pu{(K4~N&%&A*vSpM7)p;3#=ueBdRhI|UM9`{wS^Q2Gw8 zLk6US^SiqTsDOFR15yI!aWF8Ho&e<<1DEb|jyphZ?7j?2KA@uS6Te^yEIajvs2Fsg zb^L#&^+3sVbPZS)@@tf+B>42ks1$g1M+D2|@>YbK`D6c>93mCg}pL6X# z;?aH8qx-x|XNigik_%f8lyG}AALj71zFTwoHR~sS!Ey(W?iiH>kM10m43F*-l>(5{ z4M6311*mj&jB|`dac>SNmP=F=!abVbD0n2l^yvNs&MdCRCwK93Ffe#@pEdpu$waLO zN`#CLfJ}A(nd|{77vc|h`=}UzylnxFc#rNI9<2vTtXx3CKHUd)@j%RgnNTX$8^Gw% zeHyH|^*|kaC)<8-?uH6=9|t+#0^Jf&-U4BeMOf2kfbngQ?w^j`FFd+GId-3L>2)>$ z6$1*s-47i*B_Xyq|6niW+6~IwFaLsW8b46NZhYV+XcIFi4QPO!hmG`VgoFs1xDee(;!^4`V0$ zYZ?CS7m*8YkKQ_wjyRv=?4X*|qx*XIS+GsrJ}MqA-Ta+?9zMOGW&{H$;hgJm^8w2` z9%ljFfXC2%7!=M($pn@{0+3S2nKPiGKmt@0P&s{A;!Gc+#+S%X9%n%5LjdgPuyAm> zm4J~hOh8e9D_v+YGBC74(uE=;0|VA{;nN$y4Gv4<(*;ud3pITxqNWf2meT+K|AQO| zPiM$!WQ_{wR%x7RMFN~wd~u`|iHhFkF<>f{@z^nICJ5ZLe=X&)gX{X@ z0$Z-__KwZJS&O+~awqLQI+;K53ov_h&r!Jmx@w$15}e>a@e8thG#&w28ISCkGiS~q z+DqM?pnMK$`w4>m<@5`eN#gUYsO%yx?Lf!0fPLKcobCA`*wB91#g-T43Ck>CHo zXQ(|ed0&vc1g1PFeIk`#;f^7oy1@}t_&ONB1y>Hf-5=8UH9q@vKlEt5#NPtyQ-62j z03EX6(p|;k(H$jG!Ub-xyaZhd=abCk*!=S!e=BIL%cJ!+f6HD528M6WJWTv8pvu~% z`)&7E%WQ?RYLD)}X%jrUoh7;=r@OwE4l+#*om#~4H zU3%T4+fl=@`?_DZ$O(jb{H-})S6qZS!lU(e32V1E&ugacvzGrz-={ko6o_u!KJqM%-4~(3!QZ-;fq}uP zTSOk_{_bEN&+b#$0uip|%D?~r5uw=TX#KV%100I4lR>`c0tFX;>ym%}|AQUk*nJf> z%t~z>yHUc6xjUN&T3xwzpM``|XAW9}g1D|!_8mN8pyf@8iU6pHQRu$eeaaKm`1}Dj!=?L1>wyXvkJkSs zX5ZX-m`V&hy8R`(-4(hcS(<+^mMMBPALQu`_>X9hb~9QZ=J&th(R`4@68OG#Q@|A3sA`kx8JAxj%Q~yhi7NDfM;j11h~BOXnvF6(!B)SJpdKmI~W)k zj1Pdyz5sBy0d&3-$W4N3>Dtxx#-Hi2>_q(kD{ z>#gC_eb^CNJh^mV0F_#zpo39bZ1V`N}>&Co$QX?4kDed4B!AT zWn^IJ=5y)hceFkUDcV4Vf-Ts$=Ej#Ctxpz9fO8J076Dalj=R7mFsSLFICdZM?2cCO?9SHk>@Eg3VqzU*;3*hXY9X-k0gp~bk4{I9PDcTcPDhDOM+M~K zqt2c5QuIYUa2HG|B}T z@&L6S6}nHfzAfQ^YGs4apl+Q)_cf$}xBsUr`#^;|=zeyP&EQxBWl7Kkg2!=pP!F2H zqnjVp-UD5@?9shO#RFVfpDYoFC_WAvrDX7EJOc7CDA*jkk09|7AqQbOhJbs*79P!& z5)3ZgpM1I>^0zz!B`Z*P=BPw~!s7*h$97OP+!>=10Lp_2pj2Z3%9k2Goi!>7j{E=r z|Noy~-i3hyRPjmpbnCqEZGBsk?$}+UqVWH`NAmHCV2@rI2akh~Sv;BVdUSvGXtri3 zG4`>n7AR5m?DkRNaNJ=4vZDK%M>o$)*Vb?7f#uN+Y2$k|zccV?er@poeC2LWXb;Qd z|JlkmACO%>-8m{6ph^Z@^d*1_!2po)5|F^@&QXc*Jno_bT3^B7(R{?hF%G47b>@sm z>!lL2W-E-a3YX+m{O9g8zk2_bZ?7pT4aJO0qyD4O2<73uu(U z_`gf{b5Jl{u5`4RlcZ)#0)q0@Rw%bJ|!SVkQ(9lDti}4STvTh%V zKb=0tf0%!|T0bi~=4f5ZQX&j);JxPSW^(Lg>~>;t>~v&-v@8NZ)m8+k!pHzs7`R## zkoLN(@g>*p8y?*^U0V;7==t<|u{btcGS=vLCOiHC4R1Pj3wm_(90Uh?>w!`}$Nz^s zn-6lhT3;@@2B{RI4})C-vI@)iGVRQFH9pyTsYKB;`G8L^i-Rxo0grA*r*AF?Bp6GC z9RD8#)uS%fr;1+g0F8khHb!nLfisLtcO$5s+&!@alf?WzBK=uiMihHD?Lxt{2 z6_4&riS9rF570cpagXk^uEtNGu~m}i(i_eQ%H{^$#TqW%_gu82b-JS!T&yp<@;hH~ zvA$lShiHGeb|3P9=EBwkC8CbKUW_ix_pDF5bYFz3F1-UvR0fWa0S?$eQjH3Dw8}B& zuw(a;*H0mi1@%w6k9c%OK-(paZ$O2dtMOY`P(*w3X9GR4v)?P z0mtsI@cw*vGbnnXg-Nf7gGYBWD2hC~c?>+5FEyuJl=ufx;?dpR0FFW)J`W^y2OqI` zFpC&K3h3?^tp`f9z~wijDDOT2DcB*>kn;QLPS9`%GVZ9sd#HK>f$U*lO zNCDlwMg>%ccXxxF=hC@)38?4OedPZ^>+TsKCcpF9POu!Pv5P)1!GznCff$Jx@_d(XW zbgsSv@-xKyCqPWF_d#+5ybtLQK$^~tpnwC9CjCEAV#F^G8j4}?fVRfLE$LFZ?skx( z|A+sdu)b0B7@7tRK&4LnVMv06a$pJ2As93Q0PbOcGqOkb&DH~@T-}WzXZ}C&n(6-u zpX3)1uB-8r|0nocK#ed^4s!tI84pm^7-0P0ayKXh%CfwBb8;CxnBN+IOM~X;W>ENh zbc?V-;=rSq$HAkU<&_8XNe@ewQzcp+-Cz|y-8@hgp4}oZ!K#=~x^}yqCn;LD8R(PkjDT10I1kDe&W-+v4W9- z!T8%J4}Pr!p51I7-9KG>s~BDQHGNbHKDqD>BI+v(`W`sUD@<$#7wF@tJfIHu< z2TC|Vvy&07-Pb*OXRZJzM{dx#5VvRYA;^IV{!*n8o7KJsp(2U=D&gutdS5yB*{`&>VqC^WXm^Y>v&p{+Eh-fC3_v zg@FMy@XqOCeU-n(odx9m`5@Jw_yxh;LBSdo4=_6bJVXOpy5`X>ecVOG0A417Lf^n~ z2M?&c?mnHyukisA3E&jm?Vppzukqp&zn}|fjJzF`WV>BdOpGsm;*WU;N*OO*K!Xh5 zKXkW)od1bG;vN6`gUs!q^27Q<4ZHRsN9F^snY0h3@#h`*%>V4bC;rHG(CUs){1HdN z#s+xw`Uik51G&V(qt`#fwfiVoz}5J+OXnOF4p67hay}@+N-99|#+RVdZ(WVQc_bfo zv0M)-(aWMedUYH;nBTe@KY`abF5T^*tL;6y+dwTD6UV_X9o9y`im<#i3&*mc>F4o&YMi=dX$8H%&71RYD$t~dI<7y0YiHqfW zP);ukL2||fmu_%acyzaeiWR8+AWPSP+VBW>;Ig}CTIo> z>|9U?GJ<`<2)3;I0$A9kdk$C~WXu{oI^=5n1eTo~L9>87E}iQ^xyrHo>uW)m&h?-? z^_s(_8DOMHblRG)I2@17+sj(|>@%Z~6yNF(mEL z-48l*7m@{Cy61!BTsr52B)j|nFfu^L|6gl%Pyd2P8%PeO4O&ow>RM1#w;m`JY5i8J z@6kIS6dW$S6^t*R|N8&m5i+X?73~fI%{qjrXn;n6BYyq=@6qk9aJ-!b6p5gcqV+%t zn@6|5#{Ua&|M>LIQ32IGj@?Hb`8A4PIPz;$-*DyEa6aM6ui?D|G}i$e1&xb^_bEUX zvjk|aSHYwErAK!ssL}uj52&+Vn(xuu3v#9LB~Uxr091EFW=(s;7(IG>L1_@I7^=+G z_y9C#BII3-4?vapWT460`>K<#sb?qiUOxA}+yd`<>ruLNoZ8vv?N_`?r? zCo~UcfJ-q0FlhlM9l+KYfAg^14l1+wTR>UerTd@dc2HY~zYSChyL7*Uv^TonS%OQL zvMfi?`072MUK0mjW>8}Ulz>15I;7x&_P%+TotjfLCH_InGmmZ_X0Kk6j~?CqAgesO zdAK1-r?W+60xP7p1O?Lnqo9tbHMp28TI2ZtxM%ZG0~hQ4U)Z}1 z3q35igDMgJmMSI&hVFZo^Fc*WnZ8H&JJ5VcKS<7_n@1C3lMAQ?%HL`SN}Gp0nvZf= zgOwLu>pli`gynWnwZY$}zyun+`)9emfRTZLza^NFfuVCdsG>lgzlQ{pOZPEQZD8QY zKm7nGTRS$N5CDfNM7oR# z^Jsv|Uy#L4-7%K1iolPV#S&x~*i=Xb0P>BCHQ2nO?Vtj92B?A2>z~oNMFqqJD}@y` zAoHxj1rC3!`Tzg_U#uL-QYWfkXENm+lAP z;BakyQW^@2Tadn@)6fiEVh+t5`X1f);QcXJeuhRJC_9%rf@aYUb3oJnZQ}zkyZ(Zv z*{7%kFu_u@WA_=Ppa7?1kX-kbmq9SKEHJg*C(xC$FfepqeW~&H|9_;;40yg7T-bUv zz5x{%uEtM5D}F2&fhlt+H@kUTW03``%7<}^J*E+D{1v3K!Y*hRczs?Qo8~i?y zx*l4&c3*}BxGfVS14F4jG*KJ}w=zJcL1eKi7J}LY4rs?ce?be~kZWv@= zCI-mbL|5Z)uEzgeESG~aP+5{kuTHd2=NfQ4fSbB+(Oa0;yr3l7unTkGn8` z_G~`N;bOfXWOC6C(3mwSb|DQaP*JEo9pqrJUtx_PpKgfLe7Ye{?QRG4EsZZh8&}`K zMSX7uBRCeUU-0|9Fun~op!Gnh5vV-2o)4-F%GEr&!CAHYDkQW)D=>wihWtMa)lqT@ z)(|X-Hogt5h60Vhd33|lEFVNSD9w^I4s;ki4g{&FHX@q2AWJ|wrYz3*8zO%|YgS~t z3_!I3c=!jpXcE#}g}4Tk6+m*xMK&lu9^G-I_3?I4kp@a@j@?HfB^xNocr+dX zC3?r0ctisUygm{n>e0LtlnEF-x^I?|*SSZ3#fg8Wk89)bt`D833Rj!oII|3H17rl1Vf1#$PAD_ z%5;psO+Xr^gSY_{7yPZDm5j)vZABpcVE6O4fHn^y=OdTy*`P$^(cKMF02-$Nr=Cxq z{91>RGV%rM3;aG8AeKO~ZXB{HJ3yK7btR}4Re+Vj5XGPhQ~^0Mz)M+Q`=Q4nOm&M2 zDE3~Tg*pf#>~Xvq&G061HzbTfLu%kK?}o+!BvN4w-tI<_X2cXk zcO%FE1Rr@U8dNfRG#?B=7IW!zQ9)^sHotN3=*>}4fRu}_pmD7C2OPVcg*d!KX7+z{7GQC}#OvKy5!4%Z(El7#K>}JUT-;UKe%G z1T{mu4|^PZ!0gfM!S7*xqMXZP=ZF7b!0*xg@PkJ;WFEmo`yn`_eL7t^d_iM!JHQJE z!$8A_-Pc-gmneF6pPS&-&BFQr5NH_RtJ8(?hxK%j`NeEL-L4$3ANzEN3hZXS3987? zL(2gEmM7qL6u2n>7VDl4>TrU}r`7}fuAjB1gPiS=JRjVCEoA|#Y2FV?pbTYcKD|28 zuHDZZyTAD|zXg>)=;HxbJiB?=oREr1P}>k>q95{r0BAhmu_tKk7~EJd+Sy&o;?kX( z;L@F204kunk9zcma)8|As(l3P0!V+n`$jjoV{8rXB$x8RicxUq#@2=TG1#{*ov8`0 zMWM|d$L>pz6bC92`CP4^7K?&{<>kwN|Nrj;H6LHI?&G}q|39d+5}V=Co2r1^`U52y z6il1+0xD(T>17K_dI7DWqGfsknU9iQSg@xTP`42r6Nvf@nqEMann&_{P`%p;PcNWC z4o7+c)uXUxZ#UNT0x}U-dI1?sRC)m!0!l9+8q$%#mR>-pe0G3R9HNjyN?{(&J3)y7q8{WPhT#rbL)XpV~_3-6$g)QZvl^9Cl3$MYG04uCQt$Zu?2Q;gJV8M1v*9G z(J2p^DuwcqT!~79 zcLOLh&l7dH=wS)NB1j7(Bh+? z{F((PK&{u4;Q7k~#+N|LG(nRvkWD(E0W?r|4AfIARqURl0%{rd^4ta0vEVe}(do+J zVSTLB4!i{25#&||N6_MI=(_F0pdlxajh@}n7M|VN4xZh`9-y(O56FW}hdW~hT5s1$ zcyyoZzC6LB+m!=U`*{36<2>1h4r2i&CeQ#-iHd?Nbn4)>dUuNosDTfY2JP~4 zg>ABcto;Pr2y%~4w=aWd@)^j+3sweDEo$Hhnq1*I0pG*pin%-U4H`caaOw0>QNXB) zAhX9l-4DAx1suD79(>5`*!{t!`x7`^K#2pCc|1Yw9ZYH&DOho}hDymSS1?Oi%sR6sjJ zT`gTy1o-=^z%yBMR6tqPv-<^fd=4@d)ct{feTg;;|N8H(-}pOh7#SFxdwI$ZK7=$k ze7b*t=3`nS|NsB*+WM_d%%l5+XZJPZ18EaLtDl+=8i3aReF3}0_`gr5jfQLMH~v1* zDG8pv@dD5^Z{P{>gO6A|nXhAs zEb!n)5-fD4>i~!R+?zKI7PZ6&h`? z#h_97@5cZCFfk@j(LF~6w22nf4FcJZ7%fJsNkDUu0v??{DjeW(0>@DBVx7h}pjkXn zJGj83bM6lY1_pl3t)O;n8h`jVpYD&wC;2t^g65w+yFdDNKRDJ3TE+*O@N_Nc^fmD4 z^bP3rwdnM<>GW0c==4o+>3-SiE79pI(CKT^>8sz>_bj=O?)kbs7jASEAY@fuTEA zrTcJatPOJOn%T4a6h^bUM5Vx|voyfB^;;s;l&x%04;NOZfa_;hatS!a9_q3X4wW49k954?WR-3pTK^kwPvRY>F4_~+66v(uNS z(^bX;G>HJ(?%(ak;?W%^@rhrcOrX=1q1z1+WEvj5t~x%wt^yw2mp!`A9e33Mm1(F! z=E(~3Pp*z*_feP5ToZz!Rs#yP+63R$|NJe-Kx@{!&-;MJPOo`(pL6NVfi5=%g~@vs z1_syeqn@DXf@FA*=uOZdRj39mq`FUZx{5e9|79!@ap}$#=niE#?h2|o7+gAYC0=`j z7L$s7bLL?w5dcd&t8|A#q;ws-{ULz_mhcsUNr*s#tovf8FGHuVhDZ0!PG6BuR}Po% zy`c2$`29Eo!~g#!Tsyvk*8h8fhSRJacy|Xm%7d!`=$Yjy}D< z5uGk78QrctKE19UpIkr_w+Wy!I09Vf1a$hSfO3!ncqYZ8H`K+W*Vh3&Lu>%5p}JjJ z;44T$)iQtUWo8D3of5FYC=YN!2ip_2of)*@rvp?xfRhq*{074Ao(r0;FFVb?|L{QX=Nj`mKb=vHO^-^*cv?r=zch9J`Oc=7j{PN9#97e%E7A^IW=J6}m%N zd^&wV%gcRvK*5o4+(iX+v=2k4i%I|_5IbE|Ji1*)TslEB=iq>|=mhP7b=3g%>mZ@S z;L^DsRGWeV$)$5UsDcOk77|waOrViR0nm1G29TcPuAt4b44)kN;~>k&L4uCVM?pgz z;C?x14fH2|L3ci0dw>)<@~=O~3|f1k1)4WM4pQpi`0Y4H3BO14 zUQqBdl(6FfuTJ0?nY?)dmzM9^I}19=+2+X#kN~A;AHT z%ijH8+Hr4;`>R7A;?0PZdaaeP}&8L z3b=Nk1vQ;O4nx`uEr-ldbfj`w8ocQdmR})y3fJeZ}4PN zD&^7L3gUTmTD-3Cfrbx6n@2YvXdMl7`LXdOSh4NV3-;(PkQYH(8NgC5y-tv=l3;PD z8kg=vU=_`^1`H)g(`3*FEPMdsutztfp40%>ll&Us>d}Q?!?nPpcPVK24*Rfz2e|#u z(HS6sTK|IfAb50tA>h%?23koED)TxcB)~iu zl>(Q}3>lAZwq2qM3=A%v844bq^Fifk_u0-l;DtM#IVuH^!4;ThP{XzatR7iW2}BWu zbOE)q>zI2Z7-9Smoh~XBtq1B@dSjRwL7jz4CeT1?KgjXDB1rw0Za$ArM-7i|Hjm~C z4F>*}rJw>6vR}4WWcI;FkV?U$`-Mkm3wXm2I56swRe?@;f=mQ>bhd-CJXlE#NJ;M$ z@cILf-X0au5*Ki2gZG1g+yUMS0upv@{mGJ146i+ti2EQS_tFF-ZwN+t#dOUQB%&@w5$=1Q6WCG0NN zB`O7_Y~7&U0igKvNcNEM=mz`NrPHJX6nHQ&Gz3x0<^v!)U0#- zf5g@LIe(Ad|Ns9%tFtS>?Q767dB^5||M~ks`$Zt_d8mJ%IyV0W`S$@X{~qz^rGkHV zg4SrD_*Vh!-xQS+sDBmUzJvN#1=GKv1}D0IkGfjFgZLMgrG2{PJRnn;o}JDHAY&nC zR(N!JSfKD6pvruDRbeGy0#wMOR~IG}0T%+-E1+^R04@aCc?PO6;X?i%ASDhyohd37 zphX=9J`n4nTVkQR=s>-H4NwIPX$Zr0_k-(yhz^iBFbBbOceMJU|{Wh>JZ8F04EtITchQ!*;xavp6`T!9uG8L7!<)Q(1vx;9tRc%ZAJzLHL#c| zBTN?5y@beu&JWT8%a+1rYZxKtPqHv&0v9?@5sVX!U8j|lZAmH7_4p{3j;#{n00}Lfx#Ed5@cmy@B*`}SQ!{R!K{_6 zpi_uIp|%0ey2A=N!I6c*lZ}BP4y-Phje#K+%<6`V&0=FnNO0d(dA=v+w_hD;6yh8(cEUJjT`SHs0Xqf8K&g3kVgxKxpofuRDd z!*B(^K3@i*w;j;VSvi~_57|OwVS-4;>mF9w+CdtC!$OSn^ zlZC;L3vvP`3&SEV28MdDj*nan44}PKEDUPg3=E*j7#0R2ZU%;Cu&g~dEKF^AAg4dF zFa$zR0cBxG;(?sn$-+>~1BfXZDG4jIHHSt1DiDUuaAq_fTl!akAFU+M| z;p)D_)v@tG&KzZ75aolZ)8&Jix0a8A0knpdg<%VvmB|k|>5+w@haYlYBn!heI7>=^ zfdRBBH5FxG z*a>FYio(C1EaIBgMb~s$p3ePD{c3aYqU!n<5Q4<&cHJLxzC?)c#;$h?9YwUdY10 zCdtkzS7c%MBMUjpk%fUn4kjid2RYl2g~3CP0epfZ z3quH8HbD+@${`EGTR8@X|KKoSm1kf8mAEVnT=Fona(M=ZzhK!8c?O0*VAgVZ28Q2Y z7NY_K!!IyPQ-Og2v0n`>^Vc4L+zyK=CSs0EhFfe=rt8-R_xzAq_=DrL? zSQs2qWMKFTR`&?5?u{ZWG{lr(ZcbBTU;rJj!otv@1i5vWg<+8r1H&h<-u-YfGi3&b zk6^J@Wmqa%tPDBllZ9auoOM_kavmrP!&Nxzo-*j}Ur^XTQ)Xb`2Z#7OWmsx*RbgO| z1&bY4fyKVADg%QISZuZ`EUeb3GB8Mk#kQ-$LWoHX7DBpeun8nBwvKm%4c257)+ zE7O35RSjQ<%1_sb_ z9u|fhnlQc3H5nK{eSH=NRxJhweXu$aEtr^+76XGGSWI0Dro&2$fdNvp_iDky@39sv z{Die(=|x%_mP$gjVJWOw8)kAFTx_E@1Gp{0!f-(w=H`dmuyB^uVPF8wXs|HY>%jaL ztOJwXsRMKKUmch!wz@DKS-K1i_F&iN>%v?=Sr--ti*#Xb*`Uk70BX6gFl>dZJFg3K z%L84QZGS=Lfzz&t9xMzR^~EDT-xu<~G@J}fj2>BDlZ zkO3^$x)?ApxP#rCWB|*9Z3ZxxiW$O8PBVm=yvq<)mYg$$nf%ER7Bfypu$U<^VqowA zn>@(~7Bkz7U?vM0GcbV8fMsEDg0o7D85lroU0E1fjTsn%zrL(a!!VK6d*v3lXG zOK?`YDdgmE7VwFEw_soZ9X-OrU||Wf z!^;w8a;zoHyh1oD(F$_PFbhMk6)ZlESV2w{W?{Hx1vxXAh2gCg14A7+{7kJG7;3?+ zDb_H(hpl0H-&w=-ve-b*5oTc!w}I)6vVrMkvxS_#%)%gL3-ghME#&lN76unMtIL*w z0o3YdVVGgdz)%gg*T{~60W@L6!r)>DtHC1e7#J$SvgLLR44@$~7KS}`3=HL9u@`m> z3?*QeqdnvVQ5J?iIO~W#S50$dVCV(29y`KX+#F7@7A>C>149>BR?dlmp%cvV zaDuf|^Wm&%aMo@o$ob0TwEBy=b5uGY;%E}G|$3tzy)&tI19r$7Y6W2 zs4NV3Tp(wIvoJh&VPF8w1F|r@b726VtINXh3nUA60i!GAOkNfSURMSN(1{T&3?i6kHh?TEXhnT_I-yvoILDLQdFaVeoZ@oEgl*5CT10n1vzQl>vOFF$+VMD+5Cd zSZ|>#|Pdzy{-%l&0zCx!%dcO zgSEI-++Zzk9XD7UfjZ)#CJ~4RVNf3fM1wFg+YlrG#mH=9s2GUK1`$vUYK20X;1(&2 z4IbHrazMRtD3bx1odz0#gi0)j(je*%h+tq~0MVc`YC&8O4GMh_8-$xc1Qa8??E+{7 z2`UacGabqVpScZVgU+#sv3Db>2X9nlfSmXW9=Tv(U;xpeo*76zhz7NsL2M8WI(Hky z2GOrU3uFpllF56UqirN#H%6AQq&J z2x5WS)!?~L1_lNY4LX+?Bo3n2L+t|5T%Z$FKoSfL44_GUC=)zhfsKuvp3Pti7#JA* zkl47yWs%a48xp&W9idqS$uFQ2gqcAHXEH!opea8w1_lOZaDNjtPQwiDxkFeY3=9lX zU|A3!bpHo4I7LBNpyOCUn3+L^0n*B428Su={tsqwDgzD4F*6u2Kw9<83?^_ED2;$l zFJ=bco&mbygBd(-17U$iW%phMp8hhBQt}?Hb6IRFf$Y|K>FRx44|7RKsGXi$1yK?4DOLbSfINS62Y>d^Kn48WiW%s z*B~s=%nm3OFoVk{&>b1f;L;4j0uAsLgY|+ICql$_FhJ@aX7KF=gm1m0y#=dOk7(l1*Ff)Ma2Z$J`l@DQo_BepbDrWEr^$;;oOC7=jwUa>`IGGth z8)G11pcCLBEYL1s(BW~+;8WZoVxZMH5EkgzBw0<|W#flcmVgtVoY89;l3A+l2#85lrmhM57h zHx42OT3HNXf#!Ze=V&oAfR+eD#6a_#5Y`$-1_n^dV`c!YrUNZ=XJ**K2x*HlGk}(_ zfy!iNhCPgs7A-RaXmuGV4KgzvVPs$c)gH_YpjB|7`!JXpKr2)sEYL*rQLvjqt3yGz zQ7|)r<{2TZJB$nrr@^wICF-D5%gpeE5z-T3W&rJNx&)R5jSWL&LHmm!EYKb#Q0iu8 z0Btpeh=C@9AuP~Z^>bjopjGOiT9cUpwCM)I0!`7~1j~ZvKOtfwOpyK-GXrSRz;&>! z3|tJfkpZGkg^7XTDp*#73DS>ZX3&ANK-<$Ff@MwMVxUF!p!+bG8Elv!H6SwsXj213 z%muE_gNcCwGzZ7b;KKwNiD6~{?P~$m+sq6hObiU5gS(g+Ks#-of$fN4f{ec~Gk|v8 zfO07_Lke6h1J24}Vqka$)=>Z#D}l2rpo=7!8ETjyV-(B`4RBTq69WS%*E2J8FhSaw z%nUtn)&wR723|%`oiYV3HUrL@!^FVA4VGO17h3{ntzcqc-~`LAVS?P2!OXA$&f3Dn zz#t5k-N6KD?=my&fwK-UF)(O?WsktcPQY1bm>3v9CqObYfZAxFJ2#jauE1q)FflNw zg7w~ki#>p|o-i>mD1&8Rz{TFcSs$1f7(mCxGBbQ(g0#$;8GgW7e?YT@V7&~WIR`Kc zG&cdd1%sJ^gPDQB4J^jP3~6yQGYG(0BFqd7-e6e?W=PMPnL!55Qeb9a2n5TjFf%ZO zgIOAImJTxm18BPfGlKy$14A@e)&$P7U}j*50*l!&Gcd%1Sq^ZP3o`>l99YbQnSmi0 z%<_S=Kzl%wz+xfHkiH)?Lj;@!n#~2ZteF`Sm?6DDW`-0vD}$MVAq%WGhZ)j8VrD3S zvr3p57(k^VGeZS414BPpT@9Soz|6qV2o_^xWny40VPs%rV`5+{Vln{JMob2bEQ|~+ zP7DkvbQ1$a9Y~&&nSqm0je*I4fq@a3ZOFr5n8C&%RU*tFl_JC-6(YzWWg@^JbxG_1 zqZ%KBS_U(NTnRseTnZn9TnI0NoCyzuT#?iRi3?%}7=1Vxd`#FG_)|C;_(M1t_>H&= z7^S!vq)PZ1q*C}8q(XQZq)d1iq$c4|E5yMd6e7eRWFp8Qw2AKkPXTv=A_o%##}&{F z3ZxeTYRiG<+CVg@R|29Ld082FO{5rj86_Cl3XuG$%*UXd!OS3&BETRM!p|UM!p9&} zB=JG)fyf1+0|Et%{A>*TCCm(5DNGEkCX5V>5?l-tDO?N^A)E{nCL9bBMo8*X*ctdu z*dTtggj;mcW|*3EtH-P$gd!IP>T+%2CY{Fk_U-{%mLAi9Lx+H zNh}YT4lpn%g3?9^H%J)VRs}H>CAk+z%3@jm_ zehZ`*hpZRoZi@7Bu`qC%urY8Mu@x|a*hXv@SPn25D1y@r7Xw!cCj)B;sL#N_0P1Za z+YjS21`06*&R}Oy?%-gMtKeji%HU!UV-#oL|G@iz`vT_y_5!v9)&Ld*u=ybzAiEM2 zL3Wj}Gq9RK!Uf_($T&F24j7+NoSQ-1WDA2h<0=M$4}1?GVZ)xl7Qn#3$j8pW$LPYq zet@-rC4o5rl*bhXSQrGp_%Luh@dgv6?S6>5VM*dC-!32FU;+LVwM zJE;8#5d*a!AuLe)5z=A@wG|;^ptd4}1!^loTI`?}B18<-LWHnDEkuYcs9gvV1GNhw zEKs`;Vlt>T2oVFd1|cj^YY^fpP}>gDA_leXAS_VZ4$>wEwa*}8p!OMr1!|u`+T@^C z8AJ@!Dub{(W(EdON?~T002iAAXU%}i-eHEdBp<+8PncmX$v1GZ z4{+8OxU2~atTku>XW6j8T7w>NF&{W9fCbhXjDU;9z*z}!StrC(+^1wRG`2vmO@-0b<`msG2T73#3i*X zGda~WFD>6n!LKw|Av3R_v_v5}BQXzj!LCA4YC(QcNotBhVzGj1ilTyZMq*xiYKlTh zzJie+7Xx-P@=HrdF$Cm51_lNP$T|EwK?`XZ7#Kc4=?C@!iSfZDiA5#BB}J);xmF70 ziDjvtd0-)hqSTVoqP)};1zQD!3e^ZbE{5>TJYQc|h2WC>0+@!9%-qxzh5XVIh4PHd zoK%JK#LSY+ymW=M{33;<#N_PsqWsdl6orzEqSQpN*U~ccGK(|xxS%fkVUNX7yoMm$ z;h2<K-hu`$nHftV4nrdKQc{yj(^Wu=pFkaF24=`%<_I)e2$Ifc$psakASQTr6v6-vjDj$vr3Gr=f_NbJz>NWi1~VgQ z908<<^+zLUITwftz2gkTWP#cTS(^nKzk`VAm84dH#_&LDK!cvlj3#aj4Ec-<3|868 zK-Xx3Bp4uTTtG}#1_cHthTxK-5TDdM@HizzM6UqhFHnnwnGsZ;fyy|0TMbYZ2hz;I zzyKRD2CHGvt3c=i4Zkuo*04fGaZi+pfvQNTF4!CdSPg@Uj~{pf!GHmB?;FT01_n?a z02;ppxd#+R3=9_;AZvm^@(>Zwnh8)_3}Oz*a3Q4FfeZ#C;tS+ckQzG-HK6%iPVa{qM$OtmR z98hfwYHvc!Ni4|+4bg(lU;w8U5c3&^$)I``G+u=;Sq-$RnSp@;VX{9nWGowEGIHJl z#Ue8!Y<_IsJcmYD2r@8KLL!?1q=tzBSr;cL7cj#5C%M6g9wT(EgX#jQfjIUNGXr=; z2;o9z76$N`4nhP}XM+5P@M#JQ19s8un}q44^Yc5#b!p23e;G(hLdJGB(J}I3hHru`w`!Zj(po z+R6r*-$m%U%?6p@L+D}xF~N4j!cYW5#2!N=6fOeuStdIJ!v!|v7;I)|U;xb+AZ%a4 z&H$c40cnQ#;ut#vgCqw?7bMp)Fo0IQf}I1-xyYdk8aZHQ1kE#n0g&dI87YH}c;DD6uAPXRFK7e7)RSpJ* z4=CnAK9EV z9>`b+Lf0%F$VxDT?dL&-iU6{%FFXtkp!qt4E(Ko5_%A}2FDPSyf)1Wj;&>St8c@tB zl@3(jv7y`iN zz~Y^ikAa~8MMR1ZGER+fj|DU#Bis|l2f2$Gp{9h7fdMr0giteyj{!V4h)}bEkAVTy zDnO_?#|K$MgHZE^j{!V4hET)B&j6mEM5xi=X8_N*A=J3>Gk|9}5o%KSA#EFknkIfo z>kFY~9zO#EXigBJW;ZC)fa41misvvy9`G|TOb`LZ1uP7|@-u+v3=t*^3ow9ZnGhx$ z3NV0Y9T95$1sK3HRtPn@0t^hGc}s+vZUF`c(0my}%}N0V@XRMd&2a$+2GA@VLd{bF zNcusjVH9Lw0L|ke)X0G@QAY8pHHJvIAOph!QDmQ12r@8yKoOZE$N-)ZMc8#*kbwa- zbB3_%Gu&iYxgjOQz;Hke*<@282JqY|!klm+1_sdF8N!?@AqEBoab#W7gc!hcst8>> zg%}vXvumL88SKBiLJSNID7xN&Y)27c7iM61fFhy{x?oxY*)B6-1_scm8^SJ7P6E%` z!R^WxW?(2l(N!nR0G@qC=$a+W0G@M0_-mUm0|RJu4x#3fFavld525BA$c2oc+z*;b z1bGa!!vHith)|;}!oZ*)iR@+@(B1{)kZXNR$CQ7l=^90$RueaSpU?EH1{t;2@3c9&IrO z@Juqo95*or@a!GJoFp*@h6O0P%EcHMKqHd~T~oyv7aqyI|SqxGFAk~M=SfM*9Gw&$kiCKrH~rht6`%R3t43=A7&kbPk*&H$d5M%Wc8&cHAS#jY~Y z0w)x6Cc#Bu@ih-aWE)%rX8Q>Yky{ud-!VjlKwVlC+s!aU0x?8NFhu$=L{?*noPvwM z{Ph?v0`tWuxClrMa(xOasu1;Q!%IaeHkH8yu*7y7w>`Y27=VM z3=HZ}T_80OF?&e{h5}{e81$B8U;vdQh!{+eWMBZDb_z)eAbU$C85lq-2oP$zBpDbk zpv3ZgNe1v51caJRk__P8eF$@oNis0}1KSQM7Z?~WLtTjI=l;MDk&t3w5KuvOvx*c0 z187wO!Y*?u28JIf?(v2VfPs6y$l(ksUYQv|`x-%hTekOY9wM9*pt?Y6AR#sbDgsgq z5m^NnfyL=gDF%imY9JTF{B;aN%?-E+%(mBX5s*2#skz0eupu*en~hzXfuTVYWHPMA z7m{XR0IhvM_+3q!fdMo+fCy(RX$A(+90Wp*pELtQ2nz!PLQRr1q%J_HDU)Vka6nPh zCC$J9n*BhinJ3M_pn;-hlQaVZXblKL%@Jt^1`!lB*FjrWK>-Mk3lQTaiU@M-fL1y( zGlF(?g4CJ4yFCRKUJML>pt?Y6AaP*^8+3u2?200SY%-{lK;*9uH|8va$?;HKAT_A@ z3sjUdGlB;O85kI1&A}n;YLH`KID%r=e2~c?E5N=0G4^AK+>v8o zcmOpS67v7$7#Kk7gAgWb$}=#4_Ao=jN5#hvJarGz1qnw6h7frM1_cv{FCgX=$wS&C z2y>>(GceqMyHLf)54^V?q6=ouUU>$F1{8B1$}=#4<`@y?@F*}aJU})F>>h|Nm^l^- z3=9WQ%n4V3w4)H_)G9DAyg)Vw>>h|Nm^n)n7#I{xA^w7-mR$-A44@fIggMt07#Kdl z%>jk;R|N)!Szui-bC?tv7y`_Z&5=-K0IzsLm}9EQzyMl%4GCwEIl+ny3>?NLPrhFS-hUC8+zRMjC$ zB&8Q|=7^ko32Hk?4QhS|RT~IhS3F{OA#}Zh>H?{Oq!uR7ApsyS!_%rhhDbDqNDYR_ zTnv%J7$SEtL>QDA7!({qeh1ZYAZLguGl18WAwo=FnSlXx#}XoTypr{OFOh7XyknjQd6gtxf8q^1`h+<|0jlx4MhEgFa3=GNndBr83 zpt)$@#DapCFB{eOvG^ZpuF}ENmH7KzpH8?e~C^^HwC?&Nh zp25DLC^I*;INrhD(B9rTKewQ?B-JCoxWuV6EiJVuII}9%J+mw|&m*xYB@|?xPiAgr ziGzcsgC%&z&bgp6B;T1q1w2)!0-M8ADa|X-%u9ju0}_36Q{#hEOMDWGOM)wlOHy-P zi;D7#VES;&Lk+^IAU-}bw;As{idBr^wQ704rCi$JsZ3=p+$`9-;j zCBCV}#fj;ujttI4sfi`2u4SotCE=MR83Bo4^)QFwl7%`8hcv_@cZhc(=0Svz)H^Z+ zr52}_;IbHpB-CE)vJg8EatzKn`NgRoiFqkGso4C6Ll$ZW4$TltkR%!0Q%hX)%3L6+ z47zB-1r~rfB%yX-mxWjXk;^Q~&&y5CD+x<1%1lhkNp)oK%*!mvOw7rwN=3CYrP!?~ zKi4&{3}!VE3Zc#*tkT{--q|7Ez{$_S!_D8v+tt;>0c~Lk%BmB46-P%02AC#a2QOb& zKR+K2A9PK~t5G0&z$qCTh9 zw9I6;oW%6vkbIxaywt>^@WirIh{BM>bcTS$@XWk;WbN411(v23Rf5YGgnriwSfJvP zg@z;!X-JGhR;PgC6_ocwQY%Uvp?MM_<6n@P#{f0~QjFoWADc9?1F*;=T;N|?g3Ag1 zr6mYAKte9Kv;eZq2PFV7QcfyEe0))AVvd7}L8_^R zg@pkOAjDH}h$o|pyQG$+CYM074J0Li>I0b9a7sgchf5wDWguU9=6MIZW#*Km7WpPt zfYw8S7D~ZPC!`8$2?1r$@*Pyx`=;jR7ga*jb-0VKcW^vdGu#E4xuv;KS2*XF=9R!I z2gjV8{N%)vRHy-nq~Vzdtrn098E{U3=DxhNe3)+#(TSk|>JdCDQbFlo#lpnE*cj#} z7tk`FfTGO25?Ha}>gwR?>E!F_;p>92AkE&`-qf!&*WMJoCe7Xyv?$F1W|VtTerW+7 zKSGwaIVTnrJ3?|BDC+!6ONfa(T*{z+28TZ$;}AjZUka;&k-{31Z!rVgPz4c~m}-(U z5;OBu@T-9|PYj4K2frGKIrv-y4GDZo;L&ek43BI#2RCOge@8#}0NjxcSv&}iZ3m=+ z6H=hLq?SRV6db+a7N1XINornlW@<4k(PEW?IvATAyxf76I1n0Yw|ii6}S8%x6F#v6hxERttc@!wU_}z zIgaKuEXasg4|O5Y8iG@EQj<$S&0%y$I_9Mygu&i{xrQ`7P#2M;$vH76xikk<5+_!G z90944z<~z}DW}R3MA{`zEz}i6DTb`jh1dzQjsdO<8b+xlptZ2@+=EjZ-BNVzu>5Xp zVFIhNjnk4Wkw79+AsC#Qm!6aAk_lQHnwg&mX}%Xb=0THJF(Rjd3Rcu4s(QAlTFD_Y#UhJU^O$b;e zQK~+0_X%2zLfXC%5mcS2i7BZ?@Z@KX=3JO8Bx-TVLY#{p@u+%n$wKs^M?9)tT(S_o z26)|!OBSLRdstu%VyKf)f;cpRSDUQ0PYfk%1XzAOjtuHCAES9 z<^_!U5uSeVserl%j}n*^W)+KJ0ahhwHegc&DK?88i&9%wpN1;ftP7TTTORYc-JXk0gso+)t@dG{;5EmH|Gy|Ush#9zD0reYB z1&D0!ndg`Stri(jlq07M93Dqig4O4!N+8Zg^BAfUh$(oLKup2oSZuyWu?69M|I(81 zqRf(12Is_*0q8B(*3fHL)x;1!5+&A5@H_1|k72&LB;FsMk=ngVPZf-C%J{%}%N5 znR&Pz2A0I)C6rX`o>~%+Uz}NznV$!9tb1xnNM}I(NW~3H4Mr;9mKRJAl9bT|A*s+1n@Ti6h)NU_ zp$Q8`4B8%5jjxcicms3zlZ_6;}4<}<}nl@s3VZY zP$D2GwHUOG5H=d&?C;>^?C$64?c)p@jX=@{8hC;bENuX2# z**BP4!Jq>7vau!1%fYE7e)-@u1wp;-#j+k|8& zM7~M0faDkm2}>3(E)E{9etu4#P98X{hVHwxH%-egvNug~U_jcH35zNeA!t}2i^2Tq z@8IF$=I`R_Iuz*Asfm)6%1hdh?)C^JNra;PC zCu;(+~!O++MX17aeZf+%JGaX?W#7E$kc3NUGypaOd2P$?^3<4LpC?f8u zB_LIZLKqsRVEv#n71WzU$Re5rkSQL&(p;C+GElP@)FuX{QqMg1)DoC5wBj^&b@udf zbn|lrooWDCQ~M zrWR%hzV=e&(=z=Hk(FP!K zkpKpUk4y{Iux%lgn@w* zbXq6_1A`rSnQ1@*^05LSbp{L!45g6_3`-+HJjnKb2L=NNX43K0I35V!QTs21LA|QgMfnr^5Q>`7-%)@b|TeXAwnH!vEWA{)QK@LFmQqH ziUBzSim|y5q)vedb)XFfW<;vgE{g6XN6PWTjMEnwg@PlbNJMl(3Jdle2FKnp%G!7e7Z|*I*?D&}u)>i4W6QLHqAP z``Z{8oULL)i&Kk=V}dgh%kyGfQj4=o@(W@>>qZhwQ!?{o&`t*lf}RdikQiT{nHQf@ z9G_B|my?;7t(Tva#bCu?BM3T#_X79?VClJxaN0LBxhTIlKdnSTBS=%hzn~;DH?s9?!GZl3GOB8fn;=?`t%uEz?UHn{JokHC~BB8-SEctpS4X5{%3X_w{wPHAKjUI|e%jc%q1a z7SDjS#D_Us7{rGLxCc49xY`<27?>FtDCoMoDd@WA>MH2EdK80*WCdN{5Cz?+0z)$e zUH4#J1>Lj)tF*-85(V9;WUKPzjKrdN2sFji4!;5+f2za&ps>V@NV7*u}dzCOk7QCBM8lrp#Q=z>$jj zBN&Q{k{R^$V)XQ4K=~^pzqll^ATuVV7<8ai3}(@n%m6wjiQ;$$RScl=c^3Fga(>X3 zIgk(-gI1k`7@(s;3P80Mh{M1DZhg7rkMqU4<7%oGMe20=lP9;jeuW(tD@5OQ41a z%wUk)c5p!U*uoZyn?WwIV6b9fXaKp{nt`DKc>L)v0t-E893uSbnpc{eT9jCl8cx8kvQWSJih$xLr@$o`q}4ew zCkJ%=8Q5>27zJH$4hjnA{55ZtQDhKs1BB?rq^inUa#z6fT5A|aL zk$%LJR?+=PD9OV7h)A+j_G2>Ck7-aprbGP*IwRGSK>($`*bKf~hk;=oBLl-OP?~~d zN$_ZbOEJ zDna1_61xNq)60+}aTu;KFo3psGF)e1XaL=na)W`P0d$V@O_1Liz&92)STTTa6lic{ z0N(`A;LgCnaF2nZ0py1V&@{v?$G{-Oz%J+|0JY9GyK}U7Y;`A{msR=5Zq{3U-ACY+$Hsa0r7W1G^yTHdIE2&>){Ee?QlFPrr~L zM?cpP23UykB5U{c^mPr13~+S}bM*89b?z9nptkTKD{}_9!p+mi6*OFcP^$)2%a5!U z9B{#re$M^@u0f6=p8kFeDo}L-$m(4ETu@cP0znX271*@U0C{)C@o3JFVADpfx21>S-Z2pUx=$;h>K@%fPb(jC^{TNLL8kv7}TMvWl&W61bezT zJNkhWv|os)V~8s};m9H@^bGa$_VW+-LnH=RmXW4!?y{?An5zri?<%N@A*O`}1O&MT2fMn!!%_{KvJl4**La8< z;R@ApDhzVlRfd_9AG9YdTw7+?w97+GmR zsFROpu!n09A}zr(lnJsrP!jfWj6^MhU`2~5vdZ9KpU{YSKgTd9AAe_WR~LBBFhf!0 z8WiRl6c2VON)ZUlN9HK1{XE^=TwUTJ+1dr+R%r%y!4Pnl4O-*|xw^+g2WlB4ppx+N z7$oW8?c>V;(q;gzCIcLUf?eaC9sT_MJe?hVJfmD0#2MHHL6S@i5J|TnPgg$|pGdea zW~c;s*v&H}GCnlO2QJA1l??Lt4{`B#4)p~kdzg`|P)WE1s6++X#SWEl1r>s>@t(o) zp?rR6&4ah)29zkiRe3T`*ZLsBCDE4@45A zj6oRcS8k{*C_ca?9LPW(s9-QSuHeGFFkxp8S6@fC5qvOV&k$F*T7IaYi@&dBq$ObrVGHy#?93+1T=Q)?*z*E@u0j2YXX53Ffzatfa`NtAJ;HQ zT>^42NC6XE0VwF=!IcEa0GK>8s(dggA%o;WSqG$_1uh>BZau{Zxdw*>c{+pYiePY- z1*u|1sB(4kca9J64+stLb@X#|cLk>}DF${ykUBQFIww~T$1qR-pkQ$Q50Ybt%ei<4 zgIXK$zTWY$ni*~r2V4~>ZhU+lojpALT;oAm8PsfJkcHaB30DV;Dkn!j7jOd&WEmG+ z8s?vPN9PdFFxLoZOu#MV!Bhz<+(4FrDqjXr4gs0S3s>jp;^OZYkK}t$+YF?H53U5} zErh%Eq3-5~tMLd42>^|b2Z748_yEV?;BfySmw0I4fGb3hp#pFX!H#aO@u1o?#2=Dc zzztlG8bP?4P(SDRV8<|57my#EJzSl=8DKUG!4KPHZ3UHwdZa#u^io(UAz5x}-p6=k38z1Z+ z>gN&+u8Bcv#W2+RxVk$!N5+F%$e@bv)&G(2HQ!ewAi3vu=Fa}7bHM40EK;40l*U0o3ASQ;)4u3+Ll!M86! zDrAVNT5yRF5)kj~=;Pz$=nP8cp8i3glG@Kd$k)+_L6Cu6&8U$<9&mj0~~{$9eu!kFSsyN3{)6_#F)WK9brmAWhqFQ1tc6C;sUZA991AeR*;}u zfSY4*2v{7Zm<=Qz90{_^hXGWaffTcY1bqX-QC-FX6@|J2loKt$Wtg*vqo2F0x2K;A zC_;Q)eVtr`z^Mo%&B%Zx?c(a=8sZ970je25DwvQ}1iOZS@&hCwL9)zfvaqTPoS4A1 z9!M1nvMP61Ki42fA8FF2d=;P@EYTJSmI!K-kSsvnAH%Ct&R~K;Ik^+vW zFvlQpBJ*@+P-Wm13<7%`)bTC=9YNqyjM=Z}V_+AI5CNT@5*8BgX#|d7JFqrCe-}{K z4D1eYRgeTaND|uK2=erEj}Pz<4uLk_;QAOD!1`Q$AVn^yN(ULo1QB)&2?_Fa3Jq}u zrx=g~Gejc9H6jEYOdv59h?p~|dkmVj1C{dNU;;_9LL^=NLO>}s$koj?$kor;72FyH zxe(TY1G~`8$I%^J7{!P9$3u%F0jQ5T7{Ws0oq|JxzzGTz2Am)fP!kT^5CkPNkcDi> z7Q+3>0TG4VeG&prz#zq(5MfyKgDZk4aPT_&2gQeh+PvUW*$c!og8P^YRa-o`vjG}l z0GY{+Cg~RB=nk&WKxsQo1T=FI;p+nmagernxZR)u5sK zb%r<4!FoV4%rF^H%?0ulIOIVxEHIgXAb)pH7jO~)iL=7R9i6=$-NC~c;NV{-0vg*2 zEy@HH{sFE*A(8Q*Ru(uVE&=Cykeml7FS_`F=7iVXGcFDP~*iv$i)?$X*~TxT!VZZon1kdEQer{Fav`pWDXWQ*a{t3 zhAdKJ;AP+t6k=mw@Coqo_j6~EWZ)1iLDK+LDZs!X2s#_rC%`4x$=NX=m;oeWCc?lF z?-J|`5fNkH5S%RxGR-;MG0fEsR1bx?Mlc96a0p%li^G))GjIro2s1FCsFPyg5M)EM z9_n5O6$TE$PuS%kE(|M4%3sJ6tHB~5B~}n;LtL%EKq!=C88`%2 zpxKRNDK`U$AZTbA)U*P-;HnTP3|v568&D?V5EO#A06ew`Zkjkd27p@RPN8mYuAmYO z5*Q^Yp#d@$bQZElxStDyJOc-~K7fv)W2*@`1V0KvVgnRAq6{2@DZ&sw#2OdZU}pwU zxE~NgO%hKeIBiylFff!PraKlC2WZ+1WL|tgNDw&5gJvat0>b<~UBFz>VP?UeQLgbJ z415e6f}m?yoc#TLTpj%wgg`k0Vk@Y42DLxHVnq-!kek6`pl~e^VPNnK&CAZqFV6#~ zMv!6r;BX2J2h~)de2@Xr7#tZ4)&~koP$f{3m=3B1d|iDZwFgKks8LXom>%XB1Xc<% z4Rq9LYEe;MetZeo7W)qs0-%j4)(DR z#2Bz6LDswkJK7nvUjpxBOLk9K0IR%m;8914^Et zY#I^(s?mc%-6xPULHP=jtw2R)y$AyXa)`P5g?R?~`^ASDGk|;n>cJpO2LwU-FJNDI zi7+sD`1-qq`nZDm(?l2;+#G`fg8ZEsBtWHt2q@vZ1cST@>T7^{K;dAOpv>;+7Xr@f zAUA=W2}!x2s0W)1k2+A21=Y4_Y1xPYlvO~pQNfP!jwK~UA&EulsU-{`Pq{;a)7{74 z$RTu{J*%ri3q7d?vLG69?>L9!rcLi0B$dxGK~#bl(& zS7YD+w`B;lWWd!DMqLFe=0M5U2bO+8aSW;>;=!dADB?hKgYYsAG&#rss+d4+@sh-J z7k^*B{FGF1y#XqSK(ibriRrK@4zM_={P+QlrC?9r03XocDWsPT4opygt|T!X(u)IU zDh&n>!H-ZK&Y+4TG$7tR$UhX+J@<2V^?~=&!7&4JF4(o8Y)}oVxRB!j8dBh7{tla& zU^75-wcs=YO4Xpi4+X^yIMsu4bR{VNz|whqJh=S;Y7N6ux^sR?s%KttNn%b;Jh=1* zg)1V$RlM}-i1_lNRPS6A|1A_o#rKiTM z-UWu$lf7#SGYcKdOTu14?!^;ee7#`ZuY+qg1k23* zz`IBGkR$^G=vGky#`O`C=RW>d^~Yu1l$VjO`m`As#2G>6>{8t#kvQX|jXG-%?~>oY zPBAdVg2jU~pKU3#k3TJMBpIcb+0ezn0J<|yfbmei>QuR2fAL4@vsX<`%@AW?0Nn~F zz-ZQXVRPy12@8V%irqMS|EekjgBBCWe5Z4&uE9dbmh~Im`Q5*Brz->aE&>5YmfdeE zA8|6&9@$~SRc2mzje%i5SbgH|N8as^9E~@udiLMt$b(f346Mu`b1IDG6`Ft4q*-77 zQTp|4jST~X7g#(y!y|wpgmqPqvFP{Bn}2*~V3-6JzoqFFt32(r$iznViRYd<{$pTx z3>M$AgKge(Q&t(pcb^z0{5lcMz+lV*GT-=4p2n&@r`xl_`TNXt4MWFOeTz93frTua>r`eRjIdz_0);Zu$A>v&AQrtxNZC8@#oy+r+@| z3@je3b3Y;McW><8YEGVrdea#U40>!J^IaTPZ)TtRRBWx7p!TAy6irxC$0e z5BSk}eA?>QTseZjH{Ma4!N4HH0W#kwt#0znx+8)!_w0Q>d(ty628Kki_^R+E#TE8- ze15&>*;%fCeZ#=83M?Mof5Tb#iqXFZcUs@9GP}pm!0;X{zH{II7P<14pHp(D&5&7j zWhDcHKPSli-OAyd&qGXgeEDWfbtyahjDcYqSiCSyYUvIu1&O?;42J7=Pl;t<*CpajO7Hea28J@Qc-k)p_8<0_|KEFYf7Oz#NlXk3 zyTRgbE&DVm{Q@csCzKf&UV+6czSxT$<6GU&zRdHIXQl511_nbukohZC z%$&to!@uQxr*_w53?LRJ7m}9I49JLF)-{0i}y&RUzi>wFJUIc zIy*4ocq9V@3qQ!5--%V5iz?103!bk1Woy`O$H3qX7N69gc|gfsGk5*Z$33y1wmoHF zm<$%zosh7KaZ`|kdbkDq2Y!X+3=B8G;tndC>@{yLJa#|)XLcgfD@_Ilc>$356}cwv zxw8y1p3MIjk$!pK5e9}7u(+W0^Zz-qv!cBJ=O0|!qGQXzuo5iZe5G7U#d)o;fe~MGwO^?ibGr!;%;nOa(#aCnc^u!TWFvbK=jU&TA6`oahTULs!4K1qJpcb=Q|$C#C1q>}1sE9qgT-~zH{3nQ zeO$0k!0W%Au5~2?gQF10d^f?RtUPK*Uu)VgDVX&5xgrBY2UvXa+Y>GYr}8W&s>|tB zu08gHfdSOn5MVT!Kl=iQQqZf7t|=m%Ia;?F7{r7@<~*!zIU~Xu_Vwjne!*4!L7fZ? z(O~gSnR$#BR)wpTj`81Ai^y>eLlX5fk6v&gAZdp?+h!?Ra0h0KIWZvMDXMR28MjF_-&0j+uGK*2hB@Z zv`0G0w1I(P2Uy(ixpeCi=4?+Vsk5PrJM~N$82*CARVufB)R#ZxCXrV4;$DwdCIf?` zD9HVxe9F;>H1mHg$o=&$@V0sy149Q`{NF*xIHBU}&Ce%H2$yP}?8m@x2`v8i`IW3~ zY;UfVO^=P`mwWh>fk9FXWX|S^dv>`u2j1LW`J=df8ACP$Ln2r_V~5nukVVQ4+mr%= zd|uB>WMEhU7XMu(5V$cjFmtwA(qzws&rcZ`-h#!m*DS5t*iA1|L@&%j_L z4l-Zrx*xZe%C&z|{>Pt|*xzbrV5kI(Gx1Nj#d}`G;jX^9vi<4cc?=8(z~WIl^6OcC zar`fhFTBX~U*;kM1G@ys9R5{?-AfZ1b@v*aIn*+zPmzJa8!SHi+nF|ld1-f#30!-4 zs5EjK1H&Y+xR_+~!qiUA)e|y?mEP!gBR{k`Tq1H*E#xD0Qa=G={o zW^|v@iu(GTw}FA-Jy_g^b#C>K^1PyrU*%;N7u;OWz+eKptA&x_&hhV?&tz&px{c$NvF_jMFq)u#hJtyQkDtc$5)KBkFN~AZ72p3*Tk5E zCqtryP)Si{atRd;EX_+vO{37fl%mYC)FQAmDKx1(Gp``Eh*I|yrMW9o+ zK{=N~-<9TN=auJCXb7kjDk)BZm_oStAh=D8h*CZUybY*Ap*SU5K_d&XQxCd14!Q*m z;v%vOrTnBUkk=?Q1zLF-QfN$3K{ACVfNtx^FNc=$WCu!dN_I+0c3El>F|NU16s1-q z7f@PolxOB8=M$BH@w+9ts3avdji|uEZ%}a}QPmHALz44TQWNtMb1I87i(`uOON)|I z6Z7)&At!|qgNBlCc4$uE@+IGA-iqN=iy9#Z9`h z)S{x|B1%I96gN4PMsR*kYGP?gKII`xWQM>OvN^D3CD{c|eom?p-Qdy8n zX#$3}jHr;iDeo|Vx>qSgwQ2CgG{}(ROiDYkkih{;P03BJpfKGgr=%898Y20Lly}Ed zQYancD9_Bx%ug;Ms$oVTdP^t|lcIv;#NtYd8&CO3S(JxuNm+g=6`J5hsT3C|nR&(e z$&|K9i&7JdiR%sEiRR4Q)cEAw{1l4IxBQ$`%3}!BA|xt?@R#~&Ir)i18AGUNT~v@v zoh}Zj1|g<|!tbx-qLT6=N-KI$4V{}zT;+-<;go0QrKeEZc1fZ}I|^E}nh+Ddcs!I{ zk_(C@O6z%0@D}9fQ(F8M6cuL>m4xy5C^xqld^0J90h5`VOQ8wnnR(zts)#WLe-0>1 zBzE8ePq-wfgAULG54?eTO2sk7;A8GmFpjwcjsFuIz)PlRnx?cUCzs+v9ONI$TZNf< zi7DV#A;TF~(EddR25yE6P!<SUlSE`}vg7B|BRD2t2X z4>tn?=s*>2u+u>-E`|^um{(5XCUz)&m~=E(blj!6tZgvVzVKLsi&%0Hzj2A?W-Wq7;Hoi6KfMXpJXP z3PA_i5T($7fdLUJpcwUNJy2Th(F+NoPFAo`^AU~1D5iB^cmWPbSU^El^MZT~4Qdal z-cDYS@8E*GATJo)`8Ka_LeA}Z_7HnOoEZBlh zS+L2SvS1@SWx-~3%7WYvb$Tc0^i~Fs?idvXuqEXT3=C!r3=Av`wG0dl#$Z+p10=n& zFic@!U@!uU&1GO<&48~0;W`e$S;ycy&VutC$d2m_3=G;}9gpDZ zUcy=L;X1xCfU_P03wRMC$TKVq+>9_+3Bg$sj4)TpGeXJ~76wg51_sb+I4le%aCO#j z7U(P>h(A0SA*BloLl7ea18A8t3wY%r=tg%Ih7`DtEVvzojF57Mg`t{}fk7VZk2biv zUN~zqT*oZ9*fP+XMzD^xaIqbX4B#8nSs3;+GBAK{TxVf8#>l_`ib@uSvy7k;5)^7z z;CgSv^*&;Rh0sg5*atZ4J3KW0!NpjaVE*M{f`z0o6U;|aa4~Z@%L~p5gtH>xtavyp z4bIAivx=D*80^9Rt%8ezatr9JC=d<8pp*-vLFW;H*dQ8o_7R8;!sZO19eSWsmmn-q zxg!o1<6!`uRs@m-nFBgpnVA8!2M=^yGBY>~A!0Icb)dXq1J(;VsSqLyN?Q{}IjHtQT!U&0L>(w^ zLS&uuOLJ24)Jqg{@)J`OASX@grR3x&fLl`vpotSJ1=SPBANmc-{V(gr;nS z$b1F{h5!_k4>B+?fDW8SsCmr5zyMmk4iaHvKt5C)RDm%wg6sh0tz$_uS0LQX4hl{N z1_rPi2IM2gK_`GRGlF~oV(CWBZb#@cg6aavKztep6=7gdU|?cEK3W`9?lLoKK{Y=V zUKR!lQwX;JstcqB6lV+!tDzzwc~o;iB?L1gEQ~)ZuPj2Cvk$5Zqy|+NCpea2x>Tka z<{@-_hUx;TLDdC{RAxrd0p=igyp-ZjMd;FiIFtdT22~g6OgCmm&@ts8T|R-1ix9dZ zp}Ih7P<4Ug1fgs8lbibxy4s<-Kx$BRf!b@#jG&zZAiKUYCVfKa+6vVLQUhV$hfpA; zXt4uoha=2k(g@;4nDYgy3#10Zl!HVz7IQ%DbY@17??94W(~nL-m}3al1yaMrpyK0a z2x^Z&(kcV!P*w&8hG1p}1_LHYzJS~I~D$gM)6J+Wls0bp}onwa7st7f|Kx^@# zhv7r4RbzqFs0cLyEDQ{wl!7p)8kDU;Rxp5Et>WVcO7>9qfLsVITfj%XgYq*oBPj1d zH9)Ce76yg_Tn7r^IMWv*3|=1s*+mR3eL?p=U@O4GaUU$}h#>{7NnrH>nwd~p_NI_Z z%ibgZadvR`_H=h~a`iw~jqD1@q2}!1 z<>KS+QgNQKchHvyX$TkDs5HmzM)_Y^gXpI>6H#o)b8s z$<0tD0Fw3M@u`K}!$zE1$o)VDB$!K_T8O#CxE3vU;PDtFa6$LeLj#vV-^kJ&d?gB$ zAasX{p^=fXG58V{&>bp8jG#MI;-VQD`k@6Qasv!h-hrAQPb@(!B#h+_6`83F3`?yT z7!IC?s5=2}+6XuyHxNKFph9&bs22(1KryyEKtSpi5~*$@k?IZ-sqP|?>K+oQ?jw=v z7?IE91%;mg=G`rza1kU@og$Iy42e|dNTj+zBGn}lsjiSnb&W)-n@FU(g+!{`NTj-h zM5?<;q`HShs{2T!I>wvO3<;%h#)hQCG&X7oTjzp>pBvM@>k?IPGRM$wPx`{-p zTS%n3jYO(DNTj-pM5=p8q`Hqps$;wbO?XfWXZj;jog$Iy42e|dNTj+zBGn}lsjiSn zb&W)-n@FU(g+!{`NTj-hM5?<;q`HShs{2T!I>y`3ga@T?ravOpDH5s9kVtioM5+rU zQe7gE>I#We*GQzgiA1VfNTj-rM5;STq`Hels(VPJx{pMvW4r@Rcu)#w`Xf@EB9ZD0 ziB#uEq`E*N)g=G|jYO)ONTj-jM5^0Jq`HGds=G*}x`#xn`$(iZ#=Fpj2c>YP zKO)sB5~!eq`HMfs@q7Ux`RZjyGW$E zheWFTNTfPO(0xSEvI#We*GQzgiA1VfNTj-r zM5;STq`Hels(VPJx{pMvV|)NgbqI_z{Sm27kw|rhM5=QnQe7aC>Jo`mS4gC~Mk3Ws zBvRc%BGqjqQr$r!)m+XKO)sB5~J0@dO>ObiUKyKq1{~%nxOk?)NQ632y6PlC9mpTEiBKoUz`$^V2z8*vxzC7D2l5B22H|i4spBO=9cX!}C=u$M z85kG>G1OtEs~`pjhABj-1G(=RhC0mn1uaH=M}#`ivThyFN@@b-3&`FmBGiG(p(JeT zz^84gfL8s2Z33;QD$`_SSOrxJTH@s(Am9XDSOr%HTG75wlab*Y0d=6GYPqx+8G^JR zag576kh(N2Muv3+)afuVFdWiiWOzq}IwoyK20d;3_JaKDq|L}sMufU9ZAOND1k{1T z<&rid1D6hAd*yT(8G?vVm!`wWFpGdXP`$iPhmqkP0d*k%e$ruNP}9ZlK2Scg(q&{Q zBcKjsUY9N-!#*O^UD9P_VAI2IFUUM8Jw^sUBGe`6F)~aepbiuttMnKd9ucALn;s*B zo<4r}fy{H#XJn`%pbiv%efo?HrwFJ6`S+eaBZH6uetSXbUd@1!A&7uFP&!C6U}Ts^ zKpn{5RR)X<_Xwy1`S+6nBZHP9VfWb?GBRWlPzQ2fogpK`Is)oI?mJ}2$ncE_bzDY_ z40h0!&bZ1KkUxTq7#X?-j>1_m#4Mut8D>OlEukvSv7B?9U|<;F8}Mg}1Z{Pu#} zr)I&(5Jf;8DE#s)7#WrkPzN$^mjxrkJ0jFESu!%1S>kse$X+i?MusK=>OlUTX35BK zh=4j!_+7JPWMH!*Y_F6RBSR1Ybs+zySurxqBA^ar?>Z|+hI<6mf&BZ)ijhGJv~!L? z{p3LWn@@IKpn{5eYT7YOm_Iq1I34!9V3Gu5$clc7#U^} zp>CZWBf~QS>OkT5%Z`yj%bu|N?CcpC$_S_fl~-N%j10#Jr~~=;mOUebkOO{uLGDv? zU}Oj*pbnI-vK$y0<`GZ_GH;UuBf}#C>Ok)M=D^6H2ii}HCx3wKb#i26C?lW_WL}pe zBf}vA>OkRl&5@Bo$ccz>abjc$BSKx46C=Yc0_s5iSm(sZ@Q8pqQ22dwVq{Qr#_v9m zf32Ju8H$Kd*XGQ~u#bQ`koztOk@K%Y~7_%oV@;K;h@*%E(YfKpn{5K37JDV+7QJ{Bg^bk%7;Ru)Rudj0`~p)Pekw z=ElgdhzNDt+!z@?5uuLFosq%G9l!fP_J+ALGE5>u-7~-^CWN0En-82tIhD$`Kd*;E&pyWx|zh<6{3`In!Yx87eI7EcHYo3e@LSBUJRr6wG zNFqXAnHM9&CL+`w^I~LR@+NGrm^ULs5E1Iqycro55ut9IHzUI*BGj?@Ffus#;CCOW zo(}V2WSB*Sx^+H`44(+71GNv>d>I+seDT{0QWxdR$S{k5I#4=Y=gY|OiU@W8d>I+6 z{P5cgGSAPCk)ewSb@Tif8Ez4w?wubagO)#jdqL%zoj)T(83A=5_jUO*G8`kI4itX3 z{23Xf0`S`lQl}Td$dE@soeu*8LsI}F!#N_D!1u-(%1>^TG=xB$aU`B>j z1k{0c(C!OnWDp9$ZyqQ<)It~;iU_DnU|?Wq3t?nAo+Fk>L~pb)bB7FN~2vEF8bRAaz>dj0{Nx z)PdR&W#NnrtB6pyFPxF#6A|jzA{ZI0A_%+BFM^Swjet5(xXg-RWVl8^9mpTAA{ZIu zBJtY`GS4WIks*(OI#7G9DUy+469IJ~^NvL_GB8Eqw-*#2Vo{6?egxEk{E-yJ$S{q7 zI#9Y=6~)N#3cET`G6v7Pfbz#bs2Z>UX#SQ#z)3+tLEpvI%`wy`#K+UgN~sidq*_j9 zk`htEkd3-}nCig-eT%r<1d92%3BReOy4-h6gJtfcB++1Z93! z1_mDnM$lni49-?Dp~b01#WBI)1L0gS4unHHdn5>Y_DDfue0gSGd`huieo_{L6@!f+ zg98J@1@M_L(sLQ%v@iVrAB`YQ1^hUf(*&!DWo`s zAvp)6JOFy(kQ>s4LkJ7QAorvMBi)k{<{XohnHN)GVHTg5n_^}X0OY8pzEJxsG#egsi5m$qM+*%AMWXAW}=|$;^*S(6zUEV2@MW%@$pg6bqR2c zclC30@^Os^%f^!JvCP<9$4xAQB)wj=`S(wgw2kOE5Ao+}GFD z)({~Z?ilPC;E5svvJ3;)z+ZGz|6ovLD$_)LDxN3S3%d+qZmXa zE9m-$DCkBN7@8^Qx(Dkj=%y7|r6m@ZDCkBdTR|^e2D8)hi-ME$3sMzy-SP>h2c&4L zFf)mPWe){iw-j>q!jJV)&~;By&<$}`&;=jEP?TDbUsPgMP?VorP@Tszj6_*s~EdWm95AVo6SJ8vNoS;!Fy5@h*-D&&-2g zBIXFYM2rghBN&Q{k{R^$V)XQ4K=}*TIhcCM3zUkaOffmz{&8 zEEyRZK&K8lFfufN7JE4|GBkkBC~{(CXs}{nU~pz+Xz*fSU~pw*XaF@H0~r|_QWzLO zXUa9?FfcH9GBPw2ffjo(GBi{{#hajfkUxVM85%(00Xk{Vi2*e{K#f~a{RLWt^b@p_ z2IL@Ecoaj!14~GNIu#J5D5L`;gE)gAIK&+pKp|0_m|KvO8U#AWOBfnNHsByi%_~bP zO#=rKD2zZSO2JG5xd{|TpfCY-4nX3mj0_DRcV;s(G=NS&%VA__09}ck$H>rN%fP@; z$;i;)#K6E%#K_P9@(YL$@^e1}=!`g2KUYG}4~Co?&*B-JIgEHgRP zFEKYY7<|DSIO;(MyMY{nh8-9gBp3t*L2WcH0g#6ib8_;N6H7Al^NJY+7z71Dt*t1q z3@8)8(?kW5IUx6d{L90@zyOL*kW>>RLj#E4%E-_F3eI*$h6YUr28Ir3n&@O?XaJpk z*Tu-t;K#tgFqx5|AsV!hhmoNHw5YO=k)a`*fq|i)k)ff0fq`KHBSQnozf+)TVF4)J zprr-S!Zy%JQlPUMbwO8wgB-%Z;F*_Ml9`y3S(WM%j0hUXycAI76PB7>l3zq1gg{9G z6he03m85%%t-pa_(0Lsog z85tTtXJzez=Aqq;3=JUv?1%arlrLP-{QZ{!azf#2P@X}g2Uqa*9#r=;$Y%@;Aip6U zeZ~NC1ITY6>*s(x23iEf$j|^fr|JYFLj!2B*-1u*2GALDrx_Uk0&$j|`FWltFy z8bD$5jFF)sjDdmS5;V@QFfufN%ATu?3=Q233=G#985;T+7#MCcGBiwJU|_h-$j|^f z&Fu~&L&ISP28Mf#3=N=tP!Aay8lE#SFg#*pXaI!?$XrlfYQ<8Xg7O|HK0u2O13`|5 zxE<+$7%C?jNbrHf57g0zSjWHsatA24AzdGC|T8I};>* zaWXM9sDn;kWnyRmouJCY#Lxg*q{qv|&;W9+4iiHI$R#37kaQ--#LxhW14$-^hAajK z25BaShKURe4Dw724QoJW3o}OzLP-0?e0G-sT%*4STd*$j$1 zP<{rb>oicLLEH*2o5P(m5{oD-mO-HpDs>dW;Rd-T3>;_-kbDX9Bg9%ze~y6x6mFms z+dv&+khl>OLj&kMJ2PmwnKMD^YYQewezanO)VH9pa6wBypmnq$|4B14Fib%B&l{9# z3Q~(oDuYu?;Kyh=C+6fNB_?MRNKK%&2Pl4G!Nn_hak~gKEkTk-GE%~T`VmzAgZu)* zAUA>h2&!j5Z3K{*Efb_%b!1{_0G);E3{3-W&^QP2lNlHoVwe~jG8h;bVwoWIizhS< z_%SgwfYM(86GOuW(3yHn3=N<&UO;@%>5w3OpregJ`apNxhA}ZTh%rLU1BDGp9F#^t zC->T-h2chM{S7)B*aDFU-7@o1AcajpUV&#`NorAAVsa{^;fCD20C^9J9T*uD7z71D zBNO3}z=K!)#n1|_m_dp`P!LpImw;6iIOil57rP~bs=Z1ENd`edQ1vvv)6j-1_$e%H(vLv-QD7B=tC@(byIsG9!7UWk@+#t7w8kr#FS_?GY zwJ|~3JkyvM8m2NZFw9_LXaL3UEGC8qP#A58rpIE?5!`5D`GlE)0ThHF+8V@wgp6ZK zihpTIL1_sjKt1!)^4*H^b0Hlc@bQ4)G(TD*424MyUhAT{vI_d!vLj!05_ai2T z23H0Kh9^u64WM&opE5z({;!!B8g?--FnopPD|Tjv2GAZVPG(5m&Be^n06O8Co0*}3 z19XlvGed(QBLjmZGebi?BLl->W`>3q(8d{NhK4Div#FUG8rCy1Feo!KG=R=eR%K>r zILgStpvKJ5aDtJ6L4%p00d!il4l_do=&WdcW`>6Aj0_CM%nS{87#SEGnHd`1F)}bX zGcz=NWMp7)VP~+09hB~v85({wGB9{DGc^2XWMBwjW@unxVqgeiW@wOO zVqgeoW@vC?Vql13W@vC_VqnN-W@zwWVqhp@W@rGN5gpCU(BKah4}yw^FflO1Gcz=R z&NBt6kAaHEF)=WtGczBu-&dktI$;7}= z!OYN5%f!G?4+zElD{FoUS)-y9S1Tix(Y-DC=h+$@6*u>1xkjc!zu#K6ap`4k4VJ9;~Lk%+n z!)|7Vh6ZK^hP})T4Xw-!4EvZF8hV)-7!EKqG|Xg%#P4io28Opx3=ON885rJy>SSgH zh9jW(0hOPO3=Do~Wq}G40|V&9SZ*c;2Gp{^GY?-;06mcsTq1z#Ay_&`q8%8)xfN8< z;>fL_auJdX;kgx*`!I4Vs3eA{L&>d*&|>^AX4Zr`4^&NpdU49apym=dLqi&qp#1p* zGG-2TGAJBC`4iN}eghT1z|7D93Y$xy^a^S_Geg?ocbOq=qWhrq%fP_!5EP%Fwlgy% zpFU+~Xeec1VE711XABGspP3s2pHnXqdpr zz!1p7&@hLQfgy;6p+zK0M!Vf>@XSJ`v(nrfodj5lEdh~fb0ULIpqF}94n-rS7c>q0G)fR#0nW7 zQelO(*Hu{|?Q{)RNLtilWoQ7oRgV?or&SD?c^uR?200Y83D6Bx;ea>{3}J~mnJI}S zso|MVJUZ7ql^SBO-o1i{0{zauZ8}OA9~)!>K7? zPm>zYGSC({Bq%aL1t?NTfC38CIE2XNgPU4N(x3qoP|pt33-V_~8bbpI6eyfPcVNI` z0OSu)IDz~RDoa4(uF$mO3r#!ztdMb$2x!`gWMyaoooGFm71DQ!Wrd72#<4=il|bU4 zc1IE`WPB-^m7xK&Q7nsU&ij|?EjDdln znw6meR8-fqGBkkBkZ)jRXaJ2L%wc6{0EIWmd{DfA${16$cmb6wpi|O8>v)eN(kN&g z3S1F6m8PYoLdKjx!x$j%qG1O{aB~mT2=+uuYhXdpsLLjBEs+9l?1L*NP!|Q-asv-o zLQ()Y!GcO+4wM!^r=Nqyh(Y3=^1el|#(Qh<%2!JmPFL68m7k5^!W^vjjm7#cu* zGBq}a2GCjjnrsXWp#6>MVYyYMU~)K1Gxay2*QYHP}dNY0w7w7 z!E+8UO`xa-<#|xbg@qL;oI&vn8bW}L7aFla#>TDLAoYO_8$$!gOj~Gtd$BPzgn}H) z#?X)l8tY_ZXaM;vo{gd5A_D_MIvb>IkO@jJj0_App!CAXz>vqr&=AeYz);Nw=^He$ zF*JZ~lWAdt^buOw7#c1xGB9+oF*JbUy%U-~K7Q|q^5ui zA?Tb4)DTSuK|#>IW;B(MB#){TlmtLo8l!9njYNQkr66X2ZZ3fsjwnDt2?08O11hj! z0RjqBP+9;5C+OxRkoY7v$oS1PHb}p678^qYXk+diHppDkJT^#qJ|9{JEM#M7h+<%1 zSj+|~&sVZBG=T1Hy3EGV02(vj!3Jrs?q*|Xn9RVyu#XKgzO$c=ps8#YLt`<@L_*M4SW zXsBUeVE75mSLYZ(x3r*^yGrbk`=z+q85q`q5^f~(69`2GaEZY z18BU_gdNf+HD!nNNzK?H?8bE6g zqu3c5Kx^%y*%=xV7#SF1*%=y=7#SE6*%=z@7#SGq*%=yUGctfC&l{F9GB7l=Gc+7x zWMF7vXJ|Oi$iUFX&d_j%k%6I|ouT0(BLhPhJ43@mMh1o+c1T~bpB>UioX8Fto0`JT z&>+Udz%ZMgp+O5YhQrR#pwGm>u#}yl!I_DHVL3ZwY-%MtLxV391H&42h6d1B)Mj>u z2GC7qTiF>J5}6nnwzEUVo({4zG@NH*U^v9i&;S}UI?B$_aGQyN;WRr#1Lzi(84iYqi_8oRj2sLNcbOR&m^m04 zUNJK;uy8Omyk}-$VB=tD_`=M20adjhMg=734u%G4HU@^N91IPhIi{H$ z3=O($3=Fe47#fV(7#QYqFf`b+F)+;MU}*4QV_;ao!O#%O#=x+UgP|dT4Psvs8w0}< z4u*z2HU@@e91IO5Yzz#`LE+8Dz_5ygp`o3Pfnf~?Lqjhc1H)PlhK5;e3=Hcy7#bF` zF)(c8U}#v&#=x+dgP~zF8w0}@4u*zZYzz$BIT#v_u`w|0 zT@NjKa}q0^ON)y0i@;N+h}yioD6=FLNd{DlL(AgQqN3Eil90^YRA?~_E{8!q0hkLx z{sNW5ps|Q6P{HdQkhax*4oDyR0S9DW{t*X5188&ZGY-g_l;<3fvHRB?ka^NC91IPh zIkT@EkU6uT91IN|pvB-Eka^R89FY0={~Qbr+dy`4LdN)+I2js1mz=P1Li%a!oRIc9 z7bm3r<>6##0L@49aWa6%0Hrx0WB)Ro3=RJo7#QR@A!C8^oD2;tpfP_=NdFCVOQb$p zTMSelfW`%GFf%Z)f=*Ncxr2cL6hy%}na~JC?ubC-!6bMY6f0`S&4@t|Y3c{umoo%+ z=0Ft&N+S(aJ%ge~0UXUa1)h0MrD;asNCv5eL~=^Ge`!f@W>u;YeD)ir-oLa2tN~;W zXfPQj4mQUSYz`=~fI3Xjo;f5Hfz*RWDl7y+!@?z*xvAhGDNqj|(JV+Q_soM>3rdYY z;JrS$dkn$u0VO(^y%6_6#6c}4mV1Dt_@0Tf@L^a;u!KG3-&6;8-lk18i5ed=*S#tHQ~85(>+x2VA69YppD14b17$$KtG#D~5 zFwEd&XaLFs$N)v=>%`@+}hs!+KCYW@cd6zzLaK z+QiAwpvKI=u$_~kK?gKP#L3W*0h$})WN0X4W?(o3at~1<>3fsNW8nOJGKn3sI>>`Hp3YnK_9` zIjQL7JSaE7(kT)RE$2aLAEf{QP0)gJC@cddfwDiS7lOzSDdolBybsERpgfC_nL%cN zvI3GBkemi85g>UAVum5Kzz6l)K#g;l`#}B#CziQnLal=rtdA#3vPL-W%E zPKE~1?ST(DA?5v7PRMx6Q%;5k(EY~GI3eZxOHN38`xPfc!(s*ohBurH4ci$Q7~Vt6 z^$*bW{s|PXj0_B4I3aU3AoD7!c7%e_P>l#7v(aFHTz##&1B^ZOs=^}WK2QhJGc_WGV7N>)YYEW-m8LTL!9JDeQysi7$Qc{;02dg z$m4ti9~VOdXf2Ka z7efQ+-Y-Eeh6Yat1_m82$e4yM7o@&5;DYprjJY6V(sEo34b`CaNnDVAks23611S7J z@}O{Dk7Yd)XpRBoRS@PygmZXeW(g?CgTvb~z!|>g3#1MUc3@->0`;6hH-JLxH^-uM zNbeb`G65UslV2W|m{Xbxo=pLbOu>Q~EbEb(o&k{t*9f5Wi`)Z*gIy!4O^a1{kx+XhM#AhXdhxCtOA z2+GEgZgv64o1jb#5`wh4Qc6=nK7phVko!R;0n8kbJ3#J79yjsif~->ufToK;Xu62u zf~;*#;)0A(rEo#UsM5J0V^Kw13=JUvltTRtnx`;C^Y?GidN&3JhIb4M3`anj9^w$^ zocvfhAFTyT>WcP;`Ah=2kE;@x71uOQ>{ppj#UaSRL~dqDmIt?vfS--5*JxFGAu znz$hIdaYcLc4QkDq#fA>P2YW7ko7$ixELBhW$HvONIgA?3o^$%6&eoHq3L`E7efQ+ zruEs-^gWl0p#hZd=5aAJfX0gFb3w|XMO+LGpftaP3o=%>l#8JO6#gr?AnnXmTnr88 z7#J8c0uP#OUR3>t=37$C2sR2ZOfAViC?z$F-D6nIPr)OZ6ahvgiQpigQZG;%;` z4zw;7W(~-Vptu38=>v@dgT(hk-I{v3kTxV-g80vM4z}IZO|`Vka@)K z&@}u58jioA;rItyW;1X@@;Do}X05@dpN|+n6oWrJAVKQiaBgj3Vu`F(eh6A9nEN;k{RSGv`T~#_aL&IB88*Qu=0NL9Qax()1!!&M4oG;*p%sVdP zhV*|Ib3^(QXSpG3N7r&g%B^*vuw!6gSPu$21_p*r+zbuV7#J9~ax*l5%9!okki4{$ z8&YoV=7#i-_i!^boMK>LIKa)&aG8OD;V?Ht1L$1)W89E6GN-s9{fjfuFay~O3L9+o z0x181`~oVwkiyO}DIX;df|Ovv4vY+-90$r>up9@jts(USDBr*|f$RZ=A85D^)b9p~ zU*d+;*H=Mt4_dbmbuXw7hCWvgS{DM+11h_a-04{iiQ(Xq{DK1L3I>oeESPw=g6u+f z>m8_D?{h=yvIkJNg4)|AXz3BOjsxTXP};!aR>$O$%reLb5l9sljKis*G>IIhAbZf= z`4sBT7tpl%66#LSng#T>HK+{*vz;5%P=#>ZVe?Vo)(fa@4H3s6aX1s)7ADkIdkb~v zC#d_fu#B~V+D0HtLDK@*+~-_S3cB1FTuFe`VZpeZ2zDcKSc2?A56kaRH~!*=?8*8K zbt`CZ33?d>O4lI!LG4jKL|6u;CZ<4AD2c8Fb?`vVG)T5ef~*7q2_hQGkm(|%x*pj- zAormAhn)wK-voIW8bIz8;(?T@pf(eF-3-zX^ABX78;Hjc4jN;m$V1D(Q&t2$gr3$x z?m_pDB-B63Q2(ev{R8SpqtCs9^n-i=^0zP|e&A^x6jAUFK8bM!D)NYNuO`&JhEVq! zLET#j8f!u;LkPJS91)Z_7&^aBD9xBd-E0qavjf!42N@U`EEoh3AqiS%!@|HI4W*}n z5-%vg5qm5_>zW|@>%id)TIB*!fI?zz)`2=!pwa3n;KT!300CNJ2wKqq>U)6Nvi^)v zQO~@T)C%x&2v9PJMp^&`+DnAk?Es22Xc&AzYV!%QK=#3a4z+&*6)yv=9c5r(sAXYj zPzCLCWr6G;Y5}bkWnf@vWr56Nx3e%bfKJsGW`*=yL|7sFg~V7H!24DuSRrj^Nmj@> zcsC1V4M7hJLj!22c_IsBK5`NZWZYyb3q!+B&^`wiNZW2E3q!*Z1_p*%pf#Zk3=Feb zApMlNEDQ~g7#J9qurM@$?uu9nUGutv1=4m~$->Y8I_q@}3qu3w46$`AkaaE_SQr|z z7#SG0u`o1LGBPmiVPR-!XJla5&%)5q&&a@Vh=rkH9wP(8DUdrD85mBpFf<%wWMDYQ z0-1Nb%)-!cn~{Ox3dkLd3=G#<7#cufc8i6f0TiZpL2Gmw85r)dK;|9qvq09wKVV^K zkYHk9c+A4kV8Fz{@PdV*A%Ka2;Ux=018B?_B%aB{!0?uZp`n3^f#DNqtt=A*!)H)9 zLB+Q-F);jKVQ4ta#K7>Ag`wdz69dB^7KVmfObiTvLE*u~z`)4L(D0Utfq|11vR0gr zm7#%)g@Hi;x^8qaGXsMV1G}J?00V;qL$G7KZ)!mcfPb7md1G``f*sw6ip!nbr z#}H3vxDCuu)!+jXJVPSmLxX(ak}OckAb|2bq$IHg{G%paEPOikE@HTUr10SgEj+?pf6~67F>uGB!Uh# zarO!Jbcsh=UmQ@BSq551ZGc6wOK?Dte?YKn2&xvyek2A}EIK?rUE)1aHqwCu)DF}g zW$*(>x?h;1kEaVf;JeLm<^m5MjrVkRVT|&=6N}W&lYrLnK06BSOHb5hTU} z5p#BN3~>Y<=m8IGkR&Ta($y~nl!${|-CToQ{hVDHK%okfXG4~UJBtG%>g?|ec9s|e zyC6t0Cqx*YvKc^q7tq;cpnM5Zz=f(HJ|q&FxIvQKXp(M0j_zRNRTy}YVhS9HLHRj} zc`0GR&aS!OMR_TP48*81VvuEE7fcgjU|?p5@bv)&E654)a2IPa@CZ7BqXU#GQc}|r zOLIzs!3%Cdt7?N&6N{2F{EJdji{cqTzBU1?b@mL1ckvANj&}?7@nMi+U>5|5Gcth0 z9i5$BgF#26_<6dzFo5zpNRA0C=jR&k8WbPq8Wim5?-%bH;Taqf3|GPoR^spDf~f=? zuAp_)FsoR=YC(tn#5?=@x%qfHhcFmIoxuv03keDh4gp!^>E;Q^Z}HClz5)Jzu6`l$ zzMjFso__8O+E6WQU@fi@uJOUHK5p?ruI`?}A+AB-Y#JZp>Feqr8o~f7R6t%~2P+Qs z3wCsKjSumUcXaX(3Sp3d8pQ#Y^>cM~i4Ssh^7jv60Hq1gUU5)NM2RpkFflm$BLczK z(F?>gVgRcH&2NDG;ViV0QK~8jy4`8gTXKhS%pj_bQ;~yR$(WFz_+33r2u_9TpPr zX~ZDOz%CdAF1~m2xnIg~U4rhXjE$B}g+TNW{f6IKVN) z*#n&SL82-k(I8i6{~#A|+60L)H83=Ug~SKBg3E6gaG4MSPP0(!f?VCT@a)|09k>XkE44$ zNCPNY_&a&II)^YQGq4Lffc*=S09C4?!SQaMelDJV?m@1>{-Ht6uHc#gq=*S>nqx?4 zFeqXBxjKh{(kZAq1j#ca%LlnaA`qlN6>19$vH~YpcTYbT|8PGae@7QkGJrdV4OyA1 zp9_j2P^JJ`#*VBA#VmM63TDuNTFim07+Udo`ne;i1O;{+I3a{Y1_!u0$AhX}P+5@P3J^59m%~&#)AqckRdEELjr>Q-9264UgknJA{3PSogJM$ zTwR>~10orep!RShD++dnMp9s?YcQmC0a?Hbx4_Za+tD53P+0i$A{zknpktV$rw{1F zDR4do1uY-4GO#;fUPh=@gSv?ySuHpkf+PK${R2RGAJmFafvSV0L~z=1^>aa01xtp4 z7^Z~=z>^24um(9#7+I04p9_)_m^mWIN&bmIZm; z)6X4btB0eXi;rs%gAUYrQpoC@{ry5*{X#%Rkbkfzs6pWv65{CW0WJqXcFLfr2DPf3 z9sR)hz%RtpF~pStmO^Ba6?%sHdHeZ?`ypZ-)FuR(Cx@&IlFvcq2e@DY$;%_l2RVj= zd;rc&u%xVjtRNuBKO)k_H3V9mfZB>6LllwKfa>i4P)Y3W8Vt8a30VcC=!*{qHSR(C zCqZZRFff2C6p(4ksA_!!9Gyer1N?nFog?FeT%BD#!(3h9!JvYw7*wXl2Zsg(1i1zW zySjku9njf2pkfwewi-6&A&w!g@epT&8ZV%F7FmxvPCY@c;G!Ao2V^}OIQ0Ys`TGWd zmyLt$F<@X|(1RuvJ!CxrptemgD6K$i3WV1|`at`&V4-h-tPflWfKpkIzYpAGLlhMl zNf1_MK>Yz)R|YFEjgWPM(}rtANPv%{r=PE9urIh4h2;lhWTgS2PClN&9!YdRKiLkQ)HFF!9Jl8@qUhBPCow5-mWh2{AGrs3f$X*R|yC+VY$&9 zMYW%&o13dkJfswGL8u0&8_+p9stmk>LEvg1lrjnuL7OOxUBIU#xaO41nmnO6qdo(Wxb z?hIN$4z9)^D!w9AfEK}na}z}72Uw=KG%YPNIWsk{#5XlJzX)_@1-l?b!Ot57iI4_W zNPfOkW;(b51CjcLEESxan3Dr(GlGU$LA7760B9VbAQ7oI2M!O=Y?2&ij{@b;3{cu! zAkM%b$iOaW1a7T3JI6b_xH|iQ!w4kA#Ng~4?;GqK;27-e=mQQTxG+=<)L{jQF@u#l z!jyu>6+pr)AmQK;7iUKwA8>;WB*+R9bPI5E3=RQ{!xXcD#DgP2cKLwYfgr`~AVJ@N za8#FZKt-Xh0JXC%z>(_g;ppe?>h0<067T5Z;_K?`~O4w7X?lZADuz?}wgw1HHyAggkB^>Yn!^Z_^bK$5J;lAe&B zFsQBol@K6#He`8-Yuy|@eOz4_1Q<93y+jxoJRnt!Gibzw1DxUmaHVx21`feWWG(UW z3_J`Rf}jccP#=FkcLq5I4namC28Q^MfOt?`I5|3d$GiH4c?S9W#fKR(a4~RzyQQ9< zE)4t(9D<-V#UPC!%pl3YAy^^8z)+Hy?pOdhwJkG0FQl>{l|hPuL$FMQfg!-t#W&a! zJg^iR93STB6Y7d$PJBQ}5Q7*4hoGDQXebuc&v4GqD@!dZNiAYfXW$Uj76yrjXXZhq za^b_Y;KSX5Qj1G-N{Cm;%fKNBnzQf;2=n)JVGw5E5R?%FSpbKZyb1_U!mFmMP)2rw{!4w}nJ&CE;7k1sAMDork70NDassTJ%Q=Xb@=Z13s7%%m7LoC6LGiH6lPc1}s(t5p!`3b_R=q zf}=o$fx$C0FFP;4JTI&yDTe`M6Tc8BI6}igoiexO@VfL3V=@H0US_ zp8yaKWNjT%l)?fTno>Y%xK9Y-8*pMo5fFvukAOtTkO*|sD##I_BP(2jox!mW3Kng6 zoPic#rWSz>1Fho=NDR%)D=`MGj^+>qZ88Pt&~U_tVi5)oa96SDLw+Az;^}*K8O$6Sm_hs5)SGYgA50SS3n|U zm<}@MAkM%cC?E{hEcVK}863L^mMOttdaQ1X`egy-ln-P-O#30i~IFB?To#&@=!#RyE!~7&@5e z>F4I}2(FeuedLnFbVyeooL&_f7#N_Z4ui`-&_GfEco+%f8i;>E!$-dPDXCy18o|*C z?Hhq>mQ|o^iZYN44j@p<_zLnVa=`+x5<&SJluhGd`4m(ZXA3hhc!c}8#K(gZJ7_4X zBrzR2{=)#u81F!KA;mY?CQx<+t(A=TaSUptf zd88EimFA`vWhT3%re)@Vx5sh_t^;Q(_y|8z*$XPNKwFXm!1)(cOoI;0@d-dm&9Kop zkRw3BjwRG3z~;j|3Q`D4_W_BZ5Oyrcgk*bARt61{g*gU+Mi0T&e>14?aE|wM0T=jT zkaF8C)DKeNgLH_4@{BX2YzOfn218oKpo#-Df(Dv(0S)E_xwnY@1jnG8ACe~^ z!K_eHgum(mrI7xuo>fmzG1xqU(REB}V9yRDeMHQ&+5)uF!UG2@Y>gfLtDs2=P3m3IE{Y= z!6brw0xo$VkqKSLpI-!a7|2M7iJ-=a5hP$xl93}gS0;n{XQbvzkRw5}L*R}YsE~{o zV!$%{18Vw%6B6h!MU)B%oCiQ{`~XNb0Ln1-;4}zoVL%tR`KBfomlmZKffa+2JIFdS z6L9$s+Q|n?Gq4N;TC)evp`bnyUIm~qS7ZYP=r4UF~44#A_xetD#Dma1Rju21)<85?-49A^5LE(+9;{x(HQK1JquM?W> zL75W71+~dQ9cNHW1$2@Uh!4s3pjri-J3*Z%U*90t;833saPRy8C=QVtX4nNmAq^>_ z!ZY&_-7IKz4?aKw6osHxjZXlySpzDNK}#dz!F?)FgoAcA`vibeFgQn4fUHJNJ~%`{ z?IF-;T|gqZedG*k(SrIkpfiMAf{{E3Ds3>Da$rLpAVo2xD+rp*0he!}^#Ub{=`Q}h ze)%b>pac(2?x4ZTlEie_$R$`DG!j#Swf+D%rEy4sk^t`X1qu?-kstwypj-=Xq}M^q zC`cOuG&Tfk7<&4JfIB`vKuI+uAU@dBH^2w9F3HCSG@JzXA!ul;BrzQ_pat&LYcOyK zeuV091`St)2E@Au`Gfd)Yk7K56j zPT2hjy*z=i3Q%DHYEP78=B6em78HZr2QJ56fYU2%kR~l3yWkfF28IV*pmBZ%1_8!6 z?WY{)o}J!*A#UYmn{P{^85lr!4hS$xUH9YGQn~g|%K!M&68l^23=E+22n84?zdhkn za4OGYqPm=3<=SIE7#Kk3CkQZ_?>n)|(5NZ$T$s5$1J5EU1_sc1qymgz#jebq{K$dn z{&^{rh1jjkyooH<&z85m|Ug4~lWyybn;*cK%inAgV_+x* zi)ZYRx*4)a*lrW;*b zCh9WZ+au)t;xhQGV+H}nO38x2b>eX=`6stk%)720%)rpa46@fJt#0znx+8)!_w0Q> zd(ty628Q!sac{+WUFt^cftR*rPTIem{}lMFRt5n^{=4m&^KxJGFl^&~@vJZ`iGd*& zv^JBGiGRW^-t#IBclFJc?N0~K1Fvgk5MW#to}{?KzK+kY_dGkx^{;Qh>q8j?7}qcT z6ST&r>&DVm{Q@csCzKf&j95YLiSEDQtb4`i--A1?Z&sPz<7Z$f2aE6A_rFE1yyfSV z+-WmpR$W=iz;GQbUg@bZt9OB6^P=@bFj%mI%x}7KBKz(#F`=Le)n9G8Pox+a>cHX;Yg^8UaE5(- zxtCvXRew+?1H)mkIO~SZ0h62!-%VS3?H%keX#g0 z)h!ZoqxdaRXj1{>i?zyuJ zGM>!;7m-w_6eO@Df0dN69TZ?-(BuV~Kc_h=LF%1Z zv`1%d!*-2%>lqlb!Qz`T^B66x3Rf!~Sk1upTVFV#Ul^j5YjQ&Uc#WTQs=O zU|{$L7Jt1~^=N-ed#vq(wL6|(;$F?bV9f_Izrt8vq4`Hmn)T%$rC-n1*f21F4&4=C z%wDs!YG;%AG|30&_I|v4emw)jQLy^jIgZv_3+A$KUu*or=kbfL3=G`-Aaf)))VJ>2 z@9gXA67eRbcY7oQLm*gOrE=>>efdLf5@}U0?)7M8GB8X9i~oIoC2Jeon=570V`KT{ z9zJDYxC0jdxUV|@U%Ri^^IQ&r_5Y+?7#M^EK<4*Iq+ggGBrjnm#5y}L;dmqiLpWG` z#i<9OJbPqiU+xR~yL`*qGzNwVVDWROe~NxK%}Dw#mHYX_ zeOYkFT7%{z#~Bzv`*Q>sMRutt&D-=dZ$oV7m3=K=Ll_v`1VQ%hHa)aGUEssCot6u? zvh)aiU|^^Pi~Bv7Ze7Bh?dc?SHgs{Po(TiPA+Wd#>%;r%!bZwFLwN5gM_O|*Ft7-L z%-P{3@}r9*r0e?C(iXMPPPZ8tJi+3dmWUqy=*r*lwd#kF(C6c;7#RA&;tndC>@{yL zJa#|)XLcgfD@_K5Yhdy95tHXW{#W(KW!;pQk+1r+85pF6LFS7|HZM%={U}!GsGAe9)iUW z|LQRH3%J_YC$@3fiFlcV3=C2tAoIW3u2E=P&b{fxJITZCFDLzGU;vF{3NYT*n6s^I zeS6TnghhL#lS~^J80Lf3yEv@g%s%z0*jh0`?L}EDwlXlh1dFHrVqpJafBFBt7xz~! z$(qE(z@R4zGQZ-Bz1T6n)&1dvL4cX@O7BeuogT-xF=T`qH&nw#aRbF;+!Oisy3_W1+ z<|~!kxrKCpK2ccsD8p+~83V&5u=p9Kh<|d-MIreQ82_)TFFDD;ASD4Z-%W5SE05aI z*P8ZA3MM^%uE@ZU2o~?S#woP@-RucEXP+KAJ+Z=xfnf<)e7ABq=kpL#9bdi~Q(el= zK4V~b4Hlp4Y9QLY;G*MnE6c056oNAu7}O;}<`;%ZE!|xV!pTXk6na{SA*~g!j zHmJz=F-^{76ktlyK(mZRaFLt7O*(W?l+Z>I2me>>@eXfGcUZx zz;GEXE*E+6tBO(T%)%O3Q=J=X&I}B)(jaqgX?n#fPdhC#u~B{Exo3|57#Q-v;#Hr5 zr`X@(m{POdBynxI(kcdqjbQODJJ{wuH)WMkeD{fA!mkt23=E7iAah(UDfE=fE;1EA z`t_%^S!ojkgF9H<_)eb2sy(OMv%GRx<}wK$WMG&G7N1*Mdgfsv@9UHG-_L5CTRxeA z;UZYvt|xAxV_es7!D1F)ow=p^7#JjFLFT`?_^2u|o%?@;)%#t$lPc~oFvNhxk5yl4 zIL~!sS?lsk=2jLzBN-T0fyG}hSoiDTnhn7+b3gFzkv$~I!0-+%UUyY%MdRJI;i9h@ zeye6~xXr*|CI>Qq({90gS3dk)-qrWf!2a~?NCt)mu=q?N=4;b>kFEXlCWoH|Rr zhNEC{%g;xjEk2=aUAl+c;H`DtCI$v>d5}3LZWX-yeB^nY$D@y%4o>${W?%rFpBe;O zG@Wb}QvkjCG!5zM(_HvntHmkV#WCeb*CZywu1N%m=H(RYWiU`;NI`K%L1J>Y35CWK z6(obsm@I-A13KxlIHnkU4{Zv@J+z<;86g+1#uOyRgEosL7Gy#+QW6#gsYPiNno?Ad zoLF3$mrS8CnR%HdpeyHyF(w5(s9&K_oRY1ekyV9{5l;%8e;Yg{C*MlTBG_QBiRbrSV;!nU|cOM~r{U zGK)(Sa}k7c;dRKAUP#DwSYoXvP*JHDhpDHDqZkRxeTNQ)q!~ zL16?Yr=%89nmbZbQi*W|{=h0OFDS~)D@oJK%*z4QRD|mWXpIm9xn~_zM}W5Sr4+}f zROaPm=4BJ(COkREJ;Z$N~hd4RH;CTF2?XgQ&DPSF>%!m9z#G4u#_B1gQcJ- zzktYWfIs;bm!xFoQy53ZsYPW4MfqhE8k3t`0WpDaNd*eT{5((z1vwHPqL1v>2&jQo zke^R!sgj#p48Bbq;u^xf$Om^YK)wK#v*jtd*~RgtC7G0WEsBaWh^n&jB-8vvc=96E zBgy%ob~xmi3rJ9q9Wf#mE-@zHPnX3dMVWcfl9rU@m6DoNnhx&sK-@rzUb6E-GHfFer3pJTH#I&vH$R2A zu0NsCD@Yd(5)Nc13DAHM#RCY%8L2rrM2<7!PZw!9`H4hT6ZmWK;^ai)hSKo6Cb_7j zyollw0I5jCpIqVPe_}kSv6w<>as#zQQlR4$B-sqQu`msMX(olKtF$O5m*Uf{PN7a^b|^)%PA?Txs=98aY1S_q*|gh-xVk3#21$q5S3!_lw(K^BHB2@bw+Z2 z9;I^?C=M$r%1oxT#Lmx2rL<{-?55H@%7>Hkld^~%A;S}eDMguOsYPJ7K{7kxT#9Re zRxcSez>B}0$6x#vm!#xmCPCbR-yD2C%1Ngc0-Ynz z06LSCn?Zn^0nFlJsDZM$85*E0E`~qc3=GC#^B8y_EG~vQP!>1C0w{}%A%>TM!3?Y} z0m|ZHxB_KyGu(i(xEO5s7#J+U>KvdfE`}XY7B|BlC<}5yh7DL<3qJz`h{eSKT5Akq zaWg~+z{Ji7FfcfR)m?zHxEMeO5u|{{6a*ObwLIO(4B_d4BAi@7XxV9Ofp!V zjUWR9h{eU=DagQ(1Qzp!vbY$c1Q{4W_aJgJ#6ekH4B3JV3<+R$`A`-YgN6{yEjmyZ z7sCw^1_sa_O56;0pe!zi6QVG&Gf);6!wYc+h8nPWZ=ftL1{(>Om;;o>#jr<$fuRMg z?f{g<#SkC~6AOW|xEM}IGBAMdYT{-%17&eBR7kCUz+z{hEG`Bg z6_~mJD2t0hM3aHxCRm*Wl*Pqx1MlT8TnsWMFfj!vi;F?Wlz{$ z%}ar@xEQ9IF))aN#b!cTTnsOuvfK=Bpe!zi6&4H(DqwYMpe!ziFHjaY!w)Eni{XhS z0|V%OFm8qyP!<=1i4{!D0?OiI=&@p8&;^?}0m|ZHcmQQ_GdzK^xEL&~85s1y>TIAa zE`|;$i<_Yb%Hm>pV9mgw4_5aC%Hm=$uz`u0Kv`ViOUn(w>RN0V7(gs8hAU7OH^U7m zi;DrY1`%{0DmR0HEdv9H#l^4$%Hn2N0cCM9{IO+VFb12)Ua-vbY#-Kv~=jcc3gT1_K8M1~afa6DW&| zA;$r-Pk@`D0LtQGxC52tW_SQ)aWTlaGBAM7h~{QcfU>w4JY5+WK7#8|Unq-4NkO*dAZ~%+RKv`T29KtON9ZgsJ?`ixl8up3X>sEbS&;A$Fyk@m7dt}v<9HZnU zZ87EB2ghlx|D!i0+}E>nT>Ou`{mPcjimQoOMgS&vNsf)5d1UjoeX!(-&8y%wDug+_`&- z_o{!U-+Whne5W*b>V$>Yc6zR#yyr#hTH|O@fnp{BS2fp}&z>%<+bi{|DemoB&YhBO zGd;gvmtDhs`qAIt9}`xlI?nG1NUIb)H|^M?fBlTQ``p&0wi!<$Dz@aPL<+)H^xK1W2^2j26=?f>Xjad&Io@bWk@f~~IFlF}*uiX!L z4X3_8mi*8t%W{_ICWnbCE3^I;l%=nj-=n;i>#bw+m+AXdbovz@7@ci2uK4WIZeGy% zxmUj6_Q7wOx7v<+%)k99V2P_;p3pngz>5E9O3_tMlyW2#jL= zpq!$ayJpI{;$@Bv^OKWzDQ>A#Em*WY^XVbCr7YUhPF+%6*zk4vjPH!AJm&DbnCfUg zJ>a?UzUswTGxx2lUo5VUZfuuS{j-|GOv`7=D{*PQt8S~i3a$4xu+8=D+Vt?!mNgBz zU#D(dqS|!By+LTMquKPfN1bxh{rA2Lby;z5UL*@&vHRlp9%Xax+WBow3;3yNk<_rJ zzOL1qnZCI$euYZVC@_CN!Iy}?Y=i(Z{!lwn!C-}eY?bd5yz`fCI_dn zEzjv);V_YJ;aBgL<4@C#SH!sH&39c??Vc^mc+zZ5=F90hyd1uhYOe3Cy53s-T;TuA zjmqpkD=)?vv0ZoE(#vA?Tz$Wg|8&D{g|Zi&^7;$vl27jzb?DPsczox9t!~$Eq|N&7 z|I=^lq9~)BMN2a0*X)jcX>rM6x~G2^-~1H*)4C-$vg~ZUH~%wtQ$Bm1ZPu>lMuC^N zJlZow*5w`)=L)=eZ%?%ZtM8sO-=9h*9Ez~mCF9g5)#$ON^RZPo%bO>QY8J4sUwhqQ zLwT^(+PBibj(oUOzy050-$wDrzuz87Z4y>_WUaZS**>=9ye&E=7Y-=p1<}{zbS6Hl%%P9M=mbqwL zA$er?@}y50ir+FFb}scO5u5$UM#SRI?w1nDE?uD)ryJF{9^kuwitTMmmrJMmx$2*M zn`2#8FA&oBx6*&}UhkAIo(anW8E>sSTvq&aYCBo|b=B3q9)OLGzJTfr}p0wzw z%Yi+vtv4Pyx3RwCJN7a=a>HcJ9FKl^k3Gj2?y5VjVmq~{EcU<)eTRj{iV>c=5o--) zB95%?obKAEJ!j5p7ryL>>yx}yq5?gZ6g0+Gta~Wg?4eYBW^<))j9`SNw~i|YD!GtMm$^lNE1pYlXF_E#m_zT@H=nZ9$G0%rx+T{z|_%~a@l zT+w%5$pU`k*a&Sy1-4fvd>{R1=e`z*GoHTcYmj7Dm-M zPt>~2-BZzSB+h&B{_CrEUE8Z>ncTe?)AZQ2x_|OvE|2z}Z&imc6f{+58b{B4Vd1;V zZC>r~noB=FrgJ>k|K;buZlP}%_abWr8>X2;8hg0>8{b^kjOuNSoz!=5mdz@4zs>B7 z>&y)bHE$f^>#c9tiUX!rEjkmY;*i4z6ukN(A{pI3+Z#XWl5(->CHOe)2A|TeZkH=?d7{vYFoJZJz99A*_{vY$BQnzJZ0vJqh9N@pWOIn zVpe}UyONJr;F|lQtKTo(S}GqXwSATU(@ARXTMd<5Bhz&yBWKygUVX{ny=?D)lmCIK z9=`l`yTo@)aaeTmYI5bX1)m)o)-I3Qvd*V{@w?MoGFCpkVHgu=^4(T!!C%1zJriGi zboiuvK1Az=$3~HRq7wgE^$aIvNX;ys<<~!RyZp?#n|}%WN(HQU(sY@BafM=!TAu>j zPoa0^m%JUe-Fo^+Ah}r+_Nq;0&#aow!LVZts=T3X(?yzyG%Cl4RQ*TGF^xgRX zl$Lm}+k+Esze74d__%HS8+mb?j&*?B%`5INlFkcG-s1u~XPLqN45Q`NmL>kXOjk7) z?N~6ofn9OK+0F}s>p2(}oK!t4CcI|PlbQ7#p0oN&9`9G#_K?S5$-l@-cgIax%H=zs zuasqA_;4?G&Rh3YAAN82YsWA%qVbu~_{?bh=@~1+u5g_b++f9^u%3H)LG!O!>W!Y~ z1eYp;_)imB(fBQB{5CXxBbxi0(D==0e1kRb4Pyc?2(Dbku!j81ra60;L-fX z!=pDuMFDD+;||c7I1m^9KhgX{u3R4McCZuE`11~Y=6`nJ6MrPc;^reBhru!)AQpw^eNAnv6kM3JO-3L8dFO>v%G@tzM(OIHm;L%y5V&T#K%lN>jbspa@c3<@9E&T7< zeF9=$_YaTO10_N}y>5&i-IqP!!pA+jL3+DEdYg|ZL?7M-xthTI9$;~( z{T`h$DjeZpH*^Ymbl*JgD8K=_vi$!p2Sx@4kIqUCeB5f(Cx_M(S6ggSA@a%n`1AFK&PXCNAe-# zlODYy4IT#{u|SOX0Q;y^bO+cPkoh2=SU}8o={{#!%u`qIdHm3e|NsB{^g2lRXkXx$ zcVO`7c9!t&6=Cw|=3(;e^mqZ{dsvn*NtCjBb{f1k_DnwL(aY1|(d%-a!?P2t+@srv zNurz4vD4v0w}RqB^>`B^lUz$;n5w!rQq2a@W92| zo2O?bRR=_!2xkk2`}7`(@yFz1V#S z2Ng3an=xd=7^6!;)(nr%)nlu90V z<^aVn7I$@*s91O$cR2ydUJU=8dH#C~fZe_Wlzu_MftcR)GDqx)9c zr}ZA+FZPOXBC^Z{5ADnR+qpfO4>P58`bhmtYdu-|9&8CQ=65@?cy#~r>Au){ptQ!N z+snlGwrlH2{=N?k3=BTqP7a>U2PD!acy=>@GNyt@cOZv{wLmGKM|Yrrhjjo)DU0!e z*R0Y9ns5AXJy0V3|1cWV$OgA_cP4@vOLyD%_#bTfhN_vv=z@Udnn<@4!w6!5Wj zz_j0^`H%+b_A7wWh61{i5%B>|?*Sg&H+_0tR4P1r!9_W=?EEhZDq30(@V7QHfL!XM zQsL9t_5PAOK=kctDuVM*^aeiY~Ax z974mw9YY*L9m5>MJsRI!07Y(cpoB-aqlRbq3$JdQ3&!7kyFdDLKl15*>9`-1IAP9j zeOt=r(ODkxy0qJs!K2sTqm!}Qm8H{>rQ4OG(~+awmB*vgKcdr-$Fq9^$YCDVp$w&h zp4}5bq2gg3%2CSFeGHyN_*+23nM5iDjR<@6PEk<+-GB?qTxUHx=cq_9GBErX1%*xb zjn)JFElWW6{Bbca)kb2go`!HOj^(}u3=<+lEZN7Z`+d_F=__w+8 z@NaYFcj4a_%I(6xEtZRaTP!F4wptGU?WJrk{M&t5I$cx}I(<|kIzv>h##colPAB{fi!;o6J@;r4|y~n`af&as`jhas#j=NJInHECO*X;DHPZTmjeC|0SY6o#`ANt#3;? z9J^g596MbV9RIsYctBIeYksKhut+vO;L&&lls_Hg9pfBh9b@9-Vh@8e7T9%o2yjM+ z5};B}Kd>bnJEj<#@+#2T+!G>~`SkbmRdg)&y7M1D@Sy|BHeyrfoe? zA`bP9OZNef?yKN1dRYxlYd$Io#s@%JKt-(zn9u-~WuSZvF1XMVJxsf6_p_Ivo3y{V zsHiBEaDcd=`lH)LMaQMHSR(DXa|I(~r?ZGh>$egy$L=d0$m!2n#HAy-0;IP22UBTi zw~LAf|E>qz#r%-C2K5A9PG?|X;NSItpTDV@fq|jrKqU`M@~Xq@+7%onaQ;z;*SY+= z9tao5LR5e{2Ct(Xt&f!YKuzW^@W;2(8(Eycg< zfe^yLA}$#Fxr0ZiGb9oEbQWv)bQW8D;umyQKuT}U2B3mJ0UUk;uB}f>ggiR4IebAy zcDK7kr@PF5cW`?y!=pP#r2yRiGJvHjlqv#TzbSZh-vqVg%%F8Nh%E??LyzumP@qHD zy^}#@#ZFLqfe1hwXQ0+b^h;0zg(gBI3T#xfr9>%Pb0r5;3EK{aoB#hGHa-Az1d{!i zN?d%Bg+MivU$@K!$L3%EO1XD@0X5RW4SdIj>I#Mu5yx(45lbhQI_@2x;8GslUJ_sz zwH_!n^=&;+qUV_`;L+`@;nU4?q50Rpk{yl>m6Z%7T#nt25{{M*EcJ&xyFK7qn84wq zfKhjXyaCEj9H9Ip0O|yQT9+ycjv*e6Z$LTIqx+CY_fL=BiJKPfVw3I_%*kvG=N$Uoi3m*l8cH3xG|8%|Na}O z?EBK)q5|scb)WSBwF^KE>rRlGUKbS)utKn@pz6iLrTav8iwdX!ap^wV>7t_1efbl= zAfiI*hd7ear?(w+fjlTj8n_yt1UFDh?7Pn*n{*VS6J+FNhyR#)cyNeY(yQ?)kyB|Boz~UbizR>at)J*Yce6s)) z8lZrE>Cro}09=H4M7VZ800-<#ME#Euu#>^f15h&b=+!yXpUpb!UL^U44YXlNx3^0P;*SJ3^x#FI55LaMPaga_H(Xm!mb!qN5gM-67hL(>4>@+9IQWvOlgs*a zF-xb^YwqrYj@G9g`P~n9GIewHvPe2wA8_G!Kj75M!q~|U>NRnAbl0c|90rx>uAs39 z7wZ$nB97Vz9jyqe+I3W zx_|L&mZ&H=^1J+K-q`{Q-86oU&mP@3%j7+p4`zU3kAe9(td(-$6Mx(>P(5Msn#1F` zqXkHP^KQ^R$P8ts9=+ZW_1)c97#SF}&odvy(B}Yhoddr{iHd?p^AUsi!w}|iXYk+_ zSP~+R9AO^aM?5+M1Ux!DI3PU@crT;-q47z6&4L}D_yx9ro4cOfFFm_IxOD&Q^qArc zYQKZ3-R>|B-((3-P@t#rYaIK;AL%CG*UfUHyN;!E3bh?obYo6`*i=AV4{buPGc_Na7#%AC$ADxfsq{Occoi{JnM|6MIADoeOrtvw|8 z`$PW!|L@W5i*Vs#Rt5%8J;@DrA#1mz$ZIvn?vr2#zLtSH4{CB}57@TO9y;s5^Y+3ffdwQaohn`4jqE?>E5DZ0V+MZPy4ohE8+6&4N>v%?LPLJ+p~9y3MhHG z8XxfKUZMgTU-N|*Ro($EovT3$2-5g9ApHVxJFPp6V<)Kh0Jgjn()j@OR`!6qA)w&q z?+!&$@|wx`fJ=7|Sk|Sx1sp#8)S{rAJre zlb`q_z&!|8;{(Pg9lNiC(&GV-PKa9|gI^w<%?wPSIE07fBPIq0kcLaJ(MFHXW(9~6 z{+5+s$&;?e2OPVvBPpe=;x>djto_U?3ndI*#*K;kalB`Ou5?iZ*!y84Mf?%F4Q!O1T`(F*DpgDypPgf^eM zeOdU|pXltKz{tSBzaC;-cMl^2L-S9TTCV-SKxvAFiGiW<=l}oz`Rlm${{)GA0%f4) zHJ}UNp@Y!^pAwj0gYv7I2pInCbETr$=Y=3`Pcq*Ze-6i$M&SLQsIYL6ZtN zd3F0id~yQWCl??-DTeyQiV^0MGN?~L=?GMXfrJ?*`SL4B%cwfk(10gGYC` zhDW!^DR4?^289hM8S!s-WpV93;|dxTGc zGU#w7#MW!Ct-7axb4wb(#y!{Wqp%@XkM0%~P+R{KzhJS4N2i4GftNy{%j-dIg(UOt z3(%ni;a(#{LkF5uC*86*PgyK}-TOhoWNMxwiq!+P+bk`dI1_vwZd!u%RrR5pNO z6yA*ocj1w1%QI&jg2OzT-)Mk3T-}`@FM5DRx*0*Eivge(mjieZh`;p)0|Nu7HRAwk z3n_Hhs027_|EOeR-VI7_&AT^%TH7VX9?iQ!S%9G=6VwHWfW?7}N(4l2_X*eT6CT># z3m6#~T(rAafHHh%Gl*Bo?!pYt);`ITK}NcCHiKk6yAOHruRjRNXke2awGYm8{Qe6x zrsKlD{(>v>As6lD4n_tBkbZE|?*^NqeIC?!QgE?8SSJH>9ozqAP&y`4EN~GQF-Xm_y$tT{D-x-)A+-`IdF;2{oJLqcDrNuch~OsuHD~3;{Sa*Yw!DX)}D9itgUzHtS$HHtUd12S-an*vo_zQ zvo_swCa6_a=Hb!Z2}&wHy{^|idPARsQ-eb5fl|Tl*z4N!K|PyFHs<-D+}C|LjX&@6 z%&EIwmlr+2hK^}GKZU?y^R83ld z`!%8EF8u3{fkvDSJbFXV`}F$W2XQn!dPD0$42ACLpiuZ9;Lv)YL=9e~f$ag=3T7N{ z2QAnKCCr!4K-Gb3J!s(5KjZs$kY(K$T)H2C)%kS0-Un%NH9l#42`tj>THbn~L<6Vt z^Qg*QEcb(gnZFH``#ie)LD|TqyB!?3kV!^HkKWL9WH0Ua>GeGh@(IXG`5=Zu_jFJ? z{vQxQoR?06rf^;JVQvIj)_no&dY^9B?RP@;-m?S53X9=+2+!3Gipo95E} zAkC3K?+9exHKP3nsK(?M1k+HDmpMT^3-!8Bx9@&X4a?jP@{mh6$dTW-gEDouYkDWx zmp1Z9-7ejrDEz)1obX-CJHcrH zV$^+zQ9%(Nz5W4?&{6m1{UDz(mh!?q(|VwUts9&yK!qc?oNqh=iaSU67-w`WN(Ttu z{|PYu4=N8UKqX~o4QRBZM#Z7CMkS-OMx_88QlPflWd=wwS>f7xpp+ZbM@jH#J`w<$ zbOP5W;N;L7qEY}#=AGaf_z=)kONfdF$n*@*e2oVrIZOtH-v59IP$LjDA?Biz0UBfT zfTmHO?idvZ-`3kDBA}wR05skWsSv;tpgw8=NFoDTkvaFWFdAQS>GV-iUf;Qky2=O7v3ED}fJ%k# zo2>^*BDxzvn_yZGlxlQ03NSG+v>qt&Zr%wBX@)XUaA>)7&j#7Md zkM3?z+XTjmQSkuHEC+yVC<8+Cv!I08-3e;{!1Uv2`oN_@<&^P%Pz=g~su;|6k4GoC zsfn${vzw?E54aWSfu+T>8&`{GH>kyfv#|q8hX&x_P{1A>;Pnv_ps00#ga_DPG13@`00F*l;pt%#8>!9L{9^D}-5w6B3J8M)FAUUk{K&doTkxwr;LwfX1 z2DNy=PE`PT6zV8&GKLdq>DQzCrtvq>;7jL5Pz?a~7BtDhqZyH;EH{J8STk6=6xs&u z4P*Qt;L-i#HA{DmiUTZ^u7eG0{a?b~ef?!3xTUrkRQPvp236yon?V`8b2BLWS#Abp zZ2mS-&(5P4+_-~Te!6orD0@SUI>6rwnn3ZeES4xy{MHQWjdPSpcyymW-V8DlGywxv z2(bYgI-ulf=F!dQ2p-S^_hJ7BB)}Yb0TGoTXYOKPU^w0kYK(&Ovt_Xaf6F&eJEPY} z#liRz#8s^aN_;%JT~r)C@e4GAGCv}tLzWeRdekSZPw+dP=yp+Y>FkzZVqma7!S8+o z!i1Z`*0~uZ<OKK8rWD#t zhWBQ`9t8&kQV7K0FnDy|EHO>v&uavAe~*KUagZ^PhCrMnsFeyTZQ!Bj z!LM@x;wg{j-5^IXl&C;Uv|T&6K~v?RavWUzm2yKI3@XhJcY_1C^<;?vMECJ#P^f~` z!iEb?kOD#j62Bm6cu*h}P>Aqp-VI9Z3}r${shtg^B_IG25+EbMfq*>IavWT7f&7VH zb3n3S_e4-28XsuA#6JZ-X#|l1laN{vQ4gV;;?aCC09gz%^90s@hEzVNJV2Tc0D&YE9fB2jbiV)%yE*R$4ZDH5ZWRz= z=y(Z)1D%rTJ`5T`2U+0R9j)Nmovq>7T?`vVk3a0uI{`F6fJnrkLHg3w5F~>{1?!W^IbPyAow>>&N1Rz`=m5R;^2@w0ZgUtW`|Nldn3LvIO z_f(J>VBflfyQ6K3cD{Ke8dh`<^vuGk<6?9qMJr`tzN!Kd3rOv0mEL=0>zBm{r|{r}(b{}GSoV;U~jOTdQI z9Jkz~0`f1!v@{g+z=I5U%v=5U|NsBTLB?4_45>MZNMjHyJO2Lvk0rJW|3V@g8ZSP* zs-ST6==3lEdmOT=#-r220+s6kTh!ER3Q-T9J_3)Ldi2`Dgd*UoWMM)9a3NptRFemk z?*p^RMa2O$+-uy{Ez3e!56aFO2n&r5yiES{|GyXm1A`C~0|N^K=>ADTFiVYrfq@UqGGt(2 z;03eH;9{V)#9Ux8&_zfPb)aQH>|n7n1_lPu_$muS8v_FaBUlVHt||v+fmW(WgIOmT z7#O6$teXrB43c2hV+P0uc@_p^Mg|7Z(jyiIFGdCib+BwYTx=O=3J5I5$^^OQh=pM@ z69a=jSnLa&70e9T(9Xhef*G<^o`oTe1!l4mD`YD=3&SEf>me&->mLil3s%U6L>7j3 ztdK2&EDY>ykj;lI;H~_i?ddEGVQi31iYyGr*dSLcu`qmRgKS7-W?*55v6R>$8xolr z^x>=|c9_Xk>iG zvjX9=2RLA^I>`aq149&;wVacIAso!w zz{$W60%jfKgxUL;6LL%e3&RIa28KYetR5EwgCCe>#syOszy;Y-&&&|Q1=&8&%n-o^ z**?$A5CfM@fQzMYK{m}ZGh}c+9|OZgu-Ftn28Ib>)^51iWj+Rmey~^) zKg^VTeg=jGV6hT@m?@3?3=DI@VqyX?^DG5m=7BE8f!L8R05dOHkbz+tSO@4x0!V%X z-7C2oEH+1ofngPx)g=t`(Q07^h8tip9TAwAj|fa`wFm>lb+GJN5m@?T5@lex1{M<& zWnj1pW@(5rFkAt%yy2{!q6`d|!D81$85k~sSsz6i7|w%PB4P{-=fEseF_>7F7~~iL z7KXiI3=C(%vaI3^3}?VBD{%&flVDc6I82sT0&>6r3xkLR1H%chtgHkq{7NMlz{eS| zFw{seFdPNTw!&p6NH8!Q0*g(Di*1vD95BGba6^KDVLw>*p#%fNJ}~R01Oo$TIU@_h zZwUs5onSFuNf=8W&N?dzxn_-p;i@D9!*;N`yOOYURWHTB@Bl0(A_F;ofQ2DmhJoQ1 zSS&?`f#D~Z)h5Hh@B_?xF2lg^9n5+s1M}N=83qPW8OXvQFU!F287ylk%fRpn%<_|E zVE71TCCD-`d;qg{$ucm!2eS^!!b~|O3p3@tECa(Euq>k-1H)@DOInVB;T4#rE62d_ z63nudV_L9jxJzfuvdhYQpJi43>;t`pv$z_!K{^v3=C{w);2|$dEXRa z@xh@4V~N69yOdxtb4UpmGpCebF~hISz#s@VPeK_MLdD83f4obFQ-!77^{TM6yHgdGcGJ`t7_`Ca z3e^}GG{CH0IBUHc1A{tP%vv3C@B#}%qdF{2PE}`MFa*moYA`Ukf>}x$urk6@19Er_ z3xgY+<);BTwuFVDPJ@BL8LXpIgMq;b%-W{Gz~BgGz0iOhU&F${rU_%oXhIH|VPR0x zgq4$qa4~bZSd}K^02mgAUQJlNzXi_H(t;eY!opCc1v!$1g<-B1%%xl4tdm+WmtN3< z9N)mga9;~@Xb20#J1xj@DJ%>>wHO%ez;0&Hh8z*W!oZ`=z+ej&6V`?tFTuhfug$<< z0~P}v1_C;of`!3In}NX^Eas#QIRt`*!BZO+&hgriV=`D6(zGFmZLlzuYBMlcfpyeq zLk?(QVd&6?9N)mgFk2gP^aBgSBDg8*v?0evurO?en|Dx~fx!}N$_cp1&)_D58oHA} z1Qh!~X%Gc&V=^!>faqwD00RR9h^~aPK@_Nk2%x&^8RM9&5-onT;K0MQ4aY!Lkf$_D9C0d2GO9FBSeOQ0n{D`u|YJbwG3i|Xl|%EApRF5{|X|B_k$#%cn_2Y zQNKY16kmeUASwtctiFQ;pjZ&JkRHkgO_(qG7ONGIWq&O53LH8Re_6vR%b)h=`b)bD1&7U;Ibxg z7N}FM2$r>BfRqu;44`FSpkXCu1{Vef1}(6x2Lq%>z{~(jX*yuB00ssIJuoYT0h0Hb z86x1U7zPFgBd{zeU4V|bVrEETfRsMW3>gdz45nb&90o{lf|&tyPci6-D`p1JUCp4; zRAz<>2FP(%%nUVf7HD;dHCQjGs|`A^ikShl_zJ=T4UXD@WkI7aprfmp89*n-G{Qky4O7Sw-)h=KZG5EiKW?GBa&rCx{_s9y$Qfl`JmSQa#7 z0}(p{w*!>-oWZhZ7$9XQGXrSJF6ihgX7EL~rC?dm^grmBDrSZ|43M&unE|w_v<@u$ zgaJ}wGJ|(hwSvXoFfcH*gIS=}rJxl=%nYE5cpY_Ke7vkpW|1+ES>Ml%yE zs{=0Cfh&|DU1vZ_rbEDRT~g7(7qlB z3$!fbE?9O6Bc!dz%mA99fXIRt6x;^Og2tsm8>E;SKtufy7HE3sF<2I~o#Qu{1)AxH zu#PY?F#H9Jfo9@C$6hfrfF^h$EYS2W12d>p0S!EZ4zXfp08KnVSa%p17+Arwpk)rA zqpO%1o-jh{P-X_ua6UI!_6;MX9mdQ6np*(v^aW)_AxvL0kM$nHr@28_a-48n|33_KsW9&lV>JHS%FoWK;oz@W&% z#K2(!x?!Dx0aOxz>{kQ@1BMt#2EQ6cF)jwN5IzPm6J7?fAfX2W7x)hF6mTcN-3)Sz z5t9L_$9KIz?46G)M42;5T z48j>q3|uB03|v8M1&m6Z3`!Z?43dme3_>3S4)7K5Ch)+*>53#sI|Hbe2Qk3*J&^#1 zA4m*T#GJrnz`&r$%EZ800;+8hEdiK+K`jEXdKDf9 zl?+Y>Nk&ly-VfXlI4`gtU@c%tU^ZY10Q<#+hkA z0YnWnJ%Q5(4+B>bENvmFgT;?DH-mJF9D{U-EQ7R(41+YI1cS&0p#uU13=FvHaY!wX zT6;rkc~I>Qkp+c6r1n9rn;^9wDD^>PLG=)X1*(T2vY^@rA_l5`AS_Vr1Ca&QG!QXR zO#@+pY8r?vsH}$68=$fp!UC1mklF`SLPNwrB{YNuDxo2=pmG#aGl0rb2n$q>Lh2V# z=?M`7m7Wk5sPu%$g32jK84N0?AS_Th1*rul~1mq-^fX-9*Oo8k8 zv-0C5-=qNh0LOS=PrrB{#}HRP=g4^9U{_}bCm%;=Zy(R#5LXu~1=V5&E>H#lVF$21 z!HKyAIjIUoi6tN+FFjSEv^X_IAv3SIBsDQbAwNx_q�CKP5$>EHS4vwOAo7zeph^ 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 - ..\..\..\Externals\SDL\$(PlatformName);..\..\..\Externals\GLew;..\..\..\Externals\Cg;..\..\..\Externals\portaudio\$(PlatformName) + ..\..\..\Externals\SDL\$(PlatformName);..\..\..\Externals\GLew;..\..\..\Externals\Cg;..\..\..\Externals\portaudio\$(PlatformName)\$(ConfigurationName) portaudio.lib;dsound.lib;dxerr.lib;iphlpapi.lib;winmm.lib;setupapi.lib;xinput.lib;vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;glew32s.lib;glu32.lib;rpcrt4.lib;comctl32.lib;%(AdditionalDependencies) diff --git a/Source/VSProps/Dolphin.x64.props b/Source/VSProps/Dolphin.x64.props index b729ff4414..557e6350e7 100644 --- a/Source/VSProps/Dolphin.x64.props +++ b/Source/VSProps/Dolphin.x64.props @@ -8,7 +8,7 @@ - ..\..\..\Externals\SDL\$(PlatformName);..\..\..\Externals\GLew;..\..\..\Externals\Cg64;..\..\..\Externals\portaudio\$(PlatformName) + ..\..\..\Externals\SDL\$(PlatformName);..\..\..\Externals\GLew;..\..\..\Externals\Cg64;..\..\..\Externals\portaudio\$(PlatformName)\$(ConfigurationName) portaudio.lib;dsound.lib;dxerr.lib;iphlpapi.lib;winmm.lib;setupapi.lib;xinput.lib;vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;glew64s.lib;glu32.lib;rpcrt4.lib;comctl32.lib;%(AdditionalDependencies) From bfcc720a47dbadc2d31cf600594d909e3ee3651f Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sun, 18 Mar 2012 17:15:03 -0700 Subject: [PATCH 11/28] Make sure updating scmrev.h causes a rebuild of dependant projects. --- Source/Dolphin_2010.sln | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/Dolphin_2010.sln b/Source/Dolphin_2010.sln index 20869448e3..041f6c95bb 100644 --- a/Source/Dolphin_2010.sln +++ b/Source/Dolphin_2010.sln @@ -3,6 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 11.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\Dolphin.vcxproj", "{1B099EF8-6F87-47A2-A3E7-898A24584F49}" ProjectSection(ProjectDependencies) = postProject {8C60E805-0DA5-4E25-8F84-038DB504BB0D} = {8C60E805-0DA5-4E25-8F84-038DB504BB0D} + {69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06} {9E9DA440-E9AD-413C-B648-91030E792211} = {9E9DA440-E9AD-413C-B648-91030E792211} {93D73454-2512-424E-9CDA-4BB357FE13DD} = {93D73454-2512-424E-9CDA-4BB357FE13DD} {B6398059-EBB6-4C34-B547-95F365B71FF4} = {B6398059-EBB6-4C34-B547-95F365B71FF4} @@ -13,6 +14,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\D EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcxproj", "{C87A4178-44F6-49B2-B7AA-C79AF1B8C534}" + ProjectSection(ProjectDependencies) = postProject + {69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioCommon", "Core\AudioCommon\AudioCommon.vcxproj", "{37D007BD-D66C-4EAF-B56C-BD1AAC340A05}" ProjectSection(ProjectDependencies) = postProject @@ -87,6 +91,7 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPTool", "DSPTool\DSPTool.vcxproj", "{1970D175-3DE8-4738-942A-4D98D1CDBF64}" ProjectSection(ProjectDependencies) = postProject {8C60E805-0DA5-4E25-8F84-038DB504BB0D} = {8C60E805-0DA5-4E25-8F84-038DB504BB0D} + {69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06} {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} EndProjectSection EndProject @@ -366,12 +371,15 @@ Global {01573C36-AC6E-49F6-94BA-572517EB9740}.Release|x64.ActiveCfg = Release|x64 {01573C36-AC6E-49F6-94BA-572517EB9740}.Release|x64.Build.0 = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|Win32.ActiveCfg = Release|x64 + {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|Win32.Build.0 = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|x64.ActiveCfg = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|x64.Build.0 = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|Win32.ActiveCfg = Release|x64 + {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|Win32.Build.0 = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|x64.ActiveCfg = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|x64.Build.0 = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|Win32.ActiveCfg = Release|x64 + {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|Win32.Build.0 = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|x64.ActiveCfg = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|x64.Build.0 = Release|x64 EndGlobalSection From ec6d2572c1a9d668646ab2ee95becece3057dd0a Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 03:24:47 -0700 Subject: [PATCH 12/28] oops, forgot to disable WDMKS on portaudio 32bit build --- Externals/portaudio/Win32/Debug/portaudio.lib | Bin 1367996 -> 1187170 bytes Externals/portaudio/Win32/Debug/portaudio.pdb | Bin 192512 -> 192512 bytes .../portaudio/Win32/DebugFast/portaudio.lib | Bin 1318338 -> 1149188 bytes .../portaudio/Win32/DebugFast/portaudio.pdb | Bin 192512 -> 184320 bytes .../portaudio/Win32/Release/portaudio.lib | Bin 1318338 -> 1149188 bytes .../portaudio/Win32/Release/portaudio.pdb | Bin 192512 -> 184320 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Externals/portaudio/Win32/Debug/portaudio.lib b/Externals/portaudio/Win32/Debug/portaudio.lib index e05680c0247fb24fc5b2d013094e23a91b80448e..058b3c404c3c41ff32bb849f014b2698eca7a5c3 100644 GIT binary patch delta 133890 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�#;SW3UVq77yI;L7A{bjzyu6I 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 z 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%0A+DAJb|*f7FZ*aKy8GaP`j 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%0DxvbY#_XhW8)vNN#gFfg=&%0F%f4iFQZ z4+M1~(%cN9P!<A!y71zi{XqFM3$T30+hwY z@W%?Wrk0(-!y3ZkX7I6QsAuQ}$Ge9OToB5FoP7g1|K*PjZ1F9qu>ca|Vi2)|iAg|N zT;TI?KxeA3GhDEPt-HMfWpOc_v4@FWfU>w4>P;LV>sr|v8lWt0h88G`i(!T%M3$Rj z4wS{kz~Ka0Ps`2_0%dVCL_k?w3?a@CS#E|1D2t0>k27RhE;|E<3xvhZzyo1{M%s8> zVS)ls78gT~D`a&qJHrkri<@B&l*Pqx!VMzJ&2R?F;$rY{hpZ81XP5$IaWl+-vbY$Q zctB*i8CF19Tns9n3=H+tz=LxIp0Gv7B~TU@LxUGgtOd&AV))?&SvSlMUZ@0FLG0lT z5#wUW@qw_o8492*E`~2YkX6O(3=X~!7B_jRX< z&F}@v;$n~pfXH$)$Us?K44|vzKr4;e8QuiIRvLeRvbY%D1j5CjEG~wSAO?onp!Od- z!vZLin_&r*1-aV|Bn`RS4aDMN*b>aZFbC``h7bsgn}G$&;$mP9g^964SzHV{P!>0X z0hGnXFej9O0W_}0&hP@nf|P%6KumBxco7DX=4N;UWpObCgflSA16vHblnun^3f z<6>A70g>fq*Z^fgZcdvI)=?43zyM-#Gt@v?Tnr^qFtLiLdI*z?;Z76-188iIok1fS z!s2GofwH(5bYfs)22d6kLr)9?bOHAbD2ton4wS{ka3dBX%gt~H%Hm>hh+}{*;O>F4 zxa%1vK$%<&6XGG#+zeBoEG~u*@eB;0IU;rjn*<1po52Cf;$pB%go!ypSzHVmP!=~s z4wS{ka3c}2yqldtB?-dfX3zk$z~!GpGE7hf%Hm?^NQSHuXJ@zqWpOjyfU>w4E~G$Y zxf!lNSzHVrsgSki>% z?y3UGax=JOKxDZXR%AdHptFN7sDdm-{{a=_V)&j3k>zIi4P|jLC}hFJRG=&_h6!1a zCF|@A^>?65ZiWX?78k>vY=|^B!viRbi@_xavJ{=2VFHxJ%`gSZ;$oPP3z6k!m;z;S zF>vHTR*thXgg{x`44_-2KugxS7((*Fvh@ty3=t3}0~f=de8}>2b_R|D2#cG62g>4N zU@3%&aX?vI3^|36_3rEpJD@CXhCNUg7sHk!h%7h54k(L@L8ch8@SU9@qnLrA9{DwH$xAU#l>*40)=0=9_x z4wS{k@VElDKKeP7#l`Ts0=Dw{JCw!6z+4Gg)LqZbzz$_{F$h<})`p8iSzHXtm7sO( zp!FN-P!<=1aV2auyg8J`#gJ18aXvRg0hGnXaHo=iVK=xK(x`&4xEXYyEG~uvAQq(j zI|5>Y%Rh-~28KOgEh$hIH$w)L#l`Rk%Hjq$d_n5C7(!|o81{m7EP%4O8J0jp8z_s5VL~lry)`?-o!WW`lbhiIRFI3Iqz)!l0cCM9+^K^su4ZS@sE4q)8FZj5 zE`|e87B|BYD2t21y#cxem%$s#;$lc@fX&;bL0McT3{?%Vx$!zEi;H1q0|NsmxbHs~ z%Hm?!)c|U$fg)nx_T}3Jh0Q3Kwp!D=z3QEy882hW_Km*<*RtWhb^?6jg1LdI0eDgg zye5ndJgd|o!N4F5nN=lZdf`k#;q6oSg(iSS)dYo3F*3Sf<4^_c`1vo?n=YkIuAzi&Ec z)spmz84L{Prz;8zNizoGTQ^3*^f%at&xD0=jm#J5G0RL>5fQQ>a9e}}J1pC{Kv`Vi zJ?EgMC+rL|(4{Bb3<^*d7koJiH~3Z@kUA~~8^{_m26phF)1ZZ8+zdSsF;L4~0D7kb zHv{PKevmX5czr79f(CYmBk&7yKtr1#F)oH2=(RZ93}?r@D; idi!!wAzv2q3kFtDE|!DbOLI+1C=7HjjjoK4DI)-`#it1X diff --git a/Externals/portaudio/Win32/Debug/portaudio.pdb b/Externals/portaudio/Win32/Debug/portaudio.pdb index 4e0b029fd398908f0d1b0252496d4aca3c7e7f0f..c9269f2c5d30077f5b1159b2791984cea595cbe0 100644 GIT binary patch delta 36588 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

6`TK1!i%SkM)N6O7?X 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%0A0#l6f7fA>NRVi(-U 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 z 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 AzW@LL delta 10657 zcmZozz}@hGdxDA}BLf42J_7^876u5=+0M9u=>k9F^UZ<+@A)Sy2ynA8Ffa%lm;vW+ zGSIol7`R=RkMVM1y$M5ZVuf=?VqRWqPBFu$kG!JH3`z_P3>FM&`9-;jB`~oP1_lNj zhNRTulHkPLf}GT##FA8o&!0Y;F|dmAGcYjikcL$A^bhk3=BLBX_+}CsYQN?xp2K8aSibmo8Qh3M3U4%s|p$DJ@P+PldSX zGbBJkM(VI&2A&lIt0)%(1Jholz%yV$gq9oF)yUxo5pi%}VE+gTv~|*x`)143dj|&u zdHM%=hD0)iBG?WN3?I{=p*It3gJ)hzYEfEZaw-ET^gv<~48Ex;nWed)C;^Fqd}Y88 zkeTP10#*YGbrTRjB;NxP^bj8%kOn1@fTGO&qRf)|N(OK`U}a!nItaE16jcli4h-JG z0iJ&G&i;OWuFfG~w;{NQbg%&$^+r&~ZU&p-l30@H22O)8$FT^5%nVN~ONEHLRxo_@ zV_+4nXJTMrIs(=Nu{emqJJ`iB#L>+^$k#C>KHM?P6~c6l067AO6vRPt42(jc90T$> zC^Qs=AZZcC=VRay0L3Q*0~^CJki!|6>III27|?{g35k6YiM(ZU9*63H{-SGPYW2$>p?2ELsfv-H=t}-Jb=85l*4D6yT3=B-5h`le(0G4(Pab*ZM zfg0-Iz`)1AD8$6TzyNaO1C;n-Vt5F0AOn-YBM=RaABcz6K-Gbq%)r3N@B}2!z$EY# zMDsR)QWm2SJ2(MMj`EO80@=^Nz|Qa-B+tMk@B&0PAg2X{8LyynVhoHzpt2E^hSo`g zjAUS77l7yi#UMKa3&R_bS_US8x6;$!u`$Y6cn8P31v&b9`nkt@hPe8Iq6I|&k`+K{ z;yp+w*hfqPA0WEbk#q++`nkKJXa|dcBGqqtp%;^QJ=|QdM0~ibr@Kdps|%(cxD>?l zN6;kuO%RkAd{cAtiz-7Z3*hB9NL+xysk9g@2q~37-c?|LsCCOpOfP2mR1YqLrx5=q6`cT zpe)S5z%aeei;1fqLoHSVAPI6FN&xs5lw{`T6(e~T5->rjg{7HAsi2esl?3?}c>rocL24i-0Z_9G#1>*; z6atlYppp;d@Ddh?IiOOLfq|KUSq9SFV*%0A1^t+e>)Aj|1||V^5Z%DQfNTWF8R$lE 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 diff --git a/Externals/portaudio/Win32/Release/portaudio.lib b/Externals/portaudio/Win32/Release/portaudio.lib index cee5475d340e9a02c9c36bd15e02e47bc12327a6..30874d6f055bbef21f49302ccff9e5b8d69f2609 100644 GIT binary patch delta 69453 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%0A0#l6f7fA>NRVi(-U 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 z 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 AzW@LL delta 10657 zcmZozz}@hGdxDA}BLf42J_7^876u5=+0M9u=>k9F^UZ<+@A)Sy2ynA8Ffa%lm;vW+ zGSIol7`R=RkMVM1y$M5ZVuf=?VqRWqPBFu$kG!JH3`z_P3>FM&`9-;jB`~oP1_lNj zhNRTulHkPLf}GT##FA8o&!0Y;F|dmAGcYjikcL$A^bhk3=BLBX_+}CsYQN?xp2K8aSibmo8Qh3M3U4%s|p$DJ@P+PldSX zGbBJkM(VI&2A&lIt0)%(1Jholz%yV$gq9oF)yUxo5pi%}VE+gTv~|*x`)143dj|&u zdHM%=hD0)iBG?WN3?I{=p*It3gJ)hzYEfEZaw-ET^gv<~48Ex;nWed)C;^Fqd}Y88 zkeTP10#*YGbrTRjB;NxP^bj8%kOn1@fTGO&qRf)|N(OK`U}a!nItaE16jcli4h-JG z0iJ&G&i;OWuFfG~w;{NQbg%&$^+r&~ZU&p-l30@H22O)8$FT^5%nVN~ONEHLRxo_@ zV_+4nXJTMrIs(=Nu{emqJJ`iB#L>+^$k#C>KHM?P6~c6l067AO6vRPt42(jc90T$> zC^Qs=AZZcC=VRay0L3Q*0~^CJki!|6>III27|?{g35k6YiM(ZU9*63H{-SGPYW2$>p?2ELsfv-H=t}-Jb=85l*4D6yT3=B-5h`le(0G4(Pab*ZM zfg0-Iz`)1AD8$6TzyNaO1C;n-Vt5F0AOn-YBM=RaABcz6K-Gbq%)r3N@B}2!z$EY# zMDsR)QWm2SJ2(MMj`EO80@=^Nz|Qa-B+tMk@B&0PAg2X{8LyynVhoHzpt2E^hSo`g zjAUS77l7yi#UMKa3&R_bS_US8x6;$!u`$Y6cn8P31v&b9`nkt@hPe8Iq6I|&k`+K{ z;yp+w*hfqPA0WEbk#q++`nkKJXa|dcBGqqtp%;^QJ=|QdM0~ibr@Kdps|%(cxD>?l zN6;kuO%RkAd{cAtiz-7Z3*hB9NL+xysk9g@2q~37-c?|LsCCOpOfP2mR1YqLrx5=q6`cT zpe)S5z%aeei;1fqLoHSVAPI6FN&xs5lw{`T6(e~T5->rjg{7HAsi2esl?3?}c>rocL24i-0Z_9G#1>*; z6atlYppp;d@Ddh?IiOOLfq|KUSq9SFV*%0A1^t+e>)Aj|1||V^5Z%DQfNTWF8R$lE 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 From 00fed2e70e52f2f22f58c1edb8578f7b929874dc Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 01:11:59 -0700 Subject: [PATCH 13/28] wxw3: revert wx/setup.h for wxgtk to the previous version --- Externals/wxWidgets3/wx/wxgtk.h | 142 ++++++++++++-------------------- 1 file changed, 52 insertions(+), 90 deletions(-) diff --git a/Externals/wxWidgets3/wx/wxgtk.h b/Externals/wxWidgets3/wx/wxgtk.h index e1dbed2be9..42988ec8b1 100644 --- a/Externals/wxWidgets3/wx/wxgtk.h +++ b/Externals/wxWidgets3/wx/wxgtk.h @@ -16,7 +16,7 @@ #endif /* __cplusplus */ /* fill in with the string wxGetOsDescription() will return */ -#define WXWIN_OS_DESCRIPTION "Linux 2.6.32-5-686 i686" +#define WXWIN_OS_DESCRIPTION "FreeBSD 7.4-PRERELEASE i386" /* the installation location prefix from configure */ #define wxINSTALL_PREFIX "/usr/local" @@ -44,7 +44,7 @@ /* Define this to get extra features from GNU libc. */ #ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 +/* #undef _GNU_SOURCE */ #endif /* Define to `int' if doesn't define. */ @@ -54,6 +54,9 @@ byte first (like Motorola and SPARC, unlike Intel and VAX). */ /* #undef WORDS_BIGENDIAN */ +/* Define this if your version of GTK+ is greater than 1.2 */ +#define __WXGTK12__ 1 + /* Define this if your version of GTK+ is greater than 1.2.7 */ /* #undef __WXGTK127__ */ @@ -86,12 +89,12 @@ #define __UNIX__ 1 /* #undef __AIX__ */ -/* #undef __BSD__ */ +#define __BSD__ 1 /* #undef __DARWIN__ */ /* #undef __EMX__ */ -/* #undef __FREEBSD__ */ +#define __FREEBSD__ 1 /* #undef __HPUX__ */ -#define __LINUX__ 1 +/* #undef __LINUX__ */ /* #undef __NETBSD__ */ /* #undef __OPENBSD__ */ /* #undef __OSF__ */ @@ -160,7 +163,7 @@ #define wxUSE_ON_FATAL_EXCEPTION 1 -#define wxUSE_STACKWALKER 1 +#define wxUSE_STACKWALKER 0 #define wxUSE_DEBUGREPORT 1 @@ -183,10 +186,12 @@ #define wxUSE_WCHAR_T 1 -#define wxUSE_EXCEPTIONS 0 +#define wxUSE_EXCEPTIONS 0 #define wxUSE_EXTENDED_RTTI 0 +#define wxUSE_STL 0 + #define wxUSE_LOG 1 #define wxUSE_LOGWINDOW 1 @@ -201,12 +206,6 @@ #define wxUSE_STREAMS 1 -#define wxUSE_PRINTF_POS_PARAMS 1 - - - -#define wxUSE_STL 0 - #if defined(__DMC__) || defined(__WATCOMC__) \ || (defined(_MSC_VER) && _MSC_VER < 1200) #define wxUSE_STD_DEFAULT 0 @@ -214,16 +213,11 @@ #define wxUSE_STD_DEFAULT 0 #endif -#define wxUSE_STD_CONTAINERS 0 - #define wxUSE_STD_IOSTREAM 1 #define wxUSE_STD_STRING 1 -#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL - -#define wxUSE_IOSTREAMH 0 - +#define wxUSE_PRINTF_POS_PARAMS 1 #define wxUSE_LONGLONG 1 @@ -253,7 +247,7 @@ #define wxUSE_STOPWATCH 1 -#define wxUSE_FSWATCHER 0 +#define wxUSE_FSWATCHER 0 #define wxUSE_CONFIG 1 @@ -287,7 +281,7 @@ #define wxUSE_APPLE_IEEE 1 -#define wxUSE_JOYSTICK 1 +#define wxUSE_JOYSTICK 0 #define wxUSE_FONTENUM 1 @@ -309,39 +303,26 @@ #define wxUSE_ANY 1 -#define wxUSE_REGEX 0 +#define wxUSE_REGEX 0 #define wxUSE_SYSTEM_OPTIONS 1 #define wxUSE_SOUND 1 -#define wxUSE_MEDIACTRL 0 +#define wxUSE_MEDIACTRL 1 -#define wxUSE_XRC 0 +#define wxUSE_XRC 0 -#define wxUSE_XML wxUSE_XRC +#define wxUSE_XML 0 #define wxUSE_AUI 1 -#define wxUSE_RIBBON 0 +#define wxUSE_RIBBON 0 -#define wxUSE_PROPGRID 0 +#define wxUSE_PROPGRID 0 #define wxUSE_STC 0 -#define wxUSE_WEBVIEW 0 - -#ifdef __WXMSW__ -#define wxUSE_WEBVIEW_IE 0 -#else -#define wxUSE_WEBVIEW_IE 0 -#endif - -#if defined(__WXGTK__) || defined(__WXOSX__) -#define wxUSE_WEBVIEW_WEBKIT 0 -#else -#define wxUSE_WEBVIEW_WEBKIT 0 -#endif #ifdef _MSC_VER @@ -369,14 +350,11 @@ #define wxUSE_CONTROLS 1 -#define wxUSE_MARKUP 0 - #define wxUSE_POPUPWIN 1 #define wxUSE_TIPWINDOW 1 #define wxUSE_ANIMATIONCTRL 1 -#define wxUSE_BANNERWINDOW 1 #define wxUSE_BUTTON 1 #define wxUSE_BMPBUTTON 1 #define wxUSE_CALENDARCTRL 1 @@ -412,10 +390,8 @@ #define wxUSE_STATTEXT 1 #define wxUSE_STATBMP 1 #define wxUSE_TEXTCTRL 1 -#define wxUSE_TIMEPICKCTRL 1 #define wxUSE_TOGGLEBTN 1 #define wxUSE_TREECTRL 1 -#define wxUSE_TREELISTCTRL 1 #define wxUSE_STATUSBAR 1 @@ -471,8 +447,6 @@ #define wxUSE_NOTIFICATION_MESSAGE 1 -#define wxUSE_RICHTOOLTIP 1 - #define wxUSE_SASH 1 #define wxUSE_SPLITTER 1 @@ -537,11 +511,11 @@ #define wxUSE_PRINTING_ARCHITECTURE 1 -#define wxUSE_HTML 0 +#define wxUSE_HTML 0 #define wxUSE_GLCANVAS 1 -#define wxUSE_RICHTEXT 0 +#define wxUSE_RICHTEXT 0 #define wxUSE_CLIPBOARD 1 @@ -585,7 +559,10 @@ #define wxUSE_SVG 1 -#define wxUSE_DC_TRANSFORM_MATRIX 1 + +#define REMOVE_UNUSED_ARG 0 + +#define wxUSE_IOSTREAMH 0 @@ -593,9 +570,9 @@ #define wxUSE_LIBPNG 1 -#define wxUSE_LIBJPEG 0 +#define wxUSE_LIBJPEG 0 -#define wxUSE_LIBTIFF 0 +#define wxUSE_LIBTIFF 0 #define wxUSE_TGA 1 @@ -628,7 +605,7 @@ * Unix-specific options */ #define wxUSE_SELECT_DISPATCHER 1 -#define wxUSE_EPOLL_DISPATCHER 1 +#define wxUSE_EPOLL_DISPATCHER 0 #define wxUSE_UNICODE_UTF8 1 #define wxUSE_UTF8_LOCALE_ONLY 0 @@ -682,8 +659,6 @@ #define wxUSE_DATEPICKCTRL_GENERIC 0 -#define wxUSE_TIMEPICKCTRL_GENERIC 0 - #define wxUSE_CRASHREPORT 0 /* --- end MSW options --- */ @@ -802,7 +777,7 @@ /* * Use GTK print for printing under GTK+ 2.0 */ -#define wxUSE_GTKPRINT 1 +#define wxUSE_GTKPRINT 0 /* * Use GNOME print for printing under GTK+ 2.0 */ @@ -819,6 +794,10 @@ * Use the Hildon 2.0 framework */ #define wxUSE_LIBHILDON2 0 +/* + * Have glibc2 + */ +#define wxHAVE_GLIBC2 0 /* * Use libXpm */ @@ -875,11 +854,11 @@ /* * use the session manager to detect KDE/GNOME */ -#define wxUSE_DETECT_SM 1 +#define wxUSE_DETECT_SM 0 /* define with the name of timezone variable */ -#define WX_TIMEZONE timezone +/* #undef WX_TIMEZONE */ /* The type of 3rd argument to getsockname() - usually size_t or int */ #define WX_SOCKLEN_T socklen_t @@ -887,9 +866,6 @@ /* The type of 5th argument to getsockopt() - usually size_t or int */ #define SOCKOPTLEN_T socklen_t -/* The type of statvfs(2) argument */ -#define WX_STATFS_T struct statfs - /* The signal handler prototype */ #define wxTYPE_SA_HANDLER int @@ -961,15 +937,6 @@ (defined in the unix98 standard) */ #define HAVE_UNIX98_PRINTF 1 -/* define if you have statfs function */ -#define HAVE_STATFS 1 - -/* define if you have statfs prototype */ -#define HAVE_STATFS_DECL 1 - -/* define if you have statvfs function */ -/* #undef HAVE_STATVFS */ - /* Define if you have strtoull() and strtoll() */ #define HAVE_STRTOULL 1 @@ -996,10 +963,10 @@ /* #undef HAVE_USLEEP */ /* Define if you have wcscasecmp() function */ -#define HAVE_WCSCASECMP 1 +/* #undef HAVE_WCSCASECMP */ /* Define if you have wcsncasecmp() function */ -#define HAVE_WCSNCASECMP 1 +/* #undef HAVE_WCSNCASECMP */ /* Define if you have wcslen function */ #define HAVE_WCSLEN 1 @@ -1011,10 +978,10 @@ #define HAVE_WCSFTIME 1 /* Define if you have strnlen() function */ -#define HAVE_STRNLEN 1 +/* #undef HAVE_STRNLEN */ /* Define if you have wcsnlen() function */ -#define HAVE_WCSNLEN 1 +/* #undef HAVE_WCSNLEN */ /* Define if you have wcstoull() and wcstoll() */ /* #undef HAVE_WCSTOULL */ @@ -1037,14 +1004,11 @@ /* The number of bytes in a short. */ #define SIZEOF_SHORT 2 -/* The number of bytes in a size_t. */ -#define SIZEOF_SIZE_T 4 - -/* Define if size_t on your machine is the same type as unsigned int. */ +#ifdef __LP64__ +#define wxSIZE_T_IS_ULONG 1 +#else #define wxSIZE_T_IS_UINT 1 - -/* Define if size_t on your machine is the same type as unsigned long. */ -/* #undef wxSIZE_T_IS_ULONG */ +#endif /* Define if wchar_t is distinct type in your compiler. */ #define wxWCHAR_T_IS_REAL_TYPE 1 @@ -1125,7 +1089,7 @@ #define HAVE_UNSETENV 1 /* Define if you have the header file. */ -#define HAVE_X11_XKBLIB_H 1 +/* #undef HAVE_X11_XKBLIB_H */ /* Define if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */ @@ -1152,7 +1116,11 @@ #define HAVE_ICONV 1 /* Define as "const" if the declaration of iconv() needs const. */ -#define ICONV_CONST +#if defined __FreeBSD__ || __NetBSD__ +#define ICONV_CONST const +#else +#define ICONV_CONST +#endif /* Define if you have the header file. */ #define HAVE_LANGINFO_H 1 @@ -1224,13 +1192,7 @@ #define HAVE_GETGRGID_R 1 /* Define if locale_t is available */ -#define HAVE_LOCALE_T 1 - -/* Define if you have inotify_xxx() functions. */ -/* #undef wxHAS_INOTIFY */ - -/* Define if you have kqueu_xxx() functions. */ -/* #undef wxHAS_KQUEUE */ +/* #undef HAVE_LOCALE_T */ /* ------------------------------------------------------------------------- Win32 adjustments section From 20bb7a28b5cc7e64e6234c67208d5afc79e67e08 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 01:12:41 -0700 Subject: [PATCH 14/28] wxw3: update wx/setup.h for wxgtk to be compatible with current version --- Externals/wxWidgets3/wx/wxgtk.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Externals/wxWidgets3/wx/wxgtk.h b/Externals/wxWidgets3/wx/wxgtk.h index 42988ec8b1..bcbdd9be37 100644 --- a/Externals/wxWidgets3/wx/wxgtk.h +++ b/Externals/wxWidgets3/wx/wxgtk.h @@ -213,10 +213,16 @@ #define wxUSE_STD_DEFAULT 0 #endif +#define wxUSE_STD_CONTAINERS 0 + #define wxUSE_STD_IOSTREAM 1 #define wxUSE_STD_STRING 1 +#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL + +#define wxUSE_IOSTREAMH 0 + #define wxUSE_PRINTF_POS_PARAMS 1 @@ -323,6 +329,19 @@ #define wxUSE_STC 0 +#define wxUSE_WEBVIEW 0 + +#ifdef __WXMSW__ +#define wxUSE_WEBVIEW_IE 0 +#else +#define wxUSE_WEBVIEW_IE 0 +#endif + +#if defined(__WXGTK__) || defined(__WXOSX__) +#define wxUSE_WEBVIEW_WEBKIT 0 +#else +#define wxUSE_WEBVIEW_WEBKIT 0 +#endif #ifdef _MSC_VER @@ -350,11 +369,14 @@ #define wxUSE_CONTROLS 1 +#define wxUSE_MARKUP 0 + #define wxUSE_POPUPWIN 1 #define wxUSE_TIPWINDOW 1 #define wxUSE_ANIMATIONCTRL 1 +#define wxUSE_BANNERWINDOW 1 #define wxUSE_BUTTON 1 #define wxUSE_BMPBUTTON 1 #define wxUSE_CALENDARCTRL 1 @@ -390,8 +412,10 @@ #define wxUSE_STATTEXT 1 #define wxUSE_STATBMP 1 #define wxUSE_TEXTCTRL 1 +#define wxUSE_TIMEPICKCTRL 1 #define wxUSE_TOGGLEBTN 1 #define wxUSE_TREECTRL 1 +#define wxUSE_TREELISTCTRL 1 #define wxUSE_STATUSBAR 1 @@ -447,6 +471,8 @@ #define wxUSE_NOTIFICATION_MESSAGE 1 +#define wxUSE_RICHTOOLTIP 1 + #define wxUSE_SASH 1 #define wxUSE_SPLITTER 1 @@ -559,6 +585,7 @@ #define wxUSE_SVG 1 +#define wxUSE_DC_TRANSFORM_MATRIX 1 #define REMOVE_UNUSED_ARG 0 From 6091774adebef28d211a58e1e1bcaa836a79d106 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 04:54:32 -0700 Subject: [PATCH 15/28] get wxw3 building on linux kind of hacky because currently, shared libpng is always expected to be used on darwin, libpng in externals is always used --- CMakeLists.txt | 64 +++++++++++++++-------------- Externals/wxWidgets3/CMakeLists.txt | 37 +++++++++-------- 2 files changed, 53 insertions(+), 48 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b64c5b6f61..8d77c51c32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -476,48 +476,52 @@ if(NOT DISABLE_WX) unset(wxWidgets_FOUND) endif() endif(wxWidgets_FOUND) - - if(wxWidgets_FOUND) - include(${wxWidgets_USE_FILE}) - if(UNIX AND NOT APPLE) - # There is a bug in the FindGTK module in cmake version 2.8.2 that - # does not find gdk-pixbuf-2.0. On the other hand some 2.8.3 - # users have complained that pkg-config does not find - # gdk-pixbuf-2.0. On yet another hand, cmake version 2.8.3 in - # Ubuntu Natty does not find the glib libraries correctly. - # Ugly!!! - execute_process(COMMAND lsb_release -c -s - OUTPUT_VARIABLE DIST_NAME - ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} - VERSION_EQUAL 2.8.2 OR "${DIST_NAME}" STREQUAL "natty") - check_lib(GTK2 gtk+-2.0 gtk.h REQUIRED) - else() - include(FindGTK2) - if(GTK2_FOUND) - include_directories(${GTK2_INCLUDE_DIRS}) - endif() + if(UNIX AND NOT APPLE) + # There is a bug in the FindGTK module in cmake version 2.8.2 that + # does not find gdk-pixbuf-2.0. On the other hand some 2.8.3 + # users have complained that pkg-config does not find + # gdk-pixbuf-2.0. On yet another hand, cmake version 2.8.3 in + # Ubuntu Natty does not find the glib libraries correctly. + # Ugly!!! + execute_process(COMMAND lsb_release -c -s + OUTPUT_VARIABLE DIST_NAME + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} + VERSION_EQUAL 2.8.2 OR "${DIST_NAME}" STREQUAL "natty") + check_lib(GTK2 gtk+-2.0 gtk.h REQUIRED) + else() + include(FindGTK2) + if(GTK2_FOUND) + include_directories(${GTK2_INCLUDE_DIRS}) endif() endif() + endif() + if(wxWidgets_FOUND) + include(${wxWidgets_USE_FILE}) message("wxWidgets found, enabling GUI build") else(wxWidgets_FOUND) - if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - message(FATAL_ERROR "wxWidgets not found. It is required to build the GUI") - endif() message("Using static wxWidgets from Externals") + + # These definitions and includes are used when building dolphin against wx, + # not when building wx itself (see wxw3 CMakeLists.txt for that) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") add_definitions(-D__WXOSX_COCOA__) - include_directories(Externals/wxWidgets3) - include_directories(Externals/wxWidgets3/include) - add_subdirectory(Externals/wxWidgets3) - set(wxWidgets_LIBRARIES "wx") + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + add_definitions(-D__WXGTK__) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + add_definitions(-D__WXMSW__) else() - include_directories(Externals/wxWidgets/include) - add_subdirectory(Externals/wxWidgets) + message(FATAL_ERROR "wxWidgets in Externals is not compatible with your platform") endif() + + include_directories( + Externals/wxWidgets3 + Externals/wxWidgets3/include) + add_subdirectory(Externals/wxWidgets3) set(wxWidgets_FOUND TRUE) + set(wxWidgets_LIBRARIES "wx") endif(wxWidgets_FOUND) add_definitions(-DHAVE_WX=1) endif(NOT DISABLE_WX) diff --git a/Externals/wxWidgets3/CMakeLists.txt b/Externals/wxWidgets3/CMakeLists.txt index e78bbb5b8d..8e8d88afbb 100644 --- a/Externals/wxWidgets3/CMakeLists.txt +++ b/Externals/wxWidgets3/CMakeLists.txt @@ -847,12 +847,28 @@ set(SRCS ${SRCS_GENERIC}) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + add_definitions(-D__WXOSX_COCOA__) set(SRCS ${SRCS} ${SRCS_GENERICOSX} ${SRCS_OSX} ${SRCS_UNIX}) + include_directories(../libpng) + add_subdirectory(../libpng ../libpng) + set(LIBS + png + iconv + ${APPKIT_LIBRARY} + ${APPSERV_LIBRARY} + ${ATB_LIBRARY} + ${CARBON_LIBRARY} + ${COCOA_LIBRARY} + ${COREFUND_LIBRARY} + ${CORESERV_LIBRARY} + ${IOK_LIBRARY} + ${QUICKTIME_LIBRARY}) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + add_definitions(-D__WXGTK__) set(SRCS ${SRCS} ${SRCS_GENERICGTK} @@ -860,31 +876,16 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") ${SRCS_UNIX} ${SRCS_UNIXGTK}) else() + add_definitions(-D__WXMSW__) set(SRCS ${SRCS} ${SRCS_MSW}) endif() -add_definitions(-D__WXOSX_COCOA__) add_definitions(-DWXBUILDING) add_definitions(-Wno-deprecated-declarations) add_definitions(-Wno-shadow) -set(LIBS - iconv - ${APPKIT_LIBRARY} - ${APPSERV_LIBRARY} - ${ATB_LIBRARY} - ${CARBON_LIBRARY} - ${COCOA_LIBRARY} - ${COREFUND_LIBRARY} - ${CORESERV_LIBRARY} - ${IOK_LIBRARY} - ${QUICKTIME_LIBRARY} - ) -include_directories(../libpng) -add_subdirectory(../libpng ../libpng) -list(APPEND LIBS png) - -add_library(wx STATIC ${SRCS}) +enable_precompiled_headers(include/wx/wxprec.h src/common/dummy.cpp SRCS) +add_library(wx STATIC ${PNG_SRCS} ${SRCS}) target_link_libraries(wx ${LIBS}) From c3a537728f9cb05af98ef7287cabfb1f09f6f4ec Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 06:03:05 -0700 Subject: [PATCH 16/28] Don't allow wiimote config while in Gamecube mode Fixes crash when attempting to open emulated wiimote config in Gamecube mode --- Source/Core/DolphinWX/Src/FrameTools.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index 607c920906..eafebe131f 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -1551,16 +1551,21 @@ void CFrame::UpdateGUI() bool Initialized = Core::IsRunning(); bool Running = Core::GetState() == Core::CORE_RUN; bool Paused = Core::GetState() == Core::CORE_PAUSE; + bool RunningWii = Initialized && SConfig::GetInstance().m_LocalCoreStartupParameter.bWii; + bool RunningGamecube = Initialized && !SConfig::GetInstance().m_LocalCoreStartupParameter.bWii; // Make sure that we have a toolbar if (m_ToolBar) { // Enable/disable the Config and Stop buttons m_ToolBar->EnableTool(wxID_OPEN, !Initialized); - m_ToolBar->EnableTool(wxID_REFRESH, !Initialized); // Don't allow refresh when we don't show the list + // Don't allow refresh when we don't show the list + m_ToolBar->EnableTool(wxID_REFRESH, !Initialized); m_ToolBar->EnableTool(IDM_STOP, Running || Paused); m_ToolBar->EnableTool(IDM_TOGGLE_FULLSCREEN, Running || Paused); m_ToolBar->EnableTool(IDM_SCREENSHOT, Running || Paused); + // Don't allow wiimote config while in Gamecube mode + m_ToolBar->EnableTool(IDM_CONFIG_WIIMOTE_PLUGIN, !RunningGamecube); } // File @@ -1590,15 +1595,12 @@ void CFrame::UpdateGUI() if (DiscIO::CNANDContentManager::Access().GetNANDLoader(TITLEID_SYSMENU).IsValid()) GetMenuBar()->FindItem(IDM_LOAD_WII_MENU)->Enable(!Initialized); - GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1)-> - Enable(Initialized && SConfig::GetInstance().m_LocalCoreStartupParameter.bWii); - GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE2)-> - Enable(Initialized && SConfig::GetInstance().m_LocalCoreStartupParameter.bWii); - GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE3)-> - Enable(Initialized && SConfig::GetInstance().m_LocalCoreStartupParameter.bWii); - GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE4)-> - Enable(Initialized && SConfig::GetInstance().m_LocalCoreStartupParameter.bWii); - if (Initialized && SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) + GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1)->Enable(RunningWii); + GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE2)->Enable(RunningWii); + GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE3)->Enable(RunningWii); + GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE4)->Enable(RunningWii); + GetMenuBar()->FindItem(IDM_CONFIG_WIIMOTE_PLUGIN)->Enable(!RunningGamecube); + if (RunningWii) { GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1)->Check(GetUsbPointer()-> AccessWiiMote(0x0100)->IsConnected()); From 35a5a3b9d437f6150cfdfe45fefcb922cdd7d52b Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 06:54:02 -0700 Subject: [PATCH 17/28] Fix "Hid cursor" causing a wxWidgets warning --- Source/Core/DolphinWX/Src/Frame.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index e7c4fca067..a089562743 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -500,19 +500,32 @@ void CFrame::OnActive(wxActivateEvent& event) { if (event.GetActive() && event.GetEventObject() == m_RenderFrame) { -#ifdef _WIN32 + // 32x32, 8bpp b/w image + // We want all transparent, so we can just use the same buffer for + // the "image" as for the transparency mask + static const char cursor_data[32 * 32] = { 0 }; + +#ifdef __WXMSW__ + wxBitmap cursor_bitmap(cursor_data, 32, 32); + cursor_bitmap.SetMask(new wxMask(cursor_bitmap)); + wxCursor cursor_transparent = wxCursor(cursor_bitmap.ConvertToImage()); + ::SetFocus((HWND)m_RenderParent->GetHandle()); #else + wxCursor cursor_transparent = wxCursor(cursor_data, 32, 32, 6, 14, + cursor_data, wxWHITE, wxBLACK); + m_RenderParent->SetFocus(); #endif + if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor && Core::GetState() == Core::CORE_RUN) - m_RenderParent->SetCursor(wxCURSOR_BLANK); + m_RenderParent->SetCursor(cursor_transparent); } else { if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor) - m_RenderParent->SetCursor(wxCURSOR_ARROW); + m_RenderParent->SetCursor(wxNullCursor); } } event.Skip(); @@ -629,11 +642,6 @@ void CFrame::OnHostMessage(wxCommandEvent& event) m_RenderFrame->SetTitle(event.GetString()); break; - case WM_USER_CREATE: - if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor) - m_RenderParent->SetCursor(wxCURSOR_BLANK); - break; - case IDM_WINDOWSIZEREQUEST: { std::pair *win_size = (std::pair *)(event.GetClientData()); From 05c964e6d60cef5a6d49f69213b50f1720468f2f Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 07:39:04 -0700 Subject: [PATCH 18/28] wxw3: OSX can use the same method of hiding cursors as MSW --- Source/Core/DolphinWX/Src/Frame.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index a089562743..d8ed54087f 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -504,20 +504,21 @@ void CFrame::OnActive(wxActivateEvent& event) // We want all transparent, so we can just use the same buffer for // the "image" as for the transparency mask static const char cursor_data[32 * 32] = { 0 }; - -#ifdef __WXMSW__ - wxBitmap cursor_bitmap(cursor_data, 32, 32); - cursor_bitmap.SetMask(new wxMask(cursor_bitmap)); - wxCursor cursor_transparent = wxCursor(cursor_bitmap.ConvertToImage()); - - ::SetFocus((HWND)m_RenderParent->GetHandle()); -#else + +#ifdef __WXGTK__ wxCursor cursor_transparent = wxCursor(cursor_data, 32, 32, 6, 14, cursor_data, wxWHITE, wxBLACK); m_RenderParent->SetFocus(); +#else + wxBitmap cursor_bitmap(cursor_data, 32, 32); + cursor_bitmap.SetMask(new wxMask(cursor_bitmap)); + wxCursor cursor_transparent = wxCursor(cursor_bitmap.ConvertToImage()); +#ifdef __WXMSW__ + ::SetFocus((HWND)m_RenderParent->GetHandle()); #endif - +#endif + if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor && Core::GetState() == Core::CORE_RUN) m_RenderParent->SetCursor(cursor_transparent); From 4a1e8ba30a974d7a852e1ac4657da2c7bc9f7c65 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 07:46:23 -0700 Subject: [PATCH 19/28] sigh...fix #ifdefs in last commit... --- Source/Core/DolphinWX/Src/Frame.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index d8ed54087f..f9f0cec412 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -508,15 +508,16 @@ void CFrame::OnActive(wxActivateEvent& event) #ifdef __WXGTK__ wxCursor cursor_transparent = wxCursor(cursor_data, 32, 32, 6, 14, cursor_data, wxWHITE, wxBLACK); - - m_RenderParent->SetFocus(); #else wxBitmap cursor_bitmap(cursor_data, 32, 32); cursor_bitmap.SetMask(new wxMask(cursor_bitmap)); wxCursor cursor_transparent = wxCursor(cursor_bitmap.ConvertToImage()); +#endif + #ifdef __WXMSW__ ::SetFocus((HWND)m_RenderParent->GetHandle()); -#endif +#else + m_RenderParent->SetFocus(); #endif if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor && From ff6023df2793bf7c4ef81e90efcf0068ed3f09b8 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 10:37:15 -0700 Subject: [PATCH 20/28] Change wxString(, wxConvUTF8) method of creating unicode from filenames to wxSafeConvertMB2WX() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (Just applied to FrameTools.cpp for now) Allows one to properly restart Pokémon by hitting play :P Ignore non-ASCII strings passed to DisplayMessage(). These strings would end up going to renderer display and statusbar/titlebar, which can't handle them properly. --- Source/Core/Core/Src/Core.cpp | 15 ++++++++++++--- Source/Core/DolphinWX/Src/FrameTools.cpp | 6 +++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index bd4267c074..a8f2349c0a 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -73,6 +73,8 @@ #include "State.h" #include "Movie.h" +#include + // TODO: ugly, remove bool g_aspect_wide; @@ -129,11 +131,18 @@ void DisplayMessage(const char *message, int time_in_ms) SCoreStartupParameter& _CoreParameter = SConfig::GetInstance().m_LocalCoreStartupParameter; + // Actually displaying non-ASCII could cause things to go pear-shaped + if (!isascii(message)) + return; + g_video_backend->Video_AddMessage(message, time_in_ms); + if (_CoreParameter.bRenderToMain && - SConfig::GetInstance().m_InterfaceStatusbar) { - Host_UpdateStatusBar(message); - } else + SConfig::GetInstance().m_InterfaceStatusbar) + { + Host_UpdateStatusBar(message); + } + else Host_UpdateTitle(message); } diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index eafebe131f..4da736bbaa 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -632,12 +632,12 @@ void CFrame::BootGame(const std::string& filename) bootfile = m_GameListCtrl->GetSelectedISO()->GetFileName(); } else if (!StartUp.m_strDefaultGCM.empty() - && wxFileExists(wxString(StartUp.m_strDefaultGCM.c_str(), wxConvUTF8))) + && wxFileExists(wxSafeConvertMB2WX(StartUp.m_strDefaultGCM.c_str()))) bootfile = StartUp.m_strDefaultGCM; else { if (!SConfig::GetInstance().m_LastFilename.empty() - && wxFileExists(wxString(SConfig::GetInstance().m_LastFilename.c_str(), wxConvUTF8))) + && wxFileExists(wxSafeConvertMB2WX(SConfig::GetInstance().m_LastFilename.c_str()))) bootfile = SConfig::GetInstance().m_LastFilename; else { @@ -1646,7 +1646,7 @@ void CFrame::UpdateGUI() } // Prepare to load last selected file, enable play button else if (!SConfig::GetInstance().m_LastFilename.empty() - && wxFileExists(wxString(SConfig::GetInstance().m_LastFilename.c_str(), wxConvUTF8))) + && wxFileExists(wxSafeConvertMB2WX(SConfig::GetInstance().m_LastFilename.c_str()))) { if (m_ToolBar) m_ToolBar->EnableTool(IDM_PLAY, true); From cf52029b51b994cf81346642e598cc50cda2f744 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 11:12:40 -0700 Subject: [PATCH 21/28] Check if the game's ID is valid before accessing it to set the ntsc u/j register. Prevents discs without a real ID from crashing dolphin. --- Source/Core/Core/Src/Boot/Boot.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/Src/Boot/Boot.cpp b/Source/Core/Core/Src/Boot/Boot.cpp index 3dcbf5730c..8ef6251339 100644 --- a/Source/Core/Core/Src/Boot/Boot.cpp +++ b/Source/Core/Core/Src/Boot/Boot.cpp @@ -227,7 +227,9 @@ bool CBoot::BootUp() // setup the map from ISOFile ID VolumeHandler::SetVolumeName(_StartupPara.m_strFilename); - VideoInterface::SetRegionReg((char)VolumeHandler::GetVolume()->GetUniqueID().at(3)); + std::string unique_id = VolumeHandler::GetVolume()->GetUniqueID(); + if (unique_id.size() >= 3) + VideoInterface::SetRegionReg(unique_id.at(3)); DVDInterface::SetDiscInside(VolumeHandler::IsValid()); From dd5df1768859ed99c258a1c6e74a3b35454eb7d5 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 12:07:47 -0700 Subject: [PATCH 22/28] forgot to save my buffer :( --- Source/Core/Core/Src/Boot/Boot.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Core/Src/Boot/Boot.cpp b/Source/Core/Core/Src/Boot/Boot.cpp index 8ef6251339..8d000611c8 100644 --- a/Source/Core/Core/Src/Boot/Boot.cpp +++ b/Source/Core/Core/Src/Boot/Boot.cpp @@ -228,7 +228,7 @@ bool CBoot::BootUp() VolumeHandler::SetVolumeName(_StartupPara.m_strFilename); std::string unique_id = VolumeHandler::GetVolume()->GetUniqueID(); - if (unique_id.size() >= 3) + if (unique_id.size() >= 4) VideoInterface::SetRegionReg(unique_id.at(3)); DVDInterface::SetDiscInside(VolumeHandler::IsValid()); From c0992cc73e2cb4641d3b17d785a5196d24eabb0e Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 19 Mar 2012 23:16:01 -0700 Subject: [PATCH 23/28] Build fix: Don't use isascii() - just do it ourselves Bump required wxw version (for shared libs) There still seems to be linking issues on some linux distros, I can't reproduce it though... --- CMakeLists.txt | 10 ++++------ Source/Core/Core/Src/Core.cpp | 7 +++---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d77c51c32..81b362e4b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -457,10 +457,8 @@ endif() option(DISABLE_WX "Disable wxWidgets (use CLI interface)" OFF) if(NOT DISABLE_WX) - if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - include(FindwxWidgets OPTIONAL) - FIND_PACKAGE(wxWidgets COMPONENTS core aui adv) - endif() + include(FindwxWidgets OPTIONAL) + FIND_PACKAGE(wxWidgets COMPONENTS core aui adv) if(wxWidgets_FOUND) EXECUTE_PROCESS( @@ -471,8 +469,8 @@ if(NOT DISABLE_WX) ERROR_QUIET ) message("Found wxWidgets version ${wxWidgets_VERSION}") - if(${wxWidgets_VERSION} VERSION_LESS "2.8.9") - message("At least 2.8.9 is required; ignoring found version") + if(${wxWidgets_VERSION} VERSION_LESS "2.9.4") + message("At least 2.9.4 is required; ignoring found version") unset(wxWidgets_FOUND) endif() endif(wxWidgets_FOUND) diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index a8f2349c0a..9a9de8bb40 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -73,8 +73,6 @@ #include "State.h" #include "Movie.h" -#include - // TODO: ugly, remove bool g_aspect_wide; @@ -132,8 +130,9 @@ void DisplayMessage(const char *message, int time_in_ms) SConfig::GetInstance().m_LocalCoreStartupParameter; // Actually displaying non-ASCII could cause things to go pear-shaped - if (!isascii(message)) - return; + for (const char *c = message; *c != '\0'; ++c) + if (*c < ' ') + return; g_video_backend->Video_AddMessage(message, time_in_ms); From 5242f091047d87e814c9852eb6abb5e39a3d1315 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Fri, 23 Mar 2012 01:06:45 +0100 Subject: [PATCH 24/28] Fix Linux build: search for gthread-2.0 and pangocairo, then add both these libs to wx dependencies --- CMakeLists.txt | 4 ++++ Externals/wxWidgets3/CMakeLists.txt | 5 +++++ Source/Core/DolphinWX/CMakeLists.txt | 3 +-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 81b362e4b5..986fc4884b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -508,6 +508,10 @@ if(NOT DISABLE_WX) add_definitions(-D__WXOSX_COCOA__) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") add_definitions(-D__WXGTK__) + + # Check for required libs + check_lib(GTHREAD2 gthread-2.0 glib/gthread.h REQUIRED) + check_lib(PANGOCAIRO pangocairo pango/pangocairo.h REQUIRED) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") add_definitions(-D__WXMSW__) else() diff --git a/Externals/wxWidgets3/CMakeLists.txt b/Externals/wxWidgets3/CMakeLists.txt index 8e8d88afbb..5b9891bb11 100644 --- a/Externals/wxWidgets3/CMakeLists.txt +++ b/Externals/wxWidgets3/CMakeLists.txt @@ -875,6 +875,11 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") ${SRCS_GTK} ${SRCS_UNIX} ${SRCS_UNIXGTK}) + set(LIBS + png + ${GTHREAD2_LIBRARIES} + ${PANGOCAIRO_LIBRARIES} + ${GTK2_LIBRARIES}) else() add_definitions(-D__WXMSW__) set(SRCS diff --git a/Source/Core/DolphinWX/CMakeLists.txt b/Source/Core/DolphinWX/CMakeLists.txt index 2d7ed7e0ce..03f947b341 100644 --- a/Source/Core/DolphinWX/CMakeLists.txt +++ b/Source/Core/DolphinWX/CMakeLists.txt @@ -63,8 +63,7 @@ if(wxWidgets_FOUND) Src/WiimoteConfigDiag.cpp Src/WxUtils.cpp) - set(WXLIBS ${wxWidgets_LIBRARIES} - ${GTK2_LIBRARIES}) + set(WXLIBS ${wxWidgets_LIBRARIES}) else() set(SRCS Src/MainNoGUI.cpp) endif() From 4130116a852374c675a34e92cd88230848402127 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Thu, 22 Mar 2012 18:11:45 -0700 Subject: [PATCH 25/28] fix building on OS X when no OSX SDK is installed. (i.e. just commandline tools) --- CMakeLists.txt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a801f77fa..fe40c84e02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,12 +146,17 @@ if (APPLE) # features can be used, not the minimum required version to run. set(OSX_MIN_VERSION "10.5.4") set(TARGET_FLAGS "${TARGET_FLAGS} -mmacosx-version-min=${OSX_MIN_VERSION}") - set(TARGET_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk") - if (NOT EXISTS "${TARGET_SYSROOT}/") - set(TARGET_SYSROOT "/Developer/SDKs/MacOSX10.6.sdk") + set(SYSROOT_LEGACY_PATH "/Developer/SDKs/MacOSX10.6.sdk") + set(SYSROOT_PATH "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk") + if (EXISTS "${SYSROOT_PATH}/") + set(TARGET_SYSROOT ${SYSROOT_PATH}) + elif (EXISTS "${SYSROOT_LEGACY_PATH}/") + set(TARGET_SYSROOT ${SYSROOT_LEGACY_PATH}) + endif() + if (${TARGET_SYSROOT}) + set(TARGET_FLAGS "${TARGET_FLAGS} -isysroot ${TARGET_SYSROOT}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-syslibroot,${TARGET_SYSROOT}") endif() - set(TARGET_FLAGS "${TARGET_FLAGS} -isysroot ${TARGET_SYSROOT}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk") # Do not warn about frameworks that are not available on all architectures. # This avoids a warning when linking with QuickTime. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_arch_warnings") From e0941828f5601aa9cb159f2482a0b74b981ac638 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Fri, 23 Mar 2012 00:27:54 -0700 Subject: [PATCH 26/28] Fix uglies on gcpad/wiimote config pages. Use wxPanel in place of wxNotebookPage (which is really just a typedef for wxWindow). This applies the correct background color for the page. --- Source/Core/DolphinWX/Src/InputConfigDiag.cpp | 2 +- Source/Core/DolphinWX/Src/InputConfigDiag.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/DolphinWX/Src/InputConfigDiag.cpp b/Source/Core/DolphinWX/Src/InputConfigDiag.cpp index 87cecde27d..b3d57ae89c 100644 --- a/Source/Core/DolphinWX/Src/InputConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/InputConfigDiag.cpp @@ -887,7 +887,7 @@ ControlGroupsSizer::ControlGroupsSizer(ControllerEmu* const controller, wxWindow } GamepadPage::GamepadPage(wxWindow* parent, InputPlugin& plugin, const unsigned int pad_num, InputConfigDialog* const config_dialog) - : wxNotebookPage(parent, -1 , wxDefaultPosition, wxDefaultSize) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) ,controller(plugin.controllers[pad_num]) , m_config_dialog(config_dialog) , m_plugin(plugin) diff --git a/Source/Core/DolphinWX/Src/InputConfigDiag.h b/Source/Core/DolphinWX/Src/InputConfigDiag.h index 54f828b952..53f06a1144 100644 --- a/Source/Core/DolphinWX/Src/InputConfigDiag.h +++ b/Source/Core/DolphinWX/Src/InputConfigDiag.h @@ -177,7 +177,7 @@ public: class InputConfigDialog; -class GamepadPage : public wxNotebookPage +class GamepadPage : public wxPanel { friend class InputConfigDialog; friend class ControlDialog; From 7d57b925e6eaaa5f9b6a72c7f17d5685a924c660 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 24 Mar 2012 20:59:20 -0700 Subject: [PATCH 27/28] Disable wxHAS_MSW_TASKDIALOG because as of wxW svn r70933, there is a bug with the wxPD_AUTO_HIDE style which can cause a non-dolphin window to come to the foreground after auto-closing of the TaskDialog. --- .../include/wx/msw/private/msgdlg.h | 5 +- Source/Core/DolphinWX/Src/FrameTools.cpp | 12 +-- Source/Core/DolphinWX/Src/GameListCtrl.cpp | 74 ++++++++----------- Source/Core/DolphinWX/Src/ISOProperties.cpp | 24 +++--- 4 files changed, 54 insertions(+), 61 deletions(-) diff --git a/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h b/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h index 82b5246855..9598f7fc11 100644 --- a/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h +++ b/Externals/wxWidgets3/include/wx/msw/private/msgdlg.h @@ -19,7 +19,10 @@ // by the task dialogs only. Also notice that task dialogs are available for // Unicode applications only. #if defined(TD_WARNING_ICON) && wxUSE_UNICODE - #define wxHAS_MSW_TASKDIALOG +// (shuffle2) This is turned off because as of wxW svn r70933, +// there is a bug with the wxPD_AUTO_HIDE style which can cause a non-dolphin +// window to come to the foreground after auto-closing of the TaskDialog. +// #define wxHAS_MSW_TASKDIALOG #endif // Provides methods for creating a task dialog. diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index 4da736bbaa..7abe03d35c 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -1375,17 +1375,13 @@ void CFrame::OnInstallWAD(wxCommandEvent& event) wxProgressDialog dialog(_("Installing WAD..."), _("Working..."), - 1000, // range - this, // parent + 1000, + this, wxPD_APP_MODAL | - wxPD_ELAPSED_TIME | - wxPD_ESTIMATED_TIME | - wxPD_REMAINING_TIME | - wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small + wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME | + wxPD_SMOOTH ); - dialog.CenterOnParent(); - u64 titleID = DiscIO::CNANDContentManager::Access().Install_WiiWAD(fileName); if (titleID == TITLEID_SYSMENU) { diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index 20322673a1..5eed67a123 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -557,17 +557,17 @@ void CGameListCtrl::ScanForISOs() if (rFilenames.size() > 0) { - wxProgressDialog dialog(_("Scanning for ISOs"), - _("Scanning..."), - (int)rFilenames.size(), // range - this, // parent - wxPD_APP_MODAL | - wxPD_ELAPSED_TIME | - wxPD_ESTIMATED_TIME | - wxPD_REMAINING_TIME | - wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small - ); - dialog.CenterOnParent(); + wxProgressDialog dialog( + _("Scanning for ISOs"), + _("Scanning..."), + (int)rFilenames.size() - 1, + this, + wxPD_APP_MODAL | + wxPD_AUTO_HIDE | + wxPD_CAN_ABORT | + wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME | + wxPD_SMOOTH // - makes updates as small as possible (down to 1px) + ); for (u32 i = 0; i < rFilenames.size(); i++) { @@ -575,9 +575,9 @@ void CGameListCtrl::ScanForISOs() SplitPath(rFilenames[i], NULL, &FileName, NULL); // Update with the progress (i) and the message - bool Cont = dialog.Update(i, - wxString::Format(_("Scanning %s"), wxString(FileName.c_str(), *wxConvCurrent).c_str())); - if (!Cont) + dialog.Update(i, wxString::Format(_("Scanning %s"), + wxString(FileName.c_str(), *wxConvCurrent).c_str())); + if (dialog.WasCancelled()) break; std::auto_ptr iso_file(new GameListItem(rFilenames[i])); @@ -1089,20 +1089,15 @@ void CGameListCtrl::CompressSelection(bool _compress) if (browseDialog.ShowModal() != wxID_OK) return; - wxProgressDialog progressDialog(_compress ? - _("Compressing ISO") : _("Decompressing ISO"), - _("Working..."), - 1000, // range - this, // parent - wxPD_APP_MODAL | - wxPD_ELAPSED_TIME | - wxPD_ESTIMATED_TIME | - wxPD_REMAINING_TIME | - wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small - ); - - progressDialog.SetSize(wxSize(340, 180)); - progressDialog.CenterOnParent(); + wxProgressDialog progressDialog( + _compress ? _("Compressing ISO") : _("Decompressing ISO"), + _("Working..."), + 1000, + this, + wxPD_APP_MODAL | + wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME | + wxPD_SMOOTH + ); m_currentItem = 0; m_numberItem = GetSelectedItemCount(); @@ -1222,20 +1217,15 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event)) _("Confirm File Overwrite"), wxYES_NO) == wxNO); - wxProgressDialog dialog(iso->IsCompressed() ? - _("Decompressing ISO") : _("Compressing ISO"), - _("Working..."), - 1000, // range - this, // parent - wxPD_APP_MODAL | - wxPD_ELAPSED_TIME | - wxPD_ESTIMATED_TIME | - wxPD_REMAINING_TIME | - wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small - ); - - dialog.SetSize(wxSize(340, 180)); - dialog.CenterOnParent(); + wxProgressDialog dialog( + iso->IsCompressed() ? _("Decompressing ISO") : _("Compressing ISO"), + _("Working..."), + 1000, + this, + wxPD_APP_MODAL | + wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME | + wxPD_SMOOTH + ); if (iso->IsCompressed()) DiscIO::DecompressBlobToFile(iso->GetFileName().c_str(), diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index b5e5c82d1d..258a71e621 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -718,22 +718,26 @@ void CISOProperties::ExportDir(const char* _rFullPath, const char* _rExportFolde } wxString dialogTitle = index[0] ? _("Extracting Directory") : _("Extracting All Files"); - wxProgressDialog dialog(dialogTitle, - _("Extracting..."), - index[1], // range - this, // parent - wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_CAN_ABORT | - wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME | - wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small - ); - dialog.CenterOnParent(); + wxProgressDialog dialog( + dialogTitle, + _("Extracting..."), + index[1] - 1, + this, + wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_CAN_ABORT | + wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME | + wxPD_SMOOTH + ); // Extraction for (u32 i = index[0]; i < index[1]; i++) { dialog.SetTitle(wxString::Format(wxT("%s : %d%%"), dialogTitle.c_str(), (u32)(((float)(i - index[0]) / (float)(index[1] - index[0])) * 100))); - if (!dialog.Update(i, wxString::Format(_("Extracting %s"), wxString(fst[i]->m_FullPath, *wxConvCurrent).c_str()))) + + dialog.Update(i, wxString::Format(_("Extracting %s"), + wxString(fst[i]->m_FullPath, *wxConvCurrent).c_str())); + + if (dialog.WasCancelled()) break; if (fst[i]->IsDirectory()) From 5bf99f461b1730c507f4e0b4913f20c9eec7cb24 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Thu, 22 Mar 2012 18:45:11 -0700 Subject: [PATCH 28/28] Add some padding to the GameList column sizes on non-MSW. These underlying controls seem to insert 8px of divider between each column. --- Source/Core/DolphinWX/Src/GameListCtrl.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index 5eed67a123..1f8a5d9350 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -296,14 +296,19 @@ void CGameListCtrl::Update() InsertColumn(COLUMN_SIZE, _("Size")); InsertColumn(COLUMN_EMULATION_STATE, _("State")); - +#ifdef __WXMSW__ + const int platform_padding = 0; +#else + const int platform_padding = 8; +#endif + // set initial sizes for columns - SetColumnWidth(COLUMN_PLATFORM, 35); - SetColumnWidth(COLUMN_BANNER, 96); - SetColumnWidth(COLUMN_TITLE, 200); - SetColumnWidth(COLUMN_NOTES, 200); - SetColumnWidth(COLUMN_COUNTRY, 32); - SetColumnWidth(COLUMN_EMULATION_STATE, 50); + SetColumnWidth(COLUMN_PLATFORM, 35 + platform_padding); + SetColumnWidth(COLUMN_BANNER, 96 + platform_padding); + SetColumnWidth(COLUMN_TITLE, 200 + platform_padding); + SetColumnWidth(COLUMN_NOTES, 200 + platform_padding); + SetColumnWidth(COLUMN_COUNTRY, 32 + platform_padding); + SetColumnWidth(COLUMN_EMULATION_STATE, 50 + platform_padding); // add all items for (int i = 0; i < (int)m_ISOFiles.size(); i++)

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 W8UmvsFd71*Aut*OqaiSqLjVAk7}A;m literal 0 HcmV?d00001 diff --git a/Externals/portaudio/x64/portaudio.lib b/Externals/portaudio/x64/portaudio.lib deleted file mode 100644 index 1793b91480128d0863a151175e2bbd552e9b71e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1062780 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 W8UmvsFd71*Aut*OqaiSqLjVAk7}A;m literal 0 HcmV?d00001 diff --git a/Externals/portaudio/x64/Release/portaudio.lib b/Externals/portaudio/x64/Release/portaudio.lib new file mode 100644 index 0000000000000000000000000000000000000000..3029595193329f1c10b59d47520bd154a8587ac7 GIT binary patch literal 1161496 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 z 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 z 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%0AHeo^O6iD%gq?aI`{us^EI97ZlbgEj4gJ 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�iqw+KTu>~7ELkVbzz_flG+6M1 z;`1~p%#b%|zzcei8Ct>&3?AWrF7ff;xB{JbUXqv&JzbVTnSld56C9LUkdv64TI`%( zO+X^Z7mfv)kn{^m<)C#H zVU9trexbhLN~Z~w3&3p=P*H*?a=_zDpfhQ}+3zwqk%1Bvs4?jn0xq*wK#C%_P(NpI zNdht+l&J!oL&2F!g@Hp*3n>zyZb2(wLAoGrg)FB9)od~#U0BN_P+A3*p`ZhKL0j5E zlhZ-2?%;3)6&)b~u(@+^I@*U)aYDDyfU>a^k`3^x2~<2a2rw`}$_hmF0E&?+fD9?S)${Lo+z&_W$h6?z>Wr;wHdq^SqW5};ZfQi+2?-9VnrI8%@6cE}=f4quMzH5$O`_2XJZPC&0iE4~e|^5^%z(2A3vqhk*=wE5g9w z<`@K;Py^>B9=JoHOC8}?NrMU~P|5;V4B!S3C<~{7EXmAIDoq1t1&{*hvNK=DU{Jr2 zL+~g(d?9%z9;MU=CBoZa72u*9Rz3tn$|x2Fh5%?(ffTL)yAG0KVATV-lKBcY0p0}k z1RcQyYUjCwk~g&MgRDpg7t%nW^oCF1_Os6sHDc4g;5G>Q0w*{*muy<0qjofqM(oft%5+SevQD% z5aeS-6B)_RAhSTn@&`MDkAVzHEJ{y>G*v*!95fx_;|lie97u8I?&I&|=;I#{67T8( zX#xj>D`8OX0k;i64QsGg(2@?&bREbBP*}h!a74wez`(!&KD7g+1az2jd`V(@KyWDN zbQpg>a2w_js6Yt`hz|hO@1SxURAj;OHnhM31vaRf3U~H!3<6jBphiRqN_qlCtpd0O z1GW&|a=$9~`-0 z4yer$8VoiKl?zcI5t5mk3Qj}>6@ZdIXge#c`bOHR3eH@h zRip446x2`hOu;D*@;0bp18o3;k}9bEf$#*xk>JV{)HaI;x2d76Gf;{G)x#x;=|149 z7-Sl#IT`@TUZ7^X~od!X50BGI|I^2kB)(f1|pNXM1phH~!f;~ZF ziJ)>FxpfSx714@*P)I^5N>9*n;h-x{ARXEj;E)6lG6(p$#)At|Q0)df69n6dAmEM# z=mY`CkOg?594H1rZb0rLff54NVjh&$u{5|r4n$OHkctD`J;#+$K_v@j7XTF6puLSq zu7fsDL4z)!gpaG-2RRsP>l@TA!$0Bx@)DLlC#YSCt)2q4E%4MZpge$7SAk5yHf#WL z7XF$RcUuRf7t||?$68N;nwp@>AJjO_O)4%)ECDt8L5Tuq3Ir9@pgq#@pt~Tz4Fk}o zv4BKy%hnmxg#bktXk-Z9O9da$0}46N{#aL@}PJH zRoUR732>thRGgj`VPJp{$;HQmdk~-@ELi%0cN9RS9cbw~tR(`9TF<=VlEj>xc<_J# zs5~R00R)Z@P~GYgl0zDbg$1@nTe4Yb*QwB&Ld{+jvxdBQTkp3CCY6c~`V8qZ!PCjI41eDRRm4=|w z6jYNVRY4#FL7^Dr>K^Rq3$ELqf#Vpd`2`Ao3_%8lFANL}Ke#~0Y%nkgFmB4sW3;d; zT&;AB|E5|*hBE_$D+5UUU)XimEmCF+;!60FcRqe2%D~VK7Jt1~^=N-ed#vq(wL6|( z;$F?b0J@J`fU%x;hLz{4DKjG<^G-V=c=7-PgD4}&oJ~ta4}Wy!Z}?jE!$|1!@l^~A zpzFN_7;EP^T5m0w%f5ZB@e7~FFTOG`ECj2s^wgNuyTGt|vUg2^#_koR3=A*8;%As5 z{>d>Hh2%eA{J*NcrBCN%2qH8^vqWloNj^BY_v7XB>lqj%SwQC4DCBIr|KINJ8u1pU`Ma9R7#K3Z;(McBKDO!ncd9s) z_4GyAG6n{Q^jQ_Pg#SA$Q!JDpQ?4Hi1Ktl#L) z@BW=TT^Sf=fW;GcKk{yWHM)wBODM;@$VV7Lbs_g0+OrEbI?cxhYar2WhJPcbm4 zv4hP2xUV|@U%Ri^^IQ&r_5Y+?7#K3a;-QHh+l4k)K2EBQ!0;3-&a(SWvl-y}EWL8~S$-tn+ z4KioT4z_vEO<83W-+f}3@asf0149*9Tx6Ge(!5PS^ESkGUfI|3HH3j-KUm!OPM*f9 zJ*V5VymDCPG6^1JVBq8dnX}vU(DrnJ57Ty9F5Jq}Bk+NN!51u^pnG>yY-Z)h+dOUm zZl3Qv#lSEVEUv=(@V>gRk@C(E-h0ZC)*K8Bx547asxLL1=en`1b@?T8D~q3z3=EpQ zAoDlv7QA=m!_VbieIE_%PtT5IU?>KQTYf(JZ1D+Y>(V{k25+tFHZd^l1dFeam^}CK zzp6hj>!!SneATDT!0-<&USTY+(EOt&&HD0>(ywQ0Y#11v`9S7NUH9YGQn~g|%K!M& z68l^23=Cah@vmZ6=1zX(z;yq-lu7dX8y^@LE`Y@)H`KT8+wbh_>k{!MrFVNI1A`bp z$eiC*0)ZPd12boIc8x;Ya_&th-bo&A ze>v$l149K^+(BiNz2?n@$L@#!%uZx_rOCjsA1uCGIh^x(h^dY*-;Aj)WoMr;Ft7=N z%qa|$TDrqZK_c%dgWepO3g1PCjJSxc+aai z+|@T%wm%&_kAYzySbVOlfoSuBi;mN+EU(^D2+m|+U>5fbLi!VE8gGK6^0Ya3=B8H;tY3=f8Ts2Q>(i2(uw77 zHiSg7@JT=ER>x$D7~HpTNM72o|sSVlQ@#Z*@QWGS5q%mA(@g7*>GA zcd2fXNStxfMx8Z>cggQxrx+OCfyF2FXC6>;*UVl2^Knn?r)^Ie7|bL==2zsJxaZC? z$apgUUqt%leMcA=s=?xdAEqC9{{P3O*y+DY%GeGHFfi-~i<|E|vC7b>De_#HxjX~U zA}Iz2Rwz<%|et*w>eP`2|ZUe3 z1_satRsxK7D*S^h?Ly5Qn-v@FdRU?u7>r~<=KB}MG<`S_ByD`!eNW0CUP}gsGO+k2 zZ4X73`gyBE6z6$=xx0m%fnhILTsM8g-Gki61?vR7{@dwVS28gC2a6vq+w03VZ%(l3 z6W8Yxk3X5nz~CkeGXJ*5oNaCE+k@sMEZQTTWZJ;M&<_^Rncrrz$9?v?9e=(^|C)LF z76Zctu=pW1Mgx{>pS>>&?pSNkeB?L-gQOhD9KYw%txK4*J)NY^hA!^ZGhtwe1B<%} zE@kCWJNjDFeo4Wk$IlfR7?y&?C%--6QgABIVxqd7Ugg?jKNuL^fW=Mb&%VH+6!dDN zYl;YGj@E4k24i`U`PmsB0SqCmt9pz@zi;0B<2wUGHCQ}jht$oGMamA_lmdc$Ue8Np zU^oO8SE=0kQD6R$n?zdGi+epb1iAq)S0ODkC$(5Xqr$>WGbT4PxhTIlKdnTeI3>F{raUt*CBM8lrp#Q= zATcI0FFB_)B{im`EWflwFM}d8vWs&;yK^Wsr93mQC^elzLyA%pi}Uj+G^9K;uQ)$B zn{rc1i&KjzG^L<8qaZOk+kzNl$})>f6LS=bOF*|aDi|8*8N`$&!(+NEF(oyvm>6^L zB$v$GTnbG91#Urpeh!7k6ciO_5S4CIz-xdiKzTqxBdZjC$vP|p6cr>FCsOK~l+?0< zqWprC)HDjcm7HFhnL?o%Ny$Z(1<oLWR)W&pVX61b%$nM8RAzf;OVb7Oj$c{!lUmh6a5E+_?^?gGh3 zB$xs#??5LDCW0ymhzVq;mD0TIymCrw+RVJfloU#<$l`+37}wyhRZ=UGVI5lh=^wu_#U&{@nMuSr2T#f^&jf8&q0o@*l3b(; zm+b7Am;+j)T9OIN*OUZKPG)Xq38mROB_);O4rEzsQBiRb74l;$=v;9MBdReKLl21-7qB!{@RcU0WTTqvT;t?T`A;pD;{t|YFfhd+oRqsZu;jNd!pb}!BpjVU_oSIma zoS|T=ppu$dpa2q#19OTY91{g?1zQEMVwKdS0C=;ri1b3wc?TuDYF){&r!;pF*Vr)h|cNONni%uh$b(AMxxKVJI8&NM<@E8sc79;8f3(Vngv#Dn^JWa!c$%J}wfX8sS zSE!g+sTV3Rli-0u#Zm;f+3+wiq((tQ_2Q3;F$FgY9>7#AMDQ364`EYk)C!O)7Z#tC z6j`Vy!K+}Zq&h-o!@~qM)e+m+fjbsfNP)wFY~An#ffB6LGY;WfYNP;2OUZ(IB_`Y` zL^z;?D>xqQKfodE$rBdWYLwH$3xmmD) zhkKGLxgU~3&8bnLpc#coq0~$MaCc%F4i6R!YNRWOU#J+uaHHTZM=egtOlD~A#55cp zEbt~NB`FbVouL^O!x&*0!u5t`u+&af*J85(9zceM=F}+iQHu~n*@|2ukr~+pj7Io` z8vcMpH8uN0urvdY1uFJ{;O@jU93Cu)u@44@H|z`yU5ucc={`VNTnzD?3=ENAv1BNV zi-C)qfguVk#s_6_F_dyc_AqlZR6<$2Cs!$degF8P1Lmybo z8_MEhsN`p0SPeF>7Ruscn90w;um&tP7s}#dILObyuof(K6w2aac+1bgunsKt5z69X zh!SF8SPvG9gR;078ig1bHh{%ip)4-&KEUN*w=5T8U;weW778gT_Fatv@SgZod;$oN~%)k%_7MlZQ zaWU){W?+a1iyeltxENjvGcZg9i@k-ixEKUP7#I@3Vj@r$7lVli14ANM%mT{dVu%xA zU`PUsB|%wS40R$549Q@zCMb)GVTlL>!z8d6=!7;9i;Lls2m?b3SnL{<#l`SNgn?l) zSPXRZ3W&wUpf1Y5Fa<284P|jLM2j*oq=Lobp)4+jYEcG;G_Y7bl*PrcK$L+Y9W1s4 z%Hm?!FUr7>0Tw$9WpOb)6lGw@1dBa|vbY%7#26T|z+zlb78iqo7z4vpuo!5UB8bJs zkSxZ)Fbyo04rOsMbcr!AWP`=}pe!zi4Pp!o)4^g}pe!zii((86Gr(e3p)4+jZ(36K7!92u^=lP!<wKxOAT(H=BD2t2Xf;a=iJh0dmD2t2Xt2hJ0Ca`%wp)4*2ISB@a`CxTQP!<=1 ziv$Bh4p__s%Hm?Elwe?302Zr-vbY%LNI=dr;AU6=WpObal3-w11Xgzp%Hm>pEy2LB z8Eo%+D2t1MTatkx7p#sS%Hm?Ml4M|53>LG4vbY!`B^ela!Fpq%EH3b#Nj|Vxy(9wz zh{eUQK$3xhA1t;6%Hm=;F3G@<2R83Cl*PsHQIdfnA1wA2%Hm>>1?`0d>s5rZxELIy z7#Nm-)ww`fTnu?q3=D!`bwyAX7ek*E=sr78KA!|-aWSlyVqgFrc*V`I8Oq{fI4{M( z0J?{io8dB)#l`SWih)5CY~Cj*i;F=(nt?$KEG7bFaWPm(Gcarci`hU~TnwSo3=HC6 zu}CP3i=kecfk6T+)(mBFF)Wj2VAu*4TLootF&vg=V2}ih9fz{G!230~fyF*aGcbTy zTnyYY3=G@BV*F4R7lW=01A`P;40QM(h{eSaA;Z8R4Hk=mvbY$UWEdEBfW_LNEG~xm zG7JndV6nwe78k<_83u-(V6ih$78k>F83qPfu-I!Ti;F=>mVsdxSWFDc;$qO3Wnhp4 ziy1>%TntgN3=F%$VsTIw7ej?C1A{zRtOm;BVpuH8z_14_wj9dhVmK_zz_1rAb{xv$ zVt6RazyLaBjho>ql*PrsEyuvH53G(K%Hm?slVe~2o#4jJU<74xF+|HTFzg4bi-)qf z7%Jo#7(hpwa5L0ESzHXW4N=#pn(I1Co+gR;07w#YLu zsDZ_HKv`T2H{=-@)WKqRpe!zi@A3=`N5Epgp)4*283hK0qhK)wD2t21MuCAr11#nM zWpOb?D=;t|1B=B&SzHX&3JeUIV6l2Ai;H270t3Twu-F19i;Lla0t3Sdu-FkOi;Ll% z0t3TIu-GRki;F=>k%8e9SWFDc;$m=6WMDWA7IT5JxESgb85quh#hRcjE{1K23=C(% zV!NO$E(R7Q28IG~dB6c>aWVKRF)*A1s|$p(xELlXF)*A5i%o^HxEQW0LC%liX1EPy zaWS|nGca5PtMi7kxELlWGca5Ni%o;FxERhTGca5Ri(P=SxEO>~7#OaA#l)a2E`}Ht z28OF(u>>fKi=keHf#DihtQpGUVtB8@z;GQb_8H3JVh~YfV7LJmlYp|g7!p+(7;b{a zQlTs^h89%@hFf5<4k(L@;fyK+!)>tG1t^P)!9|UM;SN~L1IprJNLOQExC<7`hO)RA zE~+swXo1D9LRnl4pVb%`?t#U=Ls?u566y>L+F&smD2t21Qk{X}K3L2a%Hm?^RcBz( z0gFw9vbY#7sWUJ<0E=CNvbY%dG#D5jg2jZOEG`BE4F(2Xu$T#y#l;Y$!N8yg77K&2 zxELxm7#JRb#cH7}E{4S#3=D4N(9vOF z0Bu$0W-x%VxEKO;7#NJe>O!F`E{1#^28It{v0^BTi(#S;1H(tK*i(kOXCMF*N8hFnk5;ZGp157*6OiFnj}xoq@8r z82I!U7`}tWgrF=g26H_Ih96)tYbcA0VVNES!%wi-DkzJK;i4V`!!NMdRVa&#;g=o* z!*8(IKPZcfL0O-H;SX3$9m?Wj@X}{s_zM>EgR;07O7s~R{(;3Rpe!ziMfwa3|G{F* zpe!ziBcMbDPNyfJEG~xU`V0(=V6oRw78e7r0RsaQSWFPg;$ko~U|?VdiEzpU|<7_?S!(p815S}Fc^c~_ZZ6JVvsdvU@!rT zDMDFX4DrSc45nbQWGIV^p~9Gf!3-=`17&eBOg3g|po(hqAaB6ipZytibA2p)4*2PZI_PYp|Fvl*PqRZozxH7)rommQWTKL$WyoLn&A+9m?Wjm}JhtPzDy824!(EoHJ)&CJ|(Pm0&S#D2t0Bz=DCH3M>`^WpOcZTQV?IgT?rvEG~xERtyX^ zV6pd578iq?H3I`bSj-E`;$q0L2A!|Lz`)H=0A+D8OtfZT5Cp563T1IIoVI3Q5CV&x zhqAaBcx@OMgu!BhP!<=1r40jv2w2P(%Hm=uv4NZ;$IVayWpOdAuwh^T9kR&Hum;NF zVmNKXz#su*QyoK^m-X1C+(Z@W_sVK?W@L49enSkhW)FkOhm$Ls?u5 zA@&Rma$vCtD2t1s*PemF9c;%$D2t0>r#%CMJXqacD2t2XlRX220$A)Dl*PrM>A=9C z2o}?YvbY$+92gjsz+zEQ78gUa0|SFHSgak&;$qn3z`)=Ews#wp#l`T!fq_8SVnI+A7el=x1A{tPtQpGUVp!?Oz@PyZTMK1zF)PcorL0Mc3rY;N&x?nL&D2t0B#f5=E4=k1eWpOb~bzxx82aC;wvbY!y zyD%^qfW?kOSzHXCT^JY)!D8Q`EG`BGR|W5xEOL>85lgl zVP6PkaWPDHWnl0Ei_M0zxEK`O7#K{zdR3t;E{13~1_o2GSUi-)#nA7@z+eUzn+#=f zG3<9^U@!-Z9fq>F7(Ti&FnELQ_zGolF&MZrFj#=qnLt@w3`y<`43=QAG$@OUVS_sZ zgB4h83zWsh@W7pc!5S>~1j^!K5b|JPumOvSL0Mc3J{}AVwqUUUD2t1s+k=6@4lLFW zWpOcF^~nF--AdVDJNr&49AF7>@L^yG28+o+SzHW`J`4;YU@=!H zi;E%Ehk+p!ES3pnaWPEvVPFUYi%o^HxES{NFffFJ#STGPTnwLm7#JeJV&9=GE(Td& z28Kwmm?D(L#SrAnz~BxJt1u{wi=o(;fguX4t{lqZVp#6Wz~BK^w;IagVmRr`zz_{q zcNWUxV)*RKz~Bj1_Z`aOVi56TVDJKqNkCa#490#83^8E6=1>+FLx>*(gEv@R1eC?a zQ0B+L-~$$`g0i?67Wy$T_=3fjLRnl4r~DWgV!`H}gR;07-uW>w_<_}Zg0i?6Wc?W! z{J~<1P!<=1uRjAr99VB4l*Pr+=+D3q09MxuWpOdA^=Dv+2dmo%WpOcF^JicP1gpCR zWpOdE2QV-MfyKC?EG`D)00xF&u$VcN#l;X4z`&3IHZK9n;$mnDU|KFqdEG`D+Kn8{+usU@pi;E#Dkbxl_ ztS%19;$mnHWMGH@i?u^pTny_285okmdN)H^TnrBa85mN)Vo#tfE(XRR28L9y7%P;; z#h?_#z>o$OQ-iX&7@~q07}CLFaZnZ)!^9v4h77RSR49v!;aCs@Lnc`46qLoq@HvQq zAqy<_9m?Wj@CjyM$OelAKv`T2`N0efIbgA3D2t0>Mlb_IE?8_1l*PqxB$$CA4=i>9 z%Hm>p7tFwr4;K3bWpOdchcGaJj&O&7~De`7(iDea5H#ASzHX|Aq)&fV7=8) z78k>U5C(=~u-FnPi;Lkz2m=G?aBpsgGf);6!|xCV2GBYF+zkJrEG`E1PzDCjnYi2x z+E5l3LwqO$Lpj*IWGIV^p*xg;p%EN!{ZJMc!{$&1h6=E{?NAmM!?jQbhDxy5EhvkN zfisMOp$aU<3uSRJIE67VRD;Fbpe!zilrRQ{8n9Rfl*Pr+8OFd+3l{5zvbY%5hA}YI zfyFjLSzHVk!WbCp!D3gSEG~v$VGIlnV6lHt78iqTI0Hi?SWFSh;$m zTny#m3=GX+v1%xbi(yeX149c~Y#Efr#c(v7fuR*Fb`r|sVt5BdO}%T4EYfZ3>{!~#ZVR(!;}aHhEA~93@D3>VNV1DLl;== z0F=eW@Hzr=hBPeKv`T2A(0FWePFQ&D2t1s zIFf;(A1qc5WpOb~iezAz02Z4DWpOd=h-6@B2K!?Vl*PsHAd-P$B3RuMD2t1MBZ`4x z5?G7}%Hm>Bk78h$3>MRdvbY%Bq8J#afW^F^EG~wOC9h$x6$F#F~7S9{M3F1@C4o8=$_!_v1YBK=tx1!pa1Sa4FwaM~&6 z3#rPYmjpLeLHIoW6W-0fa6xeOO9=mf7jKbq=>@ochW}9<=aLZS*_OXZ4eP%kxOgW- zy&W2#VNS!^j%tMd1wl?+1$78M!^svoWWK^WMRjEUg1QZQ$b4_z1J{f*wzy80VqLPq zd-cTHHS@l^K5cj2`|g_i^}SED6l)#|=>+F_b;&q1MHMGcmkXQ2x{fu`d)wU5ZE{b& zs;jsPR?MD!)Me)NGNo+g%^$beFP~TSKGL-}ws3Agi`wxE-p3}&{p|6bRCZgXsq$v2 zhYy>ehuHBPk6PR(R1DA$yV*|rTIFy zWY0TKzaY5y9V9$-(fE33{J6LLW#N-A2rfPYQQx2<9z4+<5k99@y`H{z>IK2YuORZL z(f9?S71d2W=LPrhFsx!&Q}V44jbDVuFGk~+pz#-^wM!w#ug>KBp2FuB1b6(0*srkJ z-5psz!BeBDh)lWf|mts?7D}8rCaHlB5{^r+aPyB<<3C<5@P*~5syr2(_?@(R2 zs^ldiecGU<$7|v#{1S&R2rjXQnAdPQ>!Q>egnEUO5wf$9_^~p!T+Ts~9`i1&d%@!K zPTOLeG^c&SMZpc}3=2-OX)tO0+0Zk&;-cV&ObGwS591qCkoZU9bG@b_@h#Ex7lz&} zwPC*?xG)hCK90_L=iA?$7hGrn;X9%6ANJjqzdYxHVACoFh964*x)OG+N?kYOyx>A! zi24Idgzk$YxnH5r*X%e_etmG-yMF0Bgnt_x!{+-GAkv#d!vt10BLx4AXwO3Da~A|x zKZk^u!)sxy)k~ zjsFyl{|t@)$%U&~cX77+zUfXaVa1!H9>}2CkH&w5#(#{)e}cw;ipGD2#($2+e;|uy zKN|lL8vijG{|OrZDH{KQ9GdxP{6}c~$7uWq@@V?e_>a)|kJ0!~(D+Z$_|MSz&(Zh~ z6wvHP<3B>quXSeUMai%AjuTIY{z~-_U^H~7d$P=~*Rg;0b_?e-yQbUo#Hm^S`s}-!Wgp{C zIn7yV|Bf+wjkkV@K(ia~m}0 zDKP)3ws`-X(X;J=>Gs3g4DU5J|5o&py5+H;Oj%;_(b;PDdAtArJJaGj;ii*_#0INA zmbFtd-y_vutZ4i{@q({U2&8y6%jTYDdiKel4NczW%*pg4nU@6HBO&F5gV)l#K5`cY z7X&zjvmRt%IP!|wR89V(VAlqSe1q+@{gFp62zF^REI6qebx`5g68FGGAoZX*Lidgp z>pqucOus1D$Ih_eWZWUWvdolX*z3Jx#7kr15r=YPdWc_TQ zMio-~iye*6gvJMrZz1b%xj19(;Z+v|m⁣(>OnZHSF*?!TpR3s~AEfqZUnQ4QyF> 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 z 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≥HVRswZ$?a=Z7$W0)B>vq=cjRgf*c+DIe5? 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