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, "7x8pI(%+D|$ruIr- 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%0DI5i?EDemP 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 z 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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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%0D5p6x1IqJe-O-nNAlMT$m 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

PFOgM;v#yQ!gup9HzPx^~MeRfA7>M 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

I(S`R6sr_Fr1 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⩔*KCU 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

to39M#@)>!uKJMkFH0~=5(eSjCdOvzFezG0C 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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/Win32/portaudio.lib b/Externals/portaudio/Win32/portaudio.lib deleted file mode 100644 index 01213c53993d839d41b74757bbb6256d751b13a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100706 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

@RG)c;%yWjy>T| zKU+6+!mU%c;PwR9&1~PPJ#YHXj)hIF_kVKu(4Vxta<5^0U+lR(-}vj%2aG;qT}{8& zkC<@^&h@9n{_7(j92~yxsZ)>c+0gISFFt=7?;$W1$oAbk{i>VZ`s#w6#rIsjWyaqx zJr4CC_Kq=!2bS!(aLy@z*wOyUa~I;{fa}HnSo4wB9JadRpf~5Sihb*v zdp_Ur^ZTj~y=hy&M}|HwIRT(<9%1OIr_Rc{vb`0MWv9$Rt~6^k2TXY~8vN!}v_>;fLQm^ZRcWj=Ary zcXkzT+iUZ}=3M{Cqwn5u zTG`To~kQ@r50cQCsV z`}tE3zHRNvfx%608>8-d`08^F)Gg|YZ&nW>yjbxbG4ytKB|HPxpwSzXiMr@sjrKqnhFNY1*p^o zDQ2b)v|FiG3r~Orbtz_~zCP6^MmD0&b+LvNGr~s3gYQ%;rLnFf^^Anu;6X+wneHzD z3*gly<*RgaI9i`--NqI)x2HPBp_$>7QKwS687RR#2anq-k-h#J9yxJ;T2+_Qbd0AF z*xq$Y24*;rM0EsE!a&})UCw>S&cShp`Oj&ti%y-=H1$FVv! z+)dw^y)Py(^J9(LSI2Jh0;koXx<)*rO?7&Q$)?@ddvHQn9nNO7O0jO)U0Rx(Q|-Eq zjcww4G{xMsfM?enuJ)i#;#^Ps%tvSrQ=8Sz#V4s4z*8&?suowZ=2Wk1^s|NeA;`s2 z?Q+NvZ%R`v7RI?yTYF2&)2aIT_4V_?|Cwrb;?<*_t?n=0k&e2QZ9_F^2>k<6E!}abyDz_SDbn3609PxoptS!}>^Jr7JKIPj- zbN(?t#S+!=dXQooEnvdOgMt)OX>V-+qhX4PV6K{C3b>HyKDO(oqaYu+El)8kym@Rh z=c#)=Wf0~H#d4e4#G$dRqcPQ~6e<^9g;Sk;m|cHViq(q;9xe7Xwfjd(-Ly0by725< zHhMGhw#%MD zOB=8z>_$`b8{=S5wh5-@H|lNMJll3C-eV4zeFLWEH}0}+_t>`0w(W1WEx4j4H+w}{ zZq~HmlJ{GJD|fCt6e+EJ7U83xtz4DciLKzurMb%?pERD^4pyzFcHx~SRs6Ck21KrICpvw`v(fwVcD-y zyb?)`d2t<99vUj`GFYastjR4fbMT(*wz4dDx{6=B9f@x}&OYwp@ho2U3oDTzc4oF$ z6lRWDA6&U3xboTHYRS5p+>^m28(Tt;v#fS-)ki+-0}B}J`Y6jS2qJ62#p78Mv7WMF zT6p00hJT<~<9`*-w-m@>_$k6arDb6oD=A=O zagP#>IZztjkz=tuV|}?jjQwBqxA=xZR{2|O@(9E-OvjID?QL*mSCYV6V=TVoay6!m zchs_Q4Z;lUtnPgRVnMGml2H*7`=6pBT!3S{gO`eszFGKBWbD)s zmNHp^nXSZ6Fk-}7Ejg#+mcxA#VPb6RIv6psB4zet69P@;#xM#@lVD)S`fD2`HLpod zSa0sdqp)2;>)}cV0wRjSpS#h!2BxwbAe3Eu>0j&CR8BZ9MuSgaH zD(ucX$Cy$1rbnJQE8~uD3lEU=z(iKYg|OrBUtbU2*NDP#ULb6X39O98u)kws6w<^w1|r%o$2ofJ9K-l^ zRH1kwFX)1mu^#o&fFA?T%z`ewb1VSn;zV2$R>tKfMiOLtDYG)pZ<9wPUKU4PTE;Mj ztCp{wmNC)EQYx&B_orDI)2xhXR>m|dqrC)lcW!yiSGQ?aMh`2ab6oy9Ng44O1TJ^O zdvLDrcJA?QT#oY)7l!P?TVxev@?<*j*^Pf=k_4`?_H#>+1d`3~K3MrtWQ9*Y0#$x^ zE5osQ_!ccEXDwo5_*M9#ZQ{%oclkLvyeCoCmS_`r{|Ix4V3zZWm_*=sRgq)lpaKrIK z#_;`}gCG*s_%`ea%)l&2l^orWF&TVxos%;Y=J(|&d@r(Vp4NECpLVZ zk(1K_xmk9J#v+X_Mg2bwJR!rwS$af%{A>V_% z9THz0blwB`cgTkzkxu91kRL#@GXDwrFUW0>y;0E5AXznEK;8?v6Ot8xFF`urfW&;T zvlmLZA0$hf1^F`MA&{R#9tznTdB(kK=P{50$dQo4A;&|4D8KVG$fF_o30ody8RRjL zJXiL|F-|r5b9QQnpTfpz@=cK2Q2S<>R^N!bvdU;vCEgjpgZrX#aEwM#TLZE;Ss1s( zdBOg?8CKOt=V7@sypOZvqr%Kyr#e2n7%IiGnTL>OWgERAyMK#a>o0JM4OFdphhU7*#3b9rpRS&FZl1+b`SuF9fozA-W*Y4`V zx*kiH+^f^CyK1nm{XzxJQm#7_wxf$m!d5Ch%T{!&lTy;&?4uWw!jDJJfF{!eXkl9v& zjgHE+1e!9=Ncb)4n{~P#avbF2kf%XD0XYNmzaeKqZi3`>=V{2x zA)kZ%6Xfq9Ux$1iax>(MkZ(f%5%PUVU^=%!{uz?(T61`s3fd-(wkT55RL~Y*t3~=H z?BHoCXp1L3O$9C7UKZ7PnhH8i1q}`~()|1%rh-1u=$CU2W)dn)t}QJNO(7$o#peua z;WS0`Tj&G-rzoP2a<%%Ipi~4G;3RMXg8vjf0I!pqut=`n2;cz@vmR#|q5}j05F%461l|n``gh~2uVR|NF;*~0ds65hs zi5Rm~SmUG))GHAH8sc&~LsxvWWYOfE5i5}eu`&uWM>%5|C#7-5kphz>p1iYUGf53N zlLaj>h$bzFmA321A#{;5ZHQC{>(Q0U#0oH~Tg>5xO;env7FVRuX=?E_wRoCZJWVZb z@HUj(j^8|L@goy1r*e5AWqeJjx^^NjnxV>~ay%Y$&Kb|FP68_}DJcoz5?V+nF}p=i zgUbLg>f<;i)A8UaO;w(zD#!aOMQOiBH1}l1CR^$MU;O5|U7ulc&KA}dmsa4}w5ppl z3wr7-=oYcF@Z`eVOP1V2mx5>9$!ty%-F?Q8PU>5})-(Cc$>DomHdbCX*M-5=&@`u+ zUvjtC#cW>WE||{A47?bp2nh2{A49gAg=(C1|0x=Dz6HmvNeDM5xB@6zZ+w;14J|s^ zmS>^{T4M7+-%{T=yNftH^su8GJ86Cu45QsNF9&$99eQh=Dr;h9_3UR z*2xvWH;qtU3Hz2+Iu5t5*yEYF>b#}&wML(v zRf^4Aa$62U^imSN!$}<7@MXy(v1CuqWMttZBNWl{2V#wl&atwK0f_mCcV9KP#)`MD zYmL{F#U(xM*Y52pLJg%39{|>QxY4{c0zL$o7Y)_`+rQu&Bb}tS8Z^iDV z;a7C~UK;)~TpE+n@Lw)=FAe`oV)xSUE4qCz4Zot>_tNm+){DpW((o&~eJ>6F$SmT$ zH2e$1?xo@Xwb;G1@rrKWOV3|`b0*v8rRQHJb}v2rCb4^I`}_Hs&JT`1x^c@%J0Dvb zdg0mMMP7Z+FwPOXm$v^Fv3qIzw~F0M+n0AcwglgNi``4}|FGD- zH2*y@Bh2=BY5pT(_tO0TLhN3e|1ZVvrTH(xty8woOY^@{>|UDx=f&=&`9BDCgzKY+ z=KmbAduje}5xbY>{~fV=Y5wyLWcps3|0c0}Y5o=6zL(~Ihv2<*{-++q^u2Wc|0VWW zBVK#p+~}h1|I_z-U%m4C6;B(+@5Jt<`5!cx>3C`W&k?(q=KmJ4d+Ge&5xbYp|F|Jc z-%IDO==QyI{tpS>OXt5s>|Q$mf`gg9m(G8g*u8ZAPmA44=f6MZQrSK)oqvtklhgTM zkGPchWB;vm{=22ziE0toch4?EZl)ADYSLZ-0$unhNP7h!9TNyhXD&EtWPaQ$M%pXD z%q}V>?G+$thf$n=sS?mC`oUCFNqYrIJe|>((_R7iS!rNY{>c294ktDH+AF{wFe&b9 z+VFktS6~l{vd`JR_nB(~_h;;>IEunKl=e)}#Z?h?llDxIWE%CgcqYI%aeL?Ltg$h5 zpCLR8zLCBO_PSQ)r%E24_Ds;t4Q$#oL0xNeTl1V4-PCmDgV4$U|IPADFu$!aQXdVc z`24|HzJ2ZAU=L?0Zt801>>xG1=(M+ly}c@>y(M%rGNipFBzroA#{?;kNSMZa6TKzu z^(5xs?BrlK555hC;_ndpJmV*qruokmT0!8|mR7sf&Z( zV%-V;@U8IUrsg+#W37m?^)ofUF~+u?WZP!jwmG)#R@-)mZQF>oA$f8Pt`ec9+d5BQ^Vo0R$;Q>GEL2ITy5K~vu&AJi%>4OEK~Cv$7B6~vgMna-`L7`zk>Ux zsrijJ@SYW~oKeqjo0{KPiua{>oekS^Q}Y{lLK`WzyG_k+?7(_ly#5Dnr>Xgk!;et> zXnl+$OwDhUL&NKL;Lb8Nzj5zT%BMje;}@ppH|TL9s9a7get!*ipqB+UhUs;JejDz? zCfr5TKp0CN$z4ks>-Xf+-0PrVEt;{lkGX*bYX9h(}O^BXQRE>nDtv;1JvVw z0_g@afG8RBRLPk2zou#(()7_l*A_wgw%8@9{D7&zlS9FKOc;@6NTQPZRzJK!RPI_2 zTP3uz36T9)PX`{(D=J<4%=B1h(a8n&nALyTFzkWj&Gg0kP-OI9)*lvTlt(FBjsAmv zvlffV5)xjvzWq4DSPR|4`Y(MH7*C2=KITcW|56e-vf4Tji)71kI||pbn%qTLw!Z%| z5;)SOMMrSS`mEpz(@zLIWN=TZouJfCP(UjSGEv@O|0SR&#BK_WJ%E^e9}5 z69bXYOJ(C2ORtt~8yqNH%ie9e@(8ZnWCCN&jug8Do#6mwcac*290#bYl-dhz5Q=@d znMcaS9R<5~8Ae-x02*GZEth|(HVafYMYSV|WNu9sZ(M`JTAoeHaIOW4alpa$nKyM>aPj+_fZ?e(8q#s< zZN?_ro-|j8UYfgu@=0!q?(ZjFfrGtn@$LvtV1p@~o%;mBMutWdO{>`FVoW&t_Ou!O`gtQrc;MhcV_CcQ9LSgpSH8 zmdav{O3qjK>_RLVk5NJV(rj&WyukR28h_<#_)3!K~l$YKSyPZXBZ{eg$Yh(hXgC zb#5n8o>1epfvxVB4;Oh8ZAiH`und&^SJ48tZM_SX{?3qlB#(8ZWh(MlCda zHv{c#Xjs_??J;Pa2xc0mVYC?`+GJ?Qi^k>j$BFiw9lI5pO4)~b$_Wy?A2gNT3}~Dn zXTociVVooy7tO2KXP~L0m19PtjP;$XxvX}1O{44maVtcT&ha=#X38>DRDYTy4#xDT`B@jZ;eR}O3uVsNBpg$^jJmAws)%9bQN ztk7n{^V<}Mw3~I;Fm6SBrsLrApa&e=tQ%*%BkCKWIy$Z7$0WzK^Ts}qO8yh;H?jV# zdbJMtpRPX)f3EO#*T>hLe&YF(htloK^JOs7BTct*yEjy{>+pY+Xm{X0ZyJ202No)B z;Ls&F#`ug5XcJT{wDF?72kmsxc0el-Z5|rsTcRz8Hc2#6-j|5>9yE?NJ_ExGD2J)> zBe5#cmP0#BH2kx}aA-*05snfId-^xc8Q?-kE|uza21uV*JX7Pr>kN?ouEqc`bnQ=T z;yCNv?#dY;p`2;F(f@2Vvl)2JX5ii#Nt^)|ODqVoM-684n;~pUT*9#z!`1R%{X;V% z+^#n8KOj$Ugjm|PDa>Q`wtB*27_WLPpSvuLk;b}4Ty<2iQa-@Z1ysu8JeD$#Wsb+f zejHDEq{H9WelTbF=<$m)u9e&VF~bBxtioQrHVQ_}oZn@;ET5YxD~#<64j4>PkTTC? z``~7MVMe72qcA|=OffC0RwbR%^0OJk6uL@>pOG>MMzp9a9XK8w%`=&S?a5pk#zJ6P zu*n{!TKQ5~IA2k{g_xh4mUvHi#+5QLZ`c;Al|S}a{OSONo25S(mP%AfyjH&j%jJlV zTV}!1>9Q<_rNd?UF)XuOmd9ZUAj9!;{TY_Qz{Jb-p=pViYkx%E=gQ9su(Y@=Q(&3p zvNXVQx$9UnE@TV2K~=aad-dj^ZVK50=fYl=}cqHzIM&2w2v;EETY<0U%z| zHdxrwNDfwpn_=Oc5yG@Q4RyWi=wHCn>9QP)R9jq@>97RQnd8S=2n%PK@nhWt3rDy3 zu{LrqWCX%I`ZlPWT`3=oRG)WQieOpeI#v{0LD#Xag@s3V91E6C*RlQuOM%Ohhf^fq zw&*y?oQ^&Az{il&Wuu-~B9}8wy^%tA52|>*6MJ za3Q(u7PXm!vn**msn3!|xaiBytWL^Q>fm@t;4n2ygmu2L2ppS4;OeugrYMxmucuZO zCGqvCy`Rhfr}kd^*e7Tgu6oSw)m5zN544MDvy&7ykh&#ibrehStR=0j&8?=J zRptGvw7ICcDc0KDV3KgenPrn7#a;7VW2{>48X+}0+Sm!Gz!?rPB9#i|YM9n4BOVbr)i^1?iN^n?lH0}S-S>^F9O z6sc&!tuyC942fQt&x7q&%obh2pKUn?ueR(lJP_=G+1CQzkRuGouYg{d>**ys9(cd= zG;iM>p};6u@4SCyR3>IuuLAcvA0;C2ekzc}TQg^=%PVo$h#v#*JCb>8=G-+O4+duP z;Q#`QBse-{uTl3#wDaC)4lqqlTo+!LJAe@%NZ3cx6P&xivk-R)aDO+`>w)b8dVfyh zt@$ex1Be9H9~$a};*v>)AiIKx<&%fEw@2$odc7}qVb*oZ9Kvk6`RjMe99|Ha)7;t^ zj*V=d{cSvwJ~hXfMdl)QibLRJ(2{Zgs(Dq%1S(o$(Z=Wn_!uaF0lo#(x>n=9v`^-= zPv*2w=Cn`dv`=QE=;WET_&B|7X7#-A!ls$Uk+%7<=9ZZ)VX)YSXE#Jb3r0Em2|ub$ z_*^AEEPtIYnYUw*Uxip=NKX@d`<0*MewoP6lrL~D{JLlI!PVS|KW7(pmvI<(4?- z`x$-X<06;l^t3kdM&_i1?GqEW$0cl!P1qijusu3qdz6eU0c6VC`{b-;U9~v!%rdjB z`aq%%B{ZV0SRYN0I3I}@C$g=OXfGx$=j;MV?t}A1&fUe3z!*y**_LR>&hJ3}5R!HO zmmz8Aq-p1*lS`*m&zMpKr)O2lwO86XX@%+JjE*Ykb#bsUv2;q>Iccb>a9Vk3c?n-% z;TosvCg7|a5QI;kQCw0}QdC1vdjS(O%!w&1Dk`b0FRVCHcfYDPRVMir{ z)xh;nNafK69^ECds^kom)duEu2}I45SJDNMI`l{<5NBR>X>|>X3qN*}S-V754dy%X zMTJGdlA?+!HC6EYV5K<9g+L^dD=w|Btf(%nDXo|?skE$QN@014VL4$Q?Ziu~mQ1gy zEGsOXQeIjO|3^hZ)Q`&S7$>x{c4Ap+br6Ha)WXuT!ii-iSQn{q|A(EErk#+Mhbjx< zRq+6{^;sUlpmKK*+m(oprO>K2(YGGMz3BH_DzT4<= zEQDKS+mToojuiiMz7k`oG|M+4Jvi~fcV*c5+DTlF&BjB2d3qavRfEqkvvLkpb)z1x zRPl)c-PSpMCZ_Bok-o9!;_$AOvGk4gpKyxUz1zdD(a|9t_66TrsA z88s!6+)mt-hH#=)R@dUu5T1C*X|x^B`YUVT%#$uMnb{+-kN7}@D?e7l`Ao1VSXd=+ z#@1Rc6WK%Abz-i*!<_h=W!7yd1^i;($ekWn~i!i+ICST2Y1TubjjK zfvv2aR&AcsNW2TTf^0Bm#&jLHubcwXom#S!aTx6C+?^I}il3y;mn^$+zQ@YqGc~k8 z{8=f+#jKoJ^erdK?b!j=>6I%5sZA@R~H~^Y! z%H)zW@kkbrp0aX2HTNhgD=C~(TN#>MRe}E)@{3B!;`{FlM|=OveCmCS4)lDMT3xs2 zPV&6Y@c5oDnKQfrKH9y`@c8Xww$JMfZ;jZ!&hXw5yVn`s$R13`>kLmh$@4nHQ%>@{ z&hUJAua@oeI>Y1lkJ&!2Gd$%a&+82D4}$kP!&6T3yw33WRe!e6>kRL9v3s52DJOYe zXLzHrkRsdXb%xg=cCRzM--zAo46i4KuVl{fO2zJVhIgshz0UBS7rWOPo^q1sb%v*$ z~-Tus` z-YF+}Ugvg&y_x>3XQPJ?zq9hYkw*_GzO&=S#|-0Av3s4{{ZZ^*=XQtrnU2@FU7gsy z&h73JyVtqhKgI5KZg(PH5+`$R_Z_i&o!dPocCT~0K7E;v*STG#*uBmLuN1r2x!o&b z_d2%=^ke#7=XUjCzv_w4j_UW!U!Q51d()`>Zd~1F825)ejSZ`nStbGuVOw~@@b z-7>Lzo!dPlcCT~00sWbd*SX!#Xi)V)r_$>x0=yw$JOVZid*s&gy<5cCWL#tz!2&s~d&+O}5YL ztZsqWz0T?$6}#72oe!7&Y@gRz-DI(Qoz<-pyVqIW@5JtPR>w#GaGpB-s+->W>Vloc z_guYY#@{bJ4r^efRK)*IAu%lIL|w*L)z4>vc-^kl4LW>An!V*C|~A zC~~rWUZ-@+#O`%U_pI2xPU-p&W;$M{bX8*aI;H!e*u75a{wj8_Q@UKNH_7&Sozl${ zyVoh*Jz`Jpl$L7Rb~80^jnzlyXwC7vYd%NL_O&Cny`CbZU8kj8 zr@6h)N1MX+Dc?h;U8kj8r|CSL`Zv2y>t=LLyF0@~F3Ie>y=i{a!jzwpMe&V&Y~lP= zpM5knrTPFS?d~i|8-Ekson4JJ2Y4Nh^%3n-*^hzII%rvYJTGtXk*3pnyLAXEzrh@?E_Qu8=pZNEw(RB4UXLKo_&O{Y(q`WZp59@i&|=KE&WJE87RR zK3MBwZ0)%gOLJ_;N5x*pM|5P8Pp39GkkhS>xEv`EUo-FxQu!WY>BJ@v{y~EM?}dVm zHJ1JUn^Pu}EM=VWvdFfeClTZeon@aXj|uOD8BB zHfKoWoE3%p(?1Y!P_u(eHs(7W^jNN8l9UIIoR+)~7brW|9p)_1s@%)58C;2lH4tMq zvS7%Z>8A=C0k}t6gSdD>l?yeytZTp8#RMcr@Sr3GUzK|ucCm`PH1|FxzV{_wi`T@~ zAy8;5cTBMVuS)mFaRyjM*d1!nx&qMuxwKVq*Vi<3w1!pt>cffOu<*6#T z@>$b!m=vAapA{VQtlC(zvBT*TNcpH+@;>sma~;+|SsjKsWR0xI%w3t8yK58Vl2dbg zEer-M1x$oBFRTn*SExYyB!`AW)+IrAho|s#+*Pc$%do3y* z9%|4RmTb%pJ>DN(e>VYq7g&!%pX>`)lwk&@?3dJQCb$ZvDgGQp1JyUo3LKCAxrxM?v|p2=~k!T zL0=21y{w~ebXufMA9Y$dq#M6}!%c!7Lx!%q0+|i+=zVLcf#oWabOL$!>BQ1M(2+ob>fL*Y?COX^7BtT z5!}(EN1v2GK`dm1?kkMY`(aRgDbPx%A8>7Jkr79uLhziIE z9gB3tlu7=-inN|S16*lk%E&8lAPLiR5cVnMhH))^3_wZfldo&41a>4O8zVv$exN5Y4;}-fX62!p!5k z%dsAjw*xn)LZLXS7LYkQNqU!>7=<*;k%VFT+C*H+4AXeF*4UVYkXn~{x*C_W=-19X z-5!fJq|7;eSDJG=%{iUsoOW;t&u))4)Q`XrFteq(H5TULHF6HeqIDzdqpe^fp4~oo zW?;mm`aPp4jwd@CNq3w$)=bGh2yVh=2S!Y;4~(cO3XH(#+s&=55yqa3*Ts!3vA~G4 z8*zEd4~!@sjzd?PZ$jx2s4bA!G5*A3X2vPzi=(ZPy4dtUb@7>jyyP8x_lZo6wzY>F z0@bnj0=}t5GtC7y!?p5}Jc)3up>a;#o~4A6w9TC6c2)X8{Zo4aJgL1j(B+%y>GPPfVbM?X(&CNeSiQ zZ5W?%@zyUVJ_YeQ@?u#603``1%K&7YB~=-p4bM*VjimYJ@e=cm30WuefXPbdQIM68 z%+FLa-%ZdH8I^e#+XFwA|JR;;i*u!-cAV8sv4%xftJF_qzS_`!1LAvNe@8%36qWRc zFtR{a;PIGm{K;K3?PLaK9`Mwullhnhxg9cs-^he|W*f2JuzY_w1pidP9aMEgB+?>z z3RqURG`k9Oqq<5X?rO|z8j1PjaT4=ck9_gi$d}ab95bJMT6AhcK3icMgkJ-Gzm3MfSz*aC@gXf}EF6?0Ub?06@R$^H$MBaFOJXVxGe<|cK*uD(%TaZ^k7C>GNIRo-~ zNS5W2A!(-KG*fY!shAu=MP-H6)!=Nd0mDdHnyDCX>J|I!;ZBy?G*dBqipiral*VbM z;xtn+ypkyP-X2C}VO4cWXi`;a$&})<8JMi7hzv8Lx}>O*sY^29ENfq|S}TYNAbA}D zy-ffqh>_`va>o;SOR~4CND#o12m{bBzxvG*-#YA$Hg9)i9NQyO!%GhTE&aMD8 zUP)QWRK@>)7%H92zCCOJ>A^!FT`C5N-elY`srU?ceD##lNs|~)B2ez1X~$0kRa3<@ z@U(;Ys#M6is%`$@o^e#k#EK#?bye0@mKRPboLnOP>tHjr{cPOCl3?LfkZM)iN9twA zf$^M_SBN+{VR638xnGPo6KaP8>>X+fCr&IW z4o$48n1)HsWFhHf-Uix;>guxE>Bh0xJ`f)3KHoLMkne>B&U3h| za0cADOe)qS+hr6F7wX)9`O4c50#X>W|+%UGY;c;b-+!@LNayaS%%(>>( zOAgN$DwR_!aAJ}hcnp$qQtOsXnOa(f>)g~aIBym8t~1(Z-rc7p#boAXw&ZrGM2E9D z!1n$6Xo~+=6B2t^g}?DU!t7}$pd*r1+9D?onLQB~DexWVn2}C8V&R^aZZo;8Vj?Dx zUk8;i2a|SmHZoYt`S~`^Gx8hn^5-+oJ@d>TZ+zb{mScH)w$IBf{5!FGnS}>qxpy*V;d90AWftalj9|FF zAp5NQqi02LIBND)rL#VI+c36>-ODVTk8cf=F$=eg-ODWeh}gZ%!ae&k9WS%+8Dii5 zo9{G#_5Jb#-)+pwzW1wx@xptx*u9LyzZbigarnS~OyA2me6HBNjKjBx-ODWeuGqcI z!Xx)*`qj~Q9$avG=$XSu4>@~el3f-lJH+l~7XGc+z0ATr1~VNmvv7&nz0AU^#qMPmeo^dR zX5oXdJ|r2l@Ht}lG7H}#_TweSB!l|%arkRDY*gXl) zNSawVX|w;)`fI{jaBI9lJ3Vv+vuF$PASa|+|*pqX{ejg8ItCM+D1lR$`b_lAPk`lc+!Zp$9` zjie>sYi`ptnQ%8}K$=WAO(r}tf93-Fqsf`6U-{Bx!f7($G?{Q~b6fMA80VO6GjUN( zav$8@+JGy6iq~t*RZ~m>nVU^+ozy7%k&pVieUL~~TdFRq(qzI(dmHDOaDta&Go!O$ zg;|P;q{)P%&4E$*3D@0NJ=~(FShHxJ1t~ihX0R=Je0o@L~TPfo=6G zIO7tjaF=W>aOR!akmFbK_;_(_9e>Gb+}nr^50YM2Wh8#+@gMe|p$>J()*&i#<$5c6 zy%qUU|L;muxX5@v>fcP`l8u$2$Jx?Yq=1Fb9BJu(!xRUKc+LkzV~o=H|8V>=q|S~MEf4>d#@t{*7-CtE<3$^5YuqL_1I!bO;UPon2TNaI z9uhSUhdnL zZKo$NQAmDRAA1|nV6G4&g@hxp%=*B%5{f7mI;QJ)|AC}q}-)Z{g4RIVx%#eW|>*m~LOolIr z|Li4qPF;ULgc;c583g0v+~u&Nn0gui&%(cspj5#+D+ME_S}O_?M|bcB@~qA9u`k5? zOb-)1*OY=0o#T@VQVItPFD|!TrnA!AM=+w_Vp;;` zd8C88ku?%$jK+o|WTGk=FBtTMI71^QE@lf7-udjSKW1N1VW6oHqf`)vOHk=hEwaGS zdl;cP4KX|+uNRP5sMXmRmdkl`Oowpv_4v;c=J)%Y!?_t2Vy{Z*f)N`Th}k-E3)y}d zlm+d@3!qttR=d9r%q-MeyuChvg`?`62a8#&j{4~Xt2$Gl7@yy~bCFdSxH7Tn z5QtG38Esl|S7_&(J6Go36F9gQszuhq&j~P2!5grG~c$_JW$46l} zkozKx3WJzOa0L--G%%v6xuJP(b6~`@G5Ad%5g1Vc=GKbYpl2-x zugaLwkRe5|QcbnEWMb`PD3ygUrulZ$e7pAI-8gA)a_PeK=GhmCO-ZE{TeGMoQd$od z0`(bnW!UMeo;`5kz;V1r|rpfwhS8yaR~LN%!&Jhu%Gma}q7 z@oYg&5Gz}w3&OETWq49+b5qRD(wt^(+(Ah1UdeK`>u8d>e>lrh+Jt2J9dL5%a4CpN zL}m4GU?)jd-AR+oR1(`QfFHOPO1eUTN~VJ^9C@t_w}u-du?T9un<#$E%*hBUUrGpy zm#mymB^j&QQLv=O;XtkxBnI zJN%;`-G%Yv!v{c?abyDR&!gZt}#5{d~dynS&FaRo2O=R>Xq3Zq+$-iaYA^c(1Cd;@7ntq z7n&Nkb|3fz%qP!Y_>9YEKVkC86Nqox6VZH6fxJ&dd53@jG9mDJiV6WUmQUB*mg6jg zL5%Z`f+uW-FTnr!xdY!)FffLDk&r*Ph8B5-<7=Vn3ViknKQ-YtOyNWE^NzM?Q*oQe zRNfeI+L90UxI>$;XFh52M~#a6r0FepXuWaP&NlO!><;Zho`uekeJWD>BFFg?WEIE+Gcg=d(%kgroA72(Bu&)#( z@m;eV_7AK^BM?Dwj%U!c@i}690sO_`$H1Z&bm6<^`vqX9#*e|qIeG%^><8BuP>ToF z%ii8;HsXXm|7*R|G{>h<+x$pFB!=}HSe$O0Y@C{7%mT543>Ammq=pR2_{=e{>X<+U z2Fk|h1<|Itfg<>efLn-GD2!-jLWPq;mwi~LcR=HOXQOHVu3>bto;&fE54j9-BINfV%OR2NPR=e@ zK%Nb`3bF}uHDo8`Wsocy^3n;LaTVkm$g3eAfV>8BBjmM^yc@d?@_oqbA-{sW0WuqT zxe0PGmYA~oDX?BWDDfaAb$Y)b4af2xd-wtNW4++ycZJ3?qpRx z2)PaNA;_;Fe+il0!!UjY8Gw8Y@&w4oA-@Ir1Y`x|e?!iKd=m0}$W4&{1^G1ORglj@ z{sQtj$QK}g2l*$+7a-|X`$fnen85!5axmm8kat7A4q1$L*bI3FW1HJ!?r5Hs;}KnmA5P_PV@pG%iZy>2B4D$| z3Z_~#FWl4=X;32sym9X z6u*yYK*&Pfvwr(Ro(#D^WC>({$g?01fIJU!AmlvAA&{+*2SZ*6iIsbuIKPdd1V|2`6tNZA>V||hx{kxD9BGC;g7nLc|QrV7v#y1 zM?#(giG7T3L5_z!9TGpI5E4J52$KCM1j#-#3zB_n3C`2}guYdZN*sf@0>}sAeW#)& z(qukeW2d?gh$I1>D*44`J;3g6#*4=$SbIq~qj#*FoaeFKb+>!jj!oL_HY2(aKUcS7 zs_((5y44&$O(ZAl#P&IJaP!0q);2q~O&%VqC!6#kwF5Etsoc3AoDM=Hn?ZRU<5Q;M za4ald)LO8Qx*VF<$l<`=Xdi-C+EVs?SJ!3VUuEwoec#n{8IQ|Jm*++R@yqRayO6wq zng!+AgA0$DLKkPx<#ra5oIRWXbOP|4x<;$#tVh7O21Zr8EL?>Q2(Hqx2|57U&G`8| zD%1+>gLh!Vd7Z{{l1}!^iy%*dycjYF`CZ5w$WF-Fkl%wmA96Y5637*hxCR@SLjD-? zGDuuAjVmGl0Ex9*ov%S&3;8}IuBmda-2jR6-oRbBT%Uggc?h=GK#qm{2_()d<2J}z z$lD?3LjDXg28ri2oyensYjGzq#(j{yF8>1ZH;@lPZh~A3xf$};kZ(dh0{H>tqmcXc zFpR%I9timwB(K-Nc8-R81M)P;w;)R({|0#mI`g? zQ!jvR*Qv)Yn+Kz-%i7oL>4>oc^TYm@gm-&Jm&Gge@JSnmDs;|e*3E0KTZ5pz5#_tlVW zh-)EP?lq9i|1FR#=cV{1UPH#i#xzFb=PGA&i=&wFh6gMj%;pWi;%r_5Jk84n^ER){ z`wO^(8JHiIvnPIIP1|kAKl6Ay|k-%&u!C5;07 ztdOjHn43%a9)x819)e`~9)V=}u$EHFcQN#F3Fjwqtea!-bF^P+n<`v&thuFSx3f#0 zqX8t4*oa-U7t3G;9-r-nVZ`<_x&irRo*sid8uBSf=I?2<92Y?!yJzJntcyh#sGEX4 z?~6%_A^mQ5<@lXhj^CT*z&(?c1*|Dk4I=MOIV}rV zQEq9TQap{Ft-(Tjiow3+ECY|7*cSg|mf-Lez_lO&kMs6>>r7%Y~j7@oG^@e|AO9`egPZGmJtwn8$0xPO&%<0sG) z$2P_j%ely*@wTXngzNYE)Mt9CM6=bzl$S0RYdC%tJ~gA0iyXE!%E~+@mUV|&#?K%} zAs+YUGM~a)XesNhuq9rnon<{dUe;-?(U|i(&3=?5bTN>#uyIGG0wY~Db0?jDs<$g64)ULwBe+U))HaB+*r$VDl1u5BSFMVq2+^CI=udLz{F z?pLW!<9%uZSyX{&3Ew#2X+ zXm|0$u>X^G4XVpe!r~?FH*=JcjK5^ig6ML*x| z%DCMEx>}0Zm7PoNjzAgOFmj>~cVGLA&9#fBD!8->!_ORet~}o9xwh{kLx*npP1Tn_eemu%hVgr`dsp}6-~idafxkX__RSA`)^y*wEB^SK zrJvN8-#hxA?J@nU!!lZHnm7A)-SyqrQ-*P~;2$3M*stbhZ@YHggj*iUT$R1eFy0jV zr(@n)-T$0EOF#ct*5?mgJLd*GZ^rYZY~SObFCRCh@}9(e!ln?i?fFpR}w|Maw< z2fp{yJ`ZgA$B@Urzvap=Zr`iVE3}mpM&R3$yoJo z6}y)`e~Z|?Z1{YRnCVpT+321kP@mj&4_0uxGvnZ-+`}~Z6dQ{Ocef-Um6}5B@EWnl zE#@vF*niZFFx7;x`nRMyE6u;f~CQTB(?h~oQwI$pXZdlY7 zZJXKF+}>J;&8B9xK0MXxH#;2a%(xZzJy>ds6~}j&n%{T}+CZ_rYifSuZoF7lxcg1b zZ)~=0f3s~b_g2p;`WSyPHN{xNd*eO^8EfP&*;o(lII(RsHNWw3AIrAG)cnSw{nUHs zK1RUQ-~k-kDA~8h)cnTs{uXYPsrijg%n0~gsgJSL)WG;-+jiQvjsd)vCGJ8~^Bdc2 z+sC$T)&c5uUmv61)cnTFw(T#rtpJr*Ea?@Sn%`J!+a9rPfkB2bS#Y_ghH}`pRkrOt zXlDrSeN#gn9BA2UObskW(8>k(psD$dfd^T(!KUUnV$doDN8cXQ{Kj8w+h*H#>R|Zb z6I_9*`HfAs?OEHFH^eZe3GR4P^BWJ^wzalx;K7D*w%`Vvn%`Jz+m_q5zd<`!aPOI# z->AX#TiK?Yn%}UN?F8@%Z9{~2uWnd8>aVv|Z~#FcpK=F#)pw>Yiq9V?i8%l_*JNYznU2 zz}C7PJMy5EPvXU5d<)RE*feWRaHwrq;&`5@&P}N;E44ZOr-5oIry!7Mkm_K179u|p zF+R~yK*N1>_~fy;7dIrQlcz0#pO@dXb1c!!?v(DNL6piCXBY;{i@9Nig% z7;AmgdrF$!ujd^SY4-L1bhgj|TeeQM$AQ>nwooT?xI~@iG3f?kah*8HPbT7|xJ);= zc;gyu+eBeDV;Wj>=Q^JL_CQ4rHtbU1WL-0lKU|TpxehLTV9wLHEH|KPdCA6n`*`Tp zGjjuFIL`(L9b@H^_p^C?-lRB=A0T5}p3#5lV%T}eyp;u+D>8FUH4CX^!J2g>?=iup z=3o0MN6WV?^pf#kwfon8OdIbVWw&4*B(fG;DpTFi~VaqBux4N4}`I1 zuz>`PS75yoJ8$jvWM(cT8bMg(7BaPb=BGF})6|)vzA*Q-GSo{lw6#{^nVVjco2|uS z@MdK&#+}TIdr4ll9rB8DrLiXf4~WS6*Eh%0OA?t=`4&t21)v zI=;8EYj{=edTd&kBK9(Fv%NclPpZy@Z3A{Tq+=+3p632be}wJZOmz)=$uyY5H?z#?K)1->Jn{T`d5XYY# zNW_R8$Bx*+k-H2RHa^ZN!vPp4S6wx?kTkcNP#I5m2abnp)`xGHzEq?j-?FIhj2 z7bG5)W0h>kp|LRwU3WTmGR#XeOqEcX6{y^ewE(pM=`WS^G5!?ijz`QI6_XG3I;G}8 zWz7N~D2C1+QjCJKXQ4S%*H*d18PbAbpv8#w+;R`19YsL~6~@Jyc%C}Ch2yndE|i_z zS&FE)Q$ak1c!3InmKC{PjuclcZ((&I@0%oZ_UsSs*s}G|_?4v}>!=eLX+6f``fwk% z?Qy01>jUaP05lF|UMKRXVen+5Sq%xcOG%!?uF`-B?2f@R>GeqCc-^GU@zE|%((8>i z#7iP*Fq2U^7ywP>fQv0v4vvMUaxe;-%E5SODhCD7R1OwG!}AZMyb>Com_WM@8lJI0 z``C`{+0%;c4^71`LB*dWxLTYGO1mAJYNOAgvBgl&c%Y=TVrb*U_9nEkqV0#rNMl4h z1=?uQ)xIMMLW;Kw^wh*}CH7w}tw5B#kV zvJ}WO9Xe~v3Qqk5%LwVznR_d65s?)pSPG<5ckb)dj|NUr;VO+oO}5zj;(wlK+*aB^ zXvd0eF#aDW8qW@;1)z-(TQ2_d9LSLUly*F}^To#hEMtbWi_-Z2WU;Xg*o!ixzLi#t zZI&{_2;x6`TZSx&Razysi^Rr0Ol*cR-PUG8n66b>KhGh799ETkC{YA-1LX&s=2i!z@!<1+7YKm*YQkmLY@~O1lo*Q^j^8{_`x% zFxJ@Gt&1~4s7vZAUf1{pfSi9hgH&kVkigfMv{h@xK_x#9>%}{*>Rb$KQd#7;m{nX z2DXk8OD6vRZzQ202?BdpJb39O2Ah$GE_+p;Yv5Cx>d7E+;P}LL;?GHjz`Drrkq&_) z-TxdtlbzNKjAO_>|hw9hC)xCH7j6|M~d6JLrdpLzscr9tOd<$b9ki9(%FZGF-Fu z^fsmOKab8J7}09wKmYOQ40Gi_|5=u09?Oql;YW4MJJXWS1VzU8dd%F8Ti)_mKK5Al zv%8XY^dmeLerlwGg_-HGEOJ@A1hP)r;$BFsE81dw#vws4qVXdO6?k+>r?i|WwA>DM zl@6c3+8EKEa-{<@)=|8YF~n>2&%oR#^&F61C7)vmZLw;1qVb`HSmJG(iG~aSz#hfE zC?8YE%p|@SKgAq~nD}0$uykTGzE=$_xxmEtngh$BuDuq)ax1R5@jNesMFp#M9`IOR z_gHp$ECH2uBxR*D$z$P%CC|&zt&;N75}qybJg{PuDu?Hg-4Gc>kq`Z_IeYR2G?FYV5xNN#hKh1*Iq+m>2U2e8kXs< zy@If8cI`!%2TNUhoe#?_*It*vqJmYcH^P#SSzEkyehSOw01=9YLRbfN9%Q_v&%)B; z+UsRlZUiR2*H&U&d+mbdKG$9cBFQ^kdyR#KWse`L8tOLJUh`pj(6!ekuyopcIq8Qm z!NrKge7M71*dxB&&G}`%%~YH0v;8=oZ?agmek$bPJ2ov?AsB0IUX-|E&Vff%JhshH zU;XFeLO8};l@%&(Z){wI#m&~TdvoVFbyDJ*FYDOck87b_3CUt&mjy|?S4=ziM`XhC zV>4Ek{+T(qc%jXxqSgq$BaW9!tr9dN6Ltwz)f9#H0ZDcI!*R129R`zYIBxNNeQoZP zB*NU;8{_!Q*4*1^F?VyCgwG*&O#X>ut?EbRCM-o%A7z%I`oQ8mNxp&Y8Z4iuCdJ14 zMnd{lVsSv?YDcq~;sDjV5*CD-sA^Cn)y3pvKr9=zmfWjP+YRS8f@Tf5OlB21ZDz7| zOLcc_8nOvhnze%)do-eofPaN6u_Ga0+bS}ogEY+@1IJKK9DjFgErk{F$sYC^pK zgfU}J3^>B>SjWenIALu5816vU@upt8K8jS_>+5Os=CdY*L{7W&U@Hcpfh#28v|9>y z96tu`D9&aPo`on#!a9D^@%V16rH4^_qr!2*Utmm8S52>`!OgEIyc=pagCa|#hSQlG;w!o;vUt+y`YJETNC%0Ca&KGy?P#|i5sVh zE7ioEtBE^b6SqtgcfBU=ZcW?tB~VNG1S zCT@i$?j}v#{hGKZG;yzJ;y%#C`5xD6-$9zVV>EH6Y2wb(#6>i5i!^boHF39S;vUk( zJ*A0zO%u0W6W4R2UOyP3i5sDbE7Zi*YT}}rxQjG#S7_pH)5NXQ#672pdqWfVi6*Z1 z6MFq%s3vZdCay#iH$xNGsEJ#wiMvJfjY z)x@2vi925tw@edvy(aE%P22`e+)J9cEth*&oHE|O(apju0uqLiu6SqPW zcatXWeofpHnz&aqaUW>nd?XZegs$fIgEVo+XyQ)O#GR#yi)i8&Y2sFE;%?EzJ*0_y zN)z{*CT_bXt|v&DoT00JFhmnKLK9c0iL2GbMKy63Y2vQX#NDQeTc?S8P80WrChikW zTyKzaIYU?dV5lZ;lqRl36E{N>*QkkGtcklu6L+U3?omzL3!1pMHF2M5;`%+K*AIqi z;>Ky>N;PrkYU0k<#4XdrU9X9|TNAfI6ZeuPZi^=FOHEu3AMQIsSL4Bvnz#v?xN=Qg zSQFQ-iCdwGyGavwzb5VpP24M*xDPaOzUTDXcaSFT7){)1nz*wxaS=`2B2CNXW(ZtQr#5HQ-7Hi_J(Zt=UiF;HN_kt$wZB5)~nz(+? z>-B?Snz(VAxKd5rxth51HF3){ao20&?$*R@(8Rr@iQA%y`%)8^LkBUA(A9Wwq$X~H zCazo)7uLkJYvNXD;%?H!-LHvzLKF9jChh}GobN@w_8p{&J4O?CnkMcnO z>j%R$apN>`rJA^NHF4)_;+ARRuGhrft%=*9iF-*Cw?z~8r6w*1PA;6G%lV%sZh|JR zToV`8#IdEKOWQ6Sqhc zw^|c-ize>?kr7Q zL=(426SrCucZ(+OAx+#S&p2SYS*BQ$Y^nz&j`TvQWxktXg6P26po zxOJMi=QMF|XyQK6#PxnluOAH6#EsI#m1yE-XyO_*af>x^*J$GI)WkiiiF-j4_qHbP zGfiB-zv=aZVVbycnz&L;+_{>#^EGkHG;!B!;_lYOZP3KMq>0<2iThF$m-Dt>KR8ko zH$f9uu89k4;@UNFD>QL8Y2xnJ#66*jdqorXfhNxPj$Zo?(!?F3i91abca|nDqKR9i ziCe9SyG0ZCkS6XaP26jmxb2#_p6}}QgCUx@5&w_6^MUVrPT>DHil zBDA%wHT_xIvRJIOtu_1eo&9NL=u1c3FfN3+BE)qrgq`aMAufyyAueu5=m>Ffas8gJ z&*%HyzWcU)-f#E2$Nhfye)Q?Ny+6svrCWOET6z_h-sP6w&6eH+mfn+=-s_g$N0#3A zmfpdi+Vz8DExnU1y-Z8*d`s^lOYcfc?>0;CK}+u$OYcof?^8?fM@z5wXLkMIcuVh8 zOK-BJS77PYS$fx4dUslS4_kWATYB$UdY@Z*-FDb*-@`4v!Is_`mfqQxUa_UOz|yXi0V(Cq{^hzzgOD(+{Exmg!y(cWaS1i2` zExm6oy`G=j^@C$9y%CmPx}|rnrB`9;U2f^!Z0S8<={;%by>97!Wa)ix=^gxqT|YS1 z(mUDG%e3^)xAZQu^scn@ZnN|rwDg{_^xm}eKDG3IwDfxKwCe}QTY9HjdXp`^0!y#X z(!0jeyVKHp*wTC6(tF3!``ps&_NCqSJ>1e8Z0Vh0>78xq6EWPV2y}K;E$1J^< zEWP(Fy{|02{lBv72S-|ZLoK}&OK-ZRS8C~9YU$l*>D_DTJz?p+V(EQo>3wVI_59kd z9~@)pjj;66ExmIsy$Vb3a!c=KOYZ?o?@3GVbxZFfOYeJ2@8Df_{oq(j?_^6a)6zTN z(!0pgyVBCT&C+|&(tF0zd(+bU)YALW((C<=T|YS9(mU1Cn{4S7SbBAq-ZhrqotECi zmfrK0-aD4w=ayc#Z|%14;g;TDOYaOz?`%u2*wR~I>0M{(-DT-LX6e0T>Ai31eP!wG z{|~!78roRaknLTY5KJdJkB7Pg;7fTY4W^df!`m2Y+YR5016;PPX(iExq$Cy^AcpD=od- zEWHOUy=N@FH!ZzSExjKtz24v3^@HOry;Ci{$(CM$rB`R^U1RCpY3V&|={;}hy<_Qp zZs~RVr``5F+|nCt>78Neoo(qATY3vDz3VK!yDYuOEWMX3z4tA>uPnX&_t^D=BQ3q5 zmR^dbH{H@Jwe&8v^lr5D?zQxuu=HNB^gguozP0pv{$SS+j-{ggesH{{cdDf~+0rYp^y)0VYb?DxExm^=z2_~xcPzcnExm4g?Y8gX zmfm1X?+i=tY)h}$(pzBZU1#atW$8U;>Ahs>y>ID#W$Eqjiwgf5AYWJC`*EbDH`LNg zvGk@}dZm`$rIy}}mfpRV-V>JIE0*4emfp9PUe9iJ{ooi&Z-k|nZt0zC=~Y;Ims@%_ zTY3*zdQVzNbcUpQ6TYAr1dhb|zpIds}y4!8v!!5nR zmfjhb-r1I3v8A`b(!0*myUWsh%+hD5_!*I0UYT6zy#de2*W?^t@DTYBAk+HK#%Exo~(-WitO*_K|h zrMJM+yUx^68RU(7$Ed}CP@x+>ow)@9=~7(AudgtNim z4aeJp6TRCzU!@n1lV$LfULnpBgQt3|!f7#h%C{9K?mKh&hT!B|cr`eyEWC9%J1xAZ z@99@83SDit(X5+@v&h0*iqm57bX;h~>Gx0XeARwQI3)&8={4XqTX>srqW5^`t9}rV zGtuCweEB#_44%?kg|o%rDZL#y{eJK+pZ4=4oP2|)?N)=c+Tf}E*5mB4@M3?YU04*l z>MyEqK2DQ`w-RTw!Be|z$BF-!Ip0K_e1qq-3(jhTr+Tc%*=gZL?Tzv!u_$!aE~-Zc zPJ@NlgtNimseD^-qMaFpcfRpBSq4x2st~8i!dr>cV(?VHR-8WFbcF4?e9CtqPPV~Q zdL=kZExgq@TMeG_-H8*wpLh9`Zz4{3Q(pYOpL7~@?&r8fqr#^9;Gi*cGQyiGWJ zEWFr*=+7()UG-<>n~k%`;HjOL;%u_;w&C*-wD6j7b{M=g^4*J* zdWd)VlJRnJmKr>bL#uJN8$9)cJvd3R-ucSQz*%VURF5S%TMS+@-VU50y}a|)_85y( zWAIeI#W?E?p3>Wl6W!Z8U!@n1lWp+S&Luc24PG){GtO=cFXqthzKJXfUF{z#Up~%K z3vV?}tHDz}cH<=V@y=K6mx0q@@KnAgoQ(!g`EJFDJIp&@c|&kY44%r@fV0NnseBu7 z_82_n8+$n0gGHgM?V<51AE(LSDc_YiTMeG_-H9{g2=9E8@y6mTGVp6XG9v&zC- zhqKedi#ocyZxoAy*M2z>r@_K&!dY+dRFBO#(Z`tcjmMd2@RVLY&Ju&Cc3y?E&ETnD z?ZQd?nRoe;@ltUXS$IovwirB>ZwJnRe%|@2e4}t`44%?kjI-Xt+l&*F;GM79xgSop z!PEX*g0s}%CF8Be*$7!+fT5tOcq-p6oWw!i`N~VhS!m%c!D%sgYQI*T_`%-!s-Gs} z6k2%oII9hw_Ve{PI}M)ljXHt-l10I*A56qqWbl;lQk;zz-d3ELA>R2ay?!`Z22c0> z3UL}OyyZ9>ExfHbQ73wrPx;2-jJ5ExaT*MsuIDu2tTT9OmlmA87G9sB?B^^BU2R|G zn~Sr^!dr^7!NS{u6E)17ZyZjlg_n!7$ly8s4`-vnQ+>DML?@cd7mt%+;pO2hHhAhU z%WyVWcw2Dx8a(a4eTGv$7KN_1ui7OKr_tc4U6$i)GI&aF8&2#9bG`#`vJIZvr39zR z!dr>6$>6CT+i+q=dY4aLKb(mMPvy(US#0o>-ZGqx22bs`6(=UiqI@_L4W81=$7wQn zD&I<+7K5kyw&KK`&R-4PG+d9-J|wz00R|$--G|@SOb(XQPF;6({;s?|hYBJWhteQ-8_BX)<_9ZzWEP z!BcvzIB}2s!c`IPTKoLqya_AA3#Y4B9vW}IyXPyJvQPQS6<$?`awQUlZCeuXS2am zJ+|Y-j`J>`@*RMaZSYi&5}aiQPy6K>oE-*F>FvcyO7$+E`e_DEjfJ-uXRX0geK+Fl zHh9W6CXMrR7KN_n5o+g&I5h@O=`F@tYw(obMx31nPxXjOr~OzIyvmn><2QIJ-y)nf z7TyM&od(Y--+0Q$;#EFp`{LACc#Cn?8a!wF;_SBYVltQyv3QkF{WJ?_k-<|vmf~zM zc*o&w!P#T*lwRxv%EzM6)%KN_h0|c+HQ}r?cn{c8hdFPvq7mt%?@Kg^!&Ps!)e4BB089e11J(=S)i$Yi1Bbjx1ILi#4bDY81 zVd3q?88gK@U+26BXR*OkyDY;cT?E8J&y?C4~ z3$GAosliJoz1287EWEuqW6$v}pVG_5Sz_?g@K)jMFnCIDFV5Ip?|jw&vT>FfJZGH5 z*cAFe1oTaYj9RucGy}Wd=|C(L$WH7T!jjJr-Ws&6h%lfhH@R^n{2@OI$zJKsBBrI&UP1t)5@cfLw54rijlQ$6x=mKi*4w>3E1 z44(4cg)^|wT)r_lehY6APP4&N`8MI~vG8Jx*pFBgy6P`VFB@l(!E?^faW)t{^@A-q zvBlo`${T=_XYf=$KhAQ4r|q#8XS>1EdF>vY0du^|r+i1@lo&kqs|K8AgQxm#!ig&J z&e!SBI1>$?%9oGRWbjnJl{nihyj?hnbIs*T#i=)VDqkbcI)kV3wcx~*dgm*zA5NaZ zQ~UXGR$6$?I6DlU^4*Iw=0bD%vTzy=p31izXS2am`)$XGEA!4*{dovZw!u@rB{<6r zp7LFTv(3WWg)^YsyL@WDQ8+ag-eQ~$22b_af)i8Wov+5LemD~ip7zUpoTV1tYMfSs zr}o>8GqBRTeDcQNlo>pgZy`>zg|`VO%5Tm$4kyFlsr~YB78^X(V;RmSgQxAb4X00) zxqJh0at)r!SBA6H;3?nLINL0|T{r_T@-Cn99fMP1;Wgl_vhdd7Y&UqS#~z%-YVY#N zOU0=-c&bMuPP4(&_T7ZD$HI%PVZOnl;5pyGS!D1uZY;&wZ18j*za1yB);nK$sW^=W zPwlrHXS2c6ez_f|U!8ZpYQH3$LW8IJ*5j--cq-pUoIM6l`Nqy;d$1^UwLO$xHqK&$ zr}{3#*=+EX-gcb$dhdKyzC@gSgQxUra8?;SZQpe`QS-g?l^2JTZ}3#U8l05|Py10b zPOHIFdb@E3F7Pg&yfHXs22c4e#93|d)PC!6b{RZv-{_0!FDwdO^%r^BIE@BR^;nM6 zV(?VHR-Cv7?|kJA!O1sxDqjuGY71{Y&TfOJd}A)5U04)6+Xbi5;5qGr(_-*ck5-)c zOTF_=#!JNU8$8ux5l*v(w+Uyj!Bai@T*mbX7KN_bMg24vXOY2EdP{LO8a%bjR-8Ty zz4KLi195T6=<+~XtYLR!o>IZQ+sTN)? z&LV^7%wKRe8$9*r?Ku5@;axt}HwmZ2;Hkb1II9hw(p!(S%it-!=qq^+fJLFJ{ap2! zh_lGxIqib8+2E;s+i~Kr^3GS~OT@{y@M>^Y8a(COjI+bwDc`*~iHp61@OI$DH+q*(<4___p21W3{5UHOp32vZv)#hmgEQn> z@A4&+-dLQ422bT%g0s=!slHorqObGL*V%436AhlT-Efu|JmtFzXS0R39jDLr=JE~1 z$u)S&w+v^g!PB_08mHCZslK~$hBSGXPx+3;DKmI#=Y=?HEW8aky9}Pj`{)}uuCge2 z9Y1n$nhc)Gw-RTw!Bf85aR%Jzov*x6I5h@O+hZ}#dV{C!u^A`&SKj$5y?C5#gQxnI z;4C$G%6B!+HiM`1cHs(nygQxQ4<1Df8 zR^esW=M_p31ibXQRPWzFTqPZ!zbah*M_p)UOueG#fnCV-rsF zQty0Kk9eFcgO`j~h_lk*Dc@$CT?SA6Ao^CGk7ZHlYTQuyGH@CUp7L$N*<|5u!->Dm zJ72YPB2J0H)Be_gv)aO2kF(Rli@Ke5VNvL+T~xjdoP`$N5}Zv2Pwl)7r_VC)eAUha zaS9Ed%2$uG#^5Qv4LEx(ygql(PgxYYY8PGqE5uoC@Y3+s<3!!*ou0}Uhm&paly3>n z8iS{NH{eA7+B;uozr@Khcq(5Z&T@PV5TreAO-kaB>Zv(ksJRX7E(LH8|T1p7Py;lX#bR`LsP!aTZ#5OK@5Yp7L$Q ziM!i7U)5s>PNBh5di6M~4W80lkF(q0DZQALTt8(|=&HXYvo0HFiNQ<5TZOa3;3?m| zI7#<-=c{^T;4HN8mf&nMcuqgXiM`i5UzKkFPOiao`YFybgQxV?;IvwJyK#ox=Uu*J z(i@Aj(BP>*FTrUscxvZXocLAdd=qi}7TzM94F*s7Zo!GY-#cG<190*Tp4!=uv(n%x zy=I)922bflJ;3!f7KN_%5A}nII1L6*={4bOFnCID3r_TJyz^Ch@igQs>` zjniuIl<#hwA*;>h8;et8@KoQ$IL#K`CY(JMUhHof*H{#~+HR_EHcq3#Q+=1?Y&LkR z$99~!2fg!^Hv}io;Hi9moK*%-q1}_bnkSx4~0-G0j|`WKrm9yi&i)#c8zgmg8(TcxvbEIB~!C&R54wi~=;ygfK$p7PFD?UIGlXyGl# z*=q2#eRtxFTJN228s0>lCWEK;TZyyP;Hm%Z#2N6kcfM-BQ8*{Px;1d zpr5iRbhUpd-z=QP22c4e!`W!zZN-Ux&YW*NPPTqxxxrI?*Wzrq@b=&&zUW;(ZI4u(27{;iHsNeCcq-pEoIWpk=PPd@PM*QjcJt#b zH+aY4t;N}5@RaWkoPK{YmoEvY#KLR9S!3{2j}17x44(RZ^d`U5 zI743ZE}y)yIDUhtdMv_OXYiC>3(j7Hr*W;%>s&u&QRr&BDZN6RB?eFJvI=Lb!Bf6F zafbZaJ70NYaT*Ms@@>M|VBu}SiP`L(uiCjEPOiaIzGXPeExffj+YO%b-Gh_#hPiwh zI14SjB{-W5p6am;r_Y<-`Klib#L2br%5auhcx!OB89eoaT{wwvnah`oQ)A&R#%VTq zYL`todo8>^TR6XDQSjQ2@^BgrUNUJc$Ju7#?ZQcV+dE&iUk1)1gQxzt6sN`DDZN&l ze(!katNxONQ)uv%UOmoQgQxOs#Mx``wB7o=%l2SV=xTe&%fo51@K)k%vG8`_^xNv4 zuj-M6Q)ckgE(>wi89b%ef)o9oIp27kY=f6fdL=lk44%rj4rjN87xO;bgGHgM?UBs7 zJe*|)Pupz`POHIFyX?kE{EK(K@=|dc3|=x`6Hbf4OT%l$8Mw_mU$x&DoO*+&^crzm z44&rCtvInCc;~D38-SB*@KnAsoK*%-?Y9nRm%(%9_a8D|u_$!a4^+MkoCbrZe4B7K zT6kM=`ux?L??9Y9gQtA`II9ev>ah-Ir@>QtQLW6MSrocz7j2I$oJNDEad$aRi@{UA ztvK<2^Uhc4CF0~8Je98oXN`ro0cWp;*XJYVrz{Fy?NW%d+`?Onv(w-?+v8)l2a74+ zESyGzr+%;;XS2ae#@miFaJxC*F*x-GPxWZT*67T#8zn9scP)wtFVXQIJVJLlspGkDr= zYjCz3ykxvRIAeBrm(LkDa2gGs(p!$R&EP4$T{ww<_s&=KNX2O|c-p>AI2#O}(%XU) z`?)#a0XTUEPxbKQtTuS+_v>+@zwpji>BZyZT6kqRs|=pvc}yf~a(gQxV$ zaMl{UsdyW4;=c6GcM{$ZoO*+ohS!MGV(^q+D^B89-uWiurQ$5I@Rs6ivG8`_4EfqS zU)5tQ&LV@Sey|j0v%yn6w&M)k<(;p*F*pqtUK37>!BanI#ToLAcfP8}Seyofr~R@C zXQRPW`)$SP_pNun@{(}s4W7!^h_lh)B`aT?_J4v&rCTKiY;fTy;ZJhjVuoZSXb^^Mufa~>=TU2Qj&Zz9e@gXe5FoDBv~`EJ39 z^6jr|yUbVV#o=UFczHOD22bs>9A}HcOUB!QGo)Lm<;!8U6RP-sY|sft`I3FT#w8>q zB&Ma0PnkX`XHw?4)B4xdl@<*vFP+`rDw>a^PR>b-kh3PGO-Y%Yp4~q|+v+Qp`~#Sc z`MUL1&Z(!(oL*C0T{AO#Zb5zJ%(UW~vRZ%D%&LO?n%aWd<;D5)Mx2^Ia`*_s$PqJV z*OitR4XrP&oLS|st}Uo5D)q~&EiD{YR9elaXV;bJvl#jH1vLd#rNjKQFZ7+}JH5AW zme2Q^uNPUy-`TB=lS>P${WbnMwF!f!4Nl0asx7T3y|}cpBq7ybQB_)ATw|1)~~ z3hRsh-IDqW%k|Nz)&7#|f{KLkBwCX&X#VI^2G4BI{G8I7x`OhA>{`_*VZ`uZ!)Kn8 zI&(JlM9eR!C_3e&nW>Y870)mB6;>4ah889a&HQOCS5sX$(_b@_hT)_AjRi_8tu8LC zosp28HZft)S#_1g32cMmgJ)(|7M9l)75D$i`IovM{K=nFxeNUj6@Hcbr&YPFvm^{X zuQXw3rN7)?;!hZwo5V6>Xu{B}B9__16NaYcW==^O3G?|OEh{%$Kc=ORo1VcBQ&Wh{ zpPrqbpPM#$Vm9&TWTvL)XHFTP)nRQ~=Ct(Gob0UWQ_{vypEN0L`qWA3Gg7Cer{tt7 zxzuSn`Pu2I)2F59Psz&9O_??&b4rFXnwm8&CuMqCW>$XcsEG}gH> znNxB|{EV6X-R@1>r{zzdl9`&7rj*-$%BY}D({fTrBn+LLL)Db}oT}5R*pQ_)#k4`; zY4wG33##*LouB9UtFsIJRje5A|2Ny!YbPYxqJKA8r{B}#gS&HRPajrQG@EKswVc$1 zp~cnJ{_5&tjRVw?y;aq!7%_Y}8}vWZ!OeR~=eupNt7{+mcatcnEw7kUIP)i^#I9O1 zGq<#|$X{PGbKa<7!&Cl)pP%7lNBoIHpmyE4eun3&(wXjH95FN(`q-jBG10c2+8rG` z?A#donHf{^r=-uw$)B2)I}+v4UOHBE z62^7&9pdZVJAqYoELq*=`C|E9X7Kls%nLZg`Mze+8BQoD@28`D&N`ieD7?9!FQD?g z1qZ+_@D%tqJOjQ1Rn~W*>a>o}pBho8ltX>KL981M?`SXe)Ph{+5SX7?Sz23KP+od* zu~V-bG+Wv?P_JIT{X>m)oU?!V4x?r(@NXyCtZv$xDOIJuBZTHx-Bs1aHFf2+PWxOMyOVt#MlR9#*(5SxR|( z_YUy;T~7W*#q&xFi!&?d_*1H@3l{heXYG8}mbu9U>q~T0s2aZLZa&{{SO`k%_wZ83 zE-Ic=K-s1hQ|xMv^Wh)54(m9#mHP6bxB2y0HYg>nxj4-&Ly@zMwVlI1cpy1F?0!(W zeHWQqYC%gnj(@N@aK z%4tq_drm2+DE6rW^I0)8P8FC}P+nK;v~YMje!}zx8DzZ zl@JJ75<47M=~&)H$#p%!S(h&V|F(pl~`oAC|)l;B_z` zE`zh6_PS#DB%A}kg(Yw=EQN>C#^rD@^h51%7s1nDHOz-~a2}iom%@5@FPslG?p_La z!2mpvlbI`EI=m9jgp1+j@M`!7yaxUSHbPwhz8)USwr_$-@J2WW{t70;rSL*{E3AXJ z!%N{Zcm@15)c(E#J`3-Ht?+L66}J_yQgacf!e#3(J8b z$c5g(i;xST0SyFu;12i$jAJk7L_RPKM(^(noC9NE5j+HH6gUjt2@i+e*~gE7hrqsY z7CaJa-%o(I!2vM#VD?A&b9e&06Ap!s!jbSpcoN(JPlYjuuz$fm@O0Q0roe%496SZ4 z!U~uMAAuQg8=L_9#QJ=hFau74li(D%0A|4l;Z*n`%!aKn7w&*F;lUhO&xb?c1#mbl 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

ARb*u`IrKfCqhC7T0x_HR6k3 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 F7(e%jmJ$E} literal 0 HcmV?d00001 diff --git a/Externals/portaudio/x64/Debug/portaudio.pdb b/Externals/portaudio/x64/Debug/portaudio.pdb new file mode 100644 index 0000000000000000000000000000000000000000..fd5cd214b46b59b151c0b30ea60b3fdc7c708bf6 GIT binary patch literal 184320 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�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

gj#DIA1c!SnE8W8 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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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�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
gj#DIA1c!SnE8W8 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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 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

#WBW!0}iSBir{nwIns=eFxbM_H5 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

ko;6dna1f$xJqhrFj|?6nsA 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

Pf+pTk->KlpD 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±VTg19mE`F3ud#Uax$ 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 Xn5&RT#dDz&skkmuA_aFY6KMQ@ikouF diff --git a/Source/VSProps/Dolphin.Win32.props b/Source/VSProps/Dolphin.Win32.props index 8908f84c94..5adc4159e0 100644 --- a/Source/VSProps/Dolphin.Win32.props +++ b/Source/VSProps/Dolphin.Win32.props @@ -7,7 +7,7 @@ - ..\..\..\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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ξFOh0@3|6}9`kG9oy^~X6IY23b|ceO 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 PC39t8nz2JlYBT=_uEnPb 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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 diff --git a/Externals/portaudio/Win32/DebugFast/portaudio.lib b/Externals/portaudio/Win32/DebugFast/portaudio.lib index cee5475d340e9a02c9c36bd15e02e47bc12327a6..30874d6f055bbef21f49302ccff9e5b8d69f2609 100644 GIT binary patch delta 69453 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 MlnE?$g6q`(0g!2rXaE2J diff --git a/Externals/portaudio/Win32/DebugFast/portaudio.pdb b/Externals/portaudio/Win32/DebugFast/portaudio.pdb index 3227491cfef89d076959d1603fa5ab6b02e4f550..12415be92d03aed987d230809912ba3385969013 100644 GIT binary patch delta 1961 zcmeHIYfRN;82>%bK|OFd{QrmIqUWT5iNxg)xQx&bVy+HXPi~r%5^61%T{eY7$R$pV zMpG&gJWtkY%u&+)Ajv7sGS^lsOS0N(Eyssy^Mi%;r8PHt-UAJ2uC34Y-=6<_c`omB zdw*|u!WABL?Z4K;0E(1`mCRQVqY3`pVjH6#`xmP}%T8XX+lx+3{t73Izg|?w;{SQu}ybbcOfOclrF#Rqx&3hdgH6K zSaUC}WghX$(WfXkF9lB9X^sQIw$&)u9-T3s1hPHKBm8=Q40OYUGJ*C(qfK?&ePt)#^^#kM^@Rv};xnrXVzTqU7jfV27UX#}G zE@%BK;v3|`SYVL4-Ch6AKG0UBF6RKLEkK4F7}^8;*bIEI8t`ufKD`b2ISAyauUj4h zT-B;`FK}7?9li;u%Lcwn0(u`*{tk5Ek4~U30NiwFEc z%>tTM0p;yVdf0KzS)mVzs==k2$FrKG{H?%+Ex;`g0B>gjziZMeI)HZ7`5_nRaRJS` zw{sm(zZf`|8&BAxH`Lb9De9{@8HsX2wrP}GmDYYp`Ug}JHO0VnI%X=Zloe5KvbEeu zQ_}21jUzVP$XhL+kv5q(x>wA+1fpEyo~xZPQqf?&6eW9Xkk0()YofQKFc~<%OSYY+ zmf7NrjEz%Ai%cG%MsD)TrhYoWA+P*o#)rMqHb8rMk5?8Rq)j>PTG13Z(jwX!+O5#x zlDT;%>*jvJmhAy9r!F}Z;DW{BxVY2SM%Ihz#G|@47xOXsKEVCdExRhYfbu1~l`f=R2}!Kx<&xD(nG&q#JojE>Ej(>;pFCd8tLRC2M+c8N zqh}8HY5BU6Z>K&fs^S9aI7oSk{WGo%h^Lm{r-*z}%f(Vw#~bJw>8#_G{&Y}kf;#Td zpNZ8_uWFfiO+Y{bo}IDsoL9J$R& zAtR$fyf`f@Q?*<|N8~~iomlX)?yVDd9WRrQo2hUt$nPfe#g^E6ckp`0|DCSrGu!C~ zw`V*3SY$sZ=N{AiB`5?fz|>T{zFH^qeWlQ9s8#1R#j(;xeauQ-pOjFU;cBOksiJ)a z#cx!}kWmcA70+3j|M*B4s0z-5s@#!^dTSm^2Iin-P*Kw0pFzsJI7-e__8Dc$H}CJ1 N6|*OJ(&`J^e*)_Up1%M9 delta 10657 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 T&&0F#u(z{JTgyMdJX!WXNqqO9 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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 MlnE?$g6q`(0g!2rXaE2J diff --git a/Externals/portaudio/Win32/Release/portaudio.pdb b/Externals/portaudio/Win32/Release/portaudio.pdb index 3227491cfef89d076959d1603fa5ab6b02e4f550..12415be92d03aed987d230809912ba3385969013 100644 GIT binary patch delta 1961 zcmeHIYfRN;82>%bK|OFd{QrmIqUWT5iNxg)xQx&bVy+HXPi~r%5^61%T{eY7$R$pV zMpG&gJWtkY%u&+)Ajv7sGS^lsOS0N(Eyssy^Mi%;r8PHt-UAJ2uC34Y-=6<_c`omB zdw*|u!WABL?Z4K;0E(1`mCRQVqY3`pVjH6#`xmP}%T8XX+lx+3{t73Izg|?w;{SQu}ybbcOfOclrF#Rqx&3hdgH6K zSaUC}WghX$(WfXkF9lB9X^sQIw$&)u9-T3s1hPHKBm8=Q40OYUGJ*C(qfK?&ePt)#^^#kM^@Rv};xnrXVzTqU7jfV27UX#}G zE@%BK;v3|`SYVL4-Ch6AKG0UBF6RKLEkK4F7}^8;*bIEI8t`ufKD`b2ISAyauUj4h zT-B;`FK}7?9li;u%Lcwn0(u`*{tk5Ek4~U30NiwFEc z%>tTM0p;yVdf0KzS)mVzs==k2$FrKG{H?%+Ex;`g0B>gjziZMeI)HZ7`5_nRaRJS` zw{sm(zZf`|8&BAxH`Lb9De9{@8HsX2wrP}GmDYYp`Ug}JHO0VnI%X=Zloe5KvbEeu zQ_}21jUzVP$XhL+kv5q(x>wA+1fpEyo~xZPQqf?&6eW9Xkk0()YofQKFc~<%OSYY+ zmf7NrjEz%Ai%cG%MsD)TrhYoWA+P*o#)rMqHb8rMk5?8Rq)j>PTG13Z(jwX!+O5#x zlDT;%>*jvJmhAy9r!F}Z;DW{BxVY2SM%Ihz#G|@47xOXsKEVCdExRhYfbu1~l`f=R2}!Kx<&xD(nG&q#JojE>Ej(>;pFCd8tLRC2M+c8N zqh}8HY5BU6Z>K&fs^S9aI7oSk{WGo%h^Lm{r-*z}%f(Vw#~bJw>8#_G{&Y}kf;#Td zpNZ8_uWFfiO+Y{bo}IDsoL9J$R& zAtR$fyf`f@Q?*<|N8~~iomlX)?yVDd9WRrQo2hUt$nPfe#g^E6ckp`0|DCSrGu!C~ zw`V*3SY$sZ=N{AiB`5?fz|>T{zFH^qeWlQ9s8#1R#j(;xeauQ-pOjFU;cBOksiJ)a z#cx!}kWmcA70+3j|M*B4s0z-5s@#!^dTSm^2Iin-P*Kw0pFzsJI7-e__8Dc$H}CJ1 N6|*OJ(&`J^e*)_Up1%M9 delta 10657 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 T&&0F#u(z{JTgyMdJX!WXNqqO9 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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 z 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ਟT@i(I)@X99-KMdRnHR2SpNf1!Y1l>9cxr{Mw$ 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 diff --git a/Externals/portaudio/x64/Debug/portaudio.lib b/Externals/portaudio/x64/Debug/portaudio.lib new file mode 100644 index 0000000000000000000000000000000000000000..a0926243708cafbc831c7bb061bef41d173edfad GIT binary patch literal 1240980 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

I(S`R6sr_Fr1 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⩔*KCU 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

PFOgM;v#yQ!gup9HzPx^~MeRfA7>M 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

to39M#@)>!uKJMkFH0~=5(eSjCdOvzFezG0C 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 literal 0 HcmV?d00001 diff --git a/Externals/portaudio/Win32/Release/portaudio.lib b/Externals/portaudio/Win32/Release/portaudio.lib new file mode 100644 index 0000000000000000000000000000000000000000..cee5475d340e9a02c9c36bd15e02e47bc12327a6 GIT binary patch literal 1318338 zcmeFaPmd!>k{_Cyd8^$W4OZ$|tKj`vw5U{}enfae^_wZoWjI^U&z3M_{ zXPBA)H#avoGk5<#|F6|?{o()q$v^#v_J1#4y?XiOH!r?@@wE;AQhxsY#h2fH%YXm# zpIlx2?(*ty{fGV4kN)wWi=Sh0^`rlYZ{z33ucE7GfBw~f0?#>dGu1?=6 zOk3jZ>SH}>jt{GI{KIAJx!#|)?{~GLDpwDOolLuEX4`$eI<~njR`*26Eev+MX1zMs zY5mX~pEQ{38a^J6_5QqjQbd~}h`-|=;>4q4?Is-8=f(DcE5amgYeGs(1ytp(t`ApL zb*xvr!K=I1U;g~%SDVetyBDi(@768+?o0DO1^?=W3qPzT&FLH*wryD$#W!!Na8P|Y zOa}3F9?ya_8l1kXclEj1zj?i-?s-7lR_86g|2PN+RI^eN82q7%HLF5@tNhc!beK)^ z5dS}gXwbPXwlYImgJKX*Io96q|o7do!H{VW6QLvzUF&q!_(e-2!Po@Jx zd`G`d^y^XoRnuQb`t{~3`n{oFJN=9P7|5Ev7)}SnQ4&wHQNj6*2+L`=^cQEvHElC_ zB1A^NR`lyZ)6pO3p>S3vQ8hg!!_{fK4jwmK%n$JS-D+J=R{PDaK7uHZ;xH(ZDwxg6 zc(F*bacM%AQIc12Mr3mX9!`R69M6(+VN!?7`8>`REz(GV%uz%XkAmgQN>nb3BA+kH z_y$SM+-{O6Hp-56yXk3pqDrGasB#g^gR~kZi+Qk!y}&9(wQWoh2U8;rml-e6PvJZ- z%VB^VxXmn~!l=5cO8gBf5MMyF~kXA>;ny5Cj0 zq|r1A43=-Jn|!uRZSXK~svAZXDw)_-05HjX$${vU1em9wS%NN2GOJD!)=S>WniF_3 zPXp?=ZdD}Qm!ci#VV;)@t6u2mp7s)^Q!4^`i--~@+bHSH7bs80fckTuljN{-&$ApH zVzWXjfu6h-#+N_g@}<)$64;X!$bD5U!m1=`;jn)T?q+A;JawbY(%79&bI6i;1hETI zoGs?L5CUqlwb(LW&O^K3#Ek3oTnp~j(7<_WxR}SonOz3UJ8QIrSniCt0DCeOAaCn# zgBzMzzTRh4rx1qHc)8rdh_>($G6!<^U9XgF36#Xpkl{Ru1cPc2R-46g&K=XjW_dWJ zj%guznl7^h-$@Q(4?ZtP`8>60^eST{jDiJLgOmlZkk&d+LeXl|i}V+x7i^=H7&V;* z5a(4f3l>zfDw-!Zg1vQtqhuC~70Rl2Ld(D?2xEVFX&fcXvJ zB*iRt;aR-6&F6OCW37Ap&Z_Y*mccAp*sytw6)6$xh%Oi!3+pyUSCs{l%89D!7V%pa zD=i=|@>xE%i&)&~HK--Lk$Qwt#LX~a)yt~0o@_elO)_7gAvRT!ie*z%K|w{S)e;MN zf$2nxH>UvGKpn_Py;(xHQLIi(MdKeVNWz5)^v*eE%Byzy^iyO3nyc&RrHPVY7Ke*Z z$W2kEMLd4-OvyIwr`3S+efewT`?7i_UkKnVqHgszoaPO5;z)?kUJ^AlUV>Q>LNB~H zN}{(e*Ys0bE@&?2lYw`7+YA2f$3X|_?nWmO{Jz2l_ti_7VgIQ;pG zZ(n^~1wmisS`tX`XNjVGHhfn_$vDA=uBRV#jutT%o+a-vJl)`=NN2^fSqs(oVqUbL zv?r|WwYE5P-=xE=E)`F^=d$8C^(jQJo+F|?9QL&r`9ingHVtU2*PCY?SEE@T@Y?0+ ztbU;*JAv#`FJDx{Cm2gs+hb2Tl4_h6#cKUseeNMk6S1@KRD@8~u$Muocl$D>CFF9k zg5qh{tTvZ2x!G>&<^n;_f+BnBf>2cy%YMO<1;bu;Wn49i`zEJPRLdfBXn3=Ll@w2> z_lv-JaQjV9Pt23i=mP4(7*k3T-94$xD7q}n$b=FFb8PgV5$>9hXYR#`$Dwa@Q>wFrCf%Y{`pgo$5 zM7$N^B3hkS4l6K0bQ6({Z~m@W#8FiQVxwg=ovA#0Cg8036|pP(P2@Zu!+7W`TTEi! z%8*&oOR_8zcP4V?zA4NI%?%jI6bgBOttobhvA+tMnp$2>V(b9f1m|`@OBa{iOR=}Q z{RMfLimTh@CjlmdEO$tZ-iu@Ufi>x_s@1C4`@I-Dgde1HT8BVG?;l;^8 zr1fUY)5w9F10y!*BBOM>*$y91RJaN5Bflv$aY`l?W(9P00$cVnn`Zefn?}>P#lmKm z#j^^lQW1<})~-BgFRrycm?^Ncx@rL@MaIUCYLu4mGGYDi;FQ4ZAj)6#Cn|6IakM}!0%?JswgldvV*#jsETa>v`J#?lcs{BMD#Z= zIT{>9yh^m+!h_R(^YTiT(F{x_EPpO?5frQ~Y4{LoGOWU6V+>}PfbginKf!ZM(}dJz z6&sye)u+W`Nrgrz7^{U&^0`pHTaancG>ze!A`;t0<9kuj91@#DQFhg7LKMP4&{C0g zGl0z~ghK}&NV~ZaoWZQTwq;;8@t)s+l+#6CI8LSx+OXyuIE<~Zf!SkaH$h8QW+ufq zQ369@@Q%11R%~e?wJ9JRD|Y>`W6s8r0TxDC=pl;1b;hPmpsg#kBCU(H(05tIE*0>R zX(iSKhJTT~46+xx^Jffa%PO<`S2Y-WS@i++KYvA?6 zKbvP*{b%6tSu%vT8go~43<(tJ)zRa{?9!7l$Ub%VN8aWfZ>!a4Bd732{ zwpJpxt+A>Lr&0d^awGv<8(8W5+-bS)blF8bFIfurlqsC?G@e#f2u$0Lf?eosZo*wp zGq26hGa^`?VTMOl4Nb+&L?8`aL?fZIL+qlfV&(R6P`v9&wd#r$+6obv{CG z3*q*e2hi2f3`kO|wSodOGwe++BwV_%g{(*@a2Ilx)61V)A}=JDDkpf~Q|l6)-BFK3 zy~NhGlS~JTAm2jl7GN-2s7wFqY0 z6Jil5qRQ-<==i|Z6#l zs(4$wcskToa6TWm?;p=K?^)Z-n4+xf@8p)=#872CG3JZumZXrtsNqRsvnkBCM+^Y*<3&V7UI>qC!8q0L1gb)24EkwrO2P0EcIHiI5SB~rCge1@o- z09)lYoT%kLY$2c%kzER9>m&pNu?~UPt$I zP!TFr#LG^RuR-+zMf9QG$>}*175vE5VTD9HFjv%)5&Nc#gK*kCLR{)WRi^r zI9u@a9?Ox9z8+3TNim%cRv(Y&H(zab9Kx;3{bn``i+mbg58kgfoBHFMKMqG6q^&8w z9bJ!zf6@UK@i(u#)%$it>g1TB->V|$Ev;1r1e?d%Fb|VB9|RxE`kX#2KEV39DURFb zh?U5t&XP15UXNx2=!)SiTU0T$W<>kIN&+UdsV9SRmKCEcoEp@SU{yY<5SbXyJLEZn zHzq})$xFCxVHcfOaat_ix#Y<-pCSmlC8v?8?H8^){)GREP%Mv#CDt;TrF>Ew;`?En@jHYp6b?-8hA^0$Wh_%*DgyDwWp)f0_ zJDEokdp@V6d@zhLALCI3j-8*yVGF^u`4Q?fbc*q@c|6!f<%4iCnS=#qDy6zzZO{4s z6H<+5VOE4AlWBq($@O>rBbyI!cq6+`N14%o=r+WtV0+9*2dX@qIsBXtAP%P3z=Pw= znFyuqxLV_M1yt(o`V_eBx*mnsDaj@@E24uf^(QoI7G6(cgwPljgd>DKFT}L-WtL&@ z;}(_0$!vHHNulTd?L3E70dbBjT-bx-Cdy&oA5Y?zWx+ypI6}m<3F#3ptW;qz2#1(U zS&q@tWvRI>83gKOlH0sN>EdV{z(hygQPW8-CD5F1bjyqKBFtfKv&uvKG?{;tnCJ)< zl$VS!&_R|O=@t{>4{q2z9^)VjPA@q191gP4cr+ZRrnJz#7$QBa9HRh{f035;VK@j! z!|8Y!hel!MRHl)Gq#0*%n{m$&yH|7k0)1 z6;9ej@gN?hqhxIGM_I|fP*XU2c3 z)HNg4pb^lC;_E>ephwfB7=$qM5YiOQuim_VY98Obet0~c-@IP0bi!;9hIuj!v54vA z1(Mm~9|*teWEuqHL4--lJ4$_=OzH{wU^>2zqH#2kp3OI}yOOtnXv2DWosEqnVnK-$ zNmg;iV0?|EJtG`t6DP^uyiQm9)qTyUx>U_y48y@Vf+m^<#z8VZ?!|O`=8HdB>v%;) zyrf@dS#%ohdK6!0lT@4@U&{flNxhudHxNG0a+y$4xLV_53fzk1xB zaHzD|Q=qDV9S(H3EXB5WSH(Z9caNKTbZj2V56$<Bi%Lz_vUtBaP%l@(>C~*Z(m*CEW8q;0ps$q8I38;6M}#5i z=3B(5GP&cc^651C!CM?feT*>jZU0#rj2?HpIR%)MhkEs$I1|jHY*EpvJa6t~e}YYm zEKOc~@!<)_C&6i#axWhbWN127F^y$(+~R)~@sge8Jz^=VsQ$QJ%j3QtbRMT7%*Di2 zWb`pkCF}N4z{}xSpHARqD?z-6nGy^&+@8UDRy`_D{>kZPb==ZGAOTsKtjr2@?9FQT zXhX%hov|qx06bvW^{hp^BRFlm@@KsHjTG|gZMhun`f&zuWdqaHP!s@)E|gLvp>}c3_4S|klh6& z7pZc=1w9s8otuWJEzBE5i?7GM6haWzYdVT=c9Mlh5MiC1 z>xcM<13E?5#-bTDI5_|PlV0W`su@-IiC?@`D44r?5#mz;^P!PKT7(kqxUKf9yql*zO?k)H3EQh_^oweOiY+oLl$CHnR9lb}) z+{NPEB8vJ7A-I2aysh86iz1YX4JmD=aDXyN9n`9=;Bdfo{ro54|;jVHsoAa zhQ5t6n-wXSoggbEf}}Tgd`8NQMHJ$Pu<>aTTt5oy=4}A)^N8v zooFj+nz~h`cvmYah>mXKI+4Ys-H}_l5RInj%ft|FW@33CS6LrvEA2@PVq>h$q-@$b zq3b-UXnW8DE>`Cc9@MP)zCMa53C#mWNAy%bYowiqyUUYpruwd*0LH35BslHhF}s+( zpmr;svK6X~N*@-h(f(}P!pw}9hl9UEWQ!|%{S!$wZukA_=|nqA0S~}L91&&kCJnfz zZ|zXQ@u)W%cBZ)fswVpYrZBuS^?qF^dOq+_soX+LD`QV;=c178w8D<+q_m7nWF3BT zi{gwR1rTkfvf^Lo!&330algkkSXolE>C=^8?azOgAERW zTtc>49gB?D4fdB$X$`}Uzw@6Roe_=QX2*)2x0K#yOJ+^>m>2i35ZDt{wK_QkkI;z7E{z@j#@FQ7#`JzD4H~wmZhIklP68`G3-aRE7D)Wv_Z#@ZM$~!(C`YT0>-Y#8X zLC{-pd#I8VdVYn#wpEF%1=k;*?TV~Ef8QLxyVwjIRO2u;*to%#Fe%EO>}dqZZ;>TP zNjxFePMHPVs?s6z-u^GK_SBn;^%4eq<~b=lOjXG)jZ}5)ATG%mCP9#)y)Y=QnXzGB zWQt<$*<}D;-Ze*U&UA|;Q@)WR--{1f4R80sarB65`zV6WKl#=8hO75r0;SW~C2N`w zHLitxR7Ng8QD?nVEoKKvXI-9)x_TNZ=kTa#p!@dq2S1AuAx>w8d@>&_>n?Q4YAnbMN>Lm-4eumvdH%( z?-hw{2Iz0{im^ii6O@93TdS)mzK6Io#2vclDGF$s9V*fQ*!2dNN^^Jq9ut}d5n{w? zs8?0My%>4v8=;EUdCZ|R%v3Pq+I>d0JImN6noeMHt`T?HtAfA?O<6LWyW|rI>6o4I zg`xg{X^05n*7PIGyQDfpueQu@DhcVy7XS3H6(4=ZTH?@>@$O8w%_bW+8;;>M?bWKt zzFv$bMK!PAuXZbFQI)WV+r=RVI$lW9@JsoVUy&S5kT+>-|-^}3KwKY4L`l62B(wJ^jEAx)B zCDVAPM*J^CGkSPE-akGdd>@jbJ6ZkPrK(r-SQs;K-w=QmM|f}7V!+fM(3!ClTq!`Z zp~JS9)j0&8@}{%9<_k<${RbQpk}k!y*=APXuhzDbQVE!x_zt=BDT1GHti)`svcnOZ zIa9EA`-mWho)zE1^mTB$I+HedFIdJEhP;H^b!3oBmo-u+;qxSR0;qEcTsU>)4W#U< z5+|(9KEP?FE^ieWURPcfw4sI>1Q!}u=?UD!zM>xM8dV}KlqHIjTC9T0`OJkk5R4Co zuSd=?+zS3!8y;*4hEulrxZ3#ypM{d@fnAtIL8ncQ2#N5L^t5wc+m;({DCDsS^T3%L z#6DoU)@*um7|o`F57WVyt2?a1+&bknwyWkL@V7yk51i!EJ6bwMh015bsY*IZweQr? zv#97JK0ST5Onl3}g3_8`#X`t&?loeZpk*L7;P^D#-q~ZPG1$!0O(I8xdZ=I?k*k-& z@aHNjr5pEH8eo5uc8Xr(flJ~w8wfid)v_xpf$LELPAHUjxQnLQowv9b-k7C?RLi-v zfZ7%Y4}oo40Ko-Y!O2=&oT8N>qAO)jt%Ua?dp7k*c40eD*xr3NA^W$`jJ>=YCKAs+ zn83X|U`9%XS}uZJ7X0-6>d9JYoX$?SWT7Tkvn@xE2-=_NI8|IN;N6YksgfPlSspZ| zqcv(wz45alqV*sSX}9cF4{HQ$EwJ#o8$9G`pi1aM?)*0K6&7wO37np>sM>D2M1|U> zuu8SAe${7IUZA>ZU^gO%`lZ~c>STw2|N0ZjX4^fY1somrR9)JtpQ?EyZ&I@6zh{+j zDk0d{KWydp9u7GQ2;1K~*7g%!GleaMD^CQ}6(X_^Xdkw2<407tsvd%O%nXLJqFg0uF*9e=WD-3x5)w1Kq;=B85i1X4EGHP1V z1tx;|7>*wpUOT=`Ng%W4J|TgkhDo5iIa+%VL39KAeshF_x7@Z{_{W-fS>_h+H|Ez5 zhlW-mdgesUL6}|%mb8!&-gLlNusufY<~SNiJf#D!HuQW(7^lryxDn9oE&A?u1VLd4 zpr?KGL?PH{p2^zNm$AyxXZ}5(zSqUr<26DAsIe6yOHGIytds>P@G1<Ii^r16eRHOp;7pW-vid1+{k2ShSn z2{Sk(dAJuQZ<~!wu)i)Qg|8|m-mZ!27NZslYr6{Cb zOu9N?#%M1QO^&o)ouE^b=r+oRC6fYHFpn(vE+r@-x_7XHYc-sKhgxeG`rBV`9J#1B zzB)6)uCFEaC|{Tc=wcC;t@_(v4wL%IVT4_d6wzAcQFcn+`@;4pOKid7M2@!9b?|H} zHiT1~k}>FB(+KQf?FB<4)n?c&%vgstZSv6WJT%Z_er$2H#dC8u7B)=?+YTlq`n5gU z(c(UUGjyk@<-0|jwjSXkr~6iTFx98(naU`;gOmF}CuxPJ@!q>INKtim%0-a_U1ja! zV&OLvHd|0<|UHu#JNQ6&Lx|+6~`U8p@j%s1l^uhD#aoKJi)aGe?m5@9a%Pa zkA|k;5*X^8K=JRk%c*PGiYju!h^RR%$T7tzCZw+*g|>WxQw68#^l9=W zidr6(xWC4UQt+TK53hB>3LMix93#JJ{e&UG;~Vy$wlJeo$x)gJEIrdL2$S>?Q3ic zmn;&J9~|K(qFCqV7#t4j0JH2=nW%%dl_x=krw5#Di3|8Jt(I1j5^#8(pcA_YeRm+M zD}q|)FjPv60mb;?N*^-es9_Yy5w1dOCD%9H|kc0BREx zIiYBnmCz6rLS-WBiO`}Dxo+o6$M~}b42~db?TeRbfr5d_ZSO4(ZaSH~gK0q5mW}gt z4WV3YWyRXzatTOcyV&7+ZO1-K^Kk`)u?#3^*h3w9iTOS36B|qn_7&AaZ85DS(m4F8 zN+JfwQR&(^PGF+2t}2B{flaBTVPGbI`{))0PXi|_Lw#{O3tGkZn;ahhgN_qb15&p^GMJd|g9uo72U>2yI8T0Spb%+qHb9 zI1syr;qCq7Lx3e;?=TH`JLD~`RiFTOQ^NqpyMT1N$KhdB6Q(A04yIH+2_$e2F#;j$ zkn%ib3Ewr0ih4@r$kPG@18HBIpp}RHpgmZ{Q1tb~VY@TUf+E2TCwbPIg}A0^qXW$a z4e3ky9R#hFCw4$vhp>D?eD1NKllvP_#>!UE?rG`PNSP_mdpcmvMrj3vFctf;4!}@> zvesdT-P4NpjChV7-m5BV;PX@A$2i)zgNG#e2z$H;GE|);F_s#V|XW6sBzX3E?y^Tdm=g5@`h>2gJwF24fhY@O$$!D-U*aE4B%-TyJZ}5>7dtP zaz?-_XXoN)ZNM|*)deb^M#vB{p3zRJ6pe&qZsG9 z4@fOD)NmP&V8nOe#QM3Zf&=VSu+FQRS-`IK&Q9do>jZYl=VR%r4lC0Z+?Q=j;mgArYbj<`u7N_Xy+w?<{&dQX}t?v7o~?%K(St8{D0Xr>UfMO zI%?s4jW$U9t&ZO&BS++NnS5oGRcZEOV=RZ;mEH9wqOTq%O;1J0NsjCjV>2L{snRm$ zxdNEzatRR02&1sOQk5ZboqKu zOM8HgjC&eE$#L|3U%%~G?~OXR6c=mb5LDs?mA}Glc=~ zE5#srHt)_TCuPpgQcJ#I)K9%k#K?~9ozYbZI0w*PC@4lMr5pDsz{)B>L$N72=`EK^ z@q>4*N>>`**AoVbzb9Y{gCYk{w4vm4H=Bq~A7Ph7tG?kw5;Zm8ois(=;IakY?^!M9 zln*t`mTOj+4@W55ot%5Ay5$H7+G&uKo&@it;aGS)cZq9BHnj7zDhQvvZJ!ivZNZ)F zNO?VUv;YnD&_9ylzRPyyhZfN{#3qe@jA0?9<4j~5He7776*jK75Sz?j4h~6>%OSYO znelsLYs>ruE5IIy+BdjU4Q^Ig46HuB{Q!I7P#lx%MVS32uW?tj^3$SdsL`6BIf&x{ z!R8}%g0hf;D-?n*zwD4BVjD&0=8)}IzfoQOLbXe&dmE|_=Lw3U50nBA_hWDoCigi%-b&{;k(O~;-osvX(VTT{8l(}?BRRVj6tl2*Gk(YUq%5f`$_27>k>yffUNq4^p& zSQ<3(VS9qCG4_fE5*Jr2%1~y}%^z0N9f!%{0UlWCusBNFpkQ|t|3j9EhaB{Y@6~C zuUqR|*Cc|5gb%&LqoQ^q1_}~Gv7Lm*2a{brn$ zmie1L9SMT*aRGN>doyeYP6a^Q(x->a!J`Nz+*IBkHG!*1K@4fZRzUJjT0(`P8_HhQ z8~PU5llV-Zp)V<1uFByLAa5G20GgN(EeG210OghfaO~pRdzsbs3#gJF0eOIoZz7vv z7W;5u5%L0=Gk`Y+WT#WrI>X&!%u%~BLj6*t(4MgHarA{|Q~?u%q`JEeI#VetVA z+rB+}roTh@#9J%42Gc1nZTKk0ux4cssX*-ZuA@#;5G^|I31v#(?nBB zx1i|Ug)YJ3(sLALRZ4W4r9udL?lfP^`t~6r8LW*Qy6CALVkRGI+>7eyT^S?q-WT z%#ai!6kdY@m!wdrnRdqzN`@{v^>D9`A^u4tekqTL;~TL@0b^hU8#Mc7K`0xcM)QGpDyD z9v2tRw&h&K7cuZ~DC=Ko?{B0sBzi{4ZIs2eZNgH_UoGbdgVE;8$U;OsC(ydUd)$QuEI&5*+yslGt zAz9y2KqL_yCmmAQ{^OhyI;BG}Z&<@N;9Lp`@(HdOSC6xr3F#>crA!&=2y8Ec3MnHc zgd|l!c&NnLwr=h1SL22a>S0vf#)^lTfEMRFl0EuKS6aYC=P95JhFk6-$xnEi1xNGD zXIZ*vSaK{1ol?lb9-Q}C7rKmShq2*Wihee>ISOkG_Q^!c@`xQDv0;^OQsDRMzaz6#T0%zq$L$K(z4nt8cz(5iR`g zo1d>d@E1RS_2T75Bd)5$GjC`KivAbaB)<1iGKuefi;eNdn}qr>GbAcU<)DHF8bPED zy_0YypImwshskv?%7Q_f#^Q+}i5aGY>om@?*<>~-0(wq72T6uU?eM4@J?1W+7_-x4 zco8t4P2+gtrooejZX)qyB{C&RAeev|NN8<5Gq(FabURTU8o_1#d6;-B6D-K)ghquH z;o)h~Ky#tLVVGCk@#^mV*I%w)ZPYIV{;lyJF40l%Y_1LPw+6iBBx0$Se$zvLXYguE z|J9f4*WVaytn&Hl%S{iww&7~X@fg-L!J}pvKB48Y5nCK(w+A{LTt_oJnK=sv5l?*% z2+Y|wY*UU0`E`KzJCoSVQ%C0TlUC|Et}lmUJP~<485VfB(5Qi?w%*!1zcC&=6;ma`B_lW=gHv5tav~lZHYV`nTeR}7@YETI7WI*j z0{dtVf~K3g<$-v1Jwfz{)kSY!`WT0S@Xs_KBS26SL@ zkoqycL@hUX(m{TTC()uj4bb3gyca7gDIv2s!26Y=-ck7~3T9)xv9=ghqa{7#Y=Q6& z;bhUmvb?%U=8Gl0gv!qc5{krZ1U;MY{m~6_;PAil)481ld>ckzDn^<~+b4#NzE*)j zqhuc6iUFEKkDleFYNm}r+>z=M>V+x@qfiWLRp!e%y$>zn3wr6(7;c52=%^~V4c?{v zlC_{_pnM%1tI;o(s1DR&136!W)on1<`Ev?9_?kt-cl7Ytjf8qP@?WN}$OOByAqpF9J*je;<)Fz4`g z>^Pnqc^OE&_2@<9sdx~cd5_wl)1VWkz9gd=9(#G zdZC_0FkiTxsz{8kA9B1BE+CEmIoXZbwlM_JnBNX*DW$H-YX%uELnV=}juXbeF+(<5r3l2_5}Rp7@AEF;vudJ{blz9d{YoSCJRG*OfR0LKkFouo%1R6(8QlukCy(~dJrp9n-vT9bTe`GCy?b34%KpzD7F1Jn4*Hn7>Qj(mjtMb-NI>yd5-13r{kDHPoz&G>hC-|GwK0v zl@*)%k$N^=s*EOjrZO#EZ)GkFRPRclg$#-(X&qOX*h#un%56K=EdiwUMFOk2C6)wi z=e%2hau&yhZyo9)taXUd74xv$YXar0cdTY%2WzVeN>Q_S$r37SE;OYrrE*xYE%7#bgMraHSFhYmbU+cnsl#fl-B z)TJU@k)d`;be84s0_f*XT?IB=&arb?RH;-?dTK&@EW67^a#kZeI=aBNU5-l-G03LL z%7wg&l<%gCpfu0lt5nWE|#K_arY0xDSX&?{Q=VJ8IEzE z4fzqfiNsa{?@JtUlT{au^JS}t_*XvEE$#%uyC*#PvcQ4GxTL8< zTg$5ozV6$6J_S*R?ex5Y*^lJhZ?X*%F`de?nRYihW5!>UYoKWxU_ussJp?)bR z(W|?)h5?IttLQgg_*Y-PG(D->Y4z2YaKviIsOg-lzy8_}_q$lXymROa5iSrR7V!z5 z!tn4oLy#-EJ2;F$!Qpt{7;a?;%kc+2Xi8~k$J83scC+$Q;(&#GvP9Iur9dz)WE%yH z31K8Fqa8CMpB^e1&pxMcDm+?GFK?_iDmqe>*CF8w+cYCQh47)xM7IWA*h2lC)*+z? z9q~w$DBmLJ>Dn%hn@ihkZH06-sb(H97v_NvQNz9HE*Ua`?$epkbF=JQwjjb4tU>X9 z)0+VrW8s=3XNNmNA#a~V$b-(PODszAQ@6d~l%VrVP7X$77vqoumIKLKI8oQBqefzl zc)14;A&3M40=Vmqj=_ncG*EUN4o@zH1;Zmg181SlJg`DLnP@UmLs^zfheHT_I;)$b zlc7y$<>^p9kMlRqY>t^F!~2rxR+_1;MjFktYGx79GqV^Fv)HT=Z;tYwzNgF5jq>!Yf*^dWy;ATVGWjAn!Kk)KnxUBSb_G`>!X>&bMG?D3$_cJt=- z2gE|Xc^wpqONwZc>nNBEMCor{pPS~*>(c{btU8qGI4r_&h)mI|Z(h@zr*}KNT(q$% z!$A~Y7vph(>Tw|Go7dYD@Y=NrL&e|Z^<)5F(l{QEbE7VDfV`Ez9)wXk zO!F{B0yGUb?YwzSj~)he`pz4%fH;u?JQAZ)%RTOHkYkv)TWFF zd44_1hk2$8HLJVF?3eNam!NR3wQ0wLX_f^6T%0hhs5Ib=nAJ!A3JoG5HN{ zy?OENn{UxAH9CzFzkl5BFly=Q_~!Ksof!Rtc%@M?oV4ZM;Q~yHOEL2^SVpeLLt7%h z-@0_OU^>Z%vC#+~7+a(igV}I2g|vzX6yXRKqQ^wIS4FW(!4NW%72HKb;x#yI4VYex zpn6Gck8%x#h7Q&cQA`m{@^F~Yh2+)0ctDe;4u@57s5h?We2=Loz*H6<0mZ34;~VA5 z5FJ@OQ?*cDlSG9bj96D(6kTqlqZ27UQZ<&ZR9q2+t1r(tF+i4VC6h4KN=oN#K8Ikk z)R8wSbB>~c#)gZ@xO2=L1=$=^+1g;W#PYP3k!N?$K-6vMIg`py-A36M)fG4{hP(av z%`?68sU!`>q9?eJShruCEn67@bUY5Y>5xOn%`1^XbP`Ppa0};0n13+f3Pe%JP!kx2 z)46*&>IN$i)cB-sF+Rb6;!DIgi)Xw@@N$kgabd9;m1ZQ?x)>94A1bWaw14&DOJ`Gk zw>_TDZIvoY$(lXC0t(^r;^#QovcOgG;&J;3C*cIoTU4W6v+Ad6w=ix-@(77CDUcoD zr8WlWx_R_+28oM!Mex3g`5oeow( zbAQ!As)oJ)_Sxn&5Lhed~L(Ol%KD^{_2%L z{qvvvgR85n{eSpdSAYJGe{@wGe{{9~k3YJKUj6v$Pyf}Aum0_y{`l%&{>6{4{_N^+ zU)}wipI-f^^&edQ_kaHfSO3rd`}eN?^N+u{TKuCguKwcYi>rVA-@dr|XMgsytAFzE zes(qaFF(8b^S}Jr)qnlVKfGH0?$y;#u702YeIfr(Uth?7KfU@p_@}2laC$*6zWxqlRVwlSwrrJFLFoVDhiXA({+@(TO7XYA&=-CG zK5A(GBdGb$#Hqhc{O@sU@mt~ldi?)?b)DRv{j^@O`}XtK=N|aqr3Ze>(x#O-pVBTN z?>_(j+ykF`;Byar?t#xe@VN*6s(QeupI%<0fA{L|;@|IF{k^NdkDtGXzy871AL8eW zt3S~H2={jZ`<<(w;U7``ecqW+N|E{>0843!j?(??>Tluu?=s~dUC}>EW&Zm^{q=?Z zOW^+ic~eSXABo-BPq4=l|9*7!BkXkk5BcxMNco%o`yHK9l}jbG`i_9oj_;4qy5B=v z|A_ZkKS7&`?x$QM`u+QW{0_sY-L!+CUEojf_a8BoXvGds^bF~8-K zeoHrF|Jn7|li4JQ#-q_-j7wf@Kg;XsG)#kHc0CYoBGW7PbvzDWv>(CRf1umEEz|d9 zujV)Lut+D9Y&1{@Dy_udTo0$C1jnEUtB=RCak5vo<(t_oEb?h|J$S#u+ua{wrXSf} zrEf>qqbLlDbb$B+jR$do{e&Nel>ZC zvx%b-;s@ijSiEz|lW9Jkjo|}rb5AlvZX&?BOnw==Oes0JiO92RE&lkR3Q^-NOO-8|R7{o&(e|6e6qbNwbKEItHfnWO~ir*lr zV2Z0T5Hm6jVx#56p>+N%p*sUyF2#isaTrD!I;|Z#ITnjN$88Nbl5Tg`Zx*^R8)UO= zn2jebkCa%0N#COdTlbTtQ&Dvh2uCbv-~DE()=bje*A`!80jD% z2G`I6#zuFC#d2BFq4W4{7{|Ch$L{anGQSoR+m+l@<5`Gsu#qX-f*Fo`M(_G(A;Q7pNp_u%GJ`F^4YOrQ_g~N*7ge6k9I=}Z zpfOJKEQg#kFK}}1cXBSoL8?)Bosx2kX7yew;UQgmEH4UhR&FO!uc}N!_;th93 zm=XXdm~xyr3KwdT?JSx|myEz6h}$#jNr%INNDM$c#_3{Qc;M9Ye;^cVILJoh(Qura ztBD>tI&+2dnWF&VM3IgV3PW7@Gn|fxacI=j6xuX=Sc%42Y$p2c2Yp2Y9IHsD;mln5 zTt34obc{+{(P&Tal#SJD9c$%jjaUzCc))x3b638|giS5bz3Y{3>V;doro(JXVXD)Uh(f?~ z>z3d^=v|m6!w?#LjDlqD zWj4)l*T|dKT~!OQ!_Y6X>ulWK)^!`;{&+h+yBOe3ukm#;nHXeI`sUkdX_Z+Z78qA~ zjG*P?hO$lbJp~``ahb9mj{MsWE)?VQVh9sLl*X_MO$Su%@90-ezqoqbef-HG=dTFy zl77*TVuKgMF_zx=I-8^gXTpQWsm?@qL%-TQ*(9|kSVOQd!F2_Z9&>W09ajHk6 z0mfY;%SD+P(qC87dMYKgresMhu`iskE?3z9~V@}4u2sF47O9{>$zNK^X zw>Y2pH|KshaTne6lnhsR&xEaY9HdUi#>C~6h}{aI`@y7_P`lJ2cN4md5{M$`57@*T zaB+@s29=;Rq2gR~i!^Y^97V|YB+W!}!%*_tXd=XMW?lCG|E{~kwU*NpJr{6ABY;8T z%Ymw4f|Htbm5v9Bhd#_wx1J9|%eK`CdM{+LSNt zYp?vE`vP!d>*ss<A6c$SugY@P93=c z3Gw-gJ_?x-xA1+wqVIqG6@7Hq?sB%MMz~6}x=pfIFT0nnbs?Xx?fZOfA77wnT<&PT z8RFu83)l8dOT03Y<5qgS#gZZ1hOWL;7lh&(yb@0pRCJem6%q=skX%YI#$ECk@M!|m zWiiQdOCaw1!?Or_4ZWBw%M+|EWNxOb0-1Cf;oT{$D6e1*g&L&vCb-$~0Nmg7lm*rdiSb+f^;(~pPE`(#34D&7!cSWlw1B~RL z?vwFG8J6UrAPv$8uUxZ<+LoeaJ6zw>(T4dD={fw&mszsP?DFAwl zi15~-(OGE{CB69q<;fUOf6jApslAyyqG|9-kf5<^39?Qle|E=;itlexglv{=p^*bEOc*i?9jZ<)!5hUnhVtfXK+ zn?`$=jO^(KRXpOy0+`<8a8TrB>P7mC(e6PbtC)6`0mONQd!83mvns;1u!6mHQ%49a z5-XHd4}FugzdZ3`Ob@P=SDtlA7mWGuR3(K9m=v?vh0E)1t@>fDdy5w%jOPA=UhAS) zBn%jWr;sJxx^4mScB0+uxCuL<_n$1f1-#uhAcs35AKOJNZuAqC*?3hheq+;3BRJT!zQYpr|Dj@x7@#YltYEXt19J`w(e42{YiQhyRDoMC7 zLHxlSGv!sgeEKQyE=NArb@b9ih;(rfBA|Hup@ zu?~2u8PWaRzL}{~0`DCsgnaHPD%X-gfwtBsJ#t0Xl~YJ2P{M^fQ5Qh__u zYTOs*?RVNpTtLyIaeZjW^9!gKmy4xErdU1UvNYWF<*yl$+~5iM<^n;_f+BnBf>2cy z%YMOv$IE)zm2uUGUX$}y-Y2SMk>sMlBZ)l;`$gb9xWz*f-qPmDXmkN}VT>syiSC}% zWfWZ&W@JK%=w-WJ{X(`{6Y|WxIFTIEOS0A?z03;^>BU@^L%i{#HW(gxwuoogHVW<2 zgT5&|i?Qqn;4ZNAg;i86p}f}lRwo1PYnniNRyB!uE5t>#I^)f4i^rHCx``-^Z~m^J z6H^7=bM;Yq_>5DFX;{!3V%@AIa-NUzqF_G(Z)L>8l%70rK**hmT(WNpGeUC%MiOte zF9K{$u|tggRnXMb@@j&^CSogMjJ=&J+RD8YyFy-)^%dk{Do)YmCjlnCjQcD`??rfm zgmxCVNping9a*j#0g@b9i<|#&d*6<(o4>Cqr9mLyLa|{DuE59Lp7c(Pg@~T^tB37c zT*Toy#gn1w&EI3d5s`FZeyhc?~`o+ z?}zcKX0%RVDq}lnA`4}EwsWJ2++y^eTlDj2yQ>pkoE$`2Z?-&*9Jo0!VuLO+O1GQs zkY4ebmL|B5{HD;vDVbE5733K$c~U`S)nZ{Y%kYvgR;2u7roQP#yE`~ z@+|WqRY16t6p!lJrVK0XC0tIA&2%ct61TUa0^3tjiR`JUz*>HTlw@7CfRiF)V@EYg z%Xc^x$dz(&N?>*pmA~juRNnUEXn|UYrv|4b`y{OKW{8#}{DoPZJLy?On zk_wGbFjfndZv`7g!R*)?G)-f;P85mlqVbJW@44C>in8$tJH6v<i&ZUIy6<-TE+{@&jI`OouU^5QkCG%Y8AMUVkZ0WwLwGYPUo??1$x>T!noc zO{O(4hn3MJO35kZ>vz(bxP|tFBycAeI?J2VlVoU+dIYiC%}G|kf#h#6jui)pN*C*g ze>RH{etLOzC=X{!ziYn4bBb28m|c2u$(Oh#K)5~i_)@^wXpUZm#{5pnAvMfa&OP&^ z1q;WqlLn4FskL?y*RCXln;Y_pUZgkXJFjpoHSu0IdAppkS8g8NBzJ;$ebkyXPqPHW z)=I>-HC7$qH0mEfK0y>O=2+?c+-bS)blHf#;>W7{1dnjW(|B4{Auw$}3SLCp+{B}) zH1pavct!-vGtBU)s-dZvnFyre0n$k5>=3)?s#v*w92D<*QtkR^vCv)VWp-ms=Q%=i zd=j;UIyHm)B-RCagjQKZ$*5=UdNUP{Ska;I@UpDJsrx0bgI2}Lxh=@0$Mcq-5H=c6 z(qpvNH-=L>p>@MqGl}V50M^1ZoOa|~87m6~eb*x=7Sf>JW^+^ZEz-+^pE7kTbQ8i; zqxRK0AECE}aQn;y=xS&NB&k(3L4lbW_9hn+E?w9{RwNX-3pvZ_L1BQGHv0H$_h_W^SbWfWHB;K=%9`VYO+=e=7qMF`zI^uZ{ zJM|E+`)r&06kb4xNppW1LZv)L9w z`PCl^>e#lYLg>*Xg|4LHKsb{h1^udR2vle_0>!9yXrl z_9ZTkc$sW}hVYJU)@v2O@sMNHK<5eMkh_DJyr)IsCE4Rqq!b3WdJ-S%oq16J{oM2J?2>*y~zD0~G zlbx_CpH8D6yv30@dIS;B_Mepj1s~7J@?9S4)pz{-ji*lXF>CHzD>*HUSZrwt^p;+H zc)|@95IL7}m+xnts+h(yI^x-^eMP)vXNfm@>qsj@vJozW5n-w0x!ayJaEq`Xks{$R1$Kf7rsCcHa zLoC4Z9ksTiLMppF1-}N_mot7IQkQxDpvO8~?P_v-RIRSat<>=3l<#-wSDDy=&+GN$ z5wB{|JIGWIjhZ!r!CiQMAd#@zK@&omc=Bkop;&)Xi0lkpLTXi)=y<={Z~vq|%4|BB zD7?`px{CAq0XGHJNBMM|RsDGl@pY^>&sNhV^j1^N|4#jZIN;H1JoC3YlOMzG0+NeV zx!?juzFa3Ne^{+qnUmR^>wD;qDp$CZFmH^n$GsFn5Y}rvAA2@C3Dhkf-px8W*AMXz z2Xu>a9Gkl|?ndQ+4%`^72-sXdoD$7Awt8R^pPF4GkRO$w+@C zN_sI?NjQ?_Z5tM=(|2|^_n^%lrMFJ^Mi1g0&iZI~6N4ad)(y#k4L!wGVjT2bft-e1 ztpY4P(92INV?ZS4bi(?Dmtw7a9ozyJ*B(AJ?G%*R4!6hihs~<3qDTin7pCj!5%bXtUt%prJ1m5}(=?a2Y%WhiDsF$29X}sKy?2w?tTduaV z8LfV>q@G*MqH^M~?nZeYUL~(?aPlJXKBNy0rNRTorm59q)QAb7 zxjrh)qdttiMkTjEC_}te5Exf=dkVka?Nipz$%fh4wHx;rkezaD9xFr2dYP z?^CvdRSfra!1@oklg6qb8H6{j9fkqXh+YA`OhV7XUZQB;FSciLXIpb)wt8QyErA+z zm6Jn?`2#iO-rqh13v70^hvCxZJy^G|yRz;2J5M4Z>0B*G3Xq&0IQ7@UM0xnnLVFp| zq`1U^E}fSJO(Gu;+ISBWlJx8qb_Lcu()E0!ilL1C&YXpjK@K^8;pV^1|lubll#5(91KnA?La>^lb!_SEO9hgC@3e zX<|^!@vMqwM15Kxx4e^(JxkE!M3!X)UGdw=q0r}2V-4dYgsRLKLGYAqt{Q~8~Hm3`X)ZP*Zd)^N8vooFk1gg#Usp&4%1 zy6OB7wWJ`ru#py%c1LdILNuB}7tIfUi(=@vA>7Qw>ecD`Nc5h>AU4L@Ov9l6w&BaqAe_E(Sf?kU+&nRje@^SA2+Q{M6E&|fK1^mgeA3xeK) z+e4L{(DSPe!obUVg@xnUuE^^1_s#LUi_Jg;E&I=4;|5#8q$pe1(+H5?B1@2xc!Cp9 znFZXc(&?Ap{x7li)SHX-5(axz22z{cycCd(5%pGU2BjZ6h)XhtN#Omo7X~$&Gd9eN z`k@EKW3X5Bu_7n>RM^1AMwer!>iiyXMXsnhlSRHS zd9O%pGeCbs@jbFb0u%Iz`OsQjMe#kvogwbfJx@_U)9g@@2EeX2xKx_E^Y@t0G>8x* zPD8z_0uJourEi2PTIVr`&M;HKh->#5+3qZ3n`kbXBQ#~naPE>%B&1_@ z#ut8u1EwKD7h2PgEbo%)487Vizo{go23!2o!&ZDI18a#xOUAo1VrHQAxY=-UfoZQ+ zMfUY#G%2ci{eHDuL5r${J=`u1IZ)iUwfB;_;(r~L9BK_MlpS@d5)A9)O2y*1S##ga;M=t|JDK{Tj^5IkZd28d+zlON zOQ!Kojrd=PX7uoSynlSC;UH*C?}04Mzg?<&MURCsBZ>?GSaImdb}hO|?E#$`JHc5e zk_{cUy{yhv65U<%1*WV10}csE?-JN-Gpp}cYgGh3_daKvWL z6zttTBATUV#kVkh9h|Ptqz&GSL3D*7FX46_8RXJsjnqj>7`U9_fjWo4g;Ph~K+3Kv zarDFN1B6+27lH!A>&mNwHq@BIIB8|2CvXq@ih8VTREf0EuIgRMRd6|1pS@wkK*@f*qVSD%8gzVo!GxqXsm`FVP zU;_8MRc$)6p6=rr!A35Yc)NhqPOEtA{lLwiZ};+zlS`G*BgUA$NY8_zDZRlmt%CSX6B{ zU7|v5Q&^>1SHJ2rD=$#pG|-jFp?)bhsyf*r;J^Mvve|b3oktE`+Nz(bd4q%E9SP@I zC7enK_Vo{2xxI%&jsn8=_l~vwMCae(&T-|5fVx6N_5tm~)@}TV>Q>c5@Q#_mFnwq^ z3fHcha;m7qbAk z1c|5iwAyB(gg)d&m53GZBDNn9F5CJ>bYAk0ZrvvEXV?332NlQLCbFuLy|r6)aHBto zd@)b)ld3}sb1TBoa5g{OZ4chUFpvCMl9R-n0-EWHkC^zekSiDw79zI#peltoQ@O)z zRfu%PZM%hktc?wQyx*8# zKO7obg=S?EsX2(Hj9|EfSV2a(Y!+j|_87IB<7gm61d4UQ(DNB#9E0I42m#IBqVH}; z5EO=hdT&e=f{o@BqEDVi`Z88I`pmzFt;#^#<26DAsIe6yOHGKQ^*Vw2HiS3P2$`sI z)c}*q5q-2+m}mr>(*ns_1UAevt8sx_gD~07h>Z7uqI%z8Nif3P%>cVi4XeEEw6!dIHXIh+{`jzf4u+C|KP_GI2B^A^&g?N)(d&d_ZU zN@?|{3GOdYCG0Cv;k!l7(1*@=QIQJVU!(irwDb z)nrT9YBwqkX7X?^Oy2F%<%0cnF%$Z#V&d(ZsBSU%RDt|ODXgy;g>#BfePEWMU_FH> zw6_$6w2Mhs2h14lC8CZ?>(vQ5HHmJcY*;cWU@t5=+(&c5tnRGw@Jr4MTtX z>y0B9^~P6cM%eYWq#or9)4*CSL;Bla4wL%IVT4_d6wzAcQFcn+`@#h!d!_}86FJ&a z*TJ(n*APx^O2(jjO(U>_wHFMHRGVS9Fk>Cow8=xe^Uy$#`LV^(7SGMuSlBcnY&)2c z=-2mpk!x`uz!|zz)MDMDOY2(YyMvSaKqqN6+%@lA7^J8=JLRIt zfv&Q4adMyJiKtU4V1E>2sF_A%L==Drj-zO1vuKQ4cIT2!+lu23+|WV_FzGTet<~w?S}NIaCg$aWA;*Ddu$H>2@?omA4c50Hd$rOo|Q}5&nX9l>L6v- z>cN>Ygh?m(Bsr0ed9Ovd{#N0Kx|9Sb&_qO{2C16J<8nqObo`ObIn+F6+XZw~ooAyu;9?wlW|lBhB0g(7R>^dR~`SLtYs=Gf<(opQ!^7F?4&nrOq8i1j_DJ}hYI7*3w%p=mhK@cJU|&Uy>UFB% zG@U+8o6I-+V@--bi11^>||Jau;U)06Hkgeo+B3QBFm+%X%!sr*&w61fPr9NV;(Vx zxPbPKZD4``cQ(NcwiFPC2wrqIg$7DWbQ&GAej;5t8V9-Qoi`G;I9SWDCRi;I$=g9o zaf;d)6u!=(67#?yA`40te8eX0zBawqf}AIbTUG;~Vy$wlJeo$x)gJEIrd zL2$S>?Q3icmn;&J9~|K(qFCqV7#t4j0JH2=nW%%dl_x=kJ5il%i3|8Jt(I1j5^#8( zpcA_YeW?knD}q|)FjPv60mb;0^_fgKY8VA_g!>#U!-D{)A>Hk4WUb@6M6W1i!=eFj z^SIV(n8*ph2N=DZy~_qbP^daE9llYy*Pzv__GEKjv#97i}Xki47(O`-*Cz zwk;CJ*VOq(RT42cj!M_YaRL*CbyX=u3T#Rx4Ffaz+ea=YPXi|_Lw#{O3tGkZn;ahh zgN_qb15&p^GMJd|g9uo72U>2yI8T z0Spb%+qHb9I1syr;qCq7Lx3e;?=TH`JLD~`RiFTOQ^NqpyMT1N$KhdB6Q(A04yIH+ z2_$e2F#;j$kn%ib3Ewr0ih4@r$kPG@18HBIpp}RHpgmZ{Q1tb~VY@TUf+E2TCwcTi z6ah*b9cV59q%Y-&=hD2)4Z;p+>kyVtxN76r(8>LcCu3zRX!o>q(~GPq&wDyx%|>Yj zgfJERu@1mcfwIm*>LGN4ZmB@>G*O>VX#evZWiaxVd1V)WvI#})0 z4&Kb&?$CrTbXK8tcCUJ3)HrJi7uP293NOG1Ti!5`JZPqa*l_zzQ!!vLPf zv0KI=mkxRzCT9e^a&|6$)&@K?UR|K#X@m?R;~DLgO3_F-3@2{jFnd{qDIspl0yY$n z*8HF*0~cJbanQhG9QM5N&0e@m#Y|szO;sWb5uW6!22xP0i#;7Au*0zI^>%rzL$y4p zLq%NnTPjsoe>p5~LfBw&Q8QgouPX0=E8HMi;?80Rt**bq)nokfSj7)u({;vz%VaJc zGTeF`;7;x5$+D!ASsCKeGbbh8KBhn-x*riOw}{A~-MpB)4w|k{qJ6C$QYViFR4rC3 zjXmiN%cq;z5W-j_pzXlcV`{fH5T*#68`h_ewVdI9V#plCQ}Ie zp0OL`&;wG-3^iPaBN*`=IQD*Ss^9=Sl_5ecVApzQCvxp|0z2gMv2<03YA$Emg8Q;< zDf}6SP>+u*Q$kqUo@CargY>!S2f3Mke~jQ=m2 zMjek4MMo{Xuh9mHzt!>EWaNlkE|af}vMSA9Y>ee_yRy69MD*3er0J;$ImwZIVr&LP zGgVr~JXZh{T`mD48DSK5SE@23t}`$SZ!Tz}pJcTO@m$@A#$UA&z^(2knk`{{nM!m| zemI|@tT!?@g2Zs_-|N+g>yNF0g7=oxl3XaQcj9mfW@Lp?p-w-K=+xlM47HNfExfmy zElIM6ZfOs&k#SEWC^?S4@9Vd%-QAi1oP|qqu{JL8b0xofwq%3i`H~G{f5~I0@GPJj zt#>d}81TMQ43cN_?u>F$=IkuBx)-B<>SZEEc4Y62u1df;fc8Q`!7VA>xJLn2RskA{ zP02}bxm1cDylYju((t~XFi8A80aF+hIe4NCC7-+5M0ENHyChomjhIkTQv=>fQ`8ME zTj2ek)pAbxP{VAwW`+51gtFbqxtFS2j*y_821)5j@J<~ z1i2i7dz=}+H@3FSPp|^)alm+kJJsN3g~h{fg+kCBmmP9MY{LkqEt@U5P_4T3(4MeA_rm`__Pzr?sw(^c z4WWbt$OKUk3nQRn0a73|OD4$#B57n&K!I_RnZQ7r$%JN$3zisJdoSx2UDqz_+SgTA z#a;WZtLVD+!Yb>66_u6$_j~SpZ{EzCgfi&Q-GAQa^X7Z!-1E-6@0N4RyYHOHvS37v zef1|2$C?NmpBT&A#9@1eofbq7YHsI=h>@4FHf~wojZf`1i}d9@`&C>SvQgDiij6Gw zuG?E+SrzZUFn+JLU059wABbxHg<|7WhOfG?yi>=iY-5Wx+l^SRhj;fPjCs@zU(`D= zlTY4EF?C!^k1Um&@hq`2Oe;ix#ZMBaA!>7|IZ!oHL5X<3ZFz7>9M^$#(@U{YSPfW) z7T1kDJ=VIeX{K~eJHCF3bF=QAY%aDAaz`sZval=!7`rr3Ma`w0sF|SpV`-L=@-+;! zLYG8Fm)2;QEx?Wo{gEvZoQKHFuqlj@uf>9;g~!tpYJ;w^%oQz>FkDgT&DTZP0Y<7gVRFR*N@yV z&)5)URM^6!TA#ncl+J9kKP)N)=Noo4WD%u;$Op>=!xGJ9Osr-?Q#No}(tZz}!BQBJ zx3N06*IQ7|t+K{;2TS9UD6Dkw12RhjgdDq&W=Ip89eiWk>}`kJJ=4~uYSrpxJU@EJ z8x>Y&vetxlg63R^cv>r|uG z#hM&2qp3Jx`U>3(Qf_o#dMv)aY+Z>d0L+QO4MLnJj>AwB3NJ3yOL&hs_qcPF6*Q z*fZG}luuHk#^lwCj{UBF7;+1Ug$5&uMpOmfwdk~({8IJe&{_|Lh;O?rZGj{xd-yW( zU;~`-_BcYt^c;r4jM9(LW5q&-bxR5v)mwvd7)jw)GxK!}qjbAjG3kgkA4ATH;35pa zTm7vuyt-kUSZaNq_`a3u#LLx}OR*chRE*V@Pz_$N7^=?5L6Y>B zlaFEFvm6#V3yM8(0bL2F&U~Tf(;Y-uV|@8=h&a;|69up6`E+DR7jmAtJw!$%!uwBQ zNm;3nDEG8nWzuZvFk|fLh(r~XmAH%0x?)pGm$oJDVt6=&_bzZ$T5hSw`O3?Ri{Q*K z`r3#uuj1k|clMB4nDL31Z zYs591RR~TE)ROAaMQGV}IY(5M(H^I6A2A|k6F5^0X zRXEgumMqIc73>e;b%3T*`~hQl+YO7fj~E{HjbyL{@8V_Fp)SpXwro;zp^fy9f0!h> zx5VbRv=?I@sDCk}Z>&}EG`w5X1kVKK6{Nt=TQmtq{qy0y14EvMm2N#90erRr({+&x zxur9x$6^R0Yhq?>L9n(R#s)*OeNEjPLrFNMG33R$LSE@}8c^9h3w{9HEg{vvMCVHZ zCM7Fp2E+POM((K7ncLP`wtjOxRx-MqXkHmDPPk2yrzy~F#v`tWY%hdelEskHnsFPZc*!iHvlPh8=sXK8MgYJsob zf=zWRW%p|&Ey(Q{W>sUl<&G^I2+&Iu>l7GOaxAT{%NvOfE0IzAZq2wz*2OPf$d6{> zm_nJAizB0(IuIp9c;ZOWXP&y$*5>vWqkY5{7USX+VnkuYWT{yxA{@H=M7?cW=ur)v zqY;&!2uCD0;zX*EuDPYCTaIqZDsq?DI%td-V^cGCY7Slz$~(Aa7!@m<)H+jJOg5-$ z;K2$kSL78F3q8&g;Vq)AVp^_2WOS2^WRw@$yDltibI>ztJ0HFlmpPg#L1&T;ylRKC zN{yl)A8c*5v^wl<%xZ#`haQDN34Bh&H;o3r85O5?8yDgZ7?EMSiB(3V3EJ3HKI!+0 z<-;~!$mp*%Xg7x##kTLdPAYd7ud~%MP-47Co0`hOk821 zR+3qfzDj5&j7Gq%eIoL|v{}irrZYPKx_g>vuBa4Qh3z0BPIgoVTji_&U`!)2rJ4+? z&3DtH^>5x_IkFY&2D(>AQ-)H7=4i&Gvjs$Qq{iRoZwbLjl(pN^iO{U7C)YQUMH*Tx zLq)T!jQb;Wd1@}eu&C5yG6fL^x{xy#L1W0#i&sWuM1NTXLB-g{TlzgJ7b91&G^<_{ z<~1W7mJ6d}VS5A$PNG9i1+WSgH9V||p%utmVp$QEOqc4Zn9PFfj;913E|IT>E=OHe z%U$}tyNizGRH!M6N0nsvGOY1YLa>rydrBFL(pac{o~k0@wJ;Wow?CHu(h%g4^x=?jMW~`cR8xtG zQQ03G#SwGl?q)MHlo>0CXg7Tw+)sjj=cvncn)SN4+EHqppNp3I7q=o&J)mXGXRVm> z5s-zAeYx4=8V{)?7-Or*<@S*p<04BGB3J)wKBN9HmbnAI0TJ7H=0pNtD9ikUYZgWL zaMgT%^$x;ssX&rMd=VpK1M8==U}{t8cH?U;I{8I`8zj8t;1ZtD@D{g8ugI3FK&s_0 zv&Hfk-HrMOGc^2oOU%91Dw_&^pSK|xQ=EAv}cRyJc1m|^U3(tK53Pld4r0&lfm zkGV!--bkf1N>n5+uA^aEMQ%U^k%v+pho!0+vFh>c(fa+kF4m6RWm?f2ssb?omZ8v^ z8H>1v+>DsRpl1iC_ybewv!?lL>-_bTrkeEn=nJChS!QH}p6Sod31$UrGwUX0XQ4i+ z`)1cq&dAA{6bNM1XZokrW5a|&pK8irz(SuKn3^-CE*qbkW%(yZ=(XL^r)2oE1ICYq zf7-OE^_hX}U|@3AREzxDX_f=_V~zCG25YBI&NO}^^g5G|M^w&pav_YSgku}MBg9v?c)CE?0o#lcEeQLc`P=t=!6qmm) zd#WWx5&pW#Q!Nn@dZ0UceZ3{67JkqpDUHyB-N*?}nG!dh!Kpd^NJK1HLe<)nm)LlIK zo1SiOi8jW;NVp$wgv|MTi{I=-jiDXCpK0NEte`EsoT9yi)m?G9bxZlp##xzB)wkzwnuUb{TdxU|jJj`iWTUA`0p+!tfZUkrMrIRu3Uk4pmn>HxHcJ~ z?8+^uHEQLh#I9V`qQ-^0a!EZt;tlW01=yg6RqS25g0C1_@IosC-O4GEYzM6K+UWzglkgGZKCbR}<_}@H^LdZAF z{40T6EjM>UIEc^aB1biXSA%bh&f5q7UC#0oWAD2G5&ibow0{g&*A4*WI&t3^c`HC4 zGXgSk^5{-p2cGo~@J!ra@udRd$@>cQYr%8L0g8`V6fb?wewwxpJdcf5eBH@gis+0n zNFPof-KB2?(+8gQhbX@8p7&ft4?a}WF2~8EJ9+m(-Ywv%J3{ewm%afGO?weM8;(?b zxGe7T7T|fm1kd!Wp5>i@=$pWkl&$!>OW#|F7!IDVCM&+~p7#_)ADyFV_v7TzoxF39 z@MpnOHC^#__q;6MKZ56h8H%sF=N*CP-2k4=xjoC{^DcBFeK>ireZ;FTF647#o~EtM z7d8#zRsB=#tx{1ntpkBS=sX6E?F|ikqW*<%aZ%p%(fG+PsT>_mEGsUcfdlVo7h0^g z1?P?ZDbkTnQTfy7b3eC%Re-ZUSpol7w{*I>6%N^253&CW4~)1CYFTiTASOjk^gB9Tt6Lt}{p4$P4ZK)3=lL65+|SnL8i&LlHa~KE*p6!VH@Lhoz#3|H zWoAssm|vYg9}e2)=NC^1t_W&%jR9?Zoojs2u4Q9eYu)_jw)x0MTsnG($xz$n=DNHE zvt8qkYi|ldv1eu+HXruc8eqzI^e*2&q%Pd$>zM93Z1ikqx_9l7Ej7nA{`inuy z?PKv3l@^vo#TFD*c=9W~*y~eJSXEqHP*q;+nVXLtER`Ng&abHSc|G}66&_z{nXkrO zQHmWwyb(9QxT^|^%6$1H?%7x)_mp}na8Uu`6b0LHApGe0qhn?XD2oDLRcTQ^w#p!A zhGsV6nMx{M<0-$sWjbD9*M-`G$cnn@%j+;%^MxghF}iG(a*Z!+-t7$DsiuiL1a|)p zYy+5-K@G%YfT-5c7>1+xxlYv@ZgOYv1IJ2 zwy@&{6~A5Ut%A*IcSZQa4UP46^LI%ST6G)qG60i!^OsGTkm25g*U#0^W_M9bMzmA6 zlioTFrMrt_EgC>n=#Hxo`zQ8S&!L;#R~wu@l^ul~QOgGVYlG4+*GF)gR^QT&B?W8} zYM_yPA1)k}eu#M?2Kw1qUhK*Yw)(V#qN3E~f$z>OEViq&ChhR*2#f9N%$yxw9bq{H z$vezUIVKSJzO0@ba(pVOzBWFGPuovRmaI`*1@Q1{J*85t(CmZA10f_PQcDB99eD}5 zL)s@jJL>qhe`BJ- zv5(U+?14jTuUq$Z)13=CUwU}W7a(3K^am$DcJCtR=F9G%_VeHMJw!fZ=V?`+XusJ+`#Gh^5|P#XZ<>L-BX|J`^U5YdC|9;wo>TNJ^l6GpG{s| z`_;(C&o*ED;f0#^8RV?O_(-dpKEGWCMtEO=fl;96fzeL2nOzsDI$JhFeQLXSH_{am z66W^W3A-ahjaItV2fHIOk}S*Icvl7Knl{qo;pxU!X1K-%Yg=4L141n>{-5MJ!nIHc zpp&5fw5dN+5qq?2w=Z;!&B7fabgFB-2;Os&AUaz_XJRb$z01bkCaJsS?6JFL?YT@b zMVYz65#k=ol^%qf*^<5IvSkmJrzy(Jmdx)Vop#}7wxIU!sZ!X31!{^iQ@#g_uLt2~ zwoHo3mIAidK!#AfX+vhf=ha2n`n6sd^|yy9A*jLc2l_rD*pe zgcU%@dr%LhXvcERM2<(cZ{Pl=8!HStY9RRVp9Db=-pnOy2hpKTt?Jq|$6H;~)$V+N zOB7w6VQF_f)>Seh?T)9Cp6fa_xog3ov^!qA`s!Ct-S+BuUic3#lxVN^PujfUPk$ek z^zDo-?VtYRkypRE`tR?&+PKZP@Pw}S7yOZ&%(4C&SDlzU{WXgJ0_Pf>#!-y`>H1os z_8>+Ecr2muJ|!{npCi7H#8RTB&5nsb2CGpHxwDc}6cc|HSF0rN)#!E#K(*7F!zd`I0squ}m4SRSrz`%NQ|Czf48wS2z*D zOy;n&4yH}Q+DK41aNi$-)Bqr84~zN|9XR6Q*ik;+LTmZG*$$dtDEu zXuH`CyY@Nb9Te2*XMBT{9D90-(Jntu>)Pkhk47bJKI1V)cMe~B)F`yn7k0a)u0YCJ z+gVCHVq0o6Xx8}Hmf9E-AKOxw#>B_A)C-VPGh$jQ)5O}vM$$t|#V$Tr(&)Llj_skj z@^aN?58e@1T?01PVJ6mn+ZSPNFanItW&iCefEu72p-sFy6GREN?4 zgMrilLx9u(X+XA$bRg^2P#`tHUO;Mqy@4*^a3D3n2p~1UNFeXCACMYge;_r$fk0}2 z(Lic|u|T%?gMn<}hXQ8;4+pY^9|2@9G9Jj@W&)5cd?IiTFbjw&v6c<222KLb1?B)3 z0?~tXoCrJ$SO+`?7z7>*Tm*CjL%=*B>p1eIqXFmvHUSHPCjpaytjDu})F>lyDviRB z(kKk2XkX!%Ig_e=tA|pw1CZNP=Be62dMHIofH|2;nOI`rwHfIDl)OoLNHovtO(VKI z`*$UGmG|w+O~!Dbvt(;$)#sg_&AU1-h|xzUD1FrF+4#WZHNQ>m@_hc)J8L_Z*6o|q z>G@nIZ8k_Mo+>_*5lZA=uZM+*Pu9VP|>Y&RNMaM9GIBHAG=GVCU3dyB)u*obd-M z%y?E&o;;`msrae(Se4(#X^l@#iVRlvLfoq{@m|CmgB8m8OHBNoh_?<_CZovQF)EO0 z;n zP5O08lJQ+w8d@67P@H8M*@##Pg|IYyC09OO4lGgx_0-gorpzLg*8+ZXH~zT@pi>4C9wIB2{xZR47F|456_?L)R)HOneakaN$iKZ?S39ef|#D?rVF6=x1KZn(T|erJ8K+j{QF*{YtUz^lORWR z1Jfm8-6?-oB=Q-WlgfV}{!{r6zO_HH6?`<3`Om*})Q_Y(6-#=3wrmIcrRM-b)<-phbYMFE4+XO0-3vGzxHpg^t9^h60EYud0rv$`-hRMC zf%^jw2Oa<%4;%%g(sTi{fCmAm0>=Q40geOa0uKY`0gnI{0HL%+S&j#ChB^^g48#ae zlx8;2i~l*mY9N%qj9aGxkH`NRK-RgVfUKLCkBKrp7U;+STwnk=0Lc242V}ir+LaPu zNGSn^)J*pXp?!&8hElZ6$VJ7+`Jm#%On3FB-EQ151I!`%gjX8-$Ac}C-qW?1w*SO# zxBYYREY`Lg+xAb7iH~jjr^dv`w*8Z1;$z$X4amFLxi8bidU+Pk9@>6n?%TZr=yvW4 z1+WuyUxP~x^SYfP8*DPb`>&q*?og++puCKO<-~*SA)wQbLtA3mwdifC6-b@Z2Bc02 z1F2J%0jX1#1F2J10I5?}0jX0?0aB-&3S`?l4M?5R0i;ej14x~MVZG>-H9+c=bAY+P zbAg4xE+BQsT3{*g0$@4tLSO~(Vqhik5?~GRQXqB6WkBkXD}mG@ShEq`aW$|G|E~px zfIkOPxBddif!GbeR^Uy*cHqsx<-l8j9FW}xWSh7h$hLDQ@HF6Ezz*O#;A-GvAnX6# zKtymA~1C;%D zb>1pT$&;935am`vl~qpPFGIW%-&M92>2(9yg~xpq6@j%NPx ztJv>z3jN-0PN9vdw`~edeQ(UKW5cz5z@Hz6l%x zd<#gmz6t08egfny>fgX|z|BB*8=nFv06zm#C4CO03i}e61KbLn0sIU;q3MBqSREpQN!L%_kndSDuGG4KE&)%k(I7T_pg z8_)%$Iv)+B`W^$M+8zs}x;_|4b$tl%9N;+MPl1O4F9aSAyaadz@N(dhz^i~0fY$;i z0gXj{-gl#B0=! zKLT@sPXgV*r-1pu=YTVTF92r&{|cN9d<9qvd<|F*d>uFk_zn>3dmZlqD}f&XtAQT^ zYk<^abAg+HCjeQG<^#6^7XYb?76PeQI2};k8bhjEV@S=rS@LS$&5)XRPZt{J-3+OD z_cWn#-px=7Yn@0=Wj&M7j$cAO0M4Fg-EVgHMwtC;GS2>TD=y>4Ut~Q2G3*RR;N-!v z_5dJh)a4a=*of!6!kB0GM_hSKJmxiK2SGWdG4U9);86OToe$RYZS!oViPzTP?6!l* z%#mJ!=`;={mH&F2XJ_X8_s_G{WAm<#+FFb{Y=umJcAU?K1Z;4I*cz~g{70gHjZ0kRI=0_5W4t-v|J+kjN2Cj(he z?f|m~ds0k%Y^!aKiH~iySR%H~keMddv=umeXtj|U za`#QQ+Zi&N?oP~*4K6i^>-O!i!S-M93S>vGIj9akMZV8Pxfln_g9lq{u};4it%PNS z4MgO7H>r=hhd$%o z<+sE=4H#l{)A#kNxI1On5m9zKJ;NP>?Ag%__bc$Qs`BK)0n9KUwF|5C+c>T9$w`p` z%wC9lH75QCdrJ)U6PcXKSjKn+q(~njG1TJ>H%iD3X1LM3J9tYR&HP`WBEQcmt}#{p zKHd`NqRATv>oN}yPO1VPBcXcw19O0>z$rksi>W}W8QvQY9Y`q)MI-JRZ0Jcp}gT ztOeEr1Hd|9JunDd3~U2Z1&4uDx$Qs>SC#=en_U4s8MqR78gLbmv)Pk@X8}(Eo&!7$ z_*3BNzzcyLz)OH<051pr1b7v24e(mvnZWCTX90f!JR5ie@EqVxz)s*Tz;l7O1G|8C z0nY>83p^jl+3W?t2Z0v?e-FF_$XV^Bz{h}>0Urlm0sIs2O5iiVYk|)JuLr&W{5kM1 zz+VDi0{#m4GVn&=E5Kg^she&Bz7D(v_zv(^;6~tWz|VlU1KBl|;#6G|L#k_HNX=U3 z2#s%x8B()WcCe}3h$WLaHEZP%J5}SXl_B-ESjl_6kGe;Sw!R;t?RbY)rp1@(^XCOsqysL&h-<%)OSToan$$`e>H7 zuPv5H<9<{s0iFI^R3--R26DFeJK!+jJ-`Ej_W@aK_XD$l*uyU4x`%+wq2B|`fe!=u z9De|^VlcM`Xmj;Ys=R$CEk(Q2q}{EDQY4pFX?yRz-#3pRGk^OVxewj7uK(gkA8TRl z*tPG8+X9J_U3cpxO!j_`S|pI^Q6GhXepPq*aabFG#Mp}>CE-mGok z&h@+8df0BCkdc9Qp;N5pL`Y3?OvG>WVKwQ&v?n=eOoW4y$YC`jf{_V$I8Nr#=aXw{ zRfxZ=IXr|%LL8^F`9&yW@Q?K%LgCUA8)1aP5vMDP!f`XpG{QsmoDoGi1OM1k6pz&e z3DcG2U|I4Bmjp5}+-81QpPl+5$*}1VC9Y6yxq|LAfuA zg6&Z9od)k7oj+``Ne-4C^XHZ8mbTi{!&D?WMj*jPS)`ch;Ti~!6wOG_C!kO_QgZaY z*s7Bp=i-<5`sU|v|H6JRt~w?;?z5D|AoE@+ybQ-6^Iivm5)z8>?D?R~kD>%YVS0G? z==2N$CCS0p0W6Epw=`_Drw5G>JO!4r7-FX9EImC#%=G*cl;>~-C99h7G$@ZoQSgdD z`UJ&etsBw~9n`TR_+S5m8b#uw>IT(+lH)Bf7-iu!(=(Effx~I02g~ysbps_wKRY!_ zlH(No@?K}%^!Ro5dvU6h5R)V!AulpwC4WcBPn0fntRLirUaOpl^i zpPfBMlG!fqI_O4JgxF`N_Ch_hl*KSJJx}QA8D^#j>kItGL?(7BJ($639Dea$ijoaV zg-NldXCF|Lq%4?L|K}}eva#tIE<7%fkt8|xF+&*Y>J*nMO%6KEqmNOhl_ZI_b#$1q zMqn+j@WpV2_aOlf0dDKfPj zn>i^5rciBhvd!6kiLBJAnIo>8Iw_7+VUd|AIkLOs;0Ih}$cl4w%N*LCgh(Vz{O}u) zv6+)Iro_38g;7rq4951%rxGt2o zv2(}GJzNsWJrsHlO35zOnteGLw(K*6sGH|x*s?EbjU)bUrv^- zmPYgGiONEb?92=y+W6?ioJlV0(VhL!h;6-$Nm+6MZR-sX+j=j~j;y&^2g6i&oW~zY z4QoB(*w!mAz&tpHFPFCUVr<-92sv9kn9~<3fmG4)Y>W*<|93Zdo|>ijH~@)f7L=oU};p)8+aVg*C7G3H(qv3mASuhp|&t7pAd&k`|6*lYDH)|%li z*(!@~IPHJX>X}V<|F9O%#_fx*I^SnYFrZW#9v822vAFeBl@%_J&o2*mI-Q?B|0J)1ZM@@MXoei^#K6gPuiKisb zQ=z%^Xooerz*Fq0^ynNz!EqcW;<=jFO%Ji~2aGp(N@ySJRbEe}7$nuk>aj^Nu?1!M zRV8rd;jW~Y&i!;QHoM4UUgyx{I^-=g z0fsgPq*GiUMRr%>%DgH(1T&lwNh+ce9$h7~Nb9R;`QjKCHZCP6nJbL!r{4e`aPcS= zojL-iCottl)lcF*)N#lFfiUs>L9kc9;XB?x=2`GiO%1exhi*6&>g-%vdj#2qg7Y>in6c*r2Z%Ke;#sI zD)fEeNYdt(6f-j^*k|6J&p-hKc|k#ux7=NsKTGnI)Ul+(cxYKgfjq#OprK_Hm6LV0 zkJd!-5&M92($OS9hfiUT7ao8;rA4Sd2kCLB_=qd@)WB0swWq?13JsUTMczuU$%5Js z7Fg-Evlw?k)u$9#@ueru>1Jbt&o%N^KJ&%P`G}8xt zT3TFG>hYoWphVEjVJ_BFQS8n~{*A#!7t1}A8gN%ud3}XwU*JO~msM4uC9tu$wtH*m}89N8Q!v72J8n z9=ttOcNt=3lT;YBHo|*|&YNcCm5lSwD@B_1CMSIjGuY6(Qrbv(G?$SH={9LFYitxK z^$tbtWo3dW3yUFVn3V+$tFkP=tT?~e4PBvHIpyqaWfIrctX<>vyX<3)Rm#UxV9zt7 zP7JrQt2?QRA#Tdq*HgLhwj->Z;&7X{HS%*`Yb+lfk-RIqa=3)AkY;>7q~LvW0AA)6 zw})X{w@Euv7e3N@IT}?ZbR-*anYV}<5FIQkm2`$o%KlN@#mF4AZmH1d^*EL=n%V(Y z#-ggy*`;V{k;-5+=>x57s=-nbm`!?=HNL`KV`QgUzg<=al-t~S1sH@Wy}(f#6Mc}C zhdom{Yxzu%*SyVWD~B3@pf^BwZM60=(F`T!?)*x_*%~@VPZ2u<XL+T`cxbnb6&@LZ7!t>I%ZQvQfy4>=ttVI+(ek|P^3XTx zk8VDZk%JjlereyVDHUbKro_xB4qG)c)PZK`xhyNclqv>n=rxK;(La~S=)XgCrF=|mZuDaA+fV1ta#vBYhP7-Eo%ptd*- zByXBdEGR2MRW!5Ksgq6BO#MavbVCRY=QC^d3k`Wg^?3c!In2HampQa@Z0<;B2GEri^F&X52@dQsg1LU0=vQ+ORD}Fl>2(Uf7I2k|P|ik!6UYbyEN*mYd%|^v#Lxj4$rV6{vPx6xUgiar?z}u`#Jmc4uV97ZM3@}IOb$`RQj?j_j*hJxTKq*# zZSbuXstX01!X?4R=GK)m=H!KYn-?1O13J8Drkb~jmkY0S-{jrL##`)}>CT@g(?WL3 z9B#3{A@gvPxv&h=4=(#u_)uA7MWf0qvpVvPF!?a0W=WW}Xr++ig4LX$U4nf z^1@UbtZsvKFs#}qVGn{DH$oF8r*lh4aark1o|r8pr~etE!v00>mX?N4omfYuzhBHE zlhdCApI@xzXIaC^9R8ZS4)= zoo6&sUR+*XhS56zj>a9m=p22OXt>GgPpWitg3Sdpp*^l>1yIdGO9$Trisqf?6%ySA zaM1*h%vBRC?Wy$`vfiWUSm_d0CrD#((<(E+hJnHrE?lhUww(K-awVs8!tKLQqM+DU z#A!FYePp7FCQB#a1HW_wW#zI=MZuiigRGVcpdymf55lcS;l;a6 zZpsA^Jg=v;szh?|CMBm33PbXM2`fg^Ezhs2;l21jjD(i^mAYg}aC}3>!R`rTA4v}j z3u)I^gwTzvil|ES0Q`Fq7g-<9Q(9eA0sUE>jbTi3I#(vG(Z;%@JiAnB=^I2a?^Qr0 zDXD8g#w_#u8bWPhDH*P7#FR`HG*q%Ixr%DRjdwLcp`g(RIP%+GrUm}N!%k!nGvXMQe7hQQ7hSPlZlaRz3EWcJ@l#`rp zv>hpCKB=$UM`baWtE^`mP^B&QnBXc!cZonmbToYNwhDuIOUvD&yVvoDDs@ylTq71(nL+5*nBiFMgJ&Wt3 znvwqS(DljbkH-^(WeTNjq~VK#8wCp21dWQs$45UFhWkR*)L9Eyth3PbaNN&!K_$(U zV_^tWt7<6sT+@f<1xUC`o z#M7}Y?j@n$al^KXTaP+-!wol|?;NW=1x2?nZs2sR`25&?o*Z(^`2%h&`b*Kuk_$BL zM4>-$@ZBT)SN!RyL;E!h{?)hN{23oD2>qEpbH6()_>bm zgWtY8$^Uih`qiKO401C1P=5O6%OC%6`_^>}F8?OHtpB5^QemMd?>n<`CAA~Z{wDRpOV^!+`z{iC*-7(%viXsU z{j#5)`A}fnU~IO&Md;%f-T9A4Q`e`T<~(luG2>^f)U z=T~&Xlmd3LI30!QH}o5H$P*tQcI>ZOE_(OFgYfZ-&@cYiQw1%5Zkl@Gp$AS_dE1j) zHSH0hPx{%_FC>qy_~Zb{O}I;i{*#xUTKbP0_ZeET;^1%28vhO<(+uQ!dm`Jt!JUUFPR-)sA%KdNcDDU{#u&fk__ zl%M&@Wj8$jLR0Obx%h}k=<9y9_aC=-(mK9awKZ$#XX|gq{$Zg%dGcR6o=@3uDbeTl&*b#K;Kus*aRy8LZ9~86CeEYsWCI!A4<*m*NoHF!PKSDPdI-={`i-& zzI*HSGdJCw^9Hs{55W#9r{nk|N8Qo)o8;~7zLQ?;vwi;;F%A;?{SR+nbKvqdUtiLA z*%kZW{L*jmy@=4$ZqDqw;lwk>|32fH$JSi)Q`G0Lh5p^6?uA3!URnL&1sBweTzzpV zUNT|hw9~QAzN>#8>>PN@1)++&iUtfh66G%RrMKR&>i(ZhxoqFJp8NflzdnBl%3bK2 zmOi?0zW?Cct{6T1z{YQHeIDsVTAhxozkKGbjO*(E@uc(Rw;yYtcNx+t^rQM+d-B%h zO|5r*G3tO{w!8{CR|);G=7TRiaBbP}cNSfJ^QFPX(1-5|{p0Iz|K`zK@AU3}?dHJ` z9q`z`uwo6}PYu0wie;u@#pzT<{% zJvX`X+*khAzUGk6^3bl&6Z+VGZ@+oyURh)AuN?fwn0Yf$_t{H29e2#V_}X{BTeYp= z_DlXb@1vg{fe9Hp9;ZWlef?LzeI|7H$t(Zz)UP+K!*k6O`bFo59vMCJu*N&Se)qfu zpWgF6Hs1+-MfNDy>aC~L&-m-s_Aj121)I7*Q1r%0GaIkUSp444zMH$~uMa;CQ!$t` zI2|KjDNQ|m?91PcEL;D6_}JIZ*0ffkf3eR?*IxWiZl5=wA33S+jt!gf<$}<^UFDo} zS7=V?>O*QTE;{iu-1k31U%Gf!xmMZl=JT@m{_3~C-HKh=o?(<zm?hyRdYQc^H?Q(*1AsOK*TJ$LN7V-I`v=TE*_^Yv1HpN|g1 zByVrZd2me4zz-`YA6YWwic1TYJ^KMnya@fI>XA3xH{CU&>3uEp_6IM)2QWVu`l?U8 zmmK?A@+GI-JIR0B^3f=-_k@1V%L9kr`^nW89Qo|~k3D_iiagW@qDz7XIA5@Z4|H+xnIqd2Rc{Xct0nT$a*j!?|}~I6mo(hlbAH z_*Z;4A@n|J7rZw3`LVhGm^fw3u}^!igLMjQM|V0-``h6+o$-&`YWDtE`}W|_ov06; zLf_oB<$*_AzWnZytN;Dwr~?jzzIs;ZEB9@gbNldxze&6JtQFV2a;O*e0o&1?j;c@o zdD4@U+t=K^`Cs?!TY4DE>v*9rJmUT2=RSD)4=*hI&0mlD@>kH4KNI?<7vEXsUzECi z?(}~@@L=tV*YSP7(Cfd^25dd{uiM|)_~y;OT5=Kk7`|tFIbRv;M=Gt$3jOt9Z$X1^2uk9f4FegJ6qO0diik}pM0j_o3;J$ zgU`X>SaA{dLb&QJZcQ6auc~c4@JPy(&XYFiv^Xn;%m1k-}-t@XDBcSg!G<$Jcx;(K7lwb`$K^SC1bap<;B@*m0%5qU&Pixf={+Q9PyR6+Zo*2Qr8q{O)w=C(iUn- zTuPuWn5dMNHduDATbh|*V(J3$0-K3_p7Ew zyPhu**V%NU*^Wiv1nYmBzrokm-jZmG4liqNPqeqU(heX@XMP z0?T~6_-s9ox`Hd}_QcSbL!|^CP49@OCMafUu(c`Ju+t^qbMDl&hWEgrl;h)Y+fEJN zdQJ`$WP-WFTG-Ouyi;O&PD>s7Qh$@bVP#vWZN9RYjqDd@_|$ix>_MxTw*L*khhYHUm}+iUm4476?$zbh1X(z`tLN35scNZD=%f^e)blB0jR^>&h04J$9<3dl>aLwykK~sT$pb4CH7_;-fNn8x15p zJ7Nw68uZb^F6M5;sX1DD^rxDMRh;&wrA^Bd?Um6Q6RdcUfH_}+LfDRWagBl+4+k8Wi?iZR=S56MUkERlyZ4@IwkQV=FUUV}rFV zuA>2=78n0davkAXCvtJ1g7=&xh@K>(r@C~}@E-@q zkf#n>qOBkB>=xKR#5+-#N8Nnpmn-L<@m+t1qa(cNjPLM`YDfD(-+fy*Y~Q|c!5^1s zOSH9~LFJ3FrCh6CqAkW&K;z1iL0whJbE+#giX6|N)sGJStY1|1H!K&vz@RCCcH~uYdZVS6xLb8c&H0XT( zzd}AH45mEm-rK!&9&V6qXenu1l-FL5jGUGZS#n&qKQne(I$piY(FbMD|3Uq~1H$_XPzJ;sX4;|c7z?ZfVi$;31UL|g~UvmMC1r#$9S3eEu<-b+g; zRg6)RrtIS~r0nA=+BAp3ceEZ#(TYr3iAkGh(iWJsut{5C(%7)N+6SF+4C{FNaMc8+ z74~f(q=M`Fv$>(dGwW1EMzLU1rL{^I;Gc0|w(18~X=T z{reREP>sxk>1XvDfU`iSu0ruMU1tC(aW#;+x&}yzs45*U;94M``vM@V3vLQIEA&t* ztSc#6iuR>R`^Kd8M?v$7R4qjh!LFuB8*9>-lK(zyw`fW+ht=Y1AH*d&Xx=OOup0JC z5+14ts)CspJb{*pOfjq}dJ)u^H%Shf^`dg;ktEywr({!9S7%uj=g=e7~@o@ZG1hdEne_?ZLqaR=Aw6*yc1#5C)zfKoq z?W>fmNRpydg2`{CB0&=~G1RaerWLvz3lTxn3f+{P%qbE@D|G4Fw$FoQ>w?O^7IP@p z3LUgOeZfT^ajeiyEfJq)+7exFIB`X894mBC8(PX7s0o}rSQ+A3jk^Fve-C&Hr3x$6 z6VD3W^SJ&z@SIRdX=>~cPu^HO!!6)>zFP6ID~KnL)$-^X^oBTjuwurOHv$nY;5lcm zu*q}8lQ$004}j+#ov%B2QxUNVJY$dFvAk;VoTl@2CvOrW&H>Lu*pSA9`5Z5OzXtsi z@LW2dT&hXNdtPof{|$Iv<&XhKck(j9m+Hf)&9C^_+r^W&5qz7$vmv1P*vut;ajXJn zp?+Eq)+n1!uzK2`waOv@5}{T6--E_F5K1Rp58Cy_N-gEepab!Ympb?6oXtwNhv?0%#b$ z`r$1L9um{d$=B(Hu;vI$wnZ?K62>bpd~sr0XxmK-gtTeaDC>2zVJ`*-BY6v&7AY-o z!^92jOL*KRw5VZNUE6`FLYh9KJckxnUU3;L5L(6le`4BjOiXE(z-(q!NlZ~1h6v-^ zKioe?1Pm9ID*@%9rvEGJh_q+btQR*EBxX&^i(m+rMqs>HUQqFUP#vP;Wz<$&RwL$s zXt3f3v9Cx=O-yc5yyWP{3JoiNJG8-Q2!Fzx9I@CUfc7Z`JvB1bU zQ9;%?8l2uuLy`ML>EfAH=#Wckott(W*Wq58o{p&23H$9Z_iV5jNsVSfA3WP+5iLbs zYHj1byfPSQWV&e>5f%=6EmbljdM#ComHhu!OO*#lHK?dX9dA{h7|}1!FA+QHG}pBI z1}%@=@r{Z+9*?gOCZ1`?x7)QQBUv>t;i#6MJabLkhCi6OOv9LBuW8IZXBv}J5>~Qa z%a`b0_MqiU8p(_`?Mg#@qtRW8SvPF=N|vSFBAA!_-V9^Ln6aeExf;9xZQyo{ApKDD z)7|#EuvqP5+H?b#G+Z|t)dCjFbtA;4R}`<Sl9y%Pi>kW(Jh`a|QCpR|ey%#qM$}afz{BP6gD2 zBx(pRMaX@7x;;>)ipK_6#g z|D9%0sXF-x@&vnSBQTicvNCv4*Y&Ol%0s%M?&=>J$>%sv#MUkc@PF6T>g7is z+W5~Y+a6ovd-0j)g0F4Vw8yZ!&FQe4S{;b}y75e{mI~c&YV~5F+fA*$Ds;Q4)lnD$ z#51*8FLb*J)0>2DH^I6|=ysE&6S3_N>9?6?JxSK znzc*lcGIjc3H|jIW!{y?ROPr=A9Ths=k>*|#}U}~>vY&nvn~+2-8Ad3gl;#@`iamR zesE;^IvF2bI30G=tgD1>H_iIE(CwyK2VuLc(_uHwS|N11Y1Zq7Za2;P zq0sH7S;ync0H?!lnl&tRyJ^;kg>E;^IsiM|oesNc))JxHO|xDkbh~NRSA}jj%{om? zr`k=ko+@;^Y1Z|MUj2&a?vXjyFAS&E-T&?;d?hg$UrfX^*;*!ayUEr|g#OX}L-$|v z;{EAw&zbx2uW~o9#;#(a+fBJ10xccSl&dneYB%MoOs(2YwtgvcP8|P_bqhi(xBPw3 zS>L_-eCMArNkDHG&y?#qLbsc8eOBmpQ?AO?s@-JkTx=V5I_xG}uM)c5Wb2zkx0`G| zcrVJan`~_qy4_^!Iz_jcZ2d~;c9X5gU{d0A*iE*s5xU)E>z{;vT6N3C?{8i7?>@87 zyz;hRc-dE=PBEU^v?)uj#6SuwQWP8l3T{OAcQ?B=#lWl9R?=iD6NMg5{py8fgbF#?g zp6w$gZW)#1*$Y)orPsQx zeYG3vw%5At(Js>j?W7FD2JP-z*fkC1n$~O+kOU*Yu;ZJxClVDS%1kB<;w5g-cZb5w z49?mU*`mw^?~#B#(_mEDza8Oj%WoH?sfY;Kqu#YMOn5q@)p%iT*_Qp&WTDBfa z(f)(|ER%%hz|IqfQeYKM*&7<=EeuD!8iOY8K!^>f-RU4qc2&XV`KN}Ovw z&hjo#a&>3b#;&SCoh6&QN`}o@;_9s0y0+@Aip5DtR{46*=iKnP-m?wAy20i%9|@;U zYj?Ky&wixq{RMv%8_f(LJ9JCS*m9(Yu-QZp;dQ?rqS-xcp0e0s9*cj*u?hhfPGpcA zSK>l!jT7^pTY%ef9<8Ne7f$5hHRM@_vlBak)#0cKG{W*FK1(mhY&O^$Ug?F!%LZkW z)@5)-BW%*9>xPt*ka>$?-2fLjb^FNt45KB~R1|#w(Zk8`^`| z1KeM}D;ci-dub7OC@y_#`}XbJo4mBGoN3cWSj5$?3W)M5l=5aUbhtSJgHcA1@g+rvg&fdR{M=s$ESf;k2%j zK{HCWwGYUCM0mZ15UJHdV&ZuAN68r>v^Kp8vjV7CHdqx3A;fynUt5V^Hi2QZ4pdtbc^8QN41FIxb8-zbr@>8+y~9C2wtV6 z5xgGL2=+rG*ajLUG%`^-v$Ptv5JSAZh4}TY8_O3?x)ZLvwCk#WUG zBjf7Y^Gq7e(kdDn?40VgXhBOHOSCx;v*`6^;QVUCevf?h!WhrCg=|Tz)XakTmH05k zSgMUwVr-5U8qpOKe}GgI7?}EDtn{OwFcWz>mnL91NSrzrh^p(o7JTul71Bm zifOwR$n^aJ$bzGCPz9&d1S*WsQY2RuZIelhWd49T6+PrV)kybwKMt{$2e#!sdjM;E zY~Hhh6vgB{W%BvP;{2(U6#}t&Z*;9N$=cZ76si-q0y|k2dqtPU5EKy`(onsRHOhvc zFZEP5OlNG_+=#MZ+J6IN`fmraY`C#dl?_9xQ89#1KG7T$ZIB+4v6S90`urc34eAv- zi|7%LwQMffQP~vu!~Xh)=H+{~Sol$;wOB-{TH8##a#^RB3lyQ0%L973j4{iFAyqC6 zrD%Oo8j8jeQZyN1IK9<1<=NZktX;6J>(kCtw{@Pnc_XgC2p}09`#|5q>_<+}yZ^4d zzMZFT?eu&;WBqAW4{k;uv-+_SM=VJGxc}O#c?m|r_fxs7owV1-No$L=uA}h3(kGD_O3GDp`BFqLm0OvJ0t?`Rc;C&=kT?0iF6~7Mg z4qY1MToDtWb^r)6R?);Y$q+oj?3fD1H1XPB;=DLg!7N(WX!%6}*p&~}hu}q5H@+(M zj0rXlwmki?sNx+qe>HYa*IJALHU|OBq$`k@A@jDdR*!*6WOxvX!9YDtSMWC=PeUAe zP^+*8P}AtucMwQhby7&_f2qtJdYTE$4=NdsXn84*KcMn5kDdTh$vg=>4EPFgJn$(X zCuM&ImII#!uGIgZqyJwE#OR{~y}$Mn@H*hjK;}E;Fzd$Q9H8B&hf=kN^iYa+CrXa7 zsoLFoNS^=>%YLLLd;7Fg2cco4UHV9Fr)M)N`Hc1EK)1T4W=RrH-PKOl=Fax5tH0ac zo{V;*hRx4ygk+g6o{EN(_S4643vbu2V{%cOm_yOub*i%VNmY`K<0u;^>k)^NCs)URDIXuU`3mLx(1r=3al zjZuA_iEk zx+(3v-0!w;KcQO9oG@itC}eF2(Mg@>Vd*eLpIH3;$E{k2sHWl9Lv-(_{BzsA}&QD_5E zP(u+KrqT1k1ffwiQl?dn(q8{C(2{ZTu&PluQ(kS2KTXsiB`J3{{bJ((B=JhxLh$?% zDY9OF2!{(6HCl@J@)&nHOcU=t9{5W>gdECUj<2SmWVY8gr#;xZQjKLx{3}9@?Tz_Z zc7SW@$gq}oHI8UqIufdjDdgmAdEH`vYk`bz%l+ZSGRGo!7-tB&xurdfZXz}Pb6wS` zl?-E)MJ`<*a&co*gh{1?8kS0ucZwQ9k3|F(su~ZR)DB0>0b|5bAYPY4%}t_*nHWLF#JCnxy0jGJaEK)&sIg0U*_iqgxDi((&=wNO;Ss|3mgG_AIS0U2f)!l z)Hre5vl0Ji;Qv2?xxkNr1$z7}Amnva0RII%5%_Ol2)G%@-1!>#A#fXzqmu7{gMsL4 zJNDN9yMS=?)A1f~Kj3G;{efQsM*$stLf`=4Xy9Hz-tQnF)>k^l0mlJZUzl!Y*?62v z{WGN0KSL?nlaQ)tf7U}O+RG;GHIv4L6UE2XJasMWeLOcqVBpS?UD)SS+a78NjK|B0 z?5z2ckRs@RaugjTOag? zCuC$W1&U(z;6iGWV;O#<54)Qo`fqVYF;x z#CJ19SsHA7M-CJljwulW>aq3i>d`K{?l?uw7Zx!{<{DjF^hDn$Nznr$_XQgI;2odL9GJ(Dm}4 z6sE^2nOZN&F%G|!{GTOT&$LTU5gz)BF(eN(Lzp4RG0-NNxe}55w|@H}Q+N++O<=o8 za!j&FPBkUJCUTj(v1uMGSN$5l%*o#`eeDUmWR4z^9P}Y$qui#P-ej0}Jkm_b2a#DQMw!yToN+Lo1{rTLVdkBH4# zy9~9Y38z@%5sS{PN`j5ett(9jSMCOyiwT=#(@hrLUWv;q_@koREX#aHb%QZPV-gg- z{Lu}Q(JS&1%*881LY!%o^6Is7!vw>rRzq`}zP6PMe_j!jkho=h4+YT?hB-Nl@wxa6 zG=mpECdv{WSmN3k20db)HrkT3@g#6m77o&Hhd3EanV2~>+hsX+=p8IGXYy3xr+2VH z;vH;jIeJySB3t_wk`~}(?-+H&@eVc&Lxwr1xxqrk$!ecV?_dF}vRE!=YhJ1I801_n z;}NTlB%S)8Glnmomnn=ow5!2)`AlA=v`;)QSRAqZ2|QVPSHVY$Cy!IdqrkJNh|;>3 zcO&8sJWkUd$H{|QFP^*&koP5co+}nM;ft5P#f(M|y%;AC>biLHsB<0z&y8imh6P;Y zvy=H8tZiR3wo*|sbV6VS%GG+XJW%urc-7iT=UG?v=O7Bc=WxK=OclOHXq)d{>|fqA zzaZGQG~C=Wzr_zjZvI-BrdpPWn;wY4xXQQOzbsfU9{3XWo%L3)@2pxCF~l1d?Wl~VlUE8xV=)d^0_W=!ED#K3gFtOU}^{UtF6_)XwT3%6U0sObXc?+yryJ!0N z-&a}YD-%oMSWz92ejyn9Yo%oc9v@9XR?fp{Pf?QN%to|qSe;(2e>I)cs;B4(K{CLuLFC>G$341QdHuhYIaw{-=sUQ*n?M+ zs$_;++4GCtUaUXCIZttMahdM4$hhqYD`x@Jb^-m4(Zj(H<{xUOeLoo$X9s?rdi^nJ zC_pt3>Gj7Xjl?szvb@+`RQf;dk7+mED)o9bD)C_mJ4>dGXGpiE+&i)6$Uud}LAuW; z8Ov3ezj(`ZLx|xzLBEi* z1;!86<2~MdcezKV7FU4`?^NC@UjdvD!>GLG0`odhQ?xl%o{D+CA}`!?Nmt;ZA^M7W zGGUd*k>TH`*P&36SB4cF@G(oBW)<FlWC@>(pObc>_gr5k&i9WS5@jM#YhAW z9aw#N=e^7eD&2W`aAulUQC5RN%}kjxkYkw1;q?|*&DDAx3PFJ=C-QsLq0sm0B4{+U zknZ`1?mfPL=RS1QFa|e`IP;;e1SX^0@AdQhIW>PpHA_xU!dD69ek`2UV0BZc4+H&f zR6n>8i7fp1J&m%DJm%T6>*Y__3BI!Lv`!}zbNFga`7QbFA~WRAN4w!iTl6s z+7s)S=X>MaS#Tm-5_!*Bf5M;tofZH|6pLd2t!^8eJ#x>3r6wHy=;(jTu!XPNev^ z9arkUZT6Jcn(iw7LAaf2BTEP{g*Ze zf|Xb!k~VU_V)ia>592LGlh8+k{W-jRE=P`di%RG&$EX%k3S5JSsC;-Un(3L1byrM> zlhfDhSL7Fa+@)3JzL^ze_|12h=6i}G*Y62WFh4Scv^EB^ABrajsRLzOsAT#~VeFrE{a5~16jxLhQ3yAziULbp3{IS>spo)ed# z(CyAzej{|dQ?n0Q>`qyZ7rNak%L78UJ7xJ!=ysHAg^1RUPPFD89{?vF* zR*o0C-O0+&gl>1T@~+VHo;%p%9s1;r=V!hC?fLiL@4==!3@DrqyEBz0q1&CQ+%0sw zGnKD}Zg-|K16`WaVRxp|A#}Sll_!O6ccwA~gAJ#{?o7q2=r(66{1DCQusc&xPF(EH zRFo4JyEBy~82Q9=nxdSz*qx>*CoXoUDMzEjcRK7&Q`qho;l9&h zcbc+Z=ysJk)!jg-rG|fe={zg|lw&(AXNo$M8liill>#oGyrWkP#^*y;O*@e#l(R(zs2ZEL_{Sq_r z{iAkPvOD==+rgh${`7h+>Crhvuh){DcQnxJwIo#6+AQuydLDWOSJdr^@iDc>&Wr3wF&- z2{s{2v;6JhL_L}6!;!266N4ve3Wk?2O;k*;JC0s=96RS@t=An#HLR zloMa2ZfX91?7azm6jjzXUQHl`fRZ38C`dq5TtFaz;0B%UPSVgxn(j^j2WUgmKx;O$ zAULCiRW26uEE`9IIOx2mhFx|1Nj^S$5qr+(?& zs&h}Bd+xdCp1YrFX{oK-QghJO-dfv`T(YH>lE$e=-R!Q%kaaxvwS@+*;i$y&7I-iQ znV5=g60KKv5jcTl8%kh$F+%MAR2|yzycj zudlG`hYdFJ`~|{O@vCq+8ss~~!2-GQ9skLt9Sz#|ZN{2IsF}5`sU4fK+9l$#)qKej z!ec9a|1oRa;nrr~1DbNuH{SLZd3gmt@?+);F40!e1USUhVDG`O?6fpBs2rVB5u= zM-ScxTkh!i6Q2ZFyn5QJjd}66j~>z)7_!=n=h*{ZZQOR?&5y43=AAzH8&WHN7*J9v zSh(OZ>^s2@Ywn>o3#gtr`oapWTv*kWiv>ja5Enaij6?C`WybHb6Stf(R^dSya+&eV z5U*kkamf2No=O}A%ru$C68yHsvc0-=0SB9s?Mc|UqY|lN4J>z+D&N36LhA%4b8gw+UVA*8~D5K=A`2&q(5z`o-4n0NifUn%eM zjYCl*6|7$0X@|K5J<}_jPCfJ!ycR;Mpj!j)I(l#x-Rdp6)j64L-HY7{1{91+HmEaD z1br*$#108)=?ZA&;LE8YtE)HYFSdAxt)5*JUwy=A@x9OLp)@jqJCCjxJ z$#<{7Zxe+tSC^XGp1{H`0i}IkRqY}^z$`ys?@)=sqJxlWSmJ)=}>XoYyE=5TBp_Yh-vsNh$ z=bh4U-sKx-q68G|Tzw}R4)4$9t2XvMa_XkhCj!s7nt z)ErO64=;EOH(g%X{e^Ru%o+2$o7|ypN+XafwS8BC#qgh^%a!lUjFdap<082`6#wa3 zH&--wgxs0BJQ`2t1)0djI9|?X@_WDzcIYDCVU`*0K%*s>) zKl25K&_7rM7M6K!YxFT6M~5o+gG*cc^AyMPWXJO)$8)jcd7|T)M< zg}u(?4I%UV3Vy7DzsHYPBlL;#XhOIh!WM+oo{JE&QEElV65un-2}!MF3G;aj!et1@ z>gRnCF30mE{X7NXad@WBUE&{v@C1a^Yd-rC!fvfB)z37M^rfo01H4n+0p8^sm*PKD z?k{$PclrFfgJ@ZQ<3@d#Z`^}BYDs_N0ezQm`~`Q^y#92-uD>DhD(Y`s9_ne0u#Az3gxNN8jZe{XFpID|qz(%e#EzK-`hj{_;&E-r?H?`2T;OkKF~} zI{mVHR_%qT91p!9@-B7R{U1`Ja`@RZxz^or^|AUE0cFBVaMC=+GA74kHW2$RKkE~< zQQw|=AHn$%|9Qu&w{^FN0sulEsdhh$xroW}z;>b+2HO$@g523D(*ovrZUKTxIoG-i zBaTKB9C}PN)5^2%Rw9m9o}^{Z1>5Hw z4{I^s|JP&VCb}uJoz3yQ2g=f~z*D|OnLP2z7s{|uQ~88~1cZ45WC9@v*&#?nd55=f z*hYwFb_>D^kCP=fI+F<*X@}4l7(3Y^(g~)`vFJ=-V&xhFZ^AZDkF*V$e8@fwc)WY( zD%z83_v0Xqn593BSh{vqWaP6{UE*847>$*oec5;7qzOf~t9!4e`%RrF`1ESJop?2E zsWOcHAqQSgucjS<4PaHXUm3ibw!peUK9kh4^T)b1au&YIhaWG>ITL?_kF#LrfUsWEGI3`V%$VUUUl!{}z#CVguyPS( z;txLUjl+O*Ql-M{hd|_)DP4`DFo}nBGvIxc3D0H&`2I@#HaPLN*xM^+_8J?<;d|Ai ziqd?>_RtILZy}}j|E3q%j`n237W;pFZL9y+t^QxP`hVT(|8=YX*Z+q9SFzduUC*yq zVkE!S^Q%|f574I*kHhyiQm5hLWr4~-#2XTSMD%%J>Euc~TRQ2AEkdmi;3ot4saDt#*v+)IJI zF?eJxsYWK~rIZmlDk28QVDKZMV7(R0$1g|3qXFf}fl}cMeRKliuoeDIO9K)3s0kQ! zUPlhMdVWRmZ}t4DUF)tiR*EeCf8hC*-pJ@$rH7tecf}-fJL|bz*cu*Av@Yf+9-8VB z^39nLo6CRl5qbnh=54MT!spx^kV|R>L3MV1Jiv*%o)e%%?({p4mI})f@(ip%e z3w;; zN_nd@SSZGJc1b~~)nThRO<@kUql6<>u_|9xNV#bBL-Ca`x3?pSFEpy(R%fvET!v|?_lV-r>TnnaEee}wI@aCl3>Gf=MMhhl!HQGRAuu!7NMi`si-({I zi3G~x<+DN+(if(0Q8*FxMxu1ERasRTgqyA4Apz-CGqRVCER6(V<3jVSw{n~wOF`a> z?5!gsRaG(TTLPvN)IK`WiWmtNnO0vNp&UZeeJPwnDu<_Rjfs+HzDw`b0itLGT2mtQ z(+J{QvNQruljO^c&DXK?LMf43ox!r}wbdD{w9HtAR~|^WI)mNn3^q{a_02;=TOloM zu&UD1jvcM~Qd)(PL>ztiNZgB0zo>=>dz6$G4YBa>X_fL=EG#{D`mY^o#b8uJueRM#|6v zR>lHlfe40~d4)Fs97(h^)Yc{1e9f)p^{tg1jfvJ|9hT>@GrA4itn%b*J`h5nvbq8@ zWO;?xDY=xwgR=;RI3dg!hJDK2C~??-U^}Y258{E7JfyQgDUU+V;j$B7t%$P9&@=1* z0w1q*nMyX`E!2-MXLRH8^=El`{a@$L^?$t^)}2u(PeY05;??x+YP$S|4b3ZDi!B)v zY4_$TIxJ;b7OE=26!S0OiIru??IhKxOj0LSsX9TfFe6lhxuQJrOisVQGS38Ct@})& zV3Z&4%9GBg_yuNPT6+dIz6RC*_r0?Ism%ZJ1wW2YygYNktXWsA{nRk-!w$MkURir# z7fU9utYrdsdu2UM;BK$1F9_W2m30Uzc_y!{ae=$NvR)~0w^!Ep1@89Bx)*k}W%9~; zguvZiS??CO+bioPfxEr3mSev~f#-_{f8G4k$rU?%*qB#v^G`eZu|Y`SZm+D*3Eb_) zbr5#d6nNa;TIUJe?XC4nfxEr3{!`#?udL&+>n4*|)}saP_R9LGz};S1x5Mt5OkP>* z1n&0A`bUAgy|R8TaJN_1sn~&+$t&whfxEr3J}z*#SJuJUeVEBB>#qdv_R4y>z};S1 zKN7gxE9=Aor0@31`fGu^y|O+caJN_1+-*q5?Ul7c;BK$1HwxVCmGujOyS=g=ur2BD zFm%=BiPinCKQkG*HQ0CCeGKDhfxEr3J}PjxSJqtYKFj2lwL;)-udHVa-0hY1C4sxW zvJOKBCX-jzT7kR0vR*52w^!Cr1@89BIu1=!CaGOUuJXtk0U$inssn z_S-jpXBbxt-0hY1p8|J#WgU-(GLu)udHnXcY9^MSKw~1teXVx z_R3m<{SE~lw^!Da1@89B`n15^URehZB^|d{*0}$;F-O$hPdZ>3%y!y^~##T z;o(-VthUcpr%vuS*IEvKHp54u`*YQLyV4eFZd+Y#D-Wq}5gDGB-%@V`bfvn*K8r|X zt3TEw+vYFZZ=B6d?N)!R8O+oFd4H^|)AX{{+%&(XHZJvf%POMXA?s$?7Sp+0OLJ>` zZAX1_OI;0NvwmA+-4>e_n}5(PG*DX|v2Jz5nwa03sBPO~XIxtyv2Jz5+M}*cH!g-+ z+kb&i1n_GG?QK2kzIDycmirW?&2MRL?vdxpu6e1$H`QvJY8zIxCEMn=HFvbu;jyW? zy|z8s+|(n{cj;eqt0Pud_i(Et)@GMX;MI1kBUYDG&}ZJlt{5oP*KMhDH9BsA`RoZR zUE7+r_Ii9hvnO=AuqkTLxrIbvKYN&?E;!LXJ|}HCFIye4W*9MUb;O!^LaQOMrCw#5 z78Q@*LZxk9bl5NR@g~>=oHO4-Zcv?>d%^FA%Q8?*NA{ zHNHa}tS%dtvnK<-)T-g0BJOQyXs&~|$BIN_bL$Fm7z3vN3V!5)+2;i}HY@q;LrA`Y2q6>kF{J#8VebOuKyP!r z%Qvpmcm0hUEZD;qY^?E`i|H4FOkzz4eu52Pb8nOF1M9O!_KC@Pc zRdsclA}wuA^h}%uTAbVgwg|;=xX6>G&x_0HHWzVI6;%E+eTtMk?;{Z9RFgcx>k2o7 z(2d_p@>iopOE#5gd8b6nyL{tn{8z9)>brd7VGBmlD!k%{A7g^w;5QmS^J1d*YXp~4 zaS`_m{F?A{`kFM~!OkkFa21O*FMPtS~jSzJwxb>qbSD#GE?F^qe|) z2n54q7a}AdhiXA#Ra^^-cS=ya%QtSpe+9ck-&qyd)HPOyVfba%HL5xTUO0IRVIU+BoxR|C>T=ftS`A8rn zFN?Lf=vh?h74MX|c$aTnjQbhToqo%{8lj$|0Fg>NEXP+Ec(w<^^*)6!m{2ypVGDaXU^3 z^Q3T8&J0U2u@>{8wP@s!pW{Bp%J-hOgNFQcR7jxkf@ZYusymb-)Tf1=!FD&tbb zkfwP#%Xl>+COOKO?@)$lrQih%|Ku{u7@p-~$wuY#)=t^PL#Ug|RM`TZO(pF%FP12u zcUOXu`;AJWN-{(!UL%6s9 zvwMPM`;gWr|jbvFl3y!uL7c8RgE%<&AwfAT)>wuaN(lxYOvDHH$A zT=cUj9}Ot4epW6{Rsi{*o(uM>ay&Fnl=B|%{cy88E!GkEOa(J$TK%oG&PN=t{wfzX z|9&)WDKDymWc|Adca)9b75w=I_Oga3I($GOSeL>X zL?P-cJ@1roj;9p=sT0%Ax%mKh-f8A?JoFdHQsFhw$~&P7Ld~@2g4&+S#SfSMxWeQZ z9aH@lanj#H$JX}NeP=G&KJ}JgzeOCCulX7RfQB5A2GKenV?1j_CjX;n;|+KW$~5AM z$CHgM@pxH7^P<`Y>1)oIYT??t@@aU4&zNMPb=_e_!n&`fX-LP-_PVpz5O+EbiN~>Q z-7uqg@#69J%ZO)jL!#4}-H~WrVRKUgu8-(QG}WzO+VRB=?RdT3%7odjS&2;^KV{;i z`ud5BC)7?`T!%M=iAfWjOeg`iqfOK#W{d~2NY%-Kc9eqj_nkPc*yd2Rs5_6U#gnJ( zr|{`fwYPXw<$#*H&CBUgbzi{lkQm#)3?5Y*cf(;2kSA&SI4ZwwRWfPawfYSEoZpapIDZxO9Y$h6Z}q+h1`z5NTaW|ps4e|=7p|h#FdEwUNGE8fSYfD?3o7ydw7B}}8Z%5F(PFRknr6$b1WzS2n z31oRhIWu&WWJD2Btd0Qg6k#=;H0KqBShol~1nw2OG8ZuvkDu6hwVY$NVUj6p)IdaW zTnFJx4$*ziEBrvnm|{o9G6F{d^H#xRpIVC-$MstiZJ4x`U0TqK?s1sW^PF^Snj;FL zG{GuEssa!8D{!E-wYgQ!CLfBdaAZ*6X*u%QHA@E1xcR1%!;Tm=W)%b#68NNZE{mOC zFmc2SjT2)92c3zLDTj3hp8XztV$Fn!$IpAFX1@`}fGaS8{f5BZXHmZbd>1ByqY|63 zx!QejW2xECs@qIbi#n1G^<%NLTs(1pbBk<;i`O;Q9_Zq zu0EDAr@k?ss;&a8ZNvD%2~0Nm+uX2<#zY!0bK8->Z}FsQn=@9NFm382HCW_Wag2-= zZ^kt7DLTiQ#)>iOnf=NzR(xd#eA&W*Cu2p&*EcvD{j1@aE5nZ$1)J&X4Eze)^}xB0 z6Wq8scb4hv7RLbonZ_X=uT1o)DTj~1Z=}M>M(=H;dkJuUv#Y}6a5WRXsVM({0%z11 zg~v*n?duUsHIBk0-VE1QD;`H=3-G4wsjz4gGNn5M`M3x;ukEeyx=OcbABAK7&y?TL?u5?B3ZHMj2Bxlll2Y7dmXNuYNkNkb4aRd?nGSTBY#V5dfY=Xk-iob6( zPIvS+0`ECiC|q69>s739%>UW=>jS(uHEuR~G?N1-;R|H=@yb@d%^x;Aju59!u zzx_0hAmU#p{y0~^Kkz0_QCMBktJgSP(fbjROMq9mU-$IR(>PtxTaU;KfVX^V_w?3i zobKq|2)xs$bxp4b1@I7X-rir~jYN=1e%AqS&jStPc~0}=%4Ro)AZ|yr2li`5!T1^W zrjKze@!Qvl_w(oSu0zxDoB!5ap6<@Y+YV1OB-(M}30oua`Kbd7jUoyLU2bFNOFULs zVIAlh6WOz<3jNB)AO42+itax-Z-GXR2*n6!sLxHz^Fxv5A*;74t1(?30U?&F#^S79MlQ;wN1(E3}P5pbZ=) z>ypTz-VjS~c)NfHHLK`r=8k@TbcVBHJ0VZz+?h<XSvtqR<=q-@N7?0xTB)K**QW}cAMNSfAsr&l61h=1wSM^%ZFQ~5mUhf7b{9Vq?>}Hk zP)(&erb2sw!s+W#7L{0QvbJeSM?-C^KiR%C(OQ;hO0?FJo6W&Hc9^K0?gCOmn3s33 z#!2-7R=Rq#Ee_e1wKjLOz;k+*NpME2N+Yl5kh4Z)pCHdXZBF9?)8cJ!Z;j!6UZP!; zaFl4JN=r?qGXnvu_>@Trw>HCVY#YSI*y&dGd@UWJ=GyuSI05Krg`Rgi&)zKp?L(%8 zjcjmE+_Pr2!RSGUyOus<2U}TFnGQC={49o7+#Y0&MmKBi=vr=6v!19AJ?hechHJ%U z`&jR~X8Zs2(uJ%Qti(_ef0+A!s@L3~cFAdtHLv$97Ki+dpDh;BG&N zw+P(5rtz)7_x;s@^L{EhK7RS~oyX1}@Z2RhFoOAsOny3#5%_g~U0*%m{^7$velYT% zYwx&mv0d-jnJd{5(Rs zyVqS8aP!xmQp-G8GUa(682FwXZtPm{ZSAd?BG_^|bv^fk(G5ej|0UNGKU>Xo32&jA zLGW1q-a;ZB==LoNIUa4Rh{|!xi1!to>(kICl!qq!p0U*n)HiNf)tR^iQ|6(rW~ZK3{U(e za@;L(B&Vb@aq2IYmr1`I=N2hTER+5R_;eGu#4>rJT`WC5;%eZ)Pfce>Ugt@tp$*5O zt?k1f;l@zU>VDPQycz+nTHAZ!g2%Q)^fvenM#o$24;ZXZ$r6Tcf*jHEBQ!6)@?))9 zp8+J|nLoXvXT?9k2>tX0?v~)UuQ3q);M7H$L>rIaCFr`U%M(kqHYS^}X9)e*K^B;i zLQ`SkWX~XdYV&O1(41pPWn?^_#dON?!!(L@JnKutSV?j}AS6>*qFK2k!v7%L9U(fU zE6JA!;Q)kOBJIn=T5{JP>j&yC-+01;J!Qe<@auriYMy^B`EEuY$+h>r``cGGZCdbH zXWpvsf9mLa_t)|?r}L;`odeG3T;BVD6$9eO^u7B_0k2vj32}` zFNrne@FNxwHA@xD(2jV!s?@lT9rh?Y50nJ0p&% zF|N6zJw0-JL^2Ov{Mu?8TN)A(YLcZF>j5_}@=v|sj*b^KFc0O;JYfl1PFHS+kju0ka1jLojt#z@oN%>cGZN1_@|gU;`qI)g2o_zcVlxiB3u- z`s3;jR+IKlGogZGe;tDk=k}Dh0XwI^o}nSX(<%MzfKhERA$GJId3j3vSm9hn(R~$c;oxkmqL4uc=5xp z{^iYuW8Pdie)U8}wGQ$bh2LN~Ij!#A!}Cai?SPkxpLN7vi+GQ0P*Zdsam4qgt(O#(`P!xzo0;_Hhdhyo*AZS%=H&8JwIrI<43D%w zRs>>+tuHxQ+Q)3p60-L(Q-d@>8?wHj(`L}Dkzh8nM$47etWnNh{A^~8^ojstkuK(E z*m-hU&Aef!Z~wy4I!=vK)HEFrJF^)6NRHAs)NY5UeGo-I2pn1YYujt#TS4(mtAkyo zoWU*vXd})`Gg-F0L0V}0)IKEFzi$P~wABK}ey!h^*tB>XCNfr zh+f9Zi3oA7ZRK=?=O7Gdco5Q_anR?;bRCNK!}+%;|+u_ zAbb*@{&pGG(YA?qLUSi9H->ucPt@A@0e z3t{=jr})o?x4*GL-@y+=FBRM0xI^F3mhjr(l~eFzF6Tq>pK;9n)z4v}J1YjfS^Zx0 z&FW8U-dylCn!1A1<5Q!n18=OZc;zFa9%h_g{a)nsBg4uzAEq0w&cGXo8DaCu3_B}c zIn0=CKCN0ijlaal#!cyUSib4%is{SSGw^uSX*!F53Xg)gIpl zdz+{2brIq&a>PG~_}5RK4Y0zHu~aw}Ks~@A8ccEZFZY z7?9=CgW1zd!)oNJDx&(2zE<(W7``&a1MwRyGC4r**gC3y3d+hge5Ky-VjM5$@RfZX zUS_;=_)6JLaOfjx5`Pqa53w-h^1$IpTf)|XFe4b6;6qlN|;oiy(q+N($7B7Hpky&aQxxd1bFA z-3j9nEsVctVfU=DVen1~gLld?oPyneX9fG2!dMIflQvHn-n#bWGWU!j2$@%A zS@fuiJfns2k`~6xS{OB;t%SilB@EsvVJH}dp!ashK%Fov=s@! zin|a-ze0J9|KRpPsfL_I+-$v2L!$09<8>{JceOCy)52gkLkWX-N*KIT!cZ^@L&3~u zW~wwZO>S$k0ghGUeoKWR@asibGC(hqZ`?J|!oQB`3WNWwWc0)0{9Jr(OLB za$(w^AY}TVYB?Q>dnG5{DLL^@$w|Q|Ck5-K1`PlrFQ?L+0$5iK%z%{AL=v_2Kf|nY zT7apu^Rh^`4_Y$?qX1U35opZZekdsvr?56cH~<^?l&dsCIS5IemOu%McS=~iQ`7DW z_LRo!wl&TstkodURU>4ZHk#9#Y|qxY0~Paf*&0(?SE9q#wX{IOsa=@_)(-+=YTIdn z4b}oX955v?-YJ3cPPq(Iu;=isVBKh!S=F4{)dT_uI;t9(QE~`y8 z)GliHpR&_Kv`~t)P)2H@w16ii6y7PJ@J@M>RIoentYAM=D4fPQXfuT(>a+z?>4~Q7 zriC(A3uT-ZN(cB=LgAef3h$Iq6pTVqFb>O>o{7hg@H6y0`oI%7Md) zJf$IwwjrEex{tgYURN@P;E(t(MQ!u%Ry{u79Dy#C5vcjp`))2HU`Wb|r;+##mgx}= ztp^*W_rwkCD4N{6AFgD0Q}!xp3j9IuN;XY?l41 zTsjy;Iq~j%{13_9#rV&@c&>2;{&UhS*Z3p;d*$v{{O15K*SH7&*&gM}6wuMQ8*Ds= z|4cDg27;^xxyIA@Pb-mYynz2SwYkR2`2QQZdjtO!e=KiyaB__g@L%!w3GNhE8*rz% z`UZE3mmhGac**hLE5CReY!u?IzueL25Z8~Nc@-g+SDp%7!*@K|w3!w!eI?)=&^4E)&AFs@yr*Hxn?{yt zAM#fYT$YtN?E`&T$)urQG97&q!tL>l7ED$rPeZsno=-Y?UCuCR}nsn=eH2%Bi;1~w?X(h!hr};o-2nS{0t%GMK~+)QTVB;1>UKt1>WV0 ztI}T!>^}VG9rP7%Dm)qng=ZeJD1w`^h6E2ZD4!L~<^P+026%Wq{j$4a%t2I+XCnXO zcg^D0Iz()yH-ISLq-@~m5Hjq;M_iemSCT@?F`Ho&N#m?0tR%{Uc-15R6UWXEQ^@hq zI`O))?^jQ_`N>5LYBE}Wlb@7>%lYyiV~W6~opN7!i;FI-_bXo8`%X7y*5@1#kG~U} zSIV6w+go0AXQ^^ZEmN1|qBZ3?t{=cD_lW6^4rwEK5eHeo^@#lEKT~4RcjHKKN-mgN z**79#3TGJN)n&egHF^gm;e!0e1-aaUkRQ9mXz_DAkK;e@PJ8{kZQT;1EOR_FkP%a2 z`Btf5QAsZB0nieA+)B&j`8^jz3k7eQIJ+q^*&tpQB;kUrbU`jngV^0!(zc|^OPIFU zcu>DZ9CeFfxpk@Ak1Ys!w##rEVCHy6^FMxj#y`fY9$^)&`6Is(@ zi`1RFShg)Wo)>Lt6B=~J@^%Tx&9hACs8S}R!v*=B3-ZS_h}|0R0SY-D)(&37PJ9j3)HJa7>$ixbV4tPY;T!!; z0a-lnl?Ji9dtk3Mlc%F{yb(|B3^jcS+x-Ho16FYy7;JBCHosP39iX$nfx~sF^L1@T z+`VHlZrcT9zKN*}wfbuvYEyelLfBvkU%sWX|0cV4Ud^7HitL_ACo)=w5u=MI6i>0- z0;jw?Ik?Dx;XGbvW+6pG&G^8!|yM{#VvP8Wq0KNYQ1*v5WBo!lNqE0B=;%o#& z_L<(7hzzfnB$gzbvT`S}nR2FFHrsth^BzK@i|GzbDz1pvH8&rgOc*olprwhr!*v8) zHOK8s%VvJ8I?-i`T3BhU<5*_gzTj%o#Qp@At`pN*iHzG9<4}E6+UA0k1<;E!acdG# z)+JJp=JdOnF7PanZCW~RpLI>Woj#+Of;%SFKs?ik-mGHdCr-BX#^2G{xWdka)+cAR zNge$(IhQxdP&zGP#h5-l?wb)GUlN=Vm{}DFc`N)g%wg~J$?47%{g8R;~@k0Yn1 zq0`*D^ULGYabIf!hACy|)H&k(eJ72dR%E-n^Y=ZWc7xqeU^MeH=0kj&oJO4 z$maQYcld;3cj_wkG;CKUA4Z=d{%+u1^&f@E7AuoaxV3=41e}Y0O5tUq z_X=9ar+{;n2W>SjcF!}>I|uN}ULNBg`0-+Enu*>R(Cdd$_k=zQFB^ZD3Nq?|vq9r! zqgMoaLvlUFRPG_hm5tsZh&v28Yc(FRGx2vOBAx-xLe3}Q%0}-7#GMJ81N$qyZ2U35 z^}soe^HN>VV`t+*;QVEf!W$3VO#CfHLVv`r{zB~J=f$p8rt;wXbAWTQ#seD}>2W&d zV&Gh_=OVM^_g1|BCUAbcvr3m;woLpzjOf1t=hWc}FB`p=5Pd&z&K{xgSPwGMn-9j{ z0nWjrx~4Y;@3#Qw8jVNnO!Oc+;}+no-Br=cCO-~P@<)4&-SOjFqex zV+8Qy)fK%e;6$f&O>a7AT&Qt`ApT|I?_7|11$Ye*uFX|=+1hY5(&Hwie?G#;@t(R&VXA8@vt-!(n5ksJzDS;fK3k^nd|CJ_2VUn2kMXxv3U4g%vf0V=PEK+`;ts} zj&aW_;9U*8F(;++kx71cAi4=SqfSZTWwI~Dptlq_7i+w1`eK00W59WAwW3Eml8N3X zM1KREuR9eU7iu!`Hy#DG>@@UG&ro<=w#!7%54dqA+6DZ0W#f+~w*fe7&r*2V^qC6) z`Dc5KJI_;ioYv07-(Y0$)ANDzdxf_v@G_Mzmjo7GqHu64m-xPQl-ntYSx&r56>he6 zhQ%-uIQL$b!pkI=MdS}Sl~*e~mSd)T+yK1LwH{;R4GNFtktrY4zoTwcIJlK7o1Pxu z13b3hr@HVk-goFd?a75bz~ge!)tT^Y?)Ay^O8o9~;$`qL+|iM&AJ>pvG^!}=Gh$i5 zm`CeqfgAn|Z-jy+zKWQGOjXEV>8%JvM-@?DzrgQz=vQ?Z9(EfH-~RKfaV)cKespQ= zkxlb4(|tJR)(gD=Ns~YZmb%>l+W>@~@7)v(-!SRxia{y%cXreJmPV zTL1HF{Gw#j{5kS*nnaR$nwW<|`Uo+f>`I z;;6*fqOr2})S4jP{_w`u*wS7!_K?O2Sg$A=8yp3Wu>Q3Ki(N&f@JHTOG-mnKDSOUO z`7QS+Td_(sm%e$6#?0*4>ZSO9)=RONYc>HX+x_42O)Txx%toBvhV$NYFrdpZN`jUC zXv`a{j>aPae=rj8#e$V(;slroz3m7kfihrM&8ZAkdHsHG%xmnb>Eznc0+s$Wq`fs# zUprD7EnihdxT-Qx8H?iNsp2fpjvTB6i=hx0vtjP3G5gsuZE4$3O*ZrGsMS%@^ZLpI zeqU91o_fPJctNyWguorcN=?B6~T%?Y+g9vt?>p!-jYxNsVR=O zwWA5grNK~u-HsIQ?izQX9an@LomYwc1tQ*9u&NRVnH0?eJ03Ebj%5n0(2gb4s>4>{ zkJO~Lvm=3&4aKB0*p33R#UQ1SFXW9zgMRG4RxE9AM+$&xO5P#zSy7wNOM(MFPy`r>(ol;F85-be{{BHT0y0)VoU2&xpE>z`HQZrc`V#o9cG>fL}huUK)Ch*Tx z%e|HUP#_{szR!S0z)@;_Ln6AgqrJZQ$R-?gRb206f1O%{3gHh%!&T8Bi_RO1L0OGG zH1@DG><|R$^Hxelsf-1^v4D}u&G>Hm<>B_1gVmL@Dp9Lb%9O<$`7ZkHUF>fwn?W-I z-Llt?Sy7sZ(yB;>Hx{R2$1A-hsNtsV8DXaq@y;>J$Et`$b_A62+$OxvfuvnLg; zE=i>pFAeyNBF*j!+Ty`eN~L zRVe722m9#@1Zx6*t9p-4M^@CT!{JCE8U>nJlDlU@gGmm=6^|C;9$671fte7Dg*YZF zBE(n`cG@v#rGh8oI&>AVX@eU%#_6n&vlB&)iw2|A(6|wKc10;~ZC_kmZ;Z@}P!opF|Ha8AF0){hPPhg(Tw#q*Bjlq& zi_dBcmejT->%8p!T6;LkYnxy`>0Le>Z^8C@u(rD+-e!(W8-bRg)YZad!JFf)3Akvc z@=}sq)R1I1yJcyz4$ijv79J;(4tpcfKpeKYsuImrD0oN!M}1UeFGEF^MuKQIL-VY+ za&$yA;H!=VWAoxDODnRsj*L`Q#r##i>I&K?lVl$qX+^M+CL?`ygtV*ZibUhpm4PVQ z&wv;|qU4$HvRxAtjlkBA2>mod*c&U4m%@?=Uu-PabJ5e76=hEn7Bf~AmR6lFDr;}9yT{`xIe2WdA+YJdhtrK;czlA@7g(TG%6TFBd&$mrlz zcrC))n&2RsNU~1C12xcJRRLpS39~?ht!@AtK;jpgM9lKhFPiiQ>3A(aGI|kS^BCc1 zwN)8uCvO8Z-$36oGLJ=~`?&!>iZn70?MOBSk2SY6H#9F8}X}=3tbQoqunoH&j(7LkZ|& zx{*uI1=4gBkRzVMk#JQch8D-3p1Wt}t)3f7HYFxb5C?MU3YAV%_2DLDr)Qd0MK4~m zf}fI3w!$4&Ru&wul%cJ}x2f^jimoyr@JBKHw9`yyG!_VUQjA7t5)eC!-%kA|wD z4eT-%*e6=cE=yF(lI0L*iFF}6>9_i8{Bc<6$h>e24LmxSvmB~yZ-rw~dQ0Vg*d+;v zF4)m(F#F@HZE44+J6ugVhB$$;Di|QuG(;TvorOk1BUGRd5e$a{b1{}l7aLynhJ$F$ zycO}1AbQm>uIbgqj)5`mtRA3gLh%a9H$6Rj-b%EQOYe!WP{>oJ7>ZV^J?BLWMZ5}>0# z+Syd?%-A$SX%^nUqN%nqS*P}%Ykf_xnRaqBQUALraAhe@`kb|6m90#rpX&`}dRJ(&bTztHEc2s_Hip19eByKHl+ODRHC z`@j7i_=XYMW>*ndm9r!g^p~+SXD>@zz$NJvFc2 zhXH0fD;1>})|ysNSqGWyLGH409gR5Kl37tJOVMf!m?6NPq-2`mbcKX+yO|1L4Csqx z=c%H4uA_20$k;8qv*0b}{Q=VHQbt5cwGG*2R9(?E9c5%qSr2m*i^WkzHQJXh8A`X- zPMx<1)l`Kre!^HKz5K2C7^ZDqx|miFIw4gM=}nNW{4sqjL%)b)qQFrcO4VpPx~U@G zGM~$|q_I^M!*qwMDq8uftO{aK3aymN2tWVn`L}c*^{k?r<5o^UMpLyZ-2~by9j3Sg zky5WOkizXkuQ1u-(oZYx3M@xdSET4TdjM8uLRHm%jAglYke&?-0}@4-I_SgLi>+J4 zF@CV|&pD^)JWOm=WH*F9&iOd{61K9&%aK4;d=5I_E^BRZgmFM1Qj$Fla6ETj_Sb#o zRgr2=Tc&5&lAWkqjB6U{2v+*V=wph`ayBXpj&$cxkdRwSf3s4o4s+25^H+1TQ}oZP zjLVEG+EUAaALvNm8$xe17%Q((li5D#sT2riL#wLMBL_FgKJ0U)FA#zQv2^aUzU@%? z^a;CJ(X8*Ws&RVwTNyu>2C!5X3B;>PIN=H=eC1rENN@8}EjTJP+FeW`hk%VX&m`nA zOhU3Sgy{JAO=%SQ!S;-rTc;|5$L|YB#G`v;l{yld9O8p+sXXrS2<}*-)93a?&Y9IYmiIoI$1ZdRy^xWEl|?<}fKiEI7ipxXhWwHAf5R z*oiq)g!-fi1xl)Xn12sfhbu5{E(^$HnA4oYMwiM2K?xR|;L=@D$+f7IV1=e8SQUx7 zDxCFZEE3>~oSBur*1MQ9=2~66Virq4*0o$6SBpwT&@bu_eNjB*S#;RR3{{9a1>!U? ztW7SVSd>tIm7Q^QZ!MGxFEQe}i5sp{>}REDPA-;Ubqb}e7|OSz&B8&oi(yq`uAZB6 z**#}^(l$Fg<`xnsQB9UiAq;S*Ni%G&A!iqY5bHWUNIYn!$Ei^2;Wk!!SjDb_$x3OC zvjMmG7CMp?mx)PbTZ@WW?x|wiSK|z{aLQw`a2yky5z)gi^l(m9#2?q%lRb+*tSzfP ziqqCxtN|sBu>vd6sJAqLadxFYR;BC}3QsX#XyH^>`r=U(ik~9KR4H0EXG0sKUC`@z zvVxIa2e3qM6|a+FJDHMs=)h$awos8gnSvZ-@mm&%an?DG8P_;jmbqw5WplY0>o885 z_C%u?kf9E9-jxNookcU|Eh)iNOG%_^4)+AOT1`vTFuG=OZ~~iD;51A(39=^S5?G!mv;{j_bfIu) z`cXq8aTq9AJMK|&^%gUc6e*{-$Y|fqHb81}u+l6?C!W=THD?j9*i_qEFH2_>(h!Tm zxfLPSYR4RlEhSXUR63@C9csOA3KEo=m7A=%A?t@j? ztp+C7O>J|wi)xJHP&H?!QuUQ9GFcg6GNSs<;kU&qFu-Ns!e*@hTc3_FvoD(AH zIN5ng4TPM$*yp|Hz|D%BEs%lEomkzKDvBCz)+tzS*Te%Wg)&2YA2W)53;C+lOZ%&= zaD|9mg{BZkN3o2GDV2~cq!ZMOpo*vu9b61&WDA-F)-bM-6P6>WUK5oI{{;6YI2yyS z87psW;t1?RU}?A%BN~C5$hm?%k70!q*azU+Ra%g z2ZbUwg9g$*7ZxwU3>&1_x3CjQ;-H7DGR;C?n_ZTQKt%~uhSrVI5L7DKFYA&TgF7pT z0lB3xP!1d=aP>yTLR4w7=H?DHWx%o`4M;A9RTeR*sxCOy1FsRp3I$Y3U`} zT#u106;6XCRmZlIQFWqRHlYH0ihXhHQ7o_Igd-YOF1|avJT_wH$~QI#1zbkWj;CgA z&|l`5hy1!48duuU+1S$yC3RY97h-9JLLBE1Xx8+hDcH~IYEoQ;+07GHLw}8yRbnk>hLj&7G67HbKa$AXtRYv<6-ECTj9&orEsP z#{+X+MUvvVBGK5~x+2zE+tkJ*C9ZO|@xrfmCG^J#xQOa39%~X$HIk{ZhckZ;L^ZZR zvkPIs1~}K19oT4;I25taofXc3Zq3GWhxFtEn(vm{%I1K464I%uj&~s?&a$$Ix?u{- zzp%h5rn(W0%5g<3<|-Hm2RgIFWcxz?JuAO_rKL95vPwCC(cbiB zp_E4HX>d^jbJmzU7MVmZl>~OTM}j3>*BfFb@=YocehE{$6MQ8{y&}7N*!@*3eG6>+ zS0k|pAZHG!xGpgNB+{b$=TnGmtZD}n>v}leta8qIhcs_mG^`K z_Z&<5)3Ud>l4WbkMpr*C_GsyjM;Dvv(qF|+P1!<*Lr2c3QFKAM>r3IQB~RxzB%9~u?$^J=USdEc~ktBOt>#6l6nB$1M;<9L zI+vU?2;U!#YQ5><&}ji!-PlcG2elwRMnC$^%Y z8U8h$UA=7hHOcx!vui7g9oy11yN)?CV|zht7I7!WVF$Zn#Eu!MDnlo{t8Ch^WqXQ@ z@;Fyx&Vb3_Pb#Jw4CKs z+mU3c3FBrQLBsJc>5_AGio(Ne242BFW$wHvh2oa+teQFjD{E(*#^T%ykuhHcTf#wmdi_huKzC(T?;bglqrU92k`yMHm{}~tAWh6vsy>|bf>s(Ur3%T}6@SmQ zLRIk1C`9!_4=P9VI}7~z0DXQhkZyt zcbBm&Eqt-Nu1zv2$(ploeG6|8!D1QOGDj8OnS7eK*$Hm`8^tp9{UcZyWK_2%DHgTP z#m!cmB_J=hB5#g>yl4-6#^w|_H*n#ggRY1N{ajUvheH^XbaAvKQ`yJM{WA9a0g}Rz zP)Mqra{zwVZmd)Z<3J5sBX(Pj9`q$G#ZhWq5emzomg)6Mr56m>Oxmncfx`-iea@)1 z&~7c(9$3Su-)~|&dlaeM%ha1cQHN7^t?*ahRgc1yH^MO5JRV4Mt_`K=`j^#5I~Ij8 zQRo~@*&0Vxxt!xYO zckLvw_c8Qod^9#a5mzt}z+NNxPKfnHBRIjVHYQ<0(Ap>a8LgJ51UXa&@#sHNjaY{M1w*w$lW#JrdnIC*#(HpKS@#Ij*sA zP^hzT+}6I_>1>@XTprqoABm71**WC5kgF;xgJ_7*=@;h{X)ifzi1kv6W3?;Qb+F08 zgcj+ER2w(?C1)kDwl&9U)GB~;`oltSrccwacf~pv1gv+kk2Z=ji@5q07O#5BHC19= zFsRBteHFvDzq}^QvlPzvt(5exD3_jE%<{ZEW@Oz*Rx(t%ny?yDITbN8Do!S5RYcD8 z$X;W*SaDdEl#h?pa6hV~TAqzMOSdF!K*)~Z>4cfXp>xM0V zGE%c0sCCUnS@g|%WR^gWdfax(J>w#?X|Qo@6Cz3^-9p)sZM96u4t!i8&g*Fr@1hI@oUwhU!$ z&{PfQ)CE_3ae^bO`sgv6vPmjWJO|~fcorMNYKpLP44%SM8*9aK*cfqE4hugT_6JLQ z!oY;$X_K%i$Xru!4jwFm3J*s|Wap^b3CwZMtS&^1{V#s($F_+$YbC(h7pwqa|3|Py z&(P?jI%@B-vu;~#=`%@cd$PRZkaen~%I(r@HZdzBOBT*9twj@?IjO2xw8$zAShzS2 zf~OaEjDA#{^T`%fKXxzKUSV&MZlioS1%QLv?z8RIi&*`JQHpkP*i7rEq@T6NHfiuO`pchDn`06P{f?gj+I`lCN6zBjprO>TX<3IQiA6{ zZ0Lh+rh6@uP3NkI^@dN*$;>sHsAogU)JE<*2Mw zAkq~x=<0jghIKGkJhRAlYfK>f zAe=)AD;8%9aMZ|ss>edW=utMSx%x2{Molmh!}(>`_}xOtcrw$e{}wiuE+7(~hLVlv zGDqq(w-z#8D22S}_0urNIM|Q-BQyh!QcjxzQoUY!zv&iB6^?V%Z|lYiEfKNPFxrsJ zUZyg~J(&-I@;EdwEe96Ckav!2(2^lx*p!|jVjzc^7^hBWqKI`fm$|d!rG{^4-TYln zlUk^06E@D4JtJ|y96WMV51VzgM(^ocHeJ;@R-;PVS%@}Ly5gId=^Zi`L8-QE%IVI6 zr=8OA)oy*X@0b!&4wj>IidF0nCEM`zQ8?dnPD-XyNW)kDKe{XlJ;hdqTEP?b&caO* zu3CogaMrGQRUtkfPjvbfgo+Ht{XN)p9mhu);puu#eWN;Aa&UM#V?}*tB_&Xub_>N^ezUkOVFWxwAm;pEhz&T(5yOwJk z5=r3U!vL)vb?w3erO5U?&M{_QVWDuUNR}p>l5I;9^}gDMhDCIiGYSZ|T3IP?#`j)Z zl8&#%_5`Ot=!{36%4Y@Wj}S!(VREOOaztot(~DwlC9m*tRS2|^-1{!DwF<_TQDDsY z?@{Wg5!gkqW?XTGAg}OVg^1Jrf=4NHgBS{xJH)V2M(t?Z9`H7$ANJ}-3fyiEbnG`5 z3VQ-H2$*4AP}o~z^<7YMF>Gj;f{V|=>D|1-D-=^~gygv$;)W~rrslX3|2&8ji=NyV zMlI)eK}4rT1&0IDVJl;^An+yDj)rzDtEfr<6{u}&X-MdA?ot+eTcvbJqO}>?M)mFh zacE((sl9lj)D!MEMAnphZVr=$WHsJxXCg$m4F~vD)dqq2Q%WQuqw>? zU{U8hRLV4qK8$HgT1rbzp>X$R8@4Uv6_OJyjE5wh^-=&Z8yEx8Hau!+i8e5zCi76D zY#QhZO=es23P%Ezv5bKxa^l$)rEk)x@F3alNMM>27(En*Ta(LR1H-kYt=LJetBcgr zp5jp@D5wsUSxb8>L`4V}fgvfiqAXHAQmJm5X@fP-E8HFtn7Gl)X<0RuniK=7X)={$ zMSdfZ{E>A_YneE$?h$yVyDsj@%PXWqMrGKTJ=KgvQK%L48A%IAliHqaWGOR|n;^5W z5}GM~mgkcsV?Ur_8G6##3q;E2;M7Z8%8LHZk$vrY7A;JktOUajHDFD?&DY#oUf){T z(Fo7Nb^gR+xEyT5K8(D=;dn2E14wQwL(Zr);aaPZsK3;5?yEr64^+ad5VL(7ZV8E8kMQs_nEz zcpk>LGL|xRl{SCua3eA4t*Nu6~1hhsq!wPx_ZrK#g#Bzv@Z6iIByC@Z_M)+F35b~Mzs`tg;HM62>fN3qd%^aPKJBAq6< zHmt_bk%CC+rE(EMYf_0ckq#li;>^tLm25aGBnukg>7e6<^hG^0J^A%c%5*U-aJSn^Nmojx`3GRslXAhyuvc7x9%>g9qD4G$@vi?3>h4=+xH)# zU>&6~Nnv1~SNKEbI39#C`>U$CB+o72d0B0|0X=n0%qUBpu?nYkDcFL&CAqUK6`JSF zP)dTkARNu_L{UTLI91bac_yuyNFnMKH;}Q~)+KO~N=Z=7^{Fi8_V*wSGmOr134FHqr3ZjOiT)-2qa1RJRmi zw(qptG+AcRX@g}pQ*)%5A}w|z+SBxj87e}CLSade-GTsQx_8YBt|C zuWeGfxNFpEK{-we)@Ow?+w9or4j@&P{f|^86qC}JvTqibKDF+hQ4iP-LpfAaOls_o zhE?@q2lyN?8VcK_NXdRC-1{)w6$`LK&K8K~I<07I_L@bP-O@33u%#x7VatDfH>K8X z--*Pt>mb_zu6ya}Ms%ezu6jvL{{Y{*v#UP7rw|QtE|FHq-aF1<`cuOy%yZ$y5dU{{lke>i5B z_3TTQbh}4Qc!pITwmcf7rzh)7xvwMl;^OB99uG+0O*N@;s0eb}{`IFT&3KmyWSW~}mN zr%t9Oq*F(8`XrLFrsU9RW?kSEmZ=}sK!MhdTi4B=2#Yq@1Qls$P!j^QXB?__(*d&D z)^f~;@>?U)w~(^a?FHGQe+Cu;I%%lHHDcwzW$FORFb%5}+MgCZc1s(@4=zY&gCEk+ z-3=;+8lOqiOr?vWNc7YQddxC4LZ!=O4QWl;lG~afX{Nv}24HX#CT-gXQpUFK7sc-a z8phXnZ6m%B>_J%Ixh>h`nY#ZG*N=L9;H$gOUFyR(vjzTB&C7v1cAD~sh3y0D?s@mq z?eR@vfq!!2ZhtnSLg8hSQ&b@HnyW5<sR7{*l0+>NWSLU2VDUs znT*^T?7Qtgmyl0Jl|{6u;&fq9)S;BGokb9LysH#!1$*gJ>mDi z9cdW<5%^D!coz<8dwJD|XP!A{r&Z@vqVnK-yak>|>LQ=Na@pJcFaOhf%Q_ZZj^5gt z0{`^zM;6Yn-R;H;M(wyui9={CVHWv5;hkX3*fvbP|Yg=`nC!Ze=Mz z_zrA==aWC&^ur@J+!7sj$%bw2AO7f2sF=V@p4lxB9rXA$XH0zK-)G!&50vBrf!E&m z&a9K)@fP2*=7UZCwd+y7ZwY+X$V*S%V`AUgFWi|t`=M(G{?#yc$A^y#JYPKc>*k+M zuGrzj#=L@?f7;1!7)gOw*Pe3MpxalxyJ*E*wYQ)6&xZ`-Hi2LF*Y(u{?jJt<;|C-E zx%Q457ejXi{>+o#Z~xWgrHj7Xsqw1~=X`jUVeF3&1s8bko;i5qsd=$eU;cZ?3A=w) z^15LhEAR^k<-BzM>5t#|T@;hm1?EJQZ@l2cHW( z$JDf(^Zv#q|LQgC#0zh{A_^U;7WkBtp1Zx{;xqpc{m%}sJpK0Hcf)6x1-@p^qLJ54 zKW5v?)1U3z`{i#wHH`NK-uu2!SG?2DIC|~flk%7Ccf?Eh#(h5N|LTlad}Cjn_|y6~ zPW*Jul(z;N#tMPIw&%s@cv{Ne--#W4{kbPmm^R3{@lj%FBrDw z#XlOxUj0euj=OU&{cv)hVIx2P(m3;nCw_%*B@2A;y?ZRW^tSJtZdtJU#RpILCT189 z3B34?rZH>ofAZwRW;XP`q*vi1I1r2v9T#}+oBZfqOA0oef6uhb|J3`mf(?dIA@D=T zzIoe%%0RX%hv_|_^)4B`E33x z*PM9m3;XRq_4|2-u_r$43_EaN;ae|m`2N~cfBVJw=}%q^c$>hdef8%Lu6$zG13K>S zKmM}=j=2r>RNyzyJ?D~le>&<%|4rw9Jnx^s-PJty#? zw;X%ogAe&CD*SUltv~%P@UsKTpuqF*qY7rm-dGJ5Xx*YeK&&0UjfZ#;6;8pC)&;HSLQZ_r(z zUwr01Prv`@lV>e2f!)T4v%u5mmfOQ;`zCyT{?%)rYg)9&48vF;aQ_QMryV)`ipe|v z`J3+#n9^~)VO%NjCE<;$*PVa;C;1J9|GxE&krzM?0zde)g_nC5p8D^?w%!%{T+;C% zz99}9THtA1mf!1@Q|~xyY|dNv51RGS-!L;Q@LmJYd~KU&N6&b3-~D!-{$%u0!+22O zmjuRdzv>Uqdw;k8w7e1$Ay0!c+N@7FMWBBsA0S+@aoS$KH~Ao9Vgte z;j=r3R_+P?DMFi9;90o$`+3iN@Z>|!E&Su(4*d2i)USlVuec*nD=r|dg* zWf}5&gTOz1{+*+0m-OE>cmIFgd*7nvZy3hE1ittOqwmJ)f7|rdM{lpW>aeq6PbNW! z3OvtmIHvP~#e41h()ITYpLSKv$Ed#oKW)g8=YAI%F=Wc1J{QkEbRG2bA%Xwvn}PHG zaoCLDDZ_7U@Ev+AV7WVz&J(Y-eE!wi4;Pld^TlnC{BGv1sJ{Zg{}1UqUe!AO? zU5v6D-?-i|&K3C0SN|Bf;lNX0xq8hR1*458fd8t%jW^bPcl%Sxy?(vog(t54^fu5R zF@*FN)!z8THvhOIr}q2Sb*nzV>`cR`75MV6r|+g$bUA7D2=7x>v{Bp)7CwrAtb-@kj>f-mnx{hBhA^p`hIDr>xG{L=R> z`)Tfyzdg9tFn%rY!VSM$`{AaIw=MYH5ADlxA3>dXNZ|WD_{5qC6OW(wOwE2Hi~(0b z&->tq`dfR{?XAn7t}A@<=pPQ6aPq+zx(j^lnTM|N+!mR!$DFBsHw-Mg)-cWzc;Nvb zZfaO?(IK-oH9vCo3Huym7%vHY)r%|c>OW}g_wN;5{?5{wXD>61VLOxlz&B4$UfTH4 zX~v!XKl$B#x;_bh?{q~LDK_3LZ^zNNrja{+p zj5|k#BcV?&tu>5C1wMMkpT5|4#G|D{79aJ|Tc_;>`;c2iI{*3b#l!B*{q)6Uzgw_i z;4c4wzI|mF#t#$luWtYO`1-VbXnL{jL(}-`OKWpm^WyfRw)(@{=Hsi!`08of{AK%% z8(%v=*;LoiQJUecaM5qH%azBR`X~g;c;_YhuY362Ss(TXWME5&MIb{q= zU?vi{oR5_>EIT#1oM8+}8a+N!r43nN))QI72ag^3L~=^j2>Yl^`UP}MGYm;jNgUHM zB(YVCmN;6qd?IUf(i6k+!g_FK>JvBosr2$xGg&G2>`a7Q&PU6lFv_3G*`w1l%3Vt& zVO?;NeRO$ECnFgZ*Ue$!0i==(!|ZiJEmJn+M7pZEWI0Ro;os}8r$2>=%mbS`nrpZ&i@dKQQy&b z*#=VsaVrmWla?TREf2%T7O;eM_y|%`+*>UjC#(dy<%i zFW}uu3g0|7Nu%u*&}h3PPzA-S{4HjgI3e?rZmBWk?K5Xwf! zj(5|ylteerf~>KbD2VoCMVO$#IGu?JTuryj`Q_hsZGbI^)-rJ4}LXa!<%NrYIG_A`2P$N_9W6M2MA33tT zwGEP&W>?DjJTTw#CdtSl!7a)e3p6;%$s>@_0Zj#Rx5(v#BnuCh-e6ps zwA;2g8j_TIMo5lpZfXAICgo5LvC10?IzeVW-*&2~?sCg==1@jP`QNZ5;S-Fv)T-XR zyJ4s8bLD&-RB*Qv!p$QxwgMu8dELaM49q^2w|yRQO99;cfna16FkHk)r2J-!dNOrX zlKqzE&Tn22>FdJfH5ZiU!CB*PZKQYeB$l(yw_GBS_d|P$ex2zhGe?>BPZz>`s*%iTfPee zgIWc1puw#IoAGUKI}Qk{1qao-!b37++4lc@(70D?evFnCmm@<711ilCfCT% z^0c^RLqaTN6I>xy_g`U~X;RkeZnd*xM%JjLI2~^LY6Mp{!WA4`>C;w(1;}h_TX8j} z8B}RHlu6gy=~bFJbd$i%WNBM*=3EgGm$qPpR2oaymi&LPwX(sLzr?mQ>zeY1WhA`$ zkQGw;rG-9R5eAQ-slEq0<~=Ua79%4WvdW`F7v-4p65S;E`5@U zcn%ruiX0OeHe=>O1&)BscwQg4nJlGqAJ}_R1^WZt=$Gj(D5iHx7_XQn)?@GE6Rg{$m?kP?pP|mWs)}jiBQRWqbB|)0I0lC8c+h>X zm?o})&E{(>VK*T$O*8<@XWhMuX`%<%9M<(#OcUe5-sbRf6w|~DU@KYovSOOp0k(>D zA1S7ZU%*zg?xJFv7=V3zYgji>F-=SXTg$pU#WdarxSZp%96Dl}cpq#9>poBn&kKe` zqUTji6OFOQZ!Y_5rkExoz~-?oN-<5?!4gpi>FDa&p55N*xw^K1q{0#Oq z>wZy86TaB{H;8q9ifN)X*kIPRRZJ5D!G^GIh+>+U1eV0QsfuZ08Q3$dqc5}()5HO= zWY&G9m?kcPJd>N&#|tFVw!jyEQNK6ifLjZ*ihC@R!kF1z=pAInPNx- zu;HxRshB3d2TNt$DaAD5i9LR4tkV?JL<_L_tfO6u#59ovwt#iR6w|~kuo0}AqnIYv zf-Pj-dc`!cAMAP7eW{ox{s4P{b$=fY| zGr?YBf3p?S#M@vmvu=%InkWKW%({b$Y2tUVcR9R271PAs*su5s`)jC}Cc1&8v#zIN zC~sg(SeK)iCSC%g?-^7ROBB<@hhVR=?qkI?Q4F?@?|WV`O;p4F#tio7qnIYzfxX7M zM-}OcNu)Z0v8eVw#u(h60ZJKBJf>)_|e#LAOpZP3!|hA%N}+#WZma z3)G|?7pJ?lCsrioZEWFq`MrkExsgCT*Tb10^XH^AOw-CK%j zVka0L9{vgyLtMZ%un>EnOIG|?Xn7eV)gVw#u=wuyDq z71P8kVE7MzuPLU9-C&zpw^uPu`~-$=nebPvm?mmMv4wSaDyE4C!LYp&{(==lJr4Fh z>jo;OiE&`qJ_&zMDTaC+Y%A-QD~5Cd+s3*=#ZZ@k1+wmxVn`R#;Ys9)x#gHywAG0n|F_dYr#;lvH80r_WLe?!&OcMoQyIHqOG1xBH z9@hP;80@71zA3@FI~7Bj2K$tC-4sLn2DX=VQx((12C&aqw?#2ccp%d<-ROC}6hqq$ z_Bs2DQcM$1gY9G8e8n{JHCPerjwpsc4KjB>>v}7uiD$qLux^23n%E2W1?!3w!?VE% z4zlh}#We8**q5vuq!{W0u&-F>P)rl&!MiD_Wp zux_Seh#%My))gs+_5%iVlyyB7)5I{aW2_sY7}`s)2Uz!|Vw(63>|54dRt)VWjIRmn z0u<9k2-tV5>!_F}^1+(2?rFu)F9AEwx~~+|L=70^_pGa_82SQW%~;o3F-=5+HD_I% zVrU1!eqddWVyH{No@Cotu9zn3z?e_4zq=LFL|1X<|FrgRJ{d zF^v=IN7i{D$%ttp66`0|J*t={HiMmJ-8RM0_d(+Q%sNdm)K_38`Ir5MT^*hSXOR}6U$_ABeYQcM$fB6ELZT^+^H-vztGx*>{b zA{Xp;)=g6kZ4}ratlO&?YzT&NnRPW4)5ODIS6J6xF|@y6f3of^#bEbff3faM#We93 z*x#(XrkEz~fe~C~-TjJbq8Hddtm~^7#tUHAST{~FO}q+L!n!vU)5I!=vYFBpACu9_I9m?l<$b>_5RsTl47b|?GWr!vHFi7jB=_}cA?p&kdji~XHZ4C6)^S{VCls2Iuz zSRM8kp%~^+z`C=)JjFDz609!!TdSBRegF$#-H(cCqAm=#9_#8Wrin+v?q*$o#nA49 z_27Fvtr*%tu=?z8n_`;y6)cc-e<+4InNalGS=UT4w1Z#`SvNp2O*p{rVciVHP``ln z6qIip6w|~7upst#Nip=%JEK3&x*)|+rorxGU9@88uYujqI)`GKcoVD<>sBd-{v=pq z)*Vqy6ZMhx53ueY#W3CiYr?wM6vMm#SX0&=R7?}CU@SSTYonMZz5<)Xx^EOinTBCB zV_k@1nn(s~&br}>X<|OugRFZ&F^p%xTClEAG4%DoTC(o4Vn{0(RV&s7DW-{jV8N`5 zQ4IATSU9KslZt6#Ay_ZgEm90+0mj#wuf10>j6c90VqKzQnwSgLhIP*>hPfrMhgr8% zG0Y!;_2zs0t{D1`Fuu0zueD;D7y=f;x}l0;&Iqg>>((o#iQ{1HS$9$~^zUI*9awj# zVw&g!){%Aiy+CG~(7_&I-CV^q@g>+~)*V(1bthOS)?HN$bsZ8fly$un)5I9C&a9iD z82YwgU0AnVG4x-+y0Y#|#n6U=bz@zLVkle4j4;+UQw(D!us)oAQHo(+1uTMfqZQM{ zb6|a0_q<}Lo4|58yzPo1{lL1j?xbR9-;hCGd~FrQH1PmfRn|3E4D%LX8ta}=4D)MX z{a80!G1OOJk*r&*7}_YXDApZN4E78b&AQ8qVeEp3jbUAYVw%8@wuwhs7p9mdQov$a zm#P@r8L&9k%~uR#1F(43eW)1j3)Y`?mlZ=_3JLlc>l!GA@eEiGPOCV@&|d=^!2ZT6 zritZXJ=x#eilP4k_Bi|dOflRSES&vaRt#fFWLhuQ`75T0V6Z3n+J_ZGJr35J{qmF7N<8!b<9Nr+s(Efrw z%KoM+hVcSeEbHD<47LU~n6Evcm?r)Ki(`LoFhgP(FMthUfA=ef`7p3}_BT*5v}IuZ zSvNy5%vpjZ@wMv|L)ijLX5C4}G~osVPhnkU#Wc|nY$)sQQw;Y78^*eUiou@2hO=(I zVw(6EER}ViCq-$)q3_8jaf)(uxo6Hc%k*5xaP@&Pu9b?+#Kz6IE1)*Vy~<65v>)?HH! z|dA9-)zWk#zxzA&pCii{sGuD&fiqUG%*7#k9E3Ynph1s zoptXjhWUH28LT_180-Lz;0nHnw_nEh;Lqz5TP43wl)_9h_ZcUN1@pczr&kG`x;uPp8DqEwa6~ zS^9s(B8!)DSIwMQdi|2xVpjpuJV#eYn!{uy_*$$6+C=>*upxM zm#yvn_R~2l7heuLHKXgcb6@rNdfUkd8a(xV&89IUd(8?6ojM>ZY2n>*FI8S$d2sIy zFUM}U`&6%q6ST|~i=O?c+Y4WhX*lAZbr;unTE2L~`NzWY6P|o|uE%|aMZG_M`tCnx zM?5p;NYK>rhqHV3@wD}9Q`Gm_=9NF6wcEDw>TAtgB);`$k5?vq=&!$%R4G28_PjG2 z-NIL|d$!$-9@(Rsep7E>*M&%rb22@eS>)yxdEhTTW8$BM|GmMmu zMYg5$Mc|tKaVK-@jPi4RKI`*}ga?yd-RpQZ@XS6}WZQg)yuYKk&B=bzpW9xEL3q`c zXU?(6p%cfyW&gRS^!_4kf1Q=3{sZ^)ueZoWP6+6zb&bBO z=i;K(r#MglV4w4`ngx$`P_Z&fOvy<_&$ zuAiem_(`T$XmPD}%UhJXU&yXG_vibPyKIRFDY;PZxwnqj{q;Ma%gC?V(*O4s`3H-9 z!Xlrv$fqpwj~4mYZknUnYa@DWU)W_@T-Le)#{(?)x5z(O#TNOjMgGMipR>s4E%F76e9CwG2&PwZbQJ@LyOp_5L&@koB>xr;Wo?Yei%!cN`;?+f|sw}`hrw!3Y< zyYY)duYK&+b7V@Nm5ZW}B&4KIn$qpQc1=%B?LBA0?jQcFw=?(Nc}MS9)o@+snc0^< zU)y+bp!?N{ZO{MY7C!y>LmPKC5$7AP`@2D}I^XnMGUgut*FIWwU#F4pmt5OBEn?o` zE`I)N+s*M<^<3(Cm-ef&MZTJ7E8gv!9PX%>@oA+Wf9>RHaqqBq&#+yo2W&GQQ}s)) z*N^qNd%tZ-WN3V4v?sgHxIc7X{r$FCYo&W`#|0le_EC{-Rujng4%iX+*Rmc_uabXy zN7!TLiq*f_hcDc3n^Ohu13zp&CN&wu$I|{2zQS2XwvV%yk>|DClCf>rKHHMZvOcA` zE!XQkEpio$T*)FMS~yDYKW+c>t9HJH_9s9-&y-jCSB~5Hx$OftwBNCh4S024UevUu zMYg<#qM+a5Ex-A-p4fE|`eS(xDcdaa+OruO982JSw{)L(p>guzSBh-QA4mA^DJRZ- zGe7*t#kgM$c|YCKUe>r{OOk@W0ku`9+s*to~M zsJn*SM=U-cn!aT6ADbri$%{L^vt7+o5y$eIKKOj+mHoCf9{hggjo*4Mv0Ojs#DvI4 zUGnSrWJg4-tGs#R%dT?4s;pD4a_;3bP2*hr9~@R(P~~)yZT>7g@8)~I7*wa*H?Hml z_qV{6QRYR0fW+r3UsjI-6!mMr;w!{EiU z`#pVP%s!tEJ?a-s2zbu*{_lQd&mG#~fNlMN7UNnp4Qz3DO5T#{iEVnXNZmjGtG9bE zKK@Ihf8`hU+vdM1^W%GqJnrPDuTERNG+ZCut7y@^Pg>+t7Wqeu{F6mK zZIOSr$Y(5au|+;>k$@+FJ>yG8!PB44)1S1j_M7WprW z{I^BEYLWl3$k!}#iA5IY%G$%udh7rEVZj00%094 z)*}C6k^ecfwxO&4YZf`R-p(ej?r9czghlQVUy@Y+1;jT(#&>cSA z)gtd&o$z$)Ww<_CULV@^hxo^@*6jZJkkRkdY5d*l;+E%+RymCNi|TXKUuz%j`;1T0 zKHIA0UgD7!;k^bm-!uKROMgAL>%JO4yUI^Az1LMPDC`^JDz_OM`fy;I{kFU>&>m)Y z&0VtkTBmbOO8fiIFBo|G!M{*mx5@j5Zl2ox{KrMM1&7f7M4hTP=!<)Q+Us(^3`_et z=>Gfa#k-8JmLx81dM&*){0o-$#@0T%&8a#2ZL?n!gVx3m?N!qv*RseBEOJAOe2+yA zvdH&Zl|>G=$gM5%Ll${TzcovezAv(EIV=V(>}IPo)gtFw+Se%-dAdcOYH9xi zb2E;2KeErZe!s{~On?7OLyLTmMZV7>pRmY->VCg_k9U!6TdH`d@(%Ymn^@dWS>#q0 z`A3V~)FPj>$bmn-{Xu<~{sYa4y7qsP-O9@JKGD^k=C{t^r*3oAe3yqsu56L1Kj!M6 z!gH0W|K=*wdr4Qhnnm`u$ki=!u;qDMTjapwZ=`SQiu6vC>D|oYKFA|v_!#ev-d+ltIb1n9_WXuDXwPN%KPh#!#-aEH^e{8Bp?Q#2Tv)oZXjQlj^xJCZ{ zTZ_B(dW*c|aNsA8JhI=m=ueK{2Rr&S2(Isj{>3|D$^J_Fw*O%9f5IYH`FP01hbE2+ zUp2YeC+)j$^k1?y{->28c;4UT^Dec>pRB$1$sIFfeiZz&W&4ya>3_$#@3+mvOGtXY z!MUsIG;_KCpf;I}XN8x>XR5`&!y-?!$axldx<#I0k!M+3Ba; zMwP-hzA&@sv!uR0fAvl;d9%vIKCeDJ?7^3ZdnU&1df?8l9U)y7d{>zGS1tYHL3h=T znd5iB_QH6X9)p6v|9B($$DTa_!vn|~}C ze%G{}|MXlHHSg5y@t3Q8@qNOCrEX2b)=%m8>gFL&p6=RbZ@A-=gT3Bd^IK}#A49); z^UhA0Jv%P#wsx#re#z4bcRlfL;<;Ld`$J#uU+{I%-S_(Jd*GcRYyUXh2w``%Hj^QsT~eZKQS$I^vsrc{0wzmE3uC!H2=OUYa6==)B<=$!cOj(>W* z`qAe79pf)o4eQ?Q;qG&We4ewp+wT)67i9I_drxfm@-rP@uM|FH-cUzdw`|W%HPNi> z^w}8d>nNzXliIl7aR%Wu4nKn^j0lv3{9eSFjI*Wiu}Q7`Yg|(cVo6=orALZAerU?L znA8a=*d|od*K{aLrdGm+Fi)EkSKGu`Tp%h5PhRic)5Rm*V>sGyYIi#*{VX?;OH>Dv zJ|9T!>a##u&eDa zWV`2QUx~!w3_IxzJM9cR>kPZ#47*fv2QC(Q1=-rBD~C!-2I{90cIpv+daSQww;SB^ z!%jx(Vcv1^QF??|bYx7Fc|mWApR5Gp^xpC;^^oiQY3H1_gUvypv}$JCKsvWE_Z(jQ8CK=N)VyN=2pX~)IYY-E1q z9lxKa{MS}N`f zr@*Da&wwj{`+=*02Z8SazXEOr9s(8s>Hd`8@8Wr?@ah_3*gdFpc*_p9o^|gkhE)%c zrN6fo!wPy+hd8q8bbjaQ5}kW4!bTZ)cpB-qqXL-CGayclPxy z?Cytqp>nd@^w@yt$o%g9ksP37m$x3_tH*jp;ZA;W(ZL1pQ^mq=arzbI$4@Uz9Ef{S zxxhp*O2S|;WD8gh7$uJ%FV#Vofx+sz@|XrRj%O7iL!yH!4<8`;rIQxT&|$b=3#6JiNsDjjFx-1KpbFcIbyV|_VbEc?zXtcJyj5RTK3Cw@&QkeMoG1=Y<2+ra@3_)YWVO$}c`K%1Y_oXhi41)i~(6 zsZi6iPgBYtP&g1z>mJZ$PZf z62Ak7151EYfNr>MHn0+q(woAeG(=%XVceuxHQu~SIxP9aUt-mGW4zSeVxiFgvpArb zRbX*=9HGhLFcwS}hsj|7UL36EZY>T}-_c>1v$Z(nNoUjDS{xh}_gg6r6eltXDr#km zL(Ko@io;BmJ_PjKR2--+qqcyK>M&0#4mFjT)&f#-@B>nDxD!alp&5{h!(G7Ez&gNC zU_D?Ius(1IurY8VunBNFuqlwznXac|@Dc7WivclN42a2MAa(S82&v;fX`mkIp?f)F zPwJ80G0uqNdQUGs%-0!vR*&_Ic1E10W+3cBT3~+Iac9I8bUGuWRP|mMb_qcVbR6+l zR`!lvzK>InwJ#LXeyQrU_5iV*PXywmhJX&TT59>pFJU*FfjA9!U#j9%C4Ld?0?v+> zN|?f=Yq5-!zgqynK|MgKgi}YFHD_r(9LQeeAG)(XbF-S6 z;?90uYi6p4OKav@)U|`gU)I#JqOFPh97k{M)w)>GoE1sYHb*d_@N69Pyku?EsFB6c z(FRsP*47S4CB8lIZeR}}rAsd$J;NusPWD`g$({=_?2p4=se4p0?m;-t2I;;ran9JI zFqU}zV(=bk>~THPOAqyqazm(+x^*qf^2opPZ|a2sHL+bX;(O^ohQUZ{8nvbV+=T&WDHo zF*+9HKN2^Pb~gx2b~0v}x|hKIy)In|*C3pfLUfQ-(s++dgZin|S9EoM9C?SG|IiZ3 zwWY4^Z@|5(>RQ;~J|Cy6yZb%VS(bMrtGG;m_a}&h8%0NnVBBeMvZt zQ&4H>?%jT8=_P~clIrB<^wRHuAe^YUt5XI#QDxsjQFTUo>)pMb{eAVm-pboQIbsc}Z*=>%$-R+bU zmnbKykRCaa;Eh1yf}+zZ#YElc`tK^iUxb%lH9z)BbXw&YS3hVV`5y1HpDX#Dz4UO8 z-~(z##TjuSZ;#Kk#c<5;>D!Fr=8U+cU&&uYbTbto4ou2=K$Z6X*|i)$dpHU_9DjOb zox@y=qph&lbc9{`vhaRBG?~Yz+HNk{Jz(_Qp1k!~vbLtKv&nja zy}|xy)0||9CZncE>hi!^vAiL7pGD; z=?2ra-tcot^^#J}uKyL}yK&I-kR?6=#aX4FiOvc=<7^=1@pHgB!1+KL0xSgH3w$0( z)A(qOc;4j|U<=5v0V9CRfKk9Vfc=5XfeFC3fw{ny!0EtMz}djnz;(biz|Fw5zz=}$ z06zl03;Yzg4)`T-J@7l=d%)Ac4Zw52jlfI5O~Ai^sLpd6;2F07djiq4=8gh>415lV zY9^NkvU`Cmfct>d|e0k#1q03QZs0x6u@uqRxTdmj+jUCc;QK&I_iezb zkoN!`z|Vkrz^{PQf!_gV08ay*z+Ztn@OR*B;GaO$Te<%Lp8`^OB|Vi$%1hY^Cnh`L z#5C^Ue95}A@JCGJPq9gVcF58nCOa^?tg`7EdVP4MM$>k`r3w7=$dB-fLc{3VB>E@p zY>3c0;q>H>+tGwc>5Oy`^u|G@hYm!V532EyQ7lu9l#SE+ij%G(Kh1IefVw~)R3l-E zECxS1fBi(U;R%Rp$s1D#^uH3xa_qm&;Y zg()sODaC=iREi$}Qs3$$U`^o1K$^eU2c&qDJLSwb2v5ESB_>~k62qobL?ff zFmoYBPw>h+lI_Krf;R*4`cA48ME<5+{0*7pYwr`!3jGkhu{e@lHPLusp?CLfUpTsw zUKoiXNo0)lWpr1Z1HBzPL!FZ_so?7z=;tUbaJI*-ROlGAL^?hUjgdW?p?cRE&exs#pf|XF{5>k!ouN@?0qcf<$)=JbEd9+fUCAVV$C-@N zINnj@M&{xJwQlDRzu zBs1y@q~~t~B>xWsDXOHW=SF3g+Z5Oy*b<0Jjo$)30t|)R3D^Tj{=Ly<}#)JL(!L<^2E5I~rF5Y_5cnv#a3&T#+ zxO8ayecAqcUw>!BS-o!nhLGsp)2Oj;5KY1k2+*Sg^HVOoQ=|91NW+Zpc2Q`$gTOMte7(ytm=G)X$mxiGebh%dXza z26J~lqP9c2Uy-*NUK+%?{HzvbVcWD5)+!$4A1^6p1rvLbulb^ z>rdV57Pt1<*tteX*KT8~;;KLBs)iw5duExEpWfLcq$|cwAzdT0n!wL*@S}&F!~p4J z`>^9aQ}<(lq=%iRiNlDi!Jo+rgcn<2R1^Fe3csl$J3WO2_7u~=WXG9?0kShq-5bej zz>j3qWsw5~db9f@PCxOv$*Am7y+ENE2i`J^KnUbU2Q?#&fh5~-Zne1kqJ8pLzNvbq zH5h?FSj*B>V;IzKjq&U&FJAq~Ejqog4ZNy|}W{w(d z$HD`8u^9-z#vwyy$x#Um`459K}#I1h3v@M+)(;20ovNX7vt0>=Y$fD?gJ zfjK}Ya1u}l<^r+mNH~C4btLkD^g43}@D(7%k2<~cfwb~w0g%%DB)IG>5tGd?F?_!R zf2EGnMCu%mi0npbVmO{OG|ip5M8gqAK|Y#Qx%|iJiH?)!rVV7y~5h zi3A1%qk$B6(o-(bx(wMdA|^XV#PH=}Zsc!btQ8sv9oLG$N+nFl^b%U z#!jje%C50;O@Fd>*Tb6r zDvPB9jA?Xlbx>LHz$xqUvhSrxH{9aB7B#!E9+x_JNP0?i3V!T-G=??YJkU*yLk7>1 zdNoC5x292csdlGlqaG$N;xuMgO6O9{9_KtGOd!RJY>8}cn$kZ9+n`%N52QH11mr0Z zU=ZZRKzig?fHXDo8n7eqbzpDc8^C@*x-J2@8kh`R0~`ii3rq*D08)C8Opo^m;vs8c zVzL${hA*k$uhh{y6{#b;!|T#WTGn|QSL3C`RmUzbdZ}4m1y*Vv6m8=m^QXt7la2|2 zrLvKIk65zLxTZGz_pxSQ*TEyZj!wZS^51ih?xPOmo-rJt98`6$u>`lK%)J{-bD7!K z)(8nm@uKXbXKAYRn~dn&m(O@E%tGX#k=d^Osqyt`9D{_sj2v{;(bxs$L~NY-hTqAcwYhr0sjV4@xBVA z;*A~)7w<|yD&FouD&BM*74K@0lY!nqD&EzBRJgi= zEp`7rKuYwdh%#rr0?M~|nD@|17NzW*xTcOW^bc-I9|@vaY~;vJ}xxiTkn ze`tuw;!R8zZ>gi=Ep~T1wMxx`ITXwAb0rvxN^xhJPkU?r}p(zOvUqe$< zzFT)j;l(yZ-x+1RSdYS6ZL$w%R1gNX-ac!JoKakjJFcNV`S+0X$%4WLM3P(RzCdr87?H z5KR-UjDzAz?OPxe-b%l$itOU91U7(v6|f8N9bgaO zIv~|g>w#1Z-UAK>ZUCkMHv)CwJ|Im!?gu^(JP3RVxEZ(<_&$)*Z!7R!;5Ojq=3C=X|>w@+RkF4RLDCD(W{8BM3jH`JH`&I-_5Z*L#xJ&Bf?(PR_5gmm_|lR_L; zieq7Zs7JO_h93(E%8yX%<{i`+>8&@JZ^6;U@4J+IZN@E8K|~yq>sEpf(3G8AU=w?q z7E{VvBI0Ts0&~V*a)ueJ;%S(Gh4>r~C#~b~rPU%E5S;N;k9qjyQI7E=`Aln!Ne?Ww z*SiGhew*44@b#J75*i17g3BkbEtrhE{skh=4`9X~t6XNv2iQ!pIE^5&&d3}0kB|#% zw#bKwJtQkP+Nnevla^A6amHRy^;*Ogeul71&e*Fe40?vD>KTHMIC8v2c2&&QSKdSu zb4ouRflwa$@y9c%y7p6_kfgfgHMq*Dv(+ZsVluKrc?DUH423=gOuail^@D{J3Y9Gx zO18-+nQR`Iyn-Hx>ZWNpje{P(5d=S_pt^~Mn&el*xzgh9b3eI}EBXXDS6JK!z}I+VjxY& zoCP)pUIexR{t9dhe8Nk<82BA>AIN_Iqm@1m_$OrQ=lumtQu<-Qe<0@oOMugXXoPa- z0^ESlk_g-ZtP1=Br~$tL(*3Aj^aXwotOYy^tONW5SQmH|7zlL3Gc^EK0R{nU0q+Ig z1#ASQcC;~&R;x4xQhU)H*aP?=Fb3EH7!Q0HNEKaM;6h*skS2L4KCc2pfy;pLz}3M1 zK(ZrpC-d+@36#TAVzU2AOyeJ%l)C5OU+TF3+OtIz7Rh1FF75P*JaB5TgO-y!UiQ%V_Ox*{H;b&+}-62!=Z#hsqwBmE%8QitmE$2XV z%3wMFPY-^Bqrx(P>x=)&fk7$R20{PSDX|q#QLmWKJYgqZ5pi4#WLgV5vk6T}u*i816kAkVK{~o0bQe zmAb#i?qra%Lron->)@Z_L~-bdb7*N%>z19Fo|=R{Z}-&ES$0*shmW+kY{P{Qp3Oss z&m!`kCg!Q&)e=MG-dGzH)J)if>N97VEflF`qmspCjv5FmG{!-3qasI7*heYTkiit+ zkw7$9A`^HQa5S)<(o;H-+*-->Y-1r)OzX2@Y*I{Cgrvi-6XH(9s_}1ONF5c!IQ=5B zymL&v{?|O84L#jv`Ob{^2c*)>h->-%O8Pnq-1GL>>+%~YU7ak$$K~e0i_8KWo6DL-tx~h_RhClI zGzwaNM|%hc!7#H%WsgouiQ!QiTMO3@y8eo3 zB1S)ycf{Th70Qz(`N=^-uhiS|A@=6ltLlI0pHmg`E;`abqXM~M{Xrci*CQgZwEn<7 z`0cH$dpq=)3`6mPLjzYw@Nv|mQuRkwu=*sr9EI#ok16Yq7lBqop*T@_q~@>GP{hC0 zAHl6|xBjSky`k7lL*W*i4Z^klptxDGTslNnA-)*n(Aip-EYYDCWVS&HlA3X#L-VuFtxi#-{441>gMuVV?9^yxJ4 zjdvy-bSCU}CLD4m9Cs${btW8bztbL^=6;$k)u(rZADyZ(+A0!R^0hvvCp1wdU*n3x zu;aKtHsUBPUNB1?#)b}rgjgKw-Xi$G;hY1Q zN;{yY(smur*!5k`dOc#jKAomGQVWVust#uyxO_4AfPO`v?q@15Uv%aawZAgf-5FN2 z30e^nR>VTc;ua8n^1eax7kkP555Y%bVw?$Eoe2f`i>dyNNvo{-l~<;eRDuGpLt~4g z(_9^j>o`g(WqCRxj#eu6ag=yuX^xz|_^bsK9*&X{pJ`)p19`R2G^}(K(drff?^e*yjflWM>M-m6PU-vnC>F{0pp#MhV7y_755A-$t#%Dh5UIGI*1Lcem)s zco|L)1k`>z-S(-kkqVBS0%1?o!*=KU73kBxvf~E%0bd0lxV#~NXy3?4X_&z!h-Juj zJFc75OrJB2ZZLfu{`#!h=dO=~-^i%^?ve2_h2%}h^HX2YO;k<=tNgb=pfBJgoX$zO zfRk`KC1LxbY%M?HAg5iicW_B@&HS)~k%)#WGFK?Aa&`%OntVvd=}Pv{p7y|=*^kLG zq0gb`&G$Q^Klc@-3#VOi2Yrq|q9_w1-{XirjT22e)>n?4`lVMI1=0igt{#hTzE#*e zI&uzHvOlcPA#2uc2rz%z$H&2q{Pv(_ue}{7+)y*Hy}6N1?-h3U#$kIo$wLr?$PU(X zcISJPNv$g5P40z#j|RfVlG)f6(oevY5qU|c2G4xF>wk#k(w15`?8dvZ9{9owl` z3!iB%&{AVl3D;++f9_1H#1APIh9!BK^;4-k-PCk z8SFn&z~NdK6pIo={ad~k79=>AQjD@&}17O zwC;!GL@AnbFwBFF^>;}3J{Eb2l8uiH{bG^Htm!bq$GR&%=+j_yztKv*tim6!hqNooILHQu<2GZVz&dz7-ca4b_km=4TY=Oq-Ug%;`w&RO(p^9r4-^8a%eef$szB13v&Z1bzs-2S{B5((h6Fy-H6@VDE+gYvBDrYNj3l{swFU z{2kZ~coo&!j{qM4h61Vn>k6b=w+HYMU{7EVU@u@Kun%w) zFan5zD*6Ja1N#Bz0;7O00;7Q|fU&^czgb{RG{+>gRVpTKIB8<2(2E$S?00Psg2cT$ z$1Z>8^tO=D?etA_PA3QRGh=B!svqXuPMtdRyJ(M18w4afLS4Zq>HN5RAiEba(Dj7Q zlYg0$9@CS550MJDAFrkD&N|rGbrWf;preD_=%9{9RUpZ9F2_lS;eIU;FB+9ZiS!yd z;xOE4e$~Teeq^z9Hr-!?yK6^dCnW3UFNzbz;cc8B(1ZgYZrJuU8hgLc$H@4P36bh9 zpDG-gjBZWo%Z)6|wo0iXLQNhU-i@2W*6JokQ`t+&M$<_1WOOt`zlWMmn%1FXBARaV z)yE2{0WSiBfxiLU0nYl{V0V%Io1Ww4;Ibv`^>kIN?6u5!ib7W5Aus@@@lPQaHIb7<0g6U!RJ^?>Lij8prF37{!H( zn-_E>)AUlCp}5QwvMKo$g83Qc*2aoJM8-OKBqC z>ae_;DlI;Cct9_C2p5M&%6B2ELMk3c_n&%_B$H=4jN&v=io$R=iWBur&EjM{EBU2o zATy!bU^Xdm_`!@Ro$3OqnB5Je_o@wnRE+8asp7mJ7!GUt)O*kgxwJOCbqYxiFQPkC3w# zPQDAZaRAB$dq=*LC-{m(hs;& zDZ8R@&~x?z-U;jjyc-w+3u-0Zahq0uzCAfP;Wk zF(d(B1`Y=<1EvC30n>r&fEmCoz)T>e`IA6O&{z~u+2#?GZ5}bXm`>_^@k~-jv#L@T zXzHl9D0S3Zl>TT^TIxbg9ThXFqi&@1_k^h%Wa?-VSNa=g>QIoe%OSWRWD1ooEEB_D zQTl?M64E$oE8?M$jNKiaWNHy8F(0zD2y_kkp^mGIF@|SJON_CP;!h=8Kg9~)#&MlN znzeRY!wZn^Lk2=|X{z+u$OyXkL?G4XPXQ?&$Q{n00h~eop&=$$ArR99nWNN^u}NKN zLN&sD?Bz+Qp$N3~|CUgllkBNu{%hM^+1{s|SD}*hUkNo$CDbgHP`XN}xhkO&&4eN* z6N;EjD5;}_lDeP4P|0Dm4KJm0j;@wORU;jSB}D|XXj)PVMC+C~;~K)MHt8RK@kL2# zN{?dB?z+yp=}qmNckP|a^x=6Yqf|G(<5?sGv4tu@lHn-#xe${HLQE!z z)KP*+9a&D8m!m+vCBir^VP`eCj=&W+P9Lh~=rGd9TGEEY%{pgF*O0YS|D-g1+|2ap znwi~al$tYzmm3{7ENWyxEnIxleJFkCUPhk2gmfW!36Sppno6fMGo6UZbRs6xN$Mz_ zqz*e->4B*uYXl6+HzM?=KRB$$G7~y$N0cH%2ks@jOO1tAN4YeC?B)7D*Chi@s?yzQ zN(VEl^i6qEQJvBd=TKU#S-M8XHL)lj*2G$a#DQA852X0vcb2(2%7h?|ikM6+Vw%_u zUsAVMF^#tU-cDjU5rDPB;F?%2KmWjs`O1-6uOWSIo?3{D)w*t!U>~Xk`&=d1K9ykE zW`Yru2}Vrg&)Q2}5$+*%|B+ynm~>dJYb12mFM+xyn61>h%%VnS)_Kg})O6Z+c^h@o ztt849Dp8K9MEO=F$^?|&rzsZ8Y)}glavSnh3gcm%$LivbJg`o;Yx<}g>>oFB8{W7Ibp5Om4Xqoh0I1VX zjVI;EAf+Rq`%z^_6Kao=0>=t>*)qHZtO9v0kgC#mfi$>T2c%YZJ+Kk*Js_>+-2kL` zWA>f>PvaaM2MsZ~GliJkI4*Ttm8-^Io|C$RrVg#}l(VxTF2yO=`{b2m*W%9|mHq07 zW3sof{}iW>l^Lt|@Yefz=(hObxUL}5Tu5SXX!yYP8yuTxbIZW8LFqpHSu20~rI)Fjlv9cfFxpQs1+9W$DGpgWeWPC}*{2GI?n_vB)Rt;K}iwE{oU$vxusWDrlzSqMhN_F*2<3>P=Gg&C5 z@KZ{kSy_JAV+@cibSw}iPHRedLggtSl8fFfV5bRI@d1N@(}C1J%>a_c&IWc=?v&oM zAa?~~MGC)_CwH>6Ic#aqD<)?(NvDagp`-V})x;6SG(l79mJwm0NrD1`~H>s|BM-}Po1o94hc&|eYUr^|qp`RY zGZalDi>vDqO=(M6ns9vhM6|50kA?YTaVR$7=J#leovg;|Xz#ouK67aKhK?Y-^r`bG ze2TUfc_gD}iHP z)MHQU*;rpqj~XqL#n^nj$=rM#c44U(XHSu_33<0OcCXrm9CpYVaa2Ao;-Y`(M0XC#d>x}i&E0KXdBMo#aOwl=)7I*5o zY@=cLITX(5H`zX;^z5_BKKJv6bJ*u47Xu2sp#dda)fZBj&KcYhT9^w?HZz}mvy1wP z9=Wuhv+I)8KErl7XK?VPg+Q6-bwS_2JRhK2g|a1n86{T?t6!W5 zyTtSS`10kZrASSIACZaJ?Tpx~ewiYyXeoCEBMv&l%37z~sV*P#Ce|56}YX>{0~e6O$29O6m(JET>9Od$@dnTaSIIb;_u-b#lOS=`UI5y<`eumn_yf z6I%Q?ER7;b))`tjgIrv!({Q;@y0}=U;o_}~LgsClFPb$RsCq{n3-yI19L~|On?pOg zhxc4Bzi^j_VP}opb$g@531yyd5qek80b8uksRh9FFaGkMVNOAfLtl z`a-TMyR>M(JFA*fx|79m`!XCiRd+lj?}+<-OZPjx$GD^aE#HxR7T4BgUWL*fHRlXg zRyuZAXQuN5wBIqd5>@VKT^ixTT0z*jd@0Qh?M@(0eCLfzBnkwI9Gosdc^XQp*`u+8 zAYN^mppOrCz_KX2&d+*;|K=5p_dLpJN)I`g?tb*o!+VY;1|H!E=( zeb%tE&zgmlZpRWE9ZPKC{-Jw;(ZG2)XV42e*m?H*^iwgL=^ptT=_Q-q{i@@fN4PV> z3)$$aCWP=JO@0wDZ%_8Oy1Le0)eKIi5-zALZJcW?Q#8j$i39bW+-&O)k)7}i0sfYJ zrPC-#L^@}5KnzO0D0P4;^m-M&x3~D}dA+I+tAY<~ra`A_QRdJp37v1_oG}j`w(52MOr;N zH}*c#l%Pt<_Cni;KI)|gEMdyZLwsXJoos5V{2uC4Kx-g9{h zS_3Q@Efkb2#$@zOe;M98VDcWHnYv=r-(M!HjOtg0LchEr+5KQL6nt-=ej5Szbwgz= z!=pY9jT!yKAX7KN)a?S3asC8MhIhndKb!2L$uv|2GCW!jEANqR>S*tU4CMur(Ry~N zTl4==b~b=f6zBinkbvPu2^uUal%PRD5fca+6!b2+3yI|Al3W5PcnRb%(GWsj5EL~O zsH7np6f7#VQNe;@8!Yq(ifvG=v_*{y7An}N*kX$sDq2)1|L-%iySH<1`}`Mj&)j!D z`^@aj?Ck99-mV#X10m_<1VWodo(nJyu~CGUV~GB=$n&!ZwF~WaGxQZgvbILV8*|Jz zBlLUJM55+Fh{jimn$HaR&DeVoqFtlaKF7qZ*1s8ciPi?Ef6|jYPic@k3C|Bx)J)7;865p zj&V7xu^dBeHolC~g?p3aWkO<6JlYdM@qfl_j&VyVHe6d96hHV{nmwWz>8C9yz7Fxm zg-DtWnvRwheCd($M1v=?FC-98OH4tnzs7PgjdE=)MC%KtfN*dhWPF7U`Wj|}$b2bE za&CSaW=sQjq>_Nk=&FDR(ksHaU}9Vdk&27T^2)jOsWo)B0cHI>Y-GK7h7E1))A$JY z44XtfF6=XGh9J_3Kg%<0=$SZ4kS@ocyuj-5*Ja3yuk_=WWIe84+@+gUU4Cc1M!&eB zrm%%_B=pSk>gw6$bMD5hasNT6d~pf4vEE8#fG7>h)Fk`bD{) z1~1-lBcJGs--!oaN<(>&SycScBYt*bHRBOKG;2LvHf!^it!4W6B-9MWKN=LjJ}7=u zQ2cL#;&%qczZMk#m!SBALGd41;*G0I9-5NX7uugH(PzDh?=D@h!t--zwZ*X1hL*sN zfL#iEHSAAdQ(%+v`-e2x75Gl=?5D6(bbTspGrkwX{tR}8uFryf1mEdau{Kyg>|?Oi zu#dyiT>De7_rs#BnjVDxCG1MrcG#c6J`39hyAhV=IVm6OVYlG>v#`&@Zh`$Z>`SmH zQ*kR9algm+ZTL>(o0nkUf!zUn5cXwQny-2l_BiYxVE+Y+GH*Hy`v&Y_l+`}iVX!Fs zCYrq151R`6HY|<%x?t%x>33oMua2-o z<^K*#*ONYmJp=m*?4Vxg17RYWw57U7s7r6i>^;Q4NLRB=V0l` z7tXQRANDfz!56^dZ9UpWuo9=10QMrp7EVJE=Jw*tLu|={btzZ z&}koD0edTK3+y!5hhdk)J_5T5b~Wsau#dsM47(Qg4cI4P_rq?0{TB8Yus^~9za4fs z>@%=qU^l{E5Bm~qE9`G!SHu1v?DMd@VCmv*C+runufd*y-3v>@fHz@#!(M>>F#&cE z?2lnDf*lE)2#aTeX#-)$!Ttz#66_FIH|(Xb1+bUFdSQpc-T^xdb`ES3Yz^!cunS;m zzi)(n8|kiqeFt_8Y!~b=VBdxP73_Pk=o_^6VbK?82VnQY9)x`h_5)b#yV_r2yI~K( zVxQAKgvGw49f9qS%k)QKe+>H(Y%=WMVbQj=ZdkNc?PFN9QSBJ)6xh#T%V7TjTMzqB zShNZ4I4tU3`y3W^s{IT0QP>l(s2lAo*ymw;VE+hv6813ce_+9AU&A7-oq|0L`wi^> zU=eQWhkpM%*zvI6!)C$$06PQr46G0KEUX_E>onaB+Z*NhQ`mUe4Y2)T+hM7EX~^;< z`VM((E`{W+xfJRrUT00?@c!BZj4U8;zU$Yjplbp?=zAglMGQUvuiAep)_4G|ug>(fc$h)KBvvL}TRs+8jM3 z-=;;Q>i${-Gz#_89O!A}cDVFVKYG`gu6a$Z%+xAOt=7~UOs&b(sBe_zLcO9)V~wd% z&nUHxrq*F<+fA+0)b^TMm#G~vwQf^8W@@KR4cD{vyr4R;^f<509QyB1uD|paT$`bn zSCzJA8jqPMK28MY6#szEN^AYC2W2H^Yzi>lqQ1QWH-Q{$S(X3-QI@%yWdo$tTli{O z7H|D(BtTCqpkK|=Wz^rHG7|9*hiMU_0f)TxCm$hsT2_XTJT04VhG-xmW6^_$oZ>8l zMhnH!Vm-wnjfNkz81es0qKnb;8}@YZ>pW|`^;dJWD=eT$EXMlJj-YQ8BX8=ihYh}A zkn%*tQv6wN>K1nuSwhD(WK zjXTV;=qa$4hM1M4d@mL4aRyBU=uL^5oNPeJW{6Hy)kZ~e#zNOptxH~#{6>X&5`R<( z!Ot8t)}fkG?b@9CicjHL$;grF=dEOBM8rsG#Y3NZ$WPntT-rh2*P9q$aNQ#^b?) zl_@9?x%*?r~?ny(I&LQq;OE5x$N2-ytnu zOJ}EX0d_?)R%z+qS|3-6S@70Hah99I=pt=G^ZjQCqv3qZ#q_B1BC#^^(VQ87)0>U` zL_R)0ium#0Hoqb+;=PiD3^%_rhCc5sGsKc@@uc^CjMx^(q??ve)(|6X)=l+s16TQQo{Aq~iVbLtpC~q=q4&i5 zPdAqTfnIa8?7lc$+dYHaX%7sSFD}cB$DMC2X)9%Ey3aV8-Dhsfj9c=Lmg0C>N-eSC z9wYOI)cVG|@e;x~Yt`u$l9$jt(VTT3h?M?-(n!QDt{4)c0u#mi)n#ZVGriOZh=yLclmUD=W#}{hO zw9s*Yb`_MTnCdze6#p@L0OJNxTCXQ4e#}^!KBgGy=gXk@X2ct*QJ3%q{(>L(PI;m{ z`~W+7C<0=Mk@FPB`+Q{*GRnw2zTqffnTL|EVtOz&9L(plox&~xpVR>~`g_!?%3mZX;c?6O-r?=}eMbY+B z7e&XEHM+h&4v$pF_l>YaU^l^1QQ-8eX%y@TSn854hoxIteuH=?>`SmT)qvBurrEH+ zgS`uOFKjdHA7NL+?uVs)_$}C9!M+2#6}Ag@8|-1&cVUmh9)bM`_Dk4q*#E$O0{ac@ zr?9AS?Ktcp*nh#&wTpklUJiQ#mZk_W#oa^$)URQ)VNb!*;Pe~VX|ShZXTyFEOJzan zH^AaiMdH0_y|JCm_#O}YFzh9;REC$rQXg{}?CY?2+(grU*kQ2m!~PidFf5hZr?6CR zbek!a+rMBhfTg`70roWPAXsX56i>~n6ML9E22)5LgDE6`BD+UuUxA}gKdljKN^Y?p zl8;)J8r7{_7eCFu1l>f{!il(^*~(##aLWMK(~2GGJqXKqoM5>`PKZq zaWn-fmS&FS4XEOa{;^2J%U$v$G#YybPhcBqW+E=+-D6>o_0pe6LhRP^@@Q`e}6hl-kF7NWM)}YG+IhgMy_eRw55iLz1_TY zl*CFBn^!FV0V9JAP569s#fh`$&S7dolh5pE>AC6a#=&>&Jc%P(&`U0-wYKiV8imry zPU<|0OPe>Wgf{+M^9qV<-q1~-E4GU8UVKWgD>?@*e+4{RX6sstED{-M6)Sn*WR(TQ z@2gjI;yeAmdUIT3zc*Ji90u6)BwfbYN^Om*JTD>L;*NuJ7 zt)P60OzT+{nbdPIWt#9wnZ+g9Pn4US@;YP!lpyF(m8xT~Ql<7!i*}S5SVmEBYr?J@smv2DH$XXDC zj#jZ<9$7}R!b-=Rc*8|zDfLAu_5On>)-Y9K_-`0wu5cb!h+XzhubX}txcnftu(g%4 zgXVAn8ffcUYDYyzjT);DT>b*cyJCvyT5Y+c(!nGn^1(c?tX!W)xh&9tnhYH1PG z*Bm#9Ua%*^{~pjH_J?yTsVZAUW7|cIyIGW8vuJb8Vq5i%aLCd{YZ0)u%>-4>iW~3x!5URH>z-hNWkkNSEum#O>-V-6ZL@p-7MM`fA?eF*`9S{4D)xGqM80wIr)5xs5=%@*V^wv99D3$f)ytP?lWSvq`iZNkNPe4^gKW6Hb(%hs=<3Z z=9bU#3z)7uQr~kq;L7rPXLVJ1y_N)#c58=%`y23!!Fp$1UHM`Rjr$LxeU(;gSX?W| zz_c&!zKkx1TE@V1!#^cJxj`!Isq}iHBx113TMqjkYz6EQ*t=oBg{_AD9<~NH9%(Ls9SFM!_D8UbVd>&t5$q^fFYH)Y zN{=QyDZS~i_ruPG{R!+!*k!P*V1Ej`7WN_7r(h|+TVU71(z)p4u;0M8z*1Q}1v?aW zJ!}%}FJQ;QJ`GEcI^77H2a5|gO@*+(g7v{Z4?7zc7jl~Jg6)7^1-lJ)4eT!1ZLqk& z)AT#o-LQvXUxhsa+X?$A>}#-}!S03q5*D}GHT6fm?1Q}s_AjubU~yrnDHZl@*zvIM z!`=e>Fsui*4Ym~aQCPY-NZb1}SlV7pIB9=_rM`vAgF21|gk zJ%r~}nc8)xMm@UZZZWl~rdD8Tx0@Q3n@r-r)6n%T9xM4YP1Ti zT3d{VT$O9{@EsR0<(a|J~Q;wRS07^i8Hmqa%QeYNX9H(yqsVKfd_Dn150ND ziCQT_@;t2yp^t>th!Axxi5krct7mb`p%}|bJzyM-=qO5ILpw7I9T zlD6zbVsYvCZ>Qn5-yxMG$bs^+6r>ZbM64ln{jOg#f;#WYb@(_=sQ9G~W?^xCso(GE zJmvF07*Wj+Q5&S&=Viom_$FryTJS?jym4aSipR*qFR8`jA$83+zd40wn9&u#>4@)7 zfeYSriVA7Dc-g*l%^8U;7c|d0)$ANXKgq!_NpZt2CDEF=0iVWCQ@}WfVg)=Y{obKk z<9QQ+@a-r^QLNa$Yx!EAh7jVm)F+nI_(w7jJKQSxk&C-o4`71N~cWUiM((xyIOL zUt-J4Noax1i#rW{h|q^%BXHw*;l87VU1Sd(E$sgACp2k&bjIqJs%F_Bi_u%fEDizTuwU!)yL|6 zl$WI|@hNIWgqn9z!Rd9gi&~wYwO!QEk%bHO8tR8%X=G9@&FaxBY8UNS27yfK#1JAx zm91_EaCG%%d?LH6JH)r0_|!A~L?^xulCX23mECk` z;HqaZF30a?Zkly!U@HxC=^6g6J@GA%h&mte1YRaoL$_fkw63O#Ze4V`IXnH$^F*0@ z&a|u+&CP?Bf#!DcvU^2yyDhP0wPOcTBqe=i8q&Sx|lFZ9up z%-CxY`d(;h2>n-t=oDnLSa&Ky@+^BULf;}bQENhoMi+_NHiW(rYaB)BKSJw=^<-!y zLNW&_2=xf=dQ+oY;p9=AX1L`sz6K$AjK9Z>ZAOSjJAE`7Kc5gG%KMn(y+#M1GN*0#ofnnH0DD@PRhLGfc#>8DxJ8~M34D82>p#!%)YLUa*!qLwg- zRAZq$(YklQuBCujVm#&3@PfmNdA^*QDm-VRnr_dfCrwcHjD@nSFX66l8H1+B;MI8d zr*Uzs0qf~n4xanJ2)l^9N)b0a7M4b`|AlqKeh)hh_6JxxPd*D<2Kzr)KWq#}aka3$U}C#o zhNba#JS<%)>kGRY_I%i%!w!U951Rn{EbJiIt*{ru?tr}r_Ep$K*f(G=hJ6e664-yh zUJ6TXV<;@0hYy224SPB4#n|R6U@wIo2}|v#9`;(;M%Xmig|L~hi(% zgM9#&&c`2wr5VGeun)lE=N?VVU{}CC1UnjbE9|wfJ7CAc((iJ|!S0704|@=H0_;by zxY4oc6WE(z>5AE8SUQh)!qP)DGGM=lodVkn`)dwtZ`j*lN5fJ&bRJLX(92FJoh(>N zrvR4HnGQ?o%!H+MsQ;pLXmm#DG{90ii(o08CRj@6Ay`W1H?Wir-ONkryb4R{biq>N6=FI^U;sPQg+-XJILw7&JIahhD})=?sLWbZ&s9beyo1P7W-kQwdAy zG{90i)LET8ak=}E#lpfs#OdK9#B+}gpOX;4_^-T_N552%F2Ra9*r?Cr3%u+-;K`=gGG=3M02 z6NTj26NUPTUi_rcz5_?0ej3dvNv=%~_0!gy8eIXF>r#uBT!*RcHMM=Fw&{}-uitrS z$1T#XxCNbW#r%8flcu@yuAN$}O|6#?R>7lxw7c>1lScgcF`Y10OeIt!Ti8N$PlE?v z_Wj;If|%$Yy0c5GF}WgDKy^BCx`BLib5yd4n_GXzIhboDSRtal;7f8t)fu3+oUL;;#-@dP#4^;C^Vew zP!yU5?NpTOpmZsU3re@5_@MMC$`UA45rNWp9N!WYWjnqlDaw2JMwJ>^>nnV7C`x}6 zw?|Q^%PmusDNt$^#Sf)PQ826!?}QGd^$e7Dh1m(ELs4jgqf=36$lawVKZ46{MHvgF zM^PMlvVqj;R~8BI6;SAMQ<9?G2PH*O9)aRelub}Pit;j)GDV>~g=-b%D=1Bh5|1X{ zrYK2J+7%@gN{6CQH{7Wx)B$%XN+pzTMOg@?M^VJ}CgchKHAG<90470E{trr$qPzzs zMNx3`jkv2j;OAm=%rto&P{u5=xn(+yJFkQF5R(Davdp zZHjU~ly*gV1WJdZJPoB&QGN%dOHtm0(yb^TLg`VI9w>B2Z=ihQ2BLfvWh9g&MR7yH zFCQ&y-3`T|D9fRE6lDXHGDX<|rB+eigVLlZC!n+`3jO@NT~V%p(xE7~K?ls!a-q(f;_ zltL)&ic$%sLs9O9(y1tIP`VUl3zTj}c?C+3q8xxi(>;N`pa)8Vq71kc<)bK9LrGDT zEGP~|xeba(QSO6MrYKK9sa2GhpfoAUpP{rV%4bm86(tVW3_BF%3Mie5QV69>Q5Hez zR+M%qJ&N)dD0KV|l+U+N=<-lNp}Q)R6eSl*ilQ_^aVW~uP&|tA7L+nY`3_30qKq7d z@==rmC~b-|A44f4?ln$q$tYAP#lVK!3dO(qBx+G zDau?ZwTkixlqN-a2}+xyya%OSQND)Kp(qKLqkI%46-t+)WJBpzlslmGC`ug^x}F=@ z_J^R*CDefO6qF=Ic@avAqPzyhp(x!@Jc@D#N|~bk_zIMdqBx;6DM}fXHbq$urCm{; zh0>uYe}K}dC?7!SQk0WWx)r5gGRj9$u7pDOM#RGO!XJKu4kbZRDxf4O%KcDM6lDVx zhobC;;!%|Mp_D1g7f@;yrQb-DkD`o#(xxakLupr(LMR=Iau<|NMR^cPm!dohrCU*+ zhti`cyP@Ekx21gEg_58spF>Gfls;FYd=zCk6o;Zrf#Ok=Dkx=&@>3|ain0kxlcID& zX;YMUp|mT?r%*Z+)})lrBX% z3#D68E**{XQIyG0=(i(*^0^&Kf}$*hlB6hWp`<9v4k!*q`3n?}q8x)#rYL={M)@d8 z5|k!Ixe-d6qIjXSD@r4j4n=tiN~fZ{2Bk|;jzj5IlwQ}Md=%wkD0qsVrF_OhNl=tb zC`pPk3rdQj+ylj-D6LRDin0kxnWDT3rB+csfYPKWC!n+`O7Af!A4M4fr9)B1L+Lb? zv9s&zv7KUx!)I(vy#7r!UaUn6F|s%IL7{I_8Qb7r)Ib21-uR1+L1!+O|Hl6LoV=oI zy?Wb6FemUyG%dZ&P=lUUZ!HO>Z}og0xY(Gzg4VPd1Fvv}dZzrx#vDQ>Fv{}jc#6@B3|Hs&#WQrSK5*DI<+ zx1yh5Mj=Z^`SdkI^khz2`kGsDjjo_I>RWNMqWI?d=gp~IELRhZH9!5K$Huhclk(I0 zcH6U|`57RXBujq!oB1ix)9NqsWA%K#SnD=?#^5jes=T{GJ>#SmskZ?zwiNG?hepfY zy65vlJmXXjYi-3R<@v*bn^HnO<8%g$wG8o;1!%M^*F6sm@l35IHl{y7xYQs7GixsTGGF(8B=N{8CsrRfjt2~CUk zqu7`POZi-6Zp9XTD=rGz3Jevn);4@n8y>ax;-^AA<8TS4)8cus>G^lM=fNSKaS*{; zA7Cxo)0+PN*`Go^qay`FH%1xd{UbB9SNHrQ;TfRzH(jAHl>;8IVJg&~tt|>27d&5& zPh>#Lk1Z|z*$YX<4@dra!#KA)_lX?LOmx5#@eEWo1Tkx&%;AJj}U7ad2VkW_jah~%LQZ2^9a-PJl*q% z5YJbLwW8-aIV8_ln4ab1S#UFAi06@Ft(#(GTOD|F=X0TXzEUvBmbN<5^t@5e^T-g- zSBbUgAs!bXw6Wm4e}{U;APjXuoq$n;SDB&T=$@|;i4VXB{Mw=gPrnO)9JX)k>ZHE{@SUl%_{rOKqJ=0-K^?Z%+Onn`_+!N8- zH6fm92ab)og(9(h{#UvV9-L>&R&2}~$VT~GYlc41^L%ZH=j+5;h2$2?eZwEi4E0Ps zYHSSM7;1RF&J6uW_k3N5=Txy4l?g5PU-rh?P|xEKqvko)^n3wj4NGc>=kZWuW9VLz z5eRvf{Nt%m&uM~bKzB`j94+Hb&sXc7#|zICceAc&P-LH(Ybw-!Xqg+LEHxEltzU*H zuY@S?hbUi$DCbd;i^cGKMTp`IQOZrl$a71Lj9)IF!0dCoG^GD_a3 zDAv?(6rT6sllG<$E*Kc*m~xX~#$ZDRAwq-EWTEU{K}&r<}0 zN;3UrnV}Q9=d2LV*$mG)g6Xz+&Ne-Nr+dy0@q8=8^VAT}x0;>@(SZWXts$Osp~lA0 z9!>l5uU>8cB($9K1d|dIIGX30p0CzD=Z1LB7i%5EC!MX0x$9VEsOJK~&KC*+%+ z({#`IA)Y;AEm0;2{b|Hn2ymf{Knex3+v3?{dUolaJ;F0U?RF>*Sn{l%6BR*;jftLC zv0$ue6`5&O>S-03Y0={^9aw`rt7&EEd zYSq*7inQ>GiE(rkr>A_A=RO*}bb^jRZD{;bArDVrt=>3!l8W_+R*Klb5$%<>I|m!R zGoF5|r$tOJa-;oTSM+|va^L$j#0LD_`0v~28tZ6Ux4srJy(ov{XeUUv<{59jz^y%s zLL(Tu|Ipm7)NweF?nSAP5-YZp)}n{pm<(RHfk$^JN*WZpPugTs$Dx4eZbIn?(b{Qc zyGR*Ej>M9rZ~HBZV(o3FgNuz>hEHnYj~&~NYD1$`+Ug9!(B13CUNGIP)496m>1O+> zSJJ|&+7pUmP5n0EnWAa${`kSE*p}ebZx;;7MlX7s2+@dIJW~$ww~5rPo@a`+&S98al#Qnz|86Kl~!W$4^>%IKxeP|xLpp{My@ zfeYV=mR>9zF4Mx3LcLqpwAb^s`9u zLn}QSqP!iVoC;BfQKz6U(sQPwSj%S)xY(GL_@vfS^~UE5L(8W^GBJS`HODNU*}CUB zX8FuB)1q3YWtE~>Q}+wc^bZzC7O&t)OXL`AXI@|{>U&>w#AmmmMus8RehOkax_wQb<=X<2LJ+3D4R zwQBXXh>_d1(oEe@Hb6;6olqH~GsW_}$s`4(RfX8t7~^bX{+zpJ8(#4EQ++LBWLjS; ze#rBH8|YIm>Q>wZF*b%q1hnk_`3(;nUXVL|En=kStcZT@1```|F*(8FztQ=Uu?~6= zeJx^;y8M-vmpBv|)@q`lvTVf~zNy77r`MTPP?YEN`ie_3yfZv*pC>afLQIa^?e=Bm z7C5~TfN9QBxAf+ouKA{vc#Y!nOl%KRcRu~^Yj^tQdr_d8xfi}Cl5P~+{LnroOz$DQj67HJEdKEf!*++1VdDX*z0ud4_Xg{KqxXJN*=wk1g}bCmxz#_0>ca-p4TKZZpPNjj!bm^Xp8-*lY9WR|tQW zj!E=Ns9v`-Qpc2EkT160vQn|fotc9IEAmk_QWhwwh(NY8-z5t?EMg=OD3ZcPJawT# zbTR=kbAC+?enVR|UldnB&-2flU$@v>S6)+3Kh33_xUy|EqHZrSPQY@RhRh#NA z%6I4bJkBX@(GbGKA**4dUGCDHOt-Hje`A+P|oFO_f((}e9BT!HuYKxP(8@x#FIdy_DoVqbU*L0R zW*7L1+^!N)zsl+&s<^}>MjBLi)^$V4OlN+kJ2xulb?3S%RKXNqWF+I3Lta^+0P@nTgugfMqi#lJ{4{OY;x zDNfX~ZB}`NDfn9X~P6=W_Z2Mlm~{TGXYkSXdl7~+_kLIHYcPqvcR(#)bTJGMUN z%_+_d6X_~-g;BkwK5t1rj`gA4L@~|)axoTjV|U7Q=ahzpGMyQ@?uag2#l>M9<9LG- zHJmEjC8NZkGS56yFbhcxu0;!>wF`>$k-ZsTJR=_?-Qt|vg6c5am6sEtdFs8Sr=SSc zYz%mnEajoHe76R-N}*!!&%?n@^LcXe#ZXP|2oT z-pGq(P$@za zV3+1NycC^_7_?e9!HiX>4wMqZ0Zt#vyF~9wDFgQ^3T5 ze#|i?9QQ;KDje!bRPb-wCN1Qi~c}u2dEE4(9>45K+%MAfz3cU>f`9#>bth~r^ z)QG%vS`>E8;%VlZfy`wto>MJHHcDKV1<0L0zt&$NM=tuc9LtDH zjF!dLQa(Z=^qtb88{=N;PJ&jkM)@-2Q98_;G`I`1ww$TOk=5la!Vz7bG&wPa8<-QY zI8$j{_QITP=2STo6d42JqggT8&Mcgfbvm+(^l7A>>N6XZJ&GnLdmcM<9N+7>Kz|m^ zt21+acrY-o&vE8r%EuRFt0J&rH!Ca~VY?!*JiigQOg|Z*nS*F`q|7XYDMC>mp7J?& z`x_#)WoieW^2OEjaU;08hZt=}I4P~F@QX7EYbxfpM=p1{{~?iaJ~ZN>6s(a&G`|yk zs%ZhlY>3fISu>#*6=lJ$ih`Ix&y!c{zjGWmF(`l55{S@Nl_H41=sC>Ad9O`7j*RF& zA~qN^9|{rJLdX#|F2|jDed@&VH~3ryxfwHzDLy-RTAq`p@$E2|H@MD?GBuMGZO6`! zs5uT~yOmCP@*1WEnK^ROnzZ3D;5m>`p?8^?B?FjET zFV|z2TbCTggxPA;P}FTGcDXEor9siug3CV#ms{%!8Y6WtsBKS9rg57@U~SjJisHuE zp5VER%=xv8J$3ViH*;dlTPo&eX%kHi*Tjl(B~8qYnWDGU>~&48)T2);1eA;%y5AvE z1($llc6EBmBQ_&sSYYmZqN~oy&kETsLWyxfH70sGIT07O!#6!dW-KnuaEo6f>QyjZE-drGth{hzeC~91v&~M}kk~1U4$b=%ShU;pjId061s@^R1W}OC?IS@s! z@*+YW@6-sr1XR)OLO-iYfkIYwsxei;v^CvhrHV9NPWwr)ZsyCUw--x6*Okx1O&tx5 zbwOtx)O)A-#Px75-v8)xHZ;^#&2DV)*HcYd#`3PkHRbcF=48#Un^)dojP?TwICF99 zj1yP(0%zEPNMwwfkIWygOydq1xv$3K7U$h6;z2>0+rPFrR!&nwRH!skmw z1`5SmoaW?N_-J#=(^7(>yv&G@^<<9CNsd4~uF2r^neH^PRvxLA0bl?(S}CrC8D~9~ zOkg#d8O)qNZys)AvO3haE^rvJtQ8Og>FB)W2xD0xI5K24Q5eQ-EAF?TDzx^@`oX0D zv%&ggbHGKxLVsO#`QnmVJQN?hRUkr7Rrjq=IE6&JumgD9E^*_S7>Zd44^FG+Rt4St zD2{MOL}qR=?pc{ypOaBuUo}UZikr9MWTQx{<&_d^S$Oj2H&o3P_cd8%v2%JcnIev! z))+dX2G+3@i#(o{OwX;V@sCRtuYC<)ZW8ciEN<|7%B#e+8;cv`NTpL#P#)nsf!Uo7#$bp(W~OdBPVX?v^s)H z7wys4Syj4k1T#f?pKbAT#a?*@}4(Wb@kNx61>bp z^JO*Gh#TRo@5aDwzYWvo`WF?`>xz7MeNpk^nmIZ1=QQ9(U|-d|TAvShde!@7%XFk^ z$^N>!`E|(?$4|UI)gY#oS2f`HQjBpxwZCBYUAXq=z~Dx%4*$93^$l)X&5>fL^5wxf z^YvLM$9N3h^yKRB5)8k4p}(eKnj`gkktg`T5VqD|*RZ%4d7>FOPkBj0Rke?P8Y1uH zGbR0&I8&x=3SA#6d9A7mb{rCs*I3<9Wo~y`N_rZSs;Ys{;s)7&h%fR0E247h<(J~d zTDrB+k8aZEtM|`oti#=jzB%*f-(BU`99F5)Kj&^e0%feeNp4oTa~+}BD1zJ7xOoH zC}51e<^i+D%AG8b2{R7q<;DLkj=m@YPI$rC4}jGths3t3s7I$0y4GG^131Xr8b;jPt%>ecH;WM0{Fx?{N*ujetYw9EXO zFRIlWh}j_(SNr|7wBgR#*g1`ra_VJ>9AWNT^BIB@T_#QNBTJI-R?Wj#JvUJ0cQaZq zb}L~@MQEu;f@0?|zL;wh;arIKyvyqhrY>kp1oke`FC&?%nw%QEm8b^qoTI%>-{DaQ z4VHeu=(f|wr`@13mVG+_O~k%XQ0uSJ^JhlfkTM>%3E$O@wA8su{hJ#cc>P^SEy*>< z&rK~Kf4zU4e|GAewDIGpuaKR2G5WJP4Pv|M8_bP0J5~t=+^Y>7jX-x3AY}H7{Izvx z@ipkJ#a-Yc0i)#gbR%k#9U&Gr`s)^#mRC3W-HXucr)js`;>&dSQZuGHGH?_9)ch=u0=&!2#x{{BO}ztEv{+RZ*9}9+#UI8~EJ$R0M(T)zc1j=&Y_P59)>}Wp_>EJj0iMAA7xH zoH@J*xD&lT$a*=LFzeZDEqccEQ3D#tl)CwiwPrL8Fc24ruBWKbH$57S&(%0@-ePQq zxz9&vl;)Vu;Dd-ap4buAKU1u_uq8 zn;xu-LjrAjZq@9%@;YjmX1ks+4t;>0peU=L0hes1DISM=s(Z?cCg6U( zTP98|)?1zKLk>&=1+169Y-lJ+I?6gLDzFRF(OdVP=a`z2KeZqeHt?c1r8U#hThIM8 zWZ&3%rZ@_+Zq3eiXHOM7&)u|6J$*EqA+cwO9qN`e5(E2@*qKOjX#K8ByMA1fWl0@B zeq2g=>crIREh2)cDJj=q4=ru{4dW-IQ(RfU+?dO-!M*!W$xedi&=NANKlLPzenvT(Ui)ZS90@6oU=F`J z*U}jr{g^s~!O@RAr!qMDnQS40!!rW3I~W|LJD0)jM3GbnbDAThToU0g`GkG>5tq*7 za+zEilWSmdE1BGSCfC8__AHF}aOQZYPu5&*Zw9+$km( zPw(HfERp(yp-e7?$+?)^bS78LtJ$w zncN{JcY?`j|KZhdB9j}%04ondkb z-}2f)GLuVZa=A>djL9`Hxs^KitJ$w zncN{JcY?`jXL$9S$mB*bxk*gU!{jQM+#)8oipjMzx$R7DACo)6ncOKR7ymzAI~dC3Qka~J$xUZ+)l9C5$*o~> zo0;5hCfCK}jxo8@Ol|04 zondkb`imZnrVyzeBr~~mCYQ_P%9vaOlUvE;)-$;dCbyT#9b$4Pn4A_PU*us|zllt4 z6qB38IrNM>^BOfHwnl`**n zCbyEwt!Hu_Ol~ieJH+HpFgdLcuYMDm+$bhDiOG4GTm_R`#N<{nxppSEoyqNEaz~h4 z50i^KkJk={Fu5^I&cWooOstJ$wncN{JcY?`j{dx79$mB*b zxk*gU!{jQM+#)8oipjMzx$R7DACo)6ncOKR7k@sl9Smi1DNN4AM zNlebeFo{ztraFqFxqFgX{Ko6h8_nOqZ-Tf^iwGr8SNu8YYXV{)gN+<+mx zc96v6(wJN}lbgxpYMI<}Cby2sZDn$uOzr@aJI>_JFu8Jw~EQNGr8?dZXc67!sL3G zT-;^6b})p=jbU;QCg){xl}v64lWSvg8=2frCbyr-bu+nBOfG&XuN@3!aw$yC#pI?l zxoRfY#N^g6xy?*&Htn5X(l&d7_S{9F}XA*m(Ap6GPznNx17nXV{%)WTqlz| zz~qiIxid^I;m5pokj&)LnOrWDD`RpEOl~EUThHV=nA~0_cZkWIU~<}UUi~IAxlv4R z5|i^Vxe6w?h{>&Da_vlRJCobTa+8>xhsjkixkXHF6_aaca@(2QJ|=gB$@MU~ zxRJbeFoemCVR8;8=Vfx0Ol}F2Yh!X7ncPk$x1Y&%Gr3btF8)ehI~dC3Qka~J$xUZ+ z)l9C5$*o~>o0;5hCfCK}jxo8@Om4tcympYp)zQM`7L%;eIUTrQIH`a@uHK{U$QGQA}jxdExXc96v6(wJN}lbgxpYMI<}Cby2sZDn$uOzr@a zJI>_JFu8l$(>+w+IU|5CNjBEOl}gB z^DwyzCbx*mtzvTROl~`q+sEXNFu5Kk7njCs2Sb?L7$)ana$Y7^$>f$Wxi%)Zk;(03 za{HNFHG-}SPrd*iz!At58! z-}G2b`yNcujgl(^7tY__KALvn&Aqe_T#~!N@K>j9$d90($&w6$VhQ&?uVlnrG{v5~ z4BQP2?gDT{3@!;=8H2kVToZ$%?R|#94F$K0$sJ^HN$_`)!TlKAplthcz6#uR437Mj zGPoPsk-wiY zINFb%W^mNM>}GJ3zxNm%)$dnK?)+Qr%lT6HyN1E_1LtONIp7LHIEQ0wP``FQxOE|1 ziX*r`r8in`3gW``ry9WLz&$rrZgZsmnd;+^&LAk3aQ>3u?@MqOl|%=xcnV~{sNeX3WEFvm2*6}T{?rHSR4tckD%k=g^1Y$ z?tPslui?@?2K}F4{^AKrH^|>j;Ld_cFAQ+u{G9@K7nnPW0-QLmhS`oboxv(%5!(@l zTgT+u!*M~|QHhi`gG(ru`J-_}xb0YjiYf*3FR$bVfeSZ2$c4V9q?gu>KU(7O7tY@R z_=_*?r6o?YFPAKx5f1SYsa*2IaY5Tl z`u}kCu@(N}=Je7!DkOIixN!R=^`|v{$sj0}aO2Y?#4KlUbbQ;$KHHe9_?fB%)vASjk_^+xp(bC>=0R)HH1Zl%ul$MU~Nz~$*Itr0F=I$oB8nOq}%Mj9Vbe>Goc5EM%|e?zbxYr(xZKf1qb;NkB&qq_^6 zKl0bFwwHGKg6RH6!HHLA?EEbOx2DeC-ye0x&fk~d`ZPrMHyTdTbtam>Gl(n)H>)wa zzp>yR(V1xe(oue|g8OD+bbqOEa@9SOvGX?_T-&1P{-}Om)0t@gsD8fy*Zbb+{%AkH zL1&`*qvO#7;Qn!6bbqwHLzeW?a_~nBRtwwys6L9p6x<)(ADzD~)foiE5^nz(ii9?T z>wF-(zpLQkKRTnk3!6Xkcgcgjv%fH@pS}+Lx2t+- z3tJ@@X}r;ebYBAVlSd>+$Hj2|s6RLYrgxj7pZ@K7V8&+Ii+*h ztg!y*R;ddg?WNtkCc3|JtX~V}U7aI3T=^|R{yqaU>+$IR#$)|QbOu4Og!7jRf3JbN zU|n>7G@f*Td0gir<&XNm=fQmPM09`Gf=hg|m*#v*atZJsE`N!L{us)e8xFVdtji{)5p2q&MNpdvL63*Waa52yI(tfu^a)}ZAt;dPe1JC!; zF8xh(f1hD}twS;tq$OPbsJ(m!ZqRQf8>#(0hV9J+^TBq>MH=TMVmn+rdTG;lO3oaI z1&tGF-1IjvnY$!MpW*UH?PVI6XJ3|_nZGdSzXx@Oww0D}=lfaEj|Oq!(k(-}SG>|o zTedqW-JtEb8vb^G`Mb_V+71`|eGTS@-$(aXf{v#O%Fhra$)5hP)*? z>icv~_+#1gJt{*0LCz}3DZSv0e->5fA5IxwB@N{-q=xc2-f=wsjOrTrIw zv_$ha{QX|ql!MXzje(CHU_RD4qQjL7jSs#7GwZL?-+AD|53JB!9HMO<<<~JGwvG-k<3Vf?^4` zy~hx<4&0Ix(fv`o`ZbuFzm#00zh{FXycMkQ~iipE0YgK*os1a7X5iPfHqmE3S};ry+Eek3kdtL-g0YPaG1 zZHB)yU^d1}ZbSrsY0$sy8>?O3PjZpkO9RTq3ua$`$wg`}c_rM%YkX)qg9fA(NYEZ1Ubg<+i)yJ*K)3X=HYG2@w7GxuA`O!T8f5Eg2 zkzAzqOy}M2g6VZhbblWB8vthJrP2L80DsSbNxCe$zm4#BHJG=DN-om4laAk>VX@i_ z{LvC=dujij17_NfB^PP`Ab-tZ9@V)>{<^`f2eV{&bbl@2ehp?~lH?*Cr>Q>5!F)49 za%Mjnbljr;YR=`c+Cu!%5-EQ)PuK)z<`t5Qw7ul-VK7hYTr__#fO#l6y1xa8-Ua6B zQIezmJly`f2nA6#I#xS$t>h>l;rfFgVgGo1Y^?TTisWc~5Y8V(PfJDq(gIvKe+#gF z>V#PB8T`>gpW*ybKiLV!b%W$0l^>1k7J_+S=aAj7{%9QgPcQ`&qx<_F>n{a!-;L4p z=S4zKfcavQ4x}4yd)H9LZ;92`I3*XUK4|z_lo6|qbxSVNdGd19 z?!3( zxk$$&D!&iGTvsl+Nb>@z;9_RSYU3&-7peWx{ZdE3q*Y3e=JUhl?>2O_8C9{``dZ0F z+CPS1d*8#(^smK|i_{;y4}a6|jn%ICiR7{(l;3gq`{(jl?VVQ1LJaXo^qtVl){7nY4z=orASAf~W;0}Tr^jP$C)8TIENB(wz`ND=He=!?kwF&s6CDQ)kKwJ)(W*d(7j}2fxw&5tAnS~_cPJcCGHY1g*F_OvmeY8HXQkT5zJ>c z9QpeW%(c%(&mXk|Czu5`9Qj)TW|s{|{@wy})`la0gErzggFjj#?Z3p$0Mly2QMo(~ z=CBP%{=NV+Vv~Kk6Tnp2aJ0SmgL#p`?E!O=!S#L){TlvgiBvAMy*Xf(+HkbJYr*`< zhNJB`3g-M@MNgNw5nu{!ILe8 z!%_Kt0cPY2(ep>#L@*0%I7)W~m|YC+Eif@#?b96$CXd0DgL%S+qx`)H=3^Vq0qz?x z6JE5>Uk;e13~nu$w`@2%|M(cp=wI8XI~hzPgKGw}$A+W!d=Si_-$YNB+TTbpB{rM` zTosrt4DMAhXBpg}4)j;}qa|8@>IbvIhNJD>2IdPJj@o_9Hp~O#kCsU3QoG6nvy{QD z1@k8xj>`EcnDbwXo-T1Cz!chWw7q^XPup;`9Xr5$Zo^T!XTe=UG#LR{H_I4Wy4Xr_k($n!R-Na(uSjU(EI;lwaNISC0e-@f_cJ* zqx`)H=BN$l0Cy5h>dxrtQn|RnEM;(O!Mtn3QT=`f=GtA+)1~o-6U+)5j>_)|Fz?!M z)c!sLbIHrm)1~se7R)Rgj?!HKW{V9+<@YL>?-<Tm~tDA^4AFFMH`Ox%ROMeu;D1(m{-wG@kdLva&d#X--e@fSA%(# z!MzLStPMxoJLvbQH~i5OEq}AXthM1Ne_OyDwBe{de-38YAEKu#>J3b}4JYai%!@Xh zs5dZQ*l?7;m`;on@kdLfa-sa?fLYAoTEV<(!_ofsE|~N8*rz)JOd*5wgIR0C(e`cu zbCkiI1T*rr==r1imIHZ$6yBUwa?#ZFtZrk0x+9wINFX~U_Q6usNJ6hGy09_`6GXm!OUZDOTlcj;iz2R z0P`J#JO7WdniGGtMB3lTUkR9I2DbssyEYtc?`L2JziFTDXfU&EIP$ju%+od;ZO0BU zpEJ0#U{d$l=g$phF@tLbv&V*`?KlXg_n)GtOZ)jHU2JzXm2!C>-iI7+u1%vuJw14!%;i<9L&fr`}|D= zQ^nx!2lJv0N9D2y%r^|K@4Gm^#2+ou_M<{DOKms@e5?g?kimTpX7qc})1~s83}&$n zNA0f_%o{cw`8y0|@cYrzrS>u!%nTcj{LKTi#fGE&y$a?V8;HW9p=~DS!0w&Lfqx_YF*4YLlJuQIrI!Sp?1pYAX)g*F_e>j$&JhNE)c2Ieyxj{JQG zCiQ6a{84?l!7R1msNY=+<_#N;(mf1j&_~hJC4VEql-O{TzbY`B7~C!}-!Qnof5-R~ zf3!sEHz?g1VAe9YEnq&g;Y59aN$s{z*9~T=4M*)@Eto&qa1L-s!3_J@KHXF>^K3ZU zj-_CB*>F^TZ-MFiN%VASUU?W8zYRz2Wigm74DMAhU)XR|elee7o(q4pL}~|=ZVs5m z46YT-s|@a4FfqrXr%V0XU@%S_j>@?N%xW8s>TMI4qc)ra+(|I0pGD6frRxT>)P^H} zYr!0};mF_TU`GBUdb+e76TvL7;i!IBfZ1ikk-xXV^!}%Px|e_{wBcww{9vB8;i%p3 z0CU!cBY%UAy8nu;D1(ZD78$;T+)pA8%&@-c<3u|6A6!P-zilkxE$# z0v0K&fJoCMZ9`X*7AS%tv;hL$n*v2p7K@^QR5k(G6hx3Bplk{%Dk>rh3MwihA}A^d z`bDXV{@-`*y=fZS+-Ujz^E`p{+|Qgjb7tnua_1&N=aDbod{vh(_1VB|)ZkLU?E@3^ zgLi!i;M#!6*5Jha1npa#csoCFhk!F#^sBEjVQz?FbGpuw>noB-42qW64Rj$UB$H8}Rm5-|HTIQs7> zn5I8_&zD>$FxeU$?VAB+p9UAje8GfV@}4iba4>csxMDDSeBcg)3A*e(U)Dz(Fb)ll zewhYlzXr#CbR0~ZU%cll>K9DD4_pbD{TdwG!ErD_ziQ{(2FyqeE(-ec!EDpuIDQ-e zQ?9|Wyg~oN`WJ7$s*97Q{SEUgy!oomFU;2jrbvUMzByp_XmDaY2UGWV@A*<+3os@Pj`ocNGsg#RC76R6 z9NWQ3Fd<9R0Eb%modO<@GDaIS;(~s;=H>pAJls1}Ewb%pMJn z`5p#SuE9}X&>z_M!JDt@>?1cA%nS{Vepw9Wum%?e?lhP-e|pcCTrV(1K5%ou9Ms@M zdjS*jm-l?>zi=>vecxDk*{H!W-+f>%`@q%x2j}bX=Bv8)Onr%9X86D@26NB{ z?j)EH@eNAV=ga;P4rZheTt1kM8XU*VePGHpIF>iaua2a{o3HBpLVamqN`2tggE_6i zu^n6i6JE=EzO=6|m~0J>`euOHromC)0Wjqn9Q%1t?K)Cly!oomFRZsjFeMrs{kIIv zaUZzzV8ZKo&zI%x3&!CCHw{dg21mc_2XjS(W4-}(;TOF5^6D2bB^n&{Edz7V2ks=8 zpnBf(WjWe_N%MhofLW=*(Y|e9PHS+?_X?O!^}XB2b~ONu!v}5}n2j17?b`?Df(FNY z{ru}l5qR@eUAN7{A8e z^QFF~U=lSrme&TR)CX=onBzWh=fSkN*}HwrHv-H^4UYcH2eaM>ZV#9XK5%|b(4O(; ztGf2gd`)1c`M{NeIiSHApzj2j(5Bw=jRF@5CSQYN94Y~`UxQ;iI1VQ07Vr6zYXc@- zgJU_e!EDpuqQD&hQ@5G-eCg*FU=lSr+Ghi^OoOAoGBBq#IO@9sCW2p}hgWs&fPU72 znWn)-fhz@b)CcY?nD7?f^QC=#!Q}hEm4Ml&!Lb}i!34GRo-h5^227d;NBbOL)@pFf zcL$iuK5%t!#k>h`zN)Ja+Ls1qjs{2jR)RUM!O_0+V8UB@&zJG4FBpdg$9$)O*`dKP z--BT4hI-F83S0{?=^C5?TsD|(K5z%X1l;C5U)mQ6CS8N0ec52jG&t(p59XQ%NB@Pi zt|OW7=Bv7PKz$>@Ec1aY19M)3W4pQrCNj)>zHA3ZFhv?1?VAJUfCk5WPk;$(<2_%| zFTtc~aH3y=S?dG01Iz^45PZZ@#K)FVtrPv&;vs49r;#j(#o&6VcIozN|MLn0yT`3S0@8 z0~#F5djd?;+r8&Yt`iu$21omf!EE$_+Xv=?51d~o#5KJ6@>U;4Fw-IXYcun{tG5egQGqNn6(-l?b`w7yaq>o*TD4Z;@v*hn+Z&b1{Vcx8JH6qoB`Yg zFp+m?=W7Hr!v}6Ln4=mT%X=0~XoUBC$wh*3XmIq)G%$NKxF~Rk!31^no-esJU~C#3 z{Z|BLj|NBk4uc7}(|f+;Lcyf_z-5EksKL>H`@me$;Mh(By48^e;LTTc{gT{ZFeMrs z`_VEm2Q@hAI|(Kv(tExvM>v>~8XWV@2eZ}(ZU>mNK5*q=I(7GMAMg7O0Au%oD+aUH z2W|(LlRj{l!L;b1ZC?bKG!2gXISw$3H8}ctBbXCDa2LRY_VjKa^Nj>E(g!Xd%t{}) zZD3CNz+DCt+RF#~z>L)3MEe7?R)b@CcYrzV19t^Xo8H>?^#Wtl;Mh)!z^wFv+Xm)@ z2FLz;0Zf}d-tD7bdV#TPaP&(tnDrVQ_3Z(3-Usd)n25W)+eg3Xz&L#1rh!?n!Lb~B zz?}7gD+d$aSKGe6U~C#3^DP3iR)eGec7Qpn!BJm1nDBny?W4ZFU>q78^-Tk_QG;WB z>;rSw2d*4UoBrDN^#Wtp;Mksv!IWum9FO*cDc9gQo(J8H{R6!D@;0uH1XJn*w;s$1 zAGix(+6?fXFU!#jOtuf)3^02%IJSesV6JI!YzHCtV7`GjU)A}A`UZoUp}|q#VlewP zxF~SP!89G{Jzx5z6BwHY$9#*xto4E00p_$1+!ZiwqP*M3cG?S!LxU6j4a`Ojj{5e2 zxvas_FLiaOH@x|(uHM*x2ZJfr;8?%&!0hvZI|{}xT07sSUqyIwmhzEG{Rh|FHjRdn;gJXQz2MYO9Q(nX*Wj4%H82q-@Ak1AIxs~V9Q)-QFb6a^>N^1@Xpr}O*-qPlN%VoU zftjblvAk=+9M#~M?^!S*@!svDpTof@ zM?RR98eDsD+rS*x;Hd9Bn5N0z?IYI-Oqvgz1I%I#j_q$Fn4>;$XTb!eXxrBYOri$I zdb5Ek^?_Rt=C}sOa-0VfGT6I)%r_iNng&NdJHRZ~;MiU^f;p+d#eusFrmxw%eFkue zU`jPO#@+Q`PHS*c;I4q_W$~Ub%V7dDO@m{;rC<(gaLo5Km^P{2^Ci~{OpyjB#u+dN zeBe%iX`1FeU$O21W7FX1mm)A5ec<+ixvas7b;S_O+wtbBy7?8$I~dG7AGoz(PHJ$> z_cEAHL%rwA@(uu#ufb7Y37CC8a7V!e4D+5Z^@V~-^MP}KS?dG01Iz^tj(+w_M}6SU zS9SHl{yP}VG7XO9CCHAGk6wr+whAfax^CyM3aag2~t5qF`SMm;*j=C&08A={;ZSivW|Y!5P5K0CPZt zqrMYhTHNP7U$(ypFhv@ih?8Ir_`sb2)70ucUyhfZz@%$%Y%keh)@yLow+GC54UXlw z2Bz;Q@Afg@L@*^jaLd3P)!=B~Sujm)-t!fH0h6x53BQ0@?*q37%w-KO3ij0z?}yZn&CZPmNycNLxZDz)4*)=fja=E+y^cw6XzK5=F6L3 z(!k8|fm;dYs1Mv(FfHub`9^@TX>e@!MPRmRaP;2+Fy%gQL1W+-y!oomFKo|gU`jMN z+P4hMaSe|4od**-)_cC>BEi@-IJT=|FxxaZ+IIkq-#G92QeRUri5eX3vw>Oc1Gf>( zNgue&V8R{V?PEFmf+^DASZ{N{?9t#@j>BO5#(U3~TvIS6AGncVN;Npzw;s%KAGq^i zT1@b6AN56m8L7dE^*NZ88XVifHZbRX;I4t`m8ET;2~4pDM?cR4vtNVby7oAjYZ@H= z5|WL6jyGS`^>enXG%%$a9R0E$%t;N7<+uzcJjZ*!w68B1hXzOcrh(bx19uoqK(63vl<-ZRXLb&r}uo>FZ+VY_kk+`vrmJg|Biz3EApN%xu#%@8XWCQ z2UF?;w;s$%4UYL<2GeGucl+qSUSMn*9Q74}S+Bvd-u8gGputg}-z416!<(<_+6(P7 zg2~t5m~RP~Jw9-U!T3$q&bKKToex|Zm>E8Bi^1&I;8>31U;>K0+ea=G%wP?U{%koNfjbYT#T4)MQC|d@ks2K1K|Yu=4UX&h{a^y__nt4gP%w54j{YkKQ>MYO zU+xD}uEDXqK~u3GhBsf;wP%)hFqnB79PL{R=C}sOe9wbvG0l6v)E5E9ropkiMPSM_ zIO^LE=86VK`vM-oegxipRp%G#O9V4RgJbm+_9cRuropivm4ex) z!BO8)Fn-gu^KA;osKGJcbTB0v9R0Tp%wY|V^?Mpjiy7YSBNqY2uEDXq#b7pSaI|k9 zn9DwJb!Vd9@aC(!_Cos-!Ib#GEdz5@gQIFoS*I>|mDpz?FeH?E`lO zOs7Y@+sASY0F$l3aom~#W}gN}eMiCg&GDWu^)&@ESc9Yg>|mB@aLl(1%t;N7?cg$) z&_})7C)zWZks6$szkn&z;Mkt`gDKbGSl*z=Fz>{huj<+}%bNzKM1!NgWnd0#aMX7i zOvqgC`LZ10U`A?i!Y^RTG&tI~AIudEj`ju2!?=JqU*7zZ2xgiF$9zk{9MIsH?+Gvg z^S$Rwzl4HG)8Lq|1I$VvxNTt0YH-ZA98Bcn+V&a2Ow-_mU%(vD;Dlem1T65LFZG3j z8SDdR2eZrvt_;j+4UYC*0TW)TZC_t7*%}=6%>c8_2krovD;gZ*OTZJ@=faz>>e@5? zX96=#gQI<=VD|gK9S2i)q4#{Fpsxj(bPbO7WrJC(!LhtMz?|0LM7@CtU*z3B=Gzxc zwg$(1XMid5f!hz}f(A$X{1&6X;mucd^~QXSVDdFM_TLgP`!qO~_b8aUOSJQC0mi7o zu^j1O=J>#^1anw}W4u2NCUmKH`&iycFb)ll_Dus*rol1a{a~*7z=b@C{Ykv}s;=H> zpAF114UY9u2IjN|M}1eoL@e{3FUzX~ldr)s-x4r;G&t%z4Ca~!M|~m7(O&T8t2)2X z&*@+m`@n4kb5?_6|0o9&zQTLHw68CiY#+E8V0LJ5QP6h~Ou$p#^JRHM!K7<&v@aXX zS`Ci*?f`Q|gJZq{D^VYK^Hp7auwA8tDXp4I6^ZfBbiCIqj4F$gf}_L2!tOK}V{~Z= zsR^d&er=129GP9S9HZO%Bt{Z_VyXw5oM1@OB^oVl!)W?tyqDLLq=}MW2s76A8Px}M{nnL!uKyDq83nn8xnrDRx0^eKCFeOE*^ViWoUvj0-0VC@mc2mww(fusDPvOR ze>Ymn$YSD@g50qMw(PJNs4Wb;eezwsJB_Hweu$&6$d(mmak6k>k=?p>8!<#bVzeV? zgg&9GeX?E3$j+1^GQuKE|IT@Z1sNl93rD~qNZMA@41=SO@I>&>ZFi&39uHd>RCtwVL@ zBvVo>GfGJ|r|QxSrev!=Q5SEt#u}51W+XD;nk+FTr9%0D5p6x1IqJe-O-nNAlMT$m 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